@thebassclef/lite 0.0.1 → 0.1.2
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/LICENSE +202 -0
- package/README.md +85 -4
- package/dist/cli.cjs +1612 -0
- package/dist/cli.js +1589 -0
- package/dist/index.cjs +4 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/package.json +51 -3
- package/substrate/.bassclef/lite-manifest.json +2701 -0
- package/substrate/.claude/agents/architect.md +70 -0
- package/substrate/.claude/agents/builder.md +114 -0
- package/substrate/.claude/agents/designer.md +156 -0
- package/substrate/.claude/agents/reviewer.md +88 -0
- package/substrate/.claude/hooks/artifact-ingestion-gate.sh +357 -0
- package/substrate/.claude/hooks/assert-verify-steering.sh +77 -0
- package/substrate/.claude/hooks/bassclef-source-config-validate.sh +215 -0
- package/substrate/.claude/hooks/bassclef-sync.sh +634 -0
- package/substrate/.claude/hooks/compound-noun-scrub.sh +292 -0
- package/substrate/.claude/hooks/kiss-expansion-inject.sh +69 -0
- package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
- package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +492 -0
- package/substrate/.claude/hooks/plain-english-steering.sh +156 -0
- package/substrate/.claude/hooks/post-skill-friction-check.sh +177 -0
- package/substrate/.claude/hooks/post-skill-telemetry.sh +62 -0
- package/substrate/.claude/hooks/pre-build-gate.sh +511 -0
- package/substrate/.claude/hooks/pre-commit-gate.sh +451 -0
- package/substrate/.claude/hooks/session-end.sh +433 -0
- package/substrate/.claude/hooks/session-reflection.sh +303 -0
- package/substrate/.claude/hooks/skill-body-grade-gate.sh +219 -0
- package/substrate/.claude/hooks/skill-body-intent-drift.sh +107 -0
- package/substrate/.claude/hooks/skill-step-list-check.sh +171 -0
- package/substrate/.claude/hooks/state-validate.sh +271 -0
- package/substrate/.claude/hooks/substrate-clarity-gate.sh +1110 -0
- package/substrate/.claude/hooks/temperance-gate.sh +147 -0
- package/substrate/.claude/hooks/testing-tier-enforce.sh +233 -0
- package/substrate/.claude/hooks/turn-prose-grade-measure.sh +219 -0
- package/substrate/.claude/hooks/turn-prose-kiss-check.sh +463 -0
- package/substrate/.claude/hooks/vocabulary-migration-check.sh +171 -0
- package/substrate/.claude/hooks/whereami-utc-gate.sh +142 -0
- package/substrate/.claude/luminaries/alan-cooper.md +170 -0
- package/substrate/.claude/luminaries/alistair-cockburn.md +140 -0
- package/substrate/.claude/luminaries/amazon-pr-faq.md +34 -0
- package/substrate/.claude/luminaries/ash-maurya.md +121 -0
- package/substrate/.claude/luminaries/bill-buxton.md +210 -0
- package/substrate/.claude/luminaries/charles-sanders-peirce.md +150 -0
- package/substrate/.claude/luminaries/david-ogilvy.md +192 -0
- package/substrate/.claude/luminaries/don-norman.md +173 -0
- package/substrate/.claude/luminaries/edward-tufte.md +179 -0
- package/substrate/.claude/luminaries/eric-evans.md +160 -0
- package/substrate/.claude/luminaries/frederick-brooks.md +50 -0
- package/substrate/.claude/luminaries/gang-of-four.md +157 -0
- package/substrate/.claude/luminaries/glenford-myers.md +230 -0
- package/substrate/.claude/luminaries/hunt-thomas.md +115 -0
- package/substrate/.claude/luminaries/hyrum-wright.md +94 -0
- package/substrate/.claude/luminaries/jason-fried-dhh.md +46 -0
- package/substrate/.claude/luminaries/jesse-james-garrett.md +154 -0
- package/substrate/.claude/luminaries/john-ousterhout.md +94 -0
- package/substrate/.claude/luminaries/karl-popper.md +132 -0
- package/substrate/.claude/luminaries/kent-beck.md +168 -0
- package/substrate/.claude/luminaries/linus-torvalds.md +218 -0
- package/substrate/.claude/luminaries/martin-fowler.md +164 -0
- package/substrate/.claude/luminaries/michael-feathers.md +125 -0
- package/substrate/.claude/luminaries/michael-nygard.md +118 -0
- package/substrate/.claude/luminaries/robert-c-martin.md +164 -0
- package/substrate/.claude/luminaries/saltzer-schroeder.md +194 -0
- package/substrate/.claude/luminaries/sophia-prater.md +193 -0
- package/substrate/.claude/luminaries/stephen-toulmin.md +131 -0
- package/substrate/.claude/luminaries/tony-hoare.md +170 -0
- package/substrate/.claude/luminaries/vaughn-vernon.md +50 -0
- package/substrate/.claude/luminaries/w-edwards-deming.md +158 -0
- package/substrate/.claude/rules/accessor-library-discipline.md +138 -0
- package/substrate/.claude/rules/adr-discipline.md +120 -0
- package/substrate/.claude/rules/api-conventions.md +125 -0
- package/substrate/.claude/rules/artifact-ingestion.md +179 -0
- package/substrate/.claude/rules/assert-only-after-verify.md +137 -0
- package/substrate/.claude/rules/blocked-items.md +146 -0
- package/substrate/.claude/rules/bootstrap-pair-discipline.md +141 -0
- package/substrate/.claude/rules/branching.md +28 -0
- package/substrate/.claude/rules/cold-adopter-harness-discipline.md +129 -0
- package/substrate/.claude/rules/commit-conventions.md +22 -0
- package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +188 -0
- package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +188 -0
- package/substrate/.claude/rules/context-engineering.md +202 -0
- package/substrate/.claude/rules/context-management.md +85 -0
- package/substrate/.claude/rules/defensive-bash.md +68 -0
- package/substrate/.claude/rules/deferred-actions.md +233 -0
- package/substrate/.claude/rules/destructive-operations.md +69 -0
- package/substrate/.claude/rules/diagnosis.md +38 -0
- package/substrate/.claude/rules/github-issue-flash-tweet.md +156 -0
- package/substrate/.claude/rules/guardrails.md +73 -0
- package/substrate/.claude/rules/hook-wire-on-author.md +103 -0
- package/substrate/.claude/rules/identifier-leak-prevention.md +104 -0
- package/substrate/.claude/rules/iteration-bet-brief-completeness.md +54 -0
- package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +98 -0
- package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +89 -0
- package/substrate/.claude/rules/loop-discipline.md +81 -0
- package/substrate/.claude/rules/manual-prod-approval.md +100 -0
- package/substrate/.claude/rules/marker-enrichment-discipline.md +99 -0
- package/substrate/.claude/rules/mobile-ephemeral-session.md +109 -0
- package/substrate/.claude/rules/new-dependency-check.md +51 -0
- package/substrate/.claude/rules/oo-ad-entry-point.md +117 -0
- package/substrate/.claude/rules/operator-facing-prose.md +196 -0
- package/substrate/.claude/rules/option-label-discipline.md +108 -0
- package/substrate/.claude/rules/pattern-annotation.md +100 -0
- package/substrate/.claude/rules/plain-english-discipline.md +156 -0
- package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +211 -0
- package/substrate/.claude/rules/pr-body-shape.md +317 -0
- package/substrate/.claude/rules/pr-strategy.md +167 -0
- package/substrate/.claude/rules/pr-title-shape.md +161 -0
- package/substrate/.claude/rules/prototype-workflow.md +65 -0
- package/substrate/.claude/rules/reserved-skill-names.md +123 -0
- package/substrate/.claude/rules/schema-management.md +49 -0
- package/substrate/.claude/rules/sdlc-gates.md +149 -0
- package/substrate/.claude/rules/security.md +37 -0
- package/substrate/.claude/rules/session-artifacts.md +236 -0
- package/substrate/.claude/rules/skill-composition-declarations.md +124 -0
- package/substrate/.claude/rules/skill-description-clarity.md +247 -0
- package/substrate/.claude/rules/skill-procedure-step-list.md +137 -0
- package/substrate/.claude/rules/state-schema-validation.md +162 -0
- package/substrate/.claude/rules/stuck-signal-diagnostic.md +140 -0
- package/substrate/.claude/rules/substrate-config-schema.md +98 -0
- package/substrate/.claude/rules/test-list-discipline.md +175 -0
- package/substrate/.claude/rules/test-sufficiency.md +210 -0
- package/substrate/.claude/rules/testing-tier-config.md +145 -0
- package/substrate/.claude/rules/testing.md +38 -0
- package/substrate/.claude/rules/turn-estimate-grounding.md +134 -0
- package/substrate/.claude/rules/visual-hierarchy.md +437 -0
- package/substrate/.claude/rules/we-dont-break-adopters.md +126 -0
- package/substrate/.claude/rules/whereami-load-bearing.md +202 -0
- package/substrate/.claude/rules/writing-craft-discipline.md +92 -0
- package/substrate/.claude/rules/wu-sequencing-compounds.md +145 -0
- package/substrate/.claude/skills/build/SKILL.md +640 -0
- package/substrate/.claude/skills/chronicle/SKILL.md +55 -0
- package/substrate/.claude/skills/clean-artifacts/SKILL.md +249 -0
- package/substrate/.claude/skills/decompose/SKILL.md +280 -0
- package/substrate/.claude/skills/diagnose/SKILL.md +297 -0
- package/substrate/.claude/skills/feynman/SKILL.md +90 -0
- package/substrate/.claude/skills/howdoi/SKILL.md +105 -0
- package/substrate/.claude/skills/ia-model/SKILL.md +108 -0
- package/substrate/.claude/skills/interaction-design/SKILL.md +112 -0
- package/substrate/.claude/skills/interpret-input/SKILL.md +180 -0
- package/substrate/.claude/skills/journal/SKILL.md +209 -0
- package/substrate/.claude/skills/kiss/SKILL.md +449 -0
- package/substrate/.claude/skills/launch/SKILL.md +915 -0
- package/substrate/.claude/skills/lean-canvas/SKILL.md +332 -0
- package/substrate/.claude/skills/longrun/SKILL.md +463 -0
- package/substrate/.claude/skills/luminary/SKILL.md +481 -0
- package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
- package/substrate/.claude/skills/onboard-repo/SKILL.md +1624 -0
- package/substrate/.claude/skills/pattern-review/SKILL.md +99 -0
- package/substrate/.claude/skills/personas/SKILL.md +207 -0
- package/substrate/.claude/skills/promote/SKILL.md +283 -0
- package/substrate/.claude/skills/requirement/SKILL.md +98 -0
- package/substrate/.claude/skills/retro/SKILL.md +117 -0
- package/substrate/.claude/skills/riff/SKILL.md +114 -0
- package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
- package/substrate/.claude/skills/session-end/SKILL.md +309 -0
- package/substrate/.claude/skills/session-log/SKILL.md +299 -0
- package/substrate/.claude/skills/skills/SKILL.md +228 -0
- package/substrate/.claude/skills/spec/SKILL.md +105 -0
- package/substrate/.claude/skills/sprint/SKILL.md +392 -0
- package/substrate/.claude/skills/stage/SKILL.md +384 -0
- package/substrate/.claude/skills/state-a-problem/SKILL.md +185 -0
- package/substrate/.claude/skills/temperance/SKILL.md +108 -0
- package/substrate/.claude/skills/use-case/SKILL.md +417 -0
- package/substrate/.claude/skills/user-stories/SKILL.md +268 -0
- package/substrate/.claude/skills/value-prop/SKILL.md +251 -0
- package/substrate/.claude/skills/verify/SKILL.md +160 -0
- package/substrate/.claude/skills/visual-review/SKILL.md +503 -0
- package/substrate/.claude/skills/whats-the-plan/SKILL.md +202 -0
- package/substrate/.claude/skills/whereami/SKILL.md +307 -0
- package/substrate/AGENTS.md +79 -0
- package/substrate/CLAUDE-lite.md +85 -0
- package/substrate/CODE_OF_CONDUCT.md +28 -0
- package/substrate/CONTRIBUTING.md +177 -0
- package/substrate/README.md +173 -0
- package/substrate/SECURITY.md +19 -0
- package/substrate/architecture/decisions/ADR-029-release-pipeline.md +79 -0
- package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
- package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
- package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
- package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
- package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
- package/substrate/lib/clean-artifacts-sweep.sh +112 -0
- package/substrate/lib/code-comment-discipline.sh +144 -0
- package/substrate/lib/composer-preflight.sh +459 -0
- package/substrate/lib/hook-inject.sh +255 -0
- package/substrate/lib/luminary-pick.sh +96 -0
- package/substrate/lib/output-discipline.sh +143 -0
- package/substrate/lib/prose-scan-boundary.sh +171 -0
- package/substrate/lib/rewrite-check.sh +214 -0
- package/substrate/lib/state.sh +1372 -0
- package/substrate/lib/telemetry.sh +205 -0
- package/substrate/lib/tier-check.sh +187 -0
- package/substrate/lib/tier-dependency-audit.sh +1088 -0
- package/substrate/presence/install/bassclef-hook-connect.sh +178 -0
- package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
- package/substrate/presence/install/bassclef-sync.template.sh +2076 -0
- package/substrate/presence/install/schedule-auto-save.cron.sh +88 -0
- package/substrate/presence/install/schedule-auto-save.taskscheduler.md +122 -0
- package/substrate/scripts/aggregate-telemetry.sh +217 -0
- package/substrate/scripts/analyze-tier-dependencies.sh +239 -0
- package/substrate/scripts/generate-lite-manifest.sh +505 -0
- package/substrate/scripts/generate-tier-manifest.sh +28 -0
- package/substrate/scripts/intent-drift-check.sh +456 -0
- package/substrate/scripts/lite-manifest-drift-check.sh +146 -0
- package/substrate/scripts/render-lite-manifest-doc.sh +150 -0
- package/substrate/standards/adr-template.md +86 -0
- package/substrate/standards/api-conventions/nextjs.md +84 -0
- package/substrate/standards/artifact-composition.md +209 -0
- package/substrate/standards/bash-hook-safety.md +246 -0
- package/substrate/standards/bassclef-configs-schema.md +232 -0
- package/substrate/standards/bassclef-evolution.md +143 -0
- package/substrate/standards/bassclef-internal-jargon.md +244 -0
- package/substrate/standards/bassclef-managed-sentinel.md +96 -0
- package/substrate/standards/bassclef-source-config.md +228 -0
- package/substrate/standards/branch-stacking.md +408 -0
- package/substrate/standards/code-safety-principles.md +176 -0
- package/substrate/standards/composer-prerequisites.md +155 -0
- package/substrate/standards/deferred-actions-schema.md +204 -0
- package/substrate/standards/dependency-discipline/cargo.md +39 -0
- package/substrate/standards/dependency-discipline/gem.md +43 -0
- package/substrate/standards/dependency-discipline/go-mod.md +41 -0
- package/substrate/standards/dependency-discipline/npm.md +42 -0
- package/substrate/standards/dependency-discipline/pip.md +42 -0
- package/substrate/standards/deployment-topology/ec2-tailscale.md +225 -0
- package/substrate/standards/deployment-topology.md +69 -0
- package/substrate/standards/docs-sync-allowlist.md +76 -0
- package/substrate/standards/domain-and-dns.md +145 -0
- package/substrate/standards/frontend-stack.md +67 -0
- package/substrate/standards/frontmatter-schema.md +154 -0
- package/substrate/standards/graceful-exit.md +227 -0
- package/substrate/standards/hook-idempotency.md +102 -0
- package/substrate/standards/hook-injection-discipline.md +202 -0
- package/substrate/standards/hook-install-class.md +215 -0
- package/substrate/standards/input-handler-interface.md +152 -0
- package/substrate/standards/lite-manifest-schema-changes.md +135 -0
- package/substrate/standards/luminary-matching.md +105 -0
- package/substrate/standards/luminary-problem-patterns.md +481 -0
- package/substrate/standards/migration-discipline/active-record.md +50 -0
- package/substrate/standards/migration-discipline/alembic.md +43 -0
- package/substrate/standards/migration-discipline/gorm.md +50 -0
- package/substrate/standards/migration-discipline/prisma.md +53 -0
- package/substrate/standards/migration-discipline/sqlalchemy.md +51 -0
- package/substrate/standards/mobile-ephemeral-session.md +167 -0
- package/substrate/standards/model-routing-discipline.md +160 -0
- package/substrate/standards/ogilvy-writing-rules.md +225 -0
- package/substrate/standards/opener-discipline.md +96 -0
- package/substrate/standards/operator-facing-prose-discipline.md +201 -0
- package/substrate/standards/persona-schema.md +229 -0
- package/substrate/standards/pluggable-luminaries.md +323 -0
- package/substrate/standards/pr-body-discipline.md +115 -0
- package/substrate/standards/preview-state-schema.md +189 -0
- package/substrate/standards/project-directory-layout.md +276 -0
- package/substrate/standards/release-tagging.md +137 -0
- package/substrate/standards/reserved-skill-names.md +120 -0
- package/substrate/standards/scannable-multi-option-output.md +261 -0
- package/substrate/standards/sdlc-compliance.md +286 -0
- package/substrate/standards/sdlc-gates/typescript.md +57 -0
- package/substrate/standards/secrets-lifecycle.md +210 -0
- package/substrate/standards/security-scanner-adapter.md +145 -0
- package/substrate/standards/session-board.md +256 -0
- package/substrate/standards/skill-output-discipline.md +90 -0
- package/substrate/standards/state-spine-contract.md +255 -0
- package/substrate/standards/state-spine.md +511 -0
- package/substrate/standards/steering-hints/kiss-words.md +11 -0
- package/substrate/standards/substrate-config-schema.md +267 -0
- package/substrate/standards/tech-stack-config.md +109 -0
- package/substrate/standards/tier-dependency-analysis.md +167 -0
- package/substrate/standards/tier-runtime-deps/lite.md +57 -0
- package/substrate/standards/tier-tag-schema.md +155 -0
- package/substrate/standards/two-layer-config.md +99 -0
- package/substrate/standards/use-case-format.md +292 -0
- package/substrate/standards/user-story-invest.md +268 -0
- package/substrate/standards/velocity-and-appetite.md +229 -0
- package/substrate/standards/voice-input-pattern.md +119 -0
- package/substrate/standards/whereami-schema.md +301 -0
- package/substrate/standards/worktree-management.md +211 -0
- package/substrate/standards/writing-guide.md +213 -0
- package/substrate/templates/chronicle-template.md +75 -0
- package/substrate/templates/deferred-action-template.md +45 -0
- package/substrate/templates/memory-proposal-template.md +77 -0
- package/substrate/templates/persona-template.md +200 -0
- package/substrate/templates/pr-faq.md +45 -0
- package/substrate/templates/secret-rotation-template.md +162 -0
- package/substrate/templates/spec-template.md +131 -0
- package/substrate/templates/use-case-template.md +194 -0
- package/substrate/templates/user-story-template.md +107 -0
- package/substrate/templates/whereami-template.md +101 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: "When /longrun prep proposes scope shapes, each shape's compounding-sequence row comes from fresh analysis."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Compounding-Axis Fresh Analysis
|
|
7
|
+
|
|
8
|
+
When `/longrun` prep proposes scope shapes, each shape's compounding-sequence row comes from fresh analysis. Hand-off documents do not satisfy Step 1.5 of the `/longrun` SKILL. That includes `docs/whereami.md`'s `next_longrun_queue` recommended order, an audit doc's `next_pending`, and a prior chronicle's pickup suggestion. Each shape gets its own row from the agent's own analysis at prep time.
|
|
9
|
+
|
|
10
|
+
This rule is the methodology layer. The mechanical layer is `.claude/hooks/longrun-prep-compounding-sequence-check.sh`. That Stop hook is wired in `.claude/settings.json`. Tests at `.claude/hooks/tests/longrun-prep-compounding-sequence-check.test.sh`.
|
|
11
|
+
|
|
12
|
+
The hook scans the latest assistant message when `state/markers/turn-prose-surface/longrun_prep_proposal.marker` is touched. It BLOCKs the stop (exit 2) when the compounding-sequence column headers are missing. Hook accepts EITHER shape per PR #1591 (bassclef#1555 PR-1): the new 6-axis frame (default, per plan doc `docs/next-session-plan-2026-09-09-compounding-axis-refactor.md`) OR the legacy 5-axis frame (grace window through 2026-10-31 per ADR-031). Backward compat opt-out: `COMPOUNDING_AXIS_TOGGLE=advisory` reverts to V1 (finding to stderr; exit 0).
|
|
13
|
+
|
|
14
|
+
**V2 strict landed 2026-06-30.** The first `/longrun` prep after V1 ship surfaced only 3 of 5 columns at the operator-facing table. The hook caught the miss as designed. But it emitted ADVISORY to stderr. The agent could not see its own advisory in conversation. The operator could not see it on mobile. The operator asked "compounding sequence miss intact from the last substrate fix?" — that proved the visibility gap. The hook ships V2 strict as the next calibration step per ADR-035 (substrate-as-system — the mechanism must close the loop).
|
|
15
|
+
|
|
16
|
+
## Why this rule exists
|
|
17
|
+
|
|
18
|
+
Bet 30b filed under five catches of one class in 36 hours. The pattern: the agent emits operator-facing assertions without re-reading the data the assertion claims. One catch was that evening's `/longrun` prep. The agent shipped three scope shapes ordered by size rather than by how often each shape's work would fire after shipping. The agent treated whereami's `next_longrun_queue` recommended order as a stand-in for fresh analysis. Operator caught the miss and asked why the analysis step was skipped.
|
|
19
|
+
|
|
20
|
+
The hook caught nothing. The agent touched the surface marker AFTER writing the proposal, not before. The Stop hook fired at the next Stop event with a different latest assistant message — not the proposal where the column was missing.
|
|
21
|
+
|
|
22
|
+
This rule extends the discipline beyond hook coverage:
|
|
23
|
+
|
|
24
|
+
1. **Fresh analysis** — each scope candidate gets a per-shape compounding row authored at prep time, not copied from a hand-off doc
|
|
25
|
+
2. **Marker touch BEFORE the surface** — the marker is the agent's commit to writing the compounding-aware proposal next; touching after defeats the hook's check (cross-reference `.claude/rules/operator-facing-prose.md` Rule 3)
|
|
26
|
+
3. **Marker cleanup AFTER the surface (paired with V2 strict)** — the agent removes the marker once the prep proposal has landed AND the operator has confirmed scope. The marker's purpose is satisfied at that point. Without cleanup under V2 strict, every post-prep Stop event blocks. The hook scans every assistant message. Most post-prep turns (status updates, commit summaries, WU work) do not carry a shape proposal table. Cleanup is the bootstrap pair V1 advisory hid (exit 0 forgave the gap).
|
|
27
|
+
4. **R8 underlying pattern (per bet 30b risk ledger)** — the agent does not label a substrate artifact (risk ledger, decomposition, audit, ADR-consult, sources-read citation) without doing the underlying work that produces it. Naming the artifact ≠ producing it.
|
|
28
|
+
|
|
29
|
+
## When this rule fires
|
|
30
|
+
|
|
31
|
+
Every `/longrun` prep that proposes scope shapes:
|
|
32
|
+
|
|
33
|
+
- `/longrun prep` (operator types) — Step 1.5 compounding-sequence analysis per shape candidate
|
|
34
|
+
- `/sprint` next-work proposals when scope-shape options are surfaced (sister surface; same shape contract)
|
|
35
|
+
- Bet doc authoring — when the goal doc's `## Steps` section enumerates a per-shape table, the same axis applies
|
|
36
|
+
|
|
37
|
+
The rule does NOT fire on:
|
|
38
|
+
|
|
39
|
+
- Single-shape continuation prep where the operator has already confirmed scope (no shape PICK happening; per-shape compounding still applies per memory `feedback-compounding-sequence-mandatory-every-prep-surface`)
|
|
40
|
+
- WU-sequencing inside a chosen shape (covered by sister rule `.claude/rules/wu-sequencing-compounds.md` for Step 1.7 INTRA-shape)
|
|
41
|
+
|
|
42
|
+
## What the rule requires
|
|
43
|
+
|
|
44
|
+
Before the operator picks a scope shape:
|
|
45
|
+
|
|
46
|
+
1. **Touch the surface marker FIRST** — `mkdir -p state/markers/turn-prose-surface && touch state/markers/turn-prose-surface/longrun_prep_proposal.marker` BEFORE writing the proposal. The marker tells the Stop hook the next message is a prep proposal subject to the column-presence check.
|
|
47
|
+
2. **Per-option compounding row** — each option candidate carries 6 axes per `/longrun` SKILL Step 1.5 (new default per bassclef#1555). Per `#1193` cure, Step 1.5 prescribes the `### Compounding value per option` section explicitly. The 6 axes read as practical decision fields for Sam (Saturday evaluator) and Louis (context switcher) per plan doc `docs/next-session-plan-2026-09-09-compounding-axis-refactor.md` L36-45.
|
|
48
|
+
|
|
49
|
+
The 6-axis default (new; per bassclef#1555 PR-2):
|
|
50
|
+
|
|
51
|
+
| Axis | Source | Standard values |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| Deliverable | Plain sentence | What ships when this option lands |
|
|
54
|
+
| Problem | `/state-a-problem brief` | ≤500 chars; framework implicit |
|
|
55
|
+
| Value prop | `/value-prop tweet` | ≤280 chars; claim + sharpener |
|
|
56
|
+
| Turns | Grounded range | Cite past goal actuals per `.claude/rules/turn-estimate-grounding.md` |
|
|
57
|
+
| Risk | 🟢 / 🟡 / 🔴 | Low / medium / high |
|
|
58
|
+
| Shipping priority | Q1 / Q2 / Q3 / Q4 or blank | Blank prompts `Run /eisenhower to prioritize?` |
|
|
59
|
+
|
|
60
|
+
The 5-axis legacy (grace window through 2026-10-31 per ADR-031; hook accepts both shapes):
|
|
61
|
+
|
|
62
|
+
| Plain-English (preferred per ADR-040 D4) | Compressed (grace only) | Standard values |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| Where the payoff shows up | Compounding surface | per-PR / per-release / per-session / per-adopter / per-quarter |
|
|
65
|
+
| How often it fires | Compounding rate | continuous / frequent / per-session / per-adopter / per-quarter |
|
|
66
|
+
| What must be true first | Foundation prerequisites | none / specific goal / ticket / config flag |
|
|
67
|
+
| Does this teach a shape later work reuses | Inverse-dependency | yes (names the later work) / no |
|
|
68
|
+
| What breaks if we ship this half-done | Risk class | low / medium / high |
|
|
69
|
+
|
|
70
|
+
R8 catch preservation: Deliverable + Problem + Value prop force fresh per-option analysis. `/state-a-problem` and `/value-prop` are themselves cognitive tools that resist copy-paste. The distinct-values check per option (bassclef#564) applies to whichever shape the prep uses.
|
|
71
|
+
3. **Fresh analysis** — the column values come from the agent's reading of the shape itself, not from a hand-off doc's recommended order. If the agent reads a hand-off doc and the order matches its own analysis, the row matches by coincidence, not by copy. If the order DOESN'T match, the rule surfaces the conflict to the operator.
|
|
72
|
+
4. **Recommended shape rationale** cites the compounding sequence + adopter-benefit mechanism (per sister rule for Step 1.6 bassclef-upstream#1302) explicitly.
|
|
73
|
+
5. **Remove the surface marker AFTER scope confirmation** — once the prep proposal has landed AND the operator has confirmed scope (or the proposal is being abandoned), remove `state/markers/turn-prose-surface/longrun_prep_proposal.marker`. The marker's purpose is satisfied. Leaving it present makes every post-prep Stop event block under V2 strict default. Most subsequent turns (status updates, commit summaries, WU work) do not carry a shape proposal table.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
rm -f state/markers/turn-prose-surface/longrun_prep_proposal.marker
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This step is mandatory at the prep→execution handoff. Hook auto-cleanup deferred to a follow-on (substrate-evolution ticket) — the rule names the discipline; the agent removes the marker today.
|
|
80
|
+
|
|
81
|
+
## Postcondition contract (per Hoare)
|
|
82
|
+
|
|
83
|
+
Per bassclef-upstream#564 + luminary consultation (Ousterhout / Hoare / Feathers / Saltzer-Schroeder / Beck):
|
|
84
|
+
|
|
85
|
+
**Precondition:** the /longrun prep proposes 2+ candidate shapes, each with a distinct scope.
|
|
86
|
+
|
|
87
|
+
**Postcondition:** for every option O in the candidate set, for every axis A in the axis list of the shape the prep uses (6-axis default OR 5-axis legacy), the prep output contains a non-empty value V(O, A). The rendering satisfies the postcondition in one of two accepted shapes (per bassclef-upstream#1376):
|
|
88
|
+
|
|
89
|
+
- **Per-option shape (pre-existing default).** V(O, A) renders under O's section as bullets or table rows. Each option gets a full section. Not only in a header row shared across options.
|
|
90
|
+
- **Per-recommended-only shape (bassclef-upstream#1376 addition).** The prep opens with `**Recommend:** Option X`. V(recommended, A) renders under the recommended option's section as bullets. V(other, A) renders as scan-table row cells — one cell per axis per non-recommended option. Reader lands the recommended card fast; other options stay auditable from the scan-table row.
|
|
91
|
+
|
|
92
|
+
The 6-axis default is: Deliverable, Problem, Value prop, Turns, Risk, Shipping priority. The 5-axis legacy (grace window through 2026-10-31) is: Where the payoff shows up, How often it fires, What must be true first, Does this teach a shape later work reuses, What breaks if we ship this half-done. Hook accepts either shape per PR #1591.
|
|
93
|
+
|
|
94
|
+
The postcondition is stronger than the message-level check V2 ships. V2 verifies that the column names appear anywhere in the message. V3 (bassclef-upstream#564; ships with this rule amendment) verifies that each option section carries all axes of the chosen shape as distinct values. A single header row with axis names but no per-option values fails the postcondition. That is the R8 pattern this cure closes.
|
|
95
|
+
|
|
96
|
+
Per `#1193` cure — the hook regex accepts both `Shape a-c` and `Option a-e` for the per-shape check during the grace window through 2026-10-31 per `.claude/rules/we-dont-break-adopters.md`. After that date only `Option [a-z]` matches. SKILL `#830` renamed the label; the rule postcondition applies equally to both vocabularies.
|
|
97
|
+
|
|
98
|
+
**When shapes legitimately share an axis value** (e.g., all three shapes have `Risk class: low` because the work is small), the values still render per shape — same text under three sections. Rendering satisfies the postcondition. The check does not flag legitimate convergence.
|
|
99
|
+
|
|
100
|
+
## Anti-patterns
|
|
101
|
+
|
|
102
|
+
These shapes fail this rule.
|
|
103
|
+
|
|
104
|
+
**Agent ships scope shapes WITHOUT compounding-sequence columns.** Tonight's failure (caught by operator). Cure: include the columns; touch the marker BEFORE the proposal.
|
|
105
|
+
|
|
106
|
+
**Agent ships scope shapes with columns COPIED from whereami's `next_longrun_queue` or an audit's `next_pending`.** The columns are present but the fresh-analysis precondition is violated (R2 Hoare — mechanically unverifiable from output). Cure: re-analyze each shape independently; surface conflict if hand-off order disagrees with fresh order.
|
|
107
|
+
|
|
108
|
+
**Agent touches the surface marker AFTER writing the proposal.** Tonight's failure mode. The hook fires at the next Stop event with the marker-touch message as the latest assistant message — not the proposal. Cure: touch marker BEFORE proposal.
|
|
109
|
+
|
|
110
|
+
**Agent leaves the surface marker present after scope confirmation.** Under V2 strict default this blocks every subsequent Stop event because the hook scans every assistant message and most post-prep turns do not carry a shape proposal table. Cure: remove the marker at the prep→execution handoff per step 5 above.
|
|
111
|
+
|
|
112
|
+
**Agent labels a "risk ledger" / "decomposition" / "audit" / "sources-read" without doing the underlying work (R8 underlying pattern).** The label is the assertion; the work that produces it is the data the assertion claims. Tonight's risk-ledger catch by operator. Cure: cite the file path of the produced artifact in agent output; not just the label.
|
|
113
|
+
|
|
114
|
+
INSTEAD of any of these: do the work first; touch the marker; write the proposal with the compounding row populated from fresh analysis; cite produced artifacts by file path.
|
|
115
|
+
|
|
116
|
+
## Hand-off documents that do NOT satisfy
|
|
117
|
+
|
|
118
|
+
These all carry useful context but do not substitute for fresh analysis:
|
|
119
|
+
|
|
120
|
+
- `docs/whereami.md` `next_longrun_queue` — operator + prior session's pickup suggestion; not compounding-derived
|
|
121
|
+
- audit doc `next_pending` field — sequenced by audit author; may not match current compounding priorities
|
|
122
|
+
- prior chronicle's "next pickup" suggestion — operator-facing handoff narrative; not analysis
|
|
123
|
+
- prior goal doc's `next_bet` field — sequencing intent; not analysis
|
|
124
|
+
- memory entry `feedback_*` — prior discipline; relevant context but not a substitute for the per-shape row
|
|
125
|
+
|
|
126
|
+
Agent reads all of these for context. Agent then writes fresh compounding analysis per shape. The two activities are distinct.
|
|
127
|
+
|
|
128
|
+
## Override
|
|
129
|
+
|
|
130
|
+
`SKIP_COMPOUNDING_AXIS_CHECK=1 <command>` — bypass the hook for one call (already exists; logged via trace-helper). The rule's methodology layer has no override — fresh analysis is the precondition; without it, the proposal is incomplete.
|
|
131
|
+
|
|
132
|
+
For trivial single-shape continuation prep where the operator has already confirmed scope: the rule applies but cost is small (one row in the goal doc); no override needed.
|
|
133
|
+
|
|
134
|
+
## Composes with
|
|
135
|
+
|
|
136
|
+
- `.claude/rules/wu-sequencing-compounds.md` — sister at Step 1.7 INTRA-shape (per-step produces/consumes)
|
|
137
|
+
- `.claude/rules/operator-facing-prose.md` Rule 3 — marker touch BEFORE the named surface (this rule's mechanism precondition)
|
|
138
|
+
- `.claude/rules/blocked-items.md` — BLOCKED protocol the hook fires under V2 strict
|
|
139
|
+
- `.claude/rules/substrate-as-system.md` — every rule has a mechanism + every mechanism has a rule; this rule pairs the existing `longrun-prep-compounding-sequence-check.sh` mechanism with its rule body
|
|
140
|
+
- `.claude/hooks/longrun-prep-compounding-sequence-check.sh` — the mechanical layer
|
|
141
|
+
- `.claude/hooks/tests/longrun-prep-compounding-sequence-check.test.sh` — Tier 0 tests pinning the hook
|
|
142
|
+
- `.claude/skills/longrun/SKILL.md` Step 1.5 — the procedure surface the rule serves
|
|
143
|
+
- `@luminary jerome-saltzer-and-michael-schroeder` — complete mediation principle
|
|
144
|
+
- `@luminary tony-hoare` — pre/postcondition contracts (R2 fresh-analysis is precondition, mechanically unverifiable)
|
|
145
|
+
- `@luminary michael-feathers` — characterization tests pin REAL prep prose (R3 follow-on)
|
|
146
|
+
- `@luminary kent-beck` — Tier 0 strict TDD on the hook (R4 follow-on covers each umbrella ticket instance)
|
|
147
|
+
|
|
148
|
+
## Refs
|
|
149
|
+
|
|
150
|
+
- sunj-labs/bassclef-upstream#540 — umbrella ticket; this rule closes 1 of 5 sub-cures
|
|
151
|
+
- `docs/iteration-bets/2026-06-30b-substrate-anchoring-cure.md` — goal doc; WU-E ships this rule
|
|
152
|
+
- `docs/risk-ledgers/2026-06-30b-substrate-anchoring-cure.md` — 8 lens pre-mortem + R8 meta-catch
|
|
153
|
+
- bassclef-upstream#1299 (Step 1.5 INTER-shape compounding-sequence) — sister filing ticket if it exists
|
|
154
|
+
- bassclef-upstream#1302 (Step 1.6 INTER-shape adopter-benefit) — sister rule shape
|
|
155
|
+
- bassclef-upstream#1304 (turn-prose-surface marker discipline) — operator-facing-prose Rule 3
|
|
156
|
+
- memory `feedback-compounding-sequence-mandatory-every-prep-surface` — fires at every prep surface, including single-shape continuation
|
|
157
|
+
- memory `feedback-architect-review-audit-is-authoritative` — audits override `next_longrun_queue` for next-pickup
|
|
158
|
+
- ADR-035 substrate-as-system — the tenet this rule operationalizes at Step 1.5
|
|
159
|
+
- ADR-040 Decision 4 (planning-skill body template) — plain-English axis names shipped in PR #743 (goal 17a). Per #745, the sister rule + hook accept both shapes during the grace window through 2026-10-31.
|
|
160
|
+
|
|
161
|
+
## Deferred to follow-on
|
|
162
|
+
|
|
163
|
+
The bet 30b risk ledger named these add-to-scope dispositions for WU-E; they ship in a follow-on goal:
|
|
164
|
+
|
|
165
|
+
- **R3 (Feathers)** — extend Tier 0 tests with 3 characterization tests against REAL `/longrun` prep messages (tonight's + 2 from prior goal prep chronicles)
|
|
166
|
+
- **R4 (Beck)** — extend Tier 0 tests with cases for each instance under umbrella #540 (release recommendation skip, cleanup proposal skip, visual-compare skip, session-orientation skip)
|
|
167
|
+
- **R6 (Linus)** — cold-adopter harness check for session-reflection.d/05-active-bet.sh fragment presence (sister to WU-B)
|
|
168
|
+
- **R7 (Norman)** — extend `longrun-prep-compounding-sequence-check.sh` to ALSO scan for proof-of-read line from `/longrun` Step 0.4 (sister to WU-B cure 3)
|
|
169
|
+
|
|
170
|
+
The rule body is complete without these; the hook coverage extension is a separate ship vehicle.
|
|
171
|
+
|
|
172
|
+
## Per-WU coverage (bassclef-upstream#597 extension)
|
|
173
|
+
|
|
174
|
+
Per-WU compounding-sequence rendering carries the same 5 axes at the step layer, alongside the produces/consumes table.
|
|
175
|
+
|
|
176
|
+
When a `/longrun` prep proposal contains 2+ WU rows in the produces/consumes table (per Step 1.7), the proposal MUST also carry per-step compounding-sequence rendering — either a `## Compounding value per step` section OR per-step 5-axis bullets under each step.
|
|
177
|
+
|
|
178
|
+
Anti-pattern that fails: shape-level 5 axes rendered per Step 1.5, WU produces/consumes rendered per Step 1.7, per-step compounding-sequence skipped. This shape passed as convention for weeks. It got displaced when PR #567 tightened Step 1.5 to per-shape distinct values, which shifted agent attention to shape-level. INSTEAD of trusting convention: mechanize the per-step coverage so sibling discipline tightening does not crowd it out.
|
|
179
|
+
|
|
180
|
+
Correct shape: same 5 axes rendered per step with distinct values — plain-English names preferred per ADR-040 D4 (Where the payoff shows up / How often it fires / What must be true first / Does this teach a shape later work reuses / What breaks if we ship this half-done). Compressed forms accepted during the grace window through 2026-10-31.
|
|
181
|
+
|
|
182
|
+
Mechanical layer: `.claude/hooks/longrun-prep-compounding-sequence-check.sh` extended with per-step check (V1 strict — BLOCK on missing per-step axes when 2+ WU rows present). Toggle `COMPOUNDING_AXIS_TOGGLE=advisory` retains backward-compat.
|
|
183
|
+
|
|
184
|
+
Sister to Step 1.5 per-shape check (bassclef-upstream#564). Same discipline shape at a different layer.
|
|
185
|
+
|
|
186
|
+
## Retirement condition
|
|
187
|
+
|
|
188
|
+
This rule retires only if `/longrun` Step 1.5 stops requiring per-shape compounding analysis. Mechanical extensions (V2 BLOCK flip, additional column types, additional surfaces) may evolve; the discipline of fresh analysis per shape persists.
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: "When /longrun prep proposes scope shapes, each shape's compounding-sequence row comes from fresh analysis."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Compounding-Axis Fresh Analysis
|
|
7
|
+
|
|
8
|
+
When `/longrun` prep proposes scope shapes, each shape's compounding-sequence row comes from fresh analysis. Hand-off documents do not satisfy Step 1.5 of the `/longrun` SKILL. That includes `docs/whereami.md`'s `next_longrun_queue` recommended order, an audit doc's `next_pending`, and a prior chronicle's pickup suggestion. Each shape gets its own row from the agent's own analysis at prep time.
|
|
9
|
+
|
|
10
|
+
This rule is the methodology layer. The mechanical layer is `.claude/hooks/longrun-prep-compounding-sequence-check.sh`. That Stop hook is wired in `.claude/settings.json`. Tests at `.claude/hooks/tests/longrun-prep-compounding-sequence-check.test.sh`.
|
|
11
|
+
|
|
12
|
+
The hook scans the latest assistant message when `state/markers/turn-prose-surface/longrun_prep_proposal.marker` is touched. It BLOCKs the stop (exit 2) when the compounding-sequence column headers are missing. Hook accepts EITHER shape per PR #1591 (bassclef#1555 PR-1): the new 6-axis frame (default, per plan doc `docs/next-session-plan-2026-09-09-compounding-axis-refactor.md`) OR the legacy 5-axis frame (grace window through 2026-10-31 per ADR-031). Backward compat opt-out: `COMPOUNDING_AXIS_TOGGLE=advisory` reverts to V1 (finding to stderr; exit 0).
|
|
13
|
+
|
|
14
|
+
**V2 strict landed 2026-06-30.** The first `/longrun` prep after V1 ship surfaced only 3 of 5 columns at the operator-facing table. The hook caught the miss as designed. But it emitted ADVISORY to stderr. The agent could not see its own advisory in conversation. The operator could not see it on mobile. The operator asked "compounding sequence miss intact from the last substrate fix?" — that proved the visibility gap. The hook ships V2 strict as the next calibration step per ADR-035 (substrate-as-system — the mechanism must close the loop).
|
|
15
|
+
|
|
16
|
+
## Why this rule exists
|
|
17
|
+
|
|
18
|
+
Bet 30b filed under five catches of one class in 36 hours. The pattern: the agent emits operator-facing assertions without re-reading the data the assertion claims. One catch was that evening's `/longrun` prep. The agent shipped three scope shapes ordered by size rather than by how often each shape's work would fire after shipping. The agent treated whereami's `next_longrun_queue` recommended order as a stand-in for fresh analysis. Operator caught the miss and asked why the analysis step was skipped.
|
|
19
|
+
|
|
20
|
+
The hook caught nothing. The agent touched the surface marker AFTER writing the proposal, not before. The Stop hook fired at the next Stop event with a different latest assistant message — not the proposal where the column was missing.
|
|
21
|
+
|
|
22
|
+
This rule extends the discipline beyond hook coverage:
|
|
23
|
+
|
|
24
|
+
1. **Fresh analysis** — each scope candidate gets a per-shape compounding row authored at prep time, not copied from a hand-off doc
|
|
25
|
+
2. **Marker touch BEFORE the surface** — the marker is the agent's commit to writing the compounding-aware proposal next; touching after defeats the hook's check (cross-reference `.claude/rules/operator-facing-prose.md` Rule 3)
|
|
26
|
+
3. **Marker cleanup AFTER the surface (paired with V2 strict)** — the agent removes the marker once the prep proposal has landed AND the operator has confirmed scope. The marker's purpose is satisfied at that point. Without cleanup under V2 strict, every post-prep Stop event blocks. The hook scans every assistant message. Most post-prep turns (status updates, commit summaries, WU work) do not carry a shape proposal table. Cleanup is the bootstrap pair V1 advisory hid (exit 0 forgave the gap).
|
|
27
|
+
4. **R8 underlying pattern (per bet 30b risk ledger)** — the agent does not label a substrate artifact (risk ledger, decomposition, audit, ADR-consult, sources-read citation) without doing the underlying work that produces it. Naming the artifact ≠ producing it.
|
|
28
|
+
|
|
29
|
+
## When this rule fires
|
|
30
|
+
|
|
31
|
+
Every `/longrun` prep that proposes scope shapes:
|
|
32
|
+
|
|
33
|
+
- `/longrun prep` (operator types) — Step 1.5 compounding-sequence analysis per shape candidate
|
|
34
|
+
- `/sprint` next-work proposals when scope-shape options are surfaced (sister surface; same shape contract)
|
|
35
|
+
- Bet doc authoring — when the goal doc's `## Steps` section enumerates a per-shape table, the same axis applies
|
|
36
|
+
|
|
37
|
+
The rule does NOT fire on:
|
|
38
|
+
|
|
39
|
+
- Single-shape continuation prep where the operator has already confirmed scope (no shape PICK happening; per-shape compounding still applies per memory `feedback-compounding-sequence-mandatory-every-prep-surface`)
|
|
40
|
+
- WU-sequencing inside a chosen shape (covered by sister rule `.claude/rules/wu-sequencing-compounds.md` for Step 1.7 INTRA-shape)
|
|
41
|
+
|
|
42
|
+
## What the rule requires
|
|
43
|
+
|
|
44
|
+
Before the operator picks a scope shape:
|
|
45
|
+
|
|
46
|
+
1. **Touch the surface marker FIRST** — `mkdir -p state/markers/turn-prose-surface && touch state/markers/turn-prose-surface/longrun_prep_proposal.marker` BEFORE writing the proposal. The marker tells the Stop hook the next message is a prep proposal subject to the column-presence check.
|
|
47
|
+
2. **Per-option compounding row** — each option candidate carries 6 axes per `/longrun` SKILL Step 1.5 (new default per bassclef#1555). Per `#1193` cure, Step 1.5 prescribes the `### Compounding value per option` section explicitly. The 6 axes read as practical decision fields for Sam (Saturday evaluator) and Louis (context switcher) per plan doc `docs/next-session-plan-2026-09-09-compounding-axis-refactor.md` L36-45.
|
|
48
|
+
|
|
49
|
+
The 6-axis default (new; per bassclef#1555 PR-2):
|
|
50
|
+
|
|
51
|
+
| Axis | Source | Standard values |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| Deliverable | Plain sentence | What ships when this option lands |
|
|
54
|
+
| Problem | `/state-a-problem brief` | ≤500 chars; framework implicit |
|
|
55
|
+
| Value prop | `/value-prop tweet` | ≤280 chars; claim + sharpener |
|
|
56
|
+
| Turns | Grounded range | Cite past goal actuals per `.claude/rules/turn-estimate-grounding.md` |
|
|
57
|
+
| Risk | 🟢 / 🟡 / 🔴 | Low / medium / high |
|
|
58
|
+
| Shipping priority | Q1 / Q2 / Q3 / Q4 or blank | Blank prompts `Run /eisenhower to prioritize?` |
|
|
59
|
+
|
|
60
|
+
The 5-axis legacy (grace window through 2026-10-31 per ADR-031; hook accepts both shapes):
|
|
61
|
+
|
|
62
|
+
| Plain-English (preferred per ADR-040 D4) | Compressed (grace only) | Standard values |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| Where the payoff shows up | Compounding surface | per-PR / per-release / per-session / per-adopter / per-quarter |
|
|
65
|
+
| How often it fires | Compounding rate | continuous / frequent / per-session / per-adopter / per-quarter |
|
|
66
|
+
| What must be true first | Foundation prerequisites | none / specific goal / ticket / config flag |
|
|
67
|
+
| Does this teach a shape later work reuses | Inverse-dependency | yes (names the later work) / no |
|
|
68
|
+
| What breaks if we ship this half-done | Risk class | low / medium / high |
|
|
69
|
+
|
|
70
|
+
R8 catch preservation: Deliverable + Problem + Value prop force fresh per-option analysis. `/state-a-problem` and `/value-prop` are themselves cognitive tools that resist copy-paste. The distinct-values check per option (bassclef#564) applies to whichever shape the prep uses.
|
|
71
|
+
3. **Fresh analysis** — the column values come from the agent's reading of the shape itself, not from a hand-off doc's recommended order. If the agent reads a hand-off doc and the order matches its own analysis, the row matches by coincidence, not by copy. If the order DOESN'T match, the rule surfaces the conflict to the operator.
|
|
72
|
+
4. **Recommended shape rationale** cites the compounding sequence + adopter-benefit mechanism (per sister rule for Step 1.6 bassclef-upstream#1302) explicitly.
|
|
73
|
+
5. **Remove the surface marker AFTER scope confirmation** — once the prep proposal has landed AND the operator has confirmed scope (or the proposal is being abandoned), remove `state/markers/turn-prose-surface/longrun_prep_proposal.marker`. The marker's purpose is satisfied. Leaving it present makes every post-prep Stop event block under V2 strict default. Most subsequent turns (status updates, commit summaries, WU work) do not carry a shape proposal table.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
rm -f state/markers/turn-prose-surface/longrun_prep_proposal.marker
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This step is mandatory at the prep→execution handoff. Hook auto-cleanup deferred to a follow-on (substrate-evolution ticket) — the rule names the discipline; the agent removes the marker today.
|
|
80
|
+
|
|
81
|
+
## Postcondition contract (per Hoare)
|
|
82
|
+
|
|
83
|
+
Per bassclef-upstream#564 + luminary consultation (Ousterhout / Hoare / Feathers / Saltzer-Schroeder / Beck):
|
|
84
|
+
|
|
85
|
+
**Precondition:** the /longrun prep proposes 2+ candidate shapes, each with a distinct scope.
|
|
86
|
+
|
|
87
|
+
**Postcondition:** for every option O in the candidate set, for every axis A in the axis list of the shape the prep uses (6-axis default OR 5-axis legacy), the prep output contains a non-empty value V(O, A). The rendering satisfies the postcondition in one of two accepted shapes (per bassclef-upstream#1376):
|
|
88
|
+
|
|
89
|
+
- **Per-option shape (pre-existing default).** V(O, A) renders under O's section as bullets or table rows. Each option gets a full section. Not only in a header row shared across options.
|
|
90
|
+
- **Per-recommended-only shape (bassclef-upstream#1376 addition).** The prep opens with `**Recommend:** Option X`. V(recommended, A) renders under the recommended option's section as bullets. V(other, A) renders as scan-table row cells — one cell per axis per non-recommended option. Reader lands the recommended card fast; other options stay auditable from the scan-table row.
|
|
91
|
+
|
|
92
|
+
The 6-axis default is: Deliverable, Problem, Value prop, Turns, Risk, Shipping priority. The 5-axis legacy (grace window through 2026-10-31) is: Where the payoff shows up, How often it fires, What must be true first, Does this teach a shape later work reuses, What breaks if we ship this half-done. Hook accepts either shape per PR #1591.
|
|
93
|
+
|
|
94
|
+
The postcondition is stronger than the message-level check V2 ships. V2 verifies that the column names appear anywhere in the message. V3 (bassclef-upstream#564; ships with this rule amendment) verifies that each option section carries all axes of the chosen shape as distinct values. A single header row with axis names but no per-option values fails the postcondition. That is the R8 pattern this cure closes.
|
|
95
|
+
|
|
96
|
+
Per `#1193` cure — the hook regex accepts both `Shape a-c` and `Option a-e` for the per-shape check during the grace window through 2026-10-31 per `.claude/rules/we-dont-break-adopters.md`. After that date only `Option [a-z]` matches. SKILL `#830` renamed the label; the rule postcondition applies equally to both vocabularies.
|
|
97
|
+
|
|
98
|
+
**When shapes legitimately share an axis value** (e.g., all three shapes have `Risk class: low` because the work is small), the values still render per shape — same text under three sections. Rendering satisfies the postcondition. The check does not flag legitimate convergence.
|
|
99
|
+
|
|
100
|
+
## Anti-patterns
|
|
101
|
+
|
|
102
|
+
These shapes fail this rule.
|
|
103
|
+
|
|
104
|
+
**Agent ships scope shapes WITHOUT compounding-sequence columns.** Tonight's failure (caught by operator). Cure: include the columns; touch the marker BEFORE the proposal.
|
|
105
|
+
|
|
106
|
+
**Agent ships scope shapes with columns COPIED from whereami's `next_longrun_queue` or an audit's `next_pending`.** The columns are present but the fresh-analysis precondition is violated (R2 Hoare — mechanically unverifiable from output). Cure: re-analyze each shape independently; surface conflict if hand-off order disagrees with fresh order.
|
|
107
|
+
|
|
108
|
+
**Agent touches the surface marker AFTER writing the proposal.** Tonight's failure mode. The hook fires at the next Stop event with the marker-touch message as the latest assistant message — not the proposal. Cure: touch marker BEFORE proposal.
|
|
109
|
+
|
|
110
|
+
**Agent leaves the surface marker present after scope confirmation.** Under V2 strict default this blocks every subsequent Stop event because the hook scans every assistant message and most post-prep turns do not carry a shape proposal table. Cure: remove the marker at the prep→execution handoff per step 5 above.
|
|
111
|
+
|
|
112
|
+
**Agent labels a "risk ledger" / "decomposition" / "audit" / "sources-read" without doing the underlying work (R8 underlying pattern).** The label is the assertion; the work that produces it is the data the assertion claims. Tonight's risk-ledger catch by operator. Cure: cite the file path of the produced artifact in agent output; not just the label.
|
|
113
|
+
|
|
114
|
+
INSTEAD of any of these: do the work first; touch the marker; write the proposal with the compounding row populated from fresh analysis; cite produced artifacts by file path.
|
|
115
|
+
|
|
116
|
+
## Hand-off documents that do NOT satisfy
|
|
117
|
+
|
|
118
|
+
These all carry useful context but do not substitute for fresh analysis:
|
|
119
|
+
|
|
120
|
+
- `docs/whereami.md` `next_longrun_queue` — operator + prior session's pickup suggestion; not compounding-derived
|
|
121
|
+
- audit doc `next_pending` field — sequenced by audit author; may not match current compounding priorities
|
|
122
|
+
- prior chronicle's "next pickup" suggestion — operator-facing handoff narrative; not analysis
|
|
123
|
+
- prior goal doc's `next_bet` field — sequencing intent; not analysis
|
|
124
|
+
- memory entry `feedback_*` — prior discipline; relevant context but not a substitute for the per-shape row
|
|
125
|
+
|
|
126
|
+
Agent reads all of these for context. Agent then writes fresh compounding analysis per shape. The two activities are distinct.
|
|
127
|
+
|
|
128
|
+
## Override
|
|
129
|
+
|
|
130
|
+
`SKIP_COMPOUNDING_AXIS_CHECK=1 <command>` — bypass the hook for one call (already exists; logged via trace-helper). The rule's methodology layer has no override — fresh analysis is the precondition; without it, the proposal is incomplete.
|
|
131
|
+
|
|
132
|
+
For trivial single-shape continuation prep where the operator has already confirmed scope: the rule applies but cost is small (one row in the goal doc); no override needed.
|
|
133
|
+
|
|
134
|
+
## Composes with
|
|
135
|
+
|
|
136
|
+
- `.claude/rules/wu-sequencing-compounds.md` — sister at Step 1.7 INTRA-shape (per-step produces/consumes)
|
|
137
|
+
- `.claude/rules/operator-facing-prose.md` Rule 3 — marker touch BEFORE the named surface (this rule's mechanism precondition)
|
|
138
|
+
- `.claude/rules/blocked-items.md` — BLOCKED protocol the hook fires under V2 strict
|
|
139
|
+
- `.claude/rules/substrate-as-system.md` — every rule has a mechanism + every mechanism has a rule; this rule pairs the existing `longrun-prep-compounding-sequence-check.sh` mechanism with its rule body
|
|
140
|
+
- `.claude/hooks/longrun-prep-compounding-sequence-check.sh` — the mechanical layer
|
|
141
|
+
- `.claude/hooks/tests/longrun-prep-compounding-sequence-check.test.sh` — Tier 0 tests pinning the hook
|
|
142
|
+
- `.claude/skills/longrun/SKILL.md` Step 1.5 — the procedure surface the rule serves
|
|
143
|
+
- `@luminary jerome-saltzer-and-michael-schroeder` — complete mediation principle
|
|
144
|
+
- `@luminary tony-hoare` — pre/postcondition contracts (R2 fresh-analysis is precondition, mechanically unverifiable)
|
|
145
|
+
- `@luminary michael-feathers` — characterization tests pin REAL prep prose (R3 follow-on)
|
|
146
|
+
- `@luminary kent-beck` — Tier 0 strict TDD on the hook (R4 follow-on covers each umbrella ticket instance)
|
|
147
|
+
|
|
148
|
+
## Refs
|
|
149
|
+
|
|
150
|
+
- sunj-labs/bassclef-upstream#540 — umbrella ticket; this rule closes 1 of 5 sub-cures
|
|
151
|
+
- `docs/iteration-bets/2026-06-30b-substrate-anchoring-cure.md` — goal doc; WU-E ships this rule
|
|
152
|
+
- `docs/risk-ledgers/2026-06-30b-substrate-anchoring-cure.md` — 8 lens pre-mortem + R8 meta-catch
|
|
153
|
+
- bassclef-upstream#1299 (Step 1.5 INTER-shape compounding-sequence) — sister filing ticket if it exists
|
|
154
|
+
- bassclef-upstream#1302 (Step 1.6 INTER-shape adopter-benefit) — sister rule shape
|
|
155
|
+
- bassclef-upstream#1304 (turn-prose-surface marker discipline) — operator-facing-prose Rule 3
|
|
156
|
+
- memory `feedback-compounding-sequence-mandatory-every-prep-surface` — fires at every prep surface, including single-shape continuation
|
|
157
|
+
- memory `feedback-architect-review-audit-is-authoritative` — audits override `next_longrun_queue` for next-pickup
|
|
158
|
+
- ADR-035 substrate-as-system — the tenet this rule operationalizes at Step 1.5
|
|
159
|
+
- ADR-040 Decision 4 (planning-skill body template) — plain-English axis names shipped in PR #743 (goal 17a). Per #745, the sister rule + hook accept both shapes during the grace window through 2026-10-31.
|
|
160
|
+
|
|
161
|
+
## Deferred to follow-on
|
|
162
|
+
|
|
163
|
+
The bet 30b risk ledger named these add-to-scope dispositions for WU-E; they ship in a follow-on goal:
|
|
164
|
+
|
|
165
|
+
- **R3 (Feathers)** — extend Tier 0 tests with 3 characterization tests against REAL `/longrun` prep messages (tonight's + 2 from prior goal prep chronicles)
|
|
166
|
+
- **R4 (Beck)** — extend Tier 0 tests with cases for each instance under umbrella #540 (release recommendation skip, cleanup proposal skip, visual-compare skip, session-orientation skip)
|
|
167
|
+
- **R6 (Linus)** — cold-adopter harness check for session-reflection.d/05-active-bet.sh fragment presence (sister to WU-B)
|
|
168
|
+
- **R7 (Norman)** — extend `longrun-prep-compounding-sequence-check.sh` to ALSO scan for proof-of-read line from `/longrun` Step 0.4 (sister to WU-B cure 3)
|
|
169
|
+
|
|
170
|
+
The rule body is complete without these; the hook coverage extension is a separate ship vehicle.
|
|
171
|
+
|
|
172
|
+
## Per-WU coverage (bassclef-upstream#597 extension)
|
|
173
|
+
|
|
174
|
+
Per-WU compounding-sequence rendering carries the same 5 axes at the step layer, alongside the produces/consumes table.
|
|
175
|
+
|
|
176
|
+
When a `/longrun` prep proposal contains 2+ WU rows in the produces/consumes table (per Step 1.7), the proposal MUST also carry per-step compounding-sequence rendering — either a `## Compounding value per step` section OR per-step 5-axis bullets under each step.
|
|
177
|
+
|
|
178
|
+
Anti-pattern that fails: shape-level 5 axes rendered per Step 1.5, WU produces/consumes rendered per Step 1.7, per-step compounding-sequence skipped. This shape passed as convention for weeks. It got displaced when PR #567 tightened Step 1.5 to per-shape distinct values, which shifted agent attention to shape-level. INSTEAD of trusting convention: mechanize the per-step coverage so sibling discipline tightening does not crowd it out.
|
|
179
|
+
|
|
180
|
+
Correct shape: same 5 axes rendered per step with distinct values — plain-English names preferred per ADR-040 D4 (Where the payoff shows up / How often it fires / What must be true first / Does this teach a shape later work reuses / What breaks if we ship this half-done). Compressed forms accepted during the grace window through 2026-10-31.
|
|
181
|
+
|
|
182
|
+
Mechanical layer: `.claude/hooks/longrun-prep-compounding-sequence-check.sh` extended with per-step check (V1 strict — BLOCK on missing per-step axes when 2+ WU rows present). Toggle `COMPOUNDING_AXIS_TOGGLE=advisory` retains backward-compat.
|
|
183
|
+
|
|
184
|
+
Sister to Step 1.5 per-shape check (bassclef-upstream#564). Same discipline shape at a different layer.
|
|
185
|
+
|
|
186
|
+
## Retirement condition
|
|
187
|
+
|
|
188
|
+
This rule retires only if `/longrun` Step 1.5 stops requiring per-shape compounding analysis. Mechanical extensions (V2 BLOCK flip, additional column types, additional surfaces) may evolve; the discipline of fresh analysis per shape persists.
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: The single most leverage-y discipline in bassclef.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Context Engineering
|
|
7
|
+
|
|
8
|
+
The single most leverage-y discipline in bassclef.
|
|
9
|
+
|
|
10
|
+
When you write a skill, rule, hook, luminary, or agent definition, you
|
|
11
|
+
are writing instructions for a model that has specific epistemic
|
|
12
|
+
constraints. The model can only act on information physically present
|
|
13
|
+
in its current context window. Cross-session memory, knowledge of
|
|
14
|
+
past generations, imagined norms, and unstated operator intent are
|
|
15
|
+
NOT accessible.
|
|
16
|
+
|
|
17
|
+
Every instruction must be actionable from information the agent has
|
|
18
|
+
in this conversation. If the instruction depends on information the
|
|
19
|
+
model can't see, it is a no-op at best, a footgun at worst.
|
|
20
|
+
|
|
21
|
+
## Sources read
|
|
22
|
+
|
|
23
|
+
Four anchors. Read them; this rule is the bassclef-substrate
|
|
24
|
+
distillation, not a substitute.
|
|
25
|
+
|
|
26
|
+
- **Andrej Karpathy — context engineering** ([X post, June 2025](https://x.com/karpathy/status/1937902205765607626)). The CPU/RAM mental model: "LLM is the CPU, context window is RAM." Reframes prompts as filling a finite working-memory buffer.
|
|
27
|
+
- **Simon Willison — stateless tool framing** ([Mastodon thread](https://fedi.simonwillison.net/@simon/114757992443676572)). Endorsed and popularized "context engineering"; recurring theme in his blog: every conversation starts cold, training-cutoff dates are load-bearing, the model knows what it knows only via what's in the prompt.
|
|
28
|
+
- **Anthropic — Effective context engineering for AI agents** ([anthropic.com/engineering](https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents)). The model vendor's own articulation. Covers context window management, persistence patterns, tool design for agents. The **INSTEAD-block** specificity pattern is one application: every "DON'T do X" instruction needs a paired "INSTEAD do Y" the model can verify in its current context.
|
|
29
|
+
|
|
30
|
+
For the broader 30-year canon of influences across distributed systems, methodology, strategy canvases, JTBD, use-case design, TDD, and rapid prototyping that bassclef embeds, see [`docs/philosophy.md`](../../docs/philosophy.md).
|
|
31
|
+
|
|
32
|
+
## What the model has access to
|
|
33
|
+
|
|
34
|
+
- Current conversation history (this session only)
|
|
35
|
+
- Files in working directory (only when explicitly Read)
|
|
36
|
+
- Tool results (when tools fire and return)
|
|
37
|
+
- System prompt + loaded rules (whatever the harness injects, including the contents of `.claude/rules/` via `additionalDirectories`)
|
|
38
|
+
- Memory directory (only if memory file is read this conversation)
|
|
39
|
+
|
|
40
|
+
## What the model does NOT have access to
|
|
41
|
+
|
|
42
|
+
- Previous conversations (unless that conversation's chronicle is loaded)
|
|
43
|
+
- Prior generations of the same prompt (unless surfaced as text in current context)
|
|
44
|
+
- What other agents are doing in parallel sessions (without state-spine reads)
|
|
45
|
+
- Imagined "norms" or "averages" — the model can't compare against itself
|
|
46
|
+
- Operator intent beyond what's been typed in this conversation
|
|
47
|
+
- Prior commits / git log (without an explicit `git log` tool call)
|
|
48
|
+
- Time / date awareness (the harness must surface today's date)
|
|
49
|
+
|
|
50
|
+
## The INSTEAD-block pattern
|
|
51
|
+
|
|
52
|
+
The rule's mechanical output, derived from Anthropic's context-engineering
|
|
53
|
+
treatment. Every "NEVER" / "DON'T" / "AVOID" instruction is paired with an
|
|
54
|
+
actionable substitute the model can verify in its current context.
|
|
55
|
+
|
|
56
|
+
**Anti-pattern (unactionable):**
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
NEVER converge on common choices across generations.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
→ Claude can't see other generations. Instruction has no in-context
|
|
63
|
+
referent. No-op.
|
|
64
|
+
|
|
65
|
+
**INSTEAD-block (actionable):**
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
INSTEAD: For each generation, deliberately commit to one bold
|
|
69
|
+
direction from this list: [bold/saturated, moody/restrained,
|
|
70
|
+
high-contrast/minimal, lo-fi/zine, handcrafted]. Pick a different
|
|
71
|
+
direction than the obvious default for the input.
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
→ Model has the list in current context. Can pick. Actionable.
|
|
75
|
+
|
|
76
|
+
**Format for bassclef instructions:**
|
|
77
|
+
|
|
78
|
+
When writing a skill/rule/luminary, every "NEVER" / "DON'T" / "AVOID"
|
|
79
|
+
gets paired:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
NEVER do X.
|
|
83
|
+
INSTEAD: <specific in-context action that produces the desired outcome>.
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
If you can't write the INSTEAD substitute, the original NEVER was
|
|
87
|
+
unactionable — rewrite the whole instruction.
|
|
88
|
+
|
|
89
|
+
## How bassclef operationalizes context engineering
|
|
90
|
+
|
|
91
|
+
This is what bassclef IS. Every load-bearing component exists
|
|
92
|
+
because the model is stateless. Map:
|
|
93
|
+
|
|
94
|
+
| Stateless problem | Bassclef's answer |
|
|
95
|
+
|---|---|
|
|
96
|
+
| Agent forgets prior conversations | Chronicles (narrative log; written at session-end, read at session-start) |
|
|
97
|
+
| Agent forgets project state | whereami (point-in-time snapshot; MUST-read at session start) |
|
|
98
|
+
| Agent forgets goal scope | Iteration-bets (scope contract; MUST-read at iteration start) |
|
|
99
|
+
| Parallel agents share no memory | State spine v0 (`lib/state.sh` accessors over JSON-on-git; flock-protected) |
|
|
100
|
+
| Agent can't see prior generations | Champion-challenger pattern (alternative variants surfaced in same context) |
|
|
101
|
+
| Gate evidence rots between sessions | Markers (`state/markers/` files; agent reads them, doesn't remember firing) |
|
|
102
|
+
| Operator preferences drift | Memory system (`memory/` files; MEMORY.md index loaded each conversation) |
|
|
103
|
+
| Recent decisions get lost | "Sources read" block (every artifact MUST cite what was Read) |
|
|
104
|
+
| Compaction kills context | Survival kit (explicit re-read paths after compaction per `context-management.md`) |
|
|
105
|
+
| Composer drifts from components | Section-heading contracts (bassclef#367 — pinned exact strings) |
|
|
106
|
+
| Builder drifts from intent | Iteration-bet-brief-completeness rule (every artifact in handoff brief) |
|
|
107
|
+
|
|
108
|
+
Without statelessness as the constraint, none of these would exist.
|
|
109
|
+
That's not a feature — it's the substrate's purpose.
|
|
110
|
+
|
|
111
|
+
## How to apply this rule
|
|
112
|
+
|
|
113
|
+
### When writing a skill
|
|
114
|
+
|
|
115
|
+
Ask, for every instruction:
|
|
116
|
+
1. Does this reference information the model has in current context?
|
|
117
|
+
2. If it references state that needs to be loaded — am I telling the model HOW to load it (Read X, run Y)?
|
|
118
|
+
3. If it has a "DON'T" — is there an INSTEAD-block?
|
|
119
|
+
4. Does it assume the model remembers something? If yes, am I providing the memory file path or instructing a Read?
|
|
120
|
+
|
|
121
|
+
### When writing a rule
|
|
122
|
+
|
|
123
|
+
Same checks plus:
|
|
124
|
+
- Will this rule be loaded automatically (`additionalDirectories`)? If yes, the model has the rule body in context every conversation.
|
|
125
|
+
- Or is it referenced by file path? If yes, I must explicitly tell the agent to Read it.
|
|
126
|
+
|
|
127
|
+
### When writing a luminary
|
|
128
|
+
|
|
129
|
+
The luminary file becomes context if invoked via `/luminary <slug>` or referenced in a skill that Reads it. Every "channel this luminary's discipline" instruction must produce concrete in-context actions, not aspirational adjectives.
|
|
130
|
+
|
|
131
|
+
### When writing a hook
|
|
132
|
+
|
|
133
|
+
Hooks fire at specific events and inject text into the agent's
|
|
134
|
+
session output. The injected text IS context the model now has.
|
|
135
|
+
Don't tell the model "remember this for next time."
|
|
136
|
+
INSTEAD: write to a state file the next session reads.
|
|
137
|
+
|
|
138
|
+
## What this rule does NOT cover
|
|
139
|
+
|
|
140
|
+
- Cognitive-science research on "Theory of Mind in LLMs" (Kosinski, Bos et al.). That research tests whether LLMs *model human minds* — opposite direction from this rule. Cite this rule as "context engineering" (industry standard term) when discussing externally.
|
|
141
|
+
- Tool design for agents (Anthropic's doc covers this in depth)
|
|
142
|
+
- Memory systems beyond what bassclef implements
|
|
143
|
+
|
|
144
|
+
## Common violations to grep for
|
|
145
|
+
|
|
146
|
+
- `"don't repeat"` / `"don't drift"` / `"avoid converging"` — without INSTEAD substitutes
|
|
147
|
+
- `"remember to"` / `"keep in mind"` — model has no persistence; you mean "Read X first" or "check Y"
|
|
148
|
+
- `"based on prior sessions"` — the model can't see them; you must instruct chronicle Reads
|
|
149
|
+
- `"the way you usually do"` — there is no usually; pin the specific pattern
|
|
150
|
+
- `"use your judgment"` — what context does the model judge against? Specify or remove
|
|
151
|
+
|
|
152
|
+
If `git grep -niE 'don.?t|never|avoid|remember to|keep in mind' .claude/skills .claude/rules .claude/luminaries` surfaces matches, audit each for INSTEAD-block discipline.
|
|
153
|
+
|
|
154
|
+
## Relationship to other rules
|
|
155
|
+
|
|
156
|
+
- `artifact-ingestion.md` — concrete instance of context engineering (Read before producing)
|
|
157
|
+
- `iteration-bet-brief-completeness.md` — concrete instance (every artifact in brief, because receiver has no other state)
|
|
158
|
+
- `mobile-ephemeral-session.md` — context engineering under the most extreme stateless conditions
|
|
159
|
+
- `context-management.md` — operational guidance for context-window budgeting (companion at the runtime layer)
|
|
160
|
+
- `bassclef#357` (autonomous-run flash + kiss) — output-side discipline; this rule is the input-side discipline
|
|
161
|
+
- `bassclef#367` (section-heading standardization) — concrete instance of "if the parser greps for X, X must be in the producer's output")
|
|
162
|
+
- `bassclef#382` (substrate-clarity-gate hook) — mechanical enforcement of skill-description clarity + rule/luminary INSTEAD-block discipline; closes the methodology+mechanism gap (rules prescribe; hook fires at PreToolUse Edit|Write)
|
|
163
|
+
|
|
164
|
+
## Why this rule is the highest-leverage rule we have
|
|
165
|
+
|
|
166
|
+
Most rules govern WHAT the agent should do (gates, checks, ceremonies). This rule governs HOW WE WRITE every other artifact. Meta-rule.
|
|
167
|
+
|
|
168
|
+
Every future skill, rule, luminary, hook, and agent definition we add
|
|
169
|
+
or modify is improved by this lens. Every existing artifact we audit
|
|
170
|
+
against this lens is a candidate for cleanup.
|
|
171
|
+
|
|
172
|
+
That's the leverage: one rule, applied retroactively + prospectively
|
|
173
|
+
to the entire substrate.
|
|
174
|
+
|
|
175
|
+
## Audit cadence
|
|
176
|
+
|
|
177
|
+
- **Every new artifact** must pass the INSTEAD-block check before merge (PR-time gate, methodology-level)
|
|
178
|
+
- **Quarterly substrate audit** — sample 10 artifacts at random, score against this rule, file findings
|
|
179
|
+
- **Every `/promote`** — the promoting session checks the candidate against this rule before filing the issue
|
|
180
|
+
|
|
181
|
+
## What this rule will NOT fix
|
|
182
|
+
|
|
183
|
+
- Genuinely smart-but-vague creative direction ("make it beautiful") — context engineering catches *unactionable* instructions; whether the actionable substitute is *good* is a separate quality question handled by luminary-driven design + visual-review
|
|
184
|
+
- Hook bugs (mechanical) — context engineering is methodology; hooks are mechanical enforcement
|
|
185
|
+
- Operator-side ambiguity — if the operator's request is unclear, no amount of model-context discipline fixes it; that's a clarification gate
|
|
186
|
+
|
|
187
|
+
## Override
|
|
188
|
+
|
|
189
|
+
There is no override. Context engineering is the model's actual
|
|
190
|
+
constraint, not a discipline we choose to follow. Violating it
|
|
191
|
+
produces drift (silent or noisy), not "exceptional cases."
|
|
192
|
+
|
|
193
|
+
If a rule or skill seems to require a context-engineering violation,
|
|
194
|
+
the rule or skill is wrong. Rewrite.
|
|
195
|
+
|
|
196
|
+
## Closes
|
|
197
|
+
|
|
198
|
+
Filed in iteration-bet 2026-05-01-context-engineering-foundations
|
|
199
|
+
(WU-1). First load-bearing application: WU-2 (Anthropic-frontend-
|
|
200
|
+
design luminary written with INSTEAD discipline) + WU-5 (skill-
|
|
201
|
+
description-clarity rule embeds the same pattern at the
|
|
202
|
+
description-surface).
|