From 660d7a58d829bfa9d3fd9a4a93c9f5449a0de413 Mon Sep 17 00:00:00 2001 From: gadgethd <111318106+gadgethd@users.noreply.github.com> Date: Sat, 3 Oct 2026 17:09:30 +0100 Subject: [PATCH] docs(review): update backlog coordinator status --- REVIEW.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/REVIEW.md b/REVIEW.md index c37edd2..e14e9aa 100644 --- a/REVIEW.md +++ b/REVIEW.md @@ -2,19 +2,19 @@ ## Item #553 — replace-container mock harness -**Status:** FIXED in [PR #114](https://github.com/gadgethd/ukmesh/pull/114), head `87da64c`. +**Status:** DONE; superseded by the coordinator's full harness on `fix113-on-main` at `87da64c`. -**Files changed:** `scripts/test-replace-container.sh`. +**Files changed:** `scripts/test-replace-container.sh` on the coordinator-owned branch. No changes for this item are being pushed to `fix113-on-main`. **Why:** `replace-container.sh` now calls `check-compose-adoption.sh` and inspects Compose labels before mutation. The isolated test project did not stage that child script, and its Docker mock did not model the label response. The harness now stages the script, supplies configurable valid/invalid label metadata, and covers adoption rejection and accepted cases before mutation. -**Tests run:** The initial PR-head reproduction exited 1; `bash -x` showed the replace script returned 127 because the child script was missing from the fixture. At PR head `87da64c`, the focused harness passes all 16 rollback, compatibility, and Compose-adoption cases. +**Tests run:** At coordinator head `87da64c`, `bash scripts/test-replace-container.sh` passed the 16-case adoption/rollback suite, including infra-compose staging and TimescaleDB drill assertions. The earlier failure was caused by the isolated fixture omitting the child adoption script and not modeling Compose labels. -**PROOF:** `bash scripts/test-replace-container.sh` (PR #114 head `87da64c`) -> `/replace-container rollback, compatibility and Compose adoption drills passed \(16\/16\)/` +**PROOF:** `bash scripts/test-replace-container.sh` (`fix113-on-main` head `87da64c`) -> `/replace-container rollback, compatibility and Compose adoption drills passed \(16\/16\)/` -**Deliberately left out:** No product behavior changed for this harness-only fix. PR #114 remains unmerged for coordinator review. +**Deliberately left out:** No product behavior changed for this harness-only fix. The coordinator owns branch and PR disposition. -**Open questions:** PR #114 CI is the remaining merge gate. +**Open questions:** None for this backlog item. Do not push further to `fix113-on-main`. ## Item #543 — link-worker heartbeat alert @@ -24,13 +24,13 @@ **Why:** `ActiveQueueWorkerHeartbeatStale` used `MAX(node_links.itm_computed_at)` as if it were process liveness. It now uses the RF link worker's own `meshcore_worker_heartbeat_timestamp_seconds{worker="link"}` metric and alerts after 600 seconds of staleness with the existing three-minute hold. The backend metric derived from database timestamps is now `meshcore_worker_data_age_seconds`; the health alert and runbook identify snapshot freshness separately from process liveness. The `link`, `path_learning`, `health`, and `link_backfill` values all measure persisted-data recency. -**Tests run:** `npm run typecheck` passed; `node --import tsx --test src/metrics.test.ts` passed 2/2; Prometheus config and rules validation passed; Alertmanager config validation passed. The rule test verifies that stale database data alone does not fire the queued-link liveness alert and that a genuinely stale in-process heartbeat does. +**Tests run:** `npm run typecheck` passed; `node --import tsx --test src/metrics.test.ts` passed 2/2; the full backend `npm test` suite passed 374/374; Prometheus config and rules validation passed; Alertmanager config validation passed. The rule test verifies that stale database data alone does not fire the queued-link liveness alert and that a genuinely stale in-process heartbeat does. **PROOF:** `docker run --rm -v "$PWD/logging/rules:/rules:ro" --entrypoint /bin/promtool prom/prometheus@sha256:63805ebb8d2b3920190daf1cb14a60871b16fd38bed42b857a3182bc621f4996 test rules /rules/meshcore.test.yml` -> `/SUCCESS/` **Deliberately left out:** No deployment or live service changes; the brief prohibits them. -**Open questions:** Check out-of-repository dashboards or alerts for consumers of the renamed `meshcore_worker_heartbeat_age_seconds` metric before deployment. PR #115 CI is the remaining merge gate. +**Open questions:** Check out-of-repository dashboards or alerts for consumers of the renamed `meshcore_worker_heartbeat_age_seconds` metric before deployment, and review the latest PR #115 CI result before merge. ## Item #437 — orphan `runState.test.ts` @@ -40,7 +40,7 @@ **Why:** The missing export described by the backlog item was restored in commit `9a5e838` before this wave. -**Tests run:** `node --import tsx --test src/analysis/runState.test.ts` passed 3/3. +**Tests run:** `node --import tsx --test src/analysis/runState.test.ts` passed 3/3; the full backend `npm test` suite passed 374/374. **PROOF:** `node --import tsx --test src/analysis/runState.test.ts` -> `/# tests 3[\s\S]*# pass 3[\s\S]*# fail 0/` @@ -56,7 +56,7 @@ **Why:** Commit `9a5e838` restored the export and the current focused test passes. -**Tests run:** `node --import tsx --test src/analysis/runState.test.ts` passed 3/3. +**Tests run:** `node --import tsx --test src/analysis/runState.test.ts` passed 3/3; the full backend `npm test` suite passed 374/374. **PROOF:** `git show 9a5e838:backend/src/analysis/runState.ts | rg -n normalizeRetiredAnalysisState` -> `/export \{ normalizeRetiredAnalysisState \} from '\.\/workloadPolicy\.js'/` @@ -72,7 +72,7 @@ **Why:** The stale untracked deploy-tree copy described in the backlog is not the state of this worktree. The current tracked test imports an existing export and passes. -**Tests run:** `node --import tsx --test src/analysis/runState.test.ts` passed 3/3. +**Tests run:** `node --import tsx --test src/analysis/runState.test.ts` passed 3/3; the full backend `npm test` suite passed 374/374. **PROOF:** `node --import tsx --test src/analysis/runState.test.ts` -> `/# tests 3[\s\S]*# pass 3[\s\S]*# fail 0/`