Skip to content

Phase 3 (audit) of #3702 — alert-throat contract statement, seam check + dispositions #3703

Closed

Description

@dezren39

Phase 3 of design #3702 — closing audit + contract statement (aggregator alert throat)

Parent design: #3702 ("delivered means delivered — one truth contract for the aggregator alert throat"). Design doc: files/designs/code-aggregator-alert-throat-contract.md in the keep-the-four-repos-healthy goal workspace. Audit baseline: origin/main a3acf3b0.

Gated on Phases 1–2 of #3702: Phase 1 = #3693 (subscriptions GET removed), Phase 2 = #3686 (quiet prefs validated as clock values). Do not start the audit before both land. (Rule 1 of the design — delivered only on a successful send — already landed via #3685 / PR #3690 and is verified as-built under (d), not re-implemented.)

Scope

(a) Contract statement: write the design's contract (truthful state transitions; subscription key material never leaves the server; prefs validated as values with per-field default fallback) into the pm-stack/aggregator/src/alerts.ts module header, beside the existing #3676 design notes.

(b) Seam check: verify AlertsStore.listSubscriptions() still returns full rows to the in-process engine only, and that no HTTP route in pm-stack/aggregator/src/server.ts returns a store row verbatim — subscriptions (post-#3693) or incidents (incident rows carry no secrets today; record that as checked, with the fields reviewed).

(c) Required dispositions — each recorded on #3702 with its reason, and either fixed under this issue (if small and inside the throat) or filed as a named follow-up:

  1. Already-stored quiet rows carrying out-of-range times (heal-by-remerge on read / one-time cleanup / leave, decided against feat(aggregator): notification engine — class triggers, dedupe, quiet hours, escalation (#1254 slice c) #3317's consumer shape).
  2. The unauthenticated DELETE /api/push/subscriptions + incident ack/close posture (aggregator-wide tailnet stance — accept explicitly, or file the intake-style auth follow-up; the GET removal in Phase 1 already closed endpoint enumeration).
  3. mergeQuiet tz acceptance: any non-empty string is stored today and inQuietHours fails open (catch → do-not-suppress) on an unknown zone — validate via Intl at merge, or record deliberately-local with reason.
  4. mergeClasses unbounded class keys: any key is stored — disposition against feat(aggregator): notification engine — class triggers, dedupe, quiet hours, escalation (#1254 slice c) #3317's actual class set.

(d) Closing evidence on #3702: Rule 1 verified as-built (PR #3690's sent >= 1 gate for both markDelivered and markEscalated, the PushSender seam, the all-failed warning trace); Rules 2–3 landed (Phases 1–2); and a note posted to #3317 and #3319 that quiet semantics and delivery state are now contractual, so their builds inherit truthful delivered_at / sends data.

Acceptance criteria

🤖 Filed by the design architect (pass 32, 2026-11-01) as Phase 3 of #3702.

Activity

  1. added
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Nov 1, 2026
  2. developing-today commented on Nov 1, 2026

    @developing-today
    Contributor
  3. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · filed as Phase 3 of design #3702

  4. added
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    and removed
    status/blockedQueue or user escalation state
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 1, 2026
  5. 163 remaining items

  6. removed
    queue/queuedHas a queued task in the Supabase agent queue
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 3, 2026
  7. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  8. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    agent-note:v1

  9. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  10. added a commit that references this issue on Nov 3, 2026
  11. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

    Phase 3 complete, all outcomes first-verbed then recorded:

  12. developing-today commented on Nov 3, 2026

    @developing-today
    Contributor

    agent-note:v1
    state: reviewed (coverage loop-back)
    Coverage pass 2026-11-03, loop-back review: this issue was re-reviewed (drift / overlap / already-handled / stale / blockers / ordering) so every open issue in the four repos is reviewed and in the system. Verdict: still live; in the system as task 8534 (triage, queued, priority 30) in repo-health-code-pilot. Labels audited and synced. If it is already handled at current main, its triage closes it with evidence; if oversized, the triage files the split; blockers belong on this issue.
    Found via: coverage loop-back 2026-11-03

  13. removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 3, 2026
  14. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done (triage, already_done)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/aggregatorPackage/app: aggregator (pm-stack in this repo)app/pm-stackpm-stack (Pad/Grist) in developing-today/codekind/enhancementsource/design-architectFiled by the repo design architect jobtask/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