Files
archy/.planning/WINDOWS.md
T
archipelagoandClaude Opus 5 484b1209a8 docs(13): close windows 16 and 19 — assistant tests observed passing
21 passed / 0 failed across assistant::, plus assistant_methods_require_session
run explicitly. Both windows had non-defect root causes: window 19 was lane
staleness (missing 0de67ca6's PortMapping test-constructor fix, which made the
whole crate's test build fail), and window 16's repeated kills were the
orchestrator's own too-short timeout sending SIGTERM on a cold build, which I
had wrongly attributed to memory contention.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 02:57:49 -04:00

23 KiB

schema_version, open_count, waived_count, fixed_count, total_count, last_updated
schema_version open_count waived_count fixed_count total_count last_updated
1 14 0 5 19 2026-08-04T00:00:00.000Z

Broken Windows Ledger

Cross-phase defect register. /gsd-ship blocks while open_count > 0. Waive with gsd-tools windows waive <id> "<reason>" (reason required). Mark fixed with gsd-tools windows fixed <id>.

id phase kind file line description status reason recorded_at resolved_at
1 02 deviation neode-ui/src/stores/cloud.ts CloudFolder.vue's file listing cache lacks a TTL gate in cloudStore.navigate() — always re-issues the RPC on revisit (paints from cache instantly first, but still refetches unconditionally). Needs a TTL check added to navigate() to fully satisfy 'no new RPC within TTL'. open 2026-07-30T12:25:22.301Z
2 02 deviation neode-ui/src/views/Home.vue Wallet/send flow (SendBitcoinModal.vue via Home.vue) named by 02-FINDINGS.md as owned by 02-03 (worst-ranked revisit, 2607ms) but not in 02-03-PLAN.md's files_modified — reported as an unplanned-item gap, not converted. Cause is pure client-side remount cost (0 RPC), not a caching problem. open 2026-07-30T12:25:22.450Z
3 02 deviation neode-ui/src/views/PeerFiles.vue 02-03-PLAN.md assumed PeerFiles.vue already used useCachedResource; it actually uses the raw resources store directly (correctly per-item-keyed) with no TTL gate and the same loading/refreshing conflation bug fixed in OpenWrtGateway.vue this plan. Left untouched (out of files_modified scope) — candidate for the same fix in a future plan. open 2026-07-30T12:25:22.605Z
4 02 deviation neode-ui/src/views/Chat.vue AIUI-side D-14 commit (900c0b9, branch feat/d14-embed-defaults in local clone /home/archipelago/Projects/AIUI, based on development) is NOT pushed upstream to git.tx1138.com/lfg2025/AIUI — anonymous push returned 403 Forbidden. neode-ui's two new query params (chatExpanded, mobileChat) are inert no-ops against any currently-deployed AIUI build until a maintainer with push rights merges and it is rebuilt/redeployed. 02-08 (deploy) or the user must resolve push access. fixed 2026-07-30T22:37:25.565Z 2026-07-30T22:37:44.642Z
5 09 unrun-verify botfight/e2e/signup-bot.spec.ts pnpm test:e2e -- e2e/signup-bot.spec.ts not run: local backend dev port 9100 is occupied by the live archi-dev-box botfights container (podman, 42h uptime) needed for tomorrow's demo — could not free it to run a local dev server. Task-level automated verify (vue-tsc + grep sweep) passed; vitest server suite passed with only pre-existing unrelated flaky failures. open 2026-07-31T02:35:00.391Z
6 02 deviation neode-ui/src/views/Discover.vue Discover revisit-ms regression (1083->1257->1453ms across 3 runs), confirmed phase-2-caused split-signal client-side render cost, not fixed (deploy blocked this session) open 2026-07-31T10:56:26.089Z
7 02 deviation neode-ui/src/views/Server.vue Server revisit-ms regression (738->849->1239ms across 3 runs) despite confirmed instance survival and improved RPC count; confirmed phase-2-caused split-signal cost, not fixed (deploy blocked this session) open 2026-07-31T10:56:26.305Z
8 02 deviation neode-ui/src/views/web5/Web5.vue Web5 revisit-ms regression (566->709->1329ms, zero overlap across 3 runs) despite confirmed instance survival; confirmed phase-2-caused split-signal cost, not fixed (deploy blocked this session) open 2026-07-31T10:56:26.570Z
9 02 deviation neode-ui/src/views/AppDetails.vue AppDetails revisit-ms regression (1204->1510->2668ms across 3 runs); confirmed phase-2-caused split-signal cost, not fixed (deploy blocked this session) open 2026-07-31T10:56:26.751Z
10 02 deviation neode-ui/src/views/server/OpenWrtGateway.vue OpenWrtGateway revisit-ms regression (663.5->1148->1460ms across 3 runs); confirmed phase-2-caused split-signal cost, not fixed (deploy blocked this session) open 2026-07-31T10:56:26.933Z
11 10 unrun-verify docs/security/KEY-02-FLEET-ROTATION.md C-3 FAILED: archipelago-1, archy-x250-beta and archipelago share all three SSH host keys; the first two also share their TLS private key. Not rotated — needs an operator-driven --apply --yes per node. open 2026-08-02T19:07:39.861Z
12 10 unrun-verify scripts/security/host-secrets-audit.sh Rotation never exercised on real hardware: that 'systemctl reload ssh' keeps the operator's own forked session alive is proven only by design, not by observation. Needs --apply --yes on one disposable node from a session the operator is willing to lose. open 2026-08-02T19:07:40.217Z
13 10 unrun-verify core/archipelago/src/api/rpc/system/handlers.rs system.stats host_secrets never observed on a real node — proven against the file contract in unit tests only. Needs a build carrying 10-04 deployed to the dev pair, then a system.stats call. fixed 2026-08-02T19:07:40.522Z 2026-08-02T23:00:30.894Z
14 10 unrun-verify core/archipelago/src/container/prod_orchestrator.rs LIVE EXPOSURE on archi-dev-box: archy-bitcoin-ui (systemd/Quadlet-owned, user-uninstalled marker set) still serves unauthenticated POST /bitcoin-rpc/ on 0.0.0.0:8334 with Access-Control-Allow-Origin *, reaching Bitcoin Core RPC through a credential-injecting proxy. Verified live 2026-08-02 (returned a real block height with no cookies). Code fix committed f6b5245b but NOT deployed: closing it needs the new binary on the node plus an archy-bitcoin-ui restart. archy-electrs-ui is in the same uninstalled-but-running state (static UI only, no credential proxy). Operator-gated; no node touched. fixed 2026-08-02T22:44:15.215Z 2026-08-02T23:16:04.071Z
15 10 unrun-verify core/archipelago/src/container/prod_orchestrator.rs The f6b5245b reconcile fix is DEPLOYED on archi-dev-box (binary installed 19:06, running) but NEVER EXERCISED on hardware: the state it repairs (uninstall marker + Quadlet-running + stale config) stopped existing here at 18:36, when a separate rebuild of bitcoin-ui rendered the fixed conf and restarted the container. So :8334 returning 401 proves a05956c4's template, NOT the reconcile path that is supposed to deliver it. archy-electrs-ui still carries the marker+running shape and could exercise it, but has no rendered config to rewrite. Needs a node that still has a stale bitcoin-ui conf, or a deliberately re-staled one. fixed 2026-08-02T23:16:04.510Z 2026-08-03T00:06:03.112Z
16 13 unrun-verify core/archipelago/src/assistant/loop_.rs cargo test --package archipelago assistant:: (disk_status_tool_executes, unknown_tool_is_refused_not_ignored, assistant_methods_require_session) never completed this session — killed twice under machine resource contention (load avg 35-46 on 4 cores, sibling worktree builds). cargo build --package archipelago DID complete clean (exit 0, only expected dead-code warnings). Test logic was read and reasoned correct but not independently executed — needs a follow-up cargo test run when the machine is free. RESOLVED 2026-08-04: all three tests observed passing (disk_status_tool_executes, unknown_tool_is_refused_not_ignored, assistant_methods_require_session) once the lane was merged forward past 0de67ca6 and given a realistic timeout. The earlier failures were NOT a machine or code problem: they were the orchestrator's own timeout 2400 firing SIGTERM on a cold debug build, misdiagnosed at the time as memory contention. fixed 2026-08-03T18:49:48.842Z
17 13 deviation external:AIUI/packages/app/src/services/archyBridge.ts Task 3 (sendChat/streamViaArchy, external repo /home/archipelago/Projects/AIUI, branch development, commit e30ac1d) is committed locally but NOT pushed to git.tx1138.com — origin was unreachable this session (DNS resolves to 80.71.235.99 but TCP/TLS connect and even 'git ls-remote' timed out repeatedly, sandbox-disabled too). Needs a push from an environment with network access to git.tx1138.com before the fix lands upstream. fixed 2026-08-03T18:50:07.659Z
18 13 deploy-topology core/archipelago/src/bootstrap.rs run_runtime_assets() in core/archipelago/src/bootstrap.rs reinstalls a SECOND on-node copy of the nginx template (/opt/archipelago/web-ui/archipelago-runtime/image-recipe/configs/nginx-archipelago.conf) over /etc/nginx/sites-available/archipelago on EVERY systemctl restart archipelago. Found 2026-08-03 on archy-x250-dev3 during 13-02 Task 3: a hand-patched nginx deploy was silently reverted within ~5 seconds of the daemon restart. Any nginx change that updates only /etc/nginx/ is therefore transient — both copies must be written. This is a live OTA hazard: an operator can deploy an nginx fix, see it applied, restart the daemon, and silently lose it with no error. open 2026-08-03T19:05:00.000Z
19 13 unrun-verify core/archipelago/src/container/prod_orchestrator.rs 13-05's cargo test --package archipelago (assistant::) cannot be run: the whole test binary fails E0063 in prod_orchestrator.rs's #[cfg(test)] fn port() helper, missing fields auth/auth_rationale on archipelago_container::manifest::PortMapping. Introduced by 0c4826f8 (feat(security): declare which app ports may skip authentication), which added those fields without updating this unrelated test helper — not touched by 13-05 (assistant/tools.rs, grants.rs, mod.rs, assistant_chat.rs) and out of scope per the executor's deviation-rule SCOPE BOUNDARY. cargo check --package archipelago (non-test, real binary) passes clean. Needs a one-line fix to fn port() (add auth: Default::default(), auth_rationale: Default::default()) from whoever owns that file, then a full cargo test --package archipelago assistant:: run to actually verify 13-05's 13 new tests. RESOLVED 2026-08-04: root cause was lane staleness, not a defect. The lane merged main at 0c4826f8, one commit before 0de67ca6 added auth/auth_rationale to PortMapping's test constructors, so no test in the crate could compile. Merged main forward (7cc58b7a); cargo test --package archipelago assistant:: now reports 21 passed / 0 failed, including registry_never_exposes_excluded_authority, settable_keys_never_include_claude_api_key and grant_revocation_takes_effect_next_turn. fixed 2026-08-04T00:00:00.000Z
[
  {
    "id": 19,
    "kind": "unrun-verify",
    "phase": "13",
    "file": "core/archipelago/src/container/prod_orchestrator.rs",
    "line": null,
    "description": "13-05's cargo test --package archipelago (assistant::) cannot be run: the whole test binary fails E0063 in prod_orchestrator.rs's #[cfg(test)] fn port() helper, missing fields auth/auth_rationale on archipelago_container::manifest::PortMapping. Introduced by 0c4826f8 (feat(security): declare which app ports may skip authentication), which added those fields without updating this unrelated test helper — not touched by 13-05 (assistant/tools.rs, grants.rs, mod.rs, assistant_chat.rs) and out of scope per the executor's deviation-rule SCOPE BOUNDARY. cargo check --package archipelago (non-test, real binary) passes clean. Needs a one-line fix to fn port() (add auth: Default::default(), auth_rationale: Default::default()) from whoever owns that file, then a full cargo test --package archipelago assistant:: run to actually verify 13-05's 13 new tests.",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-08-04T00:00:00.000Z",
    "resolved_at": "2026-08-04T03:10:00.000Z"
  },
  {
    "id": 18,
    "kind": "deploy-topology",
    "phase": "13",
    "file": "core/archipelago/src/bootstrap.rs",
    "line": null,
    "description": "run_runtime_assets() in core/archipelago/src/bootstrap.rs reinstalls a SECOND on-node copy of the nginx template (/opt/archipelago/web-ui/archipelago-runtime/image-recipe/configs/nginx-archipelago.conf) over /etc/nginx/sites-available/archipelago on EVERY `systemctl restart archipelago`. Found 2026-08-03 on archy-x250-dev3 during 13-02 Task 3: a hand-patched nginx deploy was silently reverted within ~5 seconds of the daemon restart. Any nginx change that updates only /etc/nginx/ is therefore transient \u2014 both copies must be written. This is a live OTA hazard: an operator can deploy an nginx fix, see it applied, restart the daemon, and silently lose it with no error.",
    "status": "open",
    "recorded_at": "2026-08-03T19:05:00.000Z",
    "resolved_at": null
  },
  {
    "id": 1,
    "kind": "deviation",
    "phase": "02",
    "file": "neode-ui/src/stores/cloud.ts",
    "line": null,
    "description": "CloudFolder.vue's file listing cache lacks a TTL gate in cloudStore.navigate() — always re-issues the RPC on revisit (paints from cache instantly first, but still refetches unconditionally). Needs a TTL check added to navigate() to fully satisfy 'no new RPC within TTL'.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-07-30T12:25:22.301Z",
    "resolved_at": null
  },
  {
    "id": 2,
    "kind": "deviation",
    "phase": "02",
    "file": "neode-ui/src/views/Home.vue",
    "line": null,
    "description": "Wallet/send flow (SendBitcoinModal.vue via Home.vue) named by 02-FINDINGS.md as owned by 02-03 (worst-ranked revisit, 2607ms) but not in 02-03-PLAN.md's files_modified — reported as an unplanned-item gap, not converted. Cause is pure client-side remount cost (0 RPC), not a caching problem.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-07-30T12:25:22.450Z",
    "resolved_at": null
  },
  {
    "id": 3,
    "kind": "deviation",
    "phase": "02",
    "file": "neode-ui/src/views/PeerFiles.vue",
    "line": null,
    "description": "02-03-PLAN.md assumed PeerFiles.vue already used useCachedResource; it actually uses the raw resources store directly (correctly per-item-keyed) with no TTL gate and the same loading/refreshing conflation bug fixed in OpenWrtGateway.vue this plan. Left untouched (out of files_modified scope) — candidate for the same fix in a future plan.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-07-30T12:25:22.605Z",
    "resolved_at": null
  },
  {
    "id": 4,
    "kind": "deviation",
    "phase": "02",
    "file": "neode-ui/src/views/Chat.vue",
    "line": null,
    "description": "AIUI-side D-14 commit (900c0b9, branch feat/d14-embed-defaults in local clone /home/archipelago/Projects/AIUI, based on development) is NOT pushed upstream to git.tx1138.com/lfg2025/AIUI — anonymous push returned 403 Forbidden. neode-ui's two new query params (chatExpanded, mobileChat) are inert no-ops against any currently-deployed AIUI build until a maintainer with push rights merges and it is rebuilt/redeployed. 02-08 (deploy) or the user must resolve push access.",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-07-30T22:37:25.565Z",
    "resolved_at": "2026-07-30T22:37:44.642Z"
  },
  {
    "id": 5,
    "kind": "unrun-verify",
    "phase": "09",
    "file": "botfight/e2e/signup-bot.spec.ts",
    "line": null,
    "description": "pnpm test:e2e -- e2e/signup-bot.spec.ts not run: local backend dev port 9100 is occupied by the live archi-dev-box botfights container (podman, 42h uptime) needed for tomorrow's demo — could not free it to run a local dev server. Task-level automated verify (vue-tsc + grep sweep) passed; vitest server suite passed with only pre-existing unrelated flaky failures.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-07-31T02:35:00.391Z",
    "resolved_at": null
  },
  {
    "id": 6,
    "kind": "deviation",
    "phase": "02",
    "file": "neode-ui/src/views/Discover.vue",
    "line": null,
    "description": "Discover revisit-ms regression (1083->1257->1453ms across 3 runs), confirmed phase-2-caused split-signal client-side render cost, not fixed (deploy blocked this session)",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-07-31T10:56:26.089Z",
    "resolved_at": null
  },
  {
    "id": 7,
    "kind": "deviation",
    "phase": "02",
    "file": "neode-ui/src/views/Server.vue",
    "line": null,
    "description": "Server revisit-ms regression (738->849->1239ms across 3 runs) despite confirmed instance survival and improved RPC count; confirmed phase-2-caused split-signal cost, not fixed (deploy blocked this session)",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-07-31T10:56:26.305Z",
    "resolved_at": null
  },
  {
    "id": 8,
    "kind": "deviation",
    "phase": "02",
    "file": "neode-ui/src/views/web5/Web5.vue",
    "line": null,
    "description": "Web5 revisit-ms regression (566->709->1329ms, zero overlap across 3 runs) despite confirmed instance survival; confirmed phase-2-caused split-signal cost, not fixed (deploy blocked this session)",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-07-31T10:56:26.570Z",
    "resolved_at": null
  },
  {
    "id": 9,
    "kind": "deviation",
    "phase": "02",
    "file": "neode-ui/src/views/AppDetails.vue",
    "line": null,
    "description": "AppDetails revisit-ms regression (1204->1510->2668ms across 3 runs); confirmed phase-2-caused split-signal cost, not fixed (deploy blocked this session)",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-07-31T10:56:26.751Z",
    "resolved_at": null
  },
  {
    "id": 10,
    "kind": "deviation",
    "phase": "02",
    "file": "neode-ui/src/views/server/OpenWrtGateway.vue",
    "line": null,
    "description": "OpenWrtGateway revisit-ms regression (663.5->1148->1460ms across 3 runs); confirmed phase-2-caused split-signal cost, not fixed (deploy blocked this session)",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-07-31T10:56:26.933Z",
    "resolved_at": null
  },
  {
    "id": 11,
    "kind": "unrun-verify",
    "phase": "10",
    "file": "docs/security/KEY-02-FLEET-ROTATION.md",
    "line": null,
    "description": "C-3 FAILED: archipelago-1, archy-x250-beta and archipelago share all three SSH host keys; the first two also share their TLS private key. Not rotated — needs an operator-driven --apply --yes per node.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-08-02T19:07:39.861Z",
    "resolved_at": null
  },
  {
    "id": 12,
    "kind": "unrun-verify",
    "phase": "10",
    "file": "scripts/security/host-secrets-audit.sh",
    "line": null,
    "description": "Rotation never exercised on real hardware: that 'systemctl reload ssh' keeps the operator's own forked session alive is proven only by design, not by observation. Needs --apply --yes on one disposable node from a session the operator is willing to lose.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-08-02T19:07:40.217Z",
    "resolved_at": null
  },
  {
    "id": 13,
    "kind": "unrun-verify",
    "phase": "10",
    "file": "core/archipelago/src/api/rpc/system/handlers.rs",
    "line": null,
    "description": "system.stats host_secrets never observed on a real node — proven against the file contract in unit tests only. Needs a build carrying 10-04 deployed to the dev pair, then a system.stats call.",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-08-02T19:07:40.522Z",
    "resolved_at": "2026-08-02T23:00:30.894Z"
  },
  {
    "id": 14,
    "kind": "unrun-verify",
    "phase": "10",
    "file": "core/archipelago/src/container/prod_orchestrator.rs",
    "line": null,
    "description": "LIVE EXPOSURE on archi-dev-box: archy-bitcoin-ui (systemd/Quadlet-owned, user-uninstalled marker set) still serves unauthenticated POST /bitcoin-rpc/ on 0.0.0.0:8334 with Access-Control-Allow-Origin *, reaching Bitcoin Core RPC through a credential-injecting proxy. Verified live 2026-08-02 (returned a real block height with no cookies). Code fix committed f6b5245b but NOT deployed: closing it needs the new binary on the node plus an archy-bitcoin-ui restart. archy-electrs-ui is in the same uninstalled-but-running state (static UI only, no credential proxy). Operator-gated; no node touched.",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-08-02T22:44:15.215Z",
    "resolved_at": "2026-08-02T23:16:04.071Z"
  },
  {
    "id": 15,
    "kind": "unrun-verify",
    "phase": "10",
    "file": "core/archipelago/src/container/prod_orchestrator.rs",
    "line": null,
    "description": "The f6b5245b reconcile fix is DEPLOYED on archi-dev-box (binary installed 19:06, running) but NEVER EXERCISED on hardware: the state it repairs (uninstall marker + Quadlet-running + stale config) stopped existing here at 18:36, when a separate rebuild of bitcoin-ui rendered the fixed conf and restarted the container. So :8334 returning 401 proves a05956c4's template, NOT the reconcile path that is supposed to deliver it. archy-electrs-ui still carries the marker+running shape and could exercise it, but has no rendered config to rewrite. Needs a node that still has a stale bitcoin-ui conf, or a deliberately re-staled one.",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-08-02T23:16:04.510Z",
    "resolved_at": "2026-08-03T00:06:03.112Z"
  },
  {
    "id": 16,
    "kind": "unrun-verify",
    "phase": "13",
    "file": "core/archipelago/src/assistant/loop_.rs",
    "line": null,
    "description": "cargo test --package archipelago assistant:: (disk_status_tool_executes, unknown_tool_is_refused_not_ignored, assistant_methods_require_session) never completed this session — killed twice under machine resource contention (load avg 35-46 on 4 cores, sibling worktree builds). cargo build --package archipelago DID complete clean (exit 0, only expected dead-code warnings). Test logic was read and reasoned correct but not independently executed — needs a follow-up cargo test run when the machine is free.",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-08-03T18:49:48.842Z",
    "resolved_at": "2026-08-04T03:10:00.000Z"
  },
  {
    "id": 17,
    "kind": "deviation",
    "phase": "13",
    "file": "external:AIUI/packages/app/src/services/archyBridge.ts",
    "line": null,
    "description": "Task 3 (sendChat/streamViaArchy, external repo /home/archipelago/Projects/AIUI, branch development, commit e30ac1d) is committed locally but NOT pushed to git.tx1138.com — origin was unreachable this session (DNS resolves to 80.71.235.99 but TCP/TLS connect and even 'git ls-remote' timed out repeatedly, sandbox-disabled too). Needs a push from an environment with network access to git.tx1138.com before the fix lands upstream.",
    "status": "fixed",
    "resolution": "RESOLVED 2026-08-03 by the AIUI in-repo migration (D-19): AIUI's source was imported into this repo at aiui/ via git subtree with full history, carrying commit e30ac1d across. It is now committed and pushed as part of this repo, so the unreachable git.tx1138.com remote no longer gates it.",
    "reason": "",
    "recorded_at": "2026-08-03T18:50:07.659Z",
    "resolved_at": "2026-08-03T19:20:00.000Z"
  }
]