Commit Graph

307 Commits

Author SHA1 Message Date
Jesse Vincent 751fd239f8 fix(diagnosing-superpowers): human-prompt filters for injected lines and newer Codex rollouts
The Claude Code "human prompts" jq command counted harness-injected
user-shaped lines as typed. On a real 9,170-line transcript it returned
374 rows, one of them a <task-notification> block. Excluding text that
begins with <task-notification>, <command-name>, <local-command-stdout>,
<system-reminder>, or "This session is being continued" brings that to
76, which matches the human-turn count a careful analyst arrives at by
hand.

The same transcript carries six human prompts that never appear as user
lines at all: queued_command attachments with origin.kind "human", typed
while a turn was already running. Adds a second command for those.

Codex: on a thread_source "user" Codex Desktop rollout at cli_version
0.149.0-alpha.4.1 the user_message command returns nothing, and the
prompts arrive as response_item messages with role "user". The file
already documented that shape for subagent rollouts; it is now general,
with the fallback jq and a note that the fallback also carries injected
blocks (<subagent_notification>, <environment_context>, <skill>,
<recommended_plugins>) that have to be skipped.

Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 16:13:42 -07:00
Jesse Vincent ee2869104c docs(diagnosing-superpowers): ship a scrubbed creation log; full record kept privately
The shipped CREATION-LOG.md quoted private repository names, issue and PR
numbers in those repos, memory-file names, and verbatim human-prompt text
from the fixture sessions. This repo is public.

The full 5,972-line record moves out of the tree and stays on the
maintainer's machine. What ships is the measurement: the method, the
scenarios with fixtures described by characteristic rather than by path,
the RED baseline results and the rationalizations the Red Flags table was
written from, the per-version table, the micro-tests with per-rep
verdicts, the four refactor rounds, a Red Flags provenance list, and the
end-to-end run.

Also surfaces the reliability finding in a Status block at the top: three
runs of scenario 12 on the same fixture and problem statement produced
three materially different substantive answers, all of which passed,
because the criteria test completeness and citation rather than
agreement. The spec now says so under Out of scope for v1, and its
report-path typo is fixed.

Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 16:13:32 -07:00
Jesse Vincent ee01bd8cf2 docs(diagnosing-superpowers): end-to-end run record and test listing
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 15:49:10 -07:00
Jesse Vincent e9e056bd01 refactor(diagnosing-superpowers): close the eval with all twelve scenarios clean on the final skill
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 14:27:10 -07:00
Jesse Vincent eed8807046 refactor(diagnosing-superpowers): record fix round 2 runs and refactor round 4
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 14:02:52 -07:00
Jesse Vincent 62bbf13eb0 refactor(diagnosing-superpowers): let an already-scoped request name the analysis to run
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 13:54:27 -07:00
Jesse Vincent 91cf480ccd refactor(diagnosing-superpowers): per-rep micro-test verdicts, version-labelled GREEN records, re-run 3/6/10 on final skill
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 13:08:29 -07:00
Jesse Vincent 9e2089b417 refactor(diagnosing-superpowers): record GREEN runs 1-12, micro-tests, and refactor round 1
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 12:10:57 -07:00
Jesse Vincent 7a52d35596 refactor(diagnosing-superpowers): gate steps 2-7 behind intake, make the no-diagnosis rule non-waivable
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 11:52:29 -07:00
Jesse Vincent 8f32d42d2f feat: add diagnosing-superpowers skill
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 11:43:40 -07:00
Jesse Vincent ef2cdce841 feat(diagnosing-superpowers): scrub, scrub-audit, and similar-session prompts
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 10:54:57 -07:00
Jesse Vincent 2b538e0314 feat(diagnosing-superpowers): analyst subagent prompts for the seven dimensions
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 10:43:41 -07:00
Jesse Vincent b306406e98 fix(diagnosing-superpowers): case template table delimiter matches header
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 10:29:32 -07:00
Jesse Vincent d6d85dcbdf feat(diagnosing-superpowers): case, report, bundle README, and issue templates
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 10:26:30 -07:00
Jesse Vincent 83269b3086 feat(diagnosing-superpowers): structure test and verified harness session references
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 10:15:15 -07:00
Jesse Vincent b000813ddc docs(diagnosing-superpowers): fix redaction note, verdict attribution, rationalization line forms
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 09:57:42 -07:00
Jesse Vincent e7093897a4 docs(diagnosing-superpowers): isolated re-runs of baseline scenarios 4 and 11
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 09:46:52 -07:00
Jesse Vincent 97679cdcd9 docs(diagnosing-superpowers): scenarios and RED baseline results
Claude-Session: https://claude.ai/code/session_01DyaGKhTXvHNs2JgPhDktz7
2026-08-28 09:32:09 -07:00
Drew Ritter d6a10aba55 Merge pull request #2006 from arimu1/fix/1929-copilot-cli-docs-windows
docs(brainstorming): correct Copilot CLI backgrounding guidance for Windows
2026-08-07 12:39:47 -07:00
Drew Ritter c367f804bb Merge pull request #2063 from obra/fix/t4-brainstorming-three-paths
feat(brainstorming): three-path router — ceremony scales, approval never does
2026-08-06 22:20:58 -07:00
Drew Ritter cfb310c69a Merge pull request #2089 from obra/fix/x13-illegibility
fix(sdd): reviewers re-read illegible evidence instead of re-running to regenerate it
2026-08-06 16:10:58 -07:00
Drew Ritter fdd1763d77 Merge pull request #2086 from obra/fix/spec-travels-with-plan
fix(planning): the spec travels with the plan
2026-08-06 15:13:54 -07:00
Drew Ritter af4bebf762 Merge pull request #2024 from obra/fix/worktree-cleanup-untracked-checkin
fix(finishing): check in with human partner when worktree removal hits untracked files
2026-08-06 12:21:45 -07:00
Drew Ritter 17b42c8128 fix(finishing): name the actual files in the refusal prompt
`git status --porcelain` collapses a wholly-untracked directory to a single
`?? docs/` line. In the shape of the incident this step exists for (#2016 — an
uncommitted plan document under an untracked `docs/` tree), the file list we
show the human partner therefore names no file at all:

    $ git -C "$WORKTREE_PATH" status --porcelain
    ?? docs/
    $ git -C "$WORKTREE_PATH" status --porcelain -uall
    ?? docs/superpowers/plans/2026-08-04-csv-export-rollout.md

Both forms produce identical (empty) output on a clean worktree, so this adds
no over-trigger surface.

Found while running this PR's behavioral micro-tests. Every treatment agent
dug past `?? docs/` unprompted and named the document, so the step did work —
but on the agent's own initiative rather than because the text asked for it.
That initiative is not reliable one tier down: Claude Haiku 4.5 on the control
arm failed for exactly this shape, asking a question that never named the file
and then deciding for the human when they deferred. Nothing in the prior
wording stopped a treatment agent from relaying `?? docs/` verbatim and
satisfying the letter of the instruction.

Re-ran the treatment cells against this amended text — Opus pass (refusal
fired, named the file), Haiku 4.5 pass (named the file) — no regression.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 12:14:55 -07:00
Drew Ritter 02654f93bf test(writing-skills): cover render-graphs execution 2026-08-05 22:38:40 -07:00
Jesse Vincent dcd3661b7c fix(writing-skills): run graphviz without a shell in render-graphs.js
The `dot` availability check shelled out to `which dot`, which is not a
command on Windows, so render-graphs.js reported graphviz as missing on
Windows even when it was installed. Replace it with a direct `dot -V`
probe via execFileSync.

Also switch the SVG render call from execSync to execFileSync('dot',
['-Tsvg']). Behavior is identical on macOS/Linux — the diagram source
was already passed via stdin, never interpolated into the command — but
running the binary directly removes the shell entirely.
2026-08-05 22:38:40 -07:00
Drew Ritter 9be44ebf40 Merge pull request #2025 from obra/hermes-harness-rebase
feat(hermes): Hermes Agent harness support — eval-verified pre_llm_call bootstrap
2026-08-05 18:23:46 -07:00
Jesse Vincent 80b82abd8d fix(sdd): task reviewers re-read illegible evidence instead of re-running to regenerate it
Interrogation of reviewers who bypassed test-evidence leases showed a
convergent driver: when the report or receipt looked truncated or
couldn't be located, re-running the suite felt cheaper than re-reading —
evidence got regenerated instead of read. This paragraph names that
moment: re-read at the stated path, report a genuine gap to the
controller, and never re-run to regenerate what wasn't read.

Battery: 0/31 reviewer re-runs across 4 treatment reps vs 7/~59
reviewers in 5/8 control reps on the same scenario and classifier.

Claude-Session: https://claude.ai/code/session_0185AJr98gHx5EmwqNeft4Sy
2026-08-04 18:24:10 -07:00
Drew Ritter 05c2393b82 Merge pull request #2078 from obra/fix/x6a-sdd-batch-small-tasks
fix(sdd): batch small same-shape tasks into one dispatch
2026-08-04 14:26:31 -07:00
Drew Ritter 78cc189244 fix(sdd): batch reviews check the diff against the brief's file list
Batching moves N edits under one review, which changes the review's
failure profile: an implementer that silently skips one file of twelve
produces a diff full of correct, uniform edits — nothing conspicuous is
missing, and no seat in the pipeline was assigned to notice. The single
combined review is the only net for a dropped edit, but the reviewer
template never told it to count.

The batch brief already lists every file with its change, so the reviewer
reconciles the diff against that list file by file; a listed file with no
hunk is a Missing finding regardless of how clean the rest of the batch
looks. Conditional on a multi-file brief, so single-task reviews are
unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 14:25:40 -07:00
Drew Ritter 419dec7755 Merge dev into fix/x7a: resolve preflight paragraph with the composed 2077+2080 text
Both PRs rewrote the same preflight paragraph. Resolution is the composed
text published in #2080's description — the configuration the 3/3+3/3
composed eval grades ran.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 14:21:58 -07:00
Drew Ritter 2b195749df Merge pull request #2077 from obra/fix/x9a-sdd-never-stall
fix(sdd): rule and continue — non-catastrophic conflicts get ledgered rulings, not blocking questions
2026-08-04 14:16:16 -07:00
Drew Ritter 7a01a0e83a fix(sdd): one Ruling: token everywhere, exhaustive finish roll-up
The breaker's two ledger formats wrote lowercase 'ruling' (parked
findings, load-bearing adjudications), so the Finish section's
collect-every-`Ruling:`-line step missed exactly the rulings made under
the most pressure. Field evidence from an independent eval rep: a
breaker-cap run adjudicated correctly, wrote everything to the
plan-scoped ledger, deleted the workspace at finish, and left no durable
trace of the adjudication.

Capitalize the two breaker formats to the canonical token, and make the
finish roll-up explicitly exhaustive across preflight, parked, and
breaker rulings.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 14:13:42 -07:00
Drew Ritter 8acf8e5f24 Merge pull request #2059 from obra/fix/t1-sdd-no-worker-reviewers
fix(sdd): dispatched subagents never dispatch subagents
2026-08-04 14:05:55 -07:00
Jesse Vincent 538d65120b fix(planning): the spec travels with the plan — Spec: header pointer + SDD reads it at setup
In controlled evals, an identical seeded-incoherence plan yielded 0-1/5
correct conflict resolutions when executed specless (controllers ruled
the conflicts 'internally explained') and 4-5/5 with the spec merely
present and named — even with no other skill-text changes. Cross-task
coherence turns out to be adjudicable only against ground truth above
the plan; this change makes that ground truth travel with the plan.

