Release Notes

LOGAN

Logistics Operations Gateway & Agent Network — the platform for high-value parcel handling and inbound air-cargo shipment management, integrated with WMG Connect. (Formerly HV Tracker.)

Live at logan.wmgai.cloud & hvtracker.wmgai.cloud · Current release v4.5 · Generated 3 Sep 2026
v4.5
3 Sep 2026
Latest

The WMG label is WMG’s own label, with the WMG number in the barcode

The previous release printed a label LOGAN designed. That was the wrong answer: the label people know is the one WMG Connect produces, and what was actually wrong with it was one thing — its barcode carried the carrier’s number, not ours. So the label is now WMG’s, unchanged in every respect except the two marks a scanner reads.
  • ImprovedSame label, same layout, same everything. Sender, recipient, DDU, DOOR, the COG reference, the product table, the totals — all of it is WMG’s, because the file is WMG’s. Only the barcode, the QR and the number printed under the barcode are changed. Nothing was redrawn or approximated.
  • FixedThe QR carried the carrier’s number too. Easy to miss, because it looks the same either way. Anyone scanning the QR on a relabelled parcel would have got the old number back, which is precisely the problem the barcode change was meant to end. It now carries the WMG number as well.
  • ImprovedThe number under the barcode matches the barcode. It has to: a label whose barcode says one thing and whose printed number says another is worse than one that is simply wrong, because the person reading it cannot tell which to believe.
  • ImprovedNothing is measured or hard-coded. The barcode and QR are replaced where they already sit, so they keep their exact position and size whatever the layout — and WMG chooses that layout from the parcel’s service type and carrier, so a fixed position would be right for one kind of parcel and quietly wrong for the next.
  • ImprovedIf the marks cannot be found, nothing is touched. The label is identified by shape, and anything ambiguous is refused with a message rather than guessed at. An unmodified carrier label is still a usable label; one with a barcode stamped over the wrong part of it is not.
  • FixedIt is offered in Returns Handling only. Relabelling is a returns problem — a returns parcel comes back wearing the last-mile carrier’s sticker, which is the whole reason the numbers diverge. Special Handling parcels arrive on a WMG air waybill and never needed it.
v4.4
3 Sep 2026

The parcel now gets a label with the WMG number as the barcode (superseded by v4.5)

Printing WMG Connect’s label put the right number on the box as text and the carrier’s number in the barcode — so a warehouse scan still read a number LOGAN does not hold. That endpoint takes no layout option and the barcode follows the assigned carrier, so there is no version of that request that fixes it. LOGAN prints its own.
  • NewA WMG label, generated by LOGAN. A 100 × 60 mm sticker: the WMG tracking number as a Code 128 barcode, the number again in large type underneath, and the parcel’s type, weight, MAWB, client and scan time. Where the parcel came in under a carrier’s number, that number is printed too, so the box can still be matched to the label at the printer.
  • ImprovedBoth labels are offered, and they are named for what they carry. WMG label barcodes the number LOGAN records the parcel under — that is the one a warehouse scan needs. Carrier label is WMG Connect’s, and its barcode is the courier’s own number, which is what their network scans. Replacing that would break a delivery, so nothing about it has changed. Both are on the scan banner and on every row of Scanned today.
  • ImprovedThe number is printed large under the bars. A scanner that will not read is the exact moment somebody types the number in instead, and it is usually not a moment with good light. It is set wide so 0 and O, 1 and I stay apart at a glance.
  • ImprovedA barcode too fine to scan is refused, not printed. Bars have a minimum readable width, and squeezing a long number below it produces a label that reads most of the time — which fails in ones and twos, at the shelf, weeks later. The label is sized to fit and then checked, and says so plainly if a number will not fit.
  • ImprovedNothing is fetched to build it. The label is composed here, so it needs no call to WMG Connect and prints fast enough to use in the middle of a scanning run. It is still only built when the button is pressed.
  • ImprovedThe page is the size of the sticker, not A4 with a label in the corner. That is what makes the browser’s own print dialog come out right on a thermal printer, and centred on a sheet.
v4.3
3 Sep 2026

A tracking number WMG Connect does not recognise is refused at the scanner

A barcode that is not a WMG number and not a carrier number either was still being saved, as a parcel with “details pending”. It stayed pending forever: nothing could describe it, reconcile it, bill it or print a label for it, and the operator found out days later. The scanner is the only point at which somebody is holding the box.
  • NewScan-in is refused when WMG Connect disowns the number. LOGAN asks the lookup that accepts both the WMG number and the carrier prefixes — SPWMEV, SPXSG and the rest — so when it answers “no such order”, no format WMG understands matches that barcode. Nothing is written. The message says to check the barcode or confirm the parcel belongs here, at the moment that is still possible.
  • ImprovedA number that matches more than one parcel is refused separately, and says to scan the WMG number instead. Two parcels behind one carrier number is a real upstream condition, and picking one of them silently is worse than stopping.
  • ImprovedWMG Connect being unreachable still lets the warehouse work. This is the important half. An outage, a network failure, a signing error or a clock drift all produce the same refusal code upstream as “order not found” — so refusing on the code alone would have stopped every scan in the building the first time our clock slipped. Only a specific, recognised answer about the number refuses a scan; everything else saves the parcel details-pending exactly as before, and errs towards goods-in continuing.
  • FixedA parcel with no published status is no longer reported as missing. WMG Connect shows only publicly visible events, so a real parcel whose events are all internal answers successfully with an empty history. That was being read as “not in Connect”. It is the lookup succeeding that proves the parcel exists, not the lookup returning something — and this is what keeps the refusal above from turning on parcels that are genuinely there.
v4.2
2 Sep 2026

Settle an OVR number without looking it up

