Feature #3465
open[drcarrot-mobile-unit-test-report-v3] orchestration run
0%
Description
Orchestration run tracking ticket. Not the real implementation ticket — this exists only so the live timing table has somewhere to post from step 1 onward. The real backend/mobile/web ticket(s) are created and cross-linked here once the run reaches that step.
Requirement:
"Write comprehensive Jest unit tests for the Reports module to achieve full code coverage.
Target Coverage¶
- Statements: 90%+
- Branches: 85%+
- Functions: 90%+
- Lines: 90%+
These targets must match the repo's global coverage thresholds in jest.config.js.
Scope¶
Cover every layer that exists for the Reports module:
- Service:
src/services/ReportsService.tsor equivalent - Hooks:
src/hooks/reports/** - Screens:
src/screens/Reports/** - Sections/components:
src/sections/reports/**orsrc/components/reports/** - Utils:
src/utils/reports/** - Redux slice, if present:
src/store/slices/reportsSlice.ts - Storybook stories, if present:
src/sections/reports/**/*.stories.tsxsrc/components/reports/**/*.stories.tsx
- Tracing, if present:
src/traces/reports.ts
Storybook Tests¶
If Reports contains .stories.tsx files:
- Create tests under:
src/__tests__/sections/reports/<Component>.stories.test.tsx - Import every named story export.
- Render every exported story using the same RTL helpers already used elsewhere in the project.
- Verify every story renders without crashing.
- Verify story args/controls match the component prop types.
- Tag Storybook tests with
@p2, unless the story is the only meaningful coverage for a component, in which case use@p1.
Trace Tests¶
If src/traces/reports.ts exists, create:
src/__tests__/traces/reports.test.ts
Mock src/utils/otel.ts exactly as existing trace tests do.
For every exported span-builder/helper, verify:
- Span name
- Span attributes
- Successful execution
status=ERRORon failure- Error recording on failure
Use:
@p1for successful execution tests@p2for failure-path tests
Test Priority Tags¶
Every it() / test() title must start with @p1, @p2, or @p3.
@p1 — Critical Path¶
Cover:
- Component/hook renders or initializes without crashing
- Empty/loading/no-records states
- Core Reports happy paths
- Primary API success and failure handling
- Required-field validation
- Status/data mapping
- Auth/permission gates that block access
@p2 — Important Secondary Behavior¶
Cover:
- Search/sort/filter interactions
- API parameter wiring
- Pagination
- Dialog open/close/cancel
- Permission-based UI hiding
- Refresh/pull-to-refresh
- Secondary API errors
- File upload validation, if applicable
- Report generation/download/sequence behavior, if applicable
@p3 — Edge Cases¶
Cover:
null/undefined/ boolean coercion- Malformed or partial API responses
- Invalid/boundary dates
- Non-matching selections
- Whitespace-only/empty search
- Independent toggle states
Test Implementation Requirements¶
-
Inspect all Reports source files line by line before writing tests.
-
Exercise every:
- Conditional
- Ternary
- Optional-chaining fallback
- Switch/case branch
- Validation branch
- Success path
- Error path
- Use the existing mock boilerplate patterns in this repo.
Use these reference tests:
src/__tests__/services/ProcurementsService.test.tssrc/__tests__/hooks/procurement/usePurchaseBill.test.ts
- Mock the following exactly as the reference tests do:
ApiClientAsyncStorageLogger- Navigation
Do not introduce a new mocking approach.
- Organize tests using
describe()blocks by behavior area:
- Core behavior
- Search & sort
- Pagination
- Permissions
- Error handling
- Edge cases
-
Do not use
anyor other explicit unsafe types in test code. -
Do not add:
- Skipped tests
- Pending tests
- Unnecessary snapshot tests
-
Do not modify production/business logic.
-
Only add or update the required Jest test files and test configuration if absolutely necessary for priority filtering.
-
Do not create unnecessary documentation.
Coverage Validation¶
After implementing the tests, run:
BA Updated by Bot AI about 1 month ago
Account status — using account 1
- Window usage so far: 11,611,692 tokens ($6.28) — 85% of its own last observed ceiling
- Total dispatches on this account: 46
BA Updated by Bot AI about 1 month ago · Edited
Phase Timeline¶
| # | Process | Start (IST) | End (IST) | Duration | Input | Output | Cache Create | Cache Read | Tokens | Cost | Model |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Requirement scope detection | 21-09-2026 20:40:58 | 21-09-2026 20:41:05 | 6s | 2 | 137 | 30,885 | 0 | 31,024 | $0.1909 | claude-sonnet-5 |
| 2 | Initialise run ticket (timing anchor) | 21-09-2026 20:41:05 | 21-09-2026 20:41:06 | 0s | not available | not available | not available | not available | not available | not available | Script |
| 3 | Probe environment | 21-09-2026 20:41:06 | 21-09-2026 20:41:18 | 11s | not available | not available | not available | not available | not available | not available | API Script |
| 4 | Extract ticket-spec, acceptance criteria & test scenarios | 21-09-2026 20:41:18 | 21-09-2026 20:43:30 | 2m | 2,563 | 17,352 | 22,704 | 15,644 | 58,263 | $0.4119 | claude-sonnet-5 |
| 5 | Prepare execution plan | 21-09-2026 20:43:31 | 21-09-2026 20:43:31 | 0s | not available | not available | not available | not available | not available | not available | Script |
| 6 | Initialise timing note | 21-09-2026 20:43:31 | 21-09-2026 20:43:32 | 0s | not available | not available | not available | not available | not available | not available | API Script |
| 7 | Execution plan — human gate | 21-09-2026 20:43:32 | 21-09-2026 20:44:09 | 36s | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| 8 | Mobile & Web task redmine ticket creations — mobile | 21-09-2026 20:44:23 | 21-09-2026 20:44:25 | 2s | not available | not available | not available | not available | not available | not available | API Script |
| 9 | Cross-link tickets | 21-09-2026 20:44:26 | 21-09-2026 20:44:27 | 0s | not available | not available | not available | not available | not available | not available | API Script |
| 10 | Write contract file | 21-09-2026 20:44:28 | 21-09-2026 20:44:28 | 0s | 0 | 0 | 0 | 0 | 0 (SKIPPED — capability absent — sides.backend.live_verified.verdict = , want one of ['PASSED', 'SKIPPED']) | 0 (SKIPPED) | -- |
| 11 | Validate contract vs screens | 21-09-2026 20:44:28 | 21-09-2026 20:44:28 | 0s | 0 | 0 | 0 | 0 | 0 (SKIPPED — capability absent — contract.path exists=False, want True) | 0 (SKIPPED) | -- |
| 12 | Propagate contract to consumer repos | 21-09-2026 20:44:29 | 21-09-2026 20:44:29 | 0s | 0 | 0 | 0 | 0 | 0 (SKIPPED — capability absent — contract.path exists=False, want True) | 0 (SKIPPED) | -- |
| 13 | Determine backend connection | 21-09-2026 20:44:30 | 21-09-2026 20:44:30 | 0s | 0 | 0 | 0 | 0 | 0 (SKIPPED — capability absent — contract.path exists=False, want True) | 0 (SKIPPED) | -- |
| 14 | Mobile: Create feature branch | 21-09-2026 20:44:30 | 21-09-2026 20:44:47 | 16s | not available | not available | not available | not available | not available | not available | API Script |
| 15 | Mobile: Repo context | 21-09-2026 20:44:47 | 21-09-2026 20:44:48 | 1s | not available | not available | not available | not available | not available | not available | Script |
| 16 | Mobile: Resolve test target files | 21-09-2026 20:44:49 | 21-09-2026 20:44:50 | 1s | not available | not available | not available | not available | not available | not available | Script |
| 17 | Shared Context Bundle | 21-09-2026 20:44:50 | 21-09-2026 20:44:51 | 0s | not available | not available | not available | not available | not available | not available | Script |
| 18 | GAP — unattributed | 21-09-2026 20:44:51 | 22-09-2026 00:17:58 | 3h 33m | n/a | n/a | n/a | n/a | n/a — wait time, not compute | n/a — wait time, not compute | n/a |
| 19 | 1. Unit Tests (re-dispatched ×8; first attempt 21-09-2026 20:44:51) | 22-09-2026 00:17:58 | 22-09-2026 00:29:33 | 12m | 5 | 13,508 | 36,139 | 57,854 | 107,506 | $1.4983 | claude-sonnet-5 |
| 20 | Git & MR | 22-09-2026 00:29:34 | 22-09-2026 00:29:38 | 3s | not available | not available | not available | not available | not available | not available | API Script |
| 21 | Validate verification evidence | 22-09-2026 00:29:39 | 22-09-2026 00:29:40 | 1s | not available | not available | not available | not available | not available | not available | API Script |
| 22 | Verification approval | 22-09-2026 00:29:41 | 22-09-2026 00:30:46 | 1m | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| 23 | Completion Summary | 22-09-2026 00:30:54 | 22-09-2026 00:30:54 | 0s | not available | not available | not available | not available | not available | not available | API Script |
| 24 | Write handoff doc | 22-09-2026 00:30:55 | 22-09-2026 00:30:55 | 0s | not available | not available | not available | not available | not available | not available | Script |
| 25 | Resolve tickets + post usage summary | 22-09-2026 00:30:57 | 22-09-2026 00:31:03 | 5s | not available | not available | not available | not available | not available | not available | Script |
| 26 | Gate failure decision | -- | 21-09-2026 23:32:59 | -- | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| 27 | Mobile: Join parallel gates | -- | 22-09-2026 00:29:34 | -- | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| 28 | Join — all active sides implemented | -- | 22-09-2026 00:29:38 | -- | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| — | ORCHESTRATOR TOTAL (rows 7–28) | — | — | 2m | 0 | 0 | 0 | 0 | 0 | $0.0000 | — |
| — | SHARED TOTAL (rows 1–25) | — | — | 15m | 2,570 | 30,997 | 89,728 | 73,498 | 196,793 | $2.1011 | — |
| — | GRAND TOTAL (wall clock) | 21-09-2026 20:40:58 | 22-09-2026 00:31:03 | 3h 50m | 2,570 | 30,997 | 89,728 | 73,498 | 196,793 | $2.1011 | — |
ORCHESTRATOR TOTAL: 2m, 0 tokens, $0.0000 (rows 7–28)
SHARED TOTAL: 15m, 196,793 tokens, $2.1011, 15 row(s) with no token data (rows 1–25)
Total Run Time: 3h 50m (wall clock, 21-09-2026 20:40:58 → 22-09-2026 00:31:03 IST — not a sum of the per-side totals above, since sides overlap)
Active time: 17m | Waiting (session limits, approvals, dead sessions): 3h 33m — 1 gap(s) still unattributed; label them with driver.py gap <slug> --from <ISO> --to <ISO> --reason '<why>'
Total Tokens Consumed: 196,793 (plus 15 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 2,570 · output 30,997 · cache-create 89,728 · cache-read 73,498 (37% 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: $2.1011 (plus 15 row(s) whose usage was never captured — run execution_tracker.py enrich-audit to backfill. This is a floor, not the total.)
BA Updated by Bot AI about 1 month ago
Account status — using account 1
- Window usage so far: 11,669,955 tokens ($6.70) — 86% of its own last observed ceiling
- Total dispatches on this account: 47
BA Updated by Bot AI about 1 month ago
Account status — using account 3
- Window usage so far: 10,908,959 tokens ($7.57) — 428% of its own last observed ceiling
- Total dispatches on this account: 18
BA Updated by Bot AI about 1 month ago
Account status — using account 3
- Window usage so far: 10,908,959 tokens ($7.57) — 428% of its own last observed ceiling
- Total dispatches on this account: 19
BA Updated by Bot AI about 1 month ago
Account status — using account 3
- Window usage so far: 10,908,959 tokens ($7.57) — 428% of its own last observed ceiling
- Total dispatches on this account: 19