Skip to content

QA run · integration-system.email-template-render (1/1) · 55a806a7 · 2026-10-17 · 1 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #24101

Closed

Description

@objectstack-fleet

Run record for the re-run #24036 (half B) asks for after revising this item. Runner: an os-dev subagent dispatched by the domain:devx seat 2 PM (session session_016PVjjuVPte5XEJvaQx1E4t). Protocol: .claude/skills/checklist-test/SKILL.md + docs/qa/platform-checklist/RUNNER.md. Executed sequentially (no subagent tool in this runner).

Environment fingerprint

  • framework: 55a806a78c0442243a8ac22e7dbc6f7b2c4b3bb0 on branch claude/issue-24036-ledger-b, the commit the app was built from. Its product tree is origin/main 8a83cebc1; the branch adds docs/qa/platform-checklist/areas/*.json only, and its later commits touch those files alone. Built with pnpm install --frozen-lockfile and turbo run build (75/75 tasks).
  • .objectui-sha: f8267df93aba8fb09cc1cc0692eadc0c8c5a5e56 (no browser leg in this item).
  • boot: a writable scratch copy of examples/app-showcase (beside it in the worktree, never committed; fixtures.requires[3]) adding a zh-CN twin of showcase_task_done_email, an active:false template, a fromOverride + replyTo template with no bodyText, and a reload probe template; booted OS_PORT=41925 objectstack dev --ui --seed-admin --no-restart -p 41925 -d file:(run dir)/email/data.db, then rebooted once on the same DB for the overlay leg; stopped by its process-group id. The rejection probes ran objectstack build on the same copy.
  • persona(s): the seeded admin (admin@objectos.ai), identity proven with GET /api/v1/auth/get-session before the first cell; three members minted through invite + sign-up: no locale, zh-CN, zh (sys_user.locale set by admin PATCH /api/v1/data/sys_user/ID and read back; POST /auth/update-user {locale} answered 400 "No fields to update")
  • timestamps: 2026-10-17, 00:34Z to 00:37Z

Scope

Selector integration-system.email-template-render resolves to 1 runnable item: integration-system.email-template-render at revision 7, P2, surface mixed. No planned or blocked-hidden item.

Per-clause verdicts

# clause (short) verdict evidence
0 authored template renders every hole pass GET /api/v1/meta/email_template/showcase_task_done_email serves the registry item (subject "✅ Task done: {{title}}", vars title required / project optional, active); sys_email_template holds 0 rows. Scratch notify flow (POST /api/v1/automation, channels email, template, templateData CEL literals, fired by /trigger) landed sys_email subject "✅ Task done: QA Title One", text "The task QA Title One on project QA Proj was marked done.", html with the same values; no {{ residue
1 missing required var fails fast; optional absent renders pass no title → the email delivery row goes dead, error "MISSING_VARIABLES: title", no sys_email row; no project → sys_email "✅ Task done: NoProj", text "… on project was marked done."
2 active:false → TEMPLATE_INACTIVE pass qa_inactive_tpl → delivery dead, error "TEMPLATE_INACTIVE: qa_inactive_tpl"; no sys_email row
3 exact (name, locale), en-US fallback, no subtag folding pass one send to three recipients: zh-CN member "ZH-CN 完成: LocProbe"; zh member "✅ Task done: LocProbe" (the en-US row, not zh-CN); no-locale member "✅ Task done: LocProbe"
4 fromOverride / replyTo honored; text derived pass qa_from_tpl → sys_email from_address carries the display name "QA Sender" and the address qa-sender@qa.test, reply_to qa-reply@qa.test, body_text "Hello FromVal derived" derived from the html; the served item carries no bodyText
5 admin overlay survives reboot; declared-source edit served on reload pass admin PUT /meta/email_template/showcase_task_done_email (subject "ADMIN-EDIT done: {{title}}") 200 "Saved customization overlay"; after the reboot on the same DB the GET serves "ADMIN-EDIT done: {{title}}". On the writable copy (--no-restart), editing qa_reload_tpl's declared subject to "RELOADED-SOURCE {{title}}" was served by GET within 15 s, with the server process unrestarted
6 authoring rejections loud pass build with a body key: exit 2 "Unrecognized key(s) on this email template: body"; build with name BadName and content: exit 2 "name must be dotted snake_case" and "Unrecognized key(s) … content. Did you mean content → bodyHtml?"
7 raw send door authenticates and validates pass authed {to, subject, html} 200 {status: sent}, a sys_email row status sent; anonymous 401 UNAUTHENTICATED; string body 400 INVALID_REQUEST; {to: 42} 400 VALIDATION_FAILED; wrong vocabulary {to, subject, bodyHtml} 400 VALIDATION_FAILED "at least one of text or html is required" (negative[2]: not a FAIL). 501 no-provider not driven (the always-on email service is composed)

Automated pins run (RUNNER rule 6)

  • packages/qa/dogfood/test/email-template-materialization.dogfood.test.ts (automated.ref): 4 passed, under the shared verify lock.

Reproduction rules

No clause scored fail, so none is owed. No authentication or authorization hole was found; nothing here is withheld under the RUNNER rule-2 carve-out.

Derived item verdict

integration-system.email-template-render r7: pass (8 pass of 8 clauses).

  • The revision this run validates holds: every send went through the HTTP door knownGaps[1] and steps[1] now name (a scratch notify flow), and every render was read off sys_email.

Checklist-accuracy findings and fixture gaps from this run close out on #24036.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out (domain:devx seat 2): every clause PASS; nothing to extract. Ruling C on #24127 (maintainer): a verification re-run of a ledger edit no longer carries a qa-run record, and the existing ones close out now. The revised item integration-system.email-template-render landed with #24141 (9ffe8af094), Part of #24036; its history row names #24036.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions