Prepare governed S1 offsite upload
All checks were successful
CI Smoke / source-contract (push) Successful in 11s
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a02994-7685-7940-bf34-3555b8256018
This commit is contained in:
codex 2026-08-23 14:11:00 +02:00
parent 2c92b97f37
commit d0a5a27926
11 changed files with 844 additions and 11 deletions

View file

@ -126,7 +126,7 @@ no timer is installed merely by running a verification command.
```task
id: RAIL-HO-WP-0012-T05
status: wait
status: progress
priority: high
```
@ -142,6 +142,25 @@ dry-run proves object naming and collision behavior, a controlled upload is
visible through owner-provided metadata, and local/off-host retention cannot
delete the only recoverable copy.
**Source preparation (2026-08-23):** `spec/s1-offsite.yaml` and
`scripts/s1_offsite.py` define a pending-owner contract that wraps the complete
encrypted bundle and metadata into one deterministic immutable object. The
upload uses `If-None-Match: *`, accepts only a freshly rendered exact envelope
approval, suppresses endpoint/response data, and emits a local metadata-only
receipt. Production pruning now refuses candidates without a receipt bound to
the current manifest. A disposable WebDAV fixture proves successful upload,
collision and redirect refusal, pending-owner refusal, and absence of the
injected token from retained evidence.
Owner review remains mandatory. The exact review digest is rendered by
`make s1-offsite-review`; `spec/s1-offsite-owner-acceptance.yaml` remains
`pending`, so no live upload can execute. Review of the owner implementation
also found a tracked secret-shaped default in its Forgejo backup script. Its
value was not copied or recorded; `railiance-platform` must confirm it is
retired or rotated before accepting this contract. The route's missing
authoritative workload identity keeps this interface attended rather than
scheduled.
## T06 — Perform an attended isolated restore drill
```task
@ -178,13 +197,14 @@ decrypted configuration.
## Source delivery record — 2026-08-23
- `make validate-s1-backup` passes the declaration and 16 fixture recovery
- `make validate-s1-backup` passes the declaration and 21 fixture recovery
tests using disposable age identities and storage.
- The full repository suite passes 46 tests. The timer calendar is accepted by
- The full repository suite passes 51 tests. The timer calendar is accepted by
`systemd-analyze`; deployment YAML and separation from bootstrap are checked
as source contracts.
- Native `ansible-playbook --syntax-check` was unavailable on the development
workstation. The deployment remains unexecuted and gated by
`DEPLOY-RAIL-HO-WP-0012-S1-BACKUP-TIMER` plus a clean committed revision.
- T05 and T06 remain `wait`; no off-host write, retained-artifact deletion,
private-key access, or live-host restore occurred.
- T05 is source-prepared and pending owner acceptance; T06 remains `wait`. No
off-host write, retained-artifact deletion, private-key access, or live-host
restore occurred.