The grants part grants a seat verb only to a module that names it in invokes (GR8), so a call missing from a manifest is refused live. Listed every module's seat-verb calls in code (constant clients, seatlist.HolderOf, operatorask, buildrun's drops and puts) against its invokes: the teller asks who holds operator-channel (operatorask.Bucket) and the checker drops asks of the image build seat. Every asker of a build seat names the queues it asks as seat:<seat>.accept.<queue> (A-231): the runner check and delivery, the assigner check, the builder delivery, the checker check and recheck; the indexer had its entry. The validator judges that form through mesh-sdk's catalogue.QueueInvoke against the kinds the seat accepts. mesh-grants: a consumed seat view whose seat has no holder on record grants nothing instead of refusing the whole module (TestGrants); TestCallersAndWhyRefused and TestSentStoresRead take §610's class defaults. Builds: design 47 G §544, §601, §610, §616, A-231, A-179 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
258 lines
7.4 KiB
JSON
258 lines
7.4 KiB
JSON
{
|
|
"module": "mesh-delivery-assigner",
|
|
"version": "0.3",
|
|
"slug": "assigner",
|
|
"runs-as": "mesh-delivery-assigner",
|
|
"claims": [
|
|
{
|
|
"name": "mesh-module-assigner",
|
|
"scope": "mesh",
|
|
"serves": [
|
|
"assignments",
|
|
"proposals",
|
|
"propose",
|
|
"withdraw",
|
|
"again",
|
|
"placement"
|
|
]
|
|
},
|
|
{
|
|
"name": "mesh-wants",
|
|
"scope": "mesh",
|
|
"serves": [
|
|
"upgrade",
|
|
"bus",
|
|
"revision",
|
|
"entry",
|
|
"difference",
|
|
"input"
|
|
]
|
|
}
|
|
],
|
|
"reads": [
|
|
"mesh-grants.grants",
|
|
"mesh-host.composed",
|
|
"mesh-provisioner.provisions",
|
|
"node-engine.have"
|
|
],
|
|
"uses": [
|
|
"operator-channel"
|
|
],
|
|
"consumes": [
|
|
"mesh-conditions.findings-asked",
|
|
"mesh-conditions.condition-raised",
|
|
"mesh-conditions.condition-changed",
|
|
"mesh-conditions.condition-cleared",
|
|
"mesh-catalog.catalog-revision",
|
|
"mesh-catalog.registration-changed",
|
|
"mesh-delivery.source-moved",
|
|
"mesh-catalog.version-released",
|
|
"mesh-wants.version-delivered",
|
|
"mesh-watchdogs.machine-away",
|
|
"mesh-watchdogs.machine-back",
|
|
"mesh-catalog.seat-definition-changed",
|
|
"mesh-catalog.seat-definition-removed",
|
|
"mesh-delivery-builder.build.ended.**",
|
|
"mesh-delivery-indexer.take-in.taken",
|
|
"mesh-delivery-teller.ask-ended",
|
|
"mesh-delivery-teller.views.answers",
|
|
"mesh-pipeline-runner.pipeline-ended",
|
|
"mesh-pipeline-runner.group-ended",
|
|
"node-build-go.step-ended",
|
|
"node-engine.manifest-reads-changed",
|
|
"node-engine.running",
|
|
"mesh-delivery.pinned",
|
|
"mesh-delivery.freed",
|
|
"mesh-delivery.heads-replaced",
|
|
"mesh-delivery.pins-stated"
|
|
],
|
|
"invokes": [
|
|
"mesh-delivery-indexer.manifests",
|
|
"mesh-delivery-indexer.modules",
|
|
"mesh-delivery-teller.teller_read_answers",
|
|
"seat:mesh-catalog.entry",
|
|
"seat:mesh-catalog.registrations",
|
|
{"verb": "seat:mesh-catalog.revision", "fields": ["none-yet"]},
|
|
"seat:mesh-catalog.seat-definitions",
|
|
"seat:mesh-conditions.conditions",
|
|
"seat:mesh-delivery.source",
|
|
"seat:mesh-hand-acts.hand-act",
|
|
"seat:mesh-hand-acts.hand-acts",
|
|
"seat:mesh-hand-acts.warranted",
|
|
"seat:node-backup.backed-up",
|
|
"seat:node-backup.now",
|
|
"seat:node-build-go.output",
|
|
"seat:node-engine.compose-candidate",
|
|
"seat:node-engine.manifest-reads",
|
|
"seat:operator-channel.asks",
|
|
"seat:node-build-go.accept.check"
|
|
],
|
|
"streams": [
|
|
{
|
|
"name": "mesh-delivery-assigner-findings",
|
|
"events": ["finding-written.*", "finding-cleared.*", "findings-stated.*"],
|
|
"max-age-days": 7,
|
|
"max-mib": 16
|
|
}
|
|
],
|
|
"emits": [
|
|
"assignments-copied",
|
|
"put",
|
|
"views.asks",
|
|
"views.copies",
|
|
"views.differences",
|
|
"views.findings",
|
|
"views.assignments",
|
|
"views.seat-holders",
|
|
"views.wants"
|
|
],
|
|
"tools": [
|
|
"assigner_put",
|
|
"assigner_release",
|
|
"assigner_puts",
|
|
"assigner_waits",
|
|
"assigner_inputs",
|
|
"assignments",
|
|
"seat-holders",
|
|
"wants",
|
|
"assigner_read_assignments",
|
|
"assigner_read_seat_holders",
|
|
"assigner_read_wants",
|
|
"assigner_read_findings",
|
|
"assigner_read_asks",
|
|
"assigner_read_differences",
|
|
"assigner_read_copies",
|
|
"assigner_first_views",
|
|
"assigner_first_view_again",
|
|
"assigner_engine_reads",
|
|
"assigner_seat_list",
|
|
"assigner_seat_list_again",
|
|
"assigner_ask_again",
|
|
"assigner_written",
|
|
"assigner_pins",
|
|
"assigner_unpin",
|
|
"assigner_delivered_again"
|
|
],
|
|
"state": [
|
|
{ "name": "assignments", "history": 64 },
|
|
{ "name": "placement", "history": 64 },
|
|
{ "name": "copies", "history": 1 },
|
|
{ "name": "proposals", "history": 5 },
|
|
{ "name": "candidates", "history": 5 },
|
|
{ "name": "pulses", "key-ttl": true },
|
|
{ "name": "asks", "history": 5 },
|
|
{ "name": "differences", "history": 64 },
|
|
{ "name": "puts", "history": 20 },
|
|
{ "name": "wants", "history": 20 },
|
|
{ "name": "findings", "history": 5 },
|
|
{ "name": "policies", "history": 20 },
|
|
{ "name": "seat-holders", "history": 5 },
|
|
{ "name": "view-marks", "history": 1 },
|
|
{ "name": "first-views", "history": 1 },
|
|
{ "name": "engine-reads", "history": 1 },
|
|
{ "name": "written", "history": 5 },
|
|
{ "name": "waits", "history": 5 },
|
|
{ "name": "put-waits", "history": 1 },
|
|
{ "name": "delivery-waits", "history": 1 },
|
|
{ "name": "delivered-again", "history": 1 },
|
|
{ "name": "inputs", "history": 1, "max-mib": 64 },
|
|
{ "name": "pins", "history": 5, "max-mib": 4 }
|
|
],
|
|
"config": {
|
|
"outside-wait-minutes": {
|
|
"type": "number",
|
|
"description": "minutes a moved module's failing check waits on an outside cause before the operator is asked to go on or count it as failed (design 47 G section 706); a bound a whole test sets in seconds.",
|
|
"minimum": 1,
|
|
"maximum": 10080,
|
|
"trusted": false,
|
|
"default": 30
|
|
},
|
|
"outside-settle-seconds": {
|
|
"type": "number",
|
|
"description": "seconds the assigner holds its judgement of a failing check when no outside cause is open yet, since the node-engine states the failing check and the network in one report while the condition rises only after the watchman's two looks and the keeper's take-in (design 47 G section 706).",
|
|
"minimum": 1,
|
|
"maximum": 3600,
|
|
"trusted": false,
|
|
"default": 90
|
|
}
|
|
},
|
|
"objects": [
|
|
{ "name": "assignment-revisions", "max-mib": 512, "form": 1 }
|
|
],
|
|
"own-secrets": {
|
|
"broker": "${dir:state}/broker"
|
|
},
|
|
"secrets-owner": "mesh-delivery-assigner",
|
|
"resources": [
|
|
{
|
|
"id": "account",
|
|
"type": "user",
|
|
"name": "mesh-delivery-assigner",
|
|
"shell": "/usr/bin/nologin",
|
|
"home": "/var/lib/mesh-delivery-assigner"
|
|
},
|
|
{
|
|
"id": "state",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"owner": "mesh-delivery-assigner",
|
|
"place": ".",
|
|
"unknown": "program"
|
|
},
|
|
{
|
|
"id": "outside-wait",
|
|
"type": "file",
|
|
"path": "${dir:state}/outside-wait-minutes",
|
|
"owner": "mesh-delivery-assigner",
|
|
"mode": "0600",
|
|
"content": "${config:outside-wait-minutes}"
|
|
},
|
|
{
|
|
"id": "outside-settle",
|
|
"type": "file",
|
|
"path": "${dir:state}/outside-settle-seconds",
|
|
"owner": "mesh-delivery-assigner",
|
|
"mode": "0600",
|
|
"content": "${config:outside-settle-seconds}"
|
|
},
|
|
{
|
|
"id": "assigner",
|
|
"type": "process",
|
|
"name": "mesh-delivery-assigner",
|
|
"artifact": "program",
|
|
"run": [
|
|
"./mesh-delivery-assigner"
|
|
],
|
|
"env": {
|
|
"MESH_BROKER_FILE": "${dir:state}/broker",
|
|
"MESH_ASSIGNER_OUTSIDE_WAIT_FILE": "${dir:state}/outside-wait-minutes",
|
|
"MESH_ASSIGNER_OUTSIDE_SETTLE_FILE": "${dir:state}/outside-settle-seconds"
|
|
},
|
|
"user": "mesh-delivery-assigner",
|
|
"health": {
|
|
"kind": "unit"
|
|
}
|
|
}
|
|
],
|
|
"build": {
|
|
"artifacts": [
|
|
{
|
|
"name": "program",
|
|
"kind": "bundle",
|
|
"language": "go",
|
|
"system": "arch",
|
|
"from": "cmd/mesh-delivery-assigner",
|
|
"binary": "mesh-delivery-assigner",
|
|
"loads": [
|
|
"mesh-delivery-assigner"
|
|
],
|
|
"env": {
|
|
"MESH_VIEW_CALLERS_ASSIGNMENTS": "mesh-grants,node-tools,mesh-delivery-indexer,mesh-delivery-builder,mesh-delivery-checker",
|
|
"MESH_VIEW_CALLERS_SEAT_HOLDERS": "node-tools",
|
|
"MESH_VIEW_CALLERS_WANTS": "mesh-grants"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|