@thebassclef/lite 1.0.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +65 -0
- package/dist/cli.js +65 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.claude/agents/architect.md +70 -0
- package/dist/lite/.claude/agents/builder.md +114 -0
- package/dist/lite/.claude/agents/designer.md +156 -0
- package/dist/lite/.claude/agents/reviewer.md +88 -0
- package/dist/lite/.claude/hooks/bassclef-sync.sh +85 -27
- package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
- package/dist/lite/.claude/hooks/longrun-prep-render-check.sh +236 -0
- package/dist/lite/.claude/hooks/persona-name-scrub-check.sh +105 -0
- package/dist/lite/.claude/hooks/skill-step-list-check.sh +171 -0
- package/dist/lite/.claude/luminaries/alan-cooper.md +170 -0
- package/dist/lite/.claude/luminaries/alistair-cockburn.md +140 -0
- package/dist/lite/.claude/luminaries/amazon-pr-faq.md +34 -0
- package/dist/lite/.claude/luminaries/andreas-zeller.md +74 -0
- package/dist/lite/.claude/luminaries/ash-maurya.md +121 -0
- package/dist/lite/.claude/luminaries/bill-buxton.md +210 -0
- package/dist/lite/.claude/luminaries/charles-sanders-peirce.md +150 -0
- package/dist/lite/.claude/luminaries/david-ogilvy.md +192 -0
- package/dist/lite/.claude/luminaries/don-norman.md +173 -0
- package/dist/lite/.claude/luminaries/edward-tufte.md +179 -0
- package/dist/lite/.claude/luminaries/eric-evans.md +160 -0
- package/dist/lite/.claude/luminaries/frederick-brooks.md +50 -0
- package/dist/lite/.claude/luminaries/gang-of-four.md +157 -0
- package/dist/lite/.claude/luminaries/glenford-myers.md +230 -0
- package/dist/lite/.claude/luminaries/hunt-thomas.md +115 -0
- package/dist/lite/.claude/luminaries/hyrum-wright.md +94 -0
- package/dist/lite/.claude/luminaries/jason-fried-dhh.md +46 -0
- package/dist/lite/.claude/luminaries/jesse-james-garrett.md +154 -0
- package/dist/lite/.claude/luminaries/john-ousterhout.md +94 -0
- package/dist/lite/.claude/luminaries/karl-popper.md +132 -0
- package/dist/lite/.claude/luminaries/kent-beck.md +168 -0
- package/dist/lite/.claude/luminaries/linus-torvalds.md +218 -0
- package/dist/lite/.claude/luminaries/martin-fowler.md +164 -0
- package/dist/lite/.claude/luminaries/michael-feathers.md +125 -0
- package/dist/lite/.claude/luminaries/michael-nygard.md +118 -0
- package/dist/lite/.claude/luminaries/robert-c-martin.md +164 -0
- package/dist/lite/.claude/luminaries/saltzer-schroeder.md +194 -0
- package/dist/lite/.claude/luminaries/sophia-prater.md +193 -0
- package/dist/lite/.claude/luminaries/stephen-toulmin.md +131 -0
- package/dist/lite/.claude/luminaries/tony-hoare.md +170 -0
- package/dist/lite/.claude/luminaries/vaughn-vernon.md +50 -0
- package/dist/lite/.claude/luminaries/w-edwards-deming.md +158 -0
- package/dist/lite/.claude/rules/accessor-library-discipline.md +110 -0
- package/dist/lite/.claude/rules/adr-discipline.md +96 -0
- package/dist/lite/.claude/rules/api-conventions.md +115 -0
- package/dist/lite/.claude/rules/artifact-ingestion.md +137 -0
- package/dist/lite/.claude/rules/assert-only-after-verify.md +111 -0
- package/dist/lite/.claude/rules/blocked-items.md +139 -0
- package/dist/lite/.claude/rules/bootstrap-pair-discipline.md +106 -0
- package/dist/lite/.claude/rules/branching.md +28 -0
- package/dist/lite/.claude/rules/cold-adopter-harness-discipline.md +93 -0
- package/dist/lite/.claude/rules/commit-conventions.md +22 -0
- package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +173 -0
- package/dist/lite/.claude/rules/compounding-sequence-fresh-analysis.md +173 -0
- package/dist/lite/.claude/rules/context-engineering.md +155 -0
- package/dist/lite/.claude/rules/context-management.md +85 -0
- package/dist/lite/.claude/rules/defensive-bash.md +52 -0
- package/dist/lite/.claude/rules/deferred-actions.md +233 -0
- package/dist/lite/.claude/rules/destructive-operations.md +69 -0
- package/dist/lite/.claude/rules/diagnosis.md +38 -0
- package/dist/lite/.claude/rules/github-issue-flash-tweet.md +114 -0
- package/dist/lite/.claude/rules/guardrails.md +73 -0
- package/dist/lite/.claude/rules/hook-wire-on-author.md +77 -0
- package/dist/lite/.claude/rules/identifier-leak-prevention.md +73 -0
- package/dist/lite/.claude/rules/iteration-bet-brief-completeness.md +43 -0
- package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +79 -0
- package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +77 -0
- package/dist/lite/.claude/rules/loop-discipline.md +71 -0
- package/dist/lite/.claude/rules/manual-prod-approval.md +100 -0
- package/dist/lite/.claude/rules/marker-enrichment-discipline.md +72 -0
- package/dist/lite/.claude/rules/mobile-ephemeral-session.md +109 -0
- package/dist/lite/.claude/rules/new-dependency-check.md +44 -0
- package/dist/lite/.claude/rules/oo-ad-entry-point.md +95 -0
- package/dist/lite/.claude/rules/operator-facing-prose.md +177 -0
- package/dist/lite/.claude/rules/option-label-discipline.md +82 -0
- package/dist/lite/.claude/rules/pattern-annotation.md +83 -0
- package/dist/lite/.claude/rules/persona-name-leak-scrub.md +90 -0
- package/dist/lite/.claude/rules/plain-english-discipline.md +132 -0
- package/dist/lite/.claude/rules/plan-enumeration-needs-value-props.md +177 -0
- package/dist/lite/.claude/rules/pr-body-shape.md +195 -0
- package/dist/lite/.claude/rules/pr-strategy.md +142 -0
- package/dist/lite/.claude/rules/pr-title-shape.md +90 -0
- package/dist/lite/.claude/rules/prototype-workflow.md +53 -0
- package/dist/lite/.claude/rules/reserved-skill-names.md +103 -0
- package/dist/lite/.claude/rules/schema-management.md +42 -0
- package/dist/lite/.claude/rules/sdlc-gates.md +149 -0
- package/dist/lite/.claude/rules/security.md +37 -0
- package/dist/lite/.claude/rules/session-artifacts.md +236 -0
- package/dist/lite/.claude/rules/skill-composition-declarations.md +105 -0
- package/dist/lite/.claude/rules/skill-description-clarity.md +196 -0
- package/dist/lite/.claude/rules/skill-procedure-step-list.md +119 -0
- package/dist/lite/.claude/rules/sprint-prep-preset-picker.md +76 -0
- package/dist/lite/.claude/rules/state-schema-validation.md +156 -0
- package/dist/lite/.claude/rules/stuck-signal-diagnostic.md +111 -0
- package/dist/lite/.claude/rules/substrate-config-schema.md +85 -0
- package/dist/lite/.claude/rules/test-list-discipline.md +129 -0
- package/dist/lite/.claude/rules/test-sufficiency.md +186 -0
- package/dist/lite/.claude/rules/testing-tier-config.md +125 -0
- package/dist/lite/.claude/rules/testing.md +38 -0
- package/dist/lite/.claude/rules/turn-estimate-grounding.md +82 -0
- package/dist/lite/.claude/rules/visual-hierarchy.md +427 -0
- package/dist/lite/.claude/rules/we-dont-break-adopters.md +103 -0
- package/dist/lite/.claude/rules/whereami-load-bearing.md +184 -0
- package/dist/lite/.claude/rules/writing-craft-discipline.md +72 -0
- package/dist/lite/.claude/rules/wu-sequencing-compounds.md +119 -0
- package/dist/lite/.claude/skills/build/SKILL.md +640 -0
- package/dist/lite/.claude/skills/chronicle/SKILL.md +55 -0
- package/dist/lite/.claude/skills/clean-artifacts/SKILL.md +249 -0
- package/dist/lite/.claude/skills/decompose/SKILL.md +280 -0
- package/dist/lite/.claude/skills/diagnose/SKILL.md +297 -0
- package/dist/lite/.claude/skills/feynman/SKILL.md +90 -0
- package/dist/lite/.claude/skills/howdoi/SKILL.md +105 -0
- package/dist/lite/.claude/skills/ia-model/SKILL.md +108 -0
- package/dist/lite/.claude/skills/interaction-design/SKILL.md +112 -0
- package/dist/lite/.claude/skills/interpret-input/SKILL.md +180 -0
- package/dist/lite/.claude/skills/journal/SKILL.md +209 -0
- package/dist/lite/.claude/skills/kiss/SKILL.md +449 -0
- package/dist/lite/.claude/skills/launch/SKILL.md +915 -0
- package/dist/lite/.claude/skills/lean-canvas/SKILL.md +332 -0
- package/dist/lite/.claude/skills/longrun/SKILL.md +512 -0
- package/dist/lite/.claude/skills/luminary/SKILL.md +481 -0
- package/dist/lite/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
- package/dist/lite/.claude/skills/onboard-repo/SKILL.md +1640 -0
- package/dist/lite/.claude/skills/pattern-review/SKILL.md +99 -0
- package/dist/lite/.claude/skills/personas/SKILL.md +207 -0
- package/dist/lite/.claude/skills/promote/SKILL.md +283 -0
- package/dist/lite/.claude/skills/requirement/SKILL.md +98 -0
- package/dist/lite/.claude/skills/retro/SKILL.md +117 -0
- package/dist/lite/.claude/skills/riff/SKILL.md +114 -0
- package/dist/lite/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
- package/dist/lite/.claude/skills/session-end/SKILL.md +309 -0
- package/dist/lite/.claude/skills/session-log/SKILL.md +299 -0
- package/dist/lite/.claude/skills/skills/SKILL.md +228 -0
- package/dist/lite/.claude/skills/spec/SKILL.md +105 -0
- package/dist/lite/.claude/skills/sprint/SKILL.md +418 -0
- package/dist/lite/.claude/skills/stage/SKILL.md +384 -0
- package/dist/lite/.claude/skills/state-a-problem/SKILL.md +185 -0
- package/dist/lite/.claude/skills/temperance/SKILL.md +108 -0
- package/dist/lite/.claude/skills/use-case/SKILL.md +417 -0
- package/dist/lite/.claude/skills/user-stories/SKILL.md +268 -0
- package/dist/lite/.claude/skills/value-prop/SKILL.md +251 -0
- package/dist/lite/.claude/skills/verify/SKILL.md +160 -0
- package/dist/lite/.claude/skills/visual-review/SKILL.md +503 -0
- package/dist/lite/.claude/skills/whats-the-plan/SKILL.md +202 -0
- package/dist/lite/.claude/skills/whereami/SKILL.md +307 -0
- package/dist/lite/AGENTS.md +79 -0
- package/dist/lite/CLAUDE-lite.md +85 -0
- package/dist/lite/CODE_OF_CONDUCT.md +28 -0
- package/dist/lite/CONTRIBUTING.md +177 -0
- package/dist/lite/README.md +173 -0
- package/dist/lite/SECURITY.md +19 -0
- package/dist/lite/architecture/decisions/ADR-029-release-pipeline.md +79 -0
- package/dist/lite/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
- package/dist/lite/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
- package/dist/lite/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
- package/dist/lite/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
- package/dist/lite/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
- package/dist/lite/lib/clean-artifacts-sweep.sh +112 -0
- package/dist/lite/lib/code-comment-discipline.sh +144 -0
- package/dist/lite/lib/composer-preflight.sh +459 -0
- package/dist/lite/lib/deferred-actions.sh +146 -0
- package/dist/lite/lib/hook-header-parser.sh +61 -0
- package/dist/lite/lib/hook-heartbeat.sh +152 -0
- package/dist/lite/lib/hook-inject.sh +255 -0
- package/dist/lite/lib/hook-installer.sh +195 -0
- package/dist/lite/lib/luminary-pick.sh +96 -0
- package/dist/lite/lib/output-discipline.sh +143 -0
- package/dist/lite/lib/prose-scan-boundary.sh +171 -0
- package/dist/lite/lib/rewrite-check.sh +214 -0
- package/dist/lite/lib/session-rescue.sh +151 -0
- package/dist/lite/lib/source-graph-walker.sh +277 -0
- package/dist/lite/lib/state.sh +1372 -0
- package/dist/lite/lib/telemetry.sh +205 -0
- package/dist/lite/lib/tier-check.sh +187 -0
- package/dist/lite/lib/tier-dependency-audit.sh +1088 -0
- package/dist/lite/presence/install/bassclef-hook-connect.sh +178 -0
- package/dist/lite/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
- package/dist/lite/presence/install/bassclef-sync.template.sh +2278 -0
- package/dist/lite/presence/install/schedule-auto-save.cron.sh +88 -0
- package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +122 -0
- package/dist/lite/scripts/aggregate-telemetry.sh +217 -0
- package/dist/lite/scripts/analyze-tier-dependencies.sh +239 -0
- package/dist/lite/scripts/generate-lite-manifest.sh +505 -0
- package/dist/lite/scripts/generate-tier-manifest.sh +28 -0
- package/dist/lite/scripts/intent-drift-check.sh +456 -0
- package/dist/lite/scripts/lite-manifest-drift-check.sh +146 -0
- package/dist/lite/scripts/render-lite-manifest-doc.sh +150 -0
- package/dist/lite/standards/adr-template.md +86 -0
- package/dist/lite/standards/api-conventions/nextjs.md +84 -0
- package/dist/lite/standards/artifact-composition.md +209 -0
- package/dist/lite/standards/bash-hook-safety.md +246 -0
- package/dist/lite/standards/bassclef-configs-schema.md +232 -0
- package/dist/lite/standards/bassclef-evolution.md +143 -0
- package/dist/lite/standards/bassclef-internal-jargon.md +244 -0
- package/dist/lite/standards/bassclef-managed-sentinel.md +96 -0
- package/dist/lite/standards/bassclef-source-config.md +228 -0
- package/dist/lite/standards/branch-stacking.md +408 -0
- package/dist/lite/standards/code-safety-principles.md +176 -0
- package/dist/lite/standards/composer-prerequisites.md +155 -0
- package/dist/lite/standards/deferred-actions-schema.md +204 -0
- package/dist/lite/standards/dependency-discipline/cargo.md +39 -0
- package/dist/lite/standards/dependency-discipline/gem.md +43 -0
- package/dist/lite/standards/dependency-discipline/go-mod.md +41 -0
- package/dist/lite/standards/dependency-discipline/npm.md +42 -0
- package/dist/lite/standards/dependency-discipline/pip.md +42 -0
- package/dist/lite/standards/deployment-topology/ec2-tailscale.md +225 -0
- package/dist/lite/standards/deployment-topology.md +69 -0
- package/dist/lite/standards/docs-sync-allowlist.md +76 -0
- package/dist/lite/standards/domain-and-dns.md +145 -0
- package/dist/lite/standards/frontend-stack.md +67 -0
- package/dist/lite/standards/frontmatter-schema.md +154 -0
- package/dist/lite/standards/graceful-exit.md +227 -0
- package/dist/lite/standards/hook-idempotency.md +102 -0
- package/dist/lite/standards/hook-injection-discipline.md +202 -0
- package/dist/lite/standards/hook-install-class.md +215 -0
- package/dist/lite/standards/input-handler-interface.md +152 -0
- package/dist/lite/standards/lite-manifest-schema-changes.md +180 -0
- package/dist/lite/standards/lite-manifest.json +2797 -0
- package/dist/lite/standards/luminary-matching.md +105 -0
- package/dist/lite/standards/luminary-problem-patterns.md +481 -0
- package/dist/lite/standards/migration-discipline/active-record.md +50 -0
- package/dist/lite/standards/migration-discipline/alembic.md +43 -0
- package/dist/lite/standards/migration-discipline/gorm.md +50 -0
- package/dist/lite/standards/migration-discipline/prisma.md +53 -0
- package/dist/lite/standards/migration-discipline/sqlalchemy.md +51 -0
- package/dist/lite/standards/mobile-ephemeral-session.md +167 -0
- package/dist/lite/standards/model-routing-discipline.md +160 -0
- package/dist/lite/standards/ogilvy-writing-rules.md +225 -0
- package/dist/lite/standards/opener-discipline.md +96 -0
- package/dist/lite/standards/operator-facing-prose-discipline.md +201 -0
- package/dist/lite/standards/persona-schema.md +229 -0
- package/dist/lite/standards/pluggable-luminaries.md +323 -0
- package/dist/lite/standards/pr-body-discipline.md +115 -0
- package/dist/lite/standards/preview-state-schema.md +189 -0
- package/dist/lite/standards/project-directory-layout.md +276 -0
- package/dist/lite/standards/release-tagging.md +137 -0
- package/dist/lite/standards/reserved-skill-names.md +120 -0
- package/dist/lite/standards/scannable-multi-option-output.md +265 -0
- package/dist/lite/standards/sdlc-compliance.md +286 -0
- package/dist/lite/standards/sdlc-gates/typescript.md +57 -0
- package/dist/lite/standards/secrets-lifecycle.md +210 -0
- package/dist/lite/standards/security-scanner-adapter.md +145 -0
- package/dist/lite/standards/session-board.md +256 -0
- package/dist/lite/standards/skill-output-discipline.md +121 -0
- package/dist/lite/standards/state-spine-contract.md +255 -0
- package/dist/lite/standards/state-spine.md +511 -0
- package/dist/lite/standards/steering-hints/kiss-words.md +11 -0
- package/dist/lite/standards/substrate-config-schema.md +267 -0
- package/dist/lite/standards/tech-stack-config.md +109 -0
- package/dist/lite/standards/tier-dependency-analysis.md +167 -0
- package/dist/lite/standards/tier-runtime-deps/lite.md +57 -0
- package/dist/lite/standards/tier-tag-schema.md +155 -0
- package/dist/lite/standards/two-layer-config.md +99 -0
- package/dist/lite/standards/use-case-format.md +292 -0
- package/dist/lite/standards/user-story-invest.md +268 -0
- package/dist/lite/standards/velocity-and-appetite.md +229 -0
- package/dist/lite/standards/voice-input-pattern.md +119 -0
- package/dist/lite/standards/whereami-schema.md +301 -0
- package/dist/lite/standards/worktree-management.md +211 -0
- package/dist/lite/standards/writing-guide.md +213 -0
- package/dist/lite/templates/chronicle-template.md +75 -0
- package/dist/lite/templates/deferred-action-template.md +45 -0
- package/dist/lite/templates/memory-proposal-template.md +77 -0
- package/dist/lite/templates/persona-template.md +200 -0
- package/dist/lite/templates/pr-faq.md +45 -0
- package/dist/lite/templates/secret-rotation-template.md +162 -0
- package/dist/lite/templates/spec-template.md +131 -0
- package/dist/lite/templates/use-case-template.md +194 -0
- package/dist/lite/templates/user-story-template.md +107 -0
- package/dist/lite/templates/whereami-template.md +101 -0
- package/package.json +1 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
globs: ["**/*"]
|
|
4
|
+
description: Mobile/ephemeral session rules — state round-trips through git, no filesystem-only markers, explicit session-end
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Mobile / Ephemeral Session Rule
|
|
8
|
+
|
|
9
|
+
Fires whenever the session is running in an ephemeral environment
|
|
10
|
+
(claude.ai/code mobile sandbox, CI runner, temporary container). See
|
|
11
|
+
`standards/mobile-ephemeral-session.md` for the full standard.
|
|
12
|
+
|
|
13
|
+
## Detection
|
|
14
|
+
|
|
15
|
+
**Primary signal (required for certainty):**
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
[ "$CLAUDE_EPHEMERAL" = "1" ]
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Operator sets this as the first command in mobile / CI / ephemeral
|
|
22
|
+
sessions. Explicit opt-in removes guessing. Put it in a bookmarklet,
|
|
23
|
+
shell init, or session template.
|
|
24
|
+
|
|
25
|
+
**Fallback heuristics** (if primary not set, OR of these):
|
|
26
|
+
|
|
27
|
+
| Check | Signal strength |
|
|
28
|
+
|-------|----------------|
|
|
29
|
+
| `pwd` doesn't start with `/Users/` (macOS operator path) | High |
|
|
30
|
+
| `hostname` doesn't match known operator machines | High |
|
|
31
|
+
| `$HOME` isn't operator's real home | High |
|
|
32
|
+
| `/Applications/Tailscale.app/Contents/MacOS/Tailscale` missing | Medium |
|
|
33
|
+
| `git reflog \| wc -l` is very small (fresh clone) | Medium |
|
|
34
|
+
|
|
35
|
+
If ≥2 fallback signals fire, treat as ephemeral with a surfaced
|
|
36
|
+
warning: "Detected ephemeral mode via heuristics — explicit
|
|
37
|
+
`CLAUDE_EPHEMERAL=1` recommended."
|
|
38
|
+
|
|
39
|
+
**First-session bootstrap**: on the very first mobile session, run
|
|
40
|
+
with heuristics OR explicit flag — observe which signals fire —
|
|
41
|
+
refine this list based on actual claude.ai/code sandbox environment.
|
|
42
|
+
Update this rule after empirical data.
|
|
43
|
+
|
|
44
|
+
## Rules when ephemeral
|
|
45
|
+
|
|
46
|
+
1. **All artifacts push immediately.** Auto-save hook does
|
|
47
|
+
`git commit` AND `git push` — not deferred. If push fails, retry
|
|
48
|
+
once with backoff, then surface failure visibly.
|
|
49
|
+
|
|
50
|
+
2. **Markers go git-tracked, not /tmp.** Any skill or hook that writes
|
|
51
|
+
`/tmp/*` markers MUST also write a git-tracked equivalent. The
|
|
52
|
+
bassclef durable surface is `state/markers/<gate>/...`
|
|
53
|
+
(temperance, diagnose, edit-count, session-timing); `/verify` keeps
|
|
54
|
+
its own pre-existing surface at `state/markers/verify/<branch>.marker`
|
|
55
|
+
for backward-compat with `pre-commit-gate.sh`. In ephemeral mode,
|
|
56
|
+
the git-tracked form is authoritative. Consumers of gate evidence
|
|
57
|
+
(pre-build-gate hook, compliance counter, `/chronicle` gate-evidence
|
|
58
|
+
auto-populate) read whichever form exists; dual-write ensures mobile
|
|
59
|
+
firings survive sandbox teardown.
|
|
60
|
+
|
|
61
|
+
3. **Session lock has TTL.** Lock at `.claude/SESSION_LOCK` includes
|
|
62
|
+
ISO 8601 timestamp. Locks older than 30 minutes are cleared with
|
|
63
|
+
an announcement ("Clearing stale lock from [timestamp]"). No
|
|
64
|
+
indefinite holds.
|
|
65
|
+
|
|
66
|
+
4. **Explicit session-end MUST fire.** Stop hook is unreliable in
|
|
67
|
+
ephemeral. Agent must invoke `/session-end` at natural stopping
|
|
68
|
+
points — task complete, context pressure, operator cue.
|
|
69
|
+
|
|
70
|
+
5. **No credential-bearing tools.** Ephemeral sessions do not hold
|
|
71
|
+
SSH keys, AWS access keys, Tailscale tokens, or long-lived PATs.
|
|
72
|
+
Only fine-grained PATs or GitHub App installation tokens with
|
|
73
|
+
short TTL. Deploy work happens in CI after PR merge, never from
|
|
74
|
+
ephemeral.
|
|
75
|
+
|
|
76
|
+
6. **Chronicle read at session start.** If project memory isn't
|
|
77
|
+
available (no MCP memory server), read the last 2-3 chronicles
|
|
78
|
+
at session start as context substitute. This is how ephemeral
|
|
79
|
+
sessions recover "what we were working on."
|
|
80
|
+
|
|
81
|
+
7. **Conservative gating default.** Orchestrator-gated mode requires
|
|
82
|
+
explicit `--ephemeral-ok` flag in ephemeral. Default is operator-
|
|
83
|
+
gated even if orchestrator was requested — ephemeral adds risk
|
|
84
|
+
that deserves confirmation at decision points.
|
|
85
|
+
|
|
86
|
+
## Failures to surface
|
|
87
|
+
|
|
88
|
+
When any of the following happen, session output must prominently
|
|
89
|
+
report it:
|
|
90
|
+
|
|
91
|
+
- Push failure on auto-save (state loss risk)
|
|
92
|
+
- Stale lock cleared (possible other session running)
|
|
93
|
+
- Chronicle read failed at start (no context recovery)
|
|
94
|
+
- Credential-bearing tool invoked (should not happen; rule violation)
|
|
95
|
+
|
|
96
|
+
## Rationale
|
|
97
|
+
|
|
98
|
+
Desktop sessions assume the filesystem survives between steps. Mobile
|
|
99
|
+
sessions don't. A rule that lets agents keep working with the same
|
|
100
|
+
skills and hooks — but with ephemeral-safe behavior — is how
|
|
101
|
+
continuity holds.
|
|
102
|
+
|
|
103
|
+
## Relationship
|
|
104
|
+
|
|
105
|
+
- `standards/mobile-ephemeral-session.md` — full standard with
|
|
106
|
+
all MUST/SHOULD items
|
|
107
|
+
- `.claude/rules/blocked-items.md` — BLOCKED: protocol still applies
|
|
108
|
+
- `.claude/rules/guardrails.md` — "deploy prod requires human approval"
|
|
109
|
+
is reinforced by this rule (ephemeral can't deploy anyway)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
globs: ["package.json", "package-lock.json", "pnpm-lock.yaml", "yarn.lock", "requirements.txt", "pyproject.toml", "poetry.lock", "Gemfile", "Gemfile.lock", "Cargo.toml", "Cargo.lock", "go.mod", "go.sum"]
|
|
4
|
+
description: New dependency check — verify before adding any package; loads per-pkg-manager sibling
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# New Dependency Check
|
|
8
|
+
|
|
9
|
+
Before adding any new dependency to the project, verify five universal concerns. Then load the per-package-manager sibling under `standards/dependency-discipline/<pkg_manager>.md` for stack-specific specifics.
|
|
10
|
+
|
|
11
|
+
## Universal concerns (every package manager)
|
|
12
|
+
|
|
13
|
+
1. **Stack compatibility** — does it work with the project's framework, language version, build system, and runtime constraints?
|
|
14
|
+
2. **Bundle / install impact** — what does it add to your build artifact, install footprint, or runtime memory?
|
|
15
|
+
3. **Runtime compatibility** — does the package make assumptions about the runtime environment (SSR vs CSR, threaded vs async, target architecture)?
|
|
16
|
+
4. **Maintenance risk** — last publish date, open issues, bus factor. Prefer packages from known maintainers or organizations.
|
|
17
|
+
5. **Alternatives** — can the need be met without a dependency? Built-in standard library? CSS-only? Native HTML? Small inline helper?
|
|
18
|
+
|
|
19
|
+
## Per-package-manager siblings
|
|
20
|
+
|
|
21
|
+
Bassclef's loader logic reads `tech_stack.pkg_manager:` from `.claude/bassclef-configs.jsonc` and loads the matching sibling for stack-specific specifics:
|
|
22
|
+
|
|
23
|
+
| Adopter's `pkg_manager` | Sibling loaded |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `npm` / `pnpm` / `yarn` | `standards/dependency-discipline/npm.md` |
|
|
26
|
+
| `pip` / `poetry` | `standards/dependency-discipline/pip.md` |
|
|
27
|
+
| `cargo` | `standards/dependency-discipline/cargo.md` |
|
|
28
|
+
| `gem` | `standards/dependency-discipline/gem.md` |
|
|
29
|
+
| `go-mod` | `standards/dependency-discipline/go-mod.md` |
|
|
30
|
+
| `none` or unset | Universal concerns only |
|
|
31
|
+
|
|
32
|
+
When the matching sibling does not exist (e.g., a stack bassclef has not yet adopted), the rule fires the universal concerns only and surfaces a `/promote` candidate for the missing sibling.
|
|
33
|
+
|
|
34
|
+
## Process
|
|
35
|
+
|
|
36
|
+
1. State the package name and what it is for.
|
|
37
|
+
2. Run the five universal checks above.
|
|
38
|
+
3. Run the per-PM checks from the matching sibling.
|
|
39
|
+
4. If red flags surface in any check, propose an alternative.
|
|
40
|
+
5. If clear, install and add to the project's Approved Dependencies list (or equivalent — see sibling for the exact list name and location).
|
|
41
|
+
|
|
42
|
+
## Tech stack vocabulary
|
|
43
|
+
|
|
44
|
+
The loader reads `tech_stack.pkg_manager` shipped in bassclef#1127 (WU-2 of bet 2026-06-18a). Adopters set the value at `/onboard-repo` Phase 2.x. When `tech_stack:` block is absent, the universal concerns still apply; sibling-specific guidance is skipped until the operator declares the stack.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
globs: ["src/**/*.ts", "src/**/*.tsx", "src/**/*.js", "src/**/*.py", ".claude/hooks/*.sh", "lib/*.sh", "scripts/*.sh"]
|
|
4
|
+
description: OOA/D entry point — /decompose must fire for all Construction work, not just canvas-driven flow. Extended per bet 24a to cover hook + lib + script code paths per Cockburn ceremony tiering matrix.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# OOA/D Entry Point Rule
|
|
8
|
+
|
|
9
|
+
Construction work that modifies `src/` source files OR substrate code
|
|
10
|
+
(`.claude/hooks/*.sh`, `lib/*.sh`, `scripts/*.sh`) MUST have `/decompose`
|
|
11
|
+
evidence in the session before the first substantive commit. This applies
|
|
12
|
+
regardless of the starting artifact — canvas, spec, epic, defect ticket,
|
|
13
|
+
or bug report.
|
|
14
|
+
|
|
15
|
+
Ceremony scales with code class per Alistair Cockburn's use-case tiering
|
|
16
|
+
(skip / casual / brief / fully-dressed). Table amended per canvas
|
|
17
|
+
`docs/canvases/2026-08-25-ooad-chain-as-substrate-offering.md` Axis 1 —
|
|
18
|
+
adds a skip row at the top and lifts new substrate hook/lib to fully-dressed
|
|
19
|
+
with ADR consult per Ousterhout + Beck + Brooks convergence:
|
|
20
|
+
|
|
21
|
+
| Code class | Ceremony minimum | Artifact path |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| Typo, comment fix, doc edit | Skip. No chain fires. | — |
|
|
24
|
+
| One-line change inside existing function | Casual use case sentence in commit body | Commit body |
|
|
25
|
+
| Existing code extension (add arg, add case) | Brief use case + /decompose entry-point check | `docs/use-cases/UC-*.md` (brief) |
|
|
26
|
+
| Adopter app code (`src/*.ts`, new module or route) | Fully-dressed use case + /decompose + /spec | `docs/use-cases/UC-*.md` |
|
|
27
|
+
| Substrate hook (new `.claude/hooks/*.sh`) | Fully-dressed use case + /decompose + ADR consult | `docs/use-cases/UC-hook-*.md` |
|
|
28
|
+
| Substrate lib (new `lib/*.sh` module) | Fully-dressed use case + /decompose + ADR consult | `docs/use-cases/UC-lib-*.md` |
|
|
29
|
+
| Adopter-facing script (new `scripts/*.sh`) | Brief use case + Tier 0 tests | `docs/use-cases/UC-script-*.md` |
|
|
30
|
+
|
|
31
|
+
Cockburn's rule — ceremony scales with the audience for the artifact.
|
|
32
|
+
Fully-dressed reads by future maintainers, testers, product folks. Brief
|
|
33
|
+
reads by devs on the same team. Casual reads by the author six weeks later.
|
|
34
|
+
|
|
35
|
+
Bet 24a extended the trigger to substrate code paths so hooks + libs +
|
|
36
|
+
scripts get the same design-first discipline that adopter app code gets.
|
|
37
|
+
Per Feathers legacy-code retrofit — characterization tests come first for
|
|
38
|
+
existing code; brief use case follows the tests.
|
|
39
|
+
|
|
40
|
+
## What triggers the rule
|
|
41
|
+
|
|
42
|
+
Creating changes to `src/` files on a Construction branch
|
|
43
|
+
(`feature/*`, `fix/*`) without prior /decompose evidence.
|
|
44
|
+
|
|
45
|
+
## What satisfies the rule
|
|
46
|
+
|
|
47
|
+
One of:
|
|
48
|
+
|
|
49
|
+
1. **Decomposition artifact** at `docs/decompositions/[slug].md` or
|
|
50
|
+
inline in the spec, produced by running `/decompose`.
|
|
51
|
+
2. **Explicit trivial-work deferral**: "Skipped /decompose — trivial
|
|
52
|
+
change, no responsibility reassignment" stated in session.
|
|
53
|
+
3. **Bug-hotfix deferral**: "Skipped /decompose — hotfix, diagnosis
|
|
54
|
+
identified specific failure site, no cross-cutting concerns
|
|
55
|
+
involved" stated in session.
|
|
56
|
+
|
|
57
|
+
Silence is not deferral (per blocked-items rule).
|
|
58
|
+
|
|
59
|
+
## Entry-point variants (per /decompose)
|
|
60
|
+
|
|
61
|
+
- State 1 (canvas path): sequence diagrams drive decomposition
|
|
62
|
+
- State 2 (epic/defect): reverse-engineer from spec + current code
|
|
63
|
+
- State 3 (bug/hotfix): decompose the failure site, identify missing
|
|
64
|
+
interface/decorator
|
|
65
|
+
|
|
66
|
+
All three produce the same artifact format; agents must not skip the
|
|
67
|
+
skill just because the input shape differs from State 1.
|
|
68
|
+
|
|
69
|
+
## Enforcement
|
|
70
|
+
|
|
71
|
+
This rule ships at `tier: lite` — every adopter tier loads the discipline as methodology guidance.
|
|
72
|
+
The mechanical BLOCK layer ships at `tier: standard`:
|
|
73
|
+
|
|
74
|
+
**Methodology layer (all tiers — lite, standard, ultra).**
|
|
75
|
+
Rule loads in session context. Agents self-check at Construction branch creation per the ceremony matrix above.
|
|
76
|
+
|
|
77
|
+
**Mechanical layer (standard, ultra only).**
|
|
78
|
+
Hook at `.claude/hooks/oo-ad-entry-point-check.sh` (bassclef-upstream#1169) fires on PreToolUse Edit/Write against paths in the frontmatter globs. It BLOCKs new-file writes when the required artifacts are missing.
|
|
79
|
+
|
|
80
|
+
The hook checks two conditions:
|
|
81
|
+
- Decomposition — marker at `state/markers/decompose/<branch>.marker` OR any file under `docs/decompositions/`
|
|
82
|
+
- Use case — matching `docs/use-cases/UC-*.md` per code class (UC-hook-*, UC-lib-*, UC-script-*, or unprefixed UC-*)
|
|
83
|
+
|
|
84
|
+
Existing file Edit passes through (Cockburn casual tier — commit body carries the discipline).
|
|
85
|
+
Override: `SKIP_OO_AD_ENTRY_POINT=1` logged via trace-helper.
|
|
86
|
+
|
|
87
|
+
**Lite adopter behavior.** Rule guides ceremony choice; no BLOCK fires on lite. Canvas Axis 1 (docs/canvases/2026-08-25-ooad-chain-as-substrate-offering.md) applied Ousterhout + Beck + Brooks lens — mechanical enforcement fits standard+ scope. INSTEAD of BLOCK on lite: rule guidance shapes agent behavior at construction branch creation. Methodology guidance benefits all adopters; mechanical BLOCK is standard+ scope.
|
|
88
|
+
|
|
89
|
+
## Relationship to other rules
|
|
90
|
+
|
|
91
|
+
- `sdlc-gates.md` Pre-Build section — temperance + diagnosis gates
|
|
92
|
+
fire before this one
|
|
93
|
+
- `blocked-items.md` — entry-point skip is a BLOCKED condition; resolve
|
|
94
|
+
or explicitly defer
|
|
95
|
+
- `testing.md` — new interfaces identified via /decompose need tests
|
|
@@ -0,0 +1,177 @@
|
|
|
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 in ONE of three positions:
|
|
120
|
+
|
|
121
|
+
- **Inline** — e.g., "via `/value-prop tweet`", "(per `/temperance`)", "drafted by `/state-a-problem brief`"
|
|
122
|
+
- **Head marker** — a short discipline-marker line ahead of the prose
|
|
123
|
+
- **Footer line** — a `*Skills fired: ...*` line below the prose (added per bassclef-upstream#1598 for adopter-clarity)
|
|
124
|
+
|
|
125
|
+
The footer position keeps the sales pitch clean at the top while preserving the audit trail. Reader who wants the citation scans the footer. Reader who wants the pitch reads the top.
|
|
126
|
+
|
|
127
|
+
Named surfaces this rule covers:
|
|
128
|
+
|
|
129
|
+
- `longrun_prep_proposal` — `/longrun prep` Step 0 opener + Step 1 pre-flight + Step 1.5/1.6/1.7 shape proposals
|
|
130
|
+
- `longrun_checkpoint` — `/longrun checkpoint` opener + status report
|
|
131
|
+
- `longrun_closeout` — `/longrun closeout` opener + retro lead-in
|
|
132
|
+
- `status_update` — any /longrun status update or progress report between steps
|
|
133
|
+
|
|
134
|
+
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.
|
|
135
|
+
|
|
136
|
+
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).
|
|
137
|
+
|
|
138
|
+
Surface citation format examples:
|
|
139
|
+
|
|
140
|
+
- Problem lead: `> **Problem (via `/state-a-problem brief`)**: <who + what + when + why now + outcome>`
|
|
141
|
+
- Value prop: `> **Value prop (via `/value-prop tweet`)**: <claim + sharpener>`
|
|
142
|
+
- Evidence: `> **Evidence**: Source `<path or ticket>`. Warrant: <one sentence tying source to claim>.`
|
|
143
|
+
- Temperance answer: `**/temperance** fired at <surface>. <scope-decision>. <drift-trigger>.`
|
|
144
|
+
- Luminary pick: `**/luminary** primary lens `<slug>` — <one line on what the lens caught>.`
|
|
145
|
+
- Status update: opens with `> **Checkpoint via `/longrun checkpoint`**: <one line>` OR carries a `## /temperance + /luminary + /loop discipline` block per bet 25k.
|
|
146
|
+
|
|
147
|
+
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.
|
|
148
|
+
|
|
149
|
+
## Composes with
|
|
150
|
+
|
|
151
|
+
- `.claude/rules/plain-english-discipline.md` — master plain-English rule; this rule extends with the gloss and the /kiss-pass second-order rule
|
|
152
|
+
- `.claude/rules/skill-description-clarity.md` — narrow case at the skill description field
|
|
153
|
+
- `.claude/rules/github-issue-flash-tweet.md` — flash-tweet-then-detail discipline for GitHub issue bodies
|
|
154
|
+
- `.claude/rules/context-engineering.md` — INSTEAD-block discipline for negations
|
|
155
|
+
- `.claude/rules/visual-hierarchy.md` — formatting discipline for long agent output
|
|
156
|
+
- `standards/operator-facing-prose-discipline.md` — companion standard with the full reasoning and the format catalog
|
|
157
|
+
- `standards/pr-body-discipline.md` — applies the gloss and the /kiss pass to PR bodies (criterion 3 of the scrub)
|
|
158
|
+
|
|
159
|
+
## 5-layer defense for prose discipline (added bet 27c WU-9)
|
|
160
|
+
|
|
161
|
+
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.
|
|
162
|
+
|
|
163
|
+
| Layer | Surface | Mechanism | What it catches |
|
|
164
|
+
|---|---|---|---|
|
|
165
|
+
| 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) |
|
|
166
|
+
| 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) |
|
|
167
|
+
| 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) |
|
|
168
|
+
| 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 |
|
|
169
|
+
| 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 |
|
|
170
|
+
|
|
171
|
+
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.
|
|
172
|
+
|
|
173
|
+
## Override
|
|
174
|
+
|
|
175
|
+
`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.
|
|
176
|
+
|
|
177
|
+
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.
|
|
@@ -0,0 +1,82 @@
|
|
|
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
|
+
## Mechanical enforcement
|
|
57
|
+
|
|
58
|
+
`.claude/hooks/turn-prose-kiss-check.sh` Stop hook scans every assistant turn prose for option-label Greek patterns:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
(option|shape|pick|tier|approach|step|item|path|alternative)[[:space:]]+[α-ωΑ-Ω]
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
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.
|
|
65
|
+
|
|
66
|
+
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.
|
|
67
|
+
|
|
68
|
+
## Override
|
|
69
|
+
|
|
70
|
+
`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 α/β/γ).
|
|
71
|
+
|
|
72
|
+
INSTEAD of overriding for routine work: rewrite the option labels. The discipline is one of the lowest-cost rules to follow — relabeling takes seconds.
|
|
73
|
+
|
|
74
|
+
## Composes with
|
|
75
|
+
|
|
76
|
+
- `.claude/rules/plain-english-discipline.md` — master plain-English rule; this is one application at the option-label surface
|
|
77
|
+
- `.claude/rules/operator-facing-prose.md` — gloss + /kiss meta-discipline; sister at adjacent surfaces
|
|
78
|
+
- `.claude/hooks/turn-prose-kiss-check.sh` — mechanical enforcement
|
|
79
|
+
- `standards/bassclef-internal-jargon.md` — wordlist (option-label Greek documented as BLOCK)
|
|
80
|
+
- Memory `feedback_keyboard_typeable_options.md` — the original discipline this rule promotes
|
|
81
|
+
- bassclef#1171 — per-place strict escalation pattern
|
|
82
|
+
- bassclef#1027 — turn-prose discipline parent
|
|
@@ -0,0 +1,83 @@
|
|
|
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
|
+
## Layer 2 — `/spec` "Patterns Used" table
|
|
57
|
+
|
|
58
|
+
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.
|
|
59
|
+
|
|
60
|
+
See `templates/spec-template.md` (this PR also amends it).
|
|
61
|
+
|
|
62
|
+
## Layer 3 — deferred to LR5
|
|
63
|
+
|
|
64
|
+
Layer 3 ships in bassclef#478 LR5 work:
|
|
65
|
+
|
|
66
|
+
- `state/pattern-implementations/*.json` — state-spine manifest entries auto-populated from grep over annotations
|
|
67
|
+
- Validation hook — fires on Edit/Write of source files; verifies annotated catalog paths exist
|
|
68
|
+
- `/pattern-trace` skill — operator-callable lookup (forward + reverse + audit)
|
|
69
|
+
|
|
70
|
+
Until Layer 3 ships, this rule is methodology-level. Manual grep is the audit path: `git grep -E '@pattern\s+patterns/' src/`.
|
|
71
|
+
|
|
72
|
+
## Relationship to other rules
|
|
73
|
+
|
|
74
|
+
- `.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)
|
|
75
|
+
- `.claude/rules/artifact-ingestion.md` — annotations are themselves a "Sources read" surface; the catalog path is a reference the implementation cites
|
|
76
|
+
- `.claude/skills/agent-research-spawn/SKILL.md` — fills catalog gaps when an annotation references a missing entry
|
|
77
|
+
- `.claude/skills/pattern-review/SKILL.md` — reads annotations to focus review on conscious pattern choices
|
|
78
|
+
|
|
79
|
+
## Override
|
|
80
|
+
|
|
81
|
+
`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.
|
|
82
|
+
|
|
83
|
+
Until Layer 3, no mechanical override is needed; this is methodology-level enforcement.
|