@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,196 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
description: Any shorthand in operator-facing prose carries a plain-language gloss at first mention per response.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Operator-facing prose
|
|
7
|
-
|
|
8
|
-
Any shorthand in operator-facing prose carries a plain-language gloss at first mention per response. When editing any SKILL.md file, apply a /kiss pass to the whole file in the same change.
|
|
9
|
-
|
|
10
|
-
This rule is the conversation layer of `standards/operator-facing-prose-discipline.md`. The standard names the principle, the format catalog, and the reasoning about who reads the output. This rule loads into every session via `additionalDirectories` and fires at every operator-facing response.
|
|
11
|
-
|
|
12
|
-
## When this rule fires
|
|
13
|
-
|
|
14
|
-
Fires on every response the operator reads: skill tool output, turn prose between the agent and the operator, status reports, checkpoint summaries, recommendations.
|
|
15
|
-
|
|
16
|
-
Skips:
|
|
17
|
-
- Raw tool output relays (git, gh, test output passed through)
|
|
18
|
-
- Code blocks
|
|
19
|
-
- File path quotations
|
|
20
|
-
- Reserved skill names (e.g., `/sprint`, `/longrun`) — operator-invocable; the prefix carries the context
|
|
21
|
-
|
|
22
|
-
## Rule 1 — Gloss at first mention per response
|
|
23
|
-
|
|
24
|
-
Any shorthand label carries a brief inline gloss on first mention per response IF a reader coming in cold would need context to know what the label refers to. Subsequent mentions in the same response can drop the gloss.
|
|
25
|
-
|
|
26
|
-
A shorthand label is any compressed reference — number, letter, category name, path token — that stands in for a longer concept the reader may not carry.
|
|
27
|
-
|
|
28
|
-
### What an appositive is (Ship 2 amendment 2026-08-20 per bassclef-upstream#1313)
|
|
29
|
-
|
|
30
|
-
An appositive is a comma plus a noun (or noun phrase) that renames, explains, or gives more information about the shorthand. It can appear at ANY mention that carries meaning-signal to the reader — not only the first. Three shapes all satisfy this rule:
|
|
31
|
-
|
|
32
|
-
- **Parenthetical** — `<shorthand> (<noun phrase>)` — e.g., `#1312 (in-line 8th-grade steering for sentence-level grade output)`
|
|
33
|
-
- **Comma phrase** — `<shorthand>, <noun phrase>,` — e.g., `PR #1316, the in-line 8th-grade steering merge,`
|
|
34
|
-
- **Em-dash** — `<shorthand> — <noun phrase> —` — e.g., `Bucket B6 — the schema tests bucket —`
|
|
35
|
-
|
|
36
|
-
**Critical: the appositive text must be understandable to a cold reader.** Using session shorthand INSIDE the appositive (e.g., `#1312 (Ship 1 sentence-level grade output)`) defeats the whole purpose. A cold reader has no idea what "Ship 1" means. The appositive should translate the shorthand into plain concepts the reader already carries — what the ticket delivers, what the merge changes, what the bucket contains.
|
|
37
|
-
|
|
38
|
-
Session-2026-08-19g operator correction (verbatim): "an appositive is not just first gloss; a common definition is a comma + a noun or noun phrase that renames, explains, or gives more information about the shorthand you use". Follow-up correction (same session) after I shipped examples that used session shorthand inside the appositive: my examples "simply extend the obfuscation" — the appositive must land in plain terms, not another compressed reference.
|
|
39
|
-
|
|
40
|
-
Rationale: the `first-mention` scope in the original rule was too narrow. Readers benefit from a comma phrase at any mention where the shorthand carries meaning. The appositive is the moment where the shorthand gets translated, so the translation itself must be in plain vocabulary.
|
|
41
|
-
|
|
42
|
-
Mechanism per bassclef-upstream#1313 Ship 2: `.claude/hooks/turn-prose-kiss-check.sh`, the Stop hook that scans the last message, checks each shorthand match for an adjacent appositive within 40 characters (any of the three shapes above). The hook checks structural presence only — it cannot verify that the appositive text itself is plain. Operator judgment catches shorthand-inside-appositive; the hook catches missing-appositive. Advisory in V1; flips to strict after one calibration cycle with false positive rate under 5%.
|
|
43
|
-
|
|
44
|
-
### Two shorthand shapes this rule covers
|
|
45
|
-
|
|
46
|
-
**1. Bassclef substrate shorthand families (fixed catalog).** These families always need a gloss because the reference is substrate-specific:
|
|
47
|
-
|
|
48
|
-
- Step refs: `WU-N`, `B1-WU4`, `Bet 2 WU-1`
|
|
49
|
-
- Audit finding refs: `F-X.Y`, `F-D9.1`, `F-D11.1`
|
|
50
|
-
- ADR refs: `ADR-NNN`, `ADR-021`, `ADR-022`
|
|
51
|
-
- GitHub issue and PR refs: `#NNN`, `bassclef#NNN`, `PR #NNN`
|
|
52
|
-
- Leap-of-faith and chain-of-beliefs refs: `LF-N`, `LF1`, `LF5`
|
|
53
|
-
- Phase and iteration refs: `Phase XIV`, `Iteration 2026-05-24c`
|
|
54
|
-
|
|
55
|
-
**2. Session-invented shorthand (open-ended).** Labels that get coined mid-session — audit bucket names, cure path letters, session-position abbreviations, option letters — always need a gloss because the reference exists only in the session that invented it. A reader picking up the response cold has no way to decode the label without help.
|
|
56
|
-
|
|
57
|
-
Examples of session-invented shorthand this rule extends to:
|
|
58
|
-
|
|
59
|
-
- `Bucket 2a`, `Bucket 2b`, `Bucket 3` — audit classification labels
|
|
60
|
-
- `Path A`, `Path B`, `Path C` — cure option letters in a matrix
|
|
61
|
-
- `Part A`, `Part B` — commit-split labels
|
|
62
|
-
- `S2`, `S3`, `S4` — session-position abbreviations in a multi-session sequence
|
|
63
|
-
- `Option a`, `Option b`, `Option F` — decision menu letters
|
|
64
|
-
- `LR-1`, `LR-2` — long-run sequence position
|
|
65
|
-
|
|
66
|
-
Reserved names per bassclef#763 stay as is: `substrate`, `bassclef`, `cameo`, `Studio`, `Band`, `bandleader`.
|
|
67
|
-
|
|
68
|
-
### Format
|
|
69
|
-
|
|
70
|
-
INSTEAD of unglossed shorthand: gloss inline at first mention. Format: `<shorthand> (<appositive — 3-8 words naming what the shorthand refers to>)`.
|
|
71
|
-
|
|
72
|
-
An appositive is a short phrase right after the label that renames or explains it. It carries the meaning-signal the label alone lacks.
|
|
73
|
-
|
|
74
|
-
### Worked examples
|
|
75
|
-
|
|
76
|
-
Substrate-family shorthand (unchanged from prior rule):
|
|
77
|
-
|
|
78
|
-
- `B1-WU4 (Tier 0 pitch draft using canvas UVP)` — gloss inline
|
|
79
|
-
- `#774 (Phase XIV rescope proposal)` — gloss inline
|
|
80
|
-
- `F-D9.1 (README hedges audience — audit HIGH)` — gloss inline
|
|
81
|
-
|
|
82
|
-
Session-invented shorthand (added per bassclef-upstream#1267):
|
|
83
|
-
|
|
84
|
-
- `Bucket 2a (audit files with no tier tag at all)` — instead of bare `Bucket 2a`
|
|
85
|
-
- `Path B (inline the skill into its caller)` — instead of bare `Path B`
|
|
86
|
-
- `Part A (reconcile the 20 known missing files)` — instead of bare `Part A`
|
|
87
|
-
- `S2 (Session 2 — Traceability Phase 1 per LR-1 roadmap)` — instead of bare `S2`
|
|
88
|
-
- `Option F (swap bassclef-sync ln -s for cp)` — instead of bare `Option F`
|
|
89
|
-
- `LR-1 (long-run 1 — tier ecosystem sequence)` — instead of bare `LR-1`
|
|
90
|
-
|
|
91
|
-
### When the gloss adds no signal
|
|
92
|
-
|
|
93
|
-
Skip the gloss when the label is self-explanatory to a cold reader — a full word already carries the meaning. Examples: `Session 2 Traceability` (no gloss needed; the label IS the description); `Option F: bassclef-sync copy swap` (already glossed inline by the phrase after the colon).
|
|
94
|
-
|
|
95
|
-
INSTEAD of mechanical inflation when the gloss makes a sentence unreadable: restructure the sentence. The principle is operator readability, not mechanical glossing.
|
|
96
|
-
|
|
97
|
-
### Forward-only enforcement
|
|
98
|
-
|
|
99
|
-
Existing prose in chronicles, session logs, and closed PRs stays as is per `.claude/rules/we-dont-break-adopters.md` grace window discipline. Rule applies to new prose from amendment date forward.
|
|
100
|
-
|
|
101
|
-
## Rule 2 — /kiss pass when editing any SKILL.md
|
|
102
|
-
|
|
103
|
-
When touching any SKILL.md file for any reason, apply a /kiss pass to the entire file in the same change.
|
|
104
|
-
|
|
105
|
-
INSTEAD of shipping a discipline change that itself contains bassclef jargon: rewrite the existing dense language in the same change. Otherwise the discipline breaks itself.
|
|
106
|
-
|
|
107
|
-
Allowlist per bassclef#763 stays: `substrate`, `bassclef`, `cameo`, `Studio`, `Band`, `bandleader`. Everything else: grade-8 English, subject-verb-object, no bassclef compound terms (`load-bearing`, `cross-cutting`, `forcing function`, `substrate-resident`, `operator-locked`, `operating thesis`, `compose-with`, `tier-preset`, `operationalize`, `composer` as a noun).
|
|
108
|
-
|
|
109
|
-
INSTEAD of shipping the edit with the jargon intact when scope is tight: file a dedicated /kiss-pass PR. The next reader inherits the failure otherwise.
|
|
110
|
-
|
|
111
|
-
## Rule 3 — Skill dispatch citation on /longrun surfaces
|
|
112
|
-
|
|
113
|
-
Per bassclef-upstream#374 (V2 of #366) and bassclef-upstream#750 (V3 opener discipline). Every /longrun surface where the agent talks with the operator MUST open with three blocks per `standards/opener-discipline.md`:
|
|
114
|
-
|
|
115
|
-
- Problem (via `/state-a-problem brief`)
|
|
116
|
-
- Value prop (via `/value-prop tweet`)
|
|
117
|
-
- Evidence (source + warrant per `.claude/rules/assert-only-after-verify.md`)
|
|
118
|
-
|
|
119
|
-
Every named surface also cites the dispatched skill inline (e.g., "via `/value-prop tweet`", "(per `/temperance`)", "drafted by `/state-a-problem brief`") OR carries a short discipline-marker line ahead of the prose.
|
|
120
|
-
|
|
121
|
-
Named surfaces this rule covers:
|
|
122
|
-
|
|
123
|
-
- `longrun_prep_proposal` — `/longrun prep` Step 0 opener + Step 1 pre-flight + Step 1.5/1.6/1.7 shape proposals
|
|
124
|
-
- `longrun_checkpoint` — `/longrun checkpoint` opener + status report
|
|
125
|
-
- `longrun_closeout` — `/longrun closeout` opener + retro lead-in
|
|
126
|
-
- `status_update` — any /longrun status update or progress report between steps
|
|
127
|
-
|
|
128
|
-
The agent touches `state/markers/turn-prose-surface/<surface>.marker` BEFORE posting the named surface. The Stop hook `turn-prose-kiss-check.sh` reads the marker and scans the latest assistant message for the skill dispatch citation. ADVISORY in V1 (per bassclef-upstream#374 acceptance); BLOCK in V2 after one calibration cycle.
|
|
129
|
-
|
|
130
|
-
INSTEAD of writing prose without citing the dispatched skill: dispatch the skill (`/state-a-problem brief`, `/value-prop tweet`, `/kiss words`, `/temperance`, `/luminary`) and cite it inline. Touching the marker without dispatching the skill is the failure pattern this rule closes (bet 25k chronicle § "What didn't work — the diagnosis interlude" named 5 surfaces this rule covers).
|
|
131
|
-
|
|
132
|
-
Surface citation format examples:
|
|
133
|
-
|
|
134
|
-
- Problem lead: `> **Problem (via `/state-a-problem brief`)**: <who + what + when + why now + outcome>`
|
|
135
|
-
- Value prop: `> **Value prop (via `/value-prop tweet`)**: <claim + sharpener>`
|
|
136
|
-
- Evidence: `> **Evidence**: Source `<path or ticket>`. Warrant: <one sentence tying source to claim>.`
|
|
137
|
-
- Temperance answer: `**/temperance** fired at <surface>. <scope-decision>. <drift-trigger>.`
|
|
138
|
-
- Luminary pick: `**/luminary** primary lens `<slug>` — <one line on what the lens caught>.`
|
|
139
|
-
- Status update: opens with `> **Checkpoint via `/longrun checkpoint`**: <one line>` OR carries a `## /temperance + /luminary + /loop discipline` block per bet 25k.
|
|
140
|
-
|
|
141
|
-
Grace window per `.claude/rules/we-dont-break-adopters.md` — the prior opener shape (`/value-prop flash` + `/kiss words`) keeps working through 2026-10-31. New sessions open with the three blocks. Sessions from before the rewrite still open with tweet + KISS.
|
|
142
|
-
|
|
143
|
-
## Why this rule exists
|
|
144
|
-
|
|
145
|
-
The operator works across gaps between sessions. A morning /sprint response that references `B1-WU4` without a gloss forces the operator to remember the reference from yesterday, reconstruct it from the substrate, or ask the agent to expand it. All three cost operator time.
|
|
146
|
-
|
|
147
|
-
The /kiss-pass-on-SKILL.md-edits rule closes the second-order gap. When the substrate says "operator-facing output should be plain" and its own body carries dense bassclef jargon, the discipline breaks itself.
|
|
148
|
-
|
|
149
|
-
INSTEAD of relying on operator vigilance to catch unglossed refs and dense SKILL.md prose: the substrate enforces clarity at authoring time. Operator time saved compounds across every reference in every response.
|
|
150
|
-
|
|
151
|
-
## Composes with
|
|
152
|
-
|
|
153
|
-
- `.claude/rules/plain-english-discipline.md` — master plain-English rule; this rule extends with the gloss and the /kiss-pass second-order rule
|
|
154
|
-
- `.claude/rules/skill-description-clarity.md` — narrow case at the skill description field
|
|
155
|
-
- `.claude/rules/github-issue-flash-tweet.md` — flash-tweet-then-detail discipline for GitHub issue bodies
|
|
156
|
-
- `.claude/rules/context-engineering.md` — INSTEAD-block discipline for negations
|
|
157
|
-
- `.claude/rules/visual-hierarchy.md` — formatting discipline for long agent output
|
|
158
|
-
- `standards/operator-facing-prose-discipline.md` — companion standard with the full reasoning and the format catalog
|
|
159
|
-
- `standards/pr-body-discipline.md` — applies the gloss and the /kiss pass to PR bodies (criterion 3 of the scrub)
|
|
160
|
-
|
|
161
|
-
## 5-layer defense for prose discipline (added bet 27c WU-9)
|
|
162
|
-
|
|
163
|
-
The prose-discipline rules and mechanisms form 5 layers per ADR-035 (hooks as steering). Each layer fires at a different surface. Together the layers act as belt and suspenders — they cover failure modes that any single layer would miss.
|
|
164
|
-
|
|
165
|
-
| Layer | Surface | Mechanism | What it catches |
|
|
166
|
-
|---|---|---|---|
|
|
167
|
-
| 1. Per-edit on substrate paths | PreToolUse `Edit\|Write` on `.claude/skills/*/SKILL.md` + `.claude/rules/*.md` + `.claude/luminaries/*.md` | `substrate-clarity-gate.sh` | Skill description over 280 chars, missing INSTEAD-block, jargon BLOCK terms (bassclef#382) |
|
|
168
|
-
| 2. Per-edit on PR body | PreToolUse `Bash` matching `gh pr create` or `gh pr edit --body` | `pre-gh-pr-body-scrub.sh` | BLOCK terms in PR body before push (bassclef#1176) |
|
|
169
|
-
| 3. Per-edit on issue body and commit msg | PreToolUse `Bash` matching `gh issue create` or `git commit` | `pre-gh-issue-body-scrub.sh` + `pre-git-commit-msg-scrub.sh` | BLOCK terms before issue file or commit lands (bassclef#1177) |
|
|
170
|
-
| 4. Per-turn-end (operator prose) | Stop event | `turn-prose-kiss-check.sh` | BLOCK terms in the latest assistant message; surface-marker-driven strict escalation (bassclef#1051 + #1304) — cured via bet 27c PR #427 for path resolution under operator install |
|
|
171
|
-
| 5. Per-PR (CI) | PR body clarity + scrub jobs | `.github/workflows/bassclef-pr-ci.yml` jobs | Backstop for PR body BLOCK terms that bypassed layer 2 |
|
|
172
|
-
|
|
173
|
-
Together: layers 1-3 catch at write time. Layer 4 catches at turn end. Layer 5 catches at PR review. The kiss path-resolution cure (PR #427) closed the silent fail under operator-install layout that broke layer 4. The substrate-as-system rule (ADR-035) commits to all 5 layers staying operational. Mechanism-fidelity verification (bet 27c WU-4, WU-5, WU-6) audits the operational state.
|
|
174
|
-
|
|
175
|
-
## Override
|
|
176
|
-
|
|
177
|
-
`SKIP_OPERATOR_FACING_PROSE=1 <command>` — for genuine cases (quoting an exact phrase from memory or an external doc; mid-debugging session where formality breaks flow). Logged via trace-helper. Use rarely.
|
|
178
|
-
|
|
179
|
-
INSTEAD of overriding the /kiss pass on SKILL.md edits when scope is tight: file a dedicated /kiss-pass PR per Rule 2 above. The second-order rule holds without exception.
|
|
180
|
-
|
|
181
|
-
## Surfaced in
|
|
182
|
-
|
|
183
|
-
- /sprint 2026-05-30 morning session — operator returned after an overnight gap and surfaced that shorthand references in /sprint output need a plain-language gloss for cross-session orientation.
|
|
184
|
-
- Same session — operator surfaced the second-order rule: if we are already authoring SKILL.md updates for the gloss rule, the existing jargon in those files gets rewritten in the same pass.
|
|
185
|
-
|
|
186
|
-
## Refs
|
|
187
|
-
|
|
188
|
-
- bassclef#790 — parent ticket (this rule + companion standard)
|
|
189
|
-
- bassclef#785 — tweet-style descriptions in /longrun summary tables
|
|
190
|
-
- bassclef#780 — glossary + substrate-quote discipline (session-start glossary; this rule adds the at-mention gloss)
|
|
191
|
-
- bassclef#763 — /kiss reserved-name allowlist
|
|
192
|
-
- bassclef#767 — /kiss hook coverage at artifact-write surfaces
|
|
193
|
-
- bassclef#779 — /kiss interactive-session anchoring at turn-counter boundaries
|
|
194
|
-
- bassclef#786 — /kiss PR-body hook enforcement decision
|
|
195
|
-
- bassclef#787 — PR-body scrub discipline (this rule's criterion 3 surface)
|
|
196
|
-
- bassclef#739 — substrate-coherence CI (mechanical enforcement target)
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
description: When presenting choices for the operator to pick from (shape A vs shape B; option 1 vs option 2; pick a/b/c; tier 1/2/3), labels MUST be characters the operator can easily type…
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Option-label discipline
|
|
7
|
-
|
|
8
|
-
When presenting choices for the operator to pick from (shape A vs shape B; option 1 vs option 2; pick a/b/c; tier 1/2/3), labels MUST be characters the operator can easily type back. Greek letters, special characters, and emoji-as-labels are forbidden because they can't be typed on a standard keyboard — operator has to copy-paste from screen, which wastes turns and disrupts operator-flow at exactly the decision point.
|
|
9
|
-
|
|
10
|
-
## Allowed
|
|
11
|
-
|
|
12
|
-
- **Lowercase Latin letters** — `a`, `b`, `c`, `d`, `e`, `f` (default for ≤6 choices)
|
|
13
|
-
- **Uppercase Latin letters** — `A`, `B`, `C`, `D` (when distinguishing from inline text matters; default to lowercase otherwise)
|
|
14
|
-
- **Numbers** — `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9` (default for 7+ choices)
|
|
15
|
-
|
|
16
|
-
## Forbidden — and what to use instead
|
|
17
|
-
|
|
18
|
-
- Greek letters as labels (`α`, `β`, `γ`, `δ`, `ε`, `ζ`, `η`, `θ`).
|
|
19
|
-
INSTEAD: use `a`, `b`, `c`, `d`, `e`, `f`, `g`, `h` — same ordinal, typeable.
|
|
20
|
-
- Uppercase Greek letters as labels (`Α`, `Β`, `Γ`, `Δ`).
|
|
21
|
-
INSTEAD: use `A`, `B`, `C`, `D` — visually similar on most fonts, typeable.
|
|
22
|
-
- Special characters as labels (`①`, `❶`, `⓵` circled numbers).
|
|
23
|
-
INSTEAD: use plain `1`, `2`, `3`.
|
|
24
|
-
- Emoji as labels (`🅰`, `🅱`).
|
|
25
|
-
INSTEAD: use plain `a`, `b`.
|
|
26
|
-
- Decorative Unicode boxes as labels (`□`, `■`, `▲`, `▼`).
|
|
27
|
-
INSTEAD: use plain `a`/`b`/`1`/`2` — boxes are decoration, not labels.
|
|
28
|
-
|
|
29
|
-
## Reuse is fine
|
|
30
|
-
|
|
31
|
-
When `a/b/c` was used recently for an earlier decision in the same session, REUSE it for the next decision. Each decision is its own context; operator types `a` referring to the current choice, not the earlier one. The earlier choice's labels do not reserve those letters for the rest of the session.
|
|
32
|
-
|
|
33
|
-
The bad shape: agent feels labels must "differ from earlier" and escalates to Greek/special characters.
|
|
34
|
-
INSTEAD: reuse `a/b/c` freely; if labels MUST differ from a very recent decision (e.g., active comparison still on screen), use uppercase Latin or numbers — never Greek.
|
|
35
|
-
|
|
36
|
-
## When this rule fires
|
|
37
|
-
|
|
38
|
-
Any operator-facing surface where the agent presents N options for the operator to pick:
|
|
39
|
-
|
|
40
|
-
- `/longrun prep` shape proposal tables (per `.claude/skills/longrun/SKILL.md`)
|
|
41
|
-
- `/sprint` next-work proposals (per `.claude/skills/sprint/SKILL.md`)
|
|
42
|
-
- `AskUserQuestion` menus dispatched from any skill
|
|
43
|
-
- Inline operator prompts in agent turn prose ("Want me to do a, b, or c?")
|
|
44
|
-
- Bet-doc scope-shape enumerations
|
|
45
|
-
- Decision-point menus at /longrun checkpoint or closeout
|
|
46
|
-
|
|
47
|
-
This rule does NOT fire on:
|
|
48
|
-
|
|
49
|
-
- Mathematical / physics / chemistry technical content (Greek letters carry domain semantics).
|
|
50
|
-
INSTEAD of forbidding Greek there: the rule pattern matches `(option|shape|pick|tier|approach|step|item|path|alternative)\s+[α-ωΑ-Ω]` — Greek used as label triggers; Greek used in formulas like `α-decay` or `λ = 600 nm` passes.
|
|
51
|
-
- Quoted strings from external sources (verbatim quotes; Greek letters preserved).
|
|
52
|
-
INSTEAD of stripping: quote markers (backticks + code blocks) are stripped from the scan input before the regex runs.
|
|
53
|
-
- Skill / rule / file names that happen to contain Greek letters (e.g., a luminary file `alpha-design.md`).
|
|
54
|
-
INSTEAD of false-positives on filenames: filename references are inside code spans / backticks and get stripped before scan.
|
|
55
|
-
|
|
56
|
-
## Why this rule exists
|
|
57
|
-
|
|
58
|
-
Memory `feedback_keyboard_typeable_options.md` (filed 2026-05-03) documented this discipline. The memory body literally warned about its own failure mode: "I used α/β/γ because a/b/c had been 'burned' on an earlier decision in the same session. Operator: 'how am i supposed to type alpha or beta?'"
|
|
59
|
-
|
|
60
|
-
The memory existed for ~7 weeks. On 2026-06-20, the agent violated it during /longrun prep — labeled the second shape proposal α/β/γ/δ after the first used A/B/C/D. Three-layer failure documented in chronicle 2026-06-20c-validate-and-finish-arc.md:
|
|
61
|
-
|
|
62
|
-
1. Memory loaded into context but a competing local heuristic ("differentiate labels from earlier") won attention at label-pick time
|
|
63
|
-
2. No mechanism — no rule, no wordlist, no hook check
|
|
64
|
-
3. Memory-write didn't audit for mechanization opportunity in 2026-05-03 (the meta-discipline `feedback_memory_save_audit_for_adopter_mechanization` was filed 2026-06-20, propagated backward in time)
|
|
65
|
-
|
|
66
|
-
This rule + the mechanical layer (turn-prose-kiss-check hook scan) close the gap.
|
|
67
|
-
|
|
68
|
-
## Mechanical enforcement
|
|
69
|
-
|
|
70
|
-
`.claude/hooks/turn-prose-kiss-check.sh` Stop hook scans every assistant turn prose for option-label Greek patterns:
|
|
71
|
-
|
|
72
|
-
```
|
|
73
|
-
(option|shape|pick|tier|approach|step|item|path|alternative)[[:space:]]+[α-ωΑ-Ω]
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
When matched, the hook emits a BLOCK finding with the offending phrase. Per the per-place strict escalation rule (bassclef#1171), option-label findings can be configured strict via `.claude/bassclef-configs.jsonc` `prose_discipline.kiss_words_strict_places` (add `option_labels` to the array). Default is advisory.
|
|
77
|
-
|
|
78
|
-
The hook ALSO reads `standards/bassclef-internal-jargon.md` BLOCK terms; the wordlist entry for option-label Greek is operator-readable documentation — the regex scan in the hook is the actual mechanical check.
|
|
79
|
-
|
|
80
|
-
## Override
|
|
81
|
-
|
|
82
|
-
`SKIP_TURN_PROSE_KISS=1 <command>` — per-call (logged via trace-helper). Use only when quoting verbatim text that contains the offending pattern (e.g., quoting a memory file body that includes the literal α/β/γ).
|
|
83
|
-
|
|
84
|
-
INSTEAD of overriding for routine work: rewrite the option labels. The discipline is one of the lowest-cost rules to follow — relabeling takes seconds.
|
|
85
|
-
|
|
86
|
-
## Composes with
|
|
87
|
-
|
|
88
|
-
- `.claude/rules/plain-english-discipline.md` — master plain-English rule; this is one application at the option-label surface
|
|
89
|
-
- `.claude/rules/operator-facing-prose.md` — gloss + /kiss meta-discipline; sister at adjacent surfaces
|
|
90
|
-
- `.claude/hooks/turn-prose-kiss-check.sh` — mechanical enforcement
|
|
91
|
-
- `standards/bassclef-internal-jargon.md` — wordlist (option-label Greek documented as BLOCK)
|
|
92
|
-
- Memory `feedback_keyboard_typeable_options.md` — the original discipline this rule promotes
|
|
93
|
-
- bassclef#1171 — per-place strict escalation pattern
|
|
94
|
-
- bassclef#1027 — turn-prose discipline parent
|
|
95
|
-
|
|
96
|
-
## Refs
|
|
97
|
-
|
|
98
|
-
- bassclef#1286 — this rule's filing ticket
|
|
99
|
-
- Memory `feedback_keyboard_typeable_options.md` — the 7-week-old discipline this rule mechanizes
|
|
100
|
-
- Memory `feedback_hooks_beat_methodology_for_substrate_quality.md` — the pattern this rule's filing instantiates
|
|
101
|
-
- Memory `feedback_methodology_holds_before_mechanical.md` — why the methodology-only state was not enough
|
|
102
|
-
- chronicle 2026-06-20c-validate-and-finish-arc.md — three-layer failure documentation
|
|
103
|
-
|
|
104
|
-
## Retirement condition
|
|
105
|
-
|
|
106
|
-
This rule retires only if bassclef migrates off shell-typeable option labels entirely (e.g., a GUI picker replaces the typed selection). Until then, the discipline of typeable labels persists across every operator-facing surface.
|
|
107
|
-
|
|
108
|
-
Closes bassclef#1286.
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
description: "Code that instantiates a named pattern from bassclef's catalog (patterns/<shelf>/<source>/<slug>.md) MUST mark itself with an @pattern <catalog-path> annotation."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Pattern Annotation — `@pattern` directive
|
|
7
|
-
|
|
8
|
-
Code that instantiates a named pattern from bassclef's catalog (`patterns/<shelf>/<source>/<slug>.md`) MUST mark itself with an `@pattern <catalog-path>` annotation. This is **Layer 1** of pattern-implementation traceability per bassclef#478.
|
|
9
|
-
|
|
10
|
-
Forward (this code uses this pattern) and reverse (this pattern is used here, here, here) lookups become greppable. Operator surfaces — including the future `/pattern-trace` skill (LR5 Layer 3) — read the annotation as the source of truth.
|
|
11
|
-
|
|
12
|
-
## When this rule fires
|
|
13
|
-
|
|
14
|
-
When writing or editing source code that:
|
|
15
|
-
|
|
16
|
-
- Implements a recognized GoF / Fowler / EIP / POSA / Nygard / Richardson / Vernon DDD pattern, OR
|
|
17
|
-
- Implements a Smarter Patterns AI UX pattern (e.g., Algorithm Effectiveness Rating in a button + tooltip surface), OR
|
|
18
|
-
- Implements any pattern that has a catalog entry under `patterns/<shelf>/<source>/<slug>.md`
|
|
19
|
-
|
|
20
|
-
The annotation goes at the entry-point of the pattern instance: the class declaration for code patterns; the component file's top-level for UX patterns.
|
|
21
|
-
|
|
22
|
-
## Annotation format
|
|
23
|
-
|
|
24
|
-
```typescript
|
|
25
|
-
/**
|
|
26
|
-
* @pattern patterns/code/gof/strategy.md
|
|
27
|
-
*
|
|
28
|
-
* Picks among sort algorithms based on user-selected order.
|
|
29
|
-
*/
|
|
30
|
-
class SortStrategySelector implements SortStrategy { ... }
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
```typescript
|
|
34
|
-
/**
|
|
35
|
-
* @pattern patterns/ux-ai/smarterpatterns/algorithm-effectiveness-rating.md
|
|
36
|
-
*
|
|
37
|
-
* Shows quality prediction next to the Generate Variants button.
|
|
38
|
-
*/
|
|
39
|
-
function VariantQualityRating({ inputArtifact }) { ... }
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Format rules:
|
|
43
|
-
|
|
44
|
-
- **Always in a comment block** at the top of the function/class/component definition (not in a separate doc, not as a runtime decorator)
|
|
45
|
-
- **Path relative to the repo root**, with full extension (`.md`)
|
|
46
|
-
- **One annotation per pattern instance** — if a class implements two patterns, two annotations
|
|
47
|
-
- **Optional one-line description** below the annotation explaining the local application
|
|
48
|
-
|
|
49
|
-
## What NOT to do
|
|
50
|
-
|
|
51
|
-
- **Don't annotate without a catalog entry existing.** INSTEAD: dispatch `/agent-research-spawn "<Pattern Name>" patterns/<shelf>/<source>/` to fill the gap, then annotate.
|
|
52
|
-
- **Don't fabricate catalog paths.** INSTEAD: grep the annotation against existing entries; if the path doesn't exist, the annotation is wrong (CI hook in LR5 will catch this; until then, it's a methodology check).
|
|
53
|
-
- **Don't annotate trivial uses.** INSTEAD: annotate the class/function that EMBODIES the pattern, not every place that calls it. A single Strategy implementation gets annotated; every caller that picks a Strategy doesn't.
|
|
54
|
-
- **Don't annotate framework patterns** (e.g., a React component isn't "a Composite pattern instance" just because React uses Composite internally). INSTEAD: annotate when YOUR code is consciously instantiating the pattern as a design choice.
|
|
55
|
-
|
|
56
|
-
## Why this rule exists
|
|
57
|
-
|
|
58
|
-
Yesterday's POA UX refactor synthesis revealed that bassclef's substrate produces patterns at design time but doesn't know which patterns landed in implementation. The cameo pattern (luminary-as-design-active) only works if the catalog → spec → code → operator-visible chain is intact. Without annotations:
|
|
59
|
-
|
|
60
|
-
- `/pattern-review` operates on grep-against-implementation guesswork
|
|
61
|
-
- The future `/pattern-trace` skill has no source of truth
|
|
62
|
-
- When a luminary "uses Strategy" in a variant, no audit trail confirms the strategy actually shipped
|
|
63
|
-
- Reverse-lookup ("show me everywhere we use Decorator") requires re-reading the codebase
|
|
64
|
-
|
|
65
|
-
The annotation is the inexpensive primitive that makes all of those mechanical.
|
|
66
|
-
|
|
67
|
-
## Layer 2 — `/spec` "Patterns Used" table
|
|
68
|
-
|
|
69
|
-
Specs that drive Construction work (per `.claude/rules/oo-ad-entry-point.md` requiring `/decompose` evidence) include a "Patterns Used" table mapping each named pattern to its catalog path AND to the file/class that will carry the annotation. This is the spec-side mirror of the code annotation — together they form the bidirectional contract.
|
|
70
|
-
|
|
71
|
-
See `templates/spec-template.md` (this PR also amends it).
|
|
72
|
-
|
|
73
|
-
## Layer 3 — deferred to LR5
|
|
74
|
-
|
|
75
|
-
Layer 3 ships in bassclef#478 LR5 work:
|
|
76
|
-
|
|
77
|
-
- `state/pattern-implementations/*.json` — state-spine manifest entries auto-populated from grep over annotations
|
|
78
|
-
- Validation hook — fires on Edit/Write of source files; verifies annotated catalog paths exist
|
|
79
|
-
- `/pattern-trace` skill — operator-callable lookup (forward + reverse + audit)
|
|
80
|
-
|
|
81
|
-
Until Layer 3 ships, this rule is methodology-level. Manual grep is the audit path: `git grep -E '@pattern\s+patterns/' src/`.
|
|
82
|
-
|
|
83
|
-
## Relationship to other rules
|
|
84
|
-
|
|
85
|
-
- `.claude/rules/oo-ad-entry-point.md` — `/decompose` evidence required before Construction; the decomposition output should call out which patterns will be used (feeds Layer 2 table)
|
|
86
|
-
- `.claude/rules/artifact-ingestion.md` — annotations are themselves a "Sources read" surface; the catalog path is a reference the implementation cites
|
|
87
|
-
- `.claude/skills/agent-research-spawn/SKILL.md` — fills catalog gaps when an annotation references a missing entry
|
|
88
|
-
- `.claude/skills/pattern-review/SKILL.md` — reads annotations to focus review on conscious pattern choices
|
|
89
|
-
|
|
90
|
-
## Override
|
|
91
|
-
|
|
92
|
-
`SKIP_PATTERN_ANNOTATION=1` env var (when Layer 3 hook ships) — for migrations and cases where a pattern is implemented but the catalog hasn't yet caught up. Logged to trace per existing bassclef idiom.
|
|
93
|
-
|
|
94
|
-
Until Layer 3, no mechanical override is needed; this is methodology-level enforcement.
|
|
95
|
-
|
|
96
|
-
## Retirement
|
|
97
|
-
|
|
98
|
-
This rule retires only if the catalog substrate itself retires. Annotation format may evolve (e.g., to include version numbers when patterns mature) but the discipline of marking conscious pattern choices in code persists.
|
|
99
|
-
|
|
100
|
-
Closes Layer 1 of bassclef#478.
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
description: All bassclef writing should be plain English at grade 8 with grade 10 as the ceiling for simple technical sentences. Drop bassclef-internal jargon. Keep standard tech vocabulary like API, hook, PR, schema.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Plain-English Discipline
|
|
7
|
-
|
|
8
|
-
All bassclef writing — skills, rules, luminaries, PR bodies, commit messages, chronicles, journal entries, iteration goals — should be plain English at grade 8. Grade 10 is the ceiling for simple technical sentences. Above grade 10 needs a clear reason grades 8-10 could not carry the point. Keep standard technical vocabulary that any digital team would understand. Drop bassclef-internal jargon. Drive for extreme simplicity.
|
|
9
|
-
|
|
10
|
-
Per ticket #935 target shift — the aim moved from grade 10 to grade 8 with grade 10 as ceiling. Steering hook + `standards/steering-hints/kiss-words.md` already carry the new bar. This rule body now matches.
|
|
11
|
-
|
|
12
|
-
This rule is the master discipline. Other rules cover narrow surfaces:
|
|
13
|
-
|
|
14
|
-
- `skill-description-clarity.md` — skill description field (≤280 chars, verb-first, no jargon)
|
|
15
|
-
- `github-issue-flash-tweet.md` — GitHub issue body shape (flash + tweet + detail)
|
|
16
|
-
- `visual-hierarchy.md` — long agent output formatting
|
|
17
|
-
- `context-engineering.md` — INSTEAD-block discipline (the pairing rule for negations)
|
|
18
|
-
|
|
19
|
-
This rule extends those into a unified bar across every writing surface in bassclef.
|
|
20
|
-
|
|
21
|
-
## Why this matters
|
|
22
|
-
|
|
23
|
-
Agent volume keeps climbing. Skills produce more PRs, more chronicles, more draft text. Humans review the output to figure out what's happening with the code. If the writing isn't simple, review collapses. The operator stops trusting the output. The substrate's value compounds in the wrong direction.
|
|
24
|
-
|
|
25
|
-
INSTEAD of writing for "people who know bassclef": write for a senior engineer with no bassclef context. They should grok every PR body, chronicle, and skill description in 60 seconds.
|
|
26
|
-
|
|
27
|
-
## Keep standard technical vocabulary
|
|
28
|
-
|
|
29
|
-
These are common digital-team words. They stay as-is.
|
|
30
|
-
|
|
31
|
-
INSTEAD of expanding them into multi-sentence explanations: use them directly. The reader already knows what an API or schema is.
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
API, SDK, CLI, GUI, HTTP, REST, JSON, YAML, schema, regex, hook,
|
|
35
|
-
repo, branch, commit, PR, MR, CI, CD, workflow, action, artifact,
|
|
36
|
-
function, class, method, property, field, constant, variable, enum,
|
|
37
|
-
database, query, index, migration, transaction, cache, queue, lock,
|
|
38
|
-
container, image, pod, cluster, node, runner, build, deploy, rollback,
|
|
39
|
-
test, assert, mock, stub, fixture, snapshot, regression,
|
|
40
|
-
auth, token, secret, credential, scope, permission, role,
|
|
41
|
-
file, directory, path, glob, pattern, prefix, suffix
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
If a term is in this list, it's fine to use directly. Operator can extend the list when more standard vocabulary surfaces.
|
|
45
|
-
|
|
46
|
-
## Drop bassclef-internal jargon
|
|
47
|
-
|
|
48
|
-
These need substitution because they require bassclef context to parse:
|
|
49
|
-
|
|
50
|
-
| Bassclef jargon | Plain English alternatives |
|
|
51
|
-
|---|---|
|
|
52
|
-
| substrate | the framework / bassclef / the rules |
|
|
53
|
-
| primitive | building block |
|
|
54
|
-
| load-bearing | required / essential |
|
|
55
|
-
| composer | runs / chains / combines |
|
|
56
|
-
| tier-preset | preset / size |
|
|
57
|
-
| compose-with | uses / builds on |
|
|
58
|
-
| scope-bounded | small / tight |
|
|
59
|
-
| operationalize | do / ship |
|
|
60
|
-
| blast radius | impact / what it can break |
|
|
61
|
-
| INSTEAD-block discipline | the pairing rule |
|
|
62
|
-
| stuck-signal | repeated warning |
|
|
63
|
-
| substrate-defect | bug in the rules |
|
|
64
|
-
|
|
65
|
-
These words exist for a reason inside bassclef's design discussions. They belong in design docs, not in PR bodies, chronicles, or any writing aimed at humans without bassclef context.
|
|
66
|
-
|
|
67
|
-
## Drive for extreme simplicity
|
|
68
|
-
|
|
69
|
-
INSTEAD of long sentences and qualifying clauses: short sentences, active voice, concrete examples.
|
|
70
|
-
|
|
71
|
-
| Anti-pattern | INSTEAD |
|
|
72
|
-
|---|---|
|
|
73
|
-
| Long sentences (>30 words) | Break into 2-3 short sentences. Each carries one idea. |
|
|
74
|
-
| Passive voice ("the file was created by the agent") | Active voice ("the agent created the file") |
|
|
75
|
-
| Hedging words ("perhaps", "could potentially", "in some cases") | Direct statement. Either it does or it doesn't. |
|
|
76
|
-
| Buzz adjectives ("comprehensive", "robust", "leverages") | Drop them. Or replace with concrete data. |
|
|
77
|
-
| Methodology references ("Phase 14 of buildable-spec chain") | Either explain the term inline OR drop the reference |
|
|
78
|
-
| Multi-clause noun phrases ("the per-tier deploy-host adapter schema split") | Full plain sentence ("we split the deploy-host adapter schema by tier") |
|
|
79
|
-
|
|
80
|
-
Extreme simplicity is not the same as dumbing down. It means saying the thing once, in the shortest sentence that carries the point.
|
|
81
|
-
|
|
82
|
-
## What this rule does NOT require
|
|
83
|
-
|
|
84
|
-
- Replacing every instance of a banned word — only when context allows. If a word is unavoidable (e.g., quoting a memory file's name), it stays.
|
|
85
|
-
- Hand-paraphrasing technical terms — API stays API. Schema stays schema. Hook stays hook.
|
|
86
|
-
- Grade-school reading level — grade 8 is the aim (per ticket #935; grade 10 stays as the ceiling for simple technical sentences). Operator-readable, not dumbed down.
|
|
87
|
-
- Multi-paragraph expansion of every term — that is contortion, the opposite of what this rule asks for.
|
|
88
|
-
|
|
89
|
-
INSTEAD of trying to scrub every word: focus on the highest-leverage substitutions (bassclef jargon, long sentences, passive voice).
|
|
90
|
-
|
|
91
|
-
## When this rule fires
|
|
92
|
-
|
|
93
|
-
| Surface | Bar | Enforcement |
|
|
94
|
-
|---|---|---|
|
|
95
|
-
| Skill description field (frontmatter) | strict (≤280 chars, no jargon, verb-first) | substrate-clarity-gate hook BLOCKs (file-write) |
|
|
96
|
-
| Skill body | plain English (grade 8 target, ceiling 10); no bassclef jargon | substrate-clarity-gate + skill-body-grade-gate (FKGL 80% at 8-9, ceiling 10) + compound-noun-scrub (blocklist from standards/bassclef-internal-jargon.md per bassclef-upstream#782) — all BLOCK at PreToolUse Edit/Write |
|
|
97
|
-
| Rule body | plain English (grade 8 target, ceiling 10); INSTEAD-block discipline on negations | substrate-clarity-gate + compound-noun-scrub BLOCK at PreToolUse Edit/Write |
|
|
98
|
-
| Luminary body | plain English (grade 8 target, ceiling 10); INSTEAD-block discipline on negations | substrate-clarity-gate hook BLOCKs (file-write) |
|
|
99
|
-
| PR body | plain English (grade 8 target, ceiling 10); no bassclef jargon | bassclef-pr-ci body-clarity advisory job (comments suggestions) |
|
|
100
|
-
| Commit message | conventional-commits format; plain English in body | commit-conventions rule (methodology) |
|
|
101
|
-
| Chronicle | narrative plain English (grade 8 target, ceiling 10) | substrate-clarity-gate hook (advisory; new path matcher in WU-7b) |
|
|
102
|
-
| journal entry | personal/sensory/story-driven voice (per writing voice memory) | advisory only; voice trumps strict rule |
|
|
103
|
-
| Iteration goal body | plain English (grade 8 target, ceiling 10) | substrate-clarity-gate hook (advisory) |
|
|
104
|
-
| Agent turn prose to operator | plain English (grade 8 target, ceiling 10); no bassclef jargon (banned-word list per "Drop bassclef-internal jargon" table above) | Stop hook `turn-prose-kiss-check.sh` scans the most recent assistant message (bassclef#1051). Toggle in `.claude/bassclef-configs.jsonc` (`prose_discipline.kiss_words_turn_prose`): `true` advisory (default), `"strict"` blocks stop, `false` disables. |
|
|
105
|
-
|
|
106
|
-
The hook is the primary backstop. The rule is the reasoning. Skills (`/promote`, `/longrun closeout`, `/chronicle`, `/journal`, `/kiss words`) compose the prevention.
|
|
107
|
-
|
|
108
|
-
**Compound-noun blocklist architecture (V2, bassclef-upstream#782 shipped 2026-07-20 goal 20a Session 2).** The `compound-noun-scrub.sh` hook reads a blocklist from `standards/bassclef-internal-jargon.md` at fire time. Only BLOCK-tier hyphenated compounds trigger. Standard tech compounds (`pre-commit`, `real-time`, `data-driven`) pass automatically because they are not in the blocklist. New invented compounds pass by default until the operator adds a row to the wordlist file. The wordlist is the single operator-editable source of truth. Both `compound-noun-scrub.sh` and `turn-prose-kiss-check.sh` read from the same file — one source of truth, two hook surfaces. Override at hook: `SKIP_COMPOUND_NOUN_SCRUB=1`. Override path at wordlist: `BASSCLEF_JARGON_WORDLIST=<path>` (test-only). Missing wordlist file fails safe (exit 0 with stderr warning).
|
|
109
|
-
|
|
110
|
-
**Turn prose IS hook-reachable via the Stop event** (bassclef#1051 closed bassclef#1027's wrong-premise reading). Claude Code's Stop hook receives `transcript_path` in stdin and can read the most recent assistant message. The `turn-prose-kiss-check.sh` hook fires after every assistant turn, scans the last message against BLOCK terms from `standards/bassclef-internal-jargon.md`, and surfaces findings per the toggle. The per-adopter toggle (`prose_discipline.kiss_words_turn_prose` in `.claude/bassclef-configs.jsonc`): `true` (default) advisory — exit 0, findings to stderr surface at next turn; `"strict"` — exit 2, block stop, force a rewrite turn; `false` disables. The discipline applies to every substantive reply, every status update, every summary — anywhere the agent writes to the operator between tool calls.
|
|
111
|
-
|
|
112
|
-
## Override path
|
|
113
|
-
|
|
114
|
-
`SKIP_PLAIN_ENGLISH=1 <command>` — logged via trace-helper. Use rarely. Examples of legitimate overrides:
|
|
115
|
-
|
|
116
|
-
- Quoting an exact phrase from a memory file or external doc
|
|
117
|
-
- Migrating legacy text where rewriting would lose the audit trail
|
|
118
|
-
- Code blocks where the bassclef jargon IS the variable name
|
|
119
|
-
|
|
120
|
-
Override discipline: silence is not deferral. If you can't pair the override with a one-line reason, the rule probably applies.
|
|
121
|
-
|
|
122
|
-
For turn prose specifically, the override is the per-adopter toggle in `.claude/bassclef-configs.jsonc` — `prose_discipline.kiss_words_turn_prose: false` — not a per-command flag. Turn prose has no command to wrap, so the bypass lives at the configuration layer instead.
|
|
123
|
-
|
|
124
|
-
## Composes with
|
|
125
|
-
|
|
126
|
-
- `skill-description-clarity.md` — narrow case at description surface
|
|
127
|
-
- `github-issue-flash-tweet.md` — narrow case at issue-body surface
|
|
128
|
-
- `context-engineering.md` — INSTEAD-block discipline (foundational)
|
|
129
|
-
- `visual-hierarchy.md` — formatting discipline for long output
|
|
130
|
-
- `commit-conventions.md` — commit message format (separate concern)
|
|
131
|
-
- `pr-strategy.md` — atomic PR rule (separate concern; both ship in Phase II Trim the Fat)
|
|
132
|
-
- `.claude/bassclef-configs.jsonc` — `prose_discipline.kiss_words_turn_prose` toggle backs the turn-prose row in the surfaces table (bassclef#1027)
|
|
133
|
-
|
|
134
|
-
## Distinct from
|
|
135
|
-
|
|
136
|
-
- Code comment style (separate; not a top priority)
|
|
137
|
-
- API documentation (separate; OpenAPI/JSDoc conventions govern)
|
|
138
|
-
- Marketing copy (different audience; brand voice may override)
|
|
139
|
-
|
|
140
|
-
## Sources read
|
|
141
|
-
|
|
142
|
-
- 2026-05-07 session — operator framing: "all writing must be in plain digestible english while not inventing words for common technical terms... drive for extreme simplicity. With so much agentic code and work to review, PRs and markdowns become the key areas where humans will interact"
|
|
143
|
-
- bassclef#557 PR body (rewritten in same session) — exemplar of obtuse-then-fixed prose
|
|
144
|
-
- bassclef#559 — broader plain-English discipline ticket
|
|
145
|
-
- `.claude/rules/skill-description-clarity.md` — narrow precedent at description surface
|
|
146
|
-
- `.claude/rules/context-engineering.md` — foundational INSTEAD-block rule
|
|
147
|
-
- `.claude/rules/github-issue-flash-tweet.md` — narrow precedent at issue surface
|
|
148
|
-
- Memory: `feedback_amazon_writing_style`, `feedback_plain_english_no_pseudo_intellectual`, `feedback_writing_voice`, `feedback_kiss_must_be_hook_enforced_on_skill_writes`, `feedback_kiss_prose_discipline_interactive`
|
|
149
|
-
- bassclef#1027 — turn-prose row + `prose_discipline.kiss_words_turn_prose` toggle (this rule's extension; original wrong-premise claim that turn prose was hook-unreachable corrected by bassclef#1051)
|
|
150
|
-
- bassclef#1051 — Stop hook `turn-prose-kiss-check.sh` (mechanical enforcement at the surface bassclef#1027 marked unreachable; sibling of `pr-body-scrub-check.sh`)
|
|
151
|
-
- bassclef#1026 — auto-save commit-sequence batch defect (today's session; sister discipline-application gap)
|
|
152
|
-
- bassclef#382 — substrate-clarity-gate hook (file-write enforcement at write surfaces; this row covers the gap that hook structurally can't reach)
|
|
153
|
-
|
|
154
|
-
## Closes
|
|
155
|
-
|
|
156
|
-
Phase II WU-7a of Trim the Fat. Sister to WU-7b (hook extension) and WU-7c (skill updates). Master rule for all bassclef writing surfaces.
|