Skip to main content

Verification ledger — operator guides 00 to 04

Scope: docs-obsidian/user-guide/operator/00-README.md, 01-login-and-warehouse.md, 02-receiving-against-asn.md, 03-blind-receiving-and-returns.md, 04-damage-and-receipt-close.md. Method: static reading only (no server, no build).

Totals: 14 blocks. CONFIRMED 5, CORRECTED 8, UNRESOLVABLE 1. One corrected block (warehouse list) also left a new, narrower open block, so 2 blocks remain in the files.

Paths below are relative to crates/ unless they start with clients/.

fileoriginal claimoutcomeevidenceaction taken
00-READMEUnknown whether stage/load/ship/replenishment are planned for RFUNRESOLVABLE (product decision)No RF screen: libs/wms-lib-sql/sql/rf-screens/*.sql. Only design mock-ups list Shipping/Replenishment (docs-obsidian/rf/design_handoff_webrf/reference/rf-mock.js:27,29). Admin CRUD only: services/app-server/src/web/rpcs/replenishment_policy_rpc.rs:4-14Block rewritten with precise unknown and "ask product owner for RF roadmap"
00-READMEMessage text is built on the server and may differCORRECTEDMost text is server text. Some is worded by the terminal: clients/rf-go/internal/app/submit_context.go:290-298 ("No permission: {method}"), clients/rf-go/internal/app/model.go:2108 and :5180 ("Session expired...", "Invalid username or password")Block replaced by plain statement; {function} explained as the server command name
00-READMEExact permissions of Operator role unknownCORRECTED (defaults now stated; admin edits survive)Defaults: services/app-server/src/web/rpcs/receipt_commands_rpc.rs:40-52, case_level_commands_rpc.rs:18-24, pick_commands_rpc.rs:26-31, pick_assignment_rpc.rs:39-55, packing_rpc.rs:27-35, inventory_count_rpc.rs:46-60, serial_commands_rpc.rs:28-34; baseline grants libs/wms-lib-sql/sql/wms-app/migrations/001_baseline.sql (role 1002 rows); 047_the_floor_runs_rf_receiving.sql; admin edits kept: libs/wms-lib-auth/src/authorization/seeder.rs (ON CONFLICT DO NOTHING)Block replaced by a list of Operator defaults; move/putaway noted as uneven (see findings)
01-loginWrong-password message text unknownCORRECTEDclients/rf-go/internal/app/model.go:5170-5195 ("Invalid username or password", red status, stays on login and the screen stays: rf-screens/005_login_screen.sql:59-63); rf_login=false gives the same answer libs/wms-lib-web/src/handlers/handlers_login.rs:213Table row now names the message; rf_login case added
01-loginWhat happens if the warehouse list fails to loadCORRECTED, plus one open detailclients/rf-go/internal/jrpc/client.go:477-484 (warn, continue, no warehouse); no header then server uses the sole default warehouse or refuses: libs/wms-lib-core/src/model/user_warehouse.rs:227-234 (warehouse_required); libs/wms-lib-web/src/middleware/mw_auth.rs:275-277Behaviour stated as fact. New block keeps only the unknown: the exact on-screen words for warehouse_required. To verify: sign in with a user that has no warehouse, press 1 on Main Menu, read the status line
02-asnReceipt Closed says "main menu" but screen goes to Receiving menuCORRECTED (guide text was incomplete)rf-screens/020_uc_asn_declarative.sql:898-926 (title, onEnter pop_to RCM, prompt text "return to main menu"); RCM title "Receiving" rf-screens/010_uc_rcv_01.sql:63-70Guide now says Enter opens the Receiving menu, Esc reaches Main Menu; block deleted
02-asnHow a "Receive anyway?" refusal is answeredCONFIRMED (answer is the terminal's Y/N overlay)clients/rf-go/internal/app/model.go:2817-2831 (auto prompt for overridable errors), :1262-1305 (Y re-sends with ack, N/Esc "Cancelled"), :4046-4053 ("[Y/N]"); screen comment rf-screens/020_uc_asn_declarative.sql:547-551; operator-ack rule libs/wms-shared/src/validation_codes.rs:537-575Block replaced by explanation; two table rows corrected (SKU not on receipt; receipt without LPN)
02-asnTo LPN is prefilled only when the server supplies expected LPNCONFIRMED (rule made precise)rf-screens/020_uc_asn_declarative.sql:496-499 (defaultFromExpr), libs/wms-inbound/src/service/receipt/expected_lpn.rs:1-24Block replaced by the exact rule
03-blindLocation RETURNS may not existCORRECTEDScreen default rf-screens/050_uc_rtn_declarative.sql:205, 055_uc_rtn_multi_line.sql:331. Standard seed creates RETURN (no S) and STAGE: wms-app/migrations/001_baseline.sql:8379,8381. No other seed adds RETURNSGuide says to change To Loc to the location the supervisor names; also "Cancel Planned Case needs supervisor/manager/admin" (case_level_commands_rpc.rs:24)
03-blindMessage for a location that does not existCONFIRMEDlibs/wms-inventory/src/deposit/deposit.rs:150-154 ("Invalid location {code}"), surfaced verbatim: libs/wms-inbound/src/error.rs:370-391Table row added
03-blindFull list of case-level messagesCORRECTED (list of the operator-facing ones added)libs/wms-inbound/src/service/receipt/case_level/commands/receive_case_level_line.rs:249,646,1024,1032; replace_pallet.rs:114,144,173; cancel_planned_case.rs:78,82,108,119,134Table of messages added; block deleted
03-blindRCCASE_LIST exists but nothing opens itCONFIRMEDrf-screens/080_uc_case_level_declarative.sql:403-464 is the only place the id appears; no target names it in any screen or in clients/rf-goBlock replaced by a plain statement
04-damageExact wording of "grant cannot be used" messagesCORRECTEDPrefix override grant is not usable: libs/wms-inbound/src/service/receipt/shared/override_grant.rs:323; reasons override_grant.rs:230-300, libs/wms-inventory/src/movement/override_grant.rs:599-628Table row renamed; full list of reasons added
04-damageForce-Close menu item blocked for non-supervisors?CONFIRMEDforce_close_episode and its picker are Admin/Manager/Supervisor in serial_commands_rpc.rs; Receiving and Picking entries use visibleWhen against the selected warehouse role. The server still checks every RPC.Operator and Viewer do not see the entry; Admin, Manager and Supervisor do.

Product findings​

  1. Return location default does not exist in the standard seed. Screens default To Loc to RETURNS (rf-screens/050_uc_rtn_declarative.sql:205, 055_uc_rtn_multi_line.sql:331). The seed creates RETURN (wms-app/migrations/001_baseline.sql:8379). A default install refuses the default value with "Invalid location RETURNS". Fix the screen default or the seed. Fixed (F-26): RCRTN01LINE / RCRTN02LINE rev 2 default to RETURN (rf-screens 120).
  2. Receipt Closed prompt lies. It says "Press Enter to return to main menu" (rf-screens/020_uc_asn_declarative.sql:922-923) but onEnter is pop_to RCM (the Receiving menu). Fixed (F-27): RCASN03DONE rev 2 says "…to the Receiving menu" (rf-screens 120).
  3. "Receipt without LPN is allowed only via supervisor override" is misleading. The code table lets the operator acknowledge it alone (libs/wms-shared/src/validation_codes.rs:559-570, ReceiptWithoutLpn => None); the doc comment in libs/wms-inbound/src/service/receipt/validation/validation_pipeline.rs:86-87 also says "supervisor cap". Message, comment and gate disagree. Fixed (F-28): the refusal says "This receive has no LPN" and the terminal asks; the comment follows the gate (meta-ui 150).
  4. Permission mismatch, force-close picker. Fixed (F-25/B1-18). force_close_episode and list_force_close_candidates share the Admin/Manager/Supervisor declaration. Enterprise migration 020 grants SUPERVISOR the list on existing databases, and RF hides the menu entry from Operator and Viewer.
  5. Declared defaults disagree with baseline grants. receipt_receive_against_asn is Admin/Manager in receipt_commands_rpc.rs:40-43, move_execute is Admin/Manager in move_command_rpc.rs:26, putaway_suggest_location and putaway_release_reservation are Admin/Manager in putaway_rpc.rs:42,44. The baseline migration grants all of them to OPERATOR (role 1002, 001_baseline.sql around lines 19838-19990). Migration 047's header says the router lists "now stand" with the migration, which is true for blind/return/close but not for these. Result depends on whether a database came from the baseline or from the seeder alone.
  6. Operator-facing text with internal wording. A Russian sentence inside the English message at receive_case_level_line.rs:366 ("у строки приёмки {} нет упаковки ..."). Messages with internal ids and field names reach the terminal: receive_case_level_line.rs:960 ("receipt_detail_case {id} flipped by a concurrent scan; retry"), cancel_planned_case.rs:134, replace_pallet.rs:114 (old_pallet_lpn), :229. Fixed (F-29): the pallet-replacement refusals and the concurrent-scan error are in the operator's words, the last one now a typed refusal with Russian (meta-ui 150).
  7. "No permission: {function}" shows a server command name (for example receipt_close, force_close_episode), not a menu name (clients/rf-go/internal/app/submit_context.go:296). Operators cannot map it to a screen. Fixed (F-30): rf-go says "No permission: {screen} ({function})".
  8. Dead screen. RCCASE_LIST is seeded and granted (wms-app/migrations/047_...sql:29) but no screen navigates to it. Fixed (F-31): removed (owner, 2026-10-13) — F2 on RCCASE02 already lists the unreceived cases; rf-screens 121 deletes the seeded screen.
  9. Force-Close item was shown to every user. Fixed (B1-18). rf-go carries the selected warehouse role in session globals, and every seeded Receiving/Picking menu revision gates the entry to Admin, Manager and Supervisor.

Blocks left unresolved​

  • operator/00-README.md (stage/load/ship/replenishment on RF): a product roadmap question. Code has no RF screens for them. To verify: ask the product owner.
  • operator/01-login-and-warehouse.md (words shown for warehouse_required): needs a running RF terminal. To verify: sign in with a user that has no warehouse assigned, press 1 on Main Menu, read the status line.