-
Notifications
You must be signed in to change notification settings - Fork 304
Add the PLAN-123 citation-trust foundation: fail-closed evidence contract, six first-wave packets, and resolved-configuration bindings #3445
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from all commits
Commits
Show all changes
53 commits
Select commit
Hold shift + click to select a range
d0cb640
Add PLAN-123 citation-claim evidence contract and first CT-001 packet
jslee02 ac0c074
Harden the citation evidence gate and add the dense-contact packets
jslee02 54bf588
Correct the CT-002 verdict and the packet provenance strings
jslee02 d728157
Record the current branch state and packet-writing constraints in RESUME
jslee02 85e5db2
Add the CT-004 articulated energy-drift packet
jslee02 9101d91
Record the CT-004 slice and refresh the resume state
jslee02 2c33043
Close the non-string evidence bypass and correct the CT-004 disposition
jslee02 77c0801
Add the CT-005 PD-tracking packet
jslee02 ca78b09
Move the PLAN-123 evidence narrative into the owner plan progress log
jslee02 ebbbb85
Expose the World's resolved solver configuration to Python (WS4)
jslee02 12de896
Add the CT-007 high-mass-ratio packet and record a default-solver fai…
jslee02 ce5142e
Draft the CT-007 default-solver issue report
jslee02 3d24f32
Add the CT-011 restore-equivalence packet; all six first-wave familie…
jslee02 bfa4f0c
Draft the DART 7 PR description
jslee02 061cee3
Point the resume state at the finished branch tips
jslee02 c6ab409
Merge remote-tracking branch 'origin/main' into feature/citation-trus…
jslee02 b716e90
Record the filed issue numbers (#3442, #3443) across the branch
jslee02 4980a9e
Identify the CT-011 root cause: the state vector is translational by …
jslee02 cebf5a8
Record the opened PR and issue numbers in the working docs
jslee02 6c094df
Close the Codex round-1 validator loopholes and bind reviews to content
jslee02 f4e9e5c
Close the Codex round-2 validator bypasses
jslee02 f198a29
Regenerate every packet at the round-2 commit
jslee02 d2a4c6b
Close the Codex round-3 validator bypasses
jslee02 5abeeb8
Close the Codex round-4 validator bypasses
jslee02 ffe03a4
Regenerate CT-001 at the round-4 commit
jslee02 b3fe1c9
Close the Codex round-5 validator bypasses
jslee02 15e5a3a
Regenerate CT-001/002/005/007 at the round-5 commit
jslee02 dd02028
Close the Codex round-6 validator bypasses
jslee02 8a778f0
Close the Codex round-7 validator bypasses
jslee02 f005f1f
Close the Codex round-8 validator bypasses
jslee02 c23d7dc
Close the Codex round-9 validator bypasses
jslee02 3fe6fbf
Close the Codex round-10 validator bypasses and fix the CT-011 instru…
jslee02 c7cdb59
Regenerate CT-011 under the full-state instrument
jslee02 dd68714
Close the Codex round-11 bypasses and generalize the instrument fix
jslee02 25d4d52
Regenerate CT-001/002/003/007 under the round-11 instruments
jslee02 46a0ed2
Close the Codex round-12 findings (loop checkpoint)
jslee02 c117b9e
Record the pre-merge test-all gate at the loop checkpoint
jslee02 706e65d
Close the Codex round-13 findings
jslee02 654193f
Close the Codex round-14 findings
jslee02 4499cf8
Regenerate CT-002/003/007 under per-step trajectory hashing
jslee02 08afdd7
Close the Codex round-15 findings
jslee02 4f7f28b
Close the Codex round-16 findings
jslee02 962b49b
Regenerate CT-007 under the fall-through criterion
jslee02 4272dd1
Close the Codex round-17 findings
jslee02 9086f3e
Close the Codex round-18 findings
jslee02 5ee6d30
Close the Codex round-19 findings
jslee02 92d976e
Close the Codex round-20 findings
jslee02 1cce306
Close the Codex round-21 findings
jslee02 009e507
Regenerate CT-001 with the seeded energy-injection gate
jslee02 b5fe247
Close the Codex round-22 findings
jslee02 f3e987c
Close the Codex round-23 findings
jslee02 efd0e8b
Close the Codex round-24 findings
jslee02 933433a
Regenerate CT-004 and CT-011 under the round-24 hash contract
jslee02 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,304 @@ | ||
| # Contact Trust, Citation Reproduction, And Solver Observability | ||
|
|
||
| ## Status | ||
|
|
||
| Durable DART 7 design and evidence contract. Mutable priority and execution | ||
| state live in `docs/plans/123-citation-driven-simulation-trust.md` and | ||
| `docs/dev_tasks/citation_driven_simulation_trust/`. | ||
|
|
||
| ## Purpose | ||
|
|
||
| DART should be an auditable multi-solver research platform: a paper, benchmark, | ||
| application, or user report that makes a claim about DART must be convertible | ||
| into a reproducible scene, a branch/version-qualified result, and a permanent | ||
| regression or documented limitation. A benchmark must prove which method | ||
| actually ran, what physical quantity was measured, whether the solve converged, | ||
| and which fallback or substitution occurred. | ||
|
|
||
| The goal is not one universally best solver. The goal is a trustworthy | ||
| speed-accuracy-capability surface across sequential impulse, boxed LCP, | ||
| exact-cone contact, rigid/barrier contact, VBD/AVBD, differentiable paths, and | ||
| future methods while reusing one model, contact, state, diagnostics, and | ||
| evidence infrastructure. | ||
|
|
||
| ## Existing DART 7 seams to extend | ||
|
|
||
| Do not create parallel replacements for existing DART-owned surfaces: | ||
|
|
||
| - `dart/simulation/body/contact.hpp` owns query contact data. | ||
| - `dart/simulation/compute/rigid_body_constraint.*` and | ||
| `unified_constraint.*` own current rigid/articulated contact problem assembly. | ||
| - `dart/math/lcp/lcp_types.hpp` owns solver status, residual, | ||
| complementarity, options, and problem/result vocabulary. | ||
| - `dart/simulation/compute/world_step_profile.hpp` owns | ||
| `WorldStepProfile`, `ResolvedSolverConfiguration`, and `StepMetrics`. | ||
| - `docs/design/simulation_solver_architecture.md` owns solver-family, | ||
| model/state/control/contact, coupler, and public-boundary rules. | ||
| - PLAN-080, PLAN-082, PLAN-083, PLAN-104, PLAN-110, and PLAN-122 own their | ||
| existing solver, differentiability, and allocation work. | ||
|
|
||
| This design promotes shared contracts only where a second consumer proves the | ||
| need. Solver-specific mathematical state may remain local behind adapters. | ||
|
|
||
| ## Branch boundary | ||
|
|
||
| ### DART 7 `main` | ||
|
|
||
| DART 7 may add clean-break internal architecture and carefully promoted public | ||
| value types. It may add a solver-neutral contact-observation layer, exact-cone | ||
| problem family, contact-aware inverse dynamics, one-model/many-state execution, | ||
| and optional companion integrations. Public names remain DART-owned and | ||
| backend-neutral. ECS storage, solver registries, device handles, and reference | ||
| project names stay private. | ||
|
|
||
| ### DART 6 `release-6.20` | ||
|
|
||
| DART 6 is evidence and maintenance, not an architecture backport. It may add | ||
| tests, benchmarks, demos, internal/opt-in diagnostics, and compatibility-safe | ||
| fixes to confirmed defects. It must preserve C++17, pybind11, installed | ||
| headers/components, ABI-sensitive layouts, default FCL behavior, OSG, and | ||
| Gazebo/gz-physics compatibility. See | ||
| `docs/design/dart6_citation_driven_contact_trust.md` on that branch. | ||
|
|
||
| A defect shared by both lines receives two independently reviewed PRs. DART 7 | ||
| code is evidence for DART 6, never a mechanical backport justification. | ||
|
|
||
| ## Citation claim contract | ||
|
|
||
| Every external or historical claim is a row with a stable identifier. Prose | ||
| alone cannot close a row. The row records: | ||
|
|
||
| - exact source and quoted/paraphrased claim; | ||
| - source publication date and DART version/commit when discoverable; | ||
| - target branch and current commit; | ||
| - scene/model source, license, conversion notes, and content digest; | ||
| - requested and resolved detector, solver family, integrator, precision, | ||
| timestep, substeps, iterations/tolerances, threads/backend, and fallback; | ||
| - initial state, control, seed, perturbation ensemble, and measurement window; | ||
| - physical metrics, numerical metrics, timing methodology, and allocations; | ||
| - baseline/current commands and raw machine-readable evidence; | ||
| - disposition: `missing`, `reproduced`, `fixed`, `not-applicable`, | ||
| `invalid-original-setup`, `version-specific`, or `unresolved`; | ||
| - claim boundary, limitations, and independent review evidence. | ||
|
|
||
| A row closes only when another person or clean-session agent can reproduce the | ||
| disposition from tracked commands and source-bound artifacts. A visually | ||
| plausible result never replaces a text/numeric oracle. | ||
|
|
||
| ## Canonical contact lifecycle | ||
|
|
||
| ```text | ||
| collision candidates | ||
| -> canonical ordered contact observations | ||
| -> persistent manifold/contact identities | ||
| -> solver-family problem adapter | ||
| -> solve | ||
| -> typed solution and convergence report | ||
| -> state update | ||
| -> evidence/diagnostics snapshot | ||
| ``` | ||
|
|
||
| ### Contact observation | ||
|
|
||
| A solver-neutral observation should eventually carry, where available: | ||
|
|
||
| - canonical ordered body and shape identities; | ||
| - shape-local feature identities and local/world witness points; | ||
| - normal orientation with a documented A-to-B convention; | ||
| - penetration or signed separation; | ||
| - stable manifold and point identities across small motions; | ||
| - deterministic tangent-frame seed/history; | ||
| - material inputs before combination; | ||
| - source detector and contact-generation policy. | ||
|
|
||
| Stable identity is required for warm starts, friction history, deterministic | ||
| ordering, gradients, replay, and fixed-capacity batches. Identity must be | ||
| invalidated explicitly when topology, shape, feature, or policy changes. | ||
|
|
||
| ### Solver problem adapters | ||
|
|
||
| The observation layer does not force all methods into one equation. Adapters | ||
| may produce: | ||
|
|
||
| - velocity-level pyramidal boxed LCP; | ||
| - exact second-order-cone/NCP contact; | ||
| - barrier/variational contact; | ||
| - AVBD/VBD row systems; | ||
| - differentiable snapshots. | ||
|
|
||
| Shared geometry, materials, identity, and evidence stay common; formulation, | ||
| iteration state, and factorization remain solver-family-owned. | ||
|
|
||
| ## Impulse, force, and wrench semantics | ||
|
|
||
| Impulse-based contact methods authoritatively produce an impulse over an | ||
| integration interval. `impulse / dt` is an average force over that named | ||
| interval, not an instantaneous continuous force. | ||
|
|
||
| DART should distinguish: | ||
|
|
||
| - raw contact impulse; | ||
| - average contact wrench with interval and origin; | ||
| - instantaneous force only for formulations that solve a continuous/compliant | ||
| force; | ||
| - explicitly filtered/derived analysis signals; | ||
| - event-integrated impulse across an impact or gait phase. | ||
|
|
||
| Each result states frame, application point or wrench origin, interval, | ||
| manifold/contact identity, requested/resolved method, cone approximation, | ||
| convergence, and whether the value is raw or derived. Core simulation never | ||
| silently smooths or relabels impulses as instantaneous forces. | ||
|
|
||
| ## Solver resolution and solve report | ||
|
|
||
| No benchmark, demo, recording, or published packet may identify a method only | ||
| from the requested option. Extend `ResolvedSolverConfiguration` rather than | ||
| inventing a second resolution system. | ||
|
|
||
| A comparable solve report should include, where meaningful: | ||
|
|
||
| - success/failure/maximum-iteration/numerical/unsupported status; | ||
| - termination reason and fallback/substitution; | ||
| - iteration and factorization counts; | ||
| - primal, dual, residual, complementarity, and cone violations; | ||
| - maximum penetration/minimum separation; | ||
| - active, separating, sticking, and sliding counts; | ||
| - warm-start use, rejection, and reset reason; | ||
| - regularization and physical-compliance values kept distinct; | ||
| - per-stage time and post-bake allocation counts. | ||
|
|
||
| Unsupported metrics are explicitly absent, not silently zero. Solver-specific | ||
| details may be nested, but cross-family fields retain common units and meaning. | ||
|
|
||
| ## Evidence packet and Pareto comparison | ||
|
|
||
| A tracked evidence packet binds: | ||
|
|
||
| 1. source claim and corpus row; | ||
| 2. branch, commit, build configuration, dependency resolution, and machine; | ||
| 3. scene/model digest and exact command; | ||
| 4. requested/resolved configuration; | ||
| 5. raw trajectory/metric output; | ||
| 6. semantic visual evidence when the claim is visible; | ||
| 7. statistical method, exclusions, and environmental validity checks; | ||
| 8. result, limitation, and review record. | ||
|
|
||
| Performance comparisons use interleaved same-host runs or an equally justified | ||
| method, report distributions rather than one run, and compare at matched | ||
| accuracy/residual whenever methods solve different formulations. Changed | ||
| contact counts, sleeping outcomes, state hashes, or failure policies are | ||
| re-baselines, not speedups. | ||
|
|
||
| ## Required initial corpus | ||
|
|
||
| The initial sidecar is | ||
| `docs/plans/123-citation-driven-simulation-trust/citation-claim-corpus.md`. | ||
| It includes: | ||
|
|
||
| - historical SimBenchmark rolling, dense-contact, energy/momentum, and | ||
| articulated-control claims; | ||
| - heel-strike/toe-off force artifacts reported by exoskeleton work; | ||
| - exact-cone/high-conditioning motivation from compliant-to-rigid contact work; | ||
| - Nimble differentiability and performance claims; | ||
| - RobotDART reset/concurrency/research-workflow needs; | ||
| - PEEL and Fibration Trees planning/collision-query workloads; | ||
| - Behavior Policy Learning reset, controller, perception, and randomization | ||
| needs; | ||
| - MASS/FARMS biomechanics and experiment-data needs; | ||
| - Gazebo Plants codimensional rod/plant gap; | ||
| - relevant DART issues and existing DART 6/7 benchmark packets. | ||
|
|
||
| The corpus is expanded only with a bounded acceptance row, not an open-ended | ||
| request to “support more papers.” | ||
|
|
||
| ## Exact-cone and inverse-dynamics direction | ||
|
|
||
| An exact-cone initiative begins only after the common corpus and observability | ||
| foundation can measure its value. The missing unit is a DART-owned cone-contact | ||
| problem, not merely another class named ADMM. | ||
|
|
||
| The problem should separate physical compliance from numerical proximal | ||
| regularization and support at least one reference algorithm before public | ||
| promotion. Proximal ADMM and primal-dual interior point are candidate | ||
| algorithms over a shared problem; they are not separate public engines. | ||
|
|
||
| Promotion requires: | ||
|
|
||
| - materially lower directional friction error or better conditioning on named | ||
| corpus rows; | ||
| - deterministic and fail-closed behavior; | ||
| - no post-bake allocation for the promoted step shape; | ||
| - matched-residual speed/accuracy evidence; | ||
| - stable warm starts/manifolds; | ||
| - serialization and requested/resolved reporting; | ||
| - finite-difference or implicit-gradient evidence before a differentiable | ||
| claim. | ||
|
|
||
| Contact-aware inverse dynamics should reuse the same contact/material problem | ||
| and return torques, contact wrenches, feasibility, active constraints, and | ||
| residual explanations as a pure query. It must not mutate the primary World. | ||
|
|
||
| ## One-model/many-state and companion layers | ||
|
|
||
| A baked immutable model with independent State, Control, Contacts, RNG, solver | ||
| history, and scratch per lane is the shared prerequisite for high-throughput | ||
| planning, RL, and differentiable rollouts. Reset semantics must explicitly | ||
| choose whether solver/contact history is preserved. | ||
|
|
||
| Planning adapters, environment/sensor APIs, and biomechanics should be | ||
| maintained companions unless a second core consumer proves a smaller shared | ||
| primitive. Gym, Torch, JAX, OMPL, dataset formats, neural controllers, muscles, | ||
| and clinical interpretation do not become core dependencies. | ||
|
|
||
| Rods and shells belong to existing deformable/contact solver families and reuse | ||
| shared distance, CCD, material, coupling, diagnostics, and evidence contracts. | ||
| They are sequenced after the trust foundation, not parallel feature expansion. | ||
|
|
||
| ## Determinism, allocation, and failure policy | ||
|
|
||
| - Canonical ordering and identities are stable for the same model/state/policy. | ||
| - Baked repeated same-capacity steps do not grow World allocators or allocate | ||
| through global heap/raw malloc paths. | ||
| - A solver failure cannot partially advance a World without an explicit, | ||
| documented continuation policy. | ||
| - Fallback is recorded per island/group and cumulative across a step. | ||
| - Strict research modes fail closed; compatibility/realtime modes may use | ||
| explicit configured fallback. | ||
| - Cloning, serialization, and reset preserve or intentionally clear all | ||
| result-affecting configuration and history. | ||
| - Unsupported capability is an error or recorded substitution, never silence. | ||
|
|
||
| ## Public API boundary | ||
|
|
||
| The common path remains simple: configure capabilities and step/query the | ||
| World. Advanced users receive DART-owned plain value objects and options. | ||
| Public APIs do not expose: | ||
|
|
||
| - solver registries or polymorphic implementation types; | ||
| - ECS components/storage; | ||
| - CUDA/SYCL streams or device pointers; | ||
| - reference repository/project names; | ||
| - factorization or reverse-pass cache ownership; | ||
| - third-party tensor/framework types in C++ core. | ||
|
|
||
| ## Verification and promotion | ||
|
|
||
| Every behavioral slice requires: | ||
|
|
||
| - a negative control that failed before the fix or proves the metric is | ||
| non-vacuous; | ||
| - focused unit/integration tests; | ||
| - deterministic repeated and perturbation-ensemble evidence where thresholds | ||
| or chaotic outcomes are claimed; | ||
| - baseline/current raw packets; | ||
| - text-first physics oracle plus claim-tied visual review when visible; | ||
| - at least two clean independent or role-separated reviews on the post-fix | ||
| state; | ||
| - branch-required lint/build/test/downstream gates; | ||
| - an explicit changelog decision. | ||
|
|
||
| The plan closes when the citation corpus, contact semantics, and evidence | ||
| packet schema have durable code/docs owners; DART 6 dispositions are promoted | ||
| to branch design/testing owners; and any remaining exact-cone, adoption, or | ||
| domain-extension work has a bounded durable plan rather than an eternal task | ||
| folder. |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On the
push-to-mainpath in this workflow, after a squash merge and deletion of the topic branch,fetch-depth: 0fetches branch history but not the survivingrefs/pull/3445/headnamespace named by the packets' fetch hints. The pre-squash target commits can therefore be absent locally, causing_git_object_status()to reportmissingand making the newly requiredcheck-lintfail onmain; explicitly fetch the recorded PR ref before validation or otherwise make those target objects available.Useful? React with 👍 / 👎.