The first real queue was seven numbers, six of them not Singapore-shaped. Some are worth a lookup; some are plainly not, and there was no way to say so without pretending to have checked.
  • NewLeave blank — one click beside Verify on each row. It says “claim nothing on this number”: the GST registration, status and exemption-code fields go out blank in every file, and the lines clear through ICA. It clears the block, so a shipment is not held up by a number nobody intends to check. Reversible — verifying afterwards restores the relief.
  • ImprovedIt is recorded as a decision, not a finding. “We established this is a UK VAT number” and “nobody looked” produce the same declaration but are not the same fact, and the register keeps them apart so it can be audited later. Like the foreign-number verdict, it does not expire.
  • FixedA parcel WMG had flagged LOST could be scanned in. The check reads the parcel’s status, and a parcel scanned off its carrier label often returned no status at all — so there was nothing to check and it was accepted. Scan-in now asks a second time using the lookup that accepts carrier numbers, and the guard has something to read.
  • Improved“WMG lookup failed” now says which failure it was. A parcel WMG Connect has never heard of and a parcel it holds but will not describe under that number are different problems — the first is a wrong number, the second is a normal returns parcel wearing a carrier label. The scan message tells them apart, and the parcel keeps its live status and carrier even when the full detail is unavailable.
  • NewPrint the WMG label from “Scanned today”. The prompt on the scan banner is replaced by the next scan, so a print missed during a run of scans could not be recovered without scanning the parcel again. Every row now carries a Label button, which also covers reprinting one that was damaged or went astray. The label is fetched only when the button is pressed.
  • NewThe IRAS register is a button at the top of the page, not buried inside a row. Their search is a form with no direct link to a result, so it lives in a second tab kept open beside this one — which only works if the way in is always in reach.
v4.1
2 Sep 2026

Parcel statuses are being refreshed again

The twice-daily status sweep had quietly stopped reaching any live parcel. Inventory and Tracker showed whatever the status was when the parcel was last touched by hand — a parcel delivered in August still read “customs cleared” three weeks later. Both jobs that talk to WMG about statuses were gone over.
  • FixedThe sweep was only ever seeing the oldest 1,000 parcels, and they were the wrong 1,000. It asked the database for every parcel still in play without limiting the request, which silently returns the first thousand and nothing else — no error, no warning. Of 2,515 parcels matching, 1,541 were already finished and, being the oldest, filled the entire allowance before a single live parcel was reached.
  • FixedFinished parcels no longer occupy the queue. A delivered parcel keeps its warehouse status forever — there is no “delivered” state on our side — so it stayed in the list of things to check indefinitely. Settled and archived parcels are now excluded by the database rather than filtered out afterwards, which is what let them crowd everything else out.
  • ImprovedThe sweep now reads every page. It no longer matters how many parcels are in flight: the request is paged, in a fixed order, so nothing falls off the end as the warehouse grows.
  • ImprovedThe first run after this will move a lot of parcels at once. Roughly a thousand that have been waiting are refreshed on the next sweep, so expect statuses across Inventory and Tracker to jump forward in one go — that is the backlog clearing, not a new problem.
  • ImprovedThe nightly reconcile no longer asks WMG about parcels it already knows are finished. It was requesting a live status for every parcel still filed as scanned-in, including ones already recorded as delivered — and it had everything it needed to reach the same conclusion without asking. A delivered parcel is archived on that run either way, so the request bought nothing. The run summary now reports how many were settled from what we already held.
  • FixedTracker, Inventory and Daily Task were all capped at 1,000 rows. The same unlimited request, on the three screens that list parcels. Tracker’s period cards summed those rows, so a three-month total read exactly 1,000 parcels and a dollar figure that was quietly short. Inventory searches the rows it has fetched, so past a thousand, searching a tracking number that genuinely exists came back empty — while the count chip above it, which was always right, said otherwise. Daily Task had no date window at all: a parcel past the thousandth never appeared on a pick list, so it never got picked. All three are paged now, and each says so plainly if it ever has more than it can show.
  • FixedThe reconcile had the same unlimited-request flaw. Narrower than the sweep, so it had not started losing rows yet — but it would have, silently, as the warehouse grew. It is paged now too, and that was the last request of its kind against the parcel table.
v4.0
2 Sep 2026

Print the WMG label for a parcel that arrived under a carrier’s number

Parcels turn up wearing whatever sticker the origin carrier put on them — SPWMEV, SPXSG and others. LOGAN has always recorded them under the WMG number, so on the shelf the box and every list disagreed, and nothing could close the gap.
  • NewScan in a carrier-labelled parcel and LOGAN offers the WMG label to print. One button on the scan banner, opening the real label as a PDF in a new tab where the browser’s own print dialog does the rest. Offered at the moment of the scan, because that is the only moment somebody is holding the parcel. Works the same in Special Handling and Returns Handling.
  • ImprovedThe prompt appears exactly when the numbers differ. Not from a list of known carrier prefixes — that list would be wrong the day a new carrier appears — but from WMG Connect having resolved the scan to a different number. A format nobody has enumerated is handled like the ones that are.
  • ImprovedThe printout names both numbers. The file is WMG1234567 (was SPWMEV999).pdf, so a stack of labels at the printer can still be matched to the right box. A file named only for the WMG number is unmatchable once three are queued.
  • ImprovedRecording was already right. Scan-in has always sent whatever was scanned to WMG Connect and stored the WMG number it resolved to, including the duplicate check — a carrier number has never reached the database. This release closes the other half: getting that number onto the box.
  • ImprovedThe label is fetched only when asked for. It is built on demand upstream and the payload is a whole PDF, so nothing is pulled for a scan where the label is already correct. A parcel whose WMG lookup failed offers nothing rather than guessing.
v3.9
2 Sep 2026

An invalid registration is not written into any file, and the client is told

Re-routing a line away from the GST-relief permit was only half of it. The number itself was still being carried into the listings and into the client manifest — and the only people who can stop it recurring are the client, who had no way of knowing.
  • FixedThe registration field goes out blank. Once a number is established as foreign, it is not written into the customs reference listing or the client manifest: registration, GST status and exemption code are all emitted empty. A file that states a GST registration is a file somebody acts on, and the number is not a Singapore one. The ICA listing never carried GST columns at all, so a line re-routed there already declared nothing — this closes the two files that did.
  • NewThe client is emailed when a line goes out as a non-OVR entry. One notice per shipment listing each number, the supplier that supplied it and how many lines it covered. It says what was done and why, and explicitly asks for nothing — the shipment has already gone, and a notice that asks for a reply it does not need is one people learn to skip. The point is the next manifest: these numbers come from the client’s merchants, so the correction has to happen there.
  • ImprovedA verified number is untouched, and so is one nobody has checked. Only an established finding blanks anything. A number still in the queue is emitted exactly as the manifest supplied it — and cannot be submitted anyway, because it blocks.
  • ImprovedThe notice never breaks a processing. It is sent after the manifest has been uploaded, and a mail failure is reported in the result rather than turning a successful upload into a failed one. The audit log records every one under Emails & Exports.
v3.8
2 Sep 2026

OVR numbers are checked before they reach a declaration — and most turn out not to be OVR numbers

A supplier’s GST registration number on a manifest routes that line to a GST-relief permit. Until now any text in the field was enough — a typo, a cancelled registration and a real one were indistinguishable, and the unchecked number went straight onto the customs declaration. Checking them turned up something worse: roughly three in four are not Singapore registrations at all. Alongside all that, the last places still carrying the old product name.
  • NewA shipment cannot be processed until every OVR number on it has been verified. Blocked, not corrected: quietly re-routing the line would change what is declared without anyone deciding to, while a shipment that will not upload is a failure somebody has to answer. The block card lists the numbers holding it and how many lines each one covers.
  • NewVerified once, remembered for a year. Verification is per number, not per line and not per client. The registration belongs to the overseas merchant, so the same number arriving through a second client is already cleared — and the numbers that matter recur heavily: one of them covers twenty-three shipments on its own.
  • NewOVR Register — every number ever checked, what IRAS said, who checked it and when it lapses. Failed checks are kept too: “IRAS did not have this in March” is the more valuable half of what was learned, and storing only the passes would put the same bad number back in the queue every month.
  • FixedA foreign tax number claims nothing. The first look at real manifests found that most numbers in the column are the vendor’s own UK VAT number, not a Singapore registration — and any text there used to route the line to the GST-relief permit. Once somebody records a number as foreign, the lines carrying it clear through ICA instead: declaring less relief than the manifest asked for, never more, and only because a person decided so.
  • New“Not a Singapore OVR number” — a fourth answer when verifying, alongside registered, not found and deregistered. Without it a foreign number could only be recorded as not found, which blocks a shipment and never lapses: the gate would have jammed the manifests it was built to protect. This answer clears the block and grants no relief, which is the honest reading of both.
  • ImprovedLines already sorted are put right. Recording an answer re-routes every affected line on shipments not yet uploaded, wherever they are, and says how many moved. Shipments already uploaded are left exactly as they were and named in the message — the declaration has gone, and quietly changing our copy of it would only mean our records and Customs’ disagree.
  • NewChecks expire after twelve months, with a warning from thirty days out so re-verification happens before it blocks a shipment. A registration can be cancelled, and “checked once in 2025” is not a statement about today. Two answers never expire: a number IRAS did not show as registered does not lapse back into merely-unchecked, and a foreign number will not become a Singapore one — if that vendor ever registers here they send a different number, checked on its own.
  • ImprovedA blank number is an answer, not a gap. A line with no registration is a sender who is not OVR-registered: it claims no relief, clears through ICA, and is never queued. Only the lines actually claiming something are asked about — on a 594-line manifest that was seven of them.
  • ImprovedThe lookup is where the work is. IRAS’s register is a search form with no addressable result, so LOGAN cannot query it — it copies the number for you, opens the register, and records what you read there. What is typed in is the evidence; a tick on its own cannot be reconciled a year later.
  • FixedEmails to clients said “HV Tracker”. The return notice, the deadline reminder and every other outbound template carried the retired name in the header — the one part of the system a client sees most often was the last part still using it. Every template now says LOGAN, and a check in the test suite fails the build if the old name reappears anywhere in outbound mail.
  • FixedEmail body copy no longer calls every parcel “high-value”. The wording predates Returns Handling and described the whole business as one stream. Notices now name the handling stream the parcel is actually in, so a Returns client is not told their goods are being held as high-value cargo.
  • FixedThe staging prompt on Process appeared twice, which also made the parcel count look doubled. Display only — nothing was staged twice, and nothing could be: a parcel can appear on one manifest and the database refuses the second attempt outright. But a screen that shows a number twice is a screen nobody can use to check a number.
  • NewA user guide for Special Handling and Returns Handling — written for people outside the warehouse, covering what each stream is, what the statuses mean and what a client can do themselves. Shareable as a PDF.
v3.7
24 Aug 2026

Storage above the included area is now charged

Storage covered up to 100 sq ft and the space above it was not billed at all — a client using 260 sq ft paid the same as one using 40, and nothing anywhere said so.
  • FixedSpace above the included allowance is charged. This was the one place LOGAN could produce a quietly wrong invoice rather than a loud failure: everything else refuses when it lacks something, but storage simply under-billed and looked finished. The allowance and the price of the excess are set per client, because a second client on different terms should not need a code change.
  • NewStorage area — the occupied floor area, entered each month like the Loyang pallet count. LOGAN counts parcels, not square feet, and a count does not imply an area: a pallet of watches and a pallet of headphones take up the same floor. So Operations measure it and everything after that is automatic. Ops enter it; PMCS see it read-only, because the person reviewing an invoice should not be able to change the quantity on it.
  • NewA month with no measurement blocks the invoice — and blocks it straight away rather than waiting for the month to close. A forgotten pallet count produces an invoice with an obviously missing line; a forgotten measurement produces one that looks complete and is short by whatever the client overflowed, which is the more dangerous of the two.
  • ImprovedNothing changes for a client on the flat plan. Leaving the included area blank keeps storage exactly as it was: no monthly measurement, no excess, no blocked invoice. Both existing clients stay there until somebody sets an allowance — making the measurement a monthly duty for a client who never approaches the limit is a chore that gets skipped, and a block nobody expects teaches people to ignore blocks.
  • ImprovedPart-used blocks round up. Where the excess is sold in blocks rather than by the square foot, 101 sq ft over a 100 sq ft allowance is one block and 151 is two — a part-used block could not have been sold to anybody else. Where it is priced per square foot, nothing rounds.
v3.6
21 Aug 2026

Billing you can add a client to, and figures that are all there

The first month of real billing found three things: totals that stopped at a thousand charges, a dashboard that did not say which month a column was, and a second client that needed hand-written SQL to exist.
  • FixedTotals were stopping at 1,000 charges. A busy month raises more than that, and the database returns the first thousand with no error and no warning — so July read as 998 handling movements and SGD 475.45 when it was 1,097 and SGD 490.30. Every figure on the dashboard, on an invoice and in the backfill is now read in full, and a read that cannot be completed refuses and says so rather than quietly invoicing the part it managed. The charges themselves were always recorded correctly; only the reading of them was short.
  • FixedReturns Handling read as SGD 0.00 on the dashboard while its invoice showed the pallet charge. The dashboard was summing per-parcel charges, which Returns Handling does not raise — it is billed by pallet-month. Both now come from the same place, so the dashboard and the invoice cannot disagree.
  • ImprovedEvery quantity column now says which month it is. The dashboard headed this month's figures “Quantity” and last month's with its month name, which read as one number and its label — July's 540 parcels were taken for June's. The two are now named “Qty · July 2026” and “Was · June 2026”, with the comparison ruled off from the period's own figures.
  • ImprovedA month before the ledger existed says so. An empty comparison column means either that nothing was handled or that nothing was recording, and those are not the same fact. Where the month being compared against predates billing, the dashboard now states it, and states why those months were left un-backfilled: LOGAN holds only part of what their invoices covered, so filling them in would produce figures that look complete and are short.
  • NewAdd a client from Invoice Setup. Setting up a client's billing was a database insert somebody had to write by hand; it is now a form. The WMG Connect client is picked from the live list rather than typed — it decides which parcels bill to the setup and cannot be changed afterwards — and choosing one fills in a starting contact name and billing code. Special Handling and Returns Handling bring their own tax type, wording and job title, because one is zero-rated and the other is not. A new setup bills nothing until a rate card is added to it, which the form says.
  • ImprovedTotals say when they exclude GST. LOGAN leaves the tax for Xero to compute, so a Returns Handling total of SGD 40.00 becomes SGD 43.60 once Xero applies the rate. Where a client's charges are taxable, the dashboard and the invoice now say so — reconciling a screen against a Xero invoice and finding it 9% short is an afternoon nobody needs.
  • ImprovedLedger exports are one file per client. Reconciling is done against a single client's invoice, so a file covering everyone had to be split before it was any use — and a spreadsheet of raw tracking numbers that quietly contains a second client's parcels is the kind of thing that gets forwarded. Choose the client, and the file is named for them. Transactions can still be browsed across all clients, with a Client column when they are, and a separate clearly-marked button exports every client in one file for internal checks.
  • ImprovedBackfill a period from the dashboard. Bringing a past month into the ledger needed a command line and a shared secret. Admins can now do it from the period they are looking at, with the same protection against charging anything twice.
v3.5
19 Aug 2026

Billing for Special Handling and Returns Handling

Storage, sorting and handling are now charged automatically from what the warehouse already does, assembled into a Xero-ready invoice, reviewed by PMCS and handed to Finance.
  • NewBilling — a new section in the sidebar. Charges are raised at the moment the work happens rather than counted up at month end: Handling In when a Special Handling parcel is scanned in, Handling Out when it is released, Sorting when a MAWB's manifest is uploaded to WMG Connect, and Storage once a month for any client that had stock. Nothing is polled and nothing is inferred — these are the same actions the warehouse was already doing.
  • NewEvery charge is recorded once, and cannot be recorded twice. A parcel scanned in June and released in July puts one charge on June's invoice and one on July's, which a month-end count cannot express. A double click, a retried action or a re-run of the monthly job all produce exactly one charge — the database refuses the second, rather than the code remembering to check.
  • NewInvoices are drafted for you, reviewed by PMCS, then submitted to Finance with the Xero file attached. Submitting re-checks the figures first, so what goes out is what was reviewed and not what it became while the screen was open. Once submitted an invoice is frozen: a correction is a void and reissue, never a quiet edit, because Finance already holds the original file.
  • NewThe Xero file matches the one Finance produces by hand — all 29 columns, the invoice number left for Xero to allocate, dates written as real dates rather than text, and the due date calculated from the client's payment terms instead of typed. Both XLSX and CSV come from the same figures, so they cannot disagree.
  • NewInvoice Setup — each client's Xero coding, payment terms, invoice wording and rate card in one place. Adding a second client is filling this in once; nothing in the code needs to change for their invoices to start generating. Rates are dated rather than overwritten, so re-opening a closed month reproduces the invoice it was actually billed at.
  • NewRH pallet counts — Loyang return storage is billed per pallet, a number LOGAN cannot know, so Operations enter it and everything after that is automatic. Ops enter it; PMCS see it read-only, because the person reviewing an invoice should not also be able to change the quantity on it. A month with no count entered leaves the invoice blocked rather than sending a bill for nothing.
  • NewTransactions — every charge ever raised, searchable by tracking number or MAWB, with the whole period exportable for reconciling against Finance's own records. Withdrawn charges are kept and struck through with their reason, never deleted: an invoice that dropped a line without trace could not be reconciled against the month it covers.
  • ImprovedThe dashboard shows last month beside this month. A total on its own says nothing — sorting 4,770 is either normal or three times normal, and the invoice does not say which. A charge that moved sharply, or stopped being raised at all, is marked. Parcels whose client matches no Invoice Setup are listed too: those bill nobody and raise no error, which otherwise looks exactly like a quiet month.
  • ImprovedCancelling a shipment now withdraws its sorting charge, provided it has not already been invoiced. Once billed, correcting it is a decision somebody makes rather than a side effect of pressing Cancel.
v3.4
16 Aug 2026

Closing a shipment without sending anything

