bigpowers 2.73.9 → 2.74.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.
Files changed (160) hide show
  1. package/.continue/rules/context7-mcp.md +0 -0
  2. package/.continue/rules/diagnose-stall.md +0 -0
  3. package/.kilocode/rules/context7-mcp.md +0 -0
  4. package/.kilocode/rules/diagnose-stall.md +0 -0
  5. package/.pi/package.json +2 -2
  6. package/.pi/prompts/audit-code.md +17 -13
  7. package/.pi/prompts/build-epic.md +5 -0
  8. package/.pi/prompts/change-request.md +4 -1
  9. package/.pi/prompts/compose-workflow.md +17 -0
  10. package/.pi/prompts/context7-mcp.md +54 -0
  11. package/.pi/prompts/craft-skill.md +28 -0
  12. package/.pi/prompts/deepen-architecture.md +20 -0
  13. package/.pi/prompts/delegate-task.md +14 -0
  14. package/.pi/prompts/deploy.md +8 -0
  15. package/.pi/prompts/develop-tdd.md +15 -4
  16. package/.pi/prompts/diagnose-stall.md +53 -0
  17. package/.pi/prompts/dispatch-agents.md +53 -19
  18. package/.pi/prompts/evolve-skill.md +7 -0
  19. package/.pi/prompts/gate-trace.md +9 -1
  20. package/.pi/prompts/guard-git.md +14 -0
  21. package/.pi/prompts/kickoff-branch.md +4 -0
  22. package/.pi/prompts/migrate-spec.md +18 -0
  23. package/.pi/prompts/plan-work.md +62 -2
  24. package/.pi/prompts/publish-package.md +11 -0
  25. package/.pi/prompts/release-branch.md +46 -43
  26. package/.pi/prompts/request-review.md +57 -17
  27. package/.pi/prompts/research-first.md +3 -0
  28. package/.pi/prompts/run-benchmark.md +3 -3
  29. package/.pi/prompts/run-evals.md +26 -6
  30. package/.pi/prompts/run-planning.md +1 -0
  31. package/.pi/prompts/scope-work.md +3 -0
  32. package/.pi/prompts/search-skills.md +3 -0
  33. package/.pi/prompts/security-review.md +66 -12
  34. package/.pi/prompts/seed-conventions.md +68 -0
  35. package/.pi/prompts/session-state.md +5 -10
  36. package/.pi/prompts/slice-tasks.md +3 -0
  37. package/.pi/prompts/smoke-test.md +11 -0
  38. package/.pi/prompts/stocktake-skills.md +6 -1
  39. package/.pi/prompts/validate-contracts.md +12 -0
  40. package/.pi/prompts/validate-fix.md +2 -0
  41. package/.pi/prompts/verify-work.md +42 -20
  42. package/.pi/prompts/wire-ci.md +11 -0
  43. package/.pi/prompts/write-document.md +10 -0
  44. package/.pi/skills/audit-code/SKILL.md +17 -13
  45. package/.pi/skills/build-epic/SKILL.md +5 -0
  46. package/.pi/skills/change-request/SKILL.md +4 -1
  47. package/.pi/skills/compose-workflow/SKILL.md +17 -0
  48. package/.pi/skills/context7-mcp/SKILL.md +56 -0
  49. package/.pi/skills/craft-skill/SKILL.md +28 -0
  50. package/.pi/skills/deepen-architecture/SKILL.md +20 -0
  51. package/.pi/skills/delegate-task/SKILL.md +14 -0
  52. package/.pi/skills/deploy/SKILL.md +8 -0
  53. package/.pi/skills/develop-tdd/SKILL.md +15 -4
  54. package/.pi/skills/diagnose-stall/SKILL.md +55 -0
  55. package/.pi/skills/dispatch-agents/SKILL.md +53 -19
  56. package/.pi/skills/evolve-skill/SKILL.md +7 -0
  57. package/.pi/skills/gate-trace/SKILL.md +9 -1
  58. package/.pi/skills/guard-git/SKILL.md +14 -0
  59. package/.pi/skills/kickoff-branch/SKILL.md +4 -0
  60. package/.pi/skills/migrate-spec/SKILL.md +18 -0
  61. package/.pi/skills/plan-work/SKILL.md +62 -2
  62. package/.pi/skills/publish-package/SKILL.md +11 -0
  63. package/.pi/skills/release-branch/SKILL.md +46 -43
  64. package/.pi/skills/request-review/SKILL.md +57 -17
  65. package/.pi/skills/research-first/SKILL.md +3 -0
  66. package/.pi/skills/run-benchmark/SKILL.md +3 -3
  67. package/.pi/skills/run-evals/SKILL.md +26 -6
  68. package/.pi/skills/run-planning/SKILL.md +1 -0
  69. package/.pi/skills/scope-work/SKILL.md +3 -0
  70. package/.pi/skills/search-skills/SKILL.md +3 -0
  71. package/.pi/skills/security-review/SKILL.md +66 -12
  72. package/.pi/skills/seed-conventions/SKILL.md +68 -0
  73. package/.pi/skills/session-state/SKILL.md +5 -10
  74. package/.pi/skills/slice-tasks/SKILL.md +3 -0
  75. package/.pi/skills/smoke-test/SKILL.md +11 -0
  76. package/.pi/skills/stocktake-skills/SKILL.md +6 -1
  77. package/.pi/skills/validate-contracts/SKILL.md +12 -0
  78. package/.pi/skills/validate-fix/SKILL.md +2 -0
  79. package/.pi/skills/verify-work/SKILL.md +42 -20
  80. package/.pi/skills/wire-ci/SKILL.md +11 -0
  81. package/.pi/skills/write-document/SKILL.md +10 -0
  82. package/CHANGELOG.md +15 -0
  83. package/CLAUDE.md +59 -1
  84. package/CONVENTIONS.md +81 -0
  85. package/README.md +1 -1
  86. package/SKILL-INDEX.md +1 -1
  87. package/package.json +1 -1
  88. package/scripts/bp-churn-rank.sh +49 -0
  89. package/scripts/bp-read-agents.sh +1 -0
  90. package/scripts/check-import-boundaries.sh +64 -0
  91. package/scripts/compile-rule-matrix.sh +114 -0
  92. package/scripts/hooks/rtk-rewrite.sh +11 -0
  93. package/scripts/hooks/token-mgmt-pre-tool-use.sh +53 -0
  94. package/scripts/install.sh +6 -0
  95. package/scripts/lib/completeness-critic.sh +62 -0
  96. package/scripts/lib/doc-fetch-cache.sh +71 -0
  97. package/scripts/lib/golden-suite-gates.sh +3 -1
  98. package/scripts/lib/parallel-review-worktrees.sh +34 -0
  99. package/scripts/lib/plan-consistency-check.sh +88 -0
  100. package/scripts/lib/run-benchmark.py +210 -0
  101. package/scripts/lib/sync-context-engineering-ref.sh +19 -0
  102. package/scripts/references-manifest.yaml +19 -0
  103. package/scripts/run-benchmark.sh +6 -0
  104. package/scripts/run-skill-verify.sh +1 -0
  105. package/scripts/sync-references.sh +25 -0
  106. package/scripts/sync-skills.sh +12 -1
  107. package/scripts/validate-skill-catalog.sh +147 -0
  108. package/scripts/validate-skill-description.sh +70 -0
  109. package/skills/audit-code/SKILL.md +19 -13
  110. package/skills/build-epic/SKILL.md +6 -1
  111. package/skills/change-request/SKILL.md +4 -1
  112. package/skills/compose-workflow/SKILL.md +17 -0
  113. package/skills/context7-mcp/SKILL.md +57 -0
  114. package/skills/craft-skill/SKILL.md +29 -0
  115. package/skills/deepen-architecture/SKILL.md +22 -0
  116. package/skills/delegate-task/SKILL.md +14 -0
  117. package/skills/deploy/SKILL.md +9 -0
  118. package/skills/develop-tdd/SKILL.md +18 -4
  119. package/skills/diagnose-stall/SKILL.md +56 -0
  120. package/skills/dispatch-agents/SKILL.md +53 -19
  121. package/skills/elaborate-spec/SKILL.md +1 -0
  122. package/skills/evolve-skill/SKILL.md +7 -0
  123. package/skills/gate-trace/SKILL.md +11 -1
  124. package/skills/guard-git/REFERENCE.md +14 -0
  125. package/skills/kickoff-branch/SKILL.md +4 -1
  126. package/skills/migrate-spec/REFERENCE.md +12 -0
  127. package/skills/migrate-spec/SKILL.md +6 -0
  128. package/skills/plan-work/REFERENCE.md +29 -2
  129. package/skills/plan-work/SKILL.md +38 -0
  130. package/skills/publish-package/REFERENCE.md +11 -0
  131. package/skills/release-branch/REFERENCE.md +14 -0
  132. package/skills/release-branch/SKILL.md +33 -44
  133. package/skills/request-review/SKILL.md +59 -17
  134. package/skills/research-first/SKILL.md +3 -0
  135. package/skills/run-benchmark/SKILL.md +5 -4
  136. package/skills/run-evals/REFERENCE.md +14 -4
  137. package/skills/run-evals/SKILL.md +13 -2
  138. package/skills/run-planning/SKILL.md +1 -0
  139. package/skills/scope-work/SKILL.md +3 -0
  140. package/skills/search-skills/SKILL.md +3 -0
  141. package/skills/security-review/REFERENCE-false-positives.md +9 -8
  142. package/skills/security-review/REFERENCE-vuln-categories.md +4 -0
  143. package/skills/security-review/SKILL.md +53 -4
  144. package/skills/security-review/fixtures/CWE-79-xss-negative.js +6 -0
  145. package/skills/security-review/fixtures/CWE-79-xss-positive.js +6 -0
  146. package/skills/security-review/fixtures/CWE-89-sqli-negative.py +8 -0
  147. package/skills/security-review/fixtures/CWE-89-sqli-positive.py +9 -0
  148. package/skills/seed-conventions/REFERENCE.md +40 -0
  149. package/skills/seed-conventions/SKILL.md +28 -1
  150. package/skills/session-state/SKILL.md +5 -10
  151. package/skills/slice-tasks/SKILL.md +3 -0
  152. package/skills/smoke-test/REFERENCE.md +11 -0
  153. package/skills/stocktake-skills/SKILL.md +8 -1
  154. package/skills/validate-contracts/REFERENCE.md +12 -0
  155. package/skills/validate-fix/SKILL.md +3 -0
  156. package/skills/verify-work/REFERENCE.md +17 -0
  157. package/skills/verify-work/SKILL.md +25 -22
  158. package/skills/wire-ci/REFERENCE.md +11 -0
  159. package/skills/write-document/REFERENCE.md +10 -0
  160. package/skills-lock.json +41 -31
@@ -1,15 +1,25 @@
1
1
  # Run Evals — Reference
2
2
 
3
+ ## Strictness tiers (e45s37)
4
+
5
+ Add a `tier:` column to each eval row:
6
+
7
+ | Tier | Gate behaviour |
8
+ |------|----------------|
9
+ | `EXPERIMENTAL` | Log only — does not block |
10
+ | `USUALLY_PASSES` | Warn on failure; blocks only when paired with failing `ALWAYS_PASSES` |
11
+ | `ALWAYS_PASSES` | Hard block on any failure |
12
+
3
13
  ## EVALS template
4
14
 
5
15
  ```markdown
6
16
  # EVALS: <feature>
7
17
 
8
18
  ## Capability
9
- | ID | Eval | Grader | verify / rubric |
10
- |----|------|--------|-----------------|
11
- | C1 | ... | code | `verify: npm test -- <file>` |
12
- | C2 | ... | model | Rubric: [ ] criterion A [ ] criterion B |
19
+ | ID | Eval | Grader | Tier | verify / rubric |
20
+ |----|------|--------|------|-----------------|
21
+ | C1 | ... | code | ALWAYS_PASSES | `verify: npm test -- <file>` |
22
+ | C2 | ... | model | USUALLY_PASSES | Rubric: [ ] criterion A [ ] criterion B |
13
23
 
14
24
  ## Regression
15
25
  | ID | Eval | Grader | verify / rubric |
@@ -1,3 +1,4 @@
1
+ # story: e45s37
1
2
  ---
2
3
  name: run-evals
3
4
  description: Eval-Driven Development — define capability and regression evals before building; code graders use verify commands, model graders use explicit rubrics; log pass@k. Use before develop-tdd on new features, or when measuring agent capability over runs.
@@ -16,8 +17,18 @@ effort: standard
16
17
  - **Capability evals** (does it do the job?)
17
18
  - **Regression evals** (did we break anything?)
18
19
  3. Assign grader type per eval: `code` (shell verify) or `model` (rubric).
19
- 4. Run evals; log results table with pass@k (e.g. 3/3 runs).
20
- 5. Block BUILD phase until capability evals pass at agreed k.
20
+ 4. Assign **strictness tier** per eval (graduated promotion — e45s37):
21
+
22
+ | Tier | Meaning | Promotion rule |
23
+ |------|---------|------------------|
24
+ | `EXPERIMENTAL` | New eval, may flake | Not gating |
25
+ | `USUALLY_PASSES` | Stable in dev; ≥2/3 recent runs pass | Blocks BUILD only when combined with ALWAYS_PASSES suite |
26
+ | `ALWAYS_PASSES` | Zero tolerance; required for release | Any single failure blocks BUILD and merge |
27
+
28
+ Promote: `EXPERIMENTAL → USUALLY_PASSES` after 3 consecutive passes; `USUALLY_PASSES → ALWAYS_PASSES` after 5 consecutive passes with zero flakes documented in `specs/state.yaml`.
29
+
30
+ 5. Run evals; log results table with pass@k (e.g. 3/3 runs) and tier per eval.
31
+ 6. Block BUILD phase until all `ALWAYS_PASSES` evals pass at agreed k. `USUALLY_PASSES` failures warn; `EXPERIMENTAL` failures log only.
21
32
 
22
33
  ## Artefact
23
34
 
@@ -4,6 +4,7 @@ model: sonnet
4
4
  effort: standard
5
5
  description: "DISCOVER-PHASE ADVANCER — Drive the discover-phase checklist (specs/planning-status.yaml) through survey-context → scope-work → research-first → elaborate-spec → plan-release → slice-tasks. NOT a duplicate of plan-work or the planning spine; it orchestrates the pre-coding discover phase only."
6
6
  ---
7
+ # story: e24s03
7
8
 
8
9
  # Run Planning
9
10
 
@@ -5,6 +5,9 @@ model: sonnet
5
5
  effort: standard
6
6
  ---
7
7
 
8
+ # story: e03s01
9
+ # story: e24s02
10
+
8
11
  # Scope Work
9
12
 
10
13
  > **Spine position:** Step 1 — scope-work → slice-tasks → plan-work.
@@ -5,6 +5,9 @@ model: haiku
5
5
  effort: standard
6
6
  ---
7
7
 
8
+ # story: e09s01
9
+ # story: e21s01
10
+
8
11
  # Search Skills
9
12
 
10
13
  > **HARD GATE** — Search results must be ranked by relevance. Do NOT return all matches without prioritization. Use skill metadata (phase, purpose, frequency) to rank.
@@ -19,14 +19,15 @@ Automatically exclude findings matching these patterns:
19
19
  | 8 | **Race conditions / timing attacks** that are theoretical | Only report if concretely problematic |
20
20
  | 9 | **Outdated third-party libraries** | Managed separately by dependency scanners |
21
21
  | 10 | **Memory safety** in Rust or other memory-safe languages | Impossible by language guarantees |
22
- | 11 | **Unit test files only** | Not production risk |
23
- | 12 | **Log spoofing** | Outputting unsanitized input to logs is not a vuln |
24
- | 13 | **SSRF that only controls path** | Only host/protocol control is exploitable |
25
- | 14 | **User-controlled content in AI system prompts** | Not a security vulnerability |
26
- | 15 | **Regex injection** | Injecting untrusted content into regex is not a vuln |
27
- | 16 | **Regex DOS** | Excluded alongside general DOS |
28
- | 17 | **Documentation files** (.md, .txt) | Insecure docs are not code vulnerabilities |
29
- | 18 | **Lack of audit logs** | Not a vulnerability |
22
+ | 11 | **Hardcoded SQL with proven authorship** — migrations, seeds, static admin queries with no user interpolation | Developer-authored SQL is safe per SQL-safety doctrine (e45s41) |
23
+ | 12 | **Unit test files only** | Not production risk |
24
+ | 13 | **Log spoofing** | Outputting unsanitized input to logs is not a vuln |
25
+ | 14 | **SSRF that only controls path** | Only host/protocol control is exploitable |
26
+ | 15 | **User-controlled content in AI system prompts** | Not a security vulnerability |
27
+ | 16 | **Regex injection** | Injecting untrusted content into regex is not a vuln |
28
+ | 17 | **Regex DOS** | Excluded alongside general DOS |
29
+ | 18 | **Documentation files** (.md, .txt) | Insecure docs are not code vulnerabilities |
30
+ | 19 | **Lack of audit logs** | Not a vulnerability |
30
31
 
31
32
  ## Precedent Rules
32
33
 
@@ -7,6 +7,8 @@ Each category: vulnerable pattern → safe pattern → code example.
7
7
  | Aspect | Detail |
8
8
  |--------|--------|
9
9
  | **Vulnerable** | String interpolation in SQL queries: `f"SELECT * FROM users WHERE id = {uid}"` |
10
+ | **CWE** | CWE-89 (SQL Injection) |
11
+ | **Fixtures** | `fixtures/CWE-89-sqli-positive.py` (flag) · `fixtures/CWE-89-sqli-negative.py` (pass) |
10
12
  | **Safe** | Parameterized queries / ORM: `cursor.execute("SELECT * FROM users WHERE id = %s", (uid,))` |
11
13
  | **Look for** | f-strings, `+` concatenation, `format()` in query builders; raw SQL in ORM `.raw()` / `.execute()` |
12
14
  | **False-positive guard** | Not a FP if the input is user-controlled (HTTP param, file, env var, CLI arg). Env vars are trusted (see exclusion rules). |
@@ -16,6 +18,8 @@ Each category: vulnerable pattern → safe pattern → code example.
16
18
  | Aspect | Detail |
17
19
  |--------|--------|
18
20
  | **Vulnerable** | `element.innerHTML = userInput`, `dangerouslySetInnerHTML={{__html: userInput}}` |
21
+ | **CWE** | CWE-79 (Cross-site Scripting) |
22
+ | **Fixtures** | `fixtures/CWE-79-xss-positive.js` (flag) · `fixtures/CWE-79-xss-negative.js` (pass) |
19
23
  | **Safe** | `element.textContent = userInput`, React JSX (auto-escaped), template engines with auto-escaping |
20
24
  | **Look for** | `.innerHTML`, `document.write()`, `dangerouslySetInnerHTML`, `v-html` (Vue), `bypassSecurityTrustHtml` (Angular) |
21
25
  | **False-positive guard** | React/Angular components without unsafe methods are NOT vulnerable (see exclusion rules). |
@@ -10,12 +10,33 @@ description: >
10
10
  the user says "security review" or "scan for vulns".
11
11
  ---
12
12
 
13
+ # story: e45s41
14
+ <!-- story: e45s18 -->
15
+ # story: e26s01
16
+ # story: e26s02
17
+ # story: e26s03
18
+ # story: e26s04
19
+ # story: e26s05
20
+ # story: e26s06
21
+ # story: e26s07
22
+ # story: e45s26
23
+
13
24
  # Security Review
14
25
 
15
26
  > **HARD GATE** — Requires git context (branch with merge-base or diff). Never
16
27
  > writes files outside `specs/security/`. Findings below confidence 8/10 are
17
28
  > suppressed. **→ verify:** `git rev-parse HEAD >/dev/null 2>&1 && echo "ok" || echo "BLOCKED"`
18
29
 
30
+ ## Parallel worktree mode (e45s18)
31
+
32
+ When running alongside `audit-code`, use isolated worktrees so scans do not race on the same index:
33
+
34
+ ```bash
35
+ bash scripts/lib/parallel-review-worktrees.sh security-review
36
+ ```
37
+
38
+ Each check gets a detached worktree at `.bigpowers/worktrees/review-<name>/`; reports still write only under `specs/security/`.
39
+
19
40
  ## 5-phase scan
20
41
 
21
42
  | # | Phase | What |
@@ -30,6 +51,37 @@ description: >
30
51
 
31
52
  Covered: SQLi, XSS, SSRF, command injection, auth bypass, unsafe deserialization, path traversal, IDOR, crypto flaws, secrets exposure, template injection, NoSQLi
32
53
 
54
+ ## CWE mapping mandate (e45s26)
55
+
56
+ Every **new detection rule** added to this skill MUST:
57
+
58
+ 1. Map to a [CWE](https://cwe.mitre.org/) ID in `REFERENCE-vuln-categories.md` (e.g. SQLi → CWE-89, XSS → CWE-79).
59
+ 2. Ship **two fixture pairs** under `skills/security-review/fixtures/`:
60
+ - **Positive** — minimal code the rule MUST flag (vulnerable pattern present).
61
+ - **Negative** — structurally similar code the rule MUST NOT flag (safe pattern / false-positive guard).
62
+
63
+ | Rule | CWE | Positive fixture | Negative fixture |
64
+ |------|-----|------------------|------------------|
65
+ | SQL injection | CWE-89 | `fixtures/CWE-89-sqli-positive.py` | `fixtures/CWE-89-sqli-negative.py` |
66
+ | XSS (DOM) | CWE-79 | `fixtures/CWE-79-xss-positive.js` | `fixtures/CWE-79-xss-negative.js` |
67
+
68
+ Before merging a new category, run both fixtures through the detection guidance and confirm positive flags / negative passes.
69
+
70
+ ## SQL-safety doctrine (e45s41 — proven authorship)
71
+
72
+ Formal rule for SQL injection classification:
73
+
74
+ | SQL source | Attacker-reachable input? | Verdict |
75
+ |------------|---------------------------|---------|
76
+ | Hardcoded / compile-time constant string | N/A | **Safe** — proven authorship |
77
+ | Developer-authored query with bound parameters only | No dynamic fragments from user input | **Safe** |
78
+ | String concatenation / template with user-controlled values | Yes | **Unsafe** — report as SQLi |
79
+ | ORM query builder with user input in WHERE/JOIN | Yes | **Unsafe** unless parameterized |
80
+ | Stored procedure call with bound args | Args from trusted constants only | **Safe** |
81
+ | Stored procedure with dynamic SQL inside | User input reaches EXEC | **Unsafe** |
82
+
83
+ **Provenance test:** If the agent cannot prove the query string was authored entirely by the developer (no attacker-reachable interpolation), treat as vulnerable. Hardcoded SQL in migrations, seeds, and admin scripts is safe; anything reachable from HTTP/CLI/user input is not.
84
+
33
85
  ## BCP Plus Integration
34
86
 
35
87
  This skill maps to **BCP Plus dimension 12 (Security & Compliance)**. When BCP Plus sizing is active, the threat model categories above correspond to sub-elements within dimension 12. The NFR Gate rule applies: standard-expectation items (e.g., "use HTTPS", "hash passwords") score 0 with a one-line rationale; only above-standard security requirements contribute to the dimension 12 count. See `docs/references/bcp-plus.md` for the full 13-dimension framework and NFR Gate pattern.
@@ -63,9 +115,6 @@ Each finding: **`File:Line` — Severity — Category**
63
115
 
64
116
  ## Verify
65
117
 
66
-
67
-
68
118
  ```bash
69
- test -d specs/security && echo "OK: specs/security/ exists" || mkdir -p specs/security
70
- grep -q "Merge-base\|merge.base\|git diff" SKILL.md && echo "OK: git context verified"
119
+ test -d specs/security && echo "OK: specs/security/ exists" || mkdir -p specs/security; grep -q "Merge-base\|merge.base\|git diff" SKILL.md && echo "OK: git context verified"
71
120
  ```
@@ -0,0 +1,6 @@
1
+ // story: e45s26
2
+ // fixture: CWE-79 negative — MUST NOT be flagged (textContent auto-escapes)
3
+ function renderComment(el, userInput) {
4
+ // SAFE: text-only assignment — no HTML parsing
5
+ el.textContent = userInput;
6
+ }
@@ -0,0 +1,6 @@
1
+ // story: e45s26
2
+ // fixture: CWE-79 positive — MUST be flagged as XSS
3
+ function renderComment(el, userInput) {
4
+ // VULNERABLE: unsanitized HTML assignment
5
+ el.innerHTML = userInput;
6
+ }
@@ -0,0 +1,8 @@
1
+ # story: e45s26
2
+ # fixture: CWE-89 negative — MUST NOT be flagged (parameterized query)
3
+ import sqlite3
4
+
5
+ def get_user(user_id: str) -> dict:
6
+ conn = sqlite3.connect("app.db")
7
+ # SAFE: bound parameter — proven authorship, no attacker-reachable interpolation
8
+ return conn.execute("SELECT * FROM users WHERE id = ?", (user_id,)).fetchone()
@@ -0,0 +1,9 @@
1
+ # story: e45s26
2
+ # fixture: CWE-89 positive — MUST be flagged as SQL injection
3
+ import sqlite3
4
+
5
+ def get_user(user_id: str) -> dict:
6
+ conn = sqlite3.connect("app.db")
7
+ # VULNERABLE: user-controlled string interpolated into SQL
8
+ query = f"SELECT * FROM users WHERE id = {user_id}"
9
+ return conn.execute(query).fetchone()
@@ -1,6 +1,46 @@
1
1
  # story: e51s02 e37s01 e37s03 e37s14
2
+ # story: e45s21
2
3
  # Seed Conventions — Reference Templates
3
4
 
5
+ ## Navigation
6
+
7
+ | Lines | Section |
8
+ |-------|---------|
9
+ | 1–4 | Title + story tags |
10
+ | 6–22 | Navigation (this table) |
11
+ | 24–35 | AGENTS.md spine |
12
+ | 37–76 | Agent config template |
13
+ | 78–85 | opencode.json template |
14
+ | 87–96 | Aider bridge |
15
+ | 98–108 | Codex CLI wiring |
16
+ | 110–118 | CONVENTIONS.md |
17
+ | 120–122 | Stack profile fragments |
18
+ | 124–153 | Local tool wiring |
19
+
20
+ ## Fenced markers (e45s21)
21
+
22
+ Self-installing blocks prevent skills from overwriting user-authored prose. Pattern:
23
+
24
+ ```markdown
25
+ <!-- BEGIN bigpowers:section-id -->
26
+ …managed content…
27
+ <!-- END bigpowers:section-id -->
28
+ ```
29
+
30
+ **Merge algorithm:**
31
+
32
+ 1. If `BEGIN bigpowers:<id>` exists → replace inner content only.
33
+ 2. If missing → append new fenced block at EOF.
34
+ 3. Never delete content outside fences.
35
+
36
+ Seed these marker IDs in generated `AGENTS.md`:
37
+
38
+ | ID | Initial content |
39
+ |----|-----------------|
40
+ | `project` | Project, Commands, Architecture, Conventions, Never, Agent Rules |
41
+ | `context-routing` | Glob → sub-AGENTS.md table (see CLAUDE.md e45s22) |
42
+ | `learned-preferences` | Empty Learned User Preferences + Workspace Facts lists |
43
+
4
44
  ## AGENTS.md spine (Reach Template — e37s01)
5
45
 
6
46
  Canonical source: copy from `docs/templates/AGENTS.md` in the bigpowers repo (Reach Template).
@@ -1,4 +1,3 @@
1
- # story: e51s02
2
1
  ---
3
2
  name: seed-conventions
4
3
  model: sonnet
@@ -6,6 +5,13 @@ effort: standard
6
5
  description: Generate CLAUDE.md and CONVENTIONS.md for a brand-new project through a brief interview, and create the specs/ directory with evolved bigpowers structure (product/, tech-architecture/, verifications/, epics/archive/). Entry point for greenfield projects. Use when starting a new project from scratch, when user asks to set up AI agent conventions, or when there is no CLAUDE.md yet.
7
6
  ---
8
7
 
8
+ # story: e10s01
9
+ # story: e47s02
10
+ # story: e10s02
11
+ # story: e51s02
12
+ # story: e45s21
13
+
14
+
9
15
  # Seed Conventions
10
16
  > **HARD GATE** — Before any new code lands, confirm the project conventions are understood. Ask: 'What does a good commit message look like in this project?'
11
17
 
@@ -64,7 +70,28 @@ echo "# Specs\n\nAll planning documents for this project." > specs/README.md
64
70
 
65
71
  When generating `CLAUDE.md`, if the user did not name a Preflight command, chain the Test + Lint + Build interview answers into one **Preflight** row (e.g. `npm test && npm run lint && npm run build`).
66
72
 
73
+ ### Self-installing fenced markers (e45s21)
74
+
75
+ Skills that write into `CLAUDE.md` or `AGENTS.md` MUST use **fenced HTML comment markers** so handwritten content outside the fence is never clobbered:
76
+
77
+ ```markdown
78
+ <!-- BEGIN bigpowers:section-id -->
79
+ …agent-managed content only…
80
+ <!-- END bigpowers:section-id -->
81
+ ```
82
+
83
+ **Merge rule:** On update, replace only the content *between* matching `BEGIN`/`END` pairs. If a marker pair is missing, append a new fenced block at the end of the file — never rewrite the whole file.
84
+
85
+ **Standard marker IDs** for seeded projects (see [REFERENCE.md](REFERENCE.md) § Fenced markers):
86
+
87
+ | Marker ID | Owner skill | Purpose |
88
+ |-----------|-------------|---------|
89
+ | `project` | seed-conventions | Project, Commands, Architecture |
90
+ | `context-routing` | seed-conventions | Glob → sub-AGENTS.md routing table |
91
+ | `learned-preferences` | session-state | Learned User Preferences + Workspace Facts |
92
+ | `tooling` | setup-environment, guard-git | sqz/rtk/hook blocks installed by tooling skills |
67
93
 
94
+ Emit these fences in `AGENTS.md` (and therefore `CLAUDE.md` symlink) from `docs/templates/AGENTS.md`. User prose outside fences is sacred.
68
95
 
69
96
  - [ ] CLAUDE.md exists and is populated
70
97
  - [ ] CONVENTIONS.md exists and includes specs/ output convention
@@ -5,6 +5,8 @@ effort: standard
5
5
  description: Track implementation decisions and progress in specs/state.yaml to prevent context rot. Use at the start of a session to load context, and whenever a significant decision is made or a milestone is reached.
6
6
  ---
7
7
 
8
+ # story: e45s23
9
+
8
10
  # Session State
9
11
  > **HARD GATE** — **HARD GATE** — Session state must be synchronized with git state. If state.yaml conflicts with the working tree, halt and ask for clarification. Do NOT assume state is correct.
10
12
 
@@ -19,6 +21,8 @@ Maintain a single source of truth for the *current* session in `specs/state.yaml
19
21
 
