Skip to content

STO-408: run Evaluators on Qwen 3.8 preview - #24

Open
stone16 wants to merge 1 commit into
mainfrom
codex/switch-evaluators-qwen3-8-preview
Open

STO-408: run Evaluators on Qwen 3.8 preview#24
stone16 wants to merge 1 commit into
mainfrom
codex/switch-evaluators-qwen3-8-preview

Conversation

@stone16

@stone16 stone16 commented Jul 27, 2026

Copy link
Copy Markdown
Owner

Originating Multica issue: STO-408

Summary

Evaluator-A and Evaluator-B now target the online OpenCode runtime with the pinned qwen3.8-max-preview model instead of the unavailable Grok setup. Their logical identities and Squad memberships remain unchanged.

Why

The Grok evaluator lane currently lacks usable tokens. STO-408 records the bounded decision to use Qwen 3.8 preview first and reconsider Codex only if evaluation quality is insufficient.

Approach

Updated the mirrored company contract, deployment desired state, and operating-model roster. The topology regression fixture now models OpenCode/Qwen, directly asserts that both Evaluator instances use the exact same provider/model, and proves an existing Evaluator identity can migrate runtime and model together.

Accepted choice: Route both Evaluators through the sole online OpenCode runtime and pin qwen3.8-max-preview.

Rejected alternatives:

  • Keep Grok — no usable token budget is available.
  • Switch immediately to Codex — Qwen is the requested first trial; Codex remains the fallback decision if quality is insufficient.
  • Declare qwen as the runtime provider — fresh Multica reads expose opencode, not a qwen provider; the requested Qwen value belongs in the model field.

Constraint: Multica topology is repository-managed and may be applied only after this desired state reaches clean main == origin/main.

How I Tested

End-to-end test cases

Case Test file:line What it asserts
Exact Evaluator provider/model intent tests/sync-topology.test.py:169 Both tracked Evaluators are exactly opencode + qwen3.8-max-preview
Identity-preserving runtime/model migration tests/sync-topology.test.py:232 An existing Evaluator is renamed in place and moved to OpenCode/Qwen in one reconciler run
Full desired-state topology behavior tests/sync-topology.test.py:312 Plan/apply/verify, membership, drift, and extra-member safety still pass

Verbatim test output

$ tests/sync-topology.test.py
PASS: topology desired-state tests

$ bash tests/sync-multica.test.sh
PASS: sync-multica desired-state tests

$ bash tests/pr-sweep.test.sh
PASS: pr-sweep PR issue routing tests

Read-only Multica plans

$ scripts/sync-topology.py  # with exact session-local runtime/agent mappings
agent  orchestrator  runtime,model
agent  evaluator-a  runtime,model
agent  evaluator-b  runtime,model
summary mode=plan drift=3

The two Evaluator rows are this change. The Orchestrator row is unrelated pre-existing drift and must not be applied as part of STO-408 without a separate decision. All Squad and member rows were up-to-date.

$ scripts/sync-multica.sh  # with exact session-local agent mappings
workspace context stometaverse up-to-date
...
evaluator skill Evaluator Skill up-to-date
evaluator agent Evaluator-A up-to-date
evaluator agent Evaluator-B up-to-date

Existing tests

  • tests/sync-topology.test.py → pass
  • bash tests/sync-multica.test.sh → pass
  • bash tests/pr-sweep.test.sh → pass

New tests added

  • tests/sync-topology.test.py:169 — locks both Evaluator instances to the requested provider/model.
  • tests/sync-topology.test.py:232 — strengthens the existing identity migration case to assert runtime and model update arguments.

Lint / typecheck

$ git diff --check
<no output; exit 0>

$ cmp -s AGENTS.md CLAUDE.md
<no output; exit 0>

$ python3 -m json.tool deployments/agents.json >/dev/null
<no output; exit 0>

$ python3 -m py_compile scripts/sync-topology.py tests/sync-topology.test.py
<no output; exit 0>

Rollback Plan

Revert the merge commit with git revert <merge-commit>. If the desired topology was already applied, merge the revert and run the normal topology plan/apply/verify from clean main to restore the previous tracked runtime/model intent.

Maximum blast radius: single feature — independent Evaluator execution quality and availability.
Time-to-rollback: one topology-sync cycle after the revert reaches main.

Out of Scope

  • No live Multica topology apply before merge.
  • No change to GTM's Grok runtime.
  • No Orchestrator runtime/model migration; the read-only plan reports that existing drift separately.
  • No merge, deployment, publishing, or external send.
  • No automatic quality comparison between Qwen and Codex; that decision follows observed evaluator performance.

Summary by CodeRabbit

  • Configuration

    • Evaluator instances now use the OpenCode runtime with the qwen3.8-max-preview model.
    • Updated evaluator topology and operating-model documentation to reflect the new setup.
  • Tests

    • Added coverage verifying evaluator runtime and model assignments.
    • Updated synchronization and verification scenarios for the new evaluator configuration.

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Evaluator-A and Evaluator-B now use the OpenCode runtime with qwen3.8-max-preview. Deployment configuration, topology documentation, fixtures, runtime stubs, and synchronization tests were updated accordingly.

Changes

Evaluator runtime migration

Layer / File(s) Summary
Update evaluator runtime configuration
deployments/agents.json, AGENTS.md, CLAUDE.md, docs/operating-model.md
Evaluator instances now specify the OpenCode runtime and qwen3.8-max-preview model across deployment configuration and topology documentation.
Align topology fixtures and tests
tests/sync-topology.test.py
Fixtures, runtime-list stubs, synchronization assertions, verification scenarios, and the test runner now validate the updated evaluator runtime and model.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: moving Evaluators to the Qwen 3.8 preview model.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/switch-evaluators-qwen3-8-preview

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🧹 Nitpick comments (1)
tests/sync-topology.test.py (1)

87-91: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Retain a Grok-origin migration fixture.

The PR migrates evaluators from Grok to OpenCode, but the stub now exposes only r-opencode, the legacy scenario seeds a-eval already at the desired state, and the identity test starts from Claude. No test proves that an existing Grok evaluator keeps its identity while moving to OpenCode and qwen3.8-max-preview.

As per coding guidelines, tests must protect business intent. Based on the PR objective, the migration path is specifically Grok to OpenCode.

Also applies to: 209-215, 253-261

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/sync-topology.test.py` around lines 87 - 91, Retain a Grok-origin
evaluator in the runtime-list stub and update the relevant migration and
identity test fixtures so an existing Grok evaluator is migrated to OpenCode
with model qwen3.8-max-preview while preserving its evaluator identity. Ensure
the scenarios at the referenced sections start from Grok rather than an
already-migrated or Claude evaluator and assert the resulting identity and
configuration.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tests/sync-topology.test.py`:
- Around line 51-52: Update the agent create stub to parse and persist the
requested --model value instead of writing an empty model, then extend the
create-if-missing test to assert the created evaluator retains
qwen3.8-max-preview. Preserve the existing fixture and other topology
assertions.

---

Nitpick comments:
In `@tests/sync-topology.test.py`:
- Around line 87-91: Retain a Grok-origin evaluator in the runtime-list stub and
update the relevant migration and identity test fixtures so an existing Grok
evaluator is migrated to OpenCode with model qwen3.8-max-preview while
preserving its evaluator identity. Ensure the scenarios at the referenced
sections start from Grok rather than an already-migrated or Claude evaluator and
assert the resulting identity and configuration.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d70e6313-2619-4f0f-8fa4-772943af44db

📥 Commits

Reviewing files that changed from the base of the PR and between 8f4b3e8 and e9cf83b.

📒 Files selected for processing (5)
  • AGENTS.md
  • CLAUDE.md
  • deployments/agents.json
  • docs/operating-model.md
  • tests/sync-topology.test.py

Comment on lines +51 to +52
"runtime_provider": "opencode",
"model": "qwen3.8-max-preview",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Persist the requested model in the create stub.

The fixture now declares qwen3.8-max-preview, but the agent create stub at Line 104 still writes model: "". The create-if-missing test can therefore pass while the fake topology has no model, leaving the new deployment contract unverified. Parse --model in the stub and assert the created evaluator’s model.

As per coding guidelines, tests must protect business intent rather than merely exercise implementation details.

Proposed fixture fix
 elif args[:2] == ["agent", "create"]:
     name = args[args.index("--name") + 1]
     runtime = args[args.index("--runtime-id") + 1]
-    created = {"id":"a-eval","name":name,"runtime_id":runtime,"model":""}
+    model = args[args.index("--model") + 1] if "--model" in args else ""
+    created = {"id":"a-eval","name":name,"runtime_id":runtime,"model":model}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/sync-topology.test.py` around lines 51 - 52, Update the agent create
stub to parse and persist the requested --model value instead of writing an
empty model, then extend the create-if-missing test to assert the created
evaluator retains qwen3.8-max-preview. Preserve the existing fixture and other
topology assertions.

Source: Coding guidelines

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant