Skip to content

docs(kickoffs): correct three falsified container-reachability claims, back a fourth with its probe - #1345

Merged
artyhoo merged 1 commit into
stagingfrom
claude/elated-taussig-eb1f0f
Aug 9, 2026
Merged

docs(kickoffs): correct three falsified container-reachability claims, back a fourth with its probe#1345
artyhoo merged 1 commit into
stagingfrom
claude/elated-taussig-eb1f0f

Conversation

@artyhoo

@artyhoo artyhoo commented Aug 9, 2026

Copy link
Copy Markdown
Owner

What

A cold backward sweep over negative-existence claims in .claude/orchestrator-prompts/**, docs/meta-factory/research-patches/**, docs/superpowers/** and .claude/rules/*.md (845 claim-lines / 431 files, 31 examined) returned five GAP-FOUND items. Each is re-measured here against the live aif-handoff-agent-1, not carried over from the sweep's numbers. Original wording is struck in place, not deleted — these are dispatch inputs and their history is the evidence that the shape recurs.

# File Claim Verdict
1 meta-orchestrator-refactor/kickoff.md §4c Superpowers plugins «NOT available» in container FALSE
2 same §4c audit-plan.md «NOT reachable» FALSE (load-bearing — it steered the runner choice)
3 token-economy-research-s-b/kickoff.md §2 ~/.claude/projects/*rules-as-tests-aif*/ «does not exist in the aif container» FALSE
4 same §0 claude-code-guide «NOT available (operator-verified precedent)» FALSE
5 getff-freshness-widening-meta-launch/kickoff.md §1 .ai-factory/rules-decisions.md «does not exist» TRUE — form defect only (no citation); probe added

Measurements

  • feat: audit fixes Phase 1+2+3 (R2/R11 drift, manifest SSOT, depcruise integration) #1docker inspect aif-handoff-agent-1 --format '{{range .Mounts}}…' → 8 mounts, two for plugins: /host_mnt/Users/art/.claude/plugins → /home/node/.claude/plugins and → /Users/art/.claude/plugins, the second mirroring the host-absolute path so installed_plugins.json's installPath resolves verbatim. Inside: superpowers 6.2.0 (gitCommitSha 3dcbd5c4b4), 14 SKILL.md. Same row's ~/.claude/skills/ half was wrong in the other column too — orchestrator/ and reviewer/ exist on neither side (host tree is ai-docs, design-compare, native-css-responsive, uniq-rewrite).
  • feat: self-application + meta-factory foundation (Phase 0.5–3) #2 — the premise half holds: git check-ignore -v resolves audit-plan.md to .gitignore:16, so it is genuinely not in the clone. The conclusion does not: CANON is a bind mount (/host_mnt/Users/art/.claude-coordination → /home/node/.claude-coordination) and docker exec aif-handoff-agent-1 ls /home/node/.claude-coordination/rules-as-tests-aif/meta-orchestrator-refactor lists audit-plan.md (33372 B) first. Not-in-the-clone ≠ not-reachable.
  • chore(meta-factory): Phase 3 Step 0 retrofit + 3 MAJOR fixes #3ls -d /home/node/.claude/projects/*rules-as-tests-aif*102 dirs; find … -name '*.jsonl'934, newest same-day. Caveat stated rather than swapped in silently: /home/node/.claude is the aif-handoff_claude-auth volume (not a host bind), dir names are container paths (-home-www-…), so those are the container's own worker sessions — a different population from the 247 host operator sessions §2 profiles. §2's binding INCONCLUSIVE grammar is unchanged.
  • Phase 4: Stack Detector v1 (read+write AIF bridge, CI gate, reviewer cycle complete) #4grep -ao over /usr/local/lib/node_modules/@anthropic-ai/claude-code/bin/claude.exe (v2.1.218) returns the agent definition carrying source:"built-in", baseDir:"built-in", model:"haiku". Egress works: docs.claude.com301, api.anthropic.com404. The paired INCONCLUSIVE fallback stands.
  • feat(meta-factory): Phase 5+6 — L2 Research Agent + L3 Synthesizer Path A (deterministic v1) #5ls .ai-factory/rules-decisions.mdNo such file or directory; ls .ai-factory/ → four JSON files, no markdown ledger.

