docs: update STATUS.md — Step 4 done, Step 5 next

Records acceptance evidence for Steps 1-4 (container tests 21/21 pass, build
clean with expected unused-method warnings) and queues the BootReconciler
implementation for Step 5.
This commit is contained in:
archipelago
2026-04-22 18:57:43 -04:00
parent 138588422a
commit d7692790bc

View File

@@ -1,37 +1,36 @@
# RESUME HERE — Rust orchestrator migration
Updated: 2026-04-22 (late session, pivoted from laptop to ThinkPad)
Updated: 2026-04-22 (Step 3 committed, moving to Step 4)
**To resume this work, SSH into the ThinkPad and run `opencode` from `~/Projects/archy/`.**
**To resume this work, SSH into the ThinkPad and run `opencode` from `~/Projects/archy/`. Or work from the laptop via the SSHFS mount at `~/mnt/archy-thinkpad/`.**
## Where we are
Working through the 11-step plan in [`rust-orchestrator-migration.md`](./rust-orchestrator-migration.md).
- [x] **Step 1**`ContainerConfig` schema extended with `build:` (mutually exclusive with `image:`), new `ResolvedSource` enum, `resolve()` method, 10 new tests
- [x] **Step 2**`ContainerRuntime` trait gained `image_exists` + `build_image` on all three impls (PodmanRuntime, DockerRuntime, AutoRuntime), 4 new argv-construction tests
- [ ] **Step 3**`ProdContainerOrchestrator` (next up)
- [ ] Steps 4-11 — see design doc
- [x] **Step 1**`3767c267` ContainerConfig schema with `build:`, `ResolvedSource` enum, `resolve()`, 10 tests
- [x] **Step 2**`34af4d9d` ContainerRuntime trait gained `image_exists` + `build_image`, 4 argv tests, 25/25 pass
- [x] **Step 3**`b6a04d31` ProdContainerOrchestrator (999 LOC), 16 tests all pass, not yet wired to main.rs
- [x] **Step 4**`e8a59c93` ContainerOrchestrator trait, RpcHandler uses it in prod (+ `13858842` chore gitignore ._*)
- [ ] **Step 5** — BootReconciler task in new file boot_reconciler.rs (next up)
- [ ] **Step 6** — main.rs wire-up: load manifests, adopt, spawn reconciler (replaces the commented-out `run_boot_reconciliation` block at main.rs:107-111)
- [ ] **Step 7** — Three UI manifests + Dockerfile refactor (runtime bind-mount of nginx.conf)
- [ ] **Step 8** — Delete bash scripts + systemd units + ISO builder lines
- [ ] **Step 9** — Hot-swap + verify on .228
- [ ] **Step 10** — Hot-swap + verify on .116
- [ ] **Step 11** — Chaos matrix on both nodes
## Acceptance evidence
## Acceptance evidence (Steps 14)
`cargo test -p archipelago-container --lib` passes 25/25 on the ThinkPad (cargo 1.95.0).
`cargo test -p archipelago-container --lib` 25/25 pass.
`cargo test -p archipelago container::` → 21/21 pass (16 prod_orchestrator + 5 other container tests).
`cargo build -p archipelago` → clean, 11 "unused" warnings for methods not yet wired from main.rs (expected).
Unrelated test failures (identity_manager / session / wallet / mesh / credentials): 24 pre-existing on baseline `b6a04d31`, fluctuates to 25 on Step 4 — confirmed unrelated (diff only shifted 3 fs-state tests that are independently flaky).
## Uncommitted state
The 6 modified files in `git status` ARE the Step 1+2 work:
```
core/archipelago/src/container/dev_orchestrator.rs
core/container/src/dependency_resolver.rs
core/container/src/lib.rs
core/container/src/manifest.rs
core/container/src/podman_client.rs
core/container/src/runtime.rs
```
Plus `docs/rust-orchestrator-migration.md` (the design spec, untracked).
Plus `tests/` (bats harness, uncommitted leftover from prior session).
Clean — only leftover is `tests/` (bats harness from prior session, not in scope for this migration).
## Answered design questions (no need to re-ask)
@@ -52,7 +51,14 @@ Both are development alpha nodes — **full destructive latitude**, no need to a
## Next action
Step 3: create `core/archipelago/src/container/prod_orchestrator.rs` (new file, ~400 LOC). See the design doc section for "Step 3" for the full public surface + acceptance criteria. Write it, add unit tests against a `MockRuntime`, verify `cargo test -p archipelago` builds.
**Step 5 — BootReconciler.** New file `core/archipelago/src/container/boot_reconciler.rs`. Design doc §269-352 has the full shape. Plan:
1. `pub struct BootReconciler { orchestrator: Arc<ProdContainerOrchestrator>, interval: Duration, shutdown: CancellationToken }` — interval is 30s per answered Q3.
2. `pub async fn run_forever(self)` that runs an initial `reconcile_all()` then loops on `tokio::select! { sleep | shutdown }`.
3. Unit tests against a `MockRuntime`: verifies (a) initial reconcile fires immediately, (b) second reconcile fires after `interval`, (c) shutdown token terminates the loop cleanly, (d) a per-app failure in one reconcile doesn't stop subsequent reconciles.
4. Wire-up lives in Step 6.
No changes to existing code; this is an additive file + tests.
---