@izkac/forgekit 0.2.0 → 0.3.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.
@@ -31,14 +31,27 @@ Thin wrapper around the project **`openspec-propose`** skill (or `/opsx:propose`
31
31
  valid spine and, when the spine has rows, a green current e2e run —
32
32
  keyword sniffing does not decide.)
33
33
 
34
- 5. Update session:
34
+ 5. **Operator brief (mandatory)** — see [../references/operator-brief.md](../references/operator-brief.md):
35
+ write `openspec/changes/<change-name>/brief.html` — a plain-language,
36
+ self-contained HTML explanation of what will be built (mermaid diagrams
37
+ where helpful), then:
38
+
39
+ ```bash
40
+ forge brief stamp # records specs hash + opens it in the operator's browser
41
+ ```
42
+
43
+ `forge phase implement` hard-refuses while the brief is missing or stale
44
+ (specs edited after stamping → rewrite affected sections and re-stamp).
45
+
46
+ 6. Update session:
35
47
  ```bash
36
48
  forge phase plan --plan-type openspec --openspec <change-name>
37
49
  forge phase implement --tasks-total <N>
38
50
  ```
39
51
  Count tasks from `tasks.md` checkboxes.
40
52
 
41
- 6. Get user approval to proceed to implement (unless they already said "go").
53
+ 7. Get user approval to proceed to implement (unless they already said "go").
54
+ The brief (opened by `forge brief stamp`) is what the operator reviews.
42
55
 
43
56
  ## Session tracking
44
57
 
@@ -79,7 +79,19 @@ OpenSpec propose flow without the vendor CLI. Change lives under
79
79
  valid spine and, when the spine has rows, a green current e2e run —
80
80
  keyword sniffing does not decide.)
81
81
 
82
- 5. Update session:
82
+ 5. **Operator brief (mandatory)** — see [../references/operator-brief.md](../references/operator-brief.md):
83
+ write `<specsDir>/changes/<change-name>/brief.html` — a plain-language,
84
+ self-contained HTML explanation of what will be built (mermaid diagrams
85
+ where helpful), then:
86
+
87
+ ```bash
88
+ forge brief stamp # records specs hash + opens it in the operator's browser
89
+ ```
90
+
91
+ `forge phase implement` hard-refuses while the brief is missing or stale
92
+ (specs edited after stamping → rewrite affected sections and re-stamp).
93
+
94
+ 6. Update session:
83
95
 
84
96
  ```bash
85
97
  forge phase plan --plan-type specs --openspec <change-name>
@@ -89,7 +101,8 @@ OpenSpec propose flow without the vendor CLI. Change lives under
89
101
  Count tasks from `tasks.md` checkboxes. (`--openspec` carries the change
90
102
  name for both engines.)
91
103
 
92
- 6. Get user approval on the artefacts before implementing (unless they already said "go").
104
+ 7. Get user approval on the artefacts before implementing (unless they already said "go").
105
+ The brief (opened by `forge brief stamp`) is what the operator reviews.
93
106
 
94
107
  ## Compatibility
95
108
 
@@ -0,0 +1,74 @@
1
+ # Operator brief — `brief.html`
2
+
3
+ Every tracked change (openspec or specs engine) ends its plan phase with an
4
+ **operator brief**: one self-contained HTML file at
5
+ `<changeDir>/brief.html` that a human can read in two minutes and understand
6
+ *what will be built* — without reading proposal.md, design.md, or tasks.md.
7
+
8
+ The plan-approval checkpoint is only as strong as the operator's comprehension.
9
+ The specs are written for agents; the brief is the translation for the human
10
+ who approves them. `forge phase implement` **refuses** while the brief is
11
+ missing, unstamped, or stale.
12
+
13
+ ## Who writes it
14
+
15
+ You (the agent), at the end of the plan phase — after the specs are final,
16
+ before `forge phase implement`. The CLI never generates prose; it only stamps
17
+ freshness and opens the file.
18
+
19
+ ## Workflow
20
+
21
+ ```bash
22
+ # 1. specs are final (proposal.md / design.md / tasks.md)
23
+ # 2. write <changeDir>/brief.html (structure below)
24
+ forge brief stamp # records specs hash + opens it in the operator's browser
25
+ forge phase implement --tasks-total <N> # hard-gated on a fresh stamped brief
26
+ ```
27
+
28
+ If any spec file changes later, the brief goes **stale** — update the affected
29
+ sections and `forge brief stamp` again. `forge brief check` reports status.
30
+ Genuine edge case (operator explicitly waives it):
31
+ `forge phase implement --allow-incomplete "<reason>"`.
32
+
33
+ ## Writing rules
34
+
35
+ Audience: a smart human who has NOT read the specs and doesn't want to.
36
+ Plain language. No spec-speak, no requirement IDs, no file paths in headings.
37
+ If a sentence would not make sense to a project stakeholder outside this
38
+ session, rewrite it.
39
+
40
+ Structure (sections, in order — skip a section only when truly empty):
41
+
42
+ 1. **TL;DR** — 2-3 sentences: what will exist after this change that doesn't
43
+ today, and why it's worth doing.
44
+ 2. **What you'll get** — the observable outcomes, bulleted. Behavior, not
45
+ implementation ("you can send a message to any session from one terminal",
46
+ not "a registry module under lib/").
47
+ 3. **How it works** — the shape of the solution in one short narrative plus a
48
+ **mermaid diagram** where a picture beats prose (flow, sequence, or state —
49
+ whichever fits; skip the diagram for trivial changes rather than forcing one).
50
+ 4. **What changes for you** — new commands/screens/steps the operator will
51
+ use; anything that behaves differently than before.
52
+ 5. **Risks and open questions** — honest, short. What could go wrong, what was
53
+ deliberately deferred, what the operator should keep an eye on.
54
+ 6. **Out of scope** — what this change deliberately does NOT do.
55
+ 7. **Work overview** — task groups from tasks.md compressed to one line each,
56
+ with rough size (n tasks). Not the full task list.
57
+
58
+ ## File rules
59
+
60
+ - One file, self-contained: inline CSS, no build step, no local assets.
61
+ - Mermaid via CDN is fine (`<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js">`
62
+ + `mermaid.initialize({ startOnLoad: true })`; diagrams in `<pre class="mermaid">` blocks).
63
+ Trade-off accepted: diagrams need internet to render; the text must stand on
64
+ its own without them.
65
+ - Readable defaults: max-width ~48rem/prose, system font stack, dark-on-light.
66
+ Keep styling minimal — this is a memo, not a product page.
67
+ - Do not remove the `<!-- forge-brief-specs-hash:… -->` comment `forge brief
68
+ stamp` inserts; re-stamping updates it.
69
+
70
+ ## Archive
71
+
72
+ `brief.html` lives in the change dir, so it archives with the change
73
+ (`changes/archive/…`) and remains the human-readable record of what was
74
+ approved — useful input for archive→ADR.