Four fixes shipped together — all surfaced during tablet UX walkthrough on entech. 1. sale.order ACL on step completion Technicians hit "Access Denied... sale.order" when starting/finishing any step. _fp_check_receiving_gate + the serial-promotion helpers + _fp_resolve_contract_review_part read step.job_id.sale_order_id (and sale_order_line_ids) without sudo. Per Rule 13m, denormalized cross- module reads in tablet controllers must sudo() the source recordset. 2. Workspace stuck on "Loading Job Workspace…" after Hand Off + relogin Action params aren't URL-encoded, so the workspace remounts with jobId=null. refresh() exited early, state.data stayed null, "Loading" shown indefinitely. onMounted now redirects to the plant kanban when jobId is null or the initial load returns no data. 3. 4-hour timer offset on active steps workspace_controller used fp_format() to serialize date_started — which converts naive UTC to user tz wall time first. JS then appended 'Z' and parsed as UTC, so timer was offset by the user's tz (4h on EDT). Switched to fp_isoformat_utc() (proper +00:00 ISO) and dropped the Z-append in formatActiveStepElapsed + isActiveStepOvertime. 4. Lock-screen clock follows FP regional setting tablet_lock.js used d.getHours() / d.toLocaleDateString() — browser tz. Now /fp/tablet/tiles returns tz_name (fp_user_tz resolution: user.tz → company.x_fc_default_tz → UTC) and the formatters use Intl.DateTimeFormat with the explicit timeZone option. plant_overview now consumes server_time (already fp_format'd) instead of toLocaleTime String. Same chain Odoo backend uses, so PDF / view / tablet all agree on what time it is. Versions: fusion_plating_jobs 19.0.10.30.0, fusion_plating_shopfloor 19.0.33.1.12. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fusion_plating_jobs
Native plating job bridge — wires fp.job and fp.job.step (defined in
fusion_plating core, Phase 1 of the migration spec dated 2026-04-25)
into the rest of the Fusion Plating module family: configurator, portal,
logistics, quality, certificates, batches, KPI, notifications, reports.
Coexists with fusion_plating_bridge_mrp during the migration period.
The x_fc_use_native_jobs settings flag (default: False) toggles the
behaviour. When False, SO confirm continues to create mrp.production
records through bridge_mrp. When True, SO confirm creates fp.job
records here.
See docs/superpowers/specs/2026-04-25-fp-native-job-model-design.md
for full design rationale and §6 of the implementation plan for phase
breakdown.
Phase 6 — deferred items
Phase 6 originally scoped the full operator UI rewrite. With Tailscale SSH to entech currently unavailable we cannot live-test OWL/JS in the browser, so Phase 6 ships a lean version: the data-layer endpoints land now, the rendering UI lands later.
Deferred to post-cutover hardening:
- Plant Overview kanban over
fp.job.step— replacesfusion_plating_shopfloor'smrp.workorderkanban. - Tablet Station UI rewrite over
fp.job/fp.job.step. - Manager Dashboard rewrite.
- Process Tree OWL component — currently a stub:
/fp/jobs/process_treereturns the serialized recipe tree as JSON, but the OWL component to render it is not built.
Rationale: these are large OWL/JS components that need live in-browser
verification on entech. Under the migration's parallel-coexistence
strategy, operators continue using the existing shopfloor UI (bound to
mrp.workorder) until cutover. After cutover, the operator UI rewrite
becomes its own focused project — the data layer (fp.job,
fp.job.step, time logs, timestamps) is fully in place from
Phase 1–5.
Phase 6 — what shipped
/fp/job/<id>— scan-redirect controller. The fp.job sticker QR encodes this URL. Routes managers to thefp.jobform; routes operators to the same form for now (will swap to the process tree client action once the OWL component lands)./fp/jobs/process_tree— JSON-RPC endpoint that returns the recipe tree for a job, with each node tagged by its matchingfp.job.stepstate, ready for an OWL component to consume.