From d7692790bcb2fc51c256966b24b21ec19c8e0283 Mon Sep 17 00:00:00 2001 From: archipelago Date: Wed, 22 Apr 2026 18:57:43 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20update=20STATUS.md=20=E2=80=94=20Step?= =?UTF-8?q?=204=20done,=20Step=205=20next?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- docs/STATUS.md | 50 ++++++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/docs/STATUS.md b/docs/STATUS.md index 583f69a8..a8a6bac5 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -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 1–4) -`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, 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. ---