@thebassclef/lite 0.1.2 → 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 +238 -127
  2. package/dist/cli.js +240 -129
  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,505 +0,0 @@
1
- #!/usr/bin/env bash
2
- # tier: lite
3
- # Generate lite-manifest.json at repo root.
4
- #
5
- # Reads tier: lite frontmatter across the 7 substrate surfaces and emits
6
- # the manifest per standards/lite-manifest.schema.json v1.0.0.
7
- #
8
- # Per bassclef-upstream#1020 (partner packaging manifest) + #1030 (root
9
- # location + generator). Session 2026-08-01d option b — standalone
10
- # generator; release-script integration deferred per bet doc Out of scope.
11
- #
12
- # Cures per pre-mortem risk ledger docs/risk-ledgers/2026-08-01c-lite-manifest.md:
13
- # F-b.H1 — resolves repo root via git rev-parse; writes to ${ROOT}/lite-manifest.json
14
- # F1.1 — real substrate paths (not synthetic); tests iterate all project surfaces
15
- # F1.3 — iterates ALL 7 surfaces (skills + rules + hooks + luminaries + agents + standards + ADRs)
16
- # F2.1/2/6/7 — schema validates output at CI drift-check (Step 5)
17
- #
18
- # Usage:
19
- # scripts/generate-lite-manifest.sh # writes lite-manifest.json at repo root
20
- # scripts/generate-lite-manifest.sh --dry-run # prints JSON to stdout; no file write
21
- # scripts/generate-lite-manifest.sh --output PATH # writes to specified path (test harness)
22
- # scripts/generate-lite-manifest.sh --root PATH # override repo root (test harness)
23
- #
24
- # Exit codes:
25
- # 0 — manifest written or dry-run printed
26
- # 1 — invalid arg or missing dependency (jq, git, shasum/sha256sum)
27
- # 2 — no lite entries found (schema requires minItems: 1)
28
-
29
- set -euo pipefail
30
-
31
- MANIFEST_VERSION="1.5.7"
32
-
33
- # --- arg parse ---
34
- DRY_RUN=0
35
- OUTPUT_PATH=""
36
- REPO_ROOT_OVERRIDE=""
37
- TARGET_TIER="lite" # per #1295 — script now tier-parameterizable; default preserves prior API
38
-
39
- while [[ $# -gt 0 ]]; do
40
- case "$1" in
41
- --dry-run) DRY_RUN=1; shift ;;
42
- --output) OUTPUT_PATH="${2:-}"; shift 2 ;;
43
- --root) REPO_ROOT_OVERRIDE="${2:-}"; shift 2 ;;
44
- --tier) TARGET_TIER="${2:-}"; shift 2 ;;
45
- -h|--help)
46
- grep -E '^# ' "$0" | sed 's/^# \?//'
47
- exit 0
48
- ;;
49
- *) echo "Unknown arg: $1 (use --help)" >&2; exit 1 ;;
50
- esac
51
- done
52
-
53
- # --- validate tier arg per ADR-043 D1 ---
54
- case "$TARGET_TIER" in
55
- lite|standard|ultra|standard-pro) ;;
56
- *) echo "generate-tier-manifest: invalid --tier '$TARGET_TIER' (allowed: lite, standard, ultra, standard-pro)" >&2; exit 1 ;;
57
- esac
58
-
59
- # --- resolve repo root ---
60
- if [[ -n "$REPO_ROOT_OVERRIDE" ]]; then
61
- REPO_ROOT="$REPO_ROOT_OVERRIDE"
62
- else
63
- REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || true)"
64
- fi
65
-
66
- if [[ -z "$REPO_ROOT" || ! -d "$REPO_ROOT" ]]; then
67
- echo "generate-lite-manifest: cannot resolve repo root (not in a git tree; use --root)" >&2
68
- exit 1
69
- fi
70
-
71
- # --- dependency check ---
72
- for cmd in jq git; do
73
- if ! command -v "$cmd" >/dev/null 2>&1; then
74
- echo "generate-lite-manifest: missing dependency: $cmd" >&2
75
- exit 1
76
- fi
77
- done
78
-
79
- if command -v shasum >/dev/null 2>&1; then
80
- SHA_CMD="shasum -a 256"
81
- elif command -v sha256sum >/dev/null 2>&1; then
82
- SHA_CMD="sha256sum"
83
- else
84
- echo "generate-lite-manifest: missing dependency: shasum or sha256sum" >&2
85
- exit 1
86
- fi
87
-
88
- # --- default output path (root of the resolved repo; per-tier filename) ---
89
- if [[ -z "$OUTPUT_PATH" ]]; then
90
- OUTPUT_PATH="${REPO_ROOT}/${TARGET_TIER}-manifest.json"
91
- fi
92
-
93
- # --- generation metadata ---
94
- GENERATED_AT="$(date -u +'%Y-%m-%dT%H:%M:%SZ')"
95
- UPSTREAM_COMMIT="$(cd "$REPO_ROOT" && git rev-parse HEAD 2>/dev/null || echo '0000000000000000000000000000000000000000')"
96
-
97
- # --- extractors ---
98
-
99
- # Extract tier from markdown YAML frontmatter (skills, rules, luminaries, agents, standards, ADRs).
100
- extract_yaml_tier() {
101
- awk '
102
- /^---$/ { c++; if (c == 2) exit; next }
103
- c == 1 && /^tier:[[:space:]]/ {
104
- sub(/^tier:[[:space:]]*/, "")
105
- gsub(/[[:space:]]/, "")
106
- print
107
- exit
108
- }
109
- ' "$1"
110
- }
111
-
112
- # Extract tier from bash hook file # tier: header.
113
- extract_hook_tier() {
114
- grep -m1 -E '^#[[:space:]]*tier:[[:space:]]' "$1" 2>/dev/null \
115
- | sed -E 's/^#[[:space:]]*tier:[[:space:]]*//' \
116
- | sed -E 's/[[:space:]]*$//' \
117
- || true
118
- }
119
-
120
- # Normalize `—` YAML escape to literal em-dash character. Closes
121
- # bassclef-upstream#1548 — YAML frontmatter with double-quoted strings can
122
- # carry `—` as a 6-char literal; jq preserves it as `\\u2014` in JSON
123
- # output, which downstream renderers write verbatim into MDX. Adopters see
124
- # raw `—` on the live site. Normalizing at extraction time lets jq
125
- # emit the standard `—` JSON escape sequence, which parses cleanly to
126
- # em-dash at every consumer.
127
- normalize_em_dash() {
128
- local val="$1"
129
- echo "${val//\\u2014/—}"
130
- }
131
-
132
- # Extract description from markdown YAML frontmatter (first line of description: field).
133
- extract_yaml_description() {
134
- local val
135
- val=$(awk '
136
- /^---$/ { c++; if (c == 2) exit; next }
137
- c == 1 && /^description:[[:space:]]/ {
138
- sub(/^description:[[:space:]]*/, "")
139
- sub(/^"/, "")
140
- sub(/"$/, "")
141
- sub(/^\047/, "")
142
- sub(/\047$/, "")
143
- print
144
- exit
145
- }
146
- ' "$1")
147
- normalize_em_dash "$val"
148
- }
149
-
150
- # Extract a `<field>:` inline YAML list from the frontmatter as a JSON array string.
151
- # Handles shape `<field>: [foo, bar]` — bassclef's convention. Returns `[]` when absent or malformed.
152
- _extract_yaml_inline_list() {
153
- local file="$1" field="$2" raw
154
- raw=$(awk -v f="$field" '
155
- /^---$/ { c++; if (c == 2) exit; next }
156
- c == 1 && $0 ~ ("^" f ":[[:space:]]*\\[") {
157
- sub("^" f ":[[:space:]]*", "")
158
- print
159
- exit
160
- }
161
- ' "$file" 2>/dev/null)
162
- if [[ -z "$raw" ]]; then
163
- echo "[]"
164
- return
165
- fi
166
- # Strip enclosing brackets, split on comma, trim, quote each, join. Always output valid JSON.
167
- echo "$raw" | jq -Rc '
168
- ltrimstr("[") | rtrimstr("]")
169
- | split(",")
170
- | map(sub("^\\s+"; "") | sub("\\s+$"; ""))
171
- | map(select(length > 0))
172
- ' 2>/dev/null || echo "[]"
173
- }
174
-
175
- extract_yaml_composes_with() {
176
- _extract_yaml_inline_list "$1" "composes_with"
177
- }
178
-
179
- extract_yaml_depends_on() {
180
- _extract_yaml_inline_list "$1" "depends_on"
181
- }
182
-
183
- # Per bassclef-web#268 — inputs + outputs read as inline YAML lists from
184
- # frontmatter. Stage 1 = frontmatter-declared (deterministic). Stage 2 =
185
- # body-section extraction (deferred per L169 awk-portability note).
186
- extract_yaml_inputs() {
187
- _extract_yaml_inline_list "$1" "inputs"
188
- }
189
-
190
- extract_yaml_outputs() {
191
- _extract_yaml_inline_list "$1" "outputs"
192
- }
193
-
194
- # Extract a `<field>:` YAML string value from the frontmatter. Handles inline
195
- # form `<field>: some text`. Multi-line block scalars (`|` / `>`) are not
196
- # supported today — Feathers F3 single-line contract per goal 2026-09-07c.
197
- # Returns empty string when the field is absent, quoting normalized like
198
- # extract_yaml_description does.
199
- _extract_yaml_string_field() {
200
- local val
201
- val=$(awk -v f="$2" '
202
- /^---$/ { c++; if (c == 2) exit; next }
203
- c == 1 && $0 ~ ("^" f ":[[:space:]]") {
204
- sub("^" f ":[[:space:]]*", "")
205
- sub(/^"/, "")
206
- sub(/"$/, "")
207
- sub(/^\047/, "")
208
- sub(/\047$/, "")
209
- print
210
- exit
211
- }
212
- ' "$1")
213
- normalize_em_dash "$val"
214
- }
215
-
216
- # Extract `problem:` frontmatter field per bassclef-web#268 + web#265 Stage 1
217
- # (frontmatter-first path per Peirce disposition c on bassclef-upstream#1533).
218
- # Skill-surface-only per Hoare H5 pre-mortem. Empty when absent — jq guard
219
- # drops the key.
220
- extract_yaml_problem() {
221
- _extract_yaml_string_field "$1" "problem"
222
- }
223
-
224
- # Extract `value:` frontmatter field per bassclef-web#268 + web#265 Stage 1.
225
- # Skill-surface-only per Hoare H5 pre-mortem. Empty when absent.
226
- extract_yaml_value() {
227
- _extract_yaml_string_field "$1" "value"
228
- }
229
-
230
- # Body-anchor extraction for problem + value deferred per bassclef-web#265
231
- # Stage 2 note. Stage 1 awk section extraction proved non-deterministic
232
- # across BSD (macOS) and GNU (Linux) awk implementations. Schema fields
233
- # remain defined for Stage 2 hand-authored `data/skill-pitches.json`
234
- # overrides. Frontmatter path above ships today (goal 2026-09-07c Step 3).
235
- # See PR discussion on bassclef-upstream#1480.
236
-
237
- # Extract description from bash hook file — first non-shebang, non-tier, non-metadata comment.
238
- extract_hook_description() {
239
- grep -E '^#' "$1" 2>/dev/null \
240
- | grep -vE '^#!' \
241
- | grep -vE '^#[[:space:]]*(tier|install-class|matcher|event|luminary|@)' \
242
- | grep -vE '^#[[:space:]]*$' \
243
- | head -1 \
244
- | sed -E 's/^#[[:space:]]*//' \
245
- | sed -E 's/[[:space:]]*$//' \
246
- || true
247
- }
248
-
249
- sha256_file() {
250
- $SHA_CMD "$1" | awk '{print "sha256:"$1}'
251
- }
252
-
253
- # --- emit entries for a single surface ---
254
- # Args:
255
- # $1 = surface type ("skill", "rule", etc.)
256
- # $2 = tier extractor function name
257
- # $3 = description extractor function name
258
- # $4 = slug source ("dirname" | "basename" | "adr")
259
- # $5+ = file paths (already expanded)
260
- emit_entries() {
261
- local surface_type="$1"; shift
262
- local tier_fn="$1"; shift
263
- local desc_fn="$1"; shift
264
- local slug_from="$1"; shift
265
-
266
- local f slug tier path hash desc
267
- # Per #1295 — for standard/ultra manifests, ships derives as SUPERSET of
268
- # lite. So standard includes {lite, standard}; ultra includes {lite, standard, ultra}.
269
- # Adopters at a given tier see everything their tier plus lower tiers ship.
270
- local include_lite=0 include_standard=0 include_ultra=0
271
- case "$TARGET_TIER" in
272
- lite) include_lite=1 ;;
273
- standard) include_lite=1; include_standard=1 ;;
274
- standard-pro) include_lite=1; include_standard=1 ;;
275
- ultra) include_lite=1; include_standard=1; include_ultra=1 ;;
276
- esac
277
- for f in "$@"; do
278
- [[ -f "$f" ]] || continue
279
- # Skip TEMPLATE + Index files — scaffolding not real substrate;
280
- # they carry uppercase slugs that violate schema pattern.
281
- case "$(basename "$f")" in
282
- TEMPLATE.md|ADR-Index.md) continue ;;
283
- esac
284
- tier=$("$tier_fn" "$f" || true)
285
- case "$tier" in
286
- lite) [[ "$include_lite" == "1" ]] || continue ;;
287
- standard) [[ "$include_standard" == "1" ]] || continue ;;
288
- standard-pro) [[ "$include_standard" == "1" ]] || continue ;;
289
- ultra) [[ "$include_ultra" == "1" ]] || continue ;;
290
- *) continue ;;
291
- esac
292
-
293
- case "$slug_from" in
294
- dirname)
295
- slug=$(basename "$(dirname "$f")")
296
- ;;
297
- adr)
298
- slug=$(basename "$f" .md | sed -E 's/^ADR-//')
299
- ;;
300
- *)
301
- slug=$(basename "$f")
302
- slug="${slug%.md}"
303
- slug="${slug%.sh}"
304
- slug="${slug%.json}" # #1295 embedding entries
305
- # Lowercase + normalize (schema pattern: ^[a-z0-9][a-z0-9-]*[a-z0-9]$)
306
- slug=$(echo "$slug" | tr '[:upper:]' '[:lower:]' | sed -E 's/^ADR-//i' | sed -E 's/[^a-z0-9-]/-/g' | sed -E 's/^-+//;s/-+$//;s/-+/-/g')
307
- ;;
308
- esac
309
-
310
- path="${f#$REPO_ROOT/}"
311
- hash=$(sha256_file "$f")
312
- desc=$("$desc_fn" "$f" || true)
313
-
314
- # Extract additive graph fields per bassclef-web#104 partial.
315
- # composes_with + depends_on read from YAML frontmatter via jq (deterministic).
316
- # Every markdown surface with frontmatter carries these.
317
- local composes_with_json="[]"
318
- local depends_on_json="[]"
319
- case "$surface_type" in
320
- skill|rule|luminary|agent|standard|adr|template|root-doc)
321
- composes_with_json=$(extract_yaml_composes_with "$f" 2>/dev/null || echo "[]")
322
- depends_on_json=$(extract_yaml_depends_on "$f" 2>/dev/null || echo "[]")
323
- ;;
324
- esac
325
-
326
- # inputs + outputs + problem + value are skill-surface-only per Hoare H5
327
- # pre-mortem (docs/risk-ledgers/2026-09-07c-lite-manifest-schema-extractor-
328
- # backfill-ledger.md). Other surfaces (rules, luminaries, etc) do not
329
- # semantically carry "what to feed" / "what comes back" — they are steering,
330
- # not tool-like. Per goal 2026-09-07c Step 3.
331
- local inputs_json="[]"
332
- local outputs_json="[]"
333
- local problem=""
334
- local value=""
335
- if [ "$surface_type" = "skill" ]; then
336
- inputs_json=$(extract_yaml_inputs "$f" 2>/dev/null || echo "[]")
337
- outputs_json=$(extract_yaml_outputs "$f" 2>/dev/null || echo "[]")
338
- problem=$(extract_yaml_problem "$f" 2>/dev/null || true)
339
- value=$(extract_yaml_value "$f" 2>/dev/null || true)
340
- fi
341
-
342
- jq -c -n \
343
- --arg slug "$slug" \
344
- --arg type "$surface_type" \
345
- --arg path "$path" \
346
- --arg tier "$tier" \
347
- --arg hash "$hash" \
348
- --arg desc "${desc:-}" \
349
- --arg problem "${problem:-}" \
350
- --arg value "${value:-}" \
351
- --argjson composes_with "${composes_with_json:-[]}" \
352
- --argjson depends_on "${depends_on_json:-[]}" \
353
- --argjson inputs "${inputs_json:-[]}" \
354
- --argjson outputs "${outputs_json:-[]}" \
355
- '{slug:$slug, type:$type, path:$path, tier:$tier, content_hash:$hash}
356
- + (if $desc == "" then {} else {description:$desc} end)
357
- + (if ($composes_with | length) == 0 then {} else {composes_with:$composes_with} end)
358
- + (if ($depends_on | length) == 0 then {} else {depends_on:$depends_on} end)
359
- + (if ($inputs | length) == 0 then {} else {inputs:$inputs} end)
360
- + (if ($outputs | length) == 0 then {} else {outputs:$outputs} end)
361
- + (if $problem == "" then {} else {problem:$problem} end)
362
- + (if $value == "" then {} else {value:$value} end)'
363
- done
364
- }
365
-
366
- # --- collect entries from 13 surfaces per #1392 Shape 3 (goal 2026-08-27a) ---
367
- # Original 8 (7 doc + 1 embedding per #1295 Step 5) plus 5 new install surfaces:
368
- # lib (lib/*.sh) + script (scripts/*.sh) + presence-template (presence/install/*)
369
- # + template (templates/*.md) + root-doc (root-level *.md)
370
- # The extension makes the manifest the definitive install list for bassclef-cli.
371
- # Note: `readarray` is bash 4.0+; macOS ships bash 3.2. Use while-read loop.
372
- STANDARDS_FILES=()
373
- while IFS= read -r f; do
374
- STANDARDS_FILES+=("$f")
375
- done < <(find "$REPO_ROOT/standards" -type f -name '*.md' | sort)
376
-
377
- # Embedding files (JSON) — per #1295 Step 5; ultra tier ships Voyage vectors
378
- EMBEDDING_FILES=()
379
- while IFS= read -r f; do
380
- EMBEDDING_FILES+=("$f")
381
- done < <(find "$REPO_ROOT/.claude/embeddings" -type f -name '*.json' 2>/dev/null | sort)
382
-
383
- # Lib files (bash) — per #1392 Shape 3; adopter runtime needs lib/state.sh + lib/hook-inject.sh etc
384
- LIB_FILES=()
385
- while IFS= read -r f; do
386
- LIB_FILES+=("$f")
387
- done < <(find "$REPO_ROOT/lib" -maxdepth 1 -type f -name '*.sh' 2>/dev/null | sort)
388
-
389
- # Script files (bash) — per #1392 Shape 3; adopter runtime needs scripts/bassclef-*.sh helpers
390
- SCRIPT_FILES=()
391
- while IFS= read -r f; do
392
- SCRIPT_FILES+=("$f")
393
- done < <(find "$REPO_ROOT/scripts" -maxdepth 1 -type f -name '*.sh' 2>/dev/null | sort)
394
-
395
- # Presence templates (bash + md) — per #1392 Shape 3; adopter install dispatches through these
396
- PRESENCE_TEMPLATE_SH_FILES=()
397
- while IFS= read -r f; do
398
- PRESENCE_TEMPLATE_SH_FILES+=("$f")
399
- done < <(find "$REPO_ROOT/presence/install" -maxdepth 1 -type f -name '*.sh' 2>/dev/null | sort)
400
-
401
- PRESENCE_TEMPLATE_MD_FILES=()
402
- while IFS= read -r f; do
403
- PRESENCE_TEMPLATE_MD_FILES+=("$f")
404
- done < <(find "$REPO_ROOT/presence/install" -maxdepth 1 -type f -name '*.md' 2>/dev/null | sort)
405
-
406
- # Templates (md) — per #1392 Shape 3; chronicle-template + iteration-goal etc adopters copy
407
- TEMPLATE_FILES=()
408
- while IFS= read -r f; do
409
- TEMPLATE_FILES+=("$f")
410
- done < <(find "$REPO_ROOT/templates" -maxdepth 1 -type f -name '*.md' 2>/dev/null | sort)
411
-
412
- # Root docs (md) — per #1392 Shape 3; README + CLAUDE + AGENTS adopters read on install
413
- ROOT_DOC_FILES=()
414
- while IFS= read -r f; do
415
- ROOT_DOC_FILES+=("$f")
416
- done < <(find "$REPO_ROOT" -maxdepth 1 -type f -name '*.md' 2>/dev/null | sort)
417
-
418
- # Extract tier from JSON root-key `"tier"` or `"_tier"` — per #1295
419
- extract_json_tier() {
420
- head -5 "$1" 2>/dev/null | awk '
421
- /"tier"[[:space:]]*:[[:space:]]*"/ {
422
- match($0, /"tier"[[:space:]]*:[[:space:]]*"[^"]+"/)
423
- v=substr($0, RSTART, RLENGTH)
424
- sub(/^"tier"[[:space:]]*:[[:space:]]*"/,"",v); sub(/"$/,"",v)
425
- print v; exit
426
- }
427
- /"_tier"[[:space:]]*:[[:space:]]*"/ {
428
- match($0, /"_tier"[[:space:]]*:[[:space:]]*"[^"]+"/)
429
- v=substr($0, RSTART, RLENGTH)
430
- sub(/^"_tier"[[:space:]]*:[[:space:]]*"/,"",v); sub(/"$/,"",v)
431
- print v; exit
432
- }'
433
- }
434
-
435
- # Embeddings have no description field; return empty
436
- extract_json_description() {
437
- echo ""
438
- }
439
-
440
- ENTRIES_JSON=$(
441
- {
442
- emit_entries "skill" extract_yaml_tier extract_yaml_description dirname "$REPO_ROOT/.claude/skills/"*/SKILL.md
443
- emit_entries "rule" extract_yaml_tier extract_yaml_description basename "$REPO_ROOT/.claude/rules/"*.md
444
- emit_entries "hook" extract_hook_tier extract_hook_description basename "$REPO_ROOT/.claude/hooks/"*.sh
445
- emit_entries "luminary" extract_yaml_tier extract_yaml_description basename "$REPO_ROOT/.claude/luminaries/"*.md
446
- emit_entries "agent" extract_yaml_tier extract_yaml_description basename "$REPO_ROOT/.claude/agents/"*.md
447
- emit_entries "standard" extract_yaml_tier extract_yaml_description basename "${STANDARDS_FILES[@]}"
448
- emit_entries "adr" extract_yaml_tier extract_yaml_description adr "$REPO_ROOT/architecture/decisions/"ADR-*.md
449
- if [[ ${#EMBEDDING_FILES[@]} -gt 0 ]]; then
450
- emit_entries "embedding" extract_json_tier extract_json_description basename "${EMBEDDING_FILES[@]}"
451
- fi
452
- # Per #1392 Shape 3 — 5 new install surfaces for bassclef-cli
453
- if [[ ${#LIB_FILES[@]} -gt 0 ]]; then
454
- emit_entries "lib" extract_hook_tier extract_hook_description basename "${LIB_FILES[@]}"
455
- fi
456
- if [[ ${#SCRIPT_FILES[@]} -gt 0 ]]; then
457
- emit_entries "script" extract_hook_tier extract_hook_description basename "${SCRIPT_FILES[@]}"
458
- fi
459
- if [[ ${#PRESENCE_TEMPLATE_SH_FILES[@]} -gt 0 ]]; then
460
- emit_entries "presence-template" extract_hook_tier extract_hook_description basename "${PRESENCE_TEMPLATE_SH_FILES[@]}"
461
- fi
462
- if [[ ${#PRESENCE_TEMPLATE_MD_FILES[@]} -gt 0 ]]; then
463
- emit_entries "presence-template" extract_yaml_tier extract_yaml_description basename "${PRESENCE_TEMPLATE_MD_FILES[@]}"
464
- fi
465
- if [[ ${#TEMPLATE_FILES[@]} -gt 0 ]]; then
466
- emit_entries "template" extract_yaml_tier extract_yaml_description basename "${TEMPLATE_FILES[@]}"
467
- fi
468
- if [[ ${#ROOT_DOC_FILES[@]} -gt 0 ]]; then
469
- emit_entries "root-doc" extract_yaml_tier extract_yaml_description basename "${ROOT_DOC_FILES[@]}"
470
- fi
471
- } | jq -s 'sort_by(.type, .slug)'
472
- )
473
-
474
- ENTRY_COUNT=$(echo "$ENTRIES_JSON" | jq 'length')
475
-
476
- if [[ "$ENTRY_COUNT" -lt 1 ]]; then
477
- echo "generate-tier-manifest: no entries found for tier '$TARGET_TIER' (schema requires minItems: 1)" >&2
478
- exit 2
479
- fi
480
-
481
- # --- assemble manifest ---
482
- # Includes tier root-key per #1295 — the manifest itself carries its own tier tag
483
- # so tier-tag-required-at-write.sh recognizes it. Per Saltzer-Schroeder complete
484
- # mediation — no derived artifact escapes the tier system.
485
- MANIFEST_JSON=$(jq -n \
486
- --arg tier "$TARGET_TIER" \
487
- --arg mv "$MANIFEST_VERSION" \
488
- --arg ga "$GENERATED_AT" \
489
- --argjson entries "$ENTRIES_JSON" \
490
- '{tier:$tier, manifest_version:$mv, generated_at:$ga, entries:$entries}')
491
-
492
- # Per bassclef-upstream#1508 Cure a: upstream_commit dropped from manifest
493
- # content. Every rebase over a merged sibling PR guaranteed a conflict
494
- # because the hash changes per parent. Traceability now comes from git
495
- # log on the manifest file itself. `generated_at` still causes minor
496
- # timestamp conflicts but is human-scannable; drop deferred if the class
497
- # still recurs.
498
-
499
- # --- emit ---
500
- if [[ "$DRY_RUN" == "1" ]]; then
501
- echo "$MANIFEST_JSON"
502
- else
503
- echo "$MANIFEST_JSON" > "$OUTPUT_PATH"
504
- echo "Wrote $OUTPUT_PATH ($ENTRY_COUNT entries; commit ${UPSTREAM_COMMIT:0:7})" >&2
505
- fi
@@ -1,28 +0,0 @@
1
- #!/usr/bin/env bash
2
- # tier: lite
3
- # generate-tier-manifest.sh — thin wrapper over generate-lite-manifest.sh
4
- # for the tier-agnostic API per bassclef-upstream#1295.
5
- #
6
- # generate-lite-manifest.sh keeps its historical name for backward compat.
7
- # This wrapper exposes the new API: `generate-tier-manifest.sh <tier>`.
8
- #
9
- # Usage:
10
- # bash scripts/generate-tier-manifest.sh lite # writes lite-manifest.json
11
- # bash scripts/generate-tier-manifest.sh standard # writes standard-manifest.json (superset of lite)
12
- # bash scripts/generate-tier-manifest.sh ultra # writes ultra-manifest.json (superset of lite + standard)
13
- # bash scripts/generate-tier-manifest.sh <tier> --dry-run
14
- #
15
- # Per #1295 body L23 — standard + ultra manifests derived as supersets of lite.
16
-
17
- set -euo pipefail
18
-
19
- if [ $# -lt 1 ]; then
20
- echo "usage: $0 <tier> [--dry-run] [--output PATH] [--root PATH]" >&2
21
- echo " tier: lite | standard | ultra | standard-pro" >&2
22
- exit 1
23
- fi
24
-
25
- TIER="$1"; shift
26
-
27
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
28
- exec bash "${SCRIPT_DIR}/generate-lite-manifest.sh" --tier "$TIER" "$@"