toga-ai 1.0.217 → 1.0.218
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.
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
| [Create Elastic Beanstalk Environment (script)](features/create-elastic-beanstalk.md) | `team/aws/create_elastic_beanstalk.php` is a **standalone** (no `App_` framework) constants-driven PHP generator. | test/team/aws/create_elastic_beanstalk.php |
|
|
9
9
|
| [Developer Generators (password, UUID)](features/dev-generators.md) | Two tiny **1.0 `App_` framework** convenience scripts for everyday developer needs. | test/team/generate_password.php, test/team/uuid.php |
|
|
10
10
|
| [Forecast vs NetSuite Discrepancy Analysis](features/forecast-netsuite-discrepancy-analysis.md) | `team/forecast-netsuite/discrepancy_analysis.php` detects discrepancies between our **Forecast database** and **NetSuite** (the source of truth for all sales da | test/team/forecast-netsuite/discrepancy_analysis.php |
|
|
11
|
+
| [@goagilant.com → @togatech.com Email-Domain Migration (1.0 + 2.0)](features/goagilant-to-togatech-email-migration.md) | Reference + technique for migrating the company email domain `@goagilant.com` → `@togatech.com` across **both** platforms. | migrate_goagilant_to_togatech_2026-06-26.sql, migrate_goagilant_to_togatech_LEGACY_2026-06-26.sql |
|
|
11
12
|
| [TableView Builder (2.0 TableViews SQL generator)](features/tableview-builder.md) | `team/tableViewBuilder/` generates SQL `INSERT` statements for the **2.0 `TableViews`**, `TableViewFields`, and `TableViewJoins` tables from a plain SQL `SELECT | test/team/tableViewBuilder/TableViewGenerator.php, test/team/tableViewBuilder/index.php, test/team/tableViewBuilder/Instructions.md |
|
|
12
13
|
| [Talos Knowledge Base Pipeline (Uploader + Processor)](features/talos-kb-pipeline.md) | `team/talos/` holds the two-script web tooling that feeds the **TOGa Talos** (TOGa IQ) AI knowledge bases. | test/team/talos/kb_uploader.php, test/team/talos/kb_processor.php, test/team/talos/kb_processor.ini |
|
|
13
14
|
| [TOGa 2.0 Client Onboarding SQL Generator](features/toga2-client-onboarding-sql.md) | `team/generate_toga2_onboarding_sql.php` generates the SQL needed to **onboard a new client** onto the 2.0 platform. | test/team/generate_toga2_onboarding_sql.php |
|
|
@@ -21,6 +21,7 @@ related:
|
|
|
21
21
|
- ./features/url-domain-markdown-document.md
|
|
22
22
|
- ./features/dev-generators.md
|
|
23
23
|
- ./features/talos-kb-pipeline.md
|
|
24
|
+
- ./features/goagilant-to-togatech-email-migration.md
|
|
24
25
|
---
|
|
25
26
|
|
|
26
27
|
## Summary
|
|
@@ -83,6 +84,7 @@ manually against the target database; they do not execute changes themselves.
|
|
|
83
84
|
| `generate_toga2_user_access_sql.php` | 1.0 | 2.0 client DBs | [toga2-user-cross-client-access-sql](./features/toga2-user-cross-client-access-sql.md) |
|
|
84
85
|
| `generate_password.php`, `uuid.php` | 1.0 | dev utility | [dev-generators](./features/dev-generators.md) |
|
|
85
86
|
| `talos/kb_uploader.php`, `talos/kb_processor.php` | standalone | S3 + AWS Bedrock KBs | [talos-kb-pipeline](./features/talos-kb-pipeline.md) |
|
|
87
|
+
| `migrate_goagilant_to_togatech_*.sql` | standalone | 2.0 `Client_` DBs + 1.0 schemas | [goagilant-to-togatech-email-migration](./features/goagilant-to-togatech-email-migration.md) |
|
|
86
88
|
|
|
87
89
|
**Retired / not documented:** `team/DOA_gitbook/` is being retired.
|
|
88
90
|
|
|
@@ -91,3 +93,5 @@ manually against the target database; they do not execute changes themselves.
|
|
|
91
93
|
- 2026-06-16 — Initial capture of the `team/` folder. Registered repo in `registry.json`.
|
|
92
94
|
- 2026-06-22 — Un-retired `team/DOA_talos/` → `team/talos/`; documented its uploader +
|
|
93
95
|
processor in [talos-kb-pipeline](./features/talos-kb-pipeline.md).
|
|
96
|
+
- 2026-06-26 — Documented the @goagilant.com → @togatech.com email-domain migration SQL
|
|
97
|
+
artifacts in [goagilant-to-togatech-email-migration](./features/goagilant-to-togatech-email-migration.md).
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "@goagilant.com → @togatech.com Email-Domain Migration (1.0 + 2.0)"
|
|
3
|
+
framework: "1.0"
|
|
4
|
+
repo: test
|
|
5
|
+
project: Test
|
|
6
|
+
client: shared
|
|
7
|
+
type: feature
|
|
8
|
+
status: active
|
|
9
|
+
updated: 2026-06-26
|
|
10
|
+
owners: [bala]
|
|
11
|
+
files:
|
|
12
|
+
- migrate_goagilant_to_togatech_2026-06-26.sql
|
|
13
|
+
- migrate_goagilant_to_togatech_LEGACY_2026-06-26.sql
|
|
14
|
+
related:
|
|
15
|
+
- ../architecture.md
|
|
16
|
+
- ./2-0-deployment-client-sql.md
|
|
17
|
+
- ../../../2.0/apps/_underscore/features/email-template-sending.md
|
|
18
|
+
- ../../../2.0/apps/_underscore/features/per-client-database-connections.md
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Summary
|
|
22
|
+
|
|
23
|
+
Reference + technique for migrating the company email domain `@goagilant.com` →
|
|
24
|
+
`@togatech.com` across **both** platforms. Two standalone SQL artifacts (run manually
|
|
25
|
+
against the right cluster, not framework code) were produced:
|
|
26
|
+
|
|
27
|
+
- `migrate_goagilant_to_togatech_2026-06-26.sql` — 2.0 prod, per-tenant `Client_` DBs.
|
|
28
|
+
- `migrate_goagilant_to_togatech_LEGACY_2026-06-26.sql` — 1.0 legacy.
|
|
29
|
+
|
|
30
|
+
The durable value is the **email-column blast-radius map** for each environment and the
|
|
31
|
+
**two collision gotchas** that make a blanket find/replace unsafe. Use this before any
|
|
32
|
+
future email-domain change.
|
|
33
|
+
|
|
34
|
+
## Where @goagilant.com emails live
|
|
35
|
+
|
|
36
|
+
### 2.0 prod (per-tenant `Client_` DBs, prod-client cluster)
|
|
37
|
+
|
|
38
|
+
Value columns that actually held `@goagilant.com` data:
|
|
39
|
+
|
|
40
|
+
| Column | Notes |
|
|
41
|
+
|---|---|
|
|
42
|
+
| `Users.email` | **UNIQUE** — identity logins. See Client_True gotcha. |
|
|
43
|
+
| `ContactEmailAddresses.emailAddress` | |
|
|
44
|
+
| `EmailTemplates.sendFromEmailAddress` | Present in **all 32 clients**; outbound `From:` — deliverability-sensitive (sender-verification gate below). |
|
|
45
|
+
| `IntegrationsEmail.fromEmailAddress` | Outbound `From:` — deliverability-sensitive. |
|
|
46
|
+
| `SalesOrderEmailAddresses.emailAddress` | Composite UNIQUE `(salesOrderId, emailAddress)`. |
|
|
47
|
+
| `EmailTemplateOutgoingEmailAddresses.emailAddress` | Composite UNIQUE. |
|
|
48
|
+
|
|
49
|
+
Columns that exist but held **zero** `@goagilant.com` data (skip):
|
|
50
|
+
`Campaigns.bookingEmailAddress`, `LocationEmailAddresses.emailAddress`,
|
|
51
|
+
`IntegrationsEmailOutgoingEmailAddresses.emailAddress`.
|
|
52
|
+
|
|
53
|
+
`ContactAttempts.c_contactEmail` exists **only** in `Client_True` (BDR).
|
|
54
|
+
|
|
55
|
+
Tenants with `Users.email` hits included Compass, CompassCanada, Managelife, Quad, Growrk,
|
|
56
|
+
Nychh, Prudential, Aig, Endeavorhealth, Erau, Masonite, Rate, Spglobal, Towfoundation, Wje,
|
|
57
|
+
Wmchealth, Ynhh, plus True (special-cased).
|
|
58
|
+
|
|
59
|
+
### 1.0 legacy
|
|
60
|
+
|
|
61
|
+
| Table | Hits | Notes |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| `TOGA.Users.email` | 1117 goagilant | Main platform login. **NOT unique** (PRIMARY on `id` only). togatech migration already ~half done: 1077 togatech rows exist; 7 goagilant overlap a togatech local-part. |
|
|
64
|
+
| `TOGA_<tenant>.ClientUsers.email` | 0 goagilant | Client-portal logins — clean across all 14 tenants. |
|
|
65
|
+
| `TOGA_<tenant>.Contacts.emailAddress` | ~255 | CRM. `relayEmailAddress` = 0 everywhere. |
|
|
66
|
+
| `Vision.Users` | 343 | Sibling-app login, 0 togatech twins. |
|
|
67
|
+
| `RetailServices.DashboardUsers` | 6 | 0 togatech twins. |
|
|
68
|
+
| `ITADPortal.Users` | 3 | 0 togatech twins. |
|
|
69
|
+
| `TOGaDeskAdmin.users` | 2 | 0 togatech twins. |
|
|
70
|
+
|
|
71
|
+
**Not migrated** (high-volume ancillary, out of scope): helpdesk `TOGaDeskSupport.tickets`
|
|
72
|
+
(15725), `Common` directory (~3700), RetailServices customer data, Netsuite/Store. The
|
|
73
|
+
**Advisor** and **GoAgilant (WordPress)** schemas are not queryable via the toga-db MCP tool
|
|
74
|
+
and were not assessed here.
|
|
75
|
+
|
|
76
|
+
## How it works (safe-rename technique)
|
|
77
|
+
|
|
78
|
+
Swap **only** the 14-char domain suffix, preserving the local-part exactly:
|
|
79
|
+
|
|
80
|
+
```sql
|
|
81
|
+
UPDATE SomeTable
|
|
82
|
+
SET col = CONCAT(LEFT(col, CHAR_LENGTH(col) - 14), '@togatech.com')
|
|
83
|
+
WHERE col LIKE '%@goagilant.com';
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Why not `REPLACE()`: `REPLACE` is case-sensitive (misses `@GoAgilant.com`) and can touch a
|
|
87
|
+
mid-string match. `LEFT`/`CONCAT` on the trailing 14 chars touches only the domain and keeps
|
|
88
|
+
apostrophes/odd local-parts intact (e.g. `do'connell@`). The `LIKE` is the natural
|
|
89
|
+
case-insensitive guard for the match.
|
|
90
|
+
|
|
91
|
+
For the non-unique 1.0 `TOGA.Users`, a guarded variant uses `NOT EXISTS` against a
|
|
92
|
+
materialized derived table of existing `@togatech.com` addresses, so the 7 would-be
|
|
93
|
+
duplicate logins are skipped rather than creating colliding identities.
|
|
94
|
+
|
|
95
|
+
## Scope (explicit developer instructions)
|
|
96
|
+
|
|
97
|
+
- **2.0:** exclude `Client_True.Users` (see gotcha); still migrate True's other email tables.
|
|
98
|
+
- **1.0:** scoped to **USERS + CONTACTS only** — explicitly exclude `Customers`,
|
|
99
|
+
`SMBContracts` (contracts/work orders), and send-from in 1.0.
|
|
100
|
+
- **Never** touch any `*Logs*` schemas.
|
|
101
|
+
|
|
102
|
+
## Sender-address gate (deliverability)
|
|
103
|
+
|
|
104
|
+
`EmailTemplates.sendFromEmailAddress` (~118 rows across all 2.0 clients) and
|
|
105
|
+
`IntegrationsEmail.fromEmailAddress` change the outbound `From:` domain. These were gated
|
|
106
|
+
as a separate step pending `togatech.com` sender verification (SPF/DKIM/DMARC). The domain
|
|
107
|
+
was **confirmed verified 2026-06-26**, so the sender-address step is cleared to run. Do not
|
|
108
|
+
flip a `From:` domain ahead of sender verification — it breaks deliverability.
|
|
109
|
+
|
|
110
|
+
## Gotchas
|
|
111
|
+
|
|
112
|
+
- **Client_True (2.0) UNIQUE twins.** `Users.email` is UNIQUE. Of 343 `@goagilant.com`
|
|
113
|
+
users, **325 already have a pre-staged `@togatech.com` twin** (twins mostly never logged
|
|
114
|
+
in, `dtLastLogin` NULL — a togatech cutover was partially staged). A blanket rename
|
|
115
|
+
collides on the UNIQUE constraint (fails, or with `IGNORE` **silently skips 325**). Of the
|
|
116
|
+
18 no-twin rows, ~13 are service/SFTP/support accounts (`odpsftp@`, `staplessftp@`,
|
|
117
|
+
`support@`, …) whose rename could break integrations. **Decision:** exclude
|
|
118
|
+
`Client_True.Users.email` from the migration; migrate only True's 64 non-identity rows
|
|
119
|
+
(ContactEmailAddresses 56, Campaigns 1, ContactAttempts 1, EmailTemplates.sendFromEmailAddress
|
|
120
|
+
6), which carry no UNIQUE-on-email risk.
|
|
121
|
+
- **Legacy `TOGA.Users` is non-unique and half-migrated.** PRIMARY is on `id` only, so a
|
|
122
|
+
rename can produce duplicate login emails. 1077 togatech rows already exist and 7 goagilant
|
|
123
|
+
rows overlap a togatech local-part — use the `NOT EXISTS`-guarded variant to skip those 7.
|
|
124
|
+
- **Run against the right cluster.** 2.0 lives in per-tenant `Client_` DBs on the prod-client
|
|
125
|
+
cluster; 1.0 in `TOGA` / `TOGA_<tenant>` / sibling-app schemas. Review the generated SQL
|
|
126
|
+
before executing — these are manual-run artifacts, nothing auto-executes.
|
|
127
|
+
|
|
128
|
+
## Change history
|
|
129
|
+
|
|
130
|
+
- 2026-06-26 — Initial capture. Mapped 2.0 + 1.0 email columns, recorded the Client_True
|
|
131
|
+
UNIQUE-twin and legacy non-unique-login collision gotchas, the LEFT/CONCAT safe-rename
|
|
132
|
+
technique, scope exclusions, and the cleared sender-verification gate. (bala)
|
|
133
|
+
</content>
|
|
134
|
+
</invoke>
|
package/knowledge/INDEX.md
CHANGED
|
@@ -10,7 +10,7 @@ _Auto-generated by `knowledge.js index`. Do not hand-edit._
|
|
|
10
10
|
- **togaview** (TOGa View) — 6 doc(s) → [1.0/apps/togaview/INDEX.md](1.0/apps/togaview/INDEX.md)
|
|
11
11
|
- **webhook** (Webhook) — 1 doc(s) → [1.0/apps/webhook/INDEX.md](1.0/apps/webhook/INDEX.md)
|
|
12
12
|
- **walmarttechservices** (Walmart Tech Services) — 1 doc(s) → [1.0/apps/walmarttechservices/INDEX.md](1.0/apps/walmarttechservices/INDEX.md)
|
|
13
|
-
- **test** (Test) —
|
|
13
|
+
- **test** (Test) — 12 doc(s) → [1.0/apps/test/INDEX.md](1.0/apps/test/INDEX.md)
|
|
14
14
|
- **toga** (TOGa) — 2 doc(s) → [1.0/apps/toga/INDEX.md](1.0/apps/toga/INDEX.md)
|
|
15
15
|
- **tools** (Tools) — 5 doc(s) → [1.0/apps/tools/INDEX.md](1.0/apps/tools/INDEX.md)
|
|
16
16
|
|
package/package.json
CHANGED