2026-04-24 — Review-E dispatch fix + rig lifecycle gaps + docs taxonomy cleanup
Summary
Section titled “Summary”On 2026-04-24 the rig operator ran a manual orchestration session that:
- Diagnosed and fixed a silent Review-E dispatch bug (rc#217).
- Identified three rig-lifecycle gaps that leave issues stuck after edge-case events (rc#226–228).
- Audited docs surfaces and resolved multiple stale references (rig-docs#190+, claude-3#621).
- Defined and enforced an 8-type content taxonomy (rig-gitops#182).
What happened — the dispatch bug
Section titled “What happened — the dispatch bug”Symptom reported: operator observed no Review-E reviews appearing on issues after Dev-E PRs were opened.
Investigation:
| Step | Observation |
|---|---|
| Event stream | pr_created → ci_passed → merge_gate_waiting fired correctly |
| Assignments stream | assignments:review-e was empty — no review_assigned event |
| Root cause | Dispatch rule: Review-E was only eligible when Dev-E’s parent envelope had completed. Because Dev-E’s envelope was still running (waiting for its own PR to merge), the eligibility gate blocked Review-E from ever being dispatched. |
Fix: rc#217 — “allow review-e dispatch when dev-e envelope is still running”.
The fix PR itself was blocked by the bug it fixed (no review = no auto-merge). It was force-merged by the operator after smoke-testing the patch locally. End-to-end verification: smoke test rc#219 → PR rig-docs#220 confirmed Review-E dispatched and reviewed successfully.
Three lifecycle gaps surfaced during monitoring
Section titled “Three lifecycle gaps surfaced during monitoring”Monitoring the post-fix session exposed three additional dead-ends in the rig event graph:
| # | Gap | Symptom | Queued fix |
|---|---|---|---|
| 1 | merge_conflict is a terminal dead-end | When a PR hits a merge conflict, no event re-dispatches Dev-E to rebase. Issue is stuck until operator intervenes. | rc#227 — re-dispatch Dev-E symmetrically with review_disputed |
| 2 | Closing a stale PR auto-cancels the parent issue | Closing a PR (for any reason — superseded, stale, wrong branch) triggers pr_closed which collapses the parent issue as if the work is done. Legitimate close-to-reopen cycles kill progress. | rc#228 — differentiate close-reason: superseded vs cancelled vs merged |
| 3 | No main_ci_failed events emitted | When main branch CI fails (broken by a merged PR), there is no event, no dashboard signal, and no Discord alert. Breakages are discovered only by humans noticing red CI badges. | rc#226 — emit main_ci_failed event + dashboard tile + Discord alert |
Docs audit findings
Section titled “Docs audit findings”During the session the docs surfaces were audited end-to-end:
| Finding | Detail | Resolution |
|---|---|---|
websites.md merge-conflict markers | Unresolved <<<<<<< / >>>>>>> blocks left in the file | claude-3#621 opened to fix |
Dead reference: conductor-e-docs.pages.dev | Domain referenced in several places but site is down/deleted | Swept in rig-docs#193 retype sweep |
| Whitepaper flattened on MkDocs→Astro copy | Chapter hierarchy collapsed; internal links broken | rig-docs#204 un-flatten retry |
type enum declared but not enforced | docs-check.yml lacked validation of type and status fields | rig-gitops#182 — added enforcement (merged) |
Decisions
Section titled “Decisions”| Decision | Detail | Status |
|---|---|---|
| Canonical whitepaper home | Astro/rig-docs is the single source of truth (rig-docs#201). rig-gitops/MkDocs is secondary. See decisions/2026-04-24-whitepaper-canonical-home.md. | ✅ Merged |
| 8-type content taxonomy | Valid type values: reference, research, user-story, proposal, decision, runbook, whitepaper, story. Defined in docs-check.yml. | ✅ Enforced via rig-gitops#182 |
type + status enforcement | docs-check.yml now rejects PRs with missing or invalid type/status frontmatter fields. | ✅ rig-gitops#182 merged |
| Self-auditing rig epic | A recurring self-audit cycle tracks docs freshness, broken links, and schema violations. | ⏳ rc#230 |
Shipped this session
Section titled “Shipped this session”| Item | Description |
|---|---|
| rc#217 | Review-E dispatch fix — allow dispatch while Dev-E envelope is running |
| rig-gitops#182 | type + status enforcement added to docs-check.yml |
| rig-docs#195 | Stories + user-stories sections |
| rig-docs#199 | Sidebar + redirects |
| rig-docs#201 | Whitepaper canonical-home decision doc |
Queued (not yet shipped)
Section titled “Queued (not yet shipped)”| Item | Description |
|---|---|
| rc#226 | Emit main_ci_failed event + dashboard + Discord |
| rc#227 | Re-dispatch Dev-E on merge_conflict |
| rc#228 | Differentiate close-reasons (superseded / cancelled / merged) |
| rc#230 | Self-auditing rig epic |
| rc#232–234 | Additional lifecycle gap follow-ons |
| rig-gitops#185 | CI follow-on |
| rig-gitops#187 | CI follow-on |
| rig-docs#190 | Epic: self-audit cycle |
| rig-docs#193 | Retype sweep |
| rig-docs#194 | Sidebar cleanup |
| rig-docs#204 | Un-flatten whitepaper retry |
| claude-3#621 | Fix websites.md merge-conflict markers |