Reality-First Engineering
Use this before architecture or broad implementation when a wrong assumption would cause
meaningful rework, data loss, security exposure, irreversible side effects, or a false
acceptance result. It is a small decision gate, not a second project manager, code review,
test suite, or reason to delay a cheap reversible probe.
Do not use it for a small change with known inputs, contracts, and environment, or for
documentation/formatting-only work.
Gate protocol
- State the decision. Write the goal, non-goals, acceptance condition, and the exact
decision that must be made before implementation.
- Separate facts from guesses. Label each relevant item
observed, measured,
inferred, or unknown. An implementation assumption is not evidence. For facts likely to
change, record the source and verification date.
- Choose the smallest probe. For each material unknown that could change the direction,
define one falsifiable experiment with real inputs, a pass condition, a failure condition, a
stop condition, an owner, and an evidence location. Test the highest-impact unknowns first;
stop once the decision is determined instead of building the whole system to discover it.
- Gate the direction. Return
PASS only when the architecture or plan follows from the
available evidence.
BLOCKED: a decisive input, authority, or probe is unavailable, or the evidence disproves
the proposed direction; no safe direction can be chosen.
INCOMPLETE: evidence exists but is partial or ambiguous; narrow to verified work or
report what remains, and never silently treat it as PASS.
Do not cover the gap with a fallback, compatibility path, mock-only branch, or speculative
abstraction.
- Keep the boundary testable. Put external effects behind the existing boundary that
owns them and keep deterministic domain/state logic driven by supplied inputs. A mock may
validate pure logic, but it cannot establish an external fact it replaces. Add a layer only
when a concrete caller or boundary needs it.
One ledger, one epoch
If project-to-act is available, run its --check first and follow its mode. It owns goals,
scope, durable progress, versions, evidence, and acceptance. Record this gate in the existing
canonical source; never create REALITY.md, a second plan, or a parallel status file.
For a managed project, use the existing files (or their equivalent sections):
- overview: constraints, facts, and current unknowns;
- progress: probes, blockers, owners, and next action;
- versions: decisions changed by evidence;
- acceptance: experiment evidence, gate result, and validity.
For an unconfigured one-off project, keep the brief in the task response. Do not initialize
project management merely because this skill loaded. Read the target section again before
writing and validate through project-to-act after writing.
Run one gate per decision batch. Edits and test iterations under the same assumptions do not
restart it. Re-open only when new evidence invalidates an assumption, scope changes, or a new
direction is proposed.
Required brief
REALITY GATE: PASS | BLOCKED | INCOMPLETE
GOAL / NON-GOALS:
DECISION:
OBSERVED:
MEASURED:
INFERRED:
UNKNOWN (material only):
PROBE (repeat for each material unknown): input/context, method, pass/fail,
stop condition, owner, evidence location
DECISION CONSEQUENCE:
LEDGER / NEXT:
After PASS, derive the smallest implementation plan and use normal testing. At completion,
invoke design-integrity-review only when its structural-risk route applies; evaluation or
generation surfaces go through its single behavioral-acceptance route. Neither reviewer
replaces this gate or creates another ledger.
The honest result may be a stop. A clean BLOCKED/INCOMPLETE with a precise next probe is
better than a polished implementation of an unverified premise.
1---2name: reality-first-engineering3description: Establish a short, evidence-backed decision gate before architecture or broad implementation when missing facts, requirements, external behavior, or acceptance criteria could change the direction. Use only for consequential or materially uncertain work.4---56# Reality-First Engineering78Use this before architecture or broad implementation when a wrong assumption would cause9meaningful rework, data loss, security exposure, irreversible side effects, or a false10acceptance result. It is a small decision gate, not a second project manager, code review,11test suite, or reason to delay a cheap reversible probe.1213Do not use it for a small change with known inputs, contracts, and environment, or for14documentation/formatting-only work.1516## Gate protocol17181. **State the decision.** Write the goal, non-goals, acceptance condition, and the exact19 decision that must be made before implementation.202. **Separate facts from guesses.** Label each relevant item `observed`, `measured`,21 `inferred`, or `unknown`. An implementation assumption is not evidence. For facts likely to22 change, record the source and verification date.233. **Choose the smallest probe.** For each material unknown that could change the direction,24 define one falsifiable experiment with real inputs, a pass condition, a failure condition, a25 stop condition, an owner, and an evidence location. Test the highest-impact unknowns first;26 stop once the decision is determined instead of building the whole system to discover it.274. **Gate the direction.** Return `PASS` only when the architecture or plan follows from the28 available evidence.29 - `BLOCKED`: a decisive input, authority, or probe is unavailable, or the evidence disproves30 the proposed direction; no safe direction can be chosen.31 - `INCOMPLETE`: evidence exists but is partial or ambiguous; narrow to verified work or32 report what remains, and never silently treat it as `PASS`.33 Do not cover the gap with a fallback, compatibility path, mock-only branch, or speculative34 abstraction.355. **Keep the boundary testable.** Put external effects behind the existing boundary that36 owns them and keep deterministic domain/state logic driven by supplied inputs. A mock may37 validate pure logic, but it cannot establish an external fact it replaces. Add a layer only38 when a concrete caller or boundary needs it.3940## One ledger, one epoch4142If `project-to-act` is available, run its `--check` first and follow its mode. It owns goals,43scope, durable progress, versions, evidence, and acceptance. Record this gate in the existing44canonical source; never create `REALITY.md`, a second plan, or a parallel status file.4546For a managed project, use the existing files (or their equivalent sections):4748- overview: constraints, facts, and current unknowns;49- progress: probes, blockers, owners, and next action;50- versions: decisions changed by evidence;51- acceptance: experiment evidence, gate result, and validity.5253For an unconfigured one-off project, keep the brief in the task response. Do not initialize54project management merely because this skill loaded. Read the target section again before55writing and validate through `project-to-act` after writing.5657Run one gate per decision batch. Edits and test iterations under the same assumptions do not58restart it. Re-open only when new evidence invalidates an assumption, scope changes, or a new59direction is proposed.6061## Required brief6263```text64REALITY GATE: PASS | BLOCKED | INCOMPLETE65GOAL / NON-GOALS:66DECISION:67OBSERVED:68MEASURED:69INFERRED:70UNKNOWN (material only):71PROBE (repeat for each material unknown): input/context, method, pass/fail,72stop condition, owner, evidence location73DECISION CONSEQUENCE:74LEDGER / NEXT:75```7677After `PASS`, derive the smallest implementation plan and use normal testing. At completion,78invoke `design-integrity-review` only when its structural-risk route applies; evaluation or79generation surfaces go through its single behavioral-acceptance route. Neither reviewer80replaces this gate or creates another ledger.8182The honest result may be a stop. A clean `BLOCKED`/`INCOMPLETE` with a precise next probe is83better than a polished implementation of an unverified premise.