@thebassclef/lite 0.1.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +216 -137
- package/dist/cli.js +218 -139
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.bassclef-source.json +10 -0
- package/dist/lite/.claude/settings.json +212 -0
- package/dist/lite/CLAUDE.md +41 -0
- package/dist/lite/gitignore +58 -0
- package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
- package/dist/lite/whereami.md +24 -0
- package/package.json +8 -2
- package/substrate/.bassclef/lite-manifest.json +0 -2701
- package/substrate/.claude/agents/architect.md +0 -70
- package/substrate/.claude/agents/builder.md +0 -114
- package/substrate/.claude/agents/designer.md +0 -156
- package/substrate/.claude/agents/reviewer.md +0 -88
- package/substrate/.claude/hooks/artifact-ingestion-gate.sh +0 -357
- package/substrate/.claude/hooks/assert-verify-steering.sh +0 -77
- package/substrate/.claude/hooks/bassclef-source-config-validate.sh +0 -215
- package/substrate/.claude/hooks/bassclef-sync.sh +0 -634
- package/substrate/.claude/hooks/compound-noun-scrub.sh +0 -292
- package/substrate/.claude/hooks/kiss-expansion-inject.sh +0 -69
- package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
- package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -492
- package/substrate/.claude/hooks/plain-english-steering.sh +0 -156
- package/substrate/.claude/hooks/post-skill-friction-check.sh +0 -177
- package/substrate/.claude/hooks/post-skill-telemetry.sh +0 -62
- package/substrate/.claude/hooks/pre-build-gate.sh +0 -511
- package/substrate/.claude/hooks/pre-commit-gate.sh +0 -451
- package/substrate/.claude/hooks/session-end.sh +0 -433
- package/substrate/.claude/hooks/session-reflection.sh +0 -303
- package/substrate/.claude/hooks/skill-body-grade-gate.sh +0 -219
- package/substrate/.claude/hooks/skill-body-intent-drift.sh +0 -107
- package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
- package/substrate/.claude/hooks/state-validate.sh +0 -271
- package/substrate/.claude/hooks/substrate-clarity-gate.sh +0 -1110
- package/substrate/.claude/hooks/temperance-gate.sh +0 -147
- package/substrate/.claude/hooks/testing-tier-enforce.sh +0 -233
- package/substrate/.claude/hooks/turn-prose-grade-measure.sh +0 -219
- package/substrate/.claude/hooks/turn-prose-kiss-check.sh +0 -463
- package/substrate/.claude/hooks/vocabulary-migration-check.sh +0 -171
- package/substrate/.claude/hooks/whereami-utc-gate.sh +0 -142
- package/substrate/.claude/luminaries/alan-cooper.md +0 -170
- package/substrate/.claude/luminaries/alistair-cockburn.md +0 -140
- package/substrate/.claude/luminaries/amazon-pr-faq.md +0 -34
- package/substrate/.claude/luminaries/ash-maurya.md +0 -121
- package/substrate/.claude/luminaries/bill-buxton.md +0 -210
- package/substrate/.claude/luminaries/charles-sanders-peirce.md +0 -150
- package/substrate/.claude/luminaries/david-ogilvy.md +0 -192
- package/substrate/.claude/luminaries/don-norman.md +0 -173
- package/substrate/.claude/luminaries/edward-tufte.md +0 -179
- package/substrate/.claude/luminaries/eric-evans.md +0 -160
- package/substrate/.claude/luminaries/frederick-brooks.md +0 -50
- package/substrate/.claude/luminaries/gang-of-four.md +0 -157
- package/substrate/.claude/luminaries/glenford-myers.md +0 -230
- package/substrate/.claude/luminaries/hunt-thomas.md +0 -115
- package/substrate/.claude/luminaries/hyrum-wright.md +0 -94
- package/substrate/.claude/luminaries/jason-fried-dhh.md +0 -46
- package/substrate/.claude/luminaries/jesse-james-garrett.md +0 -154
- package/substrate/.claude/luminaries/john-ousterhout.md +0 -94
- package/substrate/.claude/luminaries/karl-popper.md +0 -132
- package/substrate/.claude/luminaries/kent-beck.md +0 -168
- package/substrate/.claude/luminaries/linus-torvalds.md +0 -218
- package/substrate/.claude/luminaries/martin-fowler.md +0 -164
- package/substrate/.claude/luminaries/michael-feathers.md +0 -125
- package/substrate/.claude/luminaries/michael-nygard.md +0 -118
- package/substrate/.claude/luminaries/robert-c-martin.md +0 -164
- package/substrate/.claude/luminaries/saltzer-schroeder.md +0 -194
- package/substrate/.claude/luminaries/sophia-prater.md +0 -193
- package/substrate/.claude/luminaries/stephen-toulmin.md +0 -131
- package/substrate/.claude/luminaries/tony-hoare.md +0 -170
- package/substrate/.claude/luminaries/vaughn-vernon.md +0 -50
- package/substrate/.claude/luminaries/w-edwards-deming.md +0 -158
- package/substrate/.claude/rules/accessor-library-discipline.md +0 -138
- package/substrate/.claude/rules/adr-discipline.md +0 -120
- package/substrate/.claude/rules/api-conventions.md +0 -125
- package/substrate/.claude/rules/artifact-ingestion.md +0 -179
- package/substrate/.claude/rules/assert-only-after-verify.md +0 -137
- package/substrate/.claude/rules/blocked-items.md +0 -146
- package/substrate/.claude/rules/bootstrap-pair-discipline.md +0 -141
- package/substrate/.claude/rules/branching.md +0 -28
- package/substrate/.claude/rules/cold-adopter-harness-discipline.md +0 -129
- package/substrate/.claude/rules/commit-conventions.md +0 -22
- package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +0 -188
- package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +0 -188
- package/substrate/.claude/rules/context-engineering.md +0 -202
- package/substrate/.claude/rules/context-management.md +0 -85
- package/substrate/.claude/rules/defensive-bash.md +0 -68
- package/substrate/.claude/rules/deferred-actions.md +0 -233
- package/substrate/.claude/rules/destructive-operations.md +0 -69
- package/substrate/.claude/rules/diagnosis.md +0 -38
- package/substrate/.claude/rules/github-issue-flash-tweet.md +0 -156
- package/substrate/.claude/rules/guardrails.md +0 -73
- package/substrate/.claude/rules/hook-wire-on-author.md +0 -103
- package/substrate/.claude/rules/identifier-leak-prevention.md +0 -104
- package/substrate/.claude/rules/iteration-bet-brief-completeness.md +0 -54
- package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +0 -98
- package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +0 -89
- package/substrate/.claude/rules/loop-discipline.md +0 -81
- package/substrate/.claude/rules/manual-prod-approval.md +0 -100
- package/substrate/.claude/rules/marker-enrichment-discipline.md +0 -99
- package/substrate/.claude/rules/mobile-ephemeral-session.md +0 -109
- package/substrate/.claude/rules/new-dependency-check.md +0 -51
- package/substrate/.claude/rules/oo-ad-entry-point.md +0 -117
- package/substrate/.claude/rules/operator-facing-prose.md +0 -196
- package/substrate/.claude/rules/option-label-discipline.md +0 -108
- package/substrate/.claude/rules/pattern-annotation.md +0 -100
- package/substrate/.claude/rules/plain-english-discipline.md +0 -156
- package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +0 -211
- package/substrate/.claude/rules/pr-body-shape.md +0 -317
- package/substrate/.claude/rules/pr-strategy.md +0 -167
- package/substrate/.claude/rules/pr-title-shape.md +0 -161
- package/substrate/.claude/rules/prototype-workflow.md +0 -65
- package/substrate/.claude/rules/reserved-skill-names.md +0 -123
- package/substrate/.claude/rules/schema-management.md +0 -49
- package/substrate/.claude/rules/sdlc-gates.md +0 -149
- package/substrate/.claude/rules/security.md +0 -37
- package/substrate/.claude/rules/session-artifacts.md +0 -236
- package/substrate/.claude/rules/skill-composition-declarations.md +0 -124
- package/substrate/.claude/rules/skill-description-clarity.md +0 -247
- package/substrate/.claude/rules/skill-procedure-step-list.md +0 -137
- package/substrate/.claude/rules/state-schema-validation.md +0 -162
- package/substrate/.claude/rules/stuck-signal-diagnostic.md +0 -140
- package/substrate/.claude/rules/substrate-config-schema.md +0 -98
- package/substrate/.claude/rules/test-list-discipline.md +0 -175
- package/substrate/.claude/rules/test-sufficiency.md +0 -210
- package/substrate/.claude/rules/testing-tier-config.md +0 -145
- package/substrate/.claude/rules/testing.md +0 -38
- package/substrate/.claude/rules/turn-estimate-grounding.md +0 -134
- package/substrate/.claude/rules/visual-hierarchy.md +0 -437
- package/substrate/.claude/rules/we-dont-break-adopters.md +0 -126
- package/substrate/.claude/rules/whereami-load-bearing.md +0 -202
- package/substrate/.claude/rules/writing-craft-discipline.md +0 -92
- package/substrate/.claude/rules/wu-sequencing-compounds.md +0 -145
- package/substrate/.claude/skills/build/SKILL.md +0 -640
- package/substrate/.claude/skills/chronicle/SKILL.md +0 -55
- package/substrate/.claude/skills/clean-artifacts/SKILL.md +0 -249
- package/substrate/.claude/skills/decompose/SKILL.md +0 -280
- package/substrate/.claude/skills/diagnose/SKILL.md +0 -297
- package/substrate/.claude/skills/feynman/SKILL.md +0 -90
- package/substrate/.claude/skills/howdoi/SKILL.md +0 -105
- package/substrate/.claude/skills/ia-model/SKILL.md +0 -108
- package/substrate/.claude/skills/interaction-design/SKILL.md +0 -112
- package/substrate/.claude/skills/interpret-input/SKILL.md +0 -180
- package/substrate/.claude/skills/journal/SKILL.md +0 -209
- package/substrate/.claude/skills/kiss/SKILL.md +0 -449
- package/substrate/.claude/skills/launch/SKILL.md +0 -915
- package/substrate/.claude/skills/lean-canvas/SKILL.md +0 -332
- package/substrate/.claude/skills/longrun/SKILL.md +0 -463
- package/substrate/.claude/skills/luminary/SKILL.md +0 -481
- package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +0 -177
- package/substrate/.claude/skills/onboard-repo/SKILL.md +0 -1624
- package/substrate/.claude/skills/pattern-review/SKILL.md +0 -99
- package/substrate/.claude/skills/personas/SKILL.md +0 -207
- package/substrate/.claude/skills/promote/SKILL.md +0 -283
- package/substrate/.claude/skills/requirement/SKILL.md +0 -98
- package/substrate/.claude/skills/retro/SKILL.md +0 -117
- package/substrate/.claude/skills/riff/SKILL.md +0 -114
- package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +0 -163
- package/substrate/.claude/skills/session-end/SKILL.md +0 -309
- package/substrate/.claude/skills/session-log/SKILL.md +0 -299
- package/substrate/.claude/skills/skills/SKILL.md +0 -228
- package/substrate/.claude/skills/spec/SKILL.md +0 -105
- package/substrate/.claude/skills/sprint/SKILL.md +0 -392
- package/substrate/.claude/skills/stage/SKILL.md +0 -384
- package/substrate/.claude/skills/state-a-problem/SKILL.md +0 -185
- package/substrate/.claude/skills/temperance/SKILL.md +0 -108
- package/substrate/.claude/skills/use-case/SKILL.md +0 -417
- package/substrate/.claude/skills/user-stories/SKILL.md +0 -268
- package/substrate/.claude/skills/value-prop/SKILL.md +0 -251
- package/substrate/.claude/skills/verify/SKILL.md +0 -160
- package/substrate/.claude/skills/visual-review/SKILL.md +0 -503
- package/substrate/.claude/skills/whats-the-plan/SKILL.md +0 -202
- package/substrate/.claude/skills/whereami/SKILL.md +0 -307
- package/substrate/AGENTS.md +0 -79
- package/substrate/CLAUDE-lite.md +0 -85
- package/substrate/CODE_OF_CONDUCT.md +0 -28
- package/substrate/CONTRIBUTING.md +0 -177
- package/substrate/README.md +0 -173
- package/substrate/SECURITY.md +0 -19
- package/substrate/architecture/decisions/ADR-029-release-pipeline.md +0 -79
- package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +0 -139
- package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +0 -192
- package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +0 -145
- package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +0 -155
- package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +0 -162
- package/substrate/lib/clean-artifacts-sweep.sh +0 -112
- package/substrate/lib/code-comment-discipline.sh +0 -144
- package/substrate/lib/composer-preflight.sh +0 -459
- package/substrate/lib/hook-inject.sh +0 -255
- package/substrate/lib/luminary-pick.sh +0 -96
- package/substrate/lib/output-discipline.sh +0 -143
- package/substrate/lib/prose-scan-boundary.sh +0 -171
- package/substrate/lib/rewrite-check.sh +0 -214
- package/substrate/lib/state.sh +0 -1372
- package/substrate/lib/telemetry.sh +0 -205
- package/substrate/lib/tier-check.sh +0 -187
- package/substrate/lib/tier-dependency-audit.sh +0 -1088
- package/substrate/presence/install/bassclef-hook-connect.sh +0 -178
- package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +0 -841
- package/substrate/presence/install/bassclef-sync.template.sh +0 -2076
- package/substrate/presence/install/schedule-auto-save.cron.sh +0 -88
- package/substrate/presence/install/schedule-auto-save.taskscheduler.md +0 -122
- package/substrate/scripts/aggregate-telemetry.sh +0 -217
- package/substrate/scripts/analyze-tier-dependencies.sh +0 -239
- package/substrate/scripts/generate-lite-manifest.sh +0 -505
- package/substrate/scripts/generate-tier-manifest.sh +0 -28
- package/substrate/scripts/intent-drift-check.sh +0 -456
- package/substrate/scripts/lite-manifest-drift-check.sh +0 -146
- package/substrate/scripts/render-lite-manifest-doc.sh +0 -150
- package/substrate/standards/adr-template.md +0 -86
- package/substrate/standards/api-conventions/nextjs.md +0 -84
- package/substrate/standards/artifact-composition.md +0 -209
- package/substrate/standards/bash-hook-safety.md +0 -246
- package/substrate/standards/bassclef-configs-schema.md +0 -232
- package/substrate/standards/bassclef-evolution.md +0 -143
- package/substrate/standards/bassclef-internal-jargon.md +0 -244
- package/substrate/standards/bassclef-managed-sentinel.md +0 -96
- package/substrate/standards/bassclef-source-config.md +0 -228
- package/substrate/standards/branch-stacking.md +0 -408
- package/substrate/standards/code-safety-principles.md +0 -176
- package/substrate/standards/composer-prerequisites.md +0 -155
- package/substrate/standards/deferred-actions-schema.md +0 -204
- package/substrate/standards/dependency-discipline/cargo.md +0 -39
- package/substrate/standards/dependency-discipline/gem.md +0 -43
- package/substrate/standards/dependency-discipline/go-mod.md +0 -41
- package/substrate/standards/dependency-discipline/npm.md +0 -42
- package/substrate/standards/dependency-discipline/pip.md +0 -42
- package/substrate/standards/deployment-topology/ec2-tailscale.md +0 -225
- package/substrate/standards/deployment-topology.md +0 -69
- package/substrate/standards/docs-sync-allowlist.md +0 -76
- package/substrate/standards/domain-and-dns.md +0 -145
- package/substrate/standards/frontend-stack.md +0 -67
- package/substrate/standards/frontmatter-schema.md +0 -154
- package/substrate/standards/graceful-exit.md +0 -227
- package/substrate/standards/hook-idempotency.md +0 -102
- package/substrate/standards/hook-injection-discipline.md +0 -202
- package/substrate/standards/hook-install-class.md +0 -215
- package/substrate/standards/input-handler-interface.md +0 -152
- package/substrate/standards/lite-manifest-schema-changes.md +0 -135
- package/substrate/standards/luminary-matching.md +0 -105
- package/substrate/standards/luminary-problem-patterns.md +0 -481
- package/substrate/standards/migration-discipline/active-record.md +0 -50
- package/substrate/standards/migration-discipline/alembic.md +0 -43
- package/substrate/standards/migration-discipline/gorm.md +0 -50
- package/substrate/standards/migration-discipline/prisma.md +0 -53
- package/substrate/standards/migration-discipline/sqlalchemy.md +0 -51
- package/substrate/standards/mobile-ephemeral-session.md +0 -167
- package/substrate/standards/model-routing-discipline.md +0 -160
- package/substrate/standards/ogilvy-writing-rules.md +0 -225
- package/substrate/standards/opener-discipline.md +0 -96
- package/substrate/standards/operator-facing-prose-discipline.md +0 -201
- package/substrate/standards/persona-schema.md +0 -229
- package/substrate/standards/pluggable-luminaries.md +0 -323
- package/substrate/standards/pr-body-discipline.md +0 -115
- package/substrate/standards/preview-state-schema.md +0 -189
- package/substrate/standards/project-directory-layout.md +0 -276
- package/substrate/standards/release-tagging.md +0 -137
- package/substrate/standards/reserved-skill-names.md +0 -120
- package/substrate/standards/scannable-multi-option-output.md +0 -261
- package/substrate/standards/sdlc-compliance.md +0 -286
- package/substrate/standards/sdlc-gates/typescript.md +0 -57
- package/substrate/standards/secrets-lifecycle.md +0 -210
- package/substrate/standards/security-scanner-adapter.md +0 -145
- package/substrate/standards/session-board.md +0 -256
- package/substrate/standards/skill-output-discipline.md +0 -90
- package/substrate/standards/state-spine-contract.md +0 -255
- package/substrate/standards/state-spine.md +0 -511
- package/substrate/standards/steering-hints/kiss-words.md +0 -11
- package/substrate/standards/substrate-config-schema.md +0 -267
- package/substrate/standards/tech-stack-config.md +0 -109
- package/substrate/standards/tier-dependency-analysis.md +0 -167
- package/substrate/standards/tier-runtime-deps/lite.md +0 -57
- package/substrate/standards/tier-tag-schema.md +0 -155
- package/substrate/standards/two-layer-config.md +0 -99
- package/substrate/standards/use-case-format.md +0 -292
- package/substrate/standards/user-story-invest.md +0 -268
- package/substrate/standards/velocity-and-appetite.md +0 -229
- package/substrate/standards/voice-input-pattern.md +0 -119
- package/substrate/standards/whereami-schema.md +0 -301
- package/substrate/standards/worktree-management.md +0 -211
- package/substrate/standards/writing-guide.md +0 -213
- package/substrate/templates/chronicle-template.md +0 -75
- package/substrate/templates/deferred-action-template.md +0 -45
- package/substrate/templates/memory-proposal-template.md +0 -77
- package/substrate/templates/persona-template.md +0 -200
- package/substrate/templates/pr-faq.md +0 -45
- package/substrate/templates/secret-rotation-template.md +0 -162
- package/substrate/templates/spec-template.md +0 -131
- package/substrate/templates/use-case-template.md +0 -194
- package/substrate/templates/user-story-template.md +0 -107
- package/substrate/templates/whereami-template.md +0 -101
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# tier: lite
|
|
3
|
-
# install-class: dual
|
|
4
|
-
#
|
|
5
|
-
# whereami-utc-gate.sh — PreToolUse hook that BLOCKs Edit|Write|MultiEdit
|
|
6
|
-
# on docs/whereami.md when last_updated.at value does not end in Z (UTC).
|
|
7
|
-
#
|
|
8
|
-
# Wires per .claude/settings.json under hooks.PreToolUse with matcher
|
|
9
|
-
# "Edit|Write|MultiEdit". Reads the tool's event JSON from stdin,
|
|
10
|
-
# extracts the incoming content (content for Write; new_string for Edit
|
|
11
|
-
# and MultiEdit), scans for last_updated.at timestamp values in both
|
|
12
|
-
# YAML-frontmatter form (`at: <timestamp>` under `last_updated:` block)
|
|
13
|
-
# and markdown-section form (`## Last updated` followed by a timestamp).
|
|
14
|
-
# BLOCKs (exit 2) when any value carries a non-Z offset.
|
|
15
|
-
#
|
|
16
|
-
# Cure B side of #897; Cure A (sync-hook parser accepts both shapes for
|
|
17
|
-
# grace window) shipped in bet 26e PR #917. Cure B is the write-time
|
|
18
|
-
# gate; adopter grace window per ADR-031 through 2026-10-31 — Cure A
|
|
19
|
-
# parser keeps working during migration.
|
|
20
|
-
#
|
|
21
|
-
# Ships as WU-4 of bet 2026-07-26g.
|
|
22
|
-
#
|
|
23
|
-
# Override: SKIP_WHEREAMI_UTC_GATE=1 (logged to stderr).
|
|
24
|
-
#
|
|
25
|
-
# Pairs with: .claude/rules/state-schema-validation.md (sister discipline
|
|
26
|
-
# at state-spine surface; this hook covers the whereami-
|
|
27
|
-
# specific UTC-Z constraint)
|
|
28
|
-
|
|
29
|
-
set -u
|
|
30
|
-
|
|
31
|
-
# === Override path ===
|
|
32
|
-
|
|
33
|
-
if [ "${SKIP_WHEREAMI_UTC_GATE:-}" = "1" ]; then
|
|
34
|
-
echo "[whereami-utc-gate.sh] SKIP_WHEREAMI_UTC_GATE=1 — bypassing" >&2
|
|
35
|
-
exit 0
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
# === Read PreToolUse event ===
|
|
39
|
-
|
|
40
|
-
EVENT_JSON="$(cat 2>/dev/null || true)"
|
|
41
|
-
if [ -z "$EVENT_JSON" ]; then
|
|
42
|
-
exit 0 # empty stdin → pass through (fail-soft per stdin contract)
|
|
43
|
-
fi
|
|
44
|
-
|
|
45
|
-
# Fail-soft on malformed JSON per sufficiency criterion 6
|
|
46
|
-
TOOL_NAME="$(echo "$EVENT_JSON" | jq -r '.tool_name // empty' 2>/dev/null || echo "")"
|
|
47
|
-
TARGET_PATH="$(echo "$EVENT_JSON" | jq -r '.tool_input.file_path // empty' 2>/dev/null || echo "")"
|
|
48
|
-
|
|
49
|
-
# --- Tool filter: only Edit / Write / MultiEdit trigger ---
|
|
50
|
-
case "$TOOL_NAME" in
|
|
51
|
-
Edit|Write|MultiEdit) ;;
|
|
52
|
-
*) exit 0 ;;
|
|
53
|
-
esac
|
|
54
|
-
|
|
55
|
-
# --- Path filter: only docs/whereami.md triggers ---
|
|
56
|
-
if [ -z "$TARGET_PATH" ]; then
|
|
57
|
-
exit 0
|
|
58
|
-
fi
|
|
59
|
-
|
|
60
|
-
# Match either bare "docs/whereami.md" or an absolute path ending in it
|
|
61
|
-
case "$TARGET_PATH" in
|
|
62
|
-
*/docs/whereami.md|docs/whereami.md) ;;
|
|
63
|
-
*) exit 0 ;;
|
|
64
|
-
esac
|
|
65
|
-
|
|
66
|
-
# === Extract incoming content ===
|
|
67
|
-
|
|
68
|
-
# Write uses .tool_input.content; Edit + MultiEdit use .tool_input.new_string
|
|
69
|
-
CONTENT=""
|
|
70
|
-
case "$TOOL_NAME" in
|
|
71
|
-
Write)
|
|
72
|
-
CONTENT="$(echo "$EVENT_JSON" | jq -r '.tool_input.content // empty' 2>/dev/null || echo "")"
|
|
73
|
-
;;
|
|
74
|
-
Edit|MultiEdit)
|
|
75
|
-
CONTENT="$(echo "$EVENT_JSON" | jq -r '.tool_input.new_string // empty' 2>/dev/null || echo "")"
|
|
76
|
-
;;
|
|
77
|
-
esac
|
|
78
|
-
|
|
79
|
-
if [ -z "$CONTENT" ]; then
|
|
80
|
-
exit 0 # nothing to validate
|
|
81
|
-
fi
|
|
82
|
-
|
|
83
|
-
# === Scan for non-Z last_updated.at values ===
|
|
84
|
-
#
|
|
85
|
-
# Two shapes to cover per Cure A parser scope:
|
|
86
|
-
#
|
|
87
|
-
# 1. YAML frontmatter (Shape B state-spine):
|
|
88
|
-
# last_updated:
|
|
89
|
-
# at: 2026-07-26T18:30:00Z
|
|
90
|
-
#
|
|
91
|
-
# 2. Markdown section (## Last updated form):
|
|
92
|
-
# ## Last updated
|
|
93
|
-
#
|
|
94
|
-
# 2026-07-26T18:30:00Z — session-end
|
|
95
|
-
#
|
|
96
|
-
# The scan pattern: any ISO-8601 timestamp of shape YYYY-MM-DDTHH:MM:SS
|
|
97
|
-
# followed by a non-Z suffix (+HHMM, -HHMM, +HH:MM, -HH:MM). We do NOT
|
|
98
|
-
# require the surrounding structure — a bare non-Z timestamp anywhere
|
|
99
|
-
# in the whereami content is a BLOCK signal.
|
|
100
|
-
|
|
101
|
-
NON_Z_MATCH=""
|
|
102
|
-
|
|
103
|
-
# Regex catches: 2026-07-26T18:30:00+0100 / -0500 / +01:00 / -05:00
|
|
104
|
-
NON_Z_PATTERN='[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[+-][0-9]{2}:?[0-9]{2}'
|
|
105
|
-
|
|
106
|
-
NON_Z_MATCH="$(printf '%s' "$CONTENT" | grep -oE "$NON_Z_PATTERN" | head -3 || true)"
|
|
107
|
-
|
|
108
|
-
if [ -z "$NON_Z_MATCH" ]; then
|
|
109
|
-
exit 0 # all timestamps end in Z (or none present); pass
|
|
110
|
-
fi
|
|
111
|
-
|
|
112
|
-
# === BLOCK message ===
|
|
113
|
-
|
|
114
|
-
echo "" >&2
|
|
115
|
-
echo "============================================" >&2
|
|
116
|
-
echo "🛑 WHEREAMI UTC GATE — BLOCKED 🛑" >&2
|
|
117
|
-
echo "============================================" >&2
|
|
118
|
-
echo "" >&2
|
|
119
|
-
echo "File: $TARGET_PATH" >&2
|
|
120
|
-
echo "Tool: $TOOL_NAME" >&2
|
|
121
|
-
echo "" >&2
|
|
122
|
-
echo "Found timestamp value(s) with non-Z (non-UTC) offset:" >&2
|
|
123
|
-
echo "$NON_Z_MATCH" | sed 's/^/ /' >&2
|
|
124
|
-
echo "" >&2
|
|
125
|
-
echo "Spec: .claude/skills/session-end/SKILL.md L60 — \"Set last_updated" >&2
|
|
126
|
-
echo " to current UTC ISO-8601 timestamp.\"" >&2
|
|
127
|
-
echo "" >&2
|
|
128
|
-
echo "Cure: rewrite the value to end in Z. Get current UTC:" >&2
|
|
129
|
-
echo "" >&2
|
|
130
|
-
echo " date -u +%FT%TZ" >&2
|
|
131
|
-
echo "" >&2
|
|
132
|
-
echo "Adopter grace window per ADR-031: Cure A parser (bet 26e PR #917)" >&2
|
|
133
|
-
echo "accepts both Z and +HHMM through 2026-10-31. Cure B (this hook)" >&2
|
|
134
|
-
echo "closes the write-time class so new writes stay UTC-Z." >&2
|
|
135
|
-
echo "" >&2
|
|
136
|
-
echo "Override (logged): SKIP_WHEREAMI_UTC_GATE=1 <command>" >&2
|
|
137
|
-
echo "" >&2
|
|
138
|
-
echo "Rule: .claude/rules/state-schema-validation.md" >&2
|
|
139
|
-
echo "Issue: bassclef-upstream#897 Cure B" >&2
|
|
140
|
-
echo "============================================" >&2
|
|
141
|
-
|
|
142
|
-
exit 2
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
name: Alan Cooper
|
|
4
|
-
slug: alan-cooper
|
|
5
|
-
claimed_by: [designer]
|
|
6
|
-
referenced_by_skills: [ia-model, jtbd-tasks, task-scenarios]
|
|
7
|
-
primary_domain: ux
|
|
8
|
-
depth: full
|
|
9
|
-
sources:
|
|
10
|
-
- type: book
|
|
11
|
-
title: "About Face: The Essentials of Interaction Design (4th edition)"
|
|
12
|
-
authors: ["Alan Cooper", "Robert Reimann", "David Cronin", "Christopher Noessel"]
|
|
13
|
-
year: 2014
|
|
14
|
-
url: "https://www.wiley.com/en-us/About+Face%3A+The+Essentials+of+Interaction+Design%2C+4th+Edition-p-9781118766576"
|
|
15
|
-
isbn: "9781118766576"
|
|
16
|
-
methodology_covered:
|
|
17
|
-
- "Goal-Directed Design — design starts from user goals, not features or tasks"
|
|
18
|
-
- "Personas as design tools — composite archetypes derived from user research"
|
|
19
|
-
- "Scenarios — narrative descriptions of personas using the product to achieve goals"
|
|
20
|
-
- "Three categories of users: novice + intermediate + expert; design for the perpetual intermediate"
|
|
21
|
-
- type: book
|
|
22
|
-
title: "The Inmates Are Running the Asylum: Why High-Tech Products Drive Us Crazy and How to Restore the Sanity"
|
|
23
|
-
authors: ["Alan Cooper"]
|
|
24
|
-
year: 1999
|
|
25
|
-
url: "https://www.pearson.com/en-us/subject-catalog/p/inmates-are-running-the-asylum-the-why-high-tech-products-drive-us-crazy-and-how-to-restore-the-sanity/P200000009296"
|
|
26
|
-
isbn: "9780672326141"
|
|
27
|
-
methodology_covered:
|
|
28
|
-
- "Programmer-driven design produces hostile interfaces"
|
|
29
|
-
- "Interaction designers as a distinct discipline, separate from engineering"
|
|
30
|
-
- "Persona origin — Cooper's first published articulation of the persona methodology"
|
|
31
|
-
verification_status: verified
|
|
32
|
-
solves_problems_brownfield:
|
|
33
|
-
- "Existing UI exposes the system's structure when users want their workflow"
|
|
34
|
-
- "Power users keep retracing the same multi-step path through the current UI"
|
|
35
|
-
- "Persona research surfaces a goal but the existing UI optimizes for novice exploration"
|
|
36
|
-
- "App is feature-rich but each user wants only one slice for their job"
|
|
37
|
-
solves_problems_greenfield:
|
|
38
|
-
- "Designing a workflow-heavy app for returning users with named goals"
|
|
39
|
-
- "Building a product where personas + scenarios should drive the UI before any screen sketch"
|
|
40
|
-
- "Planning a tool for power users who need their job-specific slice surfaced from day one"
|
|
41
|
-
- "Mid-complexity product where personas keep early design decisions grounded in real users"
|
|
42
|
-
anti_patterns:
|
|
43
|
-
- "Truly simple consumer apps — Cooper overweights workflow modeling"
|
|
44
|
-
- "First-launch novelty experiences — goal-directed assumes a returning user"
|
|
45
|
-
- "Pure marketing or storytelling surfaces"
|
|
46
|
-
description: "\"Personas are precision tools — each one a research-grounded behavioral archetype, not a fictional user."
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
# Alan Cooper
|
|
50
|
-
|
|
51
|
-
## Signature
|
|
52
|
-
|
|
53
|
-
*"Personas are precision tools — each one a research-grounded behavioral archetype, not a fictional user. Start with user goals and let personas carry you there."*
|
|
54
|
-
|
|
55
|
-
"Father of Visual Basic"; founder of Cooper (the consultancy); author of
|
|
56
|
-
**About Face** and **The Inmates Are Running the Asylum**. The bassclef
|
|
57
|
-
voice on **Goal-Directed Design** and the proper use of personas as
|
|
58
|
-
research artifacts.
|
|
59
|
-
|
|
60
|
-
## Core methods
|
|
61
|
-
|
|
62
|
-
- **Goal-Directed Design** — Start with user goals (what they want to
|
|
63
|
-
accomplish, at life/experience/end levels), then derive tasks, then
|
|
64
|
-
derive interface. Feature-first design inverts this and produces
|
|
65
|
-
feature-dense, goal-incoherent products.
|
|
66
|
-
- **Personas as behavioral archetypes** — Built from interview pattern
|
|
67
|
-
analysis, not invented. Each persona represents a distinct goal set +
|
|
68
|
-
mental model + behavior pattern. A good product serves a primary
|
|
69
|
-
persona ruthlessly; secondary personas are served if it doesn't
|
|
70
|
-
compromise the primary.
|
|
71
|
-
- **Three levels of goals** — Life goals (long-term aspirations),
|
|
72
|
-
experience goals (how the interaction should feel), end goals (what
|
|
73
|
-
they want to accomplish in this session). Life goals shape brand;
|
|
74
|
-
experience goals shape interaction; end goals shape task flow.
|
|
75
|
-
- **Scenarios over requirements** — Describe the user in their context
|
|
76
|
-
pursuing their goal. A list of requirements decomposes; a scenario
|
|
77
|
-
holds the context that makes requirements make sense.
|
|
78
|
-
- **Dancing bear anti-pattern** — When something is remarkable *that it
|
|
79
|
-
works at all*, we accept it despite being difficult to use. Enterprise
|
|
80
|
-
software especially. Cooper's insight: don't accept the dancing bear.
|
|
81
|
-
|
|
82
|
-
## When to channel this luminary
|
|
83
|
-
|
|
84
|
-
When the biggest risk is building the wrong thing for the wrong person.
|
|
85
|
-
Cooper dominates when you have a target user population with distinct
|
|
86
|
-
behavior patterns, when goals (not features) should drive the product,
|
|
87
|
-
and when the risk of serving-everyone-badly is real. Think: operator
|
|
88
|
-
tools where the primary user does this job all day, specialist tools
|
|
89
|
-
where casual users will never be the target, B2B products with clear
|
|
90
|
-
user roles.
|
|
91
|
-
|
|
92
|
-
Do NOT channel Cooper as primary for: consumer products with vague
|
|
93
|
-
personas, rapid prototyping where persona rigor is premature, projects
|
|
94
|
-
where research budget doesn't support proper persona development (use
|
|
95
|
-
lightweight JTBD instead).
|
|
96
|
-
|
|
97
|
-
## Stack translation
|
|
98
|
-
|
|
99
|
-
In a Next.js + Prisma operator tool:
|
|
100
|
-
|
|
101
|
-
- **User goals → top-level nav** — If the primary persona's goal is
|
|
102
|
-
"move deals through pipeline efficiently," nav centers on deal flow,
|
|
103
|
-
not on feature taxonomy.
|
|
104
|
-
- **Personas → role-based access + UI variants** — Actual personas
|
|
105
|
-
often map to auth roles (Operator vs Broker vs Viewer). Each role
|
|
106
|
-
gets a goal-optimized surface, not a feature-subset of a generic UI.
|
|
107
|
-
- **Scenarios → key path tests** — Each scenario becomes an end-to-end
|
|
108
|
-
test that walks through the persona's goal. If the scenario breaks,
|
|
109
|
-
the product breaks for that persona.
|
|
110
|
-
- **Primary persona dominance** — When Primary Persona and Secondary
|
|
111
|
-
Persona needs conflict, Primary wins. Tailwind variants, conditional
|
|
112
|
-
rendering, feature flags — all serve this.
|
|
113
|
-
|
|
114
|
-
## Anti-patterns it prevents
|
|
115
|
-
|
|
116
|
-
- **Self-referential design** — designing for ourselves because we're
|
|
117
|
-
easy to imagine. Cooper's rigor demands research-grounded personas.
|
|
118
|
-
- **Generic "the user"** — vague singular user that's really an
|
|
119
|
-
amalgam of all users. Produces features for all, good-fit for none.
|
|
120
|
-
- **Feature-driven roadmap** — building because the feature was
|
|
121
|
-
requested, not because it serves a persona's goal. Accumulates
|
|
122
|
-
feature bloat without coherent direction.
|
|
123
|
-
- **Persona gallery** — fictional marketing personas dressed as UX
|
|
124
|
-
personas. Names, photos, and hobbies without behavioral grounding.
|
|
125
|
-
Useless for design decisions.
|
|
126
|
-
- **Goal conflation** — treating "user wants to export to CSV" as a
|
|
127
|
-
goal. That's a task. The goal is "report to their manager." The task
|
|
128
|
-
could be replaced by a better path to the goal.
|
|
129
|
-
|
|
130
|
-
## Worked example
|
|
131
|
-
|
|
132
|
-
For POA's deal pipeline, Cooper's approach starts with:
|
|
133
|
-
|
|
134
|
-
**Primary persona**: "Operator" — the person whose full-time job is
|
|
135
|
-
managing deal flow. Life goal: become a successful PE operator.
|
|
136
|
-
Experience goal: feel in control of their pipeline at a glance. End
|
|
137
|
-
goals per session: advance stuck deals, respond to broker inbound, log
|
|
138
|
-
new conversations, identify stalled opportunities.
|
|
139
|
-
|
|
140
|
-
**Secondary persona**: "Broker" — external contact. Life goal: maximize
|
|
141
|
-
commissions. Experience goal: trust the platform. End goals per session:
|
|
142
|
-
submit new listings, see status on submitted deals, communicate with
|
|
143
|
-
Operator.
|
|
144
|
-
|
|
145
|
-
**Primary wins**: the main surface is optimized for Operator. Broker
|
|
146
|
-
access is a narrow, focused interface (not the Operator UI with fewer
|
|
147
|
-
permissions). Dashboards emphasize stuck/stalled deals (end-goal
|
|
148
|
-
triggers) over total-deals-count (vanity metric).
|
|
149
|
-
|
|
150
|
-
What Cooper would NOT produce: a generic "deal management platform"
|
|
151
|
-
designed for "users." A feature-grid home page. A Broker UI that's
|
|
152
|
-
just Operator UI with most nav items hidden.
|
|
153
|
-
|
|
154
|
-
## Sources
|
|
155
|
-
|
|
156
|
-
- *About Face: The Essentials of Interaction Design* — Cooper,
|
|
157
|
-
Reimann, Cronin, Noessel, Wiley (4th ed 2014) — the foundational text
|
|
158
|
-
- *The Inmates Are Running the Asylum* — Cooper (1999, rev. 2004)
|
|
159
|
-
- cooper.com — Cooper consultancy (now part of Designit)
|
|
160
|
-
|
|
161
|
-
## Related luminaries
|
|
162
|
-
|
|
163
|
-
- **Kim Goodwin** — Goodwin provides the operational method for
|
|
164
|
-
Cooper's Goal-Directed Design; pair them always.
|
|
165
|
-
- **Sophia Prater** — OOUX starts with objects; Cooper with goals. Both
|
|
166
|
-
reject feature-first. Complementary at different layers.
|
|
167
|
-
- **Teresa Torres** — Continuous Discovery updates Cooper's research
|
|
168
|
-
rigor for weekly cadence.
|
|
169
|
-
- **Indi Young** — Mental models research at the thinking layer below
|
|
170
|
-
Cooper's behavioral archetypes.
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
name: Alistair Cockburn
|
|
4
|
-
slug: alistair-cockburn
|
|
5
|
-
claimed_by: [architect, builder, shaper]
|
|
6
|
-
referenced_by_skills: [decompose, spec, prototype-variants]
|
|
7
|
-
primary_domain: architecture
|
|
8
|
-
depth: full
|
|
9
|
-
solves_problems_brownfield:
|
|
10
|
-
- "The system's business logic is tangled with database access, HTTP handling, and third-party calls — changing one requires understanding all"
|
|
11
|
-
- "Use cases are written as vague user stories that can't be used as acceptance tests"
|
|
12
|
-
- "The architecture works locally but fails at each deployment because no one tested the full wired path"
|
|
13
|
-
- "Every new feature requires touching the database, the service layer, and the API in one change — no independent seams"
|
|
14
|
-
solves_problems_greenfield:
|
|
15
|
-
- "Designing a system where business logic can be tested without a running database or HTTP stack"
|
|
16
|
-
- "Planning the first end-to-end slice that proves the architecture before building any feature depth"
|
|
17
|
-
- "Writing use cases that serve as both requirements and acceptance test specifications"
|
|
18
|
-
- "Choosing a methodology weight that fits the team size and stakes — lightweight for small teams, heavier for safety-critical work"
|
|
19
|
-
anti_patterns:
|
|
20
|
-
- "UI-only or data-layer-only work where hexagonal architecture is over-engineering for the scope"
|
|
21
|
-
- "Exploratory prototypes where formal use cases would slow down learning"
|
|
22
|
-
- "Teams that are fluent in BDD/TDD — the walking skeleton concept is built into their practice"
|
|
23
|
-
sources:
|
|
24
|
-
- type: book
|
|
25
|
-
title: "Writing Effective Use Cases"
|
|
26
|
-
authors: ["Alistair Cockburn"]
|
|
27
|
-
year: 2000
|
|
28
|
-
url: "https://www.amazon.com/Writing-Effective-Use-Cases-Cockburn/dp/0201702258"
|
|
29
|
-
isbn: "0201702258"
|
|
30
|
-
methodology_covered:
|
|
31
|
-
- "Use case writing — title, primary actor, preconditions, main success scenario, extensions"
|
|
32
|
-
- "Goal levels — cloud, kite, sea level (user goals), fish, clam; write at sea level"
|
|
33
|
-
- "Use cases as both requirements and acceptance test specifications"
|
|
34
|
-
- type: book
|
|
35
|
-
title: "Agile Software Development: The Cooperative Game"
|
|
36
|
-
authors: ["Alistair Cockburn"]
|
|
37
|
-
year: 2006
|
|
38
|
-
url: "https://www.amazon.com/Agile-Software-Development-Cooperative-Game/dp/0321482751"
|
|
39
|
-
isbn: "0321482751"
|
|
40
|
-
methodology_covered:
|
|
41
|
-
- "Crystal methodology family — process weight matched to team size and criticality"
|
|
42
|
-
- "Walking skeleton — thin, real, end-to-end path before any feature depth"
|
|
43
|
-
- "Software development as a cooperative game of invention and communication"
|
|
44
|
-
- type: article
|
|
45
|
-
title: "Hexagonal Architecture (Ports and Adapters)"
|
|
46
|
-
authors: ["Alistair Cockburn"]
|
|
47
|
-
year: 2005
|
|
48
|
-
url: "https://alistair.cockburn.us/hexagonal-architecture/"
|
|
49
|
-
methodology_covered:
|
|
50
|
-
- "Ports and Adapters — business logic in the center, ports define interfaces, adapters implement them"
|
|
51
|
-
- "Driving vs driven adapters — test adapters on the driving side; real infrastructure on the driven side"
|
|
52
|
-
- "Business logic never imports infrastructure"
|
|
53
|
-
- type: website
|
|
54
|
-
title: "Alistair Cockburn primary site"
|
|
55
|
-
authors: ["Alistair Cockburn"]
|
|
56
|
-
year: 2000
|
|
57
|
-
url: "https://alistair.cockburn.us/"
|
|
58
|
-
methodology_covered:
|
|
59
|
-
- "Primary site for Hexagonal Architecture article and use case writing resources"
|
|
60
|
-
verification_status: source_gap_flagged
|
|
61
|
-
description: "\"Build the walking skeleton first — the thinnest possible end-to-end slice that exercises every architectural layer, every deploy step, every test layer, before adding any feature."
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
# Alistair Cockburn
|
|
65
|
-
|
|
66
|
-
## Signature
|
|
67
|
-
|
|
68
|
-
*"Build the walking skeleton first — the thinnest possible end-to-end slice that exercises every architectural layer, every deploy step, every test layer, before adding any feature. Prove the architecture works; then add flesh."* [ref:2]
|
|
69
|
-
|
|
70
|
-
Agile Manifesto signatory; originator of the Crystal methodology family; author of **Writing Effective Use Cases** (2000) [ref:1] and the **Hexagonal Architecture** (Ports & Adapters) pattern [ref:3]. The bassclef voice on behavior-driven requirements writing and on architecture that separates business logic from all infrastructure.
|
|
71
|
-
|
|
72
|
-
<!-- SOURCE GAP: alistair.cockburn.us/hexagonal-architecture/ listed as [ref:3] could not be verified via HTTP fetch during audit (returned empty). URL is widely cited in the industry as the original source. If the page has moved, the SENTINEL_bassclef_URL is https://web.archive.org/web/2005*/https://alistair.cockburn.us/hexagonal-architecture/ as an archival fallback. -->
|
|
73
|
-
|
|
74
|
-
## Core methods
|
|
75
|
-
|
|
76
|
-
- **Walking skeleton** — Build one thin, real, end-to-end path through the entire system before adding any feature depth: UI → API → service → DB → tests → CI → deploy. The path must be trivial but real — not a mock or a stub at any layer. The skeleton proves the architecture holds. Then add flesh (features, complexity, error paths) on a proven foundation. [ref:2]
|
|
77
|
-
- **Hexagonal Architecture (Ports & Adapters)** — Business logic lives in the center. Ports are interfaces the business logic defines: "I need a way to store a deal," "I need a way to send a notification." Adapters on the outside implement those interfaces with real infrastructure (Prisma, email providers, HTTP). The business logic never imports infrastructure. Tests inject test adapters; production injects real ones. [ref:3]
|
|
78
|
-
- **Use case writing** — A use case has: title (goal), primary actor, preconditions, main success scenario (numbered steps), and extensions (alternate flows and failure cases). Cockburn's goal levels matter: cloud level (abstract goals), kite level (near goals), sea level (user goals — the target), fish level (sub-goals), and clam level (too detailed). Write use cases at sea level. [ref:1]
|
|
79
|
-
- **Crystal methodology scaling** — Process weight should match team size and criticality. Crystal Clear (2-8 people, low stakes) is minimal. Crystal Orange (25-50 people, moderate stakes) is heavier. Crystal Red (10-20 people, high criticality) is heaviest. Rejects one-size-fits-all methodology: the right process is the lightest one that works for this team and these stakes. [ref:2]
|
|
80
|
-
|
|
81
|
-
## When to channel this luminary
|
|
82
|
-
|
|
83
|
-
When the primary risk is that business logic will be entangled with infrastructure, or that the first deployable slice has never been verified end-to-end. Cockburn dominates new system setup (walking skeleton is the first commit), service layer design (hexagonal separates business from infrastructure), and requirements writing for complex workflows (use cases at sea level). Pair with Evans (domain modeling for the center of the hexagon), Brown (C4 for documenting the resulting architecture), and Beck (TDD for the tests that plug into the hexagonal ports).
|
|
84
|
-
|
|
85
|
-
INSTEAD of using Cockburn's use case formalism for simple CRUD features: a lightweight user story ("as a broker, I can submit a deal listing") is sufficient when the behavior has no branching extensions and no preconditions that matter. Use cases earn their weight when the behavior has multiple actors, multiple failure modes, or serves as an acceptance test specification.
|
|
86
|
-
|
|
87
|
-
## Stack translation
|
|
88
|
-
|
|
89
|
-
In Next.js + Prisma + TypeScript:
|
|
90
|
-
|
|
91
|
-
- **Walking skeleton** — first PR on a new project: one route (`/api/deals`), one Prisma model (`Deal`), one React component (a deal card), one vitest test, one Playwright smoke test, wired CI/CD. No features yet. The skeleton proves the stack works end-to-end before any feature is built.
|
|
92
|
-
- **Hexagonal Architecture** — business logic lives in `src/lib/domain/`; Prisma is an adapter in `src/lib/infrastructure/database/`; the domain defines interfaces (`DealRepository`) that infrastructure implements. Server actions call domain functions; domain functions call repository interfaces; tests inject fake repositories.
|
|
93
|
-
- **Use cases → acceptance tests** — a Cockburn use case's main success scenario is a Playwright test script. Each step in the use case is an interaction. Each extension is a branch in the test. Use case writing and test writing become the same activity.
|
|
94
|
-
- **Goal levels in backlog** — sea-level use cases become iteration bets; sub-goals (fish/clam level) become tasks within a bet. Keeps the betting table at the right altitude.
|
|
95
|
-
|
|
96
|
-
## Anti-patterns it prevents
|
|
97
|
-
|
|
98
|
-
- **Logic in the adapter** — business rules (deal qualification criteria, stage transition policies) coded inside the Prisma query or the Next.js route handler. These rules are invisible to unit tests, tangled with infrastructure, and duplicated when a new adapter (a worker, a CLI) needs the same rule.
|
|
99
|
-
INSTEAD: move the rule to the domain layer; the adapter calls the domain function, not the other way around.
|
|
100
|
-
- **Test-the-infrastructure tests** — tests that spin up a real database and test that Prisma can write to it. These are infrastructure tests, not domain tests. Slow, brittle, and they test the wrong thing.
|
|
101
|
-
INSTEAD: test the domain with test adapters; test the infrastructure adapter in integration tests that stay in the integration tier.
|
|
102
|
-
- **Flabby use cases** — use case main success scenarios that describe system internals ("the system updates the deal record in the database") rather than observable behavior ("the deal status changes to LOI and the broker is notified"). Cockburn's use cases are observable, not implementation-visible. [ref:1]
|
|
103
|
-
- **No skeleton, all flesh** — starting a project by building feature depth before verifying the architectural path end-to-end. The first deployment fails in production because the path was never real until then.
|
|
104
|
-
|
|
105
|
-
## Worked example
|
|
106
|
-
|
|
107
|
-
For POA's deal stage transition feature:
|
|
108
|
-
|
|
109
|
-
**Walking skeleton**: before building any stage-transition UI, build one thin path: a Next.js server action that changes a deal's status, a Prisma write that persists it, a React component that shows the new status, and a Playwright test that confirms the status change is visible after the action. This skeleton runs in CI. Then add the full transition policy, the validation rules, and the notification flow.
|
|
110
|
-
|
|
111
|
-
**Hexagonal architecture**:
|
|
112
|
-
- Port: `StageTransitionPolicy` interface — `canTransition(deal: Deal, targetStage: Stage): PolicyResult`
|
|
113
|
-
- Adapter: `NdaRequiredPolicy` implements `StageTransitionPolicy` using domain logic (no Prisma, no HTTP)
|
|
114
|
-
- Server action: calls `StageTransitionService.advance(dealId, targetStage)` — domain function that uses the policy interface
|
|
115
|
-
- Test: injects `AlwaysAllowPolicy` or `AlwaysDenyPolicy` as test adapters; no DB required
|
|
116
|
-
|
|
117
|
-
**Use case (sea level)**:
|
|
118
|
-
- Title: Advance Deal to LOI
|
|
119
|
-
- Actor: Operator
|
|
120
|
-
- Preconditions: deal is in "Initial Contact" stage; operator is authenticated
|
|
121
|
-
- Main success: operator selects LOI from stage menu → system validates NDA signed → system changes status → broker is notified → operator sees updated stage
|
|
122
|
-
- Extension 2a: NDA not signed → system shows "NDA required" message → deal stage unchanged
|
|
123
|
-
|
|
124
|
-
## Sources
|
|
125
|
-
|
|
126
|
-
- *Writing Effective Use Cases* — Cockburn, Addison-Wesley (2000) [ref:1]
|
|
127
|
-
- "Hexagonal Architecture" — Cockburn, alistair.cockburn.us (2005) — the original article [ref:3]
|
|
128
|
-
- *Agile Software Development: The Cooperative Game* — Cockburn, Addison-Wesley (2006) [ref:2]
|
|
129
|
-
- alistair.cockburn.us — primary site [ref:4]
|
|
130
|
-
|
|
131
|
-
## Corrections applied
|
|
132
|
-
|
|
133
|
-
Cloud Strategy publisher: no correction needed for Cockburn entry. Note: hexagonal architecture URL [ref:3] could not be HTTP-verified during audit but is the widely-cited bassclef source; flagged as source gap.
|
|
134
|
-
|
|
135
|
-
## Related luminaries
|
|
136
|
-
|
|
137
|
-
- **Eric Evans** — DDD provides the domain model that lives inside Cockburn's hexagon. Evans models the business concepts; Cockburn's ports protect them from infrastructure.
|
|
138
|
-
- **Kent Beck** — Walking skeleton aligns with Beck's "make it work" step at architectural scale; TDD tests slot into hexagonal ports as test adapters.
|
|
139
|
-
- **Jeff Patton** — User story mapping references Cockburn as a foundation; use cases and story maps are complementary at different resolution levels.
|
|
140
|
-
- **Simon Brown** — C4 model documents the container-level architecture that hexagonal architecture structures. The hexagon's center and adapters map to C4 components.
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
name: Amazon PR/FAQ
|
|
4
|
-
slug: amazon-pr-faq
|
|
5
|
-
claimed_by: [shaper, product-manager]
|
|
6
|
-
primary_domain: shaping
|
|
7
|
-
depth: stub
|
|
8
|
-
description: "\"Write the press release first. If it doesn't excite, don't build.\""
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Amazon PR/FAQ
|
|
12
|
-
|
|
13
|
-
## Signature
|
|
14
|
-
|
|
15
|
-
*"Write the press release first. If it doesn't excite, don't build."*
|
|
16
|
-
|
|
17
|
-
Amazon's internal methodology for product definition. Write a mock
|
|
18
|
-
press release + customer FAQ BEFORE building. If the announcement
|
|
19
|
-
doesn't compel, the product isn't worth building.
|
|
20
|
-
|
|
21
|
-
## Core methods
|
|
22
|
-
|
|
23
|
-
- **Mock press release** — 1-page release for a hypothetical future launch.
|
|
24
|
-
Customer benefits stated clearly, no jargon.
|
|
25
|
-
- **FAQ** — anticipated customer questions + internal stakeholder
|
|
26
|
-
questions + teardown-worthy concerns. Forces early clarity.
|
|
27
|
-
- **Working backward** — define customer experience first, then
|
|
28
|
-
derive requirements, then design.
|
|
29
|
-
|
|
30
|
-
## Sources
|
|
31
|
-
|
|
32
|
-
- Jeff Bezos 2015 shareholder letter (references the practice)
|
|
33
|
-
- *Working Backwards* — Bryar, Carr (2021) — primary text on PR/FAQ practice
|
|
34
|
-
- *The Amazon Way* — Rossman (2014)
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
name: Ash Maurya
|
|
4
|
-
slug: ash-maurya
|
|
5
|
-
claimed_by: [product-manager, shaper]
|
|
6
|
-
referenced_by_skills: [lean-canvas, canvas, value-prop, value-prop-canvas]
|
|
7
|
-
primary_domain: product
|
|
8
|
-
depth: full
|
|
9
|
-
sources:
|
|
10
|
-
- type: book
|
|
11
|
-
title: "Running Lean: Iterate from Plan A to a Plan That Works (3rd edition)"
|
|
12
|
-
authors: ["Ash Maurya"]
|
|
13
|
-
year: 2022
|
|
14
|
-
url: "https://www.oreilly.com/library/view/running-lean-3rd/9781098108762/"
|
|
15
|
-
isbn: "9781098108779"
|
|
16
|
-
methodology_covered:
|
|
17
|
-
- "Lean Canvas — nine-box business model adapted from Business Model Canvas for early-stage startups"
|
|
18
|
-
- "Problem-Solution Fit + Product-Market Fit progression"
|
|
19
|
-
- "Continuous innovation framework — experiment + measure + learn cycles"
|
|
20
|
-
- "Customer Factory + customer-development discipline"
|
|
21
|
-
- type: book
|
|
22
|
-
title: "Scaling Lean: Mastering the Key Metrics for Startup Growth"
|
|
23
|
-
authors: ["Ash Maurya"]
|
|
24
|
-
year: 2016
|
|
25
|
-
url: "https://www.penguinrandomhouse.com/books/541557/scaling-lean-by-ash-maurya/"
|
|
26
|
-
isbn: "9781591847267"
|
|
27
|
-
methodology_covered:
|
|
28
|
-
- "Customer Factory metrics framework — Acquisition + Activation + Retention + Revenue + Referral"
|
|
29
|
-
- "Modeling business as a system of metrics; identifying the bottleneck stage"
|
|
30
|
-
- "Scaling discipline distinct from initial-product-market-fit discipline"
|
|
31
|
-
- type: blog_post
|
|
32
|
-
title: "Leanstack — Ash Maurya methodology site"
|
|
33
|
-
authors: ["Ash Maurya"]
|
|
34
|
-
year: 2025
|
|
35
|
-
url: "https://www.leanfoundry.com/"
|
|
36
|
-
methodology_covered:
|
|
37
|
-
- "Primary venue for Lean Canvas + Running Lean methodology updates"
|
|
38
|
-
- "Continuous Innovation Framework deeper articulation"
|
|
39
|
-
verification_status: verified
|
|
40
|
-
description: "\"Document your Plan A, then identify the riskiest parts of your plan, and systematically test your plan.\""
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
# Ash Maurya
|
|
44
|
-
|
|
45
|
-
## Signature
|
|
46
|
-
|
|
47
|
-
*"Document your Plan A, then identify the riskiest parts of your plan, and systematically test your plan."*
|
|
48
|
-
|
|
49
|
-
The lean-shaping luminary for early-stage business model validation. Author of *Running Lean* and *Scaling Lean*. Creator of the **Lean Canvas** — a 9-box adaptation of Osterwalder's Business Model Canvas, optimized for entrepreneurs working under high uncertainty.
|
|
50
|
-
|
|
51
|
-
Lean Canvas asks "does the business model hold together at all" before the product team asks "what should we build." Dunford's positioning answers a different question (who is this for and why is it different); Pichler's product canvas answers another (what is the product shape). The three compose; they do not substitute for each other.
|
|
52
|
-
|
|
53
|
-
## Sources
|
|
54
|
-
|
|
55
|
-
- *Running Lean* — 1st edition 2010, 2nd edition 2012, 3rd edition 2022. The bassclef Lean Canvas reference.
|
|
56
|
-
- *Scaling Lean* (2016) — Maurya's later work on growth metrics + Customer Factory model
|
|
57
|
-
- [leanstack.com](https://leanstack.com) — Maurya's company; templates + courses
|
|
58
|
-
- [practicetrumpstheory.com](https://blog.leanstack.com) — Maurya's blog; "What is the Right Fill Order for the Lean Canvas?" is the load-bearing piece for `/lean-canvas`
|
|
59
|
-
- `.claude/skills/lean-canvas/SKILL.md` — operationalizes Maurya's framework into agent dispatch
|
|
60
|
-
- `.claude/skills/canvas/SKILL.md` — sibling product canvas (Pichler); composes downstream after Lean Canvas validates the business model
|
|
61
|
-
- `.claude/luminaries/lean-product-canvas.md` — Dan Olsen's Product-Market Fit Pyramid; complementary, not duplicate
|
|
62
|
-
|
|
63
|
-
## Core methods
|
|
64
|
-
|
|
65
|
-
- **Lean Canvas — 9 boxes on one page.** Problem → Customer Segments → Unique Value Proposition → Solution → Channels → Revenue Streams → Cost Structure → Key Metrics → Unfair Advantage. Forces concise articulation; 20-minute first pass.
|
|
66
|
-
- **Plan A vs Plan B.** Lean Canvas captures Plan A — the current best guess. Riskiest assumptions get tested; Plan A becomes Plan B when reality refuses to match. Iteration is the design, not failure.
|
|
67
|
-
- **Riskiest-assumption-first validation.** Each box contains beliefs. Beliefs classify as leap-of-faith / anecdotal observation / fact-with-evidence. The riskiest leap-of-faith is the next thing to validate — not the next thing to build.
|
|
68
|
-
- **Desirability → Viability → Feasibility.** When validating an idea (not generating one), test Problem + Customer Segments + UVP first (desirability), Channels + Revenue + Key Metrics second (viability), Solution + Cost + Unfair Advantage third (feasibility). Starting with Solution creates Innovator's Bias — you write Problem statements that justify the Solution you already wanted.
|
|
69
|
-
- **Customer Factory model** (from *Scaling Lean*). Treat the business as a factory that converts strangers into customers. Acquisition → Activation → Retention → Revenue → Referral (AARRR, attributed to Dave McClure, adopted by Maurya). Key Metrics box maps to factory stages.
|
|
70
|
-
- **20-minute snapshot rule.** First pass takes 20 minutes. Boxes can be blank. Iterate every week or after every meaningful customer conversation. The canvas is a thinking tool, not a deliverable.
|
|
71
|
-
|
|
72
|
-
## INSTEAD-block discipline
|
|
73
|
-
|
|
74
|
-
Every "Don't" in lean validation gets a concrete substitute. Per `.claude/rules/context-engineering.md`.
|
|
75
|
-
|
|
76
|
-
| Anti-pattern | INSTEAD |
|
|
77
|
-
|---|---|
|
|
78
|
-
| Spending months writing a business plan | Spend 20 minutes filling a Lean Canvas; refine weekly |
|
|
79
|
-
| "We have no competitors" in Unfair Advantage | Name the closest existing alternative (in-house build, manual workaround, adjacent tool); your unfair advantage is what makes you sticky once they switch |
|
|
80
|
-
| Solving the wrong problem because Solution came first | Start with Problem + Customer Segments; if you must start with Solution, flag the Innovator's Bias risk and revisit Problem critically after first pass |
|
|
81
|
-
| Vanity metrics (registered users, page views) in Key Metrics | Customer Factory stage rates (activation rate, retention curve, referral coefficient). Each metric maps to a factory transition. |
|
|
82
|
-
| Generic UVP ("the best X for Y") | One specific sentence a target customer would forward to a peer. If the target customer wouldn't share it, the UVP isn't done. |
|
|
83
|
-
| Building before validating riskiest assumption | Identify the riskiest leap-of-faith; design the smallest experiment that resolves it; run it before building. |
|
|
84
|
-
| Treating the canvas as a deliverable | Treat it as a thinking surface. Update it after every customer conversation. Old canvases are historical record, not failure. |
|
|
85
|
-
|
|
86
|
-
## When to channel
|
|
87
|
-
|
|
88
|
-
- `/lean-canvas` invocations (any mode) — Maurya's 9-box framework IS the skill's structural backbone
|
|
89
|
-
- `/canvas` Stage 1 (Thesis) — if the business model is unclear, run Lean Canvas first; Pichler's product canvas inherits validated assumptions
|
|
90
|
-
- `/value-prop` invocations — UVP box of Lean Canvas is the input to Dunford's positioning framework
|
|
91
|
-
- `/value-prop-canvas` — Strategyzer Value Proposition Canvas is the Lean Canvas Problem + UVP + Customer Segments boxes expanded; compose Lean Canvas first for business model fit, VPC second for product-market fit
|
|
92
|
-
- Iteration shaping — when a bet's scope feels uncertain, the riskiest-assumption-first lens cuts to the actual validation work
|
|
93
|
-
|
|
94
|
-
## Composition pairs
|
|
95
|
-
|
|
96
|
-
- **Maurya + Dunford** — Lean Canvas validates the business model; Dunford's positioning sharpens the UVP box into a market-ready claim. Maurya answers "does it hold together"; Dunford answers "how do we say it."
|
|
97
|
-
- **Maurya + Pichler (lean-product-canvas)** — Maurya validates the business model first; Olsen's Product-Market Fit Pyramid then guides product detail (target customer → needs → value prop → feature set → UX). Different focal lengths.
|
|
98
|
-
- **Maurya + Osterwalder (Strategyzer)** — Strategyzer's Business Model Canvas is upstream of Lean Canvas; Maurya adapted it for early-stage uncertainty. For mature businesses, Strategyzer; for new bets, Maurya.
|
|
99
|
-
|
|
100
|
-
## Distinct from
|
|
101
|
-
|
|
102
|
-
- **Dunford** — positioning, not business model. Once the business model holds together, Dunford makes the message sharp.
|
|
103
|
-
- **Olsen (lean-product-canvas)** — Product-Market Fit Pyramid, not business model. Once the business model holds, Olsen guides product shape.
|
|
104
|
-
- **Pichler (canvas)** — product canvas (Vision → Target → Stand-Out → Big Picture → Critical Questions). Product-detail-level; assumes the business model already holds.
|
|
105
|
-
- **Cockburn** — use cases at the system level; not strategy-level. Different altitude.
|
|
106
|
-
|
|
107
|
-
## Why this luminary exists in the catalog
|
|
108
|
-
|
|
109
|
-
Three product-strategy luminaries were already in bassclef's catalog:
|
|
110
|
-
|
|
111
|
-
- April Dunford — positioning (the message)
|
|
112
|
-
- Dan Olsen (lean-product-canvas) — Product-Market Fit Pyramid (the product detail)
|
|
113
|
-
- Roman Pichler (canvas) — product canvas (the product vision)
|
|
114
|
-
|
|
115
|
-
None of them answers the upstream question: **does the business model hold together at all?** Maurya's Lean Canvas is the missing piece. For bassclef's growth-loop strategy specifically, the "Revenue Streams" + "Key Metrics" boxes need to be reframed for audience/credibility accrual rather than dollar revenue — Maurya's framework accepts this reframing because the underlying question (which assumptions are riskiest) is general.
|
|
116
|
-
|
|
117
|
-
INSTEAD of "build the product, hope the business model emerges," Maurya's discipline forces explicit business-model articulation upfront — and explicit identification of the riskiest assumption that needs testing before more building.
|
|
118
|
-
|
|
119
|
-
## Closes
|
|
120
|
-
|
|
121
|
-
Backs the new `/lean-canvas` skill (filed 2026-05-25). Corrects the prior gap where the catalog had Olsen for Product-Market Fit Pyramid but no luminary for Lean Canvas itself.
|