@chrono-meta/fh-gate 1.4.83 → 1.4.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/.claude/rules/fh_4axis_gate.md +45 -1
  2. package/.claude-plugin/marketplace.json +2 -2
  3. package/CATALOG.md +23 -1
  4. package/CHEATSHEET.md +1 -1
  5. package/CLAUDE.md +9 -3
  6. package/knowledge/shared/harness-core/field_harness_diagnostic.md +1 -0
  7. package/knowledge/shared/harness-core/harness_incubator_doctrine.md +10 -0
  8. package/knowledge/shared/harness-core/harness_verification_core_extended.md +167 -0
  9. package/knowledge/shared/learnings/subagent_invocations_log.yaml +190 -0
  10. package/knowledge/shared/rules/operational_adaptation.md +35 -9
  11. package/package.json +2 -1
  12. package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
  13. package/plugins/fh-commons/skills/convergence-loop/SKILL.md +25 -10
  14. package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
  15. package/plugins/fh-meta/agents/challenger.md +1 -1
  16. package/plugins/fh-meta/skills/phantom-quench/SKILL.md +1 -1
  17. package/plugins/fh-meta/skills/steel-quench/SKILL.md +78 -10
  18. package/plugins/fh-meta/skills/steel-quench/SKILL_detail.md +3 -3
  19. package/scripts/consent_registry_check.sh +187 -15
  20. package/scripts/destructive_pre_gate.sh +32 -5
  21. package/scripts/package_coverage_check.sh +10 -0
  22. package/scripts/pipe_verdict_guard.sh +43 -3
  23. package/scripts/selfcheck.sh +104 -2
  24. package/scripts/session_close_check.sh +52 -1
  25. package/scripts/stale_clone_guard.sh +49 -6
  26. package/scripts/substrate_jump_detector.sh +21 -0
  27. package/scripts/test_consent_registry.sh +341 -42
  28. package/scripts/test_destructive_pre_gate_lanes.sh +42 -0
  29. package/scripts/test_pipe_verdict_guard_lanes.sh +71 -0
  30. package/scripts/test_selfcheck_state_lanes.sh +102 -0
  31. package/scripts/test_session_close_lanes.sh +187 -15
  32. package/scripts/test_stale_clone_guard_lanes.sh +54 -0
  33. package/templates/.git-hooks/pre-push +10 -1
  34. package/templates/consent_classes.yaml.example +18 -0
@@ -68,6 +68,11 @@ FH asset modified → Axis 1 (templates/regression_guard.sh --pr {BRANCH})
68
68
  → Axis 2 (/steel-quench) → Axis 3 (/phantom-quench)
69
69
  → marker: tracks/_meta/.axes_23_passed_{branch}_{date}.marker
70
70
  (required fields: axis2-engine / axis2-model / floor-status / axis2-evidence;
71
+ **recorded-by-convention, validated by nothing**: `axis2-rounds` (per-round yield vector) —
72
+ steel-quench §Convergence Criteria consumes it, and a hook check for it was built and then
73
+ REMOVED the same day for firing on 100% of markers. The convergence claim it supports is
74
+ self-attested; that residual is named in §Convergence Criteria, not hidden. Mechanize on the
75
+ first recurrence of a false convergence claim, not before;
71
76
  hook validates mechanically: below-floor blocks without below-floor-ack, and axis2-evidence
72
77
  must be non-vacuous — a recorded verdict/count, not "it ran". Marker scope is form +
73
78
  non-vacuity + auditability, NOT provenance — a fabricated marker is the weekly-audit + operator
@@ -79,7 +84,7 @@ FH asset modified → Axis 1 (templates/regression_guard.sh --pr {BRANCH})
79
84
  → All 4 PASS → git commit allowed | Any FAIL → fix inline, re-run
80
85
  ```
81
86
 
82
- **Why automatic**: Each axis catches a different defect class; asking separately means slip-through. **Why hook**: CLAUDE.md rules are advisory — the hook physically blocks commit until marker + manifest exist. **Scope**: active from the moment any FH file is modified in the session.
87
+ **Why automatic**: Each axis catches a different defect class; asking separately means slip-through. **Why hook**: CLAUDE.md rules are advisory — the hook physically blocks commit until marker + manifest exist. External anchor: the HANDBOOK.md benchmark (arXiv:2607.25398) measures prose-only SOP compliance failing at frontier scale — canonical harvest with figures: `knowledge/shared/harness-core/gate_locality_principle.md` §external anchors (numbers live there only; a pinned figure in two files rots independently). **Scope**: active from the moment any FH file is modified in the session.
83
88
 
84
89
  **Lightweight exception** (Axis 1 + 4 only, skip Axes 2–3): Sessions where **zero SKILL.md / rules / templates files changed** (e.g., CATALOG.md entry, tracks/ update). The hook detects this automatically — no Axes 2+3 marker required for light-only commits. Judgment is file-based, not subjective.
85
90
 
@@ -200,6 +205,45 @@ judge-only path**, no weak-local-judge regression of the judge-robustness princi
200
205
  > model/panel options, the blind-probe procedure, dogfood evidence, and the FAIL-triage (real salience gap
201
206
  > vs floor-model quirk) — read when running a floor canary.
202
207
 
208
+ ### Added-Scope Gate — before you attach anything to a fix
209
+
210
+ A fix arrives with a stated job. Everything you attach beyond that job is **new surface that the
211
+ adversarial rounds must then verify**, and it is charged to the fix's schedule and to whatever the fix
212
+ was blocking. Before adding, answer two questions in writing:
213
+
214
+ 1. **"What can I not do without this?"** — no immediate concrete answer means it is not needed *here*.
215
+ 2. **"Is this the same change?"** — a real answer to (1) that names a *different* job means it is a
216
+ separate change, not an addition. Ship the fix; open the other thing.
217
+
218
+ Both must pass. (1) alone is the trap: a genuinely useful addition passes (1) and still belongs
219
+ elsewhere.
220
+
221
+ **A construct and the wiring that makes it reachable are ONE change.** Question (2) answers *same
222
+ job* for a caller, a hook line, a package-manifest entry, or a propagated copy of the fix — none of
223
+ those is separable scope. Splitting them is not scope discipline, it is
224
+ [[feedback_built_but_not_wired]] and [[feedback_half_fix_propagation_boundary]], which this repo has
225
+ already self-reproduced. If you build a checker and defer its caller, you shipped prose. The gate
226
+ below trims what you *attached*; it never licenses shipping something unreachable.
227
+
228
+ **Measured 2026-08-02 (PR #231).** The stated job was one flaky test lane — a blocker holding two
229
+ other PRs. Attached to it: a production advisory probe, its hook surfacing, a new caller wiring, and a
230
+ measurement probe. Each passed (1) on its own. Round-by-round attribution of the 12 adversarial
231
+ findings: round 1's 4 were in the original fix; **rounds 2, 3 and 5 found defects exclusively in code
232
+ the previous round had added**, and 2 of the cross-family round's 3 traced to the attached scope. The
233
+ original fix needed roughly one round. The other four rounds were the bill for scope that would have
234
+ passed (2) as its own change. The additions were not wrong — bundling them was.
235
+
236
+ Read that example precisely: the splittable items were the **advisory probe and its measurement** —
237
+ a new capability with its own job. The *hook line that surfaced the probe* and the *caller that
238
+ invoked the new anchor* were not splittable and were correctly shipped **with the probe, into
239
+ whichever change carries the probe** — not left behind in the fix, which would ship a hook line that
240
+ surfaces nothing.
241
+
242
+ **Relationship to Wave-T (`steel-quench`)**: Wave-T measures complexity the *quench* added, after
243
+ convergence. This fires earlier and on a different axis — scope the *author* added, at authoring time.
244
+ Do not collapse them; a change can pass Wave-T (every construct traces to a finding) and still have
245
+ been the wrong change to bundle.
246
+
203
247
  **Axis ownership** (each skill is already complete — orchestrator only coordinates):
204
248
 
205
249
  | Axis | Skill | What it catches |
@@ -11,13 +11,13 @@
11
11
  "plugins": [
12
12
  {
13
13
  "name": "fh-meta",
14
- "version": "1.4.83",
14
+ "version": "1.4.84",
15
15
  "description": "Hub meta-operations toolkit — 35 skills + 7 agents. New in 1.4.53: `fh-codex-doctor` (npm bin) — Codex adapter drift scanner; reads the documented M1/M2/M3 skill tier map + skill/agent source and reports codex-native/adapter-required/claude-native/unclassified per unit, wired into `npm test`/`prepublishOnly` (fail-closed on unclassified Claude-native primitives). New in 1.4.49: steel-quench gains Step 0.6 Verdict-Invariance Probe (groundedness axis — a load-bearing judged gate's verdict must track behavior, not rubric phrasing; measured flip-count over cross-family paraphrases; arXiv:2605.06161 Policy Invariance anchor); multi_model_sidecar_strategy §Vendor-native harness (a model is strongest in its own vendor CLI — Claude/CC, GPT/codex, Gemini/Antigravity; a universal router degrades all of them, so it stays an autocomplete/QA sidecar, never orchestration); predelete_check.sh fail-closed rewrite; memory-hygiene A-TMA anchor. New in 1.4.48: phantom-quench + steel-quench gain external frontier anchors (arXiv:2607.02052 package-hallucination; arXiv:2607.02057 prompt-coverage-adequacy); README model-flat claim reframed from a per-release point-curve to structural invariants (operation flattens across tiers; depth tier-order fixed within a generation). New in 1.4.47: onboarding step ① surfaces the Mode D companion-store session-start load in the auto-read salience anchor (previously only in the local binding + rules, so a greeting could skip the load). New in 1.4.46: context-doctor command-output axis (route to rtk/proxy for verbose CLI stdout, complementing .claudeignore; risk-gated to token-scarce envs). New in 1.4.41: context-doctor 2026 trigger vocab (context engineering/rot/collapse) + phantom-citation hardening; hub measurement-integrity-checklist (cross-model measurement pre-flight: display-name pin/reps≥3/discriminating probe). New in 1.4.40: install-wizard queryable-wiki scaffold (INDEX + session-start read + R/W/C ingest). New in 1.4.39: auto-decorrelation (cross-family verifier sidecar recruitment) + video-ingest (capability-routed video ingestion). New in 1.4.x: verify-axis check-class taxonomy (mandatory-pass/measured/judged), no-reinvention Tier-0 inventory, 7-class failure taxonomy, Destructive-Op Gate, Wave-T (Temper), tier-floor governance, Mode D Model Notice, FC consent lane, default-Sonnet guidance. New in 1.3.0: public-surface-audit, field-harvest Mode B auto-trigger, 4-axis gate scope ext. Validated cross-CLI: Claude Code, Codex, Gemini.",
16
16
  "source": "./plugins/fh-meta"
17
17
  },
18
18
  {
19
19
  "name": "fh-commons",
20
- "version": "1.4.83",
20
+ "version": "1.4.84",
21
21
  "description": "Project-agnostic utility skills — 4 skills (convergence-loop · deliberation · mcp-circuit-breaker · token-budget-gate) + 1 agent (quench-challenger). Domain-independent utilities transplantable into any project.",
22
22
  "source": "./plugins/fh-commons"
23
23
  }
package/CATALOG.md CHANGED
@@ -4,6 +4,28 @@ AI reads this file first when searching past work. Open individual files for det
4
4
 
5
5
  ---
6
6
 
7
+ ## 2026-08-01 — Harness-Verification Doctrine: core lens vs cluster instruments
8
+
9
+ - **New doctrine** (`knowledge/shared/harness-core/harness_verification_core_extended.md`): the
10
+ incubator's verification axis, graduated from the field→meta reverse-verification arc (one day,
11
+ four runs, two subjects; FH-side runs known-pair-calibrated, the company-side replication's
12
+ calibration record stays company-side). First clause: *harness-verification core =
13
+ the FH-native triad-consistency lens (spec ↔ implementation ↔ TC), askable with no cluster member
14
+ present; extended = cluster instruments (trace auditors, process-fidelity harnesses), composed by
15
+ UNION* — the Sonnet-Floor shape applied to verification.
16
+ - **Evidence**: a field QA harness's audit doctrine, context-decorrelated, found 7 novel grounded
17
+ findings on an FH slice (all in the triad-disagreement class) and replicated on a second subject
18
+ (7 more, 3 fixed same-day); a three-instrument UNION run measured **static↔trace** finding-class
19
+ intersection zero (between extended instruments disjointness is partial — scope-corrected same day
20
+ by cross-family audit); a mechanized transcript adapter addressed the self-attested-trace residual
21
+ same-day (its own audit-integrity limits are pilot-grade — Run #4 backlog).
22
+ - **Companions updated**: `harness_incubator_doctrine.md` §3-b (the nursery also verifies what it
23
+ births) · `CLAUDE.md §Identity` one-clause summary.
24
+ - **Honest labels**: the core lens is doctrine-level today (dispatched-procedure route; no native
25
+ carrier asset yet — named residual, next build is evidence-threshold-gated). Subjects = 2, trace
26
+ pairs = 1.
27
+ - Tags: `doctrine` `verification` `reverse-verification` `union` `cluster` `triad-consistency`
28
+
7
29
  ## 2026-07-26 — Scan logic single-sourced · FH_BACKEND=cross · v1.4.72
8
30
 
9
31
  - **Single-sourcing** (`scripts/psa_scan_lib.sh`): three near-duplicate implementations of
@@ -109,7 +131,7 @@ Two operator insights forged into doctrine. **Intent Marshaling** (PR #161, mirr
109
131
  > **Backfill note (2026-07-15):** the 07-12 / 07-13 / 07-14 entries below were reconstructed from git
110
132
  > history + the session card's completion log during the 2026-07-15 harness-doctor run, which found that
111
133
  > CATALOG had stopped at 07-10 while 30 FH-asset commits landed — i.e. 5 days of work were invisible to
112
- > the CATALOG-first search protocol (CLAUDE.md §Searching Past Work). They are commit-grounded, but they
134
+ > the CATALOG-first search protocol (CLAUDE.md §Autonomous Initiative (CATALOG-first recall row)). They are commit-grounded, but they
113
135
  > are *reconstructions*, not first-hand session records: the "Decision/Open" lines carry only what the
114
136
  > commits and card state, so a judgment made in-session but never written down is not recoverable here.
115
137
  > The gap itself is the lesson — Comprehension Debt accrues silently when the close chain's CATALOG step
package/CHEATSHEET.md CHANGED
@@ -453,7 +453,7 @@ Claude agents feature
453
453
 
454
454
  | Skill | What it does | Say this |
455
455
  |---|---|---|
456
- | `steel-quench` | All-angle adversarial attack on a design/output, then defense, until zero new blockers | "run the quench", "attack from the root", "shake out the design anxiety" |
456
+ | `steel-quench` | All-angle adversarial attack on a design/output, then defense, until a round finds nothing new AND needs no repair | "run the quench", "attack from the root", "shake out the design anxiety" |
457
457
  | `phantom-quench` | Back-traces every claim to its declared source; flags **Phantom Claims** (present in the artifact, not in the source). *Old name: `source-grounding-audit`.* | "verify the source", "where did this come from", "grounding audit", "phantom check" |
458
458
  | `verify-bidirectional` | Re-checks a decision from the opposite direction + folds your counter-argument into the baseline | "is that right?", "double-check this", "give me the counterargument" |
459
459
  | `convergence-loop` *(commons)* | Re-runs a gate until a round adds zero new failures — "truly passed", not "passed once" | "a single pass seems suspicious", "loop until it converges" |
package/CLAUDE.md CHANGED
@@ -30,7 +30,11 @@ existing harnesses) in its own sandbox — expensive per run, cheaper in total b
30
30
  pools and compounds — and **emits** them as independent specialized harnesses (shipped today as
31
31
  scaffold + approval machinery; the full chamber flow is the named target). Over other harnesses it
32
32
  operates in two modes: **compose** (cluster strengths) ∪ **disrupt** (melt and reforge via crucible;
33
- core invariants never melt). Full doctrine: `knowledge/shared/harness-core/harness_incubator_doctrine.md`.
33
+ core invariants never melt). The nursery also **verifies what it births**: harness-verification
34
+ **core** = the FH-native triad-consistency lens (spec↔implementation↔TC, cluster-independent) ·
35
+ **extended** = cluster instruments composed by UNION
36
+ (`knowledge/shared/harness-core/harness_verification_core_extended.md`). Full doctrine:
37
+ `knowledge/shared/harness-core/harness_incubator_doctrine.md`.
34
38
 
35
39
  | Layer | Role | Representative Assets |
36
40
  |---|---|---|
@@ -313,11 +317,13 @@ pipeline**, not an afterthought, and a below-floor orchestrator RUNS the review
313
317
  ## Field-Harness Diagnostic — "진단해줘 / 개선해줘" on a mapped project (compose → rank → HITL)
314
318
 
315
319
  The **on-demand pull sibling** of the gate above: a *project-level* "diagnose / improve this harness" ask
316
- composes the checks FH **already has** across **seven lenses** — leak (`/public-surface-audit`, incl. **Step 3c ignore-verification** — a file believed gitignored but actually tracked is the leak this sub-step exists to catch) · split
320
+ composes the checks FH **already has** across **eight lenses** — leak (`/public-surface-audit`, incl. **Step 3c ignore-verification** — a file believed gitignored but actually tracked is the leak this sub-step exists to catch) · split
317
321
  integrity (`/phantom-quench` **Step 2.7**) · token/salience (`/context-doctor` · `/salience-splitter`) · structure
318
322
  (`/harness-doctor`) · verdict degrade (`scripts/degrade_direction_scan.sh`) · loop-readiness
319
323
  (`loop_engineering.md`) · built-but-unwired (per-module caller grep — a completed module with zero
320
- external call sites; the dominant class of the 2026-08-01 qasp audit) into **one ranked `M`/`S`/`R`
324
+ external call sites; the dominant class of the 2026-08-01 qasp audit) · triad consistency
325
+ (spec↔implementation↔TC agreement — `harness_verification_core_extended.md` §2 dispatched-procedure
326
+ recipe, cluster-independent core lens) — into **one ranked `M`/`S`/`R`
321
327
  list**. No-reinvention: it only routes and ranks.
322
328
 
323
329
  **Resident guards (do not defer these to the detail file)**: **nothing is auto-fixed** — the list is the
@@ -24,6 +24,7 @@ is HITL — the diagnostic **proposes**, never auto-edits.
24
24
  | **Loop-readiness** (황민호 loop-eng 5-question lens, 2026-07-10 — detail home: `loop_engineering.md`, incl. the FH loop inventory + design-time discipline) | *Loop-runtime axis — net-new vs Structure* (harness-doctor scans static form; this scans whether the path closes a loop). **Mechanical grep**: `/goal-quench`·`/loop` wiring present · check-class token declared. **Judged**: is the persisted state (card/handoff/memory) actually reloaded · is the declared check-class anchored, not judged-only · does the path halt. Done-When *presence* → see Structure row (no double-grep). **Adversarial pair** (for the judged sub-checks — decorrelated, behavior-vs-checklist): a target-tier blind sim that *runs* the path and observes whether it halts + persists, rather than re-checklisting it (the harness litmus shares this lens's axis, so it is a co-lens, not the adversary). | an agent path that *runs but doesn't loop*: no completion criterion (Done-When absent), judged-only validation with no anchor, no halt/budget guard (runaway/cost), or no state carried to the next run — the 5 questions (initiate · complete · validate · halt · persist) with 0 answers |
25
25
 
26
26
  | **Built-but-unwired scan** (2026-08-01, from the qasp full audit) | **Mechanical grep**: for each module/entry-point under the project's source root, count call/import sites outside its own file and tests — `grep -rn "module_name" --include="*.py" | grep -v "module_file\|tests/"` per module (adapt the include glob per language). 0 external callers on a *completed* module = a finding. **Judged**: is it staged-for-later (documented as such) or genuinely orphaned capability? | the dominant defect class of the 2026-08-01 qasp audit: most M/S prescriptions were not "build new" but **wire what exists** — ET·delivery·feasibility modules complete with ZERO callers. A harness that keeps building finished capability nobody invokes reads as progress while shipping none; harness-doctor's Structure lens sees orphaned *harness units*, this lens sees orphaned *product modules* (net-new axis) |
27
+ | **Triad consistency** (2026-08-01, from the field→meta reverse-verification arc — doctrine home: `harness_verification_core_extended.md` §2, incl. the full dispatched-procedure recipe) | **Dispatched procedure** (no shipped carrier yet — honest label): one context-decorrelated agent over the slice {spec docs · implementations · test suites + every enforcement owner the spec names}, producing a spec-coverage MECE matrix + three-way traceability table + grounded findings; known-pair calibration before trusting output; governor source-grounds each finding. Cluster-independent by doctrine (core lens). | the class every per-asset check misses: **spec ↔ implementation ↔ TC disagreement** — pinned counts rotten against grown suites, orphan implementations with zero spec presence, opt-out semantics drifting between spec text and code comment (7/7 novel findings of the 2026-08-01 FH pilot were in this class; replicated N=2 on a second subject) |
27
28
 
28
29
  > **Considered-and-held, 7th-lens candidate (2026-07-24)**: the context-quality 7-criteria rubric
29
30
  > (arXiv:2607.14275 — role clarity · guardrail coverage · instruction consistency · tool schema ·
@@ -157,6 +157,16 @@ authored-case baseline (single-draw per case; reps waived per measurement-integr
157
157
  first draw matched expected — see the 2026-07-13 subagent-invocations log entry), not a calibrated
158
158
  accuracy estimate.
159
159
 
160
+ ### 3-b. The nursery also verifies what it births
161
+
162
+ The incubator's arc does not end at emission: FH **reviews, accelerates, and verifies** the harnesses
163
+ it births or adopts — a verification axis attached to the nursery as an evidenced path (field→meta
164
+ reverse-verification arc, 2026-08-01: a field QA harness's doctrine audited the meta-harness itself,
165
+ N=2 subjects). Boundary rule for that axis: *harness-verification core = the FH-native
166
+ triad-consistency lens (spec ↔ implementation ↔ TC), askable with no cluster member present;
167
+ extended = cluster instruments (trace auditors, process-fidelity harnesses), composed by UNION.*
168
+ Full doctrine: `harness_verification_core_extended.md`.
169
+
160
170
  **Incubation unit — projects AND features**: incubation applies not only to new projects but to **new
161
171
  capabilities of an existing harness**. A field harness's self-development is itself run inside the
162
172
  meta-harness chamber first, then transplanted — the nursery forges new layers for existing stars, not
@@ -0,0 +1,167 @@
1
+ # Harness-Verification Doctrine — core lens vs cluster instruments
2
+
3
+ > Crystallized 2026-08-01 from the field→meta reverse-verification arc (operator-proposed boundary,
4
+ > evidence-gated GO the same day). Companion to `harness_incubator_doctrine.md` — the nursery does not
5
+ > only birth harnesses; it **verifies what it births and accelerates**. Always-loaded summary:
6
+ > `CLAUDE.md §Identity` (one clause). Sibling invariant: `sonnet_floor_doctrine.md` (same shape,
7
+ > different axis).
8
+
9
+ ## 1. The axis this doctrine names
10
+
11
+ FH's verification of harnesses (its own assets, and the field harnesses it incubates or accelerates)
12
+ has two structurally different sources of lift:
13
+
14
+ | Mode | What it is | Availability |
15
+ |---|---|---|
16
+ | **Core** | Verification questions FH/PMH can ask **natively, with no cluster member present** — methodology internalized as FH's own lens | Must hold stand-alone (cluster-independent) |
17
+ | **Extended** | Verification **instruments** dispatched from the multi-harness cluster — a field QA harness's audit lens, a trace-boundary auditor, a process-fidelity/judge harness | Available when the cluster member and its consent lane are |
18
+
19
+ **First clause (the boundary)**: *harness-verification core = the FH-native triad-consistency lens;
20
+ harness-verification extended = cluster instruments.* The operative test is **what discharges the
21
+ capability at the floor**: discharged by a portable methodology or by an asset FH itself ships →
22
+ core; discharge requires a cluster member's running engine → extended. Form (question vs instrument)
23
+ is the usual correlate, not the criterion — and class membership can migrate: a class listed as
24
+ extended today (e.g. trace auditing) becomes core the day FH ships a native carrier for it (the
25
+ pilot's mechanized transcript adapter is exactly such a candidate). **Precedence rule** (the test
26
+ looks through to the discharge dependency): an FH-shipped *thin client* whose verification work is
27
+ actually done by a cluster member's engine is **extended** — shipping a wrapper does not internalize
28
+ a capability; core requires that the discharge **completes with no cluster member present**.
29
+ **Granularity rule** (cross-family probe 2026-08-01 — a tool emitting a local
30
+ `CONDITIONAL_PASS — runtime clauses unmeasured` that upgrades to an unconditional verdict via a
31
+ cluster instrument routes both ways if judged per-tool): route **per verdict, not per tool** — the
32
+ typed partial verdict that completes locally and **names its unmeasured clauses** is core for what
33
+ it measures; the fuller verdict it advertises through cluster resolution is extended. "Completes" =
34
+ emits its declared typed verdict; a verdict silently narrower than declared is neither. And "core"
35
+ names a **requirement placed on the capability, not a certification** that today's route meets it
36
+ at every tier — the floor-conformance question is a named residual (§5).
37
+
38
+ This is the Sonnet-Floor doctrine's shape applied to verification: base capability must be 100%
39
+ present at the floor (no cluster required); reinforcement is dispatch, never substrate. A
40
+ verification ability that silently requires a cluster member is a tier-gated-capability defect in
41
+ this axis, exactly as a base op that requires Opus is in the model axis.
42
+
43
+ ## 2. The core lens — static triad consistency (spec ↔ implementation ↔ TC)
44
+
45
+ The internalized question: **"do the spec surface, the implementation, and the test/TC set agree with
46
+ each other?"** — coverage of the *declared contract*, not adversarial pressure on an asset in
47
+ isolation. FH's native verification stack (asset-unit adversarial review, lane suites, phantom/grounding
48
+ audits) structurally does not ask it **in general form**: narrow spec↔repo agreement checkers exist
49
+ (the pre-commit new-skill count-consistency slice, `scripts/count_check.sh`) but they are point
50
+ checks on declared counts, while the triad lens interrogates the **agreement between three
51
+ artifacts** across the whole declared contract. Measured consequence of not asking the general
52
+ question: pinned
53
+ counts rot against grown suites, implementations ship with no spec presence (orphan implementations),
54
+ and opt-out semantics drift between spec text and code comment — none previously caught by the
55
+ per-asset stack (every §4 finding was novel-grounded: absent from prior review records of the same
56
+ files), all found on first application of the lens (see §4).
57
+
58
+ Why this is *core*, not a borrowed instrument: the lens is a **methodology** (a MECE
59
+ spec-coverage matrix + a three-way traceability table + findings with per-item grounding), learned
60
+ from a field QA harness's protocol doctrine but askable without it. The field harness taught the
61
+ question; it is not needed to ask the question.
62
+
63
+ **Internalization status (honest label)**: dispatched-procedure level today — the recipe below is
64
+ the public, runnable discharge route; no dedicated FH asset (skill or mechanical spec-sync checker)
65
+ carries it yet. Building that carrier follows the evidence-threshold build discipline: the second
66
+ real demand decides the form. What is already doctrine-binding now: **a "verify this harness"
67
+ engagement must be able to run the triad lens without any cluster member present** — by the recipe
68
+ below if no native asset exists yet. Entry point: the lens is a row in the Field-Harness Diagnostic
69
+ composition (`field_harness_diagnostic.md`), so a "diagnose this harness" ask routes to it without
70
+ anyone recalling this file.
71
+
72
+ **Dispatched-procedure recipe (public — runnable with no cluster member; pilot-grade provenance,
73
+ §5 scale residual applies)**, the pilot's Step 1 generalized: ① fix the subject slice — spec docs, implementations, their test suites, and
74
+ **mechanically include every enforcement owner the spec names and every test file that references
75
+ the subject** (the pilot's only false findings came from a hand-fed slice omitting these); ②
76
+ calibrate on a known pair before trusting output — one documented-but-uncovered residual the lens
77
+ must independently re-derive, one well-covered region where any reported gap is a false positive; ③
78
+ dispatch one **context-decorrelated** agent loaded with only the slice plus the audit method — a
79
+ spec-coverage MECE matrix (spec clause × covering TC), a three-way traceability table (spec ↔
80
+ implementation ↔ TC, orphans named on all three sides), findings each carrying a file:line ground —
81
+ and forbidden from loading the subject harness's own verification doctrine (the decorrelation is the
82
+ point); ④ the governor source-grounds every finding via a mechanical anchor (grep, execution),
83
+ classifying re-derived / novel-grounded / rejected; ⑤ findings are proposals — HITL, nothing
84
+ auto-fixed.
85
+
86
+ ## 3. The extended mode — cluster instruments, UNION composition
87
+
88
+ Instruments the cluster contributes are **class-disjoint from the core lens** by observation
89
+ modality; between the extended instruments themselves the disjointness is **partial, not claimed**
90
+ (scope correction 2026-08-01, cross-family audit: the pilot's own record shows one outcome class —
91
+ an unreviewed merge — caught by both trace and process-fidelity instruments, and the process leg
92
+ returned scalar scores rather than a finding inventory, so a three-way class intersection was never
93
+ computable from that data; what the run measured is **static↔trace intersection zero**):
94
+
95
+ - **Static triad lens** (core, above) — sees spec/implementation/TC disagreement. Principally blind
96
+ to runtime events: a trace auditor's violation classes do not exist in static artifacts.
97
+ - **Trace/boundary auditors** (extended — e.g. a HarnessAudit-style fence/severity channel over a
98
+ machine-written transcript) — see runtime boundary violations and blocked attempts. Principally
99
+ blind to static drift: a rotten spec count is not an event in any trace.
100
+ - **Process-fidelity / judge harnesses** (extended — e.g. a DeepEval-style expected-tool-set +
101
+ LLM-judge leg) — see procedure deviation; **overlaps trace auditors on some outcome classes**
102
+ (different mechanism does not make an outcome class disjoint), zero measured overlap with the
103
+ static class.
104
+
105
+ Composition rule: **detection composes by UNION** — the model-ensemble union pattern
106
+ (operator-measured, held in operator memory: detection = UNION lift, generation = voting; the
107
+ instrument-level measurement is §4 item 3) generalizes from model diversity to **instrument
108
+ diversity**. Static↔trace blindness is argued from modality (a static artifact defect is not a trace
109
+ event, and vice versa) and measured once (§5); on that argument, reps of one instrument are not
110
+ expected to cover the other's class — adding the other instrument is. Between extended instruments
111
+ the same claim is **not** made (see the scope correction above).
112
+
113
+ Extended-mode discipline (unchanged invariants, restated for this surface): cluster dispatch rides
114
+ the existing consent lanes and residency rules; instrument findings are evidence candidates until the
115
+ governor source-grounds them via a mechanical anchor (grep/known-pair), never verdicts by agreement;
116
+ and the audit channel must be one the audited session cannot rewrite after the fact (a
117
+ machine-written transcript, not a self-attested action list — the pilot's Run #3 exists because its
118
+ Run #2 violated exactly this and was sealed the same day).
119
+
120
+ ## 4. Evidence base (why this graduated to doctrine)
121
+
122
+ Four runs, one day (2026-08-01), two subjects; runs 1, 3 and 4 instrument-calibrated FH-side
123
+ (known-pair) before any number was trusted — run 2's calibration record is company-side (item 2
124
+ below):
125
+
126
+ 1. **Run #1 (FH slice)** — the field QA lens, context-decorrelated (the auditing agent read none of
127
+ FH's verification doctrine), CALIBRATED, produced **7 novel grounded findings** — every one in the
128
+ spec↔implementation↔TC disagreement class; three S-tier were fixed on a same-day branch.
129
+ 2. **Second-subject replication (PMH, company environment)** — the same design reproduced the lift on
130
+ a different meta-harness: 7 novel grounded findings (1 S · 3 M · 3 R), three fixed same-day.
131
+ N=2 subjects supports reading the lens as a defect-class detector rather than a one-harness
132
+ quirk. (Calibration status of this run is recorded company-side only — residency boundary; the
133
+ FH-side judgment stands on runs 1, 3, 4 alone.)
134
+ 3. **Instrument-triple UNION run** — three instruments over one governed/mutant trace pair:
135
+ discriminating control separated (governed vs mutant) on every instrument; **static↔trace
136
+ finding-class intersection zero** (the measurable pair — the process-fidelity leg returned
137
+ scalars, not a finding inventory, so it enters the UNION as a separating instrument but not the
138
+ intersection measurement). First measurement of the static↔trace disjointness §3 argues (single
139
+ slice, single pair — the modality argument carries the rest; §5).
140
+ 4. **Mechanized trace adapter** — the self-attested-trace residual sealed by extracting actions from
141
+ the session's machine-written transcript; known-pair PASS, one live false-positive (data-vs-execution
142
+ confusion) hand-verified and fixed same-day with a regression pair.
143
+
144
+ Operator-local records (gitignored, referenced for the operator's own audit trail):
145
+ `tracks/_meta/qasp_reverse_verification_run_2026-08-01.md` · `…_run2_2026-08-01.md` ·
146
+ `…/run2_instrument_calibration_2026-08-01.md` · design doc same directory.
147
+
148
+ ## 5. Honest residuals (named, not waived)
149
+
150
+ - **Scale**: subjects = 2, trace pairs = 1, mutant = synthetic counterfactual; judge separation
151
+ measured only on a degenerate (trivially-separable) pair. Fine-discrimination (partially-compliant
152
+ traces) is unmeasured.
153
+ - **Adapter limits**: compound commands collapse to first-match class; quoted-string operation text
154
+ remains a false-positive reserve; approval detection is keyword-level.
155
+ - **No native carrier yet** for the core lens (see §2 status label) — until one ships, "core" is a
156
+ doctrine obligation discharged by the §2 recipe, and this gap is the first thing a triad-lens
157
+ audit of FH itself should re-find.
158
+ - **Floor tier unmeasured**: the pilot runs executed at frontier tier. Whether the §2 recipe holds
159
+ at the Sonnet floor is unmeasured — per the sibling invariant, the first floor question to close.
160
+
161
+ ## Done When (doctrine doc — reference asset)
162
+
163
+ - `CLAUDE.md §Identity` clause, `harness_incubator_doctrine.md` §3-b, and this doc tell one
164
+ consistent story (core/extended boundary stated identically). *Check class: judged; pair:
165
+ contradiction scan on ingest.*
166
+ - Every mechanism named here points at a real existing asset or is explicitly labeled
167
+ doctrine-only/unbuilt (§2 status, §5). *Check class: mandatory-pass (phantom scan).*
@@ -622,3 +622,193 @@
622
622
  outcome: accepted
623
623
  evidence: "M0/S1/R3. S = same-class stale phrasing in destructive_pre_gate.sh:63 usage comment ('single command') that the diff itself existed to eliminate — fixed same branch. All 4 angles returned evidence, not assertion (grep :83, 3 suite counter prints, JSON tool, ⑤-b never-FAIL)."
624
624
  note: "Angle ④ surfaced an accepted trade: count-free refs lose lane-deletion detection — mechanical suite-internal floor named as the right home if wanted."
625
+ - date: 2026-08-01
626
+ agent: fh-meta:challenger (in-session isolated)
627
+ task: "Axis-2 adversarial review of harness-verification doctrine landing (new doctrine + 3 companion edits)"
628
+ mode: sync Agent dispatch, 4 attack angles, gitignored evidence records off-limits by instruction
629
+ outcome: accepted
630
+ evidence: "S3/M1/R4, every finding file:line-grounded. S1 boundary dual-criterion (trace-adapter routes both ways), S2 doctrine-binding obligation unwired from the Diagnostic entry point (self-referential P2-08 orphan class), S3 discharge recipe was operator-local-only. All three fixed same branch; 4 attack-failures explicitly recorded (3-face wording consistency held)."
631
+ note: "S2 is the reverse-verification lens catching the doctrine ABOUT itself — orphan-implementation class re-found by the adversarial pass before commit."
632
+ - date: 2026-08-01
633
+ agent: claude (Sonnet, blind isolated sim)
634
+ task: "Target-tier sim: does the doctrine text alone route 3 scenarios correctly at the floor tier"
635
+ mode: doc-only read, no other files, main-session reasoning not inherited
636
+ outcome: accepted
637
+ evidence: "3/3 correct (dispatched-procedure route when no cluster; UNION-not-substitution; no-carrier does not waive core). Quoted the binding sentences verbatim."
638
+ note: "Ran on pre-fix draft; post-fix text strengthens the same sentences the sim anchored on (no weakening edit)."
639
+ - date: 2026-08-01
640
+ agent: agy sidecar (gemini-3.6-flash-high; model-echo 'Gemini 3.6 Flash')
641
+ task: "Cross-family adversarial leg on final doctrine text (3 angles: contradiction / overclaim / boundary ambiguity)"
642
+ mode: headless agy -p, prompt-inlined document (public content), first-line model echo required
643
+ outcome: accepted
644
+ evidence: "6 findings (3 HIGH). HIGH thin-client both-ways construction accepted → discharge-dependency precedence rule added; HIGH core-vs-floor-unmeasured tension accepted → requirement-not-certification clause; HIGH 'established' overclaim softened to first-measurement. 3 remaining absorbed as hedges; 0 dismissed without recorded ground."
645
+ note: "codex still quota-parked (~8/6); agy carried the cross-family leg, consistent with the 08-01 panel precedent. -m flag invalid — use --model; file-read denied headless — inline the doc."
646
+ - date: 2026-08-01
647
+ agent: codex sidecar (gpt-5.6-sol, session-header anchored)
648
+ task: "Leg C — missed-by-both pass on 3 shipped guard scripts + PreToolUse snippet"
649
+ mode: headless codex exec, reasoning high, prompt-inlined sources, named residuals excluded by instruction
650
+ outcome: accepted
651
+ evidence: "HIGH 3 / MED 5 / LOW 1, verdict 'reopen CONVERGED' on a 133-lane-green surface. Governor reproduced HIGH #1 live (checkout -f . = CLEAN, -- . = HIT known-pair). Cross-guard interaction angle returned NONE with docs citation. Fixes deferred to a dedicated branch (HITL)."
652
+ note: "codex ran its own probes and docs verification — sol-tier depth. Third family reopening a 2-family CONVERGED verdict, second instance today."
653
+ - date: 2026-08-01
654
+ agent: codex sidecar (gpt-5.6-terra + gpt-5.6-luna, calibration probes)
655
+ task: "Tier-sufficiency screen for always-on decorrelation — same adapter-audit task as sol leg B, known-pair scored"
656
+ mode: headless codex exec, high, identical prompts; scored against sol's 6 HIGH classes + fabrication check
657
+ outcome: accepted
658
+ evidence: "terra 6/6 known-positives + 5 net-new (approval-negation regex, heredoc tail-drop, --dry-run, marker-in-success, tool-id reuse); luna 5/6 + 4 net-new (Write/Edit content discarded entirely) — only miss = design-layer channel-provenance. All quoted lines verified real. Echo nondeterministic across all calls — session-header model: line adopted as the anchor."
659
+ note: "n=1 screen on one bounded task class — recommendation scoped: terra default for detection legs, luna for volume/background, sol for convergence verdicts and probe-executing deep audits."
660
+ - date: 2026-08-01
661
+ agent: claude (general-purpose, background)
662
+ task: "Run #4 a+b — mech_trace_adapter 12-class integrity + granularity + 6 probe-novel fixes, known-pair recalibration"
663
+ mode: private-companion-store file edit (no commit), stdlib-only constraint, fixtures+runner left in place
664
+ outcome: accepted
665
+ evidence: "44/44 known-pair (governor re-ran: OK), SAR recalibration 0.617/1.000 exactly preserved, mutant discriminating-power check caught its own non-discriminating fixture (c08 padding < truncation cut) and corrected it. 6 named residuals in docstring+runtime output."
666
+ note: "Mutant-check working as designed = green-for-wrong-reason guard applied to the instrument itself."
667
+ - date: 2026-08-01
668
+ agent: claude (Sonnet, worktree-isolated, context-decorrelated)
669
+ task: "Run #4 e — triad-lens doctrine §2 recipe floor measurement on guards+close-chain slice"
670
+ mode: slice-only read, FH verification doctrine load forbidden, MECE matrix + 3-way traceability + file:line findings
671
+ outcome: accepted
672
+ evidence: "11 findings (S2 M5 R4) all file:line-grounded; governor mechanical grounding sample 3/3 TRUE (F1 less/more lanes absent, F7 node infra-delta 0 hits, F9 close-lane self-scoped to (2)(5)). Verdict: §2 recipe HOLDS at Sonnet floor, n=1."
673
+ note: "recipe step-2 known-pair was not pre-injected — post-hoc governor sampling substituted; named residual for the next floor run."
674
+ - date: 2026-08-01
675
+ agent: claude (general-purpose, background)
676
+ task: "Run #4 c+d — AVS/TCR wiring via OpenRouter + partial-compliance 5-rung fine-discrimination ladder"
677
+ mode: scratchpad harness rebuild, synthetic traces only, reps=3 on judge channels, per-call model-echo wrapper
678
+ outcome: accepted
679
+ evidence: "AVS calibrated PASS (0.825/0.333); TCR UNCALIBRATED confirmed semantic (pure completion metric, flat 1.0 across all rungs); GEval strongest fine discrimination (1.0/0.7/0.267/0.2 monotone, low rep variance); SAR only deterministic channel separating all 5 rungs. Run#2 residual 3 (judge degenerate separation) closed. Instrument trap measured: HarnessAudit judge max_output_tokens=512 hardcode truncates reasoning-model JSON -> AVS None fail-open; transport-layer raise to 8000."
680
+ note: "Artifacts promoted to a private companion store's experiments/ (scratchpad is ephemeral); HarnessAudit clone provenance recorded, not vendored (669M)."
681
+ - date: 2026-08-01
682
+ agent: codex sidecar (gpt-5.6-terra, session-header anchored)
683
+ task: "Decorrelation finder leg on guard MED5+LOW1 fix diff — first live use of the UAP tier routing (terra=detection default)"
684
+ mode: headless codex exec, read-only sandbox, high; first call returned empty (stdin-open liveness class) -> relaunched with stdin closed
685
+ outcome: accepted
686
+ evidence: "5 findings (HIGH1 MED3 LOW1): governor grounding -> 1 registered-residual (option shell-escape, threat-model boundary), 3 confirmed-fixed same session (|& matcher+join, newline-after-wrapper join, budget cap 150), 1 confirmed-accepted (quoted-data FP inherited mention-as-data class, lane-pinned). Round-2 convergence pass dispatched."
687
+ note: "UAP routing first live validation: terra found real bypasses on a lanes-green diff at -60% of sol price."
688
+
689
+ # ── recovered 2026-08-02 from unmerged branches before deletion (Destructive-Op gate, step ② recover)
690
+ - date: 2026-07-31
691
+ agent: openhuman:pr-reviewer (cross-project cast, via general-purpose + persona-load)
692
+ task: 'Synergy #4 dogfood — openhuman PR #5302 (flows per-item fan-out) CodeRabbit-style review, review-only
693
+ scope'
694
+ mode: background Agent, sonnet (per cast definition), FH cwd cross-dispatch with Context Card + scope
695
+ gate
696
+ outcome: accepted
697
+ evidence: 'M0/S0/R3 + 1 author question. Contract honored: no gh review/comment, no commit/push, returned
698
+ to main. 3 files read full-context (caps.rs 6157L targeted), diff +113/-5. R findings all style/test-integrity
699
+ class; the sharpest catch: a new test asserting on a throwaway local Semaphore instead of the real
700
+ HARNESS_AGENT_SLOTS static (green-for-the-wrong-reason class — same defect family as yesterday''s
701
+ N=4).'
702
+ note: 'First cross-project cast dispatch on the air node. Mechanism validated: read field agent def
703
+ as persona + Context Card + scope-gate overrides ranked above the def (the def''s apply/commit/push
704
+ tail was cleanly suppressed). 118K tokens / ~3.3min.'
705
+ - date: 2026-07-31
706
+ agent: codex sidecar (gpt-5.6-sol @ high, headless exec, read-only sandbox)
707
+ task: 'Cross-family adversarial review of pipe_verdict_guard delivery-channel rewrite (load-bearing:
708
+ fires on every Bash call)'
709
+ mode: manual auto-decorrelation dispatch, governor keeps terminal verdict, every finding source-verified
710
+ before acting
711
+ outcome: accepted
712
+ evidence: '1 MEDIUM + 4 LOW. MEDIUM (block-mode fail-open on dead python3) accepted as named residual
713
+ with doctrine grounds. LOW ascii-codec kill reproduced locally then fixed — and the first fix (PYTHONUTF8=1)
714
+ was refuted by the new lane C4, measured not assumed: PYTHONIOENCODING wins over UTF8 mode. LOW non-atomic
715
+ emission and LOW two-invocation lane predicate fixed. LOW NUL-blindness accepted with note. 125K tokens.'
716
+ note: 'Second consecutive day the cross-family pass found real defects in a fresh fix (yesterday 3,
717
+ today effectively 2 fixed + 1 refuted-fix). The pattern holds: same-family author optimism does not
718
+ see its own emission/codec edge cases.'
719
+ - date: 2026-07-31
720
+ agent: general-purpose (frontier research) + fh-meta:persona-innovator (Mode F) — parallel pair
721
+ task: qasp 총동원 캠페인 Phase 1 — agentic mobile QA SOTA 조사 + 1.5/2/3막 갭/네이밍/흡수 스캔
722
+ mode: background parallel, Context Card, residency guard (외부 검색 일반용어만)
723
+ outcome: accepted
724
+ evidence: '조사: EcoAgent=이원화 학술 쌍둥이(독립수렴) + 흡수델타 5(전건 출처) + 정직한 앞섬/뒤짐 분리 + OSS 후보(라이선스). 이노베이터: 갭 6(에스컬레이션
725
+ 무명·휘발복구 빈자리·vision 부재 binding·문서드리프트 등) + 네이밍 + 외부신호 4(출처). 갭1·6은 같은 세션에서 즉시 배선/정정됨.'
726
+ note: 87K+87K tokens, ~1.5-3분. 둘 다 fan-in 계약 준수. 조사의 미검증 잔여 표기(2차출처·라이선스 미확정)가 정직 규율대로 왔다.
727
+ - date: 2026-07-31
728
+ agent: codex sidecar (gpt-5.6-sol @ high, read-only)
729
+ task: qasp dual_router/runner/healer 배선 diff cross-family 리뷰 (verdict-인접 필드코드 게이트)
730
+ mode: manual dispatch, invariant-attack 프롬프트 (fail-closed/독트린/opt-in/에스컬레이션/HITL)
731
+ outcome: accepted
732
+ evidence: S5/A1/B1 — substring 양방향 오류·@오해석·유일성 부재·비앵커 파싱·disabled 미필터·빈text 우회·전역 tie 오탐. 전건 수정 + 정책
733
+ 자체 개선(후보-국소 에스컬레이션). 검증확인 3건(verdict 소유권·힐러 무적용·opt-in)도 명시 리턴. 92K tokens.
734
+ note: 3일 연속 동일 패턴 — cross-family가 갓 작성된 fail-closed 경계 코드에서 실결함을 잡는다. 이제 통계가 아니라 운영 전제로 승격할 만함.
735
+ - date: 2026-08-01
736
+ agent: fh-meta:challenger
737
+ task: qasp-dev PR#47 Wave 1+2 adversarial review — independent-context leg of a 3-family panel (agy
738
+ Gemini-Pro + local qwen3.6:35b + this challenger) substituting for exhausted codex
739
+ mode: isolated Agent, inherit-tier, same-family-but-independent-context (family diversity carried by
740
+ the two non-Claude sidecar legs)
741
+ outcome: accepted
742
+ evidence: '9 attacks incl. 2 HIGH-confidence real defects the other two legs missed: an empty-canonical-key
743
+ fall-through that re-opened the exact monolith FP this PR had just closed, and a fabricated ''expected:
744
+ PASS'' value in the non-developer report. Also flagged gate exit-code collision with argparse(2) →
745
+ moved to 4. Axis-clean verdicts came with measured anchors (overall whitelist-PASS, auto=False aggregation
746
+ isolation).'
747
+ note: 'Panel shape worked: cheap legs (qwen) produced only refutable findings (2/2 refuted with source
748
+ anchors), the paid multimodal leg (agy) found 1 real HIGH, the independent-context same-family leg
749
+ found the subtlest 2. Governor source-grounded every finding; 9 accepted / 3 refuted; suite 1534 green
750
+ after fixes.'
751
+ - date: 2026-08-01
752
+ agent: fh-meta:challenger
753
+ task: qasp-dev PR#48 (Wave 3 external backlog) adversarial review — independent-context leg alongside
754
+ agy Gemini-Pro
755
+ mode: isolated Agent, inherit-tier, same-family-but-independent-context; ran against the COMMIT while
756
+ the worktree carried in-progress fixes from the other leg
757
+ outcome: accepted
758
+ evidence: '10 attacks; 5 independently converged with the agy leg''s uncommitted fixes (cross-confirmation
759
+ of both legs'' validity). Unique catches: a doc-insertion that split an exit-1 bullet from its sub-bullets
760
+ AND collided step IDs (A-grade — would misroute the skill''s correction loop), cross-target flaky-score
761
+ contamination (instrument-validity class), --deliver writing outside out_dir, and a published test-count
762
+ that no longer matched its own commit.'
763
+ note: 'The dirty-worktree accident produced a useful pattern: reviewing the commit while fixes land
764
+ in parallel turns overlap into cross-confirmation instead of waste. Its mtime-sort prescription was
765
+ REJECTED with grounds (git checkout resets mtime — filename-date parsing is the honest key), and it
766
+ accepted the refutation direction in its own verdict framing.'
767
+
768
+ - date: '2026-08-02'
769
+ agent: fh-commons:quench-challenger (isolated Agent, opus)
770
+ task: 'Axis-2 adversarial rounds across 4 changes: ⑤ lane fixture (PR #231, 4 rounds), convergence criterion (PR
771
+ #232, 6 rounds incl. the terminating one), probe-scope instrument (PR #233, 5 rounds)'
772
+ mode: isolated Agent, target fingerprint pinned in every dispatch (Step 0 WRONG-TARGET contract)
773
+ outcome: accepted
774
+ evidence: 15 rounds, ~30 findings, all closed or named as residuals. Yield vectors recorded per change in the
775
+ Axis-2 markers. Two rounds returned findings that reversed a prior repair's direction, which is what drove criterion
776
+ 4 (reduce the design) firing three times.
777
+ note: 'Highest-value catches were the ones a same-family author structurally could not self-generate: exit code
778
+ 2 colliding with bash''s syntax-error code; the pre-push hook dropping an advisory''s remediation line while
779
+ keeping its warning; a control validating a different code path than the number it certified.'
780
+ - date: '2026-08-02'
781
+ agent: codex gpt-5.5 (cross-family sidecar, headless exec)
782
+ task: 'Cross-family adversarial leg on the ⑤ lane fixture change (PR #231) — the load-bearing half of the session'
783
+ mode: headless `codex exec -m gpt-5.5 -` with a fingerprint-pinned Step 0
784
+ outcome: accepted
785
+ evidence: '0 S/A + 3 B, all accepted and closed. Named the cross-round blind spot the same-family rounds kept
786
+ re-creating: caller-surface optimism — the subject is tested directly and the production wrapper is assumed
787
+ to expose the same signal (it did not, twice).'
788
+ note: The one finding no Claude round produced. Cost ~128k tokens for one round; the decorrelation axis matched
789
+ the failure mode (blind spot, not scale).
790
+ - date: '2026-08-02'
791
+ agent: general-purpose pinned to sonnet (target-tier sim)
792
+ task: 'Sonnet-floor sim on the new convergence criterion (PR #232) — does a base-floor session actually follow
793
+ the rule?'
794
+ mode: isolated Agent, model:sonnet, blind scenario (4-round history, asked to judge convergence)
795
+ outcome: accepted
796
+ evidence: '6/6 correct with file+section citations: judged NOT converged for the right reason (the clean round
797
+ followed a repair), mapped the scenario onto the repo''s measured example structurally, separated hook-validated
798
+ marker fields from convention-only axis2-rounds, and named criterion 4''s forbidden move.'
799
+ note: 'Closes the named residual on PR #232''s marker (target-tier sim NOT RUN). The rule holds at the base floor
800
+ without opus-tier reasoning.'
801
+
802
+ - date: '2026-08-02'
803
+ agent: general-purpose x2 pinned to sonnet (ablation known pair)
804
+ task: 'First real ablation in this repo: is CLAUDE.md §New Skill Creation Pre-Commit Gate (1,310 chars) redundant
805
+ with the paths-scoped rule file that holds its detail?'
806
+ mode: two isolated agents, one given the asset WITH the section and one WITHOUT, both forbidden any other file
807
+ access; asked the section's own regression probe question
808
+ outcome: accepted
809
+ evidence: 'Arm A: all 6 bar items + the Done-When consequence + the routing/gate Step-0.5 obligation, all self-labelled
810
+ GROUNDED. Arm B: NOT IN MY CONTEXT for all three. VERDICT KEEP.'
811
+ note: 'The file-access ban is the experiment — ablation asks whether the text is knowable without residency, not
812
+ whether an agent can locate it. Both arms independently cited the same residual (the paths: trigger is a READ,
813
+ so a from-scratch Write never loads the detail rule), which is exactly the path the probe encodes. Method costs
814
+ ~2 min/section and replaces the coverage number that was cut for being wrong four times.'