Skip to content

design(pm-stack): chaos/rotation drills — scheduled game-days (kill collector, age the feed, drop a service) verifying banners, watchdogs, and self-healing fire #1283

Open

Description

@dezren39

Part of epic #1184 (PM stack coherence — wave 2, 2026-10-26).

The PM stack's failure modes are silent by default: a dead collector, an aged feed, a rejected orchestration section, or a down service have all presented as "everything is fine" at least once (#1110 being the worked example). Health pages and watchdogs only help if they actually fire — and that is only ever tested by accident. Scheduled chaos/rotation drills make it deliberate: on a cadence, a drill injects one known fault (kill the fleet-feed collector, artificially age the feed, drop one component service, corrupt one feed section), then verifies the expected signals fire — the degraded banner on the affected pages, the watchdog entry in NEEDS ORCHESTRATOR, the health page state — and files the drill result automatically as an issue comment (or a new issue when a signal does NOT fire). Drills run against the deployed stack in a maintenance window, restore everything they touched, and never run two faults at once.

Acceptance:

  • A documented drill schedule exists (at least collector-kill, feed-aging, and one service-drop), runnable on demand and on cadence.
  • Each drill verifies named expected signals (banner / watchdog / health state) and records pass/fail per signal.
  • A failed signal files an issue automatically under epic epic(dashboard): PM stack coherence - single-URL, fresh data, triage-able, hierarchical #1184 with the drill evidence attached; a passed drill posts its result to the tracking issue.
  • Drills restore all touched state (verified by a post-drill health read) and are interlocked against overlapping with each other or with a real ongoing incident flag.

Acceptance criteria

  • A scheduled drill set exists (kill collector, age the feed, drop a service — at minimum these three) and each drill verifies the expected banner/watchdog/self-healing actually fires.
  • A failed drill files an issue automatically under epic epic(dashboard): PM stack coherence - single-URL, fresh data, triage-able, hierarchical #1184 with the drill evidence attached; a passed drill posts its result to the tracking issue.
  • Drills restore all touched state (verified by a post-drill health read) and are interlocked against overlapping each other or a real ongoing incident flag.

Activity

  1. developing-today commented on Oct 27, 2026

    @developing-today
    Contributor
  2. added
    source/humanFiled directly by a human
    priority/lowNice to have; do when convenient
    effort/mMedium: expected under 1 day of work
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 27, 2026
  3. dezren39 commented on Oct 27, 2026

    @dezren39
    MemberAuthor

    Intake review

    Related: epic #1184 (wave 2 parent), #1110 (the silent-failure worked example named in the body).

    Notes: title marks this as design-first; the drill implementations can split into follow-up slices once the design (interlocks, restore verification, evidence format) is settled. Priority set low: valuable hardening, but the watchdogs it tests are already in place from earlier waves.

    Risks: a drill that mis-restores state creates the silent failure it tests for — the post-drill health read and incident interlock are non-negotiable parts of the design, not polish.

    Suggested approach: design note first (one page in planning/), then implement the cheapest drill (age the feed) end to end before generalising.

  4. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed on Oct 28, 2026
  5. 24 remaining items

  6. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    task/triageQueue packet kind: verify, reproduce, and route this item
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    on Nov 3, 2026
  7. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    Second drill slice of this issue is implemented and open for review: #4920 (queue/7919-1283-age-feed-drill), queue task 7919.

    Not done in this run: the on-demand live run against the deployed stack (packet test 3). That runs in the first scheduled/manual maintenance window after the merge; the drill always restores via trap, so a mid-drill interruption still leaves a fresh-feed path.

    Remaining scope on this issue: the third slice, the service-drop drill.

  8. dezren39 commented on Nov 8, 2026

    @dezren39
    MemberAuthor

    Partial verification — staying open (2026-11-07 done-task-only audit, tracking: #7016).

    Queue task(s) [2538, 2667, 7690, 7919] were marked done, and some work did land:

    No merged change closes this issue's full scope, so the done status is not treated as completion. Remainder re-queued as triage task 11561.

  9. dezren39 commented on Nov 8, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done (triage)

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/mMedium: expected under 1 day of workkind/featureNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/lowNice to have; do when convenientsource/humanFiled directly by a humanstatus:in-review

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions