toga-ai 1.0.127 → 1.0.129

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.
@@ -7,3 +7,4 @@
7
7
  | [MSP Dashboard & Ticket Visibility Rules](features/msp-dashboard.md) | Why tickets "disappear" in the TOGa View client portal: different pages scope tickets **differently**, and the MSP pages depend on `tickets.customerid` and `SMB | common/togaview/msp_dashboard.php, mvc/msp_client_dashboard, mvc/enterprise_dashboard, mvc/support/support.php |
8
8
  | [Retail Commerce Lifecycle (winback, purchase, claims, activation)](features/retail-commerce-lifecycle.md) | Beyond support, TOGa View hosts the **retail tech-support commerce flows**: subscription purchase/renewal (with payment), service activation, and insurance-styl | mvc/winback_landing/get.php, mvc/winback_payment/get.php, mvc/winback_payment/post.php, mvc/purchase/get.php, mvc/service_activation/get.php, mvc/claims/get.php, mvc/techsupport_app/get.php |
9
9
  | [Ticket Detail Page Security (common/togaview/ticket.php)](features/ticket-detail-page.md) | `common/togaview/ticket.php` is the ticket detail page for nearly ALL hosts — only towfoundation/newcenturyholdingsllc have their own variants; every other clie | common/togaview/ticket.php |
10
+ | [Route 53 Hosted Zone Migration Between AWS Accounts](workflows/route53-cross-account-zone-migration.md) | How to move a domain's DNS records (a Route 53 hosted zone) from one AWS account to another. | |
@@ -0,0 +1,97 @@
1
+ ---
2
+ title: Route 53 Hosted Zone Migration Between AWS Accounts
3
+ framework: "1.0"
4
+ repo: togaview
5
+ project: TOGa View
6
+ client: shared
7
+ type: workflow
8
+ status: active
9
+ updated: 2026-06-18
10
+ owners: ["jcardinal"]
11
+ files: []
12
+ related: []
13
+ ---
14
+
15
+ ## Summary
16
+ How to move a domain's DNS records (a Route 53 hosted zone) from one AWS account to
17
+ another. This is the playbook used to migrate `togaview.com`. The trigger is any time a
18
+ domain's DNS needs to live in a different AWS account (account consolidation, client
19
+ hand-off, separating environments).
20
+
21
+ **Key fact that drives the whole process:** a Route 53 hosted zone **cannot be moved or
22
+ transferred between accounts** — there is no transfer API. You must **export the records,
23
+ create a new zone in the target account, re-import the records, and repoint the domain's
24
+ name servers.** This is a DNS-records move only; it is separate from moving a *domain
25
+ registration* (Route 53 Domains), which is its own transfer process.
26
+
27
+ ## Steps
28
+
29
+ CloudShell is per-account, so you run the export in the **source** account's CloudShell and
30
+ the import in the **target** account's CloudShell, transferring one small file between them.
31
+
32
+ 1. **SOURCE CloudShell — export records.**
33
+ ```bash
34
+ ZONE_ID=$(aws route53 list-hosted-zones-by-name --dns-name togaview.com. \
35
+ --query "HostedZones[?Name=='togaview.com.'].Id | [0]" --output text)
36
+ aws route53 list-resource-record-sets --hosted-zone-id "$ZONE_ID" \
37
+ --output json > togaview-records.json
38
+ ```
39
+ (If the zone has more than ~300 records, `list-resource-record-sets` paginates — add
40
+ pagination handling.)
41
+
42
+ 2. **SOURCE CloudShell — build the import batch.** Strip the apex `SOA` and apex `NS`
43
+ records; the new zone generates its own. Delegated-subdomain NS records are preserved.
44
+ ```bash
45
+ jq --arg z "togaview.com." '{
46
+ Changes: [ .ResourceRecordSets[]
47
+ | select( ((.Type=="SOA") or (.Type=="NS" and .Name==$z)) | not )
48
+ | {Action:"UPSERT", ResourceRecordSet:.} ]
49
+ }' togaview-records.json > change-batch.json
50
+ ```
51
+
52
+ 3. **Move `change-batch.json` to the target account.** CloudShell can't see across
53
+ accounts — use **Actions → Download file** in the source shell, then **Actions → Upload
54
+ file** in the target shell (or copy/paste the contents).
55
+
56
+ 4. **TARGET CloudShell — create zone and import.**
57
+ ```bash
58
+ NEW_ZONE_ID=$(aws route53 create-hosted-zone --name togaview.com \
59
+ --caller-reference "togaview-migration-$(date +%s)" \
60
+ --query 'HostedZone.Id' --output text)
61
+ aws route53 change-resource-record-sets --hosted-zone-id "$NEW_ZONE_ID" \
62
+ --change-batch file://change-batch.json
63
+ aws route53 get-hosted-zone --id "$NEW_ZONE_ID" \
64
+ --query 'DelegationSet.NameServers' --output table
65
+ ```
66
+
67
+ 5. **Verify before cutover** by querying the new zone's name servers directly — this tests
68
+ the new zone without touching live traffic, since the registrar still points at the old
69
+ one. Compare against the live records:
70
+ ```bash
71
+ dig @ns-xxx.awsdns-xx.com togaview.com SOA +short
72
+ dig @ns-xxx.awsdns-xx.com www.togaview.com +short
73
+ ```
74
+
75
+ 6. **Cutover** — at the domain's registrar, replace the NS records with the 4 from step 4.
76
+ Propagation is bounded by the NS record TTL at the registrar.
77
+
78
+ 7. **Cleanup (after propagation confirmed)** — leave the old zone as a fallback for a day or
79
+ two. Once public resolvers (`dig NS togaview.com +short`) return the new name servers,
80
+ empty the old zone of custom records and delete it.
81
+
82
+ ## Systems involved
83
+ AWS Route 53 (hosted zones), AWS CloudShell (per-account CLI), the domain registrar (where
84
+ NS records are set — external for `togaview.com`).
85
+
86
+ ## Edge cases & escalation
87
+ - **Alias / ACM-validation records** that point to AWS resources (CloudFront, ELB/ALB, S3,
88
+ API Gateway) in the **source** account reference account-specific resources that may not
89
+ exist in the target account. Inspect the record dump first; these need special handling or
90
+ recreation. (`togaview.com` had none — plain records only.)
91
+ - **`UPSERT` is idempotent** — if a step fails midway, just re-run it; no duplicates.
92
+ - **Nothing in steps 1–5 touches live DNS.** The only user-visible change is the NS switch in
93
+ step 6.
94
+ - **Domain registration** moving (Route 53 Domains) is a separate transfer, not covered here.
95
+
96
+ ## Change history
97
+ - 2026-06-18 — Initial playbook from the togaview.com hosted-zone migration (jcardinal)
@@ -4,4 +4,4 @@
4
4
  |-----|---------|-------|
5
5
  | [TOGa Supply (toga2-supply) Architecture](architecture.md) | `toga2-supply` is the **React + Vite frontend** for TOGa Supply — warehouse fulfillment tooling (shipment selection, fulfill & ship against carrier APIs, NetSui | toga2-supply/src/api/toga.ts, toga2-supply/src/pages/ShipmentItems/view/ShipmentItemsPage.tsx, toga2-supply/src/pages/EditShipment/view/EditShipmentPage.tsx, toga2-supply/src/pages/EditShipment/api/UpdateShipmentApi.ts, toga2-supply/src/pages/Shipments/view/components/ShipmentsCardTableForm/ShipmentsCardTableForm.tsx |
6
6
  | [Fulfill & Ship](features/fulfill-and-ship.md) | Fulfill & Ship lets a warehouse user select sales-order line items, enter serials, pick a carrier/method, and in one action: create the Item Fulfillment records | toga2-supply/src/pages/ShipmentItems/view/ShipmentItemsPage.tsx, toga2-supply/src/pages/EditShipment/view/EditShipmentPage.tsx, toga2-supply/src/pages/EditShipment/view/components/forms/EditShipmentForm.tsx, toga2-supply/src/pages/EditShipment/api/UpdateShipmentApi.ts, toga2-supply/src/pages/Shipments/view/components/ShipmentsCardTableForm/ShipmentsCardTableForm.tsx, toga2-supply/src/pages/Shipments/api/ShipmentsApi.ts, _underscore/Model/Client/ItemFulfillment.php, _underscore/Trait/Netsuite/ItemFulfillment.php, _underscore/Component/Library/Carriers/Ups/Ups.php |
7
- | [AWS Amplify Build & Deploy (non-prod environments)](workflows/amplify-build-and-deploy.md) | How `toga2-supply` (React + Vite) builds and deploys on **AWS Amplify**. | toga2-supply/amplify.yml, toga2-supply/.github/workflows/sync-stage-environments.yml, toga2-supply/.env.qc-security |
7
+ | [AWS Amplify Build & Deploy (non-prod environments)](workflows/amplify-build-and-deploy.md) | How `toga2-supply` (React + Vite) builds and deploys on **AWS Amplify**. | toga2-supply/amplify.yml, toga2-supply/.gitattributes, toga2-supply/.github/workflows/sync-stage-environments.yml, toga2-supply/.env.qc-security |
@@ -10,6 +10,7 @@ updated: 2026-06-18
10
10
  owners: ["jcardinal"]
11
11
  files:
12
12
  - toga2-supply/amplify.yml
13
+ - toga2-supply/.gitattributes
13
14
  - toga2-supply/.github/workflows/sync-stage-environments.yml
14
15
  - toga2-supply/.env.qc-security
15
16
  related:
@@ -75,6 +76,23 @@ _stage ──▶ Amplify ──▶ build --mode stage
75
76
 
76
77
  ## Edge cases & escalation
77
78
 
79
+ - **Console build spec silently overrides the repo `amplify.yml`.** A build spec saved in the
80
+ Amplify console (App settings → Build settings) **takes precedence over the repo-root
81
+ `amplify.yml`**. Symptom seen: the log ran the custom `preBuild` (`NODE_OPTIONS=8192`,
82
+ `npm ci --legacy-peer-deps`) but the `build` phase started and completed instantly with **zero
83
+ commands** (`# Starting phase: build` → `# Completed phase: build`, no `# Executing command:`
84
+ lines), producing no `dist/` → `CustomerError: Artifact directory doesn't exist: dist`. Cause:
85
+ the console spec had the custom `preBuild` but an **empty `build` phase**, and it won over the
86
+ repo file. Fix: either paste the full spec (with the build command) into the console editor, or
87
+ remove the console override so Amplify uses the repo `amplify.yml`. Diagnostic: if you don't see
88
+ the `Branch '...' -> Vite mode '...'` echo in the build log, the build phase isn't running.
89
+ - **`amplify.yml` must be LF, not CRLF.** A CRLF-terminated `amplify.yml` (easy to produce on
90
+ Windows) can break Amplify's parsing of a multi-line `- |` block-scalar command — the simple
91
+ one-line `preBuild` entries survive but the block-scalar `build` command is dropped, giving the
92
+ same empty-build symptom as above. Mitigations applied: `.gitattributes` pins `*.yml`/`*.yaml`
93
+ to `eol=lf`, and the build step is written as a **single-line** command (no block scalar) to
94
+ remove the parsing fragility entirely. `core.autocrlf` is `false` in this repo, so bytes commit
95
+ as-is — keep the file LF.
78
96
  - **Silent wrong-endpoint trap (caused a production outage):** When Vite is given a `--mode`
79
97
  with no matching `.env.<mode>`, it **silently falls back to the base `.env`** (which points at
80
98
  beta) instead of erroring. An `amplify.yml` that built `--mode "$AWS_BRANCH"` therefore ran
@@ -96,6 +114,10 @@ _stage ──▶ Amplify ──▶ build --mode stage
96
114
 
97
115
  ## Change history
98
116
 
117
+ - 2026-06-18 — Diagnosed empty-`build`-phase failure (`Artifact directory doesn't exist: dist`):
118
+ console build spec overrides the repo `amplify.yml`, and CRLF can drop the block-scalar build
119
+ command. Switched build step to a single-line command, added `.gitattributes` pinning `*.yml`
120
+ to LF. (jcardinal)
99
121
  - 2026-06-18 — Fixed production-breaking deploy: `amplify.yml` now strips the leading `_` from
100
122
  `$AWS_BRANCH` to get the Vite mode and **fails loudly** if `.env.$MODE` is missing (was
101
123
  silently falling back to beta); heap set to 8192; sync workflow targets underscore-prefixed
@@ -7,7 +7,7 @@ _Auto-generated by `knowledge.js index`. Do not hand-edit._
7
7
  - **library** (Library) _(framework core)_ — 4 doc(s) → [1.0/apps/library/INDEX.md](1.0/apps/library/INDEX.md)
8
8
  - **worker** (Worker) — 9 doc(s) → [1.0/apps/worker/INDEX.md](1.0/apps/worker/INDEX.md)
9
9
  - **togadesk** (TOGa Desk) — 7 doc(s) → [1.0/apps/togadesk/INDEX.md](1.0/apps/togadesk/INDEX.md)
10
- - **togaview** (TOGa View) — 5 doc(s) → [1.0/apps/togaview/INDEX.md](1.0/apps/togaview/INDEX.md)
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
13
  - **test** (Test) — 10 doc(s) → [1.0/apps/test/INDEX.md](1.0/apps/test/INDEX.md)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toga-ai",
3
- "version": "1.0.127",
3
+ "version": "1.0.129",
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",