@thebassclef/lite 1.4.0 → 1.5.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/README.md +1 -1
- 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 +2 -2
- package/dist/lite/.claude/hooks/_lib/wirings.sh +237 -0
- package/dist/lite/.claude/hooks/pre-commit-manifest-autoregen.sh +212 -0
- package/dist/lite/.claude/hooks/session-reflection.d/08-settings-drift.sh +66 -6
- package/dist/lite/.claude/hooks/session-reflection.d/20-artifact-staleness.sh +25 -5
- package/dist/lite/.claude/hooks/session-reflection.d/30-metrics-staleness.sh +11 -0
- package/dist/lite/.claude/hooks/session-reflection.d/60-deferred-actions.sh +2 -1
- package/dist/lite/.claude/hooks/session-reflection.d/80-hook-heartbeat-check.sh +20 -0
- package/dist/lite/.claude/hooks/session-reflection.d/tests/20-artifact-staleness.test.sh +89 -0
- package/dist/lite/.claude/hooks/session-reflection.sh +12 -1
- package/dist/lite/.claude/luminaries/david-farley.md +115 -0
- package/dist/lite/.claude/luminaries/jez-humble.md +124 -0
- package/dist/lite/.claude/luminaries/martin-fowler.md +18 -0
- package/dist/lite/.claude/skills/longrun/SKILL.md +51 -0
- package/dist/lite/.claude/skills/onboard-repo/SKILL.md +39 -11
- package/dist/lite/.claude/skills/provision-deploy-host/SKILL.md +2 -2
- package/dist/lite/lib/ancestor-claude-check.sh +101 -0
- package/dist/lite/lib/fixture-builder.sh +324 -0
- package/dist/lite/lib/mechanism-fidelity.sh +14 -0
- package/dist/lite/lib/workflow-metrics.sh +166 -0
- package/dist/lite/presence/install/bassclef-configs.template.jsonc +76 -0
- package/dist/lite/presence/install/bassclef-sync.template.sh +7 -4
- package/dist/lite/scripts/generate-lite-manifest.sh +151 -1
- package/dist/lite/scripts/workflow-metrics-query.sh +57 -0
- package/dist/lite/standards/lite-manifest-schema-changes.md +24 -0
- package/dist/lite/standards/lite-manifest.json +82 -71
- package/dist/lite/standards/mechanism-fidelity.md +1 -0
- package/dist/lite/standards/substrate-config-schema.md +2 -2
- package/package.json +1 -1
- package/dist/lite/.claude/skills/journal-export/SKILL.md +0 -293
- package/dist/lite/.claude/skills/release/SKILL.md +0 -311
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"tier": "lite",
|
|
3
|
-
"manifest_version": "1.
|
|
4
|
-
"generated_at": "2026-09-
|
|
3
|
+
"manifest_version": "1.9.4",
|
|
4
|
+
"generated_at": "2026-09-21T12:32:12Z",
|
|
5
5
|
"entries": [
|
|
6
6
|
{
|
|
7
7
|
"slug": "029-release-pipeline",
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"type": "hook",
|
|
105
105
|
"path": ".claude/hooks/session-reflection.d/08-settings-drift.sh",
|
|
106
106
|
"tier": "lite",
|
|
107
|
-
"content_hash": "sha256:
|
|
107
|
+
"content_hash": "sha256:8c2884630f16301023b943b08f8e12b17eb1d7ea6e04bec838198dca2ec0ba05",
|
|
108
108
|
"description": "Drift detector — fires at every SessionStart via session-reflection.sh."
|
|
109
109
|
},
|
|
110
110
|
{
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
"type": "hook",
|
|
137
137
|
"path": ".claude/hooks/session-reflection.d/20-artifact-staleness.sh",
|
|
138
138
|
"tier": "lite",
|
|
139
|
-
"content_hash": "sha256:
|
|
139
|
+
"content_hash": "sha256:24d1c0513b88bde625ab0bdbd7e4bd6678cdfc47ba76900bc06e3fbfe543f24c",
|
|
140
140
|
"description": "Artifact-staleness checks: chronicle, danger-mode summary,"
|
|
141
141
|
},
|
|
142
142
|
{
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
"type": "hook",
|
|
145
145
|
"path": ".claude/hooks/session-reflection.d/30-metrics-staleness.sh",
|
|
146
146
|
"tier": "lite",
|
|
147
|
-
"content_hash": "sha256:
|
|
147
|
+
"content_hash": "sha256:a4b2f436c218c15230c126fa2f2748fca36cdf9778185cab90a8aac4a6416f41",
|
|
148
148
|
"description": "Metrics-staleness check: version tags, iteration closeouts, metrics"
|
|
149
149
|
},
|
|
150
150
|
{
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
"type": "hook",
|
|
209
209
|
"path": ".claude/hooks/session-reflection.d/60-deferred-actions.sh",
|
|
210
210
|
"tier": "lite",
|
|
211
|
-
"content_hash": "sha256:
|
|
211
|
+
"content_hash": "sha256:ae167ab6b1626b9155a0539618678ca7a08d1f619cb054f94476df3ad9f7dff9",
|
|
212
212
|
"description": "Deferred-actions scan: enumerate docs/deferred-actions/*.md, detect current"
|
|
213
213
|
},
|
|
214
214
|
{
|
|
@@ -232,7 +232,7 @@
|
|
|
232
232
|
"type": "hook",
|
|
233
233
|
"path": ".claude/hooks/session-reflection.d/80-hook-heartbeat-check.sh",
|
|
234
234
|
"tier": "lite",
|
|
235
|
-
"content_hash": "sha256:
|
|
235
|
+
"content_hash": "sha256:9f20ebd080a1a7364fe6e6c16266547b56b95c820297310cdd5be559852bab5f",
|
|
236
236
|
"description": "Hook heartbeat check — reads standards/hook-cadence.json, calls"
|
|
237
237
|
},
|
|
238
238
|
{
|
|
@@ -339,14 +339,6 @@
|
|
|
339
339
|
"content_hash": "sha256:6981fedc02dc0b683db7872519e06bd16b68fd346a2e566a7e8503f28822db10",
|
|
340
340
|
"description": "bassclef-source-config-validate.sh — PreToolUse hook validating"
|
|
341
341
|
},
|
|
342
|
-
{
|
|
343
|
-
"slug": "bassclef-sync",
|
|
344
|
-
"type": "hook",
|
|
345
|
-
"path": ".claude/hooks/bassclef-sync.sh",
|
|
346
|
-
"tier": "lite",
|
|
347
|
-
"content_hash": "sha256:03c813d942e42a8a4a37744e3cb14219fa4364ce18e2269957dc3a2f954fa983",
|
|
348
|
-
"description": "Bassclef Substrate Sync — fires on SessionStart."
|
|
349
|
-
},
|
|
350
342
|
{
|
|
351
343
|
"slug": "bet-doc-gate",
|
|
352
344
|
"type": "hook",
|
|
@@ -547,6 +539,14 @@
|
|
|
547
539
|
"content_hash": "sha256:38665938cb3bac6d249d94b814cc3f43600456abcbb045bff5a5d0d0128a7cbb",
|
|
548
540
|
"description": "PreToolUse: Bash"
|
|
549
541
|
},
|
|
542
|
+
{
|
|
543
|
+
"slug": "pre-commit-manifest-autoregen",
|
|
544
|
+
"type": "hook",
|
|
545
|
+
"path": ".claude/hooks/pre-commit-manifest-autoregen.sh",
|
|
546
|
+
"tier": "lite",
|
|
547
|
+
"content_hash": "sha256:b3641c5c2402fdedb9fb23b812548e94809dcc732e8d5e19af4fd5b488b023e0",
|
|
548
|
+
"description": "PreToolUse: Bash"
|
|
549
|
+
},
|
|
550
550
|
{
|
|
551
551
|
"slug": "pre-gh-pr-body-scrub",
|
|
552
552
|
"type": "hook",
|
|
@@ -592,7 +592,7 @@
|
|
|
592
592
|
"type": "hook",
|
|
593
593
|
"path": ".claude/hooks/session-reflection.sh",
|
|
594
594
|
"tier": "lite",
|
|
595
|
-
"content_hash": "sha256:
|
|
595
|
+
"content_hash": "sha256:ece32cd8261bafe4597563aa18237b504bba335c0a1e8d94e1d8d69f4a8e97ae",
|
|
596
596
|
"description": "Session Start hook coordinator. Injects reflection prompt and iterates"
|
|
597
597
|
},
|
|
598
598
|
{
|
|
@@ -699,6 +699,22 @@
|
|
|
699
699
|
"content_hash": "sha256:867d05c8da773e8aef3d077ec7c171d8e9a208b579596f77dd73e18cc8fcf2e2",
|
|
700
700
|
"description": "whereami-utc-gate.sh — PreToolUse hook that BLOCKs Edit|Write|MultiEdit"
|
|
701
701
|
},
|
|
702
|
+
{
|
|
703
|
+
"slug": "wirings",
|
|
704
|
+
"type": "hook",
|
|
705
|
+
"path": ".claude/hooks/_lib/wirings.sh",
|
|
706
|
+
"tier": "lite",
|
|
707
|
+
"content_hash": "sha256:65fb14b5c7b4a919516c96f4587b492d5eb3bcf6f939bbc7c1809205de49498d",
|
|
708
|
+
"description": "Shared accessor library for hook-wiring inspection."
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
"slug": "ancestor-claude-check",
|
|
712
|
+
"type": "lib",
|
|
713
|
+
"path": "lib/ancestor-claude-check.sh",
|
|
714
|
+
"tier": "lite",
|
|
715
|
+
"content_hash": "sha256:f84c7b57ae28ef15b0c4c138ee4781030e04e7bb858ff0c53a80a538672d64dd",
|
|
716
|
+
"description": "ancestor-claude-check.sh — walks up from a starting directory to $HOME"
|
|
717
|
+
},
|
|
702
718
|
{
|
|
703
719
|
"slug": "bassclef-dir-resolver",
|
|
704
720
|
"type": "lib",
|
|
@@ -752,7 +768,7 @@
|
|
|
752
768
|
"type": "lib",
|
|
753
769
|
"path": "lib/fixture-builder.sh",
|
|
754
770
|
"tier": "lite",
|
|
755
|
-
"content_hash": "sha256:
|
|
771
|
+
"content_hash": "sha256:5831bcd49c162ec131cf14d402150821bd8f623e87eb3c1bcdc545fc701aaefd",
|
|
756
772
|
"description": "Deep module for adopter-environment fixtures used by bassclef Tier 0 tests."
|
|
757
773
|
},
|
|
758
774
|
{
|
|
@@ -808,7 +824,7 @@
|
|
|
808
824
|
"type": "lib",
|
|
809
825
|
"path": "lib/mechanism-fidelity.sh",
|
|
810
826
|
"tier": "lite",
|
|
811
|
-
"content_hash": "sha256:
|
|
827
|
+
"content_hash": "sha256:3253ce24b845e601486dea9dab4a9e27d11f7fc72f5b9084ab5fb473bea84826",
|
|
812
828
|
"description": "lib/mechanism-fidelity.sh — shared scanner for the mechanism-fidelity"
|
|
813
829
|
},
|
|
814
830
|
{
|
|
@@ -899,6 +915,14 @@
|
|
|
899
915
|
"content_hash": "sha256:7ee5cc3c7372ca6aef3c81f614ec119ffed8874e00a78d441ce8d0304c7b6308",
|
|
900
916
|
"description": "lib/tier-dependency-audit.sh"
|
|
901
917
|
},
|
|
918
|
+
{
|
|
919
|
+
"slug": "workflow-metrics",
|
|
920
|
+
"type": "lib",
|
|
921
|
+
"path": "lib/workflow-metrics.sh",
|
|
922
|
+
"tier": "lite",
|
|
923
|
+
"content_hash": "sha256:4615d673185021f484887b6a674b08f209e8f93db195189f77aff58c618ccf3e",
|
|
924
|
+
"description": "Workflow metrics measurement library — Module B4 per"
|
|
925
|
+
},
|
|
902
926
|
{
|
|
903
927
|
"slug": "alan-cooper",
|
|
904
928
|
"type": "luminary",
|
|
@@ -971,6 +995,14 @@
|
|
|
971
995
|
"content_hash": "sha256:ec2bb153111b28d5f505825f107fb0ac5da354a4cc3a6a474e1d1b153c81eafb",
|
|
972
996
|
"description": "\\\"The whole idea was to imagine what it's like to be inside someone else's head."
|
|
973
997
|
},
|
|
998
|
+
{
|
|
999
|
+
"slug": "david-farley",
|
|
1000
|
+
"type": "luminary",
|
|
1001
|
+
"path": ".claude/luminaries/david-farley.md",
|
|
1002
|
+
"tier": "lite",
|
|
1003
|
+
"content_hash": "sha256:db45f22a2e893137ad0a09ed7a090dc145b3e92dd0c3a5db718e63305921ca91",
|
|
1004
|
+
"description": "Continuous Delivery co-author; deployment pipeline mechanics; author of Modern Software Engineering."
|
|
1005
|
+
},
|
|
974
1006
|
{
|
|
975
1007
|
"slug": "david-ogilvy",
|
|
976
1008
|
"type": "luminary",
|
|
@@ -1067,6 +1099,14 @@
|
|
|
1067
1099
|
"content_hash": "sha256:8275c70d25fb8e8acad9dc68ade399993d5f1432ae82449fe14db8533342fd70",
|
|
1068
1100
|
"description": "\\\"Every user experience has five planes: strategy, scope, structure, skeleton, surface."
|
|
1069
1101
|
},
|
|
1102
|
+
{
|
|
1103
|
+
"slug": "jez-humble",
|
|
1104
|
+
"type": "luminary",
|
|
1105
|
+
"path": ".claude/luminaries/jez-humble.md",
|
|
1106
|
+
"tier": "lite",
|
|
1107
|
+
"content_hash": "sha256:312d4e5cbf21824a50f120c9f7b54b30e00afb4b33782537eda67500269fb7f3",
|
|
1108
|
+
"description": "Continuous Delivery co-author; deployment pipeline framework; DORA metrics researcher."
|
|
1109
|
+
},
|
|
1070
1110
|
{
|
|
1071
1111
|
"slug": "john-ousterhout",
|
|
1072
1112
|
"type": "luminary",
|
|
@@ -1128,7 +1168,7 @@
|
|
|
1128
1168
|
"type": "luminary",
|
|
1129
1169
|
"path": ".claude/luminaries/martin-fowler.md",
|
|
1130
1170
|
"tier": "lite",
|
|
1131
|
-
"content_hash": "sha256:
|
|
1171
|
+
"content_hash": "sha256:c81089dbc3aaeb9d67a91cf19517571452ecc6505fe6ffd065e4029698ae39ec",
|
|
1132
1172
|
"description": "\\\"Any fool can write code that a computer can understand."
|
|
1133
1173
|
},
|
|
1134
1174
|
{
|
|
@@ -1227,6 +1267,13 @@
|
|
|
1227
1267
|
"content_hash": "sha256:9b5d51d106b5f4398c15c1412c781b81f2cde55fecc294c120479a06b8de92a9",
|
|
1228
1268
|
"description": "\\\"A bad system will beat a good person every time.\\\""
|
|
1229
1269
|
},
|
|
1270
|
+
{
|
|
1271
|
+
"slug": "bassclef-configs-template-jsonc",
|
|
1272
|
+
"type": "presence-template",
|
|
1273
|
+
"path": "presence/install/bassclef-configs.template.jsonc",
|
|
1274
|
+
"tier": "lite",
|
|
1275
|
+
"content_hash": "sha256:e796b9736e9b00468822bfed2e2cdbed220c25ee8541f66fe7b743fe50d1a893"
|
|
1276
|
+
},
|
|
1230
1277
|
{
|
|
1231
1278
|
"slug": "bassclef-hook-connect",
|
|
1232
1279
|
"type": "presence-template",
|
|
@@ -1248,7 +1295,7 @@
|
|
|
1248
1295
|
"type": "presence-template",
|
|
1249
1296
|
"path": "presence/install/bassclef-sync.template.sh",
|
|
1250
1297
|
"tier": "lite",
|
|
1251
|
-
"content_hash": "sha256:
|
|
1298
|
+
"content_hash": "sha256:0a689f73d94bb78d1a3e7fdb3cda760e093db1d7536548cb05cf3a9ea9fb4c6c",
|
|
1252
1299
|
"description": "description: BASSCLEF_SYNC_VERSION=2026-09-06-1496-sessionstart-heal-v1"
|
|
1253
1300
|
},
|
|
1254
1301
|
{
|
|
@@ -1958,7 +2005,7 @@
|
|
|
1958
2005
|
"type": "script",
|
|
1959
2006
|
"path": "scripts/generate-lite-manifest.sh",
|
|
1960
2007
|
"tier": "lite",
|
|
1961
|
-
"content_hash": "sha256:
|
|
2008
|
+
"content_hash": "sha256:6342c768c91af054a4dcb6ea3e63228f0c7b4ff0e188867026fe0cdd333e3fe5",
|
|
1962
2009
|
"description": "Generate lite-manifest.json at repo root."
|
|
1963
2010
|
},
|
|
1964
2011
|
{
|
|
@@ -1993,6 +2040,14 @@
|
|
|
1993
2040
|
"content_hash": "sha256:30dc5eaff11fafc08b0845d8c4ce329a51b6ca0e89136638d335b58af41c7c0f",
|
|
1994
2041
|
"description": "Render human-readable companion doc from lite-manifest.json."
|
|
1995
2042
|
},
|
|
2043
|
+
{
|
|
2044
|
+
"slug": "workflow-metrics-query",
|
|
2045
|
+
"type": "script",
|
|
2046
|
+
"path": "scripts/workflow-metrics-query.sh",
|
|
2047
|
+
"tier": "lite",
|
|
2048
|
+
"content_hash": "sha256:9d9ad4a997e2820046802796f81a5d064b14f951cdade6f6c252db64d2afae89",
|
|
2049
|
+
"description": "CLI wrapper for lib/workflow-metrics.sh — Module B4 query helper."
|
|
2050
|
+
},
|
|
1996
2051
|
{
|
|
1997
2052
|
"slug": "agent-research-spawn",
|
|
1998
2053
|
"type": "skill",
|
|
@@ -2434,24 +2489,6 @@
|
|
|
2434
2489
|
"problem": "Session work fades from memory. Insight worth sharing with PE partners or eng leaders never gets written.",
|
|
2435
2490
|
"value": "Drafts a journal entry from this session's work. Tuned for PE, search, and board audiences."
|
|
2436
2491
|
},
|
|
2437
|
-
{
|
|
2438
|
-
"slug": "journal-export",
|
|
2439
|
-
"type": "skill",
|
|
2440
|
-
"path": ".claude/skills/journal-export/SKILL.md",
|
|
2441
|
-
"tier": "lite",
|
|
2442
|
-
"content_hash": "sha256:e63ffd119880230749701b9e484538bfe4a766a8e53ab2778c03f0cdb0762bc9",
|
|
2443
|
-
"description": "Generate a structured journal-entry corpus for a brand team or your own archive — chronicle digest, draft index, moment inventory. Supports incremental updates.",
|
|
2444
|
-
"inputs": [
|
|
2445
|
-
"Time range or theme filter"
|
|
2446
|
-
],
|
|
2447
|
-
"outputs": [
|
|
2448
|
-
"Corpus JSON",
|
|
2449
|
-
"Google Doc export",
|
|
2450
|
-
"Archive-ready file"
|
|
2451
|
-
],
|
|
2452
|
-
"problem": "Journal drafts pile up locally. Brand teams and archives don't get them systematically.",
|
|
2453
|
-
"value": "Structured journal-entry corpus for a brand team or your own archive. Chronicle digest included."
|
|
2454
|
-
},
|
|
2455
2492
|
{
|
|
2456
2493
|
"slug": "jtbd-tasks",
|
|
2457
2494
|
"type": "skill",
|
|
@@ -2535,7 +2572,7 @@
|
|
|
2535
2572
|
"type": "skill",
|
|
2536
2573
|
"path": ".claude/skills/longrun/SKILL.md",
|
|
2537
2574
|
"tier": "lite",
|
|
2538
|
-
"content_hash": "sha256:
|
|
2575
|
+
"content_hash": "sha256:e11e395721186c5e5021266723b942ac8f330f17bff4b495adf316d05674ac01",
|
|
2539
2576
|
"description": "Run a long autonomous session that paces itself. Prepares scope. Checkpoints at phase boundaries. Closes with session log and retrospective. Three modes: prep, checkpoint, closeout.",
|
|
2540
2577
|
"composes_with": [
|
|
2541
2578
|
"value-prop",
|
|
@@ -2620,7 +2657,7 @@
|
|
|
2620
2657
|
"type": "skill",
|
|
2621
2658
|
"path": ".claude/skills/onboard-repo/SKILL.md",
|
|
2622
2659
|
"tier": "lite",
|
|
2623
|
-
"content_hash": "sha256:
|
|
2660
|
+
"content_hash": "sha256:ff92c1539bbad449bbdcfc85430963ceeda8cae67a2eded953bc95dff24a3c75",
|
|
2624
2661
|
"description": "Bootstrap the bassclef framework in a new repo. Installs the sync hook. Scaffolds config, whereami, and CLAUDE.md. Modes: default, --with-deploy-host, --with-secrets, --full, --greenfield-from-intent (cold-adopter magic demo).",
|
|
2625
2662
|
"inputs": [
|
|
2626
2663
|
"Optional flags — --with-deploy-host or --with-secrets or --full"
|
|
@@ -2749,7 +2786,7 @@
|
|
|
2749
2786
|
"type": "skill",
|
|
2750
2787
|
"path": ".claude/skills/provision-deploy-host/SKILL.md",
|
|
2751
2788
|
"tier": "lite",
|
|
2752
|
-
"content_hash": "sha256:
|
|
2789
|
+
"content_hash": "sha256:0fca55a7f73e23e0eee612597c9718ea58d020ddd61f81c3143f4ab8791a92a7",
|
|
2753
2790
|
"description": "Run the consumer onboarding chain — read bassclef-platform.yml plus verify secrets, extend GHA scope, run aws amplify create-app with console-pivot fallback, open the consumer config PR, write an audit row. Replaces the 5-step flow.",
|
|
2754
2791
|
"inputs": [
|
|
2755
2792
|
"Consumer name and target host"
|
|
@@ -2780,32 +2817,6 @@
|
|
|
2780
2817
|
"problem": "Trivial bugs get over-ceremonied by full /diagnose. Small edits shouldn't need the whole chain.",
|
|
2781
2818
|
"value": "Compressed fix workflow for trivial bugs. Operator-in-loop with stated entry criteria."
|
|
2782
2819
|
},
|
|
2783
|
-
{
|
|
2784
|
-
"slug": "release",
|
|
2785
|
-
"type": "skill",
|
|
2786
|
-
"path": ".claude/skills/release/SKILL.md",
|
|
2787
|
-
"tier": "lite",
|
|
2788
|
-
"content_hash": "sha256:17b931a7a5d3b69f57bc76f995af5c5c7a967df0389719c9fcbfc7f6677d09a9",
|
|
2789
|
-
"description": "Ship framework files from bassclef-upstream to public bassclef, filtered by tier. Dry-runs first, reports tier counts plus andon scan plus sibling smoke evidence. On operator confirm runs the live release and opens a PR. Per ADR-029.",
|
|
2790
|
-
"composes_with": [
|
|
2791
|
-
"verify",
|
|
2792
|
-
"state-a-problem",
|
|
2793
|
-
"value-prop",
|
|
2794
|
-
"kiss"
|
|
2795
|
-
],
|
|
2796
|
-
"inputs": [
|
|
2797
|
-
"Optional tier filter",
|
|
2798
|
-
"Dry-run or apply flag"
|
|
2799
|
-
],
|
|
2800
|
-
"outputs": [
|
|
2801
|
-
"Files shipped",
|
|
2802
|
-
"Dry-run diff",
|
|
2803
|
-
"Public PR",
|
|
2804
|
-
"Tag drop"
|
|
2805
|
-
],
|
|
2806
|
-
"problem": "Framework files ship from upstream to public bassclef through many manual steps. Dry-run catches slip past.",
|
|
2807
|
-
"value": "Ships framework files from bassclef-upstream to public bassclef. Filtered by tier. Dry-runs first."
|
|
2808
|
-
},
|
|
2809
2820
|
{
|
|
2810
2821
|
"slug": "release-notes",
|
|
2811
2822
|
"type": "skill",
|
|
@@ -3726,7 +3737,7 @@
|
|
|
3726
3737
|
"type": "standard",
|
|
3727
3738
|
"path": "standards/lite-manifest-schema-changes.md",
|
|
3728
3739
|
"tier": "lite",
|
|
3729
|
-
"content_hash": "sha256:
|
|
3740
|
+
"content_hash": "sha256:ba7d81b68af60e4df0e46fd7e0bb52ff756eaa13baf42b0dc679db37521b70a5",
|
|
3730
3741
|
"description": "Chronological ledger of every lite-manifest schema change. Adopters read this before sync to know what shifted."
|
|
3731
3742
|
},
|
|
3732
3743
|
{
|
|
@@ -3750,7 +3761,7 @@
|
|
|
3750
3761
|
"type": "standard",
|
|
3751
3762
|
"path": "standards/mechanism-fidelity.md",
|
|
3752
3763
|
"tier": "lite",
|
|
3753
|
-
"content_hash": "sha256:
|
|
3764
|
+
"content_hash": "sha256:e0b14abf4a0331c96c488d52c6e3067f827b6ef4d506c19c83616184c53c3642",
|
|
3754
3765
|
"description": "- ADR-035 — names the substrate-as-system foundational tenet that this standard's audit method verifies - architecture/audits/2026-06-24-closeout.md — bet 24c architect-review that missed this class; this standard's audit fills the lens-gap and…"
|
|
3755
3766
|
},
|
|
3756
3767
|
{
|
|
@@ -4014,7 +4025,7 @@
|
|
|
4014
4025
|
"type": "standard",
|
|
4015
4026
|
"path": "standards/substrate-config-schema.md",
|
|
4016
4027
|
"tier": "lite",
|
|
4017
|
-
"content_hash": "sha256:
|
|
4028
|
+
"content_hash": "sha256:dff6bec2527dfa1cb899fd907b4f802bd4ce7a1e4bb9621bdf3cdfcc05601804",
|
|
4018
4029
|
"description": "substrate.config.md is the single source of truth for external resource references in any bassclef-substrate repo."
|
|
4019
4030
|
},
|
|
4020
4031
|
{
|
|
@@ -67,6 +67,7 @@ The class fires when one or more of these hold:
|
|
|
67
67
|
| `NOT-WIRED-BY-DESIGN-CI` | Hook lives on disk and is referenced from `.github/workflows/*.yml`; settings.json is not the right home for it | `pr-body-scrub-check.sh`, `pr-body-loop-discipline-check.sh` |
|
|
68
68
|
| `NOT-WIRED-BY-DESIGN-LAUNCHD` | Hook is scheduled by macOS launchd (or cron); header comment names the scheduler; settings.json is not the right home | `auto-save-idle.sh` |
|
|
69
69
|
| `NOT-WIRED-BY-DESIGN-LIB` | File is sourced by other hooks (library role); header comment says "sourced by"; settings.json is not the right home | `trace-helper.sh` |
|
|
70
|
+
| `NOT-WIRED-BY-DESIGN-EXCLUSIONS` | Hook basename is listed in `presence/install/template-hook-exclusions.txt`; wired in bassclef-upstream settings.json but intentionally absent from the adopter-shipped template (bassclef-team-only or upstream-only substrate) | `lite-skill-key-gate-check.sh`, `user-global-hook-ref-guard-check.sh` |
|
|
70
71
|
| `CLEAN` | All chain steps pass | most existing rules (audit will surface count) |
|
|
71
72
|
|
|
72
73
|
## The 5-step verification chain
|
|
@@ -83,7 +83,7 @@ uncommented defaults shown.
|
|
|
83
83
|
# === Artifacts ===
|
|
84
84
|
journal_doc_id: [per-repo draft Google Doc — pushes from /journal + session-end]
|
|
85
85
|
changelog_doc_id: [per-repo weekly changelog Google Doc — pushes from /release-notes]
|
|
86
|
-
brand_corpus_doc_id: [cross-repo brand team corpus — pushes from
|
|
86
|
+
brand_corpus_doc_id: [cross-repo brand team corpus — pushes from an operator export skill]
|
|
87
87
|
|
|
88
88
|
# === Environments ===
|
|
89
89
|
deploy_targets:
|
|
@@ -213,7 +213,7 @@ reference the raw ID directly.
|
|
|
213
213
|
|
|
214
214
|
### Anti-pattern 2: hardcoded IDs in skills
|
|
215
215
|
|
|
216
|
-
**Before** (in
|
|
216
|
+
**Before** (in a skill body):
|
|
217
217
|
```bash
|
|
218
218
|
npx tsx scripts/push-to-gdoc.ts \
|
|
219
219
|
--file docs/journal-corpus/corpus.md \
|
package/package.json
CHANGED
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
name: journal-export
|
|
4
|
-
description: "Generate a structured journal-entry corpus for a brand team or your own archive \u2014 chronicle digest, draft index, moment inventory. Supports incremental updates."
|
|
5
|
-
problem: "Journal drafts pile up locally. Brand teams and archives don't get them systematically."
|
|
6
|
-
value: "Structured journal-entry corpus for a brand team or your own archive. Chronicle digest included."
|
|
7
|
-
inputs: [Time range or theme filter]
|
|
8
|
-
outputs: [Corpus JSON, Google Doc export, Archive-ready file]
|
|
9
|
-
user_invocable: true
|
|
10
|
-
disable_model_invocation: false
|
|
11
|
-
requires:
|
|
12
|
-
files: [standards/writing-guide.md]
|
|
13
|
-
network: true
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
# /journal export — Journal-Entry Corpus
|
|
17
|
-
|
|
18
|
-
Generate a structured content corpus from session chronicles and existing
|
|
19
|
-
drafts. The corpus gives the brand team everything they need to produce
|
|
20
|
-
journal entries without understanding the codebase.
|
|
21
|
-
|
|
22
|
-
## Usage
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
/journal export → full generation (first run or rebuild)
|
|
26
|
-
/journal export incremental → update with new sessions since last export
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## What the corpus contains
|
|
30
|
-
|
|
31
|
-
### 1. Chronicle digest
|
|
32
|
-
|
|
33
|
-
Every session summarized in ~150 words:
|
|
34
|
-
- Date and repo
|
|
35
|
-
- Theme tags (governance, reliability, design, constraint, methodology, product)
|
|
36
|
-
- Key moment (the single most compelling thing that happened)
|
|
37
|
-
- Quotable decision or insight (one sentence a brand team member can latch onto)
|
|
38
|
-
- Audience fit (Board/PE, Engineering, or both)
|
|
39
|
-
|
|
40
|
-
### 2. Draft index
|
|
41
|
-
|
|
42
|
-
Every existing journal entry with:
|
|
43
|
-
- Date and source repo
|
|
44
|
-
- Topic/title
|
|
45
|
-
- Variant (A: Board or B: Engineering)
|
|
46
|
-
- Angle taken
|
|
47
|
-
- Status (drafted / published / held)
|
|
48
|
-
- Hook strength assessment
|
|
49
|
-
|
|
50
|
-
### 3. Moment inventory
|
|
51
|
-
|
|
52
|
-
Pre-mined moments across major themes. Each moment has:
|
|
53
|
-
- Date, repo, session title
|
|
54
|
-
- What happened (2-3 sentences)
|
|
55
|
-
- Why it matters as a journal entry (tension, stakes, surprise, result)
|
|
56
|
-
- Audience fit and hook strength
|
|
57
|
-
- Whether an existing draft already covers this angle
|
|
58
|
-
|
|
59
|
-
### 4. Writing guide bundle
|
|
60
|
-
|
|
61
|
-
Packaged for external handoff:
|
|
62
|
-
- `standards/writing-guide.md` content (journal-entry style guide)
|
|
63
|
-
- Audience definitions (PE/board vs. engineering variants)
|
|
64
|
-
- Vocabulary rules (concept names, not implementation details)
|
|
65
|
-
- Post structure (Hook → Setup → Body → Takeaway)
|
|
66
|
-
|
|
67
|
-
## Procedure
|
|
68
|
-
|
|
69
|
-
### Step 1: Locate all sources
|
|
70
|
-
|
|
71
|
-
```
|
|
72
|
-
Chronicles:
|
|
73
|
-
~/src/sunj-labs/bassclef/chronicle/
|
|
74
|
-
~/src/your-org/your-app/docs/chronicle/
|
|
75
|
-
~/src/your-org/your-second-app/docs/chronicle/
|
|
76
|
-
|
|
77
|
-
Existing drafts:
|
|
78
|
-
~/src/sunj-labs/bassclef/docs/operator-private/journals/
|
|
79
|
-
~/src/your-org/your-app/docs/operator-private/journals/
|
|
80
|
-
~/src/your-org/your-app/docs/operator-private/journals/legacy/ (pre-substrate content)
|
|
81
|
-
|
|
82
|
-
Writing guide:
|
|
83
|
-
~/src/sunj-labs/bassclef/standards/writing-guide.md
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### Step 2: Check for previous export
|
|
87
|
-
|
|
88
|
-
Look for `docs/journal-corpus/` in bassclef. If it exists and the
|
|
89
|
-
mode is `incremental`:
|
|
90
|
-
- Read `docs/journal-corpus/last-export.md` for the last export date
|
|
91
|
-
- Only process chronicles and drafts newer than that date
|
|
92
|
-
- Append to existing corpus sections
|
|
93
|
-
|
|
94
|
-
If full mode or no previous export: generate everything from scratch.
|
|
95
|
-
|
|
96
|
-
### Step 3: Read all chronicles
|
|
97
|
-
|
|
98
|
-
For each chronicle:
|
|
99
|
-
1. Read the full file
|
|
100
|
-
2. Extract: date, repo, title, tags, key decisions, notable moments
|
|
101
|
-
3. Assign theme tags from this list:
|
|
102
|
-
- **governance**: rules, gates, guardrails, permissions, ADRs, hooks
|
|
103
|
-
- **reliability**: failures, diagnosis, fixes, what broke, resilience
|
|
104
|
-
- **design**: luminaries, prototypes, visual review, UX migration, taste
|
|
105
|
-
- **constraint**: budget, time budget, scope kills, trade-offs, real stakes
|
|
106
|
-
- **methodology**: SDLC, choreography, skills, agents, substrate, process
|
|
107
|
-
- **product**: features built, user-facing outcomes, family use, deals
|
|
108
|
-
- **infrastructure**: deployment, CI/CD, bassclef sync, tooling
|
|
109
|
-
4. Identify the key moment (strongest journal-worthy content)
|
|
110
|
-
5. Rate audience fit and hook strength
|
|
111
|
-
|
|
112
|
-
### Step 4: Read all existing drafts
|
|
113
|
-
|
|
114
|
-
For each draft:
|
|
115
|
-
1. Read the file
|
|
116
|
-
2. Extract: date, topic/title, variant, audience, angle
|
|
117
|
-
3. Note status (drafts in legacy/ are "pre-substrate")
|
|
118
|
-
|
|
119
|
-
### Step 5: Pre-mine major themes
|
|
120
|
-
|
|
121
|
-
Run theme matching (same logic as `/journal mine`) for these themes:
|
|
122
|
-
- "The autonomous SDLC journey"
|
|
123
|
-
- "Governance that scales"
|
|
124
|
-
- "Building under constraint"
|
|
125
|
-
- "Design taste in AI agents"
|
|
126
|
-
- "What broke"
|
|
127
|
-
- "From zero to production"
|
|
128
|
-
|
|
129
|
-
Surface top 3-5 moments per theme.
|
|
130
|
-
|
|
131
|
-
### Step 6: Assemble the corpus
|
|
132
|
-
|
|
133
|
-
Write to `docs/journal-corpus/`:
|
|
134
|
-
|
|
135
|
-
```
|
|
136
|
-
docs/journal-corpus/
|
|
137
|
-
corpus.md # main document — digest + index + inventory
|
|
138
|
-
last-export.md # metadata for incremental updates
|
|
139
|
-
writing-guide.md # copy of standards/writing-guide.md for handoff
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
**corpus.md** structure:
|
|
143
|
-
|
|
144
|
-
```markdown
|
|
145
|
-
# Content Corpus — <your-org>
|
|
146
|
-
|
|
147
|
-
Generated: YYYY-MM-DD
|
|
148
|
-
Sessions covered: N (Dec 2025 - [latest])
|
|
149
|
-
Repos: <list-the-repos-you-mine-chronicles-from>
|
|
150
|
-
|
|
151
|
-
## How to use this document
|
|
152
|
-
|
|
153
|
-
This corpus contains the raw material for journal-entry content. Each session
|
|
154
|
-
is summarized with theme tags and a key moment. To write a post:
|
|
155
|
-
|
|
156
|
-
1. Pick a theme or topic you want to write about
|
|
157
|
-
2. Find moments that serve that theme (use the theme index below)
|
|
158
|
-
3. Pick the strongest moment
|
|
159
|
-
4. Draft a standalone post — every post must work on its own,
|
|
160
|
-
even if it covers a theme you've posted about before
|
|
161
|
-
|
|
162
|
-
## Chronicle digest
|
|
163
|
-
|
|
164
|
-
### [Repo name]
|
|
165
|
-
|
|
166
|
-
| Date | Title | Themes | Key moment | Audience | Hook |
|
|
167
|
-
|------|-------|--------|-----------|----------|------|
|
|
168
|
-
| ... | ... | ... | ... | ... | ... |
|
|
169
|
-
|
|
170
|
-
[For each session, a ~150 word summary follows the table]
|
|
171
|
-
|
|
172
|
-
## Draft index
|
|
173
|
-
|
|
174
|
-
| Date | Repo | Title | Variant | Audience | Angle | Status |
|
|
175
|
-
|------|------|-------|---------|----------|-------|--------|
|
|
176
|
-
| ... | ... | ... | ... | ... | ... | ... |
|
|
177
|
-
|
|
178
|
-
## Moment inventory by theme
|
|
179
|
-
|
|
180
|
-
### [Theme name]
|
|
181
|
-
|
|
182
|
-
| # | Date | Repo | Moment | Why it's strong | Hook |
|
|
183
|
-
|---|------|------|--------|-----------------|------|
|
|
184
|
-
| ... | ... | ... | ... | ... | ... |
|
|
185
|
-
|
|
186
|
-
[Repeated for each theme]
|
|
187
|
-
|
|
188
|
-
## Writing guide
|
|
189
|
-
|
|
190
|
-
[Full writing guide content]
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
### Step 7: Push to Google Docs
|
|
194
|
-
|
|
195
|
-
Push the corpus to the brand team corpus doc. Read the doc ID from
|
|
196
|
-
bassclef's `substrate.config.md` field `brand_corpus_doc_id` — never
|
|
197
|
-
hardcode (per `standards/substrate-config-schema.md`):
|
|
198
|
-
|
|
199
|
-
```bash
|
|
200
|
-
DOC_ID=$(grep "^brand_corpus_doc_id:" substrate.config.md | awk '{print $2}')
|
|
201
|
-
npx tsx ~/src/your-org/your-app/scripts/push-to-gdoc.ts \
|
|
202
|
-
--file docs/journal-corpus/corpus.md --replace \
|
|
203
|
-
--doc-id "$DOC_ID"
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
Use `--replace` to clear the doc first and re-push the full corpus
|
|
207
|
-
(appending accumulates duplicates over time).
|
|
208
|
-
|
|
209
|
-
The brand team corpus doc is separate from per-repo draft docs. It
|
|
210
|
-
contains session digests, moment inventory, and writing guide — not
|
|
211
|
-
the full post drafts. The per-repo drafts push separately at session-
|
|
212
|
-
end using each repo's `journal_doc_id`.
|
|
213
|
-
|
|
214
|
-
All doc IDs live in `substrate.config.md` — never hardcoded here,
|
|
215
|
-
never stored in memory. See `standards/substrate-config-schema.md`
|
|
216
|
-
for the bassclef field convention.
|
|
217
|
-
|
|
218
|
-
### Step 7a: Defer push when capabilities missing
|
|
219
|
-
|
|
220
|
-
If `brand_corpus_doc_id` is configured but this session cannot push
|
|
221
|
-
(missing `gcloud-auth` / `google-docs-write` — ephemeral-mobile,
|
|
222
|
-
cloud-web, or desktop without the SA key), DO NOT silently skip. Write
|
|
223
|
-
a deferred-action entry:
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
TS=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
|
|
227
|
-
ID="${TS}-journal-export-corpus-push"
|
|
228
|
-
cp templates/deferred-action-template.md \
|
|
229
|
-
"docs/deferred-actions/${ID}.md"
|
|
230
|
-
# Fill frontmatter:
|
|
231
|
-
# pending_action: push-brand-corpus-to-gdoc
|
|
232
|
-
# requires_capability: [gcloud-auth, google-docs-write]
|
|
233
|
-
# priority: medium
|
|
234
|
-
# origin_skill: /journal-export
|
|
235
|
-
# resolves_when: |
|
|
236
|
-
# Brand corpus doc <brand_corpus_doc_id> reflects docs/journal-corpus/corpus.md
|
|
237
|
-
# Body should cross-ref the corpus file + last-export.md.
|
|
238
|
-
git add "docs/deferred-actions/${ID}.md"
|
|
239
|
-
git commit -m "chore: defer journal-export corpus-push"
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
See `.claude/rules/deferred-actions.md` and
|
|
243
|
-
`standards/deferred-actions-schema.md`.
|
|
244
|
-
|
|
245
|
-
### Step 8: Record metadata
|
|
246
|
-
|
|
247
|
-
Write `docs/journal-corpus/last-export.md`:
|
|
248
|
-
|
|
249
|
-
```markdown
|
|
250
|
-
---
|
|
251
|
-
last_export: YYYY-MM-DD
|
|
252
|
-
sessions_covered: N
|
|
253
|
-
repos: [<list of mined repos>]
|
|
254
|
-
chronicles_processed: N
|
|
255
|
-
drafts_indexed: N
|
|
256
|
-
themes_mined: N
|
|
257
|
-
---
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
## Incremental mode
|
|
261
|
-
|
|
262
|
-
When called with `incremental`:
|
|
263
|
-
1. Read `last-export.md` for the cutoff date
|
|
264
|
-
2. Only read chronicles newer than the cutoff
|
|
265
|
-
3. Only read drafts newer than the cutoff
|
|
266
|
-
4. Append new sessions to the chronicle digest
|
|
267
|
-
5. Append new drafts to the draft index
|
|
268
|
-
6. Re-run theme mining with new material included
|
|
269
|
-
7. Update `last-export.md` with new date and counts
|
|
270
|
-
|
|
271
|
-
## Rules
|
|
272
|
-
|
|
273
|
-
- The corpus is for external consumption — no internal jargon, file paths,
|
|
274
|
-
or skill names unless they're in the vocabulary guide
|
|
275
|
-
- Every session gets a summary even if it's "low" hook strength —
|
|
276
|
-
the brand team decides what's worth writing about
|
|
277
|
-
- Theme tags are additive — a session can have multiple themes
|
|
278
|
-
- The writing guide section uses the SENTINEL_bassclef_version verbatim
|
|
279
|
-
- Incremental updates append, never overwrite existing entries
|
|
280
|
-
|
|
281
|
-
## Scheduled refresh (Level 1 automation)
|
|
282
|
-
|
|
283
|
-
The brand team corpus can be kept fresh automatically via a scheduled agent.
|
|
284
|
-
See `docs/journal-corpus/REFRESH.md` for:
|
|
285
|
-
|
|
286
|
-
- Manual refresh procedure (step-by-step bash commands)
|
|
287
|
-
- Automated refresh setup using the `/schedule` skill (weekly, Monday 9am)
|
|
288
|
-
- A map of all three Google Docs and how each one stays current
|
|
289
|
-
- Troubleshooting guide
|
|
290
|
-
|
|
291
|
-
## Output discipline
|
|
292
|
-
|
|
293
|
-
Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
|