@fro.bot/systematic 2.24.0 → 2.26.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/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/frontmatter.d.ts +12 -0
- package/package.json +5 -5
- package/skills/ce-brainstorm/SKILL.md +18 -1
- package/skills/ce-brainstorm/references/brainstorm-sections.md +50 -0
- package/skills/ce-brainstorm/references/markdown-rendering.md +202 -0
- package/skills/ce-brainstorm/references/requirements-capture.md +20 -0
- package/skills/ce-brainstorm/references/synthesis-summary.md +273 -0
- package/skills/ce-brainstorm/references/universal-brainstorming.md +1 -1
- package/skills/ce-brainstorm/references/visual-communication.md +29 -0
- package/skills/ce-compound/references/schema.yaml +27 -2
- package/skills/ce-plan/SKILL.md +120 -0
- package/skills/ce-plan/references/markdown-rendering.md +203 -0
- package/skills/ce-plan/references/plan-handoff.md +5 -5
- package/skills/ce-plan/references/plan-sections.md +117 -0
- package/skills/ce-plan/references/synthesis-summary.md +395 -0
- package/skills/ce-plan/references/universal-planning.md +3 -3
- package/skills/ce-review/SKILL.md +33 -7
- package/skills/ce-review/references/review-output-template.md +8 -0
- package/skills/ce-review/references/validator-template.md +96 -0
- package/skills/claude-permissions-optimizer/scripts/extract-commands.mjs +2 -2
- package/skills/claude-permissions-optimizer/scripts/normalize.mjs +8 -8
- package/skills/onboarding/scripts/inventory.mjs +2 -2
- package/skills/writing-skills/scripts/render-graphs.js +4 -4
- /package/dist/{index-175fc4yn.js → index-3q3ns1xh.js} +0 -0
package/dist/cli.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -4,6 +4,18 @@ export interface FrontmatterResult<T = Record<string, unknown>> {
|
|
|
4
4
|
hadFrontmatter: boolean;
|
|
5
5
|
parseError: boolean;
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Returns the raw YAML text between the opening and closing `---` delimiters,
|
|
9
|
+
* or `null` when the content has no frontmatter block.
|
|
10
|
+
*
|
|
11
|
+
* Scope: flat top-level frontmatter only. Nested/indented mapping values are
|
|
12
|
+
* returned verbatim as part of the block — callers that scan individual lines
|
|
13
|
+
* (e.g. parse-safety checks) must skip indented lines themselves.
|
|
14
|
+
*
|
|
15
|
+
* Handles LF and CRLF line endings. The closing `---` does not need a trailing
|
|
16
|
+
* newline (handles files that end immediately after the delimiter).
|
|
17
|
+
*/
|
|
18
|
+
export declare function extractFrontmatterBlock(content: string): string | null;
|
|
7
19
|
/**
|
|
8
20
|
* Parses YAML frontmatter from Markdown content.
|
|
9
21
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fro.bot/systematic",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.26.0",
|
|
4
4
|
"description": "Structured engineering workflows for OpenCode",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://fro.bot/systematic",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"docs:build": "bun run docs:generate && bun run --cwd docs build",
|
|
38
38
|
"docs:preview": "bun run --cwd docs preview",
|
|
39
39
|
"docs:verify": "bun install --frozen-lockfile && bun run --cwd docs playwright install --with-deps chromium && bun run docs:build",
|
|
40
|
-
"docs:generate": "bun docs/scripts/transform-content.ts && bun scripts/generate-config-schema.ts && bun docs/scripts/generate-config-reference.ts",
|
|
40
|
+
"docs:generate": "bun docs/scripts/generate-stats.ts && bun docs/scripts/transform-content.ts && bun scripts/generate-config-schema.ts && bun docs/scripts/generate-config-reference.ts",
|
|
41
41
|
"schema:generate": "bun scripts/generate-config-schema.ts",
|
|
42
42
|
"schema:drift": "bun scripts/generate-config-schema.ts --check",
|
|
43
43
|
"registry:build": "bun scripts/build-registry.ts",
|
|
@@ -65,9 +65,9 @@
|
|
|
65
65
|
"@opencode-ai/plugin": "^1.1.30"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@biomejs/biome": "2.4.
|
|
69
|
-
"@opencode-ai/plugin": "1.15.
|
|
70
|
-
"@opencode-ai/sdk": "1.15.
|
|
68
|
+
"@biomejs/biome": "2.4.16",
|
|
69
|
+
"@opencode-ai/plugin": "1.15.13",
|
|
70
|
+
"@opencode-ai/sdk": "1.15.13",
|
|
71
71
|
"@semantic-release/exec": "7.1.0",
|
|
72
72
|
"@types/bun": "latest",
|
|
73
73
|
"@types/js-yaml": "4.0.9",
|
|
@@ -179,14 +179,31 @@ If relevant, call out whether the choice is:
|
|
|
179
179
|
- Extend an existing capability
|
|
180
180
|
- Build something net new
|
|
181
181
|
|
|
182
|
+
### Phase 2.5: Synthesis Summary
|
|
183
|
+
|
|
184
|
+
**STOP. Before composing the synthesis, read `references/synthesis-summary.md`.** The two-stage shape (internal three-bucket draft → chat-time scoping synthesis), the Path A / Path B gate, the four scoping synthesis sections with their keep tests, the tier-aware bullet budget with re-cut rule, anti-pattern guidance, soft-cut behavior, self-redirect support, and headless-mode routing all live there. Composing a synthesis without these rules loaded reliably produces malformed output — pasting the full internal three-bucket draft verbatim into chat, implementation-detail leakage into the scoping synthesis, the proposal-pitch anti-pattern. **Each scoping synthesis bullet must pass the affirmability test (can the user evaluate this without reading code?) AND the detail test (1–2 lines max, conversational not documentary); over-share and over-detail are the failure modes to avoid.** This is not optional supplementary reading; it is the source of truth for how the phase behaves.
|
|
185
|
+
|
|
186
|
+
Surface a scoping synthesis to the user before Phase 3 writes the requirements doc — the user's last opportunity to correct scope before the artifact lands. **Phase 2.5 is the only scope gate in this workflow.** The scoping synthesis is shaped like what two product collaborators would confirm before writing a PRD, not like a comprehensive audit or a one-line preview.
|
|
187
|
+
|
|
188
|
+
Fires for **all tiers** including Lightweight. Skip Phase 2.5 entirely on the Phase 0.1b non-software (universal-brainstorming) route.
|
|
189
|
+
|
|
190
|
+
**Path A vs Path B:** the scoping synthesis shape depends on TWO signals — whether any blocking question fired AND what tier Phase 0.3 classified the scope as.
|
|
191
|
+
|
|
192
|
+
- **Path A — no blocking questions fired AND tier is Lightweight**: announce-mode. Emit "What we're building" prose only (1–3 sentences), then proceed to Phase 3 doc-write in the same turn. No other sections, no confirmation question. Do NOT end the turn waiting for acknowledgment. The user can revise after the doc lands if the shape is wrong — Lightweight Path A docs are short, post-hoc revision is cheap.
|
|
193
|
+
- **Path B — at least one blocking question fired, OR tier is Standard / Deep-feature / Deep-product**: full tier-aware scoping synthesis with confirmation gate. Two scenarios fire Path B: (a) the user invested answer-time during dialogue, or (b) the user pre-loaded substantive scope content (Phase 0.2 fast-path with a richly-specified opening prompt). Either way, the substance earns a real checkpoint. Confirmation is unconditional even when zero call-outs survive the keep test.
|
|
194
|
+
|
|
195
|
+
**Why the tier guard on Path A**: Phase 0.2's fast path serves two very different cases — a tight one-liner that needs no dialogue ("fix the typo on line 47") and a richly pre-loaded brainstorm context that ALSO needs no dialogue because the user pre-stated everything. Without the tier guard, both route to Path A and the pre-loaded case gets a 1-sentence checkpoint for what may be 20+ items worth of scope. Tier-classifying Phase 0.3 distinguishes the two — pre-loaded substance makes the tier Standard or Deep, which then routes to Path B.
|
|
196
|
+
|
|
182
197
|
### Phase 3: Capture the Requirements
|
|
183
198
|
|
|
184
|
-
Write or update a requirements document only when the conversation produced durable decisions worth preserving. Read `references/requirements-capture.md` for the document template, formatting rules, visual aid guidance, and completeness checks.
|
|
199
|
+
Write or update a requirements document only when the conversation produced durable decisions worth preserving. Read `references/requirements-capture.md` for the document template, formatting rules, visual aid guidance, and completeness checks. Read `references/brainstorm-sections.md` for metadata field contracts and ID conventions. Read `references/markdown-rendering.md` for markdown presentation principles.
|
|
185
200
|
|
|
186
201
|
For **Lightweight** brainstorms, keep the document compact. Skip document creation when the user only needs brief alignment and no durable decisions need to be preserved.
|
|
187
202
|
|
|
188
203
|
### Phase 3.5: Document Review
|
|
189
204
|
|
|
205
|
+
**This is a quality and format review of the written artifact — not a second scope negotiation.** Scope was confirmed at Phase 2.5; Phase 3.5 checks that the written doc faithfully reflects that confirmed scope and meets quality standards. Do not re-open scope decisions here.
|
|
206
|
+
|
|
190
207
|
When a requirements document was created or updated, run the `document-review` skill on it before presenting handoff options. Pass the document path as the argument.
|
|
191
208
|
|
|
192
209
|
If document-review returns findings that were auto-applied, note them briefly when presenting handoff options. If residual P0/P1 findings were surfaced, mention them so the user can decide whether to address them before proceeding.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Brainstorm Sections
|
|
2
|
+
|
|
3
|
+
This reference describes the rendering and ordering conventions for brainstorm
|
|
4
|
+
requirements documents. It does NOT prescribe which sections exist or what they
|
|
5
|
+
must contain — section inventory, content rules, and the document template live
|
|
6
|
+
in `references/requirements-capture.md`.
|
|
7
|
+
|
|
8
|
+
Rendering is handled by `references/markdown-rendering.md`.
|
|
9
|
+
|
|
10
|
+
## Brainstorm metadata fields
|
|
11
|
+
|
|
12
|
+
Every brainstorm carries a small set of stable metadata fields that
|
|
13
|
+
downstream tooling depends on. The contract is format-independent: these
|
|
14
|
+
fields appear as YAML frontmatter at the top of the file. Field names and
|
|
15
|
+
semantics are stable so consumers can locate them without knowing which
|
|
16
|
+
session produced the brainstorm.
|
|
17
|
+
|
|
18
|
+
### Required
|
|
19
|
+
|
|
20
|
+
- **`date`** — creation date in ISO 8601 (`YYYY-MM-DD`), ASCII digits only.
|
|
21
|
+
Used in the filename (`docs/brainstorms/YYYY-MM-DD-<topic>-requirements.md`).
|
|
22
|
+
- **`topic`** — kebab-case slug identifying the brainstorm subject (e.g.,
|
|
23
|
+
`surface-scope-earlier`, `demo-reel-local-save`). Used in the filename
|
|
24
|
+
alongside `date` and as the resume-detection key when `ce-brainstorm`'s
|
|
25
|
+
Phase 0.1 scans `docs/brainstorms/` for an existing artifact to continue.
|
|
26
|
+
|
|
27
|
+
### Status flip does not apply to brainstorm
|
|
28
|
+
|
|
29
|
+
Unlike plans, brainstorm artifacts have no `status` field — there is no
|
|
30
|
+
`active → completed` lifecycle. A brainstorm is a one-time output that
|
|
31
|
+
downstream consumers (`ce-plan`, `document-review`) reference via the plan's
|
|
32
|
+
`origin:` field.
|
|
33
|
+
|
|
34
|
+
### Field-name stability
|
|
35
|
+
|
|
36
|
+
Field names are stable across brainstorm revisions — never rename a field
|
|
37
|
+
or repurpose its semantics. Agents composing new brainstorms MUST use these
|
|
38
|
+
exact names; adding new fields is fine, but renaming `topic` to `subject`
|
|
39
|
+
or `date` to `created` breaks filename construction and resume detection.
|
|
40
|
+
|
|
41
|
+
> **Section inventory, content rules, and the Summary vs Problem Frame discipline are owned by `references/requirements-capture.md`; this file covers rendering conventions and metadata contracts only.**
|
|
42
|
+
|
|
43
|
+
## Rendering
|
|
44
|
+
|
|
45
|
+
The format-specific reference describes how to render these sections:
|
|
46
|
+
|
|
47
|
+
- **Markdown rendering:** `references/markdown-rendering.md`
|
|
48
|
+
|
|
49
|
+
This reference (`brainstorm-sections.md`) is about rendering conventions and
|
|
50
|
+
metadata contracts; section content rules live in `references/requirements-capture.md`.
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Markdown Rendering
|
|
2
|
+
|
|
3
|
+
This is a format-rendering reference — it describes how to render any
|
|
4
|
+
artifact in markdown, independent of which skill is producing it.
|
|
5
|
+
|
|
6
|
+
It is paired with a section contract (`references/brainstorm-sections.md`)
|
|
7
|
+
that describes *what* the artifact contains. This reference describes *how*
|
|
8
|
+
markdown specifically presents it.
|
|
9
|
+
|
|
10
|
+
## Hard invariants
|
|
11
|
+
|
|
12
|
+
These hold regardless of which skill produced the artifact.
|
|
13
|
+
|
|
14
|
+
- **YAML frontmatter at the top of the file.** Standard `---` delimited block
|
|
15
|
+
containing the artifact's stable metadata (title, status, date, type, etc.
|
|
16
|
+
— exact fields are per-skill, defined in the section contract). Editable
|
|
17
|
+
in place; tools and agents that do status flips (`active → completed`)
|
|
18
|
+
update the YAML directly.
|
|
19
|
+
- **ASCII identifiers in anchors.** Markdown headings auto-generate anchors
|
|
20
|
+
from the heading text. Keep headings ASCII so anchors are predictable
|
|
21
|
+
(`#implementation-units`, not `#implementación-units`).
|
|
22
|
+
- **Repo-relative paths for file references.** Always. Never absolute paths
|
|
23
|
+
— they break portability across machines, worktrees, teammates.
|
|
24
|
+
- **No HTML mixed in.** Keep the markdown pure. No `<div>`, no `<details>`,
|
|
25
|
+
no inline `<style>`. Markdown stays markdown.
|
|
26
|
+
|
|
27
|
+
## Format principles
|
|
28
|
+
|
|
29
|
+
These shape what "good" markdown looks like; the agent applies them per
|
|
30
|
+
artifact based on content shape.
|
|
31
|
+
|
|
32
|
+
### ID prefix format
|
|
33
|
+
|
|
34
|
+
Stable IDs (R, U, A, F, AE, KTD) appear as plain prefixes at the start of
|
|
35
|
+
the bullet or heading — do NOT bold the prefix. The prefix is visually
|
|
36
|
+
distinctive on its own; bolding it inflates visual noise.
|
|
37
|
+
|
|
38
|
+
```markdown
|
|
39
|
+
- R1. The plan returns paginated sessions. ← right
|
|
40
|
+
- **R1.** The plan returns paginated sessions. ← wrong (bolded prefix)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Same applies to unit headings: `### U1. Cloak detection in preflight contract`.
|
|
44
|
+
|
|
45
|
+
### Content shape: prose vs bullets vs tables
|
|
46
|
+
|
|
47
|
+
The same content can be rendered three ways; the agent picks per content
|
|
48
|
+
shape, not by template default.
|
|
49
|
+
|
|
50
|
+
- **Prose** when the content has narrative flow (motivation, decision
|
|
51
|
+
rationale, problem framing). Bullets fragment narrative into
|
|
52
|
+
disconnected pieces.
|
|
53
|
+
- **Bullets** when items share a parallel shape but each carries enough
|
|
54
|
+
prose to not fit a table cell.
|
|
55
|
+
- **Tables** when 5+ items share uniform structure (`ID + body`,
|
|
56
|
+
`name + value`, `decision + rationale`, `risk + mitigation`). Tables
|
|
57
|
+
scan faster at that scale and unlock additional columns (status,
|
|
58
|
+
traceability, severity) that bullets can't accommodate cleanly.
|
|
59
|
+
|
|
60
|
+
The test: which shape would a reader scan fastest for this content? If
|
|
61
|
+
items have parallel structure and 5+ instances, table. If items are 3-5
|
|
62
|
+
and each has a few lines of prose, bullets. If the content is a single
|
|
63
|
+
narrative thought, prose.
|
|
64
|
+
|
|
65
|
+
### Bold leader labels within bullets
|
|
66
|
+
|
|
67
|
+
When a bullet has substructure that benefits from named fields (Key Flows
|
|
68
|
+
with Trigger / Actors / Steps / Outcome, Acceptance Examples with Covers
|
|
69
|
+
/ Given / When / Then), use bold leader labels at the start of nested
|
|
70
|
+
bullets — not deeper heading levels.
|
|
71
|
+
|
|
72
|
+
```markdown
|
|
73
|
+
- F1. Anonymous capture
|
|
74
|
+
- **Trigger:** Agent enters Step 2a with no session.
|
|
75
|
+
- **Actors:** A1, A2
|
|
76
|
+
- **Steps:** Preflight detects cloak; agent launches; capture proceeds.
|
|
77
|
+
- **Covered by:** R1, R2, R5
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
This gives the bullet structure without needing H4/H5 headings that would
|
|
81
|
+
clutter the doc and break TOC generation.
|
|
82
|
+
|
|
83
|
+
### Section separators
|
|
84
|
+
|
|
85
|
+
For substantial artifacts, use horizontal rules (`---`) between top-level
|
|
86
|
+
H2 sections. Omit for short docs where separators would dominate.
|
|
87
|
+
|
|
88
|
+
### Tables for genuinely comparative info only
|
|
89
|
+
|
|
90
|
+
Use tables for the uniform-shape case in "Content shape" above. Don't use
|
|
91
|
+
tables to render content lists that are really bullets — markdown tables
|
|
92
|
+
are noisier in raw form and worse for diffs.
|
|
93
|
+
|
|
94
|
+
## Section anatomy
|
|
95
|
+
|
|
96
|
+
How section types commonly render in markdown. These are patterns, not
|
|
97
|
+
contracts — the agent picks the shape that fits the content.
|
|
98
|
+
|
|
99
|
+
- **Summary / Problem Frame** — prose paragraphs.
|
|
100
|
+
- **Requirements** — bullets with `R<N>.` prefix. When requirements span
|
|
101
|
+
more than one concern, grouping under bold inline headers is the default
|
|
102
|
+
shape, not optional polish (group by capability, not by discussion order);
|
|
103
|
+
render a flat list only when every requirement is about the same thing.
|
|
104
|
+
When requirements have status, traceability, or severity that warrant
|
|
105
|
+
additional columns, escalate to a table.
|
|
106
|
+
- **Implementation Units** — H3 heading per unit with `U<N>.` prefix.
|
|
107
|
+
Fields (Goal, Files, Patterns, Test Scenarios, Verification) render as
|
|
108
|
+
bullets with bold leader labels, or as sub-headings if the field has
|
|
109
|
+
multi-paragraph content.
|
|
110
|
+
- **Key Technical Decisions** — bullets with bold decision name + prose
|
|
111
|
+
rationale, or numbered KTD-N pattern when traceability matters.
|
|
112
|
+
- **Key Flows / Acceptance Examples** — bullets with bold leader labels
|
|
113
|
+
(Trigger / Actors / Steps / Outcome / Covers / Given-When-Then).
|
|
114
|
+
- **Scope Boundaries** — bullets, optionally split into "Deferred for
|
|
115
|
+
later" / "Outside this product's identity" sub-headings when the
|
|
116
|
+
positioning distinction matters.
|
|
117
|
+
|
|
118
|
+
The agent picks more elaborate or simpler shapes based on what each
|
|
119
|
+
specific artifact's content needs.
|
|
120
|
+
|
|
121
|
+
## Diagrams
|
|
122
|
+
|
|
123
|
+
When the section contract calls for a diagram (architecture, sequence,
|
|
124
|
+
flowchart, state machine, swim lane, data-flow), markdown renders it as
|
|
125
|
+
a fenced mermaid block:
|
|
126
|
+
|
|
127
|
+
```markdown
|
|
128
|
+
` ``mermaid
|
|
129
|
+
flowchart TB
|
|
130
|
+
A[Start] --> B{Decision}
|
|
131
|
+
B -->|yes| C[Action]
|
|
132
|
+
B -->|no| D[Other action]
|
|
133
|
+
` ``
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
(`TB` direction default — keeps diagrams narrow in source view and in
|
|
137
|
+
narrow rendered viewports.)
|
|
138
|
+
|
|
139
|
+
For quantitative comparisons (bar charts, scatter plots) markdown has no
|
|
140
|
+
native equivalent — use a table with the data and let prose or caption
|
|
141
|
+
carry the interpretation.
|
|
142
|
+
|
|
143
|
+
## Inline code and code blocks
|
|
144
|
+
|
|
145
|
+
- **Inline code** for identifiers (variable names, function names,
|
|
146
|
+
flag names, file paths, IDs that aren't section anchors).
|
|
147
|
+
- **Fenced code blocks** with language tag for code, shell commands,
|
|
148
|
+
API request/response samples. Always specify the language for syntax
|
|
149
|
+
highlighting and accessibility.
|
|
150
|
+
|
|
151
|
+
```markdown
|
|
152
|
+
The flag `--cdp-url` accepts a URL.
|
|
153
|
+
|
|
154
|
+
` ``bash
|
|
155
|
+
browser-use --cdp-url http://localhost:9222
|
|
156
|
+
` ``
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## No process exhaust
|
|
160
|
+
|
|
161
|
+
Engineering process metadata stays out of the artifact:
|
|
162
|
+
|
|
163
|
+
- No "captured at Phase X" notes
|
|
164
|
+
- No `## Next Steps` pointing to the next skill
|
|
165
|
+
- No italic provenance lines ("*Brainstorm completed 2026-05-13*")
|
|
166
|
+
- No engineering-flow shepherding ("Now read this file:", "Next, run that
|
|
167
|
+
command:")
|
|
168
|
+
|
|
169
|
+
This information belongs in commit messages, tool output, and agent
|
|
170
|
+
transcripts — not in the artifact a reader returns to weeks later.
|
|
171
|
+
|
|
172
|
+
## Frontmatter shape
|
|
173
|
+
|
|
174
|
+
Per-skill frontmatter fields are defined in each skill's section contract
|
|
175
|
+
(`references/brainstorm-sections.md` lists brainstorm frontmatter). Common rules:
|
|
176
|
+
|
|
177
|
+
- YAML at the top of the file, delimited by `---` on its own line above
|
|
178
|
+
and below.
|
|
179
|
+
- Field names in lowercase snake_case (`status`, `created_at`, not
|
|
180
|
+
`Status`, `CreatedAt`).
|
|
181
|
+
- **Status lifecycle is per-contract.** When the section contract
|
|
182
|
+
defines a `status` field with a lifecycle (plans use
|
|
183
|
+
`active → completed`, flipped by ce-work at shipping time via direct
|
|
184
|
+
YAML edit), it is editable in place. When the section contract does
|
|
185
|
+
not define a status lifecycle (brainstorms have no `active → completed`
|
|
186
|
+
flip — they are upstream of plans and referenced via the plan's
|
|
187
|
+
`origin:`), do not introduce one.
|
|
188
|
+
- Stable across artifact revisions — never rename or repurpose a field.
|
|
189
|
+
|
|
190
|
+
## Post-write audit
|
|
191
|
+
|
|
192
|
+
Before declaring the markdown file written, scan it for these common
|
|
193
|
+
slips:
|
|
194
|
+
|
|
195
|
+
- All stable IDs are plain-prefix format, not bolded.
|
|
196
|
+
- No HTML elements mixed in.
|
|
197
|
+
- All file paths are repo-relative.
|
|
198
|
+
- Horizontal rule separators between H2s (for Standard / Deep artifacts).
|
|
199
|
+
- No process exhaust (Phase X notes, Next Steps pointers, provenance
|
|
200
|
+
lines).
|
|
201
|
+
- Tables only where 5+ uniform-shape items justify them.
|
|
202
|
+
- Frontmatter has all the per-skill required fields with reasonable values.
|
|
@@ -24,6 +24,7 @@ The requirements document is for product definition and scope control. Do **not*
|
|
|
24
24
|
| Key Decisions | Include when material | Include when material | Include when material |
|
|
25
25
|
| Dependencies / Assumptions | Include when material | Include when material | Include when material |
|
|
26
26
|
| Outstanding Questions | Include when material | Include when material | Include when material |
|
|
27
|
+
| Sources / Research | Include when material | Include when material | Include when material |
|
|
27
28
|
|
|
28
29
|
## Summary vs Problem Frame discipline
|
|
29
30
|
|
|
@@ -48,6 +49,25 @@ In the truly-trivial Lightweight case where Summary is skipped (synthesis ≤ 2
|
|
|
48
49
|
|
|
49
50
|
**Acceptance Examples** — include when a requirement's behavior is hard to pin down without a concrete scenario. **Always include AEs covering behavioral-conditional requirements** — any requirement framed as "When X, Y" or "If X, Y" — regardless of tier. Conditional framing signals state-dependent behavior, which is exactly where prose alone leaves implicit ambiguity (e.g., "When `--quiet` is set, errors continue to surface" — does that include warnings? does it include binary-side errors? AE pins it down). Each example disambiguates one or more requirements via a `Covers: R-IDs` back-reference. Non-conditional requirements may be omitted unless ambiguity surfaces in review; the section is not exhaustive.
|
|
50
51
|
|
|
52
|
+
**Sources / Research** — surface research that orients the planner or justifies framing choices. The test: *"if I were the planner reading this cold, would this breadcrumb help me make better choices?"* Yes → surface (code locations, external docs, RFCs, constraints, prior plans — the category is inclusive, not enumerated). Process exhaust (reading the user's prompt, glancing at obvious files) → omit.
|
|
53
|
+
|
|
54
|
+
## Prose economy
|
|
55
|
+
|
|
56
|
+
A section can be material and still be written loosely — the failure mode is a material section padded into a wall of text where contradictions hide and a downstream agent loses the thread. Length that earns its place is fine; wordiness around that length is not.
|
|
57
|
+
|
|
58
|
+
Hold every kept section to these:
|
|
59
|
+
|
|
60
|
+
- **One idea per sentence.** A Summary is a handful of sentences, not one sentence with five semicolons and four parentheticals. If a sentence needs a second parenthetical to stay true, split it.
|
|
61
|
+
- **A requirement is one sentence of intent plus at most one qualifier.** When a requirement would specify two outcomes ("either A or B, planning decides"), state the intent and send the fork to Outstanding Questions — don't write both arms in full inside the requirement.
|
|
62
|
+
- **Cut hedges and intensifiers.** "Critically", "deliberately", "explicitly", "genuinely", "actually", "simply" carry nothing a downstream agent acts on.
|
|
63
|
+
- **Prefer the verb to the nominalization.** "Demote the grid", not "the demotion of the grid is the deliberate change in this brief".
|
|
64
|
+
|
|
65
|
+
Precision is not padding: keep domain terms, conditionals, and exact thresholds verbatim. Economy targets the connective tissue around them, never the precision itself.
|
|
66
|
+
|
|
67
|
+
**Resolve in place; don't stratify.** When a later decision answers a parked question or supersedes earlier text, rewrite or remove the original entry — don't append a separate "resolutions" layer that leaves the superseded text standing. Version control holds the history. Stacked question/resolution strata double the reading surface and hide which text is live.
|
|
68
|
+
|
|
69
|
+
**Named test, run before the doc is declared written:** could a reader find a contradiction in each section in one pass? A sentence carrying more than one parenthetical, or a requirement specifying two outcomes, fails the test — split it or defer it.
|
|
70
|
+
|
|
51
71
|
## Template
|
|
52
72
|
|
|
53
73
|
Use this template and omit sections per the matrix above. At Deep-product tier, keep the Scope Boundaries split. At other tiers, use the single Scope Boundaries list.
|