Implements 2026-04-29-step-library-audit-design.md. Bumps fusion_plating to 19.0.18.7.0, fusion_plating_jobs to 19.0.8.12.0, fusion_plating_reports to 19.0.10.2.0. LIBRARY EXPANSION - 8 new Step Kinds: Receiving, Electroclean, Strike, Salt Spray, Adhesion Test, Hardness Test, Packaging, Tank Replenishment - 4 new input types: photo, multi_point_thickness, bath_chemistry_panel, ph - DEFAULT_INPUTS_BY_KIND rewritten to seed audit-grade prompts on every kind (bath IDs, photos, multi-point thickness, signatures, etc.) - + Common Audit Fields one-click button on the library template form - Default Operator Instructions relabel + alert callout PER-RECIPE CONFIGURABILITY - collect (Boolean) per recipe-step input prompt — opt out without delete - collect_measurements (Boolean) master switch on recipe step — when off, wizard skips entirely - template_input_id (Many2one) traceability link from recipe to library - Recipe-step backend form view exposes the new fields with handle drag, toggle, target range, and library-source column RUNTIME WIRING - Step input wizard filters node.input_ids to step_input AND collect=True; short-circuits on collect_measurements=False - New input types: photo (image widget + ir.attachment), multi-point thickness (5 readings + auto avg, skips empty cells), bath chemistry panel (pH/conc/temp/bath bundle), pH (0-14 numeric) - Composite values JSON-serialized into value_text; photo via attachment CoC REPORT - Filters captured prompts to collect=True only - Renders new input types with appropriate format MIGRATION (post-migrate.py for 19.0.18.7.0) - Backfills collect=True on recipe-step inputs - Backfills collect_measurements=True on recipe steps - Re-runs action_seed_default_inputs on every existing template (idempotent, preserves user edits) - Backfills template_input_id by name-matching against source library template (handles JSONB vs varchar name columns) SEED DATA - 8 example templates (one per new kind) in fp_step_template_data.xml with noupdate=1 BATTLE TEST - bt_step_library_audit.py: 29 assertions all PASS on entech OWL EDITOR EXTENSION DEFERRED - The simple recipe editor's per-step Instructions/Measurements expansions were not implemented in this pass; users configure via the backend recipe-step form. Track follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.4 KiB
7.4 KiB
| 1 | id | name | model_id:id | group_id:id | perm_read | perm_write | perm_create | perm_unlink |
|---|---|---|---|---|---|---|---|---|
| 2 | access_fp_treatment_operator | fp.treatment.operator | model_fp_treatment | fusion_plating.group_fusion_plating_operator | 1 | 0 | 0 | 0 |
| 3 | access_fp_treatment_supervisor | fp.treatment.supervisor | model_fp_treatment | fusion_plating.group_fusion_plating_supervisor | 1 | 1 | 0 | 0 |
| 4 | access_fp_treatment_manager | fp.treatment.manager | model_fp_treatment | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 5 | access_fp_part_catalog_operator | fp.part.catalog.operator | model_fp_part_catalog | fusion_plating.group_fusion_plating_operator | 1 | 0 | 0 | 0 |
| 6 | access_fp_part_catalog_estimator | fp.part.catalog.estimator | model_fp_part_catalog | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 0 |
| 7 | access_fp_part_catalog_manager | fp.part.catalog.manager | model_fp_part_catalog | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 8 | access_fp_coating_config_operator | fp.coating.config.operator | model_fp_coating_config | fusion_plating.group_fusion_plating_operator | 1 | 0 | 0 | 0 |
| 9 | access_fp_coating_config_estimator | fp.coating.config.estimator | model_fp_coating_config | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 0 |
| 10 | access_fp_coating_config_manager | fp.coating.config.manager | model_fp_coating_config | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 11 | access_fp_pricing_rule_operator | fp.pricing.rule.operator | model_fp_pricing_rule | fusion_plating.group_fusion_plating_operator | 1 | 0 | 0 | 0 |
| 12 | access_fp_pricing_rule_estimator | fp.pricing.rule.estimator | model_fp_pricing_rule | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 0 |
| 13 | access_fp_pricing_rule_manager | fp.pricing.rule.manager | model_fp_pricing_rule | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 14 | access_fp_pricing_surcharge_operator | fp.pricing.complexity.surcharge.operator | model_fp_pricing_complexity_surcharge | fusion_plating.group_fusion_plating_operator | 1 | 0 | 0 | 0 |
| 15 | access_fp_pricing_surcharge_estimator | fp.pricing.complexity.surcharge.estimator | model_fp_pricing_complexity_surcharge | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 0 |
| 16 | access_fp_pricing_surcharge_manager | fp.pricing.complexity.surcharge.manager | model_fp_pricing_complexity_surcharge | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 17 | access_fp_quote_configurator_operator | fp.quote.configurator.operator | model_fp_quote_configurator | fusion_plating.group_fusion_plating_operator | 1 | 0 | 0 | 0 |
| 18 | access_fp_quote_configurator_estimator | fp.quote.configurator.estimator | model_fp_quote_configurator | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 0 |
| 19 | access_fp_quote_configurator_manager | fp.quote.configurator.manager | model_fp_quote_configurator | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 20 | access_fp_direct_order_wizard_estimator | fp.direct.order.wizard.estimator | model_fp_direct_order_wizard | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 1 |
| 21 | access_fp_direct_order_wizard_manager | fp.direct.order.wizard.manager | model_fp_direct_order_wizard | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 22 | access_fp_direct_order_line_estimator | fp.direct.order.line.estimator | model_fp_direct_order_line | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 1 |
| 23 | access_fp_direct_order_line_manager | fp.direct.order.line.manager | model_fp_direct_order_line | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 24 | access_fp_add_from_so_wizard_estimator | fp.add.from.so.wizard.estimator | model_fp_add_from_so_wizard | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 1 |
| 25 | access_fp_add_from_so_wizard_manager | fp.add.from.so.wizard.manager | model_fp_add_from_so_wizard | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 26 | access_fp_add_from_quote_wizard_estimator | fp.add.from.quote.wizard.estimator | model_fp_add_from_quote_wizard | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 1 |
| 27 | access_fp_add_from_quote_wizard_manager | fp.add.from.quote.wizard.manager | model_fp_add_from_quote_wizard | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 28 | access_fp_quote_promote_wizard_estimator | fp.quote.promote.wizard.estimator | model_fp_quote_promote_wizard | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 1 |
| 29 | access_fp_quote_promote_wizard_manager | fp.quote.promote.wizard.manager | model_fp_quote_promote_wizard | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 30 | access_fp_sale_assembly_user | fp.sale.assembly.user | model_fp_sale_assembly | base.group_user | 1 | 0 | 0 | 0 |
| 31 | access_fp_sale_assembly_estimator | fp.sale.assembly.estimator | model_fp_sale_assembly | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 1 |
| 32 | access_fp_sale_assembly_manager | fp.sale.assembly.manager | model_fp_sale_assembly | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 33 | access_fp_sale_assembly_line_user | fp.sale.assembly.line.user | model_fp_sale_assembly_line | base.group_user | 1 | 0 | 0 | 0 |
| 34 | access_fp_sale_assembly_line_estimator | fp.sale.assembly.line.estimator | model_fp_sale_assembly_line | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 1 |
| 35 | access_fp_sale_assembly_line_manager | fp.sale.assembly.line.manager | model_fp_sale_assembly_line | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 36 | access_fp_part_import_wizard_estimator | fp.part.catalog.import.wizard.estimator | model_fp_part_catalog_import_wizard | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 1 |
| 37 | access_fp_part_import_wizard_manager | fp.part.catalog.import.wizard.manager | model_fp_part_catalog_import_wizard | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 38 | access_fp_customer_price_list_operator | fp.customer.price.list.operator | model_fp_customer_price_list | fusion_plating.group_fusion_plating_operator | 1 | 0 | 0 | 0 |
| 39 | access_fp_customer_price_list_estimator | fp.customer.price.list.estimator | model_fp_customer_price_list | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 0 |
| 40 | access_fp_customer_price_list_manager | fp.customer.price.list.manager | model_fp_customer_price_list | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 41 | access_fp_sale_desc_template_user | fp.sale.description.template.user | model_fp_sale_description_template | base.group_user | 1 | 0 | 0 | 0 |
| 42 | access_fp_sale_desc_template_estimator | fp.sale.description.template.estimator | model_fp_sale_description_template | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 0 |
| 43 | access_fp_sale_desc_template_manager | fp.sale.description.template.manager | model_fp_sale_description_template | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 44 | access_fp_serial_user | fp.serial.user | model_fp_serial | base.group_user | 1 | 0 | 0 | 0 |
| 45 | access_fp_serial_estimator | fp.serial.estimator | model_fp_serial | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 0 |
| 46 | access_fp_serial_manager | fp.serial.manager | model_fp_serial | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 47 | access_fp_serial_bulk_add_estimator | fp.serial.bulk.add.estimator | model_fp_serial_bulk_add_wizard | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 1 |
| 48 | access_fp_serial_bulk_add_manager | fp.serial.bulk.add.manager | model_fp_serial_bulk_add_wizard | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 49 | access_fp_coating_thickness_user | fp.coating.thickness.user | model_fp_coating_thickness | base.group_user | 1 | 0 | 0 | 0 |
| 50 | access_fp_coating_thickness_estimator | fp.coating.thickness.estimator | model_fp_coating_thickness | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 0 |
| 51 | access_fp_coating_thickness_manager | fp.coating.thickness.manager | model_fp_coating_thickness | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 52 | access_fp_part_material_user | fp.part.material.user | model_fp_part_material | base.group_user | 1 | 0 | 0 | 0 |
| 53 | access_fp_part_material_estimator | fp.part.material.estimator | model_fp_part_material | fusion_plating_configurator.group_fp_estimator | 1 | 1 | 1 | 0 |
| 54 | access_fp_part_material_manager | fp.part.material.manager | model_fp_part_material | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |