Skip to content

pm-stack NixOS module: fleet-feed collector units are hand-written — fold service + timer into nixos/services/pm-stack #3363

Open

Description

@dezren39

Per Drew's 2026-10-27/30 orders, the PM stack's units are declared in nixos/services/pm-stack/default.nix and land by nixos-rebuild switch (aggregator, projector, pm-git-sync, quota-gatherer, dispatch, tunnel, Kaneo). The fleet-feed collector missed that wiring: when it moved from the sandbox to the laptop on 2026-10-31 it was installed as hand-written files ~/.config/systemd/user/fleet-feed-collector.service and .timer (plain files, not home-manager store symlinks), and the module has no collector declaration (grep: no match for collector/fleet in default.nix).

Fold the collector service + timer into the module with the same environment the hand unit carries today (SUPABASE_PROJECT_REF via bws token file, FLEET_FEED_OUT=~/.local/state/pm-aggregator/fleet-feed.json, QUOTA_VIEW_PATH/QUOTA_REGISTRY_PATH/JULES_STATE_PATH/ORCHESTRATION_PATH into the laptop hatch-personal clone, --out argument as the service invokes it), so the next successful switch owns its lifecycle and home-manager retires the hand files (.backup rename per the module header). Note switches are currently blocked by the nix error 102 problem tracked elsewhere; the module change can land ahead of the switch. Related symptom of hand-managed collector state: #3362.

Acceptance criteria

  • The fleet-feed collector service + timer are declared in nixos/services/pm-stack/default.nix with the same environment the hand-written unit carries today (SUPABASE_PROJECT_REF via the bws token file, FLEET_FEED_OUT, QUOTA_VIEW_PATH/QUOTA_REGISTRY_PATH/JULES_STATE_PATH/ORCHESTRATION_PATH, and the --out argument as currently invoked).
  • After a successful nixos-rebuild switch on the laptop, the module-owned units are the ones running; the hand-written files under ~/.config/systemd/user are retired (.backup rename per the module header), not left as a second owner.
  • The collector keeps producing a healthy fleet-feed.json on its timer cadence after the switch (AA section present, session counts in the normal range).

Activity

  1. added
    kind/infrastructureInfrastructure / host-portability work
    priority/normalOrdinary priority (the default)
    effort/sSmall: expected under 2 hours of work
    app/pm-stackpm-stack (Pad/Grist) in developing-today/code
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Nov 1, 2026
  2. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    Intake review

    Related: #3362 (the phantom-writer incident this wiring prevents recurring), Drew's 2026-10-27/30 PM-stack module orders cited in the body. Notes: switches are currently blocked (named in the body) — the module change can land before the switch does; acceptance is written so the switch verification happens when switches unblock. Suggested approach: mirror the quota-gatherer unit declaration in the same module; keep env identical to the hand unit so the diff is purely ownership.

    — Fleet monitor intake pass (protocol §5), 2026-11-01. Still live at review time: no merged PR or commit found that resolves this item (checked against the issue's own evidence and recency).

  3. added
    queue/queuedHas a queued task in the Supabase agent queue
    source/creatorFiled by the new-issue-creator job
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Nov 3, 2026
  4. developing-today commented on Nov 3, 2026

    @developing-today
    Contributor

    agent-note:v1
    state: triaged (coverage pass)
    Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
    Found via: coverage pass 2026-11-03

  5. 13 remaining items

  6. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

    • Agent: fleet monitor (repo-fleet-monitor)
    • Session / ID: task 8232 · repo-fleet-monitor run 2026-11-03 18:12 CST
    • Found via: monitor reconciliation
    • Task: Claim evaporated — task 8232 returned to queued and unclaimed in repo-health-code-pilot after the holding run ended without a terminal verb (checkpoint stage: handed_off). Labels reset to the truth: queue/queued + status/needs-triage. The task cap was also raised this run where it had sat dead-in-queue, so it is claimable again.
    • Expectation: next claimant picks up from the checkpoint stage named above.
  7. added
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 4, 2026
  8. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  9. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  10. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    event: handed_off
    task: 8232 (repo-health-code-pilot; repo-worker-code; lane code-y)
    at: 2026-11-04T16:36Z
    found_via: atomic queue claim (lane code-y)
    verified: Issue #3363 OPEN, no hard-stop labels; claim labels already synced (queue/claimed, status/in-progress, work/assigned). Execution-lane assignment for task 8232 is opencode — the bound opencode claimant session owns the triage work; this lane does not work it directly. Attempts 22/24 after repeated unlaunched handoffs.
    next: Claimant launches the bound opencode session for task 8232.

  11. added
    queue/queuedHas a queued task in the Supabase agent queue
    and removed
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    on Nov 5, 2026
  12. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

    • Agent: fleet monitor
    • Session / ID: task 8232 (repo-fleet-monitor run 2026-11-05T15:45:48Z)
    • Found via: monitor reconciliation (Duty 1 claim/label divergence repair)
    • Task: Claim evaporated: task 8232 is queued and unclaimed in repo-health-code-pilot, but this issue still carried claimed labels. Labels reset to the truth (queue/queued + status/needs-triage). Checkpoint stage at evaporation: handed_off.
    • Expectation: The next lane claim picks task 8232 up from the queued state and posts a fresh pickup note.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/pm-stackpm-stack (Pad/Grist) in developing-today/codeeffort/sSmall: expected under 2 hours of workkind/infrastructureInfrastructure / host-portability workmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)queue/queuedHas a queued task in the Supabase agent queuesource/creatorFiled by the new-issue-creator jobstatus/needs-triageNot yet triaged; needs a first looktask/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions