Skip to content

Release 1.36.0 — Admin UI CDN outage fix + A2A prod auth + sign-in/identity (DEV→main) - #2663

Merged
jung-thomas merged 27 commits into
mainfrom
release/v1.36.0
Oct 5, 2026
Merged

jung-thomas merged 27 commits into
mainfrom
release/v1.36.0

Conversation

@jung-thomas

Copy link
Copy Markdown
Contributor

Release 1.36.0 — DEV → main promotion

Promotes the current DEV release train to main for the PROD blue-green deploy.
27 commits / ~8 PRs since 1.35.0 (which transported to PROD 2026-10-04).

Prepared with the whats-new skill (cutoff 2026-10-04T22:06Z, 10 PRs digested into hugo/data/whats_new.json) + .deploy/mta.yaml bump 1.35.0 → 1.36.0.

Headline: PROD Admin UI outage fixed + hardened

A2A production auth

Sign-in / identity

Reliability

Verification

  • Full DEV deploy green via deploy-watcher: tutorials-ims mtar 1.35.0 + MCP MTA tutorials-mcp 1.0.0, all 4 apps 1/1, srv + mcp-srv /health 200 (2026-10-05).

Deploy note

PROD is blue-green via the deploy-mta chain; the MCP MTA (mta-mcp.yaml, deploy/mcp-prod.mtaext) is a separate deploy after the main MTA.

feat(signin): move SAP ID to top of provider list
…s progress (#2651)

Users who already have an SAP ID but sign in with a non-matching social
provider resolve to a separate Users row; their progress, completions, and
Devtoberfest points don't carry over (root cause of #2651). Add a static
warning above the provider buttons steering SAP-ID holders to Continue with
SAP ID. Content-only, no JS.
…2651

feat(signin): warn SAP-ID holders a mismatched social login forks progress #2651
…ource-hash drift

The #672 no-revert guard rejects any publish whose source-markdown hash
matches an ABANDONED prior version. This also blocks the legitimate
drift-clearing republish when a slug's current upstream markdown hashes
back to a pre-churn version — e.g. a trailing-whitespace strip that
returns the source to an earlier byte-identical state. Such a slug is
stuck: /content/source-hashes keeps the churned hash, so the scheduled
content-drift check fails on it every run, and neither delta nor --force
can push the clean hash (both run the server-side guard).

The only override is publish-content.ts's --allow-revert (slug-paired),
which until now lived ONLY in the workstation path — colliding with the
'never publish from a workstation' rule. This threads it through the
canonical rebuild-content.yml:

- new boolean input 'allow-revert' (default false)
- threaded as --allow-revert ONLY when effective_mode == 'slug-targeted'
  (guarantees PUBLISH_SLUG is set; resolveAllowRevertSlugs throws without
  a slug), so it can never blanket-override a full/catalog rebuild

Repro: devtoberfest2026-abap-week2-validation (server 5ecfcc…, clean
upstream 186fe5… is a prior/abandoned hash → guard-rejected on every
slug-targeted republish).
feat(rebuild-content): add allow-revert input to clear #672-guarded source-hash drift
…only degrade (#2649)

The route-scoped IAS auth middleware for POST /a2a resolved IAS and XSUAA in a
single xsenv.getServices() call keyed by hardcoded instance names. In prod the
XSUAA instance is 'xsuaa-imsprod' (dev: 'tutorials-xsuaa'), so the name miss
threw out of the combined call and degraded /a2a to a full anonymous
pass-through — taking IAS-only M2M (the surface's real purpose) down with it.
DEV worked, prod /a2a returned 401 on valid IAS client-credentials tokens while
prod /mcp-auth (same IAS app) accepted them.

Fix:
- Resolve IAS alone (required). A missing/renamed XSUAA binding can no longer
  take IAS auth down.
- Resolve XSUAA independently by service LABEL ('xsuaa'), with the dev instance
  name as a fallback. If absent, proceed IAS-only (log .info, NOT pass-through).
- XSUAA fallback remains wired when present (hybrid acceptance of human XSUAA
  bearers during the token-source cutover — do NOT remove until Central Joule
  consumers confirm cutover).

Also:
- docs/developers/operations/ias-setup.md: M2M (client_credentials) runbook on
  the shared tutorials-identity IAS app — canonical cf update-service grant
  config, the two-condition explanation (instance grant + per-space binding
  resolution), verify snippet, cf-target-drift warning.
- mta-mcp.yaml: correct stale comments that claimed public-client:true /
  credential-type:NONE yields a secretless binding — the broker still issues a
  credential-type:SECRET binding, which the M2M flow relies on.
- test/unit/a2a/ias-auth-mw.test.js: regression coverage for the three
  binding-resolution branches (XSUAA by label when name differs; IAS-only when
  no XSUAA; pass-through when IAS missing).
1.136.0 was purged from the UI5 CDN (versions removed 1yr after EOM),
404ing the admin-shell bootstrap and taking the whole Admin UI down in
PROD. 1.148 is the current LTS (maintained through Q3/2027+).

- admin-shell + display-app CDN loader URLs -> 1.148.12 (exact live patch)
- all 32 ui5.yaml framework.version -> 1.148.12 (ui5 build resolves this)
- all 53 manifest.json minUI5Version floors -> 1.148.0

Verified: ui5 build of admin-shell succeeds; dist/index.html loads 1.148.12.
fix(admin): UI5 CDN pin 1.136.0 → 1.148.12 — PROD Admin UI outage
…son)

Collapse the ~85 hardcoded UI5 version strings behind one file,
app/admin-shell/ui5-version.json, driving:
  - the 2 CDN bootstrap URLs (admin-shell + display-app index.html,
    now GENERATED from index.template.html)
  - the 32 ui5.yaml framework.version values (admin + admin-shell)
  - the admin-shell manifest.template.json minUI5Version floor

scripts/apply-ui5-version.cjs is both the generator (prebuild hook,
`npm run apply:ui5-version`) and the CI drift guard (`--check`,
registered as check-ui5-version in run-static-guards.ts; auto-fixable).
A bump is now a one-line edit; CI fails any consumer that drifts.

Motivation: on 2026-10 SAP purged 1.136.0 from the CDN and the
admin-shell bootstrap 404'd, taking the whole Admin UI down in PROD
(fixed in #2658). This prevents a recurrence from a missed edit.
feat(admin): single source of truth for SAPUI5 version
- docs: wrap bare <your app> placeholder in backticks so VitePress/Vue
  stops parsing it as an unclosed HTML tag (ias-setup.md:198 build error).
- test: seed a ContentCurrent row in semantic-search-handler.test.js so
  the #2631 servability gate (filterServableSlugs) does not drop the only
  seeded tutorial. Fixture was missed when #2631 added the gate.
…unit

fix(ci): unbreak Docs Deploy + unit tests
…er-2651

fix(identity): resolve + reconcile duplicate Users rows — cat-game counter/leaderboard desync (#2651)
fix(a2a): resolve prod /a2a 401 — label-based XSUAA resolution + IAS-only degrade (#2649)
Bump deploy version 1.35.0 -> 1.36.0 (.deploy/mta.yaml) for the DEV->main
promotion and update the user-facing What's New digest (hugo/data/whats_new.json)
with the 10 PRs merged since the 1.35.0 release cutoff (2026-10-04T22:06Z).

Headline items in this train:
- PROD Admin UI outage fixed + prevented recurrence: repinned SAPUI5 off a
  purged CDN version onto current LTS (#2658), and collapsed the version to a
  single source of truth with a CI drift gate (#2659).
- A2A production auth fixed: label-based XSUAA resolution so IAS-only M2M
  clients stop 401'ing (#2657).
- Sign-in / identity: SAP ID moved to top of provider list (#2652), mismatched
  social-login warning (#2653), and the duplicate-Users resolver fix that
  unforks Devtoberfest points/leaderboard (#2661).
- Reliability: unbroke Docs Deploy + a unit-test flake (#2660); content-rebuild
  allow-revert input to clear #672-guarded source-hash drift (#2655/#2656).
- Includes the 1.35.0 promotion PR (#2648) swept in just after its own cutoff.

whats_new.json is the committed changelog source; srv/whats-new-data/ is
rebuilt at build time and stays gitignored (not committed here).
@jung-thomas
jung-thomas merged commit 9749361 into main Oct 5, 2026
2 of 8 checks passed
@jung-thomas
jung-thomas deleted the release/v1.36.0 branch October 5, 2026 20:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant