# API requests · ready to file in RJmtm/newadmin-api-kit

**Generated** from `PROPOSALS.json` by `phase-3/pack-src/build_pack.py`. **49 needs-backend items.** **None is filed yet.** Each block below is one GitHub issue: title, label `api-request`, owner command-center (frontend start-here guide). Until an issue is closed, the frontend draws the dashed amber "needs backend" ghost (kit `families/states/`) and never a working control.

Filing order: follow the backend helper build order in `BACKEND-HELPERS.md` (H01 prefs store and H02 record history first; both unlock several items).

| # | Issue title | Helper | Area | Pages |
|---|---|---|---|---|
| PR-001 | Per-staff prefs store (saved views, column presets, density, recent/pinned across devices, My home, import mapping memory) | H01 | shell | `/admin/orders`, `/admin/tickets`, `shell` |
| PR-003 | Record-wide history / activity / audit store (activity panel, time-travel, design + pricing undo, bulk-run before-values) | H02 | shell | `shell`, `/admin/orders/{order}`, `/admin/designs`, `/admin/designs/create` … |
| PR-005 | One search across orders, accounts, fabric codes, tickets, designs (⌘K beyond orders) | H04 | shell | `shell`, `/admin/dashboard` |
| PR-006 | Say it in ⌘K (sentence -> filter or action) | H05 | shell | `shell` |
| PR-007 | Counts for the filtered set (totals strip) | H06 | orders | `/admin/orders` |
| PR-008 | Who else is here (presence + soft edit lock) | H07 | shell | `/admin/orders/{order}`, `/admin/designs/{design}/edit` |
| PR-009 | Names-only admin picker (for @mentions and ticket assignee) | H08 | shell | `shell`, `/admin/tickets`, `/admin/tickets/{ticket}` |
| PR-010 | Comments and @mentions on any record | H10 | shell | `shell` |
| PR-011 | Watch a record -> notification inbox | H11 | shell | `shell`, `/admin/orders/{order}`, `/admin/tickets`, `/admin/tickets/{ticket}` |
| PR-012 | While you were away (shift hand-over digest) | H12 | shell | `shell` |
| PR-013 | Stuck-in-phase timers (phase ages + targets) | H09 | orders | `/admin/orders`, `/admin/gantt` |
| PR-014 | Why is this order here? (one composed explain read) | H13 | orders | `/admin/orders/{order}` |
| PR-015 | Restore one value from history | H14 | shell | `shell` |
| PR-016 | Do it later (scheduled actions; allow-listed, never money) | H15 | shell | `shell` |
| PR-017 | Dry-run impact preview on the four bulk writes | H16 | users | `/admin/users`, `/admin/users/bulk-permissions`, `/admin/accessory-codes`, `/admin/access` |
| PR-018 | Undo a whole bulk run (10-minute window) | H17 | shell | `/admin/designs/bulk-hub`, `/admin/users` |
| PR-020 | See the admin as someone else's role | H20 | access | `shell` |
| PR-021 | Paste from Excel into an import (JSON rows on import preview) | H21 | materials | `/admin/fabric-codes/import`, `/admin/pt-colors/import`, `/admin/accessory-codes` |
| PR-022 | Trends inside the table (metric series sparklines) | H22 | users | `/admin/users`, `/admin/factories` |
| PR-023 | Scan a QR to open the record | H23 | shell | `shell` |
| PR-024 | Keeps working when Wi-Fi drops (Idempotency-Key honoured on floor writes) | H24 | vision-checks | `/admin/vision-checks/results` |
| PR-025 | Ping me when it's done (Web Push) | H25 | shell | `shell` |
| PR-026 | Ticket summary + suggested next step (AI summary mode, explicit button) | H26 | tickets | `/admin/tickets/{ticket}` |
| PR-027 | Anomaly flags on orders | H19 | orders | `/admin/orders` |
| PR-028 | Health strip for super admins | H27 | ops | `/admin/failed-jobs`, `/admin/job/batches`, `/admin/schedule-monitor` |
| PR-029 | Out of stock? closest cloths in stock | H28 | fabrics | `/admin/fabric-codes` |
| PR-033 | Cancel a queued print job (G1) | — | orders | `/admin/orders/print-jobs` |
| PR-034 | Resolve several vision results at once (G2) | — | vision-checks | `/admin/vision-checks/results` |
| PR-035 | Ticket assignee + 'Mine' view + routed notifications (G3) | — | tickets | `/admin/tickets`, `/admin/tickets/{ticket}` |
| PR-036 | Internal (staff-only) ticket note (G4) | — | tickets | `/admin/tickets/{ticket}` |
| PR-037 | Persist the last AI suggestion per ticket (no re-billing on reopen) | — | tickets | `/admin/tickets/{ticket}` |
| PR-039 | CN labels for ticket statuses, severities and categories | — | tickets | `/admin/tickets`, `/admin/tickets/{ticket}`, `/admin/tickets/status`, `/admin/tickets/severity` … |
| PR-040 | Attachment count on ticket list/show payloads | — | tickets | `/admin/tickets`, `/admin/tickets/{ticket}` |
| PR-042 | Order filter on the tickets index | — | tickets | `/admin/tickets`, `/admin/orders/{order}` |
| PR-043 | Order status-history read (Activity tab) | — | orders | `/admin/orders/{order}` |
| PR-057 | gantt-grid rows: factory_due_at + current_step | — | orders | `/admin/gantt` |
| PR-058 | gantt-grid rolling window (from/to across months) | — | orders | `/admin/gantt` |
| PR-059 | Express flag on gantt rows | — | orders | `/admin/gantt` |
| PR-060 | Factory capacity per day | — | factory | `/admin/gantt`, `/admin/factories` |
| PR-061 | /orders/due horizon beyond 3 days | — | orders | `/admin/orders/due`, `/admin/dashboard` |
| PR-062 | Design create silently drops the surcharge (extra_meter) | — | designs | `/admin/designs/create` |
| PR-063 | Camera frame and Supplier on the design create form | — | designs | `/admin/designs/create` |
| PR-064 | 'Retailers carrying this design / priced?' panel on the design page | — | designs | `/admin/designs/{design}/edit` |
| PR-066 | Align design 'info' validation (max:1000 on the edit path) | — | designs | `/admin/designs/{design}/edit` |
| PR-068 | Ungated web pricing writes | — | pricing | `/admin/pricing`, `/admin/pricing/create` |
| PR-070 | Retailer pricing cell write by ids, not localized display name | — | pricing | `/admin/pricing/create` |
| PR-072 | Menu badge counts (optional integer badge per link) | — | shell | `shell` |
| PR-073 | Backfill cn labels for the menu (90 missing)  | — | shell | `shell` |
| PR-082 | Spec permission metadata drift on orders/tickets lists | — | orders | `/admin/orders`, `/admin/tickets` |

## PR-001 · Per-staff prefs store (saved views, column presets, density, recent/pinned across devices, My home, import mapping memory)

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H01
- **Ask / recommended default:** Ship saved views on URL state + browser storage now (UI-only); add GET/PUT /admin/me/prefs/{key} (H01, S) for per-person sync.
- **Detail:** PUT /admin/me/preferences stores only {locale, timezone}. Orders status-tab customisation (ORDERS-R1 I2) rides on the same store.
- **Pages:** `/admin/orders`, `/admin/tickets`, `shell`
- **Evidence:** `phase-1/powerups/POWERUPS.md #05/#04/#15`; `phase-1/powerups/advanced/ADVANCED.md #08/#18`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H01`; `phase-0/COMPONENT-INVENTORY.md P2/saved-views`; `phase-3/flagships/orders/ORDERS-R1.md I2/I3`

## PR-003 · Record-wide history / activity / audit store (activity panel, time-travel, design + pricing undo, bulk-run before-values)

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H02
- **Ask / recommended default:** Design nothing beyond existing scoped audits (payload audits, email-template versions, API-key audit, request logs) until GET /admin/records/{type}/{id}/history (H02, L) exists; start it day one.
- **Detail:** GET /admin/audit-logs is 404. Pricing change log (before/after, actor) and design undo both need it.
- **Pages:** `shell`, `/admin/orders/{order}`, `/admin/designs`, `/admin/designs/create`, `/admin/designs/{design}/edit`, `/admin/designs/bulk-hub`, `/admin/pricing`, `/admin/pricing/create`
- **Evidence:** `phase-1/powerups/POWERUPS.md #13`; `phase-1/powerups/advanced/ADVANCED.md #11`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H02`; `phase-0/COMPONENT-INVENTORY.md P1 / audit-row / M05`; `phase-2/truth/TRUTH-DESIGNS.md G7`; `phase-2/truth/TRUTH-PRICING.md P-G2`

## PR-005 · One search across orders, accounts, fabric codes, tickets, designs (⌘K beyond orders)

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H04
- **Ask / recommended default:** ⌘K ships on admin.me.menu + admin.dashboard.quick-search (orders) now; add GET /admin/search (H04, M).
- **Pages:** `shell`, `/admin/dashboard`
- **Evidence:** `phase-1/powerups/POWERUPS.md #01`; `phase-1/powerups/advanced/ADVANCED.md #05`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H04`; `phase-2/archetypes/ARCHETYPES.md A05 ghost`

## PR-006 · Say it in ⌘K (sentence -> filter or action)

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H05
- **Ask / recommended default:** Later wave; POST /admin/search/parse (H05, M) after H04 + H09; never writes.
- **Pages:** `shell`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #06`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H05`

## PR-007 · Counts for the filtered set (totals strip)

- **Label:** `api-request` · **Area:** orders · **Backend helper:** H06
- **Ask / recommended default:** GET /admin/orders/counts?<list filters> (H06, S); until then show tab counts only where the status catalogue gives them.
- **Pages:** `/admin/orders`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #21`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H06`

## PR-008 · Who else is here (presence + soft edit lock)

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H07
- **Ask / recommended default:** POST/DELETE /admin/presence (H07, S, Redis TTL 30 s, poll 10 s); hard guard stays the If-Match check (PR-004).
- **Pages:** `/admin/orders/{order}`, `/admin/designs/{design}/edit`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #01`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H07`

## PR-009 · Names-only admin picker (for @mentions and ticket assignee)

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H08
- **Ask / recommended default:** GET /admin/pickers/admins?q= (H08, S).
- **Pages:** `shell`, `/admin/tickets`, `/admin/tickets/{ticket}`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #02`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H08`

## PR-010 · Comments and @mentions on any record

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H10
- **Ask / recommended default:** GET/POST /admin/records/{type}/{id}/comments (H10, M); order notes and ticket comments stay as they are.
- **Pages:** `shell`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #02`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H10`

## PR-011 · Watch a record -> notification inbox

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H11
- **Ask / recommended default:** POST/DELETE/GET /admin/watches (H11, M); the bell already reads admin.notifications.*.
- **Pages:** `shell`, `/admin/orders/{order}`, `/admin/tickets`, `/admin/tickets/{ticket}`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #03`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H11`

## PR-012 · While you were away (shift hand-over digest)

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H12
- **Ask / recommended default:** GET /admin/me/digest?since= (H12, M) after H11 + H02.
- **Pages:** `shell`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #04`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H12`

## PR-013 · Stuck-in-phase timers (phase ages + targets)

- **Label:** `api-request` · **Area:** orders · **Backend helper:** H09
- **Ask / recommended default:** GET /admin/orders/phase-ages?ids= + GET/PUT /admin/settings/phase-targets (H09, M).
- **Pages:** `/admin/orders`, `/admin/gantt`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #09`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H09`

## PR-014 · Why is this order here? (one composed explain read)

- **Label:** `api-request` · **Area:** orders · **Backend helper:** H13
- **Ask / recommended default:** GET /admin/orders/{order}/explain (H13, M).
- **Pages:** `/admin/orders/{order}`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #10`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H13`

## PR-015 · Restore one value from history

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H14
- **Ask / recommended default:** POST /admin/records/{type}/{id}/history/{change}/restore (H14, M) after H02.
- **Pages:** `shell`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #11`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H14`

## PR-016 · Do it later (scheduled actions; allow-listed, never money)

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H15
- **Ask / recommended default:** POST/GET/DELETE /admin/scheduled-actions (H15, M).
- **Pages:** `shell`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #12`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H15`

## PR-017 · Dry-run impact preview on the four bulk writes

- **Label:** `api-request` · **Area:** users · **Backend helper:** H16
- **Ask / recommended default:** dry_run=1 on accounts bulk-features / bulk-permissions, accessory-codes/bulk, api-keys/bulk-revoke (H16, S).
- **Pages:** `/admin/users`, `/admin/users/bulk-permissions`, `/admin/accessory-codes`, `/admin/access`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #13`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H16`

## PR-018 · Undo a whole bulk run (10-minute window)

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H17
- **Ask / recommended default:** GET /admin/bulk-runs/{id} + POST .../revert (H17, M).
- **Pages:** `/admin/designs/bulk-hub`, `/admin/users`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #14`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H17`

## PR-020 · See the admin as someone else's role

- **Label:** `api-request` · **Area:** access · **Backend helper:** H20
- **Ask / recommended default:** as_admin={id} on GET /admin/me and /admin/me/menu, super admin only, writes refused (H20, S).
- **Pages:** `shell`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #16`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H20`

## PR-021 · Paste from Excel into an import (JSON rows on import preview)

- **Label:** `api-request` · **Area:** materials · **Backend helper:** H21
- **Ask / recommended default:** Accept {rows, columns} on the existing import preview endpoints (H21, S).
- **Pages:** `/admin/fabric-codes/import`, `/admin/pt-colors/import`, `/admin/accessory-codes`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #17`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H21`

## PR-022 · Trends inside the table (metric series sparklines)

- **Label:** `api-request` · **Area:** users · **Backend helper:** H22
- **Ask / recommended default:** GET /admin/metrics/series (H22, M), read-only, nightly cache.
- **Pages:** `/admin/users`, `/admin/factories`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #19`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H22`

## PR-023 · Scan a QR to open the record

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H23
- **Ask / recommended default:** GET /admin/qr/resolve?code= (H23, S).
- **Pages:** `shell`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #22`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H23`

## PR-024 · Keeps working when Wi-Fi drops (Idempotency-Key honoured on floor writes)

- **Label:** `api-request` · **Area:** vision-checks · **Backend helper:** H24
- **Ask / recommended default:** 24 h Idempotency-Key middleware on vision-check resolve, QC checks, order checkpoints (H24, M).
- **Pages:** `/admin/vision-checks/results`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #23`; `phase-1/powerups/POWERUPS.md #20`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H24`

## PR-025 · Ping me when it's done (Web Push)

- **Label:** `api-request` · **Area:** shell · **Backend helper:** H25
- **Ask / recommended default:** Upgrade only; polling + in-tab notification off admin.notifications.unread-count works today (H25, M).
- **Pages:** `shell`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #25`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H25`

## PR-026 · Ticket summary + suggested next step (AI summary mode, explicit button)

- **Label:** `api-request` · **Area:** tickets · **Backend helper:** H26
- **Ask / recommended default:** mode:'summary' on admin.tickets.ai.suggest (H26, S); explicit button only, never automatic (AI costs money).
- **Pages:** `/admin/tickets/{ticket}`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #26`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H26`; `phase-2/FEEDBACK-B-r1.md A11`

## PR-027 · Anomaly flags on orders

- **Label:** `api-request` · **Area:** orders · **Backend helper:** H19
- **Ask / recommended default:** GET /admin/orders/flags?ids= (H19, M), read-only rules.
- **Pages:** `/admin/orders`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #27`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H19`

## PR-028 · Health strip for super admins

- **Label:** `api-request` · **Area:** ops · **Backend helper:** H27
- **Ask / recommended default:** GET /admin/health/summary (H27, S), top administrator only (T003 #45).
- **Pages:** `/admin/failed-jobs`, `/admin/job/batches`, `/admin/schedule-monitor`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #28`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H27`

## PR-029 · Out of stock? closest cloths in stock

- **Label:** `api-request` · **Area:** fabrics · **Backend helper:** H28
- **Ask / recommended default:** GET /admin/fabric-intelligence/similar (H28, M).
- **Pages:** `/admin/fabric-codes`
- **Evidence:** `phase-1/powerups/advanced/ADVANCED.md #29`; `phase-1/powerups/advanced/BACKEND-HELPERS.md H28`

## PR-033 · Cancel a queued print job (G1)

- **Label:** `api-request` · **Area:** orders
- **Ask / recommended default:** Hide cancel until POST /admin/orders/print-jobs/{job}/cancel exists (dispatch_status=queued only).
- **Pages:** `/admin/orders/print-jobs`
- **Evidence:** `PROPOSALS.md (pre-consolidation) G1`; `phase-2/archetypes/ARCHETYPES.md A06`

## PR-034 · Resolve several vision results at once (G2)

- **Label:** `api-request` · **Area:** vision-checks
- **Ask / recommended default:** Bulk bar stays hidden on A08 until a bulk resolve (≤100 ids, PASS/FAIL) exists.
- **Pages:** `/admin/vision-checks/results`
- **Evidence:** `PROPOSALS.md (pre-consolidation) G2`; `phase-2/archetypes/ARCHETYPES.md A08`; `phase-1/powerups/advanced/ADVANCED.md #24`

## PR-035 · Ticket assignee + 'Mine' view + routed notifications (G3)

- **Label:** `api-request` · **Area:** tickets
- **Ask / recommended default:** Rename today's 'Owner' to Shop (retailer account); assignee needs assignee_id, a filter and notification routing.
- **Pages:** `/admin/tickets`, `/admin/tickets/{ticket}`
- **Evidence:** `PROPOSALS.md (pre-consolidation) G3`; `phase-2/truth/TRUTH-TICKETS.md §7 / §10.1`; `phase-1/menu/MENU-OPTIONS.md badge`

## PR-036 · Internal (staff-only) ticket note (G4)

- **Label:** `api-request` · **Area:** tickets
- **Ask / recommended default:** is_internal on tickets_comments, excluded from email and the retailer view.
- **Pages:** `/admin/tickets/{ticket}`
- **Evidence:** `PROPOSALS.md (pre-consolidation) G4`; `phase-2/truth/TRUTH-TICKETS.md §10.2`

## PR-037 · Persist the last AI suggestion per ticket (no re-billing on reopen)

- **Label:** `api-request` · **Area:** tickets
- **Ask / recommended default:** Cache the last suggestion with a timestamp; the 'Get AI suggestion' button stays explicit.
- **Pages:** `/admin/tickets/{ticket}`
- **Evidence:** `phase-2/truth/TRUTH-TICKETS.md §10.3`; `phase-2/FEEDBACK-B-r1.md A11`

## PR-039 · CN labels for ticket statuses, severities and categories

- **Label:** `api-request` · **Area:** tickets
- **Ask / recommended default:** DB data backfill (EN only today); show EN until present.
- **Pages:** `/admin/tickets`, `/admin/tickets/{ticket}`, `/admin/tickets/status`, `/admin/tickets/severity`, `/admin/tickets/categories`
- **Evidence:** `phase-2/truth/TRUTH-TICKETS.md §10.5`

## PR-040 · Attachment count on ticket list/show payloads

- **Label:** `api-request` · **Area:** tickets
- **Ask / recommended default:** Add attachments_count; no paperclip in the list until then.
- **Pages:** `/admin/tickets`, `/admin/tickets/{ticket}`
- **Evidence:** `phase-2/truth/TRUTH-TICKETS.md §10.6`

## PR-042 · Order filter on the tickets index

- **Label:** `api-request` · **Area:** tickets
- **Ask / recommended default:** Only has_order + search exist; add order_id filter (also feeds the order Issues tab).
- **Pages:** `/admin/tickets`, `/admin/orders/{order}`
- **Evidence:** `phase-3/flagships/orders/ORDERS-R1.md could-not-verify / D13`

## PR-043 · Order status-history read (Activity tab)

- **Label:** `api-request` · **Area:** orders
- **Ask / recommended default:** Add an order_status history read; until then Activity shows payload audits, fitting-validation logs and print/agent jobs only.
- **Pages:** `/admin/orders/{order}`
- **Evidence:** `phase-3/flagships/orders/ORDERS-R1.md D14`

## PR-057 · gantt-grid rows: factory_due_at + current_step

- **Label:** `api-request` · **Area:** orders
- **Ask / recommended default:** Add both to gantt-grid rows; otherwise one phase-summary call per row.
- **Pages:** `/admin/gantt`
- **Evidence:** `phase-3/flagships/gantt/GANTT-R1.md §4.1`

## PR-058 · gantt-grid rolling window (from/to across months)

- **Label:** `api-request` · **Area:** orders
- **Ask / recommended default:** Add from/to; fallback stitches two month calls client-side.
- **Pages:** `/admin/gantt`
- **Evidence:** `phase-3/flagships/gantt/GANTT-R1.md §4.2`

## PR-059 · Express flag on gantt rows

- **Label:** `api-request` · **Area:** orders
- **Ask / recommended default:** Add express to gantt-grid rows (it exists on the index).
- **Pages:** `/admin/gantt`
- **Evidence:** `phase-3/flagships/gantt/GANTT-R1.md §4.3`

## PR-060 · Factory capacity per day

- **Label:** `api-request` · **Area:** factory
- **Ask / recommended default:** Until it exists, load heat is relative to each factory's own peak.
- **Pages:** `/admin/gantt`, `/admin/factories`
- **Evidence:** `phase-3/flagships/gantt/GANTT-R1.md §4.4`

## PR-061 · /orders/due horizon beyond 3 days

- **Label:** `api-request` · **Area:** orders
- **Ask / recommended default:** Raise horizon_days cap to 14 (or derive from factory due) for +7/+14 views.
- **Pages:** `/admin/orders/due`, `/admin/dashboard`
- **Evidence:** `phase-3/flagships/gantt/GANTT-R1.md §4.5`

## PR-062 · Design create silently drops the surcharge (extra_meter)

- **Label:** `api-request` · **Area:** designs
- **Ask / recommended default:** Persist extra_meter (design + popup rows) on create (web + API store), or remove the inputs from create.
- **Pages:** `/admin/designs/create`
- **Evidence:** `phase-2/truth/TRUTH-DESIGNS.md §8 G1`

## PR-063 · Camera frame and Supplier on the design create form

- **Label:** `api-request` · **Area:** designs
- **Ask / recommended default:** Add both to create (StoreDesignRequest already accepts camera_frame; supplier needs the store to accept it).
- **Pages:** `/admin/designs/create`
- **Evidence:** `phase-2/truth/TRUTH-DESIGNS.md §8 G2`

## PR-064 · 'Retailers carrying this design / priced?' panel on the design page

- **Label:** `api-request` · **Area:** designs
- **Ask / recommended default:** Read endpoint over user_main_product_design by design_id; read-only panel.
- **Pages:** `/admin/designs/{design}/edit`
- **Evidence:** `phase-2/truth/TRUTH-DESIGNS.md §8 G3`

## PR-066 · Align design 'info' validation (max:1000 on the edit path)

- **Label:** `api-request` · **Area:** designs
- **Ask / recommended default:** Align the web edit path with store/API.
- **Pages:** `/admin/designs/{design}/edit`
- **Evidence:** `phase-2/truth/TRUTH-DESIGNS.md §8 G5`

## PR-068 · Ungated web pricing writes

- **Label:** `api-request` · **Area:** pricing
- **Ask / recommended default:** New UI calls the API only (update pricing + pricing:write); retire the ungated web writes.
- **Pages:** `/admin/pricing`, `/admin/pricing/create`
- **Evidence:** `phase-2/truth/TRUTH-PRICING.md P-G1`

## PR-070 · Retailer pricing cell write by ids, not localized display name

- **Label:** `api-request` · **Area:** pricing
- **Ask / recommended default:** Accept fabric_code_id / combination_id on the cell write so the grid never depends on locale.
- **Pages:** `/admin/pricing/create`
- **Evidence:** `phase-2/truth/TRUTH-PRICING.md P-G4`

## PR-072 · Menu badge counts (optional integer badge per link)

- **Label:** `api-request` · **Area:** shell
- **Ask / recommended default:** Optional permission-scoped badge (tickets open, vision results awaiting review, failed print jobs), cached or via /me/menu/badges; nothing drawn when absent.
- **Pages:** `shell`
- **Evidence:** `phase-1/menu/MENU-OPTIONS.md needs-backend 2`; `phase-1/powerups/POWERUPS.md note`

## PR-073 · Backfill cn labels for the menu (90 missing) 

- **Label:** `api-request` · **Area:** shell
- **Ask / recommended default:** Add cn keys in resources/lang/cn.json; EN fallback until then.
- **Pages:** `shell`
- **Evidence:** `phase-1/menu/MENU-OPTIONS.md needs-backend 1`

## PR-082 · Spec permission metadata drift on orders/tickets lists

- **Label:** `api-request` · **Area:** orders
- **Ask / recommended default:** x-permission / x-token-scope on GET /admin/orders and /admin/tickets list extra requirements the live API does not enforce; fix the spec so permission-shaped UI is not over-restrictive.
- **Pages:** `/admin/orders`, `/admin/tickets`
- **Evidence:** `projects/laravel-admin/handoffs/2026-10-16-T012-RETURN.md §6`

