@jamie-tam/forge 6.0.0

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 (213) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +389 -0
  3. package/agents/architect.md +92 -0
  4. package/agents/builder.md +122 -0
  5. package/agents/code-reviewer.md +107 -0
  6. package/agents/concept-designer.md +207 -0
  7. package/agents/craft-reviewer.md +132 -0
  8. package/agents/critic.md +130 -0
  9. package/agents/doc-writer.md +85 -0
  10. package/agents/dreamer.md +129 -0
  11. package/agents/e2e-runner.md +89 -0
  12. package/agents/gotcha-hunter.md +127 -0
  13. package/agents/prototype-builder.md +193 -0
  14. package/agents/prototype-codifier.md +204 -0
  15. package/agents/prototype-reviewer.md +163 -0
  16. package/agents/security-reviewer.md +108 -0
  17. package/agents/spec-reviewer.md +94 -0
  18. package/agents/tracer.md +98 -0
  19. package/agents/wireframer.md +109 -0
  20. package/commands/abort.md +25 -0
  21. package/commands/bugfix.md +151 -0
  22. package/commands/evolve.md +118 -0
  23. package/commands/feature.md +236 -0
  24. package/commands/forge.md +100 -0
  25. package/commands/greenfield.md +185 -0
  26. package/commands/hotfix.md +98 -0
  27. package/commands/refactor.md +147 -0
  28. package/commands/resume.md +25 -0
  29. package/commands/setup.md +201 -0
  30. package/commands/status.md +27 -0
  31. package/commands/task-force.md +110 -0
  32. package/commands/validate.md +12 -0
  33. package/dist/__tests__/active-manifest.test.js +272 -0
  34. package/dist/__tests__/copy.test.js +96 -0
  35. package/dist/__tests__/gate-check.test.js +384 -0
  36. package/dist/__tests__/wiki.test.js +472 -0
  37. package/dist/__tests__/work-manifest.test.js +304 -0
  38. package/dist/active-manifest.js +229 -0
  39. package/dist/cli.js +158 -0
  40. package/dist/copy.js +124 -0
  41. package/dist/gate-check.js +326 -0
  42. package/dist/hooks.js +60 -0
  43. package/dist/init.js +140 -0
  44. package/dist/manifest.js +90 -0
  45. package/dist/merge.js +77 -0
  46. package/dist/paths.js +36 -0
  47. package/dist/uninstall.js +216 -0
  48. package/dist/update.js +158 -0
  49. package/dist/verify-manifest.js +65 -0
  50. package/dist/verify.js +98 -0
  51. package/dist/wiki-ui.js +310 -0
  52. package/dist/wiki.js +364 -0
  53. package/dist/work-manifest.js +798 -0
  54. package/hooks/config/gate-requirements.json +79 -0
  55. package/hooks/hooks.json +143 -0
  56. package/hooks/scripts/analyze-telemetry.sh +114 -0
  57. package/hooks/scripts/gate-enforcer.sh +164 -0
  58. package/hooks/scripts/pre-compact.sh +90 -0
  59. package/hooks/scripts/session-start.sh +81 -0
  60. package/hooks/scripts/telemetry.sh +41 -0
  61. package/hooks/scripts/wiki-lint.sh +87 -0
  62. package/hooks/templates/AGENTS.md.template +48 -0
  63. package/hooks/templates/CLAUDE.md.template +45 -0
  64. package/package.json +55 -0
  65. package/protocols/README.md +40 -0
  66. package/protocols/codex.md +151 -0
  67. package/protocols/graphify.md +156 -0
  68. package/references/common/agent-coordination.md +65 -0
  69. package/references/common/coding-standards.md +54 -0
  70. package/references/common/feature-tracking.md +21 -0
  71. package/references/common/io-protocol.md +36 -0
  72. package/references/common/phases.md +57 -0
  73. package/references/common/quality-gates.md +130 -0
  74. package/references/common/skill-authoring.md +154 -0
  75. package/references/common/skill-compliance.md +30 -0
  76. package/references/python/standards.md +44 -0
  77. package/references/react/standards.md +61 -0
  78. package/references/typescript/standards.md +42 -0
  79. package/rules/common/forge-system.md +59 -0
  80. package/rules/common/git-workflow.md +40 -0
  81. package/rules/common/guardrails.md +37 -0
  82. package/rules/common/quality-gates.md +18 -0
  83. package/rules/common/security.md +50 -0
  84. package/rules/common/skill-selection.md +78 -0
  85. package/rules/common/testing.md +58 -0
  86. package/rules/common/verification.md +39 -0
  87. package/skills/build-pr-workflow/SKILL.md +301 -0
  88. package/skills/build-pr-workflow/references/pr-template.md +62 -0
  89. package/skills/build-pr-workflow/references/subagent-merge.md +47 -0
  90. package/skills/build-pr-workflow/references/worktree-setup.md +125 -0
  91. package/skills/build-prototype/SKILL.md +264 -0
  92. package/skills/build-scaffold/SKILL.md +340 -0
  93. package/skills/build-tdd/SKILL.md +89 -0
  94. package/skills/build-wireframe/SKILL.md +110 -0
  95. package/skills/build-wireframe/assets/baseline-template.html +486 -0
  96. package/skills/build-wireframe/references/demo-walkthroughs.md +170 -0
  97. package/skills/build-wireframe/references/gotchas.md +188 -0
  98. package/skills/build-wireframe/references/legend-lines.md +141 -0
  99. package/skills/concept-slides/SKILL.md +192 -0
  100. package/skills/deliver-db-migration/SKILL.md +466 -0
  101. package/skills/deliver-deploy/SKILL.md +407 -0
  102. package/skills/deliver-onboarding/SKILL.md +198 -0
  103. package/skills/deliver-onboarding/references/document-templates.md +393 -0
  104. package/skills/deliver-onboarding/templates/getting-started.md +122 -0
  105. package/skills/discover-codebase-analysis/SKILL.md +448 -0
  106. package/skills/discover-requirements/SKILL.md +418 -0
  107. package/skills/discover-requirements/templates/prd.md +99 -0
  108. package/skills/discover-requirements/templates/technical-spec.md +123 -0
  109. package/skills/discover-requirements/templates/user-stories.md +76 -0
  110. package/skills/harden/SKILL.md +214 -0
  111. package/skills/iterate-prototype/SKILL.md +241 -0
  112. package/skills/plan-architecture/SKILL.md +457 -0
  113. package/skills/plan-architecture/templates/adr-template.md +52 -0
  114. package/skills/plan-architecture/templates/api-contract.md +99 -0
  115. package/skills/plan-architecture/templates/db-schema.md +81 -0
  116. package/skills/plan-architecture/templates/system-design.md +111 -0
  117. package/skills/plan-brainstorm/SKILL.md +433 -0
  118. package/skills/plan-design-system/SKILL.md +279 -0
  119. package/skills/plan-task-decompose/SKILL.md +454 -0
  120. package/skills/quality-code-review/SKILL.md +286 -0
  121. package/skills/quality-security-audit/SKILL.md +292 -0
  122. package/skills/quality-security-audit/references/audit-report-template.md +89 -0
  123. package/skills/quality-security-audit/references/owasp-checks.md +178 -0
  124. package/skills/quality-test-execution/SKILL.md +435 -0
  125. package/skills/quality-test-plan/SKILL.md +297 -0
  126. package/skills/quality-test-plan/references/test-type-guide.md +263 -0
  127. package/skills/quality-test-plan/templates/e2e-test-plan.md +72 -0
  128. package/skills/quality-test-plan/templates/integration-test-plan.md +74 -0
  129. package/skills/quality-test-plan/templates/load-test-plan.md +111 -0
  130. package/skills/quality-test-plan/templates/smoke-test-plan.md +68 -0
  131. package/skills/quality-test-plan/templates/unit-test-plan.md +56 -0
  132. package/skills/quality-uiux/SKILL.md +481 -0
  133. package/skills/support-debug/SKILL.md +464 -0
  134. package/skills/support-dream/SKILL.md +213 -0
  135. package/skills/support-gotcha/SKILL.md +249 -0
  136. package/skills/support-runtime-reachability/SKILL.md +190 -0
  137. package/skills/support-runtime-reachability/scripts/__fixtures__/case-01-passes-app-use/src/app.ts +7 -0
  138. package/skills/support-runtime-reachability/scripts/__fixtures__/case-01-passes-app-use/src/handlers/cases.ts +7 -0
  139. package/skills/support-runtime-reachability/scripts/__fixtures__/case-02-orphan-no-app-use/src/app.ts +8 -0
  140. package/skills/support-runtime-reachability/scripts/__fixtures__/case-02-orphan-no-app-use/src/handlers/cases.ts +7 -0
  141. package/skills/support-runtime-reachability/scripts/__fixtures__/case-03-orphan-import-only/src/App.tsx +5 -0
  142. package/skills/support-runtime-reachability/scripts/__fixtures__/case-03-orphan-import-only/src/components/RingingBanner.tsx +7 -0
  143. package/skills/support-runtime-reachability/scripts/__fixtures__/case-03-orphan-import-only/src/hooks/useTwilio.ts +6 -0
  144. package/skills/support-runtime-reachability/scripts/__fixtures__/case-04-jsx-component-rendered/src/App.tsx +5 -0
  145. package/skills/support-runtime-reachability/scripts/__fixtures__/case-04-jsx-component-rendered/src/components/MyComp.tsx +3 -0
  146. package/skills/support-runtime-reachability/scripts/__fixtures__/case-05-jsx-component-not-rendered/src/App.tsx +3 -0
  147. package/skills/support-runtime-reachability/scripts/__fixtures__/case-05-jsx-component-not-rendered/src/components/Orphan.tsx +3 -0
  148. package/skills/support-runtime-reachability/scripts/__fixtures__/case-06-class-instantiated/src/lib/Service.ts +6 -0
  149. package/skills/support-runtime-reachability/scripts/__fixtures__/case-06-class-instantiated/src/main.ts +4 -0
  150. package/skills/support-runtime-reachability/scripts/__fixtures__/case-07-class-not-instantiated/src/lib/Lonely.ts +5 -0
  151. package/skills/support-runtime-reachability/scripts/__fixtures__/case-07-class-not-instantiated/src/main.ts +2 -0
  152. package/skills/support-runtime-reachability/scripts/__fixtures__/case-08-default-export-imported-and-called/src/handler.ts +3 -0
  153. package/skills/support-runtime-reachability/scripts/__fixtures__/case-08-default-export-imported-and-called/src/main.ts +3 -0
  154. package/skills/support-runtime-reachability/scripts/__fixtures__/case-09-default-export-orphan/src/handler.ts +3 -0
  155. package/skills/support-runtime-reachability/scripts/__fixtures__/case-09-default-export-orphan/src/main.ts +2 -0
  156. package/skills/support-runtime-reachability/scripts/__fixtures__/case-10-aliased-named-export/src/lib.ts +5 -0
  157. package/skills/support-runtime-reachability/scripts/__fixtures__/case-10-aliased-named-export/src/main.ts +3 -0
  158. package/skills/support-runtime-reachability/scripts/__fixtures__/case-11-re-export-chain/src/lib/index.ts +1 -0
  159. package/skills/support-runtime-reachability/scripts/__fixtures__/case-11-re-export-chain/src/lib/internal.ts +3 -0
  160. package/skills/support-runtime-reachability/scripts/__fixtures__/case-11-re-export-chain/src/main.ts +3 -0
  161. package/skills/support-runtime-reachability/scripts/__fixtures__/case-12-test-only-caller/src/util.test.ts +5 -0
  162. package/skills/support-runtime-reachability/scripts/__fixtures__/case-12-test-only-caller/src/util.ts +3 -0
  163. package/skills/support-runtime-reachability/scripts/__fixtures__/case-13-gated-pending-annotation/src/future.ts +4 -0
  164. package/skills/support-runtime-reachability/scripts/__fixtures__/case-14-untraceable-annotation/src/decorated.ts +4 -0
  165. package/skills/support-runtime-reachability/scripts/__fixtures__/case-15-untraceable-empty/src/lazy.ts +4 -0
  166. package/skills/support-runtime-reachability/scripts/__fixtures__/case-16-python-module/src/lib.py +15 -0
  167. package/skills/support-runtime-reachability/scripts/__fixtures__/case-16-python-module/src/main.py +5 -0
  168. package/skills/support-runtime-reachability/scripts/__fixtures__/case-17-router-use/src/parent.ts +5 -0
  169. package/skills/support-runtime-reachability/scripts/__fixtures__/case-17-router-use/src/routes/cases.ts +5 -0
  170. package/skills/support-runtime-reachability/scripts/__fixtures__/case-18-shadowed-name-fp/src/lib/foo.ts +3 -0
  171. package/skills/support-runtime-reachability/scripts/__fixtures__/case-18-shadowed-name-fp/src/other.ts +8 -0
  172. package/skills/support-runtime-reachability/scripts/__fixtures__/case-19-same-name-different-module/src/handlers/cases.ts +4 -0
  173. package/skills/support-runtime-reachability/scripts/__fixtures__/case-19-same-name-different-module/src/handlers/users.ts +4 -0
  174. package/skills/support-runtime-reachability/scripts/__fixtures__/case-19-same-name-different-module/src/main.ts +5 -0
  175. package/skills/support-runtime-reachability/scripts/__fixtures__/case-20-aliased-import-usage/src/handlers/cases.ts +3 -0
  176. package/skills/support-runtime-reachability/scripts/__fixtures__/case-20-aliased-import-usage/src/main.ts +4 -0
  177. package/skills/support-runtime-reachability/scripts/__fixtures__/case-21-mixed-default-and-named/src/lib.ts +5 -0
  178. package/skills/support-runtime-reachability/scripts/__fixtures__/case-21-mixed-default-and-named/src/main.ts +5 -0
  179. package/skills/support-runtime-reachability/scripts/__fixtures__/case-22-dynamic-import-then-caller/src/lib.ts +3 -0
  180. package/skills/support-runtime-reachability/scripts/__fixtures__/case-22-dynamic-import-then-caller/src/main.ts +8 -0
  181. package/skills/support-runtime-reachability/scripts/__fixtures__/case-23-dynamic-import-with-space/src/lib.ts +3 -0
  182. package/skills/support-runtime-reachability/scripts/__fixtures__/case-23-dynamic-import-with-space/src/main.ts +7 -0
  183. package/skills/support-runtime-reachability/scripts/check.mjs +638 -0
  184. package/skills/support-runtime-reachability/scripts/check.test.mjs +244 -0
  185. package/skills/support-skill-validator/SKILL.md +194 -0
  186. package/skills/support-skill-validator/references/false-positives.md +59 -0
  187. package/skills/support-skill-validator/references/validation-checks.md +280 -0
  188. package/skills/support-system-guide/SKILL.md +311 -0
  189. package/skills/support-task-force/SKILL.md +265 -0
  190. package/skills/support-task-force/references/dispatch-pattern.md +178 -0
  191. package/skills/support-task-force/references/synthesis-template.md +126 -0
  192. package/skills/support-wiki-bootstrap/SKILL.md +37 -0
  193. package/skills/support-wiki-lint/SKILL.md +196 -0
  194. package/skills/support-wiki-lint/scripts/lint.mjs +488 -0
  195. package/skills/support-wiki-lint/scripts/lint.test.mjs +196 -0
  196. package/templates/README.md +23 -0
  197. package/templates/aiwiki/CLAUDE.md.template +78 -0
  198. package/templates/aiwiki/schemas/architecture.md +118 -0
  199. package/templates/aiwiki/schemas/convention.md +112 -0
  200. package/templates/aiwiki/schemas/decision.md +144 -0
  201. package/templates/aiwiki/schemas/gotcha.md +118 -0
  202. package/templates/aiwiki/schemas/oracle.md +105 -0
  203. package/templates/aiwiki/schemas/session.md +125 -0
  204. package/templates/manifests/bugfix.yaml +41 -0
  205. package/templates/manifests/feature.yaml +69 -0
  206. package/templates/manifests/greenfield.yaml +61 -0
  207. package/templates/manifests/hotfix.yaml +45 -0
  208. package/templates/manifests/refactor.yaml +44 -0
  209. package/templates/manifests/v5/SCHEMA.md +327 -0
  210. package/templates/manifests/v5/feature.yaml +77 -0
  211. package/templates/manifests/v6/SCHEMA.md +199 -0
  212. package/templates/wiki-html/dream-detail.html +378 -0
  213. package/templates/wiki-html/dreams-list.html +155 -0
@@ -0,0 +1,118 @@
1
+ ---
2
+ schema_id: gotcha
3
+ schema_version: 1
4
+ applies_to: aiwiki/gotchas/**/*.md
5
+ filename_pattern: "{YYYY-MM-DD}-{slug}.md"
6
+ hard_cap_lines: 150
7
+ soft_target_lines: [50, 100]
8
+ required_frontmatter:
9
+ schema_id: { type: string, equals: gotcha }
10
+ schema_version: { type: integer }
11
+ severity: { type: enum, values: [low, medium, high, critical] }
12
+ date: { type: date }
13
+ occurrences: { type: integer, default: 1 }
14
+ status: { type: enum, values: [active, watch, promotion-pending, promoted-to-rule, rejected, retired] }
15
+ proposed_rule: { type: object, optional: true }
16
+ required_sections:
17
+ - "## What broke"
18
+ - "## Reproducer"
19
+ - "## Root cause"
20
+ - "## Fix"
21
+ - "## Prevention"
22
+ section_order: strict
23
+ citation_rule: required
24
+ ---
25
+
26
+ # Schema: gotcha (recurring failure)
27
+
28
+ ## Purpose
29
+
30
+ A gotcha records a failure pattern that has occurred and might recur. The page answers "have we hit this before? what's the fix? how do we avoid it next time?" The point is fast recall during debugging or code review, not a debugging narrative.
31
+
32
+ ## When to write one
33
+
34
+ - A debugging session resolves an unexpected failure
35
+ - The same root cause has caused trouble before (search `aiwiki/gotchas/` first; bump `occurrences` if it matches)
36
+ - A library/framework misuse pattern is identified that's not obvious from the docs
37
+
38
+ Do NOT write a gotcha for: bugs in your own code that weren't framework- or pattern-related, one-off typos, problems already documented in `aiwiki/conventions/` (write the convention instead).
39
+
40
+ ## File location and naming
41
+
42
+ - Path: `aiwiki/gotchas/{YYYY-MM-DD}-{slug}.md`
43
+ - Date: ISO format (`YYYY-MM-DD`)
44
+ - Slug: kebab-case, ≤8 words, describing the pattern (not the symptom)
45
+
46
+ Example: `2026-05-10-stub-logger-silently-drops-events.md`
47
+
48
+ ## Required frontmatter
49
+
50
+ | Field | Type | Notes |
51
+ |---|---|---|
52
+ | `schema_id` | string | Must equal `gotcha` |
53
+ | `schema_version` | integer | — |
54
+ | `severity` | enum | `low` / `medium` / `high` / `critical` (impact + likelihood) |
55
+ | `date` | ISO date | First occurrence |
56
+ | `occurrences` | integer | Bumped each time AI hits this. N=2 flips status to `watch`. N=3 flips status to `promotion-pending`, triggers `proposed_rule:` auto-draft, and surfaces a session-start prompt to promote the gotcha into a project rule. |
57
+ | `status` | enum | Auto-promotion path: `active` (N=1) → `watch` (N=2) → `promotion-pending` (N=3, draft attached). Terminal states: `promoted-to-rule` (rule shipped), `rejected` (user declined promotion at session-start), `retired` (no longer applies — explain in body). See `support-gotcha` SKILL.md for state-transition rules. |
58
+ | `proposed_rule` | object (optional) | Auto-drafted at N=3 alongside `status: promotion-pending`; `{ rule_path: <target>, draft: <text>, drafted_at: <date> }` |
59
+
60
+ ## Required sections
61
+
62
+ | Section | Purpose | Format |
63
+ |---|---|---|
64
+ | `## What broke` | One sentence — what failed and where | Cite the failure point |
65
+ | `## Reproducer` | Minimal steps or code link | Cite if linking to existing test |
66
+ | `## Root cause` | What was actually wrong | Cite the responsible code with `file:line@<sha7>` |
67
+ | `## Fix` | The resolution | Cite the fix code |
68
+ | `## Prevention` | Rule, check, or pattern that prevents recurrence | Cite a convention or rule if one exists |
69
+
70
+ ## Line caps
71
+
72
+ - Hard cap: 150 lines (LINT fails above)
73
+ - Soft target: 50-100 lines
74
+
75
+ A gotcha that needs more than 150 lines is probably two gotchas, or it's narrative debug logs that don't belong here.
76
+
77
+ ## Citation rules
78
+
79
+ - Every section has at least one citation (this is a stricter rule than ADRs)
80
+ - Code references use `file:line@<sha7>` or `symbol` form
81
+ - LINT auto-fills missing `@<sha7>` on first save
82
+ - If the cited code has been removed, `status: retired` and explain in body
83
+
84
+ ## Skeleton
85
+
86
+ ```markdown
87
+ ---
88
+ schema_id: gotcha
89
+ schema_version: 1
90
+ severity: high
91
+ date: 2026-04-28
92
+ occurrences: 1
93
+ status: active
94
+ ---
95
+
96
+ ## What broke
97
+
98
+ Logger calls returned successfully but no events appeared in the log destination during integration tests. ([src/lib/logger.ts:14@a3f2bc1](src/lib/logger.ts:14))
99
+
100
+ ## Reproducer
101
+
102
+ 1. Initialize logger with default config
103
+ 2. Call `logger.info("event")`
104
+ 3. Inspect the configured destination — no events present
105
+
106
+ ## Root cause
107
+
108
+ `createLogger()` returned a stub when no transport was configured ([src/lib/logger.ts:14@a3f2bc1](src/lib/logger.ts:14)). The stub silently dropped all events instead of failing or warning.
109
+
110
+ ## Fix
111
+
112
+ Throw on missing transport configuration ([src/lib/logger.ts:14@b1c2d3e](src/lib/logger.ts:14)) — fail loud at boot rather than silently at runtime.
113
+
114
+ ## Prevention
115
+
116
+ - Convention: every framework boundary that can no-op MUST throw or warn instead. See [aiwiki/conventions/no-silent-stubs.md](aiwiki/conventions/no-silent-stubs.md).
117
+ - Test pattern: integration tests assert their log assertions actually fire (use a recording transport, not a fake stub).
118
+ ```
@@ -0,0 +1,105 @@
1
+ ---
2
+ schema_id: oracle
3
+ schema_version: 1
4
+ applies_to: aiwiki/oracles/**/*.md
5
+ filename_pattern: "{slug}.md"
6
+ hard_cap_lines: 100
7
+ soft_target_lines: [20, 60]
8
+ required_frontmatter:
9
+ schema_id: { type: string, equals: oracle }
10
+ schema_version: { type: integer }
11
+ slug: { type: string }
12
+ prototype_path: { type: string }
13
+ captured_at: { type: date }
14
+ oracle_type: { type: enum, values: [route, render, interaction, snapshot, golden-trace] }
15
+ required_sections:
16
+ - "## Setup"
17
+ - "## Trigger"
18
+ - "## Assertions"
19
+ section_order: strict
20
+ citation_rule: required
21
+ ---
22
+
23
+ # Schema: oracle (prototype behavior snapshot)
24
+
25
+ ## Purpose
26
+
27
+ An oracle captures observable behavior from the locked prototype so production code in Phase 6 has a concrete acceptance target. Tests in production are written *against* the oracle — if the production implementation doesn't reproduce the oracle's setup → trigger → assertions, it's not done.
28
+
29
+ The page answers "what specifically did the prototype do that production code must also do?"
30
+
31
+ ## When to write one
32
+
33
+ - During harden (Phase 5), per slice or subsystem
34
+ - For every page/endpoint the prototype exposes (route oracle)
35
+ - For every demoed click-through (interaction oracle)
36
+ - For data shapes the prototype's frontend renders (snapshot oracle)
37
+
38
+ Do NOT write an oracle for: pure styling that's already captured in design tokens, throwaway prototype scaffolding the user never touched, error states that aren't part of the click-through demo.
39
+
40
+ ## File location and naming
41
+
42
+ - Path: `aiwiki/oracles/{slug}.md`
43
+ - Slug: kebab-case, ≤8 words, identifies the oracle (e.g. `auth-login-success`, `dashboard-renders-empty-state`)
44
+
45
+ Example: `aiwiki/oracles/checkout-applies-discount-code.md`
46
+
47
+ ## Required frontmatter
48
+
49
+ | Field | Type | Notes |
50
+ |---|---|---|
51
+ | `schema_id` | string | Must equal `oracle` |
52
+ | `schema_version` | integer | — |
53
+ | `slug` | string | Matches the filename slug |
54
+ | `prototype_path` | string | Path to the prototype file or directory the oracle was captured from |
55
+ | `captured_at` | ISO date | When the oracle was recorded |
56
+ | `oracle_type` | enum | `route` / `render` / `interaction` / `snapshot` / `golden-trace` |
57
+
58
+ ## Required sections
59
+
60
+ | Section | Purpose | Citation requirement |
61
+ |---|---|---|
62
+ | `## Setup` | What state the system is in before the trigger fires | Cite the prototype seed/fixture, store init, or starting URL |
63
+ | `## Trigger` | The input or action that exercises the behavior | Cite the prototype handler / event |
64
+ | `## Assertions` | The observable outputs that must hold (DOM nodes, JSON body, HTTP status, transition sequence) | Cite the prototype's observed output |
65
+
66
+ ## Line caps
67
+
68
+ - Hard cap: 100 lines (LINT fails above)
69
+ - Soft target: 20-60 lines
70
+
71
+ An oracle that needs more than 100 lines is probably two oracles, or is mixing setup details that belong in a fixture.
72
+
73
+ ## Citation rules
74
+
75
+ - Every section cites the prototype source (`file:line@<sha7>` or `symbol` form)
76
+ - LINT auto-fills missing `@<sha7>` on first save
77
+ - Stale citations (prototype changed after oracle capture) fail LINT — resolve by re-capturing the oracle or annotating `// ack-stale: <reason>` if the production target intentionally deviates
78
+
79
+ ## Skeleton
80
+
81
+ ```markdown
82
+ ---
83
+ schema_id: oracle
84
+ schema_version: 1
85
+ slug: auth-login-success
86
+ prototype_path: pocs/myapp-prototype/src/auth/Login.tsx
87
+ captured_at: 2026-05-10
88
+ oracle_type: interaction
89
+ ---
90
+
91
+ ## Setup
92
+
93
+ User is anonymous; auth store empty ([pocs/myapp-prototype/src/auth/store.ts:8@a3f2bc1](pocs/myapp-prototype/src/auth/store.ts:8)).
94
+
95
+ ## Trigger
96
+
97
+ POST `/api/login` with body `{ email, password }` ([pocs/myapp-prototype/src/auth/Login.tsx:42@a3f2bc1](pocs/myapp-prototype/src/auth/Login.tsx:42)).
98
+
99
+ ## Assertions
100
+
101
+ - HTTP 200 with body `{ token: <jwt>, user: { id, email } }`
102
+ - Auth store transitions `anonymous → authenticated` ([pocs/myapp-prototype/src/auth/store.ts:24@a3f2bc1](pocs/myapp-prototype/src/auth/store.ts:24))
103
+ - DOM redirects to `/dashboard` within 200ms
104
+ - Subsequent `GET /api/me` returns the same user payload
105
+ ```
@@ -0,0 +1,125 @@
1
+ ---
2
+ schema_id: session
3
+ schema_version: 1
4
+ applies_to: aiwiki/sessions/**/*.md
5
+ filename_pattern: "{date}-{slug}.md"
6
+ hard_cap_lines: 200
7
+ soft_target_lines: [40, 100]
8
+ required_frontmatter:
9
+ schema_id: { type: string, equals: session }
10
+ schema_version: { type: integer }
11
+ status: { type: enum, values: [active, done, abandoned] }
12
+ date_start: { type: date }
13
+ date_end: { type: date, optional: true }
14
+ focus: { type: string }
15
+ last_commit: { type: string, optional: true }
16
+ required_sections:
17
+ - "## Files touched"
18
+ - "## Decisions made"
19
+ - "## Gotchas surfaced"
20
+ - "## Open questions"
21
+ - "## Next steps"
22
+ section_order: strict
23
+ citation_rule: required-in-files-touched
24
+ maintained_by: hooks-and-dream
25
+ ---
26
+
27
+ # Schema: session (per-session handoff)
28
+
29
+ ## Purpose
30
+
31
+ A session file is an **index of links** for one work session — what files were touched, what decisions landed, what gotchas surfaced, what's still open, what comes next. The page answers "what happened in session X?" for a future session that needs to resume or audit.
32
+
33
+ **Index of links, not distilled summary.** No prose paragraphs. No narrative. No screenshots-from-the-moment. Future sessions follow the links to actual artifacts (ADRs, gotchas, raw notes); the session file is just the routing layer.
34
+
35
+ ## How it's maintained (NOT by hand)
36
+
37
+ This page type is unusual: it's maintained by **hooks and dream**, not by humans typing.
38
+
39
+ - `SessionStart` hook creates the file from this schema's skeleton (frontmatter + empty sections)
40
+ - `PostToolUse` hooks append event lines to the appropriate sections (commit / gotcha / decision / raw)
41
+ - `PreCompact` dream consolidates the event log into the schema sections (deduplicates, summarises bullet sequences, prunes noise)
42
+ - `SessionEnd` (manual `/handoff` or detected) marks `status: done`
43
+
44
+ Do NOT manually edit a session file unless correcting a hook misfire. Manual edits should be rare.
45
+
46
+ ## File location and naming
47
+
48
+ - Path: `aiwiki/sessions/{date}-{slug}.md`
49
+ - Date: ISO format (`YYYY-MM-DD`)
50
+ - Slug: kebab-case, ≤6 words, naming the focus
51
+
52
+ Examples: `2026-05-10-auth-refactor.md`, `2026-05-11-bugfix-session-race.md`.
53
+
54
+ The companion file `aiwiki/sessions/INDEX.md` is a sortable table of all sessions; SessionStart appends a row.
55
+
56
+ ## Required frontmatter
57
+
58
+ | Field | Type | Notes |
59
+ |---|---|---|
60
+ | `schema_id` | string | Must equal `session` |
61
+ | `schema_version` | integer | — |
62
+ | `status` | enum | `active` (in progress) / `done` (handed off) / `abandoned` (orphaned) |
63
+ | `date_start` | ISO date | When SessionStart fired |
64
+ | `date_end` | ISO date (optional) | When SessionEnd fired; null while active |
65
+ | `focus` | string | What this session is about (e.g. `feature/auth-refactor`, `bugfix/session-race`) |
66
+ | `last_commit` | string (optional) | SHA of the last commit during this session |
67
+
68
+ ## Required sections
69
+
70
+ | Section | Purpose | Maintained by |
71
+ |---|---|---|
72
+ | `## Files touched` | Bullet list of files modified, with citations | PostToolUse hooks (append-only) |
73
+ | `## Decisions made` | Links to ADRs in `aiwiki/decisions/` written this session | PostToolUse hook on `aiwiki/decisions/` write |
74
+ | `## Gotchas surfaced` | Links to gotchas captured this session | PostToolUse hook on `aiwiki/gotchas/` write |
75
+ | `## Open questions` | Links to raw context in `aiwiki/raw/` for unresolved items | PostToolUse hook on `aiwiki/raw/` write |
76
+ | `## Next steps` | What the next session should do | Dream at PreCompact / SessionEnd |
77
+
78
+ ## Line caps
79
+
80
+ - Hard cap: 200 lines (LINT fails above; if hit, dream is overdue or session is unusually long)
81
+ - Soft target: 40-100 lines
82
+
83
+ A session file that grows past 100 lines without dream consolidation usually means PreCompact hasn't fired (short session) — that's fine; SessionEnd dream will compact it. If it grows past 200 with no compact, run `/dream` manually.
84
+
85
+ ## Citation rules
86
+
87
+ - `## Files touched` MUST cite each file with `file:line@<sha7>` (or `path` if file-level)
88
+ - Other sections link to typed wiki pages (no `@<sha7>` needed for wiki-internal links)
89
+ - LINT auto-fills missing code citations on first save
90
+
91
+ ## Skeleton
92
+
93
+ ```markdown
94
+ ---
95
+ schema_id: session
96
+ schema_version: 1
97
+ status: active
98
+ date_start: 2026-05-10
99
+ focus: feature/auth-refactor
100
+ last_commit: ~
101
+ ---
102
+
103
+ ## Files touched
104
+
105
+ - [src/auth/handler.ts](src/auth/handler.ts)
106
+ - [src/auth/token.ts](src/auth/token.ts)
107
+ - [src/auth/middleware.ts:1-42@a3f2bc1](src/auth/middleware.ts)
108
+
109
+ ## Decisions made
110
+
111
+ - [aiwiki/decisions/0042-token-storage.md](aiwiki/decisions/0042-token-storage.md)
112
+
113
+ ## Gotchas surfaced
114
+
115
+ - [aiwiki/gotchas/2026-05-10-cookie-samesite-defaults.md](aiwiki/gotchas/2026-05-10-cookie-samesite-defaults.md)
116
+
117
+ ## Open questions
118
+
119
+ - Token rotation policy ([aiwiki/raw/2026-05-10-rotation-question.md](aiwiki/raw/2026-05-10-rotation-question.md))
120
+
121
+ ## Next steps
122
+
123
+ - Implement refresh token rotation per the open question
124
+ - Update [aiwiki/architecture/auth-flow.md](aiwiki/architecture/auth-flow.md) once rotation lands
125
+ ```
@@ -0,0 +1,41 @@
1
+ # Canonical manifest template for /bugfix command.
2
+ # Source of truth for manifest schema — do not duplicate elsewhere.
3
+ # Placeholders: {name}, {description}, {date}
4
+ # Written to: .forge/work/bugfix/{name}/manifest.yaml
5
+ #
6
+ # v6 adds phase_plan: the planned status of each workflow step. The preflight
7
+ # step MUST replace `active` defaults below with the actual plan agreed with
8
+ # the user. See templates/manifests/v6/SCHEMA.md §3.
9
+
10
+ schema_version: "6"
11
+ name: {name}
12
+ type: bugfix
13
+ description: "{description}"
14
+ status: in-progress # in-progress | paused | completed | escalated | abandoned
15
+ created: "{date}"
16
+ command: bugfix
17
+ escalated_from: null
18
+ successor_path: null
19
+
20
+ # Plan-status per workflow milestone. Bugfix workflow is compressed compared
21
+ # to /feature — no concept/wireframe/prototype/codify by default. Allowed
22
+ # values: active | active-light | active-commit-only | skipped | as-discovered
23
+ # | complete-inline.
24
+ phase_plan:
25
+ debug-root-cause: active
26
+ production-build: active
27
+ code-review: active
28
+ deliver: active
29
+ gotchas: as-discovered
30
+
31
+ # Gate state per phase. slice_graph is added at production-build if the fix
32
+ # is non-trivial; small fixes ship without one.
33
+ phases:
34
+ debug:
35
+ root-cause: { status: pending, gate-passed: false }
36
+ quality:
37
+ code-review: { status: pending, gate-passed: false }
38
+ deliver:
39
+ pr-created: false
40
+ support:
41
+ gotchas-recorded: false
@@ -0,0 +1,69 @@
1
+ # Canonical manifest template for /feature command.
2
+ # Source of truth for manifest schema — do not duplicate elsewhere.
3
+ # Placeholders: {name}, {description}, {date}
4
+ # Written to: .forge/work/feature/{name}/manifest.yaml
5
+ #
6
+ # v6 adds phase_plan: the planned status of each workflow step. The preflight
7
+ # step (/feature Step 1) MUST replace `active` defaults below with the actual
8
+ # plan agreed with the user (skipped / active-light / active-commit-only /
9
+ # as-discovered / complete-inline). See templates/manifests/v6/SCHEMA.md §3.
10
+ #
11
+ # *** PREFLIGHT IS NOT OPTIONAL ***
12
+ # Most features skip 1-2 phases (e.g. a UI tweak on an existing prototype skips
13
+ # concept + wireframe + prototype). Shipping a manifest with all phases `active`
14
+ # trains downstream gates to lie about what actually ran. If you skip preflight,
15
+ # go back and run it before any phase work starts.
16
+
17
+ schema_version: "6"
18
+ name: {name}
19
+ type: feature
20
+ description: "{description}"
21
+ status: in-progress # in-progress | paused | completed | escalated | abandoned
22
+ created: "{date}"
23
+ command: feature
24
+ complexity: standard # trivial | standard | major
25
+ escalated_from: null
26
+ successor_path: null
27
+
28
+ # Plan-status per workflow milestone. Set during preflight; stable through
29
+ # execution. Allowed values: active | active-light | active-commit-only |
30
+ # skipped | as-discovered | complete-inline.
31
+ phase_plan:
32
+ discover-codebase: active
33
+ concept: active
34
+ wireframe: active
35
+ plan-design-system: as-discovered # frontend features set to `active`; backend/CLI leave `as-discovered` or `skipped`
36
+ prototype: active
37
+ iterate: active
38
+ codify: active
39
+ worktree: active
40
+ production-build: active
41
+ test-plan: active
42
+ uiux-review: active
43
+ code-review-final: active
44
+ deliver: active
45
+ onboarding: active
46
+ gotchas: as-discovered
47
+
48
+ # Gate state per phase. Skills update these as they run; gate-passed: true
49
+ # requires a matching Skill tool invocation (gate-enforcer.sh enforces).
50
+ # slice_graph is added at codify phase, when work is decomposed into slices.
51
+ phases:
52
+ discover:
53
+ codebase-analysis: { status: pending, gate-passed: false }
54
+ plan:
55
+ brainstorm: { status: pending, gate-passed: false }
56
+ design-system: { status: pending, gate-passed: false }
57
+ architecture: { status: pending, gate-passed: false }
58
+ task-decompose: { status: pending, gate-passed: false }
59
+ quality:
60
+ code-review-final: { status: pending, gate-passed: false }
61
+ test-plan: { status: pending, gate-passed: false }
62
+ test-execution: { status: pending, gate-passed: false }
63
+ uiux-review: { status: pending, gate-passed: false }
64
+ deliver:
65
+ pr-created: false
66
+ deployed: false
67
+ onboarding: false
68
+ support:
69
+ gotchas-recorded: false
@@ -0,0 +1,61 @@
1
+ # Canonical manifest template for /greenfield command.
2
+ # Source of truth for manifest schema — do not duplicate elsewhere.
3
+ # Placeholders: {name}, {description}, {date}
4
+ # Written to: .forge/work/greenfield/{name}/manifest.yaml
5
+ #
6
+ # v6 adds phase_plan: the planned status of each workflow step. The preflight
7
+ # step MUST replace `active` defaults below with the actual plan agreed with
8
+ # the user (greenfield commonly skips no phases — the whole pipeline runs).
9
+ # See templates/manifests/v6/SCHEMA.md §3.
10
+
11
+ schema_version: "6"
12
+ name: {name}
13
+ type: greenfield
14
+ description: "{description}"
15
+ status: in-progress # in-progress | paused | completed | escalated | abandoned
16
+ created: "{date}"
17
+ command: greenfield
18
+ complexity: standard # trivial | standard | major
19
+ escalated_from: null
20
+ successor_path: null
21
+
22
+ # Greenfield runs the full prototype-driven pipeline by default. Skipping
23
+ # phases here is rare — a greenfield project without a concept or wireframe
24
+ # usually means it should have been scoped as /feature against an existing
25
+ # codebase instead.
26
+ phase_plan:
27
+ discover-requirements: active
28
+ concept: active
29
+ wireframe: active
30
+ plan-design-system: active # greenfield is frontend-led by default; preflight may downgrade for CLI-only / backend-only projects
31
+ prototype: active
32
+ iterate: active
33
+ codify: active
34
+ scaffold: active
35
+ production-build: active
36
+ test-plan: active
37
+ uiux-review: active
38
+ code-review-final: active
39
+ deliver: active
40
+ onboarding: active
41
+ gotchas: as-discovered
42
+
43
+ # Gate state per phase. slice_graph is added at codify.
44
+ phases:
45
+ discover:
46
+ requirements: { status: pending, gate-passed: false }
47
+ plan:
48
+ brainstorm: { status: pending, gate-passed: false }
49
+ design-system: { status: pending, gate-passed: false }
50
+ architecture: { status: pending, gate-passed: false }
51
+ task-decompose: { status: pending, gate-passed: false }
52
+ quality:
53
+ code-review-final: { status: pending, gate-passed: false }
54
+ test-plan: { status: pending, gate-passed: false }
55
+ test-execution: { status: pending, gate-passed: false }
56
+ uiux-review: { status: pending, gate-passed: false }
57
+ deliver:
58
+ deployed: false
59
+ onboarding: false
60
+ support:
61
+ gotchas-recorded: false
@@ -0,0 +1,45 @@
1
+ # Canonical manifest template for /hotfix command.
2
+ # Source of truth for manifest schema — do not duplicate elsewhere.
3
+ # Placeholders: {name}, {description}, {date}
4
+ # Written to: .forge/work/hotfix/{name}/manifest.yaml
5
+ #
6
+ # Hotfix uses a compressed phase set — see quality-gates.md "Hotfix Gate
7
+ # Exemptions" for rationale. Follow-up work is tracked in an associated
8
+ # gotcha file with the `hotfix-workaround` tag.
9
+
10
+ schema_version: "6"
11
+ name: {name}
12
+ type: hotfix
13
+ description: "{description}"
14
+ status: in-progress # in-progress | paused | completed | escalated | abandoned
15
+ created: "{date}"
16
+ command: hotfix
17
+ escalated_from: null
18
+ successor_path: null # filled when follow-up /bugfix or /feature is created
19
+
20
+ # Hotfix workflow is intentionally compressed — full /bugfix scrutiny happens
21
+ # in the follow-up ticket. active-light values are common here. Allowed
22
+ # values: active | active-light | active-commit-only | skipped | as-discovered
23
+ # | complete-inline.
24
+ phase_plan:
25
+ debug-root-cause: active
26
+ production-build: active
27
+ smoke-tests: active
28
+ code-review-critical: active
29
+ deliver: active
30
+ gotchas: as-discovered
31
+ followup-ticket: as-discovered
32
+
33
+ # Gate state. No slice_graph — hotfixes are by definition too urgent to plan
34
+ # a decomposition.
35
+ phases:
36
+ debug:
37
+ root-cause: { status: pending, gate-passed: false }
38
+ quality:
39
+ smoke-tests: { status: pending, gate-passed: false }
40
+ code-review-critical: { status: pending, gate-passed: false }
41
+ deliver:
42
+ deployed: false
43
+ support:
44
+ gotchas-recorded: false
45
+ followup-ticket: null # e.g. work/bugfix/payment-null-check-proper-fix
@@ -0,0 +1,44 @@
1
+ # Canonical manifest template for /refactor command.
2
+ # Source of truth for manifest schema — do not duplicate elsewhere.
3
+ # Placeholders: {name}, {description}, {date}
4
+ # Written to: .forge/work/refactor/{name}/manifest.yaml
5
+
6
+ schema_version: "6"
7
+ name: {name}
8
+ type: refactor
9
+ description: "{description}"
10
+ status: in-progress # in-progress | paused | completed | escalated | abandoned
11
+ created: "{date}"
12
+ command: refactor
13
+ coverage-baseline: null # recorded in Step 0
14
+ escalated_from: null
15
+ successor_path: null
16
+
17
+ # Refactors skip the prototype-driven phases by default — they operate on an
18
+ # existing codified system. The plan covers discover/plan/build/quality steps.
19
+ # Allowed values: active | active-light | active-commit-only | skipped |
20
+ # as-discovered | complete-inline.
21
+ phase_plan:
22
+ discover-codebase: active
23
+ brainstorm: active
24
+ task-decompose: active
25
+ production-build: active
26
+ test-execution: active
27
+ assessment: active
28
+ deliver: active
29
+ gotchas: as-discovered
30
+
31
+ # Gate state. slice_graph is added at task-decompose when work is sliced.
32
+ phases:
33
+ discover:
34
+ codebase-analysis: { status: pending, gate-passed: false }
35
+ plan:
36
+ brainstorm: { status: pending, gate-passed: false }
37
+ task-decompose: { status: pending, gate-passed: false }
38
+ quality:
39
+ test-execution: { status: pending, gate-passed: false }
40
+ assessment: { status: pending, gate-passed: false }
41
+ deliver:
42
+ pr-created: false
43
+ support:
44
+ gotchas-recorded: false