The in-cluster runner posts one State Hub message (custodian-allocation-review
-> the-custodian) per newly retained week, records the message id in
receipts.jsonl, never reposts, and retries an undelivered week. New
weekly_allocation_check.py flags a failed latest receipt or a missing report
for the due ISO week (Monday 12:00 Europe/Berlin); security_flow_daily.py
notifies once per distinct flag set and stays inactive until a receipts
source is configured. Founder decision 2026-10-21 (T05 follow-up answers).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The page and the ADR had already diverged once. They are now one source: the
markdown is authoritative and the page is generated, never hand-edited.
The renderer recognises conventions the document already uses rather than
requiring extra markup, so the source stays a readable document. A table whose
first column is **X0**/**X1** becomes a level ladder; a table headed Threat
becomes the threat matrix; a table with a Kind column gets mechanical and
adversarial chips; a table headed "E \ P" becomes the two-axis grid; ## N.
headings build the section rail.
Stdlib only, per the structure-not-tooling stance. A publishing step that needs
its own toolchain is a publishing step that stops being run - the same
reasoning tenant-engine used for its pin check.
One real consequence beyond deduplication: the E x P matrix had existed only on
the page, so the canonical document did not contain its own central diagram.
It is now a table in the markdown, which is where it should always have been.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Seed a non-secret service inventory (environments, hosts, clusters,
services, endpoints, access paths, evidence, gaps) with a JSON schema,
a renderer, and a generated service-catalog view. Adds the
`make ops-inventory-view` target, probe ActivityDefinition, and docs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
If the repo doesn't exist on the sandbox host, the chmod fails.
Now e2e-cron-install rsyncs the repo first (same mechanism as make e2e),
then installs the cron entry. run-on-host.sh uses git pull for
subsequent updates.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
For environments where ansible-playbook is unavailable (e.g. WSL2 TLS
issue blocks install). Deploys id_custodian_agent.pub via direct SSH
using any existing admin key.
Usage: make custodian-key-deploy ADMIN_KEY=~/.ssh/id_ops
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- make custodian-keygen: generates ~/.ssh/id_custodian_agent, writes
public key to railiance-infra/ansible/inventory/group_vars/all.yaml
- make custodian-key-show: prints the current public key
- e2e targets automatically use id_custodian_agent when present
- e2e-cron-install uses custodian key, no manual key passing needed
Full flow:
make custodian-keygen # one-time
cd ~/railiance-infra && make provision-custodian-agent # deploy key
make e2e-cron-install REPO=activity-core # install cron
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>