naive-framework 0.0.0-stage → 0.1.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 (338) hide show
  1. package/AGENTS.md +61 -0
  2. package/LICENSE +21 -0
  3. package/README.md +37 -2
  4. package/docs/decisions/decisions.json +861 -0
  5. package/docs/ontology.json +796 -0
  6. package/docs/ontology.md +163 -0
  7. package/docs/reference/ROUTES.md +125 -0
  8. package/evidence/benchmarks/2026-10-27-golden.jev.after-catalog-fix.json +558 -0
  9. package/evidence/benchmarks/2026-10-27-golden.jev.json +501 -0
  10. package/evidence/benchmarks/2026-10-27-golden.reasoning-answers.json +177 -0
  11. package/evidence/benchmarks/JEV_VS_REASONING_MODEL_2026-10-27.md +68 -0
  12. package/evidence/capabilities/agent-capabilities.json +86 -0
  13. package/evidence/design-documents.registry.json +2896 -0
  14. package/evidence/evals/evals.json +25 -0
  15. package/evidence/evals/harness-evals.json +140 -0
  16. package/evidence/layer.json +51 -0
  17. package/evidence/skills/agent-capabilities/SKILL.md +35 -0
  18. package/evidence/skills/design-coverage/SKILL.md +57 -0
  19. package/evidence/skills/design-coverage/check.mjs +192 -0
  20. package/evidence/skills/design-coverage/scan.mjs +45 -0
  21. package/evidence/skills/fidelity-ladder-audit/SKILL.md +121 -0
  22. package/evidence/skills/fidelity-ladder-audit/ladder-census.mjs +180 -0
  23. package/evidence/skills/findability/SKILL.md +32 -0
  24. package/evidence/skills/findability/inventory.rb +41 -0
  25. package/evidence/skills/foreshadowing-audit/SKILL.md +183 -0
  26. package/evidence/skills/metrics-review/SKILL.md +177 -0
  27. package/evidence/tooling/integrations.json +153 -0
  28. package/governance/layer.json +101 -0
  29. package/governance/references/references.json +26 -0
  30. package/governance/skills/board-design/SKILL.md +68 -0
  31. package/governance/skills/brand-pillar/SKILL.md +90 -0
  32. package/governance/skills/business-pillar/SKILL.md +96 -0
  33. package/governance/skills/chief-of-staff/SKILL.md +45 -0
  34. package/governance/skills/cofounder-structure/SKILL.md +64 -0
  35. package/governance/skills/cross-pillar-tradeoff/SKILL.md +168 -0
  36. package/governance/skills/equity-and-share-classes/SKILL.md +68 -0
  37. package/governance/skills/executive-roles/SKILL.md +95 -0
  38. package/governance/skills/exit-planning/SKILL.md +66 -0
  39. package/governance/skills/financing-and-investor-rights/SKILL.md +73 -0
  40. package/governance/skills/office-hours-mode/SKILL.md +113 -0
  41. package/governance/skills/product-pillar/SKILL.md +81 -0
  42. package/governance/skills/publication-policy/SKILL.md +63 -0
  43. package/governance/skills/role-and-candidate-authoring/SKILL.md +198 -0
  44. package/governance/skills/stakeholder-update/SKILL.md +177 -0
  45. package/governance/tooling/integrations.json +37 -0
  46. package/governance/venture-template/AGENT_ROLES_AND_DECISION_RIGHTS.md +58 -0
  47. package/governance/venture-template/COMPANY_VAULT_DEFINITION_2026-10-25.md +204 -0
  48. package/governance/venture-template/README.md +74 -0
  49. package/governance/venture-template/decision-rights.json +186 -0
  50. package/governance/venture-template/index.md +151 -0
  51. package/governance/venture-template/pillars/brand.md +209 -0
  52. package/governance/venture-template/pillars/business.md +255 -0
  53. package/governance/venture-template/pillars/product.md +254 -0
  54. package/governance/venture-template/render-roles.py +11 -0
  55. package/governance/venture-template/roles/README.md +85 -0
  56. package/governance/venture-template/roles/agent-roles.json +202 -0
  57. package/governance/venture-template/roles/ceo.md +163 -0
  58. package/governance/venture-template/roles/chief-of-staff.md +153 -0
  59. package/governance/venture-template/roles/cmo.md +165 -0
  60. package/governance/venture-template/roles/coo.md +189 -0
  61. package/governance/venture-template/roles/cto.md +158 -0
  62. package/governance/venture-template/roles/department-head.md +47 -0
  63. package/governance/venture-template/roles/forward-deployed-engineer.md +51 -0
  64. package/governance/venture-template/roles/founder.md +173 -0
  65. package/governance/venture-template/roles/hr-manager.md +49 -0
  66. package/governance/venture-template/roles/talent-acquisition-manager.md +50 -0
  67. package/interface/api/server.mjs +69 -0
  68. package/interface/cli/find-venture.mjs +15 -0
  69. package/interface/cli/mentura.mjs +271 -0
  70. package/interface/cli/naive.mjs +169 -0
  71. package/interface/demo/board.mjs +581 -0
  72. package/interface/demo/decision-harness.mjs +91 -0
  73. package/interface/demo/live-agent.mjs +47 -0
  74. package/interface/harness/evals.mjs +90 -0
  75. package/interface/harness/examples/pt-no-shows.dump.md +19 -0
  76. package/interface/harness/run.mjs +313 -0
  77. package/interface/harness/site.mjs +59 -0
  78. package/interface/layer.json +31 -0
  79. package/interface/mcp/server.mjs +122 -0
  80. package/interface/operator-console/README.md +58 -0
  81. package/interface/provenance.mjs +42 -0
  82. package/interface/references/references.json +28 -0
  83. package/interface/route-aliases.json +32 -0
  84. package/interface/router.mjs +580 -0
  85. package/interface/skills/install-mentura/SKILL.md +88 -0
  86. package/interface/tooling/integrations.json +112 -0
  87. package/knowledge/connectors/README.md +54 -0
  88. package/knowledge/connectors/catalog.mjs +118 -0
  89. package/knowledge/connectors/contract.mjs +56 -0
  90. package/knowledge/connectors/eval.mjs +176 -0
  91. package/knowledge/connectors/filesystem.mjs +79 -0
  92. package/knowledge/connectors/index.mjs +102 -0
  93. package/knowledge/connectors/resolve.mjs +44 -0
  94. package/knowledge/connectors/suite.mjs +80 -0
  95. package/knowledge/layer.json +42 -0
  96. package/knowledge/skills/find-reference/SKILL.md +38 -0
  97. package/knowledge/skills/industry-awareness/SKILL.md +277 -0
  98. package/knowledge/tooling/integrations.json +127 -0
  99. package/knowledge/tooling/questions.md +46 -0
  100. package/operations/FOUNDER_OPERATING_MODEL_CAMPAIGN_2026-10-14.md +16 -0
  101. package/operations/departments.json +162 -0
  102. package/operations/handoff-v2.md +93 -0
  103. package/operations/layer.json +60 -0
  104. package/operations/marketing/check-public.mjs +68 -0
  105. package/operations/marketing/site/README.md +86 -0
  106. package/operations/marketing/site/matrix.json +731 -0
  107. package/operations/marketing/site/plan.mjs +117 -0
  108. package/operations/marketing/site/presence.mjs +252 -0
  109. package/operations/references/references.json +45 -0
  110. package/operations/skills/recruiting/SKILL.md +32 -0
  111. package/operations/skills/team-design/SKILL.md +36 -0
  112. package/operations/skills/tool-selection/SKILL.md +46 -0
  113. package/operations/templates/recruiting-brief.md +35 -0
  114. package/operations/tooling/integrations.json +158 -0
  115. package/package.json +57 -4
  116. package/packages/catalog.json +272 -0
  117. package/packages/cofounder/package.json +42 -0
  118. package/packages/counsel/package.json +47 -0
  119. package/packages/customers/package.json +21 -0
  120. package/packages/decisions/package.json +17 -0
  121. package/packages/engineering/package.json +41 -0
  122. package/packages/evidence/package.json +17 -0
  123. package/packages/finance/package.json +48 -0
  124. package/packages/foundation/package.json +52 -0
  125. package/packages/investor/package.json +57 -0
  126. package/packages/investors/package.json +21 -0
  127. package/packages/legal/package.json +73 -0
  128. package/packages/marketing/package.json +57 -0
  129. package/packages/money/package.json +21 -0
  130. package/packages/operations/package.json +74 -0
  131. package/packages/partner/package.json +38 -0
  132. package/packages/people/package.json +64 -0
  133. package/packages/product/package.json +49 -0
  134. package/packages/raw/package.json +19 -0
  135. package/packages/relationships/package.json +52 -0
  136. package/packages/validation/package.json +99 -0
  137. package/platform/README.md +45 -0
  138. package/platform/connectors/eval.mjs +154 -0
  139. package/platform/connectors/fake-github.mjs +91 -0
  140. package/platform/connectors/github.mjs +105 -0
  141. package/platform/integrations/jev.mjs +30 -0
  142. package/platform/integrations/langsmith-docket.mjs +53 -0
  143. package/platform/integrations/langsmith-setup.mjs +115 -0
  144. package/platform/integrations/langsmith.mjs +47 -0
  145. package/platform/integrations/rho.mjs +145 -0
  146. package/platform/integrations/site.mjs +75 -0
  147. package/platform/kits/README.md +7 -0
  148. package/platform/mcp/research.mjs +64 -0
  149. package/purpose/checklists/vault-and-tooling-consultancy-setup.md +216 -0
  150. package/purpose/frameworks/business-discovery-framework-amendments-2026-05-20.md +181 -0
  151. package/purpose/frameworks/business-discovery-framework.html +938 -0
  152. package/purpose/frameworks/business-discovery-framework.md +326 -0
  153. package/purpose/frameworks/idea-map/README.md +74 -0
  154. package/purpose/frameworks/idea-map/conventions.json +146 -0
  155. package/purpose/frameworks/idea-map/graph.mjs +182 -0
  156. package/purpose/frameworks/idea-map/ideamap.mjs +179 -0
  157. package/purpose/frameworks/idea-map/route.mjs +140 -0
  158. package/purpose/frameworks/onboarding-handoff-framework.md +269 -0
  159. package/purpose/frameworks/post-discovery-deliverable-playbook.md +274 -0
  160. package/purpose/frameworks/product-anatomy/README.md +63 -0
  161. package/purpose/frameworks/product-anatomy/anatomy.mjs +195 -0
  162. package/purpose/frameworks/product-anatomy/examples/polity.answers.reasoned.json +11 -0
  163. package/purpose/frameworks/product-anatomy/examples/polity.json +89 -0
  164. package/purpose/frameworks/product-anatomy/phases.json +107 -0
  165. package/purpose/frameworks/product-anatomy/questions.json +74 -0
  166. package/purpose/kits/validation/README.md +14 -0
  167. package/purpose/kits/validation/references/references.json +122 -0
  168. package/purpose/kits/validation/skills/problem-validation/SKILL.md +43 -0
  169. package/purpose/kits/validation/skills/validation-score/SKILL.md +35 -0
  170. package/purpose/kits/validation/templates/go-to-market.md +19 -0
  171. package/purpose/kits/validation/templates/operations-readiness.md +20 -0
  172. package/purpose/kits/validation/templates/pricing.md +22 -0
  173. package/purpose/kits/validation/templates/problem-interview.md +36 -0
  174. package/purpose/kits/validation/templates/problem.md +45 -0
  175. package/purpose/kits/validation/templates/product-market-fit.md +23 -0
  176. package/purpose/kits/validation/templates/solution.md +18 -0
  177. package/purpose/kits/validation/templates/team.md +19 -0
  178. package/purpose/kits/validation/weights.json +22 -0
  179. package/purpose/layer.json +53 -0
  180. package/purpose/references/references.json +324 -0
  181. package/purpose/skills/ambition-tier/SKILL.md +205 -0
  182. package/purpose/skills/telos/SKILL.md +52 -0
  183. package/purpose/strategic-foundation.json +133 -0
  184. package/purpose/templates/telos-based-smart.md +39 -0
  185. package/purpose/tooling/integrations.json +48 -0
  186. package/schema/README.md +61 -0
  187. package/schema/VERSION +1 -0
  188. package/schema/account.schema.json +79 -0
  189. package/schema/add-department.mjs +41 -0
  190. package/schema/agent-capability.schema.json +94 -0
  191. package/schema/alignment.schema.json +61 -0
  192. package/schema/assess-problem.mjs +131 -0
  193. package/schema/bdd.mjs +56 -0
  194. package/schema/board.schema.json +101 -0
  195. package/schema/check-boundary.mjs +54 -0
  196. package/schema/check-data-model.mjs +170 -0
  197. package/schema/check-data-packages.mjs +83 -0
  198. package/schema/check-departments.mjs +45 -0
  199. package/schema/check-execution.mjs +85 -0
  200. package/schema/check-governance.mjs +98 -0
  201. package/schema/check-integrations.mjs +33 -0
  202. package/schema/check-nextjs-status.mjs +77 -0
  203. package/schema/check-nouns.mjs +49 -0
  204. package/schema/check-private.mjs +61 -0
  205. package/schema/check-provenance.mjs +55 -0
  206. package/schema/check-publication.mjs +96 -0
  207. package/schema/check-ready.mjs +89 -0
  208. package/schema/check-sources.mjs +66 -0
  209. package/schema/check-team.mjs +94 -0
  210. package/schema/check-telos.mjs +59 -0
  211. package/schema/check-validation.mjs +165 -0
  212. package/schema/check-ventures.mjs +81 -0
  213. package/schema/check-where-used.mjs +58 -0
  214. package/schema/data-master.schema.json +14 -0
  215. package/schema/data-model.json +1258 -0
  216. package/schema/data-model.schema.json +152 -0
  217. package/schema/decision-analytics.mjs +77 -0
  218. package/schema/decision-record.schema.json +290 -0
  219. package/schema/decision-rights.schema.json +34 -0
  220. package/schema/decision.schema.json +30 -0
  221. package/schema/decisions.mjs +321 -0
  222. package/schema/department-catalog.schema.json +55 -0
  223. package/schema/department.schema.json +15 -0
  224. package/schema/departments.mjs +32 -0
  225. package/schema/docket-eval.mjs +89 -0
  226. package/schema/docket.mjs +135 -0
  227. package/schema/eval-suite.schema.json +45 -0
  228. package/schema/evidence.schema.json +110 -0
  229. package/schema/examples/migrate/agent.mjs +12 -0
  230. package/schema/examples/workspace/ventures/studio/accounts/bakery/account.json +18 -0
  231. package/schema/examples/workspace/ventures/studio/evidence/.gitkeep +0 -0
  232. package/schema/examples/workspace/ventures/studio/governance/.gitkeep +0 -0
  233. package/schema/examples/workspace/ventures/studio/knowledge/.gitkeep +0 -0
  234. package/schema/examples/workspace/ventures/studio/operations/.gitkeep +0 -0
  235. package/schema/examples/workspace/ventures/studio/print/knowledge/.gitkeep +0 -0
  236. package/schema/examples/workspace/ventures/studio/print/purpose/.gitkeep +0 -0
  237. package/schema/examples/workspace/ventures/studio/print/venture.json +37 -0
  238. package/schema/examples/workspace/ventures/studio/products/brand-care.json +19 -0
  239. package/schema/examples/workspace/ventures/studio/products/brand-kit.json +23 -0
  240. package/schema/examples/workspace/ventures/studio/provenance.jsonl +3 -0
  241. package/schema/examples/workspace/ventures/studio/purpose/.gitkeep +0 -0
  242. package/schema/examples/workspace/ventures/studio/venture.json +43 -0
  243. package/schema/examples/workspace/ventures/tandem/accounts/.gitkeep +0 -0
  244. package/schema/examples/workspace/ventures/tandem/evidence/README.md +3 -0
  245. package/schema/examples/workspace/ventures/tandem/governance/README.md +3 -0
  246. package/schema/examples/workspace/ventures/tandem/governance/agreements/dee-fast.md +3 -0
  247. package/schema/examples/workspace/ventures/tandem/governance/board.json +51 -0
  248. package/schema/examples/workspace/ventures/tandem/governance/departments/finance/charter.md +5 -0
  249. package/schema/examples/workspace/ventures/tandem/governance/departments/finance/department.json +5 -0
  250. package/schema/examples/workspace/ventures/tandem/governance/departments/primary/marketing-and-sales/charter.md +5 -0
  251. package/schema/examples/workspace/ventures/tandem/governance/departments/primary/marketing-and-sales/department.json +5 -0
  252. package/schema/examples/workspace/ventures/tandem/governance/exit.json +33 -0
  253. package/schema/examples/workspace/ventures/tandem/governance/founder-agreement.json +24 -0
  254. package/schema/examples/workspace/ventures/tandem/governance/founder-agreement.md +3 -0
  255. package/schema/examples/workspace/ventures/tandem/governance/ownership.json +131 -0
  256. package/schema/examples/workspace/ventures/tandem/governance/publication-policy.json +171 -0
  257. package/schema/examples/workspace/ventures/tandem/knowledge/README.md +3 -0
  258. package/schema/examples/workspace/ventures/tandem/knowledge/research/friends-feedback-2026-08.md +3 -0
  259. package/schema/examples/workspace/ventures/tandem/knowledge/research/pilot-2026-10.md +3 -0
  260. package/schema/examples/workspace/ventures/tandem/knowledge/research/problem-interviews-2026-09.md +20 -0
  261. package/schema/examples/workspace/ventures/tandem/knowledge/sources.json +8 -0
  262. package/schema/examples/workspace/ventures/tandem/knowledge/where-used.json +13 -0
  263. package/schema/examples/workspace/ventures/tandem/operations/README.md +3 -0
  264. package/schema/examples/workspace/ventures/tandem/operations/departments/finance/README.md +5 -0
  265. package/schema/examples/workspace/ventures/tandem/operations/departments/finance/department.json +5 -0
  266. package/schema/examples/workspace/ventures/tandem/operations/departments/primary/marketing-and-sales/README.md +5 -0
  267. package/schema/examples/workspace/ventures/tandem/operations/departments/primary/marketing-and-sales/department.json +5 -0
  268. package/schema/examples/workspace/ventures/tandem/pillars/brand.md +5 -0
  269. package/schema/examples/workspace/ventures/tandem/pillars/business.md +5 -0
  270. package/schema/examples/workspace/ventures/tandem/pillars/product.md +5 -0
  271. package/schema/examples/workspace/ventures/tandem/products/.gitkeep +0 -0
  272. package/schema/examples/workspace/ventures/tandem/products/shop-app.json +22 -0
  273. package/schema/examples/workspace/ventures/tandem/profile.md +5 -0
  274. package/schema/examples/workspace/ventures/tandem/provenance.jsonl +13 -0
  275. package/schema/examples/workspace/ventures/tandem/purpose/README.md +3 -0
  276. package/schema/examples/workspace/ventures/tandem/purpose/telos.json +78 -0
  277. package/schema/examples/workspace/ventures/tandem/purpose/validation/go-to-market.json +35 -0
  278. package/schema/examples/workspace/ventures/tandem/purpose/validation/pricing.json +37 -0
  279. package/schema/examples/workspace/ventures/tandem/purpose/validation/problem.json +74 -0
  280. package/schema/examples/workspace/ventures/tandem/purpose/validation/product-market-fit.json +66 -0
  281. package/schema/examples/workspace/ventures/tandem/purpose/validation/solution.json +33 -0
  282. package/schema/examples/workspace/ventures/tandem/purpose/validation/team.json +52 -0
  283. package/schema/examples/workspace/ventures/tandem/venture.json +79 -0
  284. package/schema/examples/workspace/ventures/woodworking/knowledge/.gitkeep +0 -0
  285. package/schema/examples/workspace/ventures/woodworking/venture.json +21 -0
  286. package/schema/examples/workspace/workspace.json +8 -0
  287. package/schema/exit.schema.json +74 -0
  288. package/schema/foundation.mjs +118 -0
  289. package/schema/founder-agreement.schema.json +83 -0
  290. package/schema/gate.mjs +39 -0
  291. package/schema/handoff.schema.json +239 -0
  292. package/schema/icp.schema.json +136 -0
  293. package/schema/idea-graph.schema.json +61 -0
  294. package/schema/init-venture.mjs +98 -0
  295. package/schema/integration.schema.json +143 -0
  296. package/schema/knowledge-sources.schema.json +130 -0
  297. package/schema/layer.json +46 -0
  298. package/schema/layer.schema.json +119 -0
  299. package/schema/load-packages.mjs +26 -0
  300. package/schema/marketing-sitemap.schema.json +232 -0
  301. package/schema/migrate-venture.mjs +192 -0
  302. package/schema/need-now.json +601 -0
  303. package/schema/need-now.mjs +107 -0
  304. package/schema/nextjs-status.schema.json +29 -0
  305. package/schema/ownership.schema.json +282 -0
  306. package/schema/packages.json +4 -0
  307. package/schema/packages.mjs +247 -0
  308. package/schema/payouts.mjs +91 -0
  309. package/schema/port-venture.mjs +161 -0
  310. package/schema/product.schema.json +223 -0
  311. package/schema/provenance-entry.schema.json +154 -0
  312. package/schema/publication-policy.schema.json +293 -0
  313. package/schema/raw-source.schema.json +15 -0
  314. package/schema/reference.schema.json +115 -0
  315. package/schema/route-aliases.schema.json +25 -0
  316. package/schema/run-handoff.mjs +51 -0
  317. package/schema/scaffold/defaults.json +54 -0
  318. package/schema/site-presence.schema.json +337 -0
  319. package/schema/strategic-foundation.schema.json +74 -0
  320. package/schema/stream.schema.json +14 -0
  321. package/schema/team-plan.schema.json +157 -0
  322. package/schema/telos.schema.json +197 -0
  323. package/schema/time-to-ready.mjs +93 -0
  324. package/schema/upgrade-venture.mjs +129 -0
  325. package/schema/use-model.mjs +10 -0
  326. package/schema/validate.py +49 -0
  327. package/schema/validation-evidence.schema.json +123 -0
  328. package/schema/validation-go-to-market.schema.json +110 -0
  329. package/schema/validation-operations-readiness.schema.json +91 -0
  330. package/schema/validation-pricing.schema.json +114 -0
  331. package/schema/validation-problem.schema.json +118 -0
  332. package/schema/validation-product-market-fit.schema.json +135 -0
  333. package/schema/validation-solution.schema.json +79 -0
  334. package/schema/validation-team.schema.json +116 -0
  335. package/schema/venture.schema.json +407 -0
  336. package/schema/vocab/business-models.json +298 -0
  337. package/schema/where-used.schema.json +56 -0
  338. package/schema/workspace.schema.json +38 -0
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/env node
2
+ // The decision docket across functions (EE-075): which function of the venture needs the founder's
3
+ // attention most right now, and which of its decisions come first. Decisions are ranked inside each
4
+ // function, and functions are ranked against each other, so the answer can move many times in a day as
5
+ // decisions are settled.
6
+ //
7
+ // node schema/docket.mjs <venture dir> [--json]
8
+ // node schema/docket.mjs <venture dir> --replay [--steps <n>] settles the top decision, again and again, in a copy
9
+ //
10
+ // The model, in code (no model call):
11
+ // own(d) a decision's own weight: 10 for being open, plus ownScore in schema/decisions.mjs (deadline,
12
+ // staleness, what it unlocks, the foundation, a draft to approve, outcomes to test)
13
+ // value(d) own(d) plus the own weight of every decision it holds, transitively. A fail-closed gate carries
14
+ // the weight of everything waiting behind it, so one decision can outweigh whole functions.
15
+ // attention(f) the values of the decisions in f the founder can act on now, highest first, each worth half
16
+ // the one before (v1 + v2/2 + v4/4...). A founder settles one decision at a time, so breadth adds
17
+ // urgency but never outweighs one heavy decision. Each held decision counts once, under its gate.
18
+ // dominant a decision whose value is more than the attention of every other function put together.
19
+ //
20
+ // Function: the core package whose record the decision decides (schema/decision-analytics.mjs).
21
+
22
+ import { spawnSync } from "node:child_process";
23
+ import { cpSync, mkdtempSync, mkdirSync } from "node:fs";
24
+ import { tmpdir } from "node:os";
25
+ import { basename, join } from "node:path";
26
+ import { decisions, ownScore } from "./decisions.mjs";
27
+ import { analytics } from "./decision-analytics.mjs";
28
+ import { PACKAGES } from "./packages.mjs";
29
+
30
+ const ACTIONABLE = new Set(["now", "overdue", "stale"]);
31
+ const OPEN = new Set(["now", "overdue", "stale", "waiting"]);
32
+ const BASE = 10;
33
+
34
+ export function docket(dir, now = Date.parse(process.env.DECISIONS_NOW ?? "") || Date.now(), { set_aside = new Set() } = {}) {
35
+ const r = decisions(dir, now);
36
+ const fnOf = new Map(analytics(dir, now).decisions.map((x) => [x.id, { id: x.function_id, title: x.function }]));
37
+ const ds = r.decisions.filter((d) => d.source !== "root" && !set_aside.has(d.id)).map((d) => ({ ...d, function: fnOf.get(d.id) }));
38
+ return { venture: r.venture, ...rankDocket(ds, r.phase, now) };
39
+ }
40
+
41
+ /** The ranking itself, over decisions as decisions.mjs resolves them, each with its function ({id, title}).
42
+ * Pure, so scenarios can be ranked without a venture on disk (schema/docket-eval.mjs). */
43
+ export function rankDocket(all, phase, now = Date.now()) {
44
+ const ds = all.filter((d) => OPEN.has(d.render));
45
+ const own = new Map(ds.map((d) => { const o = ownScore(d, phase, now); return [d.id, { score: BASE + o.score, why: o.why }]; }));
46
+ const heldBy = new Map();
47
+ for (const d of ds) if (d.held_by) heldBy.set(d.held_by, [...(heldBy.get(d.held_by) ?? []), d.id]);
48
+ const holds = (id, seen = new Set()) => { for (const x of heldBy.get(id) ?? []) if (!seen.has(x)) { seen.add(x); holds(x, seen); } return seen; };
49
+
50
+ const rows = ds.filter((d) => ACTIONABLE.has(d.render)).map((d) => {
51
+ const held = [...holds(d.id)];
52
+ const value = own.get(d.id).score + held.reduce((s, x) => s + (own.get(x)?.score ?? 0), 0);
53
+ const fn = d.function ?? { id: "venture", title: "Venture" };
54
+ return { id: d.id, question: d.question, function: fn.title, function_id: fn.id, render: d.render, own: own.get(d.id).score, value,
55
+ holds: held, why: [...own.get(d.id).why, ...(held.length ? [`holds ${held.length} decision${held.length > 1 ? "s" : ""}: ${held.join(", ")}`] : [])], action: d.action ?? null };
56
+ });
57
+ const functions = [...new Set(rows.map((x) => x.function_id))].map((id) => {
58
+ const xs = rows.filter((x) => x.function_id === id).sort((a, b) => b.value - a.value || a.id.localeCompare(b.id));
59
+ return { id, function: xs[0].function, attention: Math.round(xs.reduce((s, x, i) => s + x.value / 2 ** i, 0)), decisions: xs };
60
+ // A tie goes to the function that fits the phase better (schema/packages.json, base), not to the alphabet.
61
+ }).sort((a, b) => b.attention - a.attention || (PACKAGES.core[b.id]?.base?.[phase] ?? 0) - (PACKAGES.core[a.id]?.base?.[phase] ?? 0) || a.id.localeCompare(b.id));
62
+ const total = functions.reduce((s, f) => s + f.attention, 0);
63
+ for (const f of functions) {
64
+ f.share = total ? Math.round((f.attention / total) * 100) / 100 : 0;
65
+ for (const d of f.decisions) d.dominant = d.value > total - f.attention && functions.length > 1;
66
+ }
67
+ const top = functions[0];
68
+ return {
69
+ phase, at: new Date(now).toISOString(), total,
70
+ next: top ? { function: top.function, function_id: top.id, decision: top.decisions[0].id, question: top.decisions[0].question, value: top.decisions[0].value,
71
+ dominant: top.decisions[0].dominant, why: top.decisions[0].why, action: top.decisions[0].action } : null,
72
+ functions,
73
+ };
74
+ }
75
+
76
+ // Settles one decision the way a founder would, through the CLI, with its proposed wording.
77
+ function settle(ws, venture, d) {
78
+ const cli = (...a) => spawnSync("node", [new URL("../interface/cli/mentura.mjs", import.meta.url).pathname, ...a], { env: { ...process.env, MENTURA_WORKSPACE: ws }, encoding: "utf8" });
79
+ const a = d.action;
80
+ if (!a) return false;
81
+ const p = a.kind === "decide" ? cli("decide", d.id, "--venture", venture, "--by", "Founder (replay)", "--answer", "Settled in the replay", "--confirm", a.confirm)
82
+ : a.kind === "accept" ? cli("accept", a.route, "--venture", venture, "--confirm", a.confirm)
83
+ : a.kind === "confirm" ? cli("confirm", a.statement, "--venture", venture, "--confirm", a.confirm) : null;
84
+ return p?.status === 0;
85
+ }
86
+
87
+ /** The founder's day, replayed on a copy: settle the top decision, recompute, and record which function
88
+ * leads after each step. A decision only the founder can write (a statement to draft) can't be settled
89
+ * by a replay, so it is set aside for the rest of the day, as a founder who leaves it for tomorrow would. */
90
+ export function replay(dir, steps = 20) {
91
+ const ws = mkdtempSync(join(tmpdir(), "docket-replay-"));
92
+ const venture = basename(dir);
93
+ const copy = join(ws, "ventures", venture);
94
+ mkdirSync(join(ws, "ventures"), { recursive: true });
95
+ cpSync(dir, copy, { recursive: true });
96
+ const skipped = new Set();
97
+ const timeline = [];
98
+ for (let i = 0; i < steps; i++) {
99
+ const k = docket(copy, undefined, { set_aside: skipped });
100
+ const top = k.functions[0];
101
+ if (!top) break;
102
+ const pick = { f: top, d: top.decisions[0] };
103
+ const ok = settle(ws, venture, pick.d);
104
+ timeline.push({ step: i + 1, leading: pick.f.function, attention: Object.fromEntries(k.functions.map((f) => [f.function, f.attention])),
105
+ decision: pick.d.id, value: pick.d.value, dominant: pick.d.dominant, settled: ok });
106
+ if (!ok) skipped.add(pick.d.id);
107
+ }
108
+ const leaders = timeline.filter((t) => t.settled).map((t) => t.leading);
109
+ return { venture, steps: timeline.length, settled: timeline.filter((t) => t.settled).length,
110
+ leader_changes: leaders.filter((l, i) => i && l !== leaders[i - 1]).length, timeline };
111
+ }
112
+
113
+ if (import.meta.url === `file://${process.argv[1]}`) {
114
+ const dir = process.argv[2];
115
+ if (!dir) { console.error("usage: node schema/docket.mjs <venture dir> [--json] [--replay [--steps <n>]]"); process.exit(2); }
116
+ const i = process.argv.indexOf("--steps");
117
+ if (process.argv.includes("--replay")) {
118
+ const r = replay(dir, i >= 0 ? Number(process.argv[i + 1]) : 20);
119
+ if (process.argv.includes("--json")) console.log(JSON.stringify(r, null, 2));
120
+ else {
121
+ for (const t of r.timeline) console.log(`${String(t.step).padStart(2)}. ${t.leading.padEnd(12)} ${t.decision}${t.dominant ? " (outweighs every other function)" : ""} value ${t.value}${t.settled ? "" : " [the founder writes this one: set aside]"} ${Object.entries(t.attention).map(([f, a]) => `${f} ${a}`).join(" · ")}`);
122
+ console.log(`\n${r.settled} settled; the leading function changed ${r.leader_changes} times`);
123
+ }
124
+ } else {
125
+ const k = docket(dir);
126
+ if (process.argv.includes("--json")) console.log(JSON.stringify(k, null, 2));
127
+ else {
128
+ console.log(`${k.venture} (${k.phase}): next is ${k.next ? `${k.next.decision} in ${k.next.function}${k.next.dominant ? ", which outweighs every other function" : ""}` : "nothing"}`);
129
+ for (const f of k.functions) {
130
+ console.log(`\n${f.function}: attention ${f.attention} (${Math.round(f.share * 100)}%)`);
131
+ for (const d of f.decisions) console.log(` ${String(d.value).padStart(4)} ${d.id}${d.dominant ? " [dominant]" : ""}: ${d.why.join("; ")}`);
132
+ }
133
+ }
134
+ }
135
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "eval-suite.schema.json",
4
+ "title": "Eval suite",
5
+ "description": "A set of evals for a skill, a product or the agent environment (EE-017): prompts with the expected behaviour and assertions. A run of a suite writes evidence (evidence.schema.json). Fits the existing evidence/evals/*.json files.",
6
+ "type": "object",
7
+ "required": ["evals"],
8
+ "properties": {
9
+ "skill_name": { "type": "string" },
10
+ "subject": { "type": "string", "description": "Product or skill id the suite tests, when not a skill" },
11
+ "harness_version": { "type": "string", "description": "Version of the suite (legacy name)" },
12
+ "description": { "type": "string" },
13
+ "evals": {
14
+ "type": "array", "minItems": 1,
15
+ "items": {
16
+ "type": "object",
17
+ "required": ["id", "prompt", "expected_output"],
18
+ "properties": {
19
+ "id": { "type": "integer" },
20
+ "eval_name": { "type": "string" },
21
+ "prompt": { "type": "string" },
22
+ "expected_output": { "type": "string" },
23
+ "files": { "type": "array", "items": { "type": "string" } },
24
+ "systems_invoked": { "type": "array", "items": { "type": "string" } },
25
+ "handoff_files_touched": { "type": "array", "items": { "type": "string" } },
26
+ "assertions": {
27
+ "type": "array",
28
+ "items": {
29
+ "type": "object",
30
+ "required": ["name", "check"],
31
+ "properties": {
32
+ "name": { "type": "string" },
33
+ "check": { "type": "string" },
34
+ "command": { "type": "string", "description": "When set, the assertion is programmatic: the command decides it" }
35
+ },
36
+ "additionalProperties": false
37
+ }
38
+ }
39
+ },
40
+ "additionalProperties": false
41
+ }
42
+ }
43
+ },
44
+ "additionalProperties": false
45
+ }
@@ -0,0 +1,110 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "evidence.schema.json",
4
+ "title": "Evidence",
5
+ "description": "The result of one run of a check or eval, stored at <venture>/evidence/results/<id>.json (EE-017). It names what was checked, at which version, each assertion's outcome and the output that shows it. Results are append-only: a new run writes a new file. Handoffs point at results to prove their done-criteria.",
6
+ "type": "object",
7
+ "required": [
8
+ "id",
9
+ "subject",
10
+ "ran_at",
11
+ "runner",
12
+ "results",
13
+ "passed"
14
+ ],
15
+ "properties": {
16
+ "id": {
17
+ "type": "string",
18
+ "pattern": "^[a-z0-9-]+$"
19
+ },
20
+ "subject": {
21
+ "type": "object",
22
+ "required": [
23
+ "kind",
24
+ "id"
25
+ ],
26
+ "properties": {
27
+ "kind": {
28
+ "enum": [
29
+ "handoff",
30
+ "product",
31
+ "skill",
32
+ "venture",
33
+ "suite"
34
+ ]
35
+ },
36
+ "id": {
37
+ "type": "string"
38
+ },
39
+ "version": {
40
+ "type": "string",
41
+ "description": "Commit, tag or version the run checked"
42
+ }
43
+ },
44
+ "additionalProperties": false
45
+ },
46
+ "suite": {
47
+ "type": "string",
48
+ "description": "Path to the eval suite, when the run came from one"
49
+ },
50
+ "ran_at": {
51
+ "type": "string",
52
+ "format": "date-time"
53
+ },
54
+ "runner": {
55
+ "type": "string",
56
+ "description": "Who or what ran it: a CI job, a session id, a role"
57
+ },
58
+ "results": {
59
+ "type": "array",
60
+ "minItems": 1,
61
+ "items": {
62
+ "type": "object",
63
+ "required": [
64
+ "criterion",
65
+ "kind",
66
+ "passed"
67
+ ],
68
+ "properties": {
69
+ "criterion": {
70
+ "type": "string",
71
+ "description": "A handoff done-criterion id, or an eval assertion name"
72
+ },
73
+ "kind": {
74
+ "enum": [
75
+ "conformance",
76
+ "self-proof",
77
+ "review",
78
+ "judged"
79
+ ],
80
+ "description": "judged: scored by a model against a rubric, which counts as evidence only for review and evals, never conformance"
81
+ },
82
+ "passed": {
83
+ "type": "boolean"
84
+ },
85
+ "command": {
86
+ "type": "string"
87
+ },
88
+ "output": {
89
+ "type": "string",
90
+ "description": "The output, trimmed to what shows the outcome"
91
+ },
92
+ "artifact": {
93
+ "type": "string",
94
+ "description": "Path or link to a screenshot, log or report"
95
+ },
96
+ "by": {
97
+ "type": "string",
98
+ "description": "For review results: the role that judged it, which must be the criterion's reviewer and not the handoff's holder"
99
+ }
100
+ },
101
+ "additionalProperties": false
102
+ }
103
+ },
104
+ "passed": {
105
+ "type": "boolean",
106
+ "description": "True only when every result passed"
107
+ }
108
+ },
109
+ "additionalProperties": false
110
+ }
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ // A stand-in for the migrate agent in tests (MENTURA_AGENT_CMD="node schema/examples/migrate/agent.mjs"):
3
+ // reads the prompt on stdin and answers the way claude -p --output-format json does, with one product
4
+ // record from the source's notes/plan.md and everything else left behind.
5
+ let prompt = "";
6
+ for await (const c of process.stdin) prompt += c;
7
+ const files = JSON.parse(prompt.slice(prompt.lastIndexOf("Files: ") + 7));
8
+ const answer = {
9
+ items: "notes/plan.md" in files ? [{ route: "product/kettle", from: ["notes/plan.md"], record: { id: "kettle", name: "Kettle", description: files["notes/plan.md"].split("\n").filter((l) => l && !l.startsWith("#"))[0] }, reshaping: "the plan's first line became the product description", confidence: 0.8 }] : [],
10
+ left_behind: Object.keys(files).filter((f) => f !== "notes/plan.md").map((f) => ({ from: f, why: "no record says what this file says" })),
11
+ };
12
+ console.log(JSON.stringify({ type: "result", is_error: false, result: JSON.stringify(answer) }));
@@ -0,0 +1,18 @@
1
+ {
2
+ "id": "bakery",
3
+ "name": "Corner Bakery",
4
+ "relationship": "client",
5
+ "status": "active",
6
+ "opened": "2026-09-01",
7
+ "products": [
8
+ "brand-kit"
9
+ ],
10
+ "layers": {
11
+ "knowledge": {
12
+ "location": "knowledge/"
13
+ },
14
+ "operations": {
15
+ "location": "handoffs/"
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "id": "studio-print",
3
+ "name": "Alex Studio print line",
4
+ "parent": "studio",
5
+ "phase": "validation",
6
+ "ambition": "lifestyle",
7
+ "core": {
8
+ "promise": "Restaurant print that matches the brand, delivered in two days",
9
+ "promised_to": "Alex Studio's restaurant clients",
10
+ "must_not": "Print that drifts from the brand system",
11
+ "competence": "Print-ready files from the brand system"
12
+ },
13
+ "owner": "self",
14
+ "status": "active",
15
+ "profile": "profile.md",
16
+ "layers": {
17
+ "purpose": {
18
+ "location": "purpose/"
19
+ },
20
+ "knowledge": {
21
+ "location": "knowledge/"
22
+ },
23
+ "operations": false,
24
+ "evidence": false
25
+ },
26
+ "links": [
27
+ {
28
+ "to": "studio",
29
+ "access": "shares-with",
30
+ "carries": [
31
+ "sales",
32
+ "costs"
33
+ ],
34
+ "border": "open"
35
+ }
36
+ ]
37
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "id": "brand-care",
3
+ "name": "Brand Care",
4
+ "description": "Monthly updates to menus, seasonal signage and social posts in the restaurant's brand.",
5
+ "market": {
6
+ "customer": "b2b",
7
+ "segment": "independent restaurants",
8
+ "geography": "US-TX",
9
+ "vertical": true
10
+ },
11
+ "job": "Keep the brand current without hiring a designer",
12
+ "technology": "design service",
13
+ "offering": "service",
14
+ "business_model": [
15
+ "subscription"
16
+ ],
17
+ "allowed_from": "beachhead",
18
+ "status": "building"
19
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "brand-kit",
3
+ "name": "Brand Kit",
4
+ "description": "Logo, menu, signage and site templates built in one week for a restaurant about to open.",
5
+ "market": {
6
+ "customer": "b2b",
7
+ "segment": "restaurants about to open",
8
+ "geography": "US-TX",
9
+ "vertical": true
10
+ },
11
+ "job": "Open with a menu, sign and site that match",
12
+ "technology": "design service plus templates",
13
+ "offering": "service",
14
+ "business_model": [
15
+ "fee-for-service",
16
+ "add-on"
17
+ ],
18
+ "allowed_from": "validation",
19
+ "flows_to": [
20
+ "brand-care"
21
+ ],
22
+ "status": "live"
23
+ }
@@ -0,0 +1,3 @@
1
+ {"at":"2026-10-27T21:01:55.765Z","entity":"accounts/bakery/account.json","route":"purpose/account","activity":"baseline","agent":{"kind":"agent","via":"cli","id":"builder","harness":"Claude Code"},"note":"existed before the provenance log; its history before this is in git","sha256":"370c11ef6365be264e0ea7799f261ff5dc058a6860b34fb3066261324b160d22","prev":"genesis","hash":"faa7d64c6c62a66e8e33fb27368e8555afd6cdc9cfe42d6ab0d44e7eff3adf4a"}
2
+ {"at":"2026-10-27T21:01:55.767Z","entity":"products/brand-care.json","route":"purpose/product","activity":"baseline","agent":{"kind":"agent","via":"cli","id":"builder","harness":"Claude Code"},"note":"existed before the provenance log; its history before this is in git","sha256":"bd1540d50f1cc51fcc7b071d47ee1287ab63bb0cf932723f092ddac9a392032f","prev":"faa7d64c6c62a66e8e33fb27368e8555afd6cdc9cfe42d6ab0d44e7eff3adf4a","hash":"db84fc785cb173ce50b69751fc92582be55d2a2eb03f901ed14606ce317ddf4d"}
3
+ {"at":"2026-10-27T21:01:55.767Z","entity":"products/brand-kit.json","route":"purpose/product","activity":"baseline","agent":{"kind":"agent","via":"cli","id":"builder","harness":"Claude Code"},"note":"existed before the provenance log; its history before this is in git","sha256":"aea7058e9feb3f722d06e36f184352e84c7430a08dab76e1fd0aa92d6d31bae2","prev":"db84fc785cb173ce50b69751fc92582be55d2a2eb03f901ed14606ce317ddf4d","hash":"26b51e9a180e596a787aa5c8909d8abf634e5b5be88d0f45abd3554985a65467"}
@@ -0,0 +1,43 @@
1
+ {
2
+ "id": "studio",
3
+ "name": "Alex Studio",
4
+ "parent": null,
5
+ "phase": "beachhead",
6
+ "ambition": "managed-growth",
7
+ "form": {
8
+ "legal_form": "llc",
9
+ "funding": "bootstrapped"
10
+ },
11
+ "industry": {
12
+ "system": "naics",
13
+ "code": "541430",
14
+ "label": "Graphic Design Services"
15
+ },
16
+ "core": {
17
+ "promise": "A brand that looks established on day one",
18
+ "promised_to": "Independent restaurant owners",
19
+ "must_not": "Templates passed off as custom work",
20
+ "competence": "Fast brand systems built from a restaurant's own story"
21
+ },
22
+ "owner": "self",
23
+ "status": "active",
24
+ "opened": "2025-03-01",
25
+ "profile": "profile.md",
26
+ "layers": {
27
+ "purpose": {
28
+ "location": "purpose/"
29
+ },
30
+ "knowledge": {
31
+ "location": "knowledge/"
32
+ },
33
+ "operations": {
34
+ "location": "operations/"
35
+ },
36
+ "evidence": {
37
+ "location": "evidence/"
38
+ },
39
+ "governance": {
40
+ "location": "governance/"
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,3 @@
1
+ # evidence
2
+
3
+ Did it work: reviews, evals and metrics.
@@ -0,0 +1,3 @@
1
+ # governance
2
+
3
+ Who may decide what: roles and decision rights.
@@ -0,0 +1,3 @@
1
+ # Advisor agreement: Dee Park (example)
2
+
3
+ Fictional example. Based on the Founder Institute's FAST template: standard advisor, 0.5% of common over 24 months.
@@ -0,0 +1,51 @@
1
+ {
2
+ "updated": "2026-10-01",
3
+ "boards": [
4
+ {
5
+ "id": "directors",
6
+ "kind": "formal",
7
+ "formed": "2026-09-15",
8
+ "meets": "every-6-weeks",
9
+ "seats": [
10
+ {
11
+ "id": "seat-common-1",
12
+ "person": "Ana Reyes",
13
+ "type": "founder",
14
+ "appointed_by": "common"
15
+ },
16
+ {
17
+ "id": "seat-preferred",
18
+ "person": "Jo Lark",
19
+ "type": "investor",
20
+ "appointed_by": "series-seed"
21
+ },
22
+ {
23
+ "id": "seat-independent",
24
+ "person": null,
25
+ "type": "independent",
26
+ "appointed_by": "board"
27
+ }
28
+ ],
29
+ "reserved_matters": [
30
+ "issue or reclassify shares",
31
+ "approve the annual budget",
32
+ "hire or remove the CEO",
33
+ "sell, merge or wind down the company",
34
+ "take on debt over 100,000 USD"
35
+ ]
36
+ },
37
+ {
38
+ "id": "advisors",
39
+ "kind": "advisory",
40
+ "meets": "quarterly",
41
+ "seats": [
42
+ {
43
+ "id": "seat-dee",
44
+ "person": "Dee Park",
45
+ "type": "advisor",
46
+ "appointed_by": "board"
47
+ }
48
+ ]
49
+ }
50
+ ]
51
+ }
@@ -0,0 +1,5 @@
1
+ # Finance and accounting: charter
2
+
3
+ Holds: Spending authority, controls and audit.
4
+
5
+ APQC 9.0 Manage Financial Resources; value chain: support (firm infrastructure).
@@ -0,0 +1,5 @@
1
+ {
2
+ "department": "finance",
3
+ "value_chain": "support",
4
+ "apqc": "9.0"
5
+ }
@@ -0,0 +1,5 @@
1
+ # Marketing and sales: charter
2
+
3
+ Holds: Brand guidelines and the publication policy.
4
+
5
+ APQC 3.0 Market and Sell Products and Services; value chain: primary (marketing and sales).
@@ -0,0 +1,5 @@
1
+ {
2
+ "department": "marketing-and-sales",
3
+ "value_chain": "primary",
4
+ "apqc": "3.0"
5
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "paths": [
3
+ {
4
+ "kind": "acquisition",
5
+ "stance": "preferred",
6
+ "note": "Vertical software buyers consolidate small-business tools"
7
+ },
8
+ {
9
+ "kind": "ipo",
10
+ "stance": "open"
11
+ },
12
+ {
13
+ "kind": "wind-down",
14
+ "stance": "open",
15
+ "note": "If the seed runs out without traction"
16
+ }
17
+ ],
18
+ "scenarios": [
19
+ {
20
+ "id": "soft-landing",
21
+ "value": 3000000,
22
+ "note": "Acqui-hire"
23
+ },
24
+ {
25
+ "id": "base",
26
+ "value": 40000000
27
+ },
28
+ {
29
+ "id": "strong",
30
+ "value": 150000000
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "signed": "2026-03-02",
3
+ "document": "governance/founder-agreement.md",
4
+ "founders": [
5
+ {
6
+ "holder": "ana",
7
+ "role": "CEO",
8
+ "commitment": "full-time",
9
+ "ip_assigned": true
10
+ },
11
+ {
12
+ "holder": "ben",
13
+ "role": "CTO",
14
+ "commitment": "full-time",
15
+ "ip_assigned": true
16
+ }
17
+ ],
18
+ "departure": {
19
+ "good_leaver": "Keeps vested shares; the company may buy unvested shares back at cost",
20
+ "bad_leaver": "Keeps vested shares; unvested shares return at cost",
21
+ "buyback": "unvested-at-cost"
22
+ },
23
+ "deadlock": "Founders talk it through with the independent director; if still split, the CEO decides product and the CTO decides engineering"
24
+ }
@@ -0,0 +1,3 @@
1
+ # Founder agreement (example)
2
+
3
+ Fictional example for the schema. A real agreement is drafted with counsel; this file would hold its text or point to the signed copy.