docs(plating): fine-tuning initiative roadmap + Sub 2 design spec
Captures the current state of the system-wide fine-tuning initiative so a fresh Claude Code session can resume without context loss. CLAUDE.md additions (fusion_plating/CLAUDE.md): * Sub-project roadmap (Sub 1 through 8 + two deferred items) * Sub 2 locked decisions (Q1–Q6 answers) * Sub 2 defensive measures that prevent rework when later subs land * Sub 6 / 7 / 8 previews from the client transcript * Client-confirmed operational thresholds (tank polling, active tanks) * How to resume in a fresh session Sub 2 design spec (docs/superpowers/specs/): * Part Data Model Overhaul — covers gaps 2b, 2c, 2d, 4 * 12 sections: scope, data model, migration, UI, cert resolution, reports, testing, defensive measures, files touched, rollout, success criteria, open questions * All clarifying questions answered; zero placeholders * Ready for writing-plans skill to generate implementation plan Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -356,3 +356,82 @@ See `K:\Github\RePackaged-Odoo\CLAUDE.md` for full details. Key points:
|
||||
- Phone-home/telemetry gutted
|
||||
- `web_enterprise` and `mail_enterprise` are installed on odoo-entech
|
||||
- Addons path includes: `_dependencies`, `accounting`, `inventory_manufacturing`, `hr`, `sales`, `ai`, `fusion_backend`, `custom`, `website`
|
||||
|
||||
## Fine-Tuning Initiative (Started 2026-04-21)
|
||||
|
||||
System-wide UX gap closure. Running PLAN → SPEC → IMPLEMENT per sub-project so we don't
|
||||
rewrite code as new requirements surface. Each sub-project has its own design doc in
|
||||
`docs/superpowers/specs/` and its own implementation plan before any code lands.
|
||||
|
||||
### Sub-Project Roadmap
|
||||
| # | Sub-project | Status | Gaps |
|
||||
|---|---|---|---|
|
||||
| 1 | Direct Order Wizard fix (no auto-confirm/auto-email) | Pending | Gap 1 |
|
||||
| 2 | Part Data Model Overhaul (part#/rev required, dual descriptions, per-part cert requirement, SKU→Part Number on customer docs) | Design approved 2026-04-21 | 2b, 2c, 2d, 4 |
|
||||
| 3 | Default Process + Composer per part (reuse recipe tree) | Pending | 2e, 2f |
|
||||
| 4 | Contract Review two-portion workflow (QA Assistant + QA Manager; pre-production gate) | Pending | 2i |
|
||||
| 5 | Order-line fields (serial, job#, thickness dropdown, revision picker) | Pending | 5, 6, Q2 |
|
||||
| 6 | Contact Profiles & Communication Routing (sub-contacts + per-location notification lists + global contacts) | Pending | client transcript A/B/C |
|
||||
| 7 | IoT tuning (configurable polling interval 15–30 min, seed 6–10 tank sensors) | Pending | client transcript D |
|
||||
| 8 | Receiving / Inspection / QC flow restructure (split receiving vs inspection; racking crew inspects, not receiver) | Pending | client transcript E |
|
||||
| ∞ | First-off / last-off QC | Deferred | client transcript F |
|
||||
| ∞ | VEC machine auto-ingest (Word-format thickness report from network-connected XRF; different machine from Fischerscope) | Deferred | client transcript G |
|
||||
|
||||
### Sub 2 Locked Decisions (2026-04-21)
|
||||
|
||||
| Q | Decision |
|
||||
|---|---|
|
||||
| Q1 — Cert requirement precedence | Part wins; partner is fallback. New selection `certificate_requirement` on `fp.part.catalog`: `inherit` / `none` / `coc` / `coc_thickness`. Default `inherit` preserves current behaviour for existing records. |
|
||||
| Q2 — Revision handling | Keep existing chain (`parent_part_id`, `is_latest_revision`, `revision_ids`). Out-of-scope for Sub 2. The "revision picker at order entry" moves to Sub 5. |
|
||||
| Q3 — Required-field flip | Strict + backfill. On upgrade: `part_number = name` if empty; `revision = 'A'` if empty. Then `required=True` for both. `name` becomes optional. |
|
||||
| Q4 — Descriptions shape | Split `fp.sale.description.template.description` into `internal_description` + `customer_facing_description`. Repeater on the part's Descriptions tab gains two columns. Old `description` column dropped in migration. |
|
||||
| Q5 — SKU vs Part Number | Use `fp.part.catalog.part_number` directly as the source of truth. Don't sync to `default_code`. Customer-facing reports print `part_number`; internal reports keep showing `default_code` (service code). Odoo-native screens untouched. |
|
||||
| Q6 — Description required at order entry | **Both required.** SO line carries `name` (customer-facing, already Odoo standard) + new `x_fc_internal_description` (ops workflow). Both required before save. |
|
||||
|
||||
### Sub 2 Defensive Measures (Prevent Rework When Later Subs Land)
|
||||
|
||||
1. **Single-source cert resolution function** — `mrp.production._fp_resolve_cert_requirement(self)` returns `(want_coc, want_thickness)`. Every caller (cert cascade, QC gate, notification routing) goes through this. When Sub 6 restructures partner-level flags into location / contact permissions, one function updates — no call-site hunt.
|
||||
2. **Shared QWeb line-header macro** — `fusion_plating_reports.customer_line_header` renders `part_number + revision + customer-facing description` with fallback to product name for non-part lines. All 4 customer-facing reports (SO, invoice, packing slip, BoL) call the macro. Sub 5's revision picker updates the macro once, all reports follow.
|
||||
3. **Isolated migration** — Sub 2's `post_init_hook` is idempotent (NULL/empty checks). Safe to re-run. Doesn't fight Sub 3/4/5/6 migrations.
|
||||
4. **Additive SO line fields** — `x_fc_internal_description`, `x_fc_description_template_id` sit alongside future Sub 5 fields (`x_fc_serial_number`, `x_fc_job_number`, `x_fc_thickness`, `x_fc_revision_snapshot`) with zero touchpoints.
|
||||
5. **Clean removal of old `description` column** — migrated then dropped. Not kept as deprecated. One clean break now beats two migrations later.
|
||||
|
||||
### Sub 6 Preview — Contact Profiles & Communication Routing (client transcript A/B/C)
|
||||
- Sub-contacts under `res.partner` with per-contact permissions: certs / QC / quotes+SO / invoices.
|
||||
- Multiple delivery locations per customer; each location has its own notification list.
|
||||
- Global contact (company-level + location-level) gets all communications.
|
||||
- Will restructure or augment the partner-level `x_fc_send_coc` / `x_fc_send_thickness_report` flags that Sub 2 currently falls back to. Sub 2's `_fp_resolve_cert_requirement` is the update point.
|
||||
|
||||
### Sub 7 Preview — IoT Tuning (client transcript D)
|
||||
- 6–10 active tanks (of ~20–25 total) need continuous monitoring.
|
||||
- Polling interval: **30 minutes acceptable, 15 minutes ideal.** Configurable per tank.
|
||||
- Temperature, pH, nickel concentration — all on automated controller (existing `fusion_plating_iot` module).
|
||||
- Work scope: ensure per-sensor interval field exists + defaults + seed 6–10 tank.sensor records.
|
||||
|
||||
### Sub 8 Preview — Receiving / Inspection / QC Restructure (client transcript E)
|
||||
**Current flow (wrong):** Direct order → receiving entry → receiver inspects on arrival.
|
||||
**Correct flow:**
|
||||
1. Customer ships parts in boxes. Receiver counts boxes (does NOT inspect individual parts).
|
||||
2. Boxes sit in staging until racking.
|
||||
3. Racking crew opens boxes, inspects each part as they load racks (inspection ≠ receiving).
|
||||
4. Parts go through plating process.
|
||||
5. Post-plate QC on machine (thickness / depth / coating thickness) — existing QC gate (Phase 1–3 work).
|
||||
6. Pack back into the SAME boxes they arrived in. Same qty out as in.
|
||||
|
||||
**Implication:** The current `fusion_plating_receiving` module conflates receiving + inspection. Sub 8 splits them. Racking-time inspection becomes its own record, linked to WOs not to receiving.
|
||||
|
||||
### Deferred Items (Future)
|
||||
- **First-off / last-off QC** — first and last part of each batch get full QC inspection; middle parts sampled. Not priority.
|
||||
- **VEC machine auto-ingest** — different from Fischerscope. Exports a Word doc (picture + data) named `workorder_PO.docx` to a network share. Plan: auto-scan the share, parse, attach to QC as thickness_report. Defer until core flow is solid.
|
||||
|
||||
### Client-Confirmed Operational Thresholds
|
||||
- Tank polling: 15–30 min, half-hour acceptable
|
||||
- Active tanks: 6–10 (not all 20–25)
|
||||
- Boxes round-trip: parts ship back in the same boxes they arrived in, same quantity per box
|
||||
|
||||
### How to Resume This Work in a Fresh Session
|
||||
1. Read this section (Fine-Tuning Initiative).
|
||||
2. Check the sub-project status table — which sub is in flight.
|
||||
3. Read the corresponding spec in `docs/superpowers/specs/YYYY-MM-DD-sub<N>-*-design.md`.
|
||||
4. Read the implementation plan if one exists.
|
||||
5. Continue from the next un-checked step.
|
||||
|
||||
Reference in New Issue
Block a user