Commit Graph
74 Commits
Author SHA1 Message Date
Drew Ritter 782f5f2270 docs: design Hermes version-bump wiring
Document the agreed follow-up to PR #2025 on a branch based on its merged dev commit. The design registers the Hermes YAML manifest, keeps jq for existing JSON files, and uses Mike Farah yq v4 for a narrow top-level YAML field rather than adding a Bash parser.\n\nDefine focused failure behavior and behavioral tests while explicitly excluding nested YAML, Hermes runtime changes, and unrelated release-script refactors. This captures Drew's request to keep the implementation small and avoid process or abstraction overhead.
2026-08-06 14:45:15 -07:00
Drew RitterandClaude Opus 5 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
Drew Ritter 695744056e chore(hermes): align plugin version with dev
Update the Hermes plugin manifest from 6.1.1 to 6.2.0 so PR #2025 matches the current release version at the tip of origin/dev.\n\nThis intentionally does not change the version bump tooling. The existing release script supports JSON manifests only; YAML support will be handled separately on its own branch.
2026-08-05 17:57:31 -07:00
Drew RitterandClaude Fable 5 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 RitterandClaude Fable 5 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 RitterandClaude Fable 5 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 RitterandJesse Vincent 1c330e1b87 Preserve hooks in Codex package manifest 2026-07-02 14:56:55 -07:00
Drew RitterandJesse Vincent a50def9cef Strip hooks from Codex portal package 2026-07-02 14:56:55 -07:00
Drew RitterandJesse Vincent ec46cf8277 docs: re-anchor Shape A examples away from Codex 2026-07-02 14:56:55 -07:00
28b96af905 chore(codex): remove orphaned session-start-codex hook + refresh hook docs
hooks/session-start-codex has had no caller since "Remove Codex hooks"
(#1845) deleted hooks-codex.json and its manifest registration; the
Codex manifest now declares an empty hooks object so Codex registers no
session-start hook at all. The script is Codex-specific dead code —
nothing executes it on Codex or any other harness.

- Delete hooks/session-start-codex.
- tests/hooks/test-session-start.sh: drop the two Codex cases that are
  redundant with the generic session-start tests (nested-format and the
  legacy-warning omission are already covered by the Claude Code cases).
  Re-point the "wrapper dispatches" case to the live `session-start`
  script so run-hook.cmd dispatch coverage — used by Claude Code and
  Cursor in production — is preserved rather than lost.
- docs/porting-to-a-new-harness.md: Codex is no longer a Shape A
  (shell-hook) harness, so re-anchor that worked example to Cursor (a
  live shell-hook harness that demonstrates the same per-harness field,
  schema, and matcher variance) and mark Codex as native skill discovery
  with no session-start hook. Clears the references to the deleted
  hooks-codex.json.
- docs/windows/polyglot-hooks.md: the "check hooks-codex.json" pointer
  referenced a file deleted in #1845; re-point to hooks-cursor.json.

RELEASE-NOTES.md keeps its historical mention of hooks-codex.json (it
accurately records what that release did). The tests/codex-plugin-sync
fixtures build their own synthetic session-start-codex and test the sync
mechanism generically, so they are intentionally left as-is.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 14:56:55 -07:00
Drew RitterandJesse Vincent 4572974c46 Fix Codex plugin category 2026-07-02 14:56:55 -07:00
Drew RitterandJesse Vincent cf12786d08 Default Codex portal package to zip 2026-07-02 14:56:55 -07:00
Drew RitterandJesse Vincent 1a1243b6dd Harden Codex package script checks 2026-07-02 14:56:55 -07:00
Drew RitterandJesse Vincent da4125d52b Add Codex portal package script 2026-07-02 14:56:55 -07:00
7d8d3d4b06 fix(codex): suppress SessionStart hook auto-discovery with empty hooks object
Codex auto-discovers a plugin's hooks/hooks.json whenever the Codex
manifest has no `hooks` field: load_plugin_hooks falls back to a
hardcoded DEFAULT_HOOKS_CONFIG_FILE = "hooks/hooks.json" and registers
it. hooks/hooks.json is the Claude Code SessionStart hook, it is tracked
in this repo, and the Codex marketplace installs the whole repo root
(source url "./"), so the fallback re-registered the SessionStart hook
and its install-time trust prompt on Codex.

Removing the Codex hook file and the manifest `hooks` pointer (commit
"Remove Codex hooks") did not disable the hook on Codex — it removed the
explicit declaration that was overriding the fallback, so the fallback
took over and found the Claude hooks/hooks.json.

Declare an empty inline hooks object ({}) in .codex-plugin/plugin.json.
It parses as an empty inline hook set and stops Codex reaching the
auto-discovery fallback. An absent field, an empty array ([]), and an
empty inline list all collapse back to the fallback, so the value must
be exactly {}.

Update the test to assert the manifest declares hooks: {} (and that
hooks/hooks.json exists, which is what makes the declaration necessary),
replacing the prior assertion that the field was absent — which passed
while the hook was still being auto-discovered.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 14:56:55 -07:00
Drew RitterandJesse Vincent 97506cefd7 Preserve hooks in Codex package manifest 2026-07-02 14:53:00 -07:00
Drew RitterandJesse Vincent 4ecbbcd0b4 Strip hooks from Codex portal package 2026-07-02 14:53:00 -07:00
Drew RitterandJesse Vincent 53106e6536 docs: re-anchor Shape A examples away from Codex 2026-07-02 14:53:00 -07:00
89338e5113 chore(codex): remove orphaned session-start-codex hook + refresh hook docs
hooks/session-start-codex has had no caller since "Remove Codex hooks"
(#1845) deleted hooks-codex.json and its manifest registration; the
Codex manifest now declares an empty hooks object so Codex registers no
session-start hook at all. The script is Codex-specific dead code —
nothing executes it on Codex or any other harness.

- Delete hooks/session-start-codex.
- tests/hooks/test-session-start.sh: drop the two Codex cases that are
  redundant with the generic session-start tests (nested-format and the
  legacy-warning omission are already covered by the Claude Code cases).
  Re-point the "wrapper dispatches" case to the live `session-start`
  script so run-hook.cmd dispatch coverage — used by Claude Code and
  Cursor in production — is preserved rather than lost.
- docs/porting-to-a-new-harness.md: Codex is no longer a Shape A
  (shell-hook) harness, so re-anchor that worked example to Cursor (a
  live shell-hook harness that demonstrates the same per-harness field,
  schema, and matcher variance) and mark Codex as native skill discovery
  with no session-start hook. Clears the references to the deleted
  hooks-codex.json.
- docs/windows/polyglot-hooks.md: the "check hooks-codex.json" pointer
  referenced a file deleted in #1845; re-point to hooks-cursor.json.

RELEASE-NOTES.md keeps its historical mention of hooks-codex.json (it
accurately records what that release did). The tests/codex-plugin-sync
fixtures build their own synthetic session-start-codex and test the sync
mechanism generically, so they are intentionally left as-is.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 14:53:00 -07:00
Drew RitterandJesse Vincent c842f8871a Fix Codex plugin category 2026-07-02 14:53:00 -07:00
Drew RitterandJesse Vincent 6752471ad9 Default Codex portal package to zip 2026-07-02 14:53:00 -07:00
Drew RitterandJesse Vincent 371a26cf99 Harden Codex package script checks 2026-07-02 14:53:00 -07:00
Drew RitterandJesse Vincent 3bb0a3faa3 Add Codex portal package script 2026-07-02 14:53:00 -07:00
2d05b63edc fix(codex): suppress SessionStart hook auto-discovery with empty hooks object
Codex auto-discovers a plugin's hooks/hooks.json whenever the Codex
manifest has no `hooks` field: load_plugin_hooks falls back to a
hardcoded DEFAULT_HOOKS_CONFIG_FILE = "hooks/hooks.json" and registers
it. hooks/hooks.json is the Claude Code SessionStart hook, it is tracked
in this repo, and the Codex marketplace installs the whole repo root
(source url "./"), so the fallback re-registered the SessionStart hook
and its install-time trust prompt on Codex.

Removing the Codex hook file and the manifest `hooks` pointer (commit
"Remove Codex hooks") did not disable the hook on Codex — it removed the
explicit declaration that was overriding the fallback, so the fallback
took over and found the Claude hooks/hooks.json.

Declare an empty inline hooks object ({}) in .codex-plugin/plugin.json.
It parses as an empty inline hook set and stops Codex reaching the
auto-discovery fallback. An absent field, an empty array ([]), and an
empty inline list all collapse back to the fallback, so the value must
be exactly {}.

Update the test to assert the manifest declares hooks: {} (and that
hooks/hooks.json exists, which is what makes the declaration necessary),
replacing the prior assertion that the field was absent — which passed
while the hook was still being auto-discovered.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 14:53:00 -07:00
Drew RitterandDrew Ritter 29c0b1b7db fix: read Codex plugin version from manifest (PRI-2240) 2026-06-16 17:02:33 -07:00
Drew RitterandDrew Ritter cf32920d3a fix: exclude repo metadata from Codex sync (PRI-1168) 2026-06-16 17:02:33 -07:00
Drew Ritter b3ee712d3a Add visual companion Prime Radiant branding 2026-06-16 10:09:47 -07:00
Drew RitterandClaude Opus 4.8 bfa21156f2 chore: bump evals submodule to claude transcript-capture fix
Bumps evals 7f8e80c -> db37d5f (superpowers-evals#16): the claude launcher now
sets CLAUDE_CODE_FORCE_SESSION_PERSISTENCE=1 so nested interactive claude
(>=2.1.176) persists its transcript — restoring claude capture (verdicts +
cost/token data) on the latest CLI (2.1.177) with no version pin. Also folds in
the audit_liveness ruff/ty cleanup and the B1 audit-doc correction.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 10:09:46 -07:00
Drew Ritter 3a907d6a0a Fix companion stop metadata and token permissions 2026-06-16 10:09:46 -07:00
Drew Ritter 1c80914052 Harden Windows browser launcher 2026-06-16 10:09:46 -07:00
Drew Ritter 2a8479b21d Fix Windows lifecycle validation 2026-06-16 10:09:46 -07:00
Drew Ritter fd9972a4bd Align visual companion docs with shipped scope 2026-06-16 10:09:46 -07:00
Drew Ritter 69ed41af9e Fix companion test cleanup and argv assertions 2026-06-16 10:09:46 -07:00
Drew Ritter 51323e4c64 Harden companion platform tests 2026-06-16 10:09:46 -07:00
Drew Ritter 3402d4e7d7 Fix companion lifecycle test ownership metadata 2026-06-16 10:09:46 -07:00
Drew Ritter 6bc49f0183 Harden companion stop ownership proof 2026-06-16 10:09:46 -07:00
Drew Ritter 8f2525a803 Isolate companion fallback tokens 2026-06-16 10:09:45 -07:00
Drew Ritter 85914fbcf8 Fix server test fallback cleanup 2026-06-16 10:09:45 -07:00
Drew Ritter 0410679757 Harden root screen containment 2026-06-16 10:09:45 -07:00
Drew Ritter d9ec1196b8 Plan visual companion final hardening fixup 2026-06-16 10:09:45 -07:00
Drew Ritter 92a0a7acc0 Tighten visual companion hardening spec 2026-06-16 10:09:45 -07:00
Drew Ritter ce6be66c87 Document visual companion final hardening fixup 2026-06-16 10:09:45 -07:00
Drew Ritter 69270c9007 Harden companion Windows lifecycle coverage 2026-06-16 10:09:45 -07:00
Drew Ritter b17d54f839 Harden brainstorm companion auth regressions 2026-06-16 10:09:45 -07:00
Drew Ritter 83b5d3a963 Document visual companion auth hardening plan 2026-06-16 10:09:45 -07:00
Drew RitterandClaude Fable 5 565845f251 chore(evals): bump submodule to SUP-333 boundary + plumbing scenarios (7f8e80c)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-16 10:09:45 -07:00
Drew Ritter c8fc00435b chore(evals): bump submodule for Claude Haiku target 2026-06-16 10:09:45 -07:00
Drew RitterandClaude Opus 4.8 7813867bbc chore(evals): bump submodule to --scenarios filter (ff3ee83)
Adds `run-all --scenarios` for resuming a scenario subset across the Code
Assist rate-limit windows. Follows the agy rate-limit fix (79f9963).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 10:09:45 -07:00
Drew RitterandClaude Opus 4.8 657174abdb chore(evals): bump submodule to antigravity rate-limit fix (79f9963)
Serialize antigravity against the Gemini Code Assist rate limit
(max_concurrency=1), diagnose 429/RESOURCE_EXHAUSTED honestly instead of as
auth, fail-fast on a latched window, and tolerant preflight OK match.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 10:09:45 -07:00
Drew Ritter 21b44e44d3 Add shell lint script 2026-06-16 10:09:45 -07:00
Drew Ritter 2c2e2bcbd4 Tighten Kimi plugin porting coverage 2026-06-16 10:09:44 -07:00
Drew Ritter c8778664cd docs: restore Kimi direct install command 2026-06-16 10:09:44 -07:00
Drew Ritter e47add1dba docs: simplify Kimi README install steps 2026-06-16 10:09:44 -07:00
Drew Ritter f61300eac8 fix: wire Kimi plugin into release metadata 2026-06-16 10:09:44 -07:00
Drew Ritter e15d4ecd88 fix: align Kimi manifest with supported fields 2026-06-16 10:09:44 -07:00
Drew Ritter 4548b69c60 docs(windows): trim polyglot hook implementation copy 2026-06-16 10:09:44 -07:00
Drew Ritter 94b5435617 Bump superpowers-evals submodule 2026-06-16 10:09:44 -07:00
Drew Ritter 295219a6fa Align Pi mapping with action vocabulary 2026-06-16 10:09:44 -07:00
Drew Ritter db0396a7db Bump evals submodule for Pi backend 2026-06-16 10:09:44 -07:00
Drew Ritter f030d6ef88 Tighten cross-platform tool references 2026-06-16 10:09:43 -07:00
Drew Ritter bc2558c3f9 evals: use pre-commit hooks 2026-06-16 10:09:43 -07:00
Drew Ritter 9efbb7dd0d evals: add Gemini 2.5 Flash backend 2026-06-16 10:09:43 -07:00
Drew Ritter f7705f208e evals: drop drill source marker 2026-06-16 10:09:43 -07:00
Drew Ritter 74cddb5575 evals: remove unreleased wave scenarios 2026-06-16 10:09:43 -07:00
Drew RitterandClaude Opus 4.6 bc25777c6a sync-to-codex-plugin: anchor EXCLUDES patterns to source root
Rsync exclude patterns without a leading "/" match any directory of
the given name at any depth. The previous "scripts/" pattern was
meant to exclude upstream's top-level scripts/ dir (which contains
sync-to-codex-plugin.sh itself, bump-version.sh, etc.) but also
incorrectly excluded skills/brainstorming/scripts/ — a legitimate
skill-adjacent dir with 5 files (frame-template.html, helper.js,
server.cjs, start-server.sh, stop-server.sh).

Found during a determinism check: comparing the hand-crafted
add-superpowers-plugin bootstrap PR against an automated bootstrap
PR produced a diff showing those 5 files were missing from the
automated version.

Fix: anchor every top-level-only exclude with a leading "/".
.DS_Store stays unanchored because Finder creates them anywhere.

This also prevents future drift if anyone adds a tests/, hooks/,
docs/, lib/, etc. subdir inside a skill.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 14:03:56 -07:00
Drew RitterandClaude Opus 4.6 bcdd7fa24c sync-to-codex-plugin: exclude assets/, add --bootstrap flag
Two coupled changes:

1. Add assets/ to EXCLUDES. A normal sync run was deleting
   plugins/superpowers/assets/ via --delete because the corresponding
   directory doesn't exist upstream. Confirmed via dry-run that the
   previous version would wipe both brand asset files on next sync.

2. Add --bootstrap and --assets-src flags to support creating the
   initial plugin PR from scratch. Bootstrap mode skips the
   "plugin must exist on base" preflight, creates the plugin
   directory, rsyncs upstream content, then copies
   PrimeRadiant_Favicon.{svg,png} from --assets-src into
   plugins/superpowers/assets/ as superpowers-small.svg and
   app-icon.png. Run once by one team member to open the initial
   PR; every subsequent run is a normal (non-bootstrap) sync.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 13:59:26 -07:00
Drew RitterandClaude Opus 4.6 6149f3635a sync-to-codex-plugin: align plugin.json heredoc with current live shape
The live .codex-plugin/plugin.json in the downstream fork was cleaned up
(websiteURL, privacyPolicyURL, termsOfServiceURL, and defaultPrompt
removed) and icon fields were added (composerIcon, logo pointing at
assets/superpowers-small.svg and assets/app-icon.png). Update the
heredoc to produce the same shape so future sync runs don't wipe the
icon fields or reintroduce the removed URL fields.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 13:48:05 -07:00
Drew RitterandClaude Opus 4.6 777a9770d8 sync-to-codex-plugin: mirror CODE_OF_CONDUCT.md, drop agents/openai.yaml overlay
- Remove CODE_OF_CONDUCT.md from EXCLUDES so it syncs from upstream
  (per PR #1165 review feedback on the exclude list)
- Remove the agents/openai.yaml overlay generator and its exclude entry
  — the file duplicates fields already in .codex-plugin/plugin.json and
  only 6 of 28 upstream plugins ship one, so we match the 22-plugin
  majority shape

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 13:27:59 -07:00
Drew Ritter da283df058 remove things we dont need 2026-04-14 13:23:17 -07:00
Drew RitterandClaude Opus 4.6 ac1c715ffb rewrites sync tool to clone the fork, open a PR, and regenerate overlays inline
The previous version was a local rsync helper that required a hand-maintained
destination path. This rewrite makes it path/user-agnostic and gives every team
member the same flow:

- Clones prime-radiant-inc/openai-codex-plugins fresh into a temp dir per run
  (trap EXIT cleans up)
- Auto-detects upstream from the script's own location
- Preflight: rsync, git, gh auth, python3, upstream package.json
- Reads upstream version from package.json and bakes it into the regenerated
  .codex-plugin/plugin.json, so version bumps flow through
- Regenerates both overlay files (.codex-plugin/plugin.json and
  agents/openai.yaml) inline via heredoc — single source of truth
- Pushes a sync/superpowers-<sha>-<UTC-timestamp> branch and opens a PR via
  gh pr create; prints PR URL and /files diff URL on completion
- --dry-run, --yes, --base BRANCH, --local PATH flags for all the usual modes
- Deterministic: two runs against the same upstream SHA produce PRs with
  identical diffs, so the tool itself can be sanity-checked by running twice

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 13:18:36 -07:00
Drew Ritter 8c8c5e87ce adds tooling to mirror superpowers as a codex plugin with the appropriate metadata changes 2026-04-14 12:03:59 -07:00
Drew RitterandJesse Vincent 4fd9aa2dd5 fix(writing-skills): correct false 'only two fields' frontmatter claim (#882) 2026-03-25 11:03:53 -07:00
Drew Ritter 85cab6eff0 (fix): declare encoding meta on viz brainstorm server pages 2026-03-11 16:22:29 -07:00