Claude-Session: https://claude.ai/code/session_0185AJr98gHx5EmwqNeft4Sy
2026-08-04 11:17:05 -07:00
Jesse Vincent 61f669ebc9 fix(sdd): preflight emits its pairwise checks as a ledger table and rules on what it surfaces
The pre-Task-1 conflict scan currently permits 'the scan is clean' with
no evidence the scan happened — mined sessions show controllers skipping
straight to dispatch and plan conflicts surfacing mid-execution as
blocking questions. Requiring the scan to emit one row per task pair
sharing a file/interface and one row per task's self-consistency turns
the claim into an artifact; in controlled evals the table appeared 3/3
with conflicts surfaced pre-dispatch, and the mechanism held 3/3 when
composed with the never-stall ruling change (#2077).

Claude-Session: https://claude.ai/code/session_0185AJr98gHx5EmwqNeft4Sy
2026-08-03 09:03:05 -07:00
Jesse Vincent e7a4285985 fix(sdd): batch small same-shape tasks into one dispatch
Plans sometimes enumerate many tiny, same-shape edits (one-line fixes,
constant changes, a field added across files) as separate tasks. The
current loop dispatches a fresh implementer plus review per task, so a
12-micro-task plan costs ~24 subagent seats for what one subagent could
do in a single pass. In controlled evals on a micro-task plan, batching
cut cost 73% and dispatches 87% with better completion than control; on
a 5-non-trivial-task plan the rule correctly never batched (dispatch
counts and completion identical to control).

Claude-Session: https://claude.ai/code/session_0185AJr98gHx5EmwqNeft4Sy
2026-08-02 19:36:55 -07:00
Jesse Vincent 39f9602432 fix(sdd): rule and continue — non-catastrophic conflicts get ledgered rulings, not blocking questions
A donated session sat dormant 8h48m waiting for a plan-conflict answer
that cost ~zero tokens to decide. Wrong-ruling rework is bounded;
stalls are not. This encodes the never-stall doctrine: plan conflicts,
ambiguities, and cap exceptions get a controller ruling recorded in
the ledger and work proceeds; only irreversible/destructive actions,
security-sensitive actions, out-of-worktree side effects (merge/push/
publish), and totally-broken plans remain hard stops. Rulings surface
in the Finish report instead of as mid-run questions.

Evals: 3/3 no-stall vs control 3/3 stall-at-preflight on a
seeded-conflict SDD plan; catastrophic guard 5/5 (every rep reaching a
seeded DROP TABLE step refused it); re-validated 3/3 after rebase onto
the current fix-PR text; composes cleanly with the evidence-bearing
preflight treatment.

Claude-Session: https://claude.ai/code/session_0185AJr98gHx5EmwqNeft4Sy
2026-08-02 11:14:01 -07:00
Jesse Vincent e9686d5c09 fix(codex): explicit model+effort on every spawn, config backstop
Depth-2 child-issued spawns omitted model 2/2 at CLI 0.146; model
without reasoning_effort resets effort to the model default.
2026-07-31 10:27:51 -07:00
Jesse Vincent d8189d1587 fix(sdd,codex): bounded wait stretches with reconciliation
Round 2 proved the long-wait mechanism (65.1%->0.0% timeouts) but
20-38 min silent waits starved graders and let 1/51 children vanish;
bounded 5-10 min stretches with a status line and list_agents
reconcile keep the efficiency and restore observability.
2026-07-31 10:27:51 -07:00
Jesse Vincent db4538fcb8 fix(sdd): controllers wait long or not at all
Docs-only wait guidance in the platform reference changed nothing
(65.1% vs 67.1% baseline wait-timeout rate); the discipline now lives
in the controller loop the session actually re-reads.
2026-07-31 10:27:50 -07:00
Jesse Vincent 9b8b14fe12 fix(codex): event-driven waiting instead of short polls
60-78% of wait_agent calls timed out across every measured corpus;
waits are event subscriptions, so one long wait replaces dozens of
polls at identical wake latency.
2026-07-31 10:27:50 -07:00
Jesse Vincent 4dc71b10b3 fix(brainstorming): bounded means existing code in this repo, not a familiar app genre
Triggering battery: Claude Code classified a brand-new project bounded
3/3 by reading 'existing, understood flow' as genre familiarity — once
while explicitly noting the repo was empty. Gemini routed the same
prompt architectural 3/3.
2026-07-31 09:39:55 -07:00
Jesse Vincent 7c560e048b fix(sdd): reviewers never dispatch subagents either
The first fix-cycle battery moved the depth-2 leak from implementers
(9/9 baseline -> 0/6) to a final reviewer that spawned two
sub-reviewers; the contract now reaches every dispatched role.
2026-07-31 09:39:55 -07:00
Jesse Vincent 75756d2900 fix(codex): correct multi-agent guidance against Codex source
Five claims contradicted by the Codex CLI source (V2 has no
close_agent; followup_task always reaches a child; role files attach
via agent_type; full-history forks accept model/effort; V2 spawn
allowlist). Citations: superpowers-autoresearch
docs/2026-07-29-codex-multiagent-v2-capabilities.md.
2026-07-31 09:39:55 -07:00
Jesse Vincent b68eaf96bb fix(brainstorming): bounded-path approval is a hard stop
Live ceremony battery: bounded reps produced zero doc ritual (the
measured win) but 2/3 implemented before any approval turn; the
bounded path now states the stop explicitly.
2026-07-31 09:39:55 -07:00
Jesse Vincent 2e7d681591 fix(sdd): implementers never dispatch subagents
Depth-2 worker-spawned reviewers were 9/9 same-task duplicate reviews
across four corpora in the codex-efficiency eval campaign.
2026-07-31 09:39:55 -07:00
Jesse Vincent 6211388f4b feat(brainstorming): three-path router — ceremony scales, approval never does
Spike / bounded / architectural classification said out loud, one-way
upgrade ratchet, approval gate on every path. The measured pathology:
the absolute hard-gate wording forced bounded tasks into the full
two-document ritual 5/5 while a no-guidance control differentiated
paths natively.
2026-07-31 09:39:55 -07:00
Jesse Vincent 7b177613c0 feat(hermes): Hermes Agent harness support, rebased to a Hermes-only diff
Rebase of PR #1922 onto current dev: the ~14 files of v6.1.0-era
codex/release drift are dropped, the porting-guide edits (stale against
the post-prune rewrite, no Hermes content) are dropped, and the Hermes
surface is kept intact: .hermes-plugin/ (on_session_start bootstrap
injection), tests/hermes/ (20 tests, passing), docs/README.hermes.md,
references/hermes-tools.md, the Platform Adaptation row, README section,
and Python ignores.

Known open items from review, unchanged by this rebase: the injection
mechanism uses ctx.inject_message from on_session_start, which the
official plugin guide does not document (pre_llm_call returning
{"context": ...} is the sanctioned path), skills are not registered via
ctx.register_skill, and the acceptance transcript predates the fix.

Co-authored-by: kumarabd <kumarabd@users.noreply.github.com>
2026-07-23 12:18:13 -07:00
Jesse Vincent 1f0e2ab912 fix(finishing): check in with human partner when worktree removal hits untracked files
git worktree remove refuses when the tree holds modified or untracked
files, and the skill gave no guidance for that refusal — the natural
agent response was --force, permanently destroying files that exist
nowhere else (uncommitted plans, notes, scratch work). Reported twice
from real sessions (#2016's plan loss, #1223's dirty-tree ambiguity).

Step 6 now treats the refusal as a stop-and-ask moment: show the
untracked files, offer commit / relocate / delete, and only remove the
worktree after the human partner chooses. Adds a matching rationalization
row so --force-as-cleanup is named as the failure it is.
2026-07-23 11:55:24 -07:00