railiance-clock/workplans/RCLK-WP-0005-infrastructure-as-code.md
tegwick 1a6784d5ac Inventory railiance01 time sync and pick S1 IaC owner.
RCLK-WP-0005-T01: systemd-timesyncd only, UTC, Ubuntu NTP defaults.
Canonical owner is railiance-infra; railiance-hosts is superseded.

Assistant: grok
Assistant-Session: 01a09dc1-b21e-77e1-919e-fcad2f82b267
2026-09-14 12:03:28 +02:00

157 lines
6.9 KiB
Markdown

---
id: RCLK-WP-0005
type: workplan
title: "Deploy clock infrastructure through owner-managed infrastructure as code"
domain: infotech
repo: railiance-clock
status: active
owner: codex
topic_slug: custodian
created: "2026-09-14"
updated: "2026-09-14"
related_workplans:
- RCLK-WP-0002
- RCLK-WP-0003
- RCLK-WP-0004
state_hub_workstream_id: "5af117db-3721-509a-a3a6-36ae6bab7af3"
---
Operator-requested infrastructure plan. Read docs/infrastructure.md. This plan
tracks the cross-owner delivery outcome; each owning repository holds its actual
IaC and any required child work records. Inventory and ownership work can begin
now. Live service deployment depends on the reviewed protocol and built artifact.
Production applies require concrete owner admission, not just this plan's existence.
## Confirm current host state and canonical IaC ownership
```task
id: RCLK-WP-0005-T01
status: done
priority: high
state_hub_task_id: "883743c4-d368-5f94-878b-0e122eab39ee"
```
Inspect railiance01 time sources/daemon, synchronization health, virtualization,
network egress, permissions and existing IaC without fetching secrets or changing
time. Resolve railiance-infra versus inherited railiance-hosts implementation
ownership with railiance-master; select one canonical baseline and reference it.
Record target inventory, responsibility, current drift and gaps. Create/link owner
work records before handing off any execution; no duplicate configuration trees.
Acceptance: reviewed source-path/owner matrix, live read-only inventory receipt,
explicit adoption of existing settings or a bounded source diff; no second daemon.
**Done 2026-09-14.** Receipt:
`docs/evidence/2026-09-14-host-time-inventory.md`. Live: UTC,
systemd-timesyncd only, synchronized to `ntp.ubuntu.com`, stock config.
Canonical S1 owner is **railiance-infra**; railiance-hosts is superseded.
Adopt the existing daemon; do not add chrony. Residual `RAIL-HO-WP-0013`
declares it in IaC after RCLK-WP-0002.
## Implement declarative host UTC discipline and verification
```task
id: RCLK-WP-0005-T02
status: wait
priority: high
state_hub_task_id: "f3eea5a7-e745-57a2-9d76-b78eeba0bf06"
```
Depends on T01 and RCLK-WP-0002's UTC/leap/quality contract. In the S1 owner,
version the selected existing/supported NTP client, independent upstream selection,
network requirements, boot/restart behavior, holdover limits, drift monitoring and
health export. Prefer existing supported automation over inventing a new daemon.
Do not mix timesyncd/chrony or smeared/unsmeared sources. Restrict listeners; a
server NTP offering is optional and separately justified, not an implicit public
UDP/123 endpoint. Do not modify attached corporate workstation clock policy.
Acceptance: lint/render and convergence check; idempotent second apply; reboot
and upstream-loss/recovery proof in disposable infrastructure; exact target diff,
rollback procedure and owner review before live convergence. Service liveness
alone does not prove bounded UTC accuracy.
## Package private authority service and admitted trust delivery
```task
id: RCLK-WP-0005-T03
status: wait
priority: high
state_hub_task_id: "bc07711b-96d1-5d72-aee1-21d39942564c"
```
Depends on adopted RCLK-WP-0002 trust contract and RCLK-WP-0003 artifact. Use
rail-kubernetes on reef-railiance as the initial packaging candidate; create the
reviewed rapp/deployable declarations under the architecture owner's conventions.
A documented host-service alternative is allowed only if bootstrap dependencies
or measured constraints justify it. The clock app reads host time/health but must
not obtain CAP_SYS_TIME, privileged host access or a host clock-write interface.
Declare immutable image/build pins, namespace/service identity, private exposure,
network policy, resource requests/limits, health versus usability probes, TLS and
sample-signing key delivery/rotation via admitted owners, non-secret config,
monitoring and state-retention/epoch behavior. No secret values in Git, no raw
kubectl patches or console-created persistent resources as the desired state.
Acceptance: IaC rendered/validated by native tools, deployment admission and
trust bootstrap reviewed, least-privilege and no-redirect tests, config/source
hashes and exact deployment/rollback plan. Fail if dynamic trust resolution needs
usable Railiance time before the first sample with no independent bootstrap path.
## Integrate the clock prerequisite into the new-estate bootstrap path
```task
id: RCLK-WP-0005-T04
status: wait
priority: high
state_hub_task_id: "584440e4-49ce-57f4-b6f1-953c0feec710"
```
Coordinate with railiance-bootstrap after T01 establishes owners. Add ordering:
S1 obtains usable external UTC and basic transport trust; S2/S3 bring up the
required substrate and admitted custody; the authority service is deployed;
protected consumers start only after usable time/identity evidence. Bootstrap
invokes pinned owner automation and verifies its receipts; it does not copy host
roles or retain ongoing clock operation. The external UTC prerequisite must not
require the not-yet-created Forgejo, OpenBao, cluster or clock endpoint.
Acceptance: fresh-estate rehearsal, existing-estate upgrade path, explicit manual
bootstrap actions and retirement, failed-time gate, versioned handoff to steady
state owners. No unsupported claim that corporate workstations can be converged.
## Deploy on railiance01 and prove drift, recovery and rollback
```task
id: RCLK-WP-0005-T05
status: wait
priority: high
state_hub_task_id: "1b9fa2cb-77c5-5519-a4d3-184cb8597f86"
```
Depends on T02/T03 readiness and specific live owner authorization. Apply the
reviewed source revision through its normal owner pipeline. Keep clock steps
and effects on existing token consumers within the reviewed rollout window.
Read back daemon configuration, image digest, service/identity/network state and
usable UTC interval. Verify an independently managed workstation obtains a sample
without changing OS clocks. Exercise upstream outage, restart, revoked signing
trust and rollback through safe rehearsals and the approved native scope.
Acceptance: exact-commit render/apply/readback receipts; repeated convergence is
no-op; drift detection catches a disposable config change; rebuild from committed
source succeeds; rollback restores known-good configuration without falsely
restoring old epochs/trust. No unnoticed unrelated resource or credential changes.
## Transfer operational responsibility and gate consumer adoption
```task
id: RCLK-WP-0005-T06
status: wait
priority: high
state_hub_task_id: "c2edb898-7446-5e82-8d2a-9f3f45f41b00"
```
Deliver alert ownership, quality/error budgets, backup/recovery and key-rotation
runbooks, source locations, pipeline/placement identifiers and native evidence to
railiance-telemetry/platform and RCLK-WP-0004. Document what remains single-host.
Keep all unresolved work as live records before finishing this plan. RCLK-WP-0004
may adopt a protected consumer only after this infrastructure gate AND its own
explicit consumer review/negative tests pass. A deployed endpoint is not a grant.