Closes the research-round initiation gap (Nick: "is research being done or already done?"):
research-stage-headless.yml — on research-pending label events, a headless mimo agent performs the 4-phase round (INWARD/OUTWARD/INNOVATION/SYNTHESIS) and files it as research/issue-<n>-research.md (auto-PR, robot merges) + posts the marker comment that research-clear keys on.
research-backlog-sweep.yml + scripts/research_backfill_sweep.py — idempotent backfill with the gate's own readiness semantics; skips issues that already carry a 4-phase round (already-done stays done); dry-run by default, --apply explicit; dispatchable from the forge.
prompts/research-round.md — the research prompt as a governed repo artifact: the TUI-callback seam (future L3 owns/overrides it via reviewed diffs; the stage always executes the current template).
spec-gate-headless.yml — lands on master with ROBOT_TOKEN (same reserved-secret bug the robot had).
## What
Closes the research-round initiation gap (Nick: "is research being done or already done?"):
1. **research-stage-headless.yml** — on `research-pending` label events, a headless mimo agent performs the 4-phase round (INWARD/OUTWARD/INNOVATION/SYNTHESIS) and files it as `research/issue-<n>-research.md` (auto-PR, robot merges) + posts the marker comment that research-clear keys on.
2. **research-backlog-sweep.yml + scripts/research_backfill_sweep.py** — idempotent backfill with the gate's own readiness semantics; **skips issues that already carry a 4-phase round** (already-done stays done); dry-run by default, `--apply` explicit; dispatchable from the forge.
3. **prompts/research-round.md** — the research prompt as a governed repo artifact: the TUI-callback seam (future L3 owns/overrides it via reviewed diffs; the stage always executes the current template).
4. **spec-gate-headless.yml** — lands on master with ROBOT_TOKEN (same reserved-secret bug the robot had).
## Verification
- 10 red-first tests green (sweep logic: already-researched skip, blocked skip, open-dep skip, missing-dep unsatisfied, PR/closed skip, dry-run default, apply writes)
- All 3 workflows YAML-valid
- Full suite 615+84 green on the branch
Nick's critique structuralized (2026-09-07):
- 'is research being done or already done?' → sweep detects existing
4-phase rounds (INWARD/OUTWARD/INNOVATION/SYNTHESIS comments) and SKIPS
those issues; never re-researches completed work
- research must CALL the LLM → research-stage-headless.yml dispatches headless
mimo on research-pending label events (spec-gate runner pattern, verified)
- filed as a research FILE per issue → research/issue-<n>-research.md merged
to master via auto-PR; comment carries the markers research-clear keys on
- 4 phases → SYNTHESIS ends in ordered build instructions = implementer's prompt
- TUI callback seam → prompt externalized to governed prompts/research-round.md
(placeholders substituted at runtime; L3/TUI owns it via reviewed diffs later)
- failsafe: sweep dry-run by default; --apply explicit; red-first tests (10)
Also: spec-gate-headless.yml copied to master stream with ROBOT_TOKEN wired
(same reserved-secret bug the robot had — GITEA_TOKEN is the read-only auto token).
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What
Closes the research-round initiation gap (Nick: "is research being done or already done?"):
research-pendinglabel events, a headless mimo agent performs the 4-phase round (INWARD/OUTWARD/INNOVATION/SYNTHESIS) and files it asresearch/issue-<n>-research.md(auto-PR, robot merges) + posts the marker comment that research-clear keys on.--applyexplicit; dispatchable from the forge.Verification
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.