bossbuild 0.97.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 (128) hide show
  1. package/LICENSE +21 -0
  2. package/PRINCIPLES.md +70 -0
  3. package/README.md +213 -0
  4. package/VERSION +1 -0
  5. package/bin/boss +3 -0
  6. package/library/README.md +19 -0
  7. package/library/agents/.gitkeep +0 -0
  8. package/library/agents/mentor-venture.md +57 -0
  9. package/library/hooks/.gitkeep +0 -0
  10. package/library/hooks/auto-log.js +133 -0
  11. package/library/hooks/memory-cue.js +82 -0
  12. package/library/hooks/secrets-guard.js +87 -0
  13. package/library/memory-seed/README.md +29 -0
  14. package/library/memory-seed/durable-facts-example.md +16 -0
  15. package/library/practices/.gitkeep +0 -0
  16. package/library/practices/agent-security.md +111 -0
  17. package/library/practices/ai-adoption-culture.md +104 -0
  18. package/library/practices/ai-ux-patterns.md +246 -0
  19. package/library/practices/celebration-of-done.md +100 -0
  20. package/library/practices/conscience-voicing.md +121 -0
  21. package/library/practices/context-discipline.md +116 -0
  22. package/library/practices/design-system.md +152 -0
  23. package/library/practices/git-workflow.md +119 -0
  24. package/library/practices/harm-taxonomy.md +45 -0
  25. package/library/practices/quality-ratchet.md +48 -0
  26. package/library/practices/revalidation.md +57 -0
  27. package/library/practices/scalable-architecture.md +111 -0
  28. package/library/practices/ship-it-live.md +149 -0
  29. package/library/practices/skill-authoring.md +70 -0
  30. package/library/skills/.gitkeep +0 -0
  31. package/library/skills/boss-learn/SKILL.md +63 -0
  32. package/library/skills/boss-sync/SKILL.md +48 -0
  33. package/package.json +49 -0
  34. package/registry/CHANGELOG.md +2737 -0
  35. package/src/board.js +655 -0
  36. package/src/brain.js +288 -0
  37. package/src/cli.js +542 -0
  38. package/src/conscience.js +426 -0
  39. package/src/insights.js +147 -0
  40. package/src/learn.js +92 -0
  41. package/src/map.js +103 -0
  42. package/src/modes.js +82 -0
  43. package/src/paths.js +36 -0
  44. package/src/registry.js +34 -0
  45. package/src/scaffold.js +138 -0
  46. package/src/sync.js +292 -0
  47. package/src/team.js +103 -0
  48. package/stages/L0-quickstart/manifest.json +12 -0
  49. package/stages/L0-quickstart/template/.claude/agents/coder-generalist.md +31 -0
  50. package/stages/L0-quickstart/template/.claude/agents/mentor-venture.md +57 -0
  51. package/stages/L0-quickstart/template/.claude/agents/pm.md +28 -0
  52. package/stages/L0-quickstart/template/.claude/hooks/conscience.js +89 -0
  53. package/stages/L0-quickstart/template/.claude/hooks/lib/loop-runtime.js +507 -0
  54. package/stages/L0-quickstart/template/.claude/hooks/lib/yaml.js +163 -0
  55. package/stages/L0-quickstart/template/.claude/hooks/memory-cue.js +82 -0
  56. package/stages/L0-quickstart/template/.claude/hooks/secrets-guard.js +87 -0
  57. package/stages/L0-quickstart/template/.claude/rules/your-app-code.md +17 -0
  58. package/stages/L0-quickstart/template/.claude/settings.json +36 -0
  59. package/stages/L0-quickstart/template/.claude/skills/boss/SKILL.md +161 -0
  60. package/stages/L0-quickstart/template/.claude/skills/boss-learn/SKILL.md +63 -0
  61. package/stages/L0-quickstart/template/.claude/skills/boss-sync/SKILL.md +55 -0
  62. package/stages/L0-quickstart/template/.claude/skills/canvas/SKILL.md +112 -0
  63. package/stages/L0-quickstart/template/.claude/skills/comprehend/SKILL.md +72 -0
  64. package/stages/L0-quickstart/template/.claude/skills/decide/SKILL.md +122 -0
  65. package/stages/L0-quickstart/template/.claude/skills/feedback/SKILL.md +68 -0
  66. package/stages/L0-quickstart/template/.claude/skills/import/SKILL.md +73 -0
  67. package/stages/L0-quickstart/template/.claude/skills/persona/SKILL.md +92 -0
  68. package/stages/L0-quickstart/template/.claude/skills/prototype/SKILL.md +114 -0
  69. package/stages/L0-quickstart/template/.claude/skills/triage/SKILL.md +104 -0
  70. package/stages/L0-quickstart/template/.claude/skills/welcome/SKILL.md +262 -0
  71. package/stages/L0-quickstart/template/AGENTS.md +31 -0
  72. package/stages/L0-quickstart/template/CLAUDE.md +57 -0
  73. package/stages/L0-quickstart/template/docs/IDS.md +42 -0
  74. package/stages/L0-quickstart/template/docs/ideas/INDEX.md +24 -0
  75. package/stages/L0-quickstart/template/docs/loops/canvas-loop.md +90 -0
  76. package/stages/L0-quickstart/template/docs/loops/capture-loop.md +64 -0
  77. package/stages/L1-mvp/manifest.json +12 -0
  78. package/stages/L1-mvp/template/.claude/agents/mentor-architect.md +124 -0
  79. package/stages/L1-mvp/template/.claude/agents/mentor-cofounder.md +85 -0
  80. package/stages/L1-mvp/template/.claude/agents/mentor-gtm.md +49 -0
  81. package/stages/L1-mvp/template/.claude/agents/program-manager.md +46 -0
  82. package/stages/L1-mvp/template/.claude/agents/tester.md +42 -0
  83. package/stages/L1-mvp/template/.claude/hooks/auto-log.js +133 -0
  84. package/stages/L1-mvp/template/.claude/rules/feature-context.md +18 -0
  85. package/stages/L1-mvp/template/.claude/skills/ai-cost/SKILL.md +249 -0
  86. package/stages/L1-mvp/template/.claude/skills/ai-failure-states/SKILL.md +226 -0
  87. package/stages/L1-mvp/template/.claude/skills/ai-first-init/SKILL.md +227 -0
  88. package/stages/L1-mvp/template/.claude/skills/close/SKILL.md +170 -0
  89. package/stages/L1-mvp/template/.claude/skills/consult/SKILL.md +72 -0
  90. package/stages/L1-mvp/template/.claude/skills/cost-review/SKILL.md +204 -0
  91. package/stages/L1-mvp/template/.claude/skills/design-tokens-init/SKILL.md +192 -0
  92. package/stages/L1-mvp/template/.claude/skills/drift-deep/SKILL.md +170 -0
  93. package/stages/L1-mvp/template/.claude/skills/evals/SKILL.md +154 -0
  94. package/stages/L1-mvp/template/.claude/skills/extract/SKILL.md +209 -0
  95. package/stages/L1-mvp/template/.claude/skills/judge-traces/SKILL.md +68 -0
  96. package/stages/L1-mvp/template/.claude/skills/log/SKILL.md +64 -0
  97. package/stages/L1-mvp/template/.claude/skills/practice/SKILL.md +92 -0
  98. package/stages/L1-mvp/template/.claude/skills/pretotype/SKILL.md +95 -0
  99. package/stages/L1-mvp/template/.claude/skills/red-team/SKILL.md +137 -0
  100. package/stages/L1-mvp/template/.claude/skills/revalidate/SKILL.md +51 -0
  101. package/stages/L1-mvp/template/.claude/skills/ship/SKILL.md +105 -0
  102. package/stages/L1-mvp/template/.claude/skills/smoke/SKILL.md +43 -0
  103. package/stages/L1-mvp/template/.claude/skills/spec/SKILL.md +145 -0
  104. package/stages/L1-mvp/template/claude-append.md +122 -0
  105. package/stages/L1-mvp/template/docs/loops/ai-failure-state-loop.md +107 -0
  106. package/stages/L1-mvp/template/docs/loops/coordination-loop.md +116 -0
  107. package/stages/L1-mvp/template/docs/loops/cost-budget-loop.md +117 -0
  108. package/stages/L1-mvp/template/docs/loops/cost-review-loop.md +113 -0
  109. package/stages/L1-mvp/template/docs/loops/design-tokens-loop.md +98 -0
  110. package/stages/L1-mvp/template/docs/loops/drift-loop.md +149 -0
  111. package/stages/L1-mvp/template/docs/loops/extraction-loop.md +128 -0
  112. package/stages/L1-mvp/template/docs/loops/focus-loop.md +106 -0
  113. package/stages/L1-mvp/template/docs/loops/pretotype-loop.md +88 -0
  114. package/stages/L1-mvp/template/docs/loops/spec-loop.md +83 -0
  115. package/stages/L2-v1/manifest.json +12 -0
  116. package/stages/L2-v1/template/.claude/agents/db-architect.md +91 -0
  117. package/stages/L2-v1/template/.claude/agents/mentor-business.md +124 -0
  118. package/stages/L2-v1/template/.claude/agents/mentor-fundraising.md +72 -0
  119. package/stages/L2-v1/template/.claude/agents/mentor-pitch.md +84 -0
  120. package/stages/L2-v1/template/.claude/agents/mentor-talent.md +84 -0
  121. package/stages/L2-v1/template/.claude/agents/ui-designer.md +81 -0
  122. package/stages/L2-v1/template/.claude/agents/ux-designer.md +87 -0
  123. package/stages/L2-v1/template/.claude/skills/board/SKILL.md +98 -0
  124. package/stages/L2-v1/template/.claude/skills/design-review/SKILL.md +77 -0
  125. package/stages/L2-v1/template/.claude/skills/ux-check/SKILL.md +93 -0
  126. package/stages/L2-v1/template/claude-append.md +59 -0
  127. package/stages/L2-v1/template/docs/loops/design-drift-loop.md +108 -0
  128. package/stages/L3-scale/README.md +13 -0
