toga-ai 1.0.1065 → 1.0.1067

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.
@@ -15,6 +15,7 @@ files:
15
15
  - _underscore/Model/Client/CustomerNote.php
16
16
  - dbchanges2/Core/2026-10-17b - CustomerLocationsFilesNotesActivity.sql
17
17
  - dbchanges2/Client/2026-10-17b - CustomerLocationsFilesNotes.sql
18
+ - dbchanges2/Core/2026-10-17d - CustomerNotesRecordFieldNames.sql
18
19
  related:
19
20
  - ./record-hard-delete.md
20
21
  - ./record-activity-timeline.md
@@ -66,6 +67,9 @@ RecordFields 2801-2814 cover the three new records.
66
67
  - **`_contactCount` must stay non-stored** — a stored self-aggregate deadlocks the save cascade
67
68
  ([details](./model-save-parent-cascade-stored-field-deadlock.md)).
68
69
  - **Assets link to a customer through Contacts** (`Units.contactId → Contacts.customerId`), not directly.
70
+ - **Copied RecordFields need `name`.** `CaseNotes` RecordFields 2743-2749 have NULL `name` (not fixed), so the
71
+ copy 2809-2814 came out NULL too; filled by `Core/2026-10-17d`. Set `name` on every new RecordField.
69
72
 
70
73
  ## Change history
74
+ - 2026-10-17 — Filled NULL `name` on RecordFields 2809-2814 (Core/2026-10-17d). (jcardinal)
71
75
  - 2026-10-17 — Created: primaryLocationId, _contactCount, Locations_Customers, Customers_Files, CustomerNotes (TRUE-82870). (jcardinal)
@@ -4,4 +4,5 @@
4
4
  |-----|---------|
5
5
  | [TOGa Blox 2.5 — Architecture](architecture.md) | Shared React+TS SOURCE library for the new platform apps (new platform apps first; replaces toga-blox for all apps over time); read the ADR for full detail, not |
6
6
  | [Old blox (toga-blox) straight port inside toga25-blox](features/old-blox-port.md) | Old `@agilant/toga-blox` code copied unchanged into toga25-blox (blox-v1 layer); open before touching any old component, its checks/config, or merging Storybook |
7
+ | [GitHub Actions → AWS role via OIDC (trust policy + sub claim)](workflows/github-actions-aws-oidc-role.md) | How a GitHub Actions job assumes an AWS IAM role with OIDC, and the `sub` claim trap; open before creating or debugging any GitHub-to-AWS role ("Not authorized |
7
8
  | [Moving an old app from @agilant/toga-blox onto toga25-blox](workflows/moving-an-old-app-onto-toga25-blox.md) | Planned steps to switch an old app off the `@agilant/toga-blox` npm package onto toga25-blox source with zero import edits; open before moving any old app. |
@@ -0,0 +1,47 @@
1
+ ---
2
+ title: GitHub Actions → AWS role via OIDC (trust policy + sub claim)
3
+ framework: "2.0"
4
+ repo: toga25-blox
5
+ project: TOGa Blox 2.5
6
+ client: shared
7
+ type: workflow
8
+ status: active
9
+ updated: 2026-10-17
10
+ owners: [jcardinal]
11
+ files:
12
+ - toga25-blox/.github/workflows/apps-build.yml
13
+ - toga25-blox/docs/ci-and-deploy.md
14
+ related:
15
+ - ../architecture.md
16
+ - ../../../standards/secrets-and-build-credentials.md
17
+ ---
18
+ How a GitHub Actions job assumes an AWS IAM role with OIDC, and the `sub` claim trap; open before creating or debugging any GitHub-to-AWS role ("Not authorized to perform sts:AssumeRoleWithWebIdentity").
19
+
20
+ ## Summary
21
+
22
+ Today's only user: toga25-blox `apps-build.yml` job `app-deps` → role
23
+ `arn:aws:iam::975050298201:role/github-actions-toga25-blox` (non-prod) → reads Secrets Manager `build/*` in
24
+ prod `654654170868` (secret layout: [secrets standard](../../../standards/secrets-and-build-credentials.md)).
25
+
26
+ ## Steps (new role or new repo)
27
+
28
+ 1. Check the repo's OIDC subject format first:
29
+ `gh api repos/<owner>/<repo>/actions/oidc/customization/sub`.
30
+ - `use_immutable_subject: true` → token `sub` = `repo:<owner>@<ownerId>/<repo>@<repoId>:<context>`
31
+ (toga25-blox: `repo:agilantsolutions@44615971/toga25-blox@1388231315:<context>`).
32
+ - otherwise → `repo:<owner>/<repo>:<context>`.
33
+ 2. In the role trust policy (provider `token.actions.githubusercontent.com`), set `aud` =
34
+ `sts.amazonaws.com` and `StringLike` `token.actions.githubusercontent.com:sub` to a **list holding both
35
+ forms** (immutable + name), each ending `:*` or the exact context.
36
+ 3. Workflow needs `permissions: id-token: write` and `aws-actions/configure-aws-credentials` with the role ARN.
37
+ 4. Prove it with a real run — the job log shows the assumed role, not just a green YAML lint.
38
+
39
+ ## Gotchas
40
+
41
+ - **Name-only `sub` in the trust policy fails silently forever** on a repo with immutable subjects. The
42
+ `app-deps` job failed on every run from 2026-09-28 (when added) until 2026-10-17 for this reason.
43
+ - `toga25-blox/docs/ci-and-deploy.md` setup steps 33-37 still show only the name form — fix them when next
44
+ in that repo.
45
+
46
+ ## Change history
47
+ - 2026-10-17 — Created: root cause of `app-deps` never passing (immutable OIDC subject); trust now lists both forms (TRUE-82870). (jcardinal)
@@ -12,6 +12,7 @@ related:
12
12
  - ../apps/_underscore/features/cloud-secrets-manager.md
13
13
  - ../apps/api2/architecture.md
14
14
  - ../apps/toga25-blox/architecture.md
15
+ - ../apps/toga25-blox/workflows/github-actions-aws-oidc-role.md
15
16
  ---
16
17
 
17
18
  Every secret a machine (build, CI, app) reads lives in one place, AWS Secrets Manager in the production account; open before adding, reading, or rotating any credential.
@@ -44,7 +45,7 @@ Secret is encrypted with KMS key `alias/toga-secrets` (key policy lets non-prod
44
45
  ### Build readers today (non-prod `975050298201`)
45
46
 
46
47
  - `amplify-platform-build` — Amplify service role; inline policy `platform-build-secrets-read` grants `secretsmanager:GetSecretValue` on prod `secret:build/*` + `kms:Decrypt` on `toga-secrets` via Secrets Manager. Attached to Amplify app `toga25-desk` (`d311sdoq12ddne`).
47
- - `github-actions-toga25-blox` — GitHub OIDC provider (`token.actions.githubusercontent.com`), scoped to repo `agilantsolutions/toga25-blox` only, same policy shape. Used by `.github/workflows/apps-build.yml`.
48
+ - `github-actions-toga25-blox` — GitHub OIDC provider (`token.actions.githubusercontent.com`), scoped to repo `toga25-blox` only (trust `sub` lists both the immutable `agilantsolutions@44615971/toga25-blox@1388231315` form and the name form — see [GitHub Actions → AWS OIDC role](../apps/toga25-blox/workflows/github-actions-aws-oidc-role.md)), same policy shape. Used by `.github/workflows/apps-build.yml`.
48
49
  - **Open item:** production Amplify builds need their own `amplify-platform-build` role in the **prod** account (same-account read — no cross-account sharing needed there).
49
50
 
50
51
  ## Adding a secret / a reader
@@ -34,7 +34,7 @@ _Auto-generated by `knowledge.js index`. Do not hand-edit._
34
34
  - **toga25-supply** (TOGa 2.5 Supply) — 26 doc(s) → [2.0/apps/toga25-supply/INDEX.md](2.0/apps/toga25-supply/INDEX.md)
35
35
  - **toga25-iq** (TOGa IQ) — 1 doc(s) → [2.0/apps/toga25-iq/INDEX.md](2.0/apps/toga25-iq/INDEX.md)
36
36
  - **toga25-desk** (TOGa Desk 2.5) — 1 doc(s) → [2.0/apps/toga25-desk/INDEX.md](2.0/apps/toga25-desk/INDEX.md)
37
- - **toga25-blox** (TOGa Blox 2.5) — 3 doc(s) → [2.0/apps/toga25-blox/INDEX.md](2.0/apps/toga25-blox/INDEX.md)
37
+ - **toga25-blox** (TOGa Blox 2.5) — 4 doc(s) → [2.0/apps/toga25-blox/INDEX.md](2.0/apps/toga25-blox/INDEX.md)
38
38
  - **toga-blox** (TOGa Blox) — 15 doc(s) → [2.0/apps/toga-blox/INDEX.md](2.0/apps/toga-blox/INDEX.md)
39
39
 
40
40
  ## standalone framework
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toga-ai",
3
- "version": "1.0.1065",
3
+ "version": "1.0.1067",
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",
@@ -577,7 +577,16 @@ developer the list name and leave the status alone.
577
577
 
578
578
  ## Step 17 — Report
579
579
 
580
- Short list:
580
+ Short list. **Start the report with the ticket line — REQUIRED, always first** (team rule,
581
+ 2026-10-17), so the developer can get back to the ticket:
582
+
583
+ ```
584
+ **Ticket:** TRUE-82870 — https://app.clickup.com/t/8577082/TRUE-82870
585
+ ```
586
+
587
+ Link = `https://app.clickup.com/t/<CLICKUP_WORKSPACE_ID>/<TICKET>` with the ticket's custom id
588
+ (`CLICKUP_WORKSPACE_ID` = `8577082`, the TOGA ClickUp workspace). Add the ticket title after
589
+ the link when known.
581
590
 
582
591
  1. KB: publish status (Step 5).
583
592
  2. **Central ids — REQUIRED, always present, never skipped** (team rule, 2026-10-17). Its own