feat(research): R3 default live-Go research admission and parent-turn resume (#2617) #2636

Open
conductor wants to merge 4 commits from feat/2617-research-r3 into master
pull from: feat/2617-research-r3
Owner

Relates to #2617

R3 admission flow

Engine.TurnStream now classifies before runTurn through the shared Rust classify_live_admission operation (R1 intake + explicit-research floor + existing route-risk kernel), also exposed as adaptive_router.classify_live_turn. Enforce persists the parent request, dispatches through the R2 service, and returns typed research_required job state without an ad-hoc model call. Qualified jobs resume the parent from accepted artifacts with tools disabled.

Commit: fbd8f353b7c5aabd82ab893a91598154a9b8593f
Contract: ADMIT-wave-research-r3-2617

Per-item evidence

  1. Admission: Rust tests cover research this topic thoroughly, compare current vector databases, non-research NONE, route-risk flags, and escalation verdicts. Direct release IPC reports RESEARCHED_CHANGE/FULL for both research phrases and STANDARD_CHANGE/NONE for the ordinary change. Current-tech keeps R1's mandatory ADVERSARIAL floor rather than being downgraded.
  2. Dispatch: Go tests prove stable idempotent jobs and user records. Real compiled-core HTTP verification sent the same request twice: both returned 202, one job and one conversation user record remained, and the second response was marked duplicate. job.json and admissions.jsonl matched the API.
  3. Parent resume: A real Rust-qualified RESEARCH_REPORT was reloaded through a fresh service instance and returned accepted evidence with no construction authority. Engine/HTTP tests prove active jobs remain nonterminal and qualified parents receive one toolless evidence-backed response.
  4. Escalation: Service/core tests cover verification failure, grounded receipt-backed evidence, unresolved escalation, final-response uncertainty, and no recursive probing. Rust owns FULL and TARGETED_PROBE verdicts; Go only orchestrates them.
  5. Status/cancel/projection/construction: HTTP tests cover current stage, accepted artifact refs, unresolved unknowns, qualification, report/basis refs, and cancel. Real HTTP status/cancel matched durable state. RunConstruction executes exactly one real RunNext stage and returns refreshed execution status. W2's coordinator is absent on this base, so no substitute coordinator was invented.
  6. Rollout: Tests cover shadow, enforce, off, and enforce fail-closed behavior. Production rune-core wiring uses the real durable service and selects the configured subprocess or OpenAI worker adapter.

Verification

  • Research service: go vet ./..., go test ./..., go test -race ./... pass.
  • Rune-core: go vet ./..., CGO_ENABLED=0 go test ./..., go test -race ./... pass; no cgo source was introduced.
  • Rust: cargo fmt --check, debug and release tests pass: 70 unit + 1 IPC each.
  • Characterization: 27 passed, 1 xfailed (only the immutable historical fixture).
  • Broad R0-R2 Python: 141 passed, 2 deselected, 1 xfailed; deselections are exactly the documented missing historical synthesis fixture and unrelated ADMIT-release-reporting baseline violation.
  • Pinned Ruff, scoped henxels check, and git diff --check pass. Research gate: R3 GREEN; the only repository violation remains ADMIT-release-reporting.
  • Second modality: direct release Rust IPC plus real compiled-core HTTP/durable-file checks described above.

Rollout state

Default is RUNE_RESEARCH_ADMISSION=shadow: decisions are logged to <home>/research/admissions.jsonl, no research job is dispatched by classification, and the ordinary path continues. To enforce at deploy, set RUNE_RESEARCH_CORE_BIN=/deployed/path/research_core, verify shadow records and worker supervision, then set RUNE_RESEARCH_ADMISSION=enforce. off disables new admission/escalation while existing-job status/cancel/resume remain available. Full instructions are in docs/RESEARCH_PROTOCOL_V1.md §15-16.

External live-model calls, external network access, multi-runner execution, and live Gitea event delivery were not performed; adapter tests are hermetic.

R4 boundary

R4 retains construction/Plan/factory convergence (including wiring on the branch that actually contains W2), production supervision, and live-model/external-network/multi-runner/real-Gitea proofs.

Relates to #2617 ## R3 admission flow `Engine.TurnStream` now classifies before `runTurn` through the shared Rust `classify_live_admission` operation (R1 intake + explicit-research floor + existing route-risk kernel), also exposed as `adaptive_router.classify_live_turn`. Enforce persists the parent request, dispatches through the R2 service, and returns typed `research_required` job state without an ad-hoc model call. Qualified jobs resume the parent from accepted artifacts with tools disabled. Commit: `fbd8f353b7c5aabd82ab893a91598154a9b8593f` Contract: `ADMIT-wave-research-r3-2617` ## Per-item evidence 1. **Admission:** Rust tests cover `research this topic thoroughly`, `compare current vector databases`, non-research NONE, route-risk flags, and escalation verdicts. Direct release IPC reports RESEARCHED_CHANGE/FULL for both research phrases and STANDARD_CHANGE/NONE for the ordinary change. Current-tech keeps R1's mandatory ADVERSARIAL floor rather than being downgraded. 2. **Dispatch:** Go tests prove stable idempotent jobs and user records. Real compiled-core HTTP verification sent the same request twice: both returned 202, one job and one conversation user record remained, and the second response was marked duplicate. `job.json` and `admissions.jsonl` matched the API. 3. **Parent resume:** A real Rust-qualified RESEARCH_REPORT was reloaded through a fresh service instance and returned accepted evidence with no construction authority. Engine/HTTP tests prove active jobs remain nonterminal and qualified parents receive one toolless evidence-backed response. 4. **Escalation:** Service/core tests cover verification failure, grounded receipt-backed evidence, unresolved escalation, final-response uncertainty, and no recursive probing. Rust owns FULL and TARGETED_PROBE verdicts; Go only orchestrates them. 5. **Status/cancel/projection/construction:** HTTP tests cover current stage, accepted artifact refs, unresolved unknowns, qualification, report/basis refs, and cancel. Real HTTP status/cancel matched durable state. `RunConstruction` executes exactly one real `RunNext` stage and returns refreshed execution status. W2's coordinator is absent on this base, so no substitute coordinator was invented. 6. **Rollout:** Tests cover shadow, enforce, off, and enforce fail-closed behavior. Production `rune-core` wiring uses the real durable service and selects the configured subprocess or OpenAI worker adapter. ## Verification - Research service: `go vet ./...`, `go test ./...`, `go test -race ./...` pass. - Rune-core: `go vet ./...`, `CGO_ENABLED=0 go test ./...`, `go test -race ./...` pass; no cgo source was introduced. - Rust: `cargo fmt --check`, debug and release tests pass: **70 unit + 1 IPC each**. - Characterization: **27 passed, 1 xfailed** (only the immutable historical fixture). - Broad R0-R2 Python: **141 passed, 2 deselected, 1 xfailed**; deselections are exactly the documented missing historical synthesis fixture and unrelated `ADMIT-release-reporting` baseline violation. - Pinned Ruff, scoped `henxels check`, and `git diff --check` pass. Research gate: R3 GREEN; the only repository violation remains `ADMIT-release-reporting`. - Second modality: direct release Rust IPC plus real compiled-core HTTP/durable-file checks described above. ## Rollout state Default is **`RUNE_RESEARCH_ADMISSION=shadow`**: decisions are logged to `<home>/research/admissions.jsonl`, no research job is dispatched by classification, and the ordinary path continues. To enforce at deploy, set `RUNE_RESEARCH_CORE_BIN=/deployed/path/research_core`, verify shadow records and worker supervision, then set `RUNE_RESEARCH_ADMISSION=enforce`. `off` disables new admission/escalation while existing-job status/cancel/resume remain available. Full instructions are in `docs/RESEARCH_PROTOCOL_V1.md` §15-16. External live-model calls, external network access, multi-runner execution, and live Gitea event delivery were not performed; adapter tests are hermetic. ## R4 boundary R4 retains construction/Plan/factory convergence (including wiring on the branch that actually contains W2), production supervision, and live-model/external-network/multi-runner/real-Gitea proofs.
conductor added 4 commits 2026-10-26 08:35:19 +00:00
docs+test(research): R0 canonical protocol and drift characterization (#2617) (ADMIT-wave-research-r0-2617)
deploy / deploy (push) Skipped
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 21s
CI Pipeline / lint (push) Canceled after 45s
Auto-label / auto-label (pull_request) Successful in 1s
Local-Model First-Pass Review (#131) / first-pass-review (pull_request) Successful in 20s
Spec gate (headless) / spec-gate (pull_request) Successful in 16s
CI Pipeline / lint (pull_request) Failing after 44s
CI Pipeline / go-surface (pull_request) Failing after 24s
CI Pipeline / rust-surface (pull_request) Failing after 7s
CI Pipeline / unit-tests (pull_request) Failing after 1m17s
CI Pipeline / best-practices (pull_request) Successful in 2s
CI Pipeline / documentation (pull_request) Successful in 3s
CI Pipeline / type-check (pull_request) Failing after 43s
CI Pipeline / canary (pull_request) Failing after 1m3s
CI Pipeline / gitea-offline (pull_request) Successful in 20s
CI Pipeline / required-checks (pull_request) Failing after 1s
CI Pipeline / CI Pipeline / notify-event-bridge (pull_request) Failing after 5s
e06fdf2602
feat(research): implement R1 deterministic Research Core in Rust (#2617) (ADMIT-wave-research-r1-2617)
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Failing after 41s
CI Pipeline / unit-tests (push) Failing after 40s
CI Pipeline / rust-surface (push) Failing after 9s
CI Pipeline / go-surface (push) Failing after 22s
CI Pipeline / best-practices (push) Successful in 7s
CI Pipeline / documentation (push) Successful in 3s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 22s
CI Pipeline / type-check (push) Canceled after 15s
Auto-label / auto-label (pull_request) Successful in 1s
Local-Model First-Pass Review (#131) / first-pass-review (pull_request) Successful in 22s
Spec gate (headless) / spec-gate (pull_request) Successful in 23s
CI Pipeline / go-surface (pull_request) Canceled after 0s
CI Pipeline / rust-surface (pull_request) Canceled after 0s
CI Pipeline / canary (pull_request) Canceled after 0s
CI Pipeline / best-practices (pull_request) Canceled after 0s
CI Pipeline / documentation (pull_request) Canceled after 0s
CI Pipeline / type-check (pull_request) Canceled after 0s
CI Pipeline / gitea-offline (pull_request) Canceled after 0s
CI Pipeline / required-checks (pull_request) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (pull_request) Canceled after 0s
CI Pipeline / lint (pull_request) Canceled after 33s
CI Pipeline / unit-tests (pull_request) Canceled after 13s
7b466a6998
feat(research): implement R2 Go research service and transactional executor (#2617) (ADMIT-wave-research-r2-2617)
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / lint (pull_request) Canceled after 0s
CI Pipeline / unit-tests (pull_request) Canceled after 0s
CI Pipeline / go-surface (pull_request) Canceled after 0s
CI Pipeline / rust-surface (pull_request) Canceled after 0s
CI Pipeline / canary (pull_request) Canceled after 0s
CI Pipeline / best-practices (pull_request) Canceled after 0s
CI Pipeline / documentation (pull_request) Canceled after 0s
CI Pipeline / type-check (pull_request) Canceled after 0s
CI Pipeline / gitea-offline (pull_request) Canceled after 0s
CI Pipeline / required-checks (pull_request) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (pull_request) Canceled after 0s
Auto-label / auto-label (pull_request) Successful in 0s
Local-Model First-Pass Review (#131) / first-pass-review (pull_request) Successful in 22s
Spec gate (headless) / spec-gate (pull_request) Successful in 26s
d6834ebee7
feat(research): implement R3 live-Go admission and parent resume (#2617) (ADMIT-wave-research-r3-2617)
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / lint (pull_request) Canceled after 0s
CI Pipeline / unit-tests (pull_request) Canceled after 0s
CI Pipeline / go-surface (pull_request) Canceled after 0s
CI Pipeline / rust-surface (pull_request) Canceled after 0s
CI Pipeline / canary (pull_request) Canceled after 0s
CI Pipeline / best-practices (pull_request) Canceled after 0s
CI Pipeline / documentation (pull_request) Canceled after 0s
CI Pipeline / type-check (pull_request) Canceled after 0s
CI Pipeline / gitea-offline (pull_request) Canceled after 0s
CI Pipeline / required-checks (pull_request) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (pull_request) Canceled after 0s
Auto-label / auto-label (pull_request) Successful in 1s
Local-Model First-Pass Review (#131) / first-pass-review (pull_request) Successful in 26s
Spec gate (headless) / spec-gate (pull_request) Successful in 26s
fbd8f353b7
gitea-actions Bot added the P1 — highbugcustodianinfrastructureperception labels 2026-10-26 08:54:41 +00:00

🤖 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>
Some required checks failed
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / lint (pull_request) Canceled after 0s
CI Pipeline / unit-tests (pull_request) Canceled after 0s
CI Pipeline / go-surface (pull_request) Canceled after 0s
CI Pipeline / rust-surface (pull_request) Canceled after 0s
CI Pipeline / canary (pull_request) Canceled after 0s
CI Pipeline / best-practices (pull_request) Canceled after 0s
CI Pipeline / documentation (pull_request) Canceled after 0s
CI Pipeline / type-check (pull_request) Canceled after 0s
CI Pipeline / gitea-offline (pull_request) Canceled after 0s
CI Pipeline / required-checks (pull_request) Canceled after 0s
Required
Details
CI Pipeline / CI Pipeline / notify-event-bridge (pull_request) Canceled after 0s
Auto-label / auto-label (pull_request) Successful in 1s
Local-Model First-Pass Review (#131) / first-pass-review (pull_request) Successful in 26s
Spec gate (headless) / spec-gate (pull_request) Successful in 26s
This pull request has changes conflicting with the target branch.
  • store/scaffold/segments/observations.jsonl
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/2617-research-r3:feat/2617-research-r3
git checkout feat/2617-research-r3
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: conductor/rune#2636