factorysemantics-mes 0.4.1__tar.gz → 0.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/CHANGELOG.md +30 -1
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/CITATION.cff +2 -2
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/PKG-INFO +2 -2
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/README.md +1 -1
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/compatibility.md +9 -9
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/upgrade.md +42 -2
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/releases/0.4.1.md +1 -5
- factorysemantics_mes-0.4.2/docs/releases/0.4.2.md +59 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/releases/index.md +1 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/mkdocs.yml +1 -0
- factorysemantics_mes-0.4.2/scripts/record-scene.py +1544 -0
- factorysemantics_mes-0.4.2/scripts/scenes/01-trace-the-lot.toml +168 -0
- factorysemantics_mes-0.4.2/scripts/scenes/02-spc-on-the-line.toml +217 -0
- factorysemantics_mes-0.4.2/scripts/scenes/04-work-orders-and-routings.toml +145 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/__init__.py +1 -1
- factorysemantics_mes-0.4.2/src/fsmes/migrations/versions/2c6e817b9faf_status_columns_are_plain_text_on_postgresql.py +99 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/d7b4e92a1c58_the_maintenance_crew_and_its_rules.py +5 -4
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/adjustments.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/admin.js +3 -8
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/ai.js +20 -3
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/analysis.js +2 -9
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/app.js +2 -4
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/coa.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/common.js +31 -2
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/config.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/gauges.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/instructions.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/line/app.js +3 -8
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/line-page.js +5 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/machine.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/machines.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/maintenance.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/masterdata.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/ops.js +3 -8
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/orders.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/quality.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/reasons.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/schedule.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/severities.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/spc.js +3 -8
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/station.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/tags.js +2 -7
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/trace.js +5 -10
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/triggers.js +2 -7
- factorysemantics_mes-0.4.2/tests/test_a_postgresql_plant_upgraded_in_place_accepts_every_word_the_code_writes.py +173 -0
- factorysemantics_mes-0.4.2/tests/test_a_recorded_scene_keeps_its_badge_and_its_budget.py +242 -0
- factorysemantics_mes-0.4.2/tests/test_a_scene_says_exactly_what_its_script_file_says.py +289 -0
- factorysemantics_mes-0.4.2/tests/test_a_scene_scrolls_the_row_its_caption_names_into_view.py +100 -0
- factorysemantics_mes-0.4.2/tests/test_a_take_may_only_write_to_a_plant_on_this_box.py +127 -0
- factorysemantics_mes-0.4.2/tests/test_every_click_in_a_scene_says_where_on_the_frame_it_landed.py +273 -0
- factorysemantics_mes-0.4.2/tests/test_every_screen_header_dot_says_live.py +257 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_one_reader_at_a_time_is_a_lease_in_the_database.py +7 -3
- factorysemantics_mes-0.4.2/tests/test_the_trace_scene_rolls_on_finished_orders_and_writes_nothing.py +241 -0
- factorysemantics_mes-0.4.2/tests/test_the_work_orders_clip_leaves_finishing_the_step_to_a_person.py +305 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/uv.lock +77 -77
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.dockerignore +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.env.example +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/CODEOWNERS +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/ISSUE_TEMPLATE/integration.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/ISSUE_TEMPLATE/plant-pack.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/dependabot.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/scripts/assistant_folder_from_the_wheel.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/scripts/demo_from_wheel.sh +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/scripts/doctor_writes_nothing_of_yours.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/scripts/lab_starters.sh +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/scripts/plant_from_shape.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/scripts/plant_from_wheel.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/scripts/recover_a_half_dead_plant.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/scripts/release_notes.sh +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/scripts/two_nodes_on_one_box.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/scripts/upgrade_from_previous_release.sh +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/workflows/ci.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/workflows/dco.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/workflows/docs.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/workflows/erpnext-live.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/workflows/release.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/workflows/scorecard.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.github/workflows/welcome.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/.gitignore +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/CODE_OF_CONDUCT.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/CONTRIBUTING.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/GOVERNANCE.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/LICENSE +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/MAINTAINERS.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/NOTICE +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/ROADMAP.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/SECURITY.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/alembic.ini +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/config/inbound_mapping.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/config/inbound_sql.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/config/line_layout.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/config/tag_map.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/config/tag_map_kepsim.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/config/tag_map_kepware.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/deploy/README.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/deploy/fsmes-autoloop.service +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/deploy/fsmes-autoloop.timer +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/deploy/fsmes-prod-plant@.service +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/deploy/promote.sh +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docker/Dockerfile +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docker/docker-compose.record.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docker/docker-compose.redundant.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docker/docker-compose.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docker/nginx.conf +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docker/nginx.redundant.conf +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docker/redundant/fleet.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docker/redundant/plant.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ARCHITECTURE.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/LANDSCAPE.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/agents/connect-mcp-client.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/agents/evals.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/agents/index.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/agents/write-discipline.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/ASSIST-EVAL.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/BUDGET.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/JEV-CALIBRATION.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/JEV.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/JUDGMENT-IN-THE-BUILD-LOOP.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/OBSERVABILITY.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/assist-eval/2026-09-27-live-admin.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/assist-eval/2026-09-27-live-operator.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/assist-eval/2026-09-27-scripted.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/calibration/2026-09-17/full/calibration.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/calibration/2026-09-17/full/d1-against-truth.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/calibration/2026-09-17/full/d1-component-stopped-reporting.svg +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/calibration/2026-09-17/full/d1-counter-went-backwards.svg +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/calibration/2026-09-17/full/p1-by-confidence.svg +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/calibration/2026-09-17/full/p1-by-probability.svg +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/calibration/2026-09-17/stopped-not-why/calibration.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/calibration/2026-09-17/stopped-not-why/d1-against-truth.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/calibration/2026-09-17/stopped-not-why/d1-component-stopped-reporting.svg +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/calibration/2026-09-17/stopped-not-why/d1-counter-went-backwards.svg +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/calibration/2026-09-17/stopped-not-why/p1-by-confidence.svg +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/ai/calibration/2026-09-17/stopped-not-why/p1-by-probability.svg +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/assets/kill-a-node.gif +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/assets/kill-a-node.mp4 +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/assets/walk.gif +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0001-apache-2-with-dco.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0002-kernel-and-modules.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0003-one-mcp-server.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0004-never-invent-production.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0005-plain-html-no-build-step.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0006-sqlite-laptop-postgresql-plant.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0007-fresh-public-history.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0008-erp-connectors-are-modules.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0009-organisation-not-personal-account.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0010-github-discussions-only.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0011-mkdocs-material-generated-reference.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0012-contributor-covenant-3.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0013-governance-is-one-page.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0014-first-public-version-is-0-1-0.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0015-mcp-registry-name.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0016-no-trademark-registration.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0017-one-public-demo-gated-and-bounded.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0018-public-on-2026-09-08-and-the-pre-tag-check.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0019-count-everything-the-machine-counted.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0020-what-supported-means-for-an-erp-connector.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0021-one-database-per-plant.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0022-what-a-plant-pack-may-contain.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0023-the-fleet-console-observes.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0024-a-nonconformance-has-a-life.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0025-performance-is-measured-not-capped.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0026-counts-that-outrun-the-run-time.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0027-an-spc-signal-raises-a-hold.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0028-which-shift-a-minute-belongs-to.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0029-an-order-does-not-finish-itself.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0030-a-lost-connection-is-unknown-time.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0031-a-judgment-is-a-proposal.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0032-a-hosted-judgment-and-the-shadow.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0033-availability-is-a-share-of-what-was-watched.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0034-a-count-is-owed-until-it-is-booked.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0035-configuration-is-authored-by-roles-and-selected-by-operators.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0036-the-chart-draws-every-rule-the-plant-chooses-which-hold.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0038-an-agent-is-an-account-with-a-role-a-budget-and-a-cadence.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0039-an-analysis-is-recorded-code-that-can-only-read.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0040-the-chart-type-follows-the-sampling-plan.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0041-a-characteristic-the-plant-counts.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/0042-one-plant-many-nodes.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/TEMPLATE.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/decisions/index.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/STYLE.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/agentic-harness.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/README.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/admin-edit-roles.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/analysis-cards-scaling.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/assistant-submits-an-inspection.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/book-output-explicit-order.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/clickable-kpi-tiles.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/clickable-machine-breadcrumbs.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/floor-machines-paginate-and-filter.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/measurements-card-filtering.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/measurements-characteristic-filter.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/nonconformance-lifecycle.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/opc-integration-suite.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/order-card-search-finds-a-material.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/order-lifecycle-actions.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/orders-creatable-materials.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/orders-supervisor-filters.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/persistent-header-menu.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/review-orders.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/review-station.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/scrap-reason-codes.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/shop-floor-actions-strip.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/sixty-machine-plant.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/spc-capability-withheld.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/specifications-card-filtering.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/specifications-server-paged.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/station-quality-card.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/station-spc.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/station-view.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/supervisor-drill-down.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/backlog/ui-style-drift-bc58fb4f8e4d.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/config-assistance.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/config-audit-2026-09-21.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/deep-analysis.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/m8-packs-and-fleet.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/design/pack-in-pack.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/develop/erp-connectors.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/develop/experiments.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/develop/index.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/develop/your-first-module.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/history/private-era.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/hooks/generate.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/index.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/onboarding/GUIDE-ENGINEERING.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/onboarding/GUIDE-IT.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/onboarding/README.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/onboarding/worksheet-example.csv +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/onboarding/worksheet-template.csv +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/administration-numbers.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/ai.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/assistant-coverage.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/backup.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-examples/completion-with-a-lot.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-examples/completion-with-a-lot.xml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-examples/completion-with-an-over-run.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-examples/completion-with-an-over-run.xml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-examples/completion-without-a-lot.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-examples/completion-without-a-lot.xml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-examples/operation-clean.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-examples/operation-clean.xml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-examples/operation-over-run.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-examples/operation-over-run.xml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-examples/operation-with-scrap-and-components.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-examples/operation-with-scrap-and-components.xml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/confirmation-files.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/coverage.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/deploy.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/doctor.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/engineering-numbers.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/erp-settings.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/erpnext.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/first-plant.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/first-week.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/fleet.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/images/review-walk-station.png +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/images/review-walkthrough.png +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/images/shape-equipment.png +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/images/shape-timeline.png +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/inbound.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/index.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/modules.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/opc-disconnections.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/opc-readonly.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/packs.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/plant-from-your-mes.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/quality-numbers.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/quality-severities.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/redundancy.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/registry.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/releasing.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/run-it-on-your-own-box.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/security.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/shadow-mode.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/shadow-scorecard.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/the-simulated-floor.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/tls.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/uns.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/operate/who-names-the-reasons.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/plant/first-line.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/plant/images/spc-xbar-and-r.png +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/plant/index.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/plant/never-invent-production.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/plant/quality-signals.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/plant/reading-a-trend.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/plant/reading-oee.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/plant/shifts.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/releases/0.2.0.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/releases/0.3.0.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/releases/0.3.1.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/docs/releases/0.4.0.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/README.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/analysis/build_notebook.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/analysis/build_report.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/analysis/cutlery_run_analysis.ipynb +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/analysis/viz.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/build_config.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/fill_day.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/fleet.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/init.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/line.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/make_tag_map.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/masterdata/downtime_reasons.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/masterdata/nc_severities.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/plant.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/run_cutlery.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/tag_map.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/walkthroughs/install_walkthroughs.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/cutlery/walkthroughs/walkthroughs.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/erpnext/VERSIONS.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/erpnext/docker-compose.yml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/erpnext/seed_erpnext.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/experiments/lost-connection.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/experiments/one-line-bad-hour.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/experiments/over-run.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/experiments/scrap-burst.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/experiments/starved-and-blocked.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/experiments/two-plants-two-zones.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/kepsim/.env.example +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/kepsim/README.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/kepsim/kepware_setup.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/kepsim/line.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/kepsim/scenario.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/kepsim/setup_dsn.ps1 +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/kepsim/verify_readback.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/build_config.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/fleet.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/full/build_config.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/full/init.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/full/line.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/full/plant.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/full/run_full.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/full/seed_breadth.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/full/surfaces.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/full/tag_map.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/init.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/line.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/make_tag_map.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/run_spike.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/seed_breadth.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/megafactory/tag_map.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/README.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/floor.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/line.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/README.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/bom.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/dispatch_rules.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/downtime_reasons.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/equipment.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/gauges.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/lots.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/maintenance_plans.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/materials.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/nc_severities.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/personnel.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/personnel_skills.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/quality_specs.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/roster.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/routings.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/shifts.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/skills.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/masterdata/work_orders.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/plant.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/bottling/tag_map.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/README.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/floor.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/mappings/inbound_mapping.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/masterdata/downtime_reasons.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/masterdata/equipment.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/masterdata/lots.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/masterdata/materials.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/masterdata/nc_severities.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/masterdata/quality_specs.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/masterdata/routings.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/masterdata/work_orders.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/plant.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/finewire/tag_map.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/fleet.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/floor.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/line.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/masterdata/README.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/masterdata/downtime_reasons.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/masterdata/equipment.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/masterdata/lots.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/masterdata/materials.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/masterdata/nc_severities.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/masterdata/quality_specs.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/masterdata/routings.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/masterdata/work_orders.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/plant.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/labs/multiplant/machining/tag_map.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/pyproject.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/scripts/kill-a-node.sh +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/scripts/record-kill-a-node.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/scripts/record-kill-a-node.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/scripts/record-kill-a-node.sh +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/assistant/0-how-to-help.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/assistant/1-install.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/assistant/2-your-plant.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/assistant/3-shadow-mode.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/assistant/4-migration.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/assistant/README.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/assistant/SKILL.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/FORMAT.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/SKILL.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/example/plant-shape-grouped.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/example/plant-shape.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/01_inventory.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/01b_row_count.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/02_columns.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/03_window.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/04_column_profile.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/04b_column_sample.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/05_assets.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/05b_tag_samples.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/05c_tag_samples_nostate.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/05d_routings.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/06_states.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/06b_production.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/06c_quality.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/06d_orders.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/06e_shifts.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/06f_documents.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/mssql/07_erp.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/01_inventory.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/01b_row_count.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/02_columns.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/03_window.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/04_column_profile.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/04b_column_sample.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/05_assets.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/05b_tag_samples.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/05c_tag_samples_nostate.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/05d_routings.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/06_states.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/06b_production.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/06c_quality.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/06d_orders.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/06e_shifts.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/06f_documents.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/queries/sqlite/07_erp.sql +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/scripts/explain.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/scripts/leakcheck.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/skills/plant-from-your-mes/scripts/profile.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/__main__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/app.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/deps.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/idempotency.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/paging.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/adjustments.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/admin.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/analysis.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/assist.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/auth.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/coa.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/dashboard.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/design.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/documents.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/equipment.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/erp.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/execution.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/kpis.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/line.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/maintenance.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/masterdata.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/ops.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/quality.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/reasons.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/scheduling.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/serialization.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/severities.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/system.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/triggers.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/api/routers/workorders.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/assist_coverage.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/backup.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/cli.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/config.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/core/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/core/oplock.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/db.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/demo_feed.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/doctor/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/doctor/gather.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/doctor/leak.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/doctor/render.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/doctor/scrub.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/adjustments.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/ai_turns.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/audit.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/calendar.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/common.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/crew.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/documents.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/equipment.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/execution.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/gauges.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/idempotency.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/inbound.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/integration.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/leases.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/maintenance.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/masterdata.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/plant_settings.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/quality.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/reasons.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/scheduling.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/serialization.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/severities.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/timeseries.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/triggers.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/uns.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/domain/workorders.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/firstrun.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/fleet/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/fleet/commands.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/fleet/console.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/fleet/logsink.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/fleet/observe.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/fleet/owned.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/identity.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/b2mml.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/base.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/conformance.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/contract.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/erpnext_adapter.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/erpnext_setup.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/examples.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/file_adapter.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/incumbent.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/mock_erp.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/rest_adapter.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/schema.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/scorecard.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/scorecard_html.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/sync.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/erp/validate.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/events.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/inbound/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/inbound/contract.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/inbound/folder.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/inbound/mqtt.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/inbound/sql.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/jev/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/jev/client.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/jev/transport.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/opc/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/opc/agent.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/opc/csv_replay.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/opc/inspect.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/opc/security.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/opc/simulator.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/opc/tag_map.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/opc/worksheet.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/uns/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/uns/envelope.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/uns/publisher.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/uns/topics.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/integrations/uns/transport.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/kernel/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/kernel/common.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/kernel/tags.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/assist_eval.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/assist_fixtures.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/assist_seed.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/build.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/console.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/feedback.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/measure.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/observe.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/plan.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/report.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/review.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/run.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/lab/truth.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/logging.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/adjustments.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/analysis.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/coa.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/equipment.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/erp.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/maintenance.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/masterdata.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/quality.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/reasons.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/scheduling.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/serialization.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/settings.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/severities.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp/triggers.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/mcp_server.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migration.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/env.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/script.py.mako +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/153379d6cf19_merge_cutlery_and_walkthrough_chains.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/18af853fc5c4_initial_schema.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/7c1e5a9d2b4f_serial_sequences.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/9c4d2c836d05_add_user_passwords.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/a1b2c3d4e5f6_agent_identity.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/a1c47f8b2d93_what_a_maintenance_job_needs_of_the_line.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/a1c5e70b2d94_plant_settings.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/a1c5e83b7602_calendar_and_scheduling.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/a3f6c81d09e2_unassigned_production.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/a4d9c2e70f18_uns_publications.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/a7c1e93b5f20_roles_as_data.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/a7c2e5d1b9f0_document_kind_steps_needs_walkthroughs.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/a9c4e17b3d60_spc_signals_act.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/b1f4c73a9e08_nonconformance_lifecycle.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/b1f4c7a2e903_production_logs_equipment_ts_index.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/b2c3d4e5f6a7_outbox_hardening.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/b3f8d2a41c67_controlled_documents.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/b3f9c07e51ad_ai_turns.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/b5c1d09e73af_inbound_events_and_their_source.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/b6f0c2a71d58_a_lease_and_a_counter_baseline.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/b7d2e9f4a1c3_unit_inspections.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/b8f4d27e1a53_serialisation.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/b9f31c7a4e50_a_characteristic_inspected_n_at_a_time.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/c1e7a04b93d5_downtime_reasons.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/c2e9b74a3f81_gauges_and_calibration.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/c3d4e5f6a7b8_triggers.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/c3d7e91a4b28_equipment_connections.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/c4e8f1a2d5b6_serial_units_one_index.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/c6a4b81f39d7_shift_attribution.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/c7a2e94b16d3_five_facts_the_plant_was_dropping.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/c8b1e40d7a92_erp_messages_direction_index.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/c9e2a4b71d38_material_at_a_station.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/d2b7e51c9a04_nc_severities.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/d4a1c7e5b902_equipment_cost_center.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/d4a7f10c8b52_component_may_enter_twice.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/d4e5f6a7b8c9_recommended_adjustments.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/d4e8a1c93b70_a_characteristic_the_plant_counts.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/d9a3f61c48e0_inbound_sql_watermarks.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/e3c8a17d5b46_gauge_warning_and_pieces.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/e5f6a7b8c9d0_tag_values_latest_index.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/e6b3c92d4f17_drop_the_old_bom_constraint.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/e7b3c9d18a45_workorder_work_center.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/f0a1b2c3d4e5_equipment_states_ended_index.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/f2a8d31c6b74_routing_durations.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/migrations/versions/f7d1a58e2c94_preventive_maintenance.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/modules.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/pack/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/pack/apply.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/pack/check.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/pack/fleet.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/pack/format.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/pack/masterdata.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/pack/migrate.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/pack/plan.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/pack/repoint.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/plant.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/py.typed +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/schema.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/seed.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/seed_kepsim.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/seed_line.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/adjustments.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/agent.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/ai_status.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/ai_trace.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/analysis.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/assist_eval.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/assistant.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/audit.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/auth.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/calendar.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/capabilities.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/coa.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/connection.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/counters.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/coverage.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/design.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/design_triage.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/dispatch.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/documents.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/drafting.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/equipment.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/erp.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/execution.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/gauges.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/inbound.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/leases.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/line.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/line_clock.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/maintenance.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/masterdata.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/moment.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/oee.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/outbox.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/plant_settings.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/quality.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/reasons.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/retention.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/review.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/scheduling.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/serialization.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/severities.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/spc.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/spc_point.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/staging.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/state_block.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/tags.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/trace_analysis.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/trend.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/triggers.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/uns.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/vocabulary.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/walkthroughs.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/services/workorders.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/shadow.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/shape/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/shape/model.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/shape/pack.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/shape/read.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/__init__.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/agent_eval.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/autoloop.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/calibration.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/config_audit.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/config_audit_curated.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/generate.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/labelled.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/mcp_server.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/measurement.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/operations.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/rollup.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/runner.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/score.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/store.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/sweep.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/triage.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/truth.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/sim/ui_check.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/skills.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/standalone.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/storage.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/adjustments.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/admin.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/admin.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/ai.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/ai.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/analysis.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/analysis.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/assist-record.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/assist.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/assist.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/coa.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/coa.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/config.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/demo/kepsim-hour.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/design.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/design.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/fleet.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/fleet.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/fleet.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/gauges.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/index.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/instructions.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/instructions.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/kit.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/line/feed.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/line/flow.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/line/parts.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/line/robot.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/line/scene.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/line.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/line.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/line3d.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/machine.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/machine.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/machines.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/maintenance.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/maintenance.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/masterdata.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/ops.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/ops.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/orders.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/orders.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/quality.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/quality.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/reasons.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/schedule.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/severities.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/spc.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/spc.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/station.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/station.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/styles.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/tags.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/themes.css +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/themes.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/trace.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/triggers.html +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/vendor/OrbitControls.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/vendor/README.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/vendor/three.core.min.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/src/fsmes/web/vendor/three.module.min.js +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/assist_suite/README.md +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/assist_suite/admin.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/assist_suite/agent.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/assist_suite/analyst.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/assist_suite/operator.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/assist_suite/supervisor.toml +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/conftest.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/fixtures/labelled-run/line/bench.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/fixtures/labelled-run/packs/bench/tag_map.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/fixtures/labelled-run/recorded/bench-scorecard.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/fixtures/labelled-run/replay/bench/Line.csv +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/fixtures/labelled-run/replay/bench/Pack.csv +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/fixtures/labelled-run/replay/bench/Press.csv +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/fixtures/labelled-run/replay/bench/Trim.csv +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/fixtures/labelled-run/replay/bench/Weld.csv +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/fixtures/labelled-run/replay/bench/schema.ini +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/fixtures/labelled-run/scores.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/fixtures/labelled-set.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/live_replies.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/page_anchors.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_block_on_the_state_timeline_carries_the_records_behind_it.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_characteristic_inspected_five_at_a_time.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_characteristic_the_plant_counts.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_chart_draws_only_what_the_api_measured.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_plant_books_while_its_dashboard_is_read.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_plant_can_run_as_two_nodes_on_one_box_and_the_fleet_knows_both.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_plant_from_the_package_writes_only_to_a_users_own_directory.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_plant_logs_at_a_rate_a_year_can_stand.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_plant_on_two_nodes_survives_one_of_them_dying.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_plant_records_what_each_of_its_processes_is.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_plant_shape_built_blind_from_an_unknown_sql_mes_is_the_bottling_line.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_plant_starts_and_stops_the_same_way_on_windows.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_point_on_the_control_chart_carries_the_records_behind_it.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_refusal_names_the_capability_and_who_holds_it.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_sample_on_the_control_chart_carries_the_five_bottles_behind_it.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_shift_of_stops_comes_out_in_the_plants_own_proportions.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_signature_they_hold_is_a_walk_and_not_a_refusal.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_a_walk_waits_for_a_control_the_page_is_still_drawing.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_adjustments.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_agent.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_agent_batching.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_agent_eval.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_ai_status.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_an_analysis_counts_people_before_it_names_one.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_an_exploration_draws_what_the_plant_measured.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_analysis.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_api.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_approval_review.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_assist_suite_scripted.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_assistant.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_auth.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_autoloop.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_backup.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_bottling_pack.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_capabilities.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_cli.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_clicking_a_block_on_the_state_timeline_opens_the_records_behind_it.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_clicking_a_lot_on_the_spc_chart_opens_which_defects.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_clicking_a_point_on_the_spc_chart_opens_the_records_behind_it.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_clicking_a_point_on_the_trend_graph_opens_the_records_behind_it.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_clicking_a_sample_on_the_spc_chart_opens_the_five_bottles.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_coa.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_config_audit.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_configuration_sections.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_core_oplock.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_core_purity.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_coverage_ledger.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_cutlery.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_demo_verdict.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_design.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_design_triage.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_doctor_writes_one_file_with_nothing_of_yours_in_it.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_documents.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_downtime_reasons.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_environments.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_equipment_oee.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_erp_confirmation_files.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_erp_conformance.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_erp_contract.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_erp_roundtrip.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_erpnext.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_erpnext_live.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_every_browser_test_is_in_the_browser_tier.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_every_command_the_assistant_folder_tells_you_to_run_exists.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_every_settings_list_fits_in_one_tool_result.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_every_show_me_lands_on_the_real_control.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_every_write_route_has_a_tool_or_a_reason.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_every_write_tool_names_the_capability_its_route_demands.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_everything_the_model_said_in_one_turn_reaches_the_reply.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_execution.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_file_erp.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_fleet_console.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_fleet_create_makes_a_usable_plant.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_fleet_ownership.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_fleet_plan.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_fsmes_runs_as_a_module_when_it_is_not_on_the_path.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_hierarchy.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_hold.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_inbound.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_inbound_folder.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_inbound_mqtt.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_inbound_sql.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_jev_agent_eval_scoring.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_jev_calibration.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_jev_fail_safe.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_jev_labelled_set.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_jev_run_log_triage.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_jev_sdk_surface.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_kepsim.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_kernel_common.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_kpi_budget.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_lab_connection.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_lab_console.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_lab_experiments.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_lab_feedback.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_lab_latency.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_lab_order_book.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_lab_orders.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_lab_scenarios.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_line_api.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_line_scoping.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_live_admin_settings.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_live_engineering_settings.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_live_plant_settings.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_maintenance.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_maintenance_work_goes_to_the_right_trade.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_mcp_product.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_megafactory.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_migrations_have_one_head.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_module_wall.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_nc_severities.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_no_command_loses_a_word_of_its_help_to_the_painter.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_no_tenant_literals.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_onboarding.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_opc_disconnection.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_outbox_events.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_overproduction.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_pack_format.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_pack_third.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_packaged_config.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_paging.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_performance_at_replay_speed.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_plant_identity.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_plant_migrate.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_plant_scale_lists.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_plant_scale_ui.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_plant_serve_only.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_promote_script.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_quality.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_quality_numbers.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_read_never_waits.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_rollup.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_route_coverage.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_routing_depth.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_run_ports.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_scale.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_scheduling_trace.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_schema_upgrade.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_serial_scale.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_shadow_mode.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_shadow_scorecard.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_shift_attribution.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_sim.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_spc_gauges.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_spc_moving_range.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_spc_signals.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_sqlite_write_locks.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_status_names_its_database.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_stop_waits_for_the_ports_it_was_listening_on.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_store.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_supply_chain_settings.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_sweep_replay.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_tag_fabric.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_tag_fabric_review.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_tags.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_tags_grouped_the_way_a_real_opc_server_groups_them.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_ai_screen_shows_a_conversation_and_gates_itself.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_ai_tab_explores_and_draws_what_it_read.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_ai_tab_says_what_the_assistant_costs_without_local_ai.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_analyses_answer_an_agent_the_way_they_answer_a_screen.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_analysis_agent_is_a_kind_of_its_own.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_analysis_agent_is_asked_for_the_next_questions.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_assistant_proposes_rather_than_asking.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_assistant_reads_before_it_says_no.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_bottling_shift_leaves_a_chain_a_person_can_walk_back.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_calendar_tool_names_every_kind_its_api_accepts.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_chart_comes_into_the_chat_and_stays_clickable.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_chat_can_open_the_dossier_behind_a_charted_point.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_control_chart_the_chat_reads_leaves_the_bottles_out.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_conversation_is_cached_and_not_only_the_catalogue.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_dashboard_says_which_node_answered_and_who_reads_the_machines.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_demo_path_says_what_is_wrong_and_what_to_type.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_dispatcher_at_three_hundred_people.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_docker_image_carries_the_packs.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_gauges_screen_shows_the_two_scales_and_when_each_was_calibrated.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_panel_can_ask_the_other_agent.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_panel_keeps_one_brain_through_a_failed_turn.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_plant_keeps_a_trace_of_what_its_ai_did.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_plant_stops_dropping_five_facts_it_already_had.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_release_body_github_will_accept.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_screens_that_show_a_characteristic_inspected_five_at_a_time.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_simulated_crew_does_the_work_it_was_given.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_simulated_floor_plants_causes_an_engineer_can_find.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_simulated_floor_signs_in_again_when_its_login_runs_out.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_skills_zip_holds_exactly_what_it_says_and_nothing_else.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_spc_chart_wears_the_accepted_chart_look.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_sql_server_query_set_is_not_sqlite_in_disguise.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_station_redraws_only_what_changed.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_station_says_when_no_order_is_open_on_the_plant.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_suite_knows_its_database.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_supervisor_writes_a_rule_as_a_sentence.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_supervisors_screen_reads_the_shift_and_writes_a_rule.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_trend_graph_walks_link_three_of_the_chain.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_wheel_ships_the_assistant_folder.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_the_wheel_ships_the_lab_packs.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_themes.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_triage.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_triggers.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_two_plants_from_two_shapes_keep_each_plants_own_shape.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_two_tags_on_one_axis_and_the_records_behind_a_point.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_ui_check.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_ui_lists_filter_at_scale.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_ui_nav.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_ui_oee_above_rated.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_uns.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_walkthroughs.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_washer_story.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_web.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_what_a_maintenance_job_needs_of_the_line.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_wip.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/test_workorders.py +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/ui/baselines/control-room.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/ui/baselines/daylight.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/ui/baselines/high-contrast.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/ui/baselines/night-shift.json +0 -0
- {factorysemantics_mes-0.4.1 → factorysemantics_mes-0.4.2}/tests/unknown_mes.py +0 -0
|
@@ -10,6 +10,34 @@ goes under Honesty with a migration line, so plant people can find it.
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [0.4.2] — 2026-10-26
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **The Maintenance screen loads again on a PostgreSQL plant.** Early
|
|
18
|
+
migrations had made nine status and kind columns native PostgreSQL enums;
|
|
19
|
+
when `assigned` became a maintenance status (0.3.0), no migration added it,
|
|
20
|
+
so every PostgreSQL plant whose schema came from `fsmes init-db` - new or
|
|
21
|
+
upgraded - refused the word, and
|
|
22
|
+
`/maintenance/due`, `/shift` and `/roster` answered 500 - the screen said
|
|
23
|
+
"reconnecting..." for good and the dispatcher could not assign work. A new
|
|
24
|
+
migration turns those columns into plain text, as the code always declared
|
|
25
|
+
them; run `fsmes init-db` (or `fsmes plant migrate`) after upgrading. No
|
|
26
|
+
data changes. SQLite plants were never affected. A
|
|
27
|
+
test now runs the shipped migrations on PostgreSQL and fails if the database
|
|
28
|
+
would refuse any value the code can write.
|
|
29
|
+
- **The AI tab's header dot says "live" now, not "connecting…" forever.**
|
|
30
|
+
The page never told the dot anything, so it kept the words it was born
|
|
31
|
+
with. Every screen now sets the dot through one shared `FS.live`; the AI
|
|
32
|
+
tab sets it when a tab's list comes back, and "reconnecting…" when one
|
|
33
|
+
fails. Six other screens (Orders, Station, Quality, Ops, Admin,
|
|
34
|
+
Instructions) and Analysis said "live" with a grey dot; it is green now
|
|
35
|
+
like the rest.
|
|
36
|
+
- **The orders page opens with the New-order form closed.** The permission
|
|
37
|
+
check that hides what a person may not use also *showed* everything they
|
|
38
|
+
may use, the closed form included. It now only takes away what it hid
|
|
39
|
+
itself.
|
|
40
|
+
|
|
13
41
|
## [0.4.1] — 2026-10-23
|
|
14
42
|
|
|
15
43
|
### Added
|
|
@@ -5110,7 +5138,8 @@ number in it comes from a simulated plant.
|
|
|
5110
5138
|
MES was not watching. Unlabelled downtime is reported as unlabelled. These
|
|
5111
5139
|
are the house rules and they are tested.
|
|
5112
5140
|
|
|
5113
|
-
[Unreleased]: https://github.com/factorysemantics/factorysemantics-mes/compare/v0.4.
|
|
5141
|
+
[Unreleased]: https://github.com/factorysemantics/factorysemantics-mes/compare/v0.4.2...HEAD
|
|
5142
|
+
[0.4.2]: https://github.com/factorysemantics/factorysemantics-mes/releases/tag/v0.4.2
|
|
5114
5143
|
[0.4.1]: https://github.com/factorysemantics/factorysemantics-mes/releases/tag/v0.4.1
|
|
5115
5144
|
[0.4.0]: https://github.com/factorysemantics/factorysemantics-mes/releases/tag/v0.4.0
|
|
5116
5145
|
[0.3.1]: https://github.com/factorysemantics/factorysemantics-mes/releases/tag/v0.3.1
|
|
@@ -8,6 +8,6 @@ authors:
|
|
|
8
8
|
repository-code: https://github.com/factorysemantics/factorysemantics-mes
|
|
9
9
|
url: https://factorysemantics.com
|
|
10
10
|
license: Apache-2.0
|
|
11
|
-
version: 0.4.
|
|
12
|
-
date-released: "2026-10-
|
|
11
|
+
version: 0.4.2
|
|
12
|
+
date-released: "2026-10-26"
|
|
13
13
|
abstract: An open-source, modular, agent-native Manufacturing Execution System with OPC UA connectivity, honest OEE, quality with SPC and gauges, scheduling, traceability, an ERPNext connector and an MCP agent surface.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: factorysemantics-mes
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: An open-source, modular, agent-native Manufacturing Execution System
|
|
5
5
|
Project-URL: Homepage, https://factorysemantics.com
|
|
6
6
|
Project-URL: Documentation, https://docs.factorysemantics.com
|
|
@@ -267,7 +267,7 @@ Run one module on a laptop for a five-person shop, or the full suite across a fl
|
|
|
267
267
|
|
|
268
268
|

|
|
269
269
|
|
|
270
|
-
> **Status: pre-alpha, 0.4.
|
|
270
|
+
> **Status: pre-alpha, 0.4.2, running simulated plants only (as of 2026-10-26).** Orders and routings, OPC UA execution, OEE, quality with SPC and gauges, maintenance, finite-capacity scheduling, serialisation and genealogy, a 95-tool MCP agent surface, an ERPNext connector, and a scoring harness that measures whether the MES told the truth about its plant. **New since 0.2.0:** the plant packs travel inside the package, so `pipx install factorysemantics-mes` and then `fsmes demo bottling` bring up a bottling plant on a machine with no checkout, on Linux and on Windows; an SPC tab with I-MR, X̄/R and p charts where a point can be pressed for the reading, the rules it broke, the gauge, the machine's state and the rest of the line; count data — how many units a lot sent back and what for; maintenance work that reaches the right trade by itself, and a supervisor's screen that reads like a plant; a chat on the AI tab that explains the chart in front of it (it needs `ANTHROPIC_API_KEY` and costs about $0.12 a question; the floor assistant needs a local [Ollama](https://ollama.com)); every floor row carrying the shift it happened on; and a simulated line that plays a whole eight-hour shift with a four-link chain of cause in it — a chiller order nobody started, its outlet climbing, the product reaching the filler colder, fill heights a millimetre and a half low — with no limit broken anywhere, which is the test. [The release page](docs/releases/0.3.0.md) is the whole of it. **New in 0.3.1:** the first run on a Windows PC recovers itself — `py -m fsmes` when the installer's folder is not on PATH, a half-dead plant named process by process by `status`, and `stop` clearing it with no flag; a simulated plant shaped like your own, three commands from a pip install; one folder of plain pages that lets whatever AI assistant you already use walk you through install and shadow mode, with no access to your machine; and `fsmes doctor`, one file to paste when something is wrong, with every value in it replaced by its shape. [The 0.3.1 release page](docs/releases/0.3.1.md) is the whole of that. **New in 0.4.0:** a plant can run as two copies on two boxes against one PostgreSQL and keep counting when one of them dies — the jobs that must run once (reading the machines, the simulated floor, pruning the history) are held one at a time by a lease in the database, the counts carry on rather than starting over, nobody signs in again, and `bash scripts/kill-a-node.sh` brings the whole thing up in Docker and pulls the plug on a node so you can watch it. [The 0.4.0 release page](docs/releases/0.4.0.md) is the whole of that. **New in 0.4.1:** an evening on a Windows PC that goes cleanly — `stop` waits until the plant's own ports are free so a start in the next breath works, `stop --force` is answered in a sentence instead of refused, and three pages say how to tell which Python owns the `fsmes` you type; nothing in the plant changed. [The 0.4.1 release page](docs/releases/0.4.1.md) is the whole of that. **New in 0.4.2:** the Maintenance screen loads again on a plant that runs on PostgreSQL — since 0.3.0 the database refused one word the screen needs — after the upgrade and one `fsmes init-db`; SQLite plants never had the fault. [The 0.4.2 release page](docs/releases/0.4.2.md) is the whole of that. **Not yet:** a real plant — none has run this, and making a first one possible in shadow mode, beside the MES already in charge, is what shadow mode is for; [the guide](docs/operate/first-plant.md) is written and untried. Also not yet: ERPNext Job Card confirmations — whether Job Card is the right place at all is a question put to the ERPNext community on 2026-09-10 and not yet answered; the thin Frappe app that would list the connector on the Marketplace ([decision 0008](docs/decisions/0008-erp-connectors-are-modules.md)); and PLC write-back beyond a guarded recommendation queue. See [ROADMAP.md](ROADMAP.md) for what has landed and what is next, [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the design, [docs/LANDSCAPE.md](docs/LANDSCAPE.md) for why this project should exist at all, [docs/operate/compatibility.md](docs/operate/compatibility.md) for what has been tested against what and when, and [docs.factorysemantics.com](https://docs.factorysemantics.com) for the documentation.
|
|
271
271
|
>
|
|
272
272
|
> **Nothing on this page is measured on a real plant.** Every number in this repository comes from a simulated line and says so where it appears.
|
|
273
273
|
|
|
@@ -8,7 +8,7 @@ Run one module on a laptop for a five-person shop, or the full suite across a fl
|
|
|
8
8
|
|
|
9
9
|

|
|
10
10
|
|
|
11
|
-
> **Status: pre-alpha, 0.4.
|
|
11
|
+
> **Status: pre-alpha, 0.4.2, running simulated plants only (as of 2026-10-26).** Orders and routings, OPC UA execution, OEE, quality with SPC and gauges, maintenance, finite-capacity scheduling, serialisation and genealogy, a 95-tool MCP agent surface, an ERPNext connector, and a scoring harness that measures whether the MES told the truth about its plant. **New since 0.2.0:** the plant packs travel inside the package, so `pipx install factorysemantics-mes` and then `fsmes demo bottling` bring up a bottling plant on a machine with no checkout, on Linux and on Windows; an SPC tab with I-MR, X̄/R and p charts where a point can be pressed for the reading, the rules it broke, the gauge, the machine's state and the rest of the line; count data — how many units a lot sent back and what for; maintenance work that reaches the right trade by itself, and a supervisor's screen that reads like a plant; a chat on the AI tab that explains the chart in front of it (it needs `ANTHROPIC_API_KEY` and costs about $0.12 a question; the floor assistant needs a local [Ollama](https://ollama.com)); every floor row carrying the shift it happened on; and a simulated line that plays a whole eight-hour shift with a four-link chain of cause in it — a chiller order nobody started, its outlet climbing, the product reaching the filler colder, fill heights a millimetre and a half low — with no limit broken anywhere, which is the test. [The release page](docs/releases/0.3.0.md) is the whole of it. **New in 0.3.1:** the first run on a Windows PC recovers itself — `py -m fsmes` when the installer's folder is not on PATH, a half-dead plant named process by process by `status`, and `stop` clearing it with no flag; a simulated plant shaped like your own, three commands from a pip install; one folder of plain pages that lets whatever AI assistant you already use walk you through install and shadow mode, with no access to your machine; and `fsmes doctor`, one file to paste when something is wrong, with every value in it replaced by its shape. [The 0.3.1 release page](docs/releases/0.3.1.md) is the whole of that. **New in 0.4.0:** a plant can run as two copies on two boxes against one PostgreSQL and keep counting when one of them dies — the jobs that must run once (reading the machines, the simulated floor, pruning the history) are held one at a time by a lease in the database, the counts carry on rather than starting over, nobody signs in again, and `bash scripts/kill-a-node.sh` brings the whole thing up in Docker and pulls the plug on a node so you can watch it. [The 0.4.0 release page](docs/releases/0.4.0.md) is the whole of that. **New in 0.4.1:** an evening on a Windows PC that goes cleanly — `stop` waits until the plant's own ports are free so a start in the next breath works, `stop --force` is answered in a sentence instead of refused, and three pages say how to tell which Python owns the `fsmes` you type; nothing in the plant changed. [The 0.4.1 release page](docs/releases/0.4.1.md) is the whole of that. **New in 0.4.2:** the Maintenance screen loads again on a plant that runs on PostgreSQL — since 0.3.0 the database refused one word the screen needs — after the upgrade and one `fsmes init-db`; SQLite plants never had the fault. [The 0.4.2 release page](docs/releases/0.4.2.md) is the whole of that. **Not yet:** a real plant — none has run this, and making a first one possible in shadow mode, beside the MES already in charge, is what shadow mode is for; [the guide](docs/operate/first-plant.md) is written and untried. Also not yet: ERPNext Job Card confirmations — whether Job Card is the right place at all is a question put to the ERPNext community on 2026-09-10 and not yet answered; the thin Frappe app that would list the connector on the Marketplace ([decision 0008](docs/decisions/0008-erp-connectors-are-modules.md)); and PLC write-back beyond a guarded recommendation queue. See [ROADMAP.md](ROADMAP.md) for what has landed and what is next, [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the design, [docs/LANDSCAPE.md](docs/LANDSCAPE.md) for why this project should exist at all, [docs/operate/compatibility.md](docs/operate/compatibility.md) for what has been tested against what and when, and [docs.factorysemantics.com](https://docs.factorysemantics.com) for the documentation.
|
|
12
12
|
>
|
|
13
13
|
> **Nothing on this page is measured on a real plant.** Every number in this repository comes from a simulated line and says so where it appears.
|
|
14
14
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Compatibility
|
|
2
2
|
|
|
3
|
-
*Explanation. What has actually been tested against what, as of 2026-10-
|
|
3
|
+
*Explanation. What has actually been tested against what, as of 2026-10-26 — the state of `main` that 0.4.2 is cut from. "Untested" is a fact, not a warning label.*
|
|
4
4
|
|
|
5
5
|
**Every row states the date it was last checked and what was run on that
|
|
6
6
|
date.** A row with no date is a row nobody can age.
|
|
@@ -8,18 +8,18 @@ date.** A row with no date is a row nobody can age.
|
|
|
8
8
|
| Neighbour | Status | Last checked | Evidence |
|
|
9
9
|
|---|---|---|---|
|
|
10
10
|
| **KEPServerEX** (OPC UA) | tested in the lab | **before 2026-09-08, exact date not recorded** | `labs/kepsim`: a trial server fed by ODBC from generated line data; `fsmes opc-verify` against it; certificate exchange and SignAndEncrypt. It was run in the private era and has not been run since the repository went public — nothing in CI touches it |
|
|
11
|
-
| **The bundled OPC UA replay server** | tested continuously | 2026-10-
|
|
11
|
+
| **The bundled OPC UA replay server** | tested continuously | 2026-10-26 | every scored run, and CI on every pull request |
|
|
12
12
|
| Other OPC UA servers (Ignition, Siemens, Prosys) | **untested** | never | nothing here has been on the other end of one. The client is `asyncua`; the tag map is the only server-specific part |
|
|
13
13
|
| **ERP connectors** | see the table below | see below | they have rules of their own, and each row carries its own date |
|
|
14
|
-
| **PostgreSQL 16.15** | tested continuously | 2026-10-
|
|
15
|
-
| **SQLite** | tested continuously | 2026-10-
|
|
16
|
-
| **Claude Code** as an MCP client | tested | scoring 2026-10-
|
|
14
|
+
| **PostgreSQL 16.15** | tested continuously | 2026-10-26 | the `postgres` cell in CI: `alembic upgrade head` from an empty database and then the whole suite, against a PostgreSQL 16.15 service container pinned by digest, on every pull request. The suite builds its own schema from the model, so until 2026-10-25 nothing checked that the schema the migrations build accepts every word the code writes — and from 0.3.0 to 0.4.1 it did not, which cost every PostgreSQL plant its Maintenance screen. Since [#200](https://github.com/factorysemantics/factorysemantics-mes/pull/200) two tests in that cell build the schema with the shipped migrations and write every such word into it. Also the Compose file and the cutlery plant's public demo |
|
|
15
|
+
| **SQLite** | tested continuously | 2026-10-26 | the default. The whole suite runs on in-memory SQLite on every pull request, on Ubuntu and Windows, Python 3.12 and 3.13; `wheel-demo` runs `fsmes demo` on a SQLite file from the built wheel, and `upgrade_from_previous_release.sh` upgrades a database made by whatever wheel PyPI serves that day, which is 0.4.1 until 0.4.2 is published; `wheel-plant` starts the bottling plant on a SQLite file from the built wheel on Ubuntu and on Windows. Version: whatever CPython ships |
|
|
16
|
+
| **Claude Code** as an MCP client | tested | scoring 2026-10-26; **the live-model run's date is not recorded** | the agent evals drive it headless. `tests/test_agent_eval.py` scores them on every pull request; the run that puts a real model against the live tool surface is `fsmes agent-eval`, a command a person types, and nothing records when it last ran |
|
|
17
17
|
| Claude Desktop, other MCP clients | **untested** | never | the server is streamable HTTP over the standard SDK |
|
|
18
18
|
| **Jev** (TypeSafe), as a judgment model | **untested**; nothing in this repository calls it | never called; the vendor's answers in this row are dated **2026-09-17** | No request has been made to it from this repository and no accuracy number has been produced here, so there is nothing measured to report. What is known is what TypeSafe answered in writing to the maintainer on 2026-09-17, and it is the vendor's statement rather than this project's measurement: **hosted API only** — no on-premises, VPC or edge option now or planned; **United States only** — no public EU region, and no subprocessor list was given; **a version can be pinned**, with no fixed forced-retirement window; **250,000 tokens per second and 1,200 requests per minute**, with no availability commitment beyond those limits; **zero data retention is available on the enterprise tier only**, and no retention period was given for any other tier. The consequence for a plant is on the survey's preconditions ([`docs/ai/JEV.md`](../ai/JEV.md)): every state class above `catalogue` in decision [0032](../decisions/0032-a-hosted-judgment-and-the-shadow.md) is gated on the enterprise tier or on that plant accepting retention it has no stated period for, and an air-gapped site cannot use it at any tier |
|
|
19
19
|
| **MQTT brokers** (Mosquitto, HiveMQ, EMQX) | **untested** | never | **no broker has been on the other end of either direction.** Both directions are built — `fsmes uns publish` and `fsmes inbound subscribe` — and both are driven by a fake transport in the suite. No broker has run against either; this repository does not start brokers on the machine it is developed on. The publisher has one opt-in test against a real broker (`MES_UNS_TEST_BROKER`) |
|
|
20
20
|
| Node-RED, United Manufacturing Hub, Grafana | **untested**; the MQTT halves exist | never | the namespace is published and subscribed to over plain MQTT-JSON under an ISA-95 tree; no UMH or Node-RED deployment has been on the other end of it |
|
|
21
|
-
| Windows (plant PCs) | tested continuously | 2026-10-
|
|
22
|
-
| Python | 3.12, 3.13 | 2026-10-
|
|
21
|
+
| Windows (plant PCs) | tested continuously | 2026-10-26 | CI runs `ruff` and the whole suite on `windows-latest`, Python 3.12 and 3.13, on every pull request — and, since [#163](https://github.com/factorysemantics/factorysemantics-mes/pull/163) on 2026-10-12, the `wheel-plant` job (`.github/scripts/plant_from_wheel.py`) installs the built wheel on `windows-latest` in a directory holding none of this repository's files, starts the bottling plant and asks it whether sign-in works, the specifications are there, the OPC port answers, the floor is watching and a lot has been counted. Since 2026-10-22 it also stops the plant and starts it again with nothing in between, which is how a fourth Windows-only fault was found: a listening socket there outlives the process that owned it by about two seconds — every Windows cell measured that and every Linux cell measured zero — so a start inside those two seconds refused on a port that nothing was holding. That job is why four Windows-only bugs are fixed — a detach flag ignored, a signal that does not exist on Windows, a console script looked for in `bin`, and a stop that came back before its ports did — none of which the green suite could see, because the suite never starts a plant. `tzdata` is a Windows-only dependency so `zoneinfo` can resolve a plant's zone. **No plant PC in a real plant has run it**: the only Windows this has started on is GitHub's runner, with no domain policy and no antivirus |
|
|
22
|
+
| Python | 3.12, 3.13 | 2026-10-26 | CI, both on Ubuntu and on Windows. 3.11 and earlier are not supported; 3.14 is untested |
|
|
23
23
|
|
|
24
24
|
When a row changes, it changes here first, with the date and what was run.
|
|
25
25
|
|
|
@@ -51,6 +51,6 @@ rather than read is a table that misleads.
|
|
|
51
51
|
|---|---|---|---|---|
|
|
52
52
|
| **ERPNext** | supported | v15.120.0 (Frappe v15, MariaDB 10.6) | 2026-09-10, and on every pull request that touches the connector, its tests or its fixture since | the `ERPNext (live)` job: a clean container from `labs/erpnext/docker-compose.yml`, images pinned by digest, seeded and put through the whole round trip in `tests/test_erpnext_live.py`, asserting against ERPNext's own documents. Includes what ERPNext does with an over-run, measured 2026-09-10: inside its own over-production allowance it books every unit, beyond it it refuses the stock entry whole and books nothing ([what the connector does about it](erpnext.md#when-the-line-made-more-than-the-order-asked-for)). Also passes the conformance suite |
|
|
53
53
|
| ERPNext v16 | experimental | **no live test** | — | nothing here claims anything about it; the live job pins v15 |
|
|
54
|
-
| **file exchange** (B2MML-lite) | supported | not applicable — the far side is a folder | 2026-10-
|
|
55
|
-
| **REST** (against the bundled mock ERP) | supported | not applicable — the far side ships with it | 2026-10-
|
|
54
|
+
| **file exchange** (B2MML-lite) | supported | not applicable — the far side is a folder | 2026-10-26 | `tests/test_file_erp.py`, `tests/test_erp_confirmation_files.py` and the conformance suite. The folder layout, the published schema and `fsmes erp validate` are on [the confirmation handoff](confirmation-files.md) |
|
|
55
|
+
| **REST** (against the bundled mock ERP) | supported | not applicable — the far side ships with it | 2026-10-26 | `tests/test_erp_contract.py` and the conformance suite. Against a *real* ERP's REST API it is **untested**, and the three endpoints it needs are in `fsmes erp requirements` |
|
|
56
56
|
| Odoo, SAP, Oracle, NetSuite | not written | — | — | the contract exists (`contract.py`), the conformance suite exists (`conformance.py`), the connectors do not. The confirmations are SAP-*shaped* and now [published with a schema and worked example files](confirmation-files.md), but no SAP has consumed one. [How to write one](../develop/erp-connectors.md) |
|
|
@@ -10,6 +10,45 @@ carries an **Honesty** section for anything that changed what a number
|
|
|
10
10
|
before upgrading a plant that anyone reads numbers off, because a number that
|
|
11
11
|
changes meaning without anyone noticing is worse than one that breaks.
|
|
12
12
|
|
|
13
|
+
## 0.4.1 to 0.4.2
|
|
14
|
+
|
|
15
|
+
**One migration, `2c6e817b9faf`** — 0.4.1's head was `b6f0c2a71d58`. It
|
|
16
|
+
matters only on PostgreSQL, and there it is the fix: early migrations made
|
|
17
|
+
nine status and kind columns native PostgreSQL enums, `maintenance_orders.status`
|
|
18
|
+
among them, and since 0.3.0 that column refused the word `assigned`, so the
|
|
19
|
+
Maintenance screen never loaded. The migration turns the nine columns into
|
|
20
|
+
plain text, as the code always declared them. No row changes; every stored
|
|
21
|
+
word is kept. On SQLite it does nothing at all.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pg_dump -Fc -d yourplantdb -f before-0.4.2.dump # first, always (on SQLite: fsmes backup)
|
|
25
|
+
pipx upgrade factorysemantics-mes # or py -m pip install --upgrade
|
|
26
|
+
fsmes --version # 0.4.2
|
|
27
|
+
fsmes db-status --pack packs/yourplant # behind: b6f0c2a71d58, head 2c6e817b9faf
|
|
28
|
+
fsmes init-db --pack packs/yourplant # b6f0c2a71d58 -> 2c6e817b9faf
|
|
29
|
+
fsmes db-status --pack packs/yourplant # should now agree; it exits non-zero if not
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
For a plant in a fleet, `--plant yourplant` instead of `--pack`.
|
|
33
|
+
|
|
34
|
+
**A running plant may stay up while `init-db` runs.** The tables it touches
|
|
35
|
+
are small (maintenance orders and plans, gauges, calibrations, documents,
|
|
36
|
+
calendar rows, serial units); each is rewritten under a brief lock that waits
|
|
37
|
+
for transactions in flight and holds writers back for a moment. The screen
|
|
38
|
+
loads on the next refresh, with no restart. `fsmes plant <name> migrate` is
|
|
39
|
+
the other way to do it, and it refuses a running plant: stop it first.
|
|
40
|
+
|
|
41
|
+
**Tried, and how far.** On 2026-10-25 on the maintainer's lab bottling
|
|
42
|
+
plant, a populated PostgreSQL plant with 0.4.0's schema: one `init-db`, no restart, and
|
|
43
|
+
the Maintenance screen filled. On 2026-10-26 a schema made by the 0.4.1 wheel
|
|
44
|
+
on an empty PostgreSQL 18.6, served by 0.4.2: `/maintenance/due` answered 500
|
|
45
|
+
before `init-db` and 200 after, from the same running API. Nobody has done it
|
|
46
|
+
on a plant outside this project.
|
|
47
|
+
|
|
48
|
+
Coming from 0.4.0 or earlier, read the sections below too — what they say
|
|
49
|
+
about numbers still applies — but one run of `init-db` applies every
|
|
50
|
+
migration between.
|
|
51
|
+
|
|
13
52
|
## 0.4.0 to 0.4.1
|
|
14
53
|
|
|
15
54
|
**No migrations.** Nothing in 0.4.1 changes the database schema —
|
|
@@ -359,8 +398,9 @@ with what it printed.
|
|
|
359
398
|
It also does not prove anything about a **PostgreSQL** plant's upgrade: the
|
|
360
399
|
gate's database is SQLite. The migrations themselves run against an empty
|
|
361
400
|
PostgreSQL 16.15 in the `postgres` cell on every pull request, which is a
|
|
362
|
-
different claim — the schema builds there
|
|
363
|
-
|
|
401
|
+
different claim — the schema builds there. The one populated PostgreSQL
|
|
402
|
+
upgrade on record is the maintainer's lab plant to 0.4.2, in
|
|
403
|
+
[0.4.1 to 0.4.2](#041-to-042).
|
|
364
404
|
|
|
365
405
|
## Before anything
|
|
366
406
|
|
|
@@ -2,11 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
*Reference. What this release does, what it does not, and what is simulated.*
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
> body is reviewed rather than typed on release night. The date below is
|
|
7
|
-
> filled in when the maintainer tags it.
|
|
8
|
-
|
|
9
|
-
**Released:** *on tagging.* **Previous:** 0.4.0, on PyPI 2026-10-17.
|
|
5
|
+
**Released:** 2026-10-23, on PyPI 2026-10-25. **Previous:** 0.4.0, on PyPI 2026-10-17.
|
|
10
6
|
|
|
11
7
|
---
|
|
12
8
|
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# 0.4.2
|
|
2
|
+
|
|
3
|
+
*Reference. What this release does, what it does not, and what is simulated.*
|
|
4
|
+
|
|
5
|
+
> **Not yet tagged.** This page is written before the tag so that the release
|
|
6
|
+
> body is reviewed rather than typed on release night. The date below is
|
|
7
|
+
> filled in when the maintainer tags it.
|
|
8
|
+
|
|
9
|
+
**Is your plant on PostgreSQL? Then upgrade, and run one command.** Every
|
|
10
|
+
PostgreSQL plant on 0.3.0, 0.3.1, 0.4.0 or 0.4.1 has a Maintenance screen that
|
|
11
|
+
never loads: it says "reconnecting…" for good, and no maintenance work is
|
|
12
|
+
handed out. After the upgrade:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
fsmes init-db --pack packs/yourplant # or, for a plant in a fleet: fsmes init-db --plant yourplant
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**On SQLite** (the default, and every `fsmes demo`) there is nothing to run
|
|
19
|
+
and nothing is lost: those plants never had the fault.
|
|
20
|
+
|
|
21
|
+
**Released:** *on tagging.* **Previous:** 0.4.1, on PyPI 2026-10-25.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## What 0.4.2 is
|
|
26
|
+
|
|
27
|
+
**The Maintenance screen works on PostgreSQL again.** Early migrations made
|
|
28
|
+
nine status columns a closed list of words PostgreSQL itself enforces. 0.3.0
|
|
29
|
+
added the word `assigned` to maintenance work, and no migration told the
|
|
30
|
+
database, so it refused the word: `/maintenance/due` answered 500, the screen
|
|
31
|
+
never filled, and the dispatcher could not assign anyone. One migration,
|
|
32
|
+
`2c6e817b9faf`, makes those columns plain text, as the code always declared
|
|
33
|
+
them, and keeps every stored word. A test now builds the schema the way a
|
|
34
|
+
plant does, on PostgreSQL, and fails on any word the database would refuse.
|
|
35
|
+
|
|
36
|
+
**Every header dot tells the truth.** The AI tab's said "connecting…"
|
|
37
|
+
forever; it says "live" now. Six screens' grey "live" dots are green.
|
|
38
|
+
|
|
39
|
+
**The Orders page opens with the New-order form closed**, not open on every visit.
|
|
40
|
+
|
|
41
|
+
## What 0.4.2 does not do, and what is simulated
|
|
42
|
+
|
|
43
|
+
Nothing in the plant is new, so [everything 0.4.0 does not do](../releases/0.4.0.md) stands
|
|
44
|
+
word for word — no PLC write path, no redundant SQLite, no database failover, no
|
|
45
|
+
chat across a takeover, the kill proven on Linux only, no real plant anywhere —
|
|
46
|
+
and a number still comes from the line simulator in `src/fsmes/sim/` over OPC UA.
|
|
47
|
+
|
|
48
|
+
## Upgrading from 0.4.1
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pipx upgrade factorysemantics-mes # or py -m pip install --upgrade
|
|
52
|
+
fsmes --version # 0.4.2
|
|
53
|
+
fsmes init-db --pack packs/yourplant # b6f0c2a71d58 -> 2c6e817b9faf
|
|
54
|
+
fsmes db-status --pack packs/yourplant # "at the current schema"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The plant may stay up while `init-db` runs: small tables, each locked for a
|
|
58
|
+
moment. The backup, the fleet form and what was tried are on
|
|
59
|
+
[upgrading between versions](../operate/upgrade.md#041-to-042).
|
|
@@ -10,6 +10,7 @@ anyone reads numbers off. These pages are the summary a person reads first.
|
|
|
10
10
|
|
|
11
11
|
| Version | Date | What it is |
|
|
12
12
|
|---|---|---|
|
|
13
|
+
| [0.4.2](0.4.2.md) | 2026-10-26 | the Maintenance screen loads on PostgreSQL again, after one `fsmes init-db` (SQLite plants never had the fault); every header dot says live when it is; the Orders page opens with the New-order form closed |
|
|
13
14
|
| [0.4.1](0.4.1.md) | 2026-10-23 | an evening on a Windows PC that goes cleanly: a stop that waits until its own ports are free so the next start works, `stop --force` answered in a sentence instead of refused, and three pages that say how to tell which Python owns the `fsmes` you type |
|
|
14
15
|
| [0.4.0](0.4.0.md) | 2026-10-16 | a plant on two boxes keeps counting when one of them dies: two nodes against one PostgreSQL with the jobs that must run once held by a lease, a `docker compose` demo with a kill test anyone can run, and screens that say which box holds what |
|
|
15
16
|
| [0.3.1](0.3.1.md) | 2026-10-15 | the first run on a Windows PC recovers itself; a simulated plant shaped like your own, three commands from a pip install; one folder of pages any AI assistant can walk you through; and `fsmes doctor`, one file to paste when something is wrong |
|