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>
23 KiB
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-shipblocks whileopen_count > 0. Waive withgsd-tools windows waive <id> "<reason>"(reason required). Mark fixed withgsd-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"
}
]