Repository navigation
[Decision] The pending release note .changeset/25610-notify-email-field-recipient.md says email-field delivery fails at the node, which #25721 made false: correct it in a PR you confirm (A), at release time (B), or leave it (C)? #25754
Description
Ruled: 6398564883 · letter A · 2026-10-25T13:58:53Z (a one-paragraph PR by the domain:spec lane; the maintainer confirms it past the red Check Changeset; lands before #25640)
Filing gate ②: the repo's own gate routes this to a person. Correcting someone else's pending release note is refused by Check Changeset (#17712, ruling D), which says: "Correcting a pending release note is a decision about a release rather than a refactor -- say so on the PR, naming the note and what changed under it, and get it confirmed … staying red is what puts the decision in front of a person." Found by the os-dev round-1 report on #25696 (out_of_scope_findings[0]) and confirmed by the domain:spec seat 2 (seat post #18549) · sunhaolin · session session_01PC4NPXPgPmpDRG9DdDnyXT. ⛔ Not a claim. Grade and domain are triage's. Ruled; see the first line. The seat suggests domain:spec and p2, because it must be settled before the next @objectstack/spec release.
Reader who acts: the maintainer decides. Under A, ruled A: the domain:spec lane writes the one-paragraph PR and the maintainer confirms it.
维护者速读
- 事由:
.changeset/25610-notify-email-field-recipient.md(feat(spec,lint): a notify recipient form{ emailField }— the address in an email-typed field of the triggering record #25645 合入的{ emailField }收件人形态,待发版)最后一段写着「投递……另行落地;落地前,跑到这种节点的流程在节点处失败」。feat(service-automation)!: notify mails an email-field recipient, limited per address, and refuses a computed address no user holds #25721(d1e329e96d)已经把投递做完了,同一版里它自己的 changeset.changeset/25571-notify-email-field-delivery.md写的是「现在能发了」。不改的话,下一版@objectstack/spec的 CHANGELOG 会出现一句已经不成立、且与另一条相互矛盾的话。 - 要你定: A 由 spec 车道开一个只改这一段的 PR(拟稿见下),
Check Changeset会按设计一直红,由您确认后合入(推荐);B 不动 changeset,发版时在 Version Packages PR 生成的 CHANGELOG 里手改这一句;C 不改,CHANGELOG 里两条并存。 - 为什么现在定: 两个 changeset 都已在
main上待发,下一次发版就会把这句话发出去。docs(spec): a notify node'srecipientsnames a written-out email address as an author constant, not an audience selector #25739(spec(automation): the notify recipients describe names a written-out address as an author constant, and drops the bare "an email address" audience selector — the spec half of ruling B on #25647 #25696 的描述文字 PR)原本想顺手改,被这道门挡下;为了不让 docs(spec): a notify node'srecipientsnames a written-out email address as an author constant, not an audience selector #25739 卡在这个发版决定上,席位已让开发撤回那处改动,单独提给您。
The note, and what changed under it
.changeset/25610-notify-email-field-recipient.md on main (from #25645, @objectstack/spec minor + @objectstack/lint minor). Its last prose paragraph, verbatim:
This change is the protocol half. Delivery — resolving the field to an address, the outbound mail configuration, the per-address rate limit and the messaging-log entry — is the messaging service's half and lands separately; until it does, a run that reaches such a node fails at the node.
#25721 (d1e329e96d, merged) delivers it: resolveEmailFieldAddress, admitEmailFieldSend and the sys_notification_delivery row in packages/services/service-automation/src/builtin/notify-node.ts. Its own pending changeset, .changeset/25571-notify-email-field-delivery.md (@objectstack/service-automation minor), says: "recipients: { emailField: 'applicant_email' } with channels: 'email' (the form @objectstack/spec declared earlier in this release, which until now failed the run at the node) mails the address held in that email-typed field". Both changesets ship in the next release, so the "until it does … fails at the node" clause is false on the day it ships.
Why it was not corrected in #25739: the seat's patch-round order folded the edit in, and Check Changeset refused it on aed84ec582 (step "Reject an empty-frontmatter changeset added by this PR"). The gate stays red until a person confirms the correction. That would hold #25739's landing on a release decision that is not #25739's, so the seat has the edit reverted there (patch round 2b) and files it here.
Options
| Letter | What is done | Cost |
|---|---|---|
| A (RULED, 6398564883) | A one-paragraph PR changes only that paragraph (proposed text below). Check Changeset stays red on it by design, and you confirm and merge it past that check. Frontmatter levels and the Clause-② / Metadata-protocol lines are untouched. |
One small PR plus your confirmation. The fix lives in the repo before the release, whoever cuts it. |
| B | The changeset stays. Whoever cuts the release edits the generated packages/spec/CHANGELOG.md entry in the Version Packages PR. |
No PR now. Depends on the release cutter remembering, and the release PR is regenerated on every push to main. |
| C | Nothing changes. The CHANGELOG carries both entries. | None now. Readers, AI agents among them, are told that the email-field form fails at the node, in the same release that says it works. |
Proposed replacement paragraph for A, or the text to use under B:
This change is the protocol half. Delivery — resolving the field to an address, the outbound mail configuration, the per-address rate limit and the messaging-log entry — ships in the same release in
@objectstack/service-automation.
Four axes
- Real business need: the form exists to mail an applicant who came in through a public form (hotsrm). A release note saying it fails would steer that user away from the one form built for them.
- Long-term soundness: the CHANGELOG is the published record. A sentence that is false on release day is drift between what is declared and what is true, which the project's contract-first rule exists to prevent.
- Preventing AI mistakes: agents read release notes as fact. With C, an agent writing a flow for an outside recipient would avoid
{ emailField }or reach for a computed address, which feat(service-automation)!: notify mails an email-field recipient, limited per address, and refuses a computed address no user holds #25721 now refuses on an email node. - Startup focus: every option costs at most one paragraph. A adds no gate and no capability, and uses the confirmation path the existing gate already names.
Seat recommendation: A. It fixes the text where the release reads it and does not depend on anyone remembering at release time. It is the path the #17712 gate prescribes. You decide. Ruled A.
Dedupe
repo:objectstack-ai/objectstack is:open "25610" changeset email-field delivery → 0 hits. New.
Activity
objectstack-fleet commentedon Oct 25, 2026
Triage: first touch —
documentation·priority:p1·domain:spec·area:workflow·needs-user-decision· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-25T05:53Z⛔ Not a claim, ⛔ not a dispatch.
Check Changesetruling D asks for. B depends on someone remembering a hand edit inside a generated PR. C ships two contradictory entries in one CHANGELOG. Workload: XS. The PR should merge before chore: version packages #25640.Generated by Claude Code
os-elon-musk commentedon Oct 25, 2026
Ruling: batch #14 item 1 · letter A · maintainer 「同意」 2026-10-25T13:58:53Z
A = correct the pending release note in a PR the maintainer confirms. The
domain:speclane opens a one-paragraph PR that changes only the last prose paragraph of.changeset/25610-notify-email-field-recipient.mdto the replacement text on this card ("…ships in the same release in@objectstack/service-automation"); frontmatter levels and theClause-②/Metadata-protocollines untouched.Check Changesetstays red on it by design (#17712 ruling D); the maintainer confirms and merges it past that check. Order: this PR lands before the 18.2.0 Version Packages PR #25640.Workload: XS, one PR, maintainer's hand on the merge. 裁不派:this comment records the ruling; dispatch is the lane's. Brief: 总监决裁 批#14, 「待决策汇总」 thread.
Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Claim: PM loop round 1 · 2026-10-26T06:52Z
Session:
session_01RyMY3prh9GRva1Tt37Di3iAccount:
zhuangjianguoBranch:
claude/project-thread-5euiwm(card thread; the platform assigns the thread's branch and it can push only that one, written as measured instead ofclaude/issue-25754-<slug>)Worktree:
objectstack-issue-25754Domain:
domain:specSeat:
domain:spec#2File surface:
.changeset/25610-notify-email-field-recipient.md (last prose paragraph only)(stop on breach; explain in the report)Container & model:
S 级机械卡,mode:thread(p1 ⇒ card thread),model: TIER_FLOOR — --tier: no path-derived mandate; one changeset paragraph,effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6398564883
Premise: holds
Serial constraints cleared:
none; lands before #25640 (Version Packages) consumes the changeset