Build Seth's changes C1 to C11 (Gitea issues 1, 8, 18, 23, 24, 25, 27, 31, 32, 33, 36)
ci / frontend (pull_request) Successful in 57s
ci / server (pull_request) Successful in 12m33s
ci / image (pull_request) Skipped
ci / e2e (pull_request) Successful in 5m4s

- C1 (issue 1): over target follows VISUAL ticket hours, not the timer.
- C2 (issue 24): a Q.C. reject always needs a reason; accept needs an NCR number after a reject without one.
- C3 (issue 25): an incomplete unit ITP blocks filing.
- C4 (issue 27): prints open the print dialog on the page, no new tab.
- C5 (issue 31): filing is blocked while VISUAL shows a work order open; the feed sets vclosed on VISUAL packets.
- C6 (issue 8): the data book leaves out the history pages.
- C7 (issue 18): the supervisor approves each received short; accept and filing wait for it.
- C8 (issue 23): per-department checklists, edited by the department supervisor or Admin, frozen at START.
- C9 (issue 32): Q.C. and Clerical may run the stamp check.
- C10 (issue 33): the PM screen and reports are for PS-ProjectMgmt and Admin only.
- C11 (issue 36): the Stall screen lists the packets assigned to the welder, at the supervisor's stall.

Migration 0011. Docs: PLAN (also issue 9 confirmed, issue 4 asked), POLICY, SECURITY, SCHEMA, FEED, README, CHANGELOG.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-30 13:33:51 -06:00
co-authored by Claude Opus 5.5
parent 1ae6819289
commit 1cd6688247
101 changed files with 3871 additions and 1098 deletions
+6 -3
View File
@@ -71,6 +71,7 @@ class Action(StrEnum):
EDIT_WOS = "edit_wos"
EDIT_BOM = "edit_bom"
WH_RECEIVE_SHORT = "wh_receive_short"
SHORT_APPROVE = "short_approve"
EDIT_HEATS = "edit_heats"
EDIT_HEAT_TABLE = "edit_heat_table"
EDIT_WELDS = "edit_welds"
@@ -209,7 +210,7 @@ RULES: dict[Action, Rule] = {
_s("qc"),
"complete",
co_hold=True,
preconditions=("qc_missing_empty", "route_given"),
preconditions=("qc_missing_empty", "shorts_approved", "route_given", "ncr_given"),
signature="Q.C. accept",
),
A.QC_ACCEPT_AND_ROUTE: Rule(
@@ -218,7 +219,7 @@ RULES: dict[Action, Rule] = {
"ready",
dept_change="required",
co_hold=True,
preconditions=("qc_missing_empty", "target_dept_given"),
preconditions=("qc_missing_empty", "target_dept_given", "ncr_given"),
signature="Q.C. accept and route",
),
A.FILE: Rule(
@@ -226,7 +227,7 @@ RULES: dict[Action, Rule] = {
_s("complete"),
"filed",
co_hold=True,
preconditions=("vclosed_if_databook",),
preconditions=("closed_in_visual", "itp_complete", "shorts_approved"),
signature="File in the data book",
),
A.ADMIN_REOPEN: Rule(
@@ -246,6 +247,8 @@ RULES: dict[Action, Rule] = {
A.EDIT_WOS: Rule(Who.CL, _s("draft"), None),
A.EDIT_BOM: Rule(Who.HOLDER, _s("draft", "warehouse", SHOP), None),
A.WH_RECEIVE_SHORT: Rule(Who.WH, ANY, None, preconditions=("short_open",)),
# The department supervisor (a lead is not enough) approves each received short; the filed lock still applies.
A.SHORT_APPROVE: Rule(Who.DEPT_SUP, ANY, None, signature="Approve a received short"),
A.EDIT_HEATS: Rule(Who.HOLDER, _s("warehouse", SHOP), None),
A.EDIT_HEAT_TABLE: Rule(Who.HOLDER, _s("warehouse", SHOP), None),
A.EDIT_WELDS: Rule(Who.HOLDER, SHOP, None),