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,93 @@
1
+ ---
2
+ type: planning
3
+ source: hybrid
4
+ created: <% tp.date.now("YYYY-MM-DDTHH:mm:ss[Z]") %>
5
+ ai-model: <model>
6
+ authority: implementation
7
+ decision-status: in-force
8
+ status: READY
9
+ progress: "Not started."
10
+ governed-by:
11
+ - "<the ADR or decision this executes>"
12
+ role: builder # the position this handoff is assigned to (agent-roles.json id)
13
+ entity: "<entity>" # where the position lives (decision levels)
14
+ domain: <domain>
15
+ serves: [<product or harness>]
16
+ owner: <position id>
17
+ session-id: "<id of the session that wrote this handoff>" # Claude Code: from the scratchpad path; otherwise the runtime's run id, or unknown
18
+ parent-session-id: "<id of the session that assigned it, if any>" # lineage: umbrella CoS -> ecosystem CoS -> role
19
+ handoff-status: ready # ready | in-progress | escalated | done
20
+ claimed-by: "" # session or run id of the agent that claimed it
21
+ pr: "" # PR link once opened
22
+ max-attempts: 3 # runs (claims) allowed before escalating to the Architect (EE-006)
23
+ run-cap: "2h" # wall-clock or spend cap per run, e.g. "2h" or "$20"; reaching it escalates (EE-006)
24
+ attempts: 0 # incremented by each run that claims this handoff
25
+ tags: [handoff, v2]
26
+ ---
27
+
28
+ # <Title>: handoff to <role> (<date>)
29
+
30
+ > Handoff contract v2 ([[FOUNDER_OPERATING_MODEL_CAMPAIGN_2026-10-14]] §4.4). You hold the decision rights below. **Do not report back to Claude or the founder for anything inside them.** Stop only on an escalation class (§4).
31
+
32
+ ## 0. Where this lives and how it is picked up
33
+
34
+ - **Implementation handoffs** live in the code repo at `docs/handoffs/` and are listed in `docs/handoffs/index.json`; the vault work queue points to them (implementation-bound artifacts are canonical in the repo).
35
+ - **Other handoffs** (finance, research, design) live in the vault at `<entity>/product/planning/handoffs/`, listed in `<vault>/_meta/registers/work-queue.json`.
36
+ - **To claim (code handoffs):** open a draft PR titled `<id>: <title>` whose first commit sets `handoff-status: in-progress` and `claimed-by` in the index and this file. The open PR is the lock; if two exist, the older wins. Cursor automations open PRs but are not documented to push to main, so this replaces committing to main (see the repo's `docs/handoffs/PICKUP_AUTOMATION.md`).
37
+ - **To claim (vault handoffs):** set `handoff-status: in-progress` and `claimed-by`, commit and push; a rejected push means someone else claimed it.
38
+ - **Before claiming, check it is ready (EE-019):** run `node schema/check-ready.mjs <venture> <id>`. Any FAIL is a question for the author, asked before work starts; do not fill the gap yourself. When every item passes and the brief tells you enough to act, record it with `--record --by <you>`. An in-progress handoff without this record fails `check-execution.mjs`.
39
+ - **While working:** `in-progress`; on an escalation, `escalated` and write §7; when done-criteria pass and the PR is up, `done` with `pr`.
40
+
41
+ ## 1. Outcome
42
+
43
+ One paragraph: what exists when this is done, and why (the decision it executes).
44
+
45
+ ## 2. Work
46
+
47
+ Numbered steps or workstreams. One PR per workstream.
48
+
49
+ ## 3. Your decision rights
50
+
51
+ From `everything-ecosystem/venture-template/decision-rights.json` (and `<entity>/_meta/registers/decision-rights.json` if it tightens any class). List the classes that apply:
52
+
53
+ | You decide | Level |
54
+ |---|---|
55
+ | Implementation inside this handoff | decide |
56
+ | Accepting work that passes the done-criteria in §5 | decide |
57
+ | Schema change inside the governing ADR, via the documented procedure | decide-inform |
58
+ | Security tightening | decide-inform |
59
+
60
+ **Research:** you may research anything this work needs (current docs, APIs, library versions, prior art). Record new sources in the source register. If a finding would change a decision above your level, escalate it; do not act on it.
61
+
62
+ ## 4. Escalate only for
63
+
64
+ | Class | Goes to |
65
+ |---|---|
66
+ | Contradicts an in-force ledger decision or ADR | Architect, then founder |
67
+ | Security loosening; irreversible data change; new structure without an ADR | Architect |
68
+ | Money, legal terms, anything public, production ship | Founder (or named delegate) |
69
+ | `attempts` reached `max-attempts`, or a run hit `run-cap` (EE-006) | Architect |
70
+
71
+ Write the question in §7 and continue any work it doesn't block.
72
+
73
+ ## 5. Done-criteria (conformance, checked by CI or scripts)
74
+
75
+ Each criterion is objectively checkable. Name the command or test:
76
+
77
+ - [ ] `<command>` passes
78
+ - [ ] `<golden or invariant>` holds
79
+ - [ ] **Self-proof (EE-006):** `<the command or skill that exercises the change for real, e.g. drive the running app to the changed screen>`; evidence (screenshot, log or output) attached to the PR. Tests passing is not this step.
80
+
81
+ Classes marked for Architect review (fit to intent), if any: <list, or "none">.
82
+
83
+ ## 6. Report (to the PR and registers, not to a person)
84
+
85
+ - PR link and description: what changed, criteria results, anything unexpected.
86
+ - Update affected registers (dependency, risk, open questions) and run their renderers.
87
+ - Record decide-inform decisions in the PR description.
88
+ - Put this handoff's `session-id` and your own run or session id in the PR description, so work traces back through the chain (source S-001).
89
+ - If something failed for a reason that could recur (a wrong path, a missed convention, a check you had to run by hand), name the lesson and propose the check one rung higher that would catch it next time: prose, skill, rule, static analysis, code (EE-006). The Architect decides whether to add it.
90
+
91
+ ## 7. Escalations
92
+
93
+ (Write here. Each: class, question, what is blocked, what continued.)
@@ -0,0 +1,60 @@
1
+ {
2
+ "layer": "operations",
3
+ "purpose": "Run the business (business operations): the team plan and hiring, handing work to people and agents (handoffs, with decision rights, done-criteria, attempt limits and run caps), and the tools each function uses, such as marketing (including the marketing website, EE-044), sales and research. How software or hardware gets built is MAD's, a separate product that reads these records (EE-038).",
4
+ "skills": [
5
+ {
6
+ "id": "tool-selection",
7
+ "path": "operations/skills/tool-selection/SKILL.md"
8
+ },
9
+ {
10
+ "id": "team-design",
11
+ "path": "operations/skills/team-design/SKILL.md"
12
+ },
13
+ {
14
+ "id": "recruiting",
15
+ "path": "operations/skills/recruiting/SKILL.md"
16
+ }
17
+ ],
18
+ "records": [
19
+ "team-plan",
20
+ "handoff",
21
+ "department-catalog",
22
+ "department",
23
+ "marketing-matrix",
24
+ "site-presence",
25
+ "marketing-sitemap",
26
+ "marketing-content"
27
+ ],
28
+ "reads": [
29
+ "agent-capability",
30
+ "board",
31
+ "decision",
32
+ "decision-rights",
33
+ "icp",
34
+ "integration",
35
+ "ownership",
36
+ "product",
37
+ "publication-policy",
38
+ "role",
39
+ "telos",
40
+ "venture"
41
+ ],
42
+ "writes": [
43
+ "evidence"
44
+ ],
45
+ "checks": [
46
+ "schema/check-team.mjs",
47
+ "schema/check-ready.mjs",
48
+ "schema/run-handoff.mjs",
49
+ "schema/check-execution.mjs",
50
+ "schema/check-departments.mjs",
51
+ "operations/marketing/site/presence.mjs",
52
+ "operations/marketing/site/plan.mjs",
53
+ "operations/marketing/check-public.mjs"
54
+ ],
55
+ "gaps": [
56
+ "No run-handoff skill: the handoff contract is prose (operations/handoff-v2.md) beside three scripts in schema/ (check-ready, run-handoff, check-execution)",
57
+ "Business functions (marketing, sales, finance) have no record types yet; only the team plan and handoffs do"
58
+ ],
59
+ "name": "operations"
60
+ }
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+ // The public gate for marketing content (EE-064): marketing records are public variants of internal
3
+ // records, written by marketing agents as their own MDX, never internal records published as they are.
4
+ // Every file in operations/marketing/content/ must name the internal record it is a variant of, the
5
+ // audience it is for, and whether it is published; a published file must name the person who approved
6
+ // it (EE-025). And it must not copy the internal record: any run of ten words shared with it is a leak,
7
+ // unless the run is a public field (the venture's name and tagline, a product's name).
8
+ //
9
+ // node operations/marketing/check-public.mjs <venture> [--json]
10
+
11
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
12
+ import { join, relative } from "node:path";
13
+
14
+ export const CONTENT = "operations/marketing/content";
15
+ const RUN = 10;
16
+ const words = (s) => s.toLowerCase().replace(/<[^>]+>/g, " ").match(/[a-z0-9$%']+/g) ?? [];
17
+ const runs = (s) => { const w = words(s), out = new Set(); for (let i = 0; i + RUN <= w.length; i++) out.add(w.slice(i, i + RUN).join(" ")); return out; };
18
+ const strings = (x) => typeof x === "string" ? [x] : Array.isArray(x) ? x.flatMap(strings) : x && typeof x === "object" ? Object.values(x).flatMap(strings) : [];
19
+
20
+ export function frontmatter(text) {
21
+ const m = text.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
22
+ if (!m) return { meta: {}, body: text };
23
+ const meta = Object.fromEntries(m[1].split("\n").map((l) => l.match(/^([a-z_]+):\s*(.*)$/)).filter(Boolean).map(([, k, v]) => [k, v.replace(/^["']|["']$/g, "").trim()]));
24
+ if (meta.publish) meta.publish = meta.publish === "true";
25
+ return { meta, body: m[2] };
26
+ }
27
+
28
+ function files(dir) {
29
+ if (!existsSync(dir)) return [];
30
+ return readdirSync(dir).flatMap((f) => statSync(join(dir, f)).isDirectory() ? files(join(dir, f)) : f.endsWith(".mdx") ? [join(dir, f)] : []);
31
+ }
32
+
33
+ export function check(dir) {
34
+ const venture = existsSync(join(dir, "venture.json")) ? JSON.parse(readFileSync(join(dir, "venture.json"), "utf8")) : {};
35
+ const publicText = [venture.name, venture.brand?.tagline].filter(Boolean);
36
+ const pdir = join(dir, "products");
37
+ if (existsSync(pdir)) for (const f of readdirSync(pdir).filter((f) => f.endsWith(".json"))) publicText.push(JSON.parse(readFileSync(join(pdir, f), "utf8")).name ?? "");
38
+ const allowed = new Set(publicText.flatMap((t) => [...runs(t)]));
39
+ const results = files(join(dir, CONTENT)).map((f) => {
40
+ const rel = relative(dir, f), { meta, body } = frontmatter(readFileSync(f, "utf8")), errors = [];
41
+ if (!meta.variant_of) errors.push("names no internal record (variant_of): marketing content is a variant of an internal record");
42
+ else if (!existsSync(join(dir, meta.variant_of))) errors.push(`variant_of ${meta.variant_of} does not exist`);
43
+ if (!meta.audience) errors.push("names no audience");
44
+ if (meta.publish === undefined) errors.push("does not say whether it is published (publish: true or false)");
45
+ if (meta.publish === true && !meta.approved_by) errors.push("is published without a person's approval (approved_by, EE-025)");
46
+ if (meta.variant_of && existsSync(join(dir, meta.variant_of))) {
47
+ const src = join(dir, meta.variant_of);
48
+ const raw = readFileSync(src, "utf8");
49
+ const internal = new Set(strings(src.endsWith(".json") ? JSON.parse(raw) : raw).flatMap((s) => [...runs(s)]));
50
+ const leaks = [...runs(body)].filter((r) => internal.has(r) && !allowed.has(r));
51
+ if (leaks.length) errors.push(`copies ${leaks.length} run(s) of ${RUN} words from ${meta.variant_of}, such as "${leaks[0]}": write the public variant in its own words`);
52
+ }
53
+ return { file: rel, publish: meta.publish ?? null, errors };
54
+ });
55
+ return { venture: venture.id ?? null, files: results.length, errors: results.filter((r) => r.errors.length), results };
56
+ }
57
+
58
+ if (import.meta.url === `file://${process.argv[1]}`) {
59
+ const dir = process.argv[2];
60
+ if (!dir) { console.error("usage: node operations/marketing/check-public.mjs <venture> [--json]"); process.exit(2); }
61
+ const r = check(dir);
62
+ if (process.argv.includes("--json")) console.log(JSON.stringify(r, null, 2));
63
+ else {
64
+ console.log(`${r.files} marketing content file(s); ${r.errors.length} blocked at the public gate`);
65
+ for (const x of r.errors) for (const e of x.errors) console.log(` ${x.file}: ${e}`);
66
+ }
67
+ process.exit(r.errors.length ? 1 : 0);
68
+ }
@@ -0,0 +1,86 @@
1
+ ---
2
+ type: framework
3
+ source: hybrid
4
+ created: 2026-10-28T20:10:00Z
5
+ ai-model: claude-opus-5.5
6
+ tags: [everything-ecosystem, operations, marketing, marketing-website, site-presence, icp, typesafe, jev, firecrawl]
7
+ description: "Site presence: read a venture's website, judge which pages say what with Jev, and score how present its public records are, weighed by who the site must speak to now and why (the marketing matrix, customer types), shown as the site's sitemap with a rating per route. Version 0.1.0, unevaluated."
8
+ ---
9
+
10
+ # Site presence and the marketing matrix
11
+
12
+ Version 0.1.0, ours and unevaluated (EE-062, EE-063, EE-064, EE-065). For the demo there are no connections: a founder pastes a link to their marketing site (or their product), and Naive reads it.
13
+
14
+ ## What it does
15
+
16
+ 1. **Read.** `platform/integrations/site.mjs` reads the home page and up to nine pages it links to. Pages a marketing site usually has (about, pricing, careers, investors, community, press, security) come first, one per section. Firecrawl renders the pages when `FIRECRAWL_API_KEY` is set. Otherwise a plain fetch reads the HTML, which misses sites that only render in the browser. Each page records where it sits: the home page, the header or navigation, linked from the home page (the footer counts), or deeper.
17
+ 2. **Judge.** Jev answers one typed question per page and item: "Does this page tell a visitor …?" That is 150 questions for ten pages, in about 0.4 seconds. Without a Jev key, the matrix's keywords judge instead, which is rougher, and the result says so.
18
+ 3. **Weigh.** The marketing matrix (`matrix.json`) names six audiences: customers, investors, candidates, contributors, partners and press. It lists fifteen items each audience may need to learn, and the record each item comes from. Every item is public by default (publish: true).
19
+ - **Audience weights** come from the venture's facts: raising, hiring, inviting contributors, and what its ICP records say about who it courts. Investors weigh 1 while the venture is raising and 0.15 otherwise.
20
+ - **An item's need** is its strongest audience weight times importance.
21
+ - **Need sets prominence:** 0.7 or more belongs on the home page, 0.4 in the navigation, 0.2 linked from the home page, and anything less can be anywhere. An item with its own page, such as pricing or careers, needs that page in the navigation, not on the home page.
22
+ 4. **Score.** An item scores 1 when it is as prominent as it needs to be, 0.5 when it is present but buried, and 0 when it is missing. The site score is the need-weighted share, from 0 to 100, with a score for each audience. "Fix first" lists the three most-needed items that fall short. A missing item that no audience needs now is noted and not held against the site.
23
+
24
+ ## Who the customers are, and why they look for what they look for (EE-063)
25
+
26
+ What a customer looks for depends on who the customer is. A consumer rarely looks up the founders. A clinic owner trusting a vendor with patient data often does. So the matrix has customer types, and each type says how much each item matters to it and why:
27
+
28
+ - consumers, small-business owners, teams inside companies, enterprise buyers;
29
+ - developers, regulated professionals, creators, public sector and nonprofits.
30
+
31
+ The reasons are claims to test with the venture's own customers, not findings.
32
+
33
+ - **The ICP.** It comes, in order of preference, from:
34
+ - the founder's own sentence;
35
+ - the venture's ICP record (`purpose/icp.json`);
36
+ - failing both, the home page's opening text, marked inferred.
37
+ - **Placing the ICP.** Jev places the ICP into types. It answers "mainly" conservatively, so a type counts at 0.25 or more and within 0.6 of the strongest type.
38
+ - **Several types at once.** A customer who is several types needs what the most demanding one needs.
39
+ - **Evidence on every item.** Each item shows every audience's weight, the item's importance to that audience, and the reason. The rating can always be traced back to who the ICP is and why we think they look for it.
40
+
41
+ ## The sitemap
42
+
43
+ The result is drawn as the site's sitemap. The home page sits on top, with the pages in its navigation in one band and the pages linked elsewhere (usually the footer) in another. Each page's own routes sit under it.
44
+
45
+ - **Ratings.** Each route that was read is rated on the items that belong there. On the home page, that is what must be on the home page. On other pages, it is the items whose place is that page type.
46
+ - **Suggested pages.** Dashed ghost routes are pages the venture's priorities call for and the site lacks, for example an investors page while raising.
47
+ - **Route detail.** Click a route to see what belongs there, what is missing and why.
48
+
49
+ ## Where to run it
50
+
51
+ - **Board:** `node interface/demo/board.mjs`, then `/site`. Paste a link, say who your customers are (optional), tick raising, hiring or contributors, and read the sitemap and its ratings.
52
+ - **CLI:** `node interface/harness/site.mjs <url> [--venture <dir>] [--icp "<who your customers are>"] [--raising] [--hiring] [--contributors]`. With a venture, the result is saved to `operations/marketing/site-presence.json`, and the router command `operations/marketing/site` reads it back.
53
+
54
+ ## In reverse: planning the site from the venture (EE-064)
55
+
56
+ `plan.mjs` uses the same matrix in the other direction. It reads the venture's records and plans the site. The plan says what is shown where, how (the MDX component), when, and for whom, with the reason for each.
57
+
58
+ - **The product decides the audience.** A product's `offered_to` names the ICP profiles it is offered to, and `serves` names the profiles it reaches through them. In a partner-led (B2B2C) venture, the partners are the site's customers. A profile can say it is `reached_through` another and which buying-center roles it plays (Webster and Wind 1972, with the initiator added by Bonoma 1982).
59
+ - **Services are already an offering type** on the product card (product, service, platform, content, marketplace), so services drive the site like any other product.
60
+ - **Topics, not audiences.** Pages follow topics, because audience-based navigation tends to hurt usability (NN/g). An audience with content of its own (candidates, investors, contributors, press) gets its own page, and only while it is a priority. Otherwise the plan says when that page would appear.
61
+ - **Each page lists its sections in order of need**, each with:
62
+ - the MDX component;
63
+ - the audiences and why;
64
+ - any condition;
65
+ - the internal record it draws on;
66
+ - the public variant a marketing agent writes, at `operations/marketing/content/<page>/<item>.mdx`.
67
+ - **The public gate.** `../check-public.mjs` checks every content file before it can be published:
68
+ - it names the internal record it is a variant of, its audience, and whether it is published;
69
+ - a published file names the person who approved it;
70
+ - it copies no run of ten words from its internal record, apart from public fields.
71
+
72
+ This keeps internal content out of public pages and keeps generic text off them.
73
+ - **The handoff (EE-065).** The plan, the content variants and the brand make up the marketing package. Marketing hands it to engineering, which builds the site and does not decide what goes where. Planning the sitemap and designing the site are separate agents.
74
+
75
+ Run it with `node operations/marketing/site/plan.mjs <venture> [--raising] [--hiring] [--contributors] [--write]`, or from the board's /site page with "Plan from my venture".
76
+
77
+ ## What is not settled
78
+
79
+ The matrix is a starting opinion. Where information belongs depends on the startup type, the product, the industry and who the venture courts. That includes how to become a contributor, whether the venture is hiring, and whether it is raising, which can sit on an about, investors, careers or community page.
80
+
81
+ Next work, logged in EE-062:
82
+ - research best practice and replace the matrix's guesses with sourced conventions;
83
+ - rank several ICPs against each other (today they are one customer audience);
84
+ - derive the recommended sitemap and the order a visitor meets information from those priorities, beyond suggested pages;
85
+ - write skills and kits for organizing marketing content (MDX, EE-044);
86
+ - draft missing marketing records from what the site already says.