toga-ai 1.0.878 → 1.0.879

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: _Underscore
6
6
  client: shared
7
7
  type: architecture
8
8
  status: active
9
- updated: 2026-09-22
9
+ updated: 2026-09-23
10
10
  owners: ["jcardinal", "rgirish", "mhammontree", "ajean"]
11
11
  files:
12
12
  - _underscore/_underscore.php
@@ -371,6 +371,7 @@ multi-file UI components (`.php`/`.html`/`.css`/`.js`) invoked as `<_ComponentNa
371
371
 
372
372
  ## Gotchas
373
373
 
374
+ - **⚠ `_Environment::isDebugMode()` (Environment.php) returns TRUE when the `[_underscore]` config group is missing** (fail-safe to debug). Anything gated on it silently turns off in a prod config lacking the group — e.g. worker2 NetSuite order sends return `skippedDebugMode` and still record success. Prod must set `[_underscore]` with debug off. See [NetSuite sales-order push](../worker2/features/netsuite-salesorder-outbound-push.md).
374
375
  - **`FIELD_STORAGE` writes were silently dropped platform-wide (fixed 2026-07, `Model.php`).** Two
375
376
  bugs: (a) `buildSqlFieldValue()` read the field via `$this->$field`, which for a storage field
376
377
  triggers `__get()` → a disk/S3 **refetch** that overwrote the just-assigned value before `save()`
@@ -6,8 +6,8 @@ project: Worker
6
6
  client: shared
7
7
  type: feature
8
8
  status: active
9
- updated: 2026-09-16
10
- owners: ["bala"]
9
+ updated: 2026-09-23
10
+ owners: ["bala", "jcardinal"]
11
11
  files:
12
12
  - worker2/Worker/Netsuite/SalesOrder.php
13
13
  - test/@Bala/tests/netsuite_salesorder_payload_tests.php
@@ -89,6 +89,14 @@ Flow:
89
89
  The internalId is written back to `SalesOrders.c_netsuiteInternalSalesOrderId` by the shared
90
90
  `writeBackNetSuiteId()` (three paths now save it).
91
91
  7. `dryRun = true` builds and returns the payload without calling NetSuite.
92
+ 8. **Non-prod send guard (2026-09-23).** `doCreate`/`doUpdate` check `_Environment::isDebugMode()`
93
+ after the dry-run return, before any NetSuite read/write or Toga write-back; if true they return
94
+ `{"action":"skippedDebugMode","intendedAction":"create|update","salesOrderUuid":…}`
95
+ (`buildDebugModeSkipResult()`). Covers CreateNetSuite, CreateNetSuiteFromTransferOrder,
96
+ UpdateNetSuite, Sync (all funnel through doCreate/doUpdate). Job records success. `dryRun` still
97
+ runs in debug mode. Inbound webhooks unaffected. Why: only one NetSuite env (prod); non-prod
98
+ worker2 was sending orders to it. Callers: `_underscore` Model/Client/TransferOrder.php,
99
+ Model/Adyen/SalesOrder.php, Model/Elite/SalesOrder.php via `_Worker::runTask`.
92
100
 
93
101
  ### The shared builder now serves two order types — the changes were additive and defaulted
94
102
 
@@ -230,6 +238,10 @@ the transfer-order work.
230
238
 
231
239
  ## Gotchas
232
240
 
241
+ - **⚠ `_Environment::isDebugMode()` returns TRUE when the `[_underscore]` config group is missing**
242
+ (fail-safe to debug). A prod config missing that group, or with debug on, silently stops ALL
243
+ NetSuite order sends — jobs still show success with `skippedDebugMode`. Prod must set
244
+ `[_underscore]` with debug off. Seeing `skippedDebugMode` in prod `WorkerJobs` = config problem.
233
245
  - **⚠ Still unverified: can SuiteQL FILTER on `transaction.externalid` in this account?** A `created`
234
246
  result **cannot distinguish** *"the lookup ran and found nothing"* from *"the lookup is broken and
235
247
  always finds nothing."* This project has already hit a NetSuite column that could be `SELECT`ed but
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toga-ai",
3
- "version": "1.0.878",
3
+ "version": "1.0.879",
4
4
  "description": "TOGA Technology Team Claude Knowledge System — shared AI coding harness with skills, knowledge base CLI, and project installer for Claude Code.",
5
5
  "keywords": [
6
6
  "claude",