You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Email template locale ladder: three texts outside packages/spec still say the resolver matches exactly with no language-subtag folding (stale since #28880) #29032
Filing gate: ① the follow-up of #28896, named by its dev in handoff_slices (os-dev-report 6570414192) and kept out of PR #29014 because they are outside the spec lane's surface. ⛔ Not a claim. No grade: triage sets it.
Reach: authors and QA runs that read these texts. They are told zh never resolves zh-CN and en never resolves en-US. Since #28880 (PR #28917, e0dc0771ab), over the built-in template loader, a call that names a locale folds it against the bundle's tags (resolveBundleLocale: exact, case-insensitive, base language, variant expansion), then tries the stack's declared fallback locale folded the same way, then en-US, then TEMPLATE_NOT_FOUND. A replacement TemplateLoader keeps the exact ladder. A call that names no locale keeps en-US → lowest tag.
Where (on main)
content/docs/automation/email-templates.mdx L217–233: a hand-written page that restates the exact ladder. Reader: domain:devx.
packages/metadata-core/src/item-key-discriminators.ts L13–19: the docblock cites the old exact ladder. Reader: the owner of packages/metadata-core.
docs/qa/platform-checklist/areas/integration-system.json ≈L957: an acceptance clause asserts an EXACT match with no language-subtag folding, so a run against main scores it wrong. Reader: the checklist owner. Bump the item's revision with a history entry.
Done when
All three describe the ladder as SendTemplateInput.locale in packages/spec/src/contracts/email-service.ts states it once PR #29014 lands. Copy that text; don't restate it independently. en and en-US stay two rows of one bundle.
Blocked-by: #28896 (PR #29014 carries the spec wording these copy).
Dedupe: searched email template locale exact ladder folding; only #28880, #28896. New.
Read fresh. Two of the three stale texts are content/docs/automation/email-templates.mdx and the docs/qa/platform-checklist/areas/integration-system.json clause, so domain:devx; the packages/metadata-core docblock rides along. Docs, docblock and checklist drift is p3. The card is a finding and no maintainer ruled the follow-up, so finding stays as its state; it waits on PR docs(spec): the email template locale docs describe the ladder #28880 landed #29014 for the wording to copy.
Claim: PM loop round 3
Session: session_01JQwxbaBjisxkQo9hht9bFB
Account: os-warren
Branch: claude/project-thread-e5rt73
Worktree: objectstack-issue-29032
Domain: domain:devx
Seat: domain:devx#1
File surface: content/docs/automation/email-templates.mdx, the docblock in packages/metadata-core/src/item-key-discriminators.ts, the integration-system.email-template-render item in docs/qa/platform-checklist/areas/integration-system.json; a changeset only if the docblock ships in a published file, else skip-changeset
Container & model: S docs + docblock + checklist, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: the three texts outside packages/spec still state the exact ladder that #28880 retired; the spec wording they copy is SendTemplateInput.locale (packages/spec/src/contracts/email-service.ts, landed with PR #29014); authors and QA runs read them, and a run against main scores the checklist clause wrong
Thread-read: 6574316813
Premise: holds (seat re-read on main8ca9dd7b: mdx :217–233, docblock :13–19, checklist :957 / :959)
Serial constraints cleared: none (34 open non-mailbox PRs read; none touches the three files)
Lane order at pick: #29032 and #29353 (both p3, neither Bug); #29032 is older, so position 1 goes to seat 1 and #29353 stays for domain:devx#2. The card copies the spec wording rather than restating it, so packages/spec stays untouched.
{
"issue": 29032,
"status": "done",
"branch": "claude/project-thread-e5rt73",
"pr": "https://github.com/objectstack-ai/objectstack/pull/29498",
"head": "4a0e6715b05e29539b5716ad6080297af9238eb1",
"session": "session_01JQwxbWaao8NE8qbxe4dXUL",
"premise_still_valid": true,
"summary": "Premise held at base 8ca9dd7b: the mdx section, the metadata-core docblock and acceptance[3] of integration-system.email-template-render still stated the exact ladder, while EmailService.resolveAndRenderTemplate (plugin-email) folds as SendTemplateInput.locale states. The mdx and the checklist clause copy that spec ladder; the docblock cites it, per its own cite-not-quote rule, and keeps en and en-US as two rows. The checklist item moves to revision 13 with one history row (ref #29032); its verify line, steps[4], variants[0] and automated.ref no longer score or name the no-folding case. The docblock ships in metadata-core dist/index.d.ts and dist/index.d.cts, so a patch changeset rides instead of skip-changeset. packages/spec untouched.",
"file_surface": [
".changeset/29032-email-template-locale-ladder-docblock.md",
"content/docs/automation/email-templates.mdx",
"docs/qa/platform-checklist/areas/integration-system.json",
"packages/metadata-core/src/item-key-discriminators.ts"
],
"changeset": "@objectstack/metadata-core patch; published-file proof: base-tree build grep of the old docblock text matched dist/index.d.ts and dist/index.d.cts, positive control ITEM_KEY_DISCRIMINATORS matched index.js, index.cjs and both d.ts; after the edit and rebuild the old text matches nothing and the new text matches both d.ts",
"tests": "no behaviour changed: no new test, no ablation. metadata-core build and typecheck: VERDICT command-exit 0 at head 4a0e6715.",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at 4a0e6715: 82 commands. 78 exit 0 first pass; check-plugin-teardown-shape --self-test, spec check:skill-examples and check:lean-entry-closure exit 3 (prerequisite), then exit 0 after fetching the fixture commit and building client, client-react and objectql. check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET, NOT MEASURED (needs every package built), declared in the PR body, CI runs it. --ran: 82 derived, 81 run, 1 NOT-MEASURED, exit 0. pnpm check:platform-checklist exit 0. Docs build (vercel.json buildCommand, TURBO_FORCE=true): Tasks 2 successful, Cached 0, apps/docs/.next/BUILD_ID present. PR check-runs at report time: in_progress (Check Changeset, Lint jobs, Type Check jobs, Governed Surface Queue Guard, PR-body guards); none concluded red.",
"dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
"declarations": {
"Clause-②": "no",
"Metadata-protocol": "none",
"maintainer_brief": "six lines present",
"closing": "Fixes #29032 on body line 3"
},
"mcp_calls": "0",
"api_writes": "2: fleet-write relay pr_create (PR #29498, 6894 bytes sent, 6894 stored, identical); post-stamped comment on #29032 (this report). git push is not a REST write.",
"labels": "none sent: changeset present, so no skip-changeset; the order named no other label",
"body_amendments": [],
"open_questions": [],
"deviations": [
"PR template headings (Why, Human Minimum) folded into the os-dev section order, as the os-dev exception"
],
"security_findings": "none",
"out_of_scope_findings": []
}
Landed · 2026-11-02T17:26Z · PR #29498 merged as 6a940d1d67 (reviewed head 4a0e6715b0, seat record ACCEPT 6582535447). The email-templates page, the ITEM_KEY_DISCRIMINATORS docblock in @objectstack/metadata-core and the checklist item integration-system.email-template-render (revision 13) now follow SendTemplateInput.locale: a named locale folds to a bundle member (zh → zh-CN), then the declared fallback locale, then en-US, then TEMPLATE_NOT_FOUND; en and en-US stay two rows. Out of scope: none. pm:dispatched is removed in this stroke.
Activity
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: integration-system.email-template-render
Triage:
domain:devx· p3 · 2026-11-02T07:19Z⛔ Not a claim.
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: finding →
pm:blocked· 2026-11-02T08:06Z⛔ Not a claim.
main. The three stale texts are still on main: content/docs/automation/email-templates.mdx (lines 217-233), the docblock in packages/metadata-core/src/item-key-discriminators.ts and integration-system.json line 957. The card copies its wording from PR docs(spec): the email template locale docs describe the ladder #28880 landed #29014 for spec: the email template locale docs say the resolver folds no language subtag and retries only en-US, which #28880 makes wrong #28896, and that PR is still open. Set pm:blocked with Blocked-by: spec: the email template locale docs say the resolver folds no language subtag and retries only en-US, which #28880 makes wrong #28896. The card was already routed and graded but carried onlyfinding, which no lane's queue query reads. Its priority and lane are unchanged.Blocked-by: #28896
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: unblocked ·
pm:queue(p3 kept) · 2026-11-02T10:01Z⛔ Not a claim.
Blocked-by: #28896is closed, and PR docs(spec): the email template locale docs describe the ladder #28880 landed #29014, whose wording this card copies, merged. The three stale texts outsidepackages/speccan now take that wording.pm:blocked→pm:queue.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbaBjisxkQo9hht9bFB
Claim: PM loop round 3
Session:
session_01JQwxbaBjisxkQo9hht9bFBAccount:
os-warrenBranch:
claude/project-thread-e5rt73Worktree:
objectstack-issue-29032Domain:
domain:devxSeat:
domain:devx#1File surface:
content/docs/automation/email-templates.mdx, the docblock inpackages/metadata-core/src/item-key-discriminators.ts, theintegration-system.email-template-renderitem indocs/qa/platform-checklist/areas/integration-system.json; a changeset only if the docblock ships in a published file, elseskip-changesetContainer & model:
S docs + docblock + checklist,mode:thread,model: default tier (dispatch-gates --tier: no path-derived mandate),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: the three texts outside
packages/specstill state the exact ladder that #28880 retired; the spec wording they copy isSendTemplateInput.locale(packages/spec/src/contracts/email-service.ts, landed with PR #29014); authors and QA runs read them, and a run againstmainscores the checklist clause wrongThread-read: 6574316813
Premise: holds (seat re-read on
main8ca9dd7b: mdx :217–233, docblock :13–19, checklist :957 / :959)Serial constraints cleared: none (34 open non-mailbox PRs read; none touches the three files)
Lane order at pick: #29032 and #29353 (both p3, neither
Bug); #29032 is older, so position 1 goes to seat 1 and #29353 stays for domain:devx#2. The card copies the spec wording rather than restating it, sopackages/specstays untouched.objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbWaao8NE8qbxe4dXUL
os-dev-report
{ "issue": 29032, "status": "done", "branch": "claude/project-thread-e5rt73", "pr": "https://github.com/objectstack-ai/objectstack/pull/29498", "head": "4a0e6715b05e29539b5716ad6080297af9238eb1", "session": "session_01JQwxbWaao8NE8qbxe4dXUL", "premise_still_valid": true, "summary": "Premise held at base 8ca9dd7b: the mdx section, the metadata-core docblock and acceptance[3] of integration-system.email-template-render still stated the exact ladder, while EmailService.resolveAndRenderTemplate (plugin-email) folds as SendTemplateInput.locale states. The mdx and the checklist clause copy that spec ladder; the docblock cites it, per its own cite-not-quote rule, and keeps en and en-US as two rows. The checklist item moves to revision 13 with one history row (ref #29032); its verify line, steps[4], variants[0] and automated.ref no longer score or name the no-folding case. The docblock ships in metadata-core dist/index.d.ts and dist/index.d.cts, so a patch changeset rides instead of skip-changeset. packages/spec untouched.", "file_surface": [ ".changeset/29032-email-template-locale-ladder-docblock.md", "content/docs/automation/email-templates.mdx", "docs/qa/platform-checklist/areas/integration-system.json", "packages/metadata-core/src/item-key-discriminators.ts" ], "changeset": "@objectstack/metadata-core patch; published-file proof: base-tree build grep of the old docblock text matched dist/index.d.ts and dist/index.d.cts, positive control ITEM_KEY_DISCRIMINATORS matched index.js, index.cjs and both d.ts; after the edit and rebuild the old text matches nothing and the new text matches both d.ts", "tests": "no behaviour changed: no new test, no ablation. metadata-core build and typecheck: VERDICT command-exit 0 at head 4a0e6715.", "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at 4a0e6715: 82 commands. 78 exit 0 first pass; check-plugin-teardown-shape --self-test, spec check:skill-examples and check:lean-entry-closure exit 3 (prerequisite), then exit 0 after fetching the fixture commit and building client, client-react and objectql. check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET, NOT MEASURED (needs every package built), declared in the PR body, CI runs it. --ran: 82 derived, 81 run, 1 NOT-MEASURED, exit 0. pnpm check:platform-checklist exit 0. Docs build (vercel.json buildCommand, TURBO_FORCE=true): Tasks 2 successful, Cached 0, apps/docs/.next/BUILD_ID present. PR check-runs at report time: in_progress (Check Changeset, Lint jobs, Type Check jobs, Governed Surface Queue Guard, PR-body guards); none concluded red.", "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm", "declarations": { "Clause-②": "no", "Metadata-protocol": "none", "maintainer_brief": "six lines present", "closing": "Fixes #29032 on body line 3" }, "mcp_calls": "0", "api_writes": "2: fleet-write relay pr_create (PR #29498, 6894 bytes sent, 6894 stored, identical); post-stamped comment on #29032 (this report). git push is not a REST write.", "labels": "none sent: changeset present, so no skip-changeset; the order named no other label", "body_amendments": [], "open_questions": [], "deviations": [ "PR template headings (Why, Human Minimum) folded into the os-dev section order, as the os-dev exception" ], "security_findings": "none", "out_of_scope_findings": [] }objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbaBjisxkQo9hht9bFB
Landed · 2026-11-02T17:26Z · PR #29498 merged as
6a940d1d67(reviewed head4a0e6715b0, seat record ACCEPT 6582535447). The email-templates page, theITEM_KEY_DISCRIMINATORSdocblock in@objectstack/metadata-coreand the checklist itemintegration-system.email-template-render(revision 13) now followSendTemplateInput.locale: a named locale folds to a bundle member (zh→zh-CN), then the declared fallback locale, thenen-US, thenTEMPLATE_NOT_FOUND;enanden-USstay two rows. Out of scope: none.pm:dispatchedis removed in this stroke.