@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.
- package/LICENSE +21 -0
- package/README.md +389 -0
- package/agents/architect.md +92 -0
- package/agents/builder.md +122 -0
- package/agents/code-reviewer.md +107 -0
- package/agents/concept-designer.md +207 -0
- package/agents/craft-reviewer.md +132 -0
- package/agents/critic.md +130 -0
- package/agents/doc-writer.md +85 -0
- package/agents/dreamer.md +129 -0
- package/agents/e2e-runner.md +89 -0
- package/agents/gotcha-hunter.md +127 -0
- package/agents/prototype-builder.md +193 -0
- package/agents/prototype-codifier.md +204 -0
- package/agents/prototype-reviewer.md +163 -0
- package/agents/security-reviewer.md +108 -0
- package/agents/spec-reviewer.md +94 -0
- package/agents/tracer.md +98 -0
- package/agents/wireframer.md +109 -0
- package/commands/abort.md +25 -0
- package/commands/bugfix.md +151 -0
- package/commands/evolve.md +118 -0
- package/commands/feature.md +236 -0
- package/commands/forge.md +100 -0
- package/commands/greenfield.md +185 -0
- package/commands/hotfix.md +98 -0
- package/commands/refactor.md +147 -0
- package/commands/resume.md +25 -0
- package/commands/setup.md +201 -0
- package/commands/status.md +27 -0
- package/commands/task-force.md +110 -0
- package/commands/validate.md +12 -0
- package/dist/__tests__/active-manifest.test.js +272 -0
- package/dist/__tests__/copy.test.js +96 -0
- package/dist/__tests__/gate-check.test.js +384 -0
- package/dist/__tests__/wiki.test.js +472 -0
- package/dist/__tests__/work-manifest.test.js +304 -0
- package/dist/active-manifest.js +229 -0
- package/dist/cli.js +158 -0
- package/dist/copy.js +124 -0
- package/dist/gate-check.js +326 -0
- package/dist/hooks.js +60 -0
- package/dist/init.js +140 -0
- package/dist/manifest.js +90 -0
- package/dist/merge.js +77 -0
- package/dist/paths.js +36 -0
- package/dist/uninstall.js +216 -0
- package/dist/update.js +158 -0
- package/dist/verify-manifest.js +65 -0
- package/dist/verify.js +98 -0
- package/dist/wiki-ui.js +310 -0
- package/dist/wiki.js +364 -0
- package/dist/work-manifest.js +798 -0
- package/hooks/config/gate-requirements.json +79 -0
- package/hooks/hooks.json +143 -0
- package/hooks/scripts/analyze-telemetry.sh +114 -0
- package/hooks/scripts/gate-enforcer.sh +164 -0
- package/hooks/scripts/pre-compact.sh +90 -0
- package/hooks/scripts/session-start.sh +81 -0
- package/hooks/scripts/telemetry.sh +41 -0
- package/hooks/scripts/wiki-lint.sh +87 -0
- package/hooks/templates/AGENTS.md.template +48 -0
- package/hooks/templates/CLAUDE.md.template +45 -0
- package/package.json +55 -0
- package/protocols/README.md +40 -0
- package/protocols/codex.md +151 -0
- package/protocols/graphify.md +156 -0
- package/references/common/agent-coordination.md +65 -0
- package/references/common/coding-standards.md +54 -0
- package/references/common/feature-tracking.md +21 -0
- package/references/common/io-protocol.md +36 -0
- package/references/common/phases.md +57 -0
- package/references/common/quality-gates.md +130 -0
- package/references/common/skill-authoring.md +154 -0
- package/references/common/skill-compliance.md +30 -0
- package/references/python/standards.md +44 -0
- package/references/react/standards.md +61 -0
- package/references/typescript/standards.md +42 -0
- package/rules/common/forge-system.md +59 -0
- package/rules/common/git-workflow.md +40 -0
- package/rules/common/guardrails.md +37 -0
- package/rules/common/quality-gates.md +18 -0
- package/rules/common/security.md +50 -0
- package/rules/common/skill-selection.md +78 -0
- package/rules/common/testing.md +58 -0
- package/rules/common/verification.md +39 -0
- package/skills/build-pr-workflow/SKILL.md +301 -0
- package/skills/build-pr-workflow/references/pr-template.md +62 -0
- package/skills/build-pr-workflow/references/subagent-merge.md +47 -0
- package/skills/build-pr-workflow/references/worktree-setup.md +125 -0
- package/skills/build-prototype/SKILL.md +264 -0
- package/skills/build-scaffold/SKILL.md +340 -0
- package/skills/build-tdd/SKILL.md +89 -0
- package/skills/build-wireframe/SKILL.md +110 -0
- package/skills/build-wireframe/assets/baseline-template.html +486 -0
- package/skills/build-wireframe/references/demo-walkthroughs.md +170 -0
- package/skills/build-wireframe/references/gotchas.md +188 -0
- package/skills/build-wireframe/references/legend-lines.md +141 -0
- package/skills/concept-slides/SKILL.md +192 -0
- package/skills/deliver-db-migration/SKILL.md +466 -0
- package/skills/deliver-deploy/SKILL.md +407 -0
- package/skills/deliver-onboarding/SKILL.md +198 -0
- package/skills/deliver-onboarding/references/document-templates.md +393 -0
- package/skills/deliver-onboarding/templates/getting-started.md +122 -0
- package/skills/discover-codebase-analysis/SKILL.md +448 -0
- package/skills/discover-requirements/SKILL.md +418 -0
- package/skills/discover-requirements/templates/prd.md +99 -0
- package/skills/discover-requirements/templates/technical-spec.md +123 -0
- package/skills/discover-requirements/templates/user-stories.md +76 -0
- package/skills/harden/SKILL.md +214 -0
- package/skills/iterate-prototype/SKILL.md +241 -0
- package/skills/plan-architecture/SKILL.md +457 -0
- package/skills/plan-architecture/templates/adr-template.md +52 -0
- package/skills/plan-architecture/templates/api-contract.md +99 -0
- package/skills/plan-architecture/templates/db-schema.md +81 -0
- package/skills/plan-architecture/templates/system-design.md +111 -0
- package/skills/plan-brainstorm/SKILL.md +433 -0
- package/skills/plan-design-system/SKILL.md +279 -0
- package/skills/plan-task-decompose/SKILL.md +454 -0
- package/skills/quality-code-review/SKILL.md +286 -0
- package/skills/quality-security-audit/SKILL.md +292 -0
- package/skills/quality-security-audit/references/audit-report-template.md +89 -0
- package/skills/quality-security-audit/references/owasp-checks.md +178 -0
- package/skills/quality-test-execution/SKILL.md +435 -0
- package/skills/quality-test-plan/SKILL.md +297 -0
- package/skills/quality-test-plan/references/test-type-guide.md +263 -0
- package/skills/quality-test-plan/templates/e2e-test-plan.md +72 -0
- package/skills/quality-test-plan/templates/integration-test-plan.md +74 -0
- package/skills/quality-test-plan/templates/load-test-plan.md +111 -0
- package/skills/quality-test-plan/templates/smoke-test-plan.md +68 -0
- package/skills/quality-test-plan/templates/unit-test-plan.md +56 -0
- package/skills/quality-uiux/SKILL.md +481 -0
- package/skills/support-debug/SKILL.md +464 -0
- package/skills/support-dream/SKILL.md +213 -0
- package/skills/support-gotcha/SKILL.md +249 -0
- package/skills/support-runtime-reachability/SKILL.md +190 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-01-passes-app-use/src/app.ts +7 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-01-passes-app-use/src/handlers/cases.ts +7 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-02-orphan-no-app-use/src/app.ts +8 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-02-orphan-no-app-use/src/handlers/cases.ts +7 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-03-orphan-import-only/src/App.tsx +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-03-orphan-import-only/src/components/RingingBanner.tsx +7 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-03-orphan-import-only/src/hooks/useTwilio.ts +6 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-04-jsx-component-rendered/src/App.tsx +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-04-jsx-component-rendered/src/components/MyComp.tsx +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-05-jsx-component-not-rendered/src/App.tsx +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-05-jsx-component-not-rendered/src/components/Orphan.tsx +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-06-class-instantiated/src/lib/Service.ts +6 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-06-class-instantiated/src/main.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-07-class-not-instantiated/src/lib/Lonely.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-07-class-not-instantiated/src/main.ts +2 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-08-default-export-imported-and-called/src/handler.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-08-default-export-imported-and-called/src/main.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-09-default-export-orphan/src/handler.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-09-default-export-orphan/src/main.ts +2 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-10-aliased-named-export/src/lib.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-10-aliased-named-export/src/main.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-11-re-export-chain/src/lib/index.ts +1 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-11-re-export-chain/src/lib/internal.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-11-re-export-chain/src/main.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-12-test-only-caller/src/util.test.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-12-test-only-caller/src/util.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-13-gated-pending-annotation/src/future.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-14-untraceable-annotation/src/decorated.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-15-untraceable-empty/src/lazy.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-16-python-module/src/lib.py +15 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-16-python-module/src/main.py +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-17-router-use/src/parent.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-17-router-use/src/routes/cases.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-18-shadowed-name-fp/src/lib/foo.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-18-shadowed-name-fp/src/other.ts +8 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-19-same-name-different-module/src/handlers/cases.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-19-same-name-different-module/src/handlers/users.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-19-same-name-different-module/src/main.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-20-aliased-import-usage/src/handlers/cases.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-20-aliased-import-usage/src/main.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-21-mixed-default-and-named/src/lib.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-21-mixed-default-and-named/src/main.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-22-dynamic-import-then-caller/src/lib.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-22-dynamic-import-then-caller/src/main.ts +8 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-23-dynamic-import-with-space/src/lib.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-23-dynamic-import-with-space/src/main.ts +7 -0
- package/skills/support-runtime-reachability/scripts/check.mjs +638 -0
- package/skills/support-runtime-reachability/scripts/check.test.mjs +244 -0
- package/skills/support-skill-validator/SKILL.md +194 -0
- package/skills/support-skill-validator/references/false-positives.md +59 -0
- package/skills/support-skill-validator/references/validation-checks.md +280 -0
- package/skills/support-system-guide/SKILL.md +311 -0
- package/skills/support-task-force/SKILL.md +265 -0
- package/skills/support-task-force/references/dispatch-pattern.md +178 -0
- package/skills/support-task-force/references/synthesis-template.md +126 -0
- package/skills/support-wiki-bootstrap/SKILL.md +37 -0
- package/skills/support-wiki-lint/SKILL.md +196 -0
- package/skills/support-wiki-lint/scripts/lint.mjs +488 -0
- package/skills/support-wiki-lint/scripts/lint.test.mjs +196 -0
- package/templates/README.md +23 -0
- package/templates/aiwiki/CLAUDE.md.template +78 -0
- package/templates/aiwiki/schemas/architecture.md +118 -0
- package/templates/aiwiki/schemas/convention.md +112 -0
- package/templates/aiwiki/schemas/decision.md +144 -0
- package/templates/aiwiki/schemas/gotcha.md +118 -0
- package/templates/aiwiki/schemas/oracle.md +105 -0
- package/templates/aiwiki/schemas/session.md +125 -0
- package/templates/manifests/bugfix.yaml +41 -0
- package/templates/manifests/feature.yaml +69 -0
- package/templates/manifests/greenfield.yaml +61 -0
- package/templates/manifests/hotfix.yaml +45 -0
- package/templates/manifests/refactor.yaml +44 -0
- package/templates/manifests/v5/SCHEMA.md +327 -0
- package/templates/manifests/v5/feature.yaml +77 -0
- package/templates/manifests/v6/SCHEMA.md +199 -0
- package/templates/wiki-html/dream-detail.html +378 -0
- 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
|