Piper · Cognition
Log in

Summary / Component 12 of 38

12 Decomposition

Breaking a problem into manageable parts.

Latest67.1v1
Baseline67.1Oct 10
Live use—last 7 days

Shared copy: the operator's name is replaced with "the operator", machines other than Firefly are named by their role, and one security detail is held back. Nothing else is changed.

Piper — what it is

Work is decomposed into projects, deliverables and dispatch tasks with an explicit acceptance for each, because a task without a bar is a task nobody can finish. A change of any size is turned into a spec before code when it matters, and the delegation contract enforces the shape: mode, objective, write scope, acceptance, forecast.

Piper — the parts that do it

work-ledger v1.3.50, plan tooling, spec-compiler v1.0, delegate-bridge v1.107.1 contract checks, harness-acceptance v1.22.0.

Reviewer Claude, 2026-09-30

What needs improving: Splits near-perfect, acceptance over-specified: her tests reject valid work (baseline 67.1)

The concept is right and the practice is real. The plan tool has 416 calls. The bridge enforces the contract: a forecast is required, and acceptance and write-set are checked. harness_acceptance is heavily used. The weak point is not how she breaks work up but the quality of the acceptance bars: the history includes bars that could not fail (the cango gate still lets vacuous ones through). spec-compiler has never run. The bridge version is stale in her text: 1.95.0, not 1.94.0. Update 10-10 (fresh audit): versions are now delegate-bridge 1.107.0, harness-acceptance 1.22.0, work-ledger 1.3.50. spec-compiler has one call ever (08-31) and none in production. cango blocked 0 of 178 bars in the last 200 dispatches; 63 of those bars are vacuous (file exists, doc length, JSON shape, self-printed PASS) and 78 run a check the worker writes itself. But on the sealed bench her bars are not vacuous: they kill 93.5% of injected faults and instead reject 80.6% of valid implementations. Details in the 10-10 entry.

Update 2026-10-15 — she built the other half: a detector for acceptance bars that would pass on empty work (log-only)

This page's finding is that her acceptance tests are over-specified (they reject valid work). On 10-15 (04:28, d-df6799) she built the mirror image: gameable_bar.py 1.0.0, wired into the pre-dispatch check, flags a bar that would pass on an empty or padded deliverable (file exists, size only, JSON keys only, a bare document read) and names the shape. It strips each weak construct and re-tests, so a bar that also asserts content is not flagged. It is advisory, log-only: nothing is refused yet, and no effect is measured. Her bridge already refuses bars that are green before the work (ALREADY_GREEN) or cannot finish (CANNOT_PASS); both fired overnight.

The DECOMP-12 baseline (67.1) is unchanged; nothing here was re-scored.

Update 2026-10-10 — audit, DECOMP-12 v1 built, baseline 67.1: her splits are near-perfect, her acceptance tests reject valid work; E1 anti-vacuity gate REVERT

The paper. The working paper (decomposition-v1) is right that decomposition is not just splitting work. A good split needs coverage, a valid order, clear interfaces, sensible ownership, and acceptance that can fail. Its sequence was followed: audit first, then a sealed benchmark, a frozen baseline, one intervention (E1, the anti-vacuity gate) under a preregistration, and keep or revert. E2–E7 were not built in this round.

Audit (Stage A, read-only, the 200 most recent real dispatches, 10-08 → 10-10). The 09-30 figures were re-checked, not carried forward. - Versions now: work-ledger 1.3.50, plan tool 1.7.0, delegate-bridge 1.107.0, harness-acceptance 1.22.0, cango gate 1.0.0 (enforcing since 09-27), plus a pre-flight that runs the bar before dispatch (1.2.0). - spec-compiler: still unused. It has been called once ever (08-31, her own test session) and never in production. - No acceptance type on 0/200 dispatches, and no dependency on 199/200. There is no requirement inventory and no parent oracle anywhere, so child-green/parent-red cannot be measured. - No executable bar: 22/200 (11.0%). Research, verify and write_db dispatches all lack one, as do 6 of 184 builds. - What the 178 command bars are: - 78 (43.8%) run a check script the worker writes in the same dispatch. - 63 (35.4%) are paper "D08" vacuous classes: file exists, doc longer than N, JSON keys present, or a [PASS] line the worker prints. - 36 (20.2%) test a real value the worker did not write. - Red before, green after looks perfect (141/145 verified) but mostly isn't evidence. 121 of the 141 were red only because the file did not exist yet. Red on a real predicate the worker did not write: 13/145. - The gates: cango blocked 0 of 178 in the window (22 of 1,204 in its lifetime). Mutation-tested bars: 0. Concurrent write overlaps: 0 of 23 pairs.

