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