Skip to content

feat(aggregator): installable PWA + push notifications — NEEDS DREW and quota walls reach Drew's phone within a minute #1254

Closed

Description

@dezren39

Part of epic #1184 (PM stack coherence — ideal-system design series, 2026-10-26).

Why

Drew reviews this stack from his phone, but today the dashboard is pull-only: a NEEDS DREW item or a quota wall can sit for hours until he happens to open the page. As an installable PWA with push notifications, the stack can reach him — new NEEDS DREW items and quota walls notify within a minute, deep-linking straight to the item's triage view.

Design questions to answer

  • Notification classes and defaults: NEEDS DREW, quota wall / near-wall, stack health failure, blocked-on-Drew age — which are on by default and how does Drew subscribe per class?
  • Quiet hours and batching: how are non-urgent classes batched, and what breaks through quiet hours?
  • Delivery path: Web Push via a service worker — where do subscriptions live, and how does delivery work when the aggregator is tailnet-only vs behind Access (design(pm-stack): one public URL for the dashboard behind Cloudflare Access (settled access model, not yet implemented) #1182)?
  • Deep-link contract: every notification lands on a triage-capable view of that exact item (mobile), never a generic home page.
  • Anti-fatigue: dedupe, escalation cadence for unacknowledged NEEDS DREW items, and a weekly 'notifications sent vs acted on' measure.

Acceptance

Acceptance criteria

  • A design note is landed in the repo doc/ answering the design questions above: notification classes/defaults, quiet hours and batching, the Web Push delivery path and subscription storage, and the deep-link contract.
  • Implementation issues are filed and linked as sub-issues of epic(dashboard): PM stack coherence - single-URL, fresh data, triage-able, hierarchical #1184.
  • Open questions needing Drew are named explicitly in the design note (the issue title already flags one: notification defaults are Drew's call).
  • Every notification deep-links to a triage-capable view of the exact item, and an anti-fatigue measure (dedupe + a sent-vs-acted-on count) is part of the design.

Activity

  1. added
    kind/featureNew feature or capability request
    app/pm-stackpm-stack (Pad/Grist) in developing-today/code
    on Oct 27, 2026
  2. developing-today commented on Oct 27, 2026

    @developing-today
    Contributor
  3. added
    priority/normalOrdinary priority (the default)
    effort/lLarge: multi-day or open-ended; expect staged check-ins
    source/humanFiled directly by a human
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 28, 2026
  4. dezren39 commented on Oct 28, 2026

    @dezren39
    MemberAuthor

    Intake review

    Related: epic #1184 (parent) · #1182 (the public-URL/Access design — the delivery path differs sharply between tailnet-only and behind-Access, so this design depends on it).

    Notes: Still live — verified this run: a fresh API search finds no PR referencing this issue, and no PWA installability, service worker, or notification classes exist on main yet. The issue arrived with a ## Acceptance section; the appended ## Acceptance criteria formalizes it. effort/l: PWA + push spans service worker, subscription storage, and per-class policy.

    Risks / suggested approach: Design-only deliverable in this issue: the acceptance bar is the landed design note plus filed, linked implementation issues — per the standing rule, a design with no implementation link is not finished work. Notification fatigue is the named failure mode — the design's dedupe/batching answers matter more than the plumbing. The title's "NEEDS DREW" flag is about subscription defaults, not a blocker on writing the design note.

    Correction (repo-fleet-monitor, 2026-10-28T03:45Z): the original version of this comment cited a merged "PR #1239" as a partial building block — that reference came from a corrupted tool output during the monitor run and was wrong: #1239 is an unrelated open issue, and no such PR exists (verified directly against the GitHub API). It has been removed; apologies for the noise.

    — repo-fleet-monitor intake pass, 2026-10-28T03:33Z (corrected 03:45Z)

  5. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed on Nov 1, 2026
  6. 12 remaining items

  7. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    queue/claimedQueue worker lifecycle state
    and removed
    queue/claimedQueue worker lifecycle state
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 1, 2026
  8. added a commit that references this issue on Nov 1, 2026
  9. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    agent-note:v1 — queue task 4957 (lane E) — done: design landed, closing on this issue's own acceptance

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/lLarge: multi-day or open-ended; expect staged check-inskind/featureNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)source/humanFiled directly by a human

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions