Main reverted G's half merge (#189, reverted by8afc3ebin #191) and then took the reader release's S1-S5, which copied G's code. G's form holds where they differ (process_bus.go, seats.go, state.go and their tests); the release's kept names stay so main's callers keep building: SeatViewPrefix beside SeatReadPrefix, and QueueInvoke's empty strings on not-ok (with its test TestQueueInvoke). The tree differs from G's headf30dee54only by those and the release's two tests (objects cap option, seat states and stream kinds). Builds: design 47 G (the milestone's sdk part, as atf30dee54) Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
148 lines
4.1 KiB
JSON
148 lines
4.1 KiB
JSON
{
|
|
"format": 1,
|
|
"seat": "node-backup",
|
|
"scope": "node",
|
|
"grain": "seat-list",
|
|
"domain": "Data",
|
|
"decision": "novox/hq ADR 0214",
|
|
"verbs": [
|
|
{
|
|
"name": "backed-up",
|
|
"description": "What this machine backs up: each module, what it declared, its last good night, how many restore points are kept and the repository's size.",
|
|
"replaces": [
|
|
"restic snapshots"
|
|
],
|
|
"input": {
|
|
"properties": {
|
|
"module": {
|
|
"description": "one module (optional)",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"type": "object"
|
|
}
|
|
},
|
|
{
|
|
"name": "now",
|
|
"description": "Take a backup now, of one module or of every module on this machine — before a migration, a retirement or anything else that could go wrong.",
|
|
"replaces": [
|
|
"restic backup"
|
|
],
|
|
"input": {
|
|
"properties": {
|
|
"module": {
|
|
"description": "one module (optional)",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"class": "act"
|
|
},
|
|
{
|
|
"name": "restore",
|
|
"description": "Restore one module's data from a restore point BESIDE the live data, never over it: each directory as <path>.restored-<date>. Swapping it in is a person's act. Lists the restore points when none is named.",
|
|
"replaces": [
|
|
"restic restore"
|
|
],
|
|
"input": {
|
|
"properties": {
|
|
"module": {
|
|
"description": "the module",
|
|
"type": "string"
|
|
},
|
|
"path": {
|
|
"description": "one of the module's directories (all of them when omitted)",
|
|
"type": "string"
|
|
},
|
|
"snapshot": {
|
|
"description": "the restore point (from `backed-up`; the newest when omitted)",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"module"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"class": "act"
|
|
}
|
|
],
|
|
"events": [
|
|
{
|
|
"name": "item-started",
|
|
"subject": "item-started.<node>.<module>.<item>",
|
|
"keep": {
|
|
"max-age-days": 7,
|
|
"last-per-subject": true
|
|
},
|
|
"body": {
|
|
"type": "object",
|
|
"description": "the holder started backing up one item of a module on its node, said before it reads the recovery module's restore-started and restored (design 47 G 554, 563)",
|
|
"required": [
|
|
"at"
|
|
],
|
|
"properties": {
|
|
"at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "when the item started, RFC 3339"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "item-ended",
|
|
"subject": "item-ended.<node>.<module>.<item>",
|
|
"keep": {
|
|
"max-age-days": 7,
|
|
"last-per-subject": true
|
|
},
|
|
"body": {
|
|
"type": "object",
|
|
"description": "the holder ended one item: done, failed (error stopped for an item it said started and never ended, at its start) or put-off while a restore of the recovery module runs, the item started again when that restore's restored is heard (design 47 G 554, 563)",
|
|
"required": [
|
|
"at",
|
|
"outcome"
|
|
],
|
|
"properties": {
|
|
"at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "when the item ended, RFC 3339"
|
|
},
|
|
"outcome": {
|
|
"type": "string",
|
|
"enum": [
|
|
"done",
|
|
"failed",
|
|
"put-off"
|
|
],
|
|
"description": "how the item ended; a put-off item is that night's backup once it runs, neither failed nor missed"
|
|
},
|
|
"restore": {
|
|
"type": "string",
|
|
"description": "with put-off, the act of the recovery module's restore the item gave way to"
|
|
},
|
|
"error": {
|
|
"type": "string",
|
|
"description": "with failed, why, in words; stopped for an item ended at the holder's start"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"receives": [
|
|
{
|
|
"kind": "backup",
|
|
"comment": "#",
|
|
"dirs": true
|
|
},
|
|
{
|
|
"kind": "data",
|
|
"comment": "#",
|
|
"dirs": true
|
|
}
|
|
]
|
|
}
|