Condition Inventory
Create a sourced, saturation-tested inventory. The four lenses compose; they are not equivalent machine-state types.
Procedure
- Read
STATEFUL.md. Require a human-confirmed system sentence and note the surfaces, evidence, assumptions, and cross-cutting inventory. - Extract the sentence’s structural verbs and time-bearing nouns as the coverage anchor.
- List lifecycle states from before/during/after and before/within/beyond probes.
- For every lifecycle state or transition, ask what can reject or prevent the next change. Record failures and their cause:
user-input,system,external, orpolicy. - For every lifecycle state, ask what happens when the user leaves, time passes, or actor, device, session, permission, network, dependency, or data changes. Record these as interruption contexts.
- Inventory surfaces and their independent content, action, accessibility, freshness, authentication, and privacy constraints.
- Connect conditions with typed relationships where evidence supports them:
transition;interrupted-by;reenters-as;projects-to.
- Attach at least one evidence reference to every condition. Use
type: assumptionwhen no stronger source exists. - Merge duplicates. Retain specialisations only when behavior or requirements materially differ.
- Run the coverage check:
- every structural term generates a lifecycle state or is flagged as decorative;
- every lifecycle state has an explicit failure and interruption answer, including
none; - every surface connects to at least one condition;
- applicable cross-cutting conditions are referenced;
- every condition has evidence or an explicit assumption.
- Stop after three successive probes produce only specialisations. Record unconsulted evidence and known unknowns; do not claim completeness.
- Update
STATEFUL.mdwith per-lens counts, evidence consulted, assumptions, and known unknowns. - Ask whether the user wants
state-map.json. If yes, write a working map withschema_version: "0.1",conditions,scenarios: [],relationships, andmetadata.maturity: working. New conditions usestatus: discovered; scope and priority are intentionally absent until triage.
Output
## Lifecycle states
| ID | Condition | Evidence | Why distinct |
## Failures
| ID | Condition | Cause | Evidence | Prevents/rejects |
## Interruptions
| ID | Context | Applies to | Evidence | Re-entry implication |
## Surfaces
| ID | Surface | Presents | Evidence | Independent constraints |
## Relationships
| Type | From | To | Trigger |
## Coverage
- Structural terms: <covered>/<total>
- Lifecycle interrogation: <covered>/<total>
- Surfaces connected: <covered>/<total>
- Evidence: <sourced>/<total>; assumptions: <n>
- Known unknowns: <items>
- Stopping reason: <saturation result>
Failure modes
- Calling every record a lifecycle state.
- Generating a target number instead of testing coverage.
- Treating a surface as a resized screen.
- Inventing relationships without evidence.
- Using source code as the only account of intended behavior.
- Writing triage decisions during discovery.