Skip to content

Scenario runner: --model / --author-model / --ask-model, with the served model recorded per turn #31160

Closed

Description

@objectstack-fleet

epic:#3600#1 · hotlong · session_01Q4EjjPXwX1YfHyKJUh4agu

Filing-gate category: ② maintainer-directed task. Maintainer, verbatim (Claude Code session, 2026-11-07), after asking 「你的画廊测试我可以用 workbuddy 或者 codex 测试吗?有没有入口?」, 「你现在本地测试画廊,用的什么模型」 and 「我用 Claude code 云任务可以测试画廊吗?」, then answering the seat's proposals: 「前面的建议都同意,立卡」. Routing, verbatim: 「能交给车队开发的你不要自己开发」. Epic: objectstack-ai/cloud#3600. Live runs are paused by the maintainer (cloud#3600, 2026-11-07), so verify with the recorded driver and unit tests; no live run is owed.

Problem

Every recorded turn of the 2026-11-06/07 runs used the login's default model (claude-opus-5-5: 17 build turns, 246 persona turns), and nothing lets a run pin or compare models. ClaudeCodeDriver already accepts a model option and passes --model (driver.ts), but the CLI does not expose it.

Ask

  1. --model <alias> for every turn, plus optional --author-model / --ask-model to set the build and persona turns apart. Thread them to the driver.
  2. The run record and the scorecard state the model actually served per turn. The stream's meta.model is already parsed; show any mismatch with the requested model.
  3. Tests: the flag reaches the CLI argument list; the record carries the served model.

Reader: the domain:devx lane seat, from pm:queue.


Generated by Claude Code

Activity

  1. added
    priority:p1High: required for production / M2
    pm:queueReady for the PM dispatch loop
    domain:devxDomain lane — seat card indexed by label:pm:seat
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    on Nov 7, 2026
  2. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p1 kept · domain:devx · 2026-11-07T15:40Z

    ⛔ Not a claim.

    • This answers domain:devx#3's ask. It is maintainer-directed (the same order). The card adds --model / --author-model / --ask-model to run-scenarios (the driver already accepts model) and records the model actually served for each turn, showing any mismatch.
    • p1, domain:devx, area:devpath and pm:queue kept. It is a small, self-contained change to the runner's CLI.

    Generated by Claude Code

  3. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7

    Claim: PM loop round 1
    Session: session_01FEkQ5njkh3xbcDN6EtSfw7
    Account: os-project-manager
    Branch: claude/project-thread-daow8a (a project card thread, session_01FEkQ5mMXSZe9L7NVZxrmUk; the thread can push only its harness branch, a measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-31160
    Domain: domain:devx
    Seat: domain:devx#3
    File surface: packages/qa/scenarios/src/runner/** (cli.ts flags, driver.ts model threading, transcript.ts / scorecard.ts / run record served model per turn), its tests and the package README's flag list.
    Container & model: S, mode:thread, model: default — dispatch-gates --tier: no path-derived mandate, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card; maintainer-directed runner option
    Thread-read: 6709183409
    Premise: holds. run-scenarios on main 56baf78e takes no --model flag; the card says the driver already accepts model.
    Serial constraints cleared: PR #31188 (#31147) edits runner/cli.ts and runner/scorecard.ts and is in review; the order has the dev merge origin/main after it lands before editing those two files. #31159 (same files) is queued behind this card.

    Order: pm-orders/devx/order-31160.md (project files), handed to the card thread in its opening message.

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 7, 2026
  5. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5mMXSZe9L7NVZxrmUk

    os-dev-report

    {
    "issue": 31160,
    "status": "done",
    "branch": "claude/project-thread-daow8a",
    "pr": "#31204",
    "session": "session_01FEkQ5mMXSZe9L7NVZxrmUk",
    "premise_still_valid": true,
    "summary": "run-scenarios gains --model (every live turn), --author-model (build and iterate turns) and --ask-model (question and operation turns), threaded through makeDriver to ClaudeCodeDriver, which passes claude --model per kind of turn; a replay refuses all three like the live-driver limits, and an empty or flag-shaped value is refused. Each turn records meta.process.requestedModel beside the stream's meta.model; TurnSummary carries model, requestedModel and modelMismatch (servedAsRequested: the served name must hold the requested one as whole dash-separated parts). The scorecard's author rows name the served model (with a mismatch mark), new Run · model / Iterate · Run · model rows count persona turns per served model, and HalfScores.models carries the tally into the record; README lists the flags. PR #31188 (same cli.ts / scorecard.ts) was still open: origin/main was merged once at 8acbfab before the PR (head 0b43e74, no conflict); per the order this branch merges origin/main again after #31188 lands, and its RunRecordMeta.packages (required there) will need the new orchestrate.test.ts runRecord call to pass packages — I will do that merge when told it landed. The PR body is written once (dev rule); the post-merge Verification refresh is the seat's.",
    "tests": "On head 0b43e74 after pnpm --filter \"@objectstack/scenarios...\" build under the verify lock (VERDICT command-exit 0): pnpm --filter @objectstack/scenarios test -> Test Files 23 passed (23), Tests 460 passed (460); pnpm --filter @objectstack/scenarios typecheck exit 0 (tsc --noEmit, --listFiles includes test/runner/units.test.ts). New: units.test.ts 3 cases (servedAsRequested 12-row table; --model / --author-model / --ask-model reach the stand-in claude argv with requestedModel and served meta.model per turn; refusal of missing/empty/blank/flag-shaped values and replay refusal of each model flag), orchestrate.test.ts 2 cases (crm card through runCard with a RecordingDriver: per-turn model/requestedModel/modelMismatch in cardRun, first.models tally, rendered author row and Run · model rows with the mismatch mark, JSON round trip of runRecord with env.driver.authorModel/askModel, and the saved recording replayed through RecordedDriver.fromFile answering both names; a run naming no model keeps | Run · model | — |). Ablations via scripts/ablation-replace.mjs on 4798cbf, src imported directly (no dist leg), each restored with blob == HEAD and git diff HEAD empty: (1) mismatch marking disarmed in orchestrate.ts summarize -> orchestrate -t served 1 failed | 2 passed; (2) replay refusal of model flags disarmed (LIVE_FLAGS.slice(0, 3)) -> units -t model 1 failed | 6 passed; (3) empty/flag-shaped value refusal disarmed -> 1 failed | 6 passed; (4) --model push in driver.ts base disarmed -> 1 failed | 6 passed.",
    "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack on 0b43e74 (merge base 8acbfab, 8 paths): 49 commands, each run with its exit captured before any pipe: 48 exit 0; pnpm check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (needs every package dist; only the scenarios closure was built) = NOT MEASURED, left to CI. --ran reconciliation: 49 derived famil(ies) accounted for — 48 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3). Scoped lint node --stack-size=4000 node_modules/eslint/bin/eslint.js packages/qa/scenarios --no-inline-config exit 0 on 0b43e74. CI check-runs on PR #31204: in_progress at report time (the merge commit 0b43e74 was pushed right after pr_create, so the PR head moved 4798cbf -> 0b43e74).",
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
    "mcp_calls": "5 — reads only: issue_read get #31160, issue_read get_comments #31160 x2 (card + claim check), pull_request_read get #31188, pull_request_read get #31204 (label/draft read-back); no MCP write",
    "api_writes": "2 — relay pr_create (fleet-write request fw-20261107T172907Z-a2f63f, run 42396532154, body read back identical 13922 bytes, labels skip-changeset, draft, no assignees) and this os-dev-report comment on #31160 via post-stamped.mjs; plus 2 git pushes (4798cbf, then the merge 0b43e74), not REST writes",
    "open_questions": [],
    "security_findings": "none",
    "out_of_scope_findings": []
    }


    Generated by Claude Code

  6. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7

    Landed 2026-11-07T19:45Z · PR #31204 merged through the merge queue at 2026-11-07T19:45Z, as 0d0c377beb988b990e77aa4763fd5e4b429d8de4.

    Reading Value
    PR #31204 merged: true, merge commit 0d0c377beb, head reviewed 45ceeaff29 (ACCEPT on the PR)
    #31160 closed completed by Fixes #31160

    State change: pm:dispatched removed (card closed). Next: #31159 (the external driver contract) was serial behind this PR on runner/cli.ts, driver.ts and orchestrate.ts; it is dispatched from this seat now.

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

Metadata

Metadata

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:devxDomain lane — seat card indexed by label:pm:seatpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions