@thebassclef/lite 0.1.3 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +431 -135
- package/dist/cli.js +433 -137
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.bassclef-source.json +10 -0
- package/{substrate → dist/lite}/.claude/hooks/artifact-ingestion-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/assert-verify-steering.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/bassclef-source-config-validate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/bassclef-sync.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/compound-noun-scrub.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/kiss-expansion-inject.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/plain-english-steering.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/post-skill-friction-check.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/post-skill-telemetry.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/pre-build-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/pre-commit-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/session-end.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/session-reflection.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/skill-body-grade-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/skill-body-intent-drift.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/state-validate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/substrate-clarity-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/temperance-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/testing-tier-enforce.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/turn-prose-grade-measure.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/turn-prose-kiss-check.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/vocabulary-migration-check.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/whereami-utc-gate.sh +0 -0
- package/dist/lite/.claude/settings.json +212 -0
- package/dist/lite/CLAUDE.md +41 -0
- package/dist/lite/gitignore +58 -0
- package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
- package/dist/lite/whereami.md +24 -0
- package/package.json +8 -2
- package/substrate/.bassclef/lite-manifest.json +0 -2701
- package/substrate/.claude/agents/architect.md +0 -70
- package/substrate/.claude/agents/builder.md +0 -114
- package/substrate/.claude/agents/designer.md +0 -156
- package/substrate/.claude/agents/reviewer.md +0 -88
- package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
- package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
- package/substrate/.claude/luminaries/alan-cooper.md +0 -170
- package/substrate/.claude/luminaries/alistair-cockburn.md +0 -140
- package/substrate/.claude/luminaries/amazon-pr-faq.md +0 -34
- package/substrate/.claude/luminaries/ash-maurya.md +0 -121
- package/substrate/.claude/luminaries/bill-buxton.md +0 -210
- package/substrate/.claude/luminaries/charles-sanders-peirce.md +0 -150
- package/substrate/.claude/luminaries/david-ogilvy.md +0 -192
- package/substrate/.claude/luminaries/don-norman.md +0 -173
- package/substrate/.claude/luminaries/edward-tufte.md +0 -179
- package/substrate/.claude/luminaries/eric-evans.md +0 -160
- package/substrate/.claude/luminaries/frederick-brooks.md +0 -50
- package/substrate/.claude/luminaries/gang-of-four.md +0 -157
- package/substrate/.claude/luminaries/glenford-myers.md +0 -230
- package/substrate/.claude/luminaries/hunt-thomas.md +0 -115
- package/substrate/.claude/luminaries/hyrum-wright.md +0 -94
- package/substrate/.claude/luminaries/jason-fried-dhh.md +0 -46
- package/substrate/.claude/luminaries/jesse-james-garrett.md +0 -154
- package/substrate/.claude/luminaries/john-ousterhout.md +0 -94
- package/substrate/.claude/luminaries/karl-popper.md +0 -132
- package/substrate/.claude/luminaries/kent-beck.md +0 -168
- package/substrate/.claude/luminaries/linus-torvalds.md +0 -218
- package/substrate/.claude/luminaries/martin-fowler.md +0 -164
- package/substrate/.claude/luminaries/michael-feathers.md +0 -125
- package/substrate/.claude/luminaries/michael-nygard.md +0 -118
- package/substrate/.claude/luminaries/robert-c-martin.md +0 -164
- package/substrate/.claude/luminaries/saltzer-schroeder.md +0 -194
- package/substrate/.claude/luminaries/sophia-prater.md +0 -193
- package/substrate/.claude/luminaries/stephen-toulmin.md +0 -131
- package/substrate/.claude/luminaries/tony-hoare.md +0 -170
- package/substrate/.claude/luminaries/vaughn-vernon.md +0 -50
- package/substrate/.claude/luminaries/w-edwards-deming.md +0 -158
- package/substrate/.claude/rules/accessor-library-discipline.md +0 -138
- package/substrate/.claude/rules/adr-discipline.md +0 -120
- package/substrate/.claude/rules/api-conventions.md +0 -125
- package/substrate/.claude/rules/artifact-ingestion.md +0 -179
- package/substrate/.claude/rules/assert-only-after-verify.md +0 -137
- package/substrate/.claude/rules/blocked-items.md +0 -146
- package/substrate/.claude/rules/bootstrap-pair-discipline.md +0 -141
- package/substrate/.claude/rules/branching.md +0 -28
- package/substrate/.claude/rules/cold-adopter-harness-discipline.md +0 -129
- package/substrate/.claude/rules/commit-conventions.md +0 -22
- package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +0 -188
- package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +0 -188
- package/substrate/.claude/rules/context-engineering.md +0 -202
- package/substrate/.claude/rules/context-management.md +0 -85
- package/substrate/.claude/rules/defensive-bash.md +0 -68
- package/substrate/.claude/rules/deferred-actions.md +0 -233
- package/substrate/.claude/rules/destructive-operations.md +0 -69
- package/substrate/.claude/rules/diagnosis.md +0 -38
- package/substrate/.claude/rules/github-issue-flash-tweet.md +0 -156
- package/substrate/.claude/rules/guardrails.md +0 -73
- package/substrate/.claude/rules/hook-wire-on-author.md +0 -103
- package/substrate/.claude/rules/identifier-leak-prevention.md +0 -104
- package/substrate/.claude/rules/iteration-bet-brief-completeness.md +0 -54
- package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +0 -98
- package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +0 -89
- package/substrate/.claude/rules/loop-discipline.md +0 -81
- package/substrate/.claude/rules/manual-prod-approval.md +0 -100
- package/substrate/.claude/rules/marker-enrichment-discipline.md +0 -99
- package/substrate/.claude/rules/mobile-ephemeral-session.md +0 -109
- package/substrate/.claude/rules/new-dependency-check.md +0 -51
- package/substrate/.claude/rules/oo-ad-entry-point.md +0 -117
- package/substrate/.claude/rules/operator-facing-prose.md +0 -196
- package/substrate/.claude/rules/option-label-discipline.md +0 -108
- package/substrate/.claude/rules/pattern-annotation.md +0 -100
- package/substrate/.claude/rules/plain-english-discipline.md +0 -156
- package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +0 -211
- package/substrate/.claude/rules/pr-body-shape.md +0 -317
- package/substrate/.claude/rules/pr-strategy.md +0 -167
- package/substrate/.claude/rules/pr-title-shape.md +0 -161
- package/substrate/.claude/rules/prototype-workflow.md +0 -65
- package/substrate/.claude/rules/reserved-skill-names.md +0 -123
- package/substrate/.claude/rules/schema-management.md +0 -49
- package/substrate/.claude/rules/sdlc-gates.md +0 -149
- package/substrate/.claude/rules/security.md +0 -37
- package/substrate/.claude/rules/session-artifacts.md +0 -236
- package/substrate/.claude/rules/skill-composition-declarations.md +0 -124
- package/substrate/.claude/rules/skill-description-clarity.md +0 -247
- package/substrate/.claude/rules/skill-procedure-step-list.md +0 -137
- package/substrate/.claude/rules/state-schema-validation.md +0 -162
- package/substrate/.claude/rules/stuck-signal-diagnostic.md +0 -140
- package/substrate/.claude/rules/substrate-config-schema.md +0 -98
- package/substrate/.claude/rules/test-list-discipline.md +0 -175
- package/substrate/.claude/rules/test-sufficiency.md +0 -210
- package/substrate/.claude/rules/testing-tier-config.md +0 -145
- package/substrate/.claude/rules/testing.md +0 -38
- package/substrate/.claude/rules/turn-estimate-grounding.md +0 -134
- package/substrate/.claude/rules/visual-hierarchy.md +0 -437
- package/substrate/.claude/rules/we-dont-break-adopters.md +0 -126
- package/substrate/.claude/rules/whereami-load-bearing.md +0 -202
- package/substrate/.claude/rules/writing-craft-discipline.md +0 -92
- package/substrate/.claude/rules/wu-sequencing-compounds.md +0 -145
- package/substrate/.claude/skills/build/SKILL.md +0 -640
- package/substrate/.claude/skills/chronicle/SKILL.md +0 -55
- package/substrate/.claude/skills/clean-artifacts/SKILL.md +0 -249
- package/substrate/.claude/skills/decompose/SKILL.md +0 -280
- package/substrate/.claude/skills/diagnose/SKILL.md +0 -297
- package/substrate/.claude/skills/feynman/SKILL.md +0 -90
- package/substrate/.claude/skills/howdoi/SKILL.md +0 -105
- package/substrate/.claude/skills/ia-model/SKILL.md +0 -108
- package/substrate/.claude/skills/interaction-design/SKILL.md +0 -112
- package/substrate/.claude/skills/interpret-input/SKILL.md +0 -180
- package/substrate/.claude/skills/journal/SKILL.md +0 -209
- package/substrate/.claude/skills/kiss/SKILL.md +0 -449
- package/substrate/.claude/skills/launch/SKILL.md +0 -915
- package/substrate/.claude/skills/lean-canvas/SKILL.md +0 -332
- package/substrate/.claude/skills/longrun/SKILL.md +0 -463
- package/substrate/.claude/skills/luminary/SKILL.md +0 -481
- package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +0 -177
- package/substrate/.claude/skills/onboard-repo/SKILL.md +0 -1624
- package/substrate/.claude/skills/pattern-review/SKILL.md +0 -99
- package/substrate/.claude/skills/personas/SKILL.md +0 -207
- package/substrate/.claude/skills/promote/SKILL.md +0 -283
- package/substrate/.claude/skills/requirement/SKILL.md +0 -98
- package/substrate/.claude/skills/retro/SKILL.md +0 -117
- package/substrate/.claude/skills/riff/SKILL.md +0 -114
- package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +0 -163
- package/substrate/.claude/skills/session-end/SKILL.md +0 -309
- package/substrate/.claude/skills/session-log/SKILL.md +0 -299
- package/substrate/.claude/skills/skills/SKILL.md +0 -228
- package/substrate/.claude/skills/spec/SKILL.md +0 -105
- package/substrate/.claude/skills/sprint/SKILL.md +0 -392
- package/substrate/.claude/skills/stage/SKILL.md +0 -384
- package/substrate/.claude/skills/state-a-problem/SKILL.md +0 -185
- package/substrate/.claude/skills/temperance/SKILL.md +0 -108
- package/substrate/.claude/skills/use-case/SKILL.md +0 -417
- package/substrate/.claude/skills/user-stories/SKILL.md +0 -268
- package/substrate/.claude/skills/value-prop/SKILL.md +0 -251
- package/substrate/.claude/skills/verify/SKILL.md +0 -160
- package/substrate/.claude/skills/visual-review/SKILL.md +0 -503
- package/substrate/.claude/skills/whats-the-plan/SKILL.md +0 -202
- package/substrate/.claude/skills/whereami/SKILL.md +0 -307
- package/substrate/AGENTS.md +0 -79
- package/substrate/CLAUDE-lite.md +0 -85
- package/substrate/CODE_OF_CONDUCT.md +0 -28
- package/substrate/CONTRIBUTING.md +0 -177
- package/substrate/README.md +0 -173
- package/substrate/SECURITY.md +0 -19
- package/substrate/architecture/decisions/ADR-029-release-pipeline.md +0 -79
- package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +0 -139
- package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +0 -192
- package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +0 -145
- package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +0 -155
- package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +0 -162
- package/substrate/lib/clean-artifacts-sweep.sh +0 -112
- package/substrate/lib/code-comment-discipline.sh +0 -144
- package/substrate/lib/composer-preflight.sh +0 -459
- package/substrate/lib/hook-inject.sh +0 -255
- package/substrate/lib/luminary-pick.sh +0 -96
- package/substrate/lib/output-discipline.sh +0 -143
- package/substrate/lib/prose-scan-boundary.sh +0 -171
- package/substrate/lib/rewrite-check.sh +0 -214
- package/substrate/lib/state.sh +0 -1372
- package/substrate/lib/telemetry.sh +0 -205
- package/substrate/lib/tier-check.sh +0 -187
- package/substrate/lib/tier-dependency-audit.sh +0 -1088
- package/substrate/presence/install/bassclef-hook-connect.sh +0 -178
- package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +0 -841
- package/substrate/presence/install/bassclef-sync.template.sh +0 -2076
- package/substrate/presence/install/schedule-auto-save.cron.sh +0 -88
- package/substrate/presence/install/schedule-auto-save.taskscheduler.md +0 -122
- package/substrate/scripts/aggregate-telemetry.sh +0 -217
- package/substrate/scripts/analyze-tier-dependencies.sh +0 -239
- package/substrate/scripts/generate-lite-manifest.sh +0 -505
- package/substrate/scripts/generate-tier-manifest.sh +0 -28
- package/substrate/scripts/intent-drift-check.sh +0 -456
- package/substrate/scripts/lite-manifest-drift-check.sh +0 -146
- package/substrate/scripts/render-lite-manifest-doc.sh +0 -150
- package/substrate/standards/adr-template.md +0 -86
- package/substrate/standards/api-conventions/nextjs.md +0 -84
- package/substrate/standards/artifact-composition.md +0 -209
- package/substrate/standards/bash-hook-safety.md +0 -246
- package/substrate/standards/bassclef-configs-schema.md +0 -232
- package/substrate/standards/bassclef-evolution.md +0 -143
- package/substrate/standards/bassclef-internal-jargon.md +0 -244
- package/substrate/standards/bassclef-managed-sentinel.md +0 -96
- package/substrate/standards/bassclef-source-config.md +0 -228
- package/substrate/standards/branch-stacking.md +0 -408
- package/substrate/standards/code-safety-principles.md +0 -176
- package/substrate/standards/composer-prerequisites.md +0 -155
- package/substrate/standards/deferred-actions-schema.md +0 -204
- package/substrate/standards/dependency-discipline/cargo.md +0 -39
- package/substrate/standards/dependency-discipline/gem.md +0 -43
- package/substrate/standards/dependency-discipline/go-mod.md +0 -41
- package/substrate/standards/dependency-discipline/npm.md +0 -42
- package/substrate/standards/dependency-discipline/pip.md +0 -42
- package/substrate/standards/deployment-topology/ec2-tailscale.md +0 -225
- package/substrate/standards/deployment-topology.md +0 -69
- package/substrate/standards/docs-sync-allowlist.md +0 -76
- package/substrate/standards/domain-and-dns.md +0 -145
- package/substrate/standards/frontend-stack.md +0 -67
- package/substrate/standards/frontmatter-schema.md +0 -154
- package/substrate/standards/graceful-exit.md +0 -227
- package/substrate/standards/hook-idempotency.md +0 -102
- package/substrate/standards/hook-injection-discipline.md +0 -202
- package/substrate/standards/hook-install-class.md +0 -215
- package/substrate/standards/input-handler-interface.md +0 -152
- package/substrate/standards/lite-manifest-schema-changes.md +0 -135
- package/substrate/standards/luminary-matching.md +0 -105
- package/substrate/standards/luminary-problem-patterns.md +0 -481
- package/substrate/standards/migration-discipline/active-record.md +0 -50
- package/substrate/standards/migration-discipline/alembic.md +0 -43
- package/substrate/standards/migration-discipline/gorm.md +0 -50
- package/substrate/standards/migration-discipline/prisma.md +0 -53
- package/substrate/standards/migration-discipline/sqlalchemy.md +0 -51
- package/substrate/standards/mobile-ephemeral-session.md +0 -167
- package/substrate/standards/model-routing-discipline.md +0 -160
- package/substrate/standards/ogilvy-writing-rules.md +0 -225
- package/substrate/standards/opener-discipline.md +0 -96
- package/substrate/standards/operator-facing-prose-discipline.md +0 -201
- package/substrate/standards/persona-schema.md +0 -229
- package/substrate/standards/pluggable-luminaries.md +0 -323
- package/substrate/standards/pr-body-discipline.md +0 -115
- package/substrate/standards/preview-state-schema.md +0 -189
- package/substrate/standards/project-directory-layout.md +0 -276
- package/substrate/standards/release-tagging.md +0 -137
- package/substrate/standards/reserved-skill-names.md +0 -120
- package/substrate/standards/scannable-multi-option-output.md +0 -261
- package/substrate/standards/sdlc-compliance.md +0 -286
- package/substrate/standards/sdlc-gates/typescript.md +0 -57
- package/substrate/standards/secrets-lifecycle.md +0 -210
- package/substrate/standards/security-scanner-adapter.md +0 -145
- package/substrate/standards/session-board.md +0 -256
- package/substrate/standards/skill-output-discipline.md +0 -90
- package/substrate/standards/state-spine-contract.md +0 -255
- package/substrate/standards/state-spine.md +0 -511
- package/substrate/standards/steering-hints/kiss-words.md +0 -11
- package/substrate/standards/substrate-config-schema.md +0 -267
- package/substrate/standards/tech-stack-config.md +0 -109
- package/substrate/standards/tier-dependency-analysis.md +0 -167
- package/substrate/standards/tier-runtime-deps/lite.md +0 -57
- package/substrate/standards/tier-tag-schema.md +0 -155
- package/substrate/standards/two-layer-config.md +0 -99
- package/substrate/standards/use-case-format.md +0 -292
- package/substrate/standards/user-story-invest.md +0 -268
- package/substrate/standards/velocity-and-appetite.md +0 -229
- package/substrate/standards/voice-input-pattern.md +0 -119
- package/substrate/standards/whereami-schema.md +0 -301
- package/substrate/standards/worktree-management.md +0 -211
- package/substrate/standards/writing-guide.md +0 -213
- package/substrate/templates/chronicle-template.md +0 -75
- package/substrate/templates/deferred-action-template.md +0 -45
- package/substrate/templates/memory-proposal-template.md +0 -77
- package/substrate/templates/persona-template.md +0 -200
- package/substrate/templates/pr-faq.md +0 -45
- package/substrate/templates/secret-rotation-template.md +0 -162
- package/substrate/templates/spec-template.md +0 -131
- package/substrate/templates/use-case-template.md +0 -194
- package/substrate/templates/user-story-template.md +0 -107
- package/substrate/templates/whereami-template.md +0 -101
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# tier: lite
|
|
3
|
-
# description: Dynamic-derive hook connect — closes bassclef-upstream#625.
|
|
4
|
-
# Dynamic-derive hook connect — closes bassclef-upstream#625.
|
|
5
|
-
# Retagged standard → lite per #1301 concentric rule (ADR-052 D1) —
|
|
6
|
-
# sourced by tier:lite bassclef-sync.template.sh at L999-1002; without
|
|
7
|
-
# ship at lite the merger never fires, adopter hooks stay unwired.
|
|
8
|
-
# Closes #1301.
|
|
9
|
-
#
|
|
10
|
-
# Reads bassclef's own .claude/settings.json (the source of truth for which
|
|
11
|
-
# hooks are wired to which events) and merges every entry into the adopter's
|
|
12
|
-
# .claude/settings.json. Adopters stop hitting BLOCKED on every new hook add;
|
|
13
|
-
# ADR-031 (we-don't-break-adopters) holds.
|
|
14
|
-
#
|
|
15
|
-
# The old §3c-hooks section in presence/install/bassclef-sync.template.sh
|
|
16
|
-
# carried a hardcoded 5-hook list. Coverage was 10 % of the 49 hooks bassclef
|
|
17
|
-
# actually wires. POA session 2026-07-02 merged 40 hook entries by hand.
|
|
18
|
-
#
|
|
19
|
-
# Anchor luminaries — @luminary michael-nygard (Steady State — the sync path
|
|
20
|
-
# self-heals hook coverage on every session-start), @luminary linus-torvalds
|
|
21
|
-
# (adopter contract — auto-migration is not optional), @luminary
|
|
22
|
-
# john-ousterhout (deep module — read source-of-truth once; hide the merge
|
|
23
|
-
# bookkeeping behind a single function).
|
|
24
|
-
|
|
25
|
-
# LANE_3_HOOKS — single source of truth pairs with sync.template.sh L777.
|
|
26
|
-
# These 3 hooks are installed at $HOME/.claude/hooks/ on adopters per Lane 3
|
|
27
|
-
# (bassclef#1146). Bassclef itself wires them at $CLAUDE_PROJECT_DIR because
|
|
28
|
-
# bassclef IS the source. Copying bassclef's project-scope entries verbatim
|
|
29
|
-
# to adopters points at files that do not exist on adopter machines; the
|
|
30
|
-
# result is 3 "file not found" errors per SessionStart. Closes <consumer-repo>#1262.
|
|
31
|
-
# If this list changes, update sync.template.sh L777 in the same PR.
|
|
32
|
-
LANE_3_HOOKS=(vendored-dispatcher-refresh.sh session-reflection.sh session-start-recap-inject.sh)
|
|
33
|
-
|
|
34
|
-
# bassclef_hook_connect_apply <adopter_cwd> [<bassclef_root>]
|
|
35
|
-
#
|
|
36
|
-
# Reads $bassclef_root/.claude/settings.json (or $BASSCLEF_SOURCE_ROOT if
|
|
37
|
-
# arg 2 omitted); merges every hook entry additively into
|
|
38
|
-
# $adopter_cwd/.claude/settings.json.
|
|
39
|
-
#
|
|
40
|
-
# Returns 0 on success AND on every skip path. Callers must never break
|
|
41
|
-
# on this function's exit code — bassclef-sync's other sections still
|
|
42
|
-
# need to run.
|
|
43
|
-
#
|
|
44
|
-
# Environment:
|
|
45
|
-
# SKIP_BASSCLEF_HOOK_WIRE=1 bypass, logged to stderr
|
|
46
|
-
# BASSCLEF_SOURCE_ROOT fallback for arg 2 (dispatcher exports this)
|
|
47
|
-
bassclef_hook_connect_apply() {
|
|
48
|
-
local adopter_cwd="${1:-}"
|
|
49
|
-
local bassclef_root="${2:-${BASSCLEF_SOURCE_ROOT:-}}"
|
|
50
|
-
|
|
51
|
-
# Third fallback: derive from lib's own path when arg 2 and env both empty.
|
|
52
|
-
# Lib lives at presence/install/bassclef-hook-connect.sh; parent-of-parent
|
|
53
|
-
# is the bassclef repo root. Covers older vendored dispatchers that do not
|
|
54
|
-
# export BASSCLEF_SOURCE_ROOT (bassclef-upstream#1003 Layer 2 cure).
|
|
55
|
-
if [ -z "$bassclef_root" ] && [ -n "${BASH_SOURCE[0]:-}" ]; then
|
|
56
|
-
bassclef_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." 2>/dev/null && pwd)"
|
|
57
|
-
fi
|
|
58
|
-
|
|
59
|
-
# Argument sanity — adopter path must be given.
|
|
60
|
-
if [ -z "$adopter_cwd" ]; then
|
|
61
|
-
return 0
|
|
62
|
-
fi
|
|
63
|
-
|
|
64
|
-
# Operator override.
|
|
65
|
-
if [ "${SKIP_BASSCLEF_HOOK_WIRE:-0}" = "1" ]; then
|
|
66
|
-
echo "[bassclef-hook-connect] skip — SKIP_BASSCLEF_HOOK_WIRE=1" >&2
|
|
67
|
-
return 0
|
|
68
|
-
fi
|
|
69
|
-
|
|
70
|
-
# Bassclef itself does not need the merge — bassclef manages its own
|
|
71
|
-
# settings.json directly. Narrow match on repo name (not substring) so
|
|
72
|
-
# sibling repos like bassclef-web and bassclef-cli still get the merge.
|
|
73
|
-
# Pattern mirrors the SELF_MODE detection in Section 0a of
|
|
74
|
-
# presence/install/bassclef-sync.template.sh (#999 cure).
|
|
75
|
-
local remote_url
|
|
76
|
-
remote_url=$(git -C "$adopter_cwd" remote get-url origin 2>/dev/null || echo "")
|
|
77
|
-
if echo "$remote_url" | grep -qE 'sunj-labs/(bassclef|bassclef-upstream)(\.git)?/?$'; then
|
|
78
|
-
return 0
|
|
79
|
-
fi
|
|
80
|
-
|
|
81
|
-
# Adopter must have a .claude dir.
|
|
82
|
-
if [ ! -d "$adopter_cwd/.claude" ]; then
|
|
83
|
-
return 0
|
|
84
|
-
fi
|
|
85
|
-
|
|
86
|
-
# jq is required. Absent → skip cleanly.
|
|
87
|
-
if ! command -v jq >/dev/null 2>&1; then
|
|
88
|
-
echo "[bassclef-hook-connect] skip — jq not found on PATH" >&2
|
|
89
|
-
return 0
|
|
90
|
-
fi
|
|
91
|
-
|
|
92
|
-
# Bassclef source must resolve.
|
|
93
|
-
if [ -z "$bassclef_root" ]; then
|
|
94
|
-
return 0
|
|
95
|
-
fi
|
|
96
|
-
local bassclef_settings="$bassclef_root/.claude/settings.json"
|
|
97
|
-
if [ ! -f "$bassclef_settings" ]; then
|
|
98
|
-
return 0
|
|
99
|
-
fi
|
|
100
|
-
|
|
101
|
-
# Bassclef settings must parse. Malformed → skip; do not touch adopter file.
|
|
102
|
-
if ! jq -e . "$bassclef_settings" >/dev/null 2>&1; then
|
|
103
|
-
echo "[bassclef-hook-connect] skip — bassclef settings.json failed to parse" >&2
|
|
104
|
-
return 0
|
|
105
|
-
fi
|
|
106
|
-
|
|
107
|
-
local adopter_settings="$adopter_cwd/.claude/settings.json"
|
|
108
|
-
|
|
109
|
-
# Base structure — create if missing.
|
|
110
|
-
if [ ! -f "$adopter_settings" ]; then
|
|
111
|
-
echo '{"hooks":{}}' > "$adopter_settings"
|
|
112
|
-
fi
|
|
113
|
-
|
|
114
|
-
# Adopter settings must also parse. If it does not, leave it alone — an
|
|
115
|
-
# operator-authored file with a syntax error is not our repair target.
|
|
116
|
-
if ! jq -e . "$adopter_settings" >/dev/null 2>&1; then
|
|
117
|
-
echo "[bassclef-hook-connect] skip — adopter settings.json failed to parse" >&2
|
|
118
|
-
return 0
|
|
119
|
-
fi
|
|
120
|
-
|
|
121
|
-
# Build Lane 3 exclusion regex from LANE_3_HOOKS array. Matches only the
|
|
122
|
-
# $CLAUDE_PROJECT_DIR/.claude/hooks/<basename> form — leaves $HOME-scope
|
|
123
|
-
# entries alone (adopters that customize their own user-scope wiring keep
|
|
124
|
-
# working). Closes <consumer-repo>#1262.
|
|
125
|
-
local lane3_re
|
|
126
|
-
lane3_re=$(printf '%s\n' "${LANE_3_HOOKS[@]}" | sed 's/\.sh$//' | paste -sd'|' -)
|
|
127
|
-
|
|
128
|
-
# Merge every hook entry from every event type. Preserves operator-owned
|
|
129
|
-
# entries. Adds bassclef entries under matching (event, matcher) pairs
|
|
130
|
-
# without duplicating commands. Skips Lane 3 hooks at $CLAUDE_PROJECT_DIR
|
|
131
|
-
# per <consumer-repo>#1262.
|
|
132
|
-
local merged
|
|
133
|
-
merged=$(jq --slurpfile bassclef "$bassclef_settings" --arg lane3re "$lane3_re" '
|
|
134
|
-
. as $adopter
|
|
135
|
-
| ($bassclef[0].hooks // {}) as $bhooks
|
|
136
|
-
| .hooks //= {}
|
|
137
|
-
| reduce ($bhooks | keys[]) as $event (
|
|
138
|
-
.;
|
|
139
|
-
.hooks[$event] //= [] |
|
|
140
|
-
reduce ($bhooks[$event] // [])[] as $bentry (
|
|
141
|
-
.;
|
|
142
|
-
($bentry.matcher // "") as $bmatcher |
|
|
143
|
-
($bentry.hooks // [] | map(select(
|
|
144
|
-
(.command // "") | test("\\$CLAUDE_PROJECT_DIR/\\.claude/hooks/(" + $lane3re + ")\\.sh") | not
|
|
145
|
-
))) as $bhookslist |
|
|
146
|
-
if ($bhookslist | length) == 0 then .
|
|
147
|
-
elif any(.hooks[$event][]; (.matcher // "") == $bmatcher) then
|
|
148
|
-
.hooks[$event] |= map(
|
|
149
|
-
if (.matcher // "") == $bmatcher then
|
|
150
|
-
.hooks //= [] |
|
|
151
|
-
reduce $bhookslist[] as $bhook (
|
|
152
|
-
.;
|
|
153
|
-
if any(.hooks[]; .command == $bhook.command) then .
|
|
154
|
-
else .hooks += [$bhook] end
|
|
155
|
-
)
|
|
156
|
-
else . end
|
|
157
|
-
)
|
|
158
|
-
else
|
|
159
|
-
.hooks[$event] += [{
|
|
160
|
-
"matcher": $bmatcher,
|
|
161
|
-
"hooks": $bhookslist
|
|
162
|
-
} | if .matcher == "" then del(.matcher) else . end]
|
|
163
|
-
end
|
|
164
|
-
)
|
|
165
|
-
)
|
|
166
|
-
' "$adopter_settings" 2>/dev/null)
|
|
167
|
-
|
|
168
|
-
if [ -z "$merged" ]; then
|
|
169
|
-
echo "[bassclef-hook-connect] skip — merge produced empty output" >&2
|
|
170
|
-
return 0
|
|
171
|
-
fi
|
|
172
|
-
|
|
173
|
-
# Atomic replace via tmp file.
|
|
174
|
-
echo "$merged" > "$adopter_settings.tmp" && \
|
|
175
|
-
mv "$adopter_settings.tmp" "$adopter_settings"
|
|
176
|
-
|
|
177
|
-
return 0
|
|
178
|
-
}
|