From 1122f840078db8625384fea8bbd25e9774e9a2b1 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Fri, 22 May 2026 22:23:23 -0400 Subject: [PATCH] docs(fusion_plating): document tablet redesign architecture in CLAUDE.md (P5.1) Replaces the stale "Plant Overview Dashboard" section with a current "Shop Floor Architecture" section covering the Phase 1-4 deliverables: - 3 OWL client actions (Landing / JobWorkspace / Manager Dashboard) - 5 shared OWL services - Backend endpoints (workspace / landing / manager) - Auto-pause cron config knob (ir.config_parameter name) - Key new model fields with their purpose - Operator ACL lift summary - Deprecated-but-still-live legacy surfaces (Phase 5 cleanup pending) - Old patterns to avoid Links to the spec + plan docs as the authoritative reference. Co-Authored-By: Claude Opus 4.7 (1M context) --- fusion_plating/CLAUDE.md | 58 +++++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 7 deletions(-) diff --git a/fusion_plating/CLAUDE.md b/fusion_plating/CLAUDE.md index a61638a0..7a2eee7e 100644 --- a/fusion_plating/CLAUDE.md +++ b/fusion_plating/CLAUDE.md @@ -339,13 +339,57 @@ POST /fp/recipe/duplicate — deep-copy recipe ### Client Recipes Created - `ENP-ALUM-BASIC` — Electroless Nickel Plating Aluminium Basic (9 operations, 15 steps). Data file: `fusion_plating/data/fp_recipe_enp_alum_basic.xml` -## Plant Overview Dashboard -- OWL client action: `fp_plant_overview` in `fusion_plating_shopfloor` -- Kanban columns = work centres, cards = active `mrp.workorder` records -- Drag & drop between columns (writes `workcenter_id` on the work order) -- Endpoint: `POST /fp/shopfloor/plant_overview` -- Move endpoint: `POST /fp/shopfloor/plant_overview/move_card` -- Auto-refreshes every 30s +## Shop Floor Architecture (2026-05-22 tablet redesign — Phases 1-4) + +Spec: [docs/superpowers/specs/2026-05-22-shopfloor-tablet-redesign-design.md](docs/superpowers/specs/2026-05-22-shopfloor-tablet-redesign-design.md) +Plan: [docs/superpowers/plans/2026-05-22-shopfloor-tablet-redesign-plan.md](docs/superpowers/plans/2026-05-22-shopfloor-tablet-redesign-plan.md) + +**Three OWL client actions** (registered under `registry.category("actions")`): +- `fp_shopfloor_landing` — Workstation kanban entry. Station-scoped or All-Plant mode toggle. Tap a card → JobWorkspace. Replaces the legacy `fp_shopfloor_tablet` and folds in `fp_plant_overview`. +- `fp_job_workspace` — Full-screen single-WO surface. Sticky header (WO #, customer, qty, workflow chip), sticky 9-stage workflow bar, step list with GateViz blockers, side panel (spec/attachments/chatter), sticky action rail (Hold/Note/Milestone). Opens from kanban tap, smart button, QR scan, or manager card tap. +- `fp_manager_dashboard` — Manager Desk with 4 sibling tabs: **Workflow Funnel** (default), **Approval Inbox**, **Plant Board** (existing 3-column), **At-Risk** (trending late + hold reasons + bottleneck heatmap). + +**Five shared OWL services** in `fusion_plating_shopfloor/static/src/js/components/`: +- `WorkflowChip` — workflow.state pill + optional next-action hint +- `GateViz` — "Can't start because…" explainer (reads `fp.job.step.blocker_kind`/`reason`) +- `FpSignaturePad` — Dialog canvas signature capture +- `FpHoldComposer` — Dialog hold-create form with reason picker + qty + photo +- `FpKanbanCard` — standard WO/step card with embedded WorkflowChip + blocker badge + +**Backend endpoints (Phase 1-4):** +- Workspace: `/fp/workspace/{load,hold,sign_off,advance_milestone}` +- Landing: `/fp/landing/kanban` (mode=station|all_plant) +- Manager: `/fp/manager/{overview,funnel,approval_inbox,at_risk}` + +**Auto-pause cron — fixes 411-hour ghost timers:** +- `_cron_autopause_stale_steps()` runs every 30 min +- Threshold from `ir.config_parameter` **`fp.shopfloor.autopause_threshold_hours`** (default 8.0) +- Recipe nodes opt out via `fusion.plating.process.node.long_running=True` for 24h bakes etc. +- Flips `state=in_progress` idle > threshold to `paused` with chatter audit + +**Key model fields added (Phase 1-4):** +- `fp.job.display_wo_name` — "WO # 00001" formatter for tablet/dashboard (model `name` field stays `WH/JOB/…`; system-wide sequence rename deferred) +- `fp.job.late_risk_ratio` — stored Float (remaining_planned / minutes_to_deadline) driving At-Risk view +- `fp.job.active_step_id` — computed M2o to currently in_progress step +- `fp.job.step.blocker_kind` / `blocker_reason` / `blocker_jump_target_*` — drives GateViz +- `fp.work.centre.bottleneck_score` / `avg_wait_minutes` — drives At-Risk bottleneck heatmap + +**Operator ACL lift (per "techs wear multiple hats" rule):** +- `fp.certificate` — operator gained write (flip draft → issued from tablet) +- `fp.thickness.reading` — operator gained create+write (Fischerscope capture from tablet) +- `fp.job.node.override` — operator gained read (see opt-out badges on steps) +- Supervisor-only ops (step Skip, hold Release) enforced in `workspace_controller.py`, not ACL + +**Deprecated but still live** (cleanup is Phase 5): +- OWL components: `fp_shopfloor_tablet`, `fp_plant_overview` — registered but no menu points at them +- Endpoints: `/fp/shopfloor/tablet_overview`, `plant_overview`, `queue` — marked DEPRECATED with INFO log lines, bodies intact for back-compat +- `/fp/shopfloor/plant_overview/move_card` is **NOT** deprecated — the new Landing component uses it for drag-and-drop + +**Old patterns to avoid:** +- Don't read `fp.job.name` for display — use `display_wo_name` everywhere on tablet/dashboard +- Don't add SCSS that uses raw hex without an `@if $o-webclient-color-scheme == dark` branch (dark mode breaks otherwise; see existing `_workflow_chip.scss` as the template) +- Don't add `web.assets_web_dark` entries to the manifest — Odoo 19 auto-compiles `web.assets_backend` SCSS into both bundles +- Don't bypass `_fp_should_block_predecessors()` when computing step blockers — keep `blocker_kind=predecessor` logic in sync with `can_start` ## Deployment