bigpowers 2.77.0 → 2.77.2
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/.pi/package.json +1 -1
- package/.pi/prompts/audit-code.md +1 -1
- package/.pi/prompts/craft-skill.md +2 -2
- package/.pi/prompts/elaborate-spec.md +1 -1
- package/.pi/prompts/evolve-skill.md +1 -1
- package/.pi/prompts/grill-me.md +1 -1
- package/.pi/prompts/guard-git.md +1 -1
- package/.pi/prompts/investigate-bug.md +2 -2
- package/.pi/prompts/model-domain.md +3 -3
- package/.pi/prompts/plan-refactor.md +2 -2
- package/.pi/prompts/plan-release.md +2 -2
- package/.pi/prompts/using-bigpowers.md +1 -1
- package/.pi/prompts/write-document.md +2 -2
- package/.pi/skills/audit-code/SKILL.md +1 -1
- package/.pi/skills/change-request/SKILL.md +1 -1
- package/.pi/skills/commit-message/SKILL.md +3 -3
- package/.pi/skills/compose-workflow/SKILL.md +1 -1
- package/.pi/skills/craft-skill/SKILL.md +4 -4
- package/.pi/skills/deepen-architecture/SKILL.md +13 -13
- package/.pi/skills/deploy/SKILL.md +4 -4
- package/.pi/skills/develop-tdd/SKILL.md +5 -5
- package/.pi/skills/elaborate-spec/SKILL.md +1 -1
- package/.pi/skills/evolve-skill/SKILL.md +2 -2
- package/.pi/skills/extract-design/SKILL.md +1 -1
- package/.pi/skills/generate-allure-report/SKILL.md +1 -1
- package/.pi/skills/grill-me/SKILL.md +2 -2
- package/.pi/skills/grill-with-docs/SKILL.md +1 -1
- package/.pi/skills/guard-git/SKILL.md +5 -5
- package/.pi/skills/harden-vps/SKILL.md +1 -1
- package/.pi/skills/investigate-bug/SKILL.md +2 -2
- package/.pi/skills/migrate-spec/SKILL.md +13 -13
- package/.pi/skills/model-domain/SKILL.md +5 -5
- package/.pi/skills/orchestrate-project/SKILL.md +2 -2
- package/.pi/skills/organize-workspace/SKILL.md +1 -1
- package/.pi/skills/plan-refactor/SKILL.md +2 -2
- package/.pi/skills/plan-release/SKILL.md +2 -2
- package/.pi/skills/plan-work/SKILL.md +2 -2
- package/.pi/skills/publish-package/SKILL.md +8 -8
- package/.pi/skills/release-branch/SKILL.md +2 -2
- package/.pi/skills/research-first/SKILL.md +1 -1
- package/.pi/skills/run-evals/SKILL.md +1 -1
- package/.pi/skills/security-review/SKILL.md +3 -3
- package/.pi/skills/seed-conventions/SKILL.md +3 -3
- package/.pi/skills/smoke-test/SKILL.md +5 -5
- package/.pi/skills/stocktake-skills/SKILL.md +1 -1
- package/.pi/skills/using-bigpowers/SKILL.md +1 -1
- package/.pi/skills/validate-contracts/SKILL.md +6 -6
- package/.pi/skills/verify-work/SKILL.md +1 -1
- package/.pi/skills/wire-ci/SKILL.md +8 -8
- package/.pi/skills/write-document/SKILL.md +3 -3
- package/CHANGELOG.md +14 -0
- package/package.json +4 -3
- package/scripts/adapters/pi.sh +4 -1
- package/scripts/check-skill-links.py +78 -0
- package/scripts/generate-reference-tables.sh +2 -1
- package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
- package/scripts/lib/link_utils.py +49 -0
- package/scripts/lib/simple_yaml.py +64 -13
- package/scripts/lib/srp-engine.py +100 -4
- package/scripts/sync-skills.sh +1 -1
- package/scripts/test-setup-no-pyyaml.sh +83 -0
- package/scripts/validate-skill-yaml.py +12 -5
- package/skills/audit-code/SKILL.md +1 -1
- package/skills/craft-skill/SKILL.md +2 -2
- package/skills/elaborate-spec/SKILL.md +1 -1
- package/skills/evolve-skill/REFERENCE.md +1 -1
- package/skills/grill-me/REFERENCE.md +1 -1
- package/skills/guard-git/SKILL.md +1 -1
- package/skills/investigate-bug/SKILL.md +2 -2
- package/skills/model-domain/CONTEXT-FORMAT.md +3 -3
- package/skills/plan-refactor/SKILL.md +2 -2
- package/skills/plan-release/SKILL.md +2 -2
- package/skills/using-bigpowers/SKILL.md +1 -1
- package/skills/write-document/REFERENCE.md +2 -2
- package/skills-lock.json +8 -8
- package/tests/test_srp_engine.py +148 -0
package/.pi/package.json
CHANGED
|
@@ -26,7 +26,7 @@ Apply the full checklist to churn-ranked files in descending order. Files with z
|
|
|
26
26
|
- Default: full checklist
|
|
27
27
|
- --quick: Run only Supply Chain and Test Coverage. Use for changes under 50 LOC.
|
|
28
28
|
- --gate: Non-interactive mode for automated CI gating (used by build-epic step 6). Exit with non-zero status code (`exit 1`) on ANY checklist failure; `exit 0` only if ALL items pass. Produces a compact pass/fail summary to stderr. On failure, list every ✗ item with reason.
|
|
29
|
-
- --parallel: Run checklist sections in **isolated git worktrees** (e45s18) so concurrent checks cannot corrupt each other's working tree
|
|
29
|
+
- --parallel: Run checklist sections in **isolated git worktrees** (e45s18) so concurrent checks cannot corrupt each other's working tree:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
32
|
bash scripts/lib/parallel-review-worktrees.sh audit-code
|
|
@@ -29,7 +29,7 @@ Move process detail into the SKILL.md body or REFERENCE.md — never into `descr
|
|
|
29
29
|
- Any reference materials to include?
|
|
30
30
|
- What specs/ output does it produce (if any)?
|
|
31
31
|
|
|
32
|
-
2. **Verify Principles** — Ensure the skill aligns with [PRINCIPLES.md](
|
|
32
|
+
2. **Verify Principles** — Ensure the skill aligns with [PRINCIPLES.md](https://github.com/danielvm-git/bigpowers/blob/main/docs/PRINCIPLES.md):
|
|
33
33
|
- Is it atomic (verb-noun)?
|
|
34
34
|
- Is it "deep" (simple interface, complex internal logic)?
|
|
35
35
|
- Does it include Hard Gates?
|
|
@@ -42,7 +42,7 @@ Move process detail into the SKILL.md body or REFERENCE.md — never into `descr
|
|
|
42
42
|
|
|
43
43
|
**Auto-skill from library README:** When user provides a library README or API docs URL, extract: triggers, HARD GATEs, verify commands, specs/ output — draft SKILL.md without inventing APIs not in the source.
|
|
44
44
|
|
|
45
|
-
4. Add `model:` frontmatter (`haiku` | `sonnet` | `opus`) per [model-profiles.md](
|
|
45
|
+
4. Add `model:` frontmatter (`haiku` | `sonnet` | `opus`) per [model-profiles.md](https://github.com/danielvm-git/bigpowers/blob/main/docs/references/model-profiles.md).
|
|
46
46
|
|
|
47
47
|
> **STREAM CONTINUITY** — When writing file content, output in continuous chunks of ~200 lines. Do not pause. Continue immediately until complete. If you need time, emit a placeholder comment rather than going silent.
|
|
48
48
|
|
|
@@ -62,7 +62,7 @@ Once the user has answered the main questions, probe for assumptions:
|
|
|
62
62
|
|
|
63
63
|
### 4. Synthesize and confirm
|
|
64
64
|
|
|
65
|
-
Summarize your understanding in 3–5 bullet points aligned with [countable-story-format.md](
|
|
65
|
+
Summarize your understanding in 3–5 bullet points aligned with [countable-story-format.md](https://github.com/danielvm-git/bigpowers/blob/main/docs/countable-story-format.md):
|
|
66
66
|
- The problem (feeds into §1 Business narrative)
|
|
67
67
|
- The solution and main flow (feeds into §5)
|
|
68
68
|
- The key constraints and alternative flows (feeds into §6)
|
|
@@ -51,4 +51,4 @@ See [REFERENCE.md](REFERENCE.md) for ADR template.
|
|
|
51
51
|
**Evidence:** path/to/benchmark-report.md
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
Benchmark repo:
|
|
54
|
+
Benchmark repo: `bigpowers-benchmark` — resolve the local clone on this machine (e.g. `gh repo clone danielvm-git/bigpowers-benchmark` if absent); never assume a hard-coded absolute path.
|
package/.pi/prompts/grill-me.md
CHANGED
|
@@ -75,7 +75,7 @@ Ask one question at a time. For each challenge, cite the specific URL and sectio
|
|
|
75
75
|
|
|
76
76
|
When an assumption doesn't match the docs:
|
|
77
77
|
|
|
78
|
-
> "Your plan uses `library.doThing(a, b)` but the [docs](
|
|
78
|
+
> "Your plan uses `library.doThing(a, b)` but the [docs](https://example.com/api-reference) show the signature is `doThing(config: {a, b})` with a config object. This will fail at runtime."
|
|
79
79
|
|
|
80
80
|
Document each discrepancy clearly.
|
|
81
81
|
|
package/.pi/prompts/guard-git.md
CHANGED
|
@@ -20,7 +20,7 @@ Installs a shared hook that blocks destructive git operations and enforces workf
|
|
|
20
20
|
## Quick start
|
|
21
21
|
|
|
22
22
|
1. **Scope**: ask project-only vs global (paths differ per product).
|
|
23
|
-
2. **
|
|
23
|
+
2. **Write the hook bundle** from [REFERENCE.md](REFERENCE.md) into the client's hooks directory.
|
|
24
24
|
3. **Run `chmod +x`** on `pre-tool-use.sh`.
|
|
25
25
|
4. **Merge** the hook snippet from [REFERENCE.md](REFERENCE.md) into the right settings file — do not wipe unrelated keys.
|
|
26
26
|
5. **Verify** with the tests in [REFERENCE.md](REFERENCE.md).
|
|
@@ -122,5 +122,5 @@ After writing the bug file, print a one-line summary of the root cause and sugge
|
|
|
122
122
|
|
|
123
123
|
<!-- story: e35s10 -->
|
|
124
124
|
|
|
125
|
-
- [Feathers' Seams & Characterization Tests](
|
|
126
|
-
- [Fowler's Code Smells](
|
|
125
|
+
- [Feathers' Seams & Characterization Tests](https://github.com/danielvm-git/bigpowers/blob/main/docs/references/feathers.md) — seam types, characterization tests, and the legacy code change algorithm
|
|
126
|
+
- [Fowler's Code Smells](https://github.com/danielvm-git/bigpowers/blob/main/docs/references/fowler.md) — identifying structural problems by smell before investigating
|
|
@@ -211,9 +211,9 @@ _Avoid_: Client, buyer, account
|
|
|
211
211
|
|
|
212
212
|
## Contexts
|
|
213
213
|
|
|
214
|
-
-
|
|
215
|
-
-
|
|
216
|
-
-
|
|
214
|
+
- Ordering — `src/ordering/CONTEXT.md` — receives and tracks customer orders
|
|
215
|
+
- Billing — `src/billing/CONTEXT.md` — generates invoices and processes payments
|
|
216
|
+
- Fulfillment — `src/fulfillment/CONTEXT.md` — manages warehouse picking and shipping
|
|
217
217
|
|
|
218
218
|
## Relationships
|
|
219
219
|
|
|
@@ -80,7 +80,7 @@ After writing `specs/REFACTOR_LATEST.md`, suggest running `kickoff-branch` next
|
|
|
80
80
|
|
|
81
81
|
<!-- story: e35s10 -->
|
|
82
82
|
|
|
83
|
-
- [Fowler's Refactoring Catalog](
|
|
84
|
-
- [Beck's Tidy First?](
|
|
83
|
+
- [Fowler's Refactoring Catalog](https://github.com/danielvm-git/bigpowers/blob/main/docs/references/fowler.md) — canonical refactoring vocabulary and code-smell taxonomy
|
|
84
|
+
- [Beck's Tidy First?](https://github.com/danielvm-git/bigpowers/blob/main/docs/references/kent-beck.md) — structural change before behavioral change
|
|
85
85
|
|
|
86
86
|
## Verify
|
|
@@ -16,7 +16,7 @@ Synthesize the conversation context into `specs/release-plan.yaml` (index) and s
|
|
|
16
16
|
|------|---------|
|
|
17
17
|
| `specs/release-plan.yaml` | `release.version`, semver bump hint, WSJF-ordered epic list with `id`, `capsule_dir`, `wsjf`, `bcps` — **no story status** |
|
|
18
18
|
| `specs/epics/eNN-<slug>/epic.yaml` | Epic manifest: `id`, `title`, `wsjf`, `total_bcps`, `status`, `stories[]` list |
|
|
19
|
-
| `specs/epics/eNN-<slug>/eNNsYY-<slug>.md` | Story spec in [countable-story-format.md](
|
|
19
|
+
| `specs/epics/eNN-<slug>/eNNsYY-<slug>.md` | Story spec in [countable-story-format.md](https://github.com/danielvm-git/bigpowers/blob/main/docs/countable-story-format.md) with 20 sections and Gherkin acceptance criteria |
|
|
20
20
|
| `specs/epics/eNN-<slug>/eNNsYY-tasks.yaml` | Decoupled task checklist with `verify:` commands per task |
|
|
21
21
|
| `specs/execution-status.yaml` | Flat key-value store for story status (`eNNsYY: todo`) |
|
|
22
22
|
|
|
@@ -101,7 +101,7 @@ stories:
|
|
|
101
101
|
```
|
|
102
102
|
### 6. Save story specs (countable-story-format .md)
|
|
103
103
|
|
|
104
|
-
Each story becomes a standalone `.md` file following [countable-story-format.md](
|
|
104
|
+
Each story becomes a standalone `.md` file following [countable-story-format.md](https://github.com/danielvm-git/bigpowers/blob/main/docs/countable-story-format.md). Minimum: maturity 3 (Countable) with all 20 sections present. Acceptance criteria in §17 use Gherkin scenarios.
|
|
105
105
|
### 7. Save decoupled task files (`-tasks.yaml`)
|
|
106
106
|
|
|
107
107
|
Each story has a decoupled `-tasks.yaml` with implementation steps:
|
|
@@ -76,7 +76,7 @@ UTILITY terse-mode / craft-skill / edit-document (any phase)
|
|
|
76
76
|
|
|
77
77
|
If you work alone and do not want PR ceremony every task:
|
|
78
78
|
|
|
79
|
-
1. Read [profiles/solo-git.md](
|
|
79
|
+
1. Read [profiles/solo-git.md](../../profiles/solo-git.md).
|
|
80
80
|
2. Register with `compose-workflow` → `specs/WORKFLOW-solo-git.md`.
|
|
81
81
|
3. Ship with `release-branch` in **solo-local** mode (`land-branch.sh`), not `gh pr create`.
|
|
82
82
|
|
|
@@ -219,7 +219,7 @@ Auto-fill from CLAUDE.md `Test` and `Lint` commands.
|
|
|
219
219
|
```markdown
|
|
220
220
|
## Changelog
|
|
221
221
|
|
|
222
|
-
See [CHANGELOG.md](CHANGELOG.md) or [Releases](https://github.com/user/repo/releases).
|
|
222
|
+
See [CHANGELOG.md](../../CHANGELOG.md) or [Releases](https://github.com/user/repo/releases).
|
|
223
223
|
```
|
|
224
224
|
|
|
225
225
|
### 13. Links
|
|
@@ -236,7 +236,7 @@ See [CHANGELOG.md](CHANGELOG.md) or [Releases](https://github.com/user/repo/rele
|
|
|
236
236
|
```markdown
|
|
237
237
|
## License
|
|
238
238
|
|
|
239
|
-
MIT — see [LICENSE](LICENSE) for details.
|
|
239
|
+
MIT — see [LICENSE](../../LICENSE) for details.
|
|
240
240
|
```
|
|
241
241
|
|
|
242
242
|
Detect from CLAUDE.md or project LICENSE file.
|
|
@@ -27,7 +27,7 @@ Apply the full checklist to churn-ranked files in descending order. Files with z
|
|
|
27
27
|
- Default: full checklist
|
|
28
28
|
- --quick: Run only Supply Chain and Test Coverage. Use for changes under 50 LOC.
|
|
29
29
|
- --gate: Non-interactive mode for automated CI gating (used by build-epic step 6). Exit with non-zero status code (`exit 1`) on ANY checklist failure; `exit 0` only if ALL items pass. Produces a compact pass/fail summary to stderr. On failure, list every ✗ item with reason.
|
|
30
|
-
- --parallel: Run checklist sections in **isolated git worktrees** (e45s18) so concurrent checks cannot corrupt each other's working tree
|
|
30
|
+
- --parallel: Run checklist sections in **isolated git worktrees** (e45s18) so concurrent checks cannot corrupt each other's working tree:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
33
|
bash scripts/lib/parallel-review-worktrees.sh audit-code
|
|
@@ -31,7 +31,7 @@ Intake a new requirement mid-flight without disrupting work in progress.
|
|
|
31
31
|
|
|
32
32
|
Value-engineering pass over the full release using WSJF.
|
|
33
33
|
|
|
34
|
-
See [REFERENCE.md](REFERENCE.md) for the full WSJF scoring rubric.
|
|
34
|
+
See [REFERENCE.md](../../../skills/change-request/REFERENCE.md) for the full WSJF scoring rubric.
|
|
35
35
|
|
|
36
36
|
1. **Score** each epic/story: BV + TC + RR / Job Size.
|
|
37
37
|
2. **Re-sort** `release-plan.yaml` `epics[]` and per-epic `wsjf` fields.
|
|
@@ -24,7 +24,7 @@ description: "Reviews working-tree changes, then drafts a Conventional Commits t
|
|
|
24
24
|
1. **Inventory** — List changed paths; group by feature vs chore vs docs vs test-only.
|
|
25
25
|
2. **Decide commit shape** — One atomic commit is ideal. If the diff mixes unrelated concerns, recommend **multiple commits** (each with its own type/scope) before suggesting one message.
|
|
26
26
|
3. **Classify for semantic release** — `fix` → patch, `feat` → minor, **breaking** → major.
|
|
27
|
-
4. **Write the message** — `type(optional-scope)!: description` (see [REFERENCE.md](REFERENCE.md#message-format)). Use `!` or a `BREAKING CHANGE:` footer when behavior contracts change.
|
|
27
|
+
4. **Write the message** — `type(optional-scope)!: description` (see [REFERENCE.md](../../../skills/commit-message/REFERENCE.md#message-format)). Use `!` or a `BREAKING CHANGE:` footer when behavior contracts change.
|
|
28
28
|
5. **Note defensive-code categories touched** — from CONVENTIONS.md: Rate limit | Retry with backoff | Circuit breaker | Timeout | Graceful degradation
|
|
29
29
|
6. **Note fix-ratio contribution** — Each `fix:` commit counts toward `metrics.commit_ratio.fix` in `specs/state.yaml`. After `release-branch`, `session-state` recalculates the ratio automatically. A high fix rate (>30%) triggers a deploy + smoke-test suggestion.
|
|
30
30
|
7. **Deliver** — Output:
|
|
@@ -42,11 +42,11 @@ description: "Reviews working-tree changes, then drafts a Conventional Commits t
|
|
|
42
42
|
|
|
43
43
|
## When not to invent a bump
|
|
44
44
|
|
|
45
|
-
If the repo uses a custom `@semantic-release/commit-analyzer` preset, note that your bump is **heuristic** and they should match `.releaserc` / `release.config.*`. See [REFERENCE.md](REFERENCE.md#custom-repositories).
|
|
45
|
+
If the repo uses a custom `@semantic-release/commit-analyzer` preset, note that your bump is **heuristic** and they should match `.releaserc` / `release.config.*`. See [REFERENCE.md](../../../skills/commit-message/REFERENCE.md#custom-repositories).
|
|
46
46
|
|
|
47
47
|
## Further reading
|
|
48
48
|
|
|
49
|
-
- [REFERENCE.md](REFERENCE.md) — Message shape, footers, release mapping, squashing notes.
|
|
49
|
+
- [REFERENCE.md](../../../skills/commit-message/REFERENCE.md) — Message shape, footers, release mapping, squashing notes.
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
|
|
@@ -63,7 +63,7 @@ Add to `AGENTS.md`:
|
|
|
63
63
|
|
|
64
64
|
→ verify: `ls specs/workflows/*.yaml 2>/dev/null | wc -l | awk '{if($1>=8) print "OK: " $1 " recipes"; else print "FAIL"}'`
|
|
65
65
|
|
|
66
|
-
See [REFERENCE.md](REFERENCE.md) for template.
|
|
66
|
+
See [REFERENCE.md](../../../skills/compose-workflow/REFERENCE.md) for template.
|
|
67
67
|
|
|
68
68
|
---
|
|
69
69
|
|
|
@@ -30,20 +30,20 @@ Move process detail into the SKILL.md body or REFERENCE.md — never into `descr
|
|
|
30
30
|
- Any reference materials to include?
|
|
31
31
|
- What specs/ output does it produce (if any)?
|
|
32
32
|
|
|
33
|
-
2. **Verify Principles** — Ensure the skill aligns with [PRINCIPLES.md](
|
|
33
|
+
2. **Verify Principles** — Ensure the skill aligns with [PRINCIPLES.md](https://github.com/danielvm-git/bigpowers/blob/main/docs/PRINCIPLES.md):
|
|
34
34
|
- Is it atomic (verb-noun)?
|
|
35
35
|
- Is it "deep" (simple interface, complex internal logic)?
|
|
36
36
|
- Does it include Hard Gates?
|
|
37
37
|
- Is it verifiable with a `.feature` file?
|
|
38
38
|
|
|
39
39
|
3. **Draft the skill** — create:
|
|
40
|
-
- SKILL.md with concise instructions (see [REFERENCE.md](REFERENCE.md) for template)
|
|
40
|
+
- SKILL.md with concise instructions (see [REFERENCE.md](../../../skills/craft-skill/REFERENCE.md) for template)
|
|
41
41
|
- Additional reference files if content exceeds 100 lines
|
|
42
42
|
- Utility scripts if deterministic operations needed
|
|
43
43
|
|
|
44
44
|
**Auto-skill from library README:** When user provides a library README or API docs URL, extract: triggers, HARD GATEs, verify commands, specs/ output — draft SKILL.md without inventing APIs not in the source.
|
|
45
45
|
|
|
46
|
-
4. Add `model:` frontmatter (`haiku` | `sonnet` | `opus`) per [model-profiles.md](
|
|
46
|
+
4. Add `model:` frontmatter (`haiku` | `sonnet` | `opus`) per [model-profiles.md](https://github.com/danielvm-git/bigpowers/blob/main/docs/references/model-profiles.md).
|
|
47
47
|
|
|
48
48
|
> **STREAM CONTINUITY** — When writing file content, output in continuous chunks of ~200 lines. Do not pause. Continue immediately until complete. If you need time, emit a placeholder comment rather than going silent.
|
|
49
49
|
|
|
@@ -60,7 +60,7 @@ Move process detail into the SKILL.md body or REFERENCE.md — never into `descr
|
|
|
60
60
|
|
|
61
61
|
## Naming Rules
|
|
62
62
|
|
|
63
|
-
Every skill name must be a **two-word verb-noun pair**. See [REFERENCE.md](REFERENCE.md) for full rules, examples, and documented exceptions.
|
|
63
|
+
Every skill name must be a **two-word verb-noun pair**. See [REFERENCE.md](../../../skills/craft-skill/REFERENCE.md) for full rules, examples, and documented exceptions.
|
|
64
64
|
|
|
65
65
|
## specs/ Output
|
|
66
66
|
|
|
@@ -14,7 +14,7 @@ Surface architectural friction and propose **deepening opportunities** — refac
|
|
|
14
14
|
|
|
15
15
|
## Glossary
|
|
16
16
|
|
|
17
|
-
Use these terms exactly in every suggestion. Consistent language is the point — don't drift into "component," "service," "API," or "boundary." Full definitions in [LANGUAGE.md](LANGUAGE.md).
|
|
17
|
+
Use these terms exactly in every suggestion. Consistent language is the point — don't drift into "component," "service," "API," or "boundary." Full definitions in [LANGUAGE.md](../../../skills/deepen-architecture/LANGUAGE.md).
|
|
18
18
|
|
|
19
19
|
- **Module** — anything with an interface and an implementation (function, class, package, slice).
|
|
20
20
|
- **Interface** — everything a caller must know to use the module: types, invariants, error modes, ordering, config. Not just the type signature.
|
|
@@ -25,13 +25,13 @@ Use these terms exactly in every suggestion. Consistent language is the point
|
|
|
25
25
|
- **Leverage** — what callers get from depth.
|
|
26
26
|
- **Locality** — what maintainers get from depth: change, bugs, knowledge concentrated in one place.
|
|
27
27
|
|
|
28
|
-
Key principles (see [LANGUAGE.md](LANGUAGE.md) for the full list):
|
|
28
|
+
Key principles (see [LANGUAGE.md](../../../skills/deepen-architecture/LANGUAGE.md) for the full list):
|
|
29
29
|
|
|
30
30
|
- **Deletion test**: imagine deleting the module. If complexity vanishes, it was a pass-through. If complexity reappears across N callers, it was earning its keep.
|
|
31
31
|
- **The interface is the test surface.**
|
|
32
32
|
- **One adapter = hypothetical seam. Two adapters = real seam.**
|
|
33
33
|
|
|
34
|
-
This skill is _informed_ by the project's domain model — `specs/tech-architecture/tech-stack.md` and any `specs/adr/`. The domain language gives names to good seams; ADRs record decisions the skill should not re-litigate. See [CONTEXT-FORMAT.md](
|
|
34
|
+
This skill is _informed_ by the project's domain model — `specs/tech-architecture/tech-stack.md` and any `specs/adr/`. The domain language gives names to good seams; ADRs record decisions the skill should not re-litigate. See [CONTEXT-FORMAT.md](../../../skills/model-domain/CONTEXT-FORMAT.md) and [ADR-FORMAT.md](../../../skills/model-domain/ADR-FORMAT.md).
|
|
35
35
|
|
|
36
36
|
## Process
|
|
37
37
|
|
|
@@ -81,7 +81,7 @@ Present a numbered list of deepening opportunities. For each candidate:
|
|
|
81
81
|
- **Solution** — plain English description of what would change
|
|
82
82
|
- **Benefits** — explained in terms of locality and leverage, and how tests would improve
|
|
83
83
|
|
|
84
|
-
**Use `specs/tech-architecture/tech-stack.md` vocabulary for the domain, and [LANGUAGE.md](LANGUAGE.md) vocabulary for the architecture.**
|
|
84
|
+
**Use `specs/tech-architecture/tech-stack.md` vocabulary for the domain, and [LANGUAGE.md](../../../skills/deepen-architecture/LANGUAGE.md) vocabulary for the architecture.**
|
|
85
85
|
|
|
86
86
|
**ADR conflicts**: if a candidate contradicts an existing ADR, only surface it when the friction is real enough to warrant revisiting the ADR. Mark it clearly. Don't list every theoretical refactor an ADR forbids.
|
|
87
87
|
|
|
@@ -93,10 +93,10 @@ Once the user picks a candidate, drop into a grilling conversation. Walk the des
|
|
|
93
93
|
|
|
94
94
|
Side effects happen inline as decisions crystallize:
|
|
95
95
|
|
|
96
|
-
- **Naming a deepened module after a concept not in `specs/tech-architecture/tech-stack.md`?** Add the term to `specs/tech-architecture/tech-stack.md` — same discipline as `model-domain` (see [CONTEXT-FORMAT.md](
|
|
96
|
+
- **Naming a deepened module after a concept not in `specs/tech-architecture/tech-stack.md`?** Add the term to `specs/tech-architecture/tech-stack.md` — same discipline as `model-domain` (see [CONTEXT-FORMAT.md](../../../skills/model-domain/CONTEXT-FORMAT.md)). Create the file lazily if it doesn't exist.
|
|
97
97
|
- **Sharpening a fuzzy term during the conversation?** Update `specs/tech-architecture/tech-stack.md` right there.
|
|
98
|
-
- **User rejects the candidate with a load-bearing reason?** Offer an ADR, framed as: _"Want me to record this as an ADR so future architecture reviews don't re-suggest it?"_ Only offer when the reason would actually be needed by a future explorer. See [ADR-FORMAT.md](
|
|
99
|
-
- **Want to explore alternative interfaces for the deepened module?** See [INTERFACE-DESIGN.md](INTERFACE-DESIGN.md).
|
|
98
|
+
- **User rejects the candidate with a load-bearing reason?** Offer an ADR, framed as: _"Want me to record this as an ADR so future architecture reviews don't re-suggest it?"_ Only offer when the reason would actually be needed by a future explorer. See [ADR-FORMAT.md](../../../skills/model-domain/ADR-FORMAT.md).
|
|
99
|
+
- **Want to explore alternative interfaces for the deepened module?** See [INTERFACE-DESIGN.md](../../../skills/deepen-architecture/INTERFACE-DESIGN.md).
|
|
100
100
|
|
|
101
101
|
### 5. Import-boundary hygiene (e45s14)
|
|
102
102
|
|
|
@@ -120,7 +120,7 @@ Run the check before proposing cross-module `source` edges. Convention docs alon
|
|
|
120
120
|
|
|
121
121
|
# Deepening
|
|
122
122
|
|
|
123
|
-
How to deepen a cluster of shallow modules safely, given its dependencies. Assumes the vocabulary in [LANGUAGE.md](LANGUAGE.md) — **module**, **interface**, **seam**, **adapter**.
|
|
123
|
+
How to deepen a cluster of shallow modules safely, given its dependencies. Assumes the vocabulary in [LANGUAGE.md](../../../skills/deepen-architecture/LANGUAGE.md) — **module**, **interface**, **seam**, **adapter**.
|
|
124
124
|
|
|
125
125
|
## Dependency categories
|
|
126
126
|
|
|
@@ -162,7 +162,7 @@ Third-party services (Stripe, Twilio, etc.) you don't control. The deepened modu
|
|
|
162
162
|
|
|
163
163
|
When the user wants to explore alternative interfaces for a chosen deepening candidate, use this parallel sub-agent pattern. Based on "Design It Twice" (Ousterhout) — your first idea is unlikely to be the best.
|
|
164
164
|
|
|
165
|
-
Uses the vocabulary in [LANGUAGE.md](LANGUAGE.md) — **module**, **interface**, **seam**, **adapter**, **leverage**.
|
|
165
|
+
Uses the vocabulary in [LANGUAGE.md](../../../skills/deepen-architecture/LANGUAGE.md) — **module**, **interface**, **seam**, **adapter**, **leverage**.
|
|
166
166
|
|
|
167
167
|
## Process
|
|
168
168
|
|
|
@@ -171,7 +171,7 @@ Uses the vocabulary in [LANGUAGE.md](LANGUAGE.md) — **module**, **interface**,
|
|
|
171
171
|
Before spawning sub-agents, write a user-facing explanation of the problem space for the chosen candidate:
|
|
172
172
|
|
|
173
173
|
- The constraints any new interface would need to satisfy
|
|
174
|
-
- The dependencies it would rely on, and which category they fall into (see [DEEPENING.md](DEEPENING.md))
|
|
174
|
+
- The dependencies it would rely on, and which category they fall into (see [DEEPENING.md](../../../skills/deepen-architecture/DEEPENING.md))
|
|
175
175
|
- A rough illustrative code sketch to ground the constraints — not a proposal, just a way to make the constraints concrete
|
|
176
176
|
|
|
177
177
|
Show this to the user, then immediately proceed to Step 2. The user reads and thinks while the sub-agents work in parallel.
|
|
@@ -180,21 +180,21 @@ Show this to the user, then immediately proceed to Step 2. The user reads and th
|
|
|
180
180
|
|
|
181
181
|
Spawn 3+ sub-agents in parallel using the Agent tool. Each must produce a **radically different** interface for the deepened module.
|
|
182
182
|
|
|
183
|
-
Prompt each sub-agent with a separate technical brief (file paths, coupling details, dependency category from [DEEPENING.md](DEEPENING.md), what sits behind the seam). The brief is independent of the user-facing problem-space explanation in Step 1. Give each agent a different design constraint:
|
|
183
|
+
Prompt each sub-agent with a separate technical brief (file paths, coupling details, dependency category from [DEEPENING.md](../../../skills/deepen-architecture/DEEPENING.md), what sits behind the seam). The brief is independent of the user-facing problem-space explanation in Step 1. Give each agent a different design constraint:
|
|
184
184
|
|
|
185
185
|
- Agent 1: "Minimize the interface — aim for 1–3 entry points max. Maximise leverage per entry point."
|
|
186
186
|
- Agent 2: "Maximise flexibility — support many use cases and extension."
|
|
187
187
|
- Agent 3: "Optimise for the most common caller — make the default case trivial."
|
|
188
188
|
- Agent 4 (if applicable): "Design around ports & adapters for cross-seam dependencies."
|
|
189
189
|
|
|
190
|
-
Include both [LANGUAGE.md](LANGUAGE.md) vocabulary and CONTEXT.md vocabulary in the brief so each sub-agent names things consistently with the architecture language and the project's domain language.
|
|
190
|
+
Include both [LANGUAGE.md](../../../skills/deepen-architecture/LANGUAGE.md) vocabulary and CONTEXT.md vocabulary in the brief so each sub-agent names things consistently with the architecture language and the project's domain language.
|
|
191
191
|
|
|
192
192
|
Each sub-agent outputs:
|
|
193
193
|
|
|
194
194
|
1. Interface (types, methods, params — plus invariants, ordering, error modes)
|
|
195
195
|
2. Usage example showing how callers use it
|
|
196
196
|
3. What the implementation hides behind the seam
|
|
197
|
-
4. Dependency strategy and adapters (see [DEEPENING.md](DEEPENING.md))
|
|
197
|
+
4. Dependency strategy and adapters (see [DEEPENING.md](../../../skills/deepen-architecture/DEEPENING.md))
|
|
198
198
|
5. Trade-offs — where leverage is high, where it's thin
|
|
199
199
|
|
|
200
200
|
### 3. Present and compare
|
|
@@ -87,15 +87,15 @@ exit 1
|
|
|
87
87
|
|
|
88
88
|
After invoking the deploy command, poll for completion:
|
|
89
89
|
|
|
90
|
-
See [REFERENCE.md](REFERENCE.md)
|
|
90
|
+
See [REFERENCE.md](../../../skills/deploy/REFERENCE.md)
|
|
91
91
|
|
|
92
92
|
Use exponential backoff for retries on transient failures:
|
|
93
93
|
|
|
94
|
-
See [REFERENCE.md](REFERENCE.md)
|
|
94
|
+
See [REFERENCE.md](../../../skills/deploy/REFERENCE.md)
|
|
95
95
|
|
|
96
96
|
### 6. Baseline smoke test
|
|
97
97
|
|
|
98
|
-
See [REFERENCE.md](REFERENCE.md)
|
|
98
|
+
See [REFERENCE.md](../../../skills/deploy/REFERENCE.md)
|
|
99
99
|
|
|
100
100
|
For comprehensive health-checking, chain to the `smoke-test` skill:
|
|
101
101
|
|
|
@@ -106,7 +106,7 @@ bash scripts/run-smoke.sh "$DEPLOY_URL"
|
|
|
106
106
|
|
|
107
107
|
### 7. Three-independent-facts verification (e45s15)
|
|
108
108
|
|
|
109
|
-
Before declaring deploy success, verify **three independent facts** — build artifact, platform accept, live/registry reachability. See [REFERENCE.md](REFERENCE.md#three-independent-facts).
|
|
109
|
+
Before declaring deploy success, verify **three independent facts** — build artifact, platform accept, live/registry reachability. See [REFERENCE.md](../../../skills/deploy/REFERENCE.md#three-independent-facts).
|
|
110
110
|
|
|
111
111
|
## Verify
|
|
112
112
|
|
|
@@ -14,7 +14,7 @@ description: "Test-driven development with red-green-refactor loop using vertica
|
|
|
14
14
|
|
|
15
15
|
## Philosophy
|
|
16
16
|
|
|
17
|
-
Tests verify behavior through public interfaces, not implementation details. A good test reads like a specification. See [REFERENCE.md](REFERENCE.md) for the horizontal-slice anti-pattern and TDD phase detail.
|
|
17
|
+
Tests verify behavior through public interfaces, not implementation details. A good test reads like a specification. See [REFERENCE.md](../../../skills/develop-tdd/REFERENCE.md) for the horizontal-slice anti-pattern and TDD phase detail.
|
|
18
18
|
|
|
19
19
|
## Red Flags
|
|
20
20
|
|
|
@@ -40,7 +40,7 @@ If you catch yourself thinking these, stop and reconsider — you are likely dev
|
|
|
40
40
|
- [ ] Read active `specs/epics/*/epic.yaml` story tasks or `specs/bugs/BUG-*.md` — understand verify steps
|
|
41
41
|
- [ ] If `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` exists for the active epic, read it before writing the first test. Implement P0 scenarios (`SC-*-P0-*`) before P1. P2/P3 scenarios are optional per time budget.
|
|
42
42
|
- [ ] Confirm interface changes and behaviors to test (prioritize)
|
|
43
|
-
- [ ] Design interfaces for testability — identify [deep modules](deep-modules.md) opportunities
|
|
43
|
+
- [ ] Design interfaces for testability — identify [deep modules](../../../skills/develop-tdd/deep-modules.md) opportunities
|
|
44
44
|
- [ ] Get user approval on the plan
|
|
45
45
|
|
|
46
46
|
Apply the **enforce-first** F.I.R.S.T rubric: Fast, Independent, Repeatable, Self-Validating, Timely.
|
|
@@ -74,7 +74,7 @@ For each remaining behavior: RED → GREEN → REFACTOR (optional). One test at
|
|
|
74
74
|
|
|
75
75
|
### 4. Visual Slices (UI alternate workflow)
|
|
76
76
|
|
|
77
|
-
For UI components where behavioral unit testing is brittle: extract logic into a Controller/ViewModel/Hook (pure TDD), then use Visual Slices for the View layer. See [REFERENCE.md](REFERENCE.md) for the full Visual Slices procedure.
|
|
77
|
+
For UI components where behavioral unit testing is brittle: extract logic into a Controller/ViewModel/Hook (pure TDD), then use Visual Slices for the View layer. See [REFERENCE.md](../../../skills/develop-tdd/REFERENCE.md) for the full Visual Slices procedure.
|
|
78
78
|
|
|
79
79
|
### 5. Refactor
|
|
80
80
|
|
|
@@ -91,7 +91,7 @@ Once all tests pass: locate the Verification Script in the active epic capsule,
|
|
|
91
91
|
|
|
92
92
|
### 6a. CI dry-run sub-step
|
|
93
93
|
|
|
94
|
-
If this cycle modified files in `.github/workflows/`, run the CI dry-run procedure documented in [REFERENCE.md](REFERENCE.md#ci-dry-run).
|
|
94
|
+
If this cycle modified files in `.github/workflows/`, run the CI dry-run procedure documented in [REFERENCE.md](../../../skills/develop-tdd/REFERENCE.md#ci-dry-run).
|
|
95
95
|
|
|
96
96
|
## Checklist Per Cycle
|
|
97
97
|
|
|
@@ -149,7 +149,7 @@ RIGHT (vertical):
|
|
|
149
149
|
...
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
> The Red Flags table lives in [SKILL.md](SKILL.md#red-flags) — it is core behavioral guidance, not reference detail.
|
|
152
|
+
> The Red Flags table lives in [SKILL.md](../../../skills/develop-tdd/SKILL.md#red-flags) — it is core behavioral guidance, not reference detail.
|
|
153
153
|
|
|
154
154
|
## TDD Phases (Detail)
|
|
155
155
|
|
|
@@ -63,7 +63,7 @@ Once the user has answered the main questions, probe for assumptions:
|
|
|
63
63
|
|
|
64
64
|
### 4. Synthesize and confirm
|
|
65
65
|
|
|
66
|
-
Summarize your understanding in 3–5 bullet points aligned with [countable-story-format.md](
|
|
66
|
+
Summarize your understanding in 3–5 bullet points aligned with [countable-story-format.md](https://github.com/danielvm-git/bigpowers/blob/main/docs/countable-story-format.md):
|
|
67
67
|
- The problem (feeds into §1 Business narrative)
|
|
68
68
|
- The solution and main flow (feeds into §5)
|
|
69
69
|
- The key constraints and alternative flows (feeds into §6)
|
|
@@ -34,7 +34,7 @@ description: "Benchmark-gated skill evolution — consume bigpowers-benchmark re
|
|
|
34
34
|
|
|
35
35
|
→ verify: `grep -c 'run-benchmark\|pass_at_k\|BASELINE-' skills/evolve-skill/SKILL.md | awk '{if($1>=2) print "OK"; else print "FAIL"}'`
|
|
36
36
|
|
|
37
|
-
See [REFERENCE.md](REFERENCE.md) for ADR template.
|
|
37
|
+
See [REFERENCE.md](../../../skills/evolve-skill/REFERENCE.md) for ADR template.
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
<!-- story: e31s07 -->
|
|
@@ -52,4 +52,4 @@ See [REFERENCE.md](REFERENCE.md) for ADR template.
|
|
|
52
52
|
**Evidence:** path/to/benchmark-report.md
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
Benchmark repo:
|
|
55
|
+
Benchmark repo: `bigpowers-benchmark` — resolve the local clone on this machine (e.g. `gh repo clone danielvm-git/bigpowers-benchmark` if absent); never assume a hard-coded absolute path.
|
|
@@ -74,7 +74,7 @@ node extract-design/scripts/extract.js --lint-only
|
|
|
74
74
|
node extract-design/tests/test-extraction.js
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
See [REFERENCE.md](REFERENCE.md) for extraction algorithms and heuristics.
|
|
77
|
+
See [REFERENCE.md](../../../skills/extract-design/REFERENCE.md) for extraction algorithms and heuristics.
|
|
78
78
|
|
|
79
79
|
---
|
|
80
80
|
|
|
@@ -20,7 +20,7 @@ If a question can be answered by exploring the codebase, explore it instead.
|
|
|
20
20
|
|
|
21
21
|
## Docs mode
|
|
22
22
|
|
|
23
|
-
Ground every challenge in real documentation — no assumption about a library's behavior goes unchecked. See [REFERENCE.md](REFERENCE.md) for the full process.
|
|
23
|
+
Ground every challenge in real documentation — no assumption about a library's behavior goes unchecked. See [REFERENCE.md](../../../skills/grill-me/REFERENCE.md) for the full process.
|
|
24
24
|
|
|
25
25
|
Short form:
|
|
26
26
|
1. List every external library, third-party API, and framework behavior relied upon.
|
|
@@ -76,7 +76,7 @@ Ask one question at a time. For each challenge, cite the specific URL and sectio
|
|
|
76
76
|
|
|
77
77
|
When an assumption doesn't match the docs:
|
|
78
78
|
|
|
79
|
-
> "Your plan uses `library.doThing(a, b)` but the [docs](
|
|
79
|
+
> "Your plan uses `library.doThing(a, b)` but the [docs](https://example.com/api-reference) show the signature is `doThing(config: {a, b})` with a config object. This will fail at runtime."
|
|
80
80
|
|
|
81
81
|
Document each discrepancy clearly.
|
|
82
82
|
|
|
@@ -27,7 +27,7 @@ description: "Doc-grounded variant of grill-me — stress-tests plan assumptions
|
|
|
27
27
|
|
|
28
28
|
→ verify: `grep -c 'https\?://' skills/grill-with-docs/SKILL.md | awk '{if($1>=2) print "OK"; else print "NEEDS DOCS"}'`
|
|
29
29
|
|
|
30
|
-
See [REFERENCE.md](REFERENCE.md) for question templates.
|
|
30
|
+
See [REFERENCE.md](../../../skills/grill-with-docs/REFERENCE.md) for question templates.
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
<!-- story: e03s01 -->
|
|
@@ -16,15 +16,15 @@ Installs a shared hook that blocks destructive git operations and enforces workf
|
|
|
16
16
|
- **Discipline**: Blocks direct commits or pushes to protected branches (`main`, `master`) unless `GIT_BIGPOWERS_LAND=1` (set only by `scripts/land-branch.sh`).
|
|
17
17
|
- **Allows**: `git push origin <feature-branch>` for backup/CI; solo land push to `main` only inside `land-branch.sh`.
|
|
18
18
|
- **Standardization**: Enforces [Conventional Commits](https://www.conventionalcommits.org/) for all `git commit` commands.
|
|
19
|
-
- **Secrets**: Blocks commits containing common secret patterns (`sk-`, `ghp_`, `AKIA`, `xoxb-`, `-----BEGIN` private keys) — see [REFERENCE.md](REFERENCE.md).
|
|
19
|
+
- **Secrets**: Blocks commits containing common secret patterns (`sk-`, `ghp_`, `AKIA`, `xoxb-`, `-----BEGIN` private keys) — see [REFERENCE.md](../../../skills/guard-git/REFERENCE.md).
|
|
20
20
|
|
|
21
21
|
## Quick start
|
|
22
22
|
|
|
23
23
|
1. **Scope**: ask project-only vs global (paths differ per product).
|
|
24
|
-
2. **
|
|
24
|
+
2. **Write the hook bundle** from [REFERENCE.md](../../../skills/guard-git/REFERENCE.md) into the client's hooks directory.
|
|
25
25
|
3. **Run `chmod +x`** on `pre-tool-use.sh`.
|
|
26
|
-
4. **Merge** the hook snippet from [REFERENCE.md](REFERENCE.md) into the right settings file — do not wipe unrelated keys.
|
|
27
|
-
5. **Verify** with the tests in [REFERENCE.md](REFERENCE.md).
|
|
26
|
+
4. **Merge** the hook snippet from [REFERENCE.md](../../../skills/guard-git/REFERENCE.md) into the right settings file — do not wipe unrelated keys.
|
|
27
|
+
5. **Verify** with the tests in [REFERENCE.md](../../../skills/guard-git/REFERENCE.md).
|
|
28
28
|
|
|
29
29
|
| Client | Mechanism | Config |
|
|
30
30
|
|--------|-----------|--------|
|
|
@@ -41,7 +41,7 @@ To add or remove patterns or protected branches, edit `pre-tool-use.sh`.
|
|
|
41
41
|
|
|
42
42
|
## Advanced
|
|
43
43
|
|
|
44
|
-
Full JSON examples, merge rules, Antigravity deny-list entries, and test commands: [REFERENCE.md](REFERENCE.md).
|
|
44
|
+
Full JSON examples, merge rules, Antigravity deny-list entries, and test commands: [REFERENCE.md](../../../skills/guard-git/REFERENCE.md).
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
|
|
@@ -6,7 +6,7 @@ description: "Harden a production Linux VPS for BigBase across three layers —
|
|
|
6
6
|
|
|
7
7
|
# Harden VPS
|
|
8
8
|
|
|
9
|
-
Three-layer production hardening for BigBase on Contabo VPS. Each layer independently verifiable. Apply OS first (firewall blocks attacks immediately), then BigBase (alerts + backups), then Contabo (snapshots). See [REFERENCE.md](REFERENCE.md) for full script bodies, systemd unit template, and gotchas.
|
|
9
|
+
Three-layer production hardening for BigBase on Contabo VPS. Each layer independently verifiable. Apply OS first (firewall blocks attacks immediately), then BigBase (alerts + backups), then Contabo (snapshots). See [REFERENCE.md](../../../skills/harden-vps/REFERENCE.md) for full script bodies, systemd unit template, and gotchas.
|
|
10
10
|
|
|
11
11
|
## Quick start
|
|
12
12
|
|
|
@@ -123,5 +123,5 @@ After writing the bug file, print a one-line summary of the root cause and sugge
|
|
|
123
123
|
|
|
124
124
|
<!-- story: e35s10 -->
|
|
125
125
|
|
|
126
|
-
- [Feathers' Seams & Characterization Tests](
|
|
127
|
-
- [Fowler's Code Smells](
|
|
126
|
+
- [Feathers' Seams & Characterization Tests](https://github.com/danielvm-git/bigpowers/blob/main/docs/references/feathers.md) — seam types, characterization tests, and the legacy code change algorithm
|
|
127
|
+
- [Fowler's Code Smells](https://github.com/danielvm-git/bigpowers/blob/main/docs/references/fowler.md) — identifying structural problems by smell before investigating
|