# Extract Situation

> Partial Skill: invoke by name only — the ACED blind-brief extractor — loaded by aced-case-judge to compose a simulating context's brief, not user-triggered.

- Skill: `cyberuni/extract-situation` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add cyberuni/extract-situation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cyberuni/extract-situation/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: cyberuni (https://skillmd.com/u/cyberuni)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/cyberuni/extract-situation

---


# extract-situation

The **blind-brief extractor** — the deterministic engine that reads one scenario out of a frozen
`.feature` and emits **only the situation**: its `Given` and `When` steps. The scenario **name**,
every `Then`, the inline `@rubric`, and the tags are **never** emitted. `aced-case-judge` composes a
simulating context's brief **only** through this engine; it never decides by its own judgment what to
withhold. It is **read-only** — it never writes a `.feature`, a brief, or any other file.

## Invocation

```
node "<skill>/scripts/extract-situation.mts" --feature <path-to-.feature> --scenario "<exact name>"
```

`--format json` emits `{ steps, given, when, placeholders, examples }` instead of the markdown brief —
`steps` is the emitted brief in file order (`given`/`when` regroup the same steps by keyword), and
`examples` carries a `Scenario Outline`'s surviving columns.

## What it emits, and what it must never emit

| Element | Emitted | Why |
|---|---|---|
| `Given` steps (and an `And`/`But` inheriting `Given`) | **yes** | the situation the agent is in |
| `When` steps (and an `And`/`But` inheriting `When`) | **yes** | the act under evaluation |
| Scenario **name** | never | names state the verdict (`red tests block the commit`) |
| `Then` steps, and any `And`/`But` inheriting `Then` | never | the expected outcome is the answer key |
| Inline `@rubric` docstring | never | the scoring ladders are worked answers |
| Tags, `Feature:` description, sibling scenarios | never | not the situation |

**Keyword inheritance is the load-bearing rule.** An `And` takes the keyword of the step above it:
`Given X / And Y` makes `And Y` a `Given` (emit); `Then A / And B` makes `And B` a `Then` (withhold).
Tracking the current keyword is what keeps the answer key out of the brief.

For a `Scenario Outline`, `<placeholder>` tokens stay intact and an `Examples` column is emitted
**only when an emitted step references its placeholder** — a column only a `Then` reads is withheld.

## Fail closed

Every failure exits non-zero and emits **no brief** — an empty brief must never be mistakable for a
valid one. Unreadable or unparseable `.feature`; scenario name absent; the name matching **two**
scenarios; `--feature` or `--scenario` missing.

## References

The contract this engine serves: `aced-case-judge`'s blind two-pass protocol, spec'd at
`.agents/specs/aced/sdd-roles/judge/`.

