toga-ai 1.0.758 → 1.0.759
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -6,7 +6,7 @@ project: Library
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: feature
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-09-
|
|
9
|
+
updated: 2026-09-03
|
|
10
10
|
owners: [dfranks, jcardinal, kyalamarthi]
|
|
11
11
|
files:
|
|
12
12
|
- library/app/api/netsuite/rest.php
|
|
@@ -197,6 +197,23 @@ Forecast2 tables already store.
|
|
|
197
197
|
same underlying trap of reusing a sales-order-shaped assumption on a purchase order. Full
|
|
198
198
|
engine-side impact + the tier-wide per-client backfill live on the
|
|
199
199
|
[per-client-sync doc](../../worker/features/netsuite-togasupply-per-client-sync.md).
|
|
200
|
+
- **⚠ The three detail-fetch shims were inconsistent about `->lastModifiedDate` — two omitted it and
|
|
201
|
+
froze their sections once a per-record cursor started reading it (fixed 2026-09-03).**
|
|
202
|
+
`fetchItemReceiptById` set `$shim->lastModifiedDate` from its REST header, but **`fetchItemFulfillmentById`
|
|
203
|
+
and `fetchInventoryAdjustmentById` did not** (and InventoryAdjustment's SuiteQL header didn't even SELECT
|
|
204
|
+
`lastmodifieddate`). This was harmless until the 2026-09-02 per-record resume cursor: because
|
|
205
|
+
`syncItemFulfillmentFromNetsuite(&$rec)` / `syncInventoryAdjustmentFromNetsuite(&$rec)` **reassign** their
|
|
206
|
+
by-reference record to the fetch-by-id shim, the engine's cursor PUT then read `$rec->lastModifiedDate` on
|
|
207
|
+
the **replaced** object → *Undefined property: stdClass::$lastModifiedDate* → `App_Error` `exit()` → the
|
|
208
|
+
ITEM_FULFILLMENTS / INVENTORY_ADJUSTMENTS section froze at `1-RUNNING`, window ÷3 (GroWrk's fulfillments
|
|
209
|
+
re-threw every 5 min; InvAdj was latent only because no client had processed one since the rename). **Fix
|
|
210
|
+
(`library` only, `php -l` clean):** `$shim->lastModifiedDate = (string)(...)` in **both** shims —
|
|
211
|
+
fulfillment from the REST header, inventory-adjustment after adding
|
|
212
|
+
`TO_CHAR(lastmodifieddate,'YYYY-MM-DD HH24:MI:SS') AS lastmodifieddate` to its header SELECT. **Lesson:
|
|
213
|
+
a fetch-by-id shim consumed as the replacement for a `&$byReference` record must carry every field the
|
|
214
|
+
caller reads after the call — `lastModifiedDate` first.** Sales orders / POs / invoices don't reassign, so
|
|
215
|
+
they were unaffected. Engine-side detail on the
|
|
216
|
+
[per-client-sync doc](../../worker/features/netsuite-togasupply-per-client-sync.md).
|
|
200
217
|
- **A shim must produce the SOAP object's SHAPE, not just its scalar fields — an absent nested list
|
|
201
218
|
crashes 1.0 (2026-08-29).** `fetchCustomerById()`'s `addressbookList` was where the AIG lookup phase
|
|
202
219
|
crashed: a REST customer with no/odd address made the shim omit the nested `addressbook` structure the
|
|
@@ -290,6 +307,14 @@ None — uniform across clients (NetSuite is a single shared account).
|
|
|
290
307
|
|
|
291
308
|
## Change history
|
|
292
309
|
|
|
310
|
+
- 2026-09-03 — Recorded that **`fetchItemFulfillmentById` and `fetchInventoryAdjustmentById` omitted
|
|
311
|
+
`->lastModifiedDate`** (unlike `fetchItemReceiptById`), which froze ITEM_FULFILLMENTS + INVENTORY_ADJUSTMENTS
|
|
312
|
+
once the 2026-09-02 per-record cursor read that field off the by-reference record these shims replace. GroWrk
|
|
313
|
+
was the reported alert; shared code so all four active togasupply clients (GroWrk, NYCHH, Prudential-EDI,
|
|
314
|
+
S&P Global) were affected. Fixed by setting `$shim->lastModifiedDate` in both shims (adding `lastmodifieddate`
|
|
315
|
+
to InventoryAdjustment's SuiteQL SELECT). `library`-only, `php -l` clean, no data lost, self-heals after
|
|
316
|
+
deploy. Lesson: a fetch-by-id shim used to replace a `&$byReference` record must carry every field the
|
|
317
|
+
caller reads afterward. (jcardinal)
|
|
293
318
|
- 2026-09-02 — Recorded that **SuiteQL returns date columns in the account DISPLAY format (date-only
|
|
294
319
|
`M/D/YYYY` here) unless wrapped in `TO_CHAR`** — a bare `lastmodifieddate` silently drops the time and
|
|
295
320
|
is locale-dependent. This defeated the per-client sync's per-record resume cursor (stored `9/2/2026|id`,
|
package/package.json
CHANGED