@nklisch/pi-agile-workflow 0.15.3
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/.claude-plugin/plugin.json +10 -0
- package/.codex-plugin/plugin.json +28 -0
- package/CHANGELOG.md +591 -0
- package/README.md +107 -0
- package/docs/ARCHITECTURE.md +716 -0
- package/docs/MIGRATION.md +419 -0
- package/docs/PRINCIPLES.md +464 -0
- package/docs/ROADMAP.md +95 -0
- package/docs/SPEC.md +855 -0
- package/docs/VISION.md +106 -0
- package/extensions/agile-workflow.test.ts +419 -0
- package/extensions/agile-workflow.ts +467 -0
- package/hooks/hooks.json +52 -0
- package/hooks/scripts/prompt-context.py +628 -0
- package/hooks/scripts/substrate-maintainer.py +359 -0
- package/hooks/scripts/test_prompt_context.py +757 -0
- package/package.json +30 -0
- package/scripts/install-work-view.sh +165 -0
- package/scripts/tests/agent-metadata.test.sh +75 -0
- package/scripts/tests/bump-version.test.sh +552 -0
- package/scripts/tests/channel-parity.test.sh +117 -0
- package/scripts/tests/convert-content-integrity.test.sh +246 -0
- package/scripts/tests/convert-install-routing.test.sh +159 -0
- package/scripts/tests/install-work-view.test.sh +411 -0
- package/scripts/tests/pi-package-metadata.test.sh +119 -0
- package/scripts/tests/work-board-shim.test.sh +239 -0
- package/scripts/tests/work-view-dist-version.test.sh +105 -0
- package/scripts/work-board.sh +64 -0
- package/scripts/work-view.sh +423 -0
- package/skills/autopilot/SKILL.md +330 -0
- package/skills/autopilot/agents/openai.yaml +6 -0
- package/skills/board/SKILL.md +62 -0
- package/skills/board/agents/openai.yaml +6 -0
- package/skills/bold-refactor/SKILL.md +244 -0
- package/skills/bold-refactor/agents/openai.yaml +6 -0
- package/skills/bug-scan/SKILL.md +378 -0
- package/skills/bug-scan/agents/openai.yaml +6 -0
- package/skills/bug-scan/references/async-promises.md +119 -0
- package/skills/bug-scan/references/concurrency-races.md +148 -0
- package/skills/bug-scan/references/data-layer.md +167 -0
- package/skills/bug-scan/references/error-handling.md +197 -0
- package/skills/bug-scan/references/gate-item-template.md +94 -0
- package/skills/bug-scan/references/language-footguns.md +219 -0
- package/skills/bug-scan/references/parked-item-template.md +103 -0
- package/skills/bug-scan/references/report-template.md +115 -0
- package/skills/bug-scan/references/resource-leaks.md +199 -0
- package/skills/bug-scan/references/state-closures.md +148 -0
- package/skills/bug-scan/references/time-numbers.md +158 -0
- package/skills/convert/SKILL.md +1463 -0
- package/skills/convert/agents/openai.yaml +6 -0
- package/skills/convert/references/legacy-overlap-migration.md +179 -0
- package/skills/deep-code-scan/SKILL.md +378 -0
- package/skills/deep-code-scan/agents/openai.yaml +6 -0
- package/skills/deep-code-scan/references/artifact-ledger.md +148 -0
- package/skills/deep-code-scan/references/consolidation.md +91 -0
- package/skills/deep-code-scan/references/decomposition.md +127 -0
- package/skills/deep-code-scan/references/item-templates.md +263 -0
- package/skills/deep-code-scan/references/lane-catalog.md +129 -0
- package/skills/deep-code-scan/references/review-gauntlet.md +108 -0
- package/skills/deep-code-scan/references/scanner-brief.md +152 -0
- package/skills/e2e-test-design/SKILL.md +517 -0
- package/skills/e2e-test-design/references/anti-tautology.md +261 -0
- package/skills/e2e-test-design/references/service-mocks.md +234 -0
- package/skills/e2e-test-design/references/test-taxonomy.md +211 -0
- package/skills/epic-design/SKILL.md +476 -0
- package/skills/epicize/SKILL.md +210 -0
- package/skills/epicize/agents/openai.yaml +6 -0
- package/skills/feature-design/SKILL.md +472 -0
- package/skills/fix/SKILL.md +173 -0
- package/skills/gate-cruft/SKILL.md +258 -0
- package/skills/gate-docs/SKILL.md +278 -0
- package/skills/gate-patterns/SKILL.md +389 -0
- package/skills/gate-refactor/SKILL.md +408 -0
- package/skills/gate-security/SKILL.md +275 -0
- package/skills/gate-tests/SKILL.md +367 -0
- package/skills/groom/SKILL.md +162 -0
- package/skills/groom/agents/openai.yaml +6 -0
- package/skills/ideate/SKILL.md +185 -0
- package/skills/ideate/agents/openai.yaml +6 -0
- package/skills/implement/SKILL.md +288 -0
- package/skills/implement-orchestrator/SKILL.md +604 -0
- package/skills/park/SKILL.md +111 -0
- package/skills/perf-design/SKILL.md +427 -0
- package/skills/perf-scout/SKILL.md +404 -0
- package/skills/perf-scout/agents/openai.yaml +6 -0
- package/skills/perf-scout/references/algorithmic-and-data-structures.md +126 -0
- package/skills/perf-scout/references/approximation-and-precomputation.md +136 -0
- package/skills/perf-scout/references/caching-and-memoization.md +123 -0
- package/skills/perf-scout/references/compiler-runtime-and-language.md +136 -0
- package/skills/perf-scout/references/database-and-storage-internals.md +144 -0
- package/skills/perf-scout/references/distributed-systems.md +150 -0
- package/skills/perf-scout/references/game-engine-and-realtime.md +136 -0
- package/skills/perf-scout/references/gpu-and-accelerators.md +130 -0
- package/skills/perf-scout/references/idea-ranking.md +75 -0
- package/skills/perf-scout/references/io-and-batching.md +135 -0
- package/skills/perf-scout/references/memory-and-data-locality.md +137 -0
- package/skills/perf-scout/references/parallelism-and-vectorization.md +126 -0
- package/skills/perf-scout/references/parked-item-template.md +117 -0
- package/skills/perf-scout/references/peer-review-pass.md +150 -0
- package/skills/perf-scout/references/report-template.md +148 -0
- package/skills/principles/SKILL.md +678 -0
- package/skills/principles/references/models.md +191 -0
- package/skills/principles/references/subagents.md +158 -0
- package/skills/prose-author/SKILL.md +185 -0
- package/skills/refactor-conventions-creator/SKILL.md +359 -0
- package/skills/refactor-conventions-creator/agents/openai.yaml +6 -0
- package/skills/refactor-conventions-creator/references/common-structures.md +91 -0
- package/skills/refactor-conventions-creator/references/common-styles.md +90 -0
- package/skills/refactor-design/SKILL.md +384 -0
- package/skills/release-deploy/SKILL.md +667 -0
- package/skills/release-deploy/agents/openai.yaml +6 -0
- package/skills/research/SKILL.md +166 -0
- package/skills/research/agents/openai.yaml +6 -0
- package/skills/review/SKILL.md +267 -0
- package/skills/review/references/deep-review.md +98 -0
- package/skills/review/references/review-lenses.md +68 -0
- package/skills/review/references/substrate-side-effects.md +161 -0
- package/skills/review/references/target-resolution.md +52 -0
- package/skills/scope/SKILL.md +486 -0
- package/work-view/Cargo.lock +486 -0
- package/work-view/Cargo.toml +9 -0
- package/work-view/crates/cli/.work-view-version +1 -0
- package/work-view/crates/cli/Cargo.toml +18 -0
- package/work-view/crates/cli/src/actionable.rs +500 -0
- package/work-view/crates/cli/src/args.rs +792 -0
- package/work-view/crates/cli/src/board/assets/board.css +855 -0
- package/work-view/crates/cli/src/board/assets/board.js +259 -0
- package/work-view/crates/cli/src/board/assets/card.js +139 -0
- package/work-view/crates/cli/src/board/assets/components.css +290 -0
- package/work-view/crates/cli/src/board/assets/dependency.js +1193 -0
- package/work-view/crates/cli/src/board/assets/detail.js +256 -0
- package/work-view/crates/cli/src/board/assets/filters.js +389 -0
- package/work-view/crates/cli/src/board/assets/index.html +77 -0
- package/work-view/crates/cli/src/board/assets/kanban.js +231 -0
- package/work-view/crates/cli/src/board/assets/markdown.js +260 -0
- package/work-view/crates/cli/src/board/assets/motion.css +131 -0
- package/work-view/crates/cli/src/board/assets/state.js +245 -0
- package/work-view/crates/cli/src/board/assets/table.js +304 -0
- package/work-view/crates/cli/src/board/assets/tokens.css +602 -0
- package/work-view/crates/cli/src/board/assets/views.js +41 -0
- package/work-view/crates/cli/src/board/assets.rs +162 -0
- package/work-view/crates/cli/src/board/feed.rs +204 -0
- package/work-view/crates/cli/src/board/mod.rs +246 -0
- package/work-view/crates/cli/src/board/open.rs +144 -0
- package/work-view/crates/cli/src/board/server.rs +407 -0
- package/work-view/crates/cli/src/main.rs +195 -0
- package/work-view/crates/cli/src/render.rs +354 -0
- package/work-view/crates/cli/src/scope.rs +157 -0
- package/work-view/crates/cli/src/stale.rs +581 -0
- package/work-view/crates/cli/tests/board-js/dependency-table.test.mjs +64 -0
- package/work-view/crates/cli/tests/board-js/expanded-browsing.test.mjs +79 -0
- package/work-view/crates/cli/tests/board-js/harness-smoke.test.mjs +11 -0
- package/work-view/crates/cli/tests/board-js/harness.mjs +437 -0
- package/work-view/crates/cli/tests/board-js/kanban-detail.test.mjs +75 -0
- package/work-view/crates/cli/tests/board-js/markdown-filter.test.mjs +60 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/CONVENTIONS.md +3 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/active/epics/epic-alpha.md +16 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/active/features/feat-a.md +16 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/active/features/feat-b.md +16 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/active/stories/story-alpha-1.md +16 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/active/stories/story-research-1.md +19 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/archive/feat-done.md +16 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/archive/feat-shipped.md +18 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/backlog/idea-backlog.md +7 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/releases/v1.0/v1.0.md +16 -0
- package/work-view/crates/cli/tests/fixtures/ready-drafting/.work/CONVENTIONS.md +6 -0
- package/work-view/crates/cli/tests/fixtures/ready-drafting/.work/active/features/feat-dep-done.md +17 -0
- package/work-view/crates/cli/tests/fixtures/ready-drafting/.work/active/features/feat-design-ready.md +17 -0
- package/work-view/crates/cli/tests/fixtures/ready-drafting/.work/active/features/feat-impl-ready.md +17 -0
- package/work-view/crates/cli/tests/fixtures/ready-drafting/.work/active/stories/story-review-ready.md +17 -0
- package/work-view/crates/cli/tests/fixtures/with-malformed/.work/CONVENTIONS.md +4 -0
- package/work-view/crates/cli/tests/fixtures/with-malformed/.work/active/epics/malformed-no-closing-fence.md +8 -0
- package/work-view/crates/cli/tests/fixtures/with-malformed/.work/active/features/good-item.md +16 -0
- package/work-view/crates/cli/tests/integration.rs +2833 -0
- package/work-view/crates/core/Cargo.toml +13 -0
- package/work-view/crates/core/src/error.rs +61 -0
- package/work-view/crates/core/src/filter.rs +804 -0
- package/work-view/crates/core/src/graph.rs +324 -0
- package/work-view/crates/core/src/index.rs +590 -0
- package/work-view/crates/core/src/lib.rs +54 -0
- package/work-view/crates/core/src/model.rs +202 -0
- package/work-view/crates/core/src/parse.rs +494 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/CONVENTIONS.md +15 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/active/epics/epic-core.md +16 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/active/features/feat-parser.md +16 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/active/features/feat-query.md +16 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/active/stories/malformed-no-id.md +15 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/active/stories/story-parse-unit.md +16 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/active/stories/story-security-gate.md +16 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/archive/feat-old.md +16 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/archive/feat-parser.md +17 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/backlog/idea-future-board.md +7 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/releases/v1.0/v1.0.md +16 -0
- package/work-view/crates/core/tests/fixtures/precedence/.work/CONVENTIONS.md +10 -0
- package/work-view/crates/core/tests/fixtures/precedence/.work/archive/dup-item.md +18 -0
- package/work-view/crates/core/tests/fixtures/precedence/.work/releases/v2.0/dup-item.md +18 -0
- package/work-view/crates/core/tests/integration.rs +541 -0
- package/work-view/dist/.gitattributes +1 -0
- package/work-view/dist/README.md +42 -0
- package/work-view/dist/aarch64-apple-darwin/work-view +0 -0
- package/work-view/dist/aarch64-unknown-linux-musl/work-view +0 -0
- package/work-view/dist/x86_64-apple-darwin/work-view +0 -0
- package/work-view/dist/x86_64-unknown-linux-musl/work-view +0 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Substrate Side Effects
|
|
2
|
+
|
|
3
|
+
Load this reference only in substrate mode, or when a standalone review's user
|
|
4
|
+
explicitly asks to track findings in the substrate.
|
|
5
|
+
|
|
6
|
+
Standalone mode must not create `.work` items, advance stages, archive files, or
|
|
7
|
+
commit unless the user explicitly asks for that side effect.
|
|
8
|
+
|
|
9
|
+
## Triage Findings Into Items
|
|
10
|
+
|
|
11
|
+
For each finding above nit level, create a substrate item so it does not
|
|
12
|
+
disappear into prose:
|
|
13
|
+
|
|
14
|
+
- **Blocker**: either fix inline if small, or create a story in
|
|
15
|
+
`.work/active/stories/` with `stage: implementing` and tags such as `[bug]`,
|
|
16
|
+
`[security]`, `[tests]`, or the appropriate category.
|
|
17
|
+
- **Important**: park as a backlog item in `.work/backlog/`, or scope as a
|
|
18
|
+
feature if substantial.
|
|
19
|
+
- **Nit**: keep in conversation only; nits do not warrant items.
|
|
20
|
+
|
|
21
|
+
Review-created items use `gate_origin: null`; gate-produced findings set
|
|
22
|
+
`gate_origin`.
|
|
23
|
+
|
|
24
|
+
## Decide And Advance
|
|
25
|
+
|
|
26
|
+
If there are no blockers:
|
|
27
|
+
|
|
28
|
+
1. Advance the item from `review` to `done`.
|
|
29
|
+
2. If it has `release_binding: <version>`, leave it active for
|
|
30
|
+
`/agile-workflow:release-deploy`.
|
|
31
|
+
3. If it has no release binding and no active parent epic/feature, archive it per the
|
|
32
|
+
project's **Terminal-tier retention** value in `.work/CONVENTIONS.md` — the ONE merged
|
|
33
|
+
terminal convention (see convert / SPEC.md):
|
|
34
|
+
- `delete-refs` (the default) → archive as a **bodyless stub** (see "Archive as a bodyless
|
|
35
|
+
stub" below) — do not retain the full body on disk.
|
|
36
|
+
- `retain-bodies` (the documented opt-out) → archive with the **full body kept**, same
|
|
37
|
+
frontmatter additions (`archived_atop`, `git_ref`) and same late-binding semantics —
|
|
38
|
+
bodies are just not pruned. Honor the project's existing archive layout (e.g.
|
|
39
|
+
kind-grouped `archive/<kind>s/`) when one is established.
|
|
40
|
+
- **Any other value** → treat as `retain-bodies` (keep the full body) and print a loud
|
|
41
|
+
one-line warning: `WARNING: unrecognized Terminal-tier retention value "<value>" in
|
|
42
|
+
CONVENTIONS.md — archiving with body kept (safe default); fix CONVENTIONS.md.`
|
|
43
|
+
Rationale: a typo must never trigger body-pruning. `delete-refs` applies only when
|
|
44
|
+
explicitly and exactly declared (or when the key is absent — the documented default
|
|
45
|
+
above; that default is unchanged).
|
|
46
|
+
4. If it has a parent, check whether all siblings are now `done`:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
parent_id=$(grep '^parent:' .work/active/<kind>s/<id>.md | awk '{print $2}')
|
|
50
|
+
.work/bin/work-view --parent "$parent_id" --stage done --count
|
|
51
|
+
.work/bin/work-view --parent "$parent_id" --count
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
If sibling done count equals total count, advance the parent from `implementing`
|
|
55
|
+
to `review` and append a "Children complete" note.
|
|
56
|
+
|
|
57
|
+
If blockers exist:
|
|
58
|
+
|
|
59
|
+
1. Set the item back to `stage: implementing`.
|
|
60
|
+
2. Append a `## Review findings` section listing blockers and the created item
|
|
61
|
+
ids.
|
|
62
|
+
3. Do not archive.
|
|
63
|
+
|
|
64
|
+
## Archive as a bodyless stub
|
|
65
|
+
|
|
66
|
+
*(Applies under `delete-refs` retention — the default. Under `retain-bodies`, keep the full
|
|
67
|
+
body and apply only the frontmatter additions below.)*
|
|
68
|
+
|
|
69
|
+
Terminal items carry **zero design authority** (their rationale must not bind present decisions),
|
|
70
|
+
and a retained body on disk leaks stale "we decided X" prose to future agents. Git already preserves
|
|
71
|
+
every body, so archive items as bodyless refs — discoverable and late-bindable, but with no prose to
|
|
72
|
+
mislead.
|
|
73
|
+
|
|
74
|
+
The stub also records the release baseline it was done *atop* (`archived_atop`) so
|
|
75
|
+
`/agile-workflow:release-deploy` can later late-bind it into the release that ships work done on top
|
|
76
|
+
of the prior shipped tag. Archiving stays decoupled from release binding: the stub carries
|
|
77
|
+
`release_binding: null` until a release claims it.
|
|
78
|
+
|
|
79
|
+
To archive `<id>` (a `done` item with no release binding and no active parent):
|
|
80
|
+
|
|
81
|
+
1. Capture the ref where the full body currently lives — **before** the archive commit:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
git_ref=$(git rev-parse --short HEAD)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
2. Compute `archived_atop` — the immutable release baseline this item was done atop. It is the
|
|
88
|
+
**latest released version** at archival time:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Latest released version = newest git tag matching the project's release tag shape,
|
|
92
|
+
# OR the newest .work/releases/<version>/ summary if no tags are used.
|
|
93
|
+
archived_atop=$(git describe --tags --abbrev=0 2>/dev/null \
|
|
94
|
+
|| ls -d .work/releases/*/ 2>/dev/null | sort -V | tail -1 | xargs -r basename)
|
|
95
|
+
# If neither exists yet (no release has ever shipped), use the sentinel:
|
|
96
|
+
archived_atop=${archived_atop:-pre-release}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Stamp it **once** at archival and **never rewrite it** afterward — it is the immutable baseline.
|
|
100
|
+
On an idempotent re-archive of an existing stub, preserve the stub's existing `archived_atop`
|
|
101
|
+
rather than recomputing it.
|
|
102
|
+
|
|
103
|
+
3. Write `.work/archive/<id>.md` as a stub: keep the YAML frontmatter (add `git_ref: <git_ref>` and
|
|
104
|
+
`archived_atop: <archived_atop>`) and the first `# <Title>` line only. Drop all other body
|
|
105
|
+
content. Keep `stage: done` and the existing `release_binding` (normally `null`; late-bind later
|
|
106
|
+
by setting it to a `<version>`).
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
---
|
|
110
|
+
id: <id>
|
|
111
|
+
kind: <kind>
|
|
112
|
+
stage: done
|
|
113
|
+
tags: [...]
|
|
114
|
+
parent: null
|
|
115
|
+
depends_on: []
|
|
116
|
+
release_binding: null
|
|
117
|
+
archived_atop: <release | pre-release>
|
|
118
|
+
git_ref: <git_ref>
|
|
119
|
+
created: <orig>
|
|
120
|
+
updated: <today>
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
# <Title>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
4. `git rm` the active file and `git add` the stub (see Commit).
|
|
127
|
+
|
|
128
|
+
The stub stays a first-class, work-view-queryable item. Recover the full body any time with
|
|
129
|
+
`git show <git_ref>:.work/active/<kind>s/<id>.md`.
|
|
130
|
+
|
|
131
|
+
## Append Review Record
|
|
132
|
+
|
|
133
|
+
Append this section to the reviewed item:
|
|
134
|
+
|
|
135
|
+
```markdown
|
|
136
|
+
## Review (YYYY-MM-DD)
|
|
137
|
+
|
|
138
|
+
**Verdict**: Approve | Approve with comments | Request changes | Block
|
|
139
|
+
|
|
140
|
+
**Blockers**: <list with item ids> (or "none")
|
|
141
|
+
**Important**: <list with item ids> (or "none")
|
|
142
|
+
**Nits**: <inline notes - not items>
|
|
143
|
+
|
|
144
|
+
**Notes**: <mode, depth, skipped lenses, limitations, or anything else worth recording>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Commit
|
|
148
|
+
|
|
149
|
+
Commit only substrate changes created by the review:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
git add .work/active/<kind>s/<id>.md .work/active/stories/<finding-id>.md .work/backlog/<finding-id>.md
|
|
153
|
+
git commit -m "review: <id> (<verdict>)"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
If the item was archived as a bodyless stub, stage the stub and remove the active body:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
git add .work/archive/<id>.md
|
|
160
|
+
git rm .work/active/<kind>s/<id>.md
|
|
161
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Target Resolution
|
|
2
|
+
|
|
3
|
+
Load this reference when determining what review target to inspect and how to
|
|
4
|
+
collect its diff or aggregate scope.
|
|
5
|
+
|
|
6
|
+
## Target Commands
|
|
7
|
+
|
|
8
|
+
| Target | Command |
|
|
9
|
+
|---|---|
|
|
10
|
+
| Item implementation commits | `git log --grep "<id>" --format='%H'`, then `git show <sha>` for each commit. |
|
|
11
|
+
| Current branch vs base | `git diff main...HEAD`; replace `main` with the detected default branch. |
|
|
12
|
+
| Specific branch | `git diff main...<branch>`; replace `main` with the detected default branch. |
|
|
13
|
+
| Specific commit | `git show <sha>` |
|
|
14
|
+
| Commit range | `git diff <sha1>..<sha2>` |
|
|
15
|
+
| Working tree | `git diff` |
|
|
16
|
+
| Unpushed commits | `git log @{u}..HEAD`, then `git diff @{u}..HEAD` |
|
|
17
|
+
| PR by number | `gh pr view <N> --json files,additions,deletions,title,body`, then `gh pr diff <N>` |
|
|
18
|
+
|
|
19
|
+
If `main` is not the default branch, detect the base from git metadata or the
|
|
20
|
+
remote tracking branch before running the diff.
|
|
21
|
+
|
|
22
|
+
## Substrate Items
|
|
23
|
+
|
|
24
|
+
For a feature with child stories, the review scope spans all child story
|
|
25
|
+
implementation commits. Find them by grepping for each story id and unioning the
|
|
26
|
+
patches.
|
|
27
|
+
|
|
28
|
+
For a story, prefer the commit(s) referenced by the item implementation notes.
|
|
29
|
+
If notes do not identify commits, try item-id grep, branch-vs-base, then working
|
|
30
|
+
tree in that order.
|
|
31
|
+
|
|
32
|
+
## Epic Scope
|
|
33
|
+
|
|
34
|
+
For an epic, do not attempt a line-by-line review by default. Each child feature
|
|
35
|
+
or story should already have passed review. Gather:
|
|
36
|
+
|
|
37
|
+
- The epic body: brief, decomposition, and acceptance intent.
|
|
38
|
+
- Each child feature body, especially its `## Review` section.
|
|
39
|
+
- The aggregate touched-file list from `git log --grep "<child-id>"` across all
|
|
40
|
+
children.
|
|
41
|
+
|
|
42
|
+
Use the aggregate scope to spot cross-cutting concerns: public API shifts,
|
|
43
|
+
foundation-doc drift, release gaps, and capability completeness.
|
|
44
|
+
|
|
45
|
+
## Empty Diff Handling
|
|
46
|
+
|
|
47
|
+
If a non-epic diff is empty after obvious ranges:
|
|
48
|
+
|
|
49
|
+
- Autopilot substrate mode: advance only if the item has complete green
|
|
50
|
+
verification evidence. Otherwise bounce for missing review scope.
|
|
51
|
+
- Interactive substrate mode: ask the user which range to review.
|
|
52
|
+
- Standalone mode: report that there is no diff to review and stop.
|