@thebassclef/lite 1.9.7 → 1.9.9
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 +6 -2
- package/dist/cli.cjs +89 -7
- package/dist/cli.js +89 -7
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.claude/hooks/git-stash-u-guard.sh +4 -1
- package/dist/lite/.claude/hooks/post-skill-friction-check.sh +6 -1
- package/dist/lite/.claude/hooks/pre-commit-gate.sh +18 -6
- package/dist/lite/.claude/hooks/pre-commit-identifier-leak-scrub.sh +10 -6
- package/dist/lite/.claude/hooks/pre-commit-manifest-autoregen.sh +4 -2
- package/dist/lite/.claude/hooks/save-state.sh +24 -0
- package/dist/lite/.claude/hooks/trace-helper.sh +29 -0
- package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +30 -0
- package/dist/lite/.claude/settings.json +1 -1
- package/dist/lite/.claude/skills/build/SKILL.md +19 -7
- package/dist/lite/.claude/skills/onboard-repo/SKILL.md +41 -0
- package/dist/lite/.claude/skills/release-notes/SKILL.md +24 -0
- package/dist/lite/bassclef-version.json +5 -5
- package/dist/lite/gitignore +8 -0
- package/dist/lite/lib/deferred-actions.sh +4 -4
- package/dist/lite/lib/fixture-builder.sh +9 -9
- package/dist/lite/lib/identifier-leak-check.sh +85 -0
- package/dist/lite/lib/preview-state.sh +20 -20
- package/dist/lite/lib/skip-env-inline-check.sh +61 -0
- package/dist/lite/lib/state.sh +31 -28
- package/dist/lite/lib/tier-check.sh +9 -9
- package/dist/lite/lib/tier-dependency-audit.sh +23 -23
- package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +1 -1
- package/dist/lite/standards/lite-manifest-schema-changes.md +38 -0
- package/dist/lite/standards/lite-manifest.json +38 -38
- package/dist/lite/templates/spec-template.md +10 -6
- package/package.json +1 -1
- package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
- package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +0 -173
|
@@ -364,15 +364,15 @@ walk_graph_bfs() {
|
|
|
364
364
|
while [ -s "$queue_file" ] && [ "$iter" -lt "$max_iter" ]; do
|
|
365
365
|
iter=$((iter + 1))
|
|
366
366
|
local next_file; next_file="$(mktemp)"
|
|
367
|
-
while IFS= read -r
|
|
368
|
-
[ -z "$
|
|
367
|
+
while IFS= read -r p; do
|
|
368
|
+
[ -z "$p" ] && continue
|
|
369
369
|
# Skip if visited
|
|
370
|
-
if grep -Fxq "$
|
|
370
|
+
if grep -Fxq "$p" "$visited_file" 2>/dev/null; then
|
|
371
371
|
continue
|
|
372
372
|
fi
|
|
373
|
-
echo "$
|
|
373
|
+
echo "$p" >> "$visited_file"
|
|
374
374
|
# Extract references from this file
|
|
375
|
-
"$extractor" "$
|
|
375
|
+
"$extractor" "$p" 2>/dev/null | while IFS= read -r ref; do
|
|
376
376
|
[ -n "$ref" ] && echo "$ref" >> "$next_file"
|
|
377
377
|
done
|
|
378
378
|
done < "$queue_file"
|
|
@@ -504,17 +504,17 @@ classify_files() {
|
|
|
504
504
|
# tag == target tier → bucket 1 (ships correctly in this tier)
|
|
505
505
|
# no tag at all → bucket 2a (safe mechanical tag)
|
|
506
506
|
# tag == other tier → bucket 2b (chain-snap risk; per-file cure)
|
|
507
|
-
comm -12 "$intended_sorted" "$actual_sorted" | while IFS= read -r
|
|
507
|
+
comm -12 "$intended_sorted" "$actual_sorted" | while IFS= read -r p; do
|
|
508
508
|
# Look up tag for path in tags file. Returns "" for untagged (no tab)
|
|
509
509
|
# or missing entry; returns tier value when tagged.
|
|
510
510
|
local file_tag
|
|
511
|
-
file_tag="$(awk -F'\t' -v p="$
|
|
511
|
+
file_tag="$(awk -F'\t' -v p="$p" '$1 == p { print ($2 ? $2 : ""); exit }' "$tags")"
|
|
512
512
|
if [ "$file_tag" = "$tier" ]; then
|
|
513
|
-
echo "$
|
|
513
|
+
echo "$p" >> "$bucket_1"
|
|
514
514
|
elif [ -z "$file_tag" ]; then
|
|
515
|
-
echo "$
|
|
515
|
+
echo "$p" >> "$bucket_2a"
|
|
516
516
|
else
|
|
517
|
-
echo "$
|
|
517
|
+
echo "$p" >> "$bucket_2b"
|
|
518
518
|
fi
|
|
519
519
|
done
|
|
520
520
|
|
|
@@ -557,13 +557,13 @@ classify_files_combined() {
|
|
|
557
557
|
|
|
558
558
|
# Bucket 1 + Bucket 2 — split intersection by tag presence.
|
|
559
559
|
# In combined mode, ANY non-empty tag places the file in bucket 1.
|
|
560
|
-
comm -12 "$intended_sorted" "$actual_sorted" | while IFS= read -r
|
|
560
|
+
comm -12 "$intended_sorted" "$actual_sorted" | while IFS= read -r p; do
|
|
561
561
|
local file_tag
|
|
562
|
-
file_tag="$(awk -F'\t' -v p="$
|
|
562
|
+
file_tag="$(awk -F'\t' -v p="$p" '$1 == p { print ($2 ? $2 : ""); exit }' "$tags")"
|
|
563
563
|
if [ -n "$file_tag" ]; then
|
|
564
|
-
echo "$
|
|
564
|
+
echo "$p" >> "$bucket_1"
|
|
565
565
|
else
|
|
566
|
-
echo "$
|
|
566
|
+
echo "$p" >> "$bucket_2"
|
|
567
567
|
fi
|
|
568
568
|
done
|
|
569
569
|
|
|
@@ -738,12 +738,12 @@ write_manifest_combined() {
|
|
|
738
738
|
# - SDLC trace logs
|
|
739
739
|
# ---------------------------------------------------------------------------
|
|
740
740
|
_is_substrate_relevant_path() {
|
|
741
|
-
local
|
|
741
|
+
local p="$1"
|
|
742
742
|
# Normalize leading ./ prefix so patterns match consistently.
|
|
743
743
|
# Closure files mix "./foo" (from find) with "foo" (from git grep).
|
|
744
744
|
# Per #1385 walker cure — extends G3 filter beyond initial pattern set.
|
|
745
|
-
|
|
746
|
-
case "$
|
|
745
|
+
p="${p#./}"
|
|
746
|
+
case "$p" in
|
|
747
747
|
/*|../*|.git/*|*/.git/*) return 1 ;;
|
|
748
748
|
# Runtime state — walker outputs + gate markers + session state + analysis.
|
|
749
749
|
# None ship to adopters regardless of tier tag. Per #1385.
|
|
@@ -831,12 +831,12 @@ walk_graph_bfs_inbound() {
|
|
|
831
831
|
while [ -s "$queue_file" ] && [ "$iter" -lt "$max_iter" ]; do
|
|
832
832
|
iter=$((iter + 1))
|
|
833
833
|
local next_file; next_file="$(mktemp)"
|
|
834
|
-
while IFS= read -r
|
|
835
|
-
[ -z "$
|
|
836
|
-
if grep -Fxq "$
|
|
837
|
-
echo "$
|
|
838
|
-
# Look up callers of $
|
|
839
|
-
awk -F'\t' -v p="$
|
|
834
|
+
while IFS= read -r p; do
|
|
835
|
+
[ -z "$p" ] && continue
|
|
836
|
+
if grep -Fxq "$p" "$visited_file" 2>/dev/null; then continue; fi
|
|
837
|
+
echo "$p" >> "$visited_file"
|
|
838
|
+
# Look up callers of $p in the reverse index (path is column 1; caller is column 2)
|
|
839
|
+
awk -F'\t' -v p="$p" '$1 == p { print $2 }' "$rev_index" | while IFS= read -r caller; do
|
|
840
840
|
[ -n "$caller" ] && echo "$caller" >> "$next_file"
|
|
841
841
|
done
|
|
842
842
|
done < "$queue_file"
|
|
@@ -110,7 +110,7 @@ Unregister-ScheduledTask -TaskName "BassclefAutoSave" -Confirm:$false
|
|
|
110
110
|
|
|
111
111
|
## Alternatives
|
|
112
112
|
|
|
113
|
-
- **WSL2 available?** Skip this doc; use `presence/install/schedule-auto-save.cron.sh` inside WSL. Cron there watches your Windows filesystem via `/mnt/c
|
|
113
|
+
- **WSL2 available?** Skip this doc; use `presence/install/schedule-auto-save.cron.sh` inside WSL. Cron there watches your Windows filesystem via the mounted `/mnt/c/` tree under your user profile.
|
|
114
114
|
- **Prefer a .ps1 installer?** File a ticket. The current ship stays doc-only to avoid installer complexity for a population not yet observed. Path B (per-OS installers) upgrade is a follow-on.
|
|
115
115
|
|
|
116
116
|
## References
|
|
@@ -34,6 +34,44 @@ Every entry stays in this file for the life of the manifest. Never pruned. When
|
|
|
34
34
|
|
|
35
35
|
## Entries (newest first)
|
|
36
36
|
|
|
37
|
+
### #1777 — friction hook pattern adds stage|launch new skill vocabulary (v1.14.2 → v1.14.3, 2026-10-01)
|
|
38
|
+
|
|
39
|
+
- **Change type:** content-change (1 file: `post-skill-friction-check` hook)
|
|
40
|
+
- **Fields:** 439 entries → 439 entries (no add/remove). Content hash shifts on `post-skill-friction-check` slug (MAJOR_SKILLS_PATTERN regex extended with stage|launch per ADR-040 D1 rename grace window).
|
|
41
|
+
- **Version bump:** v1.14.2 → v1.14.3 (patch — content-only change; no field add/remove; no shape shift). Rebased after #523's retirement-discipline cure landed as v1.14.2.
|
|
42
|
+
- **Rationale:** PR #2028 closes #1777 (friction log never created because hook pattern matched old skill names only). Additive regex extension; grace-window compat preserved (preview|preview-build still match).
|
|
43
|
+
- **Downstream cure:** none — adopters re-sync and the hook starts firing on current-vocabulary chain dispatches. Lazy-create of `docs/session-friction-log.md` happens on first real friction case.
|
|
44
|
+
- **Old shape retired:** old pattern retired `2026-10-31` (grace window end for ADR-040 D1 vocabulary); current pattern keeps both until then.
|
|
45
|
+
|
|
46
|
+
### #523 — retirement discipline + fixture allowlist pattern (v1.14.1 → v1.14.2, 2026-10-01)
|
|
47
|
+
|
|
48
|
+
- **Change type:** content-change (2 files: `rule/lite-manifest-schema-change-discipline` + `standard/lite-manifest-schema-changes`)
|
|
49
|
+
- **Fields:** 439 entries (unchanged). Content hashes shift on `.claude/rules/lite-manifest-schema-change-discipline.md` (gains a `## Retirements` section covering retirement-class discipline alongside additions) and `standards/lite-manifest-schema-changes.md` (gains the v1.14.0 entry for #1992 that this PR backfilled plus this v1.14.2 entry).
|
|
50
|
+
- **Version bump:** v1.14.1 → v1.14.2 (patch; content-only change on 2 slugs; no schema shape shift; no entry count change).
|
|
51
|
+
- **Rationale:** sunj-labs/bassclef-upstream#523 closed. 4 consecutive main-CI failures 2026-09-29 to 09-30 (SHAs `3c997584`, `02da6b8d`, `924d489f` on `substrate-check-phase`) traced to Test 16 — the Feathers v1.6.1 snapshot guard — seeing 2 entries drop after PR #1992's compat shim retirement. Prior addition-class discipline fired a mechanical ledger-pre-flight gate; retirement-class did not. This PR extends the existing rule with a `## Retirements` section (per Ousterhout contrarian: one rule, two sections) + ships a fixture allowlist pattern (`.claude/hooks/tests/fixtures/2026-09-16-lite-catalog-closure/retired-entries.txt`) + updates Test 16 to subtract allowlist rows before asserting zero drops + backfills the v1.14.0 ledger entry #1992 missed.
|
|
52
|
+
- **Downstream cure:** none — adopters at `~1.14` get the rule content update at next sync. Any adopter authoring a retirement PR going forward follows the `## Retirements` section. Mechanical pre-commit hook (`pre-retire-discipline-check.sh`) deferred to a follow-on PR per Ousterhout (keep this PR scope-tight).
|
|
53
|
+
- **Old shape retired:** none — additive discipline extension.
|
|
54
|
+
- **Protects:** 4 upcoming retirement tickets (#266 S3 → npm move, #108 ADR-020 prototype deprecation, #1142 structural rename sweep, #1999 launch cadence rules) ship under the extended discipline.
|
|
55
|
+
|
|
56
|
+
### #1992 — compounding-axis compat shim retirement (v1.13.2 → v1.14.0, 2026-09-28)
|
|
57
|
+
|
|
58
|
+
- **Change type:** content-remove (2 entries dropped)
|
|
59
|
+
- **Fields:** 441 entries → 439 entries. Removed entries: `hook/longrun-prep-compounding-axis-check` (`.claude/hooks/longrun-prep-compounding-axis-check.sh`) + `rule/compounding-axis-fresh-analysis` (`.claude/rules/compounding-axis-fresh-analysis.md`). Both were compat shim symlinks from the 2026-07-03 compounding-axis → compounding-sequence rename per PR #611 (bet 2026-07-03b WU-2).
|
|
60
|
+
- **Version bump:** v1.13.2 → v1.14.0 (MINOR — content-remove per bump policy; adopters pinning major stay green, adopters pinning exact version must update).
|
|
61
|
+
- **Rationale:** sunj-labs/bassclef-upstream#1989 — compat shim grace window (ADR-031 default) elapsed on 2026-10-03; harness scanned each symlink twice inflating the rule set at session start. Grep across `standards/bassclef-source-consumers.json` returned zero adopter pins on the old slug, so the shim was defensive dogma rather than adopter-driven. Both symlinks + the duplicate embedding JSON deleted at SHA `9884278f`. Rename targets (`compounding-sequence-fresh-analysis.md` + `longrun-prep-compounding-sequence-check.sh`) stay live under their post-rename names.
|
|
62
|
+
- **Downstream cure:** none for adopters at `~1.13` or `~1.14`. Adopters pinning exact `manifest_version` (bassclef-web#256 + bassclef-cli#51) update pins at the next sync. Any adopter code reading `.entries[]` by legacy `compounding-axis` slug finds nothing — switch reads to `compounding-sequence` sister slugs.
|
|
63
|
+
- **Old shape retired:** immediately. ADR-031 grace window on compat shim ran its full term (2026-07-03 → 2026-10-03); no further compat preservation owed.
|
|
64
|
+
- **Retirement allowlist:** `.claude/hooks/tests/fixtures/2026-09-16-lite-catalog-closure/retired-entries.txt` carries both removed slugs so Test 16 (Feathers v1.6.1 snapshot guard) subtracts them before asserting zero drops. Backfilled by follow-on PR #<this PR> (sunj-labs/bassclef-upstream#523).
|
|
65
|
+
|
|
66
|
+
### #1777 — friction hook pattern adds stage|launch new skill vocabulary (v1.14.0 → v1.14.1, 2026-10-01)
|
|
67
|
+
|
|
68
|
+
- **Change type:** content-change (1 file: `post-skill-friction-check` hook)
|
|
69
|
+
- **Fields:** 439 entries → 439 entries (no add/remove). Content hash shifts on `post-skill-friction-check` slug (MAJOR_SKILLS_PATTERN regex extended with stage|launch per ADR-040 D1 rename grace window).
|
|
70
|
+
- **Version bump:** v1.14.0 → v1.14.1 (patch — content-only change; no field add/remove; no shape shift).
|
|
71
|
+
- **Rationale:** PR #2028 closes #1777 (friction log never created because hook pattern matched old skill names only). Additive regex extension; grace-window compat preserved (preview|preview-build still match).
|
|
72
|
+
- **Downstream cure:** none — adopters re-sync and the hook starts firing on current-vocabulary chain dispatches. Lazy-create of `docs/session-friction-log.md` happens on first real friction case.
|
|
73
|
+
- **Old shape retired:** old pattern retired `2026-10-31` (grace window end for ADR-040 D1 vocabulary); current pattern keeps both until then.
|
|
74
|
+
|
|
37
75
|
### #1961 — persistent statusline for bassclef version + sync status (v1.12.2 → v1.13.0, 2026-09-27)
|
|
38
76
|
|
|
39
77
|
- **Change type:** content-add (1 new entry: `statusline-version` lib) + content-change (2 files: `bassclef-sync` hook + `bassclef-orientation`)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"tier": "lite",
|
|
3
|
-
"manifest_version": "1.
|
|
4
|
-
"generated_at": "2026-
|
|
3
|
+
"manifest_version": "1.14.4",
|
|
4
|
+
"generated_at": "2026-10-03T09:49:31Z",
|
|
5
5
|
"entries": [
|
|
6
6
|
{
|
|
7
7
|
"slug": "029-release-pipeline",
|
|
@@ -400,7 +400,7 @@
|
|
|
400
400
|
"type": "hook",
|
|
401
401
|
"path": ".claude/hooks/git-stash-u-guard.sh",
|
|
402
402
|
"tier": "lite",
|
|
403
|
-
"content_hash": "sha256:
|
|
403
|
+
"content_hash": "sha256:d478d64cdda57b9931f558ca8654863b09b48b35794ddadb9f91abe026031d94",
|
|
404
404
|
"description": "PreToolUse: Bash"
|
|
405
405
|
},
|
|
406
406
|
{
|
|
@@ -427,14 +427,6 @@
|
|
|
427
427
|
"content_hash": "sha256:7cb4c033003b987c4dddc74f9f24d9b28f111ee73622a2fa9f9a34d786191aad",
|
|
428
428
|
"description": "kiss-expansion-inject.sh — UserPromptExpansion hook that injects"
|
|
429
429
|
},
|
|
430
|
-
{
|
|
431
|
-
"slug": "longrun-prep-compounding-axis-check",
|
|
432
|
-
"type": "hook",
|
|
433
|
-
"path": ".claude/hooks/longrun-prep-compounding-axis-check.sh",
|
|
434
|
-
"tier": "lite",
|
|
435
|
-
"content_hash": "sha256:9703ca8f6582f5cc2551ea3a22621c2103162c8cdc8ad49940202667c23cb2f6",
|
|
436
|
-
"description": "longrun-prep-compounding-sequence-check.sh — Stop hook that fires when"
|
|
437
|
-
},
|
|
438
430
|
{
|
|
439
431
|
"slug": "longrun-prep-compounding-sequence-check",
|
|
440
432
|
"type": "hook",
|
|
@@ -504,7 +496,7 @@
|
|
|
504
496
|
"type": "hook",
|
|
505
497
|
"path": ".claude/hooks/post-skill-friction-check.sh",
|
|
506
498
|
"tier": "lite",
|
|
507
|
-
"content_hash": "sha256:
|
|
499
|
+
"content_hash": "sha256:6cec7025448fa0b9ab97dbf82e91b53cb39b31c802f292c3f979d6cd44a5ec11",
|
|
508
500
|
"description": "Post-Skill Friction Check — fires on PostToolUse for Skill tool."
|
|
509
501
|
},
|
|
510
502
|
{
|
|
@@ -544,7 +536,7 @@
|
|
|
544
536
|
"type": "hook",
|
|
545
537
|
"path": ".claude/hooks/pre-commit-gate.sh",
|
|
546
538
|
"tier": "lite",
|
|
547
|
-
"content_hash": "sha256:
|
|
539
|
+
"content_hash": "sha256:52bb9e21ec308a1684ef852cb02988442025c9a70fcad1efe38820829e331b7b",
|
|
548
540
|
"description": "Observable failure trap — closes bassclef-upstream#1075 (silent-stderr class)."
|
|
549
541
|
},
|
|
550
542
|
{
|
|
@@ -552,7 +544,7 @@
|
|
|
552
544
|
"type": "hook",
|
|
553
545
|
"path": ".claude/hooks/pre-commit-identifier-leak-scrub.sh",
|
|
554
546
|
"tier": "lite",
|
|
555
|
-
"content_hash": "sha256:
|
|
547
|
+
"content_hash": "sha256:2c4e842a4a34a706ad4993e15bbc75e62b988aa658e5a871ccee458fe0113a08",
|
|
556
548
|
"description": "PreToolUse: Bash"
|
|
557
549
|
},
|
|
558
550
|
{
|
|
@@ -560,7 +552,7 @@
|
|
|
560
552
|
"type": "hook",
|
|
561
553
|
"path": ".claude/hooks/pre-commit-manifest-autoregen.sh",
|
|
562
554
|
"tier": "lite",
|
|
563
|
-
"content_hash": "sha256:
|
|
555
|
+
"content_hash": "sha256:f5258e9f6ea636b7043c771b8931bbea270f4bbaad8e239bad31b28df2252fa0",
|
|
564
556
|
"description": "PreToolUse: Bash"
|
|
565
557
|
},
|
|
566
558
|
{
|
|
@@ -592,7 +584,7 @@
|
|
|
592
584
|
"type": "hook",
|
|
593
585
|
"path": ".claude/hooks/save-state.sh",
|
|
594
586
|
"tier": "lite",
|
|
595
|
-
"content_hash": "sha256:
|
|
587
|
+
"content_hash": "sha256:b5bd5eb5d0e30f614c8afff6fd57380257413dfa08d7722b0e6e453bfa416e96",
|
|
596
588
|
"description": "Save State — graceful checkpoint of all work in progress."
|
|
597
589
|
},
|
|
598
590
|
{
|
|
@@ -680,7 +672,7 @@
|
|
|
680
672
|
"type": "hook",
|
|
681
673
|
"path": ".claude/hooks/trace-helper.sh",
|
|
682
674
|
"tier": "lite",
|
|
683
|
-
"content_hash": "sha256:
|
|
675
|
+
"content_hash": "sha256:15c81bba2b25f8d975b806371f6ca71be59e6339bebd9afe2074505c9b9fb436",
|
|
684
676
|
"description": "SDLC Trace Log helper — sourced by all hooks."
|
|
685
677
|
},
|
|
686
678
|
{
|
|
@@ -784,7 +776,7 @@
|
|
|
784
776
|
"type": "lib",
|
|
785
777
|
"path": "lib/deferred-actions.sh",
|
|
786
778
|
"tier": "lite",
|
|
787
|
-
"content_hash": "sha256:
|
|
779
|
+
"content_hash": "sha256:d84e978bb4ec05d57ca5dadaf251fe4415f2759c45c536cb19a2cecbde69d887",
|
|
788
780
|
"description": "lib/deferred-actions.sh — typed accessor for docs/deferred-actions/"
|
|
789
781
|
},
|
|
790
782
|
{
|
|
@@ -792,7 +784,7 @@
|
|
|
792
784
|
"type": "lib",
|
|
793
785
|
"path": "lib/fixture-builder.sh",
|
|
794
786
|
"tier": "lite",
|
|
795
|
-
"content_hash": "sha256:
|
|
787
|
+
"content_hash": "sha256:d4d4a7b4f17abab386b590d616c392a9f8b33934df366c5a505a10ad3bb77b85",
|
|
796
788
|
"description": "Deep module for adopter-environment fixtures used by bassclef Tier 0 tests."
|
|
797
789
|
},
|
|
798
790
|
{
|
|
@@ -835,6 +827,14 @@
|
|
|
835
827
|
"content_hash": "sha256:022fa4b6f1531813203e499ea84a15a8239ac1772ec506ac1e734b22fd626b5c",
|
|
836
828
|
"description": "lib/hook-installer.sh — installs a hook file at its declared install-class scope"
|
|
837
829
|
},
|
|
830
|
+
{
|
|
831
|
+
"slug": "identifier-leak-check",
|
|
832
|
+
"type": "lib",
|
|
833
|
+
"path": "lib/identifier-leak-check.sh",
|
|
834
|
+
"tier": "lite",
|
|
835
|
+
"content_hash": "sha256:5bc5b46f0478817665a77787e9b26997be3452572c7514e5ce540f37a9b9188a",
|
|
836
|
+
"description": "Operator-identifier leak check for staged git content."
|
|
837
|
+
},
|
|
838
838
|
{
|
|
839
839
|
"slug": "luminary-pick",
|
|
840
840
|
"type": "lib",
|
|
@@ -872,7 +872,7 @@
|
|
|
872
872
|
"type": "lib",
|
|
873
873
|
"path": "lib/preview-state.sh",
|
|
874
874
|
"tier": "lite",
|
|
875
|
-
"content_hash": "sha256:
|
|
875
|
+
"content_hash": "sha256:0e1e0765acfad9826b9a042eed2215eb0c71b8f5f077283a5abab7d8fd40e5e7",
|
|
876
876
|
"description": "lib/preview-state.sh — typed accessor for docs/preview-state/<slug>.yml"
|
|
877
877
|
},
|
|
878
878
|
{
|
|
@@ -899,6 +899,14 @@
|
|
|
899
899
|
"content_hash": "sha256:d2205a32885bf29420a7f4d420ab2d5994bc73ad2ed9d1faf150bcf8f17a52c4",
|
|
900
900
|
"description": "lib/session-rescue.sh — sweep resolved session-rescue entries to completed/."
|
|
901
901
|
},
|
|
902
|
+
{
|
|
903
|
+
"slug": "skip-env-inline-check",
|
|
904
|
+
"type": "lib",
|
|
905
|
+
"path": "lib/skip-env-inline-check.sh",
|
|
906
|
+
"tier": "lite",
|
|
907
|
+
"content_hash": "sha256:88846c09dcf4dd25e048d02338f8c09c1c2dd03be36e101d856d5e3538c83980",
|
|
908
|
+
"description": "SKIP_* env-reach check for PreToolUse Bash hooks."
|
|
909
|
+
},
|
|
902
910
|
{
|
|
903
911
|
"slug": "source-graph-walker",
|
|
904
912
|
"type": "lib",
|
|
@@ -912,7 +920,7 @@
|
|
|
912
920
|
"type": "lib",
|
|
913
921
|
"path": "lib/state.sh",
|
|
914
922
|
"tier": "lite",
|
|
915
|
-
"content_hash": "sha256:
|
|
923
|
+
"content_hash": "sha256:c840236de9a217a9d2d92d6be916b8548f1116125af12b68e7ee9f5824886fe9",
|
|
916
924
|
"description": "lib/state.sh — typed accessor library over bassclef's state spine."
|
|
917
925
|
},
|
|
918
926
|
{
|
|
@@ -936,7 +944,7 @@
|
|
|
936
944
|
"type": "lib",
|
|
937
945
|
"path": "lib/tier-check.sh",
|
|
938
946
|
"tier": "lite",
|
|
939
|
-
"content_hash": "sha256:
|
|
947
|
+
"content_hash": "sha256:33ccb844a171b1334d98a7dceaf13e1a1beb7952072b8d49a3429618dc2a4e26",
|
|
940
948
|
"description": "lib/tier-check.sh — adopter tier resolution + gate."
|
|
941
949
|
},
|
|
942
950
|
{
|
|
@@ -944,7 +952,7 @@
|
|
|
944
952
|
"type": "lib",
|
|
945
953
|
"path": "lib/tier-dependency-audit.sh",
|
|
946
954
|
"tier": "lite",
|
|
947
|
-
"content_hash": "sha256:
|
|
955
|
+
"content_hash": "sha256:aea0c465ff0699e68977e8ff4a80a1f0d3455b9a9f3108888bc82a2eb84a2ee2",
|
|
948
956
|
"description": "lib/tier-dependency-audit.sh"
|
|
949
957
|
},
|
|
950
958
|
{
|
|
@@ -1343,7 +1351,7 @@
|
|
|
1343
1351
|
"type": "presence-template",
|
|
1344
1352
|
"path": "presence/install/schedule-auto-save.taskscheduler.md",
|
|
1345
1353
|
"tier": "lite",
|
|
1346
|
-
"content_hash": "sha256:
|
|
1354
|
+
"content_hash": "sha256:fd9dcc8fbcf08a812fc2dfe615c0c173971949fd2799e752fa161160232c3a5d"
|
|
1347
1355
|
},
|
|
1348
1356
|
{
|
|
1349
1357
|
"slug": "agents",
|
|
@@ -1520,14 +1528,6 @@
|
|
|
1520
1528
|
"content_hash": "sha256:69ae0083d62003eb70442ef3d5fcffd0061723a18da931f823795123ff7fc312",
|
|
1521
1529
|
"description": "Commit message format — Conventional Commits"
|
|
1522
1530
|
},
|
|
1523
|
-
{
|
|
1524
|
-
"slug": "compounding-axis-fresh-analysis",
|
|
1525
|
-
"type": "rule",
|
|
1526
|
-
"path": ".claude/rules/compounding-axis-fresh-analysis.md",
|
|
1527
|
-
"tier": "lite",
|
|
1528
|
-
"content_hash": "sha256:256fdb64c4703d7e492527c1dd7dbbed8325baf7c29f0c7c06d10563cc472852",
|
|
1529
|
-
"description": "When /longrun prep proposes scope shapes, each shape's compounding-sequence row comes from fresh analysis."
|
|
1530
|
-
},
|
|
1531
1531
|
{
|
|
1532
1532
|
"slug": "compounding-sequence-fresh-analysis",
|
|
1533
1533
|
"type": "rule",
|
|
@@ -1653,7 +1653,7 @@
|
|
|
1653
1653
|
"type": "rule",
|
|
1654
1654
|
"path": ".claude/rules/lite-manifest-schema-change-discipline.md",
|
|
1655
1655
|
"tier": "lite",
|
|
1656
|
-
"content_hash": "sha256:
|
|
1656
|
+
"content_hash": "sha256:730cde99f460fb259896e9f9aed268b4a116599a5a2b397a92196f95b9d4af5d",
|
|
1657
1657
|
"description": "Every lite-manifest schema change ships a migration-note ledger entry in the same PR. Adopters read the ledger before sync."
|
|
1658
1658
|
},
|
|
1659
1659
|
{
|
|
@@ -2226,7 +2226,7 @@
|
|
|
2226
2226
|
"type": "skill",
|
|
2227
2227
|
"path": ".claude/skills/build/SKILL.md",
|
|
2228
2228
|
"tier": "lite",
|
|
2229
|
-
"content_hash": "sha256:
|
|
2229
|
+
"content_hash": "sha256:2abf1366cecf55c6b0e897c4a50fc4fbef0e175dcd9588af54240e98c7f789ea",
|
|
2230
2230
|
"description": "Take a plan from /launch and ship it. One builder per user story. Runs /verify. Opens PRs. Gates prod on a human. Refuses auth, schema, security, and tenant work. Two modes — full and degrade-with-note.",
|
|
2231
2231
|
"inputs": [
|
|
2232
2232
|
"A goal slug pointing to a spec on disk"
|
|
@@ -2737,7 +2737,7 @@
|
|
|
2737
2737
|
"type": "skill",
|
|
2738
2738
|
"path": ".claude/skills/onboard-repo/SKILL.md",
|
|
2739
2739
|
"tier": "lite",
|
|
2740
|
-
"content_hash": "sha256:
|
|
2740
|
+
"content_hash": "sha256:f6f9a0029ff31f1abb1e56c1fb56c63e0f7569c50eb97136596c2fee62dbd7eb",
|
|
2741
2741
|
"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 (starts a new repo from a short intent paragraph).",
|
|
2742
2742
|
"inputs": [
|
|
2743
2743
|
"Optional flags — --with-deploy-host or --with-secrets or --full"
|
|
@@ -2902,7 +2902,7 @@
|
|
|
2902
2902
|
"type": "skill",
|
|
2903
2903
|
"path": ".claude/skills/release-notes/SKILL.md",
|
|
2904
2904
|
"tier": "lite",
|
|
2905
|
-
"content_hash": "sha256:
|
|
2905
|
+
"content_hash": "sha256:21dc6101fc1bb115fb40a4157c7e1592a126d03f3641ec53a1c1d121b0c061ab",
|
|
2906
2906
|
"description": "Draft a weekly changelog for two audiences — internal team (what shipped) and users (what's new for you). Pushes to Google Docs.",
|
|
2907
2907
|
"inputs": [
|
|
2908
2908
|
"Time range or release tag ref"
|
|
@@ -3817,7 +3817,7 @@
|
|
|
3817
3817
|
"type": "standard",
|
|
3818
3818
|
"path": "standards/lite-manifest-schema-changes.md",
|
|
3819
3819
|
"tier": "lite",
|
|
3820
|
-
"content_hash": "sha256:
|
|
3820
|
+
"content_hash": "sha256:11d4386e915614b3bc0de53a419e1ce76f4a3ebc0db9436c97c63772ce540a95",
|
|
3821
3821
|
"description": "Chronological ledger of every lite-manifest schema change. Adopters read this before sync to know what shifted."
|
|
3822
3822
|
},
|
|
3823
3823
|
{
|
|
@@ -4304,7 +4304,7 @@
|
|
|
4304
4304
|
"type": "template",
|
|
4305
4305
|
"path": "templates/spec-template.md",
|
|
4306
4306
|
"tier": "lite",
|
|
4307
|
-
"content_hash": "sha256:
|
|
4307
|
+
"content_hash": "sha256:7096d6eb6479d7e4c9034247717675d3bba7d3e2c740c090b117cadf61674915"
|
|
4308
4308
|
},
|
|
4309
4309
|
{
|
|
4310
4310
|
"slug": "use-case-template",
|
|
@@ -102,25 +102,29 @@ Based on the answers above:
|
|
|
102
102
|
## Acceptance Criteria
|
|
103
103
|
How we know it's done. Testable statements.
|
|
104
104
|
|
|
105
|
-
##
|
|
105
|
+
## Steps enumerated
|
|
106
106
|
|
|
107
107
|
REQUIRED for specs that feed `/build` (bassclef#335 + bassclef#367).
|
|
108
|
-
Each
|
|
108
|
+
Each step traces to one INVEST user story and lands as one stacked-atomic
|
|
109
109
|
PR. /build's Phase 1 parser greps for this exact section heading.
|
|
110
110
|
|
|
111
|
-
|
|
111
|
+
Per ADR-040 D1 vocabulary rename (grace window through 2026-10-31),
|
|
112
|
+
`/build` also reads legacy specs that use `## Workunits enumerated` +
|
|
113
|
+
`### WU-N` headings — new work writes the step vocabulary below.
|
|
114
|
+
|
|
115
|
+
Format (one entry per step):
|
|
112
116
|
|
|
113
117
|
```markdown
|
|
114
|
-
###
|
|
118
|
+
### Step-N — <imperative title>
|
|
115
119
|
|
|
116
120
|
**Story refs:** US-NNN[, US-NNN]
|
|
117
|
-
**Branch:** feature/<
|
|
121
|
+
**Branch:** feature/<goal-slug>-stack-N-<step-slug>
|
|
118
122
|
**Acceptance:**
|
|
119
123
|
- [ ] <inherited from story; testable; observable>
|
|
120
124
|
- [ ] <edge case / extension>
|
|
121
125
|
**Estimated:** ~Nt turns
|
|
122
126
|
|
|
123
|
-
(per /
|
|
127
|
+
(per /launch Phase 9 contract per bassclef#367)
|
|
124
128
|
```
|
|
125
129
|
|
|
126
130
|
If the spec doesn't feed `/build` (e.g., bassclef-evolution shaping
|