Skip to content

Fix generator schema row tab order#293

Merged
eviltester merged 6 commits into
masterfrom
codex/271-generator-schema-tab-order
Jul 1, 2026
Merged

Fix generator schema row tab order#293
eviltester merged 6 commits into
masterfrom
codex/271-generator-schema-tab-order

Conversation

@eviltester

@eviltester eviltester commented Jun 30, 2026

Copy link
Copy Markdown
Owner

Summary

Fixes the generator schema row keyboard tab order so primary editing controls are reached before row action buttons.

  • Keeps the visual row-action column on the left while moving row actions after editable controls in DOM/tab order.
  • Defers focusout validation until native Tab focus settles, preventing row re-rendering from dropping focus to the page body.
  • Restores focus for schema row action buttons after validation re-renders.
  • Ignores Codex dev-server log variants with .codex-dev-web*.log.

Fixed Issues

Closes #271
Closes #291

Validation

Summary by CodeRabbit

  • Bug Fixes
    • Improved keyboard navigation in schema rows so Tab follows a consistent, intuitive order through inputs, links, and row actions.
    • Focus restoration after schema row updates is now more reliable.
    • Validation on blur is deferred until focus has settled, reducing premature updates.
  • UI Improvements
    • Refreshed shared schema row layout using explicit grid placement for clearer control positioning.
  • Tests
    • Added/expanded coverage for tab order, focus restoration, and deferred blur validation.
  • Documentation
    • Updated and added blog posts to reflect release workflow and helper/auto-increment capabilities.
  • Chores
    • Updated log ignore patterns for cleaner local checkouts.

Copilot AI review requested due to automatic review settings June 30, 2026 09:51

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@eviltester, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 10 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7afaceb1-24ca-4102-b834-bcf8a7d6834b

📥 Commits

Reviewing files that changed from the base of the PR and between cacd797 and 9c06fd1.

📒 Files selected for processing (4)
  • apps/web/styles.css
  • docs-src/blog/2026-06-30-increments-and-helpers.md
  • packages/core-ui/js/gui_components/shared/test-data/schema/shared-schema-editor-controller.js
  • packages/core-ui/src/tests/interaction/support/focused-app-test-data-harness.js
📝 Walkthrough

Walkthrough

Fixes keyboard tab order in schema editor rows by moving row actions after the validation message, adding explicit grid placement for row controls, deferring blur-time semantic validation, and updating related test harnesses and coverage. The PR also updates two release blog posts and broadens one gitignore log pattern.

Changes

Schema Row Tab Order Fix

Layer / File(s) Summary
Row markup and grid placement
packages/core-ui/js/gui_components/shared/test-data/schema/shared-schema-editor-ui.js, apps/web/styles.css
The shared schema row action buttons are moved later in the row template, and explicit grid placement is added for the row controls and mobile name-input layout.
Focus state and blur validation
packages/core-ui/js/gui_components/shared/test-data/schema/schema-focus-state.js, packages/core-ui/js/gui_components/shared/test-data/schema/shared-schema-editor-controller.js
captureActiveFieldState now requires a row plus either a field or action, and focus-out semantic validation is scheduled on the next tick through the new row-level scheduler.
Interaction harnesses and browser tab flow
packages/core-ui/src/tests/interaction/support/focused-app-test-data-harness.js, packages/core-ui/src/tests/interaction/support/focused-generator-harness.js, apps/web/src/tests/browser/generator/functional/schema-edit.spec.js
The focused app and generator harnesses switch to async focus-aware input/select handling, and the Playwright schema-edit test asserts the tab sequence through the row controls.
Focus-state and row tab-order tests
packages/core-ui/src/tests/shared/schema-focus-state.test.js, packages/core-ui/src/tests/shared/shared-schema-editor-controller.test.js, packages/core-ui/src/tests/shared/shared-schema-editor-ui.test.js
New Jest coverage verifies focus capture and restore for action buttons and fields, deferred timeout scheduling on focus-out, and the tab order of focusable controls within a rendered schema row.

Blog Release Posts

Layer / File(s) Summary
Updated June 12 release article
docs-src/blog/2026-06-12-combinatorial-grid-workflows.md
The June 12 blog post updates its intro, section ordering, and later workflow steps, including section renumbering and replacement of one section with inline enum content.
Added June 30 release article
docs-src/blog/2026-06-30-increments-and-helpers.md
A new June 30 blog post is added with front matter, an introduction, and sections covering timestamp auto-increments, constraint-aware sequences, and unsafe Faker helper expressions.

Gitignore Log Pattern Update

Layer / File(s) Summary
Ignore codex-dev web log files
.gitignore
The .gitignore entry changes from .codex-dev-web.log to .codex-dev-web*.log.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related issues

  • #235 — The schema/generator tab-order, focus-state, and row-layout changes match the described narrow-screen focus-order problem in the schema UI.

Poem

🐰 I hopped through tabs in a neat little line,
Row fields stayed ordered; the focus felt fine.
Buttons moved back, and the grid held the way,
No more jumping astray at the end of the day.
With tests all around, the bunny does cheer —
a tidy schema row is finally clear!

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The PR includes unrelated blog post edits in docs-src that do not support the schema row tab-order fix. Move the blog post changes to a separate documentation PR, or remove them if they are not needed for this fix.
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 (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately describes the main change to generator schema row tab order.
Linked Issues check ✅ Passed The changes address #271 and #291 by reordering row controls, deferring focus-out validation, and adding tab-order/focus-restoration tests.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/271-generator-schema-tab-order

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.

@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: aee9eebf16

ℹ️ 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".

Comment thread apps/web/styles.css
Comment on lines 1987 to +1989
.shared-schema-row-actions {
grid-column: 1;
grid-row: 1;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Reset row placement in tablet layout

At widths 481–980px, the later @media (max-width: 980px) rules only change grid-column for the row actions and name input and do not reset grid-row. Because this new base rule pins the actions to row 1 while the new name-input rule also pins the textbox to row 1, the action buttons and column-name field overlap on tablet-width layouts; add responsive grid-row overrides while keeping the desktop left-action column.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Implemented in aa7450b1.

The tablet layout now explicitly places the shared schema row actions on grid row 1 and the column-name input on grid row 2 inside the max-width: 980px rules, so the desktop left-action-column placement does not carry an overlapping row assignment into tablet widths.

Verified with the targeted generator schema-edit Playwright spec, pnpm run verify:ui, pnpm run verify:local, and the pre-push verification hook.

Comment on lines +53 to +56
element.focus();
element.value = '';
fireEvent.input(element, { target: { value: '' } });
fireEvent.change(element, { target: { value: '' } });

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 Drive harness inputs through user-like events

AGENTS.md's Browser Test Interaction Rules require UI/browser abstractions to use user-like interactions only and avoid synthetic event dispatch or direct DOM hooks; this helper now focuses the element, mutates .value, and dispatches input/change directly for every clear. Tests using this focused app harness can therefore pass without exercising the real click/clear/type path, which is especially risky for this focusout/tab-order fix; keep the generic path on userEvent and limit direct dispatch to unavoidable jsdom-only exceptions.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Implemented in aa7450b1.

The focused app harness now uses user-event driven interactions for the generic helper path: user.click, user.clear, user.type/user.paste, user.selectOptions, and user.tab. The only special handling is still through user-event: number inputs replace the selected existing value in one type action so the row-count control does not clamp an intermediate empty value before typing.

Verified with the focused app harness Jest suites, the targeted generator schema-edit Playwright spec, pnpm run verify:ui, pnpm run verify:local, and the pre-push verification hook.

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

🧹 Nitpick comments (1)
packages/core-ui/src/tests/shared/shared-schema-editor-ui.test.js (1)

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

Add a command-row tab-order case.

This only exercises the value-row branch. renderSharedSchemaRows builds command rows through a different path (pick-command, help link, params, edit-params), and the acceptance criteria here explicitly include command parameters. A companion assertion for a faker/domain row would close the main remaining regression gap.

🤖 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 `@packages/core-ui/src/tests/shared/shared-schema-editor-ui.test.js` around
lines 92 - 111, Add a command-row tab-order test to cover the non-value-row path
in `renderSharedSchemaRows`. The current case only verifies the editable
value-row branch, so add a companion assertion for a command row that exercises
`pick-command`, the help link, params, and edit-params controls. Keep the
focus-order check in the same style as the existing `orders focusable row
controls from editable fields to row actions` test, using the row query and
focusable element collection to validate the expected tab sequence.
🤖 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.

Nitpick comments:
In `@packages/core-ui/src/tests/shared/shared-schema-editor-ui.test.js`:
- Around line 92-111: Add a command-row tab-order test to cover the
non-value-row path in `renderSharedSchemaRows`. The current case only verifies
the editable value-row branch, so add a companion assertion for a command row
that exercises `pick-command`, the help link, params, and edit-params controls.
Keep the focus-order check in the same style as the existing `orders focusable
row controls from editable fields to row actions` test, using the row query and
focusable element collection to validate the expected tab sequence.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7845862a-9232-4ebb-8d3c-15e343309dea

📥 Commits

Reviewing files that changed from the base of the PR and between 7b6a120 and aee9eeb.

📒 Files selected for processing (11)
  • .gitignore
  • apps/web/src/tests/browser/generator/functional/schema-edit.spec.js
  • apps/web/styles.css
  • packages/core-ui/js/gui_components/shared/test-data/schema/schema-focus-state.js
  • packages/core-ui/js/gui_components/shared/test-data/schema/shared-schema-editor-controller.js
  • packages/core-ui/js/gui_components/shared/test-data/schema/shared-schema-editor-ui.js
  • packages/core-ui/src/tests/interaction/support/focused-app-test-data-harness.js
  • packages/core-ui/src/tests/interaction/support/focused-generator-harness.js
  • packages/core-ui/src/tests/shared/schema-focus-state.test.js
  • packages/core-ui/src/tests/shared/shared-schema-editor-controller.test.js
  • packages/core-ui/src/tests/shared/shared-schema-editor-ui.test.js

@greptile-apps

greptile-apps Bot commented Jun 30, 2026

Copy link
Copy Markdown

Greptile Summary

This PR fixes keyboard Tab navigation order in schema row editing by moving the row-action buttons (drag, add, remove, up, down) to the end of the DOM while keeping them visually first via explicit CSS Grid column placement. It also defers focusout validation until after Tab focus has settled (using a 0 ms setTimeout), preventing row re-renders from dropping focus to the page body, and extends focus-state capture/restoration to all row-action buttons so focus is correctly returned after validation re-renders.

  • DOM/tab-order fix (shared-schema-editor-ui.js): the shared-schema-row-actions div is moved to the end of each row template; CSS grid-column: 1 keeps it visually leftmost.
  • Deferred blur validation (shared-schema-editor-controller.js): new scheduleFocusSettledSemanticValidationForRow schedules validation with a 0 ms delay on focusout, replacing the former synchronous immediate call that could displace focus mid-Tab sequence.
  • Broader focus capture (schema-focus-state.js): captureActiveFieldState now saves and restores focus for all action buttons, not only pick-command, covering the new tab-reachable buttons.

Confidence Score: 5/5

Safe to merge — changes are tightly scoped to DOM ordering, CSS grid placement, and a well-understood 0 ms timer deferral; all three layers are covered by new unit, component, and Playwright tests.

The DOM reordering is straightforward: actions div moves to the end of the template while CSS grid keeps the visual layout identical. The deferred-validation approach (setTimeout 0) is a standard event-loop technique with no side effects on the validation logic itself. Focus capture/restore was already present for pick-command; widening it to all action buttons is a minimal, well-tested extension. The test harness migration from fireEvent to userEvent aligns with the project's interaction-test guidelines and reduces brittleness. All changed paths have direct test coverage added in this PR.

No files require special attention.

Important Files Changed

Filename Overview
packages/core-ui/js/gui_components/shared/test-data/schema/shared-schema-editor-ui.js Row actions div moved to end of row template HTML; CSS grid placement keeps visual order unchanged. Core of the tab-order fix.
packages/core-ui/js/gui_components/shared/test-data/schema/shared-schema-editor-controller.js Adds scheduleFocusSettledSemanticValidationForRow (0 ms defer); handleFocusOut now uses this instead of immediate validation, preventing mid-Tab focus displacement.
packages/core-ui/js/gui_components/shared/test-data/schema/schema-focus-state.js Guard widened from actionName === 'pick-command' to !actionName; all action buttons now participate in focus capture/restore after row re-renders.
apps/web/styles.css Adds explicit grid-column/grid-row rules for each row element so visual layout is preserved after the row-actions div moves to DOM end; responsive overrides updated accordingly.
packages/core-ui/src/tests/interaction/support/focused-app-test-data-harness.js Replaces fireEvent-based setInputValue/setSelectValue with userEvent equivalents (type, paste, selectOptions) followed by tab + waitForFocusToLeave, aligned with the new deferred-blur model.
packages/core-ui/src/tests/interaction/support/focused-generator-harness.js Adds a 0 ms await after element.blur() so the deferred validation timer fires before harness assertions proceed; also wraps commandSelect lookup in waitFor for render-timing safety.
packages/core-ui/src/tests/shared/schema-focus-state.test.js New test file covering capture/restore for all six action buttons and for named fields; good coverage of the widened captureActiveFieldState guard.
packages/core-ui/src/tests/shared/shared-schema-editor-controller.test.js New test asserts handleFocusOut uses setTimeout(..., 0) and that destroy() clears the pending timer; verifies the deferred validation contract.
packages/core-ui/src/tests/shared/shared-schema-editor-ui.test.js New test asserts DOM-order of focusable elements ends with action buttons (drag, add, remove) after editable fields; confirms the tab-order invariant at the component level.
apps/web/src/tests/browser/generator/functional/schema-edit.spec.js New Playwright test verifies full Tab sequence through name → sourceType → faker-doc-link → value → drag in a real browser environment.
.gitignore Consolidates three Codex dev-server log patterns into one glob (.codex-dev-web*.log); functionally equivalent, slightly simpler.
docs-src/blog/2026-06-30-increments-and-helpers.md New blog post documenting auto-increment timestamps, sequences, and the unsafe-faker-helpers opt-in; content moved/split from the prior release post.
docs-src/blog/2026-06-12-combinatorial-grid-workflows.md Renamed from release-prep variant; auto-increment sections removed (moved to new blog post); unsafe-faker workflow step added to the summary list.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["name input\n(grid-col 2, DOM pos 1)"] -->|Tab| B["sourceType select\n(grid-col 3, DOM pos 2)"]
    B -->|Tab| C["faker-doc-link anchor\n(grid-col 4-5, DOM pos 3)"]
    C -->|Tab| D["value / params input\n(grid-col 5-6, DOM pos 4)"]
    D -->|Tab| E["row actions div\n(grid-col 1 visual, DOM pos LAST)"]
    E --> F["drag button"]
    E --> G["add button"]
    E --> H["remove / up / down buttons"]

    subgraph FocusOut Validation
        D -->|focusout| I["scheduleFocusSettledSemanticValidationForRow"]
        I -->|"setTimeout(fn, 0)"| J["applySemanticValidationForRow"]
        J --> K["captureActiveFieldState\n(captures any data-action button)"]
        J --> L["renderRows re-render"]
        L --> M["restoreActiveFieldState\n(restores action button focus)"]
    end
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A["name input\n(grid-col 2, DOM pos 1)"] -->|Tab| B["sourceType select\n(grid-col 3, DOM pos 2)"]
    B -->|Tab| C["faker-doc-link anchor\n(grid-col 4-5, DOM pos 3)"]
    C -->|Tab| D["value / params input\n(grid-col 5-6, DOM pos 4)"]
    D -->|Tab| E["row actions div\n(grid-col 1 visual, DOM pos LAST)"]
    E --> F["drag button"]
    E --> G["add button"]
    E --> H["remove / up / down buttons"]

    subgraph FocusOut Validation
        D -->|focusout| I["scheduleFocusSettledSemanticValidationForRow"]
        I -->|"setTimeout(fn, 0)"| J["applySemanticValidationForRow"]
        J --> K["captureActiveFieldState\n(captures any data-action button)"]
        J --> L["renderRows re-render"]
        L --> M["restoreActiveFieldState\n(restores action button focus)"]
    end
Loading

Reviews (6): Last reviewed commit: "Address PR 293 docs and harness feedback" | Re-trigger Greptile

@eviltester eviltester left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Code Review for PR #293\n\nI've completed the review of this PR. Key observations and suggested fixes follow.

@eviltester

Copy link
Copy Markdown
Owner Author

Code Review Feedback for PR #293

1. Potential Bug: Focus State Capture Logic Regression

File: packages/core-ui/js/gui_components/shared/test-data/schema/schema-focus-state.js:10

The original condition explicitly excluded pick-command from being captured:

if (!rowId || (!fieldName && actionName !== 'pick-command')) {

The new condition captures all action buttons including pick-command:

if (!rowId || (!fieldName && !actionName)) {

This changes behavior - pick-command elements will now have their focus state captured and restored, which may not be intended. If pick-command elements shouldn't have focus restored (e.g., they're transient dropdown triggers), this could cause unexpected focus jumps after validation re-renders.

Suggestion: Revert to the explicit exclusion or add a comment explaining why pick-command is now included.


2. Incomplete Test Coverage for Focus Restore on Action Buttons

File: packages/core-ui/src/tests/shared/schema-focus-state.test.js

The new test only covers the drag action button. It doesn't test:

  • add, remove, up, down action buttons
  • Multiple action buttons in the same row
  • Whether focus restoration works when the row has validation errors

Suggestion: Add tests for other action types or parameterize the existing test.


3. Deferred Validation Timer Cleanup on Destroy

File: packages/core-ui/js/gui_components/shared/test-data/schema/shared-schema-editor-controller.js:324-334

The test verifies cleanup on destroy() (clearTimeout called), but the production code doesn't show a destroy() handler that clears all timers. Need to verify destroy() calls clearSemanticValidationTimer for all rows.

Suggestion: Confirm destroy() iterates semanticValidationTimers and clears each. If not, add it.


4. CSS Grid Ordering - Missing Explicit Column for Drag Handle

File: apps/web/styles.css:1995-2030

The CSS explicitly assigns grid-column for editable fields but not for the drag handle inside .shared-schema-row-actions. The drag handle has no column assignment and relies on implicit grid auto-placement which could be fragile.

Suggestion: Add explicit grid-column: 1 to .shared-schema-drag-handle for clarity and stability.


5. Test Harness Async Handling Could Be Flaky

File: packages/core-ui/src/tests/interaction/support/focused-app-test-data-harness.js:53-66

Uses setTimeout(resolve, 0) to wait for microtask queue. This is a timing-dependent workaround. Better to use waitFor with an assertion on expected state.

Suggestion: Replace with await waitFor(() => expect(...)) pattern for deterministic async handling.

@eviltester

Copy link
Copy Markdown
Owner Author

Addressed the review feedback in cacd797581b2dd0b946ceddd0b95e65625de481f:

  • Expanded schema focus-state regression coverage for pick-command, drag, add, remove, up, and down action buttons, including multiple action buttons in one row and validation markup present.
  • Clarified the pick-command concern through regression coverage: the previous condition already captured pick-command; the newer behavior expands focus capture to the other row action buttons.
  • Verified production destroy() already clears semantic validation timers through clearAllSemanticValidationTimers().
  • Verified the drag handle CSS comment does not require a production change because the grid item is .shared-schema-row-actions; .shared-schema-drag-handle is a flex child inside it, so adding grid-column there would not affect placement.
  • Replaced the focused app test-data harness setTimeout(resolve, 0) waits with a deterministic Testing Library waitFor helper.

Validation passed locally with focused Jest coverage, pnpm run verify:ui, and pnpm run verify:local. I also re-published the test environment from this branch; workflow run: https://github.com/eviltester/grid-table-editor/actions/runs/28480857366

@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: 2

🧹 Nitpick comments (1)
packages/core-ui/src/tests/interaction/support/focused-app-test-data-harness.js (1)

87-92: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Apply the same focus-settle wait after select tabbing.

setInputValue waits for the edited control to lose focus after user.tab(), but setSelectValue returns immediately. Since select changes can swap the row editor before the next harness action, reuse the same wait here.

Proposed change
   async function setSelectValue(element, value) {
     if (!element) {
       throw new Error('Target select element was not found in focused app test-data harness');
     }
     await user.selectOptions(element, value);
     await user.tab();
+    await waitForFocusToLeave(element);
   }
🤖 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
`@packages/core-ui/src/tests/interaction/support/focused-app-test-data-harness.js`
around lines 87 - 92, `setSelectValue` in the focused-app test-data harness
should mirror `setInputValue` by waiting for focus to settle after `user.tab()`,
because select changes can trigger editor swaps before the next action. Update
`setSelectValue` to reuse the same post-tab focus-loss wait logic used by
`setInputValue`, keeping the existing select interaction flow in sync with the
input helper.
🤖 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 `@docs-src/blog/2026-06-30-increments-and-helpers.md`:
- Around line 1-5: The blog post frontmatter is missing the opening delimiter,
so the metadata in the file is not being parsed. Update the frontmatter in the
markdown file by adding the required leading delimiter before the existing
`slug`, `authors`, `tags`, and `date` fields and keep the closing delimiter
as-is so Docusaurus recognizes the post metadata correctly.
- Around line 46-52: The example output for the zero-padding section is
inconsistent with the stated zeropadding=3 setting. Update the generated values
in the “Generated values” block so they all use three digits, and verify the
example rows in the blog content match the behavior described by the
increments/helpers explanation.

---

Nitpick comments:
In
`@packages/core-ui/src/tests/interaction/support/focused-app-test-data-harness.js`:
- Around line 87-92: `setSelectValue` in the focused-app test-data harness
should mirror `setInputValue` by waiting for focus to settle after `user.tab()`,
because select changes can trigger editor swaps before the next action. Update
`setSelectValue` to reuse the same post-tab focus-loss wait logic used by
`setInputValue`, keeping the existing select interaction flow in sync with the
input helper.
🪄 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: a0d3842c-42df-4e9f-8f3f-2cd1508ee0fe

📥 Commits

Reviewing files that changed from the base of the PR and between aee9eeb and cacd797.

📒 Files selected for processing (5)
  • apps/web/styles.css
  • docs-src/blog/2026-06-12-combinatorial-grid-workflows.md
  • docs-src/blog/2026-06-30-increments-and-helpers.md
  • packages/core-ui/src/tests/interaction/support/focused-app-test-data-harness.js
  • packages/core-ui/src/tests/shared/schema-focus-state.test.js
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/web/styles.css

Comment thread docs-src/blog/2026-06-30-increments-and-helpers.md
Comment thread docs-src/blog/2026-06-30-increments-and-helpers.md
@greptile-apps

greptile-apps Bot commented Jun 30, 2026

Copy link
Copy Markdown

T-Rex pricing update — T-Rex was free through June 2026. Effective July 1, 2026, T-Rex adds 2 credits on top of the standard 1-credit review (3 total). T-Rex settings

@eviltester
eviltester merged commit 7db83ce into master Jul 1, 2026
19 checks passed
@eviltester
eviltester deleted the codex/271-generator-schema-tab-order branch July 1, 2026 07:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants