It links module-versions to each other and knows nothing about nodes; which machine runs what stays the control plane's (novox/hq ADR 0070, 0072). Keeping them apart is what lets the control plane carry on composing declarations while this is down. The builder announces what it built, this places it in the graph and announces what that means, and the control plane hooks the meaning rather than the build output. A rebuild producing the commit already current is registered and is not an upgrade — announcing it would ripple outward forever through modules that did not change. Ordering is not computed. Modules stale and waiting on nothing that is itself stale are announced as buildable; the rest stay stale and appear once whatever they were waiting for is registered, so a chain and a diamond need no special handling and nothing holds a plan. Four tools over the graph: what this mesh holds, one module in full, what a change to a module reaches, and what must be rebuilt and why. The edges are derived from builds rather than declared, so they cannot drift from what the code actually uses. Claude-Session: https://claude.ai/code/session_01D6qtiYU3P9jk3pnAXyAFyx
16 lines
505 B
JSON
16 lines
505 B
JSON
{
|
|
"name": "@novox/module-mesh-catalog",
|
|
"version": "0.1.0",
|
|
"description": "mesh-catalog — the module graph (novox/hq ADR 0070, 0072): links module-versions to each other, registers what the builder announces, and says what a change reaches and what can be rebuilt now. Knows nothing about nodes.",
|
|
"type": "module",
|
|
"private": true,
|
|
"dependencies": {
|
|
"@novox/mesh-sdk": "^0.1.0",
|
|
"pg": "^8"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^22.0.0",
|
|
"typescript": "^5.6.0"
|
|
}
|
|
}
|