Test cases
Every documented test case in the registry, in one shape, generated from the entries on each build. It is the raw material for a test pack: pick the rows that touch what is changing, and hand them over.
The shape
| Column | Is |
|---|---|
| Case ID | Permanent, and unique across the registry. <entry prefix>-TC-<case> |
| Layer | What is being exercised — the script, the saved search, the storefront, a named stage of a flow |
| Preconditions | The state the system has to be in before the case means anything |
| Input | What arrives, or what happens, against that state |
| Expected output | What the registry says should come back. Not what production was observed doing, unless the entry says so |
| Rule ref | The rule the case exercises, and the defect it pins down where one is named |
What is deliberately not here
No result columns. Assistant verified, dev result, pass or fail — those describe one run of a
pack, not the case. A column in the registry recording the outcome of a run nobody repeats is the
version field over again: it reads as more authority than it has earned within a month. Add them
to the pack when you issue it.
Nothing is inferred. A case whose entry never recorded which rule it exercises shows needs confirming rather than a guess. Where an entry warns that its cases are derived from documentation rather than from a passing run — because the flow has no automated coverage, or because the calculation has not been read — that warning is on the entry, above its table, and it is the first thing to read before trusting a row.
How to read a pack out of this
- Start from the rule, not the entry: find the rule in the search box, then take every case whose Rule ref names it.
- Add the cases for whatever that rule's entry says it
depends_on— a rule reading yesterday's answer fails in ways its own cases will not show. - Check
DEFECTS.mdfor open defects on the same rules. A case that passes against a known defect is testing the defect, not the rule.
156 cases across 9 entries. 55 name no rule and 74 name no layer — neither is inferred here. 1 entry has no test cases at all: Transfer Order Automation — Daily Overflow → Sydney Replenishment.
Courier Tracking Status Update 22
Open the entry · draft
| Case ID | Layer | Preconditions | Input | Expected output | Rule ref |
|---|---|---|---|---|---|
CT-TC-T1 |
The run groups rows | Row with consignmentNumber empty, Ship Via AU WIDE - Hunter Express |
— | Row is skipped, logged [SKIP] … empty consignment number; no carrier call |
LI-BL-FUL-018 |
CT-TC-T2 |
Carrier matching | Ship Via AU WIDE&nbsp;- Hunter Express (entity-encoded) |
— | Resolves to Hunter Express — entities decoded, whitespace collapsed, lowercased before matching | LI-BL-FUL-019 |
CT-TC-T3 |
Carrier matching | Ship Via METRO - Designer Transport - Standard NEW (not in the exact list) |
— | Resolves to Designer Transport on the name pattern | LI-BL-FUL-019 |
CT-TC-T4 |
Carrier matching | Ship Via AU WIDE - Direct Freight |
— | No carrier; [SKIP]; the ship method appears in the run's unmatched count |
LI-BL-FUL-019 |
CT-TC-T5 |
Current-event selection | Events In transit 20/07/2026 09:00 and Out for delivery 25/07/2026 06:00, run on 21/07/2026 |
— | Picks In transit — the 25/07 event has not happened yet |
LI-BL-FUL-020 |
CT-TC-T6 |
Current-event selection | Events started 17/07/2026 07:22 then delivered 17/07/2026 07:22 |
— | Picks delivered |
LI-BL-FUL-020 |
CT-TC-T7 |
Translation | Event text Onboard for delivery, AusPost |
— | Status id 6 (Out for delivery) from the AusPost exact table |
LI-BL-FUL-021 |
CT-TC-T8 |
Translation | Event text Staged for Delivery, Designer Transport |
— | Status id 5 (Ready for delivery) from Designer's own table — no generic pattern matches this wording |
LI-BL-FUL-021 |
CT-TC-T9 |
Translation | Event text Consignment repacked at hub |
— | No status; row logged [NO-MAP]; nothing written |
LI-BL-FUL-021 |
CT-TC-T10 |
Decision | Carrier throws HTTP 503; NetSuite holds Out for delivery |
— | Kept; reason carrier error; [PRESERVE] line carries the driver error |
LI-BL-FUL-022 |
CT-TC-T11 |
Decision | Carrier answers but the page cannot be parsed; NetSuite holds Out for delivery |
— | Kept; logged [ERROR] … parse failure, not [PRESERVE]; carrier's [ALERT] line raised |
LI-BL-FUL-022 |
CT-TC-T12 |
Decision | NetSuite comment … Updated At 21/04/2026 09:00; carrier's latest event In transit 20/04/2026 14:00 |
— | Kept; reason NS has newer comment |
LI-BL-FUL-023 |
CT-TC-T13 |
Decision | Same as T12, but the carrier's event is Delivered 20/04/2026 and NetSuite's status is not Delivered |
— | Written — terminal progression overrides the newer note | LI-BL-FUL-023 |
CT-TC-T14 |
Decision | Carrier repeats yesterday's event, with today's scrape time in the comment | — | No change — the Updated At tail is stripped before comparison |
LI-BL-FUL-024 |
CT-TC-T15 |
Write payload | Status becomes Delivered; event 21/04/2026 14:32 |
— | custbody_actual_delivery_date = 2026-04-21; status 7; tracking link present |
LI-BL-FUL-024 |
CT-TC-T16 |
Write payload | Status becomes Delivered; event time unparseable |
— | Status 7 written; custbody_actual_delivery_date absent from the payload |
LI-BL-FUL-024 |
CT-TC-T17 |
Write payload | Carrier returns carton count 0 |
— | custbody_courier_carton_received absent — zero is not written |
LI-BL-FUL-024 |
CT-TC-T18 |
Full run | 400 Designer Transport rows at 5/min, 15-minute invocation | — | Rows tracked until the reserve is reached, those written back, the remainder logged [DEFER]; run reports deferredRows > 0 |
LI-BL-FUL-025 |
CT-TC-T19 |
Full run | Hunter Express throws while Air Road is mid-run | — | Air Road completes and writes back; the run logs [ERROR] Hunter Express: carrier run failed |
LI-BL-FUL-025 |
CT-TC-T20 |
Canary | Designer Transport's page markup changes | — | [CANARY-FAIL] Designer Transport … could not parse the carrier's response |
LI-BL-FUL-026 |
CT-TC-T21 |
Canary | AusPost driver, whose health-check consignment is unset | — | [CANARY-SKIP] AusPost | no canary consignment declared on the driver — today's behaviour, and a defect (CT-3). Intended: a real settled AusPost consignment is checked and passes |
LI-BL-FUL-026CT-3 |
CT-TC-T22 |
Decision | NetSuite holds Delivery attempt failed; carrier unreadable |
— | Today: logged [NO-DATA]/[NO-MAP], not counted as preserved (defect CT-2). Intended: [PRESERVE], reason carrier error. Nothing is written either way |
LI-BL-FUL-022CT-2 |
Delay Comms — Stage 2: the delay call request 12
Open the entry · draft
| Case ID | Layer | Preconditions | Input | Expected output | Rule ref |
|---|---|---|---|---|---|
DN-TC-T1 |
Feed and formatting | The feed search returns three rows for one sales order — two different items, and one item repeated with different casing. | One run of the Lambda. | One call request is raised for the order, listing two items. The repeated item appears once. | LI-BL-CMS-006 |
DN-TC-T2 |
Feed and formatting | The feed search returns rows for four different sales orders. | One run of the Lambda. | Four separate call requests, one per order, each naming only its own items. | LI-BL-CMS-006 |
DN-TC-T3 |
Team routing | The order's Kustomer customer carries the type value trade. |
One run of the Lambda. | The conversation is assigned to Trade Enquiries. | LI-BL-CMS-007 |
DN-TC-T4 |
Team routing | The order's Kustomer customer carries no type value, or a value other than trade. |
One run of the Lambda. | The conversation is assigned to Account Management. | LI-BL-CMS-007 |
DN-TC-T5 |
Team routing | The order's Kustomer customer carries trade, but the read of that customer fails. |
One run of the Lambda. | Deployed behaviour is that the conversation is assigned to Account Management and the run reports success. This is defect DN-D5; the intended outcome is Trade Enquiries. | LI-BL-CMS-007 |
DN-TC-T6 |
Kustomer | The customer-resolution service returns no customer id for the order. | One run of the Lambda. | No conversation, no note, no audit log and no line-item write for that order. An error email names the order. Other orders in the same run are unaffected. | LI-BL-CMS-009 |
DN-TC-T7 |
NetSuite write | An order with one delayed line, Delay Comms blank or Stage 1, Expected Ship Date later than Delay Ship Date. | One run of the Lambda that completes every step. | That line's Delay Comms reads Stage 2: Delay Call Scheduled, and its Delay Ship Date now equals the Expected Ship Date that was read. | LI-BL-CMS-008 |
DN-TC-T8 |
NetSuite write | A row whose Line ID matches no line on the sales order — for example a line since removed. | One run of the Lambda. | No line is stamped and the order is saved unchanged, but the run reports the line items as updated. This is defect DN-D1. | LI-BL-CMS-008 |
DN-TC-T9 |
Ordering | An order that reaches the audit-log step, with the user note RESTlet failing. | One run of the Lambda. | Deployed behaviour is that the line items are still stamped Stage 2 and the order carries no user note. This is defect DN-D3. | LI-BL-CMS-009 |
DN-TC-T10 |
Feed and formatting | The feed search returns ten rows, one of which is missing the Product column. | One run of the Lambda. | Deployed behaviour is that no order at all is processed and an error email is sent. This is defect DN-D4. | LI-BL-CMS-005 |
DN-TC-T11 |
Idempotency | An order that already has a Stage 2 conversation raised earlier the same day, with its line still selected by the feed search. | A second run of the Lambda on the same day. | Deployed behaviour is that a second conversation and a second note are raised. This is defect DN-D6. | LI-BL-CMS-008 |
DN-TC-T12 |
Reporting | A run in which every order succeeds at every step. | One run of the Lambda. | One success email listing each order and each step against it. No error email. | LI-BL-CMS-009 |
Life Truck Delivery Date Confirmation 17
Open the entry · active
| Case ID | Layer | Preconditions | Input | Expected output | Rule ref |
|---|---|---|---|---|---|
DC-TC-T1 |
needs confirming | CDC empty, Life truck, date set | Outbound runs | Confirmation SMS sent, CDC := 2 | LI-BL-FUL-005 LI-BL-FUL-007 |
DC-TC-T2 |
needs confirming | CDC = "Manual - Exclude from automation" | Outbound runs | No SMS, no field written | LI-BL-FUL-005 |
DC-TC-T3 |
needs confirming | Three orders, same phone and date, ATL matching | Outbound runs | Exactly one SMS; CDC written on all three | LI-BL-FUL-006 |
DC-TC-T4 |
needs confirming | Two orders, same phone and date, ATL differs | Outbound runs | Two SMS, two conversations | LI-BL-FUL-006 |
DC-TC-T5 |
needs confirming | ATL on, all orders standard courier | Outbound runs | Informational SMS, CDC := 7, no reply expected | LI-BL-FUL-008 |
DC-TC-T6 |
needs confirming | ATL on, one order is two-man | Outbound runs | Normal confirm-or-decline SMS, CDC := 2 | LI-BL-FUL-008 |
DC-TC-T7 |
needs confirming | CDC = 3 | Outbound runs | Reschedule SMS; all five fields cleared | LI-BL-FUL-009 |
DC-TC-T8 |
needs confirming | Open conversation | Reply "Y" | CDC := 1 | LI-BL-FUL-010 LI-BL-FUL-011 |
DC-TC-T9 |
needs confirming | Open conversation | Reply "yes but can we make it earlier" | CDC := 1 — contains-matching wins | LI-BL-FUL-010 |
DC-TC-T10 |
needs confirming | Open conversation | Reply "no" | Up to 3 dates offered, CDC unchanged | LI-BL-FUL-012 |
DC-TC-T11 |
needs confirming | Options already offered | Reply "no" again | CDC := 6, no second list | LI-BL-FUL-010 LI-BL-FUL-014 |
DC-TC-T12 |
needs confirming | Options 1–3 offered | Reply "9" | CDC := 6, nothing booked | LI-BL-FUL-010 LI-BL-FUL-014 |
DC-TC-T13 |
needs confirming | Options 1–3 offered | Reply "2" | Date, ship date, truck, linehaul written; CDC := 1 | LI-BL-FUL-013 |
DC-TC-T14 |
needs confirming | Record has no CBM or address | Reply "no" | No options offered; CDC := 6 | LI-BL-FUL-012 |
DC-TC-T15 |
needs confirming | Closed conversation | Any reply | DynamoDB updated, Kustomer note raised, no NetSuite write | LI-BL-FUL-015 |
DC-TC-T16 |
needs confirming | Reminder already sent today | Reminder runs again | No second SMS | LI-BL-FUL-016 |
DC-TC-T17 |
needs confirming | Date changed 3 times | Escalation sweep runs | Kustomer conversation in Logistics & Fulfilment | LI-BL-FUL-017 |
Lead Time flow 2 — Inventory item lead time, and the Shopify push 14
Open the entry · active
| Case ID | Layer | Preconditions | Input | Expected output | Rule ref |
|---|---|---|---|---|---|
LT2-TC-T1 |
needs confirming | A product with Sydney stock and also a supplier lead time | The flow runs | Rung 1 wins — "2 - 3 days". The supplier rung is never reached | LI-BL-INV-006 |
LT2-TC-T2 |
needs confirming | A product with a computed wait beyond 48 weeks | The flow runs | "Please contact showroom for lead time", not a band | LI-BL-INV-006 |
LT2-TC-T3 |
needs confirming | Our arrival date and the supplier's, five days apart | The flow runs | Ours is used | LI-BL-INV-006 |
LT2-TC-T4 |
needs confirming | Our arrival date and the supplier's, three weeks apart | The flow runs | The earlier is used | LI-BL-INV-006 |
LT2-TC-T5 |
needs confirming | An arrival date sixteen days in the past | The flow runs | Discarded, as though it never existed | LI-BL-INV-006 |
LT2-TC-T6 |
needs confirming | An Ellison Studios drop-ship product | The flow runs | Wording says "our warehouse", not "our partners warehouse" | LI-BL-INV-006 |
LT2-TC-T7 |
needs confirming | An Imported item with bonded stock exceeding the Sydney backorder | The flow runs | The spare drives both the published quantity and the arrival date | LI-BL-INV-011 |
LT2-TC-T8 |
needs confirming | Sydney oversold by more than bonded can cover | The flow runs | Quantities publish as zero. Today the residual is discarded — LT2-D11 says it should be surfaced |
needs confirmingLT2-D11 |
LT2-TC-T9 |
needs confirming | A product where only the arrival date changed | The flow runs | Today: no update is triggered (LT2-D8). Once fixed: the item updates |
needs confirmingLT2-D8 |
LT2-TC-T10 |
needs confirming | One item with an empty supply type | The flow runs | Today: the whole run stops (LT2-D7). Once fixed: that item is skipped and the rest complete |
needs confirmingLT2-D7 |
LT2-TC-T11 |
needs confirming | A product with no Shopify product id | The flow runs | NetSuite updates; the item is dropped before Shopify. Intended | needs confirming |
LT2-TC-T12 |
needs confirming | An In-Store Only product with showroom stock | The flow runs | "Available for in-store purchase in our … showroom" — not a lead time | LI-BL-INV-006 |
LT2-TC-T13 |
needs confirming | A product where nothing changed | The flow runs twice | The second run writes nothing and pushes nothing | LI-BL-INV-006 |
LT2-TC-T14 |
needs confirming | Shopify rejects the metafield write | The flow runs | Nothing detects it. Recording this as a test is the point — there is no assertion to make today | needs confirming |
Lead Time flow 3 — Kit item lead time, rolled up from members 19
Open the entry · active
| Case ID | Layer | Preconditions | Input | Expected output | Rule ref |
|---|---|---|---|---|---|
LT3-TC-T1 |
needs confirming | A kit whose members have different lead times | The flow runs | The kit takes the slowest member's promise | LI-BL-INV-007 |
LT3-TC-T2 |
needs confirming | A kit with members at quantities 3, 0 and 5 | The flow runs | Available quantity is 0 | LI-BL-INV-010 |
LT3-TC-T3 |
needs confirming | A member with a negative quantity | The flow runs | Treated as zero, but its backorder is captured first so bonded can cover it | needs confirming |
LT3-TC-T4 |
needs confirming | A member with a blank quantity | The flow runs | Treated as zero — note this can silently make the kit look unavailable | needs confirming |
LT3-TC-T5 |
needs confirming | One member whose promise is unknown | The flow runs | The whole kit says "please contact showroom" | LI-BL-INV-007 |
LT3-TC-T6 |
needs confirming | One member whose promise is unknown, in the mixed quantity case | The flow runs | Today the unknown is ignored and a date is used anyway — inconsistent with T5, and unresolved | needs confirming |
LT3-TC-T7 |
needs confirming | A kit whose only inbound stock is bonded | The flow runs | A Vietnam date is calculated. Today it is never written — LT3-D7 |
LI-BL-INV-012LT3-D7 |
LT3-TC-T8 |
needs confirming | A kit where nothing at all has changed, and whose components hold equal stock | The flow runs twice | Skipped on the second run. Was rewritten before 2026-08-28 | needs confirmingLT3-D1 |
LT3-TC-T8a |
needs confirming | A kit where nothing has changed, but whose components hold uneven stock | The flow runs twice | Today: rewritten and re-pushed anyway (LT3-D8). Once fixed: skipped |
needs confirmingLT3-D8 |
LT3-TC-T9 |
needs confirming | A component updated by flow 2 five minutes ago | The storefront is read | Today: the kit is stale for up to twelve hours (LT3-D2) |
needs confirmingLT3-D2 |
LT3-TC-T10 |
needs confirming | Gold Coast stock changes on a member | The flow runs | The lowest figure across members is written to custitem_qty_available_gc |
needs confirmingLT3-D5 |
LT3-TC-T11 |
needs confirming | A kit's members are changed in NetSuite | The flow runs | The new membership is used — members are re-read every run | needs confirming |
LT3-TC-T12 |
needs confirming | A kit with no Shopify id | The flow runs | NetSuite updates; the kit is dropped before Shopify. Intended | needs confirming |
LT3-TC-T13 |
needs confirming | A kit showing "please contact showroom" | Someone asks which member caused it | Nothing records it — LT3-D6. Diagnosis is by hand |
needs confirmingLT3-D6 |
LT3-TC-T14 |
needs confirming | A kit whose components all allow backorder, on a kit supply type that does not | The flow runs | The checkbox is turned off — gate 2 | LI-BL-INV-013 |
LT3-TC-T15 |
needs confirming | A kit on a permissive supply type with one component that refuses backorder | The flow runs | The checkbox is turned off — gate 1 | LI-BL-INV-013 |
LT3-TC-T16 |
needs confirming | A kit whose scarcest component holds second-warehouse stock, on In-Store Only | The flow runs | Allowed — physical stock overrides the supply type | LI-BL-INV-013 |
LT3-TC-T17 |
needs confirming | A McMullin & Co. kit whose slowest component's supplier date is 200 days out | The flow runs | Not allowed. The latest component date is used, not the earliest | LI-BL-INV-013 |
LT3-TC-T18 |
needs confirming | A kit refused backorder by gate 2 that currently shows an arrival date | The flow runs | The date is unchanged — the arrival-date gate keeps the looser gate-1 answer | LI-BL-INV-012 LI-BL-INV-013 |
Lead Time flow 1 — First and second arrival into Sydney 12
Open the entry · active
| Case ID | Layer | Preconditions | Input | Expected output | Rule ref |
|---|---|---|---|---|---|
LT1-TC-F1-01 |
Script | One Sydney purchase order, nothing allocated | remaining 40, allocated 0, 4/11 | First arrival 4/11 qty 40 | LI-BL-INV-005 |
LT1-TC-F1-02 |
Script | One Sydney purchase order, partly allocated | remaining 8, allocated 5 | First arrival qty 3 | LI-BL-INV-005 |
LT1-TC-F1-03 |
Script | Bonded purchase order only | Vietnam date 30/9 | First arrival 4/11 | LI-BL-INV-005 |
LT1-TC-F1-04 |
Script | Transfer order and bonded order, same date | both 4/11 | Two entries, transfer order first | LI-BL-INV-014 |
LT1-TC-F1-05 |
Script | Two Sydney orders, same date, different quantities | 15 and 10 on 3/11 | One entry, qty 25, stage from the 15 | LI-BL-INV-014 |
LT1-TC-F1-06 |
Script | Source 20 days overdue plus a later one | — | The overdue one is dropped; the later takes the slot | LI-BL-INV-014 |
LT1-TC-F1-07 |
Script | Every line fully allocated | remaining 34, allocated 34 | Both arrivals blank | LI-BL-INV-005 |
LT1-TC-F1-08 |
Script | Bonded line fully allocated to a transfer order | — | Excluded from the arrivals, included in the raw bonded date | LI-BL-INV-005 |
LT1-TC-F1-09 |
Integration | Nothing has moved | A product matching on all six | Not written; counted as ignored | LI-BL-INV-014 |
LT1-TC-F1-10 |
Integration | A source has disappeared | Second arrival no longer exists | Blank written, field cleared | LI-BL-INV-014 |
LT1-TC-F1-11 |
Integration | A column removed from the search | — | Flow stops with a fatal error; nothing written | LI-BL-INV-005 |
LT1-TC-F1-12 |
Regression | Overflow transfer order into Sydney | — | Must not count as incoming — currently fails, LT1-D3 |
LI-BL-INV-005LT1-D3 |
Lead Time flow 4 — Original Lead Time on the sales order line 6
Open the entry · draft
| Case ID | Layer | Preconditions | Input | Expected output | Rule ref |
|---|---|---|---|---|---|
OL-TC-T1 |
needs confirming | A sales order line with no Original Lead Time | The flow runs | The line is stamped with a value | LI-BL-ORD-001 |
OL-TC-T2 |
needs confirming | A sales order line that already carries an Original Lead Time | The flow runs | Unknown — this is open question 2. The test exists to force the answer: re-read the line and record whether the value moved | needs confirming |
OL-TC-T3 |
needs confirming | The same order line, read from search 5948 | The search is run | Today three rows come back for S319344 line 1. Expected: one |
needs confirming |
OL-TC-T4 |
needs confirming | An order for a kit item | The flow runs | Unknown — kits carry lead times differently. Open question 5 | needs confirming |
OL-TC-T5 |
needs confirming | An order placed while flow 1 or flow 2 had failed | The flow runs | The stamp records whatever the item's lead time said at that moment — including if it was wrong | needs confirming |
OL-TC-T6 |
needs confirming | The value calculated for a line | The line is compared to what the customer saw at checkout | They match. This is the test that actually matters, and it cannot be written until the calculation is documented | LI-BL-ORD-001 |
Shipping Automation — Module 5: Courier Approval & Set Ship Date 36
Open the entry · active
| Case ID | Layer | Preconditions | Input | Expected output | Rule ref |
|---|---|---|---|---|---|
SA-TC-E1 |
Entry & eligibility (saved-search gating) | SO balance owing > 0 | — | Not selected by the saved search — never processed | needs confirming |
SA-TC-E2 |
Entry & eligibility (saved-search gating) | "Hold Order" = true | — | Excluded — not processed | needs confirming |
SA-TC-E3 |
Entry & eligibility (saved-search gating) | "Courier Approval" already true, or order/items closed | — | Excluded — not reprocessed | needs confirming |
SA-TC-E4 |
Entry & eligibility (saved-search gating) | All items have a Drop Ship PO | — | Excluded (drop-ship items dropped; empty order skipped) | needs confirming |
SA-TC-E5 |
Entry & eligibility (saved-search gating) | Ship Date on/before today with a reason for service change present | — | Excluded — not re-dated | needs confirming |
SA-TC-F1 |
Flow routing (ship complete & grouping) | Ship Complete = No, not linked to another SO | — | Flow 1 (nswo, 7132) → proceeds to courier selection | needs confirming |
SA-TC-F2 |
Flow routing (ship complete & grouping) | Ship Complete = No, ships together with another SO | — | Flagged Ship Complete = Yes → picked up by Flow 2 next run | needs confirming |
SA-TC-F3 |
Flow routing (ship complete & grouping) | Ship Complete = Yes, every item across the group committed | — | Flow 2 (swo, 7136) → proceeds; group updated together | needs confirming |
SA-TC-F4 |
Flow routing (ship complete & grouping) | Ship Complete = Yes, one item 0/1 committed (e.g. S301287 + S306157) | — | Waiting — whole group skipped this run, no NetSuite update; retries next run | needs confirming |
SA-TC-F5 |
Flow routing (ship complete & grouping) | Merged group where a related SO isn't in the search results | — | Related SO fetched (SuiteQL); group assembled; maxCxRequestedDate & total CBM across all items |
needs confirming |
SA-TC-C1 |
Courier selection by service level | Full Service, Life postcode valid (e.g. S308550)Reason code 15 | — | Courier = Life Full; approved | needs confirming |
SA-TC-C2 |
Courier selection by service level | Full Service, Life invalid, DT validReason code 15 | — | Courier = DT Full; approved | needs confirming |
SA-TC-C3 |
Courier selection by service level | 2 Man, Life items, Life postcode valid (e.g. S315316)Reason code 15 | — | Courier = Life 2 Man; approved | needs confirming |
SA-TC-C4 |
Courier selection by service level | 2 Man, Life invalidReason code 15 | — | Falls through in order: DT 2 Man → Pedemont → TT | needs confirming |
SA-TC-C5 |
Courier selection by service level | Standard, ≥1 Life item, Life postcode validReason code 15 | — | Ship Via → Life Standard; approved | needs confirming |
SA-TC-C6 |
Courier selection by service level | Standard, Life invalid, DT ATL validReason code 15 | — | Ship Via → DT ATL; approved | needs confirming |
SA-TC-C7 |
Courier selection by service level | Standard, all items AusPostReason code 15 | — | Ship Via → AusPost; approved | needs confirming |
SA-TC-C8 |
Courier selection by service level | Standard, all / ≥1 Standard (non-AusPost, non-Life)Reason code 15 | — | Ship Via → Allied; approved | needs confirming |
SA-TC-C9 |
Courier selection by service level | Paid Standard, but ≥1 item needs 2 ManReason code 21 | — | Upgraded to Two Man hierarchy; approved as premium-item upgrade | needs confirming |
SA-TC-P1 |
Postcode validation & front-end fallback | No courier covers the postcode; front-end pick is a real courierReason code 14 | — | Approve the front-end rate-card courier | needs confirming |
SA-TC-P2 |
Postcode validation & front-end fallback | No courier covers the postcode; front-end pick = TBCReason code 5 | — | Disapprove — postcode not covered | needs confirming |
SA-TC-P3 |
Postcode validation & front-end fallback | TT courier (no postcode CSV) | — | Its postcode check always fails → next step | needs confirming |
SA-TC-S1 |
Scheduling, CBM & buffer | Life truck, CBM fits, no CX date (e.g. S308550, Syd R4) | — | First available Syd R4 truck day on/after the 3-day buffer (Fri 7 Aug 2026 in sample data) | needs confirming |
SA-TC-S2 |
Scheduling, CBM & buffer | Life truck, order CBM exceeds remaining capacity that day | — | Skips that day → next available date that fits | needs confirming |
SA-TC-S3 |
Scheduling, CBM & buffer | No available date fits | — | Order ignored + error email raised | needs confirming |
SA-TC-S4 |
Scheduling, CBM & buffer | CX requested date later than the buffer (e.g. S315316, CX 30/10) | — | First truck day on/after the CX requested date | needs confirming |
SA-TC-S5 |
Scheduling, CBM & buffer | Life truck with a weekend day marked available | — | Buffer counts that weekend day; otherwise weekends excluded | needs confirming |
SA-TC-S6 |
Scheduling, CBM & buffer | Two trucks/dates both qualify | — | Lower-CBM truck chosen first | needs confirming |
SA-TC-L1 |
Linehaul (Life couriers) | Life courier, ship state NSW or ACT | — | Ship Date = Scheduled Delivery Date (local, same day) | needs confirming |
SA-TC-L2 |
Linehaul (Life couriers) | Life courier, QLD (e.g. S310492 + S310562, Bris R3) | — | Deliver Tue 18 Aug; Ship Date = Tue 11 Aug; Route SYD → BRIS; applied to both linked SOs | needs confirming |
SA-TC-L3 |
Linehaul (Life couriers) | Life courier, VIC | — | Ship Date = Thursday before delivery; Route SYD → MEL | needs confirming |
SA-TC-L4 |
Linehaul (Life couriers) | Life courier, state not NSW/VIC/QLD (WA/SA/TAS) | — | Rejected — no partial update | needs confirming |
SA-TC-X1 |
Edge cases & resilience | 2 Man order where every committed item is Standard_Auspost | — | Sent to manual review (not auto-processed) | needs confirming |
SA-TC-X2 |
Edge cases & resilience | Any approval/disapproval | — | Correct RFSC reason code written (15 / 21 / 14 / 5) — confirm against config | needs confirming |
SA-TC-X3 |
Edge cases & resilience | Run approaches the ~14-min Lambda limit | — | Self-reinvokes async (retryAttempt+1, max 3); remaining orders processed next invocation; no duplicate updates | needs confirming |
SA-TC-X4 |
Edge cases & resilience | Courier Schedule service unavailable | — | Falls back to cached schedule; if none, terminates gracefully with an error email (no bad dates written) | needs confirming |
Supply Chain — Item Stage: the message on every open order line 18
Open the entry · draft
| Case ID | Layer | Preconditions | Input | Expected output | Rule ref |
|---|---|---|---|---|---|
IS-TC-T1 |
needs confirming | Line closed, 5 committed, reserved 5 | The run executes | Message is Cancelled; no lookup performed |
LI-BL-CMS-001 |
IS-TC-T2 |
needs confirming | Ordered 3, fulfilled 3 | The run executes | Message is Item shipped |
LI-BL-CMS-001 |
IS-TC-T3 |
needs confirming | Ordered 3, committed 3, fulfilled 0 | The run executes | Message is Ready to be shipped; no lookup performed |
LI-BL-CMS-001 |
IS-TC-T4 |
needs confirming | Ordered 4, fulfilled 1, reserved 0, brand Weave |
The run executes | Message is Remaining items incoming from our Weave partner |
LI-BL-CMS-001 |
IS-TC-T5 |
needs confirming | Ordered 2, reserved 0, drop ship, brand Kave Home |
The run executes | Message is Item is on order with Kave Home/ our partner |
LI-BL-CMS-001 |
IS-TC-T6 |
needs confirming | Ordered 2, reserved 0, not drop ship, imported | The run executes | Message is Item is on order with Life Interiors |
LI-BL-CMS-001 |
IS-TC-T7 |
needs confirming | Reserved 36, committed 0, ship date 4/11/2026; candidate PO landing 4/11/2026, on order 37, allocated 36, stage 22 | The run executes | PO accepted; message is On its way to our warehouse; Allocated PO# written |
LI-BL-CMS-002 LI-BL-CMS-003 |
IS-TC-T8 |
needs confirming | Same as T7 but the candidate's landing date is 5/11/2026 | The run executes | PO rejected; message is Please contact us for more details |
LI-BL-CMS-002 |
IS-TC-T9 |
needs confirming | Same as T7 but the candidate's allocated demand is 20 | The run executes | PO rejected on quantity; message is Please contact us for more details |
LI-BL-CMS-002 |
IS-TC-T10 |
needs confirming | Two candidates, both acceptable, landing dates identical | The run executes | The first returned is written; the second never evaluated | LI-BL-CMS-002 |
IS-TC-T11 |
needs confirming | Reserved 5, PO stage 3, delay comms Stage 1: Delay Email Sent |
The run executes | Message is Delayed - Item is in transit to warehouse |
LI-BL-CMS-003 |
IS-TC-T12 |
needs confirming | Reserved 5, PO stage 3, delay comms blank | The run executes | Message is On its way to our warehouse — not Delayed…, regardless of how overdue the line is |
LI-BL-CMS-003 |
IS-TC-T13 |
needs confirming | Ordered 10, fulfilled 4, reserved 6, PO stage 2 | The run executes | Message is Partially Shipped - Remaining item is in production |
LI-BL-CMS-003 |
IS-TC-T14 |
needs confirming | Reserved 5, PO stage 1 (Working on Buy, inactive) | The run executes | Message unchanged from whatever the line already said; nothing blanked | LI-BL-CMS-003 |
IS-TC-T15 |
needs confirming | Message unchanged, drop-ship date - None - → blank, PO unchanged |
The run executes | Nothing written to NetSuite for that line | LI-BL-CMS-004 |
IS-TC-T16 |
needs confirming | Line drop-ship date 8/12/2025, new value 08/12/2025, message unchanged |
The run executes | Nothing written — the two normalise to the same day | LI-BL-CMS-004 |
IS-TC-T17 |
needs confirming | Message unchanged, new drop-ship date blank, existing date 4/11/2026 |
The run executes | The existing date is left in place, not cleared | LI-BL-CMS-004 |
IS-TC-T18 |
needs confirming | Reserved 5, brand blank, nothing reserved path | The run executes | Today: Item is on order with - None -/ our partner. Intended: the brand, or wording that omits it |
LI-BL-CMS-001IS-D1 |