Feature #3252
open[oms-signin-flow] web: Redesign Sign In screen to match new HTML design
0%
Description
Overview¶
Feature for the web side. 21 acceptance criteria identified. 19 test case(s) generated.
Requirement¶
"Signin"
Attached file (read it directly for the real content): /opt/drcarrot-deploy/cross-repo-orchestration/contracts/.attachments/dev-hub-spec-yX33DRTS9JnMNers7-requirement-1.md
Attached file (read it directly for the real content): /opt/drcarrot-deploy/cross-repo-orchestration/contracts/.attachments/dev-hub-spec-8Ykc7jREDxEcyJrmn-OMS_Screens__standalone___2_.html
Acceptance Criteria¶
- {'id': 'AC-5c205bb3', 'text': 'Existing authentication/API functionality is unchanged after the redesign — the sign-in request still uses the existing authentication logic/API contract, not new or modified logic.'}
- {'id': 'AC-2ca4d7f2', 'text': 'Submitting valid credentials successfully authenticates the user and navigates them to the correct post-login screen.'}
- {'id': 'AC-3cb403ed', 'text': 'Submitting invalid credentials shows an error message and keeps the user on the Sign In screen (no navigation away).'}
- {'id': 'AC-c2f4c710', 'text': 'Required-field client-side validation (e.g. missing mobile number/password) continues to work and blocks submission.'}
- {'id': 'AC-2e28c10a', 'text': 'Validation error messages are displayed correctly for invalid/missing input.'}
- {'id': 'AC-76d02a80', 'text': 'A loading state is shown on the Login button/form while a sign-in request is in progress.'}
- {'id': 'AC-07cfe3fe', 'text': 'The Login control prevents duplicate submission (e.g. disabled state) while a sign-in request is in progress.'}
- {'id': 'AC-ef6d6425', 'text': 'API errors returned during sign-in are caught and surfaced to the user as an error state without breaking the screen.'}
- {'id': 'AC-ddba5fdf', 'text': "The password field's visibility can be toggled (show/hide) via the eye icon shown in the HTML, if that behaviour is present in the redesigned screen."}
- {'id': 'AC-51a4c52d', 'text': 'After a successful login, the user is navigated to the correct next screen per the existing post-login navigation behaviour.'}
- {'id': 'AC-cf4898f9', 'text': 'When unauthenticated, only the Sign In screen is rendered/reachable — no other application UI is accessible.'}
- {'id': 'AC-6baad6d8', 'text': 'The Sign In screen renders a two-panel split layout: a left brand/marketing panel (~45% width, full height, dark background) and a right form panel (centered, ~360px wide), matching the HTML.'}
- {'id': 'AC-68569470', 'text': "The left panel displays the 'OMS' logo badge, 'Company Name' label, heading 'Manage your orders, expenses and suppliers in one place.', and supporting text 'A single workspace for procurement, expense tracking and supplier management.'"}
- {'id': 'AC-76385665', 'text': "The right panel displays the heading 'Sign In' and subtext 'Sign in to continue to OMS'."}
- {'id': 'AC-e3fb582a', 'text': "The form includes a labeled 'Mobile Number' input field as shown in the HTML."}
- {'id': 'AC-25ac2d6d', 'text': "The form includes a labeled 'Password' input field with a masked value and a visibility-toggle icon as shown in the HTML."}
- {'id': 'AC-75c0b6a8', 'text': "The form includes a full-width 'Login' button styled with the brand dark background and a defined hover state."}
- {'id': 'AC-eba3cb27', 'text': "The footer text 'Need access? Contact your administrator.' is displayed below the Login button."}
- {'id': 'AC-2bc5f3f0', 'text': 'Overall layout, spacing, typography (font sizes/weights), and colors match the values specified in the HTML design.'}
- {'id': 'AC-aa6a0e69', 'text': 'The Sign In screen displays and functions correctly across different screen sizes (responsive behaviour).'}
- {'id': 'AC-ce4b1895', 'text': "If the HTML's 'Mobile Number' identifier field conflicts with the credential type (e.g. email/username) the existing authentication API actually expects, the existing API contract takes priority and the discrepancy is documented as a deviation in the final implementation summary."}
Test Cases¶
☐ The redesigned Sign In screen submits credentials using the exact same authentication API contract (endpoint, HTTP method, payload shape, headers) as the pre-redesign screen — no new or parallel auth logic was introduced.
☐ Submitting valid Mobile Number and Password credentials successfully authenticates the user and navigates them to the correct post-login screen.
☐ Submitting invalid credentials shows an error message and keeps the user on the Sign In screen with no navigation.
☐ Client-side required-field validation blocks submission when Mobile Number and/or Password are missing.
☐ Validation error messages are displayed correctly for invalid or missing input.
☐ A loading state is shown on the Login button/form while a sign-in request is in progress.
☐ The Login control prevents duplicate submission by becoming disabled while a sign-in request is in progress.
☐ API errors returned during sign-in are caught and surfaced to the user as an error state without breaking the screen.
☐ The password field's visibility can be toggled between masked and plain text via the eye icon.
☐ When unauthenticated, only the Sign In screen is rendered/reachable — no other application UI is accessible.
☐ The Sign In screen renders a two-panel split layout: a left brand panel (~45% width, full height, dark background) and a right form panel (centered, ~360px wide), matching the HTML.
☐ The left panel displays the 'OMS' logo badge, 'Company Name' label, the heading 'Manage your orders, expenses and suppliers in one place.', and the supporting text 'A single workspace for procurement, expense tracking and supplier management.'
☐ The right panel displays the heading 'Sign In' and the subtext 'Sign in to continue to OMS'.
☐ The form includes a labeled 'Mobile Number' input field as shown in the HTML.
☐ The form includes a labeled 'Password' input field whose value is masked, with a visibility-toggle icon, as shown in the HTML.
☐ The form includes a full-width 'Login' button styled with the brand dark background and a defined hover state.
☐ The footer text 'Need access? Contact your administrator.' is displayed below the Login button.
☐ Overall layout, spacing, typography (font sizes/weights), and colors of the rendered Sign In screen match the values specified in the HTML design.
☐ The Sign In screen displays and functions correctly across different screen sizes (responsive behaviour).
Implementation Details¶
(populated once implementation completes — see the run's completion note on this ticket for the real commit list and MR link)
Verification¶
(populated once verification completes — see the run's completion note on this ticket for UI/live-verification evidence)
Orchestration slug: oms-signin-flow (side: web)
BA Updated by Bot AI about 2 months ago
- Status changed from New to In Progress
BA Updated by Bot AI about 2 months ago · Edited
Phase Timeline¶
| # | Process | Start (IST) | End (IST) | Duration | Input | Output | Cache Create | Cache Read | Tokens | Cost | Model |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Requirement scope detection | 01-09-2026 21:53:05 | 01-09-2026 21:53:15 | 9s | 6,723 | 281 | -- | -- | 99,843 | $0.1795 | claude-sonnet-5 |
| 2 | Extract explicit constraints | 01-09-2026 21:53:15 | 01-09-2026 21:54:02 | 46s | 5 | 1,805 | -- | -- | 157,259 | $0.1973 | claude-sonnet-5 |
| 3 | Probe environment | 01-09-2026 21:54:02 | 01-09-2026 21:54:07 | 4s | not available | not available | not available | not available | not available | not available | API Script |
| 4 | Execution environment — discover runners | 01-09-2026 21:54:07 | 01-09-2026 21:54:07 | 0s | not available | not available | not available | not available | not available | not available | Script |
| 5 | Execution environment — confirm | 01-09-2026 21:54:08 | 01-09-2026 21:54:16 | 8s | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| 6 | Task Granularity | 01-09-2026 21:54:21 | 01-09-2026 21:54:43 | 21s | 6,727 | 1,018 | -- | -- | 201,131 | $0.2223 | claude-sonnet-5 |
| 7 | Task Granularity — human gate | 01-09-2026 21:54:43 | 01-09-2026 21:54:53 | 10s | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| 8 | Do screen inventory + field checklist? — human gate | 01-09-2026 21:55:01 | 01-09-2026 21:55:13 | 11s | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| 9 | Start Confirmation | 01-09-2026 21:55:19 | 01-09-2026 21:59:27 | 4m | 6,957 | 16,733 | -- | -- | 1,572,162 | $1.0508 | claude-opus-5 |
| 10 | Start Confirmation — human gate | 01-09-2026 21:59:28 | 01-09-2026 22:00:08 | 40s | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| 11 | Determine web connection | 01-09-2026 22:00:15 | 01-09-2026 22:00:16 | 0s | not available | not available | not available | not available | not available | not available | Script |
| 12 | Extract ticket-spec / acceptance criteria | 01-09-2026 22:00:16 | 01-09-2026 22:02:36 | 2m | 7,015 | 11,950 | -- | -- | 1,056,702 | $0.7060 | claude-sonnet-5 |
| 13 | Generate test-spec scenarios and assertions | 01-09-2026 22:02:36 | 01-09-2026 22:04:03 | 1m | 6,721 | 9,762 | -- | -- | 60,988 | $0.2753 | claude-sonnet-5 |
| 14 | Create/Reuse Web Redmine Ticket | 01-09-2026 22:04:03 | 01-09-2026 22:04:05 | 1s | not available | not available | not available | not available | not available | not available | API Script |
| 15 | Cross-link tickets | 01-09-2026 22:04:05 | 01-09-2026 22:04:05 | 0s | not available | not available | not available | not available | not available | not available | API Script |
| 16 | Initialise timing note | 01-09-2026 22:04:05 | 01-09-2026 22:04:06 | 0s | not available | not available | not available | not available | not available | not available | API Script |
| 17 | Analyze → Implementation Plan | 01-09-2026 22:04:07 | 01-09-2026 22:11:31 | 7m | 3,198 | 29,567 | -- | -- | 1,737,317 | $1.3817 | claude-opus-5 |
| 18 | Design | 01-09-2026 22:11:32 | 01-09-2026 22:13:56 | 2m | 2,732 | 11,968 | -- | -- | 1,106,076 | $0.9295 | claude-sonnet-5 |
| 19 | Schema Review | 01-09-2026 22:13:56 | 01-09-2026 22:18:17 | 4m | 2,777 | 19,125 | -- | -- | 649,458 | $0.8398 | claude-opus-5 |
| 20 | Create Branch | 01-09-2026 22:18:18 | 01-09-2026 22:18:21 | 3s | not available | not available | not available | not available | not available | not available | API Script |
| 21 | Data Layer | 01-09-2026 22:18:22 | 01-09-2026 22:19:13 | 50s | 2,587 | 3,441 | -- | -- | 435,819 | $0.4990 | claude-sonnet-5 |
| 22 | UI Implementation | 01-09-2026 22:19:13 | 01-09-2026 22:32:09 | 13m | 4,298 | 41,797 | -- | -- | 7,474,477 | $4.1889 | claude-sonnet-5 |
| 23 | 1. Unit Tests | 01-09-2026 22:32:09 | 01-09-2026 22:56:52 | 25m | 5,390 | 29,875 | -- | -- | 5,816,445 | $3.0705 | claude-sonnet-5 |
| 24 | 2. TypeScript | 01-09-2026 22:56:53 | 01-09-2026 22:58:22 | 1m | 2,724 | 4,084 | -- | -- | 518,235 | $0.4049 | claude-sonnet-5 |
| 25 | 3. Lint | 01-09-2026 22:58:22 | 01-09-2026 22:58:29 | 6s | not available | not available | not available | not available | not available | not available | Script |
| 26 | 4. Dead Code (re-dispatched ×2; first attempt 01-09-2026 22:58:30) | 01-09-2026 23:00:17 | 01-09-2026 23:04:47 | 4m | 2,791 | 11,786 | -- | -- | 972,183 | $0.6959 | claude-opus-5 |
| 27 | GAP — unattributed | 01-09-2026 23:04:47 | 02-09-2026 12:18:21 | 13h 14m | n/a | n/a | n/a | n/a | n/a — wait time, not compute | n/a — wait time, not compute | n/a |
| 28 | Web Redmine ticket preview — confirm | 02-09-2026 12:18:21 | 02-09-2026 12:19:07 | 46s | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| 29 | GAP — unattributed | 02-09-2026 12:19:07 | 02-09-2026 15:31:45 | 3h 13m | n/a | n/a | n/a | n/a | n/a — wait time, not compute | n/a — wait time, not compute | n/a |
| 30 | 5. Code & Style Quality Audit (re-dispatched ×15; first attempt 01-09-2026 23:04:48) | 02-09-2026 15:31:45 | -- | -- | -- | -- | -- | -- | -- | -- | -- |
| — | ORCHESTRATOR TOTAL (rows 5–28) | — | — | 2m | 0 | 0 | 0 | 0 | 0 | $0.0000 | — |
| — | SHARED TOTAL (rows 1–30) | — | — | 1h 8m | 60,645 | 193,192 | 0 | 0 | 21,858,095 | $14.6415 | — |
| — | GRAND TOTAL (wall clock) | 01-09-2026 21:53:05 | 02-09-2026 15:31:45 | 17h 39m | 60,645 | 193,192 | 0 | 0 | 21,858,095 | $14.6415 | — |
ORCHESTRATOR TOTAL: 2m, 0 tokens, $0.0000 (rows 5–28)
SHARED TOTAL: 1h 8m, 21,858,095 tokens, $14.6415, 8 row(s) with no token data (rows 1–30)
Total Run Time: 17h 39m (wall clock, 01-09-2026 21:53:05 → 02-09-2026 15:31:45 IST — not a sum of the per-side totals above, since sides overlap)
Active time: 1h 12m | Waiting (session limits, approvals, dead sessions): 16h 26m — 2 gap(s) still unattributed; label them with driver.py gap <slug> --from <ISO> --to <ISO> --reason '<why>'
Total Tokens Consumed: 21,858,095 (plus 8 row(s) whose usage was never captured — run execution_tracker.py enrich-audit to backfill. This is a floor, not the total.)
Token breakdown: input 60,645 · output 193,192 · cache-create 0 · cache-read 0 (0% of the total). Cache-read is context a node re-sends to itself across its own tool-use turns, billed at roughly a tenth of fresh input — a large Tokens number that is mostly cache-read is a long tool loop, not a large workload.
Total Cost: $14.6415 (plus 8 row(s) whose usage was never captured — run execution_tracker.py enrich-audit to backfill. This is a floor, not the total.)