Repository navigation
docs(spec): email.defaultTemplateContext names baseUrl beside appName as a resolved key - #29539
Conversation
…resolved key The describe() and docblock on email.defaultTemplateContext said every key passes through as written except appName. The email plugin now resolves baseUrl as well (OS_AUTH_URL / BETTER_AUTH_URL > OS_BASE_URL > defaultTemplateContext.baseUrl > http://localhost on the serve port, no trailing slash), so the text names both keys and gives baseUrl its chain. No schema change: the key stays a free-form record. Claude-Session: https://claude.ai/code/session_01JQwxbafZoFFmxkFb9fzVPa Co-authored-by: Claude <noreply@anthropic.com>
…Context baseUrl wording Claude-Session: https://claude.ai/code/session_01JQwxbafZoFFmxkFb9fzVPa Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check1 anchor(s) derived from 1 changed package(s); no hand-written page names any of them, so this run has nothing to list — not a clean bill of health. This check sees only pages that NAME a derived anchor: one that documents this change in prose, or enumerates it in an authoring dialect, names none and stays invisible to it on every run. What this run could not see
Coarse fallback — 168 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin f41a424c8f36baaab1b27db770c8a4ce843e83b8 && git checkout f41a424c8f36baaab1b27db770c8a4ce843e83b8
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 5651647d82dea5ce18ad537d629c18e3dd27f613 cc250df8a0f36a33c470d073ffcaaa716f5b2118 && git checkout -B drift-repro 5651647d82dea5ce18ad537d629c18e3dd27f613 && git merge --no-ff cc250df8a0f36a33c470d073ffcaaa716f5b2118
node scripts/docs-audit/affected-docs.mjs --json 5651647d82dea5ce18ad537d629c18e3dd27f613 |
|
domain:spec#5 · os-warren · session_01JQwxbWR3K3h7i1ytwycVg1 Contract-review-claim: session_01JQwxbWR3K3h7i1ytwycVg1 · head cc250df · 2026-11-02T18:38Z The published-schema face ( |
|
domain:spec#5 · os-warren · session_01JQwxbWR3K3h7i1ytwycVg1 Contract reviewServed-tier: Inputs read: card #29485 (body and all three comments: triage, Claim, os-dev-report), PR #29539 (body, 3-file list, net diff against ① Derived judgments
② Semver level
③ Boundary flags
Out-of-scope note (not filed by the dev): the file-top docblock still says " ④ Design judgment
Pre-existing, re-wrapped by the hunk but not new: "the CLI passes this object through to Findings: none must-fix, none should-fix. Implemented-by: VERDICT: PASS |
|
domain:spec#5 · os-warren · session_01JQwxbWR3K3h7i1ytwycVg1 维护者速读
席位核对ACCEPT ·
|
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 41503806204 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Requested by Warren · project thread
Fixes #29485
Clause-②: no
Metadata-protocol: none
维护者速读
email.defaultTemplateContext的.describe()与 TSDoc 把baseUrl和appName并列为运行时自行解析的键,并写出baseUrl的解析链;重新生成email-config.mdx。baseUrl,规范文字仍说只有appName例外,读/meta/types或参考页的作者会被误导。packages/spec/src/system/email-config.zod.ts(defaultTemplateContext的文档块与 describe)。pnpm --filter @objectstack/spec build && pnpm --filter @objectstack/spec check:generated,预期 14 个产物全部最新。What changes
packages/spec/src/system/email-config.zod.ts: thedefaultTemplateContextdocblock and.describe()now namebaseUrlbesideappNameas the two keys the runtime resolves itself. ThebaseUrlchain is read from the merged plugin code (resolveDeploymentBaseUrlinpackages/plugins/plugin-email/src/capability-arg.ts, landed by feat(plugin-email): every email template can read the deployment address as {{baseUrl}} #29478 at73c24394e2):OS_AUTH_URL(legacyBETTER_AUTH_URL), thenOS_BASE_URL, thendefaultTemplateContext.baseUrl, thenhttp://localhost:plus the serve port (OS_PORT, legacyPORT, else3000), with any trailing slash trimmed. The docblock also records that a send's owndatawins over both keys (EmailServicespreads the send's data over this context).content/docs/references/system/email-config.mdx: regenerated withpnpm --filter @objectstack/spec gen:docs(two table rows: the service schema and the stackemailschema)..changeset/29485-email-template-baseurl-describe.md:@objectstack/specpatch.packages/specshipssrc/**/*.zod.tsas source, so the docblock publishes.No schema change: the key stays
z.record(z.string(), z.unknown()).optional(), as the card requires.Why
Ruling A on #29095 kept the spec out of that card and left this text to the spec lane. The describe still read "Passed through unchanged except appName", which is now incomplete.
Tests
No test pinned the old wording (
git grepover the tree for the old describe and docblock sentences: only the generated mdx hit). Local runs on headcc250df8:pnpm --filter @objectstack/spec typecheck: exit 0.pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 src/system: 66 files, 2096 tests passed.pnpm --filter @objectstack/spec check:generated: all 14 generated artifacts up to date aftergen:docs.Acceptance notes
email-config.zod.tsstill says "appNameis the one key whose env layer is notOS_EMAIL_*". That sentence is about the schema's own keys, andbaseUrlis a key insidedefaultTemplateContext, not a schema key, so it stays true and is outside the claimed file surface. Noted, not filed.Verification
node scripts/pm/dispatch-gates.mjs --commandsderived 97 gates for this diff oncc250df8; all were run and reconciled with--ran: 96 exit 0, 1 NOT MEASURED.pnpm check:dual-build-cjs-loads, reason: exit 3, it needs every package built; left to CI.node scripts/check-plugin-teardown-shape.mjs --self-testfirst exited 3 (pinned fixture commit not in the shallow clone); after fetching that commit it exited 0 (48 cases).Human Minimum
packages/specholds no runtime logic.pnpm lintpasses. Not run locally: the repo-wide lint run is CI's.main, one pull request.packages/spectouched: its generated artifacts are regenerated and committed.content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.Generated by Claude Code