2026-09-08 (session 95). Scheduler enters production days at desk-review intake. Desk Review Prep → Start Desk Review (and any post-production desk-review intake): when the permit parse yields a UND/ANC/BRC product (push/helical/slab piers, wall/channel anchors, CFRP/steel braces), the wizard’s Review step shows a Production Days card — one row per product code with the permitted quantity and a rule-of-thumb suggestion (ceil(qty/6.5|10|12), hint only, never auto-filled) — and blocks Continue until every row has a whole number 1..60. Nothing is asked or sent when the scope has no qualifying product. API: ConfirmRequest.production_days {code: days}; validate_intake_production_days shared by /intake/confirm and /portal/intake-requests (PPDR-only, all qualifying codes required, non-qualifying/out-of-scope codes rejected); execute_confirm writes production_days to the FIRST SOW line per code (source=scheduler_intake, riding the same extra-column update as the post_production 2x flag) and the sum to projects CSI_PRODUCTION_DAYS, and returns production_days total; queued submissions carry it in the payload and replay on approval (pre-deploy requests replay None = old behaviour). Duplicate codes in the parse get days on the first line only because every consumer sums per-line days. Downstream unchanged: project page Prod. Days reads CSI_PRODUCTION_DAYS, flags aggregate sums SOW lines, invoice PRD-DAY sums SOW lines (was falling back to the auto-calc). Owner confirm gate (cert_validate Check 12 / preflight Probe 10, CertPanel Confirm Production Days) is unchanged and now confirms the scheduler’s numbers. Commits: entirely-api 94947c6 (tests/test_intake_production_days.py, suite 1145), entirely-portal 66246d6 (src/lib/productionDaysIntake.ts + 13 vitest, built → live). Not exercised end to end with a real submission.