The bench (DECOMP-12 v1). - Cases: 24 working mini-repositories (6 dev, 18 sealed) across the paper's eight trip-the-system shapes: hidden authorization, a shared field with an easy unit mismatch, a drafted bar that cannot fail, module greens that hide a broken whole, a mid-flight requirement change, an incident investigation, a behaviour-preserving refactor, and a dispatch budget. - How they were made: a different model (Claude Sonnet) wrote them, and the developer never read the sealed ones. Each has a reference implementation, 2 valid alternatives, 5–6 validated fault mutants (107 in the sealed set) and an independent parent oracle. - The task: she gets the request and the repository, and must split the work into dispatches with dependencies, write sets, interfaces, an acceptance type, and an executable test file for every dispatch plus a parent test. - Scoring: her tests run in a sandbox against the hidden finished code (reference and alternatives), which they must pass, and against the mutants, which they must fail. Scores use the paper's §6 rubric and hard caps; a judge model maps her tasks to the hidden requirements. - Not scored: scheduling, which belongs to #13.

Baseline (18 sealed cases, her seat k=2, clean snapshot):

Her seat Bare model Her split + reference acceptance (B4)
Total 67.1 71.9 96.5
Essential requirements covered 100% 98.4% —
Mutants killed 200/214 (93.5%) 98/107 —
Valid implementations her tests reject 80.6% 58.3% —
Acceptance strength 18.5% 37.5% —
Parent test rejects the reference (cap 60) 8–9 of 18 8 of 18 —

What the baseline says. Her splitting is close to ceiling: every essential requirement is covered and every graph is valid. When the reference acceptance is put on her split, the score is 96.5. Given the reference split (B3), she scores 69.3, no better.

The deficit is the acceptance she writes. It is not vacuous; it is over-specified. Her tests catch the injected faults, but 161 of 636 reject a valid implementation: - wrong expected values (47); - assumed signatures (33); - assumed object attributes (25); - missing keys (18); - exception types (18); - file locations (11).

The paper's hard cap fires on half the cases because her own parent test fails the correct solution. This is D15 (misleading rejection), not D08.

The change tested (E1, PREREG-E1, locked and hashed before any sealed output). e1gate.py is a deterministic contract gate: - it types each bar; - it refuses constant, existence-only and shape-only tests; - feature bars must be red today; - they must also stay red when every imported function is replaced by a do-nothing stub; - regression bars must notice a deliberate change to the code they guard.

A blocked contract gets one revision turn.

Control E1 gate Δ (95% CI, paired case bootstrap)
Total 67.1 65.6 −1.4 [−3.6, −0.03]
Acceptance strength 18.5% 19.9% +1.4 (needed +10)
Requirement coverage 100% 96.8% −3.2 (limit −2)
vs field-validation-only gate −1.7 [−3.8, −0.1]

The gate made no false blocks on the 18 known-good contracts, and cost rose 6.9%. REVERT. This was the frozen prediction: the gate measures sensitivity, and her bars were already sensitive. Its 12 blocks forced revisions that lost requirements, and one revision returned no plan at all.

Shadow replay on her real dispatches. The same rules would block 119 of 200. Of 31 blocks checked by hand, 23 were false. Most were good two-way checks that the worker writes during the dispatch: the rule "the check must exist before dispatch" fights how she actually works. One "always-true" bar was a classifier error.

Next (not built). 1. An anti-over-specification check: tests may use only the request's stated API and observable behaviour, and are validated against a gate-owned valid variant (specificity, which E1 never measures). 2. E4 integration owner: a parent test that must pass a correct solution (integration earns 6.4/15 now). 3. E5: one shadow run of spec-compiler on DECOMP-12. 4. E2/E3 have little bench headroom (coverage 100%, overlaps rare), but the live ledger still has no requirements to link.

Parts that do it. Bench: ~/cognition-bench/12-decomposition (DIAGNOSIS, SPEC, PREREG-E1 + sha256, author12, validate12, sandbox12, run12, judge12, altcheck12, score12, acc12, e1gate, gatefb12, e1/e1shadow, paired12). Sealed cases, oracles, mutants and runs are root-only on the bench machine. Nothing was changed on Firefly.

Test suite built · DECOMP-12 v1 (24 cases: 6 dev + 18 sealed, authored by a separate model; 107 sealed fault mutants, valid alternatives, independent parent oracles; sandboxed tests) · baseline: her seat 67.1 (bare model 71.9; her split + reference acceptance 96.5) · splitting near ceiling, acceptance over-specified (rejects 80.6% of valid implementations) · E1 anti-vacuity gate PREREG-E1: −1.4 [−3.6, −0.03] — REVERT, not installed · E2–E7 not built

DECOMP-12 v1. 24 working mini-repositories (18 sealed) across the paper's eight trip-the-system shapes, written by a different model than the one that built the bench. She gets the request and the repository and must split the work into dispatches (dependencies, write sets, interfaces, acceptance type) with an executable test file for every dispatch and a parent test. Her tests run in a sandbox against the hidden finished code: they must pass the reference and the valid alternatives and fail the fault mutants (unit, integration and semantic). A judge maps her tasks to the hidden requirements. Paper §6 rubric (coverage 25, acceptance strength 25, dependency/interface 15, boundary 10, integration 15, efficiency 10) with its hard caps: 40 with no executable test, 60 when her parent test fails the correct solution. Scheduling is not scored (#13). The live-use part: the share of real dispatches whose bar discriminates wrong from right, not just absent from present.

Scoring rules shared by all 38 suites: How the tests work.

Research & attempts

Score history

Suite v1 current
0255075100Oct 1067.1

Dashed line: the suite's baseline. Shaded band: the ± interval. Hollow dots are anchor items carried over from an earlier suite. Scores from different suite versions are not comparable, so each version gets its own panel.

DateSuiteTypeScore±Live useCostNotes
2026-10-10v1anchor 69.36.3 —$0.78 Diagnostic B3: her seat given the reference split, asked only for acceptance (k=1): 69.3 (+2.2 [−3.6, +9.1] vs B0). B4 (her own split scored with the reference acceptance): 96.5. Her splitting is near ceiling; the deficit is the acceptance she writes.
2026-10-10v1anchor 71.96.3 —$0.15 Reference: her base model (deepseek-flash) with a one-line system prompt, same request, k=1: 71.9 (seat − bare −4.9 [−11.8, +2.1]). Bare kills fewer mutants (98/107) but rejects fewer valid implementations (58.3%), so its acceptance strength is twice hers (37.5% vs 18.5%).
2026-10-10v1sealed 67.15.4 —$1.22 DECOMP-12 v1 BASELINE (18 sealed cases, k=2): her Day seat as of 10-10 (seat 1.32.0, 09-30 clean snapshot fork, blind). Paper §6 rubric with hard caps. Requirement coverage 24.7/25 (100% of essential requirements), acceptance strength 4.6/25, dependency/interface 13.2/15, boundary 8.8/10, child-to-parent integration 6.4/15, efficiency 9.9/10. Mutation score 200/214 killed (93.5%), but her tests reject 80.6% of valid implementations (161 of 636 bound tests fail a valid one). Parent check rejects the reference on 8-9 of 18 cases (cap 60). Reps 67.5 / 66.6.

Experimental record

One entry per intervention: hypothesis, prediction, before and after, cost, side effects, and the keep-or-revert decision.

2026-10-10 · v1 ↺ reverted 67.1 → 65.6 (-1.5) ± 1.8 · $0.37

Hypothesis. Paper E1: a contract-time gate that makes every acceptance bar prove it can fail (type first, then static vacuity, red-before for feature bars, gate-owned stub-world negative controls, generic mutants for regression bars) raises acceptance strength and the overall score, without adding false rejections.

Research sources
Working paper decomposition-v1 §8-§10 (E1, X12-1); Stage A audit 10-10: 64/178 live bars are D08 classes, 78/178 run a check the worker writes in the same dispatch, cango blocked 0/178.
Implementation / version
e1gate.py 1.1.0 (deterministic, no model) on her sealed contracts; blocked contract -> one revision turn with the gate's message. Ablation: field-validation-only gate (f0). Bench only; nothing installed on Firefly.
Predicted improvement
Frozen before any sealed output (PREREG-E1): small or null, |delta| <= 4, REVERT or INCONCLUSIVE. Result: total -1.4 [-3.6, -0.03]; strength +1.4 points (needed +10); coverage -3.2 points (limit -2); E1 vs field-only -1.7 [-3.8, -0.1]. Gate false blocks on known-good contracts 0/18; cost +6.9%.
Regressions
Blocked 12 of 36 contracts; the forced revisions lost requirement coverage and one returned no plan at all. Real-dispatch shadow: would block 119 of 200 dispatches, and 23 of 31 hand-checked blocks were FALSE (mostly good checks the worker writes during the dispatch).
Lessons learned
Her bars already kill most mutants (93.5%); what they lack is specificity: they reject valid work (80.6%). E1 only measures sensitivity, so it cannot help, and a 'check must exist before dispatch' rule fights her real workflow, where workers write good two-way checks. Next: an anti-over-specification check (test only the stated API and observable behaviour, validated against a gate-owned valid variant) and an integration-owner pattern (E4).