fix(coding-agent): show current role bindings in the model assignment menu - #3718
Conversation
736d414 to
511ff38
Compare
|
Updated after review: three defects found by the boundary review lanes are fixed in the pushed revision.
Tests grew to four cases: resolved bindings, unset/inherited/unresolvable states, both alias forms with a resolvable default, and a hostile ANSI/multi-line selector asserting no escape survives and the row stays bounded. |
511ff38 to
ec05468
Compare
|
Signed: Yeachan-Heo / hostile-only batch reassignment review VERDICT: REQUEST_CHANGES Reviewed exact head Concrete hostile finding: the new assignment-menu path sanitizes and bounds only the unresolved-selector branch. When a configured selector resolves, The existing tests cover alias classification, stale/unavailable bindings, refresh rollback, and hostile unresolved selectors, but do not cover hostile resolved model metadata. Do not treat the stale-base CI as sufficient evidence for merge safety. No branch mutation or merge performed. #3694 was not touched. — |
… menu
After picking a model the assignment menu listed bare role rows ("Set as EXECUTOR (Executor)"), so the model each role is bound to was invisible; the only way to learn it was to scan the whole 800+ entry model list for role badges. The menu now renders each role's current binding inline.
Lore-id: 7c41ab9e
Constraint: keep one #roles snapshot for labels, badges, and ranking, rebuilt at catalog boundaries
Constraint: literal pi/default inherits; literal default remains a valid bare model selector
Constraint: resolved and unavailable selector text must be sanitized and width-bounded before TUI rendering
Constraint: failed refresh recovery must preserve the last coherent catalog and surface both errors
Constraint: provider refreshes stage strict catalog loading before committing rows, roles, and tabs
Constraint: presentation failures roll back to the last coherent catalog view before surfacing errors
Constraint: role-refresh diagnostics are assigned before rollback rendering
Rejected: separate role-overview screen | adds a step to the flow the user is already in
Rejected: badges only on model rows | that is the status quo that fails at 800+ models
Confidence: high
Scope-risk: narrow
Reversibility: easy
Tested: resolved/unset/effective-default/inherited/qualified-alias/unavailable, fallback chains, catalog arrival/removal, provider/offline refresh recovery, presentation rollback, hostile resolved and unresolved metadata
Not-tested: live provider failure against a production discovery service
a993a90 to
04d7dd2
Compare
|
Signed: Yeachan-Heo / hostile-only final-head re-review VERDICT: MERGE_READY Reviewed exact final head The prior hostile finding is fixed precisely. Adversarial scope checks passed:
Exact Dev CI is terminal green, including affected-path TypeScript validation and state gates (run — |
|
This item is being moved to the Tier 3 review lane. Further review is deferred until after the current emergency stabilization period. — |
Problem
After selecting a model, the TUI assignment menu showed only role names. With 800+ available models, finding the model currently assigned to a role required scanning role badges throughout the model list, making reassignment unnecessarily blind.
Change
Each role row now shows its current binding inline:
The menu distinguishes resolved bindings, unset defaults, effective defaults supplied by an active profile, scalar and qualified
pi/defaultinheritance aliases, literal model IDs nameddefault, fallback chains, and unavailable selectors. Resolved and unavailable provider/model text is sanitized and width-bounded before rendering.Catalog and role refreshes now share a staged materialization boundary. Provider refresh failures preserve the last coherent view, show the relevant provider/catalog diagnostics, and avoid stale rows, roles, tabs, or ranking. Presentation failures roll back to the last coherent view.
Verification
Frozen against current
dev:Base:
a8757cb22aea36ee7be10b14306dfdb479d1beffHead:
04d7dd2f99d365ffbc85b284fa9302c79133d249Diff hash:
sha256:25ab42cfae1841e100f655d5e539177bf4d397aad18e14bd54ba60a37f91dc5bbun test packages/coding-agent/test/model-selector-action-menu-role-binding.test.ts— 15 passedFocused selector regression suites — 66 passed
bun --cwd=packages/coding-agent run check— passedgit diff --check— passedBounded PTY red-team harness — 15/15 passed; artifacts:
artifacts/pr3718-qa-report.json,artifacts/pr3718-qa-pty.txtExact-head PR checks — all completed checks passed or were skipped