naive-framework 0.1.0 → 0.2.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 +2 -1
- package/docs/decisions/decisions.json +27 -0
- package/docs/reference/ROUTES.md +36 -37
- package/governance/layer.json +2 -1
- package/governance/venture-template/roles/venture-roles.json +62 -0
- package/interface/acting.mjs +83 -0
- package/interface/adapters/claude-code.json +16 -0
- package/interface/adapters/codex.json +14 -0
- package/interface/adapters/cursor.json +16 -0
- package/interface/adapters.mjs +182 -0
- package/interface/api/server.mjs +4 -2
- package/interface/boundaries.mjs +218 -0
- package/interface/brand.mjs +214 -0
- package/interface/cli/freshness.mjs +59 -0
- package/interface/cli/guard.mjs +6 -0
- package/interface/cli/mentura.mjs +78 -8
- package/interface/cli/naive.mjs +33 -8
- package/interface/context.mjs +524 -0
- package/interface/demo/board.mjs +1 -1
- package/interface/dev/setup.mjs +84 -0
- package/interface/gate-hooks.mjs +36 -0
- package/interface/harness/evals.mjs +3 -3
- package/interface/harness/run.mjs +4 -4
- package/interface/instrumentation.mjs +86 -0
- package/interface/kit-boundary.mjs +73 -0
- package/interface/layer.json +8 -2
- package/interface/mcp/server.mjs +47 -7
- package/interface/package-routes.mjs +196 -0
- package/interface/provenance.mjs +24 -1
- package/interface/reads.mjs +173 -0
- package/interface/release-card.mjs +42 -0
- package/interface/router.mjs +101 -28
- package/interface/skills/naive-setup/SKILL.md +71 -0
- package/interface/skills/naive-setup/artifact.html +83 -0
- package/interface/vitals.mjs +115 -0
- package/interface/writes.mjs +190 -0
- package/knowledge/freshness.json +85 -0
- package/knowledge/layer.json +11 -3
- package/knowledge/templates/glossary.md +23 -0
- package/operations/layer.json +10 -3
- package/operations/templates/marketing-brand.md +46 -0
- package/operations/templates/public-assets.md +39 -0
- package/package.json +3 -1
- package/packages/catalog.json +8 -0
- package/packages/customers/package.json +21 -1
- package/packages/deals/package.json +27 -0
- package/packages/decisions/package.json +12 -1
- package/packages/finance/frames/fund-without-ceding-control.frame.json +177 -0
- package/packages/foundation/package.json +8 -1
- package/packages/fund/package.json +48 -0
- package/packages/marketing/package.json +10 -4
- package/packages/money/package.json +24 -3
- package/packages/validation/package.json +13 -0
- package/platform/README.md +6 -0
- package/platform/adapter.json +15 -0
- package/platform/integrations/remote-image.mjs +79 -0
- package/platform/integrations/rho.mjs +7 -6
- package/platform/kits/README.md +8 -1
- package/platform/kits/agent-upgrade/kit.json +15 -0
- package/platform/kits/agent-upgrade/run.mjs +82 -0
- package/platform/kits/agent-upgrade/stand-in-agent.mjs +32 -0
- package/platform/kits/validation-kickoff/kit.json +29 -0
- package/platform/webhooks/server.mjs +70 -0
- package/purpose/frameworks/idea-map/ideamap.mjs +4 -2
- package/schema/README.md +1 -0
- package/schema/access.mjs +57 -0
- package/schema/adapter.schema.json +33 -0
- package/schema/assets.mjs +212 -0
- package/schema/brand.mjs +373 -0
- package/schema/build-release.mjs +61 -0
- package/schema/caching.mjs +505 -0
- package/schema/check-assets.mjs +24 -0
- package/schema/check-brand.mjs +24 -0
- package/schema/check-config.mjs +110 -0
- package/schema/check-nextjs-status.mjs +3 -1
- package/schema/check-people.mjs +70 -0
- package/schema/check-sources.mjs +9 -1
- package/schema/data-model.json +334 -8
- package/schema/deal.schema.json +80 -0
- package/schema/decisions.mjs +7 -1
- package/schema/examples/frames/judge.mjs +10 -0
- package/schema/examples/venture-type/jev.mjs +12 -0
- package/schema/examples/workspace/ventures/acme-labs/AGENTS.md +17 -0
- package/schema/examples/workspace/ventures/acme-labs/accounts/.gitkeep +0 -0
- package/schema/examples/workspace/ventures/acme-labs/decisions/discovery-goal.decision.json +23 -0
- package/schema/examples/workspace/ventures/acme-labs/decisions/statement-icp.decision.json +22 -0
- package/schema/examples/workspace/ventures/acme-labs/decisions/statement-problem.decision.json +22 -0
- package/schema/examples/workspace/ventures/acme-labs/decisions/venture.team.decision.json +37 -0
- package/schema/examples/workspace/ventures/acme-labs/knowledge/README.md +3 -0
- package/schema/examples/workspace/ventures/acme-labs/knowledge/sources.json +46 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000001.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000002.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000003.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000004.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000005.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000006.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000007.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000008.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000009.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000010.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000011.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000012.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000013.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/30000000-0000-4000-8000-000000000014.json +12 -0
- package/schema/examples/workspace/ventures/acme-labs/money/_streams/transactions/stream.json +5 -0
- package/schema/examples/workspace/ventures/acme-labs/money/_summary.json +30 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/customer-service/README.md +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/customer-service/department.json +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/finance/README.md +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/finance/department.json +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/human-capital/README.md +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/human-capital/department.json +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/it/README.md +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/it/department.json +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/marketing-and-sales/README.md +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/marketing-and-sales/department.json +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/products/README.md +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/products/department.json +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/strategy/README.md +5 -0
- package/schema/examples/workspace/ventures/acme-labs/operations/departments/strategy/department.json +5 -0
- package/schema/examples/workspace/ventures/acme-labs/people/founders/maya-chen.json +15 -0
- package/schema/examples/workspace/ventures/acme-labs/people/people.json +22 -0
- package/schema/examples/workspace/ventures/acme-labs/pillars/brand.md +5 -0
- package/schema/examples/workspace/ventures/acme-labs/pillars/business.md +5 -0
- package/schema/examples/workspace/ventures/acme-labs/pillars/product.md +5 -0
- package/schema/examples/workspace/ventures/acme-labs/products/.gitkeep +0 -0
- package/schema/examples/workspace/ventures/acme-labs/products/decisions/product.core-product.decision.json +28 -0
- package/schema/examples/workspace/ventures/acme-labs/products/decisions/product.exists.decision.json +38 -0
- package/schema/examples/workspace/ventures/acme-labs/products/decisions/product.flagship.decision.json +27 -0
- package/schema/examples/workspace/ventures/acme-labs/profile.md +12 -0
- package/schema/examples/workspace/ventures/acme-labs/provenance.jsonl +12 -0
- package/schema/examples/workspace/ventures/acme-labs/raw/dump.md +6 -0
- package/schema/examples/workspace/ventures/acme-labs/venture.json +27 -0
- package/schema/examples/workspace/ventures/northstar/AGENTS.md +17 -0
- package/schema/examples/workspace/ventures/northstar/accounts/.gitkeep +0 -0
- package/schema/examples/workspace/ventures/northstar/deals/ductline.json +8 -0
- package/schema/examples/workspace/ventures/northstar/deals/kilnworks.json +14 -0
- package/schema/examples/workspace/ventures/northstar/decisions/venture.team.decision.json +31 -0
- package/schema/examples/workspace/ventures/northstar/evidence/README.md +3 -0
- package/schema/examples/workspace/ventures/northstar/fund/decisions/terms.decision.json +27 -0
- package/schema/examples/workspace/ventures/northstar/fund/decisions/terms.first-close.decision.json +27 -0
- package/schema/examples/workspace/ventures/northstar/fund/decisions/thesis.decision.json +26 -0
- package/schema/examples/workspace/ventures/northstar/fund/terms.json +22 -0
- package/schema/examples/workspace/ventures/northstar/fund/thesis.json +22 -0
- package/schema/examples/workspace/ventures/northstar/governance/README.md +3 -0
- package/schema/examples/workspace/ventures/northstar/governance/departments/external-relationships/charter.md +5 -0
- package/schema/examples/workspace/ventures/northstar/governance/departments/external-relationships/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/governance/departments/finance/charter.md +5 -0
- package/schema/examples/workspace/ventures/northstar/governance/departments/finance/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/governance/departments/human-capital/charter.md +5 -0
- package/schema/examples/workspace/ventures/northstar/governance/departments/human-capital/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/governance/departments/risk-and-compliance/charter.md +5 -0
- package/schema/examples/workspace/ventures/northstar/governance/departments/risk-and-compliance/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/governance/departments/strategy/charter.md +5 -0
- package/schema/examples/workspace/ventures/northstar/governance/departments/strategy/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/knowledge/README.md +3 -0
- package/schema/examples/workspace/ventures/northstar/operations/README.md +3 -0
- package/schema/examples/workspace/ventures/northstar/operations/departments/external-relationships/README.md +5 -0
- package/schema/examples/workspace/ventures/northstar/operations/departments/external-relationships/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/operations/departments/finance/README.md +5 -0
- package/schema/examples/workspace/ventures/northstar/operations/departments/finance/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/operations/departments/human-capital/README.md +5 -0
- package/schema/examples/workspace/ventures/northstar/operations/departments/human-capital/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/operations/departments/risk-and-compliance/README.md +5 -0
- package/schema/examples/workspace/ventures/northstar/operations/departments/risk-and-compliance/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/operations/departments/strategy/README.md +5 -0
- package/schema/examples/workspace/ventures/northstar/operations/departments/strategy/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/people/founders/ana-ruiz.json +13 -0
- package/schema/examples/workspace/ventures/northstar/people/founders/ben-okafor.json +7 -0
- package/schema/examples/workspace/ventures/northstar/people/people.json +27 -0
- package/schema/examples/workspace/ventures/northstar/pillars/brand.md +5 -0
- package/schema/examples/workspace/ventures/northstar/pillars/business.md +5 -0
- package/schema/examples/workspace/ventures/northstar/pillars/product.md +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/AGENTS.md +17 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/accounts/.gitkeep +0 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/decisions/venture.team.decision.json +31 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/knowledge/README.md +3 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/customer-service/README.md +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/customer-service/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/finance/README.md +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/finance/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/human-capital/README.md +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/human-capital/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/it/README.md +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/it/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/marketing-and-sales/README.md +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/marketing-and-sales/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/products/README.md +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/products/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/strategy/README.md +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/operations/departments/strategy/department.json +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/pillars/brand.md +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/pillars/business.md +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/pillars/product.md +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/products/.gitkeep +0 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/products/decisions/product.core-product.decision.json +28 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/products/decisions/product.exists.decision.json +32 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/products/decisions/product.flagship.decision.json +27 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/profile.md +5 -0
- package/schema/examples/workspace/ventures/northstar/portfolio/kilnworks/venture.json +27 -0
- package/schema/examples/workspace/ventures/northstar/products/.gitkeep +0 -0
- package/schema/examples/workspace/ventures/northstar/profile.md +5 -0
- package/schema/examples/workspace/ventures/northstar/provenance.jsonl +3 -0
- package/schema/examples/workspace/ventures/northstar/purpose/README.md +3 -0
- package/schema/examples/workspace/ventures/northstar/venture.json +49 -0
- package/schema/founder.schema.json +72 -0
- package/schema/frame.schema.json +240 -0
- package/schema/frames.mjs +228 -0
- package/schema/freshness-log.schema.json +40 -0
- package/schema/freshness-profiles.schema.json +44 -0
- package/schema/freshness.mjs +473 -0
- package/schema/fund-terms.schema.json +107 -0
- package/schema/fund-thesis.schema.json +87 -0
- package/schema/gate-drafts.mjs +130 -0
- package/schema/gate.mjs +105 -11
- package/schema/glossary.schema.json +25 -0
- package/schema/init-venture.mjs +38 -8
- package/schema/judgment.schema.json +38 -0
- package/schema/kit.schema.json +47 -0
- package/schema/kits.mjs +24 -0
- package/schema/knowledge-sources.schema.json +145 -15
- package/schema/layer.json +16 -3
- package/schema/marketing-brand.schema.json +116 -0
- package/schema/migrations/kit-to-package.mjs +94 -0
- package/schema/migrations/package-layout.mjs +86 -0
- package/schema/model-steps.mjs +717 -0
- package/schema/money-summary.schema.json +138 -0
- package/schema/naive-config.mjs +165 -0
- package/schema/naive-config.schema.json +268 -0
- package/schema/need-now.json +171 -0
- package/schema/need-now.mjs +3 -2
- package/schema/packages.mjs +10 -5
- package/schema/people.schema.json +86 -0
- package/schema/public-assets.schema.json +76 -0
- package/schema/release-read.mjs +111 -0
- package/schema/releases.mjs +497 -0
- package/schema/setup.mjs +164 -0
- package/schema/stale.mjs +111 -0
- package/schema/start-release.mjs +41 -0
- package/schema/structure.mjs +186 -0
- package/schema/systems-catalog.json +126 -0
- package/schema/systems-catalog.schema.json +78 -0
- package/schema/trigger.schema.json +44 -0
- package/schema/triggers.mjs +237 -0
- package/schema/upgrade-registry.schema.json +60 -0
- package/schema/upgrade-venture.mjs +96 -118
- package/schema/upgrades.json +69 -0
- package/schema/upgrades.mjs +385 -0
- package/schema/validate.py +19 -10
- package/schema/venture-role.schema.json +64 -0
- package/schema/venture-type.mjs +62 -0
- package/schema/venture-types.json +346 -0
- package/schema/venture-types.schema.json +129 -0
- package/schema/venture.schema.json +53 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Checks a venture's naive.config.json (P-2) and explains its gate. Rules: the file matches
|
|
3
|
+
// schema/naive-config.schema.json; rule ids are unique; every route pattern in fail_closed and the
|
|
4
|
+
// rules matches at least one route in the router's table (X-6); every check named in checks exists;
|
|
5
|
+
// every package pinned is installed at that version (U-4); every owner is a role in the team plan
|
|
6
|
+
// when the venture has one; every question setting names a framework that asks System 1 questions.
|
|
7
|
+
//
|
|
8
|
+
// node schema/check-config.mjs <venture dir> [--json] check; exit 1 on a problem
|
|
9
|
+
// node schema/check-config.mjs <venture dir> --resolved the config with the defaults filled in
|
|
10
|
+
// node schema/check-config.mjs <venture dir> --rules every rule the gate applies, and where it comes from
|
|
11
|
+
// node schema/check-config.mjs <venture dir> --explain <route> [--as person] [--role <id>] [--confidence <n>]
|
|
12
|
+
// what the gate would do with a write, without writing
|
|
13
|
+
// node schema/check-config.mjs <venture dir> --pin [<package,...>]
|
|
14
|
+
// pin packages at their installed versions: the ones
|
|
15
|
+
// named, else the ones already pinned, else every one
|
|
16
|
+
|
|
17
|
+
import { spawnSync } from "node:child_process";
|
|
18
|
+
import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
19
|
+
import { tmpdir } from "node:os";
|
|
20
|
+
import { join, resolve as resolvePath } from "node:path";
|
|
21
|
+
import { CONFIG, configFor, installed, pinProblems, rawConfig } from "./naive-config.mjs";
|
|
22
|
+
import { evaluate, patternRe, rulesFor } from "./gate.mjs";
|
|
23
|
+
import { teamPlan } from "./access.mjs";
|
|
24
|
+
import { gateOf, repo, resolve, routes } from "../interface/router.mjs";
|
|
25
|
+
import { agentFromEnv, record } from "../interface/provenance.mjs";
|
|
26
|
+
|
|
27
|
+
const FRAMEWORKS = ["idea-map"];
|
|
28
|
+
|
|
29
|
+
/** Problems with a venture's naive.config.json: { errors, warnings }. */
|
|
30
|
+
export function check(dir) {
|
|
31
|
+
const errors = [], warnings = [];
|
|
32
|
+
const f = join(dir, CONFIG);
|
|
33
|
+
if (!existsSync(f)) return { errors, warnings, note: `no ${CONFIG}: every default applies` };
|
|
34
|
+
let raw;
|
|
35
|
+
try { raw = rawConfig(dir); } catch (e) { return { errors: [e.message], warnings }; }
|
|
36
|
+
const scratch = mkdtempSync(join(tmpdir(), "naive-config-"));
|
|
37
|
+
writeFileSync(join(scratch, CONFIG), JSON.stringify(raw));
|
|
38
|
+
const v = spawnSync("python3", [join(repo, "schema/validate.py"), "--schema", "naive-config.schema.json", "--file", join(scratch, CONFIG)], { encoding: "utf8" });
|
|
39
|
+
rmSync(scratch, { recursive: true, force: true });
|
|
40
|
+
if (v.status !== 0) errors.push(`${CONFIG} does not match schema/naive-config.schema.json:\n${(v.stdout + v.stderr).trim()}`);
|
|
41
|
+
const config = configFor(dir);
|
|
42
|
+
const table = routes();
|
|
43
|
+
const known = (p) => !!resolve(p).r || table.some((r) => patternRe(p).test(r.route) || patternRe(p).test(r.route.replace(/\[id\]/g, "x")));
|
|
44
|
+
const ids = new Set();
|
|
45
|
+
for (const r of rulesFor(config).filter((x) => x.source === "naive.config.json" && !x.fail_closed)) {
|
|
46
|
+
if (ids.has(r.id)) errors.push(`gate rule ${r.id}: duplicate id`);
|
|
47
|
+
ids.add(r.id);
|
|
48
|
+
}
|
|
49
|
+
for (const p of config.gate.fail_closed ?? []) if (!known(p) && !known(`${p}/**`)) errors.push(`gate.fail_closed ${p}: matches no route (see node interface/router.mjs --md)`);
|
|
50
|
+
for (const r of config.gate.rules ?? []) for (const p of r.routes ?? []) if (!known(p)) errors.push(`gate rule ${r.id}: ${p} matches no route`);
|
|
51
|
+
for (const c of [...(config.checks.off ?? []), ...(config.checks.warn ?? [])]) if (!existsSync(join(repo, c))) errors.push(`checks: ${c} does not exist`);
|
|
52
|
+
for (const p of pinProblems(config)) errors.push(p.installed ? `packages: ${p.package} is pinned to ${p.pinned} but ${p.installed} is installed` : `packages: ${p.package} is not an installed package`);
|
|
53
|
+
const plan = teamPlan(dir);
|
|
54
|
+
for (const [fn, role] of Object.entries(config.owners ?? {})) {
|
|
55
|
+
if (plan && !(plan.roles ?? []).some((r) => r.id === role)) errors.push(`owners: ${fn} names ${role}, which is not a role in the team plan`);
|
|
56
|
+
if (!plan) warnings.push(`owners: ${fn} names ${role}, and there is no team plan to check it against`);
|
|
57
|
+
}
|
|
58
|
+
for (const fw of Object.keys(config.questions ?? {})) if (!FRAMEWORKS.includes(fw)) errors.push(`questions: ${fw} asks no System 1 questions (one of ${FRAMEWORKS.join(", ")})`);
|
|
59
|
+
return { errors, warnings };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** What the gate would do with a write to a route, without writing. */
|
|
63
|
+
export function explain(dir, route, { actor = "agent", role, confidence } = {}) {
|
|
64
|
+
const { r, params } = resolve(route);
|
|
65
|
+
if (!r || r.kind !== "record" || !r.actions.includes("write")) throw new Error(`${route} is not a writable record route`);
|
|
66
|
+
const concrete = r.collection === "item" ? r.route.replace("[id]", params.id) : r.route;
|
|
67
|
+
const cls = gateOf(r, dir);
|
|
68
|
+
const files = (r.collection === "item" ? r.files.map((x) => x.replace("*", params.id)) : r.files);
|
|
69
|
+
const exists = files.some((x) => existsSync(join(dir, x)));
|
|
70
|
+
const verdict = evaluate({ config: configFor(dir), dir, route: concrete, table: r.route, record: r.record, actor, role, confidence, exists, decisionOwner: cls?.owner ?? undefined });
|
|
71
|
+
return { route: concrete, record: r.record, actor, role: role ?? null, confidence: confidence ?? null, decision_class: cls ? { class: cls.class, level: cls.level, drafts: cls.drafts && actor !== "person" } : null, gate: verdict };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Pins packages at their installed versions and logs the change. Returns the new pins. */
|
|
75
|
+
export function pin(dir, names) {
|
|
76
|
+
const raw = rawConfig(dir), have = installed();
|
|
77
|
+
const chosen = names?.length ? names : Object.keys(raw.packages ?? {}).length ? Object.keys(raw.packages) : Object.keys(have);
|
|
78
|
+
const unknown = chosen.filter((n) => !have[n]);
|
|
79
|
+
if (unknown.length) throw new Error(`not installed: ${unknown.join(", ")}`);
|
|
80
|
+
raw.packages = { ...(raw.packages ?? {}), ...Object.fromEntries(chosen.map((n) => [n, have[n]])) };
|
|
81
|
+
writeFileSync(join(dir, CONFIG), JSON.stringify(raw, null, 2) + "\n");
|
|
82
|
+
record(dir, { entity: CONFIG, route: "system/naive-config", activity: "write", agent: agentFromEnv("person", "cli"), note: `pinned ${chosen.join(", ")} at the installed versions` });
|
|
83
|
+
return raw.packages;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
87
|
+
const argv = process.argv.slice(2);
|
|
88
|
+
const opt = (n) => { const i = argv.indexOf(`--${n}`); return i >= 0 && argv[i + 1] && !argv[i + 1].startsWith("--") ? argv[i + 1] : undefined; };
|
|
89
|
+
const dir = argv[0] && resolvePath(argv[0]);
|
|
90
|
+
if (!dir || !existsSync(join(dir, "venture.json"))) { console.error("usage: node schema/check-config.mjs <venture dir> [--json | --resolved | --rules | --explain <route> | --pin [<packages>]]"); process.exit(2); }
|
|
91
|
+
const out = (x) => console.log(JSON.stringify(x, null, 2));
|
|
92
|
+
try {
|
|
93
|
+
if (argv.includes("--resolved")) { out(configFor(dir)); process.exit(0); }
|
|
94
|
+
if (argv.includes("--rules")) { out(rulesFor(configFor(dir)).map((r) => ({ id: r.id, source: r.source, routes: r.routes, then: r.then, ...(r.when ? { when: r.when } : {}), actors: r.actors ?? ["agent"] }))); process.exit(0); }
|
|
95
|
+
if (argv.includes("--explain")) {
|
|
96
|
+
const c = opt("confidence");
|
|
97
|
+
out(explain(dir, opt("explain"), { actor: opt("as") === "person" ? "person" : "agent", role: opt("role") ?? process.env.MENTURA_ACTOR_ID, confidence: c === undefined ? undefined : Number(c) }));
|
|
98
|
+
process.exit(0);
|
|
99
|
+
}
|
|
100
|
+
if (argv.includes("--pin")) { out({ pinned: pin(dir, opt("pin")?.split(",").filter(Boolean)) }); process.exit(0); }
|
|
101
|
+
} catch (e) { console.error(String(e.message ?? e)); process.exit(1); }
|
|
102
|
+
const r = check(dir);
|
|
103
|
+
if (argv.includes("--json")) out(r);
|
|
104
|
+
else {
|
|
105
|
+
for (const w of r.warnings) console.log(`warn ${w}`);
|
|
106
|
+
for (const e of r.errors) console.log(`FAIL ${e}`);
|
|
107
|
+
if (!r.errors.length) console.log(r.note ?? `${CONFIG} is valid`);
|
|
108
|
+
}
|
|
109
|
+
process.exit(r.errors.length ? 1 : 0);
|
|
110
|
+
}
|
|
@@ -38,7 +38,9 @@ const counts = Object.fromEntries(STATES.map((s) => [s, count(s)]));
|
|
|
38
38
|
|
|
39
39
|
function page() {
|
|
40
40
|
const chapters = [...new Set(data.rows.map((r) => r.chapter))];
|
|
41
|
-
|
|
41
|
+
// MDX reads { and < as code outside backticks, so they are escaped there.
|
|
42
|
+
const mdx = (t) => t.split(/(`[^`]*`)/).map((x, i) => i % 2 ? x : x.replace(/[{}]/g, (c) => `\\${c}`).replace(/</g, "<").replace(/>/g, ">")).join("");
|
|
43
|
+
const cell = (s) => mdx(String(s ?? "")).replace(/\|/g, "\\|");
|
|
42
44
|
const lines = [
|
|
43
45
|
"---",
|
|
44
46
|
"title: What's built",
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Checks venture types and people (EE-082) in a workspace: a venture's type is in schema/venture-types.json;
|
|
3
|
+
// in people/people.json every role is in the role registry and allowed for the venture's type, every hat
|
|
4
|
+
// is a function the venture imports, a solo venture has one person who wears every hat, and every
|
|
5
|
+
// founder has a file in people/founders/ that agrees with the roster (and the roster lists every file).
|
|
6
|
+
//
|
|
7
|
+
// node schema/check-people.mjs <workspace>
|
|
8
|
+
|
|
9
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { roles as ROLES, types as TYPES } from "./venture-type.mjs";
|
|
12
|
+
|
|
13
|
+
const ws = process.argv[2];
|
|
14
|
+
if (!ws || !existsSync(ws)) { console.error("usage: node schema/check-people.mjs <workspace>"); process.exit(2); }
|
|
15
|
+
const load = (p) => JSON.parse(readFileSync(p, "utf8"));
|
|
16
|
+
const walk = (d) => readdirSync(d, { withFileTypes: true }).flatMap((e) => e.name === "node_modules" || e.name.startsWith(".") ? []
|
|
17
|
+
: e.isDirectory() ? walk(join(d, e.name)) : e.name === "venture.json" ? [d] : []);
|
|
18
|
+
|
|
19
|
+
const types = new Map(TYPES().map((t) => [t.id, t]));
|
|
20
|
+
const roles = new Map(ROLES().map((r) => [r.id, r]));
|
|
21
|
+
const errors = [];
|
|
22
|
+
let ventures = 0, rosters = 0;
|
|
23
|
+
for (const dir of walk(ws)) {
|
|
24
|
+
ventures++;
|
|
25
|
+
const v = load(join(dir, "venture.json"));
|
|
26
|
+
const at = (m) => errors.push(`${v.id}: ${m}`);
|
|
27
|
+
const type = v.type ? types.get(v.type) : null;
|
|
28
|
+
if (v.type && !type) at(`type ${v.type} is not in schema/venture-types.json`);
|
|
29
|
+
const rosterFile = join(dir, "people/people.json");
|
|
30
|
+
const fdir = join(dir, "people/founders");
|
|
31
|
+
const files = existsSync(fdir) ? readdirSync(fdir).filter((f) => f.endsWith(".json")) : [];
|
|
32
|
+
if (!existsSync(rosterFile)) { if (files.length) at("people/founders/ has files but there is no people/people.json"); continue; }
|
|
33
|
+
rosters++;
|
|
34
|
+
const roster = load(rosterFile);
|
|
35
|
+
const imported = new Set(v.departments ?? []);
|
|
36
|
+
for (const p of roster.people) {
|
|
37
|
+
const role = roles.get(p.role);
|
|
38
|
+
if (!role) { at(`${p.id} has role ${p.role}, which is not in governance/venture-template/roles/venture-roles.json`); continue; }
|
|
39
|
+
if (type && !type.roles.includes(p.role)) at(`${p.id} is a ${p.role}, which a ${type.label.toLowerCase()} does not have (${type.roles.join(", ")})`);
|
|
40
|
+
for (const h of p.hats) if (imported.size && !imported.has(h)) at(`${p.id} wears the ${h} hat, but venture.json does not import ${h}`);
|
|
41
|
+
if (!role.owns_when_solo && p.hats.length) at(`${p.id} is a ${p.role}, who owns no function, but wears ${p.hats.join(", ")}`);
|
|
42
|
+
if (role.founder) {
|
|
43
|
+
const f = `people/founders/${p.id}.json`;
|
|
44
|
+
if (p.founder_file !== f) at(`${p.id} is a founder, so founder_file is ${f}`);
|
|
45
|
+
else if (!existsSync(join(dir, f))) at(`${f} is missing`);
|
|
46
|
+
else {
|
|
47
|
+
const rec = load(join(dir, f));
|
|
48
|
+
if (rec.id !== p.id || rec.role !== p.role) at(`${f} says ${rec.id} is a ${rec.role}; the roster says ${p.id} is a ${p.role}`);
|
|
49
|
+
if (JSON.stringify([...rec.hats].sort()) !== JSON.stringify([...p.hats].sort())) at(`${f} and the roster disagree on ${p.id}'s hats`);
|
|
50
|
+
if (rec.agreement && !existsSync(join(dir, rec.agreement.path))) at(`${f} links a founder agreement at ${rec.agreement.path}, which does not exist`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (roster.mode === "solo") {
|
|
55
|
+
if (roster.people.length !== 1) at(`a solo venture has one person; people/people.json lists ${roster.people.length}`);
|
|
56
|
+
else if (roles.get(roster.people[0].role)?.owns_when_solo && imported.size) {
|
|
57
|
+
const missing = [...imported].filter((h) => !roster.people[0].hats.includes(h));
|
|
58
|
+
if (missing.length) at(`${roster.people[0].id} is alone, so owns every function; missing ${missing.join(", ")}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (roster.mode === "team" && imported.size) {
|
|
62
|
+
const worn = new Set(roster.people.flatMap((p) => p.hats));
|
|
63
|
+
const unowned = [...imported].filter((h) => !worn.has(h));
|
|
64
|
+
if (unowned.length) at(`no one owns ${unowned.join(", ")}`);
|
|
65
|
+
}
|
|
66
|
+
for (const f of files) if (!roster.people.some((p) => p.founder_file === `people/founders/${f}`)) at(`people/founders/${f} is not in people/people.json`);
|
|
67
|
+
}
|
|
68
|
+
for (const e of errors) console.log(`FAIL ${e}`);
|
|
69
|
+
console.log(`${ventures} ventures, ${rosters} people rosters: ${errors.length ? `${errors.length} error(s)` : "every role, hat and founder file agrees"}.`);
|
|
70
|
+
process.exit(errors.length ? 1 : 0);
|
package/schema/check-sources.mjs
CHANGED
|
@@ -21,6 +21,8 @@ const model = JSON.parse(readFileSync(join(root, "schema/data-model.json"), "utf
|
|
|
21
21
|
const ventureTypes = new Set(model.records.filter((r) => r.level === "venture").map((r) => r.id));
|
|
22
22
|
const PINNED = new Set(["venture", "provenance", "knowledge-sources"]);
|
|
23
23
|
const reg = registry();
|
|
24
|
+
// The systems a function's truth can live in (EE-083); a connected one must have code that reads it.
|
|
25
|
+
const catalog = JSON.parse(readFileSync(join(root, "schema/systems-catalog.json"), "utf8"));
|
|
24
26
|
const errors = [];
|
|
25
27
|
let maps = 0;
|
|
26
28
|
|
|
@@ -57,10 +59,16 @@ for (const v of walk(dir)) {
|
|
|
57
59
|
if (!ids.has(rule.system_of_record)) errors.push(`${where}: system of record ${rule.system_of_record} is not one of its sources`);
|
|
58
60
|
for (const s of rule.survivorship?.also_in ?? []) if (!ids.has(s) || s === rule.system_of_record) errors.push(`${where}: survivorship names ${s}, which is not another of its sources`);
|
|
59
61
|
});
|
|
62
|
+
for (const [fn, f] of Object.entries(m.functions ?? {})) for (const s of f.systems) {
|
|
63
|
+
const sys = catalog.systems[s.system];
|
|
64
|
+
if (!sys) { errors.push(`${id}: ${fn} keeps its truth in ${s.system}, which is not in schema/systems-catalog.json`); continue; }
|
|
65
|
+
if (s.status === "connected" && !sys.connect) errors.push(`${id}: ${fn} says ${s.system} is connected, but no code reads ${sys.label} yet; it is pointed`);
|
|
66
|
+
if (s.source && !ids.has(s.source)) errors.push(`${id}: ${fn} names source ${s.source}, which is not in sources`);
|
|
67
|
+
}
|
|
60
68
|
const overlap = (a, b) => a.record === b.record && ["attribute", ...CONTEXT].every((k) => a[k] === ANY || b[k] === ANY || a[k] === b[k]);
|
|
61
69
|
for (let i = 0; i < rules.length; i++) for (let j = i + 1; j < rules.length; j++)
|
|
62
70
|
if (overlap(rules[i], rules[j]) && specificity(rules[i]) === specificity(rules[j]) && rules[i].attribute === rules[j].attribute)
|
|
63
71
|
errors.push(`${id}: rules ${i + 1} and ${j + 1} (${rules[i].record}) can both hold and tie at the same specificity; narrow one`);
|
|
64
72
|
}
|
|
65
73
|
if (errors.length) { console.error(errors.join("\n")); process.exit(1); }
|
|
66
|
-
console.log(`${maps} source maps: every source has a connector, every record type a source, and no two matrix rules tie.`);
|
|
74
|
+
console.log(`${maps} source maps: every source has a connector, every record type a source, every function's systems are known, and no two matrix rules tie.`);
|
package/schema/data-model.json
CHANGED
|
@@ -48,7 +48,13 @@
|
|
|
48
48
|
"exit",
|
|
49
49
|
"telos",
|
|
50
50
|
"provenance",
|
|
51
|
-
"knowledge-sources"
|
|
51
|
+
"knowledge-sources",
|
|
52
|
+
"people",
|
|
53
|
+
"founder",
|
|
54
|
+
"fund-thesis",
|
|
55
|
+
"fund-terms",
|
|
56
|
+
"deal",
|
|
57
|
+
"money-summary"
|
|
52
58
|
],
|
|
53
59
|
"refs": [
|
|
54
60
|
{
|
|
@@ -495,6 +501,43 @@
|
|
|
495
501
|
],
|
|
496
502
|
"note": "For each fact kept once in its system of record, every place that repeats it; live children must show the parent's value (EE-042)"
|
|
497
503
|
},
|
|
504
|
+
{
|
|
505
|
+
"id": "freshness-profiles",
|
|
506
|
+
"layer": "knowledge",
|
|
507
|
+
"level": "method",
|
|
508
|
+
"schema": "schema/freshness-profiles.schema.json",
|
|
509
|
+
"form": "json",
|
|
510
|
+
"paths": [
|
|
511
|
+
"knowledge/freshness.json"
|
|
512
|
+
],
|
|
513
|
+
"refs": [
|
|
514
|
+
{
|
|
515
|
+
"field": "records",
|
|
516
|
+
"to": "(record types)",
|
|
517
|
+
"checked_by": "schema/freshness-test.mjs"
|
|
518
|
+
}
|
|
519
|
+
],
|
|
520
|
+
"note": "Default freshness profiles by record type (Revalidating V-2): stale, revalidate and expire after Next.js cacheLife, plus per_phase and live; a venture overrides them under freshness in naive.config.json"
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
"id": "freshness-log",
|
|
524
|
+
"layer": "knowledge",
|
|
525
|
+
"level": "venture",
|
|
526
|
+
"schema": "schema/freshness-log.schema.json",
|
|
527
|
+
"form": "json-lines",
|
|
528
|
+
"paths": [
|
|
529
|
+
"instance/**/knowledge/freshness.jsonl",
|
|
530
|
+
"schema/examples/**/knowledge/freshness.jsonl"
|
|
531
|
+
],
|
|
532
|
+
"refs": [
|
|
533
|
+
{
|
|
534
|
+
"field": "target.value",
|
|
535
|
+
"to": "(venture file)",
|
|
536
|
+
"checked_by": "schema/freshness.mjs"
|
|
537
|
+
}
|
|
538
|
+
],
|
|
539
|
+
"note": "On-demand revalidations (a tag, a path or a package marked stale), checks that a record is still right, and phase changes: one append-only line each (Revalidating V-1, V-5, V-7)"
|
|
540
|
+
},
|
|
498
541
|
{
|
|
499
542
|
"id": "department-catalog",
|
|
500
543
|
"layer": "operations",
|
|
@@ -979,6 +1022,24 @@
|
|
|
979
1022
|
],
|
|
980
1023
|
"note": "Venture packages (EE-067, EE-069): the assumed governance model; core packages by department (each record's one home, what it reads, priors per phase with conditions, what completion unlocks); handoff packages by receiver; record-level dependencies; the question matrix"
|
|
981
1024
|
},
|
|
1025
|
+
{
|
|
1026
|
+
"id": "frame",
|
|
1027
|
+
"layer": "system",
|
|
1028
|
+
"level": "method",
|
|
1029
|
+
"schema": "schema/frame.schema.json",
|
|
1030
|
+
"form": "json",
|
|
1031
|
+
"paths": [
|
|
1032
|
+
"packages/*/frames/*.frame.json"
|
|
1033
|
+
],
|
|
1034
|
+
"refs": [
|
|
1035
|
+
{
|
|
1036
|
+
"field": "emits.*.id",
|
|
1037
|
+
"to": "decision",
|
|
1038
|
+
"checked_by": "schema/frames-test.mjs"
|
|
1039
|
+
}
|
|
1040
|
+
],
|
|
1041
|
+
"note": "The decision library: one recurring venture problem as a shape (goal, hidden decisions, premises and the attacks on them, a freshness spec, reasoning), never an answer. schema/frames.mjs matches it to the founder's words, judges its premises against the venture and proposes its decisions, open"
|
|
1042
|
+
},
|
|
982
1043
|
{
|
|
983
1044
|
"id": "venture-package",
|
|
984
1045
|
"layer": "system",
|
|
@@ -992,6 +1053,18 @@
|
|
|
992
1053
|
],
|
|
993
1054
|
"note": "The venture package view (EE-067, EE-069): the open core packages and handoffs, each record confirmed, to review or to write, what moves now and what waits, with its versions; the records themselves stay in place"
|
|
994
1055
|
},
|
|
1056
|
+
{
|
|
1057
|
+
"id": "release",
|
|
1058
|
+
"layer": "system",
|
|
1059
|
+
"level": "venture",
|
|
1060
|
+
"schema": null,
|
|
1061
|
+
"form": "json",
|
|
1062
|
+
"paths": [
|
|
1063
|
+
"instance/**/.release/release.json",
|
|
1064
|
+
"instance/**/.release/card.json"
|
|
1065
|
+
],
|
|
1066
|
+
"note": "A release (C-11, I-17): the venture's static shell, written by node schema/build-release.mjs. release.json is the manifest (confirmed records frozen in with their sha256, date and who confirmed them; named live holes; the route table as the release holds it; frozen command answers); card.json is the release card's data (P-25, O-7). The frozen copies under .release/records/ keep their own record types. Read without the router by node schema/start-release.mjs"
|
|
1067
|
+
},
|
|
995
1068
|
{
|
|
996
1069
|
"id": "team-plan",
|
|
997
1070
|
"layer": "operations",
|
|
@@ -1063,6 +1136,35 @@
|
|
|
1063
1136
|
],
|
|
1064
1137
|
"note": "Who or what wrote each record, how, from what and under which decision: one append-only line per write, hash-chained, after W3C PROV (EE-031)"
|
|
1065
1138
|
},
|
|
1139
|
+
{
|
|
1140
|
+
"id": "naive-config",
|
|
1141
|
+
"layer": "system",
|
|
1142
|
+
"level": "venture",
|
|
1143
|
+
"schema": "schema/naive-config.schema.json",
|
|
1144
|
+
"paths": [
|
|
1145
|
+
"instance/**/naive.config.json",
|
|
1146
|
+
"schema/examples/**/naive.config.json"
|
|
1147
|
+
],
|
|
1148
|
+
"decision_class": "security-loosening",
|
|
1149
|
+
"refs": [
|
|
1150
|
+
{
|
|
1151
|
+
"field": "gate.rules.routes",
|
|
1152
|
+
"to": "(routes)",
|
|
1153
|
+
"checked_by": "schema/check-config.mjs"
|
|
1154
|
+
},
|
|
1155
|
+
{
|
|
1156
|
+
"field": "owners",
|
|
1157
|
+
"to": "team-plan",
|
|
1158
|
+
"checked_by": "schema/check-config.mjs"
|
|
1159
|
+
},
|
|
1160
|
+
{
|
|
1161
|
+
"field": "packages",
|
|
1162
|
+
"to": "venture-packages",
|
|
1163
|
+
"checked_by": "schema/check-config.mjs"
|
|
1164
|
+
}
|
|
1165
|
+
],
|
|
1166
|
+
"note": "The venture's overrides to Naive's defaults (P-2, like next.config.js): the gate's static rules, function owners, check settings, thresholds, which System 1 questions run, pinned package versions and how strictly the acting role is checked. An agent's write of it is a draft, since it can loosen the gate"
|
|
1167
|
+
},
|
|
1066
1168
|
{
|
|
1067
1169
|
"id": "route-aliases",
|
|
1068
1170
|
"layer": "interface",
|
|
@@ -1073,6 +1175,51 @@
|
|
|
1073
1175
|
],
|
|
1074
1176
|
"note": "Old routes kept as aliases of their new ones, so a rename does not break agents (EE-032)"
|
|
1075
1177
|
},
|
|
1178
|
+
{
|
|
1179
|
+
"id": "adapter",
|
|
1180
|
+
"layer": "interface",
|
|
1181
|
+
"level": "method",
|
|
1182
|
+
"schema": "schema/adapter.schema.json",
|
|
1183
|
+
"paths": [
|
|
1184
|
+
"interface/adapters/*.json",
|
|
1185
|
+
"platform/adapter.json"
|
|
1186
|
+
],
|
|
1187
|
+
"note": "What runs Naive on a platform or in an agent harness (Z-4): the entry files a harness adapter writes into a venture and where it loads skills, or the tests a platform adapter runs. Verified when it passes the framework's tests (interface/adapters.mjs verify)"
|
|
1188
|
+
},
|
|
1189
|
+
{
|
|
1190
|
+
"id": "upgrade-registry",
|
|
1191
|
+
"layer": "system",
|
|
1192
|
+
"level": "method",
|
|
1193
|
+
"schema": "schema/upgrade-registry.schema.json",
|
|
1194
|
+
"paths": [
|
|
1195
|
+
"schema/upgrades.json"
|
|
1196
|
+
],
|
|
1197
|
+
"refs": [
|
|
1198
|
+
{
|
|
1199
|
+
"field": "versions[].guide",
|
|
1200
|
+
"to": "(repository file)",
|
|
1201
|
+
"checked_by": "schema/upgrades-test.mjs"
|
|
1202
|
+
}
|
|
1203
|
+
],
|
|
1204
|
+
"note": "Naive's versions with their guides, the migrations between them, and each package's version and channel (U-1 to U-6, EE-076). naive upgrade reads it from the installed copy"
|
|
1205
|
+
},
|
|
1206
|
+
{
|
|
1207
|
+
"id": "kit",
|
|
1208
|
+
"layer": "system",
|
|
1209
|
+
"level": "method",
|
|
1210
|
+
"schema": "schema/kit.schema.json",
|
|
1211
|
+
"paths": [
|
|
1212
|
+
"platform/kits/*/kit.json"
|
|
1213
|
+
],
|
|
1214
|
+
"refs": [
|
|
1215
|
+
{
|
|
1216
|
+
"field": "extends.package",
|
|
1217
|
+
"to": "venture-packages",
|
|
1218
|
+
"checked_by": null
|
|
1219
|
+
}
|
|
1220
|
+
],
|
|
1221
|
+
"note": "A Mentura kit (EE-071): an enhanced package or command, with its automations (triggers that need a complete package, M-12) or its agent workflow (the agent-run upgrade, U-3). The framework reads it as data and never imports its code (schema/kits.mjs)"
|
|
1222
|
+
},
|
|
1076
1223
|
{
|
|
1077
1224
|
"id": "icp",
|
|
1078
1225
|
"layer": "purpose",
|
|
@@ -1158,6 +1305,17 @@
|
|
|
1158
1305
|
],
|
|
1159
1306
|
"note": "A money master record. Activity is an append-only stream. The package is never complete (EE-070)."
|
|
1160
1307
|
},
|
|
1308
|
+
{
|
|
1309
|
+
"id": "money-summary",
|
|
1310
|
+
"layer": "purpose",
|
|
1311
|
+
"level": "venture",
|
|
1312
|
+
"schema": "schema/money-summary.schema.json",
|
|
1313
|
+
"paths": [
|
|
1314
|
+
"instance/**/money/_summary.json",
|
|
1315
|
+
"schema/examples/**/money/_summary.json"
|
|
1316
|
+
],
|
|
1317
|
+
"note": "Cash, monthly flows and runway from the money source's last sync; versioned, and the only money record a model sees (EE-070)"
|
|
1318
|
+
},
|
|
1161
1319
|
{
|
|
1162
1320
|
"id": "data-stream",
|
|
1163
1321
|
"layer": "purpose",
|
|
@@ -1195,17 +1353,177 @@
|
|
|
1195
1353
|
"schema/examples/**/raw/sources/*/text.md"
|
|
1196
1354
|
],
|
|
1197
1355
|
"note": "The text of a raw source. original.* stays out of git (EE-070)."
|
|
1198
|
-
}
|
|
1199
|
-
],
|
|
1200
|
-
"ignore": [
|
|
1356
|
+
},
|
|
1201
1357
|
{
|
|
1202
|
-
"
|
|
1203
|
-
"
|
|
1358
|
+
"id": "judgment",
|
|
1359
|
+
"layer": "knowledge",
|
|
1360
|
+
"level": "venture",
|
|
1361
|
+
"schema": "schema/judgment.schema.json",
|
|
1362
|
+
"paths": [
|
|
1363
|
+
"instance/**/knowledge/judgments/*.json",
|
|
1364
|
+
"schema/examples/**/knowledge/judgments/*.json"
|
|
1365
|
+
],
|
|
1366
|
+
"refs": [
|
|
1367
|
+
{
|
|
1368
|
+
"field": "package",
|
|
1369
|
+
"to": "(packages and kits)",
|
|
1370
|
+
"checked_by": "schema/model-steps.mjs"
|
|
1371
|
+
},
|
|
1372
|
+
{
|
|
1373
|
+
"field": "decision",
|
|
1374
|
+
"to": "decision-record",
|
|
1375
|
+
"checked_by": "schema/model-steps.mjs"
|
|
1376
|
+
}
|
|
1377
|
+
],
|
|
1378
|
+
"note": "The typed output of one model step (use model, EE-073): what it read, its answer and confidence, and whether code accepted, overruled or routed it to a person as uncertain. The agent's until a person confirms it (schema/model-steps.mjs)"
|
|
1204
1379
|
},
|
|
1205
1380
|
{
|
|
1206
|
-
"
|
|
1207
|
-
"
|
|
1381
|
+
"id": "venture-types",
|
|
1382
|
+
"layer": "system",
|
|
1383
|
+
"level": "method",
|
|
1384
|
+
"schema": "schema/venture-types.schema.json",
|
|
1385
|
+
"paths": [
|
|
1386
|
+
"schema/venture-types.json"
|
|
1387
|
+
],
|
|
1388
|
+
"note": "The venture types create-venture scaffolds, and what each starts with (EE-082)"
|
|
1389
|
+
},
|
|
1390
|
+
{
|
|
1391
|
+
"id": "venture-role",
|
|
1392
|
+
"layer": "governance",
|
|
1393
|
+
"level": "method",
|
|
1394
|
+
"schema": "schema/venture-role.schema.json",
|
|
1395
|
+
"paths": [
|
|
1396
|
+
"governance/venture-template/roles/venture-roles.json"
|
|
1397
|
+
],
|
|
1398
|
+
"note": "Roles a person can hold in a venture, beside the agent roles (EE-082)"
|
|
1399
|
+
},
|
|
1400
|
+
{
|
|
1401
|
+
"id": "people",
|
|
1402
|
+
"layer": "operations",
|
|
1403
|
+
"level": "venture",
|
|
1404
|
+
"schema": "schema/people.schema.json",
|
|
1405
|
+
"paths": [
|
|
1406
|
+
"instance/**/people/people.json",
|
|
1407
|
+
"schema/examples/**/people/people.json"
|
|
1408
|
+
],
|
|
1409
|
+
"note": "The venture's people: role and hats per person; venture.json for human capital (EE-082)"
|
|
1208
1410
|
},
|
|
1411
|
+
{
|
|
1412
|
+
"id": "founder",
|
|
1413
|
+
"layer": "operations",
|
|
1414
|
+
"level": "venture",
|
|
1415
|
+
"schema": "schema/founder.schema.json",
|
|
1416
|
+
"paths": [
|
|
1417
|
+
"instance/**/people/founders/*.json",
|
|
1418
|
+
"schema/examples/**/people/founders/*.json"
|
|
1419
|
+
],
|
|
1420
|
+
"note": "One file per founder, linked to the founder agreement (EE-082)"
|
|
1421
|
+
},
|
|
1422
|
+
{
|
|
1423
|
+
"id": "fund-thesis",
|
|
1424
|
+
"layer": "purpose",
|
|
1425
|
+
"level": "venture",
|
|
1426
|
+
"schema": "schema/fund-thesis.schema.json",
|
|
1427
|
+
"paths": [
|
|
1428
|
+
"instance/**/fund/thesis.json",
|
|
1429
|
+
"schema/examples/**/fund/thesis.json"
|
|
1430
|
+
],
|
|
1431
|
+
"note": "A fund's thesis (EE-082)"
|
|
1432
|
+
},
|
|
1433
|
+
{
|
|
1434
|
+
"id": "fund-terms",
|
|
1435
|
+
"layer": "purpose",
|
|
1436
|
+
"level": "venture",
|
|
1437
|
+
"schema": "schema/fund-terms.schema.json",
|
|
1438
|
+
"paths": [
|
|
1439
|
+
"instance/**/fund/terms.json",
|
|
1440
|
+
"schema/examples/**/fund/terms.json"
|
|
1441
|
+
],
|
|
1442
|
+
"note": "A fund's terms and closes (EE-082)"
|
|
1443
|
+
},
|
|
1444
|
+
{
|
|
1445
|
+
"id": "deal",
|
|
1446
|
+
"layer": "purpose",
|
|
1447
|
+
"level": "venture",
|
|
1448
|
+
"schema": "schema/deal.schema.json",
|
|
1449
|
+
"paths": [
|
|
1450
|
+
"instance/**/deals/*.json",
|
|
1451
|
+
"schema/examples/**/deals/*.json"
|
|
1452
|
+
],
|
|
1453
|
+
"note": "A company in a fund's pipeline (EE-082)"
|
|
1454
|
+
},
|
|
1455
|
+
{
|
|
1456
|
+
"id": "systems-catalog",
|
|
1457
|
+
"layer": "knowledge",
|
|
1458
|
+
"level": "method",
|
|
1459
|
+
"schema": "schema/systems-catalog.schema.json",
|
|
1460
|
+
"paths": [
|
|
1461
|
+
"schema/systems-catalog.json"
|
|
1462
|
+
],
|
|
1463
|
+
"note": "The systems of record create-venture offers per function (EE-083)"
|
|
1464
|
+
},
|
|
1465
|
+
{
|
|
1466
|
+
"id": "glossary",
|
|
1467
|
+
"layer": "knowledge",
|
|
1468
|
+
"level": "venture",
|
|
1469
|
+
"schema": "schema/glossary.schema.json",
|
|
1470
|
+
"paths": [
|
|
1471
|
+
"instance/**/glossary/*.json",
|
|
1472
|
+
"schema/examples/**/glossary/*.json"
|
|
1473
|
+
],
|
|
1474
|
+
"refs": [
|
|
1475
|
+
{
|
|
1476
|
+
"field": "terms[].export",
|
|
1477
|
+
"to": "glossary",
|
|
1478
|
+
"checked_by": "schema/check-brand.mjs"
|
|
1479
|
+
}
|
|
1480
|
+
],
|
|
1481
|
+
"note": "A package's own terms, at glossary/<package>.json (Y-2): local to the package unless exported, so an agent in another package sees only exported terms; glossary/terms shows what one package sees"
|
|
1482
|
+
},
|
|
1483
|
+
{
|
|
1484
|
+
"id": "marketing-brand",
|
|
1485
|
+
"layer": "operations",
|
|
1486
|
+
"level": "venture",
|
|
1487
|
+
"schema": "schema/marketing-brand.schema.json",
|
|
1488
|
+
"paths": [
|
|
1489
|
+
"instance/**/marketing/brand.json",
|
|
1490
|
+
"schema/examples/**/marketing/brand.json"
|
|
1491
|
+
],
|
|
1492
|
+
"refs": [
|
|
1493
|
+
{
|
|
1494
|
+
"field": "marks[].asset",
|
|
1495
|
+
"to": "public-assets",
|
|
1496
|
+
"checked_by": "schema/check-brand.mjs"
|
|
1497
|
+
},
|
|
1498
|
+
{
|
|
1499
|
+
"field": "typefaces[].files",
|
|
1500
|
+
"to": "public-assets",
|
|
1501
|
+
"checked_by": "schema/check-brand.mjs"
|
|
1502
|
+
}
|
|
1503
|
+
],
|
|
1504
|
+
"decision_class": "experience-design",
|
|
1505
|
+
"note": "Brand tokens in the marketing package (Y-3): colors, licensed self-hosted typefaces (T-1), the font each role uses with scopes where nearer context wins (Y-5, T-2), voice rules (the global stylesheet for words), the logo and marks (P-24) and outside design systems by reference (Y-4). Read by every agent's layout; marketing/brand/tokens renders it for interfaces"
|
|
1506
|
+
},
|
|
1507
|
+
{
|
|
1508
|
+
"id": "public-assets",
|
|
1509
|
+
"layer": "operations",
|
|
1510
|
+
"level": "venture",
|
|
1511
|
+
"schema": "schema/public-assets.schema.json",
|
|
1512
|
+
"paths": [
|
|
1513
|
+
"instance/**/public/assets.json",
|
|
1514
|
+
"schema/examples/**/public/assets.json"
|
|
1515
|
+
],
|
|
1516
|
+
"refs": [
|
|
1517
|
+
{
|
|
1518
|
+
"field": "remote[].id",
|
|
1519
|
+
"to": "raw-source",
|
|
1520
|
+
"checked_by": "schema/check-assets.mjs"
|
|
1521
|
+
}
|
|
1522
|
+
],
|
|
1523
|
+
"note": "The register of what the venture ships as it is, in public/ (I-23, J-2, J-3, J-4): each file's source, license and credit, facts code reads from its bytes, alt text and who wrote it; remote images as links with a note in raw/; the hosts an agent may fetch from"
|
|
1524
|
+
}
|
|
1525
|
+
],
|
|
1526
|
+
"ignore": [
|
|
1209
1527
|
{
|
|
1210
1528
|
"path": "site/package.json",
|
|
1211
1529
|
"reason": "The developer-docs site's npm manifest (EE-034); not a record"
|
|
@@ -1253,6 +1571,14 @@
|
|
|
1253
1571
|
{
|
|
1254
1572
|
"path": "site/content/marketing/meta.json",
|
|
1255
1573
|
"reason": "Fumadocs sidebar order for marketing pages (EE-080); not a record"
|
|
1574
|
+
},
|
|
1575
|
+
{
|
|
1576
|
+
"path": "package.json",
|
|
1577
|
+
"reason": "The framework's npm manifest: the naive and mentura commands (I-1, I-17); not a record"
|
|
1578
|
+
},
|
|
1579
|
+
{
|
|
1580
|
+
"path": "interface/create-venture/package.json",
|
|
1581
|
+
"reason": "The create-venture generator's npm manifest (I-1); not a record"
|
|
1256
1582
|
}
|
|
1257
1583
|
]
|
|
1258
1584
|
}
|