toga-ai 1.0.816 → 1.0.817

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.
@@ -0,0 +1,6 @@
1
+ # store (Store) — 1.0 knowledge
2
+
3
+ | Doc | Summary |
4
+ |-----|---------|
5
+ | [Store (1.0 Storefront / SAML ACS) Architecture](architecture.md) | `store` is a framework **1.0** (`App_`) storefront app. |
6
+ | [Store SAML SP Certificate & Private Keys (togahub.com)](features/saml-sso-certificate-and-keys.md) | How the `store` repo's SAML Service Provider credential — the `togahub.com` X.509 cert and its RSA private key — is stored, loaded and rotated. |
@@ -0,0 +1,72 @@
1
+ ---
2
+ title: Store (1.0 Storefront / SAML ACS) Architecture
3
+ framework: "1.0"
4
+ repo: store
5
+ project: Store
6
+ client: shared
7
+ type: architecture
8
+ status: active
9
+ updated: 2026-09-15
10
+ owners: ["rgirish"]
11
+ files:
12
+ - store/_/app/framework.php
13
+ - store/config.production.ini
14
+ related:
15
+ - ../library/architecture.md
16
+ - ./features/saml-sso-certificate-and-keys.md
17
+ - ../../../clients/prudential/workflows/store-saml-deploy-topology.md
18
+ ---
19
+
20
+ ## Summary
21
+
22
+ `store` is a framework **1.0** (`App_`) storefront app. It also hosts the **SAML Assertion
23
+ Consumer Service (ACS)** for several clients on the `*.togahub.com` hostnames — the inbound
24
+ IdP assertion is decrypted **here**, not in the 2.0 `saml` gateway. SAML lives inline in
25
+ `store/_/app/framework.php` as a large `switch ($returnTo)` on the RelayState value, with one
26
+ inline `$settingsInfo` block per client and a `case 'meta' / case 'acs'` pair inside each.
27
+
28
+ The SP cert/key material lives in the sibling `library` repo under `library/ssl/toga/` and is
29
+ read from disk at request time via `__LIBROOT__`.
30
+
31
+ **Critical rules:** never paste private-key material into `framework.php` — read it from
32
+ `library/ssl/toga/*.key` with `file_get_contents`. The SAML ACS host and the storefront host for
33
+ a client can be **different EB environments**; check DNS before assuming a deploy target
34
+ (see the Prudential store SAML deploy-topology workflow). Certificate and private key must be
35
+ rotated **together** — the three inline SP blocks each carry an `x509cert` that has to match the
36
+ key file.
37
+
38
+ ## SAML entry points
39
+
40
+ Routing is by the RelayState value (`$_POST['RelayState']`, read as `$returnTo`), not by path:
41
+
42
+ | Sub-route | Purpose |
43
+ |---|---|
44
+ | `?meta` | SP metadata XML from `OneLogin_Saml2_Settings::getSPMetadata()` |
45
+ | `?acs` | Assertion Consumer Service — decrypts the inbound `SAMLResponse` |
46
+
47
+ Two SAML stacks are in play in the same file:
48
+ - **php-saml (`OneLogin_Saml2_*`)** — builds the SP settings + `?meta` metadata.
49
+ - **LightSAML + xmlseclibs** — does the actual `?acs` assertion decryption
50
+ (`decryptMultiAssertion`). See the SAML SP certificate & keys feature doc.
51
+
52
+ The RUMCSI branch (`rumcsi.togaview.agilantsolutions.com`) skips decryption entirely and parses
53
+ the raw assertion XML with `SimpleXMLElement` + XPath.
54
+
55
+ ## Handoff to the storefront
56
+
57
+ After a successful assertion, the Prudential-style branches base64-encode a plain
58
+ `xid:first:last:email` string and redirect to `<returnTo>?hash=<base64>`. This is **not
59
+ encrypted and not signed** — unlike the 2.0 gateway's `?saml=` encrypted + uuid-validated
60
+ handoff. See the "Client_True migration (deferred)" section of the SAML SP certificate & keys
61
+ feature doc.
62
+
63
+ ## Known issues
64
+
65
+ - `case 'meta'` sets the `Content-Type` header and `exit`s **without ever echoing
66
+ `$metadata`** — the `?meta` endpoint returns an empty body. Present in both `meta` blocks.
67
+ - `'debug' => true` is set on all three SAML `$settingsInfo` blocks, and a `debugVar()` call
68
+ dumps SAML attributes (XID, name, email) to output.
69
+ - `'strict'` is never set, so php-saml defaults it to `false` and skips condition, timestamp and
70
+ audience validation. Neither `wantAssertionsSigned` nor `wantMessagesSigned` is set.
71
+ - Prudential's SAML config is ~700 lines of inline `switch` in one file with no
72
+ `_Model_<Client>_ClientAuthentication` equivalent.
@@ -0,0 +1,146 @@
1
+ ---
2
+ title: Store SAML SP Certificate & Private Keys (togahub.com)
3
+ framework: "1.0"
4
+ repo: store
5
+ project: Store
6
+ client: shared
7
+ type: feature
8
+ status: active
9
+ updated: 2026-09-15
10
+ owners: ["rgirish"]
11
+ files:
12
+ - store/_/app/framework.php
13
+ - library/ssl/toga/togahub_com_2027-03-31.crt
14
+ - library/ssl/toga/toga_private_key_2027-03-31.key
15
+ related:
16
+ - ../architecture.md
17
+ - ../../library/features/app-sso-initiation.md
18
+ - ../../../2.0/apps/saml/workflows/rotating-the-saml-sp-certificate.md
19
+ - ../../../2.0/standards/ssl-certificate-trust-model.md
20
+ - ../../../clients/prudential/workflows/store-saml-deploy-topology.md
21
+ ---
22
+
23
+ ## Summary
24
+
25
+ How the `store` repo's SAML Service Provider credential — the `togahub.com` X.509 cert and its
26
+ RSA private key — is stored, loaded and rotated. `store` decrypts inbound IdP assertions itself
27
+ (LightSAML), so this credential is what makes Prudential/RUMCSI SSO work. It is **separate from**
28
+ the 2.0 `saml` gateway's SP credential — rotating one does not rotate the other. (As of
29
+ 2026-09-15 the gateway's `/acs` loads its decrypt certs from AWS Secrets Manager, not from disk;
30
+ `store` still reads files. See the SP cert-rotation workflow.)
31
+
32
+ The cert and key files live in the sibling `library` repo at `library/ssl/toga/` and are read at
33
+ request time through `__LIBROOT__`.
34
+
35
+ ## How it works
36
+
37
+ ### Where the material lives (never paste values)
38
+
39
+ - **AWS Secrets Manager**, account **654654170868**, region **us-east-1**.
40
+ - Secret: **`toga/ssl/togahub_com-casigned-2027-03-31`**.
41
+ - JSON keys: `certificate`, `privateKey`, `certificateChain`, `passphrase`.
42
+ - On disk (deployed with the `library` repo):
43
+ - `library/ssl/toga/togahub_com_2027-03-31.crt` — active cert
44
+ - `library/ssl/toga/togahub_com_2027-03-31-chain.crt` — chain
45
+ - `library/ssl/toga/toga_private_key_2027-03-31.key` — active key, **stored decrypted**, mode `600`
46
+ - `library/ssl/toga/togahub_com_2026-02-27.crt` + `toga_private_key.key` — previous pair,
47
+ kept only as the rotation fallback
48
+
49
+ ### Current certificate (rotated 2026-09-15)
50
+
51
+ | | Old | New |
52
+ |---|---|---|
53
+ | File | `togahub_com_2026-02-27.crt` | `togahub_com_2027-03-31.crt` |
54
+ | Issuer | DigiCert / Thawte | Amazon (ACM, `Amazon RSA 2048 M01`) |
55
+ | Validity | expired **2026-09-16** | **2026-09-15 → 2027-03-31** |
56
+ | SANs | 14 | **2** — `togahub.com`, `*.togahub.com` |
57
+
58
+ **The new cert covers only `togahub.com`.** The six other domains the old cert carried
59
+ (`togacommerce`, `togadesk`, `togaview`, `togasupply`, `togaretail`, `togaiq`, plus their
60
+ wildcards) are **not** on it — each of those needs its own ACM cert on its own listener.
61
+
62
+ ### Dual-keypair decrypt (rotation overlap)
63
+
64
+ `case 'acs'` in `store/_/app/framework.php` builds a `$samlKeyPairs` array — **active keypair
65
+ first, previous keypair second** — then one `LightSaml\Credential\X509Credential` per readable
66
+ pair, and passes the whole list to
67
+ `$reader->decryptMultiAssertion($credentials, $decryptDeserializeContext)`.
68
+
69
+ LightSAML's `decryptMulti()` loops the credentials, swallows each individual failure and returns
70
+ on the first success, re-throwing only when all fail. So **no custom retry logic is needed** and
71
+ it fails closed. An IdP still encrypting to the old cert and one already on the new cert both
72
+ work during the overlap. Unreadable keypairs are skipped with `error_log`; an empty credential
73
+ list throws `RuntimeException`.
74
+
75
+ This mirrors the overlap the 2.0 `saml` gateway provides, though the gateway now does it with
76
+ a multi-cert list out of Secrets Manager rather than two files on disk — see the SP
77
+ cert-rotation workflow.
78
+
79
+ ### Private key loading
80
+
81
+ The three inline `$settingsInfo` SP blocks read the key from disk:
82
+
83
+ ```php
84
+ 'privateKey' => trim(file_get_contents(__LIBROOT__ . '/ssl/toga/toga_private_key_2027-03-31.key')),
85
+ ```
86
+
87
+ The key file must be **decrypted on disk** because `framework.php` calls
88
+ `KeyHelper::createPrivateKey($path, '', true)` with an empty password — an encrypted PEM will not
89
+ load.
90
+
91
+ **Deploy model:** the `ssl/**/*.key` ignore rule was deliberately removed from
92
+ `library/.gitignore` so the key ships with the repo. That is the team's current model for this
93
+ key; it is a record of what we do, not a recommendation.
94
+
95
+ ## Gotchas
96
+
97
+ - **PEM newlines are stored as SPACES in Secrets Manager.** The `certificate` / `privateKey`
98
+ values in `toga/ssl/togahub_com-casigned-2027-03-31` have their line breaks replaced by spaces.
99
+ `openssl` rejects the value straight out of the secret. Re-wrap the base64 body at 64 chars
100
+ before writing it to disk.
101
+ - **The date in a secret name is the EXPIRY date, not the issue date.** The secret
102
+ `toga/ssl/togahub_com-casigned-2026-09-16` is **not** a newer cert — it holds the cert that was
103
+ already expiring. Read the dates out of the cert itself, never off the secret name.
104
+ - **Rotate the cert and the key together.** Before 2026-09-15 the three SP blocks had the raw
105
+ private key pasted inline as a base64 string, and the `x509cert` values had been rotated while
106
+ those inline keys had not — cert and key no longer matched, which would have broken SSO on the
107
+ next deploy. Keys are now read from a file, so they cannot drift apart silently.
108
+ - **Don't assume where the ACS runs.** The host that terminates `?acs` for a client may be a
109
+ different EB environment from the storefront. See the Prudential store SAML deploy-topology
110
+ workflow before deploying a cert change.
111
+
112
+ ## Client_True migration (deferred 2026-09-15)
113
+
114
+ Moving Prudential SAML onto the `Client_True` pattern (config `[saml]` section +
115
+ `Core.ClientAuthentications` / `ClientAuthentications_Sso` rows + `App_Sso` + a
116
+ `_Model_<Client>_ClientAuthentication`) was reviewed and **deferred to its own ticket** — the cert
117
+ expired the next day and the migration is multi-day work.
118
+
119
+ Reference implementation to copy when it is picked up: `tools/config.production.ini` `[saml]`
120
+ section, `library/app/sso.php` (`App_Sso::initiate`), `tools/mvc/sso/initiate/get.php`,
121
+ `tools/mvc/sso/get.php`.
122
+
123
+ What the migration must handle:
124
+ - Prudential today has ~700 lines of inline `switch` keyed on `$returnTo`, with certs pasted into
125
+ PHP, and no `_Model_Prudential_ClientAuthentication`.
126
+ - Its handoff is a plain-base64 `?hash=` of `xid:first:last:email` — unencrypted and forgeable —
127
+ versus the encrypted, uuid-validated `?saml=` handoff `Client_True` uses.
128
+ - Prudential **auto-creates users on first login**. `Client_True`'s `getAuthenticatedSsoUser()`
129
+ does not, so that behavior must be written in or SSO logins will start failing for new users.
130
+
131
+ ## Open security items (not fixed 2026-09-15)
132
+
133
+ - The old private key is still in git history — `library` commits `6addc58f7` and `29d55bb97`,
134
+ plus the `store` `framework.php` history. Tracked as a separate compromised-credential ticket.
135
+ - `'debug' => true`, missing `'strict'`, and the attribute-dumping `debugVar()` — see the store
136
+ architecture doc's Known issues.
137
+
138
+ ## Change history
139
+ - 2026-09-15 — Rotated the `togahub.com` SP cert to the ACM-issued `togahub_com_2027-03-31.crt`
140
+ and added a dual-keypair fallback in `?acs` so both the old and new certs decrypt during the
141
+ overlap (`decryptMultiAssertion`). Removed three hardcoded RSA private-key blobs from
142
+ `store/_/app/framework.php` and replaced them with `file_get_contents` on
143
+ `library/ssl/toga/toga_private_key_2027-03-31.key`; chmod 600 the old world-readable key.
144
+ Recorded the Secrets Manager location, the space-instead-of-newline PEM gotcha, and that the
145
+ new cert carries only 2 SANs. Deferred the `Client_True` SAML migration. Commit `3839e49a`.
146
+ (rgirish)
@@ -14,6 +14,7 @@ _Auto-generated by `knowledge.js index`. Do not hand-edit._
14
14
  - **walmarttechservices** (Walmart Tech Services) — 1 doc(s) → [1.0/apps/walmarttechservices/INDEX.md](1.0/apps/walmarttechservices/INDEX.md)
15
15
  - **test** (Test) — 16 doc(s) → [1.0/apps/test/INDEX.md](1.0/apps/test/INDEX.md)
16
16
  - **toga** (TOGa) — 3 doc(s) → [1.0/apps/toga/INDEX.md](1.0/apps/toga/INDEX.md)
17
+ - **store** (Store) — 2 doc(s) → [1.0/apps/store/INDEX.md](1.0/apps/store/INDEX.md)
17
18
  - **tools** (Tools) — 18 doc(s) → [1.0/apps/tools/INDEX.md](1.0/apps/tools/INDEX.md)
18
19
 
19
20
  ## 2.0 framework
@@ -16,3 +16,4 @@
16
16
  | [Prudential Financial](profile.md) | 2.0 | Prudential is a TOGA client whose device-fulfillment flow is driven by **Dell** via the Dell API (`Client_Prudential.Apis.id = 2`). |
17
17
  | [Prudential: Dell ASN failed POST backfill replay](workflows/dell-asn-backfill-replay.md) | 2.0 | When Dell ASN POSTs fail in bulk (e.g. |
18
18
  | [Prudential — HTTP/2 disabled on the Commerce ALB (proxy workaround) + open re-enable action](workflows/http2-alb-workaround.md) | 2.0 | Prudential users hit **`ERR_HTTP2_PROTOCOL_ERROR`** in Chrome and Edge (both Chromium) loading `https://prudential.togacommerce.com`, while the site worked fine |
19
+ | [Prudential store/SAML Deploy Topology & the Wedged-Agent Deploy Timeout](workflows/store-saml-deploy-topology.md) | 1.0 | Where Prudential's SAML ACS actually runs versus where its storefront runs — they are **two different Elastic Beanstalk environments**, and the CodePipeline act |
@@ -12,6 +12,7 @@ apps:
12
12
  - toga2-commerce
13
13
  - toga25-supply
14
14
  - saml
15
+ - store
15
16
  project: _Underscore
16
17
  client: prudential
17
18
  type: profile
@@ -33,6 +34,7 @@ related:
33
34
  - features/supply-orders-csv-export.md
34
35
  - features/order-email-pdf-attachments.md
35
36
  - features/itemclasses-device-tier-data.md
37
+ - workflows/store-saml-deploy-topology.md
36
38
  ---
37
39
 
38
40
  ## Summary
@@ -80,6 +82,13 @@ The order-created cron branches on this id; the shipped/delivered crons branch o
80
82
  breaks HTTP/2, causing `ERR_HTTP2_PROTOCOL_ERROR` in Chrome/Edge. HTTP/2 is currently disabled
81
83
  globally on the `true-togacommerce-prod` ALB as a workaround — **open action to re-enable once
82
84
  their IT fixes the proxy.** See workflows/http2-alb-workaround.md.
85
+ - **SAML ACS and the storefront are DIFFERENT EB environments.** `prudential.togahub.com` (where
86
+ the SAML assertion is decrypted, in the 1.0 `store` repo) points at `prudential-store-prod`
87
+ (us-west-2, account 502614707982), deployed by the pipeline action **`PrudentialStore`**.
88
+ `prudential.togacommerce.com` (the storefront) points at `true-togacommerce-prod` and is
89
+ deployed by **`TrueProductionDeployment`** — so the action named "PrudentialStore" does *not*
90
+ deploy the storefront. `rumcsi.togahub.com` shares `prudential-store-prod`. See
91
+ workflows/store-saml-deploy-topology.md.
83
92
  - Dell will not change their payload shape — see the Dell ASN units interceptor feature doc for the
84
93
  PRE/POST translation that keeps their feed working after the tracking-number bridge migration.
85
94
  - Service request region is resolved from `Customers.name` string (`'USA'`/`'India'`/`'Ireland'`).
@@ -117,6 +126,10 @@ The order-created cron branches on this id; the shipped/delivered crons branch o
117
126
  linking, the "null null" contact-export incident + dedup/backfill remediation.
118
127
  - features/order-email-pdf-attachments.md — which PDF guide is attached to which customer
119
128
  order email at which stage, the S3 asset list, and the four crons that send them.
129
+ - workflows/store-saml-deploy-topology.md — where Prudential's SAML ACS actually runs vs
130
+ the storefront, the split AWS accounts, and the wedged-agent EB deploy timeout.
131
+ - ../../1.0/apps/store/features/saml-sso-certificate-and-keys.md — the togahub.com SP cert/key
132
+ that decrypts Prudential's assertions.
120
133
  - features/supply-orders-csv-export.md — the Prudential-only Sales Orders CSV export in TOGa 2.5
121
134
  Supply (`toga25-supply`): its two queries, why contacts join `SalesOrders.contactId` (not
122
135
  `Units.contactId`, NULL until Dell assigns the asset), and the `ServiceRequests_Units` fan-out.
@@ -0,0 +1,101 @@
1
+ ---
2
+ title: Prudential store/SAML Deploy Topology & the Wedged-Agent Deploy Timeout
3
+ framework: "1.0"
4
+ project: Store
5
+ client: prudential
6
+ type: workflow
7
+ status: active
8
+ updated: 2026-09-15
9
+ owners: ["rgirish"]
10
+ files:
11
+ - store/_/app/framework.php
12
+ related:
13
+ - ../profile.md
14
+ - ../../../1.0/apps/store/architecture.md
15
+ - ../../../1.0/apps/store/features/saml-sso-certificate-and-keys.md
16
+ ---
17
+
18
+ ## Summary
19
+
20
+ Where Prudential's SAML ACS actually runs versus where its storefront runs — they are **two
21
+ different Elastic Beanstalk environments**, and the CodePipeline action names point at the
22
+ opposite one from what you would guess. Read this before deploying anything SAML-related for
23
+ Prudential. It also records the EB deploy failure mode we hit on 2026-09-15 (a wedged command
24
+ agent that times out after 14 minutes while the environment still shows Green).
25
+
26
+ ## The routing — the pipeline action names are misleading
27
+
28
+ | Hostname | CNAME → EB environment | Deployed by pipeline action |
29
+ |---|---|---|
30
+ | `prudential.togacommerce.com` (storefront) | `true-togacommerce-prod.us-west-2` | **`TrueProductionDeployment`** |
31
+ | `prudential.togahub.com` (**SAML ACS**) | `prudential-store-prod.us-west-2` | **`PrudentialStore`** |
32
+ | `rumcsi.togahub.com` | `prudential-store-prod.us-west-2` | `PrudentialStore` |
33
+
34
+ **The action named `PrudentialStore` does NOT deploy the Prudential storefront.**
35
+ `TrueProductionDeployment` does. `PrudentialStore` deploys the host that decrypts the SAML
36
+ assertion — so **cert / decrypt code changes must land on `prudential-store-prod`.**
37
+
38
+ `rumcsi.togahub.com` shares that same environment, so a bad SAML deploy there breaks RUMCSI
39
+ login too.
40
+
41
+ ### Accounts and regions (they are split)
42
+
43
+ - **Pipeline:** `Store-Production`, AWS account **502614707982**, region **us-west-2**.
44
+ Not `us-east-1`, and not account `654654170868` where most other TOGA pipelines live.
45
+ - **Route53** zones for `togacommerce.com` and `togahub.com` are in account **654654170868**,
46
+ while the EB environments they point at are in **502614707982**. You need both accounts to
47
+ trace a hostname end-to-end.
48
+
49
+ ## Failure mode — 14-minute command timeout with a Green environment
50
+
51
+ Symptoms in the EB event log:
52
+
53
+ ```
54
+ The following instances have not responded in the allowed command timeout time
55
+ Command execution completed on all instances. Summary: [Successful: 0, TimedOut: 1]
56
+ Failed to deploy application.
57
+ ```
58
+
59
+ The environment still reports **Green / Ok**, which is misleading — the deploy never ran, but
60
+ the old version is still serving traffic fine.
61
+
62
+ ### How to confirm it is a wedged command agent
63
+
64
+ 1. Check what the instance actually thinks it is running:
65
+ ```
66
+ aws elasticbeanstalk describe-instances-health --attribute-names All \
67
+ --environment-name prudential-store-prod --region us-west-2
68
+ ```
69
+ A wedged agent shows `Deployment.VersionLabel` still on the **old** build with
70
+ `Deployment.Status: Deployed`, while `CPU Idle` is ~99% and load average ~0.0. That means the
71
+ instance never picked up the deploy command at all — it is not busy, it is deaf.
72
+ 2. Check whether SSM sees the instance:
73
+ ```
74
+ aws ssm describe-instance-information --region us-west-2
75
+ ```
76
+ An **empty** result for the instance confirms the agent is not reporting.
77
+
78
+ Observed 2026-09-15: `prudential-store-prod` on `i-07ae1b81ee48df938` (t3.micro, running since
79
+ 2026-07-17), stuck on an Aug 13 build. `spglobal-store-prod` failed identically on
80
+ `i-04a6a50cffd37457e` — that environment has **no instances and no DNS pointing at it**.
81
+
82
+ ## What you need to do
83
+
84
+ 1. Confirm the diagnosis with the two AWS commands above before touching anything.
85
+ 2. Reboot the EC2 instance (EC2 console or `aws ec2 reboot-instances`).
86
+ 3. Watch the EB event log for `Command is executing on all instances` — that means the EB command
87
+ channel is back.
88
+ 4. Re-run the failed pipeline deploy.
89
+ 5. If it times out again, do **not** reboot a second time. Use an EB **Instance refresh** /
90
+ instance replacement instead.
91
+
92
+ A reboot restored the EB command channel on 2026-09-15, but SSM still did not report after 3
93
+ minutes — EB working again is the signal to retry, not SSM.
94
+
95
+ ## Change history
96
+ - 2026-09-15 — Created while rotating the `togahub.com` SAML cert. Documented that
97
+ `prudential.togahub.com` (SAML ACS) and `prudential.togacommerce.com` (storefront) are separate
98
+ EB environments with swapped-sounding pipeline action names, the split AWS accounts/regions,
99
+ and the wedged-command-agent deploy timeout with its `describe-instances-health` /
100
+ `describe-instance-information` diagnosis and reboot-then-instance-refresh remediation.
101
+ (rgirish)
@@ -5,12 +5,13 @@ apps:
5
5
  - togadesk
6
6
  - togaview
7
7
  - library
8
+ - store
8
9
  project: TOGa Desk
9
10
  client: rumcsi
10
11
  type: profile
11
12
  status: active
12
- updated: 2026-08-21
13
- owners: ["mhammontree"]
13
+ updated: 2026-09-15
14
+ owners: ["mhammontree", "rgirish"]
14
15
  files: []
15
16
  related:
16
17
  - ../../1.0/apps/togadesk/features/per-client-host-restriction.md
@@ -19,6 +20,7 @@ related:
19
20
  - ../../1.0/apps/togadesk/features/email-to-ticket-intake.md
20
21
  - ../../1.0/apps/togadesk/architecture.md
21
22
  - ../../1.0/apps/togaview/architecture.md
23
+ - ../../1.0/apps/store/features/saml-sso-certificate-and-keys.md
22
24
  ---
23
25
 
24
26
  ## Summary
@@ -124,6 +126,12 @@ hardcoded to `clientId = 2`; no RUMC row has `adPeopleId`/`ldap_user`), and
124
126
  - **No SAML auto-provisioning.** Unlike towfoundation and newcenturyholdingsllc, the rumcsi
125
127
  branch only `SELECT`s `people`; it never creates them. That is precisely why the bulk load was
126
128
  necessary.
129
+ - **`rumcsi.togahub.com` runs on the `prudential-store-prod` EB environment** (1.0 `store` repo,
130
+ us-west-2, account 502614707982) — the same host as Prudential's SAML ACS. A bad SAML/cert
131
+ deploy there breaks RUMCSI login too. RUMCSI's ACS branch skips assertion decryption (raw
132
+ `SimpleXMLElement` + XPath), so the SP cert rotation does not affect it directly. See
133
+ ../../1.0/apps/store/features/saml-sso-certificate-and-keys.md and
134
+ ../prudential/workflows/store-saml-deploy-topology.md.
127
135
 
128
136
  ## Change history
129
137
 
@@ -211,6 +211,13 @@
211
211
  "role": "app",
212
212
  "dependsOn": []
213
213
  },
214
+ {
215
+ "repo": "store",
216
+ "project": "Store",
217
+ "framework": "1.0",
218
+ "role": "app",
219
+ "dependsOn": []
220
+ },
214
221
  {
215
222
  "repo": "toga-blox",
216
223
  "project": "TOGa Blox",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toga-ai",
3
- "version": "1.0.816",
3
+ "version": "1.0.817",
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",