The #2 steering decision — WITHDRAWN, not re-decided

§4c's «CC session is the RECOMMENDED runner» rested on three stated advantages, now measured false (Superpowers: available in both), false on both sides (orchestrator//reviewer/: absent from the host), and false (audit-plan.md: reachable in both). Its prescribed workaround — inline the plan, or temporarily commit a gitignored dispatch input — was unnecessary the whole time.

It is not re-decided: the umbrella closed 2026-06-03 (PR #399, done.md), so no live runner choice exists, and picking one from a corrected fact-base would repeat the error in the other direction. What the correction changes is the section's value as precedent — the table now carries an explicit re-verification trigger, because it had none.

Also in the diff

meta-orchestrator-refactor/kickoff.md gains a host-verify: none opt-out. It predates destination-environment-verification.md, and the edit-time gate blocks any edit without one. The umbrella is closed, so the honest declaration is «no executable deliverable left to gate» — not a fabricated contract (#optout-as-reflex avoided by the fact that there is genuinely nothing left to run).

Verification (host)

npx markdownlint-cli2 <all three>                                    → 0 errors
npx vitest run packages/core/principles/12-ai-laziness-traps.test.ts → 7/7
bash scripts/host-verify.sh --list meta-orchestrator-refactor        → exit 0 (opt-out, 247 chars)
bash scripts/host-verify.sh --list token-economy-research-s-b        → exit 0 (4 commands)

Pre-push suite green (46/46 across 4 files, link-check 21 OK / 0 errors, always-on 31293B within 54000B ceiling).

Not done here, deliberately

  • Structural gap (rule change → surfaced, not autopiloted per CLAUDE.md PR strategy): destination-environment-verification.md gates the positive direction only — whether a kickoff declares a host-verify contract. Nothing gates the negative «the container cannot reach X», and none of the four false claims carried a re-verification trigger; meta-orchestrator-refactor was stamped «Verified 2026-06-03» and froze while the mounts moved underneath it.
  • Coverage is insufficient to call the class clean (T14). 31/845 claim-lines = 3.7%; ~107 lines of the high-risk destination-environment sub-stratum are unexamined. Widening the sweep is a reasonable follow-on, not a conclusion this PR is entitled to.

§1.7 Forward-check applied

Complies with .claude/rules/destination-environment-verification.md:1 §1 — the one file lacking a contract now carries an explicit ≥20-char opt-out at .claude/orchestrator-prompts/meta-orchestrator-refactor/kickoff.md:1 rather than silence (#silent-contract-skip), and scripts/host-verify.sh --list exits 0 on both umbrellas. Complies with .claude/rules/ai-laziness-traps.md:1 §2 — T3 (every corrected line carries command + output, not prose; e.g. the .gitignore:16 resolution behind item #2), T20 (no verdict issued without an evidence-bearing call in the same turn), T14 (3.7% coverage reported as insufficient, never as «class clean»). Complies with .claude/rules/kickoff-staging-placement.md:1 §1 — these are tracked kickoffs and this PR is the merge-to-staging step that makes the corrections visible to dispatch sessions. CLAUDE.md Artifact Ownership Contract respected: no README/EXECUTION-PLAN/PROPOSAL/rules edit, and docs/meta-factory/prior-art-evaluations.md untouched (Prior-art: skipped — documentation only).

§1.7 Backward-check applied

Class of this change = negative-existence claims about the destination environment, asserted in a dispatch input without a probe of it. Surfaces where that class occurs, enumerated beyond this diff: (a) .claude/orchestrator-prompts/** — the sweep's population, GAP-FOUND ×4, all in this diff, and the remaining ~107 high-risk lines are declared UNEXAMINED rather than swept-clean; (b) .claude/rules/destination-environment-verification.md:20GAP-FOUND: §1's contract grammar covers only the positive direction, no clause reaches a «cannot reach X» claim; surfaced above, deliberately not fixed here (rule ownership + one concern per PR); (c) .claude/rules/attention-is-not-a-mechanism.md:17SWEPT-CLEAN: the four false claims are precisely its #hope-as-gate shape (detection left to «someone will notice the stamp is old»), and this diff adds a re-verification trigger rather than relying on attention, so the rule is reinforced, not contradicted; (d) packages/core/principles/12-ai-laziness-traps.test.ts:1SWEPT-CLEAN: 7/7 after the edits, the §3 T-enumeration blocks in all three kickoffs are untouched; (e) .claude/rules/kickoff-staging-placement.md:30SWEPT-CLEAN: same path scope, orthogonal concern (merge timing, not claim truth), nothing superseded.

🤖 Generated with Claude Code

Fidelity verdict

FIDELITY: skipped — no dispatch kickoff was implemented here, so there is no kickoff-to-implementation fidelity to audit. This PR corrects falsified facts inside three kickoffs against fresh container measurements; every claim it makes is itself the evidence, quoted in full above.

…, back a fourth with its probe

A cold backward sweep over negative-existence claims in `.claude/orchestrator-prompts/**`,
`docs/meta-factory/research-patches/**`, `docs/superpowers/**` and `.claude/rules/*.md` (845
claim-lines / 431 files, 31 examined) surfaced five GAP-FOUND items. Each is re-measured here
against the live `aif-handoff-agent-1`, not against the sweep's numbers.

Every falsified claim shares one shape: a negative-existence claim about the DESTINATION
environment, inferred from how the container is assembled rather than probed on the running
container, then frozen behind a «Verified <date>» stamp carrying no re-verification trigger.
Original wording is struck in place, not deleted — these are dispatch inputs and their history
is the evidence that the shape recurs.

- `meta-orchestrator-refactor/kickoff.md` §4c — «Superpowers plugins NOT available» is false.
  `docker inspect` returns 8 mounts, two of them for plugins:
  `/host_mnt/Users/art/.claude/plugins → /home/node/.claude/plugins` AND `→ /Users/art/.claude/plugins`,
  the second mirroring the host-absolute path so `installed_plugins.json`'s `installPath` resolves
  verbatim. Measured inside: superpowers 6.2.0, 14 `SKILL.md`. The same row's `~/.claude/skills/`
  half was wrong in the other column too — `orchestrator/` and `reviewer/` exist on neither side.
- Same file §4c — «`audit-plan.md` NOT reachable» is false, and it was load-bearing. The premise
  half holds (`git check-ignore -v` → `.gitignore:16`, so it is genuinely not in the clone); the
  conclusion does not — CANON is a bind mount and `docker exec … ls` lists the file (33372 B).
  The steering it fed (§4c «CC session is the RECOMMENDED runner», plus a workaround prescribing
  inlining or temporarily committing a gitignored file) is WITHDRAWN, not re-decided: the umbrella
  closed 2026-06-03 (PR #399), so no live runner choice exists, and picking one from a corrected
  fact-base would repeat the error in the other direction. What changes is its value as precedent.
- `token-economy-research-s-b/kickoff.md` §2 — «that path does not exist in the aif container» is
  false: 102 project dirs, 934 `.jsonl`. Correcting it without a caveat would have been the same
  laziness, so the caveat is stated — `/home/node/.claude` is the `aif-handoff_claude-auth` volume,
  the dir names are container paths, and those transcripts are the container's own worker sessions,
  a different population from the 247 host operator sessions §2 profiles. §2's binding
  INCONCLUSIVE grammar is unchanged.
- Same file §0 — «`claude-code-guide` NOT available (operator-verified precedent)» is false. It is
  a built-in agent inside the container's own CLI: `grep -ao` over
  `/usr/local/lib/node_modules/@anthropic-ai/claude-code/bin/claude.exe` (v2.1.218) returns its
  definition with `source:"built-in"`, `baseDir:"built-in"`, `model:"haiku"`. Egress works too
  (`docs.claude.com` → 301, `api.anthropic.com` → 404). The paired INCONCLUSIVE fallback stands.
- `getff-freshness-widening-meta-launch/kickoff.md` §1 — `.ai-factory/rules-decisions.md` «does not
  exist» is TRUE and re-verified; it was the only line in its T3 anchor block with no citation
  while every neighbour had one. Command + output added.

The first file additionally gains a `host-verify: none` opt-out — it predates
`destination-environment-verification.md` and the edit-time gate blocks any edit without one; the
umbrella is closed, so the honest declaration is «no executable deliverable left to gate», not a
fabricated contract.

Verified on the host: `markdownlint-cli2` 0 errors over all three;
`vitest run packages/core/principles/12-ai-laziness-traps.test.ts` 7/7;
`scripts/host-verify.sh --list` exit 0 for both umbrellas that own a contract.

Not done here, deliberately (one concern per PR): `destination-environment-verification.md` gates
the POSITIVE direction only — whether a kickoff declares a host-verify contract — and nothing gates
the NEGATIVE «the container cannot reach X». That is a rule change, surfaced not autopiloted.
Sweep coverage was 31/845 claim-lines (3.7%), which is «coverage insufficient to conclude», not
«class clean» — ~107 lines of the high-risk destination-environment sub-stratum are unexamined.

Prior-art: skipped — documentation only; corrects falsified facts in three existing kickoffs and
adds no capability, no dependency, and no new module.
@artyhoo
artyhoo merged commit d8a70b1 into staging Aug 9, 2026
46 of 47 checks passed
@artyhoo
artyhoo deleted the claude/elated-taussig-eb1f0f branch August 9, 2026 20:08
artyhoo added a commit that referenced this pull request Aug 9, 2026
… — a doc citation is not a probe (#1347)

§1 gates one direction: does a kickoff declare what must pass on the host. Nothing gated the
opposite claim — «X is NOT available in the container», «that path does not exist there» — and
measured over the same surface, that is where the falsified statements actually live.

Six of them, across four umbrellas, now recorded as §2b with the probe that falsified each:

- «container lacks ast-grep (no network)» → `npm view @ast-grep/cli` → 0.44.0, `curl` → 200
- «container lacks ~/.claude/projects, /context, live CC» → 746 .jsonl (arch-v2 FORK C)
- «Superpowers plugins NOT available» → `docker inspect` → 8 mounts, two of them for plugins
- «audit-plan.md NOT reachable» → `docker exec … ls` lists it, 33372 B
- «that path does not exist in the aif container» → 102 dirs, 934 .jsonl
- «claude-code-guide NOT available (operator-verified precedent)» → compiled into the
  container's own CLI as `source:"built-in"`

Rows 1-2 were caught independently by the umbrellas that owned them, months apart; rows 3-6 by
the cold sweep in #1345. What they share is not carelessness about whether to cite — rows 3 and 6
both cite something. It is carelessness about what a citation can establish. Row 3 cited
`runtime-bridge-setup.md:40`, a doc that described how the runtime was assembled, while the mount
set had moved underneath it. §1b's load-bearing sentence is therefore: a primary-doc citation is
not a probe of the environment. Cite the doc for why it should be so; cite the probe for that it
is so. Rows 3-4 also inferred not-reachable from not-in-the-clone, which `git check-ignore` cannot
answer — it is a question about the repository, not the environment.

An own-stack analog exists and is promoted rather than reinvented: `arch-v2-context-pipeline-s-e/kickoff.md:257`
T-SE-B already told its executor that «container-unreachable claims carry a primary-doc citation
or park». §1b corrects it — the primary-doc citation is the insufficient case, not the sufficient
one — and row 3 is the evidence.

Deliberately NOT a gate, and the verdict is measured rather than argued. A candidate detector was
built and replayed against the six claims in pre-correction wording, 15 curated
conditional/defensive negatives, and the live 115-line stratum: recall 4/6 (both misses
structural — one claim names the destination only in a table column header two rows up), 0/15 on
the curated negatives, and 54/115 fired in the wild against ~6 real defects, precision ~11%. The
noise is a category mix, not a tuning artefact: error-code enums (`'unavailable'|'quota_exceeded'`),
counter-measures against this very trap, already-corrected records, deliberate
graceful-degradation design, and claims about a repo rather than the container. Flagging half a
surface to catch two-thirds of six defects is `#gate-where-judgment-needed`. §5 records the
numbers and a re-gate trigger keyed to claim FORM (three incidents stated in a structured slot a
parser can address), never to a flag count.

Three ad-hoc domain T-traps of this shape (T-SE-B, T-AIP-B, T-SH-A) meet ai-laziness-traps.md §5's
promotion criterion. Not promoted here: that catalogue is a different rule with a coupled
anti-drift gate (principle 35 quotes the digest verbatim), so it is a separate change with a
separate owner. Recorded as GAP-FOUND in the backward-check.

Verified on the host: principles 353 passed / 1 skipped (37 files); markdownlint 0 errors;
rule index + AGENTS.md region regenerated via `render-rule-index.mjs --write`; every cited
file:line opened and quoted.

Prior-art: skipped — documentation only; widens the scope of an existing rule whose own SSOT entry
is #229, reuses this file's existing edit-time injection marker, and adds no module, no
dependency, and no gate.

§1.7: forward-check applied — channel picked on the detectability axis from a measurement, not an assertion (rule-enforcement-channel-selection.md §1; recall 4/6, 54/115 wild firings recorded in §5); deterministic bash only, zero API calls (no-paid-llm-in-ci.md); paths: and <!-- globs: --> unchanged and still identical (principle 31, 21/21); no new .md file so no new doc-authority surface (doc-authority-hierarchy.md §2, principle 09 green); BFR — no new capability, reuses this file's own injection marker, SSOT #229 is this contract's entry and its scope widens rather than forks; own-stack-first RAN and found T-SE-B at arch-v2-context-pipeline-s-e/kickoff.md:257, which §1b promotes and corrects rather than reinvents. backward-check sweep — class = negative-existence claims about live destination state in a dispatch input; (a) .claude/orchestrator-prompts/** GAP-FOUND x6, all enumerated in §2b; (b) the three ad-hoc domain T-traps T-SE-B / T-AIP-B (multi-model-pipeline-pilot/kickoff.md:123) / T-SH-A (arch-v2-context-pipeline-s-h/kickoff.md:178) GAP-FOUND, deliberately not closed — ai-laziness-traps.md §5 promotion belongs to a different rule with a coupled anti-drift gate (principle 35); (c) phase-research-coverage.md §1 SWEPT-CLEAN — owns negative-existence claims generally, §1b instantiates and points upward; (d) attention-is-not-a-mechanism.md §1 SWEPT-CLEAN — the frozen «Verified» stamp is #hope-as-gate, answered with a stated re-verification probe; (e) kickoff-staging-placement.md SWEPT-CLEAN — same path scope, orthogonal concern.

Co-authored-by: Test <test@example.com>
artyhoo added a commit that referenced this pull request Aug 9, 2026
…s EVALUATED-and-routed, not un-noticed (#1348)

Three wave-specific T-additions of adjacent shape sit in closed kickoffs — T-SE-B
(observation-by-assumption), T-AIP-B (registered-in-repo != wired-in-container), T-SH-A
(pricing-by-assumption). Anyone recounting them against §5's «2+ wave-specific T-additions of one
failure mode -> abstract into §2» reaches for a T22. It was considered and declined; without this
record the same question re-opens on the next recount, which is how a decided fork becomes
recurring work.

Declined on three measured grounds, all in the new §5 bullet:

1. Not one failure mode. T-SE-B is a NEGATIVE claim about the environment, T-AIP-B its POSITIVE
   inverse («registered, therefore wired»), T-SH-A not environment-scoped at all. The only
   abstraction covering all three degrades to «probe, don't assume» — which is T3.
2. Channel mismatch, in the expensive direction. The class is path-scoped to
   `.claude/orchestrator-prompts/**`, while `ai-laziness-digest.md` is always-on core
   (`00-rule-index.md:10`) and principle 35 obliges every new §2 entry to carry a >=60-char
   verbatim digest line (`35-…test.ts:94-98`, MIN_QUOTE). That is a permanently resident cost for
   a surface-scoped concern — `#always-on-bloat`. Catalogue is also at 21/25 against §5's own
   split threshold.
3. The coverage already ships at the right channel: `destination-environment-verification.md §1b`
   (PR #1347), `paths:`-scoped to exactly that surface, six-incident base, plus the measurement
   that rejected a gate. All three source umbrellas are closed (2026-07-23, 2026-08-07 ×2), so no
   live re-invention exists for a promotion to stop.

The bullet carries the falsifier rather than leaving the verdict permanent: re-open if a kickoff
authored after 2026-08-09 invents its own container-reachability trap despite §1b's edit-time
injection — that falsifies the channel argument and the digest cost becomes worth paying.

Second change, same concern: T-SE-B's own counter was left stating «container-unreachable claims
carry a primary-doc citation or park». §1b establishes that a primary-doc citation is the
INSUFFICIENT case, and the falsification is concrete — `meta-orchestrator-refactor` §4c cited
`runtime-bridge-setup.md:40` for «Superpowers plugins NOT available» and `docker inspect` returned
two plugin mounts. Corrected in place with the original struck (the #1345 treatment), since the
umbrella is closed and the file is now a historical record.

Verified on the host: principles 12 + 35 + 09 -> 51/51; markdownlint 0 errors over both files;
both files well under the 600-line gate (218 / 266).

Prior-art: skipped — documentation only; records an already-taken routing decision in an existing
rule's §5 and corrects one stale counter, adding no capability, no dependency, no new module.

§1.7: forward-check applied — complies with rule-enforcement-channel-selection.md §5 (the decision
recorded IS the `#always-on-bloat` avoidance, argued from 00-rule-index.md:10 + principle 35's
MIN_QUOTE coupling rather than from taste); no-paid-llm-in-ci.md (prose only, zero API calls);
doc-authority-hierarchy.md §2 (no new .md, headers untouched, principle 09 green); ai-laziness-traps.md
§5 is this file's own promotion/retirement section, so the edit lands in the section that owns
promotion verdicts; no §2 T-block added, so the principle-35 digest coupling is untouched by
construction (35/35 green). backward-check sweep — class = a promotion criterion that will be
re-evaluated by future readers and needs its prior verdict visible. (a) ai-laziness-traps.md §5
GAP-CLOSED here; (b) the three source kickoffs — T-SE-B corrected in place, T-AIP-B
(multi-model-pipeline-pilot/kickoff.md:123) and T-SH-A (arch-v2-context-pipeline-s-h/kickoff.md:178)
SWEPT-CLEAN, their counters are not falsified by §1b (one is the positive direction, one is not
environment-scoped); (c) destination-environment-verification.md §5 SWEPT-CLEAN — it already
records the T-trap family as GAP-FOUND-not-closed, and this commit is the closure that entry
anticipated, so the two do not contradict; (d) ai-laziness-digest.md SWEPT-CLEAN — deliberately
unchanged, which is the whole point of the verdict.

Co-authored-by: Test <test@example.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant