@thebassclef/lite 0.1.3 → 1.0.1
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 +431 -135
- package/dist/cli.js +433 -137
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.bassclef-source.json +10 -0
- package/{substrate → dist/lite}/.claude/hooks/artifact-ingestion-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/assert-verify-steering.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/bassclef-source-config-validate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/bassclef-sync.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/compound-noun-scrub.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/kiss-expansion-inject.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/plain-english-steering.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/post-skill-friction-check.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/post-skill-telemetry.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/pre-build-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/pre-commit-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/session-end.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/session-reflection.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/skill-body-grade-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/skill-body-intent-drift.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/state-validate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/substrate-clarity-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/temperance-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/testing-tier-enforce.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/turn-prose-grade-measure.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/turn-prose-kiss-check.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/vocabulary-migration-check.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/whereami-utc-gate.sh +0 -0
- package/dist/lite/.claude/settings.json +212 -0
- package/dist/lite/CLAUDE.md +41 -0
- package/dist/lite/gitignore +58 -0
- package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
- package/dist/lite/whereami.md +24 -0
- package/package.json +8 -2
- package/substrate/.bassclef/lite-manifest.json +0 -2701
- package/substrate/.claude/agents/architect.md +0 -70
- package/substrate/.claude/agents/builder.md +0 -114
- package/substrate/.claude/agents/designer.md +0 -156
- package/substrate/.claude/agents/reviewer.md +0 -88
- package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
- package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
- package/substrate/.claude/luminaries/alan-cooper.md +0 -170
- package/substrate/.claude/luminaries/alistair-cockburn.md +0 -140
- package/substrate/.claude/luminaries/amazon-pr-faq.md +0 -34
- package/substrate/.claude/luminaries/ash-maurya.md +0 -121
- package/substrate/.claude/luminaries/bill-buxton.md +0 -210
- package/substrate/.claude/luminaries/charles-sanders-peirce.md +0 -150
- package/substrate/.claude/luminaries/david-ogilvy.md +0 -192
- package/substrate/.claude/luminaries/don-norman.md +0 -173
- package/substrate/.claude/luminaries/edward-tufte.md +0 -179
- package/substrate/.claude/luminaries/eric-evans.md +0 -160
- package/substrate/.claude/luminaries/frederick-brooks.md +0 -50
- package/substrate/.claude/luminaries/gang-of-four.md +0 -157
- package/substrate/.claude/luminaries/glenford-myers.md +0 -230
- package/substrate/.claude/luminaries/hunt-thomas.md +0 -115
- package/substrate/.claude/luminaries/hyrum-wright.md +0 -94
- package/substrate/.claude/luminaries/jason-fried-dhh.md +0 -46
- package/substrate/.claude/luminaries/jesse-james-garrett.md +0 -154
- package/substrate/.claude/luminaries/john-ousterhout.md +0 -94
- package/substrate/.claude/luminaries/karl-popper.md +0 -132
- package/substrate/.claude/luminaries/kent-beck.md +0 -168
- package/substrate/.claude/luminaries/linus-torvalds.md +0 -218
- package/substrate/.claude/luminaries/martin-fowler.md +0 -164
- package/substrate/.claude/luminaries/michael-feathers.md +0 -125
- package/substrate/.claude/luminaries/michael-nygard.md +0 -118
- package/substrate/.claude/luminaries/robert-c-martin.md +0 -164
- package/substrate/.claude/luminaries/saltzer-schroeder.md +0 -194
- package/substrate/.claude/luminaries/sophia-prater.md +0 -193
- package/substrate/.claude/luminaries/stephen-toulmin.md +0 -131
- package/substrate/.claude/luminaries/tony-hoare.md +0 -170
- package/substrate/.claude/luminaries/vaughn-vernon.md +0 -50
- package/substrate/.claude/luminaries/w-edwards-deming.md +0 -158
- package/substrate/.claude/rules/accessor-library-discipline.md +0 -138
- package/substrate/.claude/rules/adr-discipline.md +0 -120
- package/substrate/.claude/rules/api-conventions.md +0 -125
- package/substrate/.claude/rules/artifact-ingestion.md +0 -179
- package/substrate/.claude/rules/assert-only-after-verify.md +0 -137
- package/substrate/.claude/rules/blocked-items.md +0 -146
- package/substrate/.claude/rules/bootstrap-pair-discipline.md +0 -141
- package/substrate/.claude/rules/branching.md +0 -28
- package/substrate/.claude/rules/cold-adopter-harness-discipline.md +0 -129
- package/substrate/.claude/rules/commit-conventions.md +0 -22
- package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +0 -188
- package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +0 -188
- package/substrate/.claude/rules/context-engineering.md +0 -202
- package/substrate/.claude/rules/context-management.md +0 -85
- package/substrate/.claude/rules/defensive-bash.md +0 -68
- package/substrate/.claude/rules/deferred-actions.md +0 -233
- package/substrate/.claude/rules/destructive-operations.md +0 -69
- package/substrate/.claude/rules/diagnosis.md +0 -38
- package/substrate/.claude/rules/github-issue-flash-tweet.md +0 -156
- package/substrate/.claude/rules/guardrails.md +0 -73
- package/substrate/.claude/rules/hook-wire-on-author.md +0 -103
- package/substrate/.claude/rules/identifier-leak-prevention.md +0 -104
- package/substrate/.claude/rules/iteration-bet-brief-completeness.md +0 -54
- package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +0 -98
- package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +0 -89
- package/substrate/.claude/rules/loop-discipline.md +0 -81
- package/substrate/.claude/rules/manual-prod-approval.md +0 -100
- package/substrate/.claude/rules/marker-enrichment-discipline.md +0 -99
- package/substrate/.claude/rules/mobile-ephemeral-session.md +0 -109
- package/substrate/.claude/rules/new-dependency-check.md +0 -51
- package/substrate/.claude/rules/oo-ad-entry-point.md +0 -117
- package/substrate/.claude/rules/operator-facing-prose.md +0 -196
- package/substrate/.claude/rules/option-label-discipline.md +0 -108
- package/substrate/.claude/rules/pattern-annotation.md +0 -100
- package/substrate/.claude/rules/plain-english-discipline.md +0 -156
- package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +0 -211
- package/substrate/.claude/rules/pr-body-shape.md +0 -317
- package/substrate/.claude/rules/pr-strategy.md +0 -167
- package/substrate/.claude/rules/pr-title-shape.md +0 -161
- package/substrate/.claude/rules/prototype-workflow.md +0 -65
- package/substrate/.claude/rules/reserved-skill-names.md +0 -123
- package/substrate/.claude/rules/schema-management.md +0 -49
- package/substrate/.claude/rules/sdlc-gates.md +0 -149
- package/substrate/.claude/rules/security.md +0 -37
- package/substrate/.claude/rules/session-artifacts.md +0 -236
- package/substrate/.claude/rules/skill-composition-declarations.md +0 -124
- package/substrate/.claude/rules/skill-description-clarity.md +0 -247
- package/substrate/.claude/rules/skill-procedure-step-list.md +0 -137
- package/substrate/.claude/rules/state-schema-validation.md +0 -162
- package/substrate/.claude/rules/stuck-signal-diagnostic.md +0 -140
- package/substrate/.claude/rules/substrate-config-schema.md +0 -98
- package/substrate/.claude/rules/test-list-discipline.md +0 -175
- package/substrate/.claude/rules/test-sufficiency.md +0 -210
- package/substrate/.claude/rules/testing-tier-config.md +0 -145
- package/substrate/.claude/rules/testing.md +0 -38
- package/substrate/.claude/rules/turn-estimate-grounding.md +0 -134
- package/substrate/.claude/rules/visual-hierarchy.md +0 -437
- package/substrate/.claude/rules/we-dont-break-adopters.md +0 -126
- package/substrate/.claude/rules/whereami-load-bearing.md +0 -202
- package/substrate/.claude/rules/writing-craft-discipline.md +0 -92
- package/substrate/.claude/rules/wu-sequencing-compounds.md +0 -145
- package/substrate/.claude/skills/build/SKILL.md +0 -640
- package/substrate/.claude/skills/chronicle/SKILL.md +0 -55
- package/substrate/.claude/skills/clean-artifacts/SKILL.md +0 -249
- package/substrate/.claude/skills/decompose/SKILL.md +0 -280
- package/substrate/.claude/skills/diagnose/SKILL.md +0 -297
- package/substrate/.claude/skills/feynman/SKILL.md +0 -90
- package/substrate/.claude/skills/howdoi/SKILL.md +0 -105
- package/substrate/.claude/skills/ia-model/SKILL.md +0 -108
- package/substrate/.claude/skills/interaction-design/SKILL.md +0 -112
- package/substrate/.claude/skills/interpret-input/SKILL.md +0 -180
- package/substrate/.claude/skills/journal/SKILL.md +0 -209
- package/substrate/.claude/skills/kiss/SKILL.md +0 -449
- package/substrate/.claude/skills/launch/SKILL.md +0 -915
- package/substrate/.claude/skills/lean-canvas/SKILL.md +0 -332
- package/substrate/.claude/skills/longrun/SKILL.md +0 -463
- package/substrate/.claude/skills/luminary/SKILL.md +0 -481
- package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +0 -177
- package/substrate/.claude/skills/onboard-repo/SKILL.md +0 -1624
- package/substrate/.claude/skills/pattern-review/SKILL.md +0 -99
- package/substrate/.claude/skills/personas/SKILL.md +0 -207
- package/substrate/.claude/skills/promote/SKILL.md +0 -283
- package/substrate/.claude/skills/requirement/SKILL.md +0 -98
- package/substrate/.claude/skills/retro/SKILL.md +0 -117
- package/substrate/.claude/skills/riff/SKILL.md +0 -114
- package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +0 -163
- package/substrate/.claude/skills/session-end/SKILL.md +0 -309
- package/substrate/.claude/skills/session-log/SKILL.md +0 -299
- package/substrate/.claude/skills/skills/SKILL.md +0 -228
- package/substrate/.claude/skills/spec/SKILL.md +0 -105
- package/substrate/.claude/skills/sprint/SKILL.md +0 -392
- package/substrate/.claude/skills/stage/SKILL.md +0 -384
- package/substrate/.claude/skills/state-a-problem/SKILL.md +0 -185
- package/substrate/.claude/skills/temperance/SKILL.md +0 -108
- package/substrate/.claude/skills/use-case/SKILL.md +0 -417
- package/substrate/.claude/skills/user-stories/SKILL.md +0 -268
- package/substrate/.claude/skills/value-prop/SKILL.md +0 -251
- package/substrate/.claude/skills/verify/SKILL.md +0 -160
- package/substrate/.claude/skills/visual-review/SKILL.md +0 -503
- package/substrate/.claude/skills/whats-the-plan/SKILL.md +0 -202
- package/substrate/.claude/skills/whereami/SKILL.md +0 -307
- package/substrate/AGENTS.md +0 -79
- package/substrate/CLAUDE-lite.md +0 -85
- package/substrate/CODE_OF_CONDUCT.md +0 -28
- package/substrate/CONTRIBUTING.md +0 -177
- package/substrate/README.md +0 -173
- package/substrate/SECURITY.md +0 -19
- package/substrate/architecture/decisions/ADR-029-release-pipeline.md +0 -79
- package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +0 -139
- package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +0 -192
- package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +0 -145
- package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +0 -155
- package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +0 -162
- package/substrate/lib/clean-artifacts-sweep.sh +0 -112
- package/substrate/lib/code-comment-discipline.sh +0 -144
- package/substrate/lib/composer-preflight.sh +0 -459
- package/substrate/lib/hook-inject.sh +0 -255
- package/substrate/lib/luminary-pick.sh +0 -96
- package/substrate/lib/output-discipline.sh +0 -143
- package/substrate/lib/prose-scan-boundary.sh +0 -171
- package/substrate/lib/rewrite-check.sh +0 -214
- package/substrate/lib/state.sh +0 -1372
- package/substrate/lib/telemetry.sh +0 -205
- package/substrate/lib/tier-check.sh +0 -187
- package/substrate/lib/tier-dependency-audit.sh +0 -1088
- package/substrate/presence/install/bassclef-hook-connect.sh +0 -178
- package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +0 -841
- package/substrate/presence/install/bassclef-sync.template.sh +0 -2076
- package/substrate/presence/install/schedule-auto-save.cron.sh +0 -88
- package/substrate/presence/install/schedule-auto-save.taskscheduler.md +0 -122
- package/substrate/scripts/aggregate-telemetry.sh +0 -217
- package/substrate/scripts/analyze-tier-dependencies.sh +0 -239
- package/substrate/scripts/generate-lite-manifest.sh +0 -505
- package/substrate/scripts/generate-tier-manifest.sh +0 -28
- package/substrate/scripts/intent-drift-check.sh +0 -456
- package/substrate/scripts/lite-manifest-drift-check.sh +0 -146
- package/substrate/scripts/render-lite-manifest-doc.sh +0 -150
- package/substrate/standards/adr-template.md +0 -86
- package/substrate/standards/api-conventions/nextjs.md +0 -84
- package/substrate/standards/artifact-composition.md +0 -209
- package/substrate/standards/bash-hook-safety.md +0 -246
- package/substrate/standards/bassclef-configs-schema.md +0 -232
- package/substrate/standards/bassclef-evolution.md +0 -143
- package/substrate/standards/bassclef-internal-jargon.md +0 -244
- package/substrate/standards/bassclef-managed-sentinel.md +0 -96
- package/substrate/standards/bassclef-source-config.md +0 -228
- package/substrate/standards/branch-stacking.md +0 -408
- package/substrate/standards/code-safety-principles.md +0 -176
- package/substrate/standards/composer-prerequisites.md +0 -155
- package/substrate/standards/deferred-actions-schema.md +0 -204
- package/substrate/standards/dependency-discipline/cargo.md +0 -39
- package/substrate/standards/dependency-discipline/gem.md +0 -43
- package/substrate/standards/dependency-discipline/go-mod.md +0 -41
- package/substrate/standards/dependency-discipline/npm.md +0 -42
- package/substrate/standards/dependency-discipline/pip.md +0 -42
- package/substrate/standards/deployment-topology/ec2-tailscale.md +0 -225
- package/substrate/standards/deployment-topology.md +0 -69
- package/substrate/standards/docs-sync-allowlist.md +0 -76
- package/substrate/standards/domain-and-dns.md +0 -145
- package/substrate/standards/frontend-stack.md +0 -67
- package/substrate/standards/frontmatter-schema.md +0 -154
- package/substrate/standards/graceful-exit.md +0 -227
- package/substrate/standards/hook-idempotency.md +0 -102
- package/substrate/standards/hook-injection-discipline.md +0 -202
- package/substrate/standards/hook-install-class.md +0 -215
- package/substrate/standards/input-handler-interface.md +0 -152
- package/substrate/standards/lite-manifest-schema-changes.md +0 -135
- package/substrate/standards/luminary-matching.md +0 -105
- package/substrate/standards/luminary-problem-patterns.md +0 -481
- package/substrate/standards/migration-discipline/active-record.md +0 -50
- package/substrate/standards/migration-discipline/alembic.md +0 -43
- package/substrate/standards/migration-discipline/gorm.md +0 -50
- package/substrate/standards/migration-discipline/prisma.md +0 -53
- package/substrate/standards/migration-discipline/sqlalchemy.md +0 -51
- package/substrate/standards/mobile-ephemeral-session.md +0 -167
- package/substrate/standards/model-routing-discipline.md +0 -160
- package/substrate/standards/ogilvy-writing-rules.md +0 -225
- package/substrate/standards/opener-discipline.md +0 -96
- package/substrate/standards/operator-facing-prose-discipline.md +0 -201
- package/substrate/standards/persona-schema.md +0 -229
- package/substrate/standards/pluggable-luminaries.md +0 -323
- package/substrate/standards/pr-body-discipline.md +0 -115
- package/substrate/standards/preview-state-schema.md +0 -189
- package/substrate/standards/project-directory-layout.md +0 -276
- package/substrate/standards/release-tagging.md +0 -137
- package/substrate/standards/reserved-skill-names.md +0 -120
- package/substrate/standards/scannable-multi-option-output.md +0 -261
- package/substrate/standards/sdlc-compliance.md +0 -286
- package/substrate/standards/sdlc-gates/typescript.md +0 -57
- package/substrate/standards/secrets-lifecycle.md +0 -210
- package/substrate/standards/security-scanner-adapter.md +0 -145
- package/substrate/standards/session-board.md +0 -256
- package/substrate/standards/skill-output-discipline.md +0 -90
- package/substrate/standards/state-spine-contract.md +0 -255
- package/substrate/standards/state-spine.md +0 -511
- package/substrate/standards/steering-hints/kiss-words.md +0 -11
- package/substrate/standards/substrate-config-schema.md +0 -267
- package/substrate/standards/tech-stack-config.md +0 -109
- package/substrate/standards/tier-dependency-analysis.md +0 -167
- package/substrate/standards/tier-runtime-deps/lite.md +0 -57
- package/substrate/standards/tier-tag-schema.md +0 -155
- package/substrate/standards/two-layer-config.md +0 -99
- package/substrate/standards/use-case-format.md +0 -292
- package/substrate/standards/user-story-invest.md +0 -268
- package/substrate/standards/velocity-and-appetite.md +0 -229
- package/substrate/standards/voice-input-pattern.md +0 -119
- package/substrate/standards/whereami-schema.md +0 -301
- package/substrate/standards/worktree-management.md +0 -211
- package/substrate/standards/writing-guide.md +0 -213
- package/substrate/templates/chronicle-template.md +0 -75
- package/substrate/templates/deferred-action-template.md +0 -45
- package/substrate/templates/memory-proposal-template.md +0 -77
- package/substrate/templates/persona-template.md +0 -200
- package/substrate/templates/pr-faq.md +0 -45
- package/substrate/templates/secret-rotation-template.md +0 -162
- package/substrate/templates/spec-template.md +0 -131
- package/substrate/templates/use-case-template.md +0 -194
- package/substrate/templates/user-story-template.md +0 -107
- package/substrate/templates/whereami-template.md +0 -101
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
description: Universal SDLC gates — pre-build temperance + diagnose, post-build /verify, observed-failure chain. Stack-specific globs live in per-language siblings under standards/sdlc-gates/.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# SDLC Gates
|
|
7
|
-
|
|
8
|
-
Universal SDLC discipline applicable to any stack. The temperance + diagnose + verify chain is language-agnostic; the specific globs that scope the rule to source files live in per-language siblings under `standards/sdlc-gates/`. The loader (future ticket) reads adopter's `tech_stack.lang` from `.claude/bassclef-configs.jsonc` and applies the matching sibling's globs in addition to this rule.
|
|
9
|
-
|
|
10
|
-
When no sibling exists for the adopter's language, the universal gates below still apply — the rule fires methodologically even without glob-based file scoping.
|
|
11
|
-
|
|
12
|
-
## Per-stack siblings
|
|
13
|
-
|
|
14
|
-
| Adopter's `tech_stack.lang` | Sibling loaded |
|
|
15
|
-
|---|---|
|
|
16
|
-
| `typescript` | `standards/sdlc-gates/typescript.md` |
|
|
17
|
-
| `python` | `standards/sdlc-gates/python.md` *(future — file `/promote` to author)* |
|
|
18
|
-
| `ruby` | `standards/sdlc-gates/ruby.md` *(future)* |
|
|
19
|
-
| `go` | `standards/sdlc-gates/go.md` *(future)* |
|
|
20
|
-
| `none` or unset | universal gates only; no glob-based scoping |
|
|
21
|
-
|
|
22
|
-
When the matching sibling does not exist, the universal gates below apply; sibling-specific globs are skipped until the operator declares the stack and a sibling ships.
|
|
23
|
-
|
|
24
|
-
## Pre-Build (before writing code) — HOOK ENFORCED (BLOCKING)
|
|
25
|
-
|
|
26
|
-
The `pre-build-gate.sh` hook enforces these as hard blocks (exit 2)
|
|
27
|
-
on PreToolUse Edit / Write / MultiEdit. Per bassclef#1060 the gate
|
|
28
|
-
flipped from advisory (banner + exit 0) to blocking after an audit
|
|
29
|
-
showed 0 of 15 PRs had temperance markers. Methodology-only failed.
|
|
30
|
-
|
|
31
|
-
Override paths per gate: `SKIP_TEMPERANCE=1` and `SKIP_DIAGNOSE=1`
|
|
32
|
-
(logged via trace-helper).
|
|
33
|
-
|
|
34
|
-
1. **Temperance** — fires at **scope-decision boundaries**, not
|
|
35
|
-
per-branch. You must state your approach before the gate clears.
|
|
36
|
-
BLOCKS first edit on non-stacked branches until a marker exists
|
|
37
|
-
at `state/markers/temperance/<branch-slug>.marker`. Stacked
|
|
38
|
-
branches auto-suppress (the scope decision was made at
|
|
39
|
-
manifest-write time).
|
|
40
|
-
|
|
41
|
-
Scope-decision boundaries (where the gate IS load-bearing):
|
|
42
|
-
- Session kickoff (autonomous or `/longrun` start)
|
|
43
|
-
- Phase boundary (last WS in a phase transitions to merged →
|
|
44
|
-
next phase's premise re-engaged)
|
|
45
|
-
- Post-compaction recovery (context just compacted; have I drifted?)
|
|
46
|
-
- Scope-drift detection (a WS exceeds time budget × 1.5 → pause and
|
|
47
|
-
re-anchor)
|
|
48
|
-
- First edit per branch IF branch is NOT declared in any stack
|
|
49
|
-
manifest (non-stacked work fallback)
|
|
50
|
-
|
|
51
|
-
When the current branch IS declared in a `docs/stacks/*.md` or
|
|
52
|
-
`docs/branch-stacks/*.md` manifest, per-branch temperance is
|
|
53
|
-
**suppressed** — the scope decision was made at manifest-write
|
|
54
|
-
time. Phase-level firings cover the actual decision points.
|
|
55
|
-
Per bassclef#272.
|
|
56
|
-
|
|
57
|
-
Auto-fire mechanisms (session-kickoff, phase-boundary,
|
|
58
|
-
post-compaction, scope-drift detection) ship with the `/longrun`
|
|
59
|
-
skill (bassclef#274). Until then, the operator + agent fire
|
|
60
|
-
temperance manually at those boundaries.
|
|
61
|
-
2. **Diagnosis** — fires on ALL fix/ branches. You must run /diagnose
|
|
62
|
-
(Is/Is Not + Five Whys + Hypothesis) before writing any fix code.
|
|
63
|
-
The hook blocks until diagnosis evidence exists.
|
|
64
|
-
3. SDLC checkpoint — spec current? diagrams need updating?
|
|
65
|
-
4. Requirements → tickets — log before coding
|
|
66
|
-
|
|
67
|
-
## Observed failure → temperance → diagnose (MANDATORY)
|
|
68
|
-
|
|
69
|
-
Any time you observe a failure — regardless of source — fire this chain:
|
|
70
|
-
|
|
71
|
-
1. Temperance (pause before reacting):
|
|
72
|
-
- Is this expected? Is this worth investigating?
|
|
73
|
-
- Am I about to brute-force a retry instead of understanding?
|
|
74
|
-
|
|
75
|
-
2. Diagnose (if the failure is real):
|
|
76
|
-
- Is / Is Not
|
|
77
|
-
- Five Whys to root cause
|
|
78
|
-
- Hypothesis + test plan
|
|
79
|
-
- THEN fix
|
|
80
|
-
|
|
81
|
-
This applies to ALL failure sources:
|
|
82
|
-
- Tool output (CI logs, tsc errors, test failures, deploy logs)
|
|
83
|
-
- Failures you caused (pushed code → CI broke → fix before moving on)
|
|
84
|
-
- User-reported failures (text, screenshots, logs)
|
|
85
|
-
- Server logs you read
|
|
86
|
-
|
|
87
|
-
Do NOT rely on hooks alone. You are responsible for recognizing failures
|
|
88
|
-
in all forms and firing the temperance → diagnose chain yourself.
|
|
89
|
-
|
|
90
|
-
## Post-Build (before committing — EACH task, not batched)
|
|
91
|
-
|
|
92
|
-
Run /verify for the change type. Do not batch-build then batch-verify.
|
|
93
|
-
|
|
94
|
-
Before committing, ask yourself:
|
|
95
|
-
- Did I add or modify an exported function? → It needs a test.
|
|
96
|
-
- Did I change query logic or selection behavior? → Test it.
|
|
97
|
-
- Can I extract the logic into a pure function? → Do it, then test it.
|
|
98
|
-
|
|
99
|
-
"I'll add tests later" is never acceptable.
|
|
100
|
-
|
|
101
|
-
INSTEAD: tests ship with the code in the same commit. If the test is
|
|
102
|
-
hard to write, that's a signal the implementation needs decomposing —
|
|
103
|
-
fix the design first, then the test follows naturally.
|
|
104
|
-
|
|
105
|
-
## Bassclef Evolution Check (non-bassclef repos only)
|
|
106
|
-
|
|
107
|
-
Before committing **any methodology or configuration change** in an app repo,
|
|
108
|
-
ask: "Is this local or global?"
|
|
109
|
-
|
|
110
|
-
### What triggers the check
|
|
111
|
-
|
|
112
|
-
Not just `.claude/` — any change that establishes a pattern other repos
|
|
113
|
-
might need:
|
|
114
|
-
|
|
115
|
-
| Change | Examples | Why it matters |
|
|
116
|
-
|--------|----------|---------------|
|
|
117
|
-
| `.claude/` files | skills, rules, hooks, agents | Direct substrate changes |
|
|
118
|
-
| `settings.json` | model routing, permission defaults, hook config | Global agent behavior |
|
|
119
|
-
| `package.json` scripts | new dev commands, lint configs, build patterns | Workflow conventions |
|
|
120
|
-
| Hook scripts | pre-commit, pre-push, CI scripts | Process enforcement |
|
|
121
|
-
| Config files | `.eslintrc`, `tsconfig`, `prettier`, `.env.example` | Standards compliance |
|
|
122
|
-
| New workflow patterns | testing approaches, deployment scripts, seed patterns | Methodology evolution |
|
|
123
|
-
|
|
124
|
-
### The check
|
|
125
|
-
|
|
126
|
-
1. Is this general (applies to any project) or app-specific?
|
|
127
|
-
2. If general → run `/promote` to create a `bassclef-evolution` issue
|
|
128
|
-
3. Log the promotion and continue with current work.
|
|
129
|
-
|
|
130
|
-
INSTEAD of waiting for promotion to merge: file the issue and
|
|
131
|
-
keep moving. Promotion lands on its own cadence; current work
|
|
132
|
-
doesn't block on it.
|
|
133
|
-
|
|
134
|
-
4. If unsure → promote. It's cheaper to reject a promotion than to
|
|
135
|
-
rediscover the pattern later in another repo.
|
|
136
|
-
|
|
137
|
-
### Common miss: settings.json
|
|
138
|
-
|
|
139
|
-
Settings changes are the most commonly missed. When an app repo modifies
|
|
140
|
-
agent behavior, model routing, permission patterns, or hook configuration
|
|
141
|
-
in `settings.json`, that's almost always a global decision wearing local
|
|
142
|
-
clothes. The pre-commit hook flags these.
|
|
143
|
-
|
|
144
|
-
INSTEAD of dismissing the warning: read the flagged change, decide
|
|
145
|
-
local-vs-global, run /promote if global. Warnings are signal, not noise.
|
|
146
|
-
|
|
147
|
-
## Architect Review
|
|
148
|
-
|
|
149
|
-
Run /architect-review every 10 commits or before any launch.
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
globs: ["**/*.ts", "**/*.tsx", "**/*.json", ".env*", "Dockerfile*", "docker-compose*"]
|
|
4
|
-
description: Security scanning — loads when touching source, config, or infra files
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
Three-layer security pipeline. All block merge on failure.
|
|
8
|
-
|
|
9
|
-
Pipeline order: push → secret scan → lint → typecheck → SAST → dependency audit → test → build → deploy
|
|
10
|
-
|
|
11
|
-
Layer 1 — Secret Detection (gitleaks):
|
|
12
|
-
Pre-commit hook + CI. Catches API keys, OAuth tokens, AWS creds, private keys.
|
|
13
|
-
Never commit .env files, credentials, or API keys.
|
|
14
|
-
|
|
15
|
-
Layer 2 — Dependency Vulnerabilities (npm audit):
|
|
16
|
-
CI blocks on high-severity CVEs. Uses audit-ci for strict enforcement.
|
|
17
|
-
|
|
18
|
-
Layer 3 — SAST (ESLint security plugins + TypeScript compiler):
|
|
19
|
-
eslint-plugin-security, @typescript-eslint, eslint-plugin-no-secrets.
|
|
20
|
-
Optional: Semgrep for deeper analysis as complexity grows.
|
|
21
|
-
|
|
22
|
-
Rules:
|
|
23
|
-
- No secrets in code or logs — use environment variables
|
|
24
|
-
- Validate all user input at system boundaries
|
|
25
|
-
- Use parameterized queries (Prisma handles this)
|
|
26
|
-
- OWASP top 10 awareness: XSS, injection, broken auth, SSRF
|
|
27
|
-
|
|
28
|
-
Auth matrix (define per project):
|
|
29
|
-
- List every route and its required auth level
|
|
30
|
-
- Protected routes must check session/token
|
|
31
|
-
- Public routes must be explicitly marked as intentionally public
|
|
32
|
-
- API routes that modify data require auth — no exceptions
|
|
33
|
-
|
|
34
|
-
Tenant isolation (if multi-tenant):
|
|
35
|
-
- Every query on tenant-scoped models must include tenant context
|
|
36
|
-
- No hardcoded tenant IDs, financial thresholds, or tenant-specific logic
|
|
37
|
-
- Tenant context resolved at middleware/boundary, passed through
|
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
globs: ["*"]
|
|
4
|
-
description: Session artifacts — chronicle + journal entries at every phase transition and session end
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
In ALL configurations (operator-gated, orchestrator-gated, sequential, parallel), these artifacts are mandatory.
|
|
8
|
-
They fire regardless of whether /autonomous is active.
|
|
9
|
-
|
|
10
|
-
## Bassclef-side note — telemetry is local-only (bassclef#1205)
|
|
11
|
-
|
|
12
|
-
When this rule fires INSIDE bassclef itself (not adopter repos):
|
|
13
|
-
chronicles and state markers are written but NOT git-tracked. The paths
|
|
14
|
-
`chronicle/` and `state/markers/` are gitignored in bassclef's repo
|
|
15
|
-
per bassclef#1205. Iteration telemetry stays on the operator machine
|
|
16
|
-
and is destined for bassclef-upstream long-term per memory
|
|
17
|
-
`project_bassclef_private_to_bassclef_upstream`.
|
|
18
|
-
|
|
19
|
-
INSTEAD of pushing chronicles + markers to bassclef-public: write
|
|
20
|
-
them locally for operator continuity, commit only artifacts that
|
|
21
|
-
belong in the public substrate (skills, rules, hooks, standards,
|
|
22
|
-
ADRs). The brand-team Google Doc push (per the journal step below)
|
|
23
|
-
preserves shareable content without coupling bassclef's git history
|
|
24
|
-
to specific adopter sessions.
|
|
25
|
-
|
|
26
|
-
This applies to bassclef's own repo only; adopter repos keep
|
|
27
|
-
chronicles + markers tracked per their own configuration.
|
|
28
|
-
|
|
29
|
-
## Backfill before current (MUST — applies to all artifacts below)
|
|
30
|
-
|
|
31
|
-
Before writing ANY session artifact (chronicle, journal entry, release notes):
|
|
32
|
-
1. Check when the last entry was written
|
|
33
|
-
2. Check how many sessions/commits/days are missing since then
|
|
34
|
-
3. If there are gaps: backfill them FIRST, in chronological order (oldest first)
|
|
35
|
-
4. THEN write the current session's artifact
|
|
36
|
-
|
|
37
|
-
This prevents out-of-order content in append-only destinations (Google Docs)
|
|
38
|
-
and ensures no session is silently skipped.
|
|
39
|
-
|
|
40
|
-
## Chronicle (MUST — every phase transition + session end)
|
|
41
|
-
|
|
42
|
-
Before ending any session or completing any phase transition:
|
|
43
|
-
1. Check: when was the last chronicle entry? How many commits since?
|
|
44
|
-
2. If ≥3 commits since last entry: backfill the missing chronicle(s) FIRST
|
|
45
|
-
3. Then write the current session's chronicle
|
|
46
|
-
4. Chronicle location (per `standards/project-directory-layout.md`):
|
|
47
|
-
- App repos: `docs/chronicle/`
|
|
48
|
-
- Bassclef: `chronicle/` (root level)
|
|
49
|
-
- If the directory doesn't exist, create it per the standard.
|
|
50
|
-
5. **Use the bassclef template** — `templates/chronicle-template.md`.
|
|
51
|
-
Do NOT invent ad-hoc section structures for "narrative closeouts" or
|
|
52
|
-
similar shapes. The /chronicle and /session-end SKILLs both reference
|
|
53
|
-
this template; ad-hoc chronicles silently drop the Gate Evidence
|
|
54
|
-
section (bassclef#298 root cause).
|
|
55
|
-
6. **Populate the Gate Evidence section** — MUST, not optional. This
|
|
56
|
-
is the authoritative input for the 5-session gate-compliance counter.
|
|
57
|
-
Auto-populate script is in the template. Skipping it produces the
|
|
58
|
-
"0% compliance / no data" failure mode that pre-commit-gate.sh now
|
|
59
|
-
blocks mechanically (bassclef#298). Override only if you have an
|
|
60
|
-
explicit valid `n/a` reason per `standards/sdlc-compliance.md`
|
|
61
|
-
§"Gate skip justifications".
|
|
62
|
-
7. Verify the file exists after writing AND `grep -qiE "^## Gate (E|e)vidence"`
|
|
63
|
-
confirms the section is present.
|
|
64
|
-
|
|
65
|
-
## journal entries (SHOULD — session start + every notable decision or handoff)
|
|
66
|
-
|
|
67
|
-
### At session start (SHOULD — backfill before new work)
|
|
68
|
-
|
|
69
|
-
Before starting any new work, check for journal entry gaps:
|
|
70
|
-
1. Read the most recent draft in `docs/operator-private/journals/`
|
|
71
|
-
2. Read chronicles since that draft date
|
|
72
|
-
3. If any session produced a notable decision, trade-off, or insight:
|
|
73
|
-
backfill drafts NOW, oldest first, push to Google Doc
|
|
74
|
-
4. Then proceed with session work
|
|
75
|
-
|
|
76
|
-
This fires at session start, not just session end, because session-end
|
|
77
|
-
is where drafts get dropped — the agent runs out of context, the hook
|
|
78
|
-
times out, or the session dies. Catching it at the START of the next
|
|
79
|
-
session is the safety net.
|
|
80
|
-
|
|
81
|
-
### At session end and handoffs
|
|
82
|
-
|
|
83
|
-
At every role handoff, phase transition, or session end, ask:
|
|
84
|
-
"Did this session/phase/handoff produce a notable decision, trade-off,
|
|
85
|
-
or insight worth sharing?"
|
|
86
|
-
|
|
87
|
-
If yes:
|
|
88
|
-
1. Check for gaps: when was the last journal entry? Are there missed
|
|
89
|
-
sessions that owed drafts? Backfill those FIRST, oldest to newest.
|
|
90
|
-
2. Create docs/operator-private/journals/ if it doesn't exist
|
|
91
|
-
3. Write draft to docs/operator-private/journals/YYYY-MM-DD.md
|
|
92
|
-
4. Push to Google Doc — push in chronological order (oldest first):
|
|
93
|
-
Read the Google Doc ID from `substrate.config.md` field `journal_doc_id`.
|
|
94
|
-
If not configured there, check project memory for the doc ID.
|
|
95
|
-
If neither exists, skip the push and keep drafts local in docs/operator-private/journals/.
|
|
96
|
-
When configured — prefer `--dir` for batch pushes (script sorts by filename):
|
|
97
|
-
npx tsx ~/src/sunj-labs/poa/scripts/push-to-gdoc.ts --dir [drafts dir] --doc-id [ID from substrate.config.md]
|
|
98
|
-
For single new draft:
|
|
99
|
-
npx tsx ~/src/sunj-labs/poa/scripts/push-to-gdoc.ts --file [draft path] --doc-id [ID from substrate.config.md]
|
|
100
|
-
To fix out-of-order doc (clear + re-push sorted):
|
|
101
|
-
npx tsx ~/src/sunj-labs/poa/scripts/push-to-gdoc.ts --dir [drafts dir] --replace --doc-id [ID from substrate.config.md]
|
|
102
|
-
5. Verify both the local file and Google Doc push succeeded
|
|
103
|
-
|
|
104
|
-
High-value moments for journal entries:
|
|
105
|
-
- Scope kills (Shaper cutting features)
|
|
106
|
-
- Architecture choices (Architect choosing boring tech)
|
|
107
|
-
- Process insights (what broke, what worked, what surprised)
|
|
108
|
-
- Design pushback (Designer vs PM)
|
|
109
|
-
- Quantified results (N agents, M minutes, K artifacts)
|
|
110
|
-
|
|
111
|
-
Every draft file MUST include an **audience recommendations table**:
|
|
112
|
-
|
|
113
|
-
| Post | Primary audience | Hook strength | Publish priority |
|
|
114
|
-
|------|-----------------|--------------|-----------------|
|
|
115
|
-
|
|
116
|
-
Target audiences: PE partners, executive search leaders, board-level
|
|
117
|
-
operators, CPTOs, technical founders, eng leaders/managers.
|
|
118
|
-
Rate hook strength (weak/medium/strong/very strong/strongest).
|
|
119
|
-
Recommend a publish sequence with rationale.
|
|
120
|
-
Note overlapping posts and recommend which to publish vs hold.
|
|
121
|
-
|
|
122
|
-
## Wiki-as-we-go discipline (SHOULD — at /longrun closeout, per bassclef#1208)
|
|
123
|
-
|
|
124
|
-
At every `/longrun closeout`, ask:
|
|
125
|
-
|
|
126
|
-
> Did this run produce material surface changes that need a wiki refresh?
|
|
127
|
-
|
|
128
|
-
Discriminator list — any YES means wiki-refresh is owed:
|
|
129
|
-
|
|
130
|
-
- New, renamed, or retired skill
|
|
131
|
-
- New, renamed, or retired hook
|
|
132
|
-
- New, renamed, or retired rule
|
|
133
|
-
- New, renamed, or retired standard or ADR
|
|
134
|
-
- Changes to `/onboard-repo` Phase 2.x discovery surfaces
|
|
135
|
-
- New entries in `standards/bassclef-internal-jargon.md` (wordlist amendments)
|
|
136
|
-
- New entries in `standards/bassclef-source-consumers.json` (anonymizer registry)
|
|
137
|
-
|
|
138
|
-
If yes, either:
|
|
139
|
-
|
|
140
|
-
1. **Add wiki edits to the closeout PR** when the change is small and ships in the same window. Wiki repo is separate; commit + push the wiki-side changes with a cross-ref to the bassclef PR, and note the wiki commit hash in the closeout PR body.
|
|
141
|
-
2. **File a wiki-refresh follow-on ticket** when wiki changes are larger or need separate review. The ticket cites the bassclef PR(s) that introduced the substrate change and the wiki pages that need updating.
|
|
142
|
-
|
|
143
|
-
If no, note "no wiki refresh owed" in the closeout chronicle so a future reader sees the question was asked.
|
|
144
|
-
|
|
145
|
-
INSTEAD of letting the wiki drift quietly: ask the discriminator question at every closeout. The wiki is the cold-adopter front door; drift there is the most operator-visible failure mode.
|
|
146
|
-
|
|
147
|
-
## Session-rescue + memory-proposal (MUST — abrupt stop safety net)
|
|
148
|
-
|
|
149
|
-
When the Stop hook fires with unfinished MUST-tier obligations,
|
|
150
|
-
`.claude/hooks/session-end.sh` writes a
|
|
151
|
-
`docs/deferred-actions/<ts>-session-rescue.md` entry automatically.
|
|
152
|
-
The next session surfaces it as `BLOCKED: deferred-action` via
|
|
153
|
-
`60-deferred-actions.sh` and resolves per the entry's Command section.
|
|
154
|
-
|
|
155
|
-
### What the hook checks
|
|
156
|
-
|
|
157
|
-
Two signals trigger a rescue write (bassclef #239 hardening, 2026-04-21):
|
|
158
|
-
|
|
159
|
-
1. **Chronicle freshness** — at least one file in `chronicle/` or
|
|
160
|
-
`docs/chronicle/` has been written or modified within the last 24
|
|
161
|
-
hours. This is **session-relative**, not UTC-calendar-date-relative:
|
|
162
|
-
a chronicle dated yesterday written at 23:50 UTC still satisfies
|
|
163
|
-
the obligation when the next Stop fires at 00:10 the following day.
|
|
164
|
-
2. **Clean working tree** — `git status --porcelain -u` returns empty,
|
|
165
|
-
OR the only uncommitted paths are session-rescue entries the hook
|
|
166
|
-
itself wrote on a prior firing (self-output suppression). Real
|
|
167
|
-
content (any non-rescue path) still fires rescue.
|
|
168
|
-
|
|
169
|
-
Both signals together close the self-amplifying loop that prior
|
|
170
|
-
shapes produced (UTC calendar-date check + rescue-entry counting as
|
|
171
|
-
uncommitted work → auto-save → Stop → rescue → loop; see
|
|
172
|
-
`chronicle/2026-04-21-session-rescue-loop.md`).
|
|
173
|
-
|
|
174
|
-
This is additive to the obligations above — chronicle + journal entries
|
|
175
|
-
continue to be first-line duties. Rescue is the safety net for cases
|
|
176
|
-
where those weren't completed (context exhausted, OS interruption,
|
|
177
|
-
sandbox teardown, explicit abort).
|
|
178
|
-
|
|
179
|
-
### Memory proposals from ephemeral sessions
|
|
180
|
-
|
|
181
|
-
Mobile and cloud-web sessions cannot write to
|
|
182
|
-
`~/.claude/projects/.../memory/` — the operator's real home is
|
|
183
|
-
unreachable from the sandbox. When such a session identifies a memory
|
|
184
|
-
entry worth adding:
|
|
185
|
-
|
|
186
|
-
1. Copy `templates/memory-proposal-template.md` to
|
|
187
|
-
`docs/deferred-actions/<ts>-memory-<topic-slug>.md`
|
|
188
|
-
2. Fill in the target path, proposed frontmatter + body, MEMORY.md
|
|
189
|
-
index line
|
|
190
|
-
3. Commit with the session's normal artifact flow
|
|
191
|
-
|
|
192
|
-
Next desktop session sees it as `BLOCKED: deferred-action` (requires
|
|
193
|
-
`memory-write` capability), reviews, applies verbatim or edits first,
|
|
194
|
-
and `git mv`'s to `completed/` per the deferred-actions protocol.
|
|
195
|
-
|
|
196
|
-
See `.claude/rules/deferred-actions.md` for the full lifecycle.
|
|
197
|
-
|
|
198
|
-
## Cloud and degraded environments
|
|
199
|
-
|
|
200
|
-
In cloud (Claude Code web), CI runners, and fresh clones, the Stop hook
|
|
201
|
-
may not fire or may be killed before completing. This is not an excuse
|
|
202
|
-
to skip artifacts — it is a reason to be proactive.
|
|
203
|
-
|
|
204
|
-
When operating in a cloud or degraded environment:
|
|
205
|
-
|
|
206
|
-
1. **Do not wait for hooks** — invoke /session-end explicitly before ending
|
|
207
|
-
the session.
|
|
208
|
-
|
|
209
|
-
INSTEAD of assuming the Stop hook will fire: type `/session-end`
|
|
210
|
-
yourself when the session is at a natural close. Hooks are unreliable
|
|
211
|
-
in cloud / ephemeral / CI environments.
|
|
212
|
-
2. **Must tier first** — write the chronicle and commit locally before
|
|
213
|
-
attempting any network operation (push, Google Doc). Network may not
|
|
214
|
-
be available or may timeout.
|
|
215
|
-
3. **Journal-entry Google Doc push** — requires a service account key that is
|
|
216
|
-
not available in cloud. Write the draft to `docs/operator-private/journals/` and
|
|
217
|
-
skip the push step. Note "push pending — service account unavailable"
|
|
218
|
-
in the draft frontmatter.
|
|
219
|
-
4. **Stop hook timeout** — if the app repo's `settings.json` has a timeout
|
|
220
|
-
on the Stop hook, it MUST be at least 30 seconds (see session-end SKILL.md).
|
|
221
|
-
A 5-second timeout will kill `git push` silently.
|
|
222
|
-
|
|
223
|
-
INSTEAD of silently accepting a too-short timeout: file a ticket to
|
|
224
|
-
fix it. If you discover a timeout shorter than 30s, surface it.
|
|
225
|
-
5. **Graceful degradation order**:
|
|
226
|
-
- Chronicle (local, always possible) → commit checkpoint → git push
|
|
227
|
-
(may fail) → journal entry local (always possible) → Google Doc push
|
|
228
|
-
(may fail in cloud)
|
|
229
|
-
- Phase 1 (local artifacts) MUST complete even if Phase 2 (network) fails
|
|
230
|
-
|
|
231
|
-
## This rule exists because
|
|
232
|
-
|
|
233
|
-
Agents forget to write session artifacts in long sessions, especially
|
|
234
|
-
after context compaction. Putting this in rules/ ensures it loads into
|
|
235
|
-
every session at every level. The choreography doc has the full protocol;
|
|
236
|
-
this rule is the reminder that fires regardless of mode.
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
description: How and when skills declare composes_with (extends another skill) vs depends_on (needs a runtime predecessor) in frontmatter. Closes bassclef#862 Gap 3.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Skill composition declarations — `composes_with:` and `depends_on:`
|
|
7
|
-
|
|
8
|
-
Two frontmatter fields make skill relationships explicit and machine-checkable. `composes_with:` names skills the current skill builds on. `depends_on:` names what must exist at runtime before the skill can usefully run.
|
|
9
|
-
|
|
10
|
-
The substrate-clarity-gate hook reads both fields and catches typos by checking that named targets actually exist on disk. `composes_with:` is strict — a missing target blocks the write. `depends_on:` is advisory in V1.
|
|
11
|
-
|
|
12
|
-
## When this rule fires
|
|
13
|
-
|
|
14
|
-
When authoring or editing a skill frontmatter and you need to express:
|
|
15
|
-
|
|
16
|
-
- "This skill chains with skill X" → `composes_with:`
|
|
17
|
-
- "This skill needs Y to exist or be set first" → `depends_on:`
|
|
18
|
-
|
|
19
|
-
Either field is optional. Skills that stand alone need neither.
|
|
20
|
-
|
|
21
|
-
## `composes_with:` — extends another skill's behavior
|
|
22
|
-
|
|
23
|
-
Use when the current skill builds on another skill's output, runs another skill as a step, or extends another skill's discipline.
|
|
24
|
-
|
|
25
|
-
Format:
|
|
26
|
-
|
|
27
|
-
```yaml
|
|
28
|
-
composes_with: [kiss, value-prop]
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Each name must match a `.claude/skills/<name>/SKILL.md` file. The hook BLOCKs the write when a name does not resolve.
|
|
32
|
-
|
|
33
|
-
Examples that qualify:
|
|
34
|
-
|
|
35
|
-
- `/longrun` composes_with `[temperance, retro, promote, session-end]` — runs these skills at lifecycle points
|
|
36
|
-
- `/launch` composes_with `[interpret-input, stage, spec, use-case]` — chains the buildable-plan pipeline
|
|
37
|
-
- `/diagnose` composes_with `[temperance]` — fires temperance before diagnostic ceremony
|
|
38
|
-
|
|
39
|
-
When `composes_with:` is wrong, the substrate doesn't know the skill maps to a real chain. INSTEAD of listing rough memory of which skills run: list the exact slugs the skill calls.
|
|
40
|
-
|
|
41
|
-
## `depends_on:` — required runtime predecessors
|
|
42
|
-
|
|
43
|
-
Use when the skill assumes a predecessor exists at runtime. The predecessor can be a skill, a rule, or a known config block in `.claude/bassclef-configs.jsonc`.
|
|
44
|
-
|
|
45
|
-
Format:
|
|
46
|
-
|
|
47
|
-
```yaml
|
|
48
|
-
depends_on: [tech_stack, personas]
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
V1 enforcement is advisory. The hook warns when a named target does not resolve as a skill, rule, or known config block, but the write passes. V2 may flip to strict once the vocabulary stabilizes.
|
|
52
|
-
|
|
53
|
-
Recognized config blocks (V1 list): `tech_stack`, `adopter_defaults`, `plan_tier`, `prose_discipline`, `longrun`, `testing`.
|
|
54
|
-
|
|
55
|
-
Examples that qualify:
|
|
56
|
-
|
|
57
|
-
- A skill that reads adopter stack metadata depends_on `[tech_stack]`
|
|
58
|
-
- A skill that requires persona definitions depends_on `[personas]` (the `/personas` skill must have run)
|
|
59
|
-
- A skill that reads adopter overrides depends_on `[adopter_defaults]` (the bassclef-configs block)
|
|
60
|
-
|
|
61
|
-
When `depends_on:` is wrong, the skill silently produces empty output instead of telling the operator what is missing. INSTEAD of letting the skill discover its preconditions at runtime: declare them up front.
|
|
62
|
-
|
|
63
|
-
## composes_with vs depends_on — picking one
|
|
64
|
-
|
|
65
|
-
| If the relationship is... | Use |
|
|
66
|
-
|---|---|
|
|
67
|
-
| The current skill runs the other skill as a step | `composes_with:` |
|
|
68
|
-
| The current skill extends or chains the other skill's output | `composes_with:` |
|
|
69
|
-
| The current skill needs prior session state from another skill | `depends_on:` |
|
|
70
|
-
| The current skill reads a config block at runtime | `depends_on:` |
|
|
71
|
-
| The current skill assumes a rule is in force | `depends_on:` |
|
|
72
|
-
|
|
73
|
-
INSTEAD of listing the same name in both fields: pick the relationship that fires first. A skill that both runs `/value-prop` AND needs `/personas` from a prior session declares `composes_with: [value-prop]` plus `depends_on: [personas]`.
|
|
74
|
-
|
|
75
|
-
## What this rule does NOT cover
|
|
76
|
-
|
|
77
|
-
- Source code patterns and design pattern annotations — see `.claude/rules/pattern-annotation.md`
|
|
78
|
-
- Frontmatter schema fields other than these two — see `standards/frontmatter-schema.md`
|
|
79
|
-
- Adopter onboarding wiring (which adopter-config blocks ship by default) — see `.claude/skills/onboard-repo/SKILL.md`
|
|
80
|
-
- Layer 3 traceability manifests that auto-populate from declared values — Phase 4 of bet 2026-06-18a (WU-17/WU-18/WU-19 deferred follow-on)
|
|
81
|
-
|
|
82
|
-
## Mechanical enforcement
|
|
83
|
-
|
|
84
|
-
- `composes_with:` value type must be a YAML list of strings. A non-list type or a non-string item BLOCKs the write.
|
|
85
|
-
- Each name in `composes_with:` must resolve to `<repo>/.claude/skills/<name>/SKILL.md`. A missing target BLOCKs.
|
|
86
|
-
- Each name in `depends_on:` resolves against skills, rules, or known config blocks. A miss emits an ADVISORY notice and passes.
|
|
87
|
-
- Substrate root for path resolution is derived from the file being written (everything before `/.claude/`).
|
|
88
|
-
|
|
89
|
-
Hook: `.claude/hooks/substrate-clarity-gate.sh` (added in bassclef#862 WU-15).
|
|
90
|
-
Tests: `.claude/hooks/tests/substrate-clarity-gate.test.sh` Tests 27–36.
|
|
91
|
-
|
|
92
|
-
## Override
|
|
93
|
-
|
|
94
|
-
`SKIP_SUBSTRATE_CLARITY=1 <command>` bypasses the validation and logs the override via trace-helper. INSTEAD of overriding when a target is genuinely missing: file the missing skill first, then add the composes_with entry.
|
|
95
|
-
|
|
96
|
-
Override is appropriate when:
|
|
97
|
-
|
|
98
|
-
- A migration script edits many skills at once and the target skill ships in the same PR
|
|
99
|
-
- Emergency rescue when the hook itself is broken
|
|
100
|
-
|
|
101
|
-
## Composes with
|
|
102
|
-
|
|
103
|
-
- `.claude/rules/skill-description-clarity.md` — sister discipline at the frontmatter description surface
|
|
104
|
-
- `.claude/rules/state-schema-validation.md` — sister mechanical check at the state-spine surface
|
|
105
|
-
- `standards/frontmatter-schema.md` — full frontmatter field catalog
|
|
106
|
-
|
|
107
|
-
## Refs
|
|
108
|
-
|
|
109
|
-
- bassclef#862 Gap 3 — declared composition fields
|
|
110
|
-
- WU-15 of `docs/iteration-bets/2026-06-18a-public-adopter-leverage-longrun.md` — ships this rule + hook extension
|
|
111
|
-
- WU-3 of same bet (bassclef PR #1167) — frontmatter schema validation that recognized these fields
|
|
112
|
-
- bassclef#1127 — tech_stack vocabulary; the first recognized config block
|
|
113
|
-
- WU-17 / WU-18 / WU-19 (deferred) — Phase 4 manifests that read declared values to build forward/reverse lookups
|
|
114
|
-
|
|
115
|
-
## Sources read
|
|
116
|
-
|
|
117
|
-
- `.claude/hooks/substrate-clarity-gate.sh` — current validation passes
|
|
118
|
-
- `standards/frontmatter-schema.md` — recognized field catalog
|
|
119
|
-
- bassclef#862 issue body — WU-3 + WU-15 framing
|
|
120
|
-
- `docs/iteration-bets/2026-06-18a-public-adopter-leverage-longrun.md` — goal doc with WU-15 spec
|
|
121
|
-
|
|
122
|
-
## Retirement condition
|
|
123
|
-
|
|
124
|
-
This rule retires when declared composition fields are no longer in the substrate vocabulary. The fields may evolve (Layer 3 manifests may read them differently) but the discipline of declaring relationships at the frontmatter surface persists.
|