toga-ai 1.0.780 → 1.0.781
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.
- package/knowledge/2.0/apps/dbchanges2/INDEX.md +1 -1
- package/knowledge/2.0/apps/dbchanges2/features/surface-layer-schema.md +42 -1
- package/knowledge/2.0/apps/toga25-supply/features/record-modals-and-nested-tables.md +13 -1
- package/knowledge/2.0/apps/toga25-supply/features/surface-frontend.md +54 -1
- package/knowledge/clients/compass-canada/profile.md +8 -0
- package/knowledge/clients/compass-usa/profile.md +10 -0
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|-----|---------|-------|
|
|
5
5
|
| [Database Changes (dbchanges2) Repository Architecture](architecture.md) | `dbchanges2` is the **schema-migration / SQL change-set repository** for the entire 2.0 platform. | Core/, Client/, Client_<Tenant>/, Logs/, Logs_Client/, _modules/ |
|
|
6
6
|
| [Re-runnable additive migrations (uuid4 in SQL, INSERT guards, the DISTINCT trap, conditional ALTERs)](features/rerunnable-additive-inserts.md) | Most `dbchanges2` files are **additive data grants** run by hand against production, often more than once (once per environment, or twice because someone was no | dbchanges2/Client_Compass/2026-08-26a - CompassCreativeStudioPersona.sql, dbchanges2/Core/2026-08-27a - Insert - Netsuite Location SyncAll CronJob.sql, dbchanges2/Client/2026-09-01a - PurchaseOrderItemQtyFieldsApiRoleRead.sql |
|
|
7
|
-
| [Surface Layer Schema (UI presentation/config tables)](features/surface-layer-schema.md) | The persistent schema for the platform-wide **Surface** UI presentation/configuration layer (see the `_underscore` [surface-resolver](../../_underscore/features | dbchanges2/Core/2026-09-02a - TalosAssistantSurfaceSeed.sql, dbchanges2/Client_Nychh/2026-09-02a - TalosAssistantEnable.sql, dbchanges2/Core/2026-08-31a - SalesOrderDenialDetailsSurfaceSeed.sql, dbchanges2/Client_Compass/2026-08-31a - SalesOrderDenialDetailsReadOnlyRules.sql, toga25-supply/db-migrations/PLAYBOOK.md, toga25-supply/db-migrations/SURFACE-FEATURE-RUNBOOK.md, dbchanges2/Client_Compass/, dbchanges2/Client_CompassCanada/, dbchanges2/Client_Quad/, dbchanges2/Core/2026-08-28b - TransferOrderListActionsSurfaceSeed.sql, dbchanges2/Core/2026-08-24b - SalesOrderStatusFilterSurfaceSeed.sql, dbchanges2/Client_Compass/2026-08-24b - SalesOrderStatusFilterHides.sql, dbchanges2/Client_CompassCanada/2026-08-24b - SalesOrderStatusFilterHides.sql, dbchanges2/Client_Quad/2026-08-24b - SalesOrderStatusFilterHides.sql, dbchanges2/Client_Nychh/2026-08-24b - SalesOrderStatusFilterHides.sql, dbchanges2/Core/2026-08-21 - SalesOrderDecisionSurfacesReseed.sql, dbchanges2/Core/2026-08-24 - RestoreApproveDenyRowActionsVisibility.sql, dbchanges2/Client_Quad/2026-08-24 - ProdPortApprovePoNumberEnabledRule.sql, dbchanges2/Client_Quad/2026-07-21b - ApproveDisabledTooltipPoNumber.sql, dbchanges2/Client_Quad/2026-08-21 - SalesOrderDecisionSummaryOverride.sql, dbchanges2/Client_Compass/2026-08-24 - ProdPortApprovalsGateAndApproveStepTwoRule.sql, dbchanges2/Client_CompassCanada/2026-08-24 - ProdPortApprovalsGateAndApproveStepTwoRule.sql, dbchanges2/Client_Nychh/2026-08-24 - FixInventoryGroupingsUnitsTopologyOverrideIds.sql, dbchanges2/Client/2026-06-25a - SurfaceClientTables.sql, dbchanges2/Client_Compass/2026-06-25d - SalesOrderSurfaceClientSeed.sql, _underscore/Model/Client/ThemeToken.php, toga25-supply/src/themeConfig.json, dbchanges2/Core/2026-06-25a - SurfaceCoreTables.sql, dbchanges2/Core/2026-06-25b - SurfaceRecordsAndFields.sql, dbchanges2/Core/2026-06-25c - SalesOrderLoginSurfaceSeed.sql, dbchanges2/Core/2026-06-29a - ItemsSurfaceSeed.sql, dbchanges2/Core/2026-06-29b - SurfaceMetaPublicReadAcl.sql, dbchanges2/Client/2026-06-29c - SurfaceRecordScriptAcl.sql, dbchanges2/Core/2026-06-29c - SurfaceDebugPhpMethodFix.sql, dbchanges2/Core/2026-06-29d - VendorItemsSurfaceSeed.sql, dbchanges2/Core/2026-06-29e - InventorySurfaceSeed.sql, dbchanges2/Core/2026-06-30a - SurfaceMetaGroupAndSalesOrderSections.sql, dbchanges2/Client/2026-06-30a - SurfaceMetaGroupAcl.sql, dbchanges2/Client_Compass/2026-06-30a - SalesOrderDisplaySectionManagerOverrides.sql, dbchanges2/Client_CompassCanada/2026-06-30a - SalesOrderSurfaceManagerOverrides.sql, dbchanges2/Client_Quad/2026-06-30a - SalesOrderSurfaceClientOverrides.sql, dbchanges2/Client/2026-06-25a - SurfaceClientTables.sql, dbchanges2/Client/2026-06-25b - SurfaceClientSeed.sql, dbchanges2/Client/2026-06-25c - SurfaceClientAcl.sql, dbchanges2/Client/2026-06-03- BLANK_CLIENT_DATABASE.sql, dbchanges2/Core/2026-07-17h - Update - ClearApprovalsFilterButtonConfig.sql, dbchanges2/Client_Compass/2026-07-17a - SalesOrderApprovalActionsOverride.sql, dbchanges2/Client_Compass/2026-07-17b - SalesOrderApprovalsFilterButtonOverride.sql, dbchanges2/Client_CompassCanada/2026-07-17a - SalesOrderApprovalActionsOverride.sql, dbchanges2/Client_CompassCanada/2026-07-17b - SalesOrderApprovalsFilterButtonOverride.sql, dbchanges2/Client_Quad/2026-07-17a - SalesOrderApprovalActionsOverride.sql, dbchanges2/Client_Quad/2026-07-17b - SalesOrderApprovalsFilterButtonOverride.sql, dbchanges2/Core/2026-07-20a - Update - HideAdminNotesSectionByDefault.sql, dbchanges2/Core/2026-07-20b - Update - NotesSectionFieldElements.sql, dbchanges2/Client_Compass/2026-07-20a - AdminNotesSectionVisibilityOverride.sql, dbchanges2/Client_Compass/2026-07-20b - NotesSectionFieldsOverride.sql, dbchanges2/Client_CompassCanada/2026-07-20a - AdminNotesSectionVisibilityOverride.sql, dbchanges2/Client_CompassCanada/2026-07-20b - NotesSectionFieldsOverride.sql, dbchanges2/Client_Quad/2026-07-20a - NotesSectionFieldsOverride.sql, dbchanges2/Core/2026-07-20c - Update - VendorItemsToggleSurfaceSeed.sql, dbchanges2/Client_Compass/2026-07-20c - ItemRecordEditButtonEnable.sql, dbchanges2/Client_Compass/2026-07-20d - ItemRecordVendorItemsEnable.sql, dbchanges2/Client_CompassCanada/2026-07-20c - ItemRecordEditButtonEnable.sql, dbchanges2/Client_CompassCanada/2026-07-20d - ItemRecordVendorItemsEnable.sql, dbchanges2/Core/2026-07-20e - RestoreApproveDenyRowActions.sql, dbchanges2/Client_Compass/2026-07-20e - RowActionsApprovalWorkflowAdminEnable.sql, dbchanges2/Client_CompassCanada/2026-07-20e - RowActionsApprovalWorkflowAdminEnable.sql, dbchanges2/Core/2026-07-17 - README - RUN ORDER.md, dbchanges2/Client_Compass/2026-07-21a - SalesOrderApproveEnabledRuleOverride.sql, dbchanges2/Client_Compass/2026-07-21b - SalesOrderApprovalsGateEnable.sql, dbchanges2/Client_CompassCanada/2026-07-21a - SalesOrderApproveEnabledRuleOverride.sql, dbchanges2/Client_CompassCanada/2026-07-21b - SalesOrderApprovalsGateEnable.sql, dbchanges2/Client_Quad/2026-07-21a - SalesOrderApproveEnabledRuleOverride.sql, dbchanges2/Client_Quad/2026-07-21b - SalesOrderApproveDisabledTooltipTranslation.sql, dbchanges2/Core/2026-07-21a - SalesOrderDecisionSummarySurfaceSeed.sql, dbchanges2/Core/2026-07-21b - SalesOrderDecisionActionSurfaceSeed.sql, dbchanges2/Client_Quad/2026-07-21c - SalesOrderDecisionSummaryOverride.sql, dbchanges2/Client_Compass/2026-07-21c - SalesOrderDecisionSummaryTotalConcat.sql, dbchanges2/Client_CompassCanada/2026-07-21c - SalesOrderDecisionSummaryTotalConcat.sql, dbchanges2/Core/2026-07-23a - PoNumberDetailFieldValueKey.sql, dbchanges2/Core/2026-07-29a - SalesOrderApprovalDetailsSurfaceSeed.sql, dbchanges2/Core/2026-08-05b - ApprovalDetailsShippingMethodConcatCharge.sql, dbchanges2/Core/2026-08-14a - NoteBadgesVocabularySurface.sql, dbchanges2/Client/2026-08-14a - NoteBadgeThemeTokens.sql, dbchanges2/Client/2026-08-14b - NoteBadgeUserColorFix.sql, dbchanges2/Client_Compass/2026-08-14a - NoteBadgeDelegateThemeTokens.sql, dbchanges2/Client_CompassCanada/2026-08-14a - NoteBadgeDelegateThemeTokens.sql, dbchanges2/Core/2026-08-26a - ServiceRequestRecordHeaderSurfaceSeed.sql, dbchanges2/Core/2026-08-26b - ServiceRequestDetailsSurfaceSeed.sql, dbchanges2/Core/2026-08-28a - TransferOrderSurfaceSeed.sql, dbchanges2/Client/2026-08-28a - TransferOrderStageThemeTokens.sql, dbchanges2/Client_Nychh/2026-08-28b - TransferOrdersNavigationEnable.sql, dbchanges2/Core/2026-09-03c - ColumnsModalSurfaceSeed.sql, dbchanges2/Core/2026-09-03d - ColumnsModalRetireConfigModal.sql |
|
|
7
|
+
| [Surface Layer Schema (UI presentation/config tables)](features/surface-layer-schema.md) | The persistent schema for the platform-wide **Surface** UI presentation/configuration layer (see the `_underscore` [surface-resolver](../../_underscore/features | dbchanges2/Client_Compass/2026-09-04a - ItemRecordRestrictToPersonaVisible.sql, dbchanges2/Client_CompassCanada/2026-09-04a - ItemRecordRestrictToPersonaVisible.sql, dbchanges2/Core/2026-09-02a - TalosAssistantSurfaceSeed.sql, dbchanges2/Client_Nychh/2026-09-02a - TalosAssistantEnable.sql, dbchanges2/Core/2026-08-31a - SalesOrderDenialDetailsSurfaceSeed.sql, dbchanges2/Client_Compass/2026-08-31a - SalesOrderDenialDetailsReadOnlyRules.sql, toga25-supply/db-migrations/PLAYBOOK.md, toga25-supply/db-migrations/SURFACE-FEATURE-RUNBOOK.md, dbchanges2/Client_Compass/, dbchanges2/Client_CompassCanada/, dbchanges2/Client_Quad/, dbchanges2/Core/2026-08-28b - TransferOrderListActionsSurfaceSeed.sql, dbchanges2/Core/2026-08-24b - SalesOrderStatusFilterSurfaceSeed.sql, dbchanges2/Client_Compass/2026-08-24b - SalesOrderStatusFilterHides.sql, dbchanges2/Client_CompassCanada/2026-08-24b - SalesOrderStatusFilterHides.sql, dbchanges2/Client_Quad/2026-08-24b - SalesOrderStatusFilterHides.sql, dbchanges2/Client_Nychh/2026-08-24b - SalesOrderStatusFilterHides.sql, dbchanges2/Core/2026-08-21 - SalesOrderDecisionSurfacesReseed.sql, dbchanges2/Core/2026-08-24 - RestoreApproveDenyRowActionsVisibility.sql, dbchanges2/Client_Quad/2026-08-24 - ProdPortApprovePoNumberEnabledRule.sql, dbchanges2/Client_Quad/2026-07-21b - ApproveDisabledTooltipPoNumber.sql, dbchanges2/Client_Quad/2026-08-21 - SalesOrderDecisionSummaryOverride.sql, dbchanges2/Client_Compass/2026-08-24 - ProdPortApprovalsGateAndApproveStepTwoRule.sql, dbchanges2/Client_CompassCanada/2026-08-24 - ProdPortApprovalsGateAndApproveStepTwoRule.sql, dbchanges2/Client_Nychh/2026-08-24 - FixInventoryGroupingsUnitsTopologyOverrideIds.sql, dbchanges2/Client/2026-06-25a - SurfaceClientTables.sql, dbchanges2/Client_Compass/2026-06-25d - SalesOrderSurfaceClientSeed.sql, _underscore/Model/Client/ThemeToken.php, toga25-supply/src/themeConfig.json, dbchanges2/Core/2026-06-25a - SurfaceCoreTables.sql, dbchanges2/Core/2026-06-25b - SurfaceRecordsAndFields.sql, dbchanges2/Core/2026-06-25c - SalesOrderLoginSurfaceSeed.sql, dbchanges2/Core/2026-06-29a - ItemsSurfaceSeed.sql, dbchanges2/Core/2026-06-29b - SurfaceMetaPublicReadAcl.sql, dbchanges2/Client/2026-06-29c - SurfaceRecordScriptAcl.sql, dbchanges2/Core/2026-06-29c - SurfaceDebugPhpMethodFix.sql, dbchanges2/Core/2026-06-29d - VendorItemsSurfaceSeed.sql, dbchanges2/Core/2026-06-29e - InventorySurfaceSeed.sql, dbchanges2/Core/2026-06-30a - SurfaceMetaGroupAndSalesOrderSections.sql, dbchanges2/Client/2026-06-30a - SurfaceMetaGroupAcl.sql, dbchanges2/Client_Compass/2026-06-30a - SalesOrderDisplaySectionManagerOverrides.sql, dbchanges2/Client_CompassCanada/2026-06-30a - SalesOrderSurfaceManagerOverrides.sql, dbchanges2/Client_Quad/2026-06-30a - SalesOrderSurfaceClientOverrides.sql, dbchanges2/Client/2026-06-25a - SurfaceClientTables.sql, dbchanges2/Client/2026-06-25b - SurfaceClientSeed.sql, dbchanges2/Client/2026-06-25c - SurfaceClientAcl.sql, dbchanges2/Client/2026-06-03- BLANK_CLIENT_DATABASE.sql, dbchanges2/Core/2026-07-17h - Update - ClearApprovalsFilterButtonConfig.sql, dbchanges2/Client_Compass/2026-07-17a - SalesOrderApprovalActionsOverride.sql, dbchanges2/Client_Compass/2026-07-17b - SalesOrderApprovalsFilterButtonOverride.sql, dbchanges2/Client_CompassCanada/2026-07-17a - SalesOrderApprovalActionsOverride.sql, dbchanges2/Client_CompassCanada/2026-07-17b - SalesOrderApprovalsFilterButtonOverride.sql, dbchanges2/Client_Quad/2026-07-17a - SalesOrderApprovalActionsOverride.sql, dbchanges2/Client_Quad/2026-07-17b - SalesOrderApprovalsFilterButtonOverride.sql, dbchanges2/Core/2026-07-20a - Update - HideAdminNotesSectionByDefault.sql, dbchanges2/Core/2026-07-20b - Update - NotesSectionFieldElements.sql, dbchanges2/Client_Compass/2026-07-20a - AdminNotesSectionVisibilityOverride.sql, dbchanges2/Client_Compass/2026-07-20b - NotesSectionFieldsOverride.sql, dbchanges2/Client_CompassCanada/2026-07-20a - AdminNotesSectionVisibilityOverride.sql, dbchanges2/Client_CompassCanada/2026-07-20b - NotesSectionFieldsOverride.sql, dbchanges2/Client_Quad/2026-07-20a - NotesSectionFieldsOverride.sql, dbchanges2/Core/2026-07-20c - Update - VendorItemsToggleSurfaceSeed.sql, dbchanges2/Client_Compass/2026-07-20c - ItemRecordEditButtonEnable.sql, dbchanges2/Client_Compass/2026-07-20d - ItemRecordVendorItemsEnable.sql, dbchanges2/Client_CompassCanada/2026-07-20c - ItemRecordEditButtonEnable.sql, dbchanges2/Client_CompassCanada/2026-07-20d - ItemRecordVendorItemsEnable.sql, dbchanges2/Core/2026-07-20e - RestoreApproveDenyRowActions.sql, dbchanges2/Client_Compass/2026-07-20e - RowActionsApprovalWorkflowAdminEnable.sql, dbchanges2/Client_CompassCanada/2026-07-20e - RowActionsApprovalWorkflowAdminEnable.sql, dbchanges2/Core/2026-07-17 - README - RUN ORDER.md, dbchanges2/Client_Compass/2026-07-21a - SalesOrderApproveEnabledRuleOverride.sql, dbchanges2/Client_Compass/2026-07-21b - SalesOrderApprovalsGateEnable.sql, dbchanges2/Client_CompassCanada/2026-07-21a - SalesOrderApproveEnabledRuleOverride.sql, dbchanges2/Client_CompassCanada/2026-07-21b - SalesOrderApprovalsGateEnable.sql, dbchanges2/Client_Quad/2026-07-21a - SalesOrderApproveEnabledRuleOverride.sql, dbchanges2/Client_Quad/2026-07-21b - SalesOrderApproveDisabledTooltipTranslation.sql, dbchanges2/Core/2026-07-21a - SalesOrderDecisionSummarySurfaceSeed.sql, dbchanges2/Core/2026-07-21b - SalesOrderDecisionActionSurfaceSeed.sql, dbchanges2/Client_Quad/2026-07-21c - SalesOrderDecisionSummaryOverride.sql, dbchanges2/Client_Compass/2026-07-21c - SalesOrderDecisionSummaryTotalConcat.sql, dbchanges2/Client_CompassCanada/2026-07-21c - SalesOrderDecisionSummaryTotalConcat.sql, dbchanges2/Core/2026-07-23a - PoNumberDetailFieldValueKey.sql, dbchanges2/Core/2026-07-29a - SalesOrderApprovalDetailsSurfaceSeed.sql, dbchanges2/Core/2026-08-05b - ApprovalDetailsShippingMethodConcatCharge.sql, dbchanges2/Core/2026-08-14a - NoteBadgesVocabularySurface.sql, dbchanges2/Client/2026-08-14a - NoteBadgeThemeTokens.sql, dbchanges2/Client/2026-08-14b - NoteBadgeUserColorFix.sql, dbchanges2/Client_Compass/2026-08-14a - NoteBadgeDelegateThemeTokens.sql, dbchanges2/Client_CompassCanada/2026-08-14a - NoteBadgeDelegateThemeTokens.sql, dbchanges2/Core/2026-08-26a - ServiceRequestRecordHeaderSurfaceSeed.sql, dbchanges2/Core/2026-08-26b - ServiceRequestDetailsSurfaceSeed.sql, dbchanges2/Core/2026-08-28a - TransferOrderSurfaceSeed.sql, dbchanges2/Client/2026-08-28a - TransferOrderStageThemeTokens.sql, dbchanges2/Client_Nychh/2026-08-28b - TransferOrdersNavigationEnable.sql, dbchanges2/Core/2026-09-03c - ColumnsModalSurfaceSeed.sql, dbchanges2/Core/2026-09-03d - ColumnsModalRetireConfigModal.sql |
|
|
8
8
|
| [2.0 New-Client Onboarding (manual process)](workflows/client-onboarding.md) | > **A local browser wizard now automates this.** Steps 2–9 below (create DBs, generate Core/API > inserts, append to `Clients_Db.txt`) — plus the dbchanges2 bla | Client/, Client_<Tenant>/, Core/, Logs_Client/ |
|
|
9
9
|
| [Auditing a client DB that drifted from its models (partially applied module migration)](workflows/client-schema-drift-audit.md) | A recurring 2.0 failure mode: **one client's database drifts from what the PHP models declare**, usually because a `_modules/<module>/` migration was applied to | dbchanges2/Client_Growrk/2026-05-28.sql, dbchanges2/Client_Growrk/2026-08-10c - GrowrkServiceRequestCustomFieldsCatchUp.sql, dbchanges2/Client_Growrk/2026-08-10d - GrowrkServiceRequestTypeAndDispositionSeeds.sql, dbchanges2/_modules/netsuite/2026-07-10a - UnitInventoryFields.sql, dbchanges2/Client_Growrk/2026-08-10 - GrowrkUnitInventoryFieldsCatchUp.sql, dbchanges2/Client_Growrk/2026-08-10b - GrowrkUnitItemDescriptionAcl.sql, dbchanges2/Client_Growrk/_modules.txt |
|
|
10
10
|
| [Framework branch running AHEAD of schema — environment-wide 1054/EO-1 after a deploy](workflows/framework-branch-ahead-of-schema.md) | A **third** kind of 2.0 schema drift, distinct from the two already documented: nobody's database went backwards — **the code went forwards**. | _underscore/Model/Core/RecordField.php, _underscore/Model/Client/TableViewField.php, _underscore/Model/Client/TableView.php, _underscore/Model/Core/Surface.php, _underscore/Model/Client/Urgency.php, _underscore/Model/Client/RecordFieldSetting.php, _underscore/Model/Client/ClientRecordFieldSetting.php, api2/Component/Api/V2/V2.php, dbchanges2/Core/2026-08-14c - RecordFieldsValidationMetadata.sql, dbchanges2/Client/2026-08-14a - RecordFieldSettingsClientTable.sql, dbchanges2/Client/2026-08-13a - UserNavPreferencesClientTable.sql, dbchanges2/Client/2026-08-13c - PersonaNavVisibilityClientTable.sql |
|
|
@@ -6,9 +6,11 @@ project: Database Changes
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: feature
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-09-
|
|
9
|
+
updated: 2026-09-04
|
|
10
10
|
owners: [jcardinal, apeterson, tcox]
|
|
11
11
|
files:
|
|
12
|
+
- dbchanges2/Client_Compass/2026-09-04a - ItemRecordRestrictToPersonaVisible.sql
|
|
13
|
+
- dbchanges2/Client_CompassCanada/2026-09-04a - ItemRecordRestrictToPersonaVisible.sql
|
|
12
14
|
- dbchanges2/Core/2026-09-02a - TalosAssistantSurfaceSeed.sql
|
|
13
15
|
- dbchanges2/Client_Nychh/2026-09-02a - TalosAssistantEnable.sql
|
|
14
16
|
- dbchanges2/Core/2026-08-31a - SalesOrderDenialDetailsSurfaceSeed.sql
|
|
@@ -351,6 +353,36 @@ Both clients' `c`/`d` overrides and the Core seed were added to `Core/2026-07-17
|
|
|
351
353
|
ORDER.md`. Verified working in the UI for both clients. (Boolean toggle/badge labels in this modal
|
|
352
354
|
resolve through the resolver's new `trueLabel`/`falseLabel` emission — see the resolver doc.)
|
|
353
355
|
|
|
356
|
+
### Restrict-to-Persona field — the seed intended a client opt-in that was NEVER WRITTEN (2026-09-04)
|
|
357
|
+
|
|
358
|
+
The same Core-neutral-default → client-opt-in rule, but a case where only **half** of it shipped.
|
|
359
|
+
`Core/2026-07-17d` seeded the item modal's More-Info **`restrictToPersona`** element (surface
|
|
360
|
+
`item-record-more-info` = **19**, `SurfaceElements` id **57**) `isVisible=0` / `isEnabled=0` with
|
|
361
|
+
`config {valueKey: personaItems, computeValueKey: personaItems}`, intending each client to opt in —
|
|
362
|
+
and **no client override was ever authored**. Verified on prod **and** client-sandbox: **zero**
|
|
363
|
+
`SurfaceOverrides` rows for element 57 in `Client_Compass` or `Client_CompassCanada`. Symptom: the
|
|
364
|
+
item modal's "More Info" section header rendered with **no fields** for both Compass tenants (the
|
|
365
|
+
field showed only in edit mode, which is still JSON-driven — see
|
|
366
|
+
[surface-frontend](../../toga25-supply/features/surface-frontend.md)).
|
|
367
|
+
|
|
368
|
+
- **Fix:** `Client_Compass/2026-09-04a - ItemRecordRestrictToPersonaVisible.sql` and
|
|
369
|
+
`Client_CompassCanada/2026-09-04a - ItemRecordRestrictToPersonaVisible.sql` — client-wide
|
|
370
|
+
(`roleId`/`personaId`/`languageId` NULL) `IS_VISIBLE='1'` + `IS_ENABLED='1'` rows for
|
|
371
|
+
`surfaceId` 19 / `surfaceElementId` 57, `NOT EXISTS`-guarded (re-runnable), Core ids **inlined as
|
|
372
|
+
literals** and **pre-generated v4 UUID literals** (never MySQL `UUID()`) — the cluster-isolation
|
|
373
|
+
house style, same shape as `Client_Compass/2026-08-31a`. Ids 19/57 confirmed **identical on prod
|
|
374
|
+
and client-sandbox** Core before authoring.
|
|
375
|
+
- **This element is resolved by literal id, not id-agnostically, on purpose:** it carries no
|
|
376
|
+
`config.role` / `config.kind` marker to match on, and a `Client_*` file cannot read `Core.*`
|
|
377
|
+
across clusters — so the literal id is the only handle. Re-verify 19/57 against the target Core
|
|
378
|
+
before running this in a new environment.
|
|
379
|
+
- **⚠ Ship-together dependency — the FE goes FIRST (or together); this SQL alone CRASHES the modal.**
|
|
380
|
+
Making the field visible exposes a value the FE could not format until the `personaItems`
|
|
381
|
+
`computeValueKey` was registered in `ItemRecordView`; the unformatted array killed the whole modal
|
|
382
|
+
route with React **error #31**. Same class as the approvals-gate / Approve-step-two pair below.
|
|
383
|
+
- **Run state: `client-sandbox` `Client_Compass` only** (override rows 64/65, 2026-09-04 11:25).
|
|
384
|
+
**Prod not run; `Client_CompassCanada` not run anywhere.**
|
|
385
|
+
|
|
354
386
|
## SalesOrder decision-modal surfaces (approve + deny) — shared summary + per-action chrome
|
|
355
387
|
|
|
356
388
|
The approve/deny decision modal's display config was migrated off the per-client
|
|
@@ -1342,6 +1374,15 @@ environment and take the **highest** `MAX(id)+1`, never the one in front of you,
|
|
|
1342
1374
|
still unrun at the time, so this is a reservation, not a deployed state.
|
|
1343
1375
|
|
|
1344
1376
|
## Change history
|
|
1377
|
+
- 2026-09-04 — Added the **restrict-to-persona opt-in pair** (`Client_Compass/2026-09-04a` +
|
|
1378
|
+
`Client_CompassCanada/2026-09-04a - ItemRecordRestrictToPersonaVisible.sql`): client-wide
|
|
1379
|
+
`IS_VISIBLE`+`IS_ENABLED` overrides on `surfaceId` **19** / `surfaceElementId` **57**, literal Core
|
|
1380
|
+
ids + v4 UUID literals + `NOT EXISTS` guards. Recorded the failure mode they fix — `Core/2026-07-17d`
|
|
1381
|
+
seeded the element OFF **intending** a per-client opt-in and **no client override was ever written**
|
|
1382
|
+
(zero rows in both Compass tenants, prod and sandbox), so the item modal's More Info section
|
|
1383
|
+
rendered empty. Also recorded the **FE-first ship order**: the override alone exposes an
|
|
1384
|
+
unformatted value and crashes the modal (React error #31). Run on **client-sandbox `Client_Compass`
|
|
1385
|
+
only**; prod and Canada pending. (tcox)
|
|
1345
1386
|
- 2026-09-03 — Recorded the rule that **a modal needing surface-driven copy becomes its own Surface**:
|
|
1346
1387
|
the resolver reads messages only from `*MessageId` columns and never from `config`, so
|
|
1347
1388
|
`Core/2026-08-28b`'s `config.modal` keys could never resolve and the Columns modal rendered raw
|
|
@@ -6,7 +6,7 @@ project: TOGa 2.5 Supply
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: feature
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-09-
|
|
9
|
+
updated: 2026-09-04
|
|
10
10
|
owners: [apeterson, tcox, jcardinal]
|
|
11
11
|
files:
|
|
12
12
|
- toga25-supply/src/pages/SalesOrders/view/SalesOrderRecordModalLayout/hooks/usePurchaseOrderDetails.ts
|
|
@@ -323,6 +323,14 @@ Scaffold per the `ItemRecordModalLayout` pattern (`src/layout/ItemRecordModalLay
|
|
|
323
323
|
sees the slide-up animation replay the moment the data arrives. Keep a single modal element and
|
|
324
324
|
switch only its **children** on the fetch state. Same defect and same fix on the ServiceRequest and
|
|
325
325
|
Transfer Order modals.
|
|
326
|
+
- **The item modal's VIEW is Surface-driven while its EDIT is still JSON (Pattern 6).** A field
|
|
327
|
+
that appears only after clicking **Edit** — and vanishes again on Cancel — is a **missing client
|
|
328
|
+
`SurfaceOverride`** on a Core-default-OFF element, not a data or fetch bug. The section header
|
|
329
|
+
then renders with no fields under it. Hit 2026-09-04 on **More Info → "Restrict to Persona"** for
|
|
330
|
+
both Compass tenants. The rule, the `computeValueKey` registry trap it exposed (raw object array →
|
|
331
|
+
React **error #31**, shown as the router's "Unexpected Application Error!" since the app has no
|
|
332
|
+
top-level `ErrorBoundary`), and the FE-first deploy order are in
|
|
333
|
+
[surface-frontend](surface-frontend.md).
|
|
326
334
|
- **A record's child rows may need a SECOND request.** Children nest inside the record response only
|
|
327
335
|
when `Core.InherentRecordChildren` declares them — `sales-orders` does, `transfer-orders` does
|
|
328
336
|
**not**. When they do not, fetch the nested route (`/{record}/{uuid}/{child-route}`) and read the
|
|
@@ -331,6 +339,10 @@ Scaffold per the `ItemRecordModalLayout` pattern (`src/layout/ItemRecordModalLay
|
|
|
331
339
|
[Transfer Orders page](transfer-orders-page.md).
|
|
332
340
|
|
|
333
341
|
## Change history
|
|
342
|
+
- 2026-09-04 — Added the Pattern 6 gotcha that the **item modal's VIEW is Surface-driven while its
|
|
343
|
+
EDIT is still JSON**: a field visible only in edit mode means a missing client `SurfaceOverride`,
|
|
344
|
+
not a data bug (found on Compass's "Restrict to Persona" field). Detail in
|
|
345
|
+
[surface-frontend](surface-frontend.md). (tcox)
|
|
334
346
|
- 2026-09-03 — Added the **deep-link-from-a-modal-into-a-nested-table** pattern (pin `grouping`;
|
|
335
347
|
build the column-filter chip with the `useServerTableUrlState` serializer, keyed by the table-meta
|
|
336
348
|
**column id**; set `<slug>=<uuid>` to pre-expand the row) and the rule that makes it work:
|
|
@@ -6,7 +6,7 @@ project: TOGa 2.5 Supply
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: feature
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-09-
|
|
9
|
+
updated: 2026-09-04
|
|
10
10
|
owners: [jcardinal, apeterson, tcox]
|
|
11
11
|
files:
|
|
12
12
|
- toga25-supply/src/layout/RecordApprovalModal/helpers/stackedCurrencyJoiner.ts
|
|
@@ -341,6 +341,48 @@ in [surface-layer-schema](../../dbchanges2/features/surface-layer-schema.md):
|
|
|
341
341
|
> shows **`leasePrice`** for all clients, whereas the old DEFAULT JSON showed only unit price. Confirm
|
|
342
342
|
> that is the intended seed shape.
|
|
343
343
|
|
|
344
|
+
### ⚠ VIEW is Surface-driven but EDIT is still JSON — a Core-OFF field disappears from view only
|
|
345
|
+
|
|
346
|
+
A field seeded OFF in Core with **no client `SurfaceOverride`** is invisible in VIEW but still
|
|
347
|
+
rendered in EDIT (edit mode reads `itemRecordEditFields.json`). The symptom is a section header with
|
|
348
|
+
**no fields under it**, and the field appearing the moment the user clicks Edit and vanishing again
|
|
349
|
+
on Cancel — which reads like a data bug, not a config gap. Confirmed 2026-09-04 on the item modal's
|
|
350
|
+
**More Info → "Restrict to Persona"** field for Compass USA + Compass Canada: Core (`2026-07-17d`)
|
|
351
|
+
seeds surface `item-record-more-info` element **57** `isVisible=0` / `isEnabled=0` with
|
|
352
|
+
`config {valueKey: personaItems, computeValueKey: personaItems}`, intending a per-client opt-in, but
|
|
353
|
+
**no Compass override was ever written** (verified on prod **and** client-sandbox: zero
|
|
354
|
+
`SurfaceOverrides` rows for element 57 in either tenant). The data was never missing —
|
|
355
|
+
`apiFields.json`'s COMPASS delta already requests `personaItems.*` (see
|
|
356
|
+
[client-api-fetch-fields](client-api-fetch-fields.md)); only the presentation was. Fix = the missing
|
|
357
|
+
override (`Client_Compass` / `Client_CompassCanada` `2026-09-04a`, see
|
|
358
|
+
[surface-layer-schema](../../dbchanges2/features/surface-layer-schema.md)).
|
|
359
|
+
|
|
360
|
+
**Rule:** when a modal's VIEW moves to Surface and its EDIT stays JSON, every Core-default-OFF
|
|
361
|
+
element needs a per-client `SurfaceOverride` or the field silently drops out of view while staying
|
|
362
|
+
editable. "It shows in Edit mode" is evidence of a **missing override**, not of working config.
|
|
363
|
+
|
|
364
|
+
### ⚠ A seed's `computeValueKey` must exist in the consuming view's `COMPUTE_VALUE` registry
|
|
365
|
+
|
|
366
|
+
`ItemRecordView`'s `COMPUTE_VALUE` registry is keyed by the exact string in the surface element's
|
|
367
|
+
`config.computeValueKey`. The Core seed and the legacy per-client JSON can use **different key names
|
|
368
|
+
for the same formatter** — and did: the seed says `personaItems`, the JSON said `personaNames`, and
|
|
369
|
+
only `personaNames` was registered. A missing key is **not** a harmless no-op: `hydrateField`
|
|
370
|
+
produces `computeValue` `undefined`, the raw reshaped array `[{uuid, name, _joinUuid}]` reaches
|
|
371
|
+
`BaseDetailField`, and React throws **error #31** ("Objects are not valid as a React child … keys
|
|
372
|
+
{uuid, name, _joinUuid}"). Because this app has **no top-level `ErrorBoundary`** (see
|
|
373
|
+
[frontend standard](../../../standards/frontend.md)), that surfaces as the router's raw
|
|
374
|
+
**"Unexpected Application Error!"** page — the whole modal route dies, not one field.
|
|
375
|
+
|
|
376
|
+
Fix shape: register the formatter under **both** keys, and make it accept both value shapes.
|
|
377
|
+
`formatPersonaItems` (`ItemRecordView.tsx`) handles the view-model's flat reshaped
|
|
378
|
+
`{uuid, name: "<number> - <name>"}` **and** the raw API nested `{persona: {name, number}}`, and is
|
|
379
|
+
registered as `personaNames` (legacy JSON) **and** `personaItems` (Surface seed). Whenever you seed
|
|
380
|
+
a `computeValueKey`, grep the consuming view's registry for that literal string first.
|
|
381
|
+
|
|
382
|
+
> **Deploy order is load-bearing: FE first, or together — never the SQL first.** The override alone
|
|
383
|
+
> makes the field visible and therefore **crashes the modal**; the FE alone changes nothing visible.
|
|
384
|
+
> Same shape as the approvals-gate ship-together dependency.
|
|
385
|
+
|
|
344
386
|
## SalesOrders approval-decision modal (approve + deny) — migrated via an OVERLAY adapter seam
|
|
345
387
|
|
|
346
388
|
The SalesOrder approve/deny decision modal's config now sources its display fields from Surface,
|
|
@@ -1002,6 +1044,17 @@ claim is about the `navigation-*` **flags** being inert — still true — not a
|
|
|
1002
1044
|
unused).
|
|
1003
1045
|
|
|
1004
1046
|
## Change history
|
|
1047
|
+
- 2026-09-04 — Fixed the item modal's **More Info → "Restrict to Persona"** field missing in VIEW for
|
|
1048
|
+
Compass USA + Canada. Two causes, both now rules here: (1) the item modal's VIEW is Surface-driven
|
|
1049
|
+
while EDIT is still JSON, so a Core-default-OFF element with no client `SurfaceOverride` vanishes
|
|
1050
|
+
from view yet still renders in edit — element **57** on `item-record-more-info` had **zero**
|
|
1051
|
+
override rows in either Compass tenant, on prod and sandbox; (2) the seed's `computeValueKey`
|
|
1052
|
+
(`personaItems`) was missing from `ItemRecordView`'s `COMPUTE_VALUE` registry, which held only the
|
|
1053
|
+
legacy JSON key `personaNames` — so once the field was visible the raw `[{uuid,name,_joinUuid}]`
|
|
1054
|
+
array hit `BaseDetailField` and killed the route with React **error #31**, shown as the router's
|
|
1055
|
+
"Unexpected Application Error!" because the app has no top-level `ErrorBoundary`.
|
|
1056
|
+
`formatPersonaItems` now accepts both value shapes and is registered under both keys. **Deploy the
|
|
1057
|
+
FE first or together — the SQL alone crashes the modal.** (tcox)
|
|
1005
1058
|
- 2026-09-03 — Recorded that the 2.5 app **still calls `GET /v2/pages/meta`** from five view
|
|
1006
1059
|
models (SalesOrders — twice per load — VendorItems, Inventory, Bundles, ItemFulfillmentModal)
|
|
1007
1060
|
even though nothing in `src/` reads a field off the result. Found by the new Cypress
|
|
@@ -98,6 +98,14 @@ to but distinct from Compass USA. Like Compass USA it spans the **2.0** commerce
|
|
|
98
98
|
see [Config-Driven Expedited Shipping Gating](../../2.0/apps/toga2-commerce/features/expedited-shipping-gating.md).
|
|
99
99
|
|
|
100
100
|
## Notes
|
|
101
|
+
- **Item modal "Restrict to Persona" needed a Surface opt-in that was never written (2026-09-04).**
|
|
102
|
+
Same gap as Compass USA: Core seeds the More-Info `restrictToPersona` field **OFF** (surface 19 /
|
|
103
|
+
element 57) and Canada had **no** override, so the item modal's **More Info** section rendered
|
|
104
|
+
empty in view (the field appeared only in Edit mode).
|
|
105
|
+
`dbchanges2/Client_CompassCanada/2026-09-04a - ItemRecordRestrictToPersonaVisible.sql` adds the
|
|
106
|
+
client-wide `IS_VISIBLE`+`IS_ENABLED` rows — **not yet run in any environment**.
|
|
107
|
+
⚠ **Deploy the toga25-supply FE first or together: the SQL alone crashes the modal** (React error
|
|
108
|
+
#31). See [Surface Frontend](../../2.0/apps/toga25-supply/features/surface-frontend.md).
|
|
101
109
|
- **Surface layer (beta):** like Quad, `Client_CompassCanada` had **no** `AclRecordScripts` dispatch
|
|
102
110
|
grant for the surfaces `meta-group` script (only `meta`, to client role 1) → `GET /v2/surfaces/meta-group`
|
|
103
111
|
403'd EZ-1 while `meta` worked. Fixed 2026-07-01 via
|
|
@@ -205,6 +205,16 @@ separate, related client (see its own profile).
|
|
|
205
205
|
the ⚠ rule that **deactivation is raw bulk SQL, so no model hook ever fires on it**.
|
|
206
206
|
|
|
207
207
|
## Notes
|
|
208
|
+
- **Item modal "Restrict to Persona" needed a Surface opt-in that was never written (2026-09-04).**
|
|
209
|
+
Core seeds the item modal's More-Info `restrictToPersona` field **OFF** for every client
|
|
210
|
+
(surface 19 / element 57), expecting a per-client override — Compass USA had **none**, so the
|
|
211
|
+
modal's **More Info** section rendered **empty in view** while the field still showed in Edit
|
|
212
|
+
mode. Fixed by `dbchanges2/Client_Compass/2026-09-04a - ItemRecordRestrictToPersonaVisible.sql`
|
|
213
|
+
(client-wide `IS_VISIBLE`+`IS_ENABLED`). **Run on client-sandbox only — prod pending.**
|
|
214
|
+
⚠ **Deploy the toga25-supply FE first or together: the SQL alone crashes the modal** (React error
|
|
215
|
+
#31, whole modal route). See
|
|
216
|
+
[Surface Frontend](../../2.0/apps/toga25-supply/features/surface-frontend.md) and
|
|
217
|
+
[Surface Layer Schema](../../2.0/apps/dbchanges2/features/surface-layer-schema.md).
|
|
208
218
|
- **Order status is shipped-only (2026-06-30).** Compass imports all IF stages
|
|
209
219
|
(picked/packed/shipped) but its order `_status` (`_underscore/Model/Compass/SalesOrder.php`,
|
|
210
220
|
shared by Compass USA + Canada) counts **shipped only** — picked/packed never advance a Compass
|
package/package.json
CHANGED