Skip to content

docs(arch-v2): record operator verdicts on S-H DECISION-NEEDED #1 and #2 - #1250

Merged
artyhoo merged 1 commit into
stagingfrom
worktree-sh-verdicts-pr1
Aug 7, 2026
Merged

docs(arch-v2): record operator verdicts on S-H DECISION-NEEDED #1 and #2#1250
artyhoo merged 1 commit into
stagingfrom
worktree-sh-verdicts-pr1

Conversation

@artyhoo

@artyhoo artyhoo commented Aug 7, 2026

Copy link
Copy Markdown
Owner

Summary

Records two operator verdicts (2026-08-07) on S-H's open forks, where the consumer reads them
not by editing the S-H research patches, which are append-only and read-only for later sessions per
the Artifact Ownership Contract.

fork verdict recorded at
DECISION-NEEDED #2 — the [W] denominator Option A — [H] operative from S-H onward, [W] historical spec's binding denominator convention + the N1 falsifier cell
DECISION-NEEDED #1 — corpus drift Option B — host-side snapshot of the per-turn billing projection before any prune S-D′ kickoff, as an INPUT CONDITION

DECISION-NEEDED #3 was answered by the /context paste and shipped in #1249. #4, #5, #6
remain open by design and are untouched here.

Recording these does not unblock S-D′: that stage stays not dispatchable for two independent
reasons — its own §5 fork (resolved by the operator, but recorded only in the follow-up rev-6 PR)
and the two-gate S-E + S-H merged dependency, of which S-E has not merged.

Changes

docs/superpowers/specs/2026-08-06-pipeline-token-economy-design.md — two annotations:

  1. After the binding denominator convention: [W] is HISTORICAL from S-H onward. Stated as a
    constatation, not a preference — [W]'s 169-session subset is physically unrecoverable,
    because worktree pruning deleted 34 project directories together with their transcripts, so «the
    169-session subset cannot be re-selected by re-running anything»
    (…-s-h-turn-attribution-p3d-p11.md:112, cause :92). Three binding consequences spelled out:
    existing [W]-tagged shares stay readable as history but are not comparable past 2026-08-07;
    no new figure may be tagged [W]; every [W]-defined threshold is re-adjudicated on [H] or
    marked un-adjudicable. Non-convertibility is restated, citing the patch's own caveat at :168.
  2. The one [W]-defined threshold — N1's falsifier — annotated in place: struck through, marked
    un-adjudicable as written, given its operative [H] restatement, and carrying the standing
    reading 16.5% > 5% → the discipline text STAYS (:154, Option-A consequence :162).

.claude/orchestrator-prompts/arch-v2-context-pipeline-s-d-prime/kickoff.md — an INPUT
CONDITION in the header region, beside the existing two-gate dependency:

  • Why: this stage's before/after measurement is invalid on a corpus that shrinks under it —
    −23.5% between the seed and S-H (247 → 189 files, 99 → 65 project dirs), a population change, not
    drift (…-s-h-turn-attribution-p3d-p11.md:73-95).
  • Binding: the billing-projection snapshot is captured before any worktree prune, and this
    stage's baseline cites the snapshot it used.
  • Form — reuse, not build: copy the shape of the existing origin/data/metrics channel (one
    appended CSV row per day on a data branch, outside main history) but not its mechanism — that
    is a CI cron (.github/workflows/metrics-collect.yml) collecting GitHub popularity counters
    (date,stars,forks,clones_…), and the corpus lives at ~/.claude/projects, which CI cannot
    reach. The snapshotter is host-side by construction, not by preference.
  • Scope fence: authoring the snapshotter is explicitly not this stage's deliverable — the
    clause states the precondition and its form; the owning stage is named at dispatch.
  • Footnote — one consumer, not two: with S-D′ §5 resolved to Option A (operator verdict
    same date; the resolution itself lands in kickoff rev 6, a separate PR), the ADR-8 A/B arm is
    descoped, so the surviving consumer of a stable baseline is this stage's own before/after.
    ADR-8's 20-dispatch window travels to the follow-on stage, which inherits the same condition.

Prior-art consult

  • The commit carries a Prior-art: trailer — escape-hatch form. Not a capability commit under
    the CLAUDE.md mechanical definition: no new dependency, no file under packages/.
  • Build-vs-reuse was actually exercised, not asserted: the own-stack channel
    (origin/data/metrics + .github/workflows/metrics-collect.yml) was found and read before
    any mechanism was proposed, and rejected on a stated, checkable ground (CI has no path to
    ~/.claude/projects) — the #own-stack-blind-spot counter from
    build-first-reuse-default.md §1.1. Its form is
    reused; only the mechanism is new, and this PR does not build it.
  • No new capability area → no new SSOT entry; no existing entry matched → no Last reviewed
    touch.

Test plan

  • npx vitest run packages/core/principles/36 files / 348 passed, 1 skipped.
  • bash .claude/hooks/check-kickoff-traps.sh …/arch-v2-context-pipeline-s-d-prime/kickoff.md
    EXIT 0 (§4 T-enumeration intact; this PR does not touch §4).
  • markdownlint — 0 errors on both files.
  • 600-line markdown gate — spec 564, kickoff 322.
  • Pre-commit + pre-push hooks ran clean (no --no-verify).
  • Every citation introduced by this diff was verified mechanically against the cited line,
    not from recall — a sed -n '<n>p' | grep probe per citation. One citation failed the probe
    and was tightened before commit: :111-112:112, because the quoted clause lives entirely
    on :112 and :111 only carries the sentence's lead-in.

Provenance

n/a — not a stage PR: this executes no kickoff and produces no stage deliverable; it records operator decisions into an existing spec and an existing kickoff.

Review findings

Self-review only, and stated as such. The substance is operator-authored (both verdicts and their
grounds arrived in the handoff); my contribution is placement, wording and citation. The failure
mode this workstream has actually exhibited — nine REVISE rounds on the S-H addendum — is derived
quantities across mismatched populations
, and this diff derives nothing: it introduces no
share, ratio, product or magnitude word of its own. Every figure it names (−23.5%, 247 → 189,
99 → 65, 34 dirs, 16.5%, 5%, 35.2%, 189 + 722) is quoted from a merged patch with its line, and the
mechanical probe above is the check that they point where they claim.

Residual risk, named honestly: the ~~strikethrough~~ on the N1 falsifier cell is a presentation
choice, not a semantic one. A reader skimming the table sees the cell struck and might stop before
the operative [H] restatement that follows in the same cell. The alternative — deleting the [W] text
outright — loses the record of what the falsifier used to say, which the verdict explicitly wants
preserved as history. Flagged rather than silently resolved.

Fidelity verdict

FIDELITY: skipped — not a stage PR: no kickoff is being executed and no stage deliverable is produced; this records two operator verdicts into an existing spec and kickoff, with every citation verified mechanically (see Test plan).

§1.7 Forward-check applied

  • .claude/rules/build-first-reuse-default.md:66 — the own-stack channel was surveyed
    (origin/data/metrics, .github/workflows/metrics-collect.yml) before a mechanism was named,
    and the verdict is REUSE-the-form / reject-the-mechanism on a checkable ground, not «ours is
    special». context7 correctly not consulted — its tooling caveat scopes it to library API docs.
  • .claude/rules/kickoff-staging-placement.md:28 — the S-D′ kickoff edit follows the binding
    sequence: author → merge to staging → only then dispatch. Nothing is dispatched by this PR,
    and S-D′ is independently non-dispatchable, so #dispatch-before-staging cannot fire here.
  • .claude/rules/ai-laziness-traps.md:56 (T3), :159 (T20) — no prose-only claim: every
    citation carries the line it came from, and the mechanical probe is quoted in the Test plan rather
    than asserted.
  • .claude/rules/doc-authority-hierarchy.md:15 — the spec keeps its own authority; this PR adds
    scoped annotations inside it and does not re-declare what the spec is authoritative for. The
    kickoff stays header-exempt per §2's tracked-but-exempt carve-out for
    .claude/orchestrator-prompts/*/kickoff.md.
  • .claude/rules/no-paid-llm-in-ci.md:20 — nothing added to CI.

§1.7 Backward-check applied

Class of this change = a denominator-tag verdict that invalidates figures already published under
the superseded tag.

Disclosure — the first draft of this sweep was wrong, and a probe caught it. I initially
enumerated from recall: it named the S-E kickoff and both P14 patches as swept surfaces and omitted
the S-H kickoff. Running the actual command changed three of six rows. The corrected sweep below is
the command's output, not a recollection. This is the #backward-check-restates-not-sweeps failure
mode (ai-laziness-traps.md T21) caught before ship rather than
after.

Population — every tracked file carrying the tag, grep -rln '\[W\]' docs/ .claude/exactly
four
:

  1. docs/superpowers/specs/2026-08-06-pipeline-token-economy-design.mdSWEPT (this diff): the
    convention annotated, and its single [W]-defined threshold (N1) annotated in place. Its other
    occurrences are scope tags on stage rows (P1, P3, P5, P6, P7, P11, P13, P14),
    saying which axis a stage acts on — not measured shares, so no re-tagging is owed; the blanket
    «no new figure may be tagged [W]» governs what comes after.
  2. docs/meta-factory/research-patches/2026-08-07-s-h-turn-attribution-p3d-p11.mdNOT SWEPT, by
    ownership
    : it is the patch that raised the fork, and research-patches are append-only +
    read-only for later sessions. Already internally correct under the verdict — it tags every share
    [H] at the point of use and prints the run-time warning.
  3. .claude/orchestrator-prompts/arch-v2-context-pipeline-s-h/kickoff.md:39GAP-FOUND, and
    deliberately left
    : this is the line «sized against WRITE [W]», i.e. the very instruction
    fork feat: self-application + meta-factory foundation (Phase 0.5–3) #2 reports as unsatisfiable. S-H is closed (arch-v2: stage S-H — host-side measurements (P3d per-turn attribution SSOT + P11 Explore/Plan probe + P14 harness price list) #1239 + docs(s-h): P14 /context addendum — the operator paste that answers DECISION-NEEDED #3 #1249 merged); its kickoff is the
    historical record of what was asked, and rewriting it would erase the evidence that the stage
    sized on [H] and said so. The correction lives where it belongs — in the patch the stage
    produced, and now in the spec.
  4. docs/meta-factory/research-patches/2026-08-07-s-h-p14-context-addendum.md:306SWEPT-CLEAN:
    its one hit names the [W]/[H]/[D] convention as a GAP-FOUND surface inside its own §1.7. A
    reference to the convention, not a share tagged with it.

Three surfaces I had expected to be in the population are not, verified rather than assumed:
…-s-h-harness-remainder-p14.md (grep -c → 0), the S-E kickoff (0), and the S-D′ kickoff (0) —
the last is swept by this diff on the sibling basis (corpus population), not on the tag.

Adjacent, not in this class: docs/superpowers/specs/2026-07-31-arch-v2-context-pipeline-design.md
ADR-3 carries no [W]; its 29-39% band is a denominator-choice question, tracked as S-H
DECISION-NEEDED #6 and routed by the operator's package into the #4 recalculation stage.
Untouched here deliberately — folding it in would settle #6 silently.

One surface (the S-H kickoff) is left with a known, named gap and a stated reason. No surface is
left silently inconsistent.



Operator verdicts 2026-08-07, recorded where the consumer reads them rather than by editing the
S-H research patches (append-only, and read-only for later sessions per the Artifact Ownership
Contract).

#2 = Option A — [H] operative from S-H onward, [W] historical. Recorded at the spec's binding
denominator convention. This is a constatation, not a preference: [W]'s 169-session subset is
physically unrecoverable, because worktree pruning deleted 34 project directories together with
their transcripts (turn-attribution patch :112, cause :92). Binding consequences spelled out —
existing [W] shares stay readable as history but are not comparable past 2026-08-07, no new figure
may be tagged [W], and every [W]-defined threshold is re-adjudicated on [H] or marked
un-adjudicable. The one such threshold is N1's falsifier: annotated in place as un-adjudicable as
written, with its operative [H] restatement and the standing reading 16.5% > 5% (so the discipline
text STAYS), plus the explicit non-conversion caveat the patch itself carries at :168.

#1 = Option B — host-side snapshot of the per-turn billing projection BEFORE any worktree prune.
Recorded as an INPUT CONDITION on the S-D′ kickoff, whose before/after measurement is the consumer
that a shrinking corpus invalidates (-23.5% between the seed and S-H: 247 -> 189 files, 99 -> 65
project dirs). Form is reuse, not build: copy the shape of the existing origin/data/metrics channel
(one appended CSV row per day on a data branch) but NOT its mechanism -- that is a CI cron
(.github/workflows/metrics-collect.yml) collecting GitHub popularity counters, and the corpus lives
at ~/.claude/projects where CI cannot reach. Authoring the snapshotter is explicitly NOT scoped
into S-D′; the clause states the precondition and its form only.

Also records, as the input condition's footnote, that S-D′ kickoff §5 = Option A (operator verdict
same date): with the ADR-8 A/B arm descoped, one baseline consumer remains -- this stage's own
before/after -- and ADR-8's 20-dispatch window travels to the follow-on stage. The §5 resolution
itself lands in kickoff rev 6, a separate PR.

Every citation introduced here was verified mechanically against the cited line, not from recall.

Prior-art: skipped — records operator decisions into an existing spec and kickoff, no new capability
@artyhoo
artyhoo merged commit 43bc809 into staging Aug 7, 2026
39 checks passed
@artyhoo
artyhoo deleted the worktree-sh-verdicts-pr1 branch August 7, 2026 08:55
artyhoo added a commit that referenced this pull request Aug 7, 2026
…A/B arm re-homed to S-K (#1251)

Operator verdict 2026-08-07 on the §5 PARKED DECISION-NEEDED: Option A. The ADR-8 A/B experiment
is descoped from S-D′; the stage ships subtraction maps + review-seat agent definitions + the #234
annotation, and a PR with no evaluation arm is now conformant rather than incomplete.

Edits:
- Header rev marker -> REV 6, stating what moved and that the §5 blocker is lifted (the two-gate
  S-E + S-H dependency is untouched and still binds; S-E has not merged).
- §1 item 3: PARKED -> DESCOPED. The four Phase -1 findings stay as the record of WHY; the binding
  instructions to the executor are inverted from "held" to "absence is not a shortfall".
- §4 T2: re-scoped. ADR-8's baseline left with the arm, but S-D′'s OWN before/after baseline is
  still in scope and still subject to "captured, not described" -- now citing the pre-prune
  snapshot per the header INPUT CONDITION landed in #1250.
- §5: heading and framing flipped to RESOLVED; the fork text kept verbatim as the record of what
  was decided against what alternative.
- §5 INCONCLUSIVE: CLOSED, with evidence. aif creates the task id AFTER the prompt is composed --
  the kickoff ships as `description` inside POST /tasks (AifHandoffBackend.ts:231-239) and the id
  exists only in that response (:249); the only post-create mutation is PUT {paused:false} (:260),
  the sole other write a best-effort DELETE rollback (:263). A parity-selected arm therefore cannot
  live in the dispatch prompt without a two-phase redesign -- independent grounds for Option A.
  Caveat carried: verified client-side only; packages/api not audited for description-editability
  of a paused task.
- §6 (new): S-K stub. Entry criteria = the four unchanged findings + the task-id finding; the three
  surfaces it needs (ledger schema, dispatcher SKILL.md, install.sh skip-list) named as the reason
  it could not live in S-D′; inherits the INPUT CONDITION; depends on S-D′ merged.
- Umbrella kickoff: S-K stub row added, S-D′ row updated (Implements ADR-8 -> ADR-1), and the
  "ADR-8 is NOT orphaned" paragraph extended with the second recorded deviation and the new host.

Recorded rather than quietly ignored: Option A's own text instructed rewriting out a §3 sentence
("a PR that ships maps with no executable A/B arm fails the stage's purpose") that DOES NOT EXIST
in this file. Verified by exhaustive grep, not by reading §3 -- the §3 region carries only the
#optout-as-reflex note about install-fingerprint snapshots. The A/B framing lived in §1 item 3 and
§4 T2, which is what this rev actually edits. The discrepancy is annotated inline in §5 so the next
reader does not re-hunt for it.

Prior-art: skipped — records an operator decision into an existing kickoff, no new capability

Co-authored-by: Test <test@example.com>
artyhoo added a commit that referenced this pull request Aug 7, 2026
…perator verdict on PR #1255 DECISION-NEEDED 1 (#1259)

Operator verdict 2026-08-07 resolves PR #1255 DECISION-NEEDED 1 as promote-to-gate.
Implemented in the consumed-deliverable form: umbrella §3 already binds every consumed
deliverable to the two-gate form (merged + content-read); S-D' consumes S-L's re-priced
P14 ranking, so S-L joins S-D''s dependency list — no three-gate pattern re-declaration.

Swept surfaces: umbrella kickoff (S-D' row, charter Depends-on, S-L charter promotion
record, Ordering, §3 intra-umbrella list), S-D' kickoff rev 7 (header, :17-21, instrument
list, :106, :232-244, §3a instrument, T-SDP-A counter, §5 quote-block, dispatch status —
also fixes the stale 'S-E is not [merged]' claim; S-E merged as #1237 09:39Z), S-L kickoff
(ordering constraint marked as gate; stale spec :363 citations -> :387), spec P13 cell +
§4 stage-order cell + §5 Exit-routing annotations (operator-verdict provenance, precedent
PR #1250).

Cold review round 1: REVISE (1 MAJOR spec §5 Exit routing unswept + 3 MINOR) — all four
fixed and grep-verified; residual 'S-E + S-H' strings are historical rev-log entries only.

Prior-art: skipped — dependency-gate bookkeeping across kickoffs + spec annotations, no new capability

Co-authored-by: Test <test@example.com>
artyhoo added a commit that referenced this pull request Aug 7, 2026
…sures (done.md backfill) (#1268)

The 2026-08-07 /pipeline no-arg run found ~50 umbrella dirs whose work is
verifiably merged but which lack done.md, poisoning the priority-score
completion filter in both directions (false-open noise + a false-DONE on the
live critical path arch-v2-context-pipeline-s-d-prime via C2 jaccard).
Round-2 precedent: cf246c2 (#565).

Every closure verified mechanically BEFORE writing done.md (gh pr view
state/mergedAt, git log origin/staging --grep, git ls-tree deliverable
checks). Breakdown:

- 26 closed by a verified merged PR (aif-doctor-helper-parity #1147,
  hook-tsx-resolution-fix #1126, hook-tsx-resolution-sweep #1130,
  universalization-fix-s2 #517, multistack-augment-first #830,
  guard-liveness-v2-fullsweep #484, install-self-verification #823,
  arch-v2 stages s-a #1192 / s-b #1198 / s-c #1197 / s-e #1237 / s-g #1228 /
  s-h #1250 / s-i #1229 / s-l #1263, getff-any-stack-trace r1 #1254 /
  s1 #1166 / s2 #1169 / s2b #1233 / s3 #1253 / s4 #1262,
  getff-honest-signals s1-s6 #1140/#1145/#1150/#1167/#1170/#1175,
  preset-react-spa-iphase #661, preset-react-native-iphase #662).
  Note: the dispatch evidence list carried kickoff-CREATION PR numbers for
  three of these (#1127/#1125/#1131); the actual closing PRs are
  #1147/#1126/#1130 — verified by PR title + files.
- 4 closed by deliverable-on-staging + merged PR (plan-currency-reconcile-s4-aif
  #789, live-research-default-delivery #824, story-recap #592,
  aif-loop-resilience-soak n/a — soak-journal AUTONOMOUS RUN COMPLETE
  2026-06-05, API-harvest rounds #427/#429/#431).
- 10 meta-launch dispatch records closed by parent umbrella DONE (adapter-jig
  #1240, getff-any-stack-trace #1262, getff-honest-signals #1175, ir-unfreeze
  #1084, launch-preannounce-track #994, ecosystem-wiring #1086,
  rule-tests-surface #1093, python-delivery-v0 #997, plan-currency-reconcile
  #792, live-generation #1055) — each parent's done.md verified present.
- 7 closed as Status: superseded pointing at the absorbing umbrella: the five
  #1221-rescued kickoffs (fix-735-fresh-install-prepush -> #775/#747,
  generator-compile-forbid -> forbid-mvp #684-#697, recipe-declarative-tier ->
  forbid-mvp S2 #689, validator-anti-vacuity -> forbid-mvp S3 #693,
  rule-bootstrapping-live-adapter -> rule-research-live-adapter #805/#809),
  plus install-ast-wiring -> migration-ast Stage 4 #632 (GH #547 Layer 2) and
  arch-v2-context-pipeline-s-a-r2 -> executed in-session inside S-A #1192
  (its own header says SUPERSEDED — do not dispatch).

Genuinely open umbrellas untouched: beta-delivery-ux (+meta-launch),
beta-ai-docs-agnosticism, beta-docs-showcase, arch-v2-context-pipeline
(+s-d-prime, s-f, meta-launch), getff-freshness-widening,
getff-python-dtz-adopt, getff-to-prod-meta-launch, modular-install-fullpack,
shipped-artifact-liveness-gap family, phase-10-foundations-audit,
heal-honest-capacity, shipped-skill-sync, trust-tiers-did-review,
executable-aidocs-and-cargo-followups, h10-verdict-gate-research,
stack-tooling-generation, zcode-full-parity-mega-umbrella, and the rest of the
no-done.md residue not on the verified list.

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