Repository navigation
test(recon): offline reconstruction-repeatability harness with committed replay evidence - #227
obvious-autobuild[bot] wants to merge 4 commits into
Conversation
…ted replay evidence Ten frozen cases over Hunter's recon at PR #220's snapshot, MoGe-2 stubbed analytically (no weights, no GPU, no network). Findings committed as records: - identity cases pass byte-identical (repeat, warm cache, reordered frames, re-encoded JPEGs on the JSON outputs; the mesh digest moves with image bytes), - the capture refuses a duplicate keyframe id, - guarded history (pose edit, interrupted run) lands back on the fresh result, - the history-dependent wall is real and stable: a same-size, keyless cache edit reroutes the pipeline and reproduces itself on rerun (max 0.5 ft). Results replay 10/10. Co-authored-by: obvious-autobuild[bot] <262744130+obvious-autobuild[bot]@users.noreply.github.com>
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
--replay is now a gate, not a receipt writer: any case record that fails to reproduce byte-for-byte exits 1 and names the disagreement, and a record whose manifest digest no longer matches is refused with exit 1 instead of a traceback. Three controls drive the actual CLI as a subprocess (Popen, so conftest's model stub cannot swallow them): the clean witnesses replay to exit 0; a deliberately mutated cached result (a wall-metric figure rewritten inside the baseline witness record) replays to exit 1 with the case named and DIFFER-marked in the replay receipt; a manifest digest drift is refused. The clean pipeline/cache receipts are untouched — the regenerated replay is byte-identical, which is the point: the evidence is deterministic. Suite: 13 passed (3 gate controls add about a minute; each replays the full manifest on purpose — the slowness is the evidence). Ruff clean. Co-authored-by: obvious-autobuild[bot] <262744130+obvious-autobuild[bot]@users.noreply.github.com>
|
Flagging for Hunter's review — the handoff in the PR body names the two judgment calls: the negative control's mutation point ( |
The gate's failure rule is now stated where it is enforced: every case record in the committed results is a witness, and the replay exits nonzero when a fresh record differs from the committed one in any field (verdict, check, observed values, notes) or the case count changes. The only non-witness content is the per-run scratch path, which frame-id-duplicate scrubs to <tmp>; a "measured, not graded" case is exempt from within-case grading only, not from replay witnessing. The README carries the same definition plus what the gate controls prove. Verified on this commit: 13/13 tests pass (clean replay exits 0 with the committed receipts untouched; a mutated witness record exits 1 with the case named; manifest drift is refused), ruff clean, and the real clean replay agrees 10/10 with results/ byte-identical to what is committed. Co-authored-by: obvious-autobuild[bot] <262744130+obvious-autobuild[bot]@users.noreply.github.com>
…omplete zip(strict=False) truncated unequal case lists: a witness deleted from the committed record replayed as a clean 9-of-9, an appended forgery as 10-of-10. Membership and identities are now checked completely before any per-case comparison — record/fresh name lists must be equal, duplicates inside either list are refused, and the zip is strict. Two new controls drive the actual CLI: deleting the last witness refuses with fresh-only naming the case; appending a forged witness refuses with in-record-only naming it. The clean/tamper receipts are unchanged — the regenerated replay is again byte-identical (10 of 10, exit 0). Suite: 15 passed. Ruff clean. Co-authored-by: obvious-autobuild[bot] <262744130+obvious-autobuild[bot]@users.noreply.github.com>
What
An offline repeatability harness for Hunter's
reconat PR #220's frozen snapshot (experiments/reconstruction-repeatability/only; no other files touched).manifest.json: identity (repeat, warm cache, reordered frames, re-encoded JPEGs, unrelated history), guarded history (pose edit after a warm cache, interrupted model run), sensitivity (intrinsics shift, measured not graded), and the history-dependent wall (same-size cache edit withkey.jsonuntouched; duplicate keyframe id refused).recon.depth.rescaleby an identity pass; the realmoge_cachekey path, cache files, and the full pipeline run as-is.run.py --manifestexecutes all cases and commits records toresults/;run.py --replayre-executes and compares byte-for-byte against the committed record.Findings (committed as evidence)
DuplicateFrameId)Replay agrees 10 of 10 cases.
Checks
Not run
obv/basescanning-004only.Co-authored-by: obvious-autobuild[bot] <262744130+obvious-autobuild[bot]@users.noreply.github.com>
Handoff
Complete. Replay is a gate: any witness record that fails to reproduce byte-for-byte makes
run.py --replayexit 1 and name the case; manifest-digest drift is refused; and case membership is checked exactly and completely before any per-case comparison — the committed and fresh name lists must be equal and duplicate identities are refused, closing the truncation where a deleted witness passed as 9-of-9 or an appended forgery as 10-of-10. Five controls drive the actual CLI as a subprocess — clean witnesses replay to exit 0; a deliberately mutated cached result (a wall-metric figure rewritten inside the baseline witness record) replays to exit 1 with the case DIFFER-marked; digest drift, witness deletion, and witness forgery are each refused with the offending case named.Remaining: live MoGe-2 (weights/GPU) is unrun by design; the same-size cache-edit finding (0.5 ft, stable when repeated) needs a product decision on cache poisoning.
Review: flagged for Hunter — the judgment calls to check are the mutation point chosen for the negative control (
wall_metric_runs[0].ground_height_ftinside the baseline witness record) and whether the 0.5 ft same-size-cache-edit behavior should be gradedfail(current) or reclassified as a measured sensitivity once a fix lands.Checks (from repo root):
Resume command (fresh checkout, branch
obv/products-l2-recon-repeatability-20261010, baseobv/basescanning-004):🔗 Obvious Project · 🧵 Obvious Thread