Skip to content

feat(gui): show only usable vision describers in the delegation card shape - #1328

Merged
lidge-jun merged 8 commits into
devfrom
codex/260809-vision-sidecar-card
Aug 9, 2026
Merged

feat(gui): show only usable vision describers in the delegation card shape#1328
lidge-jun merged 8 commits into
devfrom
codex/260809-vision-sidecar-card

Conversation

@lidge-jun

@lidge-jun lidge-jun commented Aug 9, 2026

Copy link
Copy Markdown
Owner

Summary

Builds on #1327. Two inline review comments on the running dashboard drove this: make the Vision sidecar card match the subagent delegation panel above it, and follow that panel's pattern for the reasoning control — raw wire values, compact.

The picker now consumes the server's eligible-describer list from #1327 instead of filtering by provider name, so it stops offering models that cannot see. The field is optional: an older server omits it and the client falls back to the previous list rather than rendering an empty picker.

Three things a reviewer should look at:

  • saveSidecar rebuilds SidecarData field by field at three separate sites (optimistic update, success writeback, session cache), so a new field is silently dropped unless all three are updated. Missing the success writeback alone would have reverted the picker to the legacy list after every save — on exactly the interaction the user performs.
  • The layout is the panel itself, not an inner row. .dash-sidecar-card sets flex-direction: column and .dash-delegation-summary never resets that property, so combining the two classes would have produced a column regardless of import order.
  • The control group holds its intrinsic width and the copy block is the one that yields. Letting the controls shrink does not wrap them — .custom-select keeps its own min-width, so the children overflow their shrunken container and slide left underneath the hint text. Below 22rem the card stacks instead of overflowing.
  • The web search card beside it now wears the same shell (51bfc78a5), so the pair stops reading as two different components in one grid. No behavior change there — it keeps its own model list and its single control. Two consequences worth noting: the compact effort rule matches :nth-child(2) rather than :last-child, because the web search card's single select is simultaneously first and last child and would otherwise be shrunk to the effort width; and .dash-sidecar-card / .dash-sidecar-card__row lose their last user, so those rules are removed rather than left to rot. The grid also moves from align-items: start to stretch so a hint wrapping to a different line count cannot leave one card visibly short.

The effort select renders the wire value (lowmax) rather than a localized label. The card's own prose stays translated; only the enum values are raw. visionReasoningLabel is kept because gui/tests/vision-reasoning-contract.test.ts still covers it.

Verification

  • bun run typecheck — exit 0
  • bun run lint:gui — clean
  • bun run build:gui — exit 0
  • bun test ./gui/tests — 699 pass, 0 fail
  • bun run test (full suite) — 10146 pass, 0 fail, 632 files
  • Render grounding against a real server started from this worktree (isolated OPENCODEX_HOME, headless Chrome over CDP, cache-busting reloads):
    • live GET /api/sidecar-settings returned 7 eligible models, gpt-5.6-luna first and flagged baseline; the blind rows are absent
    • opening the dropdown rendered exactly those 7 options
    • Korean locale: the card title and hint stay Korean while the effort select reads low, not 낮음
    • measured at 1440 / 1280 / 768 / 420 / 330 px: both selects on one row, positive hint-to-control gap at every row width, zero right overflow, clean column stack at 330
    • after the web search card joined the shell, re-measured at the same widths: both cards report flex-direction: row with equal heights while the grid is two-up, no control overflow, positive gaps throughout
  • bun test ./gui/tests after the shell change — 703 pass, 0 fail

Vision sidecar card in the delegation form factor, Korean locale

Filtered model dropdown showing only image-capable models

Both sidecar cards sharing the shell, equal height while the grid is two-up:

Web search and vision sidecar cards in the matching delegation shell

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults.

Stack (merge bottom-up):

# PR Layer Review focus
3 dashboard vision card ← you are here GUI layout, non-localized effort values
2 #1327 server the 400 gate and the allowed-list payload
1 #1326 predicate the inversion case and the tri-state

Depends on #1327. Review this PR's diff only.

Summary by CodeRabbit

  • New Features

    • Added vision-capable model filtering for sidecar configuration.
    • Added provider-aware model suggestions with baseline options and support for configured legacy models.
    • Added validation that prevents selecting known text-only models while preserving unknown model IDs.
    • Updated the dashboard vision sidecar with model-specific options, backend selection, and reasoning controls.
    • Added responsive sidecar card layouts and improved handling of long labels.
  • Bug Fixes

    • Preserved saved model and backend settings when available options are incomplete.
  • Tests

    • Added coverage for filtering, fallback behavior, deduplication, backend resolution, and persisted selections.

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: f2797bcb-192d-496c-b9d6-b1302b7dfe49

📥 Commits

Reviewing files that changed from the base of the PR and between 226b60f and d685362.

📒 Files selected for processing (1)
  • gui/src/styles-dashboard-workspace.css

📝 Walkthrough

Walkthrough

The change defines vision-model eligibility and management API validation, then integrates server-provided options into dashboard state, persistence, rendering, and reasoning controls. Supporting documents record capability research, audits, stacked publication, landing, and verification.

Changes

Vision sidecar model filtering

Layer / File(s) Summary
Eligibility contract
devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md, 001_capability_signal_inventory.md, 010_vision_eligibility_core.md
Defines capability signals, noVisionModels exclusions, unknown-model handling, backend mapping, baseline models, and ordered picker options.
Management API validation
devlog/_fin/260809_vision_sidecar_model_filter/020_management_api_allowed_models.md
Defines visionModels responses, write-time rejection for known text-only models, preservation of unknown and configured values, clearing behavior, and Claude Code override validation.
Dashboard model selection
gui/src/pages/dashboard-shared.ts, gui/src/pages/use-dashboard-data.ts, gui/src/pages/dashboard-overview-sections.tsx, gui/src/styles-dashboard-workspace.css, gui/tests/vision-model-options.test.ts, devlog/_fin/260809_vision_sidecar_model_filter/030_dashboard_vision_card.md
Consumes server-provided options with legacy fallback, preserves backend metadata through state and caching, adds model-aware reasoning controls, and updates responsive sidecar layout and tests.
Stack delivery and outcome
devlog/_fin/260809_vision_sidecar_model_filter/002_audit_synthesis.md, 040_stack_publication.md, 050_stack_landing.md, 060_outcome.md
Records audit findings, stacked PR publication and landing procedures, verification results, shipped behavior, and a follow-up about ambiguous model IDs.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant SidecarSettingsAPI
  participant useDashboardData
  participant DashboardSidecarPanels
  SidecarSettingsAPI-->>useDashboardData: visionModels
  useDashboardData->>useDashboardData: derive vision model options
  useDashboardData-->>DashboardSidecarPanels: options and sidecar state
  DashboardSidecarPanels->>SidecarSettingsAPI: save model and reasoning settings
  SidecarSettingsAPI-->>useDashboardData: updated settings and visionModels
Loading

Possibly related PRs

Suggested reviewers: wibias

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.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 GUI changes: filtering vision models to usable options and adopting the delegation card layout.
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 unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/260809-vision-sidecar-card

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.

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the enhancement New feature or request label Aug 9, 2026

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 373e5ad653

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

onChange={model => {
const ladder = visionReasoningLadder(models, model);
const reasoning = clampVisionReasoningToLadder(ladder, visionReasoning);
void saveSidecar({ vision: { model, backend: sidecarBackendForModel(models, model), reasoning } });

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Save the backend supplied with each vision option

When an offered model comes from an Anthropic-adapter provider whose configured provider name is not literally anthropic, this call infers openai from /api/models even though /api/sidecar-settings supplied backend: "anthropic" for the option; the same misclassification occurs for an Anthropic baseline absent from /api/models. Selecting that model therefore persists the wrong explicit backend, causing the runtime to invoke the OpenAI describer with a Claude model or skip vision entirely. Preserve each server option's backend in visionModelOptions and use it here instead of sidecarBackendForModel.

AGENTS.md reference: gui/AGENTS.md:L9-L10

Useful? React with 👍 / 👎.

@Ingwannu Ingwannu left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Requesting changes for a functional persistence bug. The server option already carries its backend, but the dashboard drops that identity and later re-infers the backend from /api/models. For an Anthropic-compatible provider not literally named anthropic, or for an Anthropic baseline absent from the catalog, selecting the option can persist backend: openai and route a Claude model through the wrong describer.\n\nPreserve the backend with each vision option and submit that exact backend when the user selects it. Add a regression that selects an Anthropic option whose provider name is custom and verifies the saved backend remains anthropic. I am not making the final UI/UX approval decision; @lidge-jun should do that after the functional stack is corrected.

@lidge-jun
lidge-jun force-pushed the codex/260809-vision-sidecar-api branch from b640fe4 to 6196fc5 Compare August 9, 2026 05:23
… shape

Two review comments on the running dashboard drove this: make the Vision
sidecar card match the subagent delegation panel above it, and follow that
panel's pattern for the reasoning control -- raw wire values, compact.

The picker now consumes the server's eligible-describer list instead of
filtering by provider name, so it stops offering models that cannot see. The
field is optional: an older server omits it and the client falls back to the
previous list rather than rendering an empty picker.

saveSidecar rebuilds SidecarData field by field at three separate sites, so a
new field is dropped unless all three are updated. Missing the success
writeback alone would have reverted the picker to the legacy list after every
save -- on exactly the interaction the user performs.

The effort select renders the wire value (low..max) rather than a localized
label, matching the delegation panel. The card's own prose stays translated;
only the enum values are raw.

Layout is the panel itself, not an inner row: .dash-sidecar-card sets
flex-direction: column and .dash-delegation-summary never resets it, so
combining the two classes would have produced a column. The control group
holds its intrinsic width and the copy block is the one that yields, because
letting the controls shrink slides them left underneath the hint text instead
of wrapping. Below 22rem the card stacks rather than overflowing.

Verified by rendering the built dashboard at 1440/1280/768/420/330 and
reading the result back; screenshots are in the plan unit's evidence
directory.

Plan: devlog/_plan/260809_vision_sidecar_model_filter/030
The vision card moved to the delegation panel shape; the web search card
beside it kept the old title-row-plus-hint-underneath shell, so the pair
read as two different components in one grid.

No behavior change. The web search card keeps its own model list and its
single control; only the shell moves.

Three follow-ons fall out of sharing the shell:

- dash-vision-card becomes dash-sidecar-row-card, since it never described
  anything vision-specific -- it carries the grid cell's min-width while
  .dash-delegation-summary supplies the row layout.
- the compact effort rule now matches :nth-child(2) rather than
  :last-child. The web search card has a single select that is both first
  and last child, and :last-child would have shrunk its model picker to the
  effort width.
- .dash-sidecar-card and .dash-sidecar-card__row lose their last user, so
  their rules are removed rather than left to rot.

.dash-sidecar-grid switches from align-items: start to stretch: the two
cards are a matched pair, and a hint that wraps to a different line count in
one should not leave the other visibly short.

Verified by rendering the built dashboard at 1440/1280/768/420/330: both
cards report flex-direction row with equal heights while the grid is
two-up, no control overflow, and a positive hint-to-control gap throughout.
The server now says which executor would run each describer, and the picker
discarded it and re-derived one from /api/models, where only a provider named
literally "anthropic" reads as Anthropic. A Claude model offered by a
differently-named adapter, or a baseline missing from a stale catalog, was
saved as openai — the runtime then called the OpenAI describer with a Claude
model, or planned no vision at all.

Options keep their backend through the memo, and the save handler prefers it.
Catalog inference remains for legacy and grandfathered entries, which carry
no server backend.
…ption

Audit follow-up. The server-backend fix covered listed options but not the
compatibility path: against a server that sends no option list, the configured
model is unshifted as a bare entry, so the next save re-inferred its backend
from /api/models and rewrote a working Anthropic describer as openai.

The persisted backend now travels with that entry. What is already stored is
better evidence than an inference over a catalog that never knew the model.
@lidge-jun
lidge-jun force-pushed the codex/260809-vision-sidecar-card branch from 51bfc78 to c0e6512 Compare August 9, 2026 05:42
@lidge-jun
lidge-jun changed the base branch from codex/260809-vision-sidecar-api to dev August 9, 2026 05:47
Final cross-layer audit. The client collapsed "no visionModels key" and
"visionModels: []" into one legacy branch, so a current server that had computed
nothing eligible got its answer replaced by the unfiltered openai+anthropic
catalog — putting back the text-only rows this feature removes.

Only an absent key now means a server that predates the field. An empty list is
a real answer and is shown as one, with the configured model still grandfathered
so the picker cannot silently rewrite it.
Records the merge commits, what each user requirement is answered by, and the
four audit rounds — including the last one, which caught a GUI path that would
have quietly undone the filter after both halves had been reviewed separately.

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

Actionable comments posted: 4

🤖 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 `@devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md`:
- Line 55: Update the opening pseudocode or diagram fences to specify the text
language: use ```text at
devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md lines 55 and 125,
040_stack_publication.md line 8, 050_stack_landing.md line 17, and
002_audit_synthesis.md line 19. No other fence content needs changing.

In
`@devlog/_fin/260809_vision_sidecar_model_filter/010_vision_eligibility_core.md`:
- Around line 131-155: Synchronize the documented visionEligibleModelOptions
contract with its four-argument caller: in
devlog/_fin/260809_vision_sidecar_model_filter/010_vision_eligibility_core.md
lines 131-155, document the active Anthropic provider-name parameter and its
routing behavior; in
devlog/_fin/260809_vision_sidecar_model_filter/020_management_api_allowed_models.md
lines 54-80 and 158-160, pass and document that provider name in both helper
examples so they use the same contract.

In `@devlog/_fin/260809_vision_sidecar_model_filter/060_outcome.md`:
- Around line 5-9: Replace the `(this unit's close)` placeholder in the layer-3
dashboard card row with the actual layer-3 merge commit SHA, preserving the
existing table structure and ensuring the shipped outcome records an auditable
commit.

In `@gui/src/styles-dashboard-workspace.css`:
- Around line 115-125: Update the narrow-breakpoint styles for
.dash-sidecar-row-card .dash-delegation-controls so the model and effort selects
can wrap or stack instead of remaining in a single non-wrapping row. Preserve
their minimum widths and ensure the responsive layout prevents horizontal
overflow.
🪄 Autofix

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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 32c1e885-0394-4cfa-b659-a0727bcb9a0f

📥 Commits

Reviewing files that changed from the base of the PR and between d4758bc and 226b60f.

⛔ Files ignored due to path filters (3)
  • devlog/_fin/260809_vision_sidecar_model_filter/evidence/030_sidecar_cards_matched.png is excluded by !**/*.png
  • devlog/_fin/260809_vision_sidecar_model_filter/evidence/030_vision_card_delegation_form.png is excluded by !**/*.png
  • devlog/_fin/260809_vision_sidecar_model_filter/evidence/030_vision_card_filtered_dropdown_ko.png is excluded by !**/*.png
📒 Files selected for processing (14)
  • devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md
  • devlog/_fin/260809_vision_sidecar_model_filter/001_capability_signal_inventory.md
  • devlog/_fin/260809_vision_sidecar_model_filter/002_audit_synthesis.md
  • devlog/_fin/260809_vision_sidecar_model_filter/010_vision_eligibility_core.md
  • devlog/_fin/260809_vision_sidecar_model_filter/020_management_api_allowed_models.md
  • devlog/_fin/260809_vision_sidecar_model_filter/030_dashboard_vision_card.md
  • devlog/_fin/260809_vision_sidecar_model_filter/040_stack_publication.md
  • devlog/_fin/260809_vision_sidecar_model_filter/050_stack_landing.md
  • devlog/_fin/260809_vision_sidecar_model_filter/060_outcome.md
  • gui/src/pages/dashboard-overview-sections.tsx
  • gui/src/pages/dashboard-shared.ts
  • gui/src/pages/use-dashboard-data.ts
  • gui/src/styles-dashboard-workspace.css
  • gui/tests/vision-model-options.test.ts

Comment on lines +5 to +9
| Layer | PR | Merge commit | What landed |
|---|---|---|---|
| 1 — eligibility predicate | #1326 | `eebd9d48f` | `src/vision/eligibility.ts`, the devlog unit |
| 2 — management API + write gate | #1327 | `d4758bc94` | options module, both routes, shared model resolver |
| 3 — dashboard card | #1328 | (this unit's close) | filtered picker, backend provenance, card shell |

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.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Record the layer-3 merge commit.

This document states that the stack shipped, but the dashboard-card row uses (this unit's close) instead of the actual merge commit. 050_stack_landing.md requires each layer's merge commit to be recorded, so the final outcome is not auditable.

Replace the placeholder with the layer-3 merge SHA before publishing the shipped outcome.

Proposed documentation fix
- | 3 — dashboard card | `#1328` | (this unit's close) | filtered picker, backend provenance, card shell |
+ | 3 — dashboard card | `#1328` | `<layer-3 merge SHA>` | filtered picker, backend provenance, card shell |
🤖 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 `@devlog/_fin/260809_vision_sidecar_model_filter/060_outcome.md` around lines 5
- 9, Replace the `(this unit's close)` placeholder in the layer-3 dashboard card
row with the actual layer-3 merge commit SHA, preserving the existing table
structure and ensuring the shipped outcome records an auditable commit.

Comment thread gui/src/styles-dashboard-workspace.css

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

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 4

🤖 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 `@devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md`:
- Line 55: Update the opening pseudocode or diagram fences to specify the text
language: use ```text at
devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md lines 55 and 125,
040_stack_publication.md line 8, 050_stack_landing.md line 17, and
002_audit_synthesis.md line 19. No other fence content needs changing.

In
`@devlog/_fin/260809_vision_sidecar_model_filter/010_vision_eligibility_core.md`:
- Around line 131-155: Synchronize the documented visionEligibleModelOptions
contract with its four-argument caller: in
devlog/_fin/260809_vision_sidecar_model_filter/010_vision_eligibility_core.md
lines 131-155, document the active Anthropic provider-name parameter and its
routing behavior; in
devlog/_fin/260809_vision_sidecar_model_filter/020_management_api_allowed_models.md
lines 54-80 and 158-160, pass and document that provider name in both helper
examples so they use the same contract.

In `@devlog/_fin/260809_vision_sidecar_model_filter/060_outcome.md`:
- Around line 5-9: Replace the `(this unit's close)` placeholder in the layer-3
dashboard card row with the actual layer-3 merge commit SHA, preserving the
existing table structure and ensuring the shipped outcome records an auditable
commit.

In `@gui/src/styles-dashboard-workspace.css`:
- Around line 115-125: Update the narrow-breakpoint styles for
.dash-sidecar-row-card .dash-delegation-controls so the model and effort selects
can wrap or stack instead of remaining in a single non-wrapping row. Preserve
their minimum widths and ensure the responsive layout prevents horizontal
overflow.
🪄 Autofix

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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 32c1e885-0394-4cfa-b659-a0727bcb9a0f

📥 Commits

Reviewing files that changed from the base of the PR and between d4758bc and 226b60f.

⛔ Files ignored due to path filters (3)
  • devlog/_fin/260809_vision_sidecar_model_filter/evidence/030_sidecar_cards_matched.png is excluded by !**/*.png
  • devlog/_fin/260809_vision_sidecar_model_filter/evidence/030_vision_card_delegation_form.png is excluded by !**/*.png
  • devlog/_fin/260809_vision_sidecar_model_filter/evidence/030_vision_card_filtered_dropdown_ko.png is excluded by !**/*.png
📒 Files selected for processing (14)
  • devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md
  • devlog/_fin/260809_vision_sidecar_model_filter/001_capability_signal_inventory.md
  • devlog/_fin/260809_vision_sidecar_model_filter/002_audit_synthesis.md
  • devlog/_fin/260809_vision_sidecar_model_filter/010_vision_eligibility_core.md
  • devlog/_fin/260809_vision_sidecar_model_filter/020_management_api_allowed_models.md
  • devlog/_fin/260809_vision_sidecar_model_filter/030_dashboard_vision_card.md
  • devlog/_fin/260809_vision_sidecar_model_filter/040_stack_publication.md
  • devlog/_fin/260809_vision_sidecar_model_filter/050_stack_landing.md
  • devlog/_fin/260809_vision_sidecar_model_filter/060_outcome.md
  • gui/src/pages/dashboard-overview-sections.tsx
  • gui/src/pages/dashboard-shared.ts
  • gui/src/pages/use-dashboard-data.ts
  • gui/src/styles-dashboard-workspace.css
  • gui/tests/vision-model-options.test.ts
🛑 Comments failed to post (2)
devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md (1)

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

Add language identifiers to the documentation fences.

markdownlint-cli2 reports MD040 for these opening fences. Add text to each pseudocode or diagram fence to keep the documentation lint-clean.

  • devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md#L55-L55: use ```text for the eligibility formula.
  • devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md#L125-L125: use ```text for the picker/write-gate rule.
  • devlog/_fin/260809_vision_sidecar_model_filter/040_stack_publication.md#L8-L8: use ```text for the branch diagram.
  • devlog/_fin/260809_vision_sidecar_model_filter/050_stack_landing.md#L17-L17: use ```text for the merge diagram.
  • devlog/_fin/260809_vision_sidecar_model_filter/002_audit_synthesis.md#L19-L19: use ```text for the tri-state rule.
🧰 Tools
🪛 markdownlint-cli2 (0.23.2)

[warning] 55-55: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

📍 Affects 4 files
  • devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md#L55-L55 (this comment)
  • devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md#L125-L125
  • devlog/_fin/260809_vision_sidecar_model_filter/040_stack_publication.md#L8-L8
  • devlog/_fin/260809_vision_sidecar_model_filter/050_stack_landing.md#L17-L17
  • devlog/_fin/260809_vision_sidecar_model_filter/002_audit_synthesis.md#L19-L19
🤖 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 `@devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md` at line 55,
Update the opening pseudocode or diagram fences to specify the text language:
use ```text at devlog/_fin/260809_vision_sidecar_model_filter/000_plan.md lines
55 and 125, 040_stack_publication.md line 8, 050_stack_landing.md line 17, and
002_audit_synthesis.md line 19. No other fence content needs changing.

Source: Linters/SAST tools

devlog/_fin/260809_vision_sidecar_model_filter/010_vision_eligibility_core.md (1)

131-155: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Synchronize the documented eligibility API with its caller.

The supplied src/server/management/vision-sidecar-options.ts calls visionEligibleModelOptions with anthropicSidecar?.providerName as a fourth argument. These snippets define or call a three-argument API. A developer who follows this documentation can create a TypeScript call-signature mismatch or omit the active Anthropic-provider selection behavior.

  • devlog/_fin/260809_vision_sidecar_model_filter/010_vision_eligibility_core.md#L131-L155: Document the fourth parameter in the function contract and its Anthropic routing behavior.
  • devlog/_fin/260809_vision_sidecar_model_filter/020_management_api_allowed_models.md#L54-L80: Pass and document the active Anthropic provider name in the helper example.
  • devlog/_fin/260809_vision_sidecar_model_filter/020_management_api_allowed_models.md#L158-L160: Update the replacement helper example to match the same contract.
📍 Affects 2 files
  • devlog/_fin/260809_vision_sidecar_model_filter/010_vision_eligibility_core.md#L131-L155 (this comment)
  • devlog/_fin/260809_vision_sidecar_model_filter/020_management_api_allowed_models.md#L54-L80
  • devlog/_fin/260809_vision_sidecar_model_filter/020_management_api_allowed_models.md#L158-L160
🤖 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
`@devlog/_fin/260809_vision_sidecar_model_filter/010_vision_eligibility_core.md`
around lines 131 - 155, Synchronize the documented visionEligibleModelOptions
contract with its four-argument caller: in
devlog/_fin/260809_vision_sidecar_model_filter/010_vision_eligibility_core.md
lines 131-155, document the active Anthropic provider-name parameter and its
routing behavior; in
devlog/_fin/260809_vision_sidecar_model_filter/020_management_api_allowed_models.md
lines 54-80 and 158-160, pass and document that provider name in both helper
examples so they use the same contract.

Review finding. Below the stacking breakpoint the control group still held
nowrap, so the two selects' minimums (10.5rem + 6.5rem) exceeded the viewport
the query targets. The reason for nowrap was children sliding under the hint in
the row layout, which no longer applies once the controls own their own line.
@lidge-jun
lidge-jun merged commit e96a81b into dev Aug 9, 2026
56 of 60 checks passed
@Wibias
Wibias deleted the codex/260809-vision-sidecar-card branch August 9, 2026 07:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants