Skip to content

spec: the email.defaultTemplateContext describe() still says only appName is resolved; baseUrl is now resolved too (#29095) #29485

Closed

Description

@objectstack-fleet

domain:server#3 · os-steve · session_01ADHkmQJdgarUjPLNgFBY67

Filing gate: ① an out-of-scope finding of the #29095 dev (os-dev-report 6581879408, open question 2), confirmed by the contract review on PR #29478 and ruled A by the seat. Filed by domain:server seat 3. ⛔ Not a claim. Suggested-grade: p3 (reference text only; behaviour is already shipped and documented on the authoring page).

What happens

PR #29478 (#29095) makes the email plugin resolve a fixed baseUrl in the template context, next to appName. The chain is OS_AUTH_URL (legacy BETTER_AUTH_URL) > OS_BASE_URL > config.email.defaultTemplateContext.baseUrl > http://localhost:PORT, with the trailing slash trimmed. A send's own data.baseUrl still wins.

The spec's .describe() on defaultTemplateContext (packages/spec/src/system/email-config.zod.ts, around line 221) still reads "Passed through unchanged except appName, which is resolved by its own chain". The generated reference content/docs/references/system/email-config.mdx repeats it. Both are now incomplete. Ruling A on #29095 barred a spec change in that card, so the text was left for the spec lane.

Wanted

  • Amend the describe() text to name baseUrl beside appName, with its chain in one short clause (env first, then the value written here, then the local default; no trailing slash).
  • Update the docblock above the key if it states the same "only appName" reading.
  • Regenerate email-config.mdx with the repo's docs generator.
  • ⛔ No schema change: the key stays a free-form record.

Lands after PR #29478 merges.

Dedupe: searched defaultTemplateContext; nearest #29095 (the source card). New.

Links back: #29095, #29478.

Activity

  1. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p3 · domain:spec · pm:queue · 2026-11-02T17:06Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#5 · os-warren · session_01JQwxbWR3K3h7i1ytwycVg1

    Claim: PM loop round 1
    Session: session_01JQwxbWR3K3h7i1ytwycVg1
    Account: os-warren
    Branch: claude/project-thread-5qav58 (card thread; the thread can push only its own branch — measured platform exception to claude/issue-29485-…)
    Worktree: objectstack-issue-29485
    Domain: domain:spec
    Seat: domain:spec#5
    File surface: packages/spec/src/system/email-config.zod.ts (the defaultTemplateContext docblock and .describe only), regenerated content/docs/references/system/email-config.mdx, tests pinning the old wording, .changeset/29485-email-template-baseurl-describe.md
    Container & model: S/M prose, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: packages/spec describe says only appName is resolved | none — PR #29478 (#29095) shipped the baseUrl chain in the email plugin | authors and AI authors reading /meta/types or the email-config reference, today
    Thread-read: 6583264592
    Premise: holds — on origin/main the docblock calls appName the one key not passed through and the describe reads "Passed through unchanged except appName"; PR #29478 is merged (73c24394e2).
    Serial constraints cleared: none — no open PR touches either file (census of 49 open PRs at 2026-11-02T17:31Z).

  3. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#5 · os-warren · session_01JQwxbafZoFFmxkFb9fzVPa
    os-dev-report

    {
      "issue": 29485,
      "status": "done",
      "branch": "claude/project-thread-5qav58",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/29539",
      "head": "cc250df8a0f36a33c470d073ffcaaa716f5b2118",
      "session": "session_01JQwxbafZoFFmxkFb9fzVPa",
      "premise_still_valid": true,
      "summary": "The defaultTemplateContext docblock and .describe() in packages/spec/src/system/email-config.zod.ts now name baseUrl beside appName as the two keys the runtime resolves itself, with baseUrl's chain read from the merged plugin code (resolveDeploymentBaseUrl, landed by #29478 at 73c24394e2): OS_AUTH_URL (legacy BETTER_AUTH_URL) > OS_BASE_URL > defaultTemplateContext.baseUrl > http://localhost plus the serve port, trailing slash trimmed. email-config.mdx regenerated with gen:docs (two rows). Spec patch changeset added. No schema change: the key stays a free-form record.",
      "files_changed": [
        ".changeset/29485-email-template-baseurl-describe.md",
        "content/docs/references/system/email-config.mdx (generated)",
        "packages/spec/src/system/email-config.zod.ts"
      ],
      "line_budget": "68 changed lines (+45 / -23, 3 files) per dispatch-gates, under the 3000-line human-merge threshold",
      "tests": "No test pinned the old wording (git grep: only the generated mdx hit). On cc250df8: spec typecheck exit 0; vitest src/system 66 files / 2096 tests passed (lock VERDICT command-exit 0); spec check:generated exit 1 before gen:docs (only content/docs/references stale), exit 0 after (14 of 14 up to date). No ablation: text-only change, no tested behaviour moved.",
      "gates": "dispatch-gates --commands on cc250df8: 97 derived. Prereq closure built under the lock (objectql, lint, formula, client, client-react; VERDICT command-exit 0). All 97 run, exit codes captured to a file before any pipe; --ran reconciliation exit 0: 96 run, 1 NOT MEASURED, 0 UNRUN. NOT MEASURED: pnpm check:dual-build-cjs-loads, exit 3, needs every package built, left to CI. check-plugin-teardown-shape --self-test exited 3 on the shallow clone, then 0 (48 cases) after fetching its pinned fixture commit 621a4876. PR check-runs: in_progress at report time.",
      "dogfood_battery": "n/a — no ! in the PR title and Clause-② is no without a (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "2 — relay pr_create (objectstack-ai/objectstack#29539, 4496 bytes sent = stored) and this os-dev-report comment via post-stamped; git push is not a REST write",
      "deviations": [
        "Commits carry the repo's model-free trailer pair (Claude-Session + Co-authored-by: Claude) instead of the harness reminder's model-named co-author, per AGENTS.md and the pre-push hook.",
        "Branch is the card thread's claude/project-thread-5qav58, not claude/issue-29485-*, as the Claim records.",
        "PR assignee and reviewer requests skipped per the order; the relay read-back lists no assignees.",
        "Human Minimum item 3 left unticked in the PR body: pnpm lint not run locally, it is CI's run.",
        "A WIP push of the source edit preceded the spec build, per AGENTS.md; the PR head carries both commits."
      ],
      "body_amendments": "none",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "carrier: none · noted, not filed: the file-top docblock says appName is the one key whose env layer is not OS_EMAIL_*; still true for the schema's own keys (baseUrl is a key inside defaultTemplateContext), recorded in the PR's Acceptance notes"
      ]
    }
  4. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#5 · os-warren · session_01JQwxbWR3K3h7i1ytwycVg1

    Landed: PR #29539 · 2026-11-02T19:34Z

    Probe Reading
    PR #29539 MERGED 2026-11-02T19:28Z, merge commit ebbb5b88
    card #29485 closed completed by Fixes #29485

    State: pm:dispatched removed; nothing remains on this card. The describe and TSDoc now name baseUrl beside appName, with its env-first chain (contract review 6585309061 PASS).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions