Skip to content

Per-target author overrides and endpoint URL files - #441

Merged
renmengye merged 2 commits into
mainfrom
feat/author-overrides
Sep 29, 2026
Merged

renmengye merged 2 commits into
mainfrom
feat/author-overrides

Conversation

@renmengye

Copy link
Copy Markdown
Member

Today the author backend and model are fleet-wide (OUTERLOOP_AUTHOR_BACKEND / _MODEL / _ENDPOINT), so a deployment cannot trial a different author, such as a self-hosted model, on one target beside its usual authors. And a self-hosted server whose address changes on each restart cannot be used, because endpoint profiles take a fixed URL.

What changes

  • OUTERLOOP_AUTHOR_OVERRIDES (optional deployment setting): JSON mapping a target to an author override, optionally narrowed to agent slots. Parsed and validated once at startup; a mistake is one clear error naming the setting.
    OUTERLOOP_AUTHOR_OVERRIDES='{"owner/repo":{"backend":"claude","model":"served-model[endpoint=onprem]","slots":["agent-05"]}}'
    
  • The override binds to a run when it is claimed (direct climbs: at startup) and holds across wakes and resumes, even if the setting changes.
  • Judges do not follow it. Panels and reviewers resolve against the fleet author exactly as without an override, so credit stays independent of the trialled model. Author/judge key separation uses the override's effective credential.
  • OUTERLOOP_ENDPOINT_<NAME>_URL_FILE (alternative to _URL): a file holding a bare URL or JSON with a url key, read at each session start and wake. Before a session on such an endpoint, one bounded health request (the key in a header) checks the server answers. A missing file or a dead address defers the run: fresh runs park instead of aborting, and wakes refund the retry.
  • init provisions every backend the fleet author and any override select before validating them.
  • Run status and the board show each run's author backend and model, and whether it is overridden.
  • claude, codex and hermes authors are peers here.

Compatibility (RELEASING.md)

Run records add optional author_overridden (default false); backend, model, endpoint selector and credential path reuse existing fields. Status JSON adds author backend/model and override information. All records previously accepted by load_record, including records without author fields and ended records, remain readable without migration (legacy fixture exercised on first read, repeated save/read and interrupted-write retry). On the first tick, existing runs and PRs keep their established author routes and resume/panel behaviour.

Fresh endpoint deferrals reuse author-sleep capacity parks without a session id; deferred wakes keep their state and refund the current delivery's retry. Rollback stays readable but loses fleet-only panel inheritance for overridden runs, and older kernels cannot resume fresh endpoint capacity parks: finish overridden runs and let endpoint parks resume before rolling back. Upgrading: line in CHANGELOG.

Tests

Parsing valid and invalid; slot matching; override at start, resume and wake; binding survives a setting change; an overridden run's panel equals a non-overridden run's; key separation with the override's credential; URL_FILE bare and JSON, re-read on wake; missing file and dead address defer without consuming a retry (fresh run and wake); fresh init with codex and hermes overrides; unchanged behaviour with no setting. Mutation-checked: panel independence and binding. Gate: 2495 passed, 2 skipped; ruff, format, mypy clean.

Built by codex from my brief; codex self-review (2 findings) plus my cross-review (2 findings), all fixed before this PR.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 1 — reviewed head 41ba327f — reviewer summarizer:hermes/gpt-5.6-terra over coverage+credentials+deployment+general+lifecycle+prose.

terra
Advisory findings from outerloop — the code owner decides. Reply to disagree; the outerloop:no-review label opts this PR out.

Verdict: 1 blocking, 0 advisory.

1 finding attached to the lines below.

Merged one blocking endpoint-validation finding supported by coverage, deployment, and prose. Rejected: none; the prose entry is duplicative rather than a rewrite, so it was merged as corroborating evidence instead of recorded separately as a suggestion.

Comment thread src/outerloop/endpoints.py
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@renmengye renmengye added the autoresearch:review Request a fresh advisory review of this PR's current state label Sep 29, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 1 — reviewed head b06bfd55 — reviewer hermes/gpt-5.6-terra.

terra
Advisory findings from outerloop — the code owner decides. Reply to disagree; the outerloop:no-review label opts this PR out.

Verdict: no defects found.

@renmengye
renmengye merged commit 4bf57e0 into main Sep 29, 2026
5 checks passed
@renmengye
renmengye deleted the feat/author-overrides branch September 29, 2026 02:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autoresearch:review Request a fresh advisory review of this PR's current state

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant