@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
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Visual Communication in Requirements Documents
|
|
2
|
+
|
|
3
|
+
Visual aids are conditional on content patterns, not on document depth classification — a Lightweight requirements doc about a complex multi-surface feature may warrant a diagram; a Deep doc about a straightforward change may not.
|
|
4
|
+
|
|
5
|
+
**When to include:**
|
|
6
|
+
|
|
7
|
+
| Requirements describe... | Visual aid | Placement |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| 4+ requirements with non-linear relationships (dependencies, groupings, fan-in/fan-out) | Mermaid dependency or grouping diagram | Before or after the Requirements heading |
|
|
10
|
+
| 3+ interacting system surfaces or cross-layer effects | Mermaid interaction or component diagram | Within the relevant section |
|
|
11
|
+
| 3+ behavioral modes, states, or variants being compared | Markdown comparison table | Within the relevant section |
|
|
12
|
+
| 3+ alternatives or trade-offs under consideration | Markdown comparison table | Within the relevant section |
|
|
13
|
+
|
|
14
|
+
**When to skip:**
|
|
15
|
+
- The requirements are 3 or fewer items in a straightforward list — prose bullets are sufficient
|
|
16
|
+
- Prose already communicates the relationships clearly
|
|
17
|
+
- The visual would duplicate what surrounding prose already shows
|
|
18
|
+
- The visual describes code-level detail (specific method names, SQL columns, API field lists)
|
|
19
|
+
|
|
20
|
+
**Format selection:**
|
|
21
|
+
- **Mermaid** (default) for dependency graphs and interaction diagrams — 5–15 nodes, no in-box annotations, standard flowchart shapes. Use `TB` (top-to-bottom) direction so diagrams stay narrow in both rendered and source form. Source should be readable as fallback in diff views and terminals.
|
|
22
|
+
- **ASCII/box-drawing diagrams** for annotated flows that need rich in-box content — decision logic branches, multi-column spatial arrangements. More expressive than mermaid when the diagram's value comes from annotations within nodes. Follow 80-column max for code blocks, use vertical stacking.
|
|
23
|
+
- **Markdown tables** for mode/variant comparisons and alternative comparisons.
|
|
24
|
+
- Keep diagrams proportionate to the document. A simple 4-requirement grouping gets a simple diagram. A complex dependency graph with fan-out and fan-in may need 10–15 nodes — that is fine if every node earns its place.
|
|
25
|
+
- Place inline at the point of relevance, not in a separate section.
|
|
26
|
+
- Requirements-structure level only — groupings, surface interactions, mode comparisons. Not implementation architecture, data schemas, or code structure.
|
|
27
|
+
- Prose is authoritative: when a visual aid and its surrounding prose disagree, the prose governs.
|
|
28
|
+
|
|
29
|
+
After generating a visual aid, verify it accurately represents the requirements it illustrates — correct relationships, no missing surfaces, no merged requirements.
|
package/skills/ce-plan/SKILL.md
CHANGED
|
@@ -165,6 +165,55 @@ Classify the work into one of these plan depths:
|
|
|
165
165
|
|
|
166
166
|
If depth is unclear, ask one targeted question and then continue.
|
|
167
167
|
|
|
168
|
+
#### 0.7 Solo-Mode Scoping Synthesis
|
|
169
|
+
|
|
170
|
+
Surface call-outs to the user — the specific forks in scope or approach where user input materially changes the plan — so scope can be corrected **before Phase 1 research is spent**. Sub-agent dispatch (systematic:research:repo-research-analyst, systematic:research:learnings-researcher, etc.) is the expensive next step this phase guards against wasted effort on.
|
|
171
|
+
|
|
172
|
+
Fires **only in solo invocation** — when Phase 0.2 found no upstream brainstorm doc AND Phase 0.4 stayed in ce:plan (did not route to ce:debug, ce:work, or universal-planning) AND Phase 0.5 cleared (no unresolved blockers) AND not on Phase 0.1 fast paths (resume normal, deepen-intent). Each guard is an explicit conditional. Skip Phase 0.7 entirely when any guard fails — brainstorm-sourced invocations defer to Phase 5.1.5 instead.
|
|
173
|
+
|
|
174
|
+
**Read `references/synthesis-summary.md` before composing the scoping synthesis.** It carries the affirmability test, keep-test criteria, detail test, summary shape budgets, granularity rules, anti-patterns, revision-vs-confirmation discipline, doc-shape routing, soft-cut behavior, self-redirect support, the worked PII compression example, and full headless-mode routing — all required for a well-shaped synthesis.
|
|
175
|
+
|
|
176
|
+
**Required gate output — do not skip; silent proceeding is not allowed.** Compose an internal three-bucket scope draft (Stated / Inferred / Out of scope — internal thinking that feeds plan-body routing at Phase 5.2, not the chat output below). Derive call-outs (specific forks where user input materially changes the plan), then emit one of the two literal templates below in chat before continuing to Phase 1.
|
|
177
|
+
|
|
178
|
+
**Synthesis is pre-plan-write.** The agent does NOT yet know how plan-write will sequence the work. Do not claim PR count ("one PR"), commit/branch shape, effort or time estimates, Implementation Unit boundaries, or exact file paths in the synthesis. The synthesis surfaces decisions knowable at THIS point — for the solo variant, that's the user's request plus the Phase 0.4 bootstrap dialogue plus the agent's own internal three-bucket draft. Phase 1 research has not happened yet and there is no upstream brainstorm; do not claim grounding from either. Plan-write produces the rest. This rule holds even when the agent has formed plan-write opinions earlier in the session — those stay internal until plan-write.
|
|
179
|
+
|
|
180
|
+
**Summary shape:** the summary is a **scope claim** — what the plan will target, what it will not — at affirm-or-redirect level. NOT an enumeration of Implementation Units. Form is prose, bullets, or mix; tier budgets are **ceilings, not targets** (Lightweight 1-3 lines; Standard up to 3-5 lines or 2-4 bullets; Deep up to 4-6 lines or 3-6 bullets). 1-2 lines per bullet, conversational not documentary. Less is correct when there isn't more to say. See `references/synthesis-summary.md` for keep test, detail test, and source-vocabulary discipline.
|
|
181
|
+
|
|
182
|
+
**Do NOT enumerate the touch surface.** Sentences like "The touch surface is...", "This plan touches...", "The implementation reaches into..." are plan-pitch leaks. File paths, module names, directory introductions, and per-file change descriptions belong in the plan body (Implementation Units at Phase 5.2), not the synthesis. The synthesis names *what* the plan targets, not *where* the code lives.
|
|
183
|
+
|
|
184
|
+
**Pre-emit scans.** Before emitting the synthesis, scan the output:
|
|
185
|
+
- Bare ID references (`AE\d+`, `R\d+`, `F\d+`, `A\d+`, `U\d+`) → replace with plain names.
|
|
186
|
+
- File paths (`path/like.md`, `path/like.py`, etc.) → cut unless the path IS the topic of an explicit fork in the call-outs.
|
|
187
|
+
|
|
188
|
+
**Tier guard on auto-proceed:** the auto-proceed path (announce without waiting for confirmation) fires only when plan depth is **Lightweight AND zero call-outs survive**. Standard and Deep plans always fire the confirmation gate, even with zero call-outs — substance earns the checkpoint, not interaction history.
|
|
189
|
+
|
|
190
|
+
**Confirmation template (Standard/Deep regardless of call-out count, or any tier with one or more call-outs surviving):**
|
|
191
|
+
|
|
192
|
+
````text
|
|
193
|
+
Based on your request and our brief discussion, here's the scope I'm proposing to plan against:
|
|
194
|
+
|
|
195
|
+
[scope claim — what the plan will target, what it will not; affirm-or-redirect level; NOT an enumeration of Implementation Units]
|
|
196
|
+
|
|
197
|
+
**Call outs:** (omit this header when zero forks survived the keep test)
|
|
198
|
+
- [decision-level fork in 1-2 lines: name the choice and optional one-clause trade-off in parens. NO multi-sentence rationale, NO "my default is X" pitch]
|
|
199
|
+
|
|
200
|
+
Confirm and I'll proceed to research, drawing on this scope. (You can also redirect to ce:brainstorm if this is bigger than you initially thought — I'll stop here and load it for you.)
|
|
201
|
+
````
|
|
202
|
+
|
|
203
|
+
Wait for user confirmation before continuing to Phase 1.
|
|
204
|
+
|
|
205
|
+
**Auto-proceed template (Lightweight with zero call-outs only):**
|
|
206
|
+
|
|
207
|
+
````text
|
|
208
|
+
Planning: [1-3 line scope claim]
|
|
209
|
+
|
|
210
|
+
No open decisions to weigh in on — proceeding to research. Interrupt if I have the scope wrong.
|
|
211
|
+
````
|
|
212
|
+
|
|
213
|
+
Then continue to Phase 1 without a blocking question.
|
|
214
|
+
|
|
215
|
+
**Headless mode**: internal draft is composed but stage 2 (chat-time call-outs) is skipped — no synchronous user to confirm to. Continue to Phase 1 research as normal. At plan-write time (Phase 5.2), Inferred bets from the internal draft route to a `## Assumptions` section in the plan instead of Key Technical Decisions. See `references/synthesis-summary.md` Headless mode for the full routing.
|
|
216
|
+
|
|
168
217
|
### Phase 1: Gather Context
|
|
169
218
|
|
|
170
219
|
#### 1.1 Local Research (Always Runs)
|
|
@@ -406,6 +455,12 @@ Examples:
|
|
|
406
455
|
- Runtime behavior that depends on seeing actual test failures
|
|
407
456
|
- Refactors that may become unnecessary once implementation starts
|
|
408
457
|
|
|
458
|
+
#### 3.7 Anti-Expansion: Tangential Cleanup and Scope Creep Go to Deferred
|
|
459
|
+
|
|
460
|
+
Distinct from 3.6 (which is about *unknowns* at plan time): 3.7 is about *known but tangential* work that the agent notices while planning but that falls outside the user's confirmed scope. When research surfaces an adjacent refactor, a "while we're here" cleanup, or a scope-adjacent nice-to-have ("we could also add rate limiting"), route it to the existing `### Deferred to Separate Tasks` subsection in Scope Boundaries (see Core Plan Template), not into active Implementation Units.
|
|
461
|
+
|
|
462
|
+
This reinforces the synthesis discipline established at Phase 0.7 / Phase 5.1.5 — the user's confirmed scope is what the active plan executes; everything else is deferred. Does NOT impose architectural bias on extend-vs-invent decisions within confirmed scope — that judgment stays with the agent (and is surfaced via the Phase 5.1.5 synthesis when material). The user's explicit ask overrides this default — if the user explicitly requested a refactor, it's in-scope, not deferred.
|
|
463
|
+
|
|
409
464
|
### Phase 4: Write the Plan
|
|
410
465
|
|
|
411
466
|
Use one planning philosophy across all depths. Change the amount of detail, not the boundary between planning and execution.
|
|
@@ -636,6 +691,19 @@ For larger `Deep` plans, extend the core template only when useful with sections
|
|
|
636
691
|
- Do not expand implementation units into micro-step `RED/GREEN/REFACTOR` instructions
|
|
637
692
|
- Do not pretend an execution-time question is settled just to make the plan look complete
|
|
638
693
|
|
|
694
|
+
#### 4.3b Section Contract and Rendering
|
|
695
|
+
|
|
696
|
+
Compose the plan using two paired references:
|
|
697
|
+
|
|
698
|
+
- `references/plan-sections.md` — the section contract. Describes what the plan contains: the outcome the plan must enable for downstream consumers, the hard floor (Summary, Problem Frame, Requirements, KTDs, Implementation Units), the include-when-material catalog (HTD, Scope Boundaries, Open Questions, System-Wide Impact, Risks & Dependencies, Acceptance Examples, Documentation/Operational Notes, Sources & Research), the agency-driven escape hatch (introduce new sections when content warrants), and the ID/content rules.
|
|
699
|
+
- `references/markdown-rendering.md` — how to present the sections in markdown (table-vs-prose by content shape, ID prefix format, diagram rendering, etc.).
|
|
700
|
+
|
|
701
|
+
The section catalog is the same regardless of plan depth. Format-specific principles live in the rendering reference. The Core Plan Template above (Section 4.2) is the canonical content authority — `plan-sections.md` is a rendering/ordering layer that describes how sections present, not which sections exist.
|
|
702
|
+
|
|
703
|
+
Omit "include when material" sections that don't carry information for this specific plan. Filling a section with placeholder prose is worse than omitting it.
|
|
704
|
+
|
|
705
|
+
**Write tight.** A section being material is not license to pad it. Hold every kept section to the prose-economy discipline in `references/plan-sections.md`: one idea per sentence, a requirement or unit is intent plus at most one qualifier, defer forks to Open Questions rather than specifying both arms, resolve superseded text in place rather than stacking strata. Before declaring the plan written, run the named test there — could the implementer find a contradiction in each section in one pass?
|
|
706
|
+
|
|
639
707
|
#### 4.4 Visual Communication in Plan Documents
|
|
640
708
|
|
|
641
709
|
When the plan contains 4+ implementation units with non-linear dependencies, 3+ interacting surfaces in System-Wide Impact, 3+ behavioral modes/variants in Overview or Problem Frame, or 3+ interacting decisions in Key Technical Decisions or alternatives in Alternative Approaches, read `references/visual-communication.md` for diagram and table guidance. This covers plan-structure visuals (dependency graphs, interaction diagrams, comparison tables) — not solution-design diagrams, which are covered in Section 3.4.
|
|
@@ -666,6 +734,58 @@ If the plan originated from a requirements document, re-read that document and v
|
|
|
666
734
|
- Blocking questions were either resolved, explicitly assumed, or sent back to `ce:brainstorm`
|
|
667
735
|
- Every section of the origin document is addressed in the plan — scan each section to confirm nothing was silently dropped
|
|
668
736
|
|
|
737
|
+
#### 5.1.5 Brainstorm-Sourced Scoping Synthesis
|
|
738
|
+
|
|
739
|
+
Surface plan-time call-outs to the user before Phase 5.2 commits the plan to disk — the latest cheap moment to catch plan-time scope errors. The brainstorm already validated WHAT to build; this phase surfaces HOW the plan will execute on the forks that matter.
|
|
740
|
+
|
|
741
|
+
Fires **only when the plan was sourced from an upstream brainstorm doc** (Phase 0.2 found a `*-requirements.md` match) AND not on Phase 0.1 fast paths (resume normal, deepen-intent). Skip Phase 5.1.5 in solo invocation — solo plans handled their synthesis in Phase 0.7.
|
|
742
|
+
|
|
743
|
+
**Read `references/synthesis-summary.md` before composing the scoping synthesis.** It carries the affirmability test, keep-test criteria, detail test, summary shape budgets, granularity rules, anti-patterns, revision-vs-confirmation discipline, doc-body reading rules, doc-shape routing, soft-cut behavior, self-redirect support, the worked PII compression example, and full headless-mode routing — all required for a well-shaped synthesis.
|
|
744
|
+
|
|
745
|
+
**Required gate output — do not skip; silent proceeding is not allowed.** Compose an internal three-bucket scope draft (Stated / Inferred / Out of scope — internal thinking that feeds plan-body routing at Phase 5.2, not the chat output below). Derive call-outs (specific forks where user input materially changes the plan), then emit one of the two literal templates below in chat before continuing to Phase 5.2.
|
|
746
|
+
|
|
747
|
+
**Synthesis is pre-plan-write.** The agent does NOT yet know how plan-write will sequence the work. Do not claim PR count ("one PR"), commit/branch shape, effort or time estimates, Implementation Unit boundaries, or exact file paths in the synthesis. The synthesis surfaces decisions knowable at THIS point (brainstorm + research + agent posture); plan-write produces the rest. This rule holds even when the agent has formed plan-write opinions earlier in the session — those stay internal until plan-write.
|
|
748
|
+
|
|
749
|
+
**Summary shape: two paragraphs.**
|
|
750
|
+
|
|
751
|
+
1. **Brainstorm-scope restatement** (1-2 sentences, prose). Restates the brainstorm's scope as orientation, in the brainstorm's own vocabulary. NOT an enumeration of Implementation Units, restated constraints, or listed acceptance examples — the user wrote those.
|
|
752
|
+
2. **Plan-specific scoping decisions** (prose, or bullets when multi-faceted). Scope-level commitments the agent made that the brainstorm did not: full brainstorm coverage vs. narrowed subset; adjacent refactors pulled in vs. held out; test scope at scenario level. Each item must be affirmable by the user without reading code. Form follows substance; tier budgets are **ceilings, not targets** (Lightweight 1-3 lines; Standard up to 3-5 lines or 2-4 bullets; Deep up to 4-6 lines or 3-6 bullets). 1-2 lines per bullet. Less is correct when there isn't more to say. See `references/synthesis-summary.md` for keep test, detail test, and source-vocabulary discipline.
|
|
753
|
+
|
|
754
|
+
**Do NOT enumerate the touch surface.** Sentences like "The touch surface is...", "This plan touches...", "The implementation reaches into...", "Files modified include..." are plan-pitch leaks. File paths, module names, directory introductions, and per-file change descriptions belong in the plan body (Implementation Units at Phase 5.2), not the synthesis. The synthesis names *what* the plan targets, not *where* the code lives.
|
|
755
|
+
|
|
756
|
+
**Pre-emit scans.** Before emitting the synthesis, scan the output:
|
|
757
|
+
- Bare ID references (`AE\d+`, `R\d+`, `F\d+`, `A\d+`, `U\d+`) → replace with plain names.
|
|
758
|
+
- File paths (`path/like.md`, `path/like.py`, etc.) → cut unless the path IS the topic of an explicit fork in the call-outs.
|
|
759
|
+
|
|
760
|
+
**Tier guard on auto-proceed:** the auto-proceed path (announce without waiting for confirmation) fires only when plan depth is **Lightweight AND zero call-outs survive**. Standard and Deep plans always fire the confirmation gate, even with zero call-outs — substance earns the checkpoint, not interaction history.
|
|
761
|
+
|
|
762
|
+
**Confirmation template (Standard/Deep regardless of call-out count, or any tier with one or more call-outs surviving):**
|
|
763
|
+
|
|
764
|
+
````text
|
|
765
|
+
The brainstorm scopes [1-2 sentence restatement in the brainstorm's vocabulary as orientation; NOT an enumeration of Implementation Units, constraints, or acceptance examples].
|
|
766
|
+
|
|
767
|
+
This plan [plan-specific scoping decisions: full-brainstorm coverage vs. narrowed subset; adjacent refactors in or out; test scope at scenario level. NOT PR count, sequencing, IU lists, or file paths].
|
|
768
|
+
|
|
769
|
+
**Call outs:** (omit this header when zero forks survived the keep test)
|
|
770
|
+
- [plan-time fork in 1-2 lines: name the choice and optional one-clause trade-off in parens. NO multi-sentence rationale, NO "my default is X" pitch]
|
|
771
|
+
|
|
772
|
+
Confirm and I'll write the plan next, drawing on the brainstorm, research, and this synthesis.
|
|
773
|
+
````
|
|
774
|
+
|
|
775
|
+
Wait for user confirmation before continuing to Phase 5.2.
|
|
776
|
+
|
|
777
|
+
**Auto-proceed template (Lightweight with zero call-outs only):**
|
|
778
|
+
|
|
779
|
+
````text
|
|
780
|
+
Planning [brief brainstorm-scope restatement] — [plan-specific shape in one clause].
|
|
781
|
+
|
|
782
|
+
No open decisions to weigh in on — proceeding to plan-write. Interrupt if I have the scope wrong.
|
|
783
|
+
````
|
|
784
|
+
|
|
785
|
+
Then continue to Phase 5.2 without a blocking question.
|
|
786
|
+
|
|
787
|
+
**Headless mode**: internal draft is composed but stage 2 (chat-time call-outs) is skipped — no synchronous user to confirm to. Proceed to Phase 5.2 plan-write. Inferred bets from the internal draft route to a `## Assumptions` section in the plan instead of Key Technical Decisions. See `references/synthesis-summary.md` Headless mode for the full routing.
|
|
788
|
+
|
|
669
789
|
#### 5.2 Write Plan File
|
|
670
790
|
|
|
671
791
|
**REQUIRED: Write the plan file to disk before presenting any options.**
|
|
@@ -0,0 +1,203 @@
|
|
|
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/plan-sections.md`)
|
|
7
|
+
that describes *what* the artifact contains. This reference describes
|
|
8
|
+
*how* markdown specifically presents it. The same content rendered by
|
|
9
|
+
different skills shares the same markdown principles.
|
|
10
|
+
|
|
11
|
+
## Hard invariants
|
|
12
|
+
|
|
13
|
+
These hold regardless of which skill produced the artifact.
|
|
14
|
+
|
|
15
|
+
- **YAML frontmatter at the top of the file.** Standard `---` delimited block
|
|
16
|
+
containing the artifact's stable metadata (title, status, date, type, etc.
|
|
17
|
+
— exact fields are per-skill, defined in the section contract). Editable
|
|
18
|
+
in place; tools and agents that do status flips (`active → completed`)
|
|
19
|
+
update the YAML directly.
|
|
20
|
+
- **ASCII identifiers in anchors.** Markdown headings auto-generate anchors
|
|
21
|
+
from the heading text. Keep headings ASCII so anchors are predictable
|
|
22
|
+
(`#implementation-units`, not `#implementación-units`).
|
|
23
|
+
- **Repo-relative paths for file references.** Always. Never absolute paths
|
|
24
|
+
— they break portability across machines, worktrees, teammates.
|
|
25
|
+
- **No HTML mixed in.** Keep the markdown pure. No `<div>`, no `<details>`,
|
|
26
|
+
no inline `<style>`. Markdown stays markdown.
|
|
27
|
+
|
|
28
|
+
## Format principles
|
|
29
|
+
|
|
30
|
+
These shape what "good" markdown looks like; the agent applies them per
|
|
31
|
+
artifact based on content shape.
|
|
32
|
+
|
|
33
|
+
### ID prefix format
|
|
34
|
+
|
|
35
|
+
Stable IDs (R, U, A, F, AE, KTD) appear as plain prefixes at the start of
|
|
36
|
+
the bullet or heading — do NOT bold the prefix. The prefix is visually
|
|
37
|
+
distinctive on its own; bolding it inflates visual noise.
|
|
38
|
+
|
|
39
|
+
```markdown
|
|
40
|
+
- R1. The plan returns paginated sessions. ← right
|
|
41
|
+
- **R1.** The plan returns paginated sessions. ← wrong (bolded prefix)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Same applies to unit headings: `### U1. Cloak detection in preflight contract`.
|
|
45
|
+
|
|
46
|
+
### Content shape: prose vs bullets vs tables
|
|
47
|
+
|
|
48
|
+
The same content can be rendered three ways; the agent picks per content
|
|
49
|
+
shape, not by template default.
|
|
50
|
+
|
|
51
|
+
- **Prose** when the content has narrative flow (motivation, decision
|
|
52
|
+
rationale, problem framing). Bullets fragment narrative into
|
|
53
|
+
disconnected pieces.
|
|
54
|
+
- **Bullets** when items share a parallel shape but each carries enough
|
|
55
|
+
prose to not fit a table cell.
|
|
56
|
+
- **Tables** when 5+ items share uniform structure (`ID + body`,
|
|
57
|
+
`name + value`, `decision + rationale`, `risk + mitigation`). Tables
|
|
58
|
+
scan faster at that scale and unlock additional columns (status,
|
|
59
|
+
traceability, severity) that bullets can't accommodate cleanly.
|
|
60
|
+
|
|
61
|
+
The test: which shape would a reader scan fastest for this content? If
|
|
62
|
+
items have parallel structure and 5+ instances, table. If items are 3-5
|
|
63
|
+
and each has a few lines of prose, bullets. If the content is a single
|
|
64
|
+
narrative thought, prose.
|
|
65
|
+
|
|
66
|
+
### Bold leader labels within bullets
|
|
67
|
+
|
|
68
|
+
When a bullet has substructure that benefits from named fields (Key Flows
|
|
69
|
+
with Trigger / Actors / Steps / Outcome, Acceptance Examples with Covers
|
|
70
|
+
/ Given / When / Then), use bold leader labels at the start of nested
|
|
71
|
+
bullets — not deeper heading levels.
|
|
72
|
+
|
|
73
|
+
```markdown
|
|
74
|
+
- F1. Anonymous capture
|
|
75
|
+
- **Trigger:** Agent enters Step 2a with no session.
|
|
76
|
+
- **Actors:** A1, A2
|
|
77
|
+
- **Steps:** Preflight detects cloak; agent launches; capture proceeds.
|
|
78
|
+
- **Covered by:** R1, R2, R5
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
This gives the bullet structure without needing H4/H5 headings that would
|
|
82
|
+
clutter the doc and break TOC generation.
|
|
83
|
+
|
|
84
|
+
### Section separators
|
|
85
|
+
|
|
86
|
+
For substantial artifacts, use horizontal rules (`---`) between top-level
|
|
87
|
+
H2 sections. Omit for short docs where separators would dominate.
|
|
88
|
+
|
|
89
|
+
### Tables for genuinely comparative info only
|
|
90
|
+
|
|
91
|
+
Use tables for the uniform-shape case in "Content shape" above. Don't use
|
|
92
|
+
tables to render content lists that are really bullets — markdown tables
|
|
93
|
+
are noisier in raw form and worse for diffs.
|
|
94
|
+
|
|
95
|
+
## Section anatomy
|
|
96
|
+
|
|
97
|
+
How section types commonly render in markdown. These are patterns, not
|
|
98
|
+
contracts — the agent picks the shape that fits the content.
|
|
99
|
+
|
|
100
|
+
- **Summary / Problem Frame** — prose paragraphs.
|
|
101
|
+
- **Requirements** — bullets with `R<N>.` prefix. When requirements span
|
|
102
|
+
more than one concern, grouping under bold inline headers is the default
|
|
103
|
+
shape, not optional polish (group by capability, not by discussion order);
|
|
104
|
+
render a flat list only when every requirement is about the same thing.
|
|
105
|
+
When requirements have status, traceability, or severity that warrant
|
|
106
|
+
additional columns, escalate to a table.
|
|
107
|
+
- **Implementation Units** — H3 heading per unit with `U<N>.` prefix.
|
|
108
|
+
Fields (Goal, Files, Patterns, Test Scenarios, Verification) render as
|
|
109
|
+
bullets with bold leader labels, or as sub-headings if the field has
|
|
110
|
+
multi-paragraph content.
|
|
111
|
+
- **Key Technical Decisions** — bullets with bold decision name + prose
|
|
112
|
+
rationale, or numbered KTD-N pattern when traceability matters.
|
|
113
|
+
- **Key Flows / Acceptance Examples** — bullets with bold leader labels
|
|
114
|
+
(Trigger / Actors / Steps / Outcome / Covers / Given-When-Then).
|
|
115
|
+
- **Scope Boundaries** — bullets, optionally split into "Deferred to
|
|
116
|
+
Separate Tasks" / "Outside this product's identity" sub-headings when
|
|
117
|
+
the positioning distinction matters.
|
|
118
|
+
|
|
119
|
+
The agent picks more elaborate or simpler shapes based on what each
|
|
120
|
+
specific artifact's content needs.
|
|
121
|
+
|
|
122
|
+
## Diagrams
|
|
123
|
+
|
|
124
|
+
When the section contract calls for a diagram (architecture, sequence,
|
|
125
|
+
flowchart, state machine, swim lane, data-flow), markdown renders it as
|
|
126
|
+
a fenced mermaid block:
|
|
127
|
+
|
|
128
|
+
```markdown
|
|
129
|
+
` ``mermaid
|
|
130
|
+
flowchart TB
|
|
131
|
+
A[Start] --> B{Decision}
|
|
132
|
+
B -->|yes| C[Action]
|
|
133
|
+
B -->|no| D[Other action]
|
|
134
|
+
` ``
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
(`TB` direction default — keeps diagrams narrow in source view and in
|
|
138
|
+
narrow rendered viewports.)
|
|
139
|
+
|
|
140
|
+
For quantitative comparisons (bar charts, scatter plots) markdown has no
|
|
141
|
+
native equivalent — use a table with the data and let prose or caption
|
|
142
|
+
carry the interpretation.
|
|
143
|
+
|
|
144
|
+
## Inline code and code blocks
|
|
145
|
+
|
|
146
|
+
- **Inline code** for identifiers (variable names, function names,
|
|
147
|
+
flag names, file paths, IDs that aren't section anchors).
|
|
148
|
+
- **Fenced code blocks** with language tag for code, shell commands,
|
|
149
|
+
API request/response samples. Always specify the language for syntax
|
|
150
|
+
highlighting and accessibility.
|
|
151
|
+
|
|
152
|
+
```markdown
|
|
153
|
+
The flag `--cdp-url` accepts a URL.
|
|
154
|
+
|
|
155
|
+
` ``bash
|
|
156
|
+
browser-use --cdp-url http://localhost:9222
|
|
157
|
+
` ``
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## No process exhaust
|
|
161
|
+
|
|
162
|
+
Engineering process metadata stays out of the artifact:
|
|
163
|
+
|
|
164
|
+
- No "captured at Phase X" notes
|
|
165
|
+
- No `## Next Steps` pointing to the next skill
|
|
166
|
+
- No italic provenance lines ("*Brainstorm completed 2026-05-13*")
|
|
167
|
+
- No engineering-flow shepherding ("Now read this file:", "Next, run that
|
|
168
|
+
command:")
|
|
169
|
+
|
|
170
|
+
This information belongs in commit messages, tool output, and agent
|
|
171
|
+
transcripts — not in the artifact a reader returns to weeks later.
|
|
172
|
+
|
|
173
|
+
## Frontmatter shape
|
|
174
|
+
|
|
175
|
+
Per-skill frontmatter fields are defined in the section contract
|
|
176
|
+
(`plan-sections.md` lists plan frontmatter). Common rules:
|
|
177
|
+
|
|
178
|
+
- YAML at the top of the file, delimited by `---` on its own line above
|
|
179
|
+
and below.
|
|
180
|
+
- Field names in lowercase snake_case (`status`, `created_at`, not
|
|
181
|
+
`Status`, `CreatedAt`).
|
|
182
|
+
- **Status lifecycle is per-contract.** When the section contract
|
|
183
|
+
defines a `status` field with a lifecycle (plans use
|
|
184
|
+
`active → completed`, flipped by `ce:work` at shipping time via direct
|
|
185
|
+
YAML edit), it is editable in place. When the section contract does
|
|
186
|
+
not define a status lifecycle (brainstorms, for example, have no
|
|
187
|
+
`active → completed` flip — they are upstream of plans and
|
|
188
|
+
referenced via the plan's `origin:`), do not introduce one.
|
|
189
|
+
- Stable across artifact revisions — never rename or repurpose a field.
|
|
190
|
+
|
|
191
|
+
## Post-write audit
|
|
192
|
+
|
|
193
|
+
Before declaring the markdown file written, scan it for these common
|
|
194
|
+
slips:
|
|
195
|
+
|
|
196
|
+
- All stable IDs are plain-prefix format, not bolded.
|
|
197
|
+
- No HTML elements mixed in.
|
|
198
|
+
- All file paths are repo-relative.
|
|
199
|
+
- Horizontal rule separators between H2s (for Standard / Deep artifacts).
|
|
200
|
+
- No process exhaust (Phase X notes, Next Steps pointers, provenance
|
|
201
|
+
lines).
|
|
202
|
+
- Tables only where 5+ uniform-shape items justify them.
|
|
203
|
+
- Frontmatter has all the per-skill required fields with reasonable values.
|
|
@@ -38,7 +38,7 @@ After document-review completes, present the options using the platform's blocki
|
|
|
38
38
|
**Question:** "Plan ready at `<absolute path to plan>`. What would you like to do next?"
|
|
39
39
|
|
|
40
40
|
**Options:**
|
|
41
|
-
1. **Start
|
|
41
|
+
1. **Start `ce:work`** (recommended) - Begin implementing this plan in the current session
|
|
42
42
|
2. **Create Issue** - Create a tracked issue from this plan in your configured issue tracker (GitHub or Linear)
|
|
43
43
|
3. **Open in Proof (web app) — review and comment to iterate with the agent** - Open the doc in Every's Proof editor, iterate with the agent via comments, or copy a link to share with others
|
|
44
44
|
4. **Done for now** - Pause; the plan file is saved and can be resumed later
|
|
@@ -46,19 +46,19 @@ After document-review completes, present the options using the platform's blocki
|
|
|
46
46
|
**Surface additional document review contextually, not as a menu fixture:** When the prior document-review pass surfaced residual P0/P1 findings that the user has not addressed, mention them adjacent to the menu and offer another review pass in prose (e.g., "Document review flagged 2 P1 findings you may want to address — want me to run another pass before you pick?"). Do not add it to the option list.
|
|
47
47
|
|
|
48
48
|
Based on selection:
|
|
49
|
-
- **Start
|
|
49
|
+
- **Start `ce:work`** -> Call `ce:work` with the plan path
|
|
50
50
|
- **Create Issue** -> Follow the Issue Creation section below
|
|
51
51
|
- **Open in Proof (web app) — review and comment to iterate with the agent** -> Load the `ce-proof` skill in HITL-review mode with:
|
|
52
52
|
- source file: `docs/plans/<plan_filename>.md`
|
|
53
53
|
- doc title: `Plan: <plan title from frontmatter>`
|
|
54
54
|
- identity: `ai:systematic` / `Systematic`
|
|
55
|
-
- recommended next step:
|
|
55
|
+
- recommended next step: `ce:work` (shown in the ce-proof skill's final terminal output)
|
|
56
56
|
|
|
57
57
|
Follow `references/hitl-review.md` in the ce-proof skill. It uploads the plan, prompts the user for review in Proof's web UI, ingests each thread by reading it fresh and replying in-thread, applies agreed edits as tracked suggestions, and syncs the final markdown back to the plan file atomically on proceed.
|
|
58
58
|
|
|
59
59
|
When the ce-proof skill returns:
|
|
60
60
|
- `status: proceeded` with `localSynced: true` -> the plan on disk now reflects the review. Re-run `ce-doc-review` on the updated plan before re-rendering the menu — HITL can materially rewrite the plan body, so the prior ce-doc-review pass no longer covers the current file and section 5.3.8 requires a review before any handoff option is offered. Then return to the post-generation options with the refreshed residual findings.
|
|
61
|
-
- `status: proceeded` with `localSynced: false` -> the reviewed version lives in Proof at `docUrl` but the local copy is stale. Offer to pull the Proof doc to `localPath` using the ce-proof skill's Pull workflow. If the pull happened, re-run `ce-doc-review` on the pulled file before re-rendering the options (same 5.3.8 rationale — the local plan was materially updated by the pull). If the pull was declined, include a one-line note above the menu that `<localPath>` is stale vs. Proof — otherwise `Start
|
|
61
|
+
- `status: proceeded` with `localSynced: false` -> the reviewed version lives in Proof at `docUrl` but the local copy is stale. Offer to pull the Proof doc to `localPath` using the ce-proof skill's Pull workflow. If the pull happened, re-run `ce-doc-review` on the pulled file before re-rendering the options (same 5.3.8 rationale — the local plan was materially updated by the pull). If the pull was declined, include a one-line note above the menu that `<localPath>` is stale vs. Proof — otherwise `Start ce:work` or `Create Issue` will silently use the pre-review copy.
|
|
62
62
|
- `status: done_for_now` -> the plan on disk may be stale if the user edited in Proof before leaving. Offer to pull the Proof doc to `localPath` so the local plan file stays in sync. If the pull happened, re-run `ce-doc-review` on the pulled file before re-rendering the options (same 5.3.8 rationale). If the pull was declined, include the stale-local note above the menu. `done_for_now` means the user stopped the HITL loop — it does not mean they ended the whole plan session; they may still want to start work or create an issue.
|
|
63
63
|
- `status: aborted` -> fall back to the options without changes.
|
|
64
64
|
|
|
@@ -93,4 +93,4 @@ When the user selects "Create Issue", detect their project tracker:
|
|
|
93
93
|
|
|
94
94
|
After issue creation:
|
|
95
95
|
- Display the issue URL
|
|
96
|
-
- Ask whether to proceed to
|
|
96
|
+
- Ask whether to proceed to `ce:work` using the platform's blocking question tool
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Plan Sections
|
|
2
|
+
|
|
3
|
+
This reference describes what makes a great implementation plan. It does NOT
|
|
4
|
+
prescribe how the plan looks on the page — rendering is handled by
|
|
5
|
+
`references/markdown-rendering.md`.
|
|
6
|
+
|
|
7
|
+
## The outcome
|
|
8
|
+
|
|
9
|
+
A great plan enables three audiences to act:
|
|
10
|
+
|
|
11
|
+
- **The implementing agent** (`ce:work` or a human) starts from an informed
|
|
12
|
+
baseline — load-bearing decisions are named, research breadcrumbs orient
|
|
13
|
+
their own investigation, unit boundaries are clear. The plan gives the
|
|
14
|
+
implementer a starting point, not a substitute for their own investigation.
|
|
15
|
+
- **The reviewer** identifies the load-bearing decisions and the boundaries
|
|
16
|
+
of what's being changed in one pass.
|
|
17
|
+
- **The future reader** (anyone returning months later) traces why the work
|
|
18
|
+
was done, what shaped it, and where the artifacts live.
|
|
19
|
+
|
|
20
|
+
Sections earn their place by serving one of these audiences. Omit padding.
|
|
21
|
+
|
|
22
|
+
## Decide whether a plan doc is warranted at all
|
|
23
|
+
|
|
24
|
+
Not every invocation of `ce:plan` should produce a plan document. For
|
|
25
|
+
genuinely atomic work, the doc is ceremony — the implementer (whether
|
|
26
|
+
`ce:work` or a human) can act directly without IDed units, KTDs, or
|
|
27
|
+
Requirements as a checklist.
|
|
28
|
+
|
|
29
|
+
**Bias toward producing a plan.** The risk asymmetry favors writing one:
|
|
30
|
+
a thin plan doc for small work is mild ceremony, but skipping a plan when
|
|
31
|
+
one was warranted costs the implementer real time (reinvented decisions,
|
|
32
|
+
lost unit boundaries, no IDed requirements to verify against). When unsure,
|
|
33
|
+
write the plan.
|
|
34
|
+
|
|
35
|
+
**Skip plan creation only when ALL of these hold:**
|
|
36
|
+
|
|
37
|
+
- The work is **atomic** — fits in one commit, no meaningful unit boundaries
|
|
38
|
+
to break out independently.
|
|
39
|
+
- There are **no design choices that constrain implementation** — no
|
|
40
|
+
Key Technical Decisions worth recording. If the work needs the implementer
|
|
41
|
+
to make a choice between two approaches, those approaches are KTDs and
|
|
42
|
+
a plan is warranted.
|
|
43
|
+
- There are **no scope boundaries worth pinning** in writing — the work
|
|
44
|
+
scope is self-evident from the user's request.
|
|
45
|
+
- **No upstream artifact** (a brainstorm with R-IDs, an incident report,
|
|
46
|
+
a deferred-follow-up item from a prior plan) needs traceability through
|
|
47
|
+
this plan.
|
|
48
|
+
|
|
49
|
+
**Stress test the "looks atomic" case.** Many requests look atomic at first
|
|
50
|
+
glance but hide design decisions:
|
|
51
|
+
|
|
52
|
+
- *"Add caching to this endpoint"* — sounds atomic, but TTL, invalidation,
|
|
53
|
+
cache key shape, and backend selection are all KTDs. Write the plan.
|
|
54
|
+
- *"Migrate from package A to package B"* — sounds mechanical, but
|
|
55
|
+
semantic differences between the packages create migration KTDs. Write
|
|
56
|
+
the plan.
|
|
57
|
+
- *"Add rate limiting"* — sounds small, but algorithm, scope, and
|
|
58
|
+
configurability are all KTDs. Write the plan.
|
|
59
|
+
|
|
60
|
+
vs. genuine skip cases:
|
|
61
|
+
|
|
62
|
+
- *"Fix typo in README line 47"* — atomic, no KTDs, skip the plan.
|
|
63
|
+
- *"Rename `oldFn` to `newFn` across the repo"* — mechanical, no design
|
|
64
|
+
choices, skip the plan.
|
|
65
|
+
- *"Bump dependency X to v2.3.1"* — mechanical, skip the plan (unless the
|
|
66
|
+
bump introduces breaking changes that warrant unit-by-unit migration).
|
|
67
|
+
|
|
68
|
+
When skipping the plan doc, the work proceeds directly to `ce:work` or to
|
|
69
|
+
implementation, and any decisions made along the way land in the commit
|
|
70
|
+
message or `docs/solutions/` if they're worth carrying forward.
|
|
71
|
+
|
|
72
|
+
> **Section inventory and meaning are owned by the Core Plan Template in `ce-plan/SKILL.md`; this file covers only how sections render and order.**
|
|
73
|
+
|
|
74
|
+
## Plan metadata fields
|
|
75
|
+
|
|
76
|
+
Every plan carries a small set of stable metadata fields that downstream
|
|
77
|
+
tooling depends on. In markdown these fields appear as YAML frontmatter at
|
|
78
|
+
the top of the file. Field names and semantics are stable across plan
|
|
79
|
+
revisions — never rename or repurpose a field.
|
|
80
|
+
|
|
81
|
+
### Required
|
|
82
|
+
|
|
83
|
+
- **`title`** — verbatim plan title. Matches the H1 heading so file metadata
|
|
84
|
+
and visible heading don't drift.
|
|
85
|
+
- **`type`** — conventional-commit-prefix-aligned classification (`feat`,
|
|
86
|
+
`fix`, `refactor`, `chore`, `docs`, `perf`, `test`, etc.). Carries the
|
|
87
|
+
intent the eventual commit message should reflect.
|
|
88
|
+
- **`status`** — `active` on creation; `ce:work` flips to `completed` on
|
|
89
|
+
ship. `ce:plan`'s Phase 0.1 resume fast path keys on `active`.
|
|
90
|
+
- **`date`** — creation date in ISO 8601 (`YYYY-MM-DD`), ASCII digits only.
|
|
91
|
+
|
|
92
|
+
### Optional but well-known
|
|
93
|
+
|
|
94
|
+
These fields are not required, but when set they have fixed names and
|
|
95
|
+
semantics so downstream tooling can rely on them:
|
|
96
|
+
|
|
97
|
+
- **`origin`** — repo-relative path to an upstream brainstorm requirements
|
|
98
|
+
doc (e.g., `docs/brainstorms/2026-05-12-pagination-requirements.md`).
|
|
99
|
+
Set when planning from an upstream brainstorm; carried for traceability
|
|
100
|
+
and re-resolved when `ce:plan` re-deepens.
|
|
101
|
+
- **`deepened`** — ISO 8601 date marking the first time the confidence
|
|
102
|
+
check substantively strengthened the plan. Presence affects Phase 0.1
|
|
103
|
+
resume fast-path logic (see `references/deepening-workflow.md`).
|
|
104
|
+
|
|
105
|
+
Field names are stable across plan revisions — never rename a field or
|
|
106
|
+
repurpose its semantics. Agents composing new plans MUST use these exact
|
|
107
|
+
names; adding new fields is fine, but renaming `status` to `state` or
|
|
108
|
+
`origin` to `source` breaks the downstream consumers above.
|
|
109
|
+
|
|
110
|
+
## Rendering
|
|
111
|
+
|
|
112
|
+
The format-specific reference describes how to render plan sections:
|
|
113
|
+
|
|
114
|
+
- **Markdown rendering:** `references/markdown-rendering.md`
|
|
115
|
+
|
|
116
|
+
This reference (`plan-sections.md`) covers metadata format and rendering conventions;
|
|
117
|
+
section inventory and content rules live in the Core Plan Template in `ce-plan/SKILL.md`.
|