@loneexile/omp-superpowers 7.0.0-omp.3 → 7.0.1-omp.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -1
- package/README.md +9 -6
- package/agents/sdd-escalation-implementer.md +3 -2
- package/agents/sdd-implementer.md +1 -1
- package/package.json +1 -1
- package/skills/brainstorming/SKILL.md +96 -34
- package/skills/diagnosing-superpowers/SKILL.md +1 -1
- package/skills/diagnosing-superpowers/references/github-issues.md +3 -3
- package/skills/diagnosing-superpowers/templates/issue.md +23 -4
- package/skills/executing-plans/SKILL.md +22 -57
- package/skills/finishing-a-development-branch/SKILL.md +5 -1
- package/skills/subagent-driven-development/SKILL.md +145 -50
- package/skills/subagent-driven-development/implementer-prompt.md +12 -4
- package/skills/subagent-driven-development/re-review-prompt.md +4 -2
- package/skills/subagent-driven-development/task-reviewer-prompt.md +3 -1
- package/skills/using-superpowers/references/pi-tools.md +1 -1
- package/skills/writing-plans/SKILL.md +8 -5
- package/skills/writing-skills/SKILL.md +21 -303
- package/skills/writing-skills/references/bulletproofing.md +80 -0
- package/skills/writing-skills/references/discovery.md +201 -0
- package/skills/writing-skills/references/flowcharts.md +37 -0
- package/skills/writing-skills/{testing-skills-with-subagents.md → references/testing-skills-with-subagents.md} +2 -2
- /package/skills/writing-skills/{examples → references}/CLAUDE_MD_TESTING.md +0 -0
- /package/skills/writing-skills/{anthropic-best-practices.md → references/anthropic-best-practices.md} +0 -0
- /package/skills/writing-skills/{graphviz-conventions.dot → references/graphviz-conventions.dot} +0 -0
- /package/skills/writing-skills/{persuasion-principles.md → references/persuasion-principles.md} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,29 @@ A version is `<upstream version>-omp.<n>`: the upstream release this fork is syn
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [7.0.1-omp.1] - 2026-10-24
|
|
10
|
+
|
|
11
|
+
Synced to upstream [v7.0.1](https://github.com/obra/superpowers/blob/v7.0.1/RELEASE-NOTES.md).
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- **Brainstorming takes most of v7.0.1's retune.** It reads the project and whatever you pointed at before its first message, plays a detailed request back with what it found and asks about the one thing still open, offers to skip the questions only when you didn't ask for brainstorming, and builds each question on your last answer. The ways to build it come with the last playback chunk, with a recommendation, and that message's one question is the pick; upstream sends them in a message of their own, one more wait for your reply. Upstream's short design doc and plan for every small change are not taken: the small-change path stays. Checked live once per scenario on omp 18.12.6, in a scratch Python todo app, with no run of the old text to compare against. A calendar-sync request that didn't name brainstorming got a first message built on what `todo.py` stores, one question, and the skip offer last; two answers later, one message carried the rest of the design, two ways to build it with a third ruled out, a recommendation, the size and one pick question. A request starting "Let's brainstorm" got no skip offer, and its small change ended on "Should I build it this way?" with no design doc.
|
|
16
|
+
- **Synced with upstream v7.0.1** (from v7.0.0). What reaches omp unchanged: `writing-skills` moves its supporting docs into `references/` (SKILL.md 26,623 → 16,738 bytes); `executing-plans` drops its Example Workflow, whose fork copy still sent the final review to `code-reviewer.md` (25,983 → 23,591 bytes); `diagnosing-superpowers` drafts issues with "Who's filing" and "Human-authored summary" sections, says how "without Superpowers" was checked, files nothing while the summary is a placeholder, and its link for filing without `gh` opens the Bug Report template instead of the deleted Session Diagnosis Report one. The repo gets upstream's new issue and PR templates, its `AGENTS.md` contributor rules, and `tests/skill-size/test-skill-size.sh`, which CI does not run yet: SDD's SKILL.md (69,657 bytes) and executing-plans' (23,591) are over its 20,000-byte limit. Upstream's old `docs/superpowers/plans/` files are gone. `tests/brainstorm-server/server.test.js` stays at v7.0.0's version: v7.0.1's rewrite, which waits on file events instead of fixed sleeps, failed one or both of its "does NOT send reload" checks (`0 !== 1`) in 4 runs out of 4 on a Linux host, because it counts reloads before its own marker file's reload has reached the client; v7.0.0's passed 3 out of 3.
|
|
17
|
+
- Upstream's `skills/subagent-driven-development/references/` is deleted. It holds upstream's own fix loop (5 rounds, a fresh implementer on a more capable model for rounds 4–5), final review and resume text, and nothing in this fork's SKILL.md points to it. The fork's SDD stays one SKILL.md for now.
|
|
18
|
+
|
|
19
|
+
## [7.0.0-omp.4] - 2026-10-16
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
Found by an independent review of 7.0.0-omp.3; a second review checked these fixes. Checked live on omp 18.11.1 with a three-task Python plan (an editable install in `.venv`). On the default workspace the controller ran `git status`, created the approved branch in place with no `/move`, ran tasks 1 and 2 in parallel worktrees, removed and recreated each cloned `.venv` and checked the import from `/` before dispatching, then merged both. Resumed from a ledger left mid-wave (task 1 merged but not ledgered, task 2 with no commits), it ledgered task 1 merged after the commit-count and ancestor checks, and re-dispatched task 2. The released 7.0.0-omp.3 text happened not to lose work in the same resume: its controller checked task 2's history before acting on the ancestor test.
|
|
24
|
+
|
|
25
|
+
- **Resuming mid-wave no longer marks unstarted tasks as merged.** subagent-driven-development's resume rule ledgered a wave task `merged` when its branch tip was an ancestor of the plan branch, and a branch with no commits yet passes that test (`git merge-base --is-ancestor` exits 0). After a compaction or restart mid-wave, every unstarted sibling would have been ledgered merged and complete, its branch deleted, and its later work never merged. A wave task now counts as merged only when its branch also has commits past its BASE, and that check runs for every unfinished wave task, whatever its last ledger line. Resume then goes by each task's last line and covers `rebased` and `fix round` lines (read the agent first), review-list lines, `merge stuck`, a merge interrupted before its commit (`MERGE_HEAD`), and a wave whose suite has not passed. executing-plans finishes an open wave task under subagent-driven-development's rules instead of redoing it in place.
|
|
26
|
+
- **The default workspace gets created.** writing-plans' approval names a new branch in this checkout, but both executors' Setup still sent the controller to make a worktree and wait for `/move`, or let it work on `main`, where the final review package comes out empty. Setup now creates the approved branch in place, runs project setup and baseline tests there, and ledgers the branch, so a resumed run only switches back to it. A change to a tracked file or anything staged goes back to the partner to commit or stash first, because a run in place commits from that index and tests that working tree; writing-plans' approval message says so up front, and implementers stage their own files by path. finishing-a-development-branch switches to the base branch before deleting a branch made in this checkout.
|
|
27
|
+
- **Task worktrees test their own code.** A cloned in-project virtualenv keeps absolute paths into the plan checkout, through its scripts' interpreter and any editable install, so a wave task's tests ran the plan checkout's code (reproduced with a `uv` project: the cloned interpreter imported the package from the plan checkout, a recreated one from the worktree). Every task worktree, including one reused on resume, now runs the project's install step with a cloned virtualenv removed first (the venv's own pip, not the one on `PATH`); the controller checks from outside the worktree that the code resolves there, and records what the install wrote so it is not sent back to the implementer.
|
|
28
|
+
- **Wave merges and their failures have a defined path.** A merge that git refuses to start (an untracked file in the way) is the controller's to clear and costs the task no round. In a wave of two or more, implementers run only their covering tests (the template and the `sdd-implementer` seat agree), and the controller runs the full suite once each wave merges, the last one included, and ledgers the result. Round 3 of a merge failure goes to the escalation seat, whose agent file now knows a merge round, with the plan branch and the worktree; a task whose rounds were spent in review still gets that one merge round; a task that still will not merge stops the run instead of being parked, and so does a wave suite still red after its one fix, both now in the skill's list of stops. A `review per-task` task whose rebase changed code gets its full task review again, over a merge-base SHA. A fix on the plan checkout gets its own brief and report file, its seat and its follow-up suite run. The reviewer templates take a wave task's branch-tip SHA as its head and next FIX_BASE, never the branch name. An implementer that had to change a file outside its brief reports DONE_WITH_CONCERNS ("or scope" is back, in the review-list trigger too), and the task merges after its wave's others.
|
|
29
|
+
- **Small changes keep their guard.** A fully specified request on the never-small list is no longer built straight away as a "quick task". The small-change path asks before starting when something is already staged, runs the suite before changing anything so an existing failure is reported instead of mistaken for its own, commits only its own hunks of a file that already had edits, and stops before committing when the change grows into a project.
|
|
30
|
+
- writing-plans no longer calls Native "fastest for a few tightly coupled tasks", a plan executing-plans and subagent-driven-development both turn away. The README's file list and upstream-sync notes now include this fork's executing-plans, requesting-code-review and finishing-a-development-branch edits.
|
|
31
|
+
|
|
9
32
|
## [7.0.0-omp.3] - 2026-10-16
|
|
10
33
|
|
|
11
34
|
### Changed
|
|
@@ -103,7 +126,9 @@ First release, synced to upstream [v6.4.2](https://github.com/obra/superpowers/b
|
|
|
103
126
|
- The fork's rewritten subagent-driven-development text invokes its helper scripts through `bash` as well, so a package extractor that drops exec bits cannot break them.
|
|
104
127
|
- `sdd-final-reviewer` carries upstream's new review rules from `code-reviewer.md`, the template it replaces in SDD's final review: the spec is a vision document (behavior it is silent on is graded by what a reasonable person expects), and a "Declined to judge" section that the controller rules on and ledgers like a plan conflict.
|
|
105
128
|
|
|
106
|
-
[Unreleased]: https://github.com/LoneExile/omp-superpowers/compare/v7.0.
|
|
129
|
+
[Unreleased]: https://github.com/LoneExile/omp-superpowers/compare/v7.0.1-omp.1...HEAD
|
|
130
|
+
[7.0.1-omp.1]: https://github.com/LoneExile/omp-superpowers/releases/tag/v7.0.1-omp.1
|
|
131
|
+
[7.0.0-omp.4]: https://github.com/LoneExile/omp-superpowers/releases/tag/v7.0.0-omp.4
|
|
107
132
|
[7.0.0-omp.3]: https://github.com/LoneExile/omp-superpowers/releases/tag/v7.0.0-omp.3
|
|
108
133
|
[7.0.0-omp.2]: https://github.com/LoneExile/omp-superpowers/releases/tag/v7.0.0-omp.2
|
|
109
134
|
[7.0.0-omp.1]: https://github.com/LoneExile/omp-superpowers/releases/tag/v7.0.0-omp.1
|
package/README.md
CHANGED
|
@@ -161,14 +161,17 @@ Rules that are easy to get wrong:
|
|
|
161
161
|
- `.pi/extensions/superpowers.ts` — the injected mapping names `task`, `todo`, the `sdd-*` roster, and the no-`model:`-field rule; it also re-arms on `session_switch`, skips subagent sessions, and ignores an `agent_end` that will auto-continue; it tells a dispatching session to name the checks each subagent must run, since omp 18.4.12 tells subagents to leave builds, tests and smoke runs to the main agent unless their assignment explicitly instructs them; its last paragraph points a vibe-mode director (tools include `vibe_spawn` but not `task`) at the *Vibe mode* section of `pi-tools.md`
|
|
162
162
|
- `.omp-plugin/plugin.json` — new. Marks the repo root as an omp-native plugin so a marketplace or `--plugin-dir` install keeps each agent's `model:` line
|
|
163
163
|
- `skills/using-superpowers/references/pi-tools.md` — same, as the reference doc; it also gains a *Checks* subsection (the 18.4.12 subagent hand-off rule, and why every dispatch names its checks) and a *Vibe mode* section: what a director keeps and lacks, how skill actions map onto `vibe_*` and workers, and the worktree and request-budget limits
|
|
164
|
-
- `skills/brainstorming/` — a defined small-change path: after the in-chat approval the session builds it itself, test first,
|
|
164
|
+
- `skills/brainstorming/` — a defined small-change path: after the in-chat approval the session builds it itself on a branch: the full suite before changing anything, test first, the covering tests and the suite again, then one commit of only its own files and hunks, with no design document, plan or subagents (a new behavior such as a `--quiet` flag can be small; security, auth, concurrency, money, migrations, changes one revert cannot undo, new config files or stored formats, changes to existing behavior, new interfaces other code builds on and new dependencies never are, and none of them takes the quick-task route however complete the request); a playback rides along with the next question instead of waiting for its own answer; for software, the plan is written right after the builder check so the design and the plan get one approval. Of upstream v7.0.1's retune it keeps reading the project first, the new first message and the sharper questions; the approaches ride with the last playback chunk, whose one question is the pick, instead of going out in a message of their own; upstream's short design doc and plan for every small change are not taken
|
|
165
165
|
- `agents/sdd-*.md` — new. Each seat's `model:` is a pin plus a role fallback (`@task` or `@slow`), and all set `readSummarize: false`. `sdd-final-reviewer` reviews the whole branch for both ways of running a plan; after subagent-driven-development it does the task review's work on every task left to it (`review at final`) before the seams. It reads `requesting-code-review/code-reviewer.md` at run time and applies its What to Check, Calibration, severity definitions and Critical Rules, while carrying upstream's vision-document and Declined-to-judge rules in its own body; a crash or lost data on user input is always a finding, never a Declined-to-judge line. Descriptions name roles, never models
|
|
166
|
-
- `skills/subagent-driven-development/` — *Model Selection* → *Agent Selection*; fix-loop cap 5 → 3 with a round-3 escalation seat; a proven-trivial-fix route that replaces a re-review with a one-command proof; the pre-flight scan builds a review list (plan-marked or ruled high-risk tasks get a task review, the rest get the controller's own covering-test run and the final review) and waves (tasks with no shared file or interface run in parallel, up to three, each in its own `omp worktree add` worktree, merged back with `--no-ff`); the scripts directory resolves via `realpath skill://subagent-driven-development/scripts`; fix rounds resume the implementer with `write agent://<id>` (id ledgered) and full results are read at `agent://<id>`; task review scales with risk through `effort: "hi"`; the controller checks reviewer results; templates show omp's real `{ context, tasks: [{ agent, task, solutionSpace }] }` wire shape and the reviewers' structured fields; one omp paragraph for vibe mode, where a director (no `task` or `bash`) hands the whole run to one `good` worker that dispatches the seats itself
|
|
167
|
-
- `skills/executing-plans/` —
|
|
166
|
+
- `skills/subagent-driven-development/` — *Model Selection* → *Agent Selection*; fix-loop cap 5 → 3 with a round-3 escalation seat; a proven-trivial-fix route that replaces a re-review with a one-command proof; the pre-flight scan builds a review list (plan-marked or ruled high-risk tasks get a task review, the rest get the controller's own covering-test run and the final review) and waves (tasks with no shared file or interface run in parallel, up to three, each in its own `omp worktree add` worktree with the project's install step re-run there, merged back with `--no-ff` after their covering tests pass on the merged tree; a task that still will not merge after round 3 stops the run); Setup creates the approved branch in this checkout instead of a worktree; resume reads each task's last ledger line, and treats a wave task as merged only when its branch has commits past BASE; the scripts directory resolves via `realpath skill://subagent-driven-development/scripts`; fix rounds resume the implementer with `write agent://<id>` (id ledgered) and full results are read at `agent://<id>`; task review scales with risk through `effort: "hi"`; the controller checks reviewer results; templates show omp's real `{ context, tasks: [{ agent, task, solutionSpace }] }` wire shape and the reviewers' structured fields; one omp paragraph for vibe mode, where a director (no `task` or `bash`) hands the whole run to one `good` worker that dispatches the seats itself. Upstream v7.0.1's `references/` is deleted: it holds upstream's own fix loop (5 rounds), final review and resume text, and nothing in this SKILL.md points to it
|
|
167
|
+
- `skills/executing-plans/` — the description, *Why inline*, *When to Use* and the "Prefer subagent-driven-development" paragraph say the partner approved inline execution at the handoff and that SDD reviews per task only where a plan marks it; Setup creates the approved branch in this checkout; a ledger with `Wave` lines resumes under SDD. Additive omp paragraphs: in *Final Review*, the `task` tool has no `model:` field, so the final review goes to `sdd-final-reviewer` (its model is what the host maps that agent to), told that no task was reviewed; it also resolves the scripts directory with `realpath` and reads full results at `agent://<id>`; one more for vibe mode, where a director hands the whole run to one `good` worker
|
|
168
|
+
- `skills/requesting-code-review/` — *Mandatory* says a review follows each task on subagent-driven-development's review list, and once on the whole branch at the end, instead of after every task
|
|
168
169
|
- `skills/using-git-worktrees/` — additive omp section: `/wt` is the user's one-line answer to the consent question (moves the session, carries WIP); when the agent creates the worktree itself it uses `omp worktree add` under `~/.omp/wt/` (the only place `omp worktree list`/`clear` manage), knows that command leaves uncommitted changes behind, and asks for `/move <path>` because `cd` never moves the tools' cwd. Also: clone-first falls back to a plain checkout without `node_modules` (no copy-on-write, or in-repo targets); setup and tests use the bash tool's `cwd` parameter until `/move`; `omp worktree clear --all` is warned against, since it force-removes every worktree, uncommitted work included; omp's bash rewrites a literal `git worktree add` into `omp worktree add` only without shell expansion; vibe mode refuses `/move` and `/wt`, so the worktree and `/move` come before `/vibe`, or every worker brief carries the absolute path
|
|
169
|
-
- `skills/writing-plans/` — *Execution Handoff* picks the method itself and asks for one approval of the design, the plan and the
|
|
170
|
+
- `skills/writing-plans/` — *Execution Handoff* picks the method itself and asks for one approval of the design, the plan, the method and the workspace (a new branch in this checkout by default, which answers using-git-worktrees' consent question); *Review Marks* (and a self-review check) mark security, auth, concurrency, migration, money and destructive tasks `**Review:** per-task`; tasks that share no file or interface can run in parallel; in vibe mode both execution approaches run in one `good` worker the director briefs, not in its own session
|
|
171
|
+
- `skills/finishing-a-development-branch/` — one line in the discard path: in a normal repo (a branch made in this checkout), switch to the base branch before `git branch -D`, which git refuses on the checked-out branch
|
|
170
172
|
- `README.md` — this file: rewritten for omp (install, seats, overrides, maintenance); upstream's multi-harness README is gone
|
|
171
173
|
- `tests/pi/test-pi-extension.mjs` — covers the extension's lifecycle (bootstrap on start, `session_switch`, compaction; none for subagents or an auto-continuing `agent_end`), the action table in `pi-tools.md`, the seat table against the names in `agents/*.md`, and the `.omp-plugin/plugin.json` manifest; the package-name assertion is gone (`scripts/check-npm-package.sh` checks the published name)
|
|
174
|
+
- `tests/brainstorm-server/server.test.js` — kept at upstream v7.0.0's version. v7.0.1's rewrite counts the reloads a client received right after the server logs its marker file, before that file's own reload has reached the client, so its two "does NOT send reload" checks failed on Linux in 4 runs out of 4
|
|
172
175
|
- `package.json` — the npm identity: `@loneexile/omp-superpowers`, `<upstream version>-omp.<n>` versions, a `files` allowlist (the extension, `skills/`, `agents/`), `publishConfig`, `omp`/`oh-my-pi` keywords; `main` is dropped, since it pointed at the OpenCode plugin this package does not ship
|
|
173
176
|
- Spec and plan paths — `docs/specs/` and `docs/plans/` instead of upstream's `docs/superpowers/specs/` and `docs/superpowers/plans/`: brainstorming's *Where it goes*, writing-plans' save path and handoff lines, and the example plan paths in executing-plans, subagent-driven-development and requesting-code-review. `.superpowers/` (the SDD workspace, brainstorm companion files) is unchanged. `scripts/check-npm-package.sh` fails if a shipped file names `docs/superpowers/`
|
|
174
177
|
- `CHANGELOG.md`, `.github/workflows/` (CI, npm release), `scripts/check-npm-package.sh` — new
|
|
@@ -185,9 +188,9 @@ git rebase upstream/main
|
|
|
185
188
|
git push --force-with-lease origin main
|
|
186
189
|
```
|
|
187
190
|
|
|
188
|
-
Expect conflicts in `skills/subagent-driven-development/`, `skills/brainstorming/`, `skills/writing-plans/`, `pi-tools.md`, `README.md`, and `package.json` whenever upstream touches them — this fork rewrites those files rather than appending to them (README.md is never a partial conflict). In `package.json` keep the fork's identity and set `version` to `<new upstream version>-omp.1`: CI's package check fails until the version's base matches the upstream version in `.claude-plugin/plugin.json`. `agents/`, the extension's mapping paragraph, and the omp blocks in `using-git-worktrees` are additive.
|
|
191
|
+
Expect conflicts in `skills/subagent-driven-development/`, `skills/brainstorming/`, `skills/writing-plans/`, `skills/executing-plans/`, `skills/requesting-code-review/SKILL.md`, `skills/finishing-a-development-branch/SKILL.md`, `pi-tools.md`, `README.md`, and `package.json` whenever upstream touches them — this fork rewrites those files rather than appending to them (README.md is never a partial conflict). A sync that takes upstream's side of executing-plans or requesting-code-review brings back "review after every task" text that contradicts subagent-driven-development's review list: keep the fork's lines. In `package.json` keep the fork's identity and set `version` to `<new upstream version>-omp.1`: CI's package check fails until the version's base matches the upstream version in `.claude-plugin/plugin.json`. `agents/`, the extension's mapping paragraph, and the omp blocks in `using-git-worktrees` are additive.
|
|
189
192
|
|
|
190
|
-
A clean rebase is not the whole sync. Upstream's edits to text this fork replaced never reach the replacement, so read upstream's diff for those files and port what still applies. The v6.4.x sync needed two: `bash scripts/...` invocations in the SDD text, and `code-reviewer.md`'s new review rules. Upstream edits to `code-reviewer.md`'s What to Check, Calibration, severity definitions and Critical Rules now reach `sdd-final-reviewer` without porting, because it reads the file at run time. Edits to the vision-document or Declined-to-judge sections still need porting into the agent body, which carries them itself.
|
|
193
|
+
A clean rebase is not the whole sync. Upstream's edits to text this fork replaced never reach the replacement, so read upstream's diff for those files and port what still applies. The v6.4.x sync needed two: `bash scripts/...` invocations in the SDD text, and `code-reviewer.md`'s new review rules. The v7.0.1 sync took the fork's side of brainstorming and ported the retune by hand, all but its small-change gate, and deleted upstream's `skills/subagent-driven-development/references/`; when upstream edits a file there, the rebase stops on a modify/delete conflict: keep it deleted (`git rm`), then read upstream's diff of that file for rule changes to port into the fork's SDD text. Upstream edits to `code-reviewer.md`'s What to Check, Calibration, severity definitions and Critical Rules now reach `sdd-final-reviewer` without porting, because it reads the file at run time. Edits to the vision-document or Declined-to-judge sections still need porting into the agent body, which carries them itself.
|
|
191
194
|
|
|
192
195
|
The fork changes upstream's `docs/superpowers/specs` and `docs/superpowers/plans` lines in brainstorming, writing-plans, executing-plans, subagent-driven-development and requesting-code-review. When upstream edits around one of them, `-X theirs` keeps the fork's whole conflicting hunk, so read upstream's diff of those lines and port the rest of the hunk. New upstream text naming `docs/superpowers/` fails `check-npm-package.sh` until it says `docs/specs/` or `docs/plans/`.
|
|
193
196
|
|
|
@@ -13,12 +13,13 @@ thinkingLevel: max
|
|
|
13
13
|
readSummarize: false
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
You own one task from a Superpowers plan. Your dispatch names the brief (requirements, exact values verbatim), the report file, and which of
|
|
16
|
+
You own one task from a Superpowers plan. Your dispatch names the brief (requirements, exact values verbatim), the report file, and which of three cases this is:
|
|
17
17
|
|
|
18
18
|
- **Takeover:** a prior implementer attempted the task and either could not clear the review findings across two fix rounds, or reported `BLOCKED`. The dispatch lists the open findings, or the blocker that implementer reported. Read the report file first — it records what was tried and, for findings, what the reviewer rejected.
|
|
19
19
|
- **First implementation:** the controller ruled the task needs the strongest seat from the start. No report file exists, no review has happened, and there are no findings: start from the brief and implement it test-first, as `sdd-implementer` would.
|
|
20
|
+
- **Merge round:** the task's branch would not merge into the plan branch, or its covering tests failed on the merged tree, and its earlier rounds did not clear that. The dispatch names the plan branch, the task's worktree, and the conflict or the failing output file. Work in that worktree: rebase the task's branch onto the plan branch, make its covering tests pass on the result, and append what you did to the report file.
|
|
20
21
|
|
|
21
|
-
If the dispatch does not say which case it is, the report file settles
|
|
22
|
+
If the dispatch does not say which case it is, the report file settles takeover against first implementation: it exists for a takeover and not for a first implementation. A dispatch that names a plan branch to rebase onto is a merge round.
|
|
22
23
|
|
|
23
24
|
<contract>
|
|
24
25
|
- Takeover: understand why the previous attempt did not converge before touching code. A loop that survives two resumes usually means the implementer could not see its own problem — look for the framing error, not just the diff; for a blocker, find what actually stopped it. Then fix the open findings, or clear the blocker and finish the task (test-first, as for a first implementation); re-run the covering tests (name them) and append your fix report to the same report file.
|
|
@@ -24,5 +24,5 @@ You implement exactly one task from a Superpowers plan. Your dispatch names a br
|
|
|
24
24
|
</contract>
|
|
25
25
|
|
|
26
26
|
<budget>
|
|
27
|
-
Read the changed files' context once; do not re-read files you already hold. While iterating, run the focused test for what you are changing; run the full suite once before you commit, not after every edit. A fix round re-runs only the tests that cover the amended code. Every extra turn is wall-clock the controller waits on.
|
|
27
|
+
Read the changed files' context once; do not re-read files you already hold. While iterating, run the focused test for what you are changing; run the full suite once before you commit, not after every edit — unless your dispatch says the task runs in a wave with other tasks, in which case run only the covering tests your brief names. A fix round re-runs only the tests that cover the amended code. Every extra turn is wall-clock the controller waits on.
|
|
28
28
|
</budget>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loneexile/omp-superpowers",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.1-omp.1",
|
|
4
4
|
"description": "obra/superpowers adapted for Oh My Pi (omp): a truthful task/todo tool mapping and five subagent-driven-development agents, each with its own model, thinking level, and tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -20,22 +20,57 @@ Before you reply, ask yourself: what do I know about what they want, and
|
|
|
20
20
|
why?
|
|
21
21
|
|
|
22
22
|
- **Everything that matters is in the request** ("make the icon cornflower
|
|
23
|
-
blue"). This is a quick, clear task. Do it, and say what you did.
|
|
23
|
+
blue"). This is a quick, clear task. Do it, and say what you did. Nothing
|
|
24
|
+
on the never-small list (Size the Work) is a quick task, however complete
|
|
25
|
+
the request.
|
|
24
26
|
- **Something non-trivial is missing.** Start the conversation.
|
|
25
27
|
|
|
26
|
-
##
|
|
28
|
+
## Look Before You Ask
|
|
29
|
+
|
|
30
|
+
In an existing project, or when they've given you context (a spec, a plan,
|
|
31
|
+
a handoff, files they pointed at, earlier conversation), dig in before your
|
|
32
|
+
first message. Read what they referred to and the code or material it
|
|
33
|
+
connects to, and keep reading until you can explain how the relevant
|
|
34
|
+
parts work today and what this change would touch. Never ask what the
|
|
35
|
+
project or their context already answers.
|
|
27
36
|
|
|
28
|
-
Your
|
|
37
|
+
## Your First Message
|
|
29
38
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
Move the work forward, with one of these:
|
|
40
|
+
|
|
41
|
+
- **They've already said what they want** (a spec, a plan, a detailed
|
|
42
|
+
request): aim for about 200 words for the whole message. Echo their
|
|
43
|
+
request back in your own words, so they can see whether you've got its
|
|
44
|
+
shape: what they want, who it's for, and why, as far as they've said.
|
|
45
|
+
Add what you found that bears on it: how the relevant parts work today
|
|
46
|
+
and what the change would touch. If you found something they may not
|
|
47
|
+
have considered that would change what they're asking for or how it
|
|
48
|
+
has to be built, like a constraint, a conflict, or a cheaper path, say
|
|
49
|
+
so plainly. How to build it comes later, once you understand what they
|
|
50
|
+
want (see Lay out the approaches). End with one line inviting
|
|
51
|
+
corrections, then one question about what they want: the thing their
|
|
52
|
+
request leaves open whose answer would most change what gets built.
|
|
53
|
+
Specs are often incomplete, so confirm before you build on one.
|
|
54
|
+
- **They haven't:** one open question, in their own terms, about the
|
|
55
|
+
biggest thing their request leaves unsettled. Say why you're asking:
|
|
56
|
+
what the answer would change about what you build. For "a website for
|
|
57
|
+
my bakery": "If it's mostly for people deciding whether to stop by,
|
|
58
|
+
I'd lead with hours and what's in the case today; taking orders is a
|
|
59
|
+
different site. What do you want someone to do when they land on it?"
|
|
60
|
+
|
|
61
|
+
How the message ends depends on whether their message asked for
|
|
62
|
+
brainstorming:
|
|
63
|
+
|
|
64
|
+
- **They asked for it** (by name, by invoking it, or by asking for a
|
|
65
|
+
design discussion): end with your question. They want this
|
|
66
|
+
conversation.
|
|
67
|
+
- **They didn't:** they may not want a conversation at all. After your
|
|
68
|
+
question, add a light, one-line offer to just get going instead, like
|
|
69
|
+
"Or if you'd rather I just dive in, say so." If they take you up on
|
|
70
|
+
it, this skill is done: state any significant how-it-gets-made choice
|
|
71
|
+
(platform, language, medium) in one plain line, then do what they
|
|
72
|
+
asked the way its size calls for (Size the Work, below). Their opt-out
|
|
73
|
+
is the approval a small change needs.
|
|
39
74
|
|
|
40
75
|
That's the whole message.
|
|
41
76
|
|
|
@@ -44,7 +79,8 @@ That's the whole message.
|
|
|
44
79
|
Each message ends with one question: a single sentence with no list of
|
|
45
80
|
example answers hanging off it. Use plain language, pitched just a little
|
|
46
81
|
above where your human partner is. Match their vocabulary; never use
|
|
47
|
-
process jargon.
|
|
82
|
+
process jargon. You never need to quote this skill to your human
|
|
83
|
+
partner.
|
|
48
84
|
|
|
49
85
|
Be clear and concise. Lead with what matters. Avoid jargon. When you
|
|
50
86
|
report what you found, give them the most important findings and offer
|
|
@@ -76,19 +112,32 @@ out as questions:
|
|
|
76
112
|
- current state: what exists now, what they've tried
|
|
77
113
|
- the details they care about
|
|
78
114
|
|
|
79
|
-
**
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
115
|
+
**Make every question specific** to their project and what they've told
|
|
116
|
+
you. Ask Socratically, the way a sharp colleague would: build each
|
|
117
|
+
question on their last answer or on something you found, so it helps
|
|
118
|
+
them think through a consequence or a case they may have missed
|
|
119
|
+
("Voting closes before the meeting, and two members joined this month.
|
|
120
|
+
Does someone who joins mid-round get a vote?"). When the reason isn't
|
|
121
|
+
already plain, say what you're hoping to learn or what the answer would
|
|
122
|
+
change. A proposal they can correct, plus your reason for it, often
|
|
123
|
+
beats a question.
|
|
124
|
+
|
|
125
|
+
**Offer recon.** Once you have a bit of grounding and looking further
|
|
126
|
+
would help, offer to go look: deeper into their codebase or project,
|
|
127
|
+
their own files and data, or the web. Say what you'd look for. They
|
|
128
|
+
decide whether you go.
|
|
129
|
+
|
|
130
|
+
**Lay out the approaches.** Once you understand what they want, and
|
|
131
|
+
before you write anything up, lay out the ways of building it in the
|
|
132
|
+
message that carries your last playback chunk (Play It Back). Come up
|
|
133
|
+
with several real alternatives and drop the weak ones, including any
|
|
134
|
+
that work against why they want it and any the existing work rules out.
|
|
135
|
+
Present the two or three that remain, grounding each in what the project
|
|
136
|
+
actually does and saying what it trades off. Recommend one and say why;
|
|
137
|
+
that message's one question is which way they want to go. When there's
|
|
138
|
+
genuinely one sensible way, say so and explain why the others don't
|
|
139
|
+
fit. This is for how it gets built; for what they want, get them
|
|
140
|
+
describing first.
|
|
92
141
|
|
|
93
142
|
**Show, don't tell.** Offer the visual companion (below) whenever seeing
|
|
94
143
|
would help more than reading:
|
|
@@ -118,11 +167,12 @@ behaves), describe that part back in about 200-300 words. A playback
|
|
|
118
167
|
doesn't wait for its own answer: send it in the same message as your
|
|
119
168
|
next question, with one line saying they can correct anything in it in
|
|
120
169
|
their reply. The last chunk covers whatever is left and goes out with
|
|
121
|
-
the
|
|
122
|
-
build it
|
|
170
|
+
the approaches (Lay out the approaches) and the size you pick. Its
|
|
171
|
+
question is which way to build it; for a small change, it asks whether
|
|
172
|
+
to build it that way.
|
|
123
173
|
|
|
124
|
-
|
|
125
|
-
as
|
|
174
|
+
Only what they said goes in as theirs. Anything you filled in goes in
|
|
175
|
+
as your proposal, with your reason.
|
|
126
176
|
|
|
127
177
|
Before you send a chunk, check it: does it describe something they'll
|
|
128
178
|
look at, like a page, a screen, a schedule, or a printout? If so, and
|
|
@@ -155,9 +205,13 @@ public API), or a new dependency.
|
|
|
155
205
|
yourself, in this session: no design document, no plan, no subagents.
|
|
156
206
|
For software:
|
|
157
207
|
|
|
158
|
-
1. Run `git status --short` first and note anything that isn't yours.
|
|
159
|
-
|
|
208
|
+
1. Run `git status --short` first and note anything that isn't yours. If
|
|
209
|
+
anything is staged (`git diff --cached --quiet` exits non-zero), ask
|
|
210
|
+
before you start: a commit takes the whole index. On the default
|
|
211
|
+
branch or a detached HEAD, start a branch for the change
|
|
160
212
|
(`git switch -c <topic>`), unless they told you to work where you are.
|
|
213
|
+
Run the full suite once before you change anything: a failure there
|
|
214
|
+
isn't yours. Report it with the rest; don't fix it unasked.
|
|
161
215
|
2. Test first (superpowers:test-driven-development): a failing test,
|
|
162
216
|
then the code that makes it pass. A change no test can cover
|
|
163
217
|
(configuration, docs) gets the cheapest check that can fail instead:
|
|
@@ -165,6 +219,9 @@ For software:
|
|
|
165
219
|
that exception.
|
|
166
220
|
3. Run the tests that cover the change, then the full suite once.
|
|
167
221
|
4. Commit once, staging your own files by path, never with `-a` or `-A`.
|
|
222
|
+
A file step 1 showed as changed also holds someone else's edits:
|
|
223
|
+
stage only your hunks (`git apply --cached` with a patch of just them;
|
|
224
|
+
`git add -p` needs a terminal), or ask.
|
|
168
225
|
5. Before you call it done, follow
|
|
169
226
|
superpowers:verification-before-completion: name the commit, the
|
|
170
227
|
command you ran, what it printed, and any changes in the tree that
|
|
@@ -173,7 +230,9 @@ For software:
|
|
|
173
230
|
Your human partner reviews that commit; it is the only review a small
|
|
174
231
|
change gets. Outside software, make the change and show it to them.
|
|
175
232
|
|
|
176
|
-
If it grows mid-task, stop, say so, and step up a size
|
|
233
|
+
If it grows mid-task, stop before committing, say so, and step up a size:
|
|
234
|
+
say what the uncommitted work holds, and ask whether the design should
|
|
235
|
+
keep it or start clean. A plan never starts on top of it uncommitted.
|
|
177
236
|
|
|
178
237
|
If this is really several independent projects, say so, agree on an
|
|
179
238
|
order, and brainstorm them one at a time.
|
|
@@ -186,6 +245,8 @@ could plan from without going back to your human partner. Cover:
|
|
|
186
245
|
- intent and the why
|
|
187
246
|
- goals, non-goals, anti-goals
|
|
188
247
|
- constraints
|
|
248
|
+
- approaches: the two or three you laid out, what each trades off, which
|
|
249
|
+
one they picked, and why
|
|
189
250
|
- the parts of the how they decided, as they decided them
|
|
190
251
|
- what's left to the builder
|
|
191
252
|
|
|
@@ -239,8 +300,9 @@ skill. Outside software, the plan follows the document's approval.
|
|
|
239
300
|
|
|
240
301
|
| Thought | Reality |
|
|
241
302
|
|---------|---------|
|
|
242
|
-
| "I'll offer
|
|
303
|
+
| "I'll offer a menu of what they might want" | Options steer. Ask them to describe it first. |
|
|
243
304
|
| "I'll fill in sensible defaults" | Good. Say them out loud. A default they never heard is one they couldn't reject. |
|
|
305
|
+
| "I've answered their questions, so I'll write the doc" | Lay out the approaches first, with your last playback chunk. |
|
|
244
306
|
| "I should explain the process first" | Ask your question. The process shows itself. |
|
|
245
307
|
| "They said 'sounds good' to the idea" | Approval covers what you showed them. A description you haven't written isn't approved. |
|
|
246
308
|
| "I'll get the design approved, then write the plan" | For software, write the plan first, so they approve both in one reading. A change to the design updates the plan before you ask again. |
|
|
@@ -100,7 +100,7 @@ yourself in step 3 and which findings to lead with in the verdict.
|
|
|
100
100
|
partner either.
|
|
101
101
|
- **Approval gates.** No archive before your partner has seen the scrub
|
|
102
102
|
log and file list. No issue or comment before they approve the exact
|
|
103
|
-
text.
|
|
103
|
+
text, and none with a placeholder summary.
|
|
104
104
|
- **Intake before analysis.** Nothing in steps 2–7 starts until your
|
|
105
105
|
partner has answered. If they are away, write the questions and stop.
|
|
106
106
|
A statement you reconstructed for them is not an answer. An
|
|
@@ -36,11 +36,11 @@ labels land only for collaborators; the template footer still marks the
|
|
|
36
36
|
issue as skill-filed. `gh` cannot attach files: give your partner the
|
|
37
37
|
bundle path to attach through the browser after the issue exists.
|
|
38
38
|
|
|
39
|
-
Without `gh`, hand over a prefilled link on the `
|
|
40
|
-
|
|
39
|
+
Without `gh`, hand over a prefilled link on the `bug_report.md` template,
|
|
40
|
+
which applies the `bug` label for any reporter:
|
|
41
41
|
|
|
42
42
|
```
|
|
43
|
-
https://github.com/obra/superpowers/issues/new?template=
|
|
43
|
+
https://github.com/obra/superpowers/issues/new?template=bug_report.md&title=<url-encoded title>&body=<url-encoded body>
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
GitHub rejects URLs over about 8,000 characters; past that, send the link
|
|
@@ -2,6 +2,20 @@ Title: <skill or symptom>: <one-line observable> (<harness>)
|
|
|
2
2
|
|
|
3
3
|
- [x] I searched existing issues and this is not a duplicate (searched: <query terms>; closest: <#n title, or "none">)
|
|
4
4
|
|
|
5
|
+
## Who's filing this report? (required)
|
|
6
|
+
|
|
7
|
+
<model and harness of this session>, filing on behalf of <how your
|
|
8
|
+
partner wants to be named, or "my human partner">, who asked: "<their
|
|
9
|
+
request from this session that led to the diagnosis or the issue,
|
|
10
|
+
scrubbed>"
|
|
11
|
+
|
|
12
|
+
## Human-authored summary (required, under 200 words)
|
|
13
|
+
|
|
14
|
+
<Your partner's own words on what went wrong and what should have
|
|
15
|
+
happened, pasted as written. Ask for them; a placeholder here means the
|
|
16
|
+
issue is not ready to file. If they run long, ask them to trim rather
|
|
17
|
+
than editing their words.>
|
|
18
|
+
|
|
5
19
|
## Environment (required)
|
|
6
20
|
|
|
7
21
|
| Field | Value | Provenance / supporting evidence |
|
|
@@ -17,8 +31,12 @@ Title: <skill or symptom>: <one-line observable> (<harness>)
|
|
|
17
31
|
|
|
18
32
|
- [ ] I confirmed this issue does not occur without Superpowers installed
|
|
19
33
|
|
|
20
|
-
|
|
21
|
-
|
|
34
|
+
How I verified that this issue does not reproduce without Superpowers:
|
|
35
|
+
<"Not tried", or what your partner ran without superpowers and what
|
|
36
|
+
happened, with the transcript path if there is one. Tick the box above
|
|
37
|
+
only when a transcript shows the problem did not recur.>
|
|
38
|
+
|
|
39
|
+
Evidence for involvement is below; it does not establish cause.
|
|
22
40
|
|
|
23
41
|
## What happened?
|
|
24
42
|
|
|
@@ -47,5 +65,6 @@ Superpowers involvement per the diagnosis report: <possible | likely>, with
|
|
|
47
65
|
evidence at <transcript lines>. This report does not propose a fix.
|
|
48
66
|
|
|
49
67
|
---
|
|
50
|
-
Filed with the `diagnosing-superpowers` skill.
|
|
51
|
-
|
|
68
|
+
Filed with the `diagnosing-superpowers` skill. The filing model and
|
|
69
|
+
harness are under "Who's filing"; the diagnosed session's model, harness,
|
|
70
|
+
versions, and plugins are in the Environment table.
|
|
@@ -124,10 +124,23 @@ digraph process {
|
|
|
124
124
|
|
|
125
125
|
## Setup
|
|
126
126
|
|
|
127
|
-
Ensure the work happens in an isolated workspace
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
127
|
+
Ensure the work happens in an isolated workspace. If the plan's approval
|
|
128
|
+
named a new branch in this checkout (writing-plans' default), that approval
|
|
129
|
+
was your human partner's answer to superpowers:using-git-worktrees' consent
|
|
130
|
+
question: work in place, with no worktree. With a ledger for this plan
|
|
131
|
+
(below), `git switch` to the branch its `Setup:` line names and resume.
|
|
132
|
+
On a first run, run `git status --porcelain`: a change to a tracked file,
|
|
133
|
+
or anything staged, goes back to your human partner to commit or stash
|
|
134
|
+
first, since your commits and tests would include it; untracked files may
|
|
135
|
+
stay, and stay out of every commit. If a branch with the approved name
|
|
136
|
+
already exists, ask, or name another. Then `git switch -c <branch>`, run
|
|
137
|
+
using-git-worktrees' Step 2 (project setup) and Step 3 (baseline tests)
|
|
138
|
+
here, and, once the ledger exists, ledger `Setup: branch <branch> in this
|
|
139
|
+
checkout; untracked before start: <paths | none>`. Commit your own files
|
|
140
|
+
by path, never with `-a` or `-A`. Otherwise use
|
|
141
|
+
superpowers:using-git-worktrees to create a worktree or verify the
|
|
142
|
+
existing one. Never start implementation on a main/master branch without
|
|
143
|
+
your human partner's explicit consent.
|
|
131
144
|
|
|
132
145
|
Conversation memory does not survive compaction. An inline executor that
|
|
133
146
|
loses its place re-implements tasks whose commits already exist — the same
|
|
@@ -151,7 +164,11 @@ and the new one resumes from the same ledger.
|
|
|
151
164
|
commits exist in git even when your context no longer remembers making
|
|
152
165
|
them: after compaction, trust the ledger and `git log` over your own
|
|
153
166
|
recollection. A ledger whose first line names a different plan file is
|
|
154
|
-
another plan's progress: leave it and start your own, fresh.
|
|
167
|
+
another plan's progress: leave it and start your own, fresh. A wave task
|
|
168
|
+
(its `dispatched` line names a worktree) with no `merged` or `complete`
|
|
169
|
+
line after it is still open in its worktree: finish it under
|
|
170
|
+
subagent-driven-development's resume rules and Complete the task before
|
|
171
|
+
continuing here. Finished waves need nothing.
|
|
155
172
|
- Create the ledger with its identity as the first line:
|
|
156
173
|
`# SDD ledger — plan: <plan file path>`.
|
|
157
174
|
- `git clean -fdx` will destroy the workspace (it's git-ignored scratch);
|
|
@@ -382,55 +399,3 @@ Use superpowers:finishing-a-development-branch.
|
|
|
382
399
|
| "The reviewer said Minor, so it's Minor" | The label graded the spec's silence. Grade what the person gets. Re-grade, then gate. |
|
|
383
400
|
| "The fix is obvious, no need for a failing test first" | The failing test is the only proof the finding was real and is now gone. Without it you have a diff and a hope. |
|
|
384
401
|
| "I'll fix the minors too while I'm in there" | Every minor you fix is a test, a fix, and a suite run your partner did not ask for. Ledger them; your partner decides. |
|
|
385
|
-
|
|
386
|
-
## Example Workflow
|
|
387
|
-
|
|
388
|
-
```
|
|
389
|
-
You: I'm using the executing-plans skill to implement this plan inline.
|
|
390
|
-
|
|
391
|
-
[Setup: worktree verified]
|
|
392
|
-
[Read plan once: docs/plans/feature-plan.md; spec read]
|
|
393
|
-
[Resolve workspace: sdd-workspace docs/plans/feature-plan.md — no ledger inside, fresh start]
|
|
394
|
-
[Pre-flight scan: 2 shared-interface rows, 4 self-consistency rows, clean; written to ledger]
|
|
395
|
-
[Create todos for all tasks]
|
|
396
|
-
|
|
397
|
-
Task 1: Hook installation script
|
|
398
|
-
|
|
399
|
-
[task-start plan 1 → brief read; BASE a1b2c3d]
|
|
400
|
-
[Step 1: write failing test — written]
|
|
401
|
-
[Step 2: run it — FAIL: install_hook not defined. Matches Expected.]
|
|
402
|
-
[Step 3: implement — written]
|
|
403
|
-
[Step 4: run it — PASS 1/1. Matches Expected.]
|
|
404
|
-
[Step 5: commit — d4e5f6a]
|
|
405
|
-
[Contract: tests ran, output read, no deviations]
|
|
406
|
-
[task-done plan 1 a1b2c3d -- npm test -- hooks → ledger: Task 1: complete (commits a1b2c3d..d4e5f6a, tests: npm test -- hooks → 1/1 pass)]
|
|
407
|
-
|
|
408
|
-
Task 2: Recovery modes
|
|
409
|
-
|
|
410
|
-
[task-start plan 2 → brief read; BASE d4e5f6a]
|
|
411
|
-
[Step 2: run failing test — FAIL, but on an import error: Task 1 exported
|
|
412
|
-
installHook, brief consumes install_hook]
|
|
413
|
-
[Ruling: brief's consumer name is a typo against Task 1's Produces block;
|
|
414
|
-
use installHook — Ledger: Task 2: Ruling: install_hook → installHook — matches Task 1 Produces — cost if wrong: one rename]
|
|
415
|
-
[Steps 2-5 as planned; commit b7c8d9e]
|
|
416
|
-
[task-done plan 2 d4e5f6a -- npm test -- recovery → ledger: Task 2: complete (commits d4e5f6a..b7c8d9e, tests: npm test -- recovery → 8/8 pass)]
|
|
417
|
-
|
|
418
|
-
...
|
|
419
|
-
|
|
420
|
-
[After all tasks: review-package plan MERGE_BASE HEAD; dispatch code-reviewer, most capable model]
|
|
421
|
-
Reviewer: One Important finding — progress reporting interval hardcoded. Two Minor.
|
|
422
|
-
[Re-grade: Important stands; minors → ledger as deferred]
|
|
423
|
-
[Fix pass: test_progress_interval_configurable RED → extract PROGRESS_INTERVAL → GREEN; suite 12/12; commit]
|
|
424
|
-
[Ledger: Final: fixed hardcoded interval — test_progress_interval_configurable RED→GREEN, suite 12/12]
|
|
425
|
-
|
|
426
|
-
Rulings I made:
|
|
427
|
-
- Task 2: install_hook → installHook (brief typo; cost if wrong: one rename)
|
|
428
|
-
|
|
429
|
-
Deferred minors:
|
|
430
|
-
- README lacks a usage example
|
|
431
|
-
- recovery.js could split verify/repair into two files
|
|
432
|
-
|
|
433
|
-
[Delete this plan's workspace — the record now lives in git]
|
|
434
|
-
|
|
435
|
-
Using superpowers:finishing-a-development-branch.
|
|
436
|
-
```
|
|
@@ -150,9 +150,13 @@ MAIN_ROOT=$(git -C "$(git rev-parse --git-common-dir)/.." rev-parse --show-tople
|
|
|
150
150
|
cd "$MAIN_ROOT"
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
Then clean up the worktree (Step 6) and force-delete the branch
|
|
153
|
+
Then clean up the worktree (Step 6) and force-delete the branch. In a
|
|
154
|
+
normal repo (`GIT_DIR == GIT_COMMON`, for example a branch made in this
|
|
155
|
+
checkout) the branch is still checked out here, and git refuses to delete
|
|
156
|
+
it, so switch away first:
|
|
154
157
|
|
|
155
158
|
```bash
|
|
159
|
+
git switch <base-branch> # normal repo only
|
|
156
160
|
git branch -D <feature-branch>
|
|
157
161
|
```
|
|
158
162
|
|