Open questions
These items could not be settled from the code that was read on 2026-10-01 (backend commit b5bd463f). Do not turn them into requirements.
Product intent
- What a wallet token costs, and when it is refunded if a label or a sync fails.
- Whether an inactive subscription blocks HTTP or only the sync scheduler.
- Whether
CUSTOMchannels are a supported selling mode or a seed placeholder. - Whether coupons are enforced on order create. Models exist. No coupon controller was found.
- Which order transitions operators may click, versus system-only edges such as
DISPUTEDback toPENDING. - Restock rules on return completion versus
ReturnItemGrade. - Whether GST e-invoice IRN is in scope.
EInvoiceStatusexists. No GSTN client was found. - Settlement match tolerance, and what reconciled means financially.
- COD remittance ownership versus marketplace settlement.
- Amazon AFN is
CHANNEL_FULFILLEDwhen the channel descriptor isafnorfba(and the other partner descriptors infulfillment-mode.util.ts). That mode does not reserve owned stock. Whether the warehouse UI still shows a worksheet for it is a product question. The code path is What an order status does to fulfillment. - Commercial meaning of
StockOwnership. - Why
CANCELLEDcan go toREFUNDEDwhile several earlier statuses cannot.
Operations
- Node version in CI and production (
>=24engines versus README20+). - How
DEADoutbox rows are replayed. - How a
SUSPENDEDchannel returns toACTIVE, and who may do it. - Partitioned tables and retention inside
PartitionMaintenanceService. - Production replica counts, and whether deploy enforces a single scheduler.
- Whether pgBackRest and WAL backups are live.
migrate:laravelsafety.- Release and tag process for the three apps.
- Swagger JSON path. The code does not override
jsonDocumentUrl. ConfirmGET /docs-jsonon a running API.
Bull Board path is known: /admin/queues.
Security
- Password hash algorithm per flow.
argon2andbcryptjsare both dependencies. - Which courier webhooks verify signatures. WhatsApp and the Shopify path were specifically noted.
- Where the Stripe secret for WhatsApp is stored in deployed config.
- Whether every raw SQL statement filters
tenantId. - MCP websocket authentication on port 3002.
- Network policy for unauthenticated
/metrics. - Whether the permissions default-allow is accepted, or some controllers are missing decorators by mistake.
Code ambiguities
WalletListenercomment says do not rethrow. The code rethrows.- Two order state machine files. They match today and can drift.
isValidOrderTransitionand the return helper return true when the current status is null.return.status.changedandreturn.stock.restoredhave no listener.MidNightScheduleWorkeronly logs.- Courier codes
NIP,PIK,SHYP,ARMX,AMZhave no strategy class. StockMovementunique key includescreatedAt.- Inventory quantity formula in
stock-sync.service.tsis not written up at line level. - Order create idempotency key.
- Whether shipment webhooks and the 3-hour poller dedupe the same scan.
- Order state machine header comment omits statuses the map allows. The map wins.
- Which address validation statuses block fulfillment.
- Ledger uniqueness for one wallet token debit.
Archive docs under docs/archive/ and AI_CONTEXT.md are not a complete description of worker.module.ts. The agent context file does not mention webhook processors, webhook health, or the WhatsApp catalog queue.