@fro.bot/systematic 2.24.0 → 2.26.0

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