Skip to content

[Dream Cycle 2026-10-16] ledger-signals: witness verify-report false-positives on a legitimate historical report + witness,verify scan #188

Open

Description

@ruvnet

Rotation

Slot 1 (DAYINT % 5, DAYINT=20261016) → DEEP=ledger-signals, SCAN=witness,verify. No bonus modulus hit (% 25 = 16, % 75 = 66). Session commit (baseline, after git fetch --unshallow): b2abcc14a632d7e0948962065a7c6c8920cf306c.

Ledger Check

docs/dream-cycle/LEDGER.md last row 2026-10-12 (daysSinceLastRow=4). Fresh checkout was shallow (git rev-parse --is-shallow-repository → true, only 59 local commits) — the exact defect class already tracked by issue #149/PR #150 (open, draft, mergeable_state: dirty); unshallowed via git fetch --unshallow before any measurement.

dream-machine ledger signals (no flags): zeroMergeStreak: true — the tool's own documented worst-case default. Ground-truthed via pull_request_read on PR #177: merged: true, merged_at: 2026-10-12T15:45:01Z. zeroMergeStreak is actually false (last merge 4 days ago). reviewBacklogSize: 16 open, unmerged dream/* PRs, none overlapping tonight's candidate file.

Checked #149/#150 (shallow-clone git-show oracle) in full: correctly withheld by prior nights, not re-litigated. Checked the two most recent ledger-signals-surface PRs in full: #145 (2026-10-01, splitRow pipe-unescape, issue #144) and #154 (2026-10-06, blockedEvalStreak missing majority conjunct, issue #153) — both still open/draft/unmerged, their defects still present on current main (confirmed by direct code read); not re-proposed. duplicateDirections: [] (the 2026-10-11 dedupe-by-night fix, PR #167, is merged and present).

Deep Dive

Manually audited every file under docs/dream-cycle/ for ## Witness heading count. Exactly one file, 2026-09-10-compiler-parity-report.md, has two such lines (93, 118). Live repro:

$ node packages/cli/dist/bin.js witness verify-report docs/dream-cycle/2026-09-10-compiler-parity-report.md --commit 3edd426f6c9c4b1e80235f7447dc863e749345cc
✗ witness INVALID — report has 2 "## Witness" headings at lines 93, 118; expected exactly one

Root cause: the file predates splitAtWitnessSection/witness verify-report (added 2026-09-15, PR #111, closing issue #112). Its first occurrence (line 93) is a forward-reference placeholder — "See STEP 16 below..." — written mid-document before the real trailing section (line 118), not a genuine second section. Independently confirmed by hand that the originally-published report_sha256 (1c9ec5548ffab1370fadcaf24961a5779b0eaf52690b9314a6483d5e572bec2b) is correctly reproducible from the file's current bytes. This is a tool false-positive on an already-correct report, not a corrupted one.

Scoped across the whole corpus first: ran witness verify-report against every report with a ## Witness heading. Only this one file throws the "ambiguous headings" error. ~24 other files also fail self-verification, but for a different, already-partially-known reason (they predate, or don't follow, the file-embedded-triple convention PR #111 introduced). That is a separate, larger conceptual change, explicitly not built tonight (see Recommendation).

No existing corpus-wide witness verify-report regression gate exists anywhere in the repo — this exact false-positive could recur silently with nothing to catch it.

Hypothesis

Given the committed report corpus under docs/dream-cycle/, when a new governance test iterates every file and asserts any file with more than one literal ## Witness heading line is on an explicit, documented, hash-verified grandfather list (and that the list contains no stale/unreproducible entry), then the test should fail today pointing at 2026-09-10-compiler-parity-report.md's ambiguous heading, and pass once that one entry is added — without changing splitAtWitnessSection's existing fail-closed ambiguity behavior (a separate, already-passing test deliberately locks that in) and without editing any already-merged historical report's content.

Evaluation Receipt

Real evaluator: npm test (vitest run && npm run test:governance).

Baseline Candidate
vitest 809 809 (unchanged)
governance 195 198 (+3 new, 0 regressions)
lint / typecheck clean clean

Non-tautology proven via 4 live negative controls (grandfather list emptied; stale entry added; fabricated entry with wrong hash added; real entry's hash corrupted) — each fails exactly as expected, then restored and diff-verified byte-identical. Full receipt in the PR body and committed report.

Darwin Results

DARWIN=not-applicable — a single new regression test over a fixed document corpus has no evolvable population or numeric objective (same judgment as every prior one-conceptual-change fix on this surface). Entrypoint probed live: npx --yes @metaharness/darwin --version responds (reachable, not blocked; unpinned-npx supply-chain note already tracked elsewhere, not this candidate's to fix).

Evidence

OBSERVATION (corpus audit finds exactly one ambiguous-heading file) → OBSERVATION (live repro) → OBSERVATION (byte-level hand reproduction proves the published hash correct — tool false-positive, not corruption) → HYPOTHESIS (frozen above) → MEASUREMENT (1004→1007 tests live before/after, 0 regressions) → MEASUREMENT (4 live negative controls) → INFERENCE (independent critic, separate context) → DECISION (critic: CLEAR + 1 disclosed gap, closed same session) → DECISION (ship; ACCEPT).

Reward-Hack Check

Independent adversarial critic (separate subagent, no authorship stake): CLEAR, one disclosed non-blocking gap found and closed same session. Confirmed diff purely additive (one new file; git status --porcelain/git diff --stat empty otherwise); no existing test/fixture/gold-answer/threshold touched (report-witness.test.ts's duplicate-heading-rejection tests re-read in full, unweakened); independently reproduced the grandfathered hash from scratch. Gap: first draft's grandfather list was a bare filename Set with no automatic proof of authenticity for a future entry. Closed: converted to a Map carrying each entry's own byte marker + expected hash, with the reproducibility test now generic/data-driven over every entry — mirroring @dream-machine/ledger's legacyPrefixDigest fail-closed design; re-verified the critic's exact attack (a fabricated entry with a wrong hash) now fails mechanically.

Security Review

No prompt-injection, MCP-authority, or credential surface touched. No new filesystem-write surface (read-only, fixed repo-relative path, no traversal surface). No network/exec surface. No regex (no ReDoS exposure). No production/runtime code path changed — new test infrastructure only.

Scan Findings

witness: witness verify-report false-positives on an already-legitimate, independently-reproducible historical report because of a pre-tooling forward-reference heading. Fixed with a narrow, explicit, hash-verified grandfather mechanism — splitAtWitnessSection's fail-closed ambiguity behavior is unchanged for any genuinely ambiguous future report.

verify: no corpus-wide verification gate existed for this tool at all. Tonight adds the first one, scoped to the one defect class discovered; the larger "older convention can't self-verify" gap (~24 files) is scanned, confirmed, and explicitly deferred.

Competitors

SLSA/in-toto and Sigstore/cosign (grade A, official docs): the standard pattern gates CI on verifier success rather than treating it as informational — the posture this candidate gives witness verify-report for the first time. Sakana AI Scientist / OpenHands / DSPy-GEPA / SWE-agent / AutoGPT lineage: none publish a comparable self-referential, file-embedded provenance triple to benchmark against (checked via live search, grade A sources only); no hits for a corpus-regression angle on any of the five.

Gist

GIST=LOCAL — no gh CLI gist capability this session (GH_TOKEN invalid) and no gist-creation MCP tool available. GitHub MCP access itself works fine — FALLBACK=false. Full report committed at docs/dream-cycle/2026-10-16-ledger-signals-report.md.

Witness

report_sha256 : 34e07d7b29706b44ece0b62e5843a32c7bf1b4ee8848b1cb7027ccbf20a13238
session_commit: b2abcc14a632d7e0948962065a7c6c8920cf306c
witness       : 3fc2fa96d63069b3d20d36e1ce3a519c0cee9c1b24bb99e5694eadbb40291bb3

Reproduce: dream-machine witness verify-report docs/dream-cycle/2026-10-16-ledger-signals-report.md --commit b2abcc14a632d7e0948962065a7c6c8920cf306c

Recommendation

evaluated: yes / verdict: ACCEPT. All promotion-gate conditions clear. Human review requested for merge — this session never self-merges. Next steps (not built tonight): (1) grandfather or re-stamp the remaining ~24 older-convention reports — a separate, larger conceptual change; (2) consider having STEP 26's self-review run witness verify-report on the night's own freshly-committed report; (3) wire ledger signals --merged/--open-count ground-truthing into the compiled prompt's STEP 1.1 instructions; (4) issue #144/PR #145 and issue #153/PR #154 remain open/draft, confirmed not duplicated.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions