Repository navigation
Description
Finding
Evidence (live review 2026-10-26 ~22:40 CDT, laptop loopback + gh, cross-checked): ss on the laptop tonight: aggregator listens on 127.0.0.1 + 100.99.113.103 (tailnet) only; Grist and Pad the same; Kaneo loopback only (+ tunnel). ready-for-agent listens on 0.0.0.0:6056 - every interface including the LAN (and any future WAN-facing interface), inconsistent with the stack's settled access model (Drew, 2026-10-25: LAN/tailnet fine, public only behind a password) and with its own earlier tailnet-bind change in slice 1.
Proposal
Bind ready-for-agent to loopback + tailnet like the rest (its UI is consumed via tailnet/local agents - verify no LAN consumer exists first via its README/runbook), or document a deliberate exception with its reason. Add a bind-scope row to the topology table (topology issue) so drift is visible.
Acceptance
- ss output post-change shows the aligned bind (or the exception is documented + Drew-acknowledged in the issue).
Refs: pm-stack: Pad/Grist compose files hard-code one host's tailnet IP (100.99.113.103), breaking the documented move-hosts procedure #781 (related host-config hygiene).
Acceptance criteria
- ready-for-agent no longer listens on 0.0.0.0:6056:
ssoutput after the change shows it bound to loopback + tailnet like the rest of the stack — OR the exception is documented with its reason and Drew-acknowledged on this issue. - The topology table gains a bind-scope row so future drift is visible.
- Verification that no LAN consumer of the ready-for-agent UI exists (README/runbook check) is recorded before the bind changes.
Activity
developing-today commentedon Oct 27, 2026
CODE-317
dezren39 commentedon Oct 28, 2026
Intake review
Fleet monitor intake enrichment (protocol §5) — 2026-10-28T06:25Z. This issue was filed 2026-10-27 by Drew (dezren39) from the 2026-10-26 live pm-stack review and had no
priority/*label and no standard## Acceptance criteriasection; both are now supplied (the body's own Acceptance text is restated under the standard heading, original body preserved verbatim above it).kind/*(kept existing),source/human,status/needs-triage,priority/high,effort/s,app/pm-stack(existing),meta/enriched.sson the laptop post-change and paste the output on the issue.24 remaining items
dezren39 commentedon Nov 3, 2026
Handed off: task 7499 (small_fix, issue #1181) was claimed by lane code-l and assigned to the opencode execution lane. The laptop claimant launches the bound opencode session, which drives task 7499 to its terminal state (deploy + verify for issue #1181). Labels synced to this claim (queue/claimed + status/in-progress + work/assigned; queue/queued removed).
dezren39 commentedon Nov 3, 2026
Queue note (blocked → escalated to user, task 7499): the code half is merged and correct; the deploy needs an interactive sudo password, which no queue worker has.
Verified this run (2026-11-03T12:52Z, on the laptop itself)
ss -tlnp | grep 6056LISTEN 0.0.0.0:6056 users:(("ready-for-agent",pid=158234))— bug still live on the hostsystemctl --user is-active ready-for-agent.serviceactivesystemctl --user is-active ready-for-agent-tailnet.socketinactive745c8b7f9in primary clonemain9d1464c05)sudo -n truesudo: a password is requiredsudo -n -l~/toolsor~/hatch/toolsSo the NixOS-generated unit on this host still carries the old bind scope. The fix only takes effect after a rebuild from a tree containing the merge — which this clone already has. The single missing ingredient is root.
What Drew needs to do (one command)
From a tree containing
745c8b7f9(the primary clone qualifies):Or grant a scoped NOPASSWD rule for
nixos-rebuild switchif unattended deploys are wanted from now on.Verification for whoever runs it (no sudo needed)
ss -tlnp | grep 6056→ expect only127.0.0.1:6056and100.99.113.103:6056;0.0.0.0:6056must be gone.systemctl --user is-active ready-for-agent.service→active;systemctl --user is-active ready-for-agent-tailnet.socket→active.ready-for-agentprobe (pm-stack/aggregator) returns ok.Not touched
No rebuild attempted, no source edits, no commits, and the primary clone's unpushed commits and dirty files (
pkgs/id/src/chat.rs,pm-stack/aggregator/events.json) were left exactly as found — they belong to other lanes.Labels set to
user/escalated+status/blocked+queue/blocked; the task is blocked with reason classescalated-to-userrather than parked, because this will not unblock on a timer.dezren39 commentedon Nov 3, 2026
Correction to the command above: this host's flake attribute is
amd(hostnameamd,nixos/hosts/default.nix→amd = host { ... framework/13-inch/7040-amd }). Exact command: