fact-intake-runner · git:20261003.c6dbf0c · 2026-10-03 · sha256 51a40fea4184bbf8

fact-intake-runner git:20261003.c6dbf0cA

Immutable. This exact content never changes and is served at /api/v1/blob/51a40fea4184bbf8.

---
name: fact-intake-runner
description: >-
  Compose fact-intake orchestrator: intake document to classified
  focus-slice facts.
---

# fact-intake-runner

Turn `$SOURCE_PATH` into classified focus-slice facts. Done when Confirm
apply exits 0.

**Must:** bind Parent Inputs; dispatch L1; `$FACTS_CTL validate
--require-derivation`; inline Confirm.  
**Must not:** Derive / Shape / G2 / G3 / `fact-store-runner`; edit
`$SOURCE_PATH`; fetch registry/role in parent Load.

## Parent-Provided Inputs

| Variable | Purpose |
|---|---|
| `$REVISION_DIR` | Absolute revision root |
| `$PROJECT_ROOT` | Project root; default `$(pwd)` |
| `$CYCLE_ID` | Active cycle id |
| `$SOURCE_PATH` | Absolute intake SoT doc |
| `$REQUIRE_SEED_ORIGIN` | Optional; `true` adds `--require-seed-origin` on write/validate |

Parent binds `$SOURCE_PATH` and `$REQUIRE_SEED_ORIGIN`.

## Script Macros

Contract in `--help`.

| Macro | Command |
|---|---|
| `$FACTS_CTL` | `python3 "$SKILL_ROOT/compose/scripts/facts/facts_control.py"` |
| `$FACT_INTAKE_DISPOSITION_CTL` | `python3 "$SKILL_ROOT/compose/fact-intake-runner/scripts/fact_intake_disposition_control.py"` |

## Execution

### Step 1 — Load

Bind Parent Inputs. Resolve `$PROJECT_ROOT` = `$(pwd)` when omitted.  
**Done:** required Inputs bound → Step 2.

### Step 2 — Cut (L1 subagent)

Dispatch nested `fact-cut-runner` via `$SUBAGENT_TOOL`, then `$SUBAGENT_AWAIT_SYNC`.

```text
Load {SKILL_ROOT}/compose/fact-intake-runner/fact-cut-runner/SKILL.md and follow it.

## Input
REVISION_DIR: <$REVISION_DIR>
PROJECT_ROOT: <$PROJECT_ROOT>
CYCLE_ID: <$CYCLE_ID>
SOURCE_PATH: <$SOURCE_PATH>
REQUIRE_SEED_ORIGIN: <$REQUIRE_SEED_ORIGIN>
```

### Step 3 — Validate

```bash
$FACTS_CTL validate \
  --revision-dir "$REVISION_DIR" \
  --project-root "$(pwd)" \
  --require-derivation
# when REQUIRE_SEED_ORIGIN=true, also pass --require-seed-origin
```

Exit 0 → Step 4.

### Step 4 — Confirm

```bash
$FACT_INTAKE_DISPOSITION_CTL disposition-patch-path \
  --revision-dir "$REVISION_DIR"
```

Bind `.path` from stdout. Chat: path + counts + accept / edit / reject.

```bash
$FACT_INTAKE_DISPOSITION_CTL disposition-patch-validate \
  --revision-dir "$REVISION_DIR"
# after user accept:
$FACT_INTAKE_DISPOSITION_CTL disposition-patch-apply \
  --revision-dir "$REVISION_DIR"
```

Empty ops: user confirms explicitly. This wave: edit the patch in parent.

### Step 5 — Return

```text
Fact-intake complete.
  Source: <SOURCE_PATH>
  Facts: <abs path from validate stdout>
  Disposition: done
  Disposition-confirm: done
  Status: ok|failed
```