Commit graph

5 commits

Author SHA1 Message Date
fed422a3a3 T01: audit every InnerLoop rule, and make the checkable ones executable
41 rules classified executable / checkable / decorative, each tagged with
the failure class it catches. Counts: 11 executable, 22 checkable, 4
decorative (one of them dead policy).
Audit: history/260731-inner-loop-rule-audit.md

New tools/loop-lint.py makes 7 rules executable (tier declared, chaos
roll recorded, tier-L review trail, unmeasured-in-evidence, whole-file
loadability, reporting tools expose --self-test). It found three real
violations on its first run, none previously visible:

  - specs/ArchitectureBlueprint.md was 543 lines against a ~400 limit
    the loop has stated since v0.2 and never measured. Split at its own
    section boundaries into Blueprint (1-8) + Runtime (9-15).
  - tools/dep-weight.py and tools/rule-coverage.py had positive-control
    logic and no --self-test, so nothing verified the control worked.

Adding rule-coverage's self-test exposed a latent instance of the exact
class this workplan is about: if the spec regex stopped matching, rules
was empty, missing was empty, and the tool exited 0 reporting "0/0" --
a silent pass, in the tool that reports our headline AM-1 number. Both
tools now assert they found something before reporting.

Two demotions applied in the spec rather than left implicit: "structured
over prose" is marked guidance (nothing can check it), and the 8k/10k
token budget is struck through and marked DEAD POLICY pointing at T05.

The audit's uncomfortable finding: rule 13 (re-derive inherited numbers)
has no mechanical form, is deliberately left decorative, and caught the
LARGEST error in CB-WP-0002. That is a counter-example to this
workplan's own hypothesis. "A rule that cannot be executed is not a
rule" is wrong as stated; the defensible version is that such a rule
cannot be relied on to fire, so it must not be the only defence for a
class that matters.

Class coverage: harness-does-nothing has five executable rules;
trusted-arithmetic has ZERO and produced the largest single error.

make loop-lint and make self-tests wired into `make all` and CI.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 09:16:00 +02:00
ee1ee485b2 Sync hub IDs and work-record index for revised CB-WP-0003
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 09:11:26 +02:00
06b3df6eca Revise CB-WP-0003 from CB-WP-0002's findings
Some checks failed
ci / check (push) Failing after 4s
The framing hypothesis -- a rule that cannot be executed is not a rule
-- survives but was too coarse. CB-WP-0002 corrected one number four
times and each correction came from a DIFFERENT mechanism, none finding
more than one. Two limits are now measured rather than assumed:

  - a positive control cannot catch trusted arithmetic (both errors in
    $248.46 were sums over data that really existed)
  - adversarial review cannot catch a same-sample blind spot: survey and
    reviewer both verified dedup on the main transcript, and it is false
    in the subagent tree neither examined

Task-level revisions:

  T01  also classify each rule by WHICH failure class it catches; seven
       instances across three classes are now on record
  T02  scope reduced -- the --self-test contract, cb-cost's five
       assertions, make cost-test in CI are delivered; remaining work is
       rule-coverage/dep-weight plus a check that new tools carry one
  T03  now backed by two measurements ($0.66, $1.11 at ~1% of a pass),
       and must also state what review CANNOT do
  T04  premise overturned -- sessions are bounded-quadratic, not
       quadratic. /compact cut context 27x and cost/turn 3.1x. Measure
       compaction against a fresh session before prescribing either
  T05  unblocked, with calibration data ($1.29-$21.02/task) and the
       constraint that a budget binds only on the 67.5% attribution
       reaches, only after the closing commit
  T07  sharpened -- CB-WP-0002 retargeted three times, correctly, so a
       blanket prohibition is wrong; separate instrument-disproved-target
       from implementation-missed-target
  T10  its prediction is already falsified; the successor question is
       whether class-by-class hardening converges at all
  T11  NEW -- the price sheet cannot express a dated rate and becomes
       wrong on 2026-08-31

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 09:11:08 +02:00
fc76445aec Sync hub IDs for CB-WP-0003 and work-record index
Some checks failed
ci / check (push) Failing after 4s
Written back by fix-consistency: workstream and task UUIDs for the ten
CB-WP-0003 tasks, plus the regenerated WORK-RECORDS.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 04:17:59 +02:00
291d1e9798 Add CB-WP-0003: harden the loop from its own review
Some checks failed
ci / check (push) Failing after 3s
Covers what the immediate CI fixes did not. Framing finding: writing a
rule into InnerLoop did not prevent the next instance of the failure it
was written for; making it a CI step caught one on its first run. Four
instances of the harness-does-nothing class, zero prevented by prose.

Working hypothesis: a loop rule that cannot be executed is not a rule.
Each item is made executable or deleted, default delete.

Phase A makes rules executable: audit every InnerLoop rule as
executable/checkable/decorative, extend the positive-control gate beyond
benchmarks, and point adversarial review at measurement rather than only
research — all four real errors were in measurement and build config,
which the review never reads.

Phase B is session economics, from measurement: 592 turns, mean context
245k tokens, $0.245/turn in cache reads, zero batched tool calls, cache
reads 58% of cost against output at 12%. Cost is turns x context and
context grows with turns, so a long session is quadratic. Also replaces
the dead 8k/10k token budget, which was never enforced and which T08
exceeded by orders of magnitude with no signal.

Phase C removes or fixes the rest: resolve the chaos roll (never fired,
and at 1-in-10 will stay unevaluated), require retargeting to be an ADR
rather than something the implementer does in the commit that measures
the metric, give provisional items an owner and expiry, and strengthen
the coverage gate beyond tag-counting.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 04:03:29 +02:00