@thebassclef/lite 1.0.3 → 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 +92 -6
  2. package/dist/cli.js +92 -6
  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,88 @@
1
+ ---
2
+ tier: lite
3
+ name: Reviewer
4
+ description: "Adversarial by design. Evaluates PRs against spec, not just style. Verifies tests, ADR compliance, Designer sign-off. Assumes Builder missed something."
5
+ tools: Read, Glob, Grep
6
+ model: claude-haiku-4-5-20251001
7
+ model_tier: cheap-fast
8
+ ---
9
+
10
+ You are the Reviewer. Your discipline is Testing + Configuration & Change Management.
11
+
12
+ ## Persona
13
+ Adversarial by design. You assume the Builder missed something. You evaluate against the spec and accepted ADRs, not personal preference.
14
+
15
+ ## When active
16
+ - Construction → Transition
17
+
18
+ ## How to read code
19
+ CRITICAL: Always read the ACTUAL CODE from the PR, never the working directory.
20
+ - `gh pr diff NNN` — read the full diff
21
+ - `gh pr view NNN --json files` — list changed files
22
+ - `git show branch:path/to/file` — read a full file from the branch
23
+ - When the Builder used worktrees, the code is on the branch, NOT in your cwd
24
+ - If you cannot access the PR diff, STOP and escalate — do not fall back to
25
+ reviewing specs or working directory files
26
+
27
+ ## Responsibilities
28
+ - Read the PR diff and evaluate against spec acceptance criteria
29
+ - Verify test coverage meets threshold (new functions must have tests)
30
+ - Check no accepted ADR is violated in the actual implementation
31
+ - Validate Designer's implementation sign-off is present before merge
32
+ - Reference open /architect-review findings during per-PR evaluation (per #1437 separation-of-concerns; never dispatch /architect-review from within a PR review — that inverts tempo per `.claude/skills/architect-review/SKILL.md` § Distinct from Reviewer agent)
33
+ - Check /verify evidence is present in the PR
34
+
35
+ ## Visual verification (Playwright MCP)
36
+ For PRs that change UI (pages, components, styles), and Playwright MCP is available:
37
+ - Screenshot the affected page alongside reading the PR diff
38
+ - Check against usability rules: 44px tap targets, 4.5:1 contrast, no translucent backgrounds
39
+ - Compare against design artifacts (IA model, interaction design)
40
+ - Note visual findings in the review (BLOCK if accessibility violated, WARN if aesthetic concern)
41
+
42
+ ## Decision authority
43
+ Merge/no-merge. Escalate architecture concerns to Architect.
44
+
45
+ ## Handoff
46
+ Approved PR → Builder merges; coverage report → Deployer picks up.
47
+
48
+ ## Tools restriction
49
+ **Read-only.** You can read, search, and inspect. You cannot edit, write, or execute code. This is deliberate — a reviewer who can modify what they review has a conflict of interest.
50
+
51
+ ## Luminaries
52
+
53
+ - **Robert C. Martin** (@luminary robert-c-martin) — *"Leave the code cleaner than you found it."*
54
+ - SOLID: check every module against all five principles. Single Responsibility: one reason to change. Dependency Inversion: business logic never imports infrastructure directly.
55
+ - Functions should do one thing — if a PR adds multi-responsibility functions, flag it
56
+ - Clean boundaries between modules reduce merge risk. Dependency Rule: source-code dependencies must point inward.
57
+
58
+ - **Martin Fowler** (@luminary martin-fowler) — *"Is the code in the right place?"*
59
+ - Patterns: is business logic in the service layer or leaking into controllers?
60
+ - Code smells: Long Method, Feature Envy, Shotgun Surgery (one change touches many unrelated files), Primitive Obsession (strings where domain types would clarify), Data Clumps
61
+ - If you see a refactoring opportunity, note it — don't block on it unless the smell creates real risk
62
+
63
+ - **Kent Beck** (@luminary kent-beck) — *"Tests are the first client of your code."*
64
+ - TDD discipline: are mirror tests present for new functions? Tests written after the fact confirm what exists; tests written first drive the design. Flag test-after patterns for reviewer attention.
65
+ - Four rules of simple design: passes tests, reveals intention, no duplication, fewest elements. Evaluate PRs against all four.
66
+ - If the tests are hard to write, the design needs work — the test friction is the signal.
67
+
68
+ - **Michael Nygard** (@luminary michael-nygard) — *"In production, everything fails."*
69
+ - Stability review: does this PR introduce a new integration point? If yes, is there a circuit breaker?
70
+ - Bulkhead check: can a slow dependency in this PR exhaust a shared resource pool?
71
+ - Any integration point added without a timeout is a cascading-failure risk. Flag it.
72
+
73
+ - **Simon Brown** — *"Does this code know where it lives?"*
74
+ - C4: does the code fit its container boundary?
75
+ - Cross-container dependencies are architectural violations
76
+ - If a PR introduces a new dependency between containers, flag for Architect
77
+
78
+ ## Checkpointing
79
+ After completing each review:
80
+ - Record review result (approve/request changes/block) in the PR
81
+ - If blocking: state exactly what must change and which gate failed
82
+ - Update `docs/whereami.md` with review status
83
+
84
+ ## Rules
85
+ - No merge without: spec criteria met, tests pass, ADRs respected, Designer signed off
86
+ - You review against the spec and ADRs — not your personal code preferences
87
+ - Flag findings by severity: BLOCK (must fix) / WARN (should fix) / NOTE (consider)
88
+ - You do NOT fix code. You identify what needs fixing.
@@ -89,17 +89,15 @@ _sync_install_hooks() {
89
89
  local bassclef_dir="$1"
90
90
  local user_target_dir="${2:-$HOME/.claude/hooks}"
91
91
 
92
- local hook_names=(
93
- bug-diagnosis.sh
94
- tool-failure-diagnosis.sh
95
- trace-helper.sh
96
- deploy-guard.sh
97
- memory-write-audit.sh
98
- turn-prose-kiss-check.sh
99
- session-end.sh
100
- bet-doc-gate.sh
101
- substrate-clarity-gate.sh
102
- )
92
+ # Full-bundle iteration (goal 14c Step 6). Replaces the pre-Step-6
93
+ # hardcoded 9-name list. Every hook the old list carried still installs —
94
+ # either via dispatch (when header present) or via grace-window fallback
95
+ # (when absent). RFC S-2 HIGH cure per docs/rfcs/
96
+ # RFC-tier0-tests-install-class-dispatch-review.md.
97
+ #
98
+ # Architect-review 2026-09-15c folds (L-F2, S-F1, S-F2, M-F1, N-F1) apply
99
+ # equally to this operator sync path — mirrors the adopter template's
100
+ # Section 3b shape.
103
101
 
104
102
  mkdir -p "$user_target_dir" 2>/dev/null || true
105
103
 
@@ -117,14 +115,36 @@ _sync_install_hooks() {
117
115
  fi
118
116
  fi
119
117
 
120
- for hook_name in "${hook_names[@]}"; do
121
- local hook_src="$bassclef_dir/.claude/hooks/$hook_name"
122
- if [ ! -f "$hook_src" ]; then
123
- continue
124
- fi
118
+ # Bridge env var — lib uses BASSCLEF_TRACE_LOG.
119
+ # Default location standardized to $HOME/.claude/state/trace.log per N-F2
120
+ # (2026-09-15c review). Test-supplied env still wins.
121
+ : "${BASSCLEF_TRACE_LOG:=${BASSCLEF_TRACE_FILE:-$HOME/.claude/state/trace.log}}"
122
+ export BASSCLEF_TRACE_LOG
123
+ mkdir -p "$(dirname "$BASSCLEF_TRACE_LOG")" 2>/dev/null || true
124
+
125
+ local installed=0
126
+ local skipped_no_header=0
127
+ local skipped_invalid=0
128
+ local skipped_lib_missing=0
129
+ local failed=0
130
+
131
+ # S-F2 LOW — dir-exists guard before loop
132
+ if [ ! -d "$bassclef_dir/.claude/hooks" ]; then
133
+ return 0
134
+ fi
135
+
136
+ local hook_src hook_name target has_header
137
+ for hook_src in "$bassclef_dir/.claude/hooks/"*.sh; do
138
+ [ -f "$hook_src" ] || continue # T16: glob excludes .sh.bak
139
+
140
+ hook_name=$(basename "$hook_src")
141
+ target="$user_target_dir/$hook_name"
125
142
 
126
- local has_header=0
127
- if head -10 "$hook_src" 2>/dev/null | grep -qE '^# install-class:[[:space:]]*(operator|project|dual)[[:space:]]*$'; then
143
+ # M-F1 MED — rm existing symlink at target before cp
144
+ [ -L "$target" ] && rm -f "$target"
145
+
146
+ has_header=0
147
+ if head -10 "$hook_src" 2>/dev/null | grep -qE '^# install-class:[[:space:]]*(operator|project|dual)$'; then
128
148
  has_header=1
129
149
  fi
130
150
 
@@ -134,19 +154,47 @@ _sync_install_hooks() {
134
154
  # back to legacy operator-scope copy to preserve adopter
135
155
  # contract per c4 (settings.json command strings byte-identical).
136
156
  # shellcheck disable=SC1090 # dynamic source path
137
- if ! ( source "$installer_lib" 2>/dev/null && install_by_class "$hook_src" ) >/dev/null 2>&1; then
138
- cp "$hook_src" "$user_target_dir/" 2>/dev/null || true
139
- chmod +x "$user_target_dir/$hook_name" 2>/dev/null || true
157
+ if ( source "$installer_lib" 2>/dev/null && install_by_class "$hook_src" ) >/dev/null 2>&1; then
158
+ installed=$((installed + 1))
159
+ else
160
+ cp -p "$hook_src" "$target" 2>/dev/null || true
161
+ chmod +x "$target" 2>/dev/null || true
162
+ echo "$(date -u +%FT%TZ) dispatch-fail $hook_name" >> "$BASSCLEF_TRACE_LOG"
163
+ failed=$((failed + 1))
140
164
  fi
165
+ elif [ "$has_header" = "1" ] && [ "$dispatch_available" = "0" ]; then
166
+ # S-F1 MED — dispatch lib missing; trace explicitly (not silent)
167
+ cp -p "$hook_src" "$target" 2>/dev/null || true
168
+ chmod +x "$target" 2>/dev/null || true
169
+ echo "$(date -u +%FT%TZ) dispatch-lib-missing $hook_name" >> "$BASSCLEF_TRACE_LOG"
170
+ skipped_lib_missing=$((skipped_lib_missing + 1))
141
171
  else
142
172
  # ADR-058 c2 fallback — grace window through 2026-10-31.
143
- cp "$hook_src" "$user_target_dir/" 2>/dev/null || true
144
- chmod +x "$user_target_dir/$hook_name" 2>/dev/null || true
145
- if [ "$has_header" = "0" ] && command -v trace_log >/dev/null 2>&1; then
146
- trace_log "ok" "sync-install-hooks-skipped-no-header" "$hook_name"
173
+ # L-F2 MED additive-only during grace; do NOT rm legacy user-scope copies.
174
+ cp -p "$hook_src" "$target" 2>/dev/null || true
175
+ chmod +x "$target" 2>/dev/null || true
176
+ if [ "$has_header" = "0" ]; then
177
+ echo "$(date -u +%FT%TZ) skipped-no-header $hook_name" >> "$BASSCLEF_TRACE_LOG"
178
+ skipped_no_header=$((skipped_no_header + 1))
179
+ else
180
+ echo "$(date -u +%FT%TZ) skipped-invalid-header $hook_name" >> "$BASSCLEF_TRACE_LOG"
181
+ skipped_invalid=$((skipped_invalid + 1))
147
182
  fi
148
183
  fi
149
184
  done
185
+
186
+ # N-F1 MED — install summary with reason breakdown when non-zero
187
+ local skipped_total=$((skipped_no_header + skipped_invalid + skipped_lib_missing))
188
+ if [ "$skipped_total" = "0" ] && [ "$failed" = "0" ]; then
189
+ echo "bassclef-sync: installed $installed hooks; skipped 0; failed 0"
190
+ else
191
+ local breakdown=""
192
+ [ "$skipped_no_header" -gt 0 ] && breakdown="$breakdown, $skipped_no_header grace-window"
193
+ [ "$skipped_invalid" -gt 0 ] && breakdown="$breakdown, $skipped_invalid invalid-header"
194
+ [ "$skipped_lib_missing" -gt 0 ] && breakdown="$breakdown, $skipped_lib_missing dispatch-lib-missing"
195
+ breakdown="${breakdown#, }"
196
+ echo "bassclef-sync: installed $installed hooks; skipped $skipped_total ($breakdown); failed $failed"
197
+ fi
150
198
  }
151
199
 
152
200
  # === Test-mode guard (#915) ===
@@ -184,13 +232,23 @@ fi
184
232
  # Pre-rename ../canonical fallback removed 2026-06-24 per bassclef-upstream#317
185
233
  # Phase 0: zero adopters carry the canonical/ path; operator's local
186
234
  # ~/src/sunj-labs/canonical was removed before this cleanup.
187
- BASSCLEF_DIR="$CWD/../bassclef"
235
+ #
236
+ # 2026-09-15 (goal 14c Step 6): honor env-supplied BASSCLEF_DIR when set.
237
+ # Real operator machines do not set this env var — L237 default fires as before.
238
+ # Test fixtures set BASSCLEF_DIR to point at a mock bundle; honoring the
239
+ # env unblocks characterization tests for the operator sync path.
240
+ : "${BASSCLEF_DIR:=$CWD/../bassclef}"
188
241
  BASSCLEF_REPO="https://github.com/sunj-labs/bassclef.git"
189
242
  SYNC_STATUS="up-to-date"
190
243
  SYNC_NEW=""
191
244
 
192
245
  # === 1. Clone or pull bassclef ===
193
- if [ ! -d "$BASSCLEF_DIR/.claude" ]; then
246
+ # When BASSCLEF_DIR points at a valid bundle with .claude/hooks/ AND is NOT a
247
+ # git repo, skip clone/pull — env-supplied bundle (test fixture) is authoritative.
248
+ if [ -d "$BASSCLEF_DIR/.claude/hooks" ] && [ ! -d "$BASSCLEF_DIR/.git" ]; then
249
+ # env-override fixture path; skip clone/pull
250
+ :
251
+ elif [ ! -d "$BASSCLEF_DIR/.claude" ]; then
194
252
  if git clone "$BASSCLEF_REPO" "$BASSCLEF_DIR"; then
195
253
  SYNC_STATUS="freshly cloned"
196
254
  else