Shipments whose cargo moved weeks ago can now be closed off in one action, without pushing stale statuses to WMG Connect or Customs — and without deleting the record of what happened.
  • NewCancel a shipment. Some shipments are never going to be processed: the cargo cleared weeks ago, the pre-alert was a duplicate, the manifest was superseded. Running one through Process now would upload a manifest to WMG Connect and email a listing to ICA for goods that have long since moved — putting statuses into other people's systems that are simply wrong by the time they arrive. Cancelling closes the shipment in LOGAN and sends nothing at all. Available on the shipment's own page, and by ticking several at once on the Shipments list for clearing a backlog. A reason is required, and it is recorded against each shipment, because somebody will read it months from now.
  • NewView cancelled (top right of Shipments) — cancelled shipments are archived, not deleted. They keep their manifest lines, documents, notes and audit trail, and stay readable here. The record of a MAWB that was abandoned is worth as much as the record of one that was filed; “where did that shipment go” is the first question anyone asks afterwards.
  • ImprovedCancelling releases any Special Handling parcels staged onto the shipment. They return to the staging pool and can be added to a new MAWB, rather than staying locked to a shipment nobody will ever process. The parcels themselves are untouched — nothing is deleted and no parcel status changes — but they do become pickable again, and the confirmation says how many.
  • ImprovedA shipment that has already been declared cannot be cancelled. Once its manifest is filed with WMG Connect and its listing sent to ICA, both exist outside LOGAN whatever this system later says — so cancelling is refused, and says why. The check reads the filing itself rather than the shipment's status, and is applied again at the moment of writing, so a shipment processed by someone else while the list was open is skipped rather than closed out from under a declaration that has just gone out.
  • ImprovedCancelling is limited to Admin and PMCS. Deciding that goods will never be declared is a customs decision, not a warehouse one — deliberately narrower than manifest intake, which every Shipment Management role can do.
v3.3
13 Aug 2026

One client, one email — plus in-app feedback and a monthly AI ceiling

Automated mail is now scoped to the client it concerns, a client's name means the same thing everywhere in the app, and anyone on the team can report a problem from the page they hit it on.
  • FixedTwo automated emails could send one client another client's parcels. The HV Parcel Deadline Reminder and the Return Notice were built when the app served a single client: each sent one unscoped table to a fixed address belonging to one particular client, so any other client's parcels caught in the same batch went to them along with tracking numbers, declared values and remarks. Both now work the way the daily Client Listing already did — a WMG-internal copy covering everything, then one email per client containing only that client's rows. An audit of what had already gone out found the leak had not yet fired, but it was days away as a second client's parcels aged into the window.
  • FixedClient Users were being copied on all-client emails. Two client users had been added to the CC list for those same two notices. An all-clients table can no longer reach a client user whatever the CC list says — the exclusion is structural, not a matter of maintaining the list correctly.
  • NewClient Names (user menu → Client names) — a parcel carries a client's name, not an id, and names drift: “DAI POST” and “Daipost Exchange” were two different clients to every part of the app, splitting one client into two rows in the listing, two emails and two entries in every picker. Each spelling can now be tied to its WMG Connect client, seeded from Connect's own list in one click. Nothing guesses: mapping a name is a decision somebody makes, because a rule loose enough to bridge a near-miss is loose enough to map “DEC” onto “DEC SG” and hand one client another's parcels.
  • ImprovedA client's notices now find their users by identity, not by spelling. Recipients are matched on the WMG Connect client id where one is known, so a tag typed slightly differently from what the parcels say no longer means a client silently receives none of their own notices — which looked exactly like a client with nothing to report. Where one name resolves to two different Connect clients the email goes to nobody and says so: a missing email is recoverable, a misdirected one is not.
  • NewSend feedback — report a bug, suggest an improvement, ask a question, from the user menu or the button at the bottom-right of any page. Attach screenshots by dragging, browsing, or simply pasting after PrtSc. It captures the page, mode and version so nobody has to describe where they were, and lists everything it will send before you send it. Your text is saved before any screenshot uploads, so a failed attachment never loses the report. Reports go to the WMG product team; Client Users do not see it.
  • NewFeedback (user menu → Feedback, Admin only) — the queue, sorted by severity then oldest, so a blocking report from three weeks ago is not buried under this morning's cosmetic one. Each report is classified automatically for severity, effort and likely area. Approving one requires writing a build brief in your own words: that brief is the only text that is ever acted on, and the original report is kept for reference rather than passed along.
  • NewAI spending is capped at US$50 a month. One ceiling for the whole app rather than one per feature, since everything bills the same account. Past the limit, AI calls stop rather than quietly falling back to something cheaper — a classification that did not happen has to be visible, or a shipment looks reviewed when it is not. The AI Spend page leads with the month's position against the cap.
  • NewItems at or above S$400 are marked HV on return and disposal manifests, with a count at the top, so high-value goods are picked out for special handling rather than found by reading down a column of numbers. The mark is a word, not a colour.
  • FixedA pick manifest could be seen once and never again. The only link to a completed Return or Disposal manifest was in the confirmation banner shown the instant the pick was submitted — navigate away and the document was unreachable, with nothing in the audit log to click. Daily Task now lists recent pick sessions with a manifest link on each, so any of them can be re-opened and re-printed.
  • FixedThe ICA, Customs Reference and HVGBOOKCD listings are now genuine Excel 97-2003 files. They carried an .xls name but modern .xlsx contents, which the receiving systems can reject outright. The name and the format now agree.
  • NewEmail Templates (Settings → Email Templates) — who each automated email goes to and the words it uses, on one page instead of two. Adds templates for the ICA manifest, the declarant listings and the transporter instruction. The ICA subject line is deliberately fixed: ICA's system matches it exactly to recognise a manifest submission, so an edit there would not change how it reads — it would stop the declaration being picked up.
  • NewTransport lodgement — one truck carrying several MAWBs now produces a single Delivery Order rather than one per shipment, with the operator's own transport costs captured at lodgement and raised as one purchase order against every job on the run. The delivery instruction to the transporter goes out from the same step.
  • ImprovedThe HS classifier no longer teaches itself unsupervised. Accepted AI picks previously wrote straight into the code memory with nobody in the loop, so one wrong classification could quietly become the rule for every later shipment. Suggestions now land in an Approval Space (Settings → HS Logic) for a person to accept or reject before anything is learned.
  • ImprovedReadability and keyboard use across the app. Faded grey text and several coloured buttons did not meet the contrast standard we hold ourselves to and have been darkened; a visible focus ring now follows the keyboard everywhere, including on the dark sidebar; and controls that read identically to a screen reader — rows of “Remove”, repeated “Download PDF” links — now say what each one acts on.
