@fro.bot/systematic 2.25.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/package.json +1 -1
- 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-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/package.json
CHANGED
|
@@ -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.
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# Synthesis Summary
|
|
2
|
+
|
|
3
|
+
**Synthesis ≠ requirements doc.** The synthesis is NOT a preview, draft, or substitute for the requirements doc — it's the scope checkpoint that doc-write consumes as input. The requirements doc itself is written in Phase 3 from the confirmed synthesis. Both the synthesis and the requirements doc stay scope-only — implementation detail (file paths, code shapes, exact error wording) is downstream (ce-plan's job), not the requirements doc.
|
|
4
|
+
|
|
5
|
+
**Two-stage shape: internal draft, then chat-time scoping synthesis.** The synthesis is composed in two stages. Stage 1 is an internal three-bucket draft (Stated / Inferred / Out of scope) the agent uses to think comprehensively about scope. Stage 2 is the scoping synthesis presented to the user — shaped like what two product collaborators would confirm before writing a PRD, not like a comprehensive audit and not like a one-line preview. The user only sees stage 2. The internal draft still informs the doc body via the doc-shape routing below; it just doesn't reach the user verbatim. This split exists because the comprehensive audit shape produced too much detail for the user to actually weigh in on, even when the granularity rules were followed.
|
|
6
|
+
|
|
7
|
+
**Three-bucket structure is the internal draft, not the user-facing artifact.** It does its scope-thinking job during stage 1 and dissolves when Phase 3 writes the doc: Stated content informs Requirements, Inferred content informs Key Decisions, Out-of-scope content informs Scope Boundaries. The doc has no parallel `## Synthesis` section — only the scoping synthesis prose embeds, as `## Summary`. See "Doc shape after confirmation" below for the routing.
|
|
8
|
+
|
|
9
|
+
This content is loaded when Phase 2.5 fires — after Phase 2 (approaches chosen) and before Phase 3 (write requirements doc). The synthesis is the user's last opportunity to correct the agent's interpretation before the doc lands. It serves two purposes: synthesis confirmation (the user agreed to many individual things in dialogue but never saw the whole) and a transition checkpoint ("about to write a doc").
|
|
10
|
+
|
|
11
|
+
Fires for **all tiers** including Lightweight. Skip Phase 2.5 entirely on the Phase 0.1b non-software (universal-brainstorming) route.
|
|
12
|
+
|
|
13
|
+
**Headless / pipeline mode:** When invoked from a `disable-model-invocation` context (LFG, SLFG, or any automated pipeline), skip the chat-time stage entirely — there is no synchronous user to confirm with. Instead, route the internal three-bucket draft directly into the doc body sections per the "Doc shape after confirmation" table below, and route any Inferred bets to `## Assumptions` in the requirements doc so downstream review (document-review, ce-plan, human PR review) can scrutinize them explicitly. Do not present the scoping synthesis to chat; proceed directly to Phase 3 doc-write.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Stage 1: internal three-bucket draft
|
|
18
|
+
|
|
19
|
+
The internal draft is structured in three labeled buckets. Items may appear in two buckets when meaningfully both — flag the inclusion-then-exclusion as Inferred so the reasoning is captured.
|
|
20
|
+
|
|
21
|
+
- **Stated** — what the user said directly (in the original prompt, prior conversation, dialogue answers, approach selection in Phase 2). Items here have explicit user-language anchors.
|
|
22
|
+
- **Inferred** — what the agent assumed to fill gaps. Scope boundaries the user never explicitly named, success criteria extrapolated from intent, technical assumptions made because the brief interview didn't probe them. The Inferred bucket is the most actionable surface for correction — items here are the agent's bets.
|
|
23
|
+
- **Out of scope** — deliberately excluded items. Adjacent work the agent considered but decided not to include, refactors, nice-to-haves, future-work items. Making exclusions explicit lets the agent spot anything that should actually be included.
|
|
24
|
+
|
|
25
|
+
This draft is internal. Do not paste it verbatim into chat. Compose it as a thinking step, then derive stage 2 from it.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Stage 2: the chat-time scoping synthesis
|
|
30
|
+
|
|
31
|
+
The scoping synthesis is what the user actually sees. It reflects the dialogue's substance back so the user can pattern-match — long enough to serve a multi-turn conversation, short enough to be high-impact only. The reference shape is what two product collaborators would say to each other after a real discussion: "OK, so we're doing X, with Y trade-off, deferring Z, and one thing I want to double-check is W. Sound right?"
|
|
32
|
+
|
|
33
|
+
The scoping synthesis has up to four named sections, each **render-conditional** on having something to say. Empty sections are omitted, not padded.
|
|
34
|
+
|
|
35
|
+
1. **What we're building** (always present) — 1–3 sentences. The shape that emerged from dialogue, forward-looking, plain words. Not a transcript of "you said X."
|
|
36
|
+
2. **Key trade-offs** (conditional) — 1–3 bullets, each with a brief why. Render only when real trade-offs were made in dialogue.
|
|
37
|
+
3. **What's not in scope** (conditional) — 1–3 bullets, or fold into a single sentence. Render only when deferred items would surprise a downstream reader if absent.
|
|
38
|
+
4. **Call outs** (conditional) — 0–3 bullets. Residual forks the dialogue didn't resolve: post-dialogue consequences (combining user answers surfaced something they couldn't see during Q&A), silent agent inferences, or — in pre-loaded contexts with no dialogue — scope bets the user is seeing for the first time. **Not "questions the agent could have asked during Phase 1.3 but didn't"** — if a call-out reads like a missed dialogue question, Phase 1.3's integration check failed; flag the gap rather than padding the section.
|
|
39
|
+
|
|
40
|
+
Each section answers a different question:
|
|
41
|
+
|
|
42
|
+
- **What's being built?** → shape
|
|
43
|
+
- **What did we trade off?** → explicit choices made in conversation
|
|
44
|
+
- **What did we cut?** → deferred items a reader would expect to see acknowledged
|
|
45
|
+
- **Where might you redirect?** → residual forks: post-dialogue consequences, silent inferences, late-cycle bets
|
|
46
|
+
|
|
47
|
+
Then the confirmation: *"Confirm and I'll write the requirements doc next, drawing on our dialogue and this synthesis. Or tell me what to change."* The phrasing sets the expectation that confirm → doc-write, so the user knows what's about to happen and can interrupt without ambiguity.
|
|
48
|
+
|
|
49
|
+
### Path A vs Path B: the gate that fires the confirmation question
|
|
50
|
+
|
|
51
|
+
Phase 2.5 has two presentation modes, gated by **two signals**: (1) did any blocking question fire before Phase 2.5? AND (2) what tier did Phase 0.3 classify the scope as? Blocking questions include Phase 0.3 scope disambiguation, Phase 1.3 collaborative dialogue probes, and Phase 2 approach selection (when a menu fires). Internal classification, Phase 1.1 scan, and Phase 1.2 pressure test are not blocking questions — they don't count.
|
|
52
|
+
|
|
53
|
+
- **Path A — no blocking questions fired AND tier is Lightweight**: announce-mode. Emit "What we're building" prose only (no other sections, no confirmation question), then proceed to Phase 3 doc-write in the same turn. 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.
|
|
54
|
+
- **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. The confirmation question is unconditional even when zero call-outs survive the keep test.
|
|
55
|
+
|
|
56
|
+
**Why the tier guard exists.** Phase 0.2's fast path is designed for two very different cases — a tight one-line prompt 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 (e.g., handing off accumulated decisions from a prior session for a brainstorm doc backfill). Without a tier guard, both route to Path A, and the richly-loaded case gets a 1-sentence checkpoint for what may be 20+ items worth of scope. Tier-classifying Phase 0.3 distinguishes these cases — pre-loaded substance makes the tier Standard or Deep, which then routes to Path B and produces the full scoping synthesis the substance deserves. Do not simplify the gate back to a single "no questions fired" signal — that was a real defect that produced one-sentence syntheses on Deep-tier pre-loads.
|
|
57
|
+
|
|
58
|
+
Path A maps to the existing "announce-mode" concept on the Phase 0.2 fast path, but only when the substance genuinely warrants 1–3 sentences. Path B is the default for every other interactive invocation.
|
|
59
|
+
|
|
60
|
+
### Keep tests per section
|
|
61
|
+
|
|
62
|
+
Each conditional section has its own keep test. Sections are render-conditional — an empty section is omitted, not padded with weak items.
|
|
63
|
+
|
|
64
|
+
**Trade-offs keep test:** would the user be surprised if I didn't surface this acknowledgment? Real trade-offs are choices the user explicitly weighed alternatives on in dialogue, or structural choices the agent made that the user would expect to see named. Mechanical or inevitable choices (e.g., "uses the existing rule entity") fail the test and dissolve into the doc body without surfacing.
|
|
65
|
+
|
|
66
|
+
**Deferred keep test:** is a reasonable downstream reader likely to ask "why isn't X here?" Items the user explicitly deferred, or items adjacent enough that a reader will look for them. Mechanical excludes (e.g., "no rate limiting because it's not in scope") fail and stay in the internal draft only.
|
|
67
|
+
|
|
68
|
+
**Call-outs keep test (the affirmability test):** would the user need to read code to evaluate this? If yes, it is doc-body content — cut. If no, apply the keep test — one of the following must be true:
|
|
69
|
+
|
|
70
|
+
- **Real scope fork** — another reasonable agent might choose a different scope on this dimension (who the primary actor is, whether case X is in/out, in scope vs deferred)
|
|
71
|
+
- **Non-obvious scope inclusion** — a behavior the agent assumed is in scope that the user might want excluded
|
|
72
|
+
- **Non-obvious scope exclusion** — an item the agent moved to deferred that the user might want in scope
|
|
73
|
+
- **Cheap-now-expensive-later correction** — a scope bet that's cheap to fix now but expensive after the requirements doc lands and ce-plan consumes it
|
|
74
|
+
- **Non-obvious consequence of multi-turn answers** — a downstream effect of combining user-stated answers that the user is unlikely to have tracked through dialogue. Surfaced forward-looking ("X means Y for the doc"), not retrospectively ("you said X"). This category is the multi-turn-dialogue reason call-outs exist at all in ce-brainstorm; do not filter these as "already implied by Stated"
|
|
75
|
+
|
|
76
|
+
Cut anything that doesn't match a keep-test category, including:
|
|
77
|
+
|
|
78
|
+
- Mechanical items where there is no real alternative
|
|
79
|
+
- Implementation choices that will be settled during planning
|
|
80
|
+
- Items already implied by the scoping synthesis prose
|
|
81
|
+
- Re-statements of Q&A turns ("you said you wanted X") — that's transcript, not a call-out
|
|
82
|
+
- Re-statements of the Phase 2 approach the user already picked
|
|
83
|
+
|
|
84
|
+
### Total bullet budget across sections 2–4
|
|
85
|
+
|
|
86
|
+
The cap is heuristic, not law. The real discipline is each section's keep test on each candidate. Typical bounds by tier, counting bullets across Trade-offs + Deferred + Call outs combined:
|
|
87
|
+
|
|
88
|
+
| Tier | Typical total | Hard ceiling |
|
|
89
|
+
|---|---|---|
|
|
90
|
+
| Lightweight | 0–1 | 2 |
|
|
91
|
+
| Standard | 2–4 | 5 |
|
|
92
|
+
| Deep — feature | 3–5 | 7 |
|
|
93
|
+
| Deep — product | 4–7 | 9 |
|
|
94
|
+
|
|
95
|
+
**Above the hard ceiling, the synthesis is misshapen — do not raise the cap, re-cut at a higher level of abstraction.** Almost always, multiple bullets within a section are sub-decisions of one larger named decision. Collapse related bullets into a single one named at the level the user actually weighs in on.
|
|
96
|
+
|
|
97
|
+
A useful test: read the bullets aloud. If two or more sound like "and also" extensions of the same idea, they belong as one.
|
|
98
|
+
|
|
99
|
+
**Path A fires only for Lightweight tier with no blocking questions. Path B is the default for Standard, Deep-feature, and Deep-product regardless of question signal — substance earns the checkpoint, not interaction history.** Zero call-outs on Path B is normal for Lightweight, sometimes for Standard, almost never for Deep. If a Deep scoping synthesis produces zero call-outs after rich content (whether from dialogue or pre-loaded context), double-check the agent hasn't filtered consequence-class call-outs as "already implied."
|
|
100
|
+
|
|
101
|
+
### Detail level: conversational, not documentary
|
|
102
|
+
|
|
103
|
+
Each bullet is **1 line ideally, 2 lines maximum**. The reference shape is what two collaborators would say to each other in conversation, not what a requirements doc would say in its body. The synthesis is a forcing function for shape confirmation; the requirements doc is where the substance lives. If a bullet reads like a doc paragraph, it's wrong-shaped — the agent has compressed horizontally (fewer bullets) without compressing vertically (less per bullet), and the cap is meaningless if individual bullets bloat to fill it.
|
|
104
|
+
|
|
105
|
+
Two tests:
|
|
106
|
+
|
|
107
|
+
- **Read-aloud test**: would two product collaborators *say* this bullet, or would they *write* it in a spec? Say = right. Write = re-cut to a sentence or cut.
|
|
108
|
+
- **Single-sentence test**: can the bullet land in one sentence? If it needs semicolons stringing clauses or a list within the bullet, it's probably two decisions sharing a bullet — split (and re-cut for count) or cut to the higher-level one.
|
|
109
|
+
|
|
110
|
+
Bad vs good — detail level:
|
|
111
|
+
|
|
112
|
+
| Too detailed (wrong) | Conversational (right) |
|
|
113
|
+
|---|---|
|
|
114
|
+
| Per-channel mute scoped to notification rules; mute applies to all events through that rule including @mentions, DMs forwarded as notifications, and bot messages; persists 24h with extension | Per-channel over per-user — support team isn't a single user |
|
|
115
|
+
| Rule-delete loss path is silent and could surprise users who configured extended mutes; consider a confirmation dialog, soft-delete with state preservation, or a 7-day undo window | Rule-delete silently loses pause state — confirm no warning needed |
|
|
116
|
+
|
|
117
|
+
The "What we're building" prose obeys the same discipline: 1–3 sentences describing the shape, not an enumeration of requirements. If the prose lists what's in / what's out / what's how, it has become a doc preview — cut to shape only.
|
|
118
|
+
|
|
119
|
+
### Anti-patterns
|
|
120
|
+
|
|
121
|
+
Each anti-pattern below produces a bullet that fails its section's keep test, or a scoping synthesis that drifts back toward the comprehensive-audit failure mode.
|
|
122
|
+
|
|
123
|
+
- **Naming implementation detail in any bullet**: file paths, module names, exact JSON keys, HTTP status codes, error message wording, SQL syntax. The synthesis is scope-only; implementation is ce-plan's job. These granularity rules apply to every bullet in every section.
|
|
124
|
+
- **Re-stating a Q&A turn verbatim** ("you said you wanted X"): transcript, not scoping synthesis. Reframe forward-looking ("X means Y for the doc") or cut.
|
|
125
|
+
- **Re-stating the Phase 2 approach the user already picked**: the approach was chosen before Phase 2.5 — its mention belongs in one sentence of "What we're building," not as a call-out.
|
|
126
|
+
- **Padding a section to meet a bullet count**: render-conditional means empty is allowed. Omit the section entirely rather than fill it with weak items.
|
|
127
|
+
- **Pasting the three-bucket internal draft verbatim into chat**: that was the old shape and the volume problem it produced is why stage 2 exists. Compose internally, derive scoping synthesis sections, present compressed.
|
|
128
|
+
- **Floating questions adjacent to stage 2**: if a question genuinely cannot be defaulted, pause synthesis and resolve it before presenting. Pick the question shape that matches: a blocking multiple-choice tool when options are bounded and meaningfully distinct, open-ended when option sets would unintentionally influence the user's answer. Integrate the answer, then present the scoping synthesis. Never present the scoping synthesis with adjacent floating questions — that gives the user no clear resolution path.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Prompt templates
|
|
133
|
+
|
|
134
|
+
This is directional guidance — adjust phrasing to fit dialogue context. Open-ended feedback (no `question` menu). The justification is Interaction Rule 5(a) in SKILL.md — an option menu would unintentionally influence the user's feedback toward the parts the menu lists.
|
|
135
|
+
|
|
136
|
+
**Prose discipline for "What we're building" (required):** forward-looking (what *will* be in the doc), not retrospective (what's been discussed). Lead with the actual thing being built in plain words. No qualifiers ("comprehensive," "thoughtful," "substantive"). No re-stating dialogue context the user just lived through. If the work can't be said in 1–3 sentences without filler, the synthesis isn't ready yet.
|
|
137
|
+
|
|
138
|
+
### Path B template (questions were asked)
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
Based on our dialogue, here's the scope I'm proposing for the requirements doc:
|
|
142
|
+
|
|
143
|
+
**What we're building:** [1–3 sentences — the shape that emerged from dialogue, forward-looking, plain words]
|
|
144
|
+
|
|
145
|
+
**Key trade-offs:** [render only when real trade-offs exist]
|
|
146
|
+
- [explicit choice + brief why]
|
|
147
|
+
- [explicit choice + brief why]
|
|
148
|
+
|
|
149
|
+
**What's not in scope:** [render only when deferred items would surprise a reader]
|
|
150
|
+
- [deferred item]
|
|
151
|
+
- [deferred item]
|
|
152
|
+
|
|
153
|
+
**Call outs:** [render only when one or more survived the keep test]
|
|
154
|
+
- [scope-level fork or non-obvious consequence the user can affirm or redirect]
|
|
155
|
+
- [same]
|
|
156
|
+
|
|
157
|
+
Confirm and I'll write the requirements doc next, drawing on our dialogue and this synthesis. Or tell me what to change — even something I captured correctly earlier is fair game to revise (you may have changed your mind or want to correct an unstated assumption).
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Path A template (no questions were asked — typically Phase 0.2 short-circuit)
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
Proposing: [1–3 line shape — what the doc will say in plain words].
|
|
164
|
+
|
|
165
|
+
No open decisions — writing the requirements doc now. Interrupt if the shape is wrong.
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Proceed to Phase 3 doc-write in the same turn — do NOT end the turn waiting for an acknowledgment. The "interrupt if wrong" affordance means the user can revise after the doc lands, not before. Lightweight Path A docs are short, so post-hoc revision is cheap.
|
|
169
|
+
|
|
170
|
+
### Worked example: compression from internal draft to scoping synthesis (Standard tier)
|
|
171
|
+
|
|
172
|
+
For a notification-mute feature where the internal draft had 5 Stated items, 4 Inferred items, and 3 Out-of-scope items, the compressed Stage 2 looks like:
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
Based on our dialogue, here's the scope I'm proposing for the requirements doc:
|
|
176
|
+
|
|
177
|
+
**What we're building:** Per-channel mute on notification rules, with a 24h preset for the support team's 3 AM ping problem. Mute lives on the rule itself and survives rule edits.
|
|
178
|
+
|
|
179
|
+
**Key trade-offs:**
|
|
180
|
+
- Per-channel over per-user — support team isn't a single user
|
|
181
|
+
- Mute on the rule, not a separate entity — pause state survives edits
|
|
182
|
+
|
|
183
|
+
**What's not in scope:**
|
|
184
|
+
- Presence-based mute and quiet-hours schedules — deferred for later
|
|
185
|
+
- Cross-rule mute groups — would force a rule-grouping concept we don't have
|
|
186
|
+
|
|
187
|
+
**Call outs:**
|
|
188
|
+
- Rule-delete silently loses pause state — confirm no warning needed
|
|
189
|
+
|
|
190
|
+
Confirm and I'll write the requirements doc next, drawing on our dialogue and this synthesis. Or tell me what to change.
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
What got cut from the 12-item internal draft and why:
|
|
194
|
+
|
|
195
|
+
- Stated items already covered by the "What we're building" prose dissolved silently
|
|
196
|
+
- "Use existing rule entity" — mechanical, no real trade-off
|
|
197
|
+
- "Use Postgres for persistence" — implementation detail (ce-plan's job), failed granularity rules
|
|
198
|
+
- One Out-of-scope item ("no rate limiting") — mechanical exclude, no reader would ask about it
|
|
199
|
+
- Three Inferred items rolled into the Trade-offs section as the explicit choices behind them
|
|
200
|
+
|
|
201
|
+
What survived: a scoping synthesis with substance proportional to the dialogue, bounded at the Standard ceiling of 5 bullets across the three conditional sections — any more would have triggered a re-cut at higher abstraction.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Pre-flight re-review
|
|
206
|
+
|
|
207
|
+
Before emitting the scoping synthesis, re-read the draft as a user would read it. Two failure modes to catch:
|
|
208
|
+
|
|
209
|
+
- **The scoping synthesis reads like a requirements-doc preview.** Prose enumerates what's in/out, bullets are documentary instead of conversational. The synthesis is a shape-confirmation checkpoint, not a doc preview — if it reads as preview, Phase 2.5 and Phase 3 have collapsed into one step. Revise to conversational shape, or accept that the requirements doc itself will contain the detail and the synthesis should be lighter.
|
|
210
|
+
- **The bullet count fits the cap but each bullet is over-detailed.** Hitting 5 bullets in Standard while each bullet is a paragraph means the agent met the count cap by compressing horizontally (fewer bullets) without compressing vertically (less per bullet). The cap is meaningless if individual bullets bloat to fill it. Re-cut to sentence-level bullets.
|
|
211
|
+
|
|
212
|
+
This is one mental act — re-read as the user — not a checklist to mechanically run. The forcing function is putting yourself in the user's reading shoes briefly, with explicit attention to detail level alongside the keep tests. Revise before emitting if either failure mode fires.
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Re-present after revision; write only on confirm
|
|
217
|
+
|
|
218
|
+
A revision is not a confirmation. After any user revision (even a trivially-understood swap like "move deferred item X back into scope"), integrate the change, re-present the revised scoping synthesis with the change reflected, and wait for explicit confirmation before writing the doc. The loop is:
|
|
219
|
+
|
|
220
|
+
1. Present scoping synthesis → user responds
|
|
221
|
+
2. User confirms → write the doc
|
|
222
|
+
3. User revises → integrate, re-present revised scoping synthesis, return to step 1
|
|
223
|
+
|
|
224
|
+
Doc-write fires only on explicit confirm or after the soft-cut blocking question's "proceed" option (see below). The confirmation step is what makes the scoping synthesis **confirmed** rather than "agent's last proposal" — never write immediately after a revision, even when the revision is small enough that the agent feels it understood.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Soft-cut on circularity (not iteration count)
|
|
229
|
+
|
|
230
|
+
Track which scoping synthesis items the user touched per round. The soft-cut blocking question fires **only when the same item is revised twice** (or a third-round revision targets an item already revised in round two). New-item revisions across rounds proceed without limit — revising different aspects of a wrong scoping synthesis is exactly what the mechanism should support.
|
|
231
|
+
|
|
232
|
+
**Identity across rounds is by decision dimension, not surface wording or section.** A revision may cause stage 2 to re-derive — the same underlying decision can come back rephrased, merged with another bullet, or moved to a different section (e.g., what was a Trade-off in round one becomes a Call-out in round two after the user pushed back). "Same item" means the same underlying decision regardless of which section currently holds it. When a re-cut collapses multiple prior bullets into one, the new combined bullet inherits the "touched" status of any of its constituents — soft-cut fires if any underlying decision was already revised once before.
|
|
233
|
+
|
|
234
|
+
When the soft-cut fires, use the platform's blocking question tool (`question` in OpenCode) with two options:
|
|
235
|
+
|
|
236
|
+
- `Proceed and write the requirements doc`
|
|
237
|
+
- `Hold off — keep discussing before the doc`
|
|
238
|
+
|
|
239
|
+
Fall back to a numbered list in chat only when no blocking tool exists or the call errors. Never silently skip.
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Self-redirect
|
|
244
|
+
|
|
245
|
+
If the user response indicates they're in the wrong skill or want a different workflow (e.g., "this is too small, just ce:work it" or "this needs more thought, let me brainstorm differently"):
|
|
246
|
+
|
|
247
|
+
- Stop ce-brainstorm
|
|
248
|
+
- Suggest the alternative skill the user appears to want (e.g., `ce:work`, `ce:debug`)
|
|
249
|
+
- Offer to load it in-session
|
|
250
|
+
- Do not push back or argue — the user's redirect signal is the deliberate choice
|
|
251
|
+
|
|
252
|
+
This support exists because the scoping synthesis is an honest checkpoint. If the user discovers the skill choice was wrong by reading the scoping synthesis, redirecting is the right move.
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Doc shape after confirmation
|
|
257
|
+
|
|
258
|
+
After user confirmation (or after the soft-cut decision proceeds), Phase 3 writes the requirements doc. The internal draft does NOT carry into the doc as a `## Synthesis` section. Only the "What we're building" prose embeds, as `## Summary` at the top. Internal-draft content dissolves into the doc's body sections:
|
|
259
|
+
|
|
260
|
+
| Internal-draft element | Where it goes in the doc |
|
|
261
|
+
|---|---|
|
|
262
|
+
| "What we're building" prose | `## Summary` (1–3 lines, forward-looking, what's proposed) |
|
|
263
|
+
| Stated bullets | `## Requirements` (numbered R-IDs, full detail) and where relevant `## Problem Frame` for narrative context |
|
|
264
|
+
| Inferred bullets | `## Key Decisions` (with rationale) — bets the user accepted in dialogue become decisions in the doc. |
|
|
265
|
+
| Out-of-scope bullets | `## Scope Boundaries` |
|
|
266
|
+
|
|
267
|
+
The chat-time Trade-offs section dissolves into `## Key Decisions` (the explicit choices acknowledged in chat become documented decisions). The chat-time What's-not-in-scope section dissolves into `## Scope Boundaries`.
|
|
268
|
+
|
|
269
|
+
**Headless / pipeline mode:** Inferred bets route to `## Assumptions` instead of `## Key Decisions` — they were not user-confirmed in chat and should be surfaced explicitly for downstream review. See `references/requirements-capture.md` for the `## Assumptions` section contract.
|
|
270
|
+
|
|
271
|
+
No italic capture-context note (e.g., "Captured at Phase 2.5..."). It would leak engineering process into an artifact whose readers do not need that signal.
|
|
272
|
+
|
|
273
|
+
The doc's `## Summary` and `## Problem Frame` must serve distinct purposes — see `references/brainstorm-sections.md` "Discipline: Summary vs Problem Frame" for the rules.
|
|
@@ -57,7 +57,7 @@ When the conversation has enough material to narrow — reflect back what you've
|
|
|
57
57
|
|
|
58
58
|
**Question:** "Brainstorm wrapped. What would you like to do next?"
|
|
59
59
|
|
|
60
|
-
- **Create a plan** → hand off to
|
|
60
|
+
- **Create a plan** → hand off to `ce:plan` with the decided goal and constraints
|
|
61
61
|
- **Save summary to disk** → write the summary as a markdown file in the current working directory
|
|
62
62
|
- **Open in Proof (web app) — review and comment to iterate with the agent** → load the `ce-proof` skill to open the doc in Every's Proof editor, iterate with the agent via comments, or copy a link to share with others
|
|
63
63
|
- **Done** → the conversation was the value, no artifact needed
|