What problem does it solve? Developers working on the BMRC Logistics audit page risk breaking analytics and inventory invariants because every audit action must perform a triple write (inventory change, inventory_logs row, auditEvents ledger entry) and follow strict shipment, move, and report/fix semantics that are easy to get wrong. ## Core Features & Use Cases - Five audit actions with sanctioned helpers: Count (submitAuditEntries), Move (moveItemLocation/moveItemsBulk), Shipment (addShipment), Report (reportItemIssue), and Fixed (recordItemFix), all living in app/lib/audit-actions.ts and audit-helpers.ts. - Triple-write enforcement: Every action writes the inventory change, an inventory_logs row, and an auditEvents ledger entry via recordAuditEvent, with removeUndefined() wrapping for Firestore safety. - Domain rules: Sealed batches for bag-tracked items, zero-stock tombstone batches for box-tracked items, zone lock handling, canUserAudit permissions, monthly audit cycles, and restock analysis. - Use Case: When adding a new audit field or action, follow the checklist: add a headless helper with the triple write, wire the drawer UI to it, and run npm run test:invariants to verify INV-1/2/3/4/12. ## Quick Start Ask the assistant to add a new audit action or modify an existing one in the BMRC audit workbench following the triple-write rule and helper conventions.