Thanks to visit codestin.com
Credit goes to github.com

Skip to content

feat(site): surface reasoning effort configuration on the models page - #26976

Merged
DanielleMaywood merged 1 commit into
dm/reasoning-effort-1-model-configfrom
dm/reasoning-effort-3-models-page
Jul 9, 2026
Merged

feat(site): surface reasoning effort configuration on the models page#26976
DanielleMaywood merged 1 commit into
dm/reasoning-effort-1-model-configfrom
dm/reasoning-effort-3-models-page

Conversation

@DanielleMaywood

@DanielleMaywood DanielleMaywood commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Adds "Default reasoning effort" and "Max reasoning effort" selects to the model form on the deployment Models page, rendered in the always-visible top section (not under the collapsed Advanced section).

The selects are schema-driven from the generated general model options and use the global effort scale through provider-independent model config. They are validated as default <= max. Includes a Storybook play test asserting the fields are visible without expanding any section and submit as model_config.reasoning_effort.

Part of the reasoning effort stack (base: #26974).

🤖 Generated by Coder Agents on behalf of @DanielleMaywood

@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from 4b151ef to fef1b86 Compare July 6, 2026 17:22
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-1-model-config branch 2 times, most recently from 4968c7e to 15d4c72 Compare July 7, 2026 10:22
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from fef1b86 to 096c142 Compare July 7, 2026 10:22
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-1-model-config branch from 15d4c72 to 228a7db Compare July 7, 2026 11:52
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from 096c142 to 148d505 Compare July 7, 2026 12:38
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-1-model-config branch from 228a7db to d39150f Compare July 7, 2026 14:11
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from 148d505 to c11b76d Compare July 7, 2026 14:11
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-1-model-config branch from d39150f to 355f182 Compare July 7, 2026 23:26
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from c11b76d to 03e26de Compare July 7, 2026 23:27
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-1-model-config branch from 355f182 to 3d36549 Compare July 7, 2026 23:44
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from 03e26de to ce60d2e Compare July 7, 2026 23:44
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-1-model-config branch from 3d36549 to f677efc Compare July 8, 2026 07:53
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from ce60d2e to 3fb0e55 Compare July 8, 2026 07:53
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-1-model-config branch from f677efc to 4b77a03 Compare July 8, 2026 08:59
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from 3fb0e55 to 0ea0c51 Compare July 8, 2026 08:59
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-1-model-config branch from 4b77a03 to c485ab1 Compare July 8, 2026 09:32
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from 0ea0c51 to 1e573ac Compare July 8, 2026 09:33
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-1-model-config branch from c485ab1 to a1bbe9e Compare July 8, 2026 10:14
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from 1e573ac to 686a707 Compare July 8, 2026 10:14
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-1-model-config branch from a1bbe9e to a1ccef1 Compare July 8, 2026 12:10
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from 686a707 to d784fbf Compare July 8, 2026 12:10
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-1-model-config branch from a1ccef1 to 8f4025c Compare July 8, 2026 14:06
@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from d784fbf to ee3f120 Compare July 8, 2026 14:06
@DanielleMaywood

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review

coder-agents-review Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Chat: Review posted | View chat
Requested: 2026-07-09 09:13 UTC by @DanielleMaywood
Spend: $57.59 / $100.00

Review history
  • R1 (2026-07-08): 17 reviewers, 5 P3, 3 P4, COMMENT. Review
  • R2 (2026-07-08): 9 reviewers, 1 Nit, 6 P3, 3 P4, COMMENT. Review
  • R3 (2026-07-09): 4 reviewers, 1 Nit, 6 P3, 3 P4, APPROVE. Review

deep-review v0.9.0 | Round 3 | 8f4025c..3485634

Last posted: Round 3, 10 findings (6 P3, 3 P4, 1 Nit), APPROVE. Review

Finding inventory

Findings

# Sev Status Location Summary Round Reviewer Posted
CRF-1 P3 Author contested; panel closed R2 (3/5 accept, human decision on #26974) ModelConfigFields.tsx:725 "Xhigh" display label is not human-readable R1 Chopper Nit, Hisoka P3, Leorio P3, Luffy P3, Pariston P3, Zoro Note, Gon Note Yes
CRF-2 P3 Author accepted R2 (PR description corrected) ModelConfigFields.tsx:669 PR description claims provider-based filtering; code renders unconditionally R1 Kite P3, Mafu-san P2, Pariston Nit Yes
CRF-3 P3 Author fixed (3136441) ModelConfigFields.tsx:663 Comments restate what code already shows (5 locations) R1 Gon Yes
CRF-4 P3 Author fixed (3136441) ModelConfigFields.tsx:693 ReasoningEffortConfigFields duplicates SelectField for one string difference R1 Robin P3, Zoro P3, Luffy Nit Yes
CRF-5 P3 Author fixed (3136441) ModelForm.stories.tsx:250 Inconsistent sync/async option queries in same test R1 Komugi Yes
CRF-6 P4 Dropped by orchestrator (test catching schema drift is correct behavior) ModelForm.stories.tsx:240 Hardcoded option list will drift with schema R1 Hisoka Note, Pariston P3 No
CRF-7 P4 Author fixed (3136441) ModelForm.stories.tsx:227 No assertion on initial "Not set" state R1 Bisky Yes
CRF-8 P4 Author contested; panel closed R2 (5/5 accept) ModelForm.stories.tsx:221 No story for the "Not set" clear path R1 Bisky Yes
CRF-9 P4 Author fixed (3136441) ModelConfigFields.tsx:730 No story for validation error rendering R1 Bisky Yes
CRF-10 P3 Author fixed (3485634) ModelConfigFields.tsx:88 Ambiguous "-2.0-2.0" placeholder after en-dash removal R2 Hisoka P3, Gon P3 Yes
CRF-11 Nit Author fixed (3485634) ModelForm.stories.tsx:225 Residual comment trimming (3 locations) R2 Gon P2 (downgraded) Yes
CRF-12 P2 Dropped by orchestrator (functional 6-word comment after 3 rounds of improvements) ModelConfigFields.tsx:664 Doc comment restates component name R3 Gon No
CRF-13 P2 Dropped by orchestrator (cross-reference pointer is standard JSDoc practice) ModelConfigFields.tsx:701 Doc comment is a redundant cross-reference R3 Gon No

Contested and acknowledged

CRF-1 (P3, ModelConfigFields.tsx:725) - "Xhigh" display label

  • Finding: capitalize("xhigh") renders "Xhigh" in the dropdown. Seven reviewers flagged the label as unreadable. Proposed a label map: { xhigh: "Extra High" }.
  • Author defense: "Intentionally unchanged. This was already discussed on PR26974, and we are keeping Xhigh for this stack."
  • Panel closure (R2, 3/5): Kite, Pariston, and Mafu-san accepted the defense. The decision was made by a human on the base PR (feat: add configurable reasoning effort to Coder agents #26974). The consequence is cosmetic (admin sees "Xhigh" instead of "Extra High") and does not cause misconfiguration.

CRF-2 (P3, ModelConfigFields.tsx:669) - PR description mismatch

  • Finding: PR description claimed provider-scoped filtering. Code renders unconditionally. Architecture is correct (general fields are provider-independent).
  • Author accepted: PR body corrected to describe provider-independent behavior.

CRF-8 (P4, ModelForm.stories.tsx:221) - No story for "Not set" clear path

  • Finding: No story exercises selecting a value, clearing it back to "Not set," and confirming the payload omits reasoning_effort.
  • Author defense: "Intentionally skipped because unit coverage already verifies the omitted payload behavior for unset reasoning effort."
  • Panel closure (R2, 5/5): Bisky traced the data path end-to-end. The remaining gap is Radix component behavior (framework, not application logic).

Round log

Round 1

Panel. Netero clean. 5 P3 posted, 4 P4 (1 dropped, 3 posted). Reviewed against 8f4025c..ee3f120.

Round 2

Churn guard: PROCEED. 5 addressed, 1 acknowledged, 2 contested (CRF-1, CRF-8). Panel: 9 reviewers. Fixes verified. CRF-1 closed (3/5 accept). CRF-8 closed (5/5 accept). 1 new P3 (CRF-10), 1 new Nit (CRF-11). Reviewed against 8f4025c..3136441.

Round 3

Churn guard: PROCEED. 2 addressed (CRF-10, CRF-11). Panel: 4 reviewers. CRF-10 and CRF-11 fixes verified. 2 new Gon P2 findings dropped (comments are functional after 3 rounds of improvements). No open findings. Reviewed against 8f4025c..3485634.

About deep-review

CRF = Coder Review Finding (P0-P4, Nit, Note)

Reviewer Focus
Bisky tests
Chopper ops/errors
Churn-guard change verification
Ging language modernization
Gon naming
Hisoka edge cases
Killua perf
Kite change integrity
Knov contracts
Knuckle SQL
Komugi flake/determinism
Kurapika security
Law decomposition
Leorio docs
Luffy product
Mafu-san process
Mafuuu contracts
Melody dispatch/pairing
Meruem structural
Nami frontend
Netero mechanical checks
Pariston premise testing
Pen-botter product gaps
Razor verification
Robin duplication
Ryosuke Go arch
Takumi concurrency
Zoro shape

🤖 Managed by Coder Agents.

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Clean, focused PR. The form wiring is correct, the Storybook test is genuine (end-to-end from click to payload), and the filter-then-render pattern matches the codebase conventions.

5 P3 findings, 3 P4 findings, no blockers. The biggest themes: the "Xhigh" label looks like a typo now that it's front and center in a dropdown (7 reviewers flagged this), the PR description claims provider-scoped filtering that the code doesn't implement, and the inline Select rendering duplicates SelectField for a single-string difference that a prop could solve.

"The only non-obvious content is the placement guidance." Gon, on the comments

🤖 This review was automatically generated with Coder Agents.

<SelectItem value={unsetSelectValue}>Not set</SelectItem>
{(field.enum ?? []).map((option) => (
<SelectItem key={option} value={option}>
{capitalize(option)}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P3 [CRF-1] capitalize("xhigh") renders "Xhigh" in the dropdown. Every sibling label (None, Minimal, Low, Medium, High, Max) reads as a natural word. "Xhigh" looks like a typo or internal codename to an admin configuring effort bounds. (Leorio P3, Hisoka P3, Luffy P3, Pariston P3, Chopper Nit)

This PR promotes these labels from buried text inputs in Advanced to a prominent always-visible dropdown. A small label map fixes it:

const effortDisplayName: Record<string, string> = { xhigh: "Extra High" };
// in the option rendering:
{effortDisplayName[option] ?? capitalize(option)}

The underlying enum value stays "xhigh". Only the UI label changes.

🤖

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 Generated by Coder Agents on behalf of @DanielleMaywood.

CRF-1 intentionally unchanged. This was already discussed on PR26974, and we are keeping Xhigh for this stack.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Panel closed (R2, 3/5 accept). Kite, Pariston, and Mafu-san accepted the defense: the decision was made by a human on the base PR (#26974). The consequence is cosmetic and does not cause misconfiguration.

🤖

* Kept out of the Advanced section so admins can configure effort bounds
* without expanding anything.
*/
export const ReasoningEffortConfigFields: FC<ModelConfigFieldsProps> = ({

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P3 [CRF-2] The PR description says the selects are "limited to the selected provider's supported effort set, hidden for providers without reasoning effort support." Neither is implemented. provider is accepted via ModelConfigFieldsProps but never destructured or read. The fields come from getVisibleGeneralFields(), which is provider-independent. The selects render unconditionally for all providers with the full 7-value enum. (Kite P3, Mafu-san P2, Pariston Nit)

The code is consistent with the architecture: PricingModelConfigFields and GeneralModelConfigFields also ignore provider because general fields are provider-independent by design. No code change needed; the PR description should be corrected to match the actual behavior.

🤖

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 Generated by Coder Agents on behalf of @DanielleMaywood.

CRF-2 fixed. The PR body now describes the provider-independent behavior instead of claiming provider-limited or hidden fields.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verified fixed. PR description now describes provider-independent behavior.

🤖

);
};

/**

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P3 [CRF-3] Five comments in this PR restate what the function name, code body, or call site already shows. Each is independently small, but the pattern adds noise. (Gon)

Locations and suggested rewrites:

  1. Line 53 (isReasoningEffortField JSDoc): delete. The name and body say it.
  2. Line 225 (story comment): // No section expansion needed; effort fields are in the top grid.
  3. Lines 663-668 (this JSDoc): /** Reasoning effort selects, placed outside Advanced so admins see them without expanding. */
  4. Lines 689-692 (inline comment): // Inline select because SelectField's "Default" unset label clashes with "Default Reasoning Effort".
  5. Line 747 (GeneralModelConfigFields JSDoc): Reasoning effort fields are excluded; see ReasoningEffortConfigFields.

🤖

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 Generated by Coder Agents on behalf of @DanielleMaywood.

CRF-3 fixed. The comments were trimmed to keep only the useful context.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verified fixed. Comments trimmed to keep only placement context and cross-references.

🤖

// unset choice can read "Not set": next to a field named
// "Default Reasoning Effort", the generic "Default" label
// would be ambiguous.
return (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P3 [CRF-4] This 44-line inline select rendering (lines 693-736) is structurally identical to SelectField (lines 241-299) in the same file. The only behavioral difference is the unset label: "Not set" vs "Default". The comment at line 689 documents the reason, and the reason is solid, but the fix is a prop, not a copy. (Robin P3, Zoro P3)

Add a placeholderLabel prop to SelectField:

const SelectField: FC<
  FieldRenderContext & {
    // ... existing props
    placeholderLabel?: string; // defaults to "Default"
  }
> = ({ ..., placeholderLabel = "Default" }) => {

Then ReasoningEffortConfigFields calls SelectField with placeholderLabel="Not set". ~12 lines vs ~70. Future changes to SelectField (styling, aria, error rendering) propagate automatically.

🤖

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 Generated by Coder Agents on behalf of @DanielleMaywood.

CRF-4 fixed. SelectField now supports a placeholderLabel, and the reasoning effort fields reuse it with Not set.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verified fixed. SelectField gained placeholderLabel prop; ReasoningEffortConfigFields delegates with "Not set". No duplication remains.

🤖

"Max",
]) {
await expect(
screen.getByRole("option", { name: option }),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P3 [CRF-5] After userEvent.click(defaultSelect), options are queried synchronously with screen.getByRole("option", ...) (line 250). After userEvent.click(maxSelect), the option is queried asynchronously with await screen.findByRole("option", ...) (line 256). Both interactions follow the same pattern: click a Radix SelectTrigger, then query portal content. (Komugi)

This works today because React 18 commits discrete event state updates synchronously and createPortal renders within the same commit. But the inconsistency within a single test is a rough edge: a React or Radix update that changes portal commit timing would break getByRole while findByRole survives. Unify on findByRole for both dropdowns.

🤖

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 Generated by Coder Agents on behalf of @DanielleMaywood.

CRF-5 fixed. The story now uses async option lookup for both dropdown interactions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verified fixed. Both dropdowns now use findByRole consistently.

🤖


// The effort selects sit in the always-visible top grid; no
// collapsible section is expanded in this story.
const defaultSelect = canvas.getByRole("combobox", {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P4 [CRF-7] The selects render with placeholder="Not set" and no initial value. The test immediately queries for visibility and interacts. One await expect(defaultSelect).toHaveTextContent("Not set") before interaction would catch an unexpected default. (Bisky)

🤖

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 Generated by Coder Agents on behalf of @DanielleMaywood.

CRF-7 fixed. The story now asserts both reasoning effort selects initially show Not set.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verified fixed. Both selects assert toHaveTextContent("Not set") before interaction.

🤖

},
};

export const ReasoningEffortVisibleWithoutExpanding: Story = {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P4 [CRF-8] No story exercises selecting a value, clearing it back to "Not set," and confirming the payload omits reasoning_effort. The unsetSelectValue -> "" mapping is unit-tested in modelConfigFormLogic.test.ts, but the rendering round-trip is not. (Bisky)

🤖

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 Generated by Coder Agents on behalf of @DanielleMaywood.

CRF-8 intentionally skipped because unit coverage already verifies the omitted payload behavior for unset reasoning effort.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Panel closed (R2, 5/5 accept). Bisky traced the data path end-to-end: SelectField onValueChange maps unsetSelectValue to "", buildModelConfigFromForm treats "" as unset, unit test at modelConfigFormLogic.test.ts:505 confirms reasoning_effort is undefined. The remaining gap is Radix component behavior, not application logic.

🤖

))}
</SelectContent>
</Select>
{fieldError && (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P4 [CRF-9] No story verifies the validation error message renders in the DOM. The default > max validation is well-tested in modelConfigFormLogic.test.ts, but the {fieldError && (<p>...</p>)} rendering path at line 730 has no visual test. (Bisky)

🤖

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 Generated by Coder Agents on behalf of @DanielleMaywood.

CRF-9 fixed. Added a Storybook validation story asserting the rendered default > max error message.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verified fixed. ReasoningEffortValidationError story sets default=High, max=Low and asserts the error message renders.

🤖

@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from ee3f120 to 3136441 Compare July 8, 2026 15:38
@DanielleMaywood

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

All R1 findings addressed or closed. Fixes verified by the panel. Nice class fix on CRF-4: placeholderLabel prop is the right solution.

Contested findings resolved: CRF-1 (Xhigh label, 3/5 accepted the prior-PR decision) and CRF-8 (clear-path story, 5/5 accepted the unit-test coverage defense).

1 new P3 from the en-dash fix, 1 Nit. The en-dash removal was correct, but the replacement for negative-range placeholders needs a different separator.

"I tried to build a case against this and couldn't." Pariston, on the overall design

🤖 This review was automatically generated with Coder Agents.

frequency_penalty: "-2.02.0",
temperature: "0.0-2.0",
top_p: "0.0-1.0",
presence_penalty: "-2.0-2.0",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P3 [CRF-10] The en-dash removal was correct (project bans U+2013), but "-2.0-2.0" has three consecutive hyphens with no visual distinction between the minus sign and the range separator. temperature: "0.0-2.0" is unambiguous because neither bound is negative. (Hisoka P3, Gon P3)

Fix: use a word separator for negative ranges:

presence_penalty: "-2.0 to 2.0",
frequency_penalty: "-2.0 to 2.0",

Or apply uniformly: "0.0 to 2.0", "0.0 to 1.0", "-2.0 to 2.0", "-2.0 to 2.0".

🤖

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Coder Agents generated: Fixed in 3485634. The range placeholders now use unambiguous word separators uniformly: 0.0 to 2.0, 0.0 to 1.0, and -2.0 to 2.0.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verified fixed in 34856347b313. All four placeholders now use unambiguous "to" separators.

🤖

play: async ({ canvasElement, args }) => {
const canvas = within(canvasElement);

// No section expansion needed; effort fields are in the top grid.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Nit [CRF-11] The CRF-3 fix was a genuine improvement. Three residual trims worth considering: (Gon)

  1. Line 225 (this comment): the story name ReasoningEffortVisibleWithoutExpanding already communicates that no expansion is needed. Delete.
  2. ModelConfigFields.tsx:664: "Reasoning effort selects" restates the component name. Trim to: /** Outside Advanced so admins see effort fields without expanding. */
  3. ModelConfigFields.tsx:701: "General model config fields shown under Advanced" is visible from context. Trim to: /** For reasoning effort see ReasoningEffortConfigFields. */

🤖

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Coder Agents generated: Fixed in 3485634. Trimmed the story comment and shortened the reasoning effort comments.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verified fixed in 34856347b313. Story comment deleted, doc comments shortened.

🤖

@DanielleMaywood
DanielleMaywood force-pushed the dm/reasoning-effort-3-models-page branch from 3136441 to 3485634 Compare July 8, 2026 18:19
@DanielleMaywood

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

All findings resolved across 3 rounds. CRF-10 (ambiguous placeholders) fixed with uniform "to" separators. CRF-11 (comment trimming) addressed. Clean code, proportional scope, genuine tests.

CI failures (gen, lint, required) are not from this diff. The changed files compile and lint cleanly.

"The agent grepped for the class, not the instance." Mafu-san, on the CRF-10 fix

🤖 This review was automatically generated with Coder Agents.

@DanielleMaywood
DanielleMaywood requested a review from johnstcn July 9, 2026 16:00
@DanielleMaywood
DanielleMaywood marked this pull request as ready for review July 9, 2026 22:04
@DanielleMaywood
DanielleMaywood merged commit e737c0a into dm/reasoning-effort-1-model-config Jul 9, 2026
27 of 31 checks passed
@DanielleMaywood
DanielleMaywood deleted the dm/reasoning-effort-3-models-page branch July 9, 2026 22:04
@coderagents

coderagents Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Documentation Check

Updates Needed

  • docs/ai-coder/agents/models.md - The "General options" table (line ~163) is missing the new Default Reasoning Effort and Max Reasoning Effort fields. These are provider-independent model config options now visible in the top section of the model form. They should be added to the table alongside the other general options, with descriptions noting the default <= max validation constraint and the available values (none, minimal, low, medium, high, xhigh, max).

Note: This gap spans the full reasoning effort stack (#26974, #26975, #26976, #26977, #27061). None of the PRs in the stack update this doc page.


Automated review via Coder Agents

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