20
22
  Legacy markdown (`specs/archive/STATE.md`, `RELEASE-PLAN.md`) is **not** SoT when YAML exists — use `specs/state.yaml` only.
21
23
 
24
+ When a story modifies existing behavior, patch only between matching marker pairs in `CLAUDE.md` / `AGENTS.md` `learned-preferences` fence — see e45s21.
25
+
22
26
  ## Handoff block (cold start)
23
27
 
24
28
  When ending a session or before a context-heavy spawn, update `handoff` in `state.yaml`:
@@ -65,6 +69,7 @@ When starting a new session or after a significant context flush:
65
69
  Whenever a significant decision is made or a milestone is reached:
66
70
 
67
71
  - [ ] Patch via `bash scripts/bp-yaml-set.sh specs/state.yaml git.hash <hash>` (or edit directly).
72
+ - [ ] Patch `handoff` and `learned_preferences` / `workspace_facts` in `CLAUDE.md` fenced block when durable user preferences or repo facts crystallize (e45s23).
68
73
  - [ ] Update `handoff.open_decisions` with rationale.
69
74
  - [ ] Update `epic_cycle` when advancing `ship-epic` steps.
70
75
  - [ ] Record open questions under `handoff.open_decisions` or an ADR.
@@ -131,16 +136,6 @@ handoff:
131
136
  next_skill: survey-context
132
137
  ```
133
138
 
134
- ## Tracking commit ratio
135
-
136
- After `release-branch` lands, compute fix-to-feature ratio via:
137
- ```bash
138
- FEAT_COUNT=$(git log main --oneline --grep="^feat" | wc -l | tr -d ' ')
139
- FIX_COUNT=$(git log main --oneline --grep="^fix" | wc -l | tr -d ' ')
140
- FIX_PCT=$((FIX_COUNT * 100 / (FEAT_COUNT + FIX_COUNT)))
141
- ```
142
- Update `specs/state.yaml` `metrics.commit_ratio` with counts. If `fix_pct > 30%`, emit: `"High fix rate (N%) — deploy + smoke-test recommended"`.
143
-
144
139
  ## Anti-Patterns
145
140
 
146
141
  - **Duplicate Plan**: Don't copy `release-plan.yaml` or epic shards into `state.yaml`.
@@ -5,6 +5,8 @@ model: sonnet
5
5
  effort: standard
6
6
  ---
7
7
 
8
+ # story: e45s29
9
+
8
10
  # Slice Tasks
9
11
 
10
12
  > **Spine position:** Step 2 — scope-work → slice-tasks → plan-work.
@@ -37,6 +39,7 @@ Produce **epic capsule story tasks** in `specs/epics/eNN-slug/` — vertical sli
37
39
  - `eNNsYY-tasks.yaml` with `story_id`, `title`, `status`, `bcps`, `tasks[]` (each with `id`, `description`, `verify`, `status`)
38
40
  - Story spec `.md` files are written by `plan-work` and follow countable-story-format.md
39
41
  - The epic capsule manifest (`epic.yaml`) is updated to list the story ID and BCPs
42
+ - **Requirement deltas (e45s29):** Stories that alter existing behavior MUST carry `delta:` in `epic.yaml` (`ADDED` | `MODIFIED` | `REMOVED` | `RENAMED`). `plan-work` expands deltas into full before/after requirement text.
40
43
 
41
44
  5. **Order by WSJF** in `release-plan.yaml` epic list — highest WSJF first. Weight-shortest-job-first ensures the highest value arrives earliest.
42
45
 
@@ -1,5 +1,16 @@
1
1
  # Smoke Test — Reference
2
2
 
3
+ ## Navigation
4
+
5
+ | Lines | Section |
6
+ |-------|---------|
7
+ | 1 | Title |
8
+ | 3–12 | Navigation |
9
+ | 14–31 | Runner script |
10
+ | 33–42 | Configuration reference |
11
+ | 44–53 | Verification |
12
+ | 55–160 | Reference blocks 1–5 |
13
+
3
14
  ## Runner script
4
15
 
5
16
  A ready-to-use runner is provided for standalone operation:
@@ -1,10 +1,16 @@
1
1
  ---
2
2
  name: stocktake-skills
3
+ # story: e18s05
3
4
  description: Sequential subagent batch audit of the bigpowers skill catalog — Quick Scan (changed only) or Full (all skills). Use during sustain phase, before a major release, or when catalog drift is suspected.
5
+ # story: e22s02
4
6
  model: sonnet
5
7
  effort: standard
6
8
  ---
7
9
 
10
+ # story: e09s01
11
+ <!-- story: e45s12 -->
12
+
13
+
8
14
  # Stocktake Skills
9
15
  > **HARD GATE** — **HARD GATE** — Skill inventory must be current. Missing HARD GATEs, stale descriptions, or broken verify commands are defects, not cosmetic. Fix them in `evolve-skill`.
10
16
 
@@ -21,6 +27,7 @@ Audit SKILL.md catalog for drift, stale triggers, missing HARD GATEs, and INDEX
21
27
 
22
28
  ## Process
23
29
 
30
+ 0. **Catalog validator (code-enforced)** — run `bash scripts/validate-skill-catalog.sh`. Any FAIL is a critical finding before manual review. Add `--archive` to list zero-usage skills from `metrics.skill_timings` for auto-archiving candidates (move to `specs/epics/archive/` or delete after user confirms).
24
31
  1. Run `bash scripts/audit-catalog.sh` to verify pi/skills ↔ source SKILL.md sync. Mismatch is a critical finding.
25
32
  2. Run mode; for each skill check: exists, verb-noun, &lt;300 lines total, HARD GATE present, INDEX row matches.
26
33
  3. Write `specs/STOCKTAKE-<date>.md` with findings table (skill, issue, severity).
@@ -52,6 +59,6 @@ Timing data is populated by `scripts/bp-timing.sh start|end <skill>` calls withi
52
59
 
53
60
  ## Verify
54
61
 
55
- → verify: `test -f specs/STOCKTAKE-*.md && echo OK || echo MISSING`
62
+ → verify: `test -f specs/STOCKTAKE-*.md && bash scripts/validate-skill-catalog.sh && echo OK || echo MISSING`
56
63
 
57
64
  See [REFERENCE.md](REFERENCE.md) for checklist.
@@ -1,5 +1,17 @@
1
1
  # Validate Contracts — Reference
2
2
 
3
+ ## Navigation
4
+
5
+ | Lines | Section |
6
+ |-------|---------|
7
+ | 1 | Title |
8
+ | 3–14 | Navigation |
9
+ | 16–24 | Integration |
10
+ | 26–35 | Configuration |
11
+ | 37–46 | Verification |
12
+ | 48–170 | Reference blocks + Examples 1–6 |
13
+ | 172–190 | Integration (duplicate) + Configuration + Verification |
14
+
3
15
  ## Integration
4
16
 
5
17
  - **Pre-deploy gate:** The `deploy` skill runs `validate-contracts` before smoke-test.
@@ -1,3 +1,4 @@
1
+ # story: e45s08
1
2
  ---
2
3
  name: validate-fix
3
4
  model: haiku
@@ -11,6 +12,8 @@ description: Prove a fix works before declaring done — re-run the failing test
11
12
 
12
13
  Prove the fix works. "I think it works" is not evidence. Run the suite, show the output, then harden against recurrence.
13
14
 
15
+ > **Two-commit red/green policy (e45s08)** — Bug fixes follow the same two-commit discipline as `develop-tdd`: first commit adds/adjusts the failing test (`test(<scope>): …`), second commit applies the fix (`fix(<scope>): …`). Do not squash RED and GREEN before review.
16
+
14
17
  ## Checklist
15
18
 
16
19
  ### 1. Re-run the originally failing test
@@ -21,3 +21,20 @@ sleep 3 && curl -sf http://localhost:<port>/health || echo "BOOT FAIL"
21
21
  ```