v3.2
30 Jul 2026

AI-first HS classification, item-level manifests, and a live AI cost ledger

The AI now decides most HS codes and people handle only the cases that genuinely need judgement — with the exact cost of every call on the record. Plus self-service password reset.
  • FixedPre-alerts went to the wrong broker. WMG clears through more than one customs broker and which one depends on the client — DEC and Daipost through Empire Bison, Yueto and ZTO through KCI — but every pre-alert was addressed to Empire Bison regardless. A Yueto shipment asked the wrong company to collect someone else's cargo, and nothing on screen suggested it. The pre-alert now follows the client's broker, and the email body is addressed to whoever actually receives it. The lodgement and booking emails are unchanged: those are directed by the delivery-partner and transport selections on the shipment, which the client has no bearing on.
  • NewA shipment with no Client cannot be pre-alerted. Which broker a pre-alert belongs to is decided by the client, so without one there is nothing to route on and the send is refused until someone sets it. The Dispatch page says which broker each shipment resolved to, so the routing is visible before anything is sent rather than after. Lodgement and booking are unaffected — both are directed by an explicit selection, so a missing client cannot make either ambiguous.
  • NewPre-alert Brokers (Settings → Pre-alert Brokers) — which client routes to which broker, editable, so onboarding a client is a row rather than a release. Match text is compared whole-word: a DEC rule matches “DEC SG” but not “Decor Holdings”. A client matching no rule keeps the previous behaviour and goes to Empire Bison, and the Dispatch page flags when that default was used.
  • FixedClient manifests were uploaded against the wrong ARIA account. The upload resolved the account from the selected manifest template rather than the shipment's client — two independent things. Clients whose name did not happen to match a template could not upload at all (“Could not resolve an ARIA client_id”, naming the one field that was correct); worse, when it did resolve it resolved to whichever client shared the template's name, so a manifest could be filed against another client's account and succeed silently. The Process page now shows which client and which ARIA account it will upload to.
  • NewForgot password — a proper self-service reset starting at the login page. Enter your email, follow the link, choose a new password (minimum 12 characters). The link works on a different device from the one that requested it, and the page always reports the same thing whether or not the address is registered, so it cannot be used to find out who holds an account. Nobody needs an admin to get back in.
  • ImprovedEditing a declared value is now Admin-only. Correcting an HS code says how goods are classified; restating a value changes what is declared to Customs. Reviewers keep the first and no longer have the second — a separate permission, not a UI tweak, so it holds on the server as well as in the page.
  • NewAI-first HS selection — the AI now classifies lines outright rather than only suggesting to a reviewer. It is still constrained to codes already looked up against the Singapore Customs master (or it answers unsure), and three carve-outs always go to a person: a code that is dutiable, controlled or not in the tariff, a restricted-sounding description whatever the code says, and any parcel at or above S$400, which needs a permit. Every line shows how its code was decided — rule, memory, keyword, AI or human.
  • NewAI Spend (Settings → AI Spend) — what the classifier actually costs, taken from the token counts the Anthropic API reports on each response. Total, average per call, projected monthly run-rate, and breakdowns by feature, model and day. These are billed figures, not estimates, so they reconcile against the invoice. A cumulative per-shipment cost also appears on the HS Review page, and each run reports its own cost when it finishes.
  • ImprovedThe AI is asked once per distinct description, not once per line. A 2,200-row item-level manifest is usually only a few hundred distinct products, and every accepted pick is learned — so the same description on the next shipment is resolved for free. Free keyword matching is still tried first.
  • ImprovedItem-level customs manifests — where the source manifest itemises a parcel, the generated listings now carry one row per item with unit price and quantity, instead of collapsing the parcel to a single line. A parcel-level manifest is treated as one item per parcel, exactly as before.
  • FixedThe S$400 threshold is assessed on the parcel, not the item. Two S$300 items in one parcel are a S$600 consignment needing a permit — previously each item was tested alone and both passed as low-value. Cheap items inside an expensive parcel are now held for review along with the rest of the consignment.
  • FixedImplausible FX rates are now rejected on arrival. A wrong-period MAS response had been stored as the current week's rates (USD/SGD 2.02 — a coherent snapshot of about 1990), and because the whole set was internally consistent nothing downstream noticed. Rates are now range-checked per currency, checked against the previous week, and the whole set is discarded if USD is wrong; a set with no recognisable date field is refused outright rather than guessing which row is newest.
  • FixedGenerated customs files are cross-footed before they go out — parcel counts, value totals and price×quantity are reconciled against the source manifest and any mismatch is reported. The check had been written but was never actually running.
v3.1
29 Jul 2026

Ops & PMCS — a split workflow for Shipment Management

Shipment Management now has two operating roles with their own sections: Ops own the cargo, PMCS own the paperwork.
  • NewPMCS User role — the customs / declarant side. Full Special Handling & Returns Handling parcel UI, plus Tracker and Audit, and the customs half of Shipment Management (Review and Process). PMCS may review but never lodge.
  • ImprovedWMG User is now Ops User — a display change only; no account, permission or history is affected.
  • NewPer-role SM sections — Ops see Dashboard, Shipments, Arrival, Lodgement, Dispatch, Performance and Audit Log; PMCS see Dashboard, Shipments, Review, Process, Dispatch, Performance and Audit Log; Settings is Admin-only. Enforced on the pages themselves, not just hidden in the sidebar.
  • NewArrival — a section listing every shipment with no warehouse arrival recorded, soonest ETA first, with anything past its ETA marked due. These are the shipments holding up their own workflow.
  • NewSH Scan Completed — a second arrival milestone beside Record Warehouse Arrival. Cargo sits on the dock between landing and being scanned, and the piece count is only trustworthy after the scan, so the two are now recorded separately — and both are required before a shipment can be processed. The Process page names whichever is missing.
  • NewEditable dispatch email templates — the wording of all four partner emails (Empire Bison pre-alert stages A and B, parcel lodgement, booking estimate) is now edited under Settings → Partner Dispatch, with placeholders such as {{MAWB}} and {{JOB_NO}}. Changing what a partner reads no longer needs a deploy. Recipients and attachments stay driven by the shipment.
  • NewPaperwork on every Dispatch row — download the Delivery Order and all three customs manifests (ICA / REFERENCE / HVG) straight from the dispatch log, without opening the shipment.
  • NewOps & PMCS workflow guide — the seven stages, the four hand-over points, and a normal day for each role. See docs/guides/sm-workflow-guide.html.
  • ImprovedWeekly FX, pinned per shipment — Singapore Customs values a shipment at the week's rate, so LOGAN fetches one MAS weekly set every Monday 08:00 SGT and applies it to everything received that week. A re-run weeks later can no longer silently re-price a shipment that has already been declared.
  • ImprovedEditable declared values in HS review, for lines the original manifest left blank or wrong — recalculated in SGD at the shipment's pinned weekly rate.
  • FixedFlight tracking missed early-morning SIN arrivals. Arrivals before 08:00 SGT fall on the previous UTC day, so every sweep discarded them and the shipment stayed On Schedule after it had landed. Occurrences are now matched by proximity, not calendar day.
  • FixedInventory Export now matches what is on screen — the export follows the active tab and period instead of exporting a wider set.
  • Fixed“HS not recognized” on valid codes. The badge had no validity signal to read and fell through to the wrong colour; recognised codes now show correctly, and dutiable and recognition states have separate legends.
v3.0
26 Jul 2026

LOGAN — Shipment Management & Flight Tracking

The platform is now LOGAN (Logistics Operations Gateway & Agent Network), adding an end-to-end inbound air-cargo module.
  • NewShipment Management — a full inbound air-cargo workflow (Admin & WMG User only — not visible to Client Users): pre-alert → HS-code review → customs listings → client-manifest processing → warehouse arrival → lodgement → partner dispatch.
  • NewHS-code review — AI-assisted classification with inline correction, a review gate and keyword learning; generates the per-shipment customs listings (ICA / CUSTOMS REFERENCE / HVGBOOKCD) for TradeNet, with Special-Handling parcels excluded.
  • NewPending Lodgement — pick a transport agent (Empire Bison / TSC) and the final WMG carrier, then assign: records the Lodgement ATA, generates the Delivery Order, and pushes the parcels to WMG Connect (assign-partner, status CI_CF).
  • NewPartner dispatch — Empire Bison, last-mile vendor (J&T / SPX / TXL / SingPost) and booking pre-alerts sent as real emails, with UI-editable recipients, a mandatory PMCS copy on every message, and an Ops-Manager WhatsApp nudge on the EB / TSC tracks.
  • NewLive flight tracking — pre-alerts (ingested via API by the AI agent) carry the flight number; an hourly AirLabs sweep refreshes status & ETA and advances shipments to In transit, shown on a live Incoming flights board on the dashboard.
  • NewDashboard, Processed & Audit — KPI tiles, arrival-aging, arrival→assignment turnaround productivity, a shipment notes timeline, an SM-specific Audit log, and configurable SLA / recipient / carrier settings.
  • ImprovedRebrand to LOGAN — new name, logo and identity across the app and emails. Still reachable at hvtracker.wmgai.cloud, and now at logan.wmgai.cloud.
v2.2
21 Jul 2026

Self-Collection, Tracker & Partner Assignment

Hand parcels over the counter, follow every delivery to its outcome, and assign carriers automatically.
  • NewSelf-collection — a blue Collection action on Inventory (Client User & Admin) releases a parcel for self-collection (WMG CC_SC), and a new Collection tab tracks it. Available in both Special Handling and Returns Handling.
  • NewSelf-Collect page — WMG staff verify the consignee’s name, mobile & postal code (from WMG Connect) at the counter, then Confirm completes the hand-over (WMG OK_DD). Collected parcels move to a Collected tab; the whole flow is written to the Audit log.
  • NewTracker (Admin only) — follows every picked-for-delivery parcel to its final outcome by WMG status, bucketed Delivery Failed / Delivered / Lost / Others with a count and SGD value total per bucket. Shows the assigned partner, product description & HS code (from WMG Connect), and aging from the Pick-for-Delivery date. Both streams.
  • NewPeriod selector — a rolling window (Last 7 days / Last 30 days / Last 3 months) on Tracker and Inventory that bounds how much data is shown, in both streams.
  • ImprovedAutomatic delivery-partner assignment — Pick for Delivery / Redelivery now assigns the chosen partner in WMG Connect (assign-partner) alongside the CI_CF status push. WMG Delivery advances to CI_CF with no external partner.
  • NewRedelivery charges consent — the Redelivery confirmation now requires acknowledging that redelivery incurs additional charges; the acknowledgement is recorded in the Audit log.
v2.1
20 Jul 2026

Disposal & Returns

Send parcels for disposal or return from Inventory, and see the full lifecycle at a glance.
  • NewInventory filter tabs — Active, Delivery (Redelivery in Returns Handling), Return and Dispose. Inventory is now the full lifecycle record: parcels picked for delivery, returned or disposed stay visible under their tab instead of disappearing.
  • NewDispose & Return actions on the Active tab — a black Dispose and a red Return button alongside Release / Redelivery. Like Release, these are Client User & Admin only.
  • NewPick for Disposal on Daily Task — a new work list; submitting it generates a Disposal Manifest (PDF) for you to print and sign.
  • NewSigned disposal manifest — lists Tracking No · Declared Value · Scan-In Date · Disposal Date, records who instructed and who picked the disposal and the confirmation time, totals the declared value per currency and in SGD, and carries two signature boxes.
  • ImprovedEvery dispose, return and disposal pick is written to the Audit log. Available in both Special Handling and Returns Handling.
v2.0
17 Jul 2026

Inventory Integrity & WMG Alignment

Cleaner records, multi-carrier scanning, and automatic status reconciliation.
  • NewSender Name & Client on Inventory — both streams now show the parcel’s Sender Name and a Client tag. (Special Handling drops the Incoterm column for it; Returns Handling shows it in place of MAWB.)
  • NewScan any carrier number — WMG Connect resolves a Shopee / SingPost / carrier tracking number to its WMG number, and parcels are always stored and listed by their WMG-prefix number.
  • NewLost parcels blocked at scan-in — a parcel WMG has flagged lost (LP_LP) is rejected and not added to the system.
  • NewCompleted deliveries auto-archive — once a parcel is picked for delivery its journey has ended: it’s archived and drops out of Inventory, the daily listing and the return sweep.
  • NewWMG status reconciliation — a daily check compares every inventory parcel against its live WMG status: it realigns in-progress parcels (Special Handling → AD_PP, Returns Handling return-scan → CI_H), archives parcels already delivered or dispatched, and emails PMCS any status anomaly to investigate.
v1.9
17 Jul 2026

Inventory Clarity

A cleaner inventory and tighter status alignment.
  • NewSummary counters at the top of Inventory — total in warehouse, missing data, ageing ≥ 10 days, ageing ≥ 14 days — colour-matched to the row shading.
  • ImprovedInventory now lists only parcels awaiting release. Once a parcel is released or marked for return it moves to the Daily Task lists and drops out of Inventory.
  • ImprovedMissing-data rows are now purple (previously pink) — clearly distinct from the red 14-day rows.
  • ImprovedStatus alignment — releasing a parcel now records AD_CS, and picking records CI_CF (delivery) / HN_HN (return), so a parcel’s stored status always matches its stage.
v1.8
17 Jul 2026

Returns & Access

A return-sweep fix, plus easier access to these notes.
  • FixedReleased parcels are never auto-returned. A parcel that has been released for delivery now stays on the For-Delivery list and is no longer moved to Marked for Return when it passes the 30-day mark. The nightly return sweep only touches parcels still awaiting release.
  • NewRelease notes on the sign-in page — these notes are now linked from the bottom of the login screen, so anyone can see what’s changed without signing in.
v1.7
17 Jul 2026

Per-Client Daily Listing

The daily report now respects client scoping.
  • ImprovedThe daily 18:00 listing is renamed “Client Listing” (was “DAIPOST Listing”) — client-agnostic terminology.
  • NewPer-client emails — each client’s tagged Client Users receive only their own client’s parcel data (scanned in, picked for delivery, picked for return), and only on days that client had activity.
  • NewWMG-internal all-in-one report — WMG recipients continue to receive a single listing covering every client, sent separately for Special Handling and Returns Handling.
v1.6
17 Jul 2026

Client Scoping & Labelling

Per-client visibility and neutral terminology.
  • NewClient-scoped Client Users — each Client User is tagged to a specific client and sees only that client’s parcels (inventory list, counts, search & export). Admins set the client when creating or editing a Client User; Admins & WMG Users continue to see everything.
  • ImprovedThe parcel status column is now labelled “Client Status” — client-agnostic terminology.
v1.5
16 Jul 2026

Dual-Mode — Special Handling & Returns Handling

The app now runs two parallel streams, switched from a single toggle.
  • NewSH / RH toggle at the top of the page. Special Handling is the existing workflow; Returns Handling is a parallel stream for returns & redelivery. Every page — Scan In, Inventory, Daily Task, emails, Audit — scopes to the selected mode.
  • NewReturns Handling: Scan In with no MAWB (sets WMG status CI_H); an RH-only Inventory whose green Release becomes a purple Redelivery action that confirms & updates the consignee’s phone, address & postal code in WMG Connect; and a Daily Task with Pick for Redelivery and Pick for Return.
  • NewPer-mode emails & Audit — each mode sends its own daily report, reminders and SLA warning, and the Audit shows that mode’s actions. (Returns Handling has no SAC-manifest email.)
  • NewUser menu — click your email (top-right) for Change Password, plus Users & FX Rates shortcuts for admins.
  • ImprovedRenamed to High Visibility Parcel Tracking; sidebar decluttered (Users & FX Rates moved into the user menu).
v1.4
12 Jul 2026

Controls & Quality Assurance

Oversight tools and a safety net for ageing parcels.
  • NewDaily SLA warning to business@ — flags parcels waiting more than 24 business hours (excluding Sundays & Singapore public holidays) on the Daily Task lists, with a listing attached.
  • NewPer-email CC recipients — admins can copy any system users on each automated email, from a new Email Recipients page.
  • NewThe Audit page now logs scan-in, release and picks (not just emails/exports), with filters by event, actor, date and tracking number, plus pagination.
  • NewTracking-number search on the Inventory page.
  • FixedReport time window — activity after 18:00 now rolls into the next day’s report instead of being missed in a gap.
v1.3
8 Jul 2026

Automation, Reporting & Audit

Less manual work; a clearer picture of the day.
  • ImprovedThe daily 18:00 DAIPOST listing now also covers everything Picked for Delivery and Picked for Return that day, each on its own sheet.
  • New“No data” handling — parcels awaiting their SAC manifest show as pink rows with a Refresh button to re-pull once uploaded, plus a daily 17:00 email asking DAI to furnish missing manifests.
  • NewInventory Export — email yourself an Excel of the current inventory; every export and automatic email is recorded in the Audit log.
  • NewWMG status pushes at each step — Scan-in AD_PP, Release AD_CS, Pick for Delivery CI_CF, Pick for Return HN_HN.
  • NewManifest-upload reminder on the Scan In page.
v1.2
8 Jul 2026

One-Touch Scanning & Data Quality

Faster scanning and cleaner classification.
  • ImprovedMaster Air Waybill entered once at the top of Scan In — every scan inherits it, auto-fills the declared value from WMG, and defaults Incoterm DDU / currency USD for near one-touch scanning.
  • ImprovedLow-value classification converts declared value to SGD via live FX against an S$400 cut-off; FX rates are admin-managed.
  • ImprovedPinned the Release action column so it never scrolls off-screen.
  • NewBulk DAIPOST import and a WMG detail backfill to seed and enrich existing inventory.
v1.0
7 Jul 2026

Launch

The platform goes live.
  • NewLive at hvtracker.wmgai.cloud: Scan In, Inventory (aging, 14-day deadline, 30-day return, Release), Daily Task, and Pick for Delivery / Return — all wired to WMG Connect (securely signed) with live delivery-partner lookup.
  • NewThree roles — Admin, WMG User, Client User — with email sign-in and in-app user creation.
  • NewAutomated daily DAIPOST listing to DAI (cc PMCS) at 18:00, 14-day deadline reminders, and a 30-day auto-return sweep.