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. 19 remaining items

  6. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  7. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  8. 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.

  9. 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
  10. 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.
  11. developing-today commented on Nov 8, 2026

    @developing-today
    Contributor

    🤖 Agent note · handed off

  12. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    work/assignedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 8, 2026
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/parkedQueue task is parked (waiting on CI, time, or an event)source/creatorFiled by the new-issue-creator jobstatus/parkedDeliberately paused with a recorded resume conditiontask/triageQueue packet kind: verify, reproduce, and route this itemwork/assignedQueue worker lifecycle state

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions