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,59 @@
1
+ #!/usr/bin/env node
2
+ // Site presence, end to end (EE-062): read a venture's website, have Jev judge which pages say what,
3
+ // and score how present the venture's public records are, weighed by who the site must speak to now.
4
+ // The reading and the judging are platform scripts, spawned by path (EE-041); the scoring is Naive's.
5
+ // Without a Jev key the scoring falls back to the matrix's keywords and says so.
6
+ //
7
+ // node interface/harness/site.mjs <url> [--venture <dir>] [--raising] [--hiring] [--contributors] [--pages 10] [--json]
8
+
9
+ import { spawn } from "node:child_process";
10
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
11
+ import { dirname, join } from "node:path";
12
+ import { fileURLToPath } from "node:url";
13
+ import { factsOf, icpOf, request, score, PRESENCE } from "../../operations/marketing/site/presence.mjs";
14
+
15
+ const repo = join(dirname(fileURLToPath(import.meta.url)), "../..");
16
+ const run = (script, args, input) => new Promise((resolve) => {
17
+ const p = spawn("node", [join(repo, script), ...args], { stdio: ["pipe", "pipe", "pipe"] });
18
+ let out = "", err = "";
19
+ p.stdout.on("data", (d) => (out += d)); p.stderr.on("data", (d) => (err += d));
20
+ p.on("close", (code) => resolve({ code, out, err }));
21
+ p.stdin.end(input ?? "");
22
+ });
23
+
24
+ /** Read, judge and score one site. Returns the presence result; writes it into the venture if given. */
25
+ export async function scan(url, { venture = null, flags = {}, pages = 10, log = () => {} } = {}) {
26
+ const t0 = Date.now();
27
+ const r = await run("platform/integrations/site.mjs", [url, "--pages", String(pages)]);
28
+ if (r.code !== 0) throw new Error(`could not read ${url}: ${r.err.trim() || `exit ${r.code}`}`);
29
+ const site = JSON.parse(r.out);
30
+ log(`read ${site.pages.filter((p) => !p.error).length} pages of ${site.site} via ${site.via} in ${Date.now() - t0} ms`);
31
+ const icp = icpOf(venture, site);
32
+ let answers = null;
33
+ if (process.env.TYPESAFE_API_KEY || process.env.TYPESAFEAI_API_KEY) {
34
+ const j = await run("platform/integrations/jev.mjs", [], JSON.stringify(request(site, icp)));
35
+ if (j.code === 0) { const a = JSON.parse(j.out); answers = a.answers; log(`Jev answered ${Object.keys(answers).length} typed questions in ${a.ms} ms`); }
36
+ else log(`Jev failed (${j.err.trim().slice(0, 200)}); judging by keywords instead`);
37
+ } else log("no Jev key: judging by keywords, which is rougher");
38
+ const facts = factsOf(venture, flags);
39
+ const result = score(site, { answers, facts, icp, venture: venture ? JSON.parse(readFileSync(join(venture, "venture.json"), "utf8")).id : null });
40
+ if (venture) { mkdirSync(join(venture, dirname(PRESENCE)), { recursive: true }); writeFileSync(join(venture, PRESENCE), JSON.stringify(result, null, 2) + "\n"); }
41
+ return result;
42
+ }
43
+
44
+ if (import.meta.url === `file://${process.argv[1]}`) {
45
+ const url = process.argv[2];
46
+ const opt = (n) => { const i = process.argv.indexOf(`--${n}`); return i > 0 ? process.argv[i + 1] : null; };
47
+ const has = (n) => process.argv.includes(`--${n}`);
48
+ if (!url || url.startsWith("--")) { console.error("usage: node interface/harness/site.mjs <url> [--venture <dir>] [--raising] [--hiring] [--contributors] [--pages 10] [--json]"); process.exit(2); }
49
+ const flags = Object.fromEntries(["raising", "hiring", "contributors"].filter(has).map((k) => [k, true]));
50
+ scan(url, { venture: opt("venture"), flags, pages: Number(opt("pages") ?? 10), log: (m) => console.error(m) }).then((r) => {
51
+ if (has("json")) return console.log(JSON.stringify(r, null, 2));
52
+ console.log(`${r.site}: site presence ${r.score}/100 (${r.judged_by})`);
53
+ console.log(`Customers: ${r.icp.types.map((t) => `${t.label}${t.p != null ? ` ${t.p}` : ""}`).join(", ")}; ICP from ${r.icp.cite}`);
54
+ for (const n of r.sitemap) console.log(` ${n.ghost ? "+" : " "} ${n.path.padEnd(28)} ${n.type.padEnd(9)} ${n.rating == null ? (n.read ? "-" : "not read") : n.rating}${n.missing.length ? ` missing: ${n.missing.join(", ")}` : ""}`);
55
+ console.log(`By audience: ${Object.entries(r.audiences).map(([k, v]) => `${k} ${v.score}${v.weight >= 0.5 ? "" : " (not a priority)"}`).join(", ")}`);
56
+ for (const x of r.items) console.log(`${x.score === 1 ? "ok " : x.score ? "low " : "miss"} ${x.label.padEnd(28)} ${x.note}`);
57
+ console.log(`Fix first: ${r.fix_first.join(", ") || "nothing"}`);
58
+ }, (e) => { console.error(e.message); process.exit(1); });
59
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "layer": "interface",
3
+ "purpose": "Let a person, with agents, work across at least three of the five other layers in one session: agent harnesses (Claude Code, Cursor) and custom interfaces (the operator console), all reaching the system through one route table that a CLI, an MCP server and an HTTP API share (EE-030).",
4
+ "product": "everything-ecosystem/console",
5
+ "skills": [
6
+ {
7
+ "id": "install-mentura",
8
+ "path": "interface/skills/install-mentura/SKILL.md"
9
+ }
10
+ ],
11
+ "records": [
12
+ "route-aliases"
13
+ ],
14
+ "reads": [
15
+ "integration"
16
+ ],
17
+ "writes": [],
18
+ "checks": [
19
+ "schema/check-integrations.mjs",
20
+ "interface/test.mjs"
21
+ ],
22
+ "gaps": [
23
+ "The operator console is a folder, not part of the layer yet",
24
+ "Cannot yet run roles in separate sessions, so one agent can play builder and reviewer",
25
+ "The CLI cannot tell a person from an agent; the pull request a person merges is the gate that holds",
26
+ "The HTTP API has no authentication and binds to 127.0.0.1 only",
27
+ "Views are Markdown; the operator console does not render them yet",
28
+ "Route groups cover phases only; MAD tiers become groups once record types declare a tier"
29
+ ],
30
+ "name": "interface"
31
+ }
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env node
2
+ // The MCP server over the router (EE-030): stdio, newline-delimited JSON-RPC 2.0, no dependencies.
3
+ // Tools are the router's actions; resources are the route table and each venture's records.
4
+ // Every caller here is an agent: write never takes an actor, so a gated record (ownership, board,
5
+ // founder agreement, exit, telos, decision rights, publication policy) is always written as a
6
+ // draft for a person to accept. Nothing an agent sends through this server can approve itself.
7
+ //
8
+ // claude mcp add mentura -- node <repo>/interface/mcp/server.mjs
9
+ // MENTURA_WORKSPACE=<dir> sets the workspace; the default is this repository's instance/.
10
+
11
+ import { createInterface } from "node:readline";
12
+ import { call, routes, routesMd, ventureDir, ventures } from "../router.mjs";
13
+ import { propose } from "../../schema/decisions.mjs";
14
+
15
+ const PROTOCOL = "2025-06-18";
16
+ const venture = { type: "string", description: "The venture's id, or its folder path for a nested venture (see mentura_ventures)" };
17
+ const route = { type: "string", description: "A route from mentura_routes, such as purpose/validation/problem" };
18
+ export const TOOLS = [
19
+ { name: "mentura_routes", description: "The route table: every record and command a venture has, with its actions, decision classes and groups. A collection item is <route>/<id>, such as purpose/product/kettle.", inputSchema: { type: "object", properties: { group: { type: "string", description: "Only the routes need-now suggests in this phase: discovery, validation, beachhead, scale or platform" } } } },
20
+ { name: "mentura_layout", description: "The context for a route before you act on it: the system, layer and kit purpose, skills and references, the schema and template, the gate, and what need-now says about the record.", inputSchema: { type: "object", properties: { venture, route }, required: ["route"] } },
21
+ { name: "mentura_view", description: "A route as a Markdown page for a person. system/overview shows the venture at a glance.", inputSchema: { type: "object", properties: { venture, route }, required: ["venture", "route"] } },
22
+ { name: "mentura_ventures", description: "The ventures in the workspace, with their phase.", inputSchema: { type: "object", properties: {} } },
23
+ { name: "mentura_read", description: "Read one record of a venture. Returns null when the venture has no such record yet.", inputSchema: { type: "object", properties: { venture, route }, required: ["venture", "route"] } },
24
+ { name: "mentura_write", description: "Write one record of a venture. The record must match its schema. A gated record is written as a draft under _drafts/ for a person to accept. Every write is logged in the venture's provenance log: say what the content came from and the decision it acts under.", inputSchema: { type: "object", properties: { venture, route, record: { type: "object", description: "The whole record" },
25
+ derived_from: { type: "array", items: { type: "string" }, description: "What the content came from: venture-relative paths, URLs or decision ids" },
26
+ decision: { type: "string", description: "The decision the write acts under, such as EE-026" },
27
+ model: { type: "string", description: "Your model, for the provenance log" }, note: { type: "string" },
28
+ agent_id: { type: "string", description: "Your role in the team plan, so its routes and unlocks apply" } }, required: ["venture", "route", "record"] } },
29
+ { name: "mentura_decisions", description: "The decisions a venture owes (EE-054): each with its parent, boundary, phase, due time and whether it renders now, is overdue, waits, comes later, is stale or deferred. Work on what renders now or overdue; a decision that waits is held by an open fail-closed decision above it. A route a pending decision unlocks is refused until a person decides it.", inputSchema: { type: "object", properties: { venture,
30
+ render: { type: "array", items: { type: "string" }, description: "Only these states, such as [\"overdue\", \"now\"]" } }, required: ["venture"] } },
31
+ { name: "mentura_propose_decision", description: "Propose a decision, or new wording for an open one. It stays open until a person approves it in the CLI (mentura decide); you can never mark a decision decided. Put it beside what it decides with at (a venture folder such as operations) and name (<record>[.<topic>]).", inputSchema: { type: "object", properties: { venture,
32
+ decision: { type: "object", description: "id, question, and optionally answer (your proposed wording), decides, layer, parent, needed_in, due, outcomes, unlocks, note, plus at and name for where it goes" },
33
+ agent_id: { type: "string", description: "Your role in the team plan" }, model: { type: "string" } }, required: ["venture", "decision"] } },
34
+ { name: "mentura_check", description: "Run the checks for one record of a venture.", inputSchema: { type: "object", properties: { venture, route }, required: ["venture", "route"] } },
35
+ { name: "mentura_template", description: "The fill-in template for a record, where its kit has one.", inputSchema: { type: "object", properties: { route }, required: ["route"] } },
36
+ { name: "mentura_run", description: "Run a command route for a venture: system/need-now (what to work on now), system/time-to-ready, purpose/validation/assess (what the problem's evidence is strong enough for), governance/payouts, knowledge/catalog (index every source the venture keeps records in), knowledge/search (find items in any of them). A result with needs_input lists what is missing: ask the person whether to fill it in or run as is, and only then call again with as_is.", inputSchema: { type: "object", properties: { venture, route, value: { type: ["number", "string"], description: "governance/payouts: a sale value; knowledge/search: the query" },
37
+ as_is: { type: "boolean", description: "purpose/validation/assess: run even though the record is incomplete. Set it only after the person chose to run as is" },
38
+ agent_id: { type: "string", description: "Your role in the team plan" } }, required: ["venture", "route"] } },
39
+ ];
40
+
41
+ let client = null; // the harness, as it named itself at initialize
42
+
43
+ export async function handle(msg) {
44
+ const { id, method, params = {} } = msg;
45
+ const reply = (result) => ({ jsonrpc: "2.0", id, result });
46
+ const fail = (code, message) => ({ jsonrpc: "2.0", id, error: { code, message } });
47
+ switch (method) {
48
+ case "initialize":
49
+ client = params.clientInfo ? [params.clientInfo.name, params.clientInfo.version].filter(Boolean).join(" ") : null;
50
+ return reply({ protocolVersion: PROTOCOL, capabilities: { tools: {}, resources: {} }, serverInfo: { name: "mentura", version: "0.1.0" },
51
+ instructions: "Start with mentura_decisions to see which decisions are due and what is held, then mentura_run on system/need-now to see what a venture needs now, so you build only that. Read before you write. Gated records are drafts until a person accepts them." });
52
+ case "notifications/initialized": case "notifications/cancelled": return null;
53
+ case "ping": return reply({});
54
+ case "tools/list": return reply({ tools: TOOLS });
55
+ case "tools/call": {
56
+ const a = params.arguments ?? {};
57
+ let r;
58
+ switch (params.name) {
59
+ case "mentura_routes": r = { ok: true, result: a.group ? routes().filter((x) => x.groups.includes(`(${a.group})`)) : routes() }; break;
60
+ case "mentura_ventures": r = { ok: true, result: ventures().map(({ id, name, phase, path }) => ({ id, name, phase, path })) }; break;
61
+ case "mentura_layout": r = await call({ venture: a.venture, route: a.route, action: "layout" }); break;
62
+ case "mentura_view": r = await call({ venture: a.venture, route: a.route, action: "view" }); break;
63
+ case "mentura_read": r = await call({ venture: a.venture, route: a.route, action: "read" }); break;
64
+ case "mentura_write": r = await call({ venture: a.venture, route: a.route, action: "write", input: a.record, actor: "agent", actor_id: a.agent_id, via: "mcp",
65
+ provenance: { derived_from: a.derived_from, decision: a.decision, note: a.note, agent: Object.fromEntries(Object.entries({ harness: client, model: a.model }).filter(([, v]) => v)) } }); break;
66
+ case "mentura_decisions": {
67
+ r = await call({ venture: a.venture, route: "governance/decisions", action: "run", actor_id: a.agent_id });
68
+ if (r.ok && a.render?.length) r.result = { ...r.result, decisions: r.result.decisions.filter((d) => a.render.includes(d.render)) };
69
+ break;
70
+ }
71
+ case "mentura_propose_decision": {
72
+ const dir = ventureDir(a.venture);
73
+ r = dir ? propose(dir, a.decision, { agentId: a.agent_id, via: "mcp", harness: client, model: a.model }) : { ok: false, error: `no venture ${a.venture}` };
74
+ break;
75
+ }
76
+ case "mentura_check": r = await call({ venture: a.venture, route: a.route, action: "check" }); break;
77
+ case "mentura_template": r = await call({ route: a.route, action: "template" }); break;
78
+ case "mentura_run": r = await call({ venture: a.venture, route: a.route, action: "run", actor_id: a.agent_id, input: a.value !== undefined || a.as_is ? { ...(a.value !== undefined ? { value: a.value } : {}), ...(a.as_is ? { as_is: true } : {}) } : undefined }); break;
79
+ default: return fail(-32602, `unknown tool ${params.name}`);
80
+ }
81
+ if (r.ok && r.needs_input) return reply({ content: [{ type: "text", text: `Ask the person before running. ${r.needs_input.ask}\n${JSON.stringify(r.needs_input, null, 2)}` }], isError: false });
82
+ const extra = ["not_found", "pending_draft", "fix", "deprecated"].some((k) => r[k]);
83
+ const text = r.ok ? (typeof r.result === "string" && !extra ? r.result : JSON.stringify(extra ? r : r.result, null, 2)) : JSON.stringify({ error: r.error, ...(r.fix ? { fix: r.fix } : {}), ...(r.result ? { result: r.result } : {}) }, null, 2);
84
+ return reply({ content: [{ type: "text", text }], isError: !r.ok });
85
+ }
86
+ case "resources/list":
87
+ return reply({ resources: [
88
+ { uri: "mentura://routes", name: "Route table", mimeType: "text/markdown" },
89
+ ...ventures().map((v) => ({ uri: `mentura://${v.id}`, name: `${v.id}: overview`, mimeType: "text/markdown" })),
90
+ ...ventures().flatMap((v) => routes().filter((x) => x.kind === "record" && !x.route.endsWith("[id]")).map((x) => ({ uri: `mentura://${v.id}/${x.route}`, name: `${v.id}: ${x.route}`, mimeType: "application/json" }))),
91
+ ] });
92
+ case "resources/read": {
93
+ const uri = params.uri ?? "";
94
+ if (uri === "mentura://routes") return reply({ contents: [{ uri, mimeType: "text/markdown", text: routesMd() }] });
95
+ const o = uri.match(/^mentura:\/\/([^/]+)$/);
96
+ if (o) { const r = await call({ venture: o[1], route: "system/overview", action: "view" }); return r.ok ? reply({ contents: [{ uri, mimeType: "text/markdown", text: r.result }] }) : fail(-32602, r.error); }
97
+ const m = uri.match(/^mentura:\/\/([^/]+)\/(.+)$/);
98
+ if (!m) return fail(-32602, `unknown resource ${uri}`);
99
+ const r = await call({ venture: m[1], route: m[2], action: "read" });
100
+ if (!r.ok) return fail(-32602, r.error);
101
+ return reply({ contents: [{ uri, mimeType: "application/json", text: JSON.stringify(r.result, null, 2) }] });
102
+ }
103
+ default:
104
+ return id === undefined ? null : fail(-32601, `method not found: ${method}`);
105
+ }
106
+ }
107
+
108
+ if (import.meta.url === `file://${process.argv[1]}`) {
109
+ const rl = createInterface({ input: process.stdin });
110
+ // Answers go out in the order requests came in: each line waits for the one before.
111
+ let queue = Promise.resolve();
112
+ rl.on("line", (line) => {
113
+ if (!line.trim()) return;
114
+ queue = queue.then(async () => {
115
+ let msg;
116
+ try { msg = JSON.parse(line); } catch { process.stdout.write(JSON.stringify({ jsonrpc: "2.0", id: null, error: { code: -32700, message: "parse error" } }) + "\n"); return; }
117
+ let res;
118
+ try { res = await handle(msg); } catch (e) { res = { jsonrpc: "2.0", id: msg.id ?? null, error: { code: -32603, message: String(e.message ?? e) } }; }
119
+ if (res) process.stdout.write(JSON.stringify(res) + "\n");
120
+ });
121
+ });
122
+ }
@@ -0,0 +1,58 @@
1
+ ---
2
+ type: entity-readme
3
+ ai-model: claude
4
+ entity-name: operator-console
5
+ companion-to: "[[project-view-mockup-2026-05-14.html]]"
6
+ source: hybrid
7
+ created: 2026-05-14
8
+ last-reviewed: 2026-05-14
9
+ authorship: hybrid
10
+ authors: [the author, Claude]
11
+ ip-sensitivity: normal
12
+ scope: global
13
+ scope-entity: "[[everything-ecosystem]]"
14
+ tags: [operator-console, methodology-product, orchestration-software, mockup, html-companion, 2026-05-14]
15
+ ---
16
+
17
+ # `operator-console/` — The Operator Console
18
+
19
+ *Renamed from `harness/` on 2026-10-26 (G-029): "harness" now means only the entity class for a first-party interface over a product.*
20
+
21
+ > Working folder for the operator console — the operational software layered on top of the SAD methodology. Per §39, the trajectory is HTML now → real software later. The first mockup is **[[project-view-mockup-2026-05-14.html]]**. Open it in a browser.
22
+
23
+ ## What this is
24
+
25
+ The operator console is the methodology's operational consumer surface. It's the dashboard a solo operator (or eventually a multi-person team) lives in when managing projects under the methodology. Distinct from:
26
+
27
+ - **The methodology itself** ([[pipeline-canonical-view-2026-05-14]]) — the abstract framework
28
+ - **The methodology website** (separate concern; for publishing + teaching + onboarding to the public)
29
+ - **Per-entity orchestration HTML** ([[per-entity-orchestration-template]]) — the static, vault-embedded version of similar information
30
+
31
+ The operator console is a polished SaaS-style application that surfaces project state, agent activity, and methodology mechanisms (skills, commands, hooks) for the operator.
32
+
33
+ ## Current state
34
+
35
+ - **[[project-view-mockup-2026-05-14.html]]** — high-fidelity static mockup of the project-level view (the reference project as the demonstrative project)
36
+ - Topbar with project switcher; left sidebar with project + operations + methodology nav groups; main area showing three-pillar prominence + agent system panel + recent decisions + quick action cards
37
+
38
+ ## Trajectory
39
+
40
+ Per §39 orchestration trajectory:
41
+
42
+ - **Now:** static HTML mockup for design iteration
43
+ - **Next:** real web app (Next.js + Postgres likely), bespoke for the owner's solo use initially
44
+ - **Later:** multi-person team support (auth, real-time collaboration, role-based access)
45
+ - **Eventually:** publicly available methodology product (when the methodology generalizes beyond the reference project)
46
+
47
+ Paused as of 2026-05-14 to return to the reference project work. Will resume after V1.5 articulation has more shape.
48
+
49
+ ## Related
50
+
51
+ - [[pipeline-canonical-view-2026-05-14]] — the methodology the operator console operationalizes
52
+ - [[per-entity-orchestration-template]] — vault-embedded parallel artifact (less polished, more comprehensive)
53
+ - A project note — the orchestration HTML instance the operator console mockup demonstrates against
54
+ - [[build-roadmap-and-html-orchestration-2026-05-12]] §32 + §39 — methodology amendments establishing the operator console concept
55
+
56
+ ## Status
57
+
58
+ - **2026-05-14:** Initial mockup authored; paused to return to the reference project V1.5 work.
@@ -0,0 +1,42 @@
1
+ // The provenance log (EE-031): one append-only JSON line per write, after W3C PROV (entity,
2
+ // activity, agent, derived from). Each line carries the previous line's hash, so an edited or
3
+ // deleted line breaks the chain. Lives at <venture>/provenance.jsonl, in the system layer, so it
4
+ // is on whatever layers a venture uses. Git history stays the implicit provenance for anything
5
+ // written outside the router.
6
+
7
+ import { createHash } from "node:crypto";
8
+ import { appendFileSync, existsSync, readFileSync } from "node:fs";
9
+ import { join } from "node:path";
10
+
11
+ export const LOG = "provenance.jsonl";
12
+ const sha = (s) => createHash("sha256").update(s).digest("hex");
13
+ const sorted = (x) => Array.isArray(x) ? x.map(sorted) : x && typeof x === "object" ? Object.fromEntries(Object.keys(x).sort().map((k) => [k, sorted(x[k])])) : x;
14
+ export const lineHash = (prev, entry) => { const { hash, ...rest } = entry; return sha(prev + JSON.stringify(sorted(rest))); };
15
+ export const contentHash = (file) => sha(readFileSync(file));
16
+
17
+ export function entries(dir) {
18
+ const f = join(dir, LOG);
19
+ return existsSync(f) ? readFileSync(f, "utf8").split("\n").filter((l) => l.trim()).map((l) => JSON.parse(l)) : [];
20
+ }
21
+
22
+ /** The agent behind this process: MENTURA_ACTOR (person or agent), MENTURA_ACTOR_ID, MENTURA_MODEL, MENTURA_SESSION, MENTURA_HARNESS. */
23
+ export function agentFromEnv(kind, via, extra = {}) {
24
+ const e = process.env;
25
+ const a = { kind, via, id: e.MENTURA_ACTOR_ID, model: kind === "agent" ? e.MENTURA_MODEL : undefined, session: e.MENTURA_SESSION, harness: e.MENTURA_HARNESS, ...extra };
26
+ return Object.fromEntries(Object.entries(a).filter(([, v]) => v));
27
+ }
28
+
29
+ /**
30
+ * Appends one entry for a file just written: a path relative to the venture folder, or, for a
31
+ * record in another source (EE-037), its address (<source>://<path>) with the content's sha256
32
+ * and the source's version, commit and pull request.
33
+ */
34
+ export function record(dir, { entity, route, activity, agent, derived_from, decision, note, sha256, source, statement }) {
35
+ const prior = entries(dir);
36
+ const prev = prior.length ? prior.at(-1).hash : "genesis";
37
+ const entry = Object.fromEntries(Object.entries({ at: new Date().toISOString(), entity, route, activity, agent,
38
+ derived_from: derived_from?.length ? derived_from : undefined, decision, note, source, statement, sha256: sha256 ?? contentHash(join(dir, entity)), prev }).filter(([, v]) => v !== undefined));
39
+ entry.hash = lineHash(prev, entry);
40
+ appendFileSync(join(dir, LOG), JSON.stringify(entry) + "\n");
41
+ return entry;
42
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "layer": "interface",
3
+ "references": [
4
+ {
5
+ "id": "anthropic-2024-building-effective-agents",
6
+ "title": "Building effective agents",
7
+ "authors": [
8
+ "Erik Schluntz",
9
+ "Barry Zhang"
10
+ ],
11
+ "year": 2024,
12
+ "kind": "article",
13
+ "summary": "Agentic systems split into workflows, where LLMs and tools are orchestrated through predefined code paths, and agents, where LLMs dynamically direct their own processes and tool usage, keeping control over how they accomplish a task.",
14
+ "url": "https://www.anthropic.com/engineering/building-effective-agents",
15
+ "checked": "2026-10-27",
16
+ "informs": [
17
+ "noun:agent-harness",
18
+ "noun:ai-harness",
19
+ "noun:ai-feature",
20
+ "field:product.ai"
21
+ ],
22
+ "stance": {
23
+ "is": "adopted",
24
+ "why": "Its line between a workflow and an agent is the line between an AI harness and an agent harness: in an agent harness the model directs its own steps and tool use."
25
+ }
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "aliases": [
3
+ {
4
+ "from": "execution/handoff",
5
+ "to": "operations/handoff",
6
+ "since": "2026-10-28",
7
+ "note": "Execution folded into operations (EE-038)"
8
+ },
9
+ { "from": "purpose/validation/problem", "to": "foundation/problem", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
10
+ { "from": "purpose/icp", "to": "foundation/icp", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
11
+ { "from": "purpose/telos", "to": "foundation/telos", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
12
+ { "from": "purpose/alignment", "to": "foundation/alignment", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
13
+ { "from": "purpose/validation/solution", "to": "validation/solution", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
14
+ { "from": "purpose/validation/pricing", "to": "validation/pricing", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
15
+ { "from": "purpose/validation/go-to-market", "to": "validation/go-to-market", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
16
+ { "from": "purpose/validation/product-market-fit", "to": "validation/product-market-fit", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
17
+ { "from": "purpose/validation/operations-readiness", "to": "validation/operations-readiness", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
18
+ { "from": "purpose/validation/team", "to": "people/team", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
19
+ { "from": "operations/team-plan", "to": "people/team-plan", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
20
+ { "from": "operations/marketing-sitemap", "to": "marketing/sitemap", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
21
+ { "from": "operations/marketing-content", "to": "marketing/content", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
22
+ { "from": "purpose/idea-dump", "to": "raw/dump", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
23
+ { "from": "purpose/idea-map", "to": "ideas/map", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
24
+ { "from": "purpose/idea-graph", "to": "ideas/graph", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
25
+ { "from": "purpose/product", "to": "product", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
26
+ { "from": "evidence/evidence", "to": "evidence", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
27
+ { "from": "purpose/anatomy-answers", "to": "product/anatomy-answers", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
28
+ { "from": "purpose/anatomy-input", "to": "product/anatomy", "since": "2026-10-29", "note": "Package folder layout (EE-070)" },
29
+ { "from": "system/venture-package", "to": ".release/venture-package", "since": "2026-10-29", "note": "The deliverable is a release (EE-071)" },
30
+ { "from": "governance/decision-record", "to": "decisions", "since": "2026-10-29", "note": "Package folder layout (EE-070)" }
31
+ ]
32
+ }