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,152 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "data-model.schema.json",
|
|
4
|
+
"title": "Data model",
|
|
5
|
+
"description": "The shape of schema/data-model.json (EE-018): every record type of the ecosystem, the layer that owns it, its schema, where its records live and what each references. schema/check-data-model.mjs checks it against the repository.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"version",
|
|
9
|
+
"layers",
|
|
10
|
+
"records",
|
|
11
|
+
"ignore"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"version": {
|
|
15
|
+
"type": "string"
|
|
16
|
+
},
|
|
17
|
+
"note": {
|
|
18
|
+
"type": "string"
|
|
19
|
+
},
|
|
20
|
+
"layers": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"items": {
|
|
23
|
+
"type": "string"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"records": {
|
|
27
|
+
"type": "array",
|
|
28
|
+
"items": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"required": [
|
|
31
|
+
"id",
|
|
32
|
+
"layer",
|
|
33
|
+
"level",
|
|
34
|
+
"schema",
|
|
35
|
+
"paths"
|
|
36
|
+
],
|
|
37
|
+
"additionalProperties": false,
|
|
38
|
+
"properties": {
|
|
39
|
+
"id": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"pattern": "^[a-z0-9-]+$"
|
|
42
|
+
},
|
|
43
|
+
"layer": {
|
|
44
|
+
"description": "The owning layer, or system for records every layer shares",
|
|
45
|
+
"enum": [
|
|
46
|
+
"system",
|
|
47
|
+
"purpose",
|
|
48
|
+
"knowledge",
|
|
49
|
+
"operations",
|
|
50
|
+
"evidence",
|
|
51
|
+
"governance",
|
|
52
|
+
"interface"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
"level": {
|
|
56
|
+
"description": "method: this repo's own records; workspace: one per builder; venture: inside a venture folder",
|
|
57
|
+
"enum": [
|
|
58
|
+
"method",
|
|
59
|
+
"workspace",
|
|
60
|
+
"venture"
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"schema": {
|
|
64
|
+
"type": [
|
|
65
|
+
"string",
|
|
66
|
+
"null"
|
|
67
|
+
],
|
|
68
|
+
"description": "Path to the schema that governs it, or null when it has none yet"
|
|
69
|
+
},
|
|
70
|
+
"form": {
|
|
71
|
+
"enum": [
|
|
72
|
+
"json",
|
|
73
|
+
"json-list",
|
|
74
|
+
"markdown",
|
|
75
|
+
"prose",
|
|
76
|
+
"json-lines"
|
|
77
|
+
],
|
|
78
|
+
"description": "Default json. json-list: the file holds a list of records. json-lines: one record per line, append-only"
|
|
79
|
+
},
|
|
80
|
+
"decision_class": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"description": "The decision class (governance/venture-template/decision-rights.json) a write of this record is. When the venture's decision rights put the class at escalate or recommend-approve, an agent's write through the router is held as a draft for a person to accept (EE-032)"
|
|
83
|
+
},
|
|
84
|
+
"paths": {
|
|
85
|
+
"type": "array",
|
|
86
|
+
"minItems": 1,
|
|
87
|
+
"items": {
|
|
88
|
+
"type": "string"
|
|
89
|
+
},
|
|
90
|
+
"description": "Globs from the repo root"
|
|
91
|
+
},
|
|
92
|
+
"contains": {
|
|
93
|
+
"type": "array",
|
|
94
|
+
"items": {
|
|
95
|
+
"type": "string"
|
|
96
|
+
},
|
|
97
|
+
"description": "Record types that live inside this one's folder"
|
|
98
|
+
},
|
|
99
|
+
"refs": {
|
|
100
|
+
"type": "array",
|
|
101
|
+
"items": {
|
|
102
|
+
"type": "object",
|
|
103
|
+
"required": [
|
|
104
|
+
"field",
|
|
105
|
+
"to",
|
|
106
|
+
"checked_by"
|
|
107
|
+
],
|
|
108
|
+
"additionalProperties": false,
|
|
109
|
+
"properties": {
|
|
110
|
+
"field": {
|
|
111
|
+
"type": "string"
|
|
112
|
+
},
|
|
113
|
+
"to": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"description": "A record type id, or a parenthesised name for a non-record target"
|
|
116
|
+
},
|
|
117
|
+
"checked_by": {
|
|
118
|
+
"type": [
|
|
119
|
+
"string",
|
|
120
|
+
"null"
|
|
121
|
+
],
|
|
122
|
+
"description": "The check that resolves this reference, or null when nothing does yet"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"note": {
|
|
128
|
+
"type": "string"
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"ignore": {
|
|
134
|
+
"type": "array",
|
|
135
|
+
"items": {
|
|
136
|
+
"type": "object",
|
|
137
|
+
"required": [
|
|
138
|
+
"path",
|
|
139
|
+
"reason"
|
|
140
|
+
],
|
|
141
|
+
"properties": {
|
|
142
|
+
"path": {
|
|
143
|
+
"type": "string"
|
|
144
|
+
},
|
|
145
|
+
"reason": {
|
|
146
|
+
"type": "string"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Decision analytics (EE-072): how many decisions of each type each function of the venture has made,
|
|
3
|
+
// open against decided, in whose words, in which phase, and what their outcomes were. Like Next.js's
|
|
4
|
+
// instrumentation beside Vercel Analytics: the framework counts from the decision records already in
|
|
5
|
+
// the venture (EE-054, EE-058); ranking decisions by impact over time is the next view, and is
|
|
6
|
+
// listed under `next` rather than computed.
|
|
7
|
+
//
|
|
8
|
+
// node schema/decision-analytics.mjs <venture dir>
|
|
9
|
+
//
|
|
10
|
+
// Output is data (JSON), never a view: rendering it belongs to the platform, or to a visualization
|
|
11
|
+
// skill when Naive runs inside another harness such as Claude Code, Codex or Cursor (Torian, 2026-10-28).
|
|
12
|
+
//
|
|
13
|
+
// Function: the core package that holds the record a decision decides (EE-069, EE-071); foundation
|
|
14
|
+
// statements and decisions about venture.json belong to Foundation; anything else is "Venture".
|
|
15
|
+
// Type: the record type or foundation statement it decides (problem, product, mission...), so counts
|
|
16
|
+
// answer "which kinds of decision has each function made". A decision record may set `type`.
|
|
17
|
+
|
|
18
|
+
import { readFileSync } from "node:fs";
|
|
19
|
+
import { join } from "node:path";
|
|
20
|
+
import { decisions } from "./decisions.mjs";
|
|
21
|
+
import { HOME, PACKAGES, TITLES } from "./packages.mjs";
|
|
22
|
+
|
|
23
|
+
const load = (f) => JSON.parse(readFileSync(f, "utf8"));
|
|
24
|
+
const titleOf = (t) => ({ icp: "ICP", "venture-core": "Core product" })[t] ?? TITLES[t] ?? t.replace(/^validation-/, "").replace(/-/g, " ").replace(/^./, (c) => c.toUpperCase());
|
|
25
|
+
const FUNCTION_OF = { ...HOME, "venture-core": "foundation", brand: "marketing" };
|
|
26
|
+
const DECIDED = new Set(["decided", "accepted"]);
|
|
27
|
+
const OPEN = new Set(["now", "overdue", "waiting", "stale", "later"]);
|
|
28
|
+
|
|
29
|
+
/** Counts over a venture's decisions; nothing is written. */
|
|
30
|
+
export function analytics(dir, now) {
|
|
31
|
+
const r = decisions(dir, now);
|
|
32
|
+
const rows = r.decisions.filter((d) => d.source !== "root").map((d) => {
|
|
33
|
+
const raw = d.file ? load(join(dir, d.file)) : {};
|
|
34
|
+
const record = d.decides?.record ?? null;
|
|
35
|
+
// A foundation statement belongs to the strategic foundation whatever record holds it; so does a
|
|
36
|
+
// decision about venture.json itself (the core product, the team).
|
|
37
|
+
const statement = d.source === "foundation" ? d.id.replace(/^foundation-/, "") : null;
|
|
38
|
+
const fn = statement || d.part_of === "foundation" || d.decides?.path === "venture.json" ? "foundation" : FUNCTION_OF[record] ?? null;
|
|
39
|
+
const state = DECIDED.has(d.status) ? "decided" : OPEN.has(d.render) ? "open" : d.render;
|
|
40
|
+
const pv = d.provenance ?? raw.provenance ?? null;
|
|
41
|
+
return {
|
|
42
|
+
id: d.id, question: d.question, kind: d.source === "draft" ? "acceptance" : d.source === "foundation" ? "foundation statement" : "decision",
|
|
43
|
+
type: raw.type ?? titleOf(statement ?? record ?? d.id), function: fn ? PACKAGES.core[fn].title : "Venture", function_id: fn ?? "venture",
|
|
44
|
+
state, render: d.render, decided_by: pv?.approved_by ?? null, decided_at: pv?.approved_at ?? null, phase: pv?.phase ?? null,
|
|
45
|
+
wording: state === "decided" ? (pv?.wording ?? "unknown") : null,
|
|
46
|
+
outcomes: (raw.outcomes ?? []).map((o) => o.result ?? "pending"),
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
const count = (xs, key) => Object.entries(xs.reduce((m, x) => ((m[key(x)] = (m[key(x)] ?? 0) + 1), m), {})).sort((a, b) => b[1] - a[1]).map(([k, n]) => ({ key: k, n }));
|
|
50
|
+
const functions = [...new Set(rows.map((x) => x.function))].map((f) => {
|
|
51
|
+
const xs = rows.filter((x) => x.function === f);
|
|
52
|
+
return { function: f, id: xs[0].function_id, total: xs.length, decided: xs.filter((x) => x.state === "decided").length, open: xs.filter((x) => x.state === "open").length,
|
|
53
|
+
types: count(xs, (x) => x.type).map(({ key, n }) => ({ type: key, n, decided: xs.filter((x) => x.type === key && x.state === "decided").length })) };
|
|
54
|
+
}).sort((a, b) => b.total - a.total || a.function.localeCompare(b.function));
|
|
55
|
+
const decided = rows.filter((x) => x.state === "decided");
|
|
56
|
+
const outcomes = rows.flatMap((x) => x.outcomes);
|
|
57
|
+
const days = count(decided.filter((x) => x.decided_at), (x) => x.decided_at.slice(0, 10)).sort((a, b) => a.key.localeCompare(b.key));
|
|
58
|
+
return {
|
|
59
|
+
venture: r.venture, phase: r.phase, total: rows.length, decided: decided.length, open: rows.filter((x) => x.state === "open").length,
|
|
60
|
+
functions, types: count(rows, (x) => x.type), kinds: count(rows, (x) => x.kind),
|
|
61
|
+
wording: count(decided, (x) => x.wording), by: count(decided.filter((x) => x.decided_by), (x) => x.decided_by), phases: count(decided.filter((x) => x.phase), (x) => x.phase),
|
|
62
|
+
outcomes: { total: outcomes.length, ...Object.fromEntries(["met", "partly", "missed", "pending"].map((k) => [k, outcomes.filter((o) => o === k).length])) },
|
|
63
|
+
over_time: days.map(({ key, n }) => ({ day: key, decided: n })),
|
|
64
|
+
decisions: rows,
|
|
65
|
+
next: [
|
|
66
|
+
"Highest-impact decisions over time: a Score of each decision's impact (System 1), combined in code with its recorded outcomes",
|
|
67
|
+
"Projected against actual outcomes, once outcomes are recorded with results",
|
|
68
|
+
"How long decisions survive before they are revisited",
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
74
|
+
const dir = process.argv[2];
|
|
75
|
+
if (!dir) { console.error("usage: node schema/decision-analytics.mjs <venture dir>"); process.exit(2); }
|
|
76
|
+
console.log(JSON.stringify(analytics(dir), null, 2));
|
|
77
|
+
}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "decision-record.schema.json",
|
|
4
|
+
"title": "Decision record",
|
|
5
|
+
"description": "One decision a venture has to make, in a decisions/ folder beside the record it decides (EE-054), like a Next.js file beside its route: decisions/<record>[.<topic>].decision.json decides <record>.json in the folder that holds decisions/. The decision log (decision.schema.json) stays the append-only history; this is the live decision. node schema/decisions.mjs gathers them into the decision matrix.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"id",
|
|
9
|
+
"question",
|
|
10
|
+
"status"
|
|
11
|
+
],
|
|
12
|
+
"additionalProperties": false,
|
|
13
|
+
"properties": {
|
|
14
|
+
"id": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"pattern": "^[a-z0-9][a-z0-9-]*$",
|
|
17
|
+
"description": "Unique within the venture. The roots venture and foundation are reserved."
|
|
18
|
+
},
|
|
19
|
+
"question": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "What has to be decided, as a question"
|
|
22
|
+
},
|
|
23
|
+
"ideas": {
|
|
24
|
+
"type": "array",
|
|
25
|
+
"description": "The ideas in the founder's idea dump this decision comes from, by id (purpose/ideas/map.mdx), so a decision can be traced back to the founder's own words (EE-061)",
|
|
26
|
+
"items": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"pattern": "^i-[0-9]+$"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"decides": {
|
|
32
|
+
"type": "object",
|
|
33
|
+
"additionalProperties": false,
|
|
34
|
+
"description": "What the decision settles: a record type, a venture-relative file, or both. Defaults to the record its file name names.",
|
|
35
|
+
"properties": {
|
|
36
|
+
"record": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"description": "A record type in schema/data-model.json"
|
|
39
|
+
},
|
|
40
|
+
"path": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"description": "A venture-relative file, such as purpose/icp.json"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"statement": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"description": "The strategic-foundation statement this decision settles (purpose/strategic-foundation.json), if any. It then stands in for that statement in the matrix and is part of the foundation."
|
|
49
|
+
},
|
|
50
|
+
"layer": {
|
|
51
|
+
"enum": [
|
|
52
|
+
"purpose",
|
|
53
|
+
"knowledge",
|
|
54
|
+
"operations",
|
|
55
|
+
"evidence",
|
|
56
|
+
"governance",
|
|
57
|
+
"interface",
|
|
58
|
+
"system"
|
|
59
|
+
],
|
|
60
|
+
"description": "The layer it belongs to; defaults to the decided record's layer"
|
|
61
|
+
},
|
|
62
|
+
"parent": {
|
|
63
|
+
"type": [
|
|
64
|
+
"string",
|
|
65
|
+
"null"
|
|
66
|
+
],
|
|
67
|
+
"description": "The decision this one depends on. Defaults to foundation for a foundation record, else venture."
|
|
68
|
+
},
|
|
69
|
+
"boundary": {
|
|
70
|
+
"enum": [
|
|
71
|
+
"fail-closed",
|
|
72
|
+
"fail-open",
|
|
73
|
+
"inherit"
|
|
74
|
+
],
|
|
75
|
+
"default": "inherit",
|
|
76
|
+
"description": "fail-closed: while this decision is open, decisions under it wait and agents only draft. fail-open: work under it goes on. inherit: the parent's boundary. The venture root and the foundation fail closed; a product fails open (EE-054)."
|
|
77
|
+
},
|
|
78
|
+
"needed_in": {
|
|
79
|
+
"enum": [
|
|
80
|
+
"discovery",
|
|
81
|
+
"validation",
|
|
82
|
+
"beachhead",
|
|
83
|
+
"scale",
|
|
84
|
+
"platform"
|
|
85
|
+
],
|
|
86
|
+
"description": "The phase in which it must be made. One needed in a later phase than the venture's is speculative and held back (EE-057)."
|
|
87
|
+
},
|
|
88
|
+
"due": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"format": "date-time",
|
|
91
|
+
"description": "When it must be decided, for a decision with a real deadline (a launch, a hackathon, a filing). An open decision past its due time renders overdue; a due time overrides needed_in, so a dated decision is never held back as later."
|
|
92
|
+
},
|
|
93
|
+
"status": {
|
|
94
|
+
"enum": [
|
|
95
|
+
"open",
|
|
96
|
+
"decided",
|
|
97
|
+
"deferred",
|
|
98
|
+
"withdrawn"
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
"options": {
|
|
102
|
+
"type": "array",
|
|
103
|
+
"items": {
|
|
104
|
+
"type": "string"
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"answer": {
|
|
108
|
+
"type": [
|
|
109
|
+
"string",
|
|
110
|
+
"null"
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"decided_by": {
|
|
114
|
+
"type": [
|
|
115
|
+
"string",
|
|
116
|
+
"null"
|
|
117
|
+
],
|
|
118
|
+
"description": "Who decided: a person's name. An agent never decides a fail-closed decision. Deprecated in favour of provenance.approved_by, which it must equal when both are present."
|
|
119
|
+
},
|
|
120
|
+
"decided_at": {
|
|
121
|
+
"type": [
|
|
122
|
+
"string",
|
|
123
|
+
"null"
|
|
124
|
+
],
|
|
125
|
+
"format": "date-time"
|
|
126
|
+
},
|
|
127
|
+
"logged_as": {
|
|
128
|
+
"type": "string",
|
|
129
|
+
"description": "The decision log entry that records it, such as D-012 or EE-054"
|
|
130
|
+
},
|
|
131
|
+
"note": {
|
|
132
|
+
"type": "string"
|
|
133
|
+
},
|
|
134
|
+
"provenance": {
|
|
135
|
+
"type": "object",
|
|
136
|
+
"additionalProperties": false,
|
|
137
|
+
"description": "Who worded and who approved the decision, when, and in which phase (EE-058). An agent's wording waits with drafted_by alone; a decided decision needs approved_by, approved_at and phase.",
|
|
138
|
+
"required": [
|
|
139
|
+
"drafted_by"
|
|
140
|
+
],
|
|
141
|
+
"properties": {
|
|
142
|
+
"drafted_by": {
|
|
143
|
+
"type": "object",
|
|
144
|
+
"additionalProperties": false,
|
|
145
|
+
"required": [
|
|
146
|
+
"kind"
|
|
147
|
+
],
|
|
148
|
+
"properties": {
|
|
149
|
+
"kind": {
|
|
150
|
+
"enum": [
|
|
151
|
+
"person",
|
|
152
|
+
"agent",
|
|
153
|
+
"framework"
|
|
154
|
+
],
|
|
155
|
+
"description": "framework: Naive asked the question itself, as a convention (the product foundation); a person still answers it"
|
|
156
|
+
},
|
|
157
|
+
"id": {
|
|
158
|
+
"type": "string",
|
|
159
|
+
"description": "The person's name or the agent's id"
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"description": "Who wrote the wording"
|
|
163
|
+
},
|
|
164
|
+
"approved_by": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"description": "The person who approved the wording or changed it. Never an agent."
|
|
167
|
+
},
|
|
168
|
+
"approved_at": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"format": "date-time"
|
|
171
|
+
},
|
|
172
|
+
"phase": {
|
|
173
|
+
"enum": [
|
|
174
|
+
"discovery",
|
|
175
|
+
"validation",
|
|
176
|
+
"beachhead",
|
|
177
|
+
"scale",
|
|
178
|
+
"platform"
|
|
179
|
+
],
|
|
180
|
+
"description": "The venture's phase when it was approved"
|
|
181
|
+
},
|
|
182
|
+
"wording": {
|
|
183
|
+
"enum": [
|
|
184
|
+
"approved",
|
|
185
|
+
"changed",
|
|
186
|
+
"own"
|
|
187
|
+
],
|
|
188
|
+
"description": "approved: the drafted wording as it was; changed: the approver altered it; own: the approver wrote it"
|
|
189
|
+
},
|
|
190
|
+
"authority": {
|
|
191
|
+
"type": "string",
|
|
192
|
+
"description": "The decision class in governance/decision-rights.json under which the approver could decide, when authority was delegated"
|
|
193
|
+
},
|
|
194
|
+
"via": {
|
|
195
|
+
"type": "string",
|
|
196
|
+
"description": "Where the approval was given, such as the Decision Docket or a decision card"
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
"outcomes": {
|
|
201
|
+
"type": "array",
|
|
202
|
+
"description": "What the decision is expected to achieve, and later what happened; the evaluations it is tested against (EE-058). Outcomes, not activities.",
|
|
203
|
+
"items": {
|
|
204
|
+
"type": "object",
|
|
205
|
+
"additionalProperties": false,
|
|
206
|
+
"required": [
|
|
207
|
+
"id",
|
|
208
|
+
"projected"
|
|
209
|
+
],
|
|
210
|
+
"properties": {
|
|
211
|
+
"id": {
|
|
212
|
+
"type": "string",
|
|
213
|
+
"pattern": "^[a-z0-9][a-z0-9-]*$"
|
|
214
|
+
},
|
|
215
|
+
"projected": {
|
|
216
|
+
"type": "string",
|
|
217
|
+
"description": "The outcome expected"
|
|
218
|
+
},
|
|
219
|
+
"by": {
|
|
220
|
+
"type": "string",
|
|
221
|
+
"description": "When it should be visible: a date-time, a date or a phase. A pending outcome past a date-time or date is due for its actual result."
|
|
222
|
+
},
|
|
223
|
+
"measure": {
|
|
224
|
+
"type": "string",
|
|
225
|
+
"description": "How it will be checked"
|
|
226
|
+
},
|
|
227
|
+
"actual": {
|
|
228
|
+
"type": [
|
|
229
|
+
"string",
|
|
230
|
+
"null"
|
|
231
|
+
],
|
|
232
|
+
"description": "What happened"
|
|
233
|
+
},
|
|
234
|
+
"result": {
|
|
235
|
+
"enum": [
|
|
236
|
+
"pending",
|
|
237
|
+
"met",
|
|
238
|
+
"partly",
|
|
239
|
+
"missed"
|
|
240
|
+
],
|
|
241
|
+
"default": "pending"
|
|
242
|
+
},
|
|
243
|
+
"recorded_by": {
|
|
244
|
+
"type": "string"
|
|
245
|
+
},
|
|
246
|
+
"recorded_at": {
|
|
247
|
+
"type": "string",
|
|
248
|
+
"format": "date-time"
|
|
249
|
+
},
|
|
250
|
+
"evidence": {
|
|
251
|
+
"type": "array",
|
|
252
|
+
"items": {
|
|
253
|
+
"type": "string"
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
"unlocks": {
|
|
260
|
+
"type": "array",
|
|
261
|
+
"description": "Activities this decision opens that were closed before it (EE-058), and for whom",
|
|
262
|
+
"items": {
|
|
263
|
+
"type": "object",
|
|
264
|
+
"additionalProperties": false,
|
|
265
|
+
"required": [
|
|
266
|
+
"activity"
|
|
267
|
+
],
|
|
268
|
+
"properties": {
|
|
269
|
+
"activity": {
|
|
270
|
+
"type": "string"
|
|
271
|
+
},
|
|
272
|
+
"for": {
|
|
273
|
+
"type": "array",
|
|
274
|
+
"items": {
|
|
275
|
+
"type": "string"
|
|
276
|
+
},
|
|
277
|
+
"description": "Roles, people or agents it opens for; empty means everyone"
|
|
278
|
+
},
|
|
279
|
+
"routes": {
|
|
280
|
+
"type": "array",
|
|
281
|
+
"items": {
|
|
282
|
+
"type": "string"
|
|
283
|
+
},
|
|
284
|
+
"description": "The routes the activity uses, as globs such as operations/** (robots syntax). Until the decision is made, the router refuses agents those routes (for the actors in for, or every agent)."
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "decision-rights.schema.json",
|
|
4
|
+
"title": "Decision rights",
|
|
5
|
+
"description": "Who may decide what (EE-017). The template lives at governance/venture-template/decision-rights.json; a venture may tighten a class (move it to a higher level or a more senior owner) in <venture>/governance/decision-rights.json, and loosening one needs an owner decision. Levels follow RAPID and DACI: decide, decide-inform, recommend-approve, escalate.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["register", "classes"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"register": { "const": "decision-rights" },
|
|
10
|
+
"updated": { "type": "string" },
|
|
11
|
+
"governed_by": { "type": "string" },
|
|
12
|
+
"template": { "type": "boolean", "description": "True for the template; a venture's file omits it or sets false" },
|
|
13
|
+
"extends": { "type": "string", "description": "A venture file: path to the template it tightens" },
|
|
14
|
+
"levels": { "type": "object", "additionalProperties": { "type": "string" } },
|
|
15
|
+
"note": { "type": "string" },
|
|
16
|
+
"classes": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"items": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"required": ["id", "owner", "level"],
|
|
21
|
+
"properties": {
|
|
22
|
+
"id": { "type": "string", "pattern": "^[a-z0-9-]+$" },
|
|
23
|
+
"description": { "type": "string" },
|
|
24
|
+
"owner": { "type": "string", "description": "Role id from the roles register" },
|
|
25
|
+
"level": { "enum": ["decide", "decide-inform", "recommend-approve", "escalate"] },
|
|
26
|
+
"condition": { "type": "string" },
|
|
27
|
+
"decision": { "type": "string", "description": "A venture file: the decision that tightened or loosened it" }
|
|
28
|
+
},
|
|
29
|
+
"additionalProperties": false
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"additionalProperties": false
|
|
34
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "decision.schema.json",
|
|
4
|
+
"title": "Decision log",
|
|
5
|
+
"description": "A decision log: the schema's own (docs/decisions/decisions.json, ids EE-NNN), or any venture's, with its own id prefix. Entries are appended, never rewritten; a changed decision is a new entry that supersedes the old one.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["log", "prefix", "decisions"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"log": { "type": "string", "description": "Whose decisions these are" },
|
|
10
|
+
"prefix": { "type": "string", "pattern": "^[A-Z]+$", "description": "Id prefix, e.g. EE for the schema itself" },
|
|
11
|
+
"decisions": {
|
|
12
|
+
"type": "array",
|
|
13
|
+
"items": {
|
|
14
|
+
"type": "object",
|
|
15
|
+
"required": ["id", "date", "decision", "status"],
|
|
16
|
+
"properties": {
|
|
17
|
+
"id": { "type": "string", "pattern": "^[A-Z]+-\\d{3}$" },
|
|
18
|
+
"date": { "type": "string", "format": "date" },
|
|
19
|
+
"decision": { "type": "string" },
|
|
20
|
+
"why": { "type": "string" },
|
|
21
|
+
"status": { "enum": ["proposed", "in-force", "superseded", "withdrawn"] },
|
|
22
|
+
"supersedes": { "type": "array", "items": { "type": "string" } },
|
|
23
|
+
"related": { "type": "array", "items": { "type": "string" } }
|
|
24
|
+
},
|
|
25
|
+
"additionalProperties": false
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"additionalProperties": false
|
|
30
|
+
}
|