@thebassclef/lite 0.1.3 → 1.0.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 (293) hide show
  1. package/dist/cli.cjs +216 -137
  2. package/dist/cli.js +218 -139
  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/.bassclef-source.json +10 -0
  7. package/dist/lite/.claude/settings.json +212 -0
  8. package/dist/lite/CLAUDE.md +41 -0
  9. package/dist/lite/gitignore +58 -0
  10. package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
  11. package/dist/lite/whereami.md +24 -0
  12. package/package.json +8 -2
  13. package/substrate/.bassclef/lite-manifest.json +0 -2701
  14. package/substrate/.claude/agents/architect.md +0 -70
  15. package/substrate/.claude/agents/builder.md +0 -114
  16. package/substrate/.claude/agents/designer.md +0 -156
  17. package/substrate/.claude/agents/reviewer.md +0 -88
  18. package/substrate/.claude/hooks/artifact-ingestion-gate.sh +0 -357
  19. package/substrate/.claude/hooks/assert-verify-steering.sh +0 -77
  20. package/substrate/.claude/hooks/bassclef-source-config-validate.sh +0 -215
  21. package/substrate/.claude/hooks/bassclef-sync.sh +0 -634
  22. package/substrate/.claude/hooks/compound-noun-scrub.sh +0 -292
  23. package/substrate/.claude/hooks/kiss-expansion-inject.sh +0 -69
  24. package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
  25. package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -492
  26. package/substrate/.claude/hooks/plain-english-steering.sh +0 -156
  27. package/substrate/.claude/hooks/post-skill-friction-check.sh +0 -177
  28. package/substrate/.claude/hooks/post-skill-telemetry.sh +0 -62
  29. package/substrate/.claude/hooks/pre-build-gate.sh +0 -511
  30. package/substrate/.claude/hooks/pre-commit-gate.sh +0 -451
  31. package/substrate/.claude/hooks/session-end.sh +0 -433
  32. package/substrate/.claude/hooks/session-reflection.sh +0 -303
  33. package/substrate/.claude/hooks/skill-body-grade-gate.sh +0 -219
  34. package/substrate/.claude/hooks/skill-body-intent-drift.sh +0 -107
  35. package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
  36. package/substrate/.claude/hooks/state-validate.sh +0 -271
  37. package/substrate/.claude/hooks/substrate-clarity-gate.sh +0 -1110
  38. package/substrate/.claude/hooks/temperance-gate.sh +0 -147
  39. package/substrate/.claude/hooks/testing-tier-enforce.sh +0 -233
  40. package/substrate/.claude/hooks/turn-prose-grade-measure.sh +0 -219
  41. package/substrate/.claude/hooks/turn-prose-kiss-check.sh +0 -463
  42. package/substrate/.claude/hooks/vocabulary-migration-check.sh +0 -171
  43. package/substrate/.claude/hooks/whereami-utc-gate.sh +0 -142
  44. package/substrate/.claude/luminaries/alan-cooper.md +0 -170
  45. package/substrate/.claude/luminaries/alistair-cockburn.md +0 -140
  46. package/substrate/.claude/luminaries/amazon-pr-faq.md +0 -34
  47. package/substrate/.claude/luminaries/ash-maurya.md +0 -121
  48. package/substrate/.claude/luminaries/bill-buxton.md +0 -210
  49. package/substrate/.claude/luminaries/charles-sanders-peirce.md +0 -150
  50. package/substrate/.claude/luminaries/david-ogilvy.md +0 -192
  51. package/substrate/.claude/luminaries/don-norman.md +0 -173
  52. package/substrate/.claude/luminaries/edward-tufte.md +0 -179
  53. package/substrate/.claude/luminaries/eric-evans.md +0 -160
  54. package/substrate/.claude/luminaries/frederick-brooks.md +0 -50
  55. package/substrate/.claude/luminaries/gang-of-four.md +0 -157
  56. package/substrate/.claude/luminaries/glenford-myers.md +0 -230
  57. package/substrate/.claude/luminaries/hunt-thomas.md +0 -115
  58. package/substrate/.claude/luminaries/hyrum-wright.md +0 -94
  59. package/substrate/.claude/luminaries/jason-fried-dhh.md +0 -46
  60. package/substrate/.claude/luminaries/jesse-james-garrett.md +0 -154
  61. package/substrate/.claude/luminaries/john-ousterhout.md +0 -94
  62. package/substrate/.claude/luminaries/karl-popper.md +0 -132
  63. package/substrate/.claude/luminaries/kent-beck.md +0 -168
  64. package/substrate/.claude/luminaries/linus-torvalds.md +0 -218
  65. package/substrate/.claude/luminaries/martin-fowler.md +0 -164
  66. package/substrate/.claude/luminaries/michael-feathers.md +0 -125
  67. package/substrate/.claude/luminaries/michael-nygard.md +0 -118
  68. package/substrate/.claude/luminaries/robert-c-martin.md +0 -164
  69. package/substrate/.claude/luminaries/saltzer-schroeder.md +0 -194
  70. package/substrate/.claude/luminaries/sophia-prater.md +0 -193
  71. package/substrate/.claude/luminaries/stephen-toulmin.md +0 -131
  72. package/substrate/.claude/luminaries/tony-hoare.md +0 -170
  73. package/substrate/.claude/luminaries/vaughn-vernon.md +0 -50
  74. package/substrate/.claude/luminaries/w-edwards-deming.md +0 -158
  75. package/substrate/.claude/rules/accessor-library-discipline.md +0 -138
  76. package/substrate/.claude/rules/adr-discipline.md +0 -120
  77. package/substrate/.claude/rules/api-conventions.md +0 -125
  78. package/substrate/.claude/rules/artifact-ingestion.md +0 -179
  79. package/substrate/.claude/rules/assert-only-after-verify.md +0 -137
  80. package/substrate/.claude/rules/blocked-items.md +0 -146
  81. package/substrate/.claude/rules/bootstrap-pair-discipline.md +0 -141
  82. package/substrate/.claude/rules/branching.md +0 -28
  83. package/substrate/.claude/rules/cold-adopter-harness-discipline.md +0 -129
  84. package/substrate/.claude/rules/commit-conventions.md +0 -22
  85. package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +0 -188
  86. package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +0 -188
  87. package/substrate/.claude/rules/context-engineering.md +0 -202
  88. package/substrate/.claude/rules/context-management.md +0 -85
  89. package/substrate/.claude/rules/defensive-bash.md +0 -68
  90. package/substrate/.claude/rules/deferred-actions.md +0 -233
  91. package/substrate/.claude/rules/destructive-operations.md +0 -69
  92. package/substrate/.claude/rules/diagnosis.md +0 -38
  93. package/substrate/.claude/rules/github-issue-flash-tweet.md +0 -156
  94. package/substrate/.claude/rules/guardrails.md +0 -73
  95. package/substrate/.claude/rules/hook-wire-on-author.md +0 -103
  96. package/substrate/.claude/rules/identifier-leak-prevention.md +0 -104
  97. package/substrate/.claude/rules/iteration-bet-brief-completeness.md +0 -54
  98. package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +0 -98
  99. package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +0 -89
  100. package/substrate/.claude/rules/loop-discipline.md +0 -81
  101. package/substrate/.claude/rules/manual-prod-approval.md +0 -100
  102. package/substrate/.claude/rules/marker-enrichment-discipline.md +0 -99
  103. package/substrate/.claude/rules/mobile-ephemeral-session.md +0 -109
  104. package/substrate/.claude/rules/new-dependency-check.md +0 -51
  105. package/substrate/.claude/rules/oo-ad-entry-point.md +0 -117
  106. package/substrate/.claude/rules/operator-facing-prose.md +0 -196
  107. package/substrate/.claude/rules/option-label-discipline.md +0 -108
  108. package/substrate/.claude/rules/pattern-annotation.md +0 -100
  109. package/substrate/.claude/rules/plain-english-discipline.md +0 -156
  110. package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +0 -211
  111. package/substrate/.claude/rules/pr-body-shape.md +0 -317
  112. package/substrate/.claude/rules/pr-strategy.md +0 -167
  113. package/substrate/.claude/rules/pr-title-shape.md +0 -161
  114. package/substrate/.claude/rules/prototype-workflow.md +0 -65
  115. package/substrate/.claude/rules/reserved-skill-names.md +0 -123
  116. package/substrate/.claude/rules/schema-management.md +0 -49
  117. package/substrate/.claude/rules/sdlc-gates.md +0 -149
  118. package/substrate/.claude/rules/security.md +0 -37
  119. package/substrate/.claude/rules/session-artifacts.md +0 -236
  120. package/substrate/.claude/rules/skill-composition-declarations.md +0 -124
  121. package/substrate/.claude/rules/skill-description-clarity.md +0 -247
  122. package/substrate/.claude/rules/skill-procedure-step-list.md +0 -137
  123. package/substrate/.claude/rules/state-schema-validation.md +0 -162
  124. package/substrate/.claude/rules/stuck-signal-diagnostic.md +0 -140
  125. package/substrate/.claude/rules/substrate-config-schema.md +0 -98
  126. package/substrate/.claude/rules/test-list-discipline.md +0 -175
  127. package/substrate/.claude/rules/test-sufficiency.md +0 -210
  128. package/substrate/.claude/rules/testing-tier-config.md +0 -145
  129. package/substrate/.claude/rules/testing.md +0 -38
  130. package/substrate/.claude/rules/turn-estimate-grounding.md +0 -134
  131. package/substrate/.claude/rules/visual-hierarchy.md +0 -437
  132. package/substrate/.claude/rules/we-dont-break-adopters.md +0 -126
  133. package/substrate/.claude/rules/whereami-load-bearing.md +0 -202
  134. package/substrate/.claude/rules/writing-craft-discipline.md +0 -92
  135. package/substrate/.claude/rules/wu-sequencing-compounds.md +0 -145
  136. package/substrate/.claude/skills/build/SKILL.md +0 -640
  137. package/substrate/.claude/skills/chronicle/SKILL.md +0 -55
  138. package/substrate/.claude/skills/clean-artifacts/SKILL.md +0 -249
  139. package/substrate/.claude/skills/decompose/SKILL.md +0 -280
  140. package/substrate/.claude/skills/diagnose/SKILL.md +0 -297
  141. package/substrate/.claude/skills/feynman/SKILL.md +0 -90
  142. package/substrate/.claude/skills/howdoi/SKILL.md +0 -105
  143. package/substrate/.claude/skills/ia-model/SKILL.md +0 -108
  144. package/substrate/.claude/skills/interaction-design/SKILL.md +0 -112
  145. package/substrate/.claude/skills/interpret-input/SKILL.md +0 -180
  146. package/substrate/.claude/skills/journal/SKILL.md +0 -209
  147. package/substrate/.claude/skills/kiss/SKILL.md +0 -449
  148. package/substrate/.claude/skills/launch/SKILL.md +0 -915
  149. package/substrate/.claude/skills/lean-canvas/SKILL.md +0 -332
  150. package/substrate/.claude/skills/longrun/SKILL.md +0 -463
  151. package/substrate/.claude/skills/luminary/SKILL.md +0 -481
  152. package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +0 -177
  153. package/substrate/.claude/skills/onboard-repo/SKILL.md +0 -1624
  154. package/substrate/.claude/skills/pattern-review/SKILL.md +0 -99
  155. package/substrate/.claude/skills/personas/SKILL.md +0 -207
  156. package/substrate/.claude/skills/promote/SKILL.md +0 -283
  157. package/substrate/.claude/skills/requirement/SKILL.md +0 -98
  158. package/substrate/.claude/skills/retro/SKILL.md +0 -117
  159. package/substrate/.claude/skills/riff/SKILL.md +0 -114
  160. package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +0 -163
  161. package/substrate/.claude/skills/session-end/SKILL.md +0 -309
  162. package/substrate/.claude/skills/session-log/SKILL.md +0 -299
  163. package/substrate/.claude/skills/skills/SKILL.md +0 -228
  164. package/substrate/.claude/skills/spec/SKILL.md +0 -105
  165. package/substrate/.claude/skills/sprint/SKILL.md +0 -392
  166. package/substrate/.claude/skills/stage/SKILL.md +0 -384
  167. package/substrate/.claude/skills/state-a-problem/SKILL.md +0 -185
  168. package/substrate/.claude/skills/temperance/SKILL.md +0 -108
  169. package/substrate/.claude/skills/use-case/SKILL.md +0 -417
  170. package/substrate/.claude/skills/user-stories/SKILL.md +0 -268
  171. package/substrate/.claude/skills/value-prop/SKILL.md +0 -251
  172. package/substrate/.claude/skills/verify/SKILL.md +0 -160
  173. package/substrate/.claude/skills/visual-review/SKILL.md +0 -503
  174. package/substrate/.claude/skills/whats-the-plan/SKILL.md +0 -202
  175. package/substrate/.claude/skills/whereami/SKILL.md +0 -307
  176. package/substrate/AGENTS.md +0 -79
  177. package/substrate/CLAUDE-lite.md +0 -85
  178. package/substrate/CODE_OF_CONDUCT.md +0 -28
  179. package/substrate/CONTRIBUTING.md +0 -177
  180. package/substrate/README.md +0 -173
  181. package/substrate/SECURITY.md +0 -19
  182. package/substrate/architecture/decisions/ADR-029-release-pipeline.md +0 -79
  183. package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +0 -139
  184. package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +0 -192
  185. package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +0 -145
  186. package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +0 -155
  187. package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +0 -162
  188. package/substrate/lib/clean-artifacts-sweep.sh +0 -112
  189. package/substrate/lib/code-comment-discipline.sh +0 -144
  190. package/substrate/lib/composer-preflight.sh +0 -459
  191. package/substrate/lib/hook-inject.sh +0 -255
  192. package/substrate/lib/luminary-pick.sh +0 -96
  193. package/substrate/lib/output-discipline.sh +0 -143
  194. package/substrate/lib/prose-scan-boundary.sh +0 -171
  195. package/substrate/lib/rewrite-check.sh +0 -214
  196. package/substrate/lib/state.sh +0 -1372
  197. package/substrate/lib/telemetry.sh +0 -205
  198. package/substrate/lib/tier-check.sh +0 -187
  199. package/substrate/lib/tier-dependency-audit.sh +0 -1088
  200. package/substrate/presence/install/bassclef-hook-connect.sh +0 -178
  201. package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +0 -841
  202. package/substrate/presence/install/bassclef-sync.template.sh +0 -2076
  203. package/substrate/presence/install/schedule-auto-save.cron.sh +0 -88
  204. package/substrate/presence/install/schedule-auto-save.taskscheduler.md +0 -122
  205. package/substrate/scripts/aggregate-telemetry.sh +0 -217
  206. package/substrate/scripts/analyze-tier-dependencies.sh +0 -239
  207. package/substrate/scripts/generate-lite-manifest.sh +0 -505
  208. package/substrate/scripts/generate-tier-manifest.sh +0 -28
  209. package/substrate/scripts/intent-drift-check.sh +0 -456
  210. package/substrate/scripts/lite-manifest-drift-check.sh +0 -146
  211. package/substrate/scripts/render-lite-manifest-doc.sh +0 -150
  212. package/substrate/standards/adr-template.md +0 -86
  213. package/substrate/standards/api-conventions/nextjs.md +0 -84
  214. package/substrate/standards/artifact-composition.md +0 -209
  215. package/substrate/standards/bash-hook-safety.md +0 -246
  216. package/substrate/standards/bassclef-configs-schema.md +0 -232
  217. package/substrate/standards/bassclef-evolution.md +0 -143
  218. package/substrate/standards/bassclef-internal-jargon.md +0 -244
  219. package/substrate/standards/bassclef-managed-sentinel.md +0 -96
  220. package/substrate/standards/bassclef-source-config.md +0 -228
  221. package/substrate/standards/branch-stacking.md +0 -408
  222. package/substrate/standards/code-safety-principles.md +0 -176
  223. package/substrate/standards/composer-prerequisites.md +0 -155
  224. package/substrate/standards/deferred-actions-schema.md +0 -204
  225. package/substrate/standards/dependency-discipline/cargo.md +0 -39
  226. package/substrate/standards/dependency-discipline/gem.md +0 -43
  227. package/substrate/standards/dependency-discipline/go-mod.md +0 -41
  228. package/substrate/standards/dependency-discipline/npm.md +0 -42
  229. package/substrate/standards/dependency-discipline/pip.md +0 -42
  230. package/substrate/standards/deployment-topology/ec2-tailscale.md +0 -225
  231. package/substrate/standards/deployment-topology.md +0 -69
  232. package/substrate/standards/docs-sync-allowlist.md +0 -76
  233. package/substrate/standards/domain-and-dns.md +0 -145
  234. package/substrate/standards/frontend-stack.md +0 -67
  235. package/substrate/standards/frontmatter-schema.md +0 -154
  236. package/substrate/standards/graceful-exit.md +0 -227
  237. package/substrate/standards/hook-idempotency.md +0 -102
  238. package/substrate/standards/hook-injection-discipline.md +0 -202
  239. package/substrate/standards/hook-install-class.md +0 -215
  240. package/substrate/standards/input-handler-interface.md +0 -152
  241. package/substrate/standards/lite-manifest-schema-changes.md +0 -135
  242. package/substrate/standards/luminary-matching.md +0 -105
  243. package/substrate/standards/luminary-problem-patterns.md +0 -481
  244. package/substrate/standards/migration-discipline/active-record.md +0 -50
  245. package/substrate/standards/migration-discipline/alembic.md +0 -43
  246. package/substrate/standards/migration-discipline/gorm.md +0 -50
  247. package/substrate/standards/migration-discipline/prisma.md +0 -53
  248. package/substrate/standards/migration-discipline/sqlalchemy.md +0 -51
  249. package/substrate/standards/mobile-ephemeral-session.md +0 -167
  250. package/substrate/standards/model-routing-discipline.md +0 -160
  251. package/substrate/standards/ogilvy-writing-rules.md +0 -225
  252. package/substrate/standards/opener-discipline.md +0 -96
  253. package/substrate/standards/operator-facing-prose-discipline.md +0 -201
  254. package/substrate/standards/persona-schema.md +0 -229
  255. package/substrate/standards/pluggable-luminaries.md +0 -323
  256. package/substrate/standards/pr-body-discipline.md +0 -115
  257. package/substrate/standards/preview-state-schema.md +0 -189
  258. package/substrate/standards/project-directory-layout.md +0 -276
  259. package/substrate/standards/release-tagging.md +0 -137
  260. package/substrate/standards/reserved-skill-names.md +0 -120
  261. package/substrate/standards/scannable-multi-option-output.md +0 -261
  262. package/substrate/standards/sdlc-compliance.md +0 -286
  263. package/substrate/standards/sdlc-gates/typescript.md +0 -57
  264. package/substrate/standards/secrets-lifecycle.md +0 -210
  265. package/substrate/standards/security-scanner-adapter.md +0 -145
  266. package/substrate/standards/session-board.md +0 -256
  267. package/substrate/standards/skill-output-discipline.md +0 -90
  268. package/substrate/standards/state-spine-contract.md +0 -255
  269. package/substrate/standards/state-spine.md +0 -511
  270. package/substrate/standards/steering-hints/kiss-words.md +0 -11
  271. package/substrate/standards/substrate-config-schema.md +0 -267
  272. package/substrate/standards/tech-stack-config.md +0 -109
  273. package/substrate/standards/tier-dependency-analysis.md +0 -167
  274. package/substrate/standards/tier-runtime-deps/lite.md +0 -57
  275. package/substrate/standards/tier-tag-schema.md +0 -155
  276. package/substrate/standards/two-layer-config.md +0 -99
  277. package/substrate/standards/use-case-format.md +0 -292
  278. package/substrate/standards/user-story-invest.md +0 -268
  279. package/substrate/standards/velocity-and-appetite.md +0 -229
  280. package/substrate/standards/voice-input-pattern.md +0 -119
  281. package/substrate/standards/whereami-schema.md +0 -301
  282. package/substrate/standards/worktree-management.md +0 -211
  283. package/substrate/standards/writing-guide.md +0 -213
  284. package/substrate/templates/chronicle-template.md +0 -75
  285. package/substrate/templates/deferred-action-template.md +0 -45
  286. package/substrate/templates/memory-proposal-template.md +0 -77
  287. package/substrate/templates/persona-template.md +0 -200
  288. package/substrate/templates/pr-faq.md +0 -45
  289. package/substrate/templates/secret-rotation-template.md +0 -162
  290. package/substrate/templates/spec-template.md +0 -131
  291. package/substrate/templates/use-case-template.md +0 -194
  292. package/substrate/templates/user-story-template.md +0 -107
  293. package/substrate/templates/whereami-template.md +0 -101
@@ -1,177 +0,0 @@
1
- #!/bin/bash
2
- # tier: lite
3
- # Post-Skill Friction Check — fires on PostToolUse for Skill tool.
4
- # After "major composer" skills complete, classify the output:
5
- # - Unambiguous friction → emit /promote suggestion + log to friction-log
6
- # - Borderline friction → log to friction-log (operator curates)
7
- # - No friction → silent
8
- #
9
- # The friction log is docs/session-friction-log.md (lazy-created).
10
- # Operator returning from unattended scenario reads the log and triages.
11
- #
12
- # Closes the "rough edges noticed but not filed" gap that surfaces when
13
- # operator runs unattended scenario tests; agent self-monitors during
14
- # multi-skill chains.
15
- #
16
- # Override: SKIP_FRICTION_CHECK=1 to bypass (logged via trace-helper).
17
- # Per-skill opt-out: skill SKILL.md frontmatter `disable_friction_check: true`
18
- #
19
- # Refs bassclef#400.
20
-
21
- set +e # never crash the tool call; fall through silently on any error
22
-
23
- INPUT=$(cat)
24
- TOOL_NAME=$(jq <<< "$INPUT" -r '.tool_name // ""' 2>/dev/null)
25
- TOOL_INPUT=$(jq <<< "$INPUT" -r '.tool_input // {}' 2>/dev/null)
26
- TOOL_OUTPUT=$(jq <<< "$INPUT" -r '.tool_output // ""' 2>/dev/null)
27
-
28
- # Only fire on Skill tool
29
- if [ "$TOOL_NAME" != "Skill" ]; then
30
- exit 0
31
- fi
32
-
33
- # Override hatch — log and skip
34
- if [ "${SKIP_FRICTION_CHECK:-0}" = "1" ]; then
35
- SCRIPT_DIR="$(cd "$(dirname "$0")" 2>/dev/null && pwd)"
36
- if [ -n "$SCRIPT_DIR" ] && [ -f "$SCRIPT_DIR/trace-helper.sh" ]; then
37
- source "$SCRIPT_DIR/trace-helper.sh" 2>/dev/null || true
38
- trace_log "post-skill-friction-check" "OVERRIDE $TOOL_NAME" 2>/dev/null || true
39
- fi
40
- exit 0
41
- fi
42
-
43
- # Extract skill name from tool input
44
- SKILL_NAME=$(jq <<< "$TOOL_INPUT" -r '.skill // ""' 2>/dev/null)
45
-
46
- # Major composer skills — these chain other skills or do heavy work.
47
- # Friction surfaces best at their boundaries.
48
- MAJOR_SKILLS_PATTERN="^(preview|preview-build|build|shape|longrun|decompose|spec|architect-review|frontend-design|prototype-variants|prototype-gallery|interpret-input|objectory-decompose|ux-migration|ia-model|interaction-design|use-case|user-stories|jtbd-tasks|task-scenarios)$"
49
-
50
- if ! echo "$SKILL_NAME" | grep -qE "$MAJOR_SKILLS_PATTERN"; then
51
- exit 0
52
- fi
53
-
54
- # Check per-skill opt-out (frontmatter disable_friction_check: true)
55
- PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
56
- SKILL_FILE="$PROJECT_DIR/.claude/skills/$SKILL_NAME/SKILL.md"
57
- if [ -f "$SKILL_FILE" ] && head -20 "$SKILL_FILE" | grep -qE "^disable_friction_check:[[:space:]]*true"; then
58
- exit 0
59
- fi
60
-
61
- # === Friction classification ===
62
- #
63
- # Unambiguous: skill returned error OR clear stub markers
64
- # Borderline: placeholder text, partial output, drift signals
65
- # None: clean output
66
-
67
- CLASS=""
68
- SIGNAL=""
69
-
70
- # Unambiguous friction signals
71
- if echo "$TOOL_OUTPUT" | grep -qiE 'deferred to Phase [A-Z]|stub return|TODO: implement|not yet implemented|operator decides .{0,30} manually|placeholder.{0,20}fill in'; then
72
- CLASS="unambiguous"
73
- SIGNAL=$(echo "$TOOL_OUTPUT" | grep -oiE '(deferred to Phase [A-Z]|stub return|TODO: implement|not yet implemented|operator decides .{0,30} manually|placeholder.{0,20}fill in)' | head -1)
74
- elif echo "$TOOL_OUTPUT" | grep -qiE '^Error:|exit code [1-9]|skill failed|unable to complete'; then
75
- CLASS="unambiguous"
76
- SIGNAL=$(echo "$TOOL_OUTPUT" | grep -iE '^Error:|exit code [1-9]|skill failed|unable to complete' | head -1)
77
- fi
78
-
79
- # Borderline friction signals (only check if not already classified)
80
- if [ -z "$CLASS" ]; then
81
- if echo "$TOOL_OUTPUT" | grep -qiE 'lorem ipsum|fill in here|XXX|FIXME|partial.{0,20}output|incomplete'; then
82
- CLASS="borderline"
83
- SIGNAL=$(echo "$TOOL_OUTPUT" | grep -oiE 'lorem ipsum|fill in here|XXX|FIXME|partial.{0,20}output|incomplete' | head -1)
84
- fi
85
- fi
86
-
87
- # No friction → silent exit
88
- if [ -z "$CLASS" ]; then
89
- exit 0
90
- fi
91
-
92
- # === Append to friction log ===
93
-
94
- LOG_FILE="$PROJECT_DIR/docs/session-friction-log.md"
95
- TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
96
- DATE_HEADER=$(date -u +"%Y-%m-%d")
97
-
98
- # Lazy-create log file if missing
99
- if [ ! -f "$LOG_FILE" ]; then
100
- mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null
101
- cat > "$LOG_FILE" <<'HEADER'
102
- # Session Friction Log
103
-
104
- Tracks rough edges, stub returns, and other friction encountered
105
- during chained skill dispatches. Generated by
106
- `.claude/hooks/post-skill-friction-check.sh` (bassclef#400).
107
-
108
- **Format**: `<timestamp> [<class>] /<skill> — <signal> — <action taken>`
109
-
110
- **Classes**:
111
- - `unambiguous` — clear friction (error, stub return, deferred phase); auto-files /promote OR logs here
112
- - `borderline` — partial output, placeholder text; operator triages on return
113
-
114
- **Operator workflow on return**:
115
- 1. Read recent entries
116
- 2. For each `borderline` worth filing → run `/promote substrate-defect`
117
- 3. Move resolved entries to `## Resolved` section below
118
-
119
- ---
120
-
121
- ## Active
122
-
123
- HEADER
124
- fi
125
-
126
- # Truncate signal to one line
127
- SIGNAL_TRUNCATED=$(echo "$SIGNAL" | head -c 200 | tr '\n' ' ' | sed 's/[[:space:]]\+/ /g; s/[[:space:]]$//')
128
-
129
- # Append entry
130
- ENTRY="- ${TIMESTAMP} [${CLASS}] /${SKILL_NAME} — ${SIGNAL_TRUNCATED}"
131
-
132
- # Check if today's date header already exists; append under it
133
- if grep -qF "## Active" "$LOG_FILE"; then
134
- # Append to Active section. Use awk to insert after "## Active" line.
135
- awk -v entry="$ENTRY" '
136
- /^## Active$/ { print; print ""; print entry; next }
137
- { print }
138
- ' "$LOG_FILE" > "$LOG_FILE.tmp" && mv "$LOG_FILE.tmp" "$LOG_FILE"
139
- fi
140
-
141
- # === Emit to operator + agent context ===
142
- #
143
- # stderr is captured by Claude Code and surfaced to the agent on next turn.
144
-
145
- cat >&2 <<EOF
146
-
147
- 🔍 POST-SKILL FRICTION CHECK
148
- ─────────────────────────────────────
149
- Skill: /$SKILL_NAME
150
- Class: $CLASS
151
- Signal: $SIGNAL_TRUNCATED
152
-
153
- Logged to: docs/session-friction-log.md
154
-
155
- EOF
156
-
157
- if [ "$CLASS" = "unambiguous" ]; then
158
- cat >&2 <<EOF
159
- RECOMMENDED: file /promote substrate-defect now (don't defer).
160
- The signal is clear-cut; auto-prompting operator-on-return adds latency.
161
-
162
- To file: /promote substrate-defect $SKILL_NAME — $SIGNAL_TRUNCATED
163
-
164
- To skip (rare): SKIP_FRICTION_CHECK=1 next invocation.
165
- ─────────────────────────────────────
166
- EOF
167
- else
168
- cat >&2 <<EOF
169
- ACTION: continue — operator will triage on return.
170
- If you (agent) judge this warrants /promote inline, fire it.
171
- Otherwise log entry above is sufficient.
172
- ─────────────────────────────────────
173
- EOF
174
- fi
175
-
176
- # Always exit 0 — friction-check is informational, not blocking
177
- exit 0
@@ -1,62 +0,0 @@
1
- #!/usr/bin/env bash
2
- # .claude/hooks/post-skill-telemetry.sh
3
- # tier: lite
4
- # install-class: dual
5
- # PostToolUse: Skill
6
- #
7
- # Emits a `skill_invoke` telemetry event after any Skill tool call.
8
- # Silent-fail per @luminary michael-nygard R1 — never crashes the session.
9
- # Reads Claude Code PostToolUse JSON on stdin; extracts skill name from
10
- # tool_input.
11
- #
12
- # Wired in .claude/settings.json under hooks.PostToolUse[matcher=Skill].
13
-
14
- set -u
15
-
16
- CWD="${CLAUDE_PROJECT_DIR:-$PWD}"
17
-
18
- # Silent-fail wrap — any error path exits 0 cleanly
19
- {
20
- if [ ! -f "$CWD/lib/telemetry.sh" ]; then
21
- exit 0
22
- fi
23
-
24
- # Read Claude Code stdin JSON
25
- input=$(cat 2>/dev/null || echo "")
26
- if [ -z "$input" ]; then
27
- exit 0
28
- fi
29
-
30
- # Extract skill name — tool_input.name is the standard field for Skill tool
31
- if command -v jq >/dev/null 2>&1; then
32
- skill_name=$(echo "$input" | jq -r '.tool_input.skill // .tool_input.name // empty' 2>/dev/null)
33
- else
34
- # Bash-only fallback — grep for skill or name field
35
- skill_name=$(echo "$input" | grep -oE '"skill"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"\([^"]*\)"$/\1/')
36
- [ -z "$skill_name" ] && skill_name=$(echo "$input" | grep -oE '"name"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"\([^"]*\)"$/\1/')
37
- fi
38
-
39
- # Skill names must start with a letter; normalize to /skill-name shape
40
- if [ -z "$skill_name" ]; then
41
- exit 0
42
- fi
43
- # Strip leading slash if present
44
- skill_name="${skill_name#/}"
45
- # Only ship if the name matches the schema pattern
46
- if ! echo "$skill_name" | grep -qE '^[a-z][a-z0-9-]*$'; then
47
- exit 0
48
- fi
49
- skill_name="/$skill_name"
50
-
51
- # shellcheck source=/dev/null
52
- source "$CWD/lib/telemetry.sh" 2>/dev/null || exit 0
53
-
54
- if telemetry_is_enabled; then
55
- sid=$(telemetry_session_id)
56
- uid=$(uuidgen 2>/dev/null | tr '[:upper:]' '[:lower:]' || echo "00000000-0000-4000-8000-000000000002")
57
- ts=$(date -u +%Y-%m-%dT%H:%M:%SZ)
58
- telemetry_emit "{\"event_type\":\"skill_invoke\",\"event_id\":\"$uid\",\"session_id\":\"$sid\",\"timestamp\":\"$ts\",\"tier\":\"lite\",\"payload\":{\"skill_name\":\"$skill_name\"}}"
59
- fi
60
- } 2>/dev/null || true
61
-
62
- exit 0