22
22
 
23
23
  Feed gaps to `plan-work` as new steps with verify commands, then re-run verify-work.
24
+
25
+ ## CLI mode
26
+
27
+ For CLI tools where cold-start smoke does not apply. Auto-detected when no server process; or use `--cli`.
28
+
29
+ **Auto-detect binary name:**
30
+ ```bash
31
+ BINARY=$(grep '^name' Cargo.toml | head -1 | awk -F'"' '{print $2}') # Cargo
32
+ BINARY=$(node -e "console.log(require('./package.json').bin && Object.keys(require('./package.json').bin)[0] || '')" 2>/dev/null)
33
+ BINARY=$(grep '^BIN\s*=' Makefile 2>/dev/null | awk '{print $3}')
34
+ ```
35
+
36
+ **Checklist (replaces cold-start smoke):**
37
+ 1. `$BINARY --help` → output contains "Usage"
38
+ 2. `$BINARY --version` → matches manifest
39
+ 3. README example command → non-empty output
40
+ 4. `$BINARY --invalid-flag` → exit ≠ 0 with error message
@@ -1,5 +1,3 @@
1
- <!-- story: e38s05 -->
2
- <!-- story: e51s03 -->
3
1
  ---
4
2
  name: verify-work
5
3
  description: Multi-phase UAT gate — cold-start smoke, build, typecheck, lint, tests, step-by-step manual verification, gaps-closure loop. Use after execute-plan or develop-tdd, before audit-code.
@@ -7,6 +5,17 @@ model: haiku
7
5
  effort: standard
8
6
  ---
9
7
 
8
+ <!-- story: e02s01 e46s03 -->
9
+ <!-- story: e38s05 -->
10
+ <!-- story: e45s05 -->
11
+ <!-- story: e45s09 -->
12
+ <!-- story: e45s13 -->
13
+ <!-- story: e45s40 -->
14
+ <!-- story: e51s03 -->
15
+ <!-- story: e20s04 -->
16
+ <!-- story: e20s06 -->
17
+
18
+
10
19
  # Verify Work
11
20
 
12
21
  > **HARD GATE** — No story is "done" until manual UAT for the active story is confirmed with evidence.
@@ -47,12 +56,20 @@ Review answers "is the code good?"; Verify answers "does the built thing do what
47
56
  2. **Cold-start smoke** (if app; skip if P3): stop server, clear caches, boot from scratch.
48
57
  3. **AGENTS.md preflight** — if 0a skipped BP_PREFLIGHT, run `bash scripts/bp-read-agents.sh` and use detected command.
49
58
  4. Mechanical gates: build → typecheck → lint → tests (from `CLAUDE.md` or AGENTS.md). Skip tests if P2/P3.
59
+
60
+ > **HARD GATE — One-test-minimum terminal verdict (e45s13):** At least one mechanical gate MUST be a **real terminal-verdict command** (shell exits 0 or non-zero — not prose, not combined log excerpts). Record that command's stdout/stderr from a **single contiguous run** in `specs/verifications/eNNsYY-verify.yaml` under `terminal_verdict`. Bug reports and gap logs MUST NOT merge evidence from multiple runs into one verdict — each failing run gets its own evidence block.
61
+
50
62
  5. **Security scan** (skip if P2/P3) — run `security-review` against the git diff (working tree vs merge-base). Parse findings report. If any HIGH findings with confidence ≥ 8 exist → **block the gate**. Write findings to `specs/security/REVIEW.md`. Allow documented exceptions via `specs/security/EXCEPTIONS.md`. MEDIUM/LOW findings warn but don't block.
51
63
  5a. **Blind-spot check** — run `bash scripts/check-blind-spots.sh`. This detects structural quality gaps (verify-gap, test-gap, stale-tag, etc.) beyond percentage coverage. If any HIGH-severity findings exist → **block the verify-work PASS gate**. Findings are written to `specs/blind-spots.json`. MEDIUM/LOW findings warn but don't block.
64
+ 5a2. **Completeness critic (e45s05)** — `bash scripts/lib/completeness-critic.sh`. **BLOCKER** aborts merge gate; WARNING → gaps loop; FILLED = evidence only.
65
+
52
66
  5b. **NFR Evidence Gate** (P0 only) — Produces go/no-go output on three dimensions: Performance (response time, throughput), Reliability (error rate, recovery), and Operability (logging, health checks). Reads thresholds from `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` and writes evidence as OKF verification-report bundles to `specs/verifications/NFR-eNNsYY.json`. FAIL on any dimension blocks the gate.
53
67
  6. **Step-by-step UAT** (skip if P2/P3) — one user-observable action at a time.
54
68
  7. **Gaps loop** — failures → log → `plan-work` → re-verify. Unaddressed HIGH findings from step 5 feed into this loop alongside other quality gaps.
55
69
 
70
+ 7a. **Validation gate (e45s09)** — All tasks `status: passing`; evidence in `specs/verifications/`; update `execution-status.yaml`.
71
+ 7b. **Reopen-don't-refile (e45s09)** — Regressions reopen existing story/bug — no duplicate capsule entries.
72
+
56
73
  ## Verify sub-operations
57
74
 
58
75
  ### Cold-Start Smoke (absorbed)
@@ -95,6 +112,11 @@ phases:
95
112
  tests:
96
113
  passed: true
97
114
  coverage: "94.2%"
115
+ terminal_verdict:
116
+ command: "npm test"
117
+ exit_code: 0
118
+ captured_at: "2026-06-11T14:25:00Z"
119
+ note: "Single run — do not merge output from other attempts"
98
120
  manual:
99
121
  steps:
100
122
  - step: "Open /login"
@@ -116,26 +138,7 @@ for p in specs/conventions-wiki/*.md; do [ "$(basename "$p")" = "index.md" ]&&co
116
138
 
117
139
  ## --cli mode
118
140
 
119
- For CLI tools where cold-start smoke (stop server / clear caches) does not apply. Auto-detected when the project has no server process (no `listen()`, no `server.js`, no blocking `main()`); or explicitly activated with `--cli`.
120
-
121
- **Auto-detect binary name:**
122
- ```bash
123
- # Cargo.toml
124
- BINARY=$(grep '^name' Cargo.toml | head -1 | awk -F'"' '{print $2}')
125
- # package.json
126
- BINARY=$(node -e "console.log(require('./package.json').bin && Object.keys(require('./package.json').bin)[0] || '')" 2>/dev/null)
127
- # Makefile
128
- BINARY=$(grep '^BIN\s*=' Makefile 2>/dev/null | awk '{print $3}')
129
- ```
130
-
131
- **CLI verification checklist (replaces cold-start smoke):**
132
-
133
- 1. `--help` smoke: `$BINARY --help` → assert output contains "Usage"
134
- 2. `--version` check: `$BINARY --version` → assert version matches manifest (Cargo.toml / package.json)
135
- 3. Happy-path: run documented example command from README.md → assert non-empty output
136
- 4. Edge case: `$BINARY --invalid-flag` → assert exit code ≠ 0 and error message printed
137
-
138
- No "stop server" / "clear caches" in `--cli` mode. Steps 3–6 still run unchanged.
141
+ CLI tools: use `--cli` when no server process. Binary detect + checklist: [REFERENCE.md](REFERENCE.md#cli-mode).
139
142
 
140
143
  ## Verify
141
144
 
@@ -1,5 +1,16 @@
1
1
  # Wire Ci — Reference
2
2
 
3
+ ## Navigation
4
+
5
+ | Lines | Section |
6
+ |-------|---------|
7
+ | 1 | Title |
8
+ | 3–14 | Navigation |
9
+ | 16–38 | Examples |
10
+ | 40–52 | Options |
11
+ | 54–62 | Integration with build-epic |
12
+ | 64–270 | Reference blocks 1–8 |
13
+
3
14
  ## Examples
4
15
 
5
16
  ### Create CI for a Rust project
@@ -2,6 +2,16 @@
2
2
 
3
3
  Combined from dbader/readme-template and jehna/readme-best-practices. No TOC.
4
4
 
5
+ ## Navigation
6
+
7
+ | Lines | Section |
8
+ |-------|---------|
9
+ | 1 | Title |
10
+ | 5–16 | Navigation |
11
+ | 18–24 | Sections intro |
12
+ | 26–178 | README section templates (1–15) |
13
+ | 180–183 | Verify |
14
+
5
15
  ## Sections
6
16
 
7
17
  ### 1. Title + Badges