---
name: discovery
description: Run a discovery/spike initiative — exploratory work whose deliverable is a LEARNING, not a feature. Use when the question "should we build this / how / is it feasible?" must be answered before a PRD can honestly exist; the discovery lane (D56) contracts on a spike brief (question + timebox + disposition) instead of a PRD + rubric.
version: 1.0.0
owner: wawan
risk: low
category: planning
scope: read:okf, write:planning/prd
---

# discovery — Run a spike through the discovery lane

This skill runs the **discovery lane** ([D56](/okf/products/pmos/adr/d56-initiative-lanes.md)): the
honest path for prototyping, feasibility spikes, and research questions. Eval-first is a paradox
here — the work exists to *discover* its own done-criteria — so the lane contracts on a **question
and a timebox**, not requirements, and closes with a mandatory **disposition** instead of a rubric
verdict. It resolves the stress-test finding that pre-certainty work either got blocked, got a
fake rubric, or escaped the record entirely.

> **Format:** three-level progressive disclosure ([SKILL-FORMAT](/skills/SKILL-FORMAT.md)).
> Level 1 above is the trigger; this body is Level 2.

## When to use vs. not

- **Use** when the deliverable is an answer: "is X feasible?", "which approach?", "what should the
  PRD even say?" — and you could not write honest done-criteria today.
- **Do not use** when you *can* write done-criteria — that is a `feature` initiative
  ([prd skill](/skills/prd.skill)). A spike that is secretly a small feature corrupts the lane.
- **Do not use** for urgent production fixes — that is the `incident` lane.
- A spike is still **anchored work** (D21): no anchor — a parent KR, or a declared health budget
  `health:<id>` (D59) — no spike.

## Procedure

1. **Anchor and create the initiative** in the `discovery` lane.
   - File mode: write `lane: discovery` in the initiative frontmatter.
   - Do not write `type: discovery` there. `type` is D63's registry key, and its value is `Initiative`.
   - Tool form: `create_initiative({id, title, parent_kr, type: 'discovery'})`. The argument keeps
     its name. Read it as "record the equivalent in file-mode state" (AGENTS.md).
1b. **Existing surface? Understand it first.** If answering the question honestly requires reading
   code that already exists, run an [explain-surface](/skills/explain-surface.skill) pass on
   that region — in a fresh context, **before** writing the brief. A spike aimed at a system the PM
   does not understand produces a learning they cannot act on. Greenfield → skip.
2. **Write the spike brief** from
   [spike-brief-template](/okf/core/templates/spike-brief-template.md) into
   `/planning/prd/<id>-spike.md`; set it as the initiative's `prd_path`. The Initiative Gate
   requires it — it is the lane's spec artifact. No rubric is required (one may be added for a
   graded spike, but never fake one).
3. **Contract on the question.** The PM approves the brief — the singular question, the timebox,
   the spend cap. That approval is the lane's pre-run contract; done-criteria are deliberately
   absent.
4. **Run the spike inside the box.** Branch `initiative/<id>` as usual. Throwaway code is
   expected and *stays throwaway* — quality bars are suspended for prototype code, which is
   exactly why it must never silently ship. The spike ends when the timebox ends, answered or
   not; "inconclusive" is a recordable outcome, not a failure to hide.
5. **Close the disposition — mandatory.** Fill the brief's disposition section:
   - `learned` — question answered; evidence recorded; nothing further built.
   - `promoted` — the learning justifies building: open a **new `feature` initiative with a real
     PRD + rubric** and link it. The spike never silently becomes the product; prototype code is
     rewritten under the feature lane's gates, or its reuse is explicitly PM-approved.
   - `discarded` — dead end; one line on why (that line is the value).
   Update the initiative record (stage/status) to match.
6. **Log the run and the learning** (`log_agent_run`; `log_discovery` for what was learned —
   discoveries are this lane's primary output). Friction goes to the friction log as always.

## Quality bar

Before closing: question was singular and answerable; timebox respected (or its breach escalated,
not silently extended); disposition filled with evidence; `promoted` links a real feature-lane
initiative; prototype code deleted or explicitly quarantined.

## Level 3 sub-cases

- None yet. (Multi-question research programs spanning several spikes: author
  `discovery-program.md` on first need.)
