The builder already builds every candidate fingerprint into its own key. The check now watches exactly those keys on the bus and composes once each is done or failed, within the new setting build-wait-bound (1800 s). A failed build fails the check, naming it; a build not ended within the bound is named and the check composes without it. A module built by a build module the change alters (mesh-build-go or mesh-build-node), one standing on a base the change alters, and one the trunk holds no record of are not waited on, and the composition's warnings name each with why. Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
170 lines
4.3 KiB
JSON
170 lines
4.3 KiB
JSON
{
|
|
"module": "mesh-delivery-checker",
|
|
"version": "1",
|
|
"slug": "checker",
|
|
"claims": [
|
|
{
|
|
"name": "mesh-delivery-checker",
|
|
"scope": "mesh",
|
|
"serves": [
|
|
"try",
|
|
"try-read",
|
|
"try-end"
|
|
]
|
|
}
|
|
],
|
|
"consumes": [
|
|
"mesh-build-go.toolchain.reported",
|
|
"mesh-build-node.toolchain.reported"
|
|
],
|
|
"streams": [
|
|
{ "name": "checks", "events": ["preview.**", "owed.**"] }
|
|
],
|
|
"state": [
|
|
{ "name": "asks", "history": 1 },
|
|
{ "name": "hearing", "history": 1 },
|
|
{ "name": "kept", "history": 1 },
|
|
{ "name": "owed", "history": 5 },
|
|
{ "name": "previews", "history": 5 },
|
|
{ "name": "tries", "history": 1 },
|
|
{ "name": "verdicts", "history": 5 }
|
|
],
|
|
"reads": [
|
|
"mesh-build-go.steps",
|
|
"mesh-build-go.toolchains",
|
|
"mesh-build-node.steps",
|
|
"mesh-build-node.toolchains",
|
|
"mesh-delivery-assigner.placement",
|
|
"mesh-delivery-builder.builds",
|
|
"mesh-delivery-gate.source",
|
|
"mesh-delivery-gate.turns",
|
|
"mesh-delivery-indexer.candidates",
|
|
"mesh-delivery-indexer.manifests",
|
|
"mesh-delivery-indexer.modules",
|
|
"mesh-delivery-indexer.packages",
|
|
"mesh-delivery-indexer.predefined",
|
|
"mesh-delivery-watchman.presence",
|
|
"node-engine.have"
|
|
],
|
|
"uses": [
|
|
"node-build-go",
|
|
"node-build-node"
|
|
],
|
|
"tools": [
|
|
"checker_ask_again",
|
|
"checker_kept",
|
|
"checker_previews",
|
|
"checker_pull",
|
|
"checker_status",
|
|
"checker_try",
|
|
"checker_try_end",
|
|
"checker_try_read",
|
|
"checker_verdicts"
|
|
],
|
|
"invokes": [
|
|
"gitea.gitea_commits",
|
|
"gitea.gitea_compare",
|
|
"gitea.gitea_get_file",
|
|
"gitea.gitea_list_branches",
|
|
"seat:node-engine.compose-candidate"
|
|
],
|
|
|
|
"own-secrets": {
|
|
"broker": "${dir:state}/broker"
|
|
},
|
|
"secrets-owner": "mesh-delivery-checker",
|
|
"config": {
|
|
"compose-answer-bound": {
|
|
"type": "number",
|
|
"description": "seconds a check waits for each placed node's engine to answer compose-candidate (novox/hq ADR 0593 §7, §9); a node that has not answered by then is named in the verdict as not composed on that node: no answer, and the check passes with that warning.",
|
|
"minimum": 1,
|
|
"maximum": 600,
|
|
"trusted": false,
|
|
"default": 60
|
|
},
|
|
"build-wait-bound": {
|
|
"type": "number",
|
|
"description": "seconds a check waits for the builder's builds of its candidate to end before it composes with them (novox/hq ADR 0603 §10); a build failed fails the check, naming it, and a build not ended by then is named in the verdict and the check composes without it.",
|
|
"minimum": 60,
|
|
"maximum": 7200,
|
|
"trusted": false,
|
|
"default": 1800
|
|
}
|
|
},
|
|
"resources": [
|
|
{
|
|
"id": "account",
|
|
"type": "user",
|
|
"name": "mesh-delivery-checker",
|
|
"shell": "/usr/bin/nologin",
|
|
"home": "/var/lib/mesh-delivery-checker"
|
|
},
|
|
{
|
|
"id": "state",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"owner": "mesh-delivery-checker",
|
|
"place": ".",
|
|
"unknown": "program"
|
|
},
|
|
{
|
|
"id": "settings",
|
|
"type": "file",
|
|
"path": "${dir:state}/settings.json",
|
|
"mode": "0600",
|
|
"owner": "mesh-delivery-checker",
|
|
"takes-config": [
|
|
"compose-answer-bound",
|
|
"build-wait-bound"
|
|
],
|
|
"merge": "json",
|
|
"template": "files/settings.json"
|
|
},
|
|
{
|
|
"id": "checker",
|
|
"type": "process",
|
|
"name": "mesh-delivery-checker",
|
|
"artifact": "program",
|
|
"run": [
|
|
"./mesh-delivery-checker"
|
|
],
|
|
"env": {
|
|
"MESH_BROKER_FILE": "${dir:state}/broker",
|
|
"MESH_CHECKER_SETTINGS": "${dir:state}/settings.json"
|
|
},
|
|
"user": "mesh-delivery-checker",
|
|
"health": {
|
|
"kind": "unit"
|
|
}
|
|
}
|
|
],
|
|
"build": {
|
|
"artifacts": [
|
|
{
|
|
"name": "program",
|
|
"kind": "bundle",
|
|
"language": "go",
|
|
"system": "arch",
|
|
"from": "cmd/mesh-delivery-checker",
|
|
"binary": "mesh-delivery-checker"
|
|
},
|
|
{
|
|
"name": "tools",
|
|
"kind": "bundle",
|
|
"language": "go",
|
|
"system": "arch",
|
|
"from": "cmd/mesh-delivery-checker-tools",
|
|
"binary": "mesh-delivery-checker-tools",
|
|
"loads": [
|
|
"mesh-delivery-checker-tools"
|
|
]
|
|
},
|
|
{
|
|
"name": "files",
|
|
"kind": "archive",
|
|
"from": "files"
|
|
}
|
|
]
|
|
}
|
|
}
|