Skip to content

test(recon): offline reconstruction-repeatability harness with committed replay evidence - #227

Draft
obvious-autobuild[bot] wants to merge 4 commits into
obv/basescanning-004from
obv/products-l2-recon-repeatability-20261010
Draft

obvious-autobuild[bot] wants to merge 4 commits into
obv/basescanning-004from
obv/products-l2-recon-repeatability-20261010

Conversation

@obvious-autobuild

@obvious-autobuild obvious-autobuild Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

What

An offline repeatability harness for Hunter's recon at PR #220's frozen snapshot (experiments/reconstruction-repeatability/ only; no other files touched).

  • Ten frozen cases in 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 with key.json untouched; duplicate keyframe id refused).
  • No weights, no GPU, no network. MoGe-2 is replaced by an analytic stub (deterministic in the frame id) and recon.depth.rescale by an identity pass; the real moge_cache key path, cache files, and the full pipeline run as-is.
  • run.py --manifest executes all cases and commits records to results/; run.py --replay re-executes and compares byte-for-byte against the committed record.

Findings (committed as evidence)

Result Cases
pass — outputs byte-identical baseline-repeat, warm-cache, unrelated-history, interrupted-run
pass — JSONs identical, mesh digest moves image-reencoded (vertex colors carry the re-encoded image bytes)
pass — guarded history lands back on fresh stale-cache-pose-edit, interrupted-run
refused frame-id-duplicate (DuplicateFrameId)
fail — the finding same-size-cache-edit: a cached map overwritten in place (same shape/dtype, key untouched) reroutes the pipeline and lands 0.5 ft off the fresh result; a third run on the tampered cache reproduces the wrong answer — a stable, history-dependent wall.
measured intrinsics-shift (key changes, no stale reuse)

Replay agrees 10 of 10 cases.

Checks

uv run --project experiments/reconstruction-repeatability pytest experiments/reconstruction-repeatability/tests -q
# 10 passed
uv run --project experiments/reconstruction-repeatability ruff check experiments/reconstruction-repeatability
# All checks passed
uv run --project experiments/reconstruction-repeatability python experiments/reconstruction-repeatability/run.py --replay experiments/reconstruction-repeatability/results
# replay agreed 10 of 10

Not run

  • Live MoGe-2 (weights/GPU) — the stub stands in; invariance of a real model to recompression is not claimed.
  • Nothing merged, nothing deployed; draft PR into obv/basescanning-004 only.

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 --replay exit 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_ft inside the baseline witness record) and whether the 0.5 ft same-size-cache-edit behavior should be graded fail (current) or reclassified as a measured sensitivity once a fix lands.

Checks (from repo root):

uv run --project experiments/reconstruction-repeatability pytest experiments/reconstruction-repeatability/tests -q
# 15 passed in ~2 min — 10 witnesses + 5 replay-gate controls (each control replays the full manifest)

uv run --project experiments/reconstruction-repeatability ruff check experiments/reconstruction-repeatability
# All checks passed

uv run --project experiments/reconstruction-repeatability python experiments/reconstruction-repeatability/run.py --replay experiments/reconstruction-repeatability/results
# replay agreed on 10 of 10 cases — exit 0; a mutated, deleted, or forged witness exits 1 naming the case

Resume command (fresh checkout, branch obv/products-l2-recon-repeatability-20261010, base obv/basescanning-004):

uv run --project experiments/reconstruction-repeatability python experiments/reconstruction-repeatability/run.py --replay experiments/reconstruction-repeatability/results

🔗 Obvious Project · 🧵 Obvious Thread

…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>
@coderabbitai

coderabbitai Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: bffc2c6b-b68e-4686-83e7-81f762bc4d5b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the size:XXL 1,000+ effective changed lines. label Oct 10, 2026
--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>
@obvious-autobuild

Copy link
Copy Markdown
Author

Flagging for Hunter's review — the handoff in the PR body names the two judgment calls: the negative control's mutation point (wall_metric_runs[0].ground_height_ft in the baseline witness record) and whether the 0.5 ft same-size-cache-edit stays graded fail or becomes a measured sensitivity once a fix lands. Replay is now a gate: any witness disagreement exits nonzero.

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>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ effective changed lines.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant