Skip to content
Back to skills

Spike 360

ASecurity

Interrogate authority before planning a feature, refactor, migration, rewrite, backfill, event-sourcing design, dual-write setup, new authoritative store, or system-of-record change. Fire whenever a proposal might introduce, move, duplicate, or replace authoritative state — or involves event sourcing or "event sourced," a "source of truth," "authoritative" data, dual-writes, replay, projections, replacing persistence, a new data store, or "design the architecture for / rewrite X" — and classi...

  • 5 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 25, 2026
businessgoapi

Works with

  • api

Security analysis

A100/100

Scanned September 25, 2026

npx -y skills add HiQS-Labs/XYZ-forge --skill spike-360 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Spike 360?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Spike 360
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/hiqs-labs-spike-360/badge)](https://www.skillsdirectory.com/skills/hiqs-labs-spike-360)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: spike-360
description: >
  Interrogate authority before planning a feature, refactor, migration, rewrite,
  backfill, event-sourcing design, dual-write setup, new authoritative store, or
  system-of-record change. Fire whenever a proposal might introduce, move,
  duplicate, or replace authoritative state — or involves event sourcing or
  "event sourced," a "source of truth," "authoritative" data, dual-writes,
  replay, projections, replacing persistence, a new data store, or "design the
  architecture for / rewrite X" — and classify authority before writing any plan
  or reaching for a seam or architecture spike. The five levels: audit-only, read
  projection, dual-written peer, source of truth, replacement runtime; for
  audit-only or read-projection cases, fire just long enough to classify and
  stop, and for dual-written peer and above, require the surface and
  failure-scenario checks first. Triggering is deliberately broad — the skill
  classifies first and stops fast when the level is light. Skip only for a
  localized bugfix with no authority change, or when the authority level is
  already classified, agreed, and its required surface and failure-scenario pass
  is already complete.
---

# Spike 360

Interrogate the premise before you design the architecture.

The failure this prevents: a plan jumps straight to "event-sourced core" and only discovers, three phases in, that "source of truth" changes the entire problem class — new invariants, new failure modes, a migration nobody scoped. The fix is to change the first move from *design the architecture* to *interrogate the premise*.

## Core idea

Before writing any plan, decide **what authority the new system will hold**. That classification — not the design — sets the problem class. Most proposals that sound like "a new system of record" are actually solved by a smaller, lower-authority mechanism — often just a ledger — that the existing source of truth never has to defer to. Find that out first, on purpose, before a single phase or schema is drawn.

## Hard rule

> Classify the authority level before you write any migration plan — and at dual-written peer or above, audit the current read / write / side-effect surfaces before writing it too.

If you catch yourself sketching phases, schemas, or an "event-sourced core" before Gate 2 is answered, stop and answer Gate 2.

## The five gates (in order)

**Gate 1 — Problem narrowing.** What user or business problem actually triggered this? What is the smallest change that solves *only* that? What would be overbuilding?

**Gate 2 — Authority classification (the pivot).** What authority does the new system hold?

- **Audit-only** — it observes; nothing reads it back as truth.
- **Read projection** — a derived view; the old store stays authoritative.
- **Dual-written peer** — written alongside the old store; both claim truth.
- **Source of truth** — other systems now defer to it.
- **Replacement runtime** — it *becomes* the system; the old one is retired.

This ladder is also a reversibility ladder: audit-only and read projection are Easy to undo; dual-written peer, source of truth, and replacement runtime run Costly to One-way door once two systems claim truth or readers depend on the new one. **Those three trigger the heavy checklist (Gates 3-4)** — and a far larger scope than the proposal usually admits. Dual-written peer is in that tier on purpose: two writers means divergence, ordering, and reconciliation risk from day one — one of the most failure-prone designs this skill exists to catch.

**Gate 3 — Current-state audit** (dual-written peer and up). Enumerate, concretely:

- every **reader** and every **writer** of the state being changed
- every **persisted field** and every **external side effect** (emails, webhooks, payments)
- **transient vs resting** state — what is mid-flight vs settled
- **startup / load / backfill** behavior — how state is reconstituted from cold

**Gate 4 — Failure-scenario pass** (dual-written peer and up). For each, does the design survive it?

- crash *before* the write
- crash *after* the write, before the downstream mutation
- crash *after* an external side effect, before the write
- concurrent handlers interleaving across an `await`, async boundary, transaction gap, or retry boundary
- replay from an empty / brand-new log
- replay from a partial or corrupt tail
- legacy import with missing fields
- (dual-written peer) the two stores disagree — which one wins, and when is the divergence detected and reconciled?

**Gate 5 — Stop / Go.**

- If a smaller, lower-authority mechanism solves the Gate 1 problem, **recommend that first** — name it (a ledger, projection, cache, report table, reconciliation view, or no new store at all).
- For a **dual-written peer**, do not approve the path unless the design names the winner rule, drift detection, reconciliation process, ordering key, idempotency boundary, and rollback plan.
- If **source of truth** or replacement runtime is still genuinely wanted, **require explicit approval** and list the new invariants it must guarantee from this day forward.

## Output format

Lead with the authority level — it is the line that must survive skimming, because it decides everything after it. Then add only the gates that change the call. A light classification is a few lines; the heavy checklist (Surfaces / Failure scenarios) appears *only* at dual-written peer and up. Never pad.

**Authority level:** [Audit-only / Read projection / Dual-written peer / Source of truth / Replacement runtime] — [one line: what that means for scope and reversibility].

**Real problem:** [the triggering problem, one sentence] → **Smallest fix:** [the narrowest change that solves only that].

**Overbuild:** [what the current proposal adds beyond the smallest fix — or "none, the proposal is already minimal."]

*Dual-written peer and up only — otherwise omit both blocks:*

**Surfaces at risk:** [the readers / writers / persisted fields / side effects / transient-vs-resting / startup-load-backfill that actually bite — not all of them.]

**Failure scenarios:** [only the ones the design does not yet survive, each with the gap in a phrase. If it survives every applicable scenario, say so.]

**Stop / Go:** [Smallest safe mechanism first, named — ledger, projection, cache, report table, or no new store — or: authority shift approved, with the new invariants listed.]

## How this differs from its siblings

- **take-a-step-back** is the general pre-commit reset ("am I solving the right problem?"). spike-360 is its architecture-specific form: it forces a concrete authority classification and, above a threshold, a failure-scenario pass.
- **blast-radius** sizes a path you have *already chosen*. spike-360 fires earlier and questions whether the path's authority level is even the right one — its verdict can feed straight into blast-radius.
- **recon** — the read-only trace of the current system. spike-360 classifies authority *first*; once the level is settled, recon maps the readers, writers, and contracts the approved shape has to live with, and the plan is written against that map. A light audit-only or read-projection verdict stops spike-360 early but does not excuse the trace: recon still runs if the remaining implementation plan meets its trigger. Gate 3's surfaces pass is the classification-sized sample of that audit, not a replacement for it.
- **phase-0-spike** (an external workflow in `~/.claude/workflows/`, not a skill in this repo) maps seams, contract owners, and rollout invariants *after* you have committed to the refactor — it already assumes a source of truth exists (it asks each analyzer for the "contract owner"). spike-360 runs upstream and decides whether a new source of truth should exist *at all*. Run spike-360 first; only a "source of truth — approved" verdict makes phase-0-spike's seam-mapping worth doing.

## When not to escalate

If Gate 2 lands on audit-only or a read projection that the smallest-fix gate already satisfies, **stop there** — dual-written peer and above do not qualify, since a second writer or a new system of record already carries the heavy invariants. Classify it, say "a ledger or projection is enough — ship it," and skip Gates 3-4 entirely. Running the full crash-replay failure pass on an append-only log nothing reads back is exactly the manufactured gravity this suite warns against. The heavy checklist is *earned* by the authority level, not applied by default.

## Example 1 — source-of-truth creep, caught early

Input: "Let's make the orders subsystem event-sourced so we have a full history and a single source of truth for order state."

Output:

> *Before any event-sourcing design — one classification decides the whole scope here.*
>
> **Authority level:** Source of truth, edging toward replacement runtime — every reader of order state would now defer to the event log, not the orders table. One-way door once they do.
>
> **Real problem:** "We can't tell why an order's status changed." → **Smallest fix:** an append-only `order_events` ledger written beside the existing table for history and audit; the table stays authoritative.
>
> **Overbuild:** Event-sourcing makes the log the source of truth, which drags in replay, projections, and a migration of every reader — none of which the "why did status change?" problem requires.
>
> **Surfaces at risk (if you proceed to source of truth):** every order reader (API, fulfillment, billing), the `status` / `total` persisted fields, the payment-capture side effect, and order-load on startup.
>
> **Failure scenarios not yet survived:** crash after payment capture before the event writes (double-charge on replay); replay from a partial tail (orders resurrect in a stale status).
>
> **Stop / Go:** Ledger first — it solves the stated problem with no new invariants. If a true source-of-truth event log is still wanted, that is a separate, explicitly approved decision that must guarantee idempotent, deduplicated side effects (don't rely on exactly-once external effects — design for at-least-once delivery plus idempotency), deterministic replay, and a backfill for every legacy order. Get that approval *before* any plan is written.

## Example 2 — correctly not escalated

Input: "I want to log every admin permission change to a new table so we have an audit trail."

Output:

> **Authority level:** Audit-only — nothing reads the table back as truth; permissions still live where they live. Easy to undo.
>
> **Real problem:** "We have no record of who changed permissions." → **Smallest fix:** an append-only `permission_audit` row written in the same transaction as the change. That *is* the whole job.
>
> **Overbuild:** none — keep it append-only and resist adding reads against it later. The moment something defers to it for current permission state, re-run this check.
>
> No current-state audit or failure-scenario pass needed: an audit log no one reads back does not carry source-of-truth invariants.

## What success looks like

The operator learns the authority level — and therefore the true scope — in the first line, before a single phase or schema is drawn. A proposal that was about to become an event-sourced rewrite gets resized to a ledger; or, if the larger change is genuinely wanted, it walks in with its new invariants named and approved instead of discovered in phase three.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…