Skip to content

docs(releases): qualify the v17 notify-template locale as one per notification, not per recipient - #13707

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-12507-v17-recipient-locale-qualifier
Aug 31, 2026
Merged

os-project-manager merged 1 commit into
mainfrom
claude/issue-12507-v17-recipient-locale-qualifier

Conversation

@claude

@claude claude Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes #12507

A deliberately releases-docs-only PR, and the only file it touches is content/docs/releases/v17.mdx. The standing rule — never edit content/docs/releases/ in a code PR — carries its own stated exception for exactly this shape ("if a releases page has a factual error, file an issue or make it a dedicated docs-only PR"), and the maintainer ruled that route on 2026-08-27 (Option A).

What changed

The v17 page still carried the retired promise for flow notify nodes:

resolved by (name, recipient locale) at delivery time (#9205).

Per the maintainer ruling of 2026-08-13 there is no per-recipient locale: payload.locale is interpolated once, before fan-out, its fallback is the deployment default (II18nService.getDefaultLocale()), and sys_user carries no locale column. #12178 corrected packages/spec and #12446 / PR #12505 corrected the five live doc sites; this page was the residue — read by exactly the audience the wording misleads, for whom acting on it is a net regression (TEMPLATE_* failures classify permanent and dead-letter).

The sentence now reads:

resolved by (name, locale) at delivery time (#9205). The locale is one value for the whole notification, not one per recipient: payload.locale if the producer set one, else the deployment default (II18nService.getDefaultLocale()) — the platform has no per-user locale, so recipients whose personal languages differ all receive the same row (a per-user locale is deferred by the 2026-08-13 ruling).

Wording provenance — matched, not invented

Two different qualifiers for one fact is the defect class this card belongs to, so every clause is copied from a site already corrected:

Clause Copied from
"The locale is one value for the whole notification, not one per recipient" content/docs/automation/email-templates.mdx:167 (the hand-written live page corrected by #12446 / PR #12505), bolded there too
"payload.locale if the producer set one, else the deployment default (II18nService.getDefaultLocale())" same page, lines 168-169, and content/docs/references/automation/io-node-config.mdx:101 (generated from the spec corrected by #12178)
"the platform has no per-user locale, so recipients whose personal languages differ all receive the same row" content/docs/automation/email-templates.mdx:170-171
"deferred by the 2026-08-13 ruling" content/docs/references/automation/io-node-config.mdx:101
tuple spelled (name, locale) every corrected site — io-node-config.zod.ts:276,298, both live doc pages

The bare phrase "recipient locale" is now absent from the page: leaving it while appending "not one per recipient" would have left the page contradicting itself, and the pins added by #12178 / #12446 refuse that bare phrase everywhere they reach.

Deliberately NOT in this diff

  • packages/spec/CHANGELOG.md:2745 carries the same sentence and stays untouched by ruling — a generated CHANGELOG is history, a record of what the release said at the time. Confirmed still present and unmodified.
  • No changeset. Nothing here publishes from any package, so this PR carries skip-changeset (the repo's only path-independent exemption in pr-automation.yml; that job has no docs-only carve-out).
  • Rider from the ruling — same-page sweep for other wording narrowed by later rulings: nothing found. content/docs/releases/v17.mdx has 13 other locale occurrences and zero "per recipient" / "each person" / "own language" phrasing; this bullet was the page's only per-recipient-locale claim.

Gates

Local union re-run after the final commit, on 05b429955 — all 28 derived families green; the 29th is not locally measurable:

pnpm check:role-word (the ratchet that pins this page: baseline content/docs/releases/v17.mdx = 2, unchanged — the new prose adds no reserved word) · check:release-notes · check:release-page-status · check:release-section-coverage · check:docs-single-h1 · check:doc-anchors · check:doc-authoring · check:doc-frontmatter · check:doc-route-spelling · check:docs-section-name · check:docs-redirects · check:docs-audit-scope · check:section-landing-index · check:published-readme-links · check:react-page-adapter-contract · check:cross-package-test-inputs · check:ci-filter-parity · check:shard-attestation · check:nul-bytes · @objectstack/spec check:docs, check:yaml-examples, check:skill-examples, check:empty-state, check:liveness, check:strictness-ledger, check:variant-docs · @objectstack/lint check:doc-formula-expressions, check:doc-security-posture. Gate list derived by node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack, not recalled.

check-test-completeness is NOT MEASURED: it grades a saved turbo run test log that only CI produces (its own exit-3 prerequisite branch says so).

Repo-wide pnpm lint is narrowed, declared: eslint's own configuration supplies no matching config for .mdx, so the single edited file is outside the lint population — measured, not assumed, via pnpm exec eslint --no-inline-config --format json content/docs/releases/v17.mdx → 1 result, 0 errors, message "File ignored because no matching configuration was supplied". No eslint config and no JS/TS source changed, and no type-aware linting spans this file, so no untouched file's verdict can move.

Draft on purpose — the domain:devx PM seat arms it after review.

Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC


Generated by Claude Code

…ification

The v17 page still promised the retired shape: the `notify` node's `template`
path "resolved by `(name, recipient locale)` at delivery time". Per the
maintainer ruling of 2026-08-13 there is no per-recipient locale —
`payload.locale` is interpolated once, before fan-out, its fallback is the
deployment default (`II18nService.getDefaultLocale()`), and `sys_user` carries
no locale column. The live docs were corrected accordingly; this page was the
residue, read by exactly the audience the wording misleads.

Wording is copied from the corrected live sites rather than invented, so one
fact keeps one qualifier.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Release-owned pages still carry the retired "(name, recipient locale)" promise for notify templates — v17 release notes and the spec CHANGELOG

2 participants