@thebassclef/lite 0.1.0 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +40 -6
- package/dist/cli.js +40 -6
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/substrate/.bassclef/lite-manifest.json +999 -92
- package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
- package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +492 -0
- package/substrate/.claude/hooks/pre-commit-gate.sh +1 -2
- package/substrate/.claude/hooks/turn-prose-kiss-check.sh +30 -1
- package/substrate/.claude/luminaries/glenford-myers.md +230 -0
- package/substrate/.claude/luminaries/hunt-thomas.md +115 -0
- package/substrate/.claude/luminaries/hyrum-wright.md +94 -0
- package/substrate/.claude/luminaries/michael-feathers.md +2 -2
- package/substrate/.claude/luminaries/tony-hoare.md +170 -0
- package/substrate/.claude/luminaries/vaughn-vernon.md +50 -0
- package/substrate/.claude/luminaries/w-edwards-deming.md +158 -0
- package/substrate/.claude/rules/accessor-library-discipline.md +138 -0
- package/substrate/.claude/rules/adr-discipline.md +120 -0
- package/substrate/.claude/rules/api-conventions.md +125 -0
- package/substrate/.claude/rules/bootstrap-pair-discipline.md +141 -0
- package/substrate/.claude/rules/cold-adopter-harness-discipline.md +129 -0
- package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +188 -0
- package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +188 -0
- package/substrate/.claude/rules/defensive-bash.md +68 -0
- package/substrate/.claude/rules/deferred-actions.md +233 -0
- package/substrate/.claude/rules/github-issue-flash-tweet.md +156 -0
- package/substrate/.claude/rules/hook-wire-on-author.md +103 -0
- package/substrate/.claude/rules/iteration-bet-brief-completeness.md +54 -0
- package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +3 -3
- package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +89 -0
- package/substrate/.claude/rules/loop-discipline.md +81 -0
- package/substrate/.claude/rules/manual-prod-approval.md +100 -0
- package/substrate/.claude/rules/marker-enrichment-discipline.md +99 -0
- package/substrate/.claude/rules/mobile-ephemeral-session.md +109 -0
- package/substrate/.claude/rules/new-dependency-check.md +51 -0
- package/substrate/.claude/rules/option-label-discipline.md +108 -0
- package/substrate/.claude/rules/pattern-annotation.md +100 -0
- package/substrate/.claude/rules/plain-english-discipline.md +11 -9
- package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +211 -0
- package/substrate/.claude/rules/pr-title-shape.md +161 -0
- package/substrate/.claude/rules/prototype-workflow.md +65 -0
- package/substrate/.claude/rules/reserved-skill-names.md +123 -0
- package/substrate/.claude/rules/schema-management.md +49 -0
- package/substrate/.claude/rules/security.md +37 -0
- package/substrate/.claude/rules/skill-composition-declarations.md +124 -0
- package/substrate/.claude/rules/skill-description-clarity.md +247 -0
- package/substrate/.claude/rules/skill-procedure-step-list.md +137 -0
- package/substrate/.claude/rules/stuck-signal-diagnostic.md +140 -0
- package/substrate/.claude/rules/substrate-config-schema.md +98 -0
- package/substrate/.claude/rules/test-list-discipline.md +175 -0
- package/substrate/.claude/rules/test-sufficiency.md +210 -0
- package/substrate/.claude/rules/testing-tier-config.md +145 -0
- package/substrate/.claude/rules/testing.md +38 -0
- package/substrate/.claude/rules/turn-estimate-grounding.md +134 -0
- package/substrate/.claude/rules/visual-hierarchy.md +437 -0
- package/substrate/.claude/rules/we-dont-break-adopters.md +126 -0
- package/substrate/.claude/rules/wu-sequencing-compounds.md +145 -0
- package/substrate/.claude/skills/build/SKILL.md +1 -1
- package/substrate/.claude/skills/chronicle/SKILL.md +55 -0
- package/substrate/.claude/skills/clean-artifacts/SKILL.md +249 -0
- package/substrate/.claude/skills/decompose/SKILL.md +1 -1
- package/substrate/.claude/skills/diagnose/SKILL.md +1 -1
- package/substrate/.claude/skills/feynman/SKILL.md +90 -0
- package/substrate/.claude/skills/howdoi/SKILL.md +1 -1
- package/substrate/.claude/skills/ia-model/SKILL.md +1 -1
- package/substrate/.claude/skills/interaction-design/SKILL.md +1 -1
- package/substrate/.claude/skills/interpret-input/SKILL.md +8 -8
- package/substrate/.claude/skills/journal/SKILL.md +209 -0
- package/substrate/.claude/skills/kiss/SKILL.md +1 -1
- package/substrate/.claude/skills/launch/SKILL.md +14 -23
- package/substrate/.claude/skills/lean-canvas/SKILL.md +1 -1
- package/substrate/.claude/skills/longrun/SKILL.md +45 -8
- package/substrate/.claude/skills/luminary/SKILL.md +1 -1
- package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +1 -1
- package/substrate/.claude/skills/onboard-repo/SKILL.md +143 -709
- package/substrate/.claude/skills/pattern-review/SKILL.md +1 -1
- package/substrate/.claude/skills/personas/SKILL.md +5 -5
- package/substrate/.claude/skills/promote/SKILL.md +1 -1
- package/substrate/.claude/skills/requirement/SKILL.md +1 -1
- package/substrate/.claude/skills/retro/SKILL.md +1 -1
- package/substrate/.claude/skills/riff/SKILL.md +1 -1
- package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +1 -1
- package/substrate/.claude/skills/session-end/SKILL.md +1 -1
- package/substrate/.claude/skills/session-log/SKILL.md +3 -3
- package/substrate/.claude/skills/skills/SKILL.md +1 -1
- package/substrate/.claude/skills/spec/SKILL.md +1 -1
- package/substrate/.claude/skills/sprint/SKILL.md +1 -1
- package/substrate/.claude/skills/stage/SKILL.md +1 -1
- package/substrate/.claude/skills/state-a-problem/SKILL.md +1 -1
- package/substrate/.claude/skills/temperance/SKILL.md +1 -1
- package/substrate/.claude/skills/use-case/SKILL.md +1 -1
- package/substrate/.claude/skills/user-stories/SKILL.md +1 -1
- package/substrate/.claude/skills/value-prop/SKILL.md +1 -1
- package/substrate/.claude/skills/verify/SKILL.md +1 -1
- package/substrate/.claude/skills/visual-review/SKILL.md +503 -0
- package/substrate/.claude/skills/whats-the-plan/SKILL.md +202 -0
- package/substrate/.claude/skills/whereami/SKILL.md +2 -2
- package/substrate/CONTRIBUTING.md +1 -1
- package/substrate/README.md +5 -5
- package/substrate/lib/prose-scan-boundary.sh +171 -0
- package/substrate/lib/tier-check.sh +50 -1
- package/substrate/lib/tier-dependency-audit.sh +159 -4
- package/substrate/presence/install/bassclef-sync.template.sh +1 -1
- package/substrate/scripts/generate-lite-manifest.sh +21 -5
- package/substrate/standards/adr-template.md +86 -0
- package/substrate/standards/api-conventions/nextjs.md +84 -0
- package/substrate/standards/artifact-composition.md +209 -0
- package/substrate/standards/bash-hook-safety.md +246 -0
- package/substrate/standards/branch-stacking.md +408 -0
- package/substrate/standards/code-safety-principles.md +176 -0
- package/substrate/standards/composer-prerequisites.md +155 -0
- package/substrate/standards/dependency-discipline/cargo.md +39 -0
- package/substrate/standards/dependency-discipline/gem.md +43 -0
- package/substrate/standards/dependency-discipline/go-mod.md +41 -0
- package/substrate/standards/dependency-discipline/npm.md +42 -0
- package/substrate/standards/dependency-discipline/pip.md +42 -0
- package/substrate/standards/deployment-topology/ec2-tailscale.md +225 -0
- package/substrate/standards/deployment-topology.md +69 -0
- package/substrate/standards/docs-sync-allowlist.md +4 -4
- package/substrate/standards/domain-and-dns.md +145 -0
- package/substrate/standards/frontend-stack.md +67 -0
- package/substrate/standards/frontmatter-schema.md +154 -0
- package/substrate/standards/hook-injection-discipline.md +202 -0
- package/substrate/standards/hook-install-class.md +215 -0
- package/substrate/standards/input-handler-interface.md +152 -0
- package/substrate/standards/lite-manifest-schema-changes.md +60 -0
- package/substrate/standards/luminary-matching.md +105 -0
- package/substrate/standards/migration-discipline/active-record.md +50 -0
- package/substrate/standards/migration-discipline/alembic.md +43 -0
- package/substrate/standards/migration-discipline/gorm.md +50 -0
- package/substrate/standards/migration-discipline/prisma.md +53 -0
- package/substrate/standards/migration-discipline/sqlalchemy.md +51 -0
- package/substrate/standards/mobile-ephemeral-session.md +167 -0
- package/substrate/standards/model-routing-discipline.md +160 -0
- package/substrate/standards/persona-schema.md +229 -0
- package/substrate/standards/pluggable-luminaries.md +323 -0
- package/substrate/standards/pr-body-discipline.md +115 -0
- package/substrate/standards/preview-state-schema.md +189 -0
- package/substrate/standards/reserved-skill-names.md +120 -0
- package/substrate/standards/scannable-multi-option-output.md +261 -0
- package/substrate/standards/sdlc-gates/typescript.md +57 -0
- package/substrate/standards/session-board.md +256 -0
- package/substrate/standards/state-spine-contract.md +255 -0
- package/substrate/standards/steering-hints/kiss-words.md +11 -0
- package/substrate/standards/substrate-config-schema.md +267 -0
- package/substrate/standards/tier-dependency-analysis.md +1 -1
- package/substrate/standards/tier-tag-schema.md +1 -1
- package/substrate/standards/two-layer-config.md +99 -0
- package/substrate/standards/use-case-format.md +292 -0
- package/substrate/standards/user-story-invest.md +268 -0
- package/substrate/standards/velocity-and-appetite.md +229 -0
- package/substrate/standards/voice-input-pattern.md +119 -0
- package/substrate/standards/worktree-management.md +211 -0
- package/substrate/templates/chronicle-template.md +75 -0
- package/substrate/templates/memory-proposal-template.md +77 -0
- package/substrate/templates/persona-template.md +200 -0
- package/substrate/templates/pr-faq.md +45 -0
- package/substrate/templates/secret-rotation-template.md +162 -0
- package/substrate/templates/spec-template.md +131 -0
- package/substrate/templates/use-case-template.md +194 -0
- package/substrate/templates/user-story-template.md +107 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: Bassclef MUST NOT create a skill with a name that Claude Code (the harness) already claims.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Reserved Skill Names
|
|
7
|
+
|
|
8
|
+
Bassclef MUST NOT create a skill with a name that Claude Code (the
|
|
9
|
+
harness) already claims. Operator typing `/<name>` resolves to the
|
|
10
|
+
harness built-in, not bassclef's skill — producing silent behavioral
|
|
11
|
+
drift.
|
|
12
|
+
|
|
13
|
+
This file is the **list**. The rule that references it lives at
|
|
14
|
+
`.claude/rules/reserved-skill-names.md`. Separating the two lets the
|
|
15
|
+
list evolve with Claude Code releases without churning the rule.
|
|
16
|
+
|
|
17
|
+
## Reserved names (as of 2026-04-18)
|
|
18
|
+
|
|
19
|
+
Source: Claude Code harness built-in skill registry observed in-session.
|
|
20
|
+
|
|
21
|
+
### Claude Code operational built-ins
|
|
22
|
+
|
|
23
|
+
These are always resolved by the Claude Code harness and will never
|
|
24
|
+
reach bassclef's skill registry:
|
|
25
|
+
|
|
26
|
+
| Name | Purpose (per harness) |
|
|
27
|
+
|------|----------------------|
|
|
28
|
+
| `update-config` | Configure Claude Code harness via settings.json |
|
|
29
|
+
| `keybindings-help` | Keyboard shortcut customization |
|
|
30
|
+
| `simplify` | Review changed code for reuse/quality |
|
|
31
|
+
| `fewer-permission-prompts` | Scan transcripts + prioritize allowlist |
|
|
32
|
+
| `loop` | Recurring prompt / slash-command execution |
|
|
33
|
+
| `schedule` | Scheduled remote agents (triggers) |
|
|
34
|
+
| `claude-api` | Build/debug Claude API / SDK apps |
|
|
35
|
+
|
|
36
|
+
### Claude Code "FEY" remote built-ins
|
|
37
|
+
|
|
38
|
+
Sourced from `FEY` array in Claude Code `cli.js`:
|
|
39
|
+
|
|
40
|
+
| Name | Purpose (per harness) |
|
|
41
|
+
|------|----------------------|
|
|
42
|
+
| `autopilot` | Autopilot mode |
|
|
43
|
+
| `bugfix` | Remote bugfix workflow |
|
|
44
|
+
| `dashboard` | Remote dashboard |
|
|
45
|
+
| `docs` | Docs workflow |
|
|
46
|
+
| `investigate` | Investigation workflow |
|
|
47
|
+
|
|
48
|
+
### Claude Code init/setup
|
|
49
|
+
|
|
50
|
+
| Name | Purpose (per harness) |
|
|
51
|
+
|------|----------------------|
|
|
52
|
+
| `init` | Initialize a new CLAUDE.md file |
|
|
53
|
+
| `review` | Review a pull request |
|
|
54
|
+
| `security-review` | Security review of pending changes |
|
|
55
|
+
|
|
56
|
+
## What the rule enforces
|
|
57
|
+
|
|
58
|
+
Any new `.claude/skills/<name>/SKILL.md` introduced by a PR MUST NOT
|
|
59
|
+
use a name from this list. The pre-commit hook blocks commits that
|
|
60
|
+
add a colliding directory. See `.claude/rules/reserved-skill-names.md`
|
|
61
|
+
for full enforcement semantics.
|
|
62
|
+
|
|
63
|
+
## Updating this list
|
|
64
|
+
|
|
65
|
+
Triggers that justify adding a name:
|
|
66
|
+
|
|
67
|
+
- New Claude Code release adds a slash-command built-in not listed here
|
|
68
|
+
- Observed behavioral drift where a bassclef skill name was silently
|
|
69
|
+
overridden by the harness
|
|
70
|
+
- Upstream Anthropic documentation announces a reserved prefix or name
|
|
71
|
+
|
|
72
|
+
Process:
|
|
73
|
+
|
|
74
|
+
1. Verify the collision exists (type `/<name>` in a clean session,
|
|
75
|
+
observe the harness responds without reaching bassclef)
|
|
76
|
+
2. Add the row to the table above with purpose description
|
|
77
|
+
3. Bump the date in the heading ("as of YYYY-MM-DD")
|
|
78
|
+
4. File a bassclef issue if any existing bassclef skill uses the
|
|
79
|
+
newly-colliding name — that skill MUST be renamed before the rule
|
|
80
|
+
addition merges
|
|
81
|
+
|
|
82
|
+
## Verification
|
|
83
|
+
|
|
84
|
+
Test case for the pre-commit hook lives at
|
|
85
|
+
`.claude/hooks/tests/reserved-names-test.sh`. Run via:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
bash .claude/hooks/tests/reserved-names-test.sh
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Tests:
|
|
92
|
+
- Hook blocks commit staging `.claude/skills/docs/SKILL.md` (collision)
|
|
93
|
+
- Hook permits commit staging `.claude/skills/docs-v2/SKILL.md` (no collision)
|
|
94
|
+
- Hook respects `SKIP_RESERVED_NAMES=1` override
|
|
95
|
+
|
|
96
|
+
## Override
|
|
97
|
+
|
|
98
|
+
Rare case: bassclef deliberately wants to shadow a harness built-in
|
|
99
|
+
(e.g., wraps or replaces the built-in). Requires:
|
|
100
|
+
|
|
101
|
+
1. Explicit operator confirmation in PR body
|
|
102
|
+
2. `SKIP_RESERVED_NAMES=1` env var on the commit
|
|
103
|
+
3. Rationale documented in the skill's SKILL.md frontmatter
|
|
104
|
+
|
|
105
|
+
The override exists because rules should not be unjudgeable — but the
|
|
106
|
+
friction is deliberately high.
|
|
107
|
+
|
|
108
|
+
## Relationship to other standards
|
|
109
|
+
|
|
110
|
+
- `standards/substrate-config-schema.md` — external resource reference
|
|
111
|
+
conventions (orthogonal)
|
|
112
|
+
- `.claude/rules/reserved-skill-names.md` — the rule that reads this list
|
|
113
|
+
- `.claude/hooks/pre-commit-gate.sh` — mechanical enforcement
|
|
114
|
+
|
|
115
|
+
## When to retire this list
|
|
116
|
+
|
|
117
|
+
If Claude Code ships a mechanical API to query reserved names at
|
|
118
|
+
runtime (e.g., `claude --list-builtins --json`), this static list can
|
|
119
|
+
be replaced with a dynamic check. Until then, the list is the
|
|
120
|
+
interface.
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
standard: scannable-multi-option-output
|
|
4
|
+
status: accepted
|
|
5
|
+
authoring_luminaries:
|
|
6
|
+
primary:
|
|
7
|
+
- don-norman
|
|
8
|
+
- sophia-prater
|
|
9
|
+
supporting:
|
|
10
|
+
- jesse-james-garrett
|
|
11
|
+
- edward-tufte
|
|
12
|
+
description: Design principles for skills that render multi-option choice surfaces (e.g.
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Scannable multi-option output
|
|
16
|
+
|
|
17
|
+
Design principles for skills that render multi-option choice surfaces (e.g. `/longrun prep`, `/sprint` Step 7). The principles below apply when the output stacks 3-5 tables covering options + trade-offs + steps and the operator needs to scan + pick fast.
|
|
18
|
+
|
|
19
|
+
## Sources read
|
|
20
|
+
|
|
21
|
+
- `.claude/luminaries/don-norman.md` — signifiers + mapping + feedback + constraints
|
|
22
|
+
- `.claude/luminaries/jesse-james-garrett.md` — five planes of UX (strategy + scope + structure + skeleton + surface)
|
|
23
|
+
- `.claude/luminaries/sophia-prater.md` — OOUX (objects first) + progressive disclosure
|
|
24
|
+
- `.claude/luminaries/edward-tufte.md` — data-ink ratio + small multiples + sparklines + glyph encodes data
|
|
25
|
+
- `docs/personas/sam.md` L33 — "I skim first, dig second, bail third."
|
|
26
|
+
- `docs/personas/2026-07-12-bet11c-louis.md` L25 — "Skims group headings first."
|
|
27
|
+
- Ticket #853 — the filing case for this discipline
|
|
28
|
+
- Bet 24e — this extension adds Tufte + Prater + card template + glyph legend + progressive disclosure
|
|
29
|
+
|
|
30
|
+
## Readers we design for
|
|
31
|
+
|
|
32
|
+
Two personas set the bar.
|
|
33
|
+
|
|
34
|
+
- **Sam** has a 15-30 min Saturday budget. He bounces on friction. He skims, digs, bails.
|
|
35
|
+
- **Louis** skims group headings first. He opens a section only when this week's work needs it.
|
|
36
|
+
|
|
37
|
+
Both punish output that hides structure or repeats content across tables.
|
|
38
|
+
|
|
39
|
+
## The Norman + Garrett debate
|
|
40
|
+
|
|
41
|
+
### Norman on signifiers + feedback
|
|
42
|
+
|
|
43
|
+
Sam bounces on friction. His scan budget cannot afford re-reading the same table twice. Louis skims headings first. Headings ARE the affordance. No heading means no affordance. Signifiers must be OBVIOUS on first scan.
|
|
44
|
+
|
|
45
|
+
On a refinement, delta rendering IS the feedback loop. Silent rebuild breaks the loop.
|
|
46
|
+
|
|
47
|
+
Mapping — one anchor for one concern. Never one anchor for three tables.
|
|
48
|
+
|
|
49
|
+
### Garrett on the five planes
|
|
50
|
+
|
|
51
|
+
Stacked tables live at the skeleton plane. That is where things are placed.
|
|
52
|
+
|
|
53
|
+
A first-cut prep output mixes four planes in one visual block. Strategy plus scope plus structure plus skeleton. Mixed planes break the five-planes rule.
|
|
54
|
+
|
|
55
|
+
Give each plane its own `###` anchor. Reader scans anchors. Reader opens the one they need.
|
|
56
|
+
|
|
57
|
+
## The Tufte + Prater debate (bet 24e extension)
|
|
58
|
+
|
|
59
|
+
### Prater on OOUX
|
|
60
|
+
|
|
61
|
+
Each option is an object. Each object has attributes — Problem, Value, Compounds, Adopter, Risk. Rendering one attribute per table forces the reader to reassemble the object in their head. Schema-mirror UX. The interface should mirror the reader's mental model.
|
|
62
|
+
|
|
63
|
+
One card per option. Object first. Attributes inline with bold labels. Progressive disclosure — options at first glance; step detail expands only for the option the reader picks.
|
|
64
|
+
|
|
65
|
+
### Tufte on data density
|
|
66
|
+
|
|
67
|
+
The 5-table stack is chartjunk. Every cell repeats option labels + carries one axis. Data-ink ratio is low. Same shape repeated per option is small multiples — belongs in one dense structure.
|
|
68
|
+
|
|
69
|
+
Glyphs encode data, not decoration. Color IS the data (🟢 low / 🟡 medium / 🔴 high). Sparkline analog — a single glyph beats a cell full of prose.
|
|
70
|
+
|
|
71
|
+
Progressive disclosure serves data-ink too. Do not render step detail for options the operator will not pick.
|
|
72
|
+
|
|
73
|
+
## Synthesized principles
|
|
74
|
+
|
|
75
|
+
Twelve principles the four lenses agreed on. Skills that render multi-option surfaces MUST follow them.
|
|
76
|
+
|
|
77
|
+
1. **One anchor per concern.** `###` header before each block. Anchor names the plane or concern.
|
|
78
|
+
2. **Bold anchor pattern for sub-blocks.** Where an `###` header would be too heavy, use bold anchor plus blank line.
|
|
79
|
+
3. **Delta rendering on refinements.** When operator asks "add column X", render ONLY the new column with reference to the source anchor by name.
|
|
80
|
+
4. **Horizontal rule between planes.** `---` separates strategy from structure from skeleton. Not between every table.
|
|
81
|
+
5. **Whitespace floor.** At least 2 blank lines OR one HR between top-level anchors.
|
|
82
|
+
6. **Recommendation always at end.** One sentence citing compounding sequence + risk class.
|
|
83
|
+
7. **Compact scan-table first** (Tufte). 4-6 columns, one row per option, glyphs encode risk + compounding rate. Reader scans + picks in 20-30 seconds.
|
|
84
|
+
8. **One card per option** (Prater OOUX). Each card carries Problem + Value + Compounds + Adopter + Risk inline with bold labels.
|
|
85
|
+
9. **Steps rendered only for the recommended option** (Prater + Tufte). Progressive disclosure. Not for all 3 options.
|
|
86
|
+
10. **Problem + Value inline in every option card AND every step card.** Names the user pain the option or step addresses.
|
|
87
|
+
11. **Glyphs encode data, not decoration** (Tufte chartjunk rule). Only glyphs that carry a signal ship.
|
|
88
|
+
12. **Delta rendering as inline callout** — "Added: change class (delta on § Options above)" + small table with only the delta cells.
|
|
89
|
+
|
|
90
|
+
## Card template
|
|
91
|
+
|
|
92
|
+
Every option card ships in this shape:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
### <label> · <scope> · <turns> · <risk glyph> <risk word>
|
|
96
|
+
|
|
97
|
+
**Problem** — <one sentence naming the user pain this option addresses>
|
|
98
|
+
**Value** — <one sentence naming what the operator gets>
|
|
99
|
+
**Compounds** — <axis 1> · <axis 2> · <axis 3> · <axis 4> · <axis 5>
|
|
100
|
+
**Adopter** — <mechanism> · <visibility> · <action required>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Every step card ships in this shape:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
### Step <N> · <slug> · <turns> · <risk glyph> <risk word>
|
|
107
|
+
|
|
108
|
+
**Problem** — <one sentence naming the pain this step solves>
|
|
109
|
+
**Produces** — <artifact path or decision>
|
|
110
|
+
**Consumes** — <prior step + shared state>
|
|
111
|
+
**Teaches** — <pattern later work reuses>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Glyph legend
|
|
115
|
+
|
|
116
|
+
Only glyphs that encode data. No decoration.
|
|
117
|
+
|
|
118
|
+
| Glyph | Meaning |
|
|
119
|
+
|---|---|
|
|
120
|
+
| 🟢 | low risk |
|
|
121
|
+
| 🟡 | medium risk |
|
|
122
|
+
| 🔴 | high risk |
|
|
123
|
+
| · | axis separator inside an inline value list |
|
|
124
|
+
| § | reference to a named section anchor in delta callouts |
|
|
125
|
+
|
|
126
|
+
Words carry compounding rate — `per-adopter`, `per-session`, `one-time`, `per-quarter`. Arrows and other decorative glyphs stay OUT.
|
|
127
|
+
|
|
128
|
+
## Progressive disclosure — the rule
|
|
129
|
+
|
|
130
|
+
Compact scan-table + per-option cards render for ALL options. Step cards render ONLY for the recommended option.
|
|
131
|
+
|
|
132
|
+
When operator picks a different option, step cards for that option render on the next turn. On operator ask ("show steps for B and C too"), expand for all.
|
|
133
|
+
|
|
134
|
+
Rationale — data-ink and reader attention are finite. Rendering steps for options the operator will not pick is chartjunk.
|
|
135
|
+
|
|
136
|
+
## Delta rendering — the anti-pattern and the cure
|
|
137
|
+
|
|
138
|
+
Silent rebuild:
|
|
139
|
+
|
|
140
|
+
> Operator — "add a change-class column"
|
|
141
|
+
> Agent — re-renders all 4-5 tables verbatim plus one new column
|
|
142
|
+
|
|
143
|
+
Named delta:
|
|
144
|
+
|
|
145
|
+
> Operator — "add a change-class column"
|
|
146
|
+
> Agent — "Adding column to § Options above:"
|
|
147
|
+
> [renders only the new column with the option labels]
|
|
148
|
+
|
|
149
|
+
Full re-render is correct only when the operator asks for it explicitly ("show me the full picture again") OR the underlying option set changed.
|
|
150
|
+
|
|
151
|
+
## When to apply this standard
|
|
152
|
+
|
|
153
|
+
- `/longrun prep` — Steps 1.4c + 1.4d cite this standard
|
|
154
|
+
- `/sprint` Step 7 — Steps 7a + 7b cite this standard
|
|
155
|
+
- Any future skill that renders 3+ option tables with trade-offs
|
|
156
|
+
|
|
157
|
+
## Canonical example — recommendation-first shape (per bassclef-web#152)
|
|
158
|
+
|
|
159
|
+
The example below shows the shape the substrate targets. Reader sees the pick in the first 15 lines. Scan table follows. Card for the recommended option only.
|
|
160
|
+
|
|
161
|
+
### Anti-pattern — decision buried below 5-axis blocks
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
[Three-block opener — Problem + Value + Evidence]
|
|
165
|
+
|
|
166
|
+
## Options
|
|
167
|
+
|
|
168
|
+
| Option | Scope | Turns | Compounds | Risk |
|
|
169
|
+
|---|---|---|---|---|
|
|
170
|
+
| a | Full six-amendment ship | 150-250 | per-session | med |
|
|
171
|
+
| b | Narrow four amendments | 100-150 | per-session | low |
|
|
172
|
+
| c | Adjacent install.sh | 40-80 | per-adopter | med |
|
|
173
|
+
|
|
174
|
+
## Compounding value per option
|
|
175
|
+
|
|
176
|
+
**Option a:** [5-axis block, ~10 lines]
|
|
177
|
+
**Option b:** [5-axis block, ~10 lines]
|
|
178
|
+
**Option c:** [5-axis block, ~10 lines]
|
|
179
|
+
|
|
180
|
+
## Recommended card for Option a
|
|
181
|
+
|
|
182
|
+
[Card ~15 lines]
|
|
183
|
+
|
|
184
|
+
## Steps for Option a
|
|
185
|
+
|
|
186
|
+
[Step cards ~20 lines]
|
|
187
|
+
|
|
188
|
+
## Recommendation
|
|
189
|
+
|
|
190
|
+
Recommend Option a because Y.
|
|
191
|
+
|
|
192
|
+
Reply a, b, or c.
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Reader scrolls past ~80 lines of options + axes + cards + steps before reaching the pick.
|
|
196
|
+
|
|
197
|
+
### Conformant — recommendation first, cards on demand
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
[Three-block opener — Problem + Value + Evidence]
|
|
201
|
+
|
|
202
|
+
## Recommendation
|
|
203
|
+
|
|
204
|
+
**Recommend:** Option a (six-amendment ship · 150-250 turns · risk 🟡) because per-session compounding beats Option c's per-adopter frequency, and Option b defers /build value by one cycle.
|
|
205
|
+
|
|
206
|
+
## Options
|
|
207
|
+
|
|
208
|
+
| Option | Scope | Turns | Compounds | Risk | Why not (non-rec.) |
|
|
209
|
+
|---|---|---|---|---|---|
|
|
210
|
+
| a | Full six-amendment ship | 150-250 | per-session | 🟡 | rec |
|
|
211
|
+
| b | Narrow four amendments | 100-150 | per-session | 🟢 | drops /build value |
|
|
212
|
+
| c | Adjacent install.sh | 40-80 | per-adopter | 🟡 | drops baseline branch |
|
|
213
|
+
|
|
214
|
+
## Compounding value per option
|
|
215
|
+
|
|
216
|
+
[5-axis block per option — same as anti-pattern; hook postcondition per compounding-sequence-fresh-analysis.md requires per-option coverage today; hook extension to recommended-only lives at follow-on ticket per bassclef-web#152]
|
|
217
|
+
|
|
218
|
+
## Recommended · full · 150-250t · 🟡
|
|
219
|
+
|
|
220
|
+
[Card — Problem / Value / Compounds / Adopter — for Option a only]
|
|
221
|
+
|
|
222
|
+
## Steps for Option a
|
|
223
|
+
|
|
224
|
+
[Step cards — for Option a only]
|
|
225
|
+
|
|
226
|
+
Reply a, b, or c. Ask for "cards for B and C" to expand.
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Reader sees the pick in the first 8 lines. Scan table follows for context. Cards + step cards on demand for non-recommended.
|
|
230
|
+
|
|
231
|
+
### Anchor luminaries for the reshape
|
|
232
|
+
|
|
233
|
+
- **Sophia Prater (OOUX + progressive disclosure)** — recommended card renders by default; non-recommended cards expand on operator ask
|
|
234
|
+
- **Donald Norman (signifier)** — the recommendation sentence IS the signifier for the decision; place it where the eye lands first
|
|
235
|
+
- **Edward Tufte (data-ink)** — glyphs (🟢/🟡/🔴) encode risk in one character per scan-table cell; drops paragraph prose per option
|
|
236
|
+
- **Jason Fried (say less)** — non-recommended options ship rationale in the `Why not` column; no per-option card
|
|
237
|
+
- **Amazon PR/FAQ (decision at top)** — working-backwards discipline; reader sees "we recommend X because Y" first
|
|
238
|
+
|
|
239
|
+
### Table character class
|
|
240
|
+
|
|
241
|
+
Scan-table cells contain plain alphanumerics per `.claude/rules/visual-hierarchy.md` Section 12. Avoid em-dashes, backticks, quotes, or Unicode ellipsis in cells — Claude Code TUI falls back to key-value paragraphs when these characters appear. Cure per character in the sister rule catalog.
|
|
242
|
+
|
|
243
|
+
## Refs
|
|
244
|
+
|
|
245
|
+
- Ticket #853 — the filing case
|
|
246
|
+
- `.claude/luminaries/don-norman.md`
|
|
247
|
+
- `.claude/luminaries/jesse-james-garrett.md`
|
|
248
|
+
- `.claude/luminaries/sophia-prater.md`
|
|
249
|
+
- `.claude/luminaries/edward-tufte.md`
|
|
250
|
+
- `docs/personas/sam.md`
|
|
251
|
+
- `docs/personas/2026-07-12-bet11c-louis.md`
|
|
252
|
+
- `.claude/skills/longrun/SKILL.md` Steps 1.4c + 1.4d + 1.5-1.7 (card refactor)
|
|
253
|
+
- `.claude/skills/sprint/SKILL.md` Steps 7a + 7b (parity)
|
|
254
|
+
- ADR-040 Decision 4 (SKILL body template shape — this standard offloads the debate content from SKILL bodies to keep template lean)
|
|
255
|
+
- Bet 24d — original filing (principles 1-6)
|
|
256
|
+
- Bet 24e — this extension (principles 7-12 + card template + glyph legend + progressive disclosure)
|
|
257
|
+
- bassclef-web#152 — recommendation-first canonical example (adopter promote landing 2026-08-25)
|
|
258
|
+
|
|
259
|
+
## Retirement
|
|
260
|
+
|
|
261
|
+
Retires only if multi-option surfaces cease to be a bassclef output pattern.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: Stack-specific instantiation of .claude/rules/sdlc-gates.md for TypeScript.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SDLC Gates — TypeScript
|
|
7
|
+
|
|
8
|
+
Stack-specific instantiation of `.claude/rules/sdlc-gates.md` for TypeScript. Composed under ARCH-T0 #1133 Path A.
|
|
9
|
+
|
|
10
|
+
## When this sibling fires
|
|
11
|
+
|
|
12
|
+
When adopter's `.claude/bassclef-configs.jsonc` has `tech_stack.lang: typescript`. The loader (future ticket) reads this sibling and applies the TypeScript-specific globs in addition to the universal gates in the parent rule.
|
|
13
|
+
|
|
14
|
+
Until the loader ships, this sibling is discoverable via the cross-reference table in the parent rule. The universal gates fire methodologically regardless of stack.
|
|
15
|
+
|
|
16
|
+
## TypeScript-specific globs
|
|
17
|
+
|
|
18
|
+
```yaml
|
|
19
|
+
globs:
|
|
20
|
+
- src/**/*.ts
|
|
21
|
+
- src/**/*.tsx
|
|
22
|
+
- scripts/**/*.ts
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
These globs scope hook + tooling firing to TypeScript source files. The pre-build temperance + diagnose gates fire on these path matchers; the post-build `/verify` gate runs against these files.
|
|
26
|
+
|
|
27
|
+
## TypeScript-specific tech_stack_match
|
|
28
|
+
|
|
29
|
+
```yaml
|
|
30
|
+
tech_stack_match:
|
|
31
|
+
lang: typescript
|
|
32
|
+
backend: nodejs
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
For adopter configs that opt into the per-stack loader, this match field anchors the sibling to the right adopter declaration in `.claude/bassclef-configs.jsonc`.
|
|
36
|
+
|
|
37
|
+
## TypeScript-specific verify hooks
|
|
38
|
+
|
|
39
|
+
When the universal `/verify` gate fires post-build (per the parent rule), TypeScript-specific checks include:
|
|
40
|
+
|
|
41
|
+
- `tsc --noEmit` for type-checking
|
|
42
|
+
- `eslint` for static-analysis
|
|
43
|
+
- `vitest run` for unit tests
|
|
44
|
+
- (Optional, per adopter) `prettier --check` for formatting
|
|
45
|
+
|
|
46
|
+
The adopter's `package.json` scripts wire these into the `/verify` invocation.
|
|
47
|
+
|
|
48
|
+
## Composition with universal gates
|
|
49
|
+
|
|
50
|
+
Apply the universal gates from `.claude/rules/sdlc-gates.md` first; the TypeScript-specific globs above add file-scoping detail. When the two conflict (e.g., a TypeScript-specific check contradicts the universal failure-chain rule), the universal principle wins; file a `/promote` ticket if you believe the convention should be amended.
|
|
51
|
+
|
|
52
|
+
## Refs
|
|
53
|
+
|
|
54
|
+
- Parent rule: `.claude/rules/sdlc-gates.md`
|
|
55
|
+
- ARCH-T0 #1133 — operator-stack-leakage audit + remediation
|
|
56
|
+
- bassclef#1311 — this sibling (sdlc-gates Path A WU-7 of bet 2026-06-20e)
|
|
57
|
+
- bassclef#1309 — sister Path A (api-conventions WU-6)
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: The session-board is a session-level coordinator artifact for multi-bet longrun sessions.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Session-Board Standard
|
|
7
|
+
|
|
8
|
+
The session-board is a session-level coordinator artifact for **multi-bet
|
|
9
|
+
longrun sessions**. It tracks state across N bets simultaneously so a
|
|
10
|
+
mid-session pickup is resumption from a known state, not reconstruction
|
|
11
|
+
from `gh pr list` plus N stack manifests plus operator memory.
|
|
12
|
+
|
|
13
|
+
## When required
|
|
14
|
+
|
|
15
|
+
A session-board MUST exist when **either** holds:
|
|
16
|
+
|
|
17
|
+
1. **Multi-bet** — ≥2 active iteration goals in the session
|
|
18
|
+
2. **Multi-phase** — ≥2 phases of a single bet active in the same session
|
|
19
|
+
(rare, but possible when a bet's phase gate clears mid-session and the
|
|
20
|
+
operator rolls into the next phase without ending the session)
|
|
21
|
+
|
|
22
|
+
Singleton-bet single-phase sessions do NOT require a session-board. The
|
|
23
|
+
existing primitives are sufficient:
|
|
24
|
+
|
|
25
|
+
- `docs/whereami.md` — current state snapshot
|
|
26
|
+
- `docs/iteration-bets/<slug>.md` — scope contract
|
|
27
|
+
- `docs/branch-stacks/<slug>.md` (or `docs/stacks/<slug>-stack.md`) —
|
|
28
|
+
per-bet stack manifest
|
|
29
|
+
|
|
30
|
+
The session-board adds overhead. If you don't need it, don't write it.
|
|
31
|
+
|
|
32
|
+
## Why this artifact exists
|
|
33
|
+
|
|
34
|
+
For multi-bet sessions, today's primitives leave a coordinator gap. If
|
|
35
|
+
an overnight session dies on branch 9 of 17 across 3 bets, the next
|
|
36
|
+
session reconstructs state from `gh pr list` + reading 3 stack manifests +
|
|
37
|
+
trying to remember which bet was active when context was lost.
|
|
38
|
+
|
|
39
|
+
That's "rebuild map from artifacts" — exactly the failure mode
|
|
40
|
+
`docs/whereami.md` was created to prevent at the project level. The
|
|
41
|
+
session-board is the same prevention at the session level.
|
|
42
|
+
|
|
43
|
+
The plural `active_sessions:` registry in whereami (proposed in pipeline
|
|
44
|
+
bet Phase A WS-2) is the **index**; the session-board is the **per-session
|
|
45
|
+
detail** the index points to.
|
|
46
|
+
|
|
47
|
+
## Location
|
|
48
|
+
|
|
49
|
+
`docs/sessions/<YYYY-MM-DD>-<slug>.md` — one file per session.
|
|
50
|
+
|
|
51
|
+
The slug describes the session's shape, not its content. Examples:
|
|
52
|
+
- `2026-04-26-longrun.md` — multi-bet longrun
|
|
53
|
+
- `2026-05-03-overnight-pipeline-phase-b.md` — single-bet multi-phase overnight
|
|
54
|
+
|
|
55
|
+
## Schema
|
|
56
|
+
|
|
57
|
+
### Frontmatter
|
|
58
|
+
|
|
59
|
+
```yaml
|
|
60
|
+
---
|
|
61
|
+
session_id: <YYYY-MM-DD>-<slug>
|
|
62
|
+
session_started: <ISO-8601 UTC>
|
|
63
|
+
session_ended: <ISO-8601 UTC OR null while in-flight>
|
|
64
|
+
session_outcome: <short string OR null while in-flight>
|
|
65
|
+
mode: <gating>-<execution> # e.g. orchestrator-gated-sequential
|
|
66
|
+
operator: <github-username>
|
|
67
|
+
trigger: <one-line reason this session needed a board>
|
|
68
|
+
active_bets:
|
|
69
|
+
- slug: <bet-slug-without-extension>
|
|
70
|
+
phase_in_flight: <phase identifier OR "single" for non-phased bets>
|
|
71
|
+
appetite_turns: <integer>
|
|
72
|
+
stack_manifest: <path to stack manifest>
|
|
73
|
+
session_turn_budget: <integer — sum of bet appetites + buffer>
|
|
74
|
+
session_warning_threshold: <integer — typically 75% of budget>
|
|
75
|
+
---
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Body sections (all required)
|
|
79
|
+
|
|
80
|
+
**`# Session board — <slug>`** — top-level heading
|
|
81
|
+
|
|
82
|
+
**`## Sources read`** — every artifact the session-board reader reads
|
|
83
|
+
during pickup (per `.claude/rules/artifact-ingestion.md`). At minimum:
|
|
84
|
+
each bet, each stack manifest, the survival kit (per
|
|
85
|
+
`.claude/rules/context-management.md`), and any /promote issues filed in
|
|
86
|
+
this session.
|
|
87
|
+
|
|
88
|
+
**`## Active bets — quick reference`** — table summarizing the goal.,
|
|
89
|
+
their phase, turn budget, and independence relationships:
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
| Bet | Phase | Turns | Independence |
|
|
93
|
+
|---|---|---|---|
|
|
94
|
+
| <bet> | <phase> | <n> | <how-disjoint-from-others> |
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Plus a **scope-disjointness** declaration: list which file paths each
|
|
98
|
+
bet touches. If two bets touch the same paths, they are NOT
|
|
99
|
+
parallel-safe and the session board MUST note the sequencing rule.
|
|
100
|
+
|
|
101
|
+
**`## Per-WS status`** — table of every workstream across every bet:
|
|
102
|
+
|
|
103
|
+
```markdown
|
|
104
|
+
| Bet | WS | Branch | Status | PR | Notes |
|
|
105
|
+
|---|---|---|---|---|---|
|
|
106
|
+
| <bet> | <ws-id> | <branch-name> | todo \| in-flight \| pr-open \| merged \| rejected | <#NN OR —> | <one-line> |
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
This is the **work breakdown across all bets** — the artifact a
|
|
110
|
+
post-compaction or next-session pickup reads first to know what's done
|
|
111
|
+
and what's next.
|
|
112
|
+
|
|
113
|
+
**`## Compaction anchors`** — checkpoints that drive context-management
|
|
114
|
+
decisions:
|
|
115
|
+
|
|
116
|
+
- **Last compaction**: ISO-8601 timestamp OR "none yet"
|
|
117
|
+
- **Last `/temperance` firing**: timestamp + scope (kickoff / scope-decision / etc.)
|
|
118
|
+
- **Last phase completed**: bet + phase identifier OR "none"
|
|
119
|
+
- **Survival kit declared**: bullet list of files to re-read after
|
|
120
|
+
compaction. MUST include this session-board file itself.
|
|
121
|
+
|
|
122
|
+
**`## Session-level /temperance — anchored at kickoff`** — the
|
|
123
|
+
right-thing / right-way / scope-drift-trigger answers from the kickoff
|
|
124
|
+
firing. Any subsequent `/temperance` re-firings during the session are
|
|
125
|
+
appended in the operator decision log below.
|
|
126
|
+
|
|
127
|
+
**`## Phase-boundary checkpoints scheduled`** — table of when the
|
|
128
|
+
session will checkpoint:
|
|
129
|
+
|
|
130
|
+
```markdown
|
|
131
|
+
| When | Action |
|
|
132
|
+
|---|---|
|
|
133
|
+
| <trigger condition> | <what fires: re-temperance / update board / /sprint / etc.> |
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**`## Operator decision log`** — chronological record of mid-session
|
|
137
|
+
pivots, scope changes, re-anchors, scope-drift triggers. Each entry is
|
|
138
|
+
ISO-timestamped and one-or-two-sentence:
|
|
139
|
+
|
|
140
|
+
```markdown
|
|
141
|
+
- <ISO-ts> — <decision summary>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
This is the audit trail when the next session asks "why did the operator
|
|
145
|
+
pivot from WS-3 to WS-7 mid-session?"
|
|
146
|
+
|
|
147
|
+
**`## Closeout audit checklist`** — final checks at session end. Owned
|
|
148
|
+
by `/longrun closeout` when that skill exists; until then, manually run.
|
|
149
|
+
|
|
150
|
+
**`## Out of scope this session`** — explicit deferrals, with the rule:
|
|
151
|
+
"if any of these activate, fire `/longrun checkpoint --now` and
|
|
152
|
+
re-anchor."
|
|
153
|
+
|
|
154
|
+
## Lifecycle
|
|
155
|
+
|
|
156
|
+
| Stage | Trigger | Action |
|
|
157
|
+
|---|---|---|
|
|
158
|
+
| Create | `/longrun prep` (or manual scaffold from template) at session start | Write file with frontmatter + populated bets/WSes |
|
|
159
|
+
| Update | Each WS status change (todo → in-flight → pr-open → merged) | Edit the matching row in `## Per-WS status` |
|
|
160
|
+
| Update | Each compaction event | Append to `## Compaction anchors` |
|
|
161
|
+
| Update | Each operator pivot / scope decision | Append to `## Operator decision log` |
|
|
162
|
+
| Close | `/longrun closeout` at session end | Set `session_ended` + `session_outcome` in frontmatter; run closeout audit checklist |
|
|
163
|
+
|
|
164
|
+
The board is **append-mostly** — old entries are not edited or
|
|
165
|
+
backfilled. The only mutations are status table cells and frontmatter
|
|
166
|
+
close fields. This preserves audit trail.
|
|
167
|
+
|
|
168
|
+
## Composition with existing primitives
|
|
169
|
+
|
|
170
|
+
- **`docs/whereami.md`** — project-state snapshot (load-bearing per
|
|
171
|
+
`.claude/rules/whereami-load-bearing.md`). Session-board adds
|
|
172
|
+
session-level detail; whereami stays the project-level index. After
|
|
173
|
+
the pipeline bet's WS-2 ships, whereami's `active_sessions:` registry
|
|
174
|
+
will point at session-boards by file path.
|
|
175
|
+
- **`docs/iteration-bets/<slug>.md`** — scope contract per bet. The
|
|
176
|
+
session-board references each active bet's path; never duplicates the
|
|
177
|
+
bet's content.
|
|
178
|
+
- **`docs/branch-stacks/<slug>.md`** (or `docs/stacks/<slug>-stack.md`)
|
|
179
|
+
— per-bet stack manifest. Session-board references each manifest
|
|
180
|
+
path; the WS table aggregates across bets but each WS row points to
|
|
181
|
+
the per-bet manifest as authority.
|
|
182
|
+
- **`chronicle/<date>-<slug>.md`** — retrospective narrative. Orthogonal
|
|
183
|
+
to the session-board (chronicle is what-happened; session-board is
|
|
184
|
+
what's-happening-now). At session close, the chronicle MAY cite the
|
|
185
|
+
session-board as evidence; the chronicle does NOT replace it.
|
|
186
|
+
|
|
187
|
+
## Relationship to `/longrun` skill
|
|
188
|
+
|
|
189
|
+
The `/longrun` skill (separate /promote, bassclef#274) consumes this
|
|
190
|
+
standard. Specifically:
|
|
191
|
+
|
|
192
|
+
- **`/longrun prep`** — writes the initial session-board from the
|
|
193
|
+
template
|
|
194
|
+
- **`/longrun checkpoint`** — updates `## Per-WS status` + appends to
|
|
195
|
+
`## Operator decision log`
|
|
196
|
+
- **`/longrun closeout`** — runs the audit checklist + sets close
|
|
197
|
+
frontmatter fields
|
|
198
|
+
|
|
199
|
+
Until `/longrun` ships (after Phase A0 of the pipeline bet), session
|
|
200
|
+
boards are written and updated manually using the template.
|
|
201
|
+
|
|
202
|
+
## Anti-patterns
|
|
203
|
+
|
|
204
|
+
**Don't write a session-board for a singleton-bet session.** It adds
|
|
205
|
+
overhead without coordination value. Singleton-bet pickup uses
|
|
206
|
+
whereami + bet + stack manifest; that's sufficient.
|
|
207
|
+
|
|
208
|
+
**Don't duplicate bet content into the session-board.** If you find
|
|
209
|
+
yourself copying a bet's scope or risk register into the session-board,
|
|
210
|
+
stop — reference the goal path instead. The session-board is index +
|
|
211
|
+
status, not content.
|
|
212
|
+
|
|
213
|
+
**Don't silently retire or merge bets without updating the board.** The
|
|
214
|
+
status table is the source of truth for "what's alive." If a WS is
|
|
215
|
+
merged but the table still says `pr-open`, next-session pickup will be
|
|
216
|
+
confused.
|
|
217
|
+
|
|
218
|
+
**Don't backfill `## Operator decision log` after the fact.** The log is
|
|
219
|
+
append-only and timestamped. If a decision was missed at the time it
|
|
220
|
+
was made, append a current-time entry noting "retrospective: <summary>"
|
|
221
|
+
rather than fabricating a prior timestamp.
|
|
222
|
+
|
|
223
|
+
## Enforcement
|
|
224
|
+
|
|
225
|
+
Methodology-level today. The `/longrun` skill, when shipped, will
|
|
226
|
+
enforce session-board presence on `/longrun prep` for any session
|
|
227
|
+
declaring multi-goal scope. Until then, agent self-checks at session
|
|
228
|
+
start: "Am I about to manage ≥2 bets simultaneously? If yes, write a
|
|
229
|
+
session-board before starting work."
|
|
230
|
+
|
|
231
|
+
## Override
|
|
232
|
+
|
|
233
|
+
Singleton-bet or single-phase sessions skip this artifact entirely. No
|
|
234
|
+
override needed — the trigger condition (multi-bet OR multi-phase) is
|
|
235
|
+
the only entry. If neither holds, the session-board is not the right
|
|
236
|
+
tool.
|
|
237
|
+
|
|
238
|
+
## Retirement condition
|
|
239
|
+
|
|
240
|
+
If multi-bet longrun sessions are abandoned as a pattern (operator
|
|
241
|
+
prefers strict one-bet-per-session discipline), this standard retires
|
|
242
|
+
along with the `/longrun` skill. Until then, this standard is
|
|
243
|
+
load-bearing for any session that triggers the conditions above.
|
|
244
|
+
|
|
245
|
+
## Relationship to other standards/rules
|
|
246
|
+
|
|
247
|
+
- `standards/branch-stacking.md` — per-bet stack manifest pattern; this
|
|
248
|
+
standard adds the session-level layer above it
|
|
249
|
+
- `.claude/rules/whereami-load-bearing.md` — project-level state
|
|
250
|
+
artifact; this standard is the session-level peer
|
|
251
|
+
- `.claude/rules/artifact-ingestion.md` — the `## Sources read` block
|
|
252
|
+
pattern this standard's body uses
|
|
253
|
+
- `.claude/rules/context-management.md` — survival kit declaration in
|
|
254
|
+
`## Compaction anchors` is the post-compaction re-read list
|
|
255
|
+
- bassclef#274 — `/longrun` skill (consumes this standard)
|
|
256
|
+
- bassclef#273 — promotion issue this standard closes
|