@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.
Files changed (275) hide show
  1. package/dist/cli.cjs +65 -0
  2. package/dist/cli.js +65 -0
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/lite/.claude/agents/architect.md +70 -0
  7. package/dist/lite/.claude/agents/builder.md +114 -0
  8. package/dist/lite/.claude/agents/designer.md +156 -0
  9. package/dist/lite/.claude/agents/reviewer.md +88 -0
  10. package/dist/lite/.claude/hooks/bassclef-sync.sh +85 -27
  11. package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
  12. package/dist/lite/.claude/hooks/longrun-prep-render-check.sh +236 -0
  13. package/dist/lite/.claude/hooks/persona-name-scrub-check.sh +105 -0
  14. package/dist/lite/.claude/hooks/skill-step-list-check.sh +171 -0
  15. package/dist/lite/.claude/luminaries/alan-cooper.md +170 -0
  16. package/dist/lite/.claude/luminaries/alistair-cockburn.md +140 -0
  17. package/dist/lite/.claude/luminaries/amazon-pr-faq.md +34 -0
  18. package/dist/lite/.claude/luminaries/andreas-zeller.md +74 -0
  19. package/dist/lite/.claude/luminaries/ash-maurya.md +121 -0
  20. package/dist/lite/.claude/luminaries/bill-buxton.md +210 -0
  21. package/dist/lite/.claude/luminaries/charles-sanders-peirce.md +150 -0
  22. package/dist/lite/.claude/luminaries/david-ogilvy.md +192 -0
  23. package/dist/lite/.claude/luminaries/don-norman.md +173 -0
  24. package/dist/lite/.claude/luminaries/edward-tufte.md +179 -0
  25. package/dist/lite/.claude/luminaries/eric-evans.md +160 -0
  26. package/dist/lite/.claude/luminaries/frederick-brooks.md +50 -0
  27. package/dist/lite/.claude/luminaries/gang-of-four.md +157 -0
  28. package/dist/lite/.claude/luminaries/glenford-myers.md +230 -0
  29. package/dist/lite/.claude/luminaries/hunt-thomas.md +115 -0
  30. package/dist/lite/.claude/luminaries/hyrum-wright.md +94 -0
  31. package/dist/lite/.claude/luminaries/jason-fried-dhh.md +46 -0
  32. package/dist/lite/.claude/luminaries/jesse-james-garrett.md +154 -0
  33. package/dist/lite/.claude/luminaries/john-ousterhout.md +94 -0
  34. package/dist/lite/.claude/luminaries/karl-popper.md +132 -0
  35. package/dist/lite/.claude/luminaries/kent-beck.md +168 -0
  36. package/dist/lite/.claude/luminaries/linus-torvalds.md +218 -0
  37. package/dist/lite/.claude/luminaries/martin-fowler.md +164 -0
  38. package/dist/lite/.claude/luminaries/michael-feathers.md +125 -0
  39. package/dist/lite/.claude/luminaries/michael-nygard.md +118 -0
  40. package/dist/lite/.claude/luminaries/robert-c-martin.md +164 -0
  41. package/dist/lite/.claude/luminaries/saltzer-schroeder.md +194 -0
  42. package/dist/lite/.claude/luminaries/sophia-prater.md +193 -0
  43. package/dist/lite/.claude/luminaries/stephen-toulmin.md +131 -0
  44. package/dist/lite/.claude/luminaries/tony-hoare.md +170 -0
  45. package/dist/lite/.claude/luminaries/vaughn-vernon.md +50 -0
  46. package/dist/lite/.claude/luminaries/w-edwards-deming.md +158 -0
  47. package/dist/lite/.claude/rules/accessor-library-discipline.md +110 -0
  48. package/dist/lite/.claude/rules/adr-discipline.md +96 -0
  49. package/dist/lite/.claude/rules/api-conventions.md +115 -0
  50. package/dist/lite/.claude/rules/artifact-ingestion.md +137 -0
  51. package/dist/lite/.claude/rules/assert-only-after-verify.md +111 -0
  52. package/dist/lite/.claude/rules/blocked-items.md +139 -0
  53. package/dist/lite/.claude/rules/bootstrap-pair-discipline.md +106 -0
  54. package/dist/lite/.claude/rules/branching.md +28 -0
  55. package/dist/lite/.claude/rules/cold-adopter-harness-discipline.md +93 -0
  56. package/dist/lite/.claude/rules/commit-conventions.md +22 -0
  57. package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +173 -0
  58. package/dist/lite/.claude/rules/compounding-sequence-fresh-analysis.md +173 -0
  59. package/dist/lite/.claude/rules/context-engineering.md +155 -0
  60. package/dist/lite/.claude/rules/context-management.md +85 -0
  61. package/dist/lite/.claude/rules/defensive-bash.md +52 -0
  62. package/dist/lite/.claude/rules/deferred-actions.md +233 -0
  63. package/dist/lite/.claude/rules/destructive-operations.md +69 -0
  64. package/dist/lite/.claude/rules/diagnosis.md +38 -0
  65. package/dist/lite/.claude/rules/github-issue-flash-tweet.md +114 -0
  66. package/dist/lite/.claude/rules/guardrails.md +73 -0
  67. package/dist/lite/.claude/rules/hook-wire-on-author.md +77 -0
  68. package/dist/lite/.claude/rules/identifier-leak-prevention.md +73 -0
  69. package/dist/lite/.claude/rules/iteration-bet-brief-completeness.md +43 -0
  70. package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +79 -0
  71. package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +77 -0
  72. package/dist/lite/.claude/rules/loop-discipline.md +71 -0
  73. package/dist/lite/.claude/rules/manual-prod-approval.md +100 -0
  74. package/dist/lite/.claude/rules/marker-enrichment-discipline.md +72 -0
  75. package/dist/lite/.claude/rules/mobile-ephemeral-session.md +109 -0
  76. package/dist/lite/.claude/rules/new-dependency-check.md +44 -0
  77. package/dist/lite/.claude/rules/oo-ad-entry-point.md +95 -0
  78. package/dist/lite/.claude/rules/operator-facing-prose.md +177 -0
  79. package/dist/lite/.claude/rules/option-label-discipline.md +82 -0
  80. package/dist/lite/.claude/rules/pattern-annotation.md +83 -0
  81. package/dist/lite/.claude/rules/persona-name-leak-scrub.md +90 -0
  82. package/dist/lite/.claude/rules/plain-english-discipline.md +132 -0
  83. package/dist/lite/.claude/rules/plan-enumeration-needs-value-props.md +177 -0
  84. package/dist/lite/.claude/rules/pr-body-shape.md +195 -0
  85. package/dist/lite/.claude/rules/pr-strategy.md +142 -0
  86. package/dist/lite/.claude/rules/pr-title-shape.md +90 -0
  87. package/dist/lite/.claude/rules/prototype-workflow.md +53 -0
  88. package/dist/lite/.claude/rules/reserved-skill-names.md +103 -0
  89. package/dist/lite/.claude/rules/schema-management.md +42 -0
  90. package/dist/lite/.claude/rules/sdlc-gates.md +149 -0
  91. package/dist/lite/.claude/rules/security.md +37 -0
  92. package/dist/lite/.claude/rules/session-artifacts.md +236 -0
  93. package/dist/lite/.claude/rules/skill-composition-declarations.md +105 -0
  94. package/dist/lite/.claude/rules/skill-description-clarity.md +196 -0
  95. package/dist/lite/.claude/rules/skill-procedure-step-list.md +119 -0
  96. package/dist/lite/.claude/rules/sprint-prep-preset-picker.md +76 -0
  97. package/dist/lite/.claude/rules/state-schema-validation.md +156 -0
  98. package/dist/lite/.claude/rules/stuck-signal-diagnostic.md +111 -0
  99. package/dist/lite/.claude/rules/substrate-config-schema.md +85 -0
  100. package/dist/lite/.claude/rules/test-list-discipline.md +129 -0
  101. package/dist/lite/.claude/rules/test-sufficiency.md +186 -0
  102. package/dist/lite/.claude/rules/testing-tier-config.md +125 -0
  103. package/dist/lite/.claude/rules/testing.md +38 -0
  104. package/dist/lite/.claude/rules/turn-estimate-grounding.md +82 -0
  105. package/dist/lite/.claude/rules/visual-hierarchy.md +427 -0
  106. package/dist/lite/.claude/rules/we-dont-break-adopters.md +103 -0
  107. package/dist/lite/.claude/rules/whereami-load-bearing.md +184 -0
  108. package/dist/lite/.claude/rules/writing-craft-discipline.md +72 -0
  109. package/dist/lite/.claude/rules/wu-sequencing-compounds.md +119 -0
  110. package/dist/lite/.claude/skills/build/SKILL.md +640 -0
  111. package/dist/lite/.claude/skills/chronicle/SKILL.md +55 -0
  112. package/dist/lite/.claude/skills/clean-artifacts/SKILL.md +249 -0
  113. package/dist/lite/.claude/skills/decompose/SKILL.md +280 -0
  114. package/dist/lite/.claude/skills/diagnose/SKILL.md +297 -0
  115. package/dist/lite/.claude/skills/feynman/SKILL.md +90 -0
  116. package/dist/lite/.claude/skills/howdoi/SKILL.md +105 -0
  117. package/dist/lite/.claude/skills/ia-model/SKILL.md +108 -0
  118. package/dist/lite/.claude/skills/interaction-design/SKILL.md +112 -0
  119. package/dist/lite/.claude/skills/interpret-input/SKILL.md +180 -0
  120. package/dist/lite/.claude/skills/journal/SKILL.md +209 -0
  121. package/dist/lite/.claude/skills/kiss/SKILL.md +449 -0
  122. package/dist/lite/.claude/skills/launch/SKILL.md +915 -0
  123. package/dist/lite/.claude/skills/lean-canvas/SKILL.md +332 -0
  124. package/dist/lite/.claude/skills/longrun/SKILL.md +512 -0
  125. package/dist/lite/.claude/skills/luminary/SKILL.md +481 -0
  126. package/dist/lite/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
  127. package/dist/lite/.claude/skills/onboard-repo/SKILL.md +1640 -0
  128. package/dist/lite/.claude/skills/pattern-review/SKILL.md +99 -0
  129. package/dist/lite/.claude/skills/personas/SKILL.md +207 -0
  130. package/dist/lite/.claude/skills/promote/SKILL.md +283 -0
  131. package/dist/lite/.claude/skills/requirement/SKILL.md +98 -0
  132. package/dist/lite/.claude/skills/retro/SKILL.md +117 -0
  133. package/dist/lite/.claude/skills/riff/SKILL.md +114 -0
  134. package/dist/lite/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
  135. package/dist/lite/.claude/skills/session-end/SKILL.md +309 -0
  136. package/dist/lite/.claude/skills/session-log/SKILL.md +299 -0
  137. package/dist/lite/.claude/skills/skills/SKILL.md +228 -0
  138. package/dist/lite/.claude/skills/spec/SKILL.md +105 -0
  139. package/dist/lite/.claude/skills/sprint/SKILL.md +418 -0
  140. package/dist/lite/.claude/skills/stage/SKILL.md +384 -0
  141. package/dist/lite/.claude/skills/state-a-problem/SKILL.md +185 -0
  142. package/dist/lite/.claude/skills/temperance/SKILL.md +108 -0
  143. package/dist/lite/.claude/skills/use-case/SKILL.md +417 -0
  144. package/dist/lite/.claude/skills/user-stories/SKILL.md +268 -0
  145. package/dist/lite/.claude/skills/value-prop/SKILL.md +251 -0
  146. package/dist/lite/.claude/skills/verify/SKILL.md +160 -0
  147. package/dist/lite/.claude/skills/visual-review/SKILL.md +503 -0
  148. package/dist/lite/.claude/skills/whats-the-plan/SKILL.md +202 -0
  149. package/dist/lite/.claude/skills/whereami/SKILL.md +307 -0
  150. package/dist/lite/AGENTS.md +79 -0
  151. package/dist/lite/CLAUDE-lite.md +85 -0
  152. package/dist/lite/CODE_OF_CONDUCT.md +28 -0
  153. package/dist/lite/CONTRIBUTING.md +177 -0
  154. package/dist/lite/README.md +173 -0
  155. package/dist/lite/SECURITY.md +19 -0
  156. package/dist/lite/architecture/decisions/ADR-029-release-pipeline.md +79 -0
  157. package/dist/lite/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
  158. package/dist/lite/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
  159. package/dist/lite/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
  160. package/dist/lite/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
  161. package/dist/lite/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
  162. package/dist/lite/lib/clean-artifacts-sweep.sh +112 -0
  163. package/dist/lite/lib/code-comment-discipline.sh +144 -0
  164. package/dist/lite/lib/composer-preflight.sh +459 -0
  165. package/dist/lite/lib/deferred-actions.sh +146 -0
  166. package/dist/lite/lib/hook-header-parser.sh +61 -0
  167. package/dist/lite/lib/hook-heartbeat.sh +152 -0
  168. package/dist/lite/lib/hook-inject.sh +255 -0
  169. package/dist/lite/lib/hook-installer.sh +195 -0
  170. package/dist/lite/lib/luminary-pick.sh +96 -0
  171. package/dist/lite/lib/output-discipline.sh +143 -0
  172. package/dist/lite/lib/prose-scan-boundary.sh +171 -0
  173. package/dist/lite/lib/rewrite-check.sh +214 -0
  174. package/dist/lite/lib/session-rescue.sh +151 -0
  175. package/dist/lite/lib/source-graph-walker.sh +277 -0
  176. package/dist/lite/lib/state.sh +1372 -0
  177. package/dist/lite/lib/telemetry.sh +205 -0
  178. package/dist/lite/lib/tier-check.sh +187 -0
  179. package/dist/lite/lib/tier-dependency-audit.sh +1088 -0
  180. package/dist/lite/presence/install/bassclef-hook-connect.sh +178 -0
  181. package/dist/lite/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
  182. package/dist/lite/presence/install/bassclef-sync.template.sh +2278 -0
  183. package/dist/lite/presence/install/schedule-auto-save.cron.sh +88 -0
  184. package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +122 -0
  185. package/dist/lite/scripts/aggregate-telemetry.sh +217 -0
  186. package/dist/lite/scripts/analyze-tier-dependencies.sh +239 -0
  187. package/dist/lite/scripts/generate-lite-manifest.sh +505 -0
  188. package/dist/lite/scripts/generate-tier-manifest.sh +28 -0
  189. package/dist/lite/scripts/intent-drift-check.sh +456 -0
  190. package/dist/lite/scripts/lite-manifest-drift-check.sh +146 -0
  191. package/dist/lite/scripts/render-lite-manifest-doc.sh +150 -0
  192. package/dist/lite/standards/adr-template.md +86 -0
  193. package/dist/lite/standards/api-conventions/nextjs.md +84 -0
  194. package/dist/lite/standards/artifact-composition.md +209 -0
  195. package/dist/lite/standards/bash-hook-safety.md +246 -0
  196. package/dist/lite/standards/bassclef-configs-schema.md +232 -0
  197. package/dist/lite/standards/bassclef-evolution.md +143 -0
  198. package/dist/lite/standards/bassclef-internal-jargon.md +244 -0
  199. package/dist/lite/standards/bassclef-managed-sentinel.md +96 -0
  200. package/dist/lite/standards/bassclef-source-config.md +228 -0
  201. package/dist/lite/standards/branch-stacking.md +408 -0
  202. package/dist/lite/standards/code-safety-principles.md +176 -0
  203. package/dist/lite/standards/composer-prerequisites.md +155 -0
  204. package/dist/lite/standards/deferred-actions-schema.md +204 -0
  205. package/dist/lite/standards/dependency-discipline/cargo.md +39 -0
  206. package/dist/lite/standards/dependency-discipline/gem.md +43 -0
  207. package/dist/lite/standards/dependency-discipline/go-mod.md +41 -0
  208. package/dist/lite/standards/dependency-discipline/npm.md +42 -0
  209. package/dist/lite/standards/dependency-discipline/pip.md +42 -0
  210. package/dist/lite/standards/deployment-topology/ec2-tailscale.md +225 -0
  211. package/dist/lite/standards/deployment-topology.md +69 -0
  212. package/dist/lite/standards/docs-sync-allowlist.md +76 -0
  213. package/dist/lite/standards/domain-and-dns.md +145 -0
  214. package/dist/lite/standards/frontend-stack.md +67 -0
  215. package/dist/lite/standards/frontmatter-schema.md +154 -0
  216. package/dist/lite/standards/graceful-exit.md +227 -0
  217. package/dist/lite/standards/hook-idempotency.md +102 -0
  218. package/dist/lite/standards/hook-injection-discipline.md +202 -0
  219. package/dist/lite/standards/hook-install-class.md +215 -0
  220. package/dist/lite/standards/input-handler-interface.md +152 -0
  221. package/dist/lite/standards/lite-manifest-schema-changes.md +180 -0
  222. package/dist/lite/standards/lite-manifest.json +2797 -0
  223. package/dist/lite/standards/luminary-matching.md +105 -0
  224. package/dist/lite/standards/luminary-problem-patterns.md +481 -0
  225. package/dist/lite/standards/migration-discipline/active-record.md +50 -0
  226. package/dist/lite/standards/migration-discipline/alembic.md +43 -0
  227. package/dist/lite/standards/migration-discipline/gorm.md +50 -0
  228. package/dist/lite/standards/migration-discipline/prisma.md +53 -0
  229. package/dist/lite/standards/migration-discipline/sqlalchemy.md +51 -0
  230. package/dist/lite/standards/mobile-ephemeral-session.md +167 -0
  231. package/dist/lite/standards/model-routing-discipline.md +160 -0
  232. package/dist/lite/standards/ogilvy-writing-rules.md +225 -0
  233. package/dist/lite/standards/opener-discipline.md +96 -0
  234. package/dist/lite/standards/operator-facing-prose-discipline.md +201 -0
  235. package/dist/lite/standards/persona-schema.md +229 -0
  236. package/dist/lite/standards/pluggable-luminaries.md +323 -0
  237. package/dist/lite/standards/pr-body-discipline.md +115 -0
  238. package/dist/lite/standards/preview-state-schema.md +189 -0
  239. package/dist/lite/standards/project-directory-layout.md +276 -0
  240. package/dist/lite/standards/release-tagging.md +137 -0
  241. package/dist/lite/standards/reserved-skill-names.md +120 -0
  242. package/dist/lite/standards/scannable-multi-option-output.md +265 -0
  243. package/dist/lite/standards/sdlc-compliance.md +286 -0
  244. package/dist/lite/standards/sdlc-gates/typescript.md +57 -0
  245. package/dist/lite/standards/secrets-lifecycle.md +210 -0
  246. package/dist/lite/standards/security-scanner-adapter.md +145 -0
  247. package/dist/lite/standards/session-board.md +256 -0
  248. package/dist/lite/standards/skill-output-discipline.md +121 -0
  249. package/dist/lite/standards/state-spine-contract.md +255 -0
  250. package/dist/lite/standards/state-spine.md +511 -0
  251. package/dist/lite/standards/steering-hints/kiss-words.md +11 -0
  252. package/dist/lite/standards/substrate-config-schema.md +267 -0
  253. package/dist/lite/standards/tech-stack-config.md +109 -0
  254. package/dist/lite/standards/tier-dependency-analysis.md +167 -0
  255. package/dist/lite/standards/tier-runtime-deps/lite.md +57 -0
  256. package/dist/lite/standards/tier-tag-schema.md +155 -0
  257. package/dist/lite/standards/two-layer-config.md +99 -0
  258. package/dist/lite/standards/use-case-format.md +292 -0
  259. package/dist/lite/standards/user-story-invest.md +268 -0
  260. package/dist/lite/standards/velocity-and-appetite.md +229 -0
  261. package/dist/lite/standards/voice-input-pattern.md +119 -0
  262. package/dist/lite/standards/whereami-schema.md +301 -0
  263. package/dist/lite/standards/worktree-management.md +211 -0
  264. package/dist/lite/standards/writing-guide.md +213 -0
  265. package/dist/lite/templates/chronicle-template.md +75 -0
  266. package/dist/lite/templates/deferred-action-template.md +45 -0
  267. package/dist/lite/templates/memory-proposal-template.md +77 -0
  268. package/dist/lite/templates/persona-template.md +200 -0
  269. package/dist/lite/templates/pr-faq.md +45 -0
  270. package/dist/lite/templates/secret-rotation-template.md +162 -0
  271. package/dist/lite/templates/spec-template.md +131 -0
  272. package/dist/lite/templates/use-case-template.md +194 -0
  273. package/dist/lite/templates/user-story-template.md +107 -0
  274. package/dist/lite/templates/whereami-template.md +101 -0
  275. package/package.json +1 -1
@@ -0,0 +1,184 @@
1
+ ---
2
+ tier: lite
3
+ description: docs/whereami.md is the authoritative project-state snapshot in every bassclef-substrate repo.
4
+ ---
5
+
6
+ # Whereami Load-Bearing
7
+
8
+ `docs/whereami.md` is the authoritative project-state snapshot in
9
+ every bassclef-substrate repo. This rule establishes its load-bearing
10
+ obligations: session-start read, session-end write, and protocol when
11
+ the artifact is missing or stale.
12
+
13
+ ## Protocol
14
+
15
+ ### Session-start read (MUST)
16
+
17
+ Every session's orientation pass reads `docs/whereami.md` BEFORE
18
+ consulting iteration-bets or chronicles for project-state questions.
19
+ Downstream skills (`/sprint`, `/substrate-check`) use whereami as
20
+ primary source, not fallback.
21
+
22
+ If the artifact is missing or stale (per freshness rules below), the
23
+ `bassclef-sync.sh` session-start hook fires BLOCKED (per
24
+ `blocked-items.md`). The session does not proceed with substantive
25
+ work until resolved or explicitly deferred.
26
+
27
+ ### Session-end write (MUST)
28
+
29
+ Every `/session-end` execution updates `docs/whereami.md`:
30
+
31
+ - Bump `last_updated` to current UTC timestamp
32
+ - Set `session:` field to the chronicle filename just written
33
+ - Update any field that materially changed during the session:
34
+ - `phase:` if project phase transitioned
35
+ - `iteration_bet:` if bet opened or closed
36
+ - `iteration_phase:` if WS advanced
37
+ - Subsystem row if subsystem moved
38
+ - Gate progress checkboxes if any toggled
39
+
40
+ Same tier as chronicle — non-negotiable session artifact.
41
+
42
+ ### Freshness rules
43
+
44
+ Hook checks two signals: `last_updated` field age **AND** commits-since-
45
+ last-whereami-update (computed via `git log -1 --format=%H -- docs/whereami.md`
46
+ + `git rev-list --count <commit>..HEAD`). Both signals together close the
47
+ "idle consumer" false-positive loop where calendar age alone fired BLOCKED
48
+ on repos that hadn't done any work since the last update (bassclef#514).
49
+
50
+ | Age | Commits since whereami | Signal | Session behavior |
51
+ |-----|------------------------|--------|-----------------|
52
+ | <3 days | any | Green | Proceed normally |
53
+ | 3–7 days | any | Warning | Warning surfaced; session proceeds |
54
+ | ≥7 days | 0 (idle) | **INFO** | Friendly note that repo's idle; session proceeds |
55
+ | ≥7 days | >0 (work happened) | BLOCKED | Session halts on substantive work until refreshed |
56
+ | Missing file | n/a | BLOCKED | Session halts; create from template |
57
+
58
+ The idle-as-INFO downgrade matters because bassclef-substrate consumers
59
+ get session-start hook output even when they're not actively iterating.
60
+ A consumer paused for two weeks should get a "you're idle" note, not a
61
+ gate that interrupts the next time someone opens the repo.
62
+
63
+ Operator may override with explicit "skip whereami this session" per
64
+ `blocked-items.md` deferral rules. Silence is not deferral. INFO does
65
+ not require deferral (it's not a gate).
66
+
67
+ ### On session-start BLOCKED
68
+
69
+ When the hook surfaces a whereami-stale BLOCKED block, the agent:
70
+
71
+ 1. Echo the BLOCKED block verbatim to the operator (same pattern as
72
+ `bassclef-hook-drift-blocker.md`)
73
+ 2. Offer two paths:
74
+ - **Refresh now**: run `/session-end`-style whereami update step
75
+ at session-start as the first action
76
+ - **Defer**: operator explicitly says "skip whereami"
77
+ 3. Do NOT start other substantive work until one of the paths is
78
+ taken
79
+
80
+ ### On missing file
81
+
82
+ Fresh consumer repo scenario. `bassclef-sync.sh` surfaces BLOCKED:
83
+ "docs/whereami.md missing; create from templates/whereami-template.md"
84
+
85
+ Agent proposes to copy the template and fill minimal fields
86
+ (phase, iteration — or "none — new repo"). Operator approves or
87
+ overrides.
88
+
89
+ ## What counts as a material change (session-end trigger)
90
+
91
+ Anything that changed the answer to "where are we?":
92
+
93
+ - Phase transition (Inception → Elaboration, etc.)
94
+ - Iteration opened, closed, or re-shaped
95
+ - WS within active goal advanced (WS-1 → WS-2)
96
+ - Subsystem row's phase or "last iteration" date changed
97
+ - Gate progress checkbox toggled
98
+ - Active agents changed (sequential→multi-agent or vice versa)
99
+
100
+ What does NOT trigger: just timestamp refresh without any field change
101
+ is still a valid update (keeps freshness meter green). The obligation
102
+ is to bump `last_updated` every session; field changes are additive.
103
+
104
+ ## Who reads whereami (and relies on it being fresh)
105
+
106
+ - `/sprint` — primary source for orientation (step 1, not step 4
107
+ fallback)
108
+ - `bassclef-sync.sh` — freshness check only
109
+ - `/substrate-check` — presence + schema validation
110
+ - Operator — ad-hoc project-state eyeballing
111
+ - Chronicle writer — phase context for retrospective
112
+
113
+ ## Live vs archive split (per bassclef-upstream#1080)
114
+
115
+ `docs/whereami.md` is the LIVE file — carries frontmatter + recap blocks from the last 7 days. Older recap blocks move to `docs/whereami-archive/YYYY-MM.md` — one file per calendar month, appended chronologically.
116
+
117
+ The split exists because `docs/whereami.md` grew past the `Read` tool's 256KB ceiling on 2026-08-04. Session-start Step 0.4 mandatory read broke. Rotation restores the Read path; archive preserves history.
118
+
119
+ **Contract:**
120
+
121
+ - Live keeps the last 7 days of `operator_recap_*` blocks (default; override via `scripts/rotate-whereami.py --days N`)
122
+ - Archive holds older blocks grouped by month
123
+ - Live carries an `archive_dir:` field in frontmatter naming the archive location
124
+ - Session-start freshness signal reads live only — archive is read-only historical
125
+ - Rotation runs on SessionStart when live file exceeds 250KB via `.claude/hooks/session-reflection.d/36-whereami-size-check.sh`. Fires with `--days 3` (tighter than the 7-day default) because dense session weeks fill 7 days past the Read tool 256KB ceiling per bassclef-upstream#1284. Operator can run manually anytime with `--days N`; the script is idempotent (re-runs do not duplicate).
126
+
127
+ **What reads from archive:**
128
+
129
+ - Operator when they need >7 day historical context
130
+ - `/journal` when writing session narratives that span the rotation boundary
131
+ - Explicit follow-up queries (e.g., "what happened in 2026-07?")
132
+
133
+ **What reads from live only:**
134
+
135
+ - Session-start freshness signals (per this rule)
136
+ - `/sprint` orientation (primary source)
137
+ - `/substrate-check` (presence + schema validation)
138
+ - Chronicle writer at session-end (updates live only)
139
+
140
+ ## What whereami is NOT
141
+
142
+ Artifacts adjacent to whereami have distinct roles. Don't conflate:
143
+
144
+ - **Iteration bet** (scope contract) — whereami references it by path
145
+ - **Chronicle** (retrospective narrative) — whereami is current-state
146
+ snapshot
147
+ - **substrate.config.md** (external resources) — different concern
148
+ (where is X vs. where are we)
149
+ - **Risk register** — separate artifact; whereami points to it
150
+
151
+ ## Override paths
152
+
153
+ - `SKIP_WHEREAMI=1 <command>` — per-command override (logged to trace)
154
+ - Operator statement: "skip whereami this session" — verbatim deferral
155
+ per `blocked-items.md`
156
+ - `substrate.config.md: whereami_freshness_days: N` — per-repo
157
+ threshold override (if N=0, freshness check disabled, but presence
158
+ still required)
159
+
160
+ ## Relationship to other rules
161
+
162
+ - `blocked-items.md` — BLOCKED protocol; whereami staleness fires it
163
+ - `session-artifacts.md` — chronicle + journal-entry obligations; whereami
164
+ joins this tier
165
+ - `bassclef-hook-drift-blocker.md` — same hook-fired BLOCKED pattern;
166
+ whereami BLOCKED mirrors its shape
167
+ - `sdlc-gates.md` — session-start orientation is where whereami fires
168
+ in the gate ordering
169
+ - `artifact-ingestion.md` — whereami is one of the "prior artifacts" a
170
+ session-start orientation MUST read before producing
171
+
172
+ ## Enforcement
173
+
174
+ - Hook: `bassclef-sync.sh` section emits BLOCKED on stale/missing
175
+ (added `BASSCLEF_SYNC_VERSION` bump in WS-3 of bet 2026-04-16c)
176
+ - Skill: `/session-end` procedure includes whereami-update as MUST
177
+ tier
178
+ - Skill: `/sprint` procedure reads whereami as step 1 primary source
179
+ - Skill: `/substrate-check` validates presence + schema conformance
180
+ - Template: `templates/whereami-template.md` provides start
181
+ shape; `/autonomous start` creates from template
182
+
183
+ The rule stands regardless of hook availability. The hook is the
184
+ mechanical backstop; the rule is the reasoning.
@@ -0,0 +1,72 @@
1
+ ---
2
+ tier: lite
3
+ description: Plain check. Before I ship any operator-facing prose in this turn, I run the six Ogilvy tests against my draft. If any test fails, I rewrite before I ship.
4
+ ---
5
+
6
+ # Writing-craft discipline
7
+
8
+ **Plain check.** Before I ship any operator-facing prose in this turn, I run the six Ogilvy tests against my draft. If any test fails, I rewrite before I ship.
9
+
10
+ ---
11
+
12
+ This rule loads every session. It sits alongside `.claude/rules/plain-english-discipline.md` (grade + vocabulary) and adds writing-craft tests grounded in Ogilvy's 1982 "How to Write" memo plus Roman and Raphaelson's *Writing That Works* (1981). Full reference: `standards/ogilvy-writing-rules.md`. Luminary anchor: `.claude/luminaries/david-ogilvy.md`.
13
+
14
+ ## The six first-person composition tests
15
+
16
+ Before I write each sentence or paragraph in operator-facing prose, I ask:
17
+
18
+ **1. Natural voice.** Would a real person say this to a respected peer? If it sounds like corporate throat-clearing ("Please be advised that...", "It has come to my attention..."), I rewrite in natural voice.
19
+
20
+ **2. Short units.** Is this sentence past 25 words? If yes, I split it. Is this paragraph past 6 sentences? If yes, I split it. Is there a shorter word for what I mean? If yes, I use the shorter word (utilize → use; commence → start; endeavor → try).
21
+
22
+ **3. Read-aloud.** When I read this passage in my head, does it stumble? Tongue-twisters, long lines with no comma rest, unintentional rhymes, repeated words — any of those means I rewrite until it flows.
23
+
24
+ **4. Completeness.** What is the ONE thing the reader needs to take from this? Is that thing actually written down, in plain language, somewhere the reader will see it? If the point is implied but not stated, I state it.
25
+
26
+ **5. Honesty.** Am I saying what I mean or hiding behind softening language? Weasel words ("arguably", "somewhat", "perhaps"), euphemisms ("right-sizing", "reached out"), passive voice hiding the actor ("mistakes were made") — any of these means I rewrite straight.
27
+
28
+ **6. Facts with context.** For each number, fact, or data point in my draft: does the reader know why it matters? If I have "Revenue was 4.2M" with no interpretation, either I add the interpretation ("up 30 percent year over year") or I drop the fact.
29
+
30
+ ## When this rule fires
31
+
32
+ Every operator-facing surface:
33
+
34
+ - Turn prose in agent responses
35
+ - PR body Summary and Test plan sections
36
+ - Ticket body Problem sections
37
+ - Chronicle body sections
38
+ - Journal entries
39
+ - Handoff notes
40
+ - Deferred-action entries
41
+
42
+ Skips (Ogilvy's rules do not apply, or apply differently):
43
+
44
+ - Code blocks
45
+ - File paths and function names
46
+ - Structured schema output (JSON, YAML)
47
+ - Backticked terms and API references
48
+ - Test-list blocks in test files (structured audit surface)
49
+ - Frontmatter fields (structured metadata)
50
+
51
+ ## Composes with
52
+
53
+ - `.claude/rules/plain-english-discipline.md` — grade level + vocabulary substitution table. Composes: this rule covers craft; that rule covers grade + jargon list.
54
+ - `.claude/rules/operator-facing-prose.md` — gloss + `/kiss` meta-discipline at every operator-facing surface
55
+ - `.claude/rules/context-engineering.md` — INSTEAD-block discipline foundational to bassclef's rule writing
56
+ - `standards/ogilvy-writing-rules.md` — full reference with violation patterns and fixes
57
+ - `standards/bassclef-internal-jargon.md` — extended wordlist Rule 3 references
58
+ - `.claude/luminaries/david-ogilvy.md` — luminary anchor
59
+ - `.claude/skills/ogilvy-writing-audit/SKILL.md` — operator-invocable audit (produces severity-tagged violations)
60
+ - `.claude/skills/kiss/SKILL.md` — /kiss words composes with the audit (audit diagnoses, kiss fixes)
61
+
62
+ ## Anti-patterns
63
+
64
+ **Draft-and-ship without running the six tests.** The rule loads but the agent skips the checks at composition time. Failure mode: prose ships jargon-heavy, long-sentenced, or facts-without-context. Fix: read each sentence against the six tests before I ship the turn.
65
+
66
+ **Rewriting only on hook flag.** The turn-prose-kiss-check hook fires post-Stop; running the six tests only when the hook flags means catching after the fact. Fix: run at composition time, per the Plain check at the top of this rule.
67
+
68
+ **Selective application.** Applying the tests to some paragraphs but not others (e.g., only the opener). Failure mode: middle paragraphs drift. Fix: every sentence in every operator-facing paragraph gets the six-test check.
69
+
70
+ ## Override
71
+
72
+ `SKIP_WRITING_CRAFT=1 <command>` — logged via trace-helper. Use only for quoted external content that must ship verbatim (e.g., quoting Ogilvy's memo in the reference standard).
@@ -0,0 +1,119 @@
1
+ ---
2
+ tier: lite
3
+ description: WUs within a chosen goal shape ship as compounding builds.
4
+ ---
5
+
6
+ # WU Sequencing — Each WU Compounds With the Next
7
+
8
+ WUs within a chosen goal shape ship as compounding builds. Each WU declares what it produces that the next WU consumes. The trap: independent step enumeration where each step does its own thing. No WU's output feeds another. The value that compounded at shape-pick time disappears once the shape is picked.
9
+
10
+ The rule mechanizes the discipline filed at bassclef#1348. The operator caught the gap on 2026-06-20h prep. My first WU proposal sequenced fixes (recursive walk + triage + workflow stand-up) as parallel-safe atomic items. It should have been a chain where each output flowed into the next.
11
+
12
+ Sister rules cover the INTER-shape layer. bassclef#1299 covers Step 1.5 (the compounding column). bassclef#1302 covers Step 1.6 (the adopter-benefit column). Those two help the operator pick between shapes. This rule disciplines step enumeration WITHIN a chosen shape.
13
+
14
+ ## When this rule fires
15
+
16
+ - `/longrun prep` Step 1.7 (added in this rule's PR) — when step enumeration goes into the prep output proposal, the table includes a produces/consumes column
17
+ - Bet doc authoring — when the `## Steps` section is written, the table uses the produces/consumes shape
18
+ - `/sprint` next-work proposals — same shape when proposing a multi-step sequence (sister surface; same wordlist)
19
+ - `/build` skill construction-time sequencing — out of scope for V1; separate ticket if surfaced
20
+
21
+ ## Format contract
22
+
23
+ Every goal doc's `## Steps` section uses one of two table shapes.
24
+
25
+ ### Shape A — three-column (canonical)
26
+
27
+ ```markdown
28
+ | WU | Produces | Consumes (from prior WU) |
29
+ |---|---|---|
30
+ | **0** prep | goal doc + stack manifest + temperance marker | — (session-start) |
31
+ | **1** <ticket> | <what ships> | <what it reads from prior WU> |
32
+ | **2** <ticket> | <what ships> | <what it reads from WU-1> |
33
+ | ... |
34
+ ```
35
+
36
+ ### Shape B — six-column (extended per bassclef-upstream#688)
37
+
38
+ ```markdown
39
+ | WU | Problem + value prop | Produces | Consumes (from prior WU) | How this step builds on the prior | Risk |
40
+ |---|---|---|---|---|---|
41
+ | **0** prep | <problem sentence> + <value prop sentence> | goal doc + markers | — (session-start) | — (baseline) | low |
42
+ | **1** <ticket> | <problem sentence> + <value prop sentence> | <what ships> | <what reads from prior WU> | <how it builds> | <low/med/high> |
43
+ ```
44
+
45
+ Shape B mirrors the `/longrun` prep proposal rendering. Prep proposals MUST render six-column so the operator sees per-step sequencing at pick-time. Bet doc `## Steps` sections use EITHER shape; six-column is preferred when the goal doc reuses the prep proposal table verbatim.
46
+
47
+ Column semantics for Shape B:
48
+
49
+ - **Problem + value prop** — one cell combining `/state-a-problem brief` output AND `/value-prop flash` output. Do NOT split the two outputs into separate cells. Operator preference confirmed 2026-07-09 (bassclef-upstream#688).
50
+ - **How this step builds on the prior** — one line explaining the sequencing. "Baseline" for WU-0. Parallel-safe WUs state "parallel-safe with WU-N".
51
+ - **Risk** — low / medium / high, matching the step's Step 1.5 risk-class value.
52
+
53
+ Format rules (both shapes):
54
+
55
+ - Shape A header exactly: `| WU | Produces | Consumes (from prior WU) |` — greppable by `bet-doc-gate.sh` V2 hook (3-column path)
56
+ - Shape B header exactly: `| WU | Problem + value prop | Produces | Consumes (from prior WU) | How this step builds on the prior | Risk |` — greppable by `bet-doc-gate.sh` V2 hook (6-column path)
57
+ - Each WU's Produces is a concrete artifact (file, decision, label set, marker, output)
58
+ - Each WU's Consumes names what the prior WU produced — by reference, not duplicated description
59
+ - WU-0 prep consumes "session-start" (no prior WU)
60
+ - Final WU (closeout) produces the chronicle + whereami flip; consumes the union of all prior WU outputs
61
+ - When a WU is genuinely parallel-safe (no consumer), state "parallel-safe (no consumer)" or "parallel-safe with WU-N" in the Consumes cell — explicit declaration, not silent
62
+
63
+ ## What this rule requires
64
+
65
+ The agent runs this check before committing the goal doc OR before posting the `/longrun prep` confirmation surface:
66
+
67
+ 1. Each WU declared in the proposed shape has a Produces cell
68
+ 2. Each WU after WU-0 has a Consumes cell that names what the prior WU produced
69
+ 3. When a WU's Produces doesn't feed any later WU, the rule fires WARN. Either the step is misplaced (should be its own goal) OR the sequencing is correct but the next-WU consumption is implicit and needs stating.
70
+ 4. The goal doc body cites this rule's slug in the `references:` block when sequencing is non-obvious
71
+
72
+ ## Anti-patterns
73
+
74
+ The following shapes fail this rule:
75
+
76
+ - **Bare WU list** — `WU-1: fix X. WU-2: fix Y. WU-3: triage Z.` Independent items; no produces/consumes contract
77
+ - **Sequence-implied-by-ordering** — WUs listed in order but the goal doc body doesn't say WHY this order. Order alone is not compounding
78
+ - **All WUs are independent** — every step is parallel-safe. That signal calls for a question: is this one goal or several smaller bets?
79
+
80
+ The agent picks one path when the rule fires WARN:
81
+
82
+ - Restructures the step sequence so each step's output is input to the next (preferred)
83
+ - Splits the goal — if WUs are genuinely parallel-safe with no compounding, they belong in separate goals
84
+ - Explicitly justifies why a parallel-safe WU rides with sequenced WUs (e.g., shared review window, operator preference)
85
+
86
+ ## Mechanical layer
87
+
88
+ V1 ships this rule + the SKILL.md Step 1.7 procedure update.
89
+
90
+ **V2 (shipped 2026-06-23 per bassclef-upstream#21):** `.claude/hooks/bet-doc-gate.sh` PreToolUse Edit|Write|MultiEdit on `docs/iteration-bets/*.md` performs the substantive Consumes-cell check. Composed with sister #300 thread-walk check in the same hook file. Behaviors:
91
+
92
+ - **PASS** when Consumes cell contains a concrete artifact reference (backtick-quoted ref, slash-prefixed path, `.sh|.md|.json|.yml` extension) OR explicit literal `"parallel-safe (no consumer)"` OR `"session-start"` (prep) OR `"union of"` (closeout).
93
+ - **WARN** (exit 0 with stderr) when Consumes cell starts with `WU-N` or `WU-N's` followed by vague prose without any concrete artifact reference. Advisory in V2; flips to BLOCK in V3 if observable drift persists.
94
+ - **Silent** on non-matching paths, non-Edit tool calls, or goal docs without a steps table.
95
+
96
+ Overrides (logged via trace-helper):
97
+ - `SKIP_PRODUCES_CONSUMES_CHECK=1` — bypass P/C only
98
+ - `SKIP_BET_DOC_GATE=1` — bypass both P/C and thread-walk
99
+
100
+ Per `feedback_hooks_beat_methodology_for_substrate_quality` memory: V2 hook ships ALONGSIDE the methodology — both required.
101
+
102
+ ## Override path
103
+
104
+ `SKIP_WU_SEQUENCING_COMPOUNDS=1 <command>` (when V2 hook ships) — logged via trace-helper. Use rarely:
105
+
106
+ - Single-WU bets — no sequencing applies; the column is trivially empty
107
+ - Genuinely parallel atomic WUs that share a review window (declare in goal doc body)
108
+ - Migration scripts authoring many goal docs at once
109
+
110
+ INSTEAD of overriding for routine work: write the produces/consumes cells. The discipline costs seconds at write-time and compounds across every future thread walking tonight's chronicle for reference.
111
+
112
+ ## Composes with
113
+
114
+ - `.claude/rules/arc-level-orientation-before-leaf.md` — sister at orientation surface (sister bassclef#1347 fixes one-level walk)
115
+ - `.claude/rules/plan-enumeration-needs-value-props.md` — sister at choice-presentation surface
116
+ - `.claude/rules/blocked-items.md` — BLOCK protocol the V2 hook fires
117
+ - `.claude/skills/longrun/SKILL.md` Step 1.7 — primary surface this rule extends
118
+ - `.claude/skills/sprint/SKILL.md` — sister surface (next-work proposals)
119
+ - standards/branch-stacking.md — stack manifest already declares dependencies between WUs; this rule extends to the goal doc body