Skip to content

release v1.41.4 DEV to main promotion - #2929

Merged
jung-thomas merged 9 commits into
mainfrom
worktree-release-v1.41.3
Oct 26, 2026
Merged

jung-thomas merged 9 commits into
mainfrom
worktree-release-v1.41.3

Conversation

@jung-thomas

Copy link
Copy Markdown
Contributor

Release 1.41.4 — DEV → main promotion

Patch release promoting four fixes merged to DEV since 1.41.3 to main.

Version bumps

MTA File Change
Main (tutorials-ims) .deploy/mta.yaml 1.41.3 → 1.41.4
MCP (tutorials-mcp) mta-mcp.yaml 1.1.3 → 1.1.4

Patch: CI and UI fixes, no runtime schema change.

Changes in this window

What's New

  • hugo/data/whats_new.json updated with 5 new entries covering this window.

Deploy

Merging does not auto-redeploy. Run a full MTA deploy after merge to ship #2928 (tag-chip fix) to PROD. #2924/#2926/#2927 are CI-only and take effect on the next GitHub Actions run off main.

🤖 Generated with Claude Code

Root cause of the recurring prod+QA content-rebuild freeze: since #2896
(ac6b7e3) sap-fundamental.css is generated-from-source and NOT committed.
It is the one fingerprinted stylesheet NOT Hugo-minified (head.html:73 is a
bare `| fingerprint`), so its /css/<hash>.css URL == sha256 of the on-disk
bytes. Post-#1659 a content rebuild publishes HANA-only and never ships CSS
to the approuter (static changes only on a full MTA deploy). So building
sap-fundamental.css from HEAD source on the rebuild path made the baked HTML
reference a hash the DEPLOYED approuter does not serve whenever CSS source
changed since the last deploy -> the approuter-asset guard blocked publish,
freezing ALL content publishing until the next deploy.

Fix: on the REBUILD path, fetch the sap-fundamental.css bytes the deployed
approuter CURRENTLY serves (scripts/sync-approuter-css.cjs) so Hugo
fingerprints to the SAME hash -> guard always passes, pages always styled,
regardless of deploy lag. The DEPLOY path (build:all -> build:css from source)
is unchanged and still rotates the hash on deploy; content-publish now follows
it. Fail-open: a fresh env with nothing deployed falls back to build:css.
fundamental-styles-icon.css stays a source build (Hugo `| minify`s it, so it
self-heals). Every other fingerprinted stylesheet is committed and cannot drift.

Also fixes the QA half of #2920: the QA workflow read secrets.APPROUTER_URL_QA
(never created) when the value lives in the repo VARIABLE vars.APPROUTER_URL_QA
(= DEV approuter, which serves QA content). That secrets-vs-vars typo made every
QA rebuild die on `missing --approuter-url` since 2026-10-24. Both the sync step
and the asset guard now read vars.APPROUTER_URL_QA; the prod workflow's own qa)
branch in "Set approuter URL" is corrected to vars too.

Verified end-to-end against both live approuters: sync -> Hugo -> the real
check-approuter-assets guard reports "all 15 referenced /css assets served"
on prod and dev (today it 404s on sap-fundamental). static-guards 17/17 and
hugo-css-fingerprint + icon-subset tests (14) pass.
…css-guard

fix(#2920): rebuild CSS follows deployed approuter (durable fix for content-publish freeze)
The asset-retention smoke gate flapped on 5 island CSS bundles
(nav-dropdown/mini-navigator/app-space/event-display/navigator) that 404 on
the approuter. Root cause: old Vite layouts emitted island CSS as separate
assets/<name>-<hash>.css files; the current pipeline injects island CSS via JS
(vite-plugin-css-injected-by-js) and emits NO assets/-prefixed bundles. Such a
prior-manifest entry can never match a current file, and its carry-forward
download (/css/assets/... or /js/assets/...) always 404s, so it lingered forever
as an 'immediately-prior build' entry that mergeRetention re-carried every build.

mergeRetention now drops any prior entry whose file starts with 'assets/' — the
current build references nothing under that prefix. The generated
_retained-assets.json is gitignored and regenerated on the next content rebuild /
deploy, so this clears the stale entries without a manual JSON edit. No user
impact (island CSS is JS-injected; nothing fetched those URLs) — this just stops
the post-deploy smoke gate flapping on a healthy deploy.

Adds a mergeRetention regression test.
…-prune

fix(ci): prune legacy assets/-prefixed entries from asset retention
Commit 971622d (#2920) accidentally added a second bare `env:`
above the existing one on the QA asset-guard step. Two env mappings
on one step is invalid Actions YAML, so GitHub rejected the whole
workflow file before any job ran -> run 40201211187 failed as a
"workflow file issue" with no job logs, freezing QA content rebuilds.

Fix: drop the extra empty env: line (one-line deletion).
fix(ci): remove duplicate env: key in QA rebuild workflow
…orials/

The clickable tag and experience chips on the tutorial object page (and the
Overview meta tags) deep-linked to /tutorials/?tag=<slug> and /tutorials/?level=,
but there is no listing route at /tutorials/ — the AppRouter forwards /tutorials/*
to CAP /content/tutorials/:slug, so an empty slug returned 'Cannot GET
/content/tutorials/'. Point the chips at /tutorial-navigator/, which reads ?tag=
and ?level= as issue #161 deep-link entry params (hugo-apps/src/navigator/
url-params.ts). Update the clickable-chips smoke test, which was asserting the
broken /tutorials/ target.

Verified with an isolated Hugo render of the chip blocks.
fix(tutorials): tag/level chips link to /tutorial-navigator/ not /tutorials/
@jung-thomas
jung-thomas merged commit 96f8714 into main Oct 26, 2026
6 checks passed
@jung-thomas
jung-thomas deleted the worktree-release-v1.41.3 branch October 26, 2026 08:53
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