@@ -0,0 +1,98 @@
1
+ ---
2
+ id: design-tokens-loop
3
+ type: loop
4
+ stage: L1-mvp
5
+ runner_type: hook
6
+ attributed_to: [Brad Frost, Nathan Curtis, Ajesh Shah]
7
+ also_relevant: [Jina Anne, Diana Mounter, Dan Mall, John Maeda]
8
+ entry:
9
+ - count_at_least:
10
+ path_glob: src/**
11
+ pattern: '(className=|style={|css`|styled\.)'
12
+ min: 3
13
+ exit:
14
+ - exists: { path: docs/design/DESIGN_TOKENS.md }
15
+ - count_at_least:
16
+ path_glob: src/**
17
+ pattern: '(token\.|var\(--|colors\.|tokens\.|theme\.)'
18
+ min: 3
19
+ drift_moment: coherence
20
+ ---
21
+
22
+ # Loop: design-tokens (MVP)
23
+
24
+ The discipline that **prevents the 47 blues** ([IDEA-010](../../ideas/IDEA-010-scalable-ai-design.md)).
25
+ The most-common AI-generated-UI failure mode: each new screen Claude generates derives its own
26
+ colors, spacing, components — and the codebase grows linearly with screens. This loop catches
27
+ that early, JIT, *only when UI is actually accumulating.*
28
+
29
+ `runner_type: hook` — the conscience hook evaluates this loop on every UserPromptSubmit. But the
30
+ loop is structured so it **doesn't fire on fresh projects** (the entry predicate requires ≥3
31
+ style declarations across `src/`; a brand-new repo has 0). It opens only when the founder has
32
+ started accumulating UI — *the first UI commit inflection* (IDEA-010's "early-start JIT").
33
+
34
+ When open, the conscience surfaces a `coherence` moment (new in v0.21.0 — a flavor of caution
35
+ specific to system-vs-code drift): *"You're putting style into code without a token system. The
36
+ AI doesn't have a reference, so each screen will reinvent colors and spacing — fast-forward to
37
+ the 47 blues. Want me to run `/design-tokens-init` now?"*
38
+
39
+ ## Entry artifact
40
+
41
+ `src/` contains ≥3 source files with inline style declarations (matched by a regex covering
42
+ common patterns: Tailwind `className=`, inline `style={}`, css-in-js template literals, styled-
43
+ components syntax). Threshold of 3 is the *"the first UI commit"* signal — one or two are an
44
+ exploratory file; three is the founder starting to *build*. Stack-agnostic enough to catch most
45
+ common React / Vue / Svelte / Solid projects today.
46
+
47
+ For projects in stacks the regex misses, the founder can either:
48
+ - Edit this loop spec's entry pattern to match their stack
49
+ - Or simply run `/design-tokens-init` manually (the loop respects override)
50
+
51
+ ## Purpose
52
+
53
+ Scaffold the minimum three-layer design token system *before* drift accumulates. Cohort-aware
54
+ delivery (per `/design-tokens-init`): vibe-coder-newbie gets SHOWING; eng-builder gets OFFERING;
55
+ vibe-virtuoso gets OVERRIDE-FRIENDLY; etc.
56
+
57
+ ## Exit artifact
58
+
59
+ `docs/design/DESIGN_TOKENS.md` exists AND code references tokens (≥3 occurrences across `src/`
60
+ of patterns like `token.`, `var(--`, `colors.` (when a tokens module is imported), `tokens.`,
61
+ `theme.` — covers most token-consumption styles). The dual requirement matters: a tokens file
62
+ without any code consuming it is theater, not discipline.
63
+
64
+ ## Drift
65
+
66
+ Entry satisfied (≥3 style declarations) AND exit not satisfied (no tokens file OR no token refs)
67
+ → loop is open → conscience emits `coherence` moment. Confidence scales:
68
+ - 3-5 style declarations: low confidence (might be exploratory)
69
+ - 6-10: medium
70
+ - 11+: high (real drift)
71
+
72
+ The voice (cohort-aware via v0.20's framing): name the drift in one line, offer to scaffold,
73
+ hand the decision back. Override is recorded in devlog per IDEA-008.
74
+
75
+ ## How to remix
76
+
77
+ - **Skip:** legitimate when the project's UI is genuinely throwaway (an internal admin script,
78
+ a one-off demo). Override:
79
+ ```
80
+ - **OVERRIDE:** skipped `design-tokens-loop` — rationale: <UI is throwaway —
81
+ e.g., admin script for personal use; not user-facing; not maintained beyond
82
+ this build>.
83
+ ```
84
+ - **Swap discipline:** Frost-Atomic-Design lineage vs. Curtis-tokens-layer-cake vs. a stack-
85
+ native pattern (e.g., Mantine's theme tokens; Chakra's theme; Tailwind's config). The loop's
86
+ exit predicate checks for token *consumption*, not a specific tool. Stack-aware adapters can
87
+ live in `library/practices/scalable-ai-design/<stack>.md` (v0.24+).
88
+ - **Author your own:** a domain-specific scaling discipline (e.g., a `data-vocabulary-loop` for
89
+ a project where the load-bearing standardization is API field names, not visual style).
90
+
91
+ ## When this loop re-opens
92
+
93
+ - Tokens file deleted or renamed without code update → exit predicate fails again
94
+ - New UI added in a way that bypasses tokens (raw hex codes proliferate) → arguably should
95
+ re-open; today's predicate doesn't catch this (it just checks for *some* token consumption).
96
+ The v0.22 design-drift-loop will catch this case.
97
+ - Stack migration (e.g., Mantine → Tailwind) → exit predicate may transiently fail; re-init
98
+ in the new stack
@@ -0,0 +1,149 @@
1
+ ---
2
+ id: drift-loop
3
+ type: loop
4
+ stage: L1-mvp
5
+ runner_type: hook
6
+ attributed_to: [Ajesh Shah (PRINCIPLES — "build faster without fooling themselves")]
7
+ also_relevant: [Eric Ries (validated learning), Ash Maurya (riskiest assumption first), Rob Fitzpatrick (talk to someone before you build)]
8
+ entry:
9
+ - any_file_matches:
10
+ path_glob: docs/ideas/*-canvas.md
11
+ pattern: 'Riskiest assumption:\*\*\s+[^_].*[a-zA-Z0-9]{3,}'
12
+ related_idea_not_matching: '^status:\s+dropped'
13
+ - count_at_least:
14
+ path_glob: docs/devlog.md
15
+ pattern: '^## \d{4}-\d{2}-\d{2}'
16
+ min: 3
17
+ exit:
18
+ - any_file_matches:
19
+ path_glob: docs/ideas/*-canvas.md
20
+ pattern: 'Experiment this week:\*\*\s+[^_].*[a-zA-Z0-9]{3,}'
21
+ related_idea_not_matching: '^status:\s+dropped'
22
+ drift_moment: drift
23
+ ---
24
+
25
+ # Loop: drift (MVP) — the work vs. the named risk
26
+
27
+ > *"BOSS helps founders build faster without fooling themselves — compressing the loop from idea
28
+ > to evidence while continuously checking the work against real pain, real workflows, real buyers,
29
+ > real economics, and real distribution."* — PRINCIPLES.md, the why.
30
+
31
+ This is the closest loop to the reason BOSS exists. The other moments catch *structural* gaps —
32
+ no canvas, no budget, no failure-states. This one catches the gap PRINCIPLES.md names first and
33
+ that no predicate can fully see: **you named the bet that could sink this, and then you spent your
34
+ sessions building something else.**
35
+
36
+ It fires in the gap *between* moment #1 (`caution` — no riskiest assumption named yet) and the
37
+ graduation moment (`done` — the riskiest assumption has a validation plan). Caution covers "you
38
+ haven't named the risk." This covers "you named it, you've been building for a few sessions, and
39
+ nothing you've built tests it."
40
+
41
+ ## The judgment the predicate can't do (and the model can)
42
+
43
+ The predicate gate is deliberately cheap and structural: *a riskiest assumption is filled in, work
44
+ has accumulated (≥3 devlog entries), and no "Experiment this week" validation plan exists yet.*
45
+ That's all regex can prove. It cannot read the five recent devlog entries and tell whether the work
46
+ is **about** the named risk or **around** it. That semantic comparison — stated bet vs. actual
47
+ work — is the model's job, and it's the whole value of this moment.
48
+
49
+ So the loop **opens the door**; the model walks through it with judgment. When the door is open,
50
+ the conscience hands the model a bounded instruction (read the riskiest-assumption line + the most
51
+ recent ~5 devlog entries + the open FEAT/spec, nothing wider) and asks it to judge: is this work
52
+ testing the risk, or building past it? If drifted, name the specific gap — *"you said X is the bet
53
+ that could sink this; the last sessions built Y and Z; neither tests X"* — and ask what the smallest
54
+ experiment on the risk would be. If the work **is** engaging the risk, stay silent. Silence is the
55
+ correct output when the founder is on-aim.
56
+
57
+ This is the same shape as `extraction-loop` / `/extract`: a cheap heuristic gate fronting a model
58
+ judgment the regex can't make. The difference is host-binding — `/extract` is a skill the founder
59
+ invokes; this fires *unprompted* through the hook, because a founder who has drifted from their own
60
+ stated bet is precisely the founder who won't think to ask whether they've drifted.
61
+
62
+ ## Entry artifact
63
+
64
+ Two predicates, both required:
65
+
66
+ 1. **A named risk** — at least one active (non-dropped) idea's canvas has a real riskiest-assumption
67
+ line (same predicate `canvas-loop` uses for its exit; the `[^_]` rejects `_(placeholder)_` fills).
68
+ 2. **Accumulated work** — `docs/devlog.md` has ≥3 dated entries (`^## YYYY-MM-DD`). Same threshold
69
+ and surface as `extraction-loop`: three sessions in is the inflection where "still building the
70
+ first thing" becomes "have I been building toward the bet?"
71
+
72
+ Confidence scales with devlog overshoot (the runtime reads the count predicate): 3 entries → low,
73
+ 4–5 → medium, 6+ → high. More sessions deep without a validation plan = a louder signal.
74
+
75
+ ## Purpose
76
+
77
+ Keep the work pointed at the riskiest assumption. The failure mode this prevents is the one
78
+ PRINCIPLES.md opens with: a *pseudo app* — an impressive, polished build that never tested the
79
+ thing most likely to kill it. AI makes that failure cheaper and more convincing every model
80
+ generation; this loop is the counter-pressure.
81
+
82
+ ## Exit artifact
83
+
84
+ The canvas's **Experiment this week** line is filled with a real validation plan (not the
85
+ `_(the smallest test…)_` placeholder) — the same artifact the `done` graduation moment looks for.
86
+ Recording how you'll test the risk closes the loop. The good outcome of a drift nudge is the
87
+ founder writing (or running) that experiment.
88
+
89
+ ## Drift
90
+
91
+ `entry: satisfied` (risk named AND ≥3 devlog entries) AND `exit: not satisfied` (no validation
92
+ plan recorded) = loop is OPEN → conscience emits the `drift` moment.
93
+
94
+ The model composes the voice (per `boss-voice`: seasoned hand, assume intelligence, never assume
95
+ knowledge), reads only the bounded set named above, and judges before speaking. **Not** a
96
+ "you've been productive!" reward and **not** a generic "you should validate" lecture — the value
97
+ is the *specific* stated-vs-actual comparison. Cohort-aware: returning-founder gets the harder
98
+ "is your conviction here where it needs to be for 12 months" cut; first-product gets "here's what
99
+ 'test your riskiest bet' actually means" taught plainly; domain-expert gets the who-could-be-harmed
100
+ lens on the named risk.
101
+
102
+ ## Cost (BOSS eating its own dogfood)
103
+
104
+ This moment reads more context than the cheap predicate moments, so it has to respect the same
105
+ discipline `/ai-cost` preaches or BOSS becomes the expensive-AI-app it warns against:
106
+
107
+ - The **predicate gate is the cost control.** The model only reads wider context when the cheap
108
+ Node predicate has already confirmed the precondition. On every other prompt the hook emits
109
+ nothing.
110
+ - The read is **bounded** — riskiest-assumption line + ~5 recent devlog entries + the open FEAT.
111
+ Never "read the whole project." Bounded inputs are structured-output discipline applied to the
112
+ input side.
113
+ - The model fires **at most once per session** and stays silent when on-aim.
114
+
115
+ ## How to remix
116
+
117
+ - **Skip / override:** legitimate when the founder is *deliberately* de-risking in a different
118
+ order (e.g. building a thin slice first specifically to make the risk testable). Override grammar:
119
+ ```
120
+ - **OVERRIDE:** skipped `drift-loop` — rationale: <e.g. building the minimal slice this week
121
+ precisely so the riskiest-assumption experiment becomes runnable next week; risk is named and
122
+ sequenced, not forgotten>.
123
+ ```
124
+ - **Swap discipline:** the "riskiest assumption + one experiment" heartbeat is one framing
125
+ (Maurya / Ries). A `jobs-to-be-done` validation plan, a `Mom Test` interview plan (Fitzpatrick),
126
+ or a `pretotype` demand test (Savoia) are all legitimate exits — note the framing in the canvas.
127
+ - **Author your own:** a domain-specific drift loop (e.g. a `compliance-drift-loop` for a regulated
128
+ product, where the named risk is regulatory and the validation plan is a legal review).
129
+
130
+ ## When this loop re-opens
131
+
132
+ - The riskiest assumption changes (a new bet is named) without a fresh experiment line.
133
+ - An experiment ran and *disconfirmed* — the founder clears the validation plan to re-aim.
134
+
135
+ ## Known limitation (consistent with `canvas-loop`)
136
+
137
+ `any_file_matches` is satisfied by *any* canvas, so a single graduated idea (risk + experiment
138
+ both filled) closes the loop even if a second active idea has a named risk and no plan. This is the
139
+ same `any`-semantics limitation `canvas-loop` carries; for the common single-active-idea case it's
140
+ correct, and the model — reading the actual canvases when the loop *is* open — can catch the masked
141
+ case anyway. A per-idea drift check would need cross-file pairing the predicate vocabulary doesn't
142
+ have yet; deferred until there's evidence it matters.
143
+
144
+ ## Cite
145
+
146
+ PRINCIPLES.md (the why) — *"build faster without fooling themselves… continuously checking the work
147
+ against real pain, real workflows, real buyers."* Ries (validated learning), Maurya (riskiest
148
+ assumption first), Fitzpatrick (talk to someone before you build). The loop is the *when*; the
149
+ model's judgment + `/canvas` / `/pretotype` are the *how*.
@@ -0,0 +1,128 @@
1
+ ---
2
+ id: extraction-loop
3
+ type: loop
4
+ stage: L1-mvp
5
+ runner_type: hook
6
+ attributed_to: [Ajesh Shah (PRINCIPLE #1 — pause to extract patterns)]
7
+ also_relevant: [Brad Frost (atomic design as extraction), Bret Victor (the principle of the principle), Don Norman (affordances emerge from use)]
8
+ entry:
9
+ - count_at_least:
10
+ path_glob: docs/devlog.md
11
+ pattern: '^## \d{4}-\d{2}-\d{2}'
12
+ min: 3
13
+ exit:
14
+ - count_at_least:
15
+ path_glob: docs/extractions/EXTR-*.md
16
+ pattern: '^- \*\*Route:\*\*'
17
+ min: 1
18
+ drift_moment: capture
19
+ ---
20
+
21
+ # Loop: extraction (MVP) — PRINCIPLE #1's own discipline
22
+
23
+ > *"BOSS is always scaffolding, but scaffolding is the motion, not the goal. At every natural
24
+ > breakpoint — a mode transition, a shipped feature, the third time the same work repeats —
25
+ > **pause and sort the pattern two ways:** UP into BOSS as a reusable superset practice. DOWN
26
+ > into the app as core functionality."* — PRINCIPLE #1.
27
+
28
+ For 28 releases the conscience has surfaced caution / done / restraint / coherence / cost /
29
+ failure-mode. **PRINCIPLE #1's own discipline had no moment.** Capture-the-reusable was named
30
+ in PRINCIPLES.md but undetected by the system meant to encode the principles. v0.29 closes
31
+ that — not perfectly (predicate-based heuristics can't see *reusability* — only the model can),
32
+ but enough to nudge the founder toward `/extract` at the *breakpoint inflection*.
33
+
34
+ The loop fires the `capture` moment when a founder has accumulated meaningful work
35
+ (heuristic: ≥3 devlog entries) and hasn't yet recorded an extraction decision (an EXTR-NNN
36
+ file). The skill `/extract` is the actual judgment — it reads recent work and proposes
37
+ specific UP / DOWN routes; the loop just **opens the door** at the inflection.
38
+
39
+ This is the first hook-runner loop whose entry is *time-of-work* rather than *predicate-of-
40
+ file-state*. The heuristic is intentionally simple (devlog entry count); we lean on the model
41
+ running `/extract` for the real judgment. The pattern sets a precedent for future moments that
42
+ can't be detected by file regex alone.
43
+
44
+ ## Entry artifact
45
+
46
+ `docs/devlog.md` contains ≥3 dated entries (regex: `^## \d{4}-\d{2}-\d{2}`). Threshold of 3
47
+ mirrors PRINCIPLE #1's *"the third time the same work repeats"* signal. Fewer entries = not
48
+ yet at a natural breakpoint; the founder is still in initial-build motion.
49
+
50
+ The devlog is the right surface to gate on because the `/log` skill already produces dated
51
+ entries, the `/close` skill nudges devlog discipline at session end, and the format is
52
+ stable. Future versions may add complementary entry signals (`boss unlock` recently fired;
53
+ FEAT-NNN status flipped to `shipped`; library/ recently grew); for v0.29 the devlog-count
54
+ heuristic is enough to mark the inflection.
55
+
56
+ ## Purpose
57
+
58
+ Surface PRINCIPLE #1 at the right time. Not too early (a founder mid-first-build doesn't have
59
+ extractables yet); not too late (by the time copy-paste duplication is everywhere, extraction
60
+ is a refactor cost, not a discipline). Three devlog entries is the *"you've shipped something,
61
+ now look at what's worth keeping"* inflection.
62
+
63
+ When the loop opens, the conscience emits a `capture` moment in its own voice: *"You've been
64
+ in flow for a few sessions. Pause-extract time. Run `/extract` — it'll look at recent work and
65
+ propose 1-3 candidates routed UP (into BOSS's library) or DOWN (into the app's core)."* Never
66
+ blocks; the founder decides.
67
+
68
+ ## Exit artifact
69
+
70
+ ≥1 file in `docs/extractions/` matching `EXTR-*.md` with at least one `- **Route:**` line
71
+ recorded. The skill `/extract` writes these. The presence of *any* extraction record closes
72
+ the loop — the discipline IS the practice of pausing-and-routing, not the volume of
73
+ extractions.
74
+
75
+ To re-open the loop, the founder OR a future BOSS version refreshes the heuristic. v0.29
76
+ ships the **first-inflection** version of this loop. Future versions may add recurring re-
77
+ opening (e.g., 5+ devlog entries since the most recent extraction); for now, once the
78
+ founder has practiced extraction once, the discipline is theirs.
79
+
80
+ ## Drift
81
+
82
+ Entry satisfied (≥3 devlog entries) AND exit not satisfied (no EXTR-NNN files) → loop is
83
+ open → conscience emits `capture` moment.
84
+
85
+ Confidence is **medium by default** (the heuristic is broad; not every 3-devlog moment is a
86
+ real breakpoint), but the skill /extract sharpens this at runtime — if /extract reads recent
87
+ work and finds nothing extractable, it records that fact (`- **Route:** none-yet — nothing
88
+ loadbearing-enough; check again in N entries`) and the loop closes. So the loop opens broadly,
89
+ the judgment narrows.
90
+
91
+ The voice (cohort-aware via v0.20's framing): name the inflection in one line, point at
92
+ `/extract`, hand the decision back. Particularly important to **NOT** sound like a "you've
93
+ been productive!" reward — that's the performative-warmth failure mode the voice work has
94
+ been catching. Plain seasoned-hand: *"three sessions in — worth pausing to see what's worth
95
+ keeping?"*
96
+
97
+ ## How to remix
98
+
99
+ - **Skip:** legitimate when the founder is in pure-exploration mode and hasn't shipped
100
+ anything yet (the devlog entries are all *"tried X, didn't work"* — no extractables).
101
+ Override:
102
+ ```
103
+ - **OVERRIDE:** skipped `extraction-loop` — rationale: <e.g., devlog entries are all
104
+ exploration / dead-end notes; nothing has stuck enough to be extractable yet; revisit
105
+ after first shipped FEAT>.
106
+ ```
107
+ - **Swap discipline:** Frost atomic-design lens (extract atoms → molecules → organisms) vs.
108
+ Ajesh's UP/DOWN router (extract to BOSS library OR to app core) vs. a stack-native pattern
109
+ (e.g., Ruby on Rails *"extract a concern"*). The loop's exit predicate checks for *any*
110
+ extraction record, not a specific framing.
111
+ - **Author your own:** project-specific extraction discipline (e.g., a `prompt-extraction-
112
+ loop` for projects where the load-bearing reusable artifact is prompts, not code; or a
113
+ `schema-extraction-loop` for projects where structured-output schemas keep multiplying).
114
+
115
+ ## When this loop re-opens (today: not automatic)
116
+
117
+ v0.29 ships the first-inflection version. The loop closes after one extraction record and
118
+ stays closed. To re-open, the founder deletes/archives old extractions OR a future BOSS
119
+ extends the predicate vocabulary with time-aware checks (*"N devlog entries since last
120
+ extraction"*). The skill `/extract` is re-runnable anytime; the conscience just doesn't auto-
121
+ nudge after the first time.
122
+
123
+ ## Cite
124
+
125
+ PRINCIPLE #1 — the rule this loop encodes, finally. *"Pause to extract patterns. UP into BOSS
126
+ as a reusable superset practice. DOWN into the app as core functionality. `/boss-learn` is
127
+ therefore a two-destination router."* The loop is the *when*; `/extract` (and `/boss-learn`)
128
+ are the *how*.
@@ -0,0 +1,106 @@
1
+ ---
2
+ id: focus-loop
3
+ type: loop
4
+ stage: L1-mvp
5
+ runner_type: hook
6
+ attributed_to: [Ajesh Shah (PRINCIPLES — "compress the loop from idea to evidence")]
7
+ also_relevant: [David J. Anderson (Kanban — limit work-in-progress), Jim Benson (Personal Kanban — "stop starting, start finishing"), Eric Ries (validated learning over motion)]
8
+ entry:
9
+ - count_at_least:
10
+ path_glob: docs/ideas/FEAT-*.md
11
+ pattern: '^status:\s*(building|drafting|blocked)'
12
+ min: 4
13
+ exit:
14
+ - count_at_least:
15
+ path_glob: docs/ideas/FEAT-*.md
16
+ pattern: '^status:\s*(shipped|done)'
17
+ min: 1
18
+ drift_moment: focus
19
+ ---
20
+
21
+ # Loop: focus (MVP) — the board's own drift signal
22
+
23
+ The board (`boss board`) already projects the work. This loop reads the *shape* of that projection
24
+ for the oldest startup failure there is: **a pile of things started, nothing finished.** Four or more
25
+ FEATs sitting in Building and not one shipped is not productivity — it's motion. AI makes starting the
26
+ next thing nearly free, so "stop starting, start finishing" (Benson) is exactly the discipline that
27
+ erodes first.
28
+
29
+ This is the board → conscience bridge (IDEA-034 Track D). The other MVP moments catch *structural*
30
+ gaps (no budget, no failure-states, a named risk left untested). This one catches a *flow* problem the
31
+ columns make visible: WIP accumulating with no graduation.
32
+
33
+ ## The judgment the predicate can't do (and the model can)
34
+
35
+ The predicate gate is deliberately coarse: *≥4 FEATs are in flight and none has shipped.* Regex can
36
+ count columns; it cannot tell whether those four are **scattered abandonment** (each started, then
37
+ dropped for the next shiny thing — the real focus problem) or **four genuinely parallel tracks** a
38
+ small team is legitimately carrying. That call is the model's, and it's the whole value of the moment.
39
+
40
+ So the loop opens the door; the model walks through with judgment. When the door is open, the
41
+ conscience hands the model a bounded instruction — read the board projection (`boss board`, or the
42
+ in-flight FEATs' status + `building_since`), nothing wider — and asks: is this a founder spreading
43
+ themselves thin, or honest parallel work? If it's the former, name the specific pile in one spare line
44
+ and ask which *one* they'd finish first. If it's honest parallel work, stay silent. Silence is the
45
+ correct output when the founder is actually shipping-minded.
46
+
47
+ Same shape as `drift-loop` / `caution-loop`: a cheap structural gate fronting a judgment the regex
48
+ can't make, fired *unprompted* through the hook — because a founder buried in WIP is precisely the one
49
+ who won't stop to ask whether they've over-committed.
50
+
51
+ ## Entry artifact
52
+
53
+ **Work-in-progress overload** — `docs/ideas/FEAT-*.md` has ≥4 files whose `status` is `building`,
54
+ `drafting`, or `blocked` (the board's "Building" column). Four is the threshold where the V1 `/board`
55
+ skill says cross-FEAT sequencing starts to matter; below it, the pile isn't yet a smell.
56
+
57
+ Confidence scales with overshoot (the runtime reads the count): 4 in flight → low, ~5–7 → medium,
58
+ 8+ → high. The deeper the unfinished pile, the louder the signal.
59
+
60
+ ## Exit artifact
61
+
62
+ **At least one shipped FEAT** (`status: shipped` or `done`). Shipping anything closes the loop — the
63
+ founder has proven they can finish, and the never-graduated-pile smell no longer applies. The good
64
+ outcome of a focus nudge is a FEAT crossing into Shipped.
65
+
66
+ ## Drift
67
+
68
+ `entry: satisfied` (≥4 in flight) AND `exit: not satisfied` (nothing shipped yet) = loop OPEN →
69
+ conscience emits the `focus` moment. The model composes the voice (per `boss-voice`: seasoned hand,
70
+ assume intelligence), reads only the board, and judges before speaking — **not** a "you're so busy!"
71
+ reward and **not** a generic "limit your WIP" lecture; the value is the specific *which one would you
72
+ finish first* cut. Cohort-aware: returning-founder gets the blunt "you've started five things and
73
+ shipped none — which one is real?"; first-product gets "finishing one beats starting three, here's
74
+ why" taught plainly; indie-hacker gets the calm "small and done beats big and open" frame.
75
+
76
+ ## Cost (BOSS eating its own dogfood)
77
+
78
+ - The **predicate gate is the cost control** — the model reads the board only after the cheap Node
79
+ count confirms the pile. Every other prompt the hook emits nothing.
80
+ - The read is **bounded** — the board projection / in-flight FEAT statuses, never the whole project.
81
+ - The model fires **at most once per session** and stays silent when the parallelism is honest.
82
+
83
+ ## Known limitation (documented, like drift-loop's)
84
+
85
+ Exit is "≥1 shipped *ever*," so the moment targets the never-finished pile and goes quiet after the
86
+ first ship — even if a large WIP pile rebuilds later. A "shipped *recently*" semantic would need a
87
+ date-windowed count the predicate vocabulary doesn't have yet (the same gap `building_since` aging
88
+ fills on the board side). Deferred until there's evidence the rebuilt-pile case matters; the board's
89
+ own aging flag (`⌛ Nw in build`) already surfaces the stuck items visually in the meantime.
90
+
91
+ ## How to remix
92
+
93
+ - **Skip / override:** legitimate when the four-in-flight is real parallel work (e.g. a designer, a
94
+ backend track, and an AI-eval track genuinely running at once). Override grammar:
95
+ ```
96
+ - **OVERRIDE:** skipped `focus-loop` — rationale: <e.g. three of these are blocked-on-review, not
97
+ abandoned; the one active build ships this week>.
98
+ ```
99
+ - **Tune the threshold:** a solo founder might set `min: 3`; a small team carrying real parallel
100
+ tracks might set `min: 6`. The threshold is the team's honest WIP limit, not a universal number.
101
+
102
+ ## Cite
103
+
104
+ PRINCIPLES.md (compress idea→evidence). Benson (*Personal Kanban* — stop starting, start finishing),
105
+ Anderson (Kanban WIP limits), Ries (validated learning over motion). The loop is the *when*; the
106
+ model's judgment + `boss board` + `/close` (ship one) are the *how*.
@@ -0,0 +1,88 @@
1
+ ---
2
+ id: pretotype-loop
3
+ type: loop
4
+ stage: L1-mvp
5
+ runner_type: skill
6
+ attributed_to: [Alberto Savoia, Ash Maurya]
7
+ also_relevant: [Eric Ries, Rob Fitzpatrick]
8
+ entry:
9
+ - any_file_matches:
10
+ path_glob: docs/ideas/*-canvas.md
11
+ pattern: 'Riskiest assumption:\*\*\s+[^_].*[a-zA-Z0-9]{3,}'
12
+ related_idea_not_matching: '^status:\s+dropped'
13
+ exit:
14
+ - count_at_least:
15
+ path_glob: docs/ideas/IDEA-*.md
16
+ pattern: '^## Pretotype log'
17
+ min: 1
18
+ ---
19
+
20
+ # Loop: pretotype (MVP)
21
+
22
+ The discipline that gates *build* on *demand-test*. Encodes Savoia's *"make sure you're building
23
+ the right It, before you build It right."*
24
+
25
+ `runner_type: skill` — the `/pretotype` skill is the detector + runner. The loop's purpose is
26
+ *recording* the discipline as a project-level artifact + giving spec-loop a clean dependency to
27
+ declare ("pretotype should have happened before spec," when the project wants to be that strict).
28
+
29
+ This loop is **structural by default** — no `drift_moment` declared. The conscience doesn't nag
30
+ about un-pretotyped ideas at every prompt; that's exactly the over-fires-on-fresh-project failure
31
+ mode the v0.16 evals catch. Instead, the pretotype is *invited* by `/canvas`'s graduation moment
32
+ ("Done!") and by the founder's own initiative via `/pretotype`. The loop tracks that it happened.
33
+
34
+ (Future v0.22+: a project could optionally add `drift_moment: caution` to this loop spec if they
35
+ want the conscience to nudge on un-pretotyped ideas accumulating. JIT principle: don't make this
36
+ the default ceremony.)
37
+
38
+ ## Entry artifact
39
+
40
+ Canvas-loop has closed (a real riskiest assumption exists). Same entry as spec-loop — both are
41
+ downstream of canvas-loop. Difference: spec-loop produces a FEAT; pretotype-loop produces *demand
42
+ evidence about the FEAT before it's built.* The discipline of *running the pretotype between
43
+ the canvas and the spec* is what this loop encourages.
44
+
45
+ ## Purpose
46
+
47
+ Test demand for the bet via a fake-door / wizard-of-oz / Mechanical-Turk / Pinocchio / YouTube
48
+ test / impresario pattern. Record what was tested, the threshold, the result, and the persevere/
49
+ pivot/kill decision. YODA — Your Own Data > Anything (Savoia).
50
+
51
+ The `/pretotype` skill is the runner.
52
+
53
+ ## Exit artifact
54
+
55
+ The active idea's file (`docs/ideas/IDEA-NNN.md`) contains a `## Pretotype log` section with
56
+ at least one dated entry recording: pattern, what was tested, threshold (set BEFORE running),
57
+ result, decision. The `count_at_least` exit predicate looks for this section across all idea
58
+ files.
59
+
60
+ ## How to remix
61
+
62
+ - **Skip:** legitimate when the founder has external validation already (e.g., a customer
63
+ pre-paid; an existing audience said yes; a similar product validated in the past). Record:
64
+ ```
65
+ - **OVERRIDE:** skipped `pretotype-loop` for IDEA-NNN — rationale: <external
66
+ validation cited; what would re-open the loop if the validation turns out
67
+ weaker than thought>.
68
+ ```
69
+ - **Swap discipline:** Savoia-pretotype vs. Ries-MVP-experiment vs. Maurya-riskiest-assumption-
70
+ test vs. Fitzpatrick-Mom-Test-conversation. Same loop shape; different practice. Note the
71
+ swap in the idea's pretotype log: `Pattern: mom-test (instead of pretotype)` + the Fitzpatrick
72
+ rationale.
73
+ - **Author your own:** a domain-specific demand test (e.g., regulatory-precedent-check for a
74
+ legal-tech product). The shape stays: tangible/real-time/imminent metric, threshold-before-
75
+ running, decision-after.
76
+
77
+ ## When this loop re-opens
78
+
79
+ - The active idea pivoted significantly (riskiest assumption changed) → re-pretotype
80
+ - A previous pretotype result was ambiguous → re-design with a sharper test
81
+ - An external signal contradicts the original pretotype result → re-pretotype
82
+
83
+ ## Cross-loop note
84
+
85
+ Pretotype-loop and spec-loop are *parallel*, not strictly sequential. Both depend on canvas-loop.
86
+ A project could pretotype-then-spec (the "test demand first" lineage) OR spec-then-pretotype
87
+ (less common; sometimes you need the spec to *describe* what you're pretotyping). The discipline
88
+ doesn't force order; just records that both happened before significant code lands.
@@ -0,0 +1,83 @@
1
+ ---
2
+ id: spec-loop
3
+ type: loop
4
+ stage: L1-mvp
5
+ runner_type: skill
6
+ attributed_to: [Eric Ries, Marty Cagan]
7
+ also_relevant: [Ash Maurya, Hamel Husain, Jason Liu]
8
+ entry:
9
+ - any_file_matches:
10
+ path_glob: docs/ideas/*-canvas.md
11
+ pattern: 'Riskiest assumption:\*\*\s+[^_].*[a-zA-Z0-9]{3,}'
12
+ related_idea_not_matching: '^status:\s+dropped'
13
+ exit:
14
+ - count_at_least:
15
+ path_glob: docs/ideas/FEAT-*.md
16
+ pattern: '^# '
17
+ min: 1
18
+ drift_moment: restraint
19
+ ---
20
+
21
+ # Loop: spec (MVP)
22
+
23
+ The discipline that gates spec writing on canvas validation. Encodes **moment #4 — restraint
24
+ (premature ceremony)** from IDEA-008's collapsed-moments architecture: when the founder reaches
25
+ for `/spec` without canvas-loop having closed, the conscience surfaces a restraint nudge — name
26
+ what's missing, offer to back up, hand the decision back. Never block.
27
+
28
+ `runner_type: skill` because `/spec` itself is the detector (reads canvas-loop state at run time
29
+ and surfaces restraint). The hook doesn't auto-fire restraint nudges on every prompt — that would
30
+ nag any time the founder was in MVP mode with an unfinished canvas. The skill detection is
31
+ cleaner: it fires *when the founder is attempting the downstream loop.*
32
+
33
+ ## Entry artifact
34
+
35
+ Canvas-loop has closed for *some* active idea — i.e., at least one canvas exists with a real
36
+ filled riskiest-assumption line, attached to a non-dropped idea. This is the literal Quickstart
37
+ canvas-loop's exit predicate, reused as spec-loop's entry.
38
+
39
+ ## Purpose
40
+
41
+ Turn validated ideas into buildable features. The FEAT spec captures: goal, acceptance criteria,
42
+ smoke check, validated learning (Ries — v0.21.0+), evals (Husain — if AI-mediated), out-of-scope.
43
+ A clean handoff to `coder-generalist`.
44
+
45
+ ## Exit artifact
46
+
47
+ `docs/ideas/FEAT-NNN-<slug>.md` exists with all required sections. (The exit predicate is loose
48
+ today — `any_file_matches` on `FEAT-*.md` — but the skill's expectation is the full template.
49
+ Future tighter predicate could check for the validated-learning + smoke-check sections being
50
+ filled.)
51
+
52
+ ## Drift
53
+
54
+ `entry: not satisfied` (no canvas exists with a real riskiest assumption) AND `/spec is being
55
+ invoked` → moment #4 restraint fires from the skill. The skill reads:
56
+ - The cohort declaration in `.boss/config.json` (for cohort-aware voice composition)
57
+ - The canvas-loop state for the active idea
58
+ - Surfaces a Fitzpatrick-plain nudge: *"There's no canvas yet for this idea — want to pressure-
59
+ test it first? `/canvas IDEA-NNN`. Or, if you've thought it through deeply already, you can
60
+ proceed with the spec and record the override in the devlog."*
61
+
62
+ ## How to remix
63
+
64
+ - **Skip:** legitimate — sometimes you've done the validation outside of `/canvas`. Override
65
+ grammar:
66
+ ```
67
+ - **OVERRIDE:** proceeded `spec-loop` without `canvas-loop` exit — rationale:
68
+ canvas-equivalent thinking done in <where>; riskiest assumption is <X>;
69
+ test plan is <Y>.
70
+ ```
71
+ The override is the contract; the conscience respects it.
72
+ - **Swap discipline:** Maurya-style explicit canvas vs. Cagan-style "discovery-then-delivery"
73
+ vs. Christensen-JTBD framing. Same loop entry shape (some pressure-test artifact exists);
74
+ different practice inside.
75
+ - **Author your own:** a domain-specific validation loop (e.g., a regulatory-canvas-loop for a
76
+ medical product) that satisfies spec-loop's entry differently. Author the loop spec.
77
+
78
+ ## When this loop re-opens
79
+
80
+ - A new IDEA gets a canvas → spec-loop is openable for that idea
81
+ - An existing FEAT is revised significantly → re-enter spec-loop for the new shape
82
+ - Validated-learning section fails its experiment (Ries pivot) → re-open the canvas-loop
83
+ upstream first, then re-spec
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "L2-v1",
3
+ "name": "V1",
4
+ "summary": "Ready for a real, shippable v1. The design layer turns on (PRINCIPLES.md #3): three-layer design tokens enforced via design-drift-loop, ui-designer + ux-designer as visual+flow authorities, db-architect for real data shape. /board for cross-FEAT sequencing, /design-review before code, /ux-check after. Plus the next tier of mentors: business (model + pricing), fundraising (whether/when/how), pitch (story + deck), talent (first hires + cadence) — promoted from BOSS-local in v0.15.0 to scaffolded-project templates here.",
5
+ "requires": "L1-mvp",
6
+ "agents": ["ui-designer", "ux-designer", "db-architect", "mentor-business", "mentor-fundraising", "mentor-pitch", "mentor-talent"],
7
+ "skills": ["board", "design-review", "ux-check"],
8
+ "hooks": [],
9
+ "loops": ["design-drift-loop"],
10
+ "unlocksNext": "L3-scale",
11
+ "graduationHint": "When the team grows, the org gets real, and the product council needs to be a thing — boss unlock scale."
12
+ }