toga-ai 1.0.796 → 1.0.797
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,8 +6,8 @@ project: Worker
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: feature
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-
|
|
10
|
-
owners: [rgirish]
|
|
9
|
+
updated: 2026-09-10
|
|
10
|
+
owners: [rgirish, jcardinal]
|
|
11
11
|
files:
|
|
12
12
|
- worker2/Worker/Clickup/Fluffer.php
|
|
13
13
|
- worker2/Worker/Clickup.php
|
|
@@ -121,6 +121,14 @@ never by value.
|
|
|
121
121
|
|
|
122
122
|
## Gotchas / known issues
|
|
123
123
|
|
|
124
|
+
- **⚠ OPEN (found 2026-09-10, NOT fixed): the Talos agent call is failing in prod with HTTP 403.**
|
|
125
|
+
`Clickup/Fluffer/Process` failed **168 times over 7 days** with `Talos agent returned HTTP 403` — an
|
|
126
|
+
auth/permission failure on the `POST /api/ai/agent` call (`callTalosAgent()`,
|
|
127
|
+
`worker2/Worker/Clickup/Fluffer.php` ~L230, from `Process()` ~L94). 403 points at a bad/expired
|
|
128
|
+
`[talos] agent_api_key` (the `dev-core`-scoped key sent as `X-API-Key`) or the agent bridge revoking
|
|
129
|
+
it — **not** a ClickUp problem. Left unfixed by the developer for now; recorded so the next triage
|
|
130
|
+
starts from "check the `agent_api_key` / agent-bridge auth", not from the code. Surfaced by the
|
|
131
|
+
`Core.WorkerJobs` action+outcome census (group by action, isSuccess over 7 days).
|
|
124
132
|
- **Watchdog race.** The fluffer is an **ACTION** job; its watchdog is the Lambda env
|
|
125
133
|
`MAX_EXECUTION_TIME_WORKER_ACTION` (default 300s). The Talos timeout is set to **280** (just
|
|
126
134
|
under 300) so the job doesn't lose the race against its own watchdog out of the box.
|
|
@@ -144,6 +152,11 @@ never by value.
|
|
|
144
152
|
|
|
145
153
|
## Change history
|
|
146
154
|
|
|
155
|
+
- 2026-09-10 — **Discovered (NOT fixed): the fluffer is down in prod on a Talos-agent HTTP 403.**
|
|
156
|
+
`Clickup/Fluffer/Process` failed 168x over 7 days with `Talos agent returned HTTP 403` — an
|
|
157
|
+
auth/permission failure on the `/api/ai/agent` call, most likely an expired/wrong `[talos]
|
|
158
|
+
agent_api_key`. Deferred by the developer; logged as an open known issue for the next triage. Found
|
|
159
|
+
via the `Core.WorkerJobs` action+outcome census (toga-db MCP, no ClickUp/Talos access). (jcardinal)
|
|
147
160
|
- 2026-07-20 — Built the ClickUp task description fluffer: new `_Worker_Clickup_Fluffer`
|
|
148
161
|
(action `Clickup/Fluffer/Process`, `taskCreated` webhook auto-trigger, `force` regenerate)
|
|
149
162
|
calling the Talos `dev-core` KB-investigation agent at `/api/ai/agent` via `_ApiRequest`
|
|
@@ -6,8 +6,8 @@ project: Worker
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: feature
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-09-
|
|
10
|
-
owners: ["dfranks", "kyalamarthi", "ajean"]
|
|
9
|
+
updated: 2026-09-10
|
|
10
|
+
owners: ["dfranks", "kyalamarthi", "ajean", "jcardinal"]
|
|
11
11
|
files:
|
|
12
12
|
- worker2/Worker/Netsuite.php
|
|
13
13
|
- worker2/Worker/Netsuite/Opportunity.php
|
|
@@ -387,6 +387,22 @@ the legacy cron's OPPORTUNITIES section:
|
|
|
387
387
|
(`hasEndCustomerColumn()`), since the migration is applied by hand and an unknown column would fail
|
|
388
388
|
the whole query and break every opportunity webhook. See
|
|
389
389
|
[the labels doc](./netsuite-opportunity-client-labels.md).
|
|
390
|
+
- **⚠ `hasEndCustomerColumn()` guards the DB COLUMN, NOT the ORM MODEL field — and that gap took the
|
|
391
|
+
whole opportunity sync down for 8 days (2026-09-02 → 2026-09-10).** The guard does a `SHOW COLUMNS`
|
|
392
|
+
on `Forecast.Opportunities`, so once the migration was applied it passed and the handler ran
|
|
393
|
+
`$opportunity->endCustomerName = …`. But the 2.0 model `_Model_Forecast_Opportunity`
|
|
394
|
+
(`_underscore/Model/Forecast/Opportunity.php`) never **declared** the field, so `_Model.__set`
|
|
395
|
+
(`_underscore/Model.php`) threw *"There is no field called 'endCustomerName' in the
|
|
396
|
+
'_Model_Forecast_Opportunity' model."* on **every** `Netsuite/Opportunity/post|put` — 100% failure,
|
|
397
|
+
every opportunity import dead. `Core.WorkerJobs` census: Sep 1 = 115 ok / 60 fail (last good day),
|
|
398
|
+
Sep 2 → Sep 10 = 0 ok / 100% fail (61 fails on Sep 10 alone). This was a **half-deploy**: the
|
|
399
|
+
migration + the handler write shipped, the model field declaration did not.
|
|
400
|
+
**Durable rule: a new column that the handler writes must ship THREE things together — the
|
|
401
|
+
`dbchanges2` migration, the handler write, AND the `_Model` field declaration.** A column-existence
|
|
402
|
+
guard (`SHOW COLUMNS`) proves nothing about the ORM; both ORMs enumerate *declared* properties, so an
|
|
403
|
+
undeclared field is a hard `__set` throw, not a silent skip. Fixed 2026-09-10 by declaring
|
|
404
|
+
`public $endCustomerName = self::FIELD_CHAR;` (matching sibling char fields clickupTaskId/title/memo
|
|
405
|
+
over the varchar column); deployed to worker2 `_production`, sync recovered.
|
|
390
406
|
- Writes use raw `_Query` against `_underscore::DB_FORECAST` and **must**
|
|
391
407
|
`_Database::transactionCommit(DB_FORECAST)` (lazy-transaction gotcha).
|
|
392
408
|
|
|
@@ -759,6 +775,19 @@ deprecated** for production opportunity code.
|
|
|
759
775
|
blocked on the Aaron stakeholder decision noted above.
|
|
760
776
|
|
|
761
777
|
## Change history
|
|
778
|
+
- 2026-09-10 — **Fixed an 8-day total opportunity-sync outage caused by a half-deploy: a missing ORM
|
|
779
|
+
model field.** `Forecast.Opportunities.endCustomerName` (column added ~Sep 1) and the worker2 handler
|
|
780
|
+
write shipped, but `_Model_Forecast_Opportunity` (`_underscore/Model/Forecast/Opportunity.php`) never
|
|
781
|
+
**declared** the field. `hasEndCustomerColumn()` guards the DB column (`SHOW COLUMNS`), not the ORM
|
|
782
|
+
model, so the guard passed and `_Model.__set` then threw *"There is no field called 'endCustomerName'
|
|
783
|
+
in the '_Model_Forecast_Opportunity' model."* on **every** `Netsuite/Opportunity/post|put` —
|
|
784
|
+
`Core.WorkerJobs` shows Sep 1 = 115 ok / 60 fail (last good day), Sep 2 → Sep 10 = 0 ok / 100% fail.
|
|
785
|
+
Fix: declared `public $endCustomerName = self::FIELD_CHAR;` (php-reviewer clean); deployed to worker2
|
|
786
|
+
`_production`, sync recovered. Durable lesson added to the `endCustomerName` data-model bullet: a
|
|
787
|
+
handler-written column must ship its migration, its handler write, AND its `_Model` field declaration
|
|
788
|
+
together — a `SHOW COLUMNS` guard does not protect against a missing ORM field. Diagnosed with only the
|
|
789
|
+
`Core.WorkerJobs` action+outcome census (group by action, isSuccess over 7 days) via the toga-db MCP —
|
|
790
|
+
no NetSuite/ClickUp access. (jcardinal)
|
|
762
791
|
- 2026-09-04 — **Investigation + design session; no code shipped (two prototype fixes were written and
|
|
763
792
|
deliberately reverted).** Four corrections and four new facts. **Corrected:** the `STAGE_MAP`
|
|
764
793
|
section described a constant that does not exist — the shipped map is **`SALES_STAGE_MAP`** on
|
package/package.json
CHANGED