Skip to content

feat(web): add v2 shell and domain components - #2

Open
YSamed wants to merge 5 commits into
feat/v2-foundationsfrom
feat/v2-components
Open

YSamed wants to merge 5 commits into
feat/v2-foundationsfrom
feat/v2-components

Conversation

@YSamed

@YSamed YSamed commented Oct 12, 2026 •

Copy link
Copy Markdown
Owner

Upstream delivery is now open at Devlaner#407. This fork PR is retained only for its isolated 82-file review. Merge the upstream sequence Devlaner#406 → Devlaner#407 → Devlaner#401; do not merge this review reference into the fork's prerequisite branch.

Problem and change

Part 2 of the v2 review split adds the shell and domain components in 82 changed files: navigation, auth and creation forms, settings panels, work-item tables/layouts, and shared list controls. Its base is feat/v2-foundations, so the primitive and localization changes are reviewed separately.

These components are prepared for the final page/routing integration; this stage does not enable the v2 preference.

Validation

This isolated stage passed web typecheck, ESLint, Prettier and production build. The complete interface also passed those checks and Go vet. API integration tests require Docker and are delegated to the upstream CI under the author's explicit approval.

Dependency and upstream delivery

Depends on the foundations PR in Devlaner/devlane. This 82-file review is hosted in the author's fork because the author cannot create base branches in the upstream repository. After foundations lands upstream, this branch can be submitted to upstream main with an 82-file diff. Final pages and routing are on feat/v2-integration; the full upstream integration is Devlaner#401.

AI assistance

  • AI tools used: Claude Code for implementation; Codex for reconciliation, splitting and verification. Commits disclose AI assistance.

API migration catalog correction

CI on the reconciled main exposed two existing migrations with version 000013. Keep the earlier Slack migration at 000013 and rename the later cancelled-state correction to 000014, preserving both SQL contents. This restores migration loading for fresh databases and preserves the previously deployed Slack version. A Docker-free catalog regression test rejects duplicate version/direction pairs and requires both up/down files for every version. It fails on the original catalog and passes after the correction; Go vet also passes. Docker-backed API CI passed for the final full integration commit and the foundations commit, including go test -v -race -count=1 ./.... UI CI also passed for both commits.

Previous upstream validation: integration API CI, integration UI CI, foundations API CI, foundations UI CI — all passed.

Review fixes

Verified and fixed all nine CodeRabbit findings from Devlaner#406:

  • Scope registry CSS updates to the v2 stylesheet.
  • Default native Button actions to type=button while retaining explicit submits and asChild behavior.
  • Refresh dithered-logo colors when data-theme changes.
  • Keep the sidebar shortcut out of editor-owned, editable and repeated key events.
  • Guard both providers against blocked or full localStorage.
  • Distinguish null filter clears from omitted fields.
  • Paginate cycle issue data with valid page sizes, including initial loading and refreshes.
  • Render dates using the selected language and preserve calendar dates for both date-only and API RFC3339 values.
  • Match date presets from local midnight and use inclusive custom bounds.

Local validation: complete web typecheck, ESLint, Prettier and production build passed; both isolated prerequisite stages also passed those checks. 35 targeted regression checks passed under each of America/Los_Angeles and Europe/Istanbul (70 checks total). API sources are unchanged by these review fixes. New API/UI CI runs validate the updated heads.

Follow-up: failed issue loading and retry

The controller now reports issue-load failures separately from successful empty results, exposes retry progress, preserves the last successful list when a refresh fails, and rejects stale completions or delayed retry callbacks after navigation/unmount. Retrying a metadata failure reloads the missing project/workspace as well.

The shared work-item section used by project and cycle pages renders a translated alert with a Try again button instead of the empty-state copy when issue loading fails. This UI is in the components stage; the controller/error state is in foundations.

13 targeted regression checks passed, covering a later-page failure, rendered error vs empty UI, retry progress and recovery, refresh failure, overlapping requests, navigation/unmount, and metadata recovery. Full web typecheck, ESLint, Prettier and production build passed; both prerequisite stages independently passed the same checks. API sources are unchanged. CI is running on the updated heads.

Co-Authored-By: Codex <noreply@openai.com>
Keep the earlier Slack migration at version 13 and move the later cancelled-state correction to version 14 without changing either SQL body. Validate unique catalog versions and paired directions without Docker.

Co-Authored-By: Codex <noreply@openai.com>
YSamed and others added 3 commits October 13, 2026 11:54
Guard storage, preserve explicit filter clears, paginate complete cycle lists, use local dates and selected language, and prevent accidental submits and editor shortcut conflicts. Scope generated CSS and refresh logo colors on theme changes.

Co-Authored-By: Codex <noreply@openai.com>
Treat both date-only strings and RFC3339 date fields returned by the API as local calendar dates for display and filtering.

Co-Authored-By: Codex <noreply@openai.com>
Distinguish failed loading from a genuinely empty cycle, expose retry progress, preserve successful data on refresh failures, and discard stale requests after navigation or newer attempts.

Co-Authored-By: Codex <noreply@openai.com>
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