DEVOP-573: author 2026 Q1 tabletop scenario doc (eliza-allora-plugin)#5
Open
srt0422 wants to merge 2 commits into
Open
DEVOP-573: author 2026 Q1 tabletop scenario doc (eliza-allora-plugin)#5srt0422 wants to merge 2 commits into
srt0422 wants to merge 2 commits into
Conversation
There was a problem hiding this comment.
cubic analysis
1 issue found across 1 file
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="tabletop/2026-Q1-shai-hulud-eliza.md">
<violation number="1" location="tabletop/2026-Q1-shai-hulud-eliza.md:63">
P2: The founder role is defined as non-participating, but Phase 2 requires founder buy-in for the unpublish decision. Clarify the role so the success criteria are achievable without contradiction.</violation>
</file>
Linked issue analysis
Linked issue: DEVOP-573: Tabletop exercise: simulate eliza-allora-plugin poisoned publish
| Status | Acceptance criteria | Notes |
|---|---|---|
| ✅ | Scenario: assume `eliza-allora-plugin@` was published with a postinstall payload yesterday at 4pm. | The PR includes a detailed injected scenario with the 04:00 PM yesterday timestamp, exfil steps, IOC timeline, and T+0 trigger. |
| ✅ | Roles assigned: incident lead, communicator, executor (plus reps/observer). | The doc contains a roles table with assigned roles and explicit instructions for each role. |
| ✅ | Walk through every runbook section: detection → triage → containment → rotation → republish → post-mortem. | The PR defines six timed phases keyed to the runbook sections and describes success/failure modes for each phase. |
| ✅ | Time-to-clean-republish target: <30 min (with milestones T+5 / T+10 / T+20 / T+30). | The document explicitly specifies the 30-minute target and breaks it into the stated milestones and phase targets. |
| ✅ | Debrief script that produces ticket inputs (so gaps found can be documented later). | The PR includes a debrief section with six verbatim questions and instructions to turn answers into Linear tickets. |
Architecture diagram
sequenceDiagram
participant Dev as DevOps Engineer
participant GH as GitHub
participant Runner as GHA Runner
participant NPM as npm Registry
participant CF as CloudFlare Worker
participant Socket as Socket.dev
participant Sweep as Daily IOC Sweep
participant Alert as #security-alerts
participant Slack as #tabletop-2026-q1
participant Facil as Facilitator
participant Obs as Founder Observer
Note over Dev,Obs: DEVOP-573 Tabletop Exercise - Injected Scenario Flow
alt T-16 hours: Poisoned Publish
Dev->>GH: Push code to allora-network/eliza-allora-plugin
GH->>Runner: Trigger release workflow
Runner->>Runner: Publish eliza-allora-plugin@<latest>
Runner->>NPM: npm publish
NPM-->>Dev: Published version
Note over NPM: Tarball includes postinstall payload
NPM->>Runner: Install triggers postinstall
Runner->>CF: Exfil ~/.npmrc _authToken
Runner->>CF: Exfil .git/config credentials
CF-->>Runner: Confirmation
Runner->>NPM: Republish with bumped version <latest>.1
end
Note over Socket,Alert: T-13.5 hours: Detection
Socket->>Socket: Scan npm for malicious packages
Socket->>Socket: Flag eliza-allora-plugin@<latest> & @<latest>.1
Socket-->>Sweep: Advisory feed
Note over Sweep,Alert: T+0: Exercise Start
Sweep->>Sweep: Org-wide IOC sweep workflow
Sweep->>Alert: Open incident-response ticket
Alert->>Alert: Post alert in #security-alerts
Facil->>Slack: Paste the injected scenario alert (T+0)
Note over Facil: Exercise clock starts on first "ack"
alt Phase 1: Detection + Triage (T+5 target)
Dev->>Slack: Acknowledge alert (ack)
Dev->>Dev: Walk triage decision tree
Dev->>Dev: IOC match → did we publish? → yes → Scenario C
Dev->>Slack: Open timeline thread
Note over Dev,Slack: Success: Scenario C identified within 5 minutes
else Failure: Skip IOC cross-check
Dev->>Dev: Assume worst without verification
end
alt Phase 2: Stop the Bleed (T+10 target)
Dev->>Dev: Instruct executor to deprecate npm versions
Dev->>NPM: npm deprecate (simulated)
Dev->>Dev: Decide on unpublish (consult founder)
Dev->>Dev: Search for consumer repos via gh
else Failure: Try to delete package entirely
Dev->>NPM: Attempt full deletion (runbook violation)
end
alt Phase 3: Audit Blast Radius (T+20 target)
Dev->>Dev: List secrets the publish workflow could read
Dev->>Dev: gh search for consumer repos
Dev->>Dev: Draft GitHub security advisory
Dev->>Dev: Draft downstream-consumer notification
Dev->>Dev: Backend/Frontend reps review notification
else Failure: Rotate before listing secrets
Dev->>Dev: Skip secret discovery step
end
alt Phase 4: Clean Republish (T+30 target)
Dev->>GH: Use clean GHA-hosted runner (not local)
Dev->>Dev: Read release.yml workflow
Dev->>Dev: Cut fresh minor bump tag
Dev->>GH: Trigger release workflow
GH->>Runner: Run clean publish
Runner->>NPM: Publish clean version (simulated)
Dev->>Dev: Send advisory + notification (simulated)
else Failure: Use local machine
Dev->>Dev: Attempt republish from local (worst failure mode)
end
alt Phase 5: Token Rotation (post-clock)
Dev->>Dev: Walk rotation list from Phase 3
Dev->>Dev: Note OIDC migration opportunities
end
alt Phase 6: Post-Mortem
Dev->>Dev: Draft timeline from channel transcript
Dev->>Dev: Identify 16-hour detection blind spot
Dev->>Dev: File action items as Linear tickets
end
Note over Facil,Obs: Debrief (30 minutes after clock stops)
Facil->>Slack: Run 6 debrief questions
Slak->>Facil: Team provides verbatim responses
Facil->>Facil: Convert responses to ticket descriptions
Facil->>Facil: Generate output checklist (Linear, runbook PR, lessons learned)
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.
srt0422
pushed a commit
to srt0422/.github
that referenced
this pull request
May 13, 2026
The founder role was defined as silent/non-participating, but Phase 2 also required "founder buy-in" for the unpublish decision — a direct contradiction that made the success criteria unachievable as written. Aligns the doc with SECURITY-RUNBOOK.md (DEVOP-571), which scopes the founder-approval gate to full-package deletion only. The per-version `npm unpublish` decision is the incident lead's call. - Role table: founder is a silent observer; may break silence ONLY if the team escalates to a full-package delete gate (per runbook §5). - Phase 2 step: lead owns the per-version unpublish call; observer just notes whether the lead announced the decision clearly. - Phase 2 success: drops "founder buy-in"; substitutes "decision announced in channel," matching the runbook's actual authority model. Resolves cubic P2 finding on PR allora-network#5. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Documents the inaugural Shai-Hulud-class tabletop exercise: an injected "eliza-allora-plugin was published with a postinstall payload yesterday at 4pm" scenario that walks the team end-to-end through the SECURITY-RUNBOOK (DEVOP-571). The doc is operational, not a writeup. It contains: * The injected scenario, including the specific exfil mechanics, the IOC discovery timeline, and the T+0 trigger. * Pre-assigned roles (incident lead, communicator, executor, BE rep, FE rep, founder observer-only) with explicit don't-skip-a-role rule. * Six phases keyed to runbook sections, each with a target elapsed time and explicit success/failure modes the facilitator watches for. * The 30-minute time-to-clean-republish target broken into 4 phases (T+5 / T+10 / T+20 / T+30) so participants can self-check progress mid-exercise. * A debrief script (6 questions, in order) that produces ticket inputs verbatim from the team's own language. * Output checklist for the facilitator (Linear tickets, runbook PR, lessons-learned section update, next-year calendar invite). * Notes-from-runbook-author section identifying the three seams in the runbook that the exercise should specifically stress. The exercise itself is a team activity and is NOT considered complete until the run + debrief actually happen. DEVOP-573 stays In Review until the facilitator schedules and runs the live session. Blocks-by: DEVOP-571 (runbook). PR allora-network#3 in this repo authors the runbook; this PR cross-references it. Refs: https://linear.app/alloralabs/issue/DEVOP-573 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The founder role was defined as silent/non-participating, but Phase 2 also required "founder buy-in" for the unpublish decision — a direct contradiction that made the success criteria unachievable as written. Aligns the doc with SECURITY-RUNBOOK.md (DEVOP-571), which scopes the founder-approval gate to full-package deletion only. The per-version `npm unpublish` decision is the incident lead's call. - Role table: founder is a silent observer; may break silence ONLY if the team escalates to a full-package delete gate (per runbook §5). - Phase 2 step: lead owns the per-version unpublish call; observer just notes whether the lead announced the decision clearly. - Phase 2 success: drops "founder buy-in"; substitutes "decision announced in channel," matching the runbook's actual authority model. Resolves cubic P2 finding on PR allora-network#5. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
7c473fb to
5ee8654
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Documents the inaugural Shai-Hulud-class tabletop exercise: an injected "
eliza-allora-pluginwas published with a postinstall payload yesterday at 4pm" scenario that walks the team end-to-end throughSECURITY-RUNBOOK.md(DEVOP-571).The doc itself is an operational artifact — it's the script the facilitator runs on the day of the exercise. The exercise is a team activity and is NOT considered complete until the run + debrief have actually happened.
What's in the doc
Why this PR is opened now (before DEVOP-571 merges)
Per the project plan: "the actual exercise requires the team — note that on the ticket." This PR satisfies the authoring requirement so the facilitator has a complete artifact to schedule against. The scenario doc cross-references the runbook by relative path; once both PRs merge the links resolve correctly.
Linear
https://linear.app/alloralabs/issue/DEVOP-573
Status note
This ticket stays in
In Reviewafter the doc is merged. It moves toDoneonly after the live exercise has run and the debrief outputs (Linear tickets, runbook PR) have been filed.Test plan
🤖 Generated with Claude Code
Summary by cubic
Adds the 2026 Q1 tabletop exercise script for a poisoned publish of
eliza-allora-plugin, guiding the team throughSECURITY-RUNBOOK.mdwith a 30-minute clean-republish goal. Clarifies authority boundaries to match the runbook so the exercise is runnable as written.New Features
tabletop/2026-Q1-shai-hulud-eliza.mdwith exfil mechanics, IOC timeline, and T+0 trigger.Bug Fixes
npm unpublishis the incident lead’s call; founder approval only gates full-package delete; Phase 2 success checks updated.Written for commit 5ee8654. Summary will update on new commits. Review in cubic