Risk Classification

Signal-based decisions that drive every delegation choice

The three tiers

Trivial Delegate to a worktree-isolated engineer. No Skeptic. No brief file. The conductor never edits the shippable tree directly.
Low Direct action. Brief inline self-check only. No Worker spawn. No Skeptic.
Elevated Worker + fresh independent Skeptic. State the classification before starting. Any single Elevated signal triggers this path.
A fourth path exists: Elevated + Cleanup - Worker, then Skeptic, then /simplify, then a narrow second Skeptic pass. Used when the diff accumulates cruft that warrants a dedicated cleanup round.

The tier table

Level Delegation Review Declaration
Trivial Worktree-isolated engineer (no Skeptic, no brief) None Silent
Low Direct action Brief inline self-check Silent
Elevated Worker Fresh independent Skeptic Stated before starting
Elevated + Cleanup Worker Skeptic -> /simplify -> Skeptic (narrow) Stated before starting
When in doubt, classify as Elevated. Risk is assessed by signal, not by the conductor's subjective estimate of difficulty. A conductor that re-evaluates the spawn decision because an edit "feels straightforward" is violating the protocol - regardless of whether the output turns out to be correct.

Elevated signals - what pushes a task up

Scope and effect

  • Any code edit with behavioral effect (write/modify/delete)
  • Multi-file change (any size)
  • New file creation (any file)
  • Changes to shared utilities (single-file but high blast radius)
  • Logic with emergent/non-obvious cross-component interactions

Domain and reversibility

  • Security / auth / crypto / payments / secrets
  • Irreversible operation (delete, migration, schema change, force push)
  • Architecture decision constraining future choices
  • Modifies protocol or infrastructure files
  • Production or shared state
  • Configuration changes

Any one of these signals is sufficient. There is no majority vote - a single match escalates.

Elevated signals - continued

Externals and unknowns

  • Touches external APIs or services
  • Unfamiliar codebase area
  • Bash with side effects (writes, deletes, network, DB)
  • Anything where a mistake costs time or data
  • User signals high stakes

Planning and investigation

  • Document synthesis / architecture / planning
  • Research that produces an artifact (doc, plan, recommendation)
  • Context preservation: a sequence of exploratory tool calls collectively constitutes investigation - classify by the task, not the individual call
No re-deliberation on spawn decisions. Once a task matches an Elevated signal, classify it and spawn. The conductor must not re-evaluate at each step - risk is assessed once, at classification time.

Trivial signals - all must hold

ALL of the following must hold - any single disqualifier pushes to Elevated:

  • Touches exactly one file (or one file plus its colocated test/snapshot)
  • No change to control flow, data flow, state shape, API surface, or types
  • No change to shared design tokens, theme files, config, env, or CI
  • No change to anything a downstream consumer imports (exported symbols, public CSS classes, route paths)
  • Reversible with a one-line revert
  • No security, auth, permissions, billing, or PII surface involved

Canonical Trivial examples: a hardcoded color, padding, or font-size in one component; a button label or alt text; a typo fix; Tailwind class tweaks on one element.

NOT Trivial even if it feels small: edits to tailwind.config.*, theme files, CSS variables, or any shared token file; any change touching 2+ files; anything in auth, payments, or data-handling paths; renames, even local ones.

The Low path and context preservation

Low-risk actions include: clearly reversible reads (no writes); diagnostic-only logging across any number of files where every change has zero behavioral effect; file renaming with no content changes; UI-only copy changes; targeted wording fixes to already-reviewed content.

Context preservation rule: apply risk to the task, not the individual tool call.

  • A read is Low when you know what you are looking for and are confirming a specific fact
  • A read is Elevated when the goal is to understand something - tracing behavior, finding a root cause, or mapping blast radius
  • A sequence of reads, greps, and bashes that collectively constitute investigation is an Elevated task - regardless of whether each individual step looks Low in isolation
If you find yourself making exploratory tool calls to understand an unfamiliar area, stop and reclassify as Elevated. Spawn the appropriate named agent: investigator for codebase exploration, debugger for root cause analysis, architect for design questions.

Letter equals spirit

"Violating the letter of these rules is violating the spirit. 'I followed the intent' after skipping a required step is not a defense."

Downward tie-break counterweight: the default "when in doubt, classify Elevated" is overridden only when a named Low or Trivial override's full definition - including every exclusion clause - is affirmatively satisfied and zero other Elevated signals are present.

  • "Provably small" means the override can be named and each exclusion individually confirmed against the diff
  • A general impression that the change looks safe does not qualify

The declaration format makes classification explicit:

Risk: Elevated - [specific signal]
Tier: 2 (role default)
Applying adversarial review.
Classify once, act once. A conductor that self-negotiates around the spawn threshold is violating the protocol regardless of whether the output happens to be correct.

Signal in. Decision out.

One Elevated signal is enough. When in doubt, go Elevated.

github.com/Space-Dinosaurs/DinoStack