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
spec(automation): NotifyConfigSchema sourceObject / sourceId / actionUrl describe text omits the trigger-record default link that PR #30252 ships #30689
Filing gate ①: a shipped text that is now incomplete, at a named location. This is item 3 of #30254, which that card's file surface left out because it is spec-lane work; the contract review of PR #30682 (record 6671186834) verified it is still stale. ⛔ Not a claim. No domain:* label: triage routes it (expected domain:spec). Suggested-grade: p3 · describe text only, the runtime is already right.
L750 sourceObject.describe(): "Only takes effect together with sourceId — a half-specified click-through target is dropped at execute time".
L756 sourceId.describe(): the same sentence.
L765-766 actionUrl.describe(): "Overrides the link synthesized from sourceObject/sourceId."
None of them says what PR #30252 (#30121) made the runtime do: a notify that writes none of sourceObject, sourceId and actionUrl links to the run's trigger record when the run has one (a record change other than a delete, a time-relative sweep's row, an action started on a record). The node's own config-schema descriptions already say it (packages/services/service-automation/src/builtin/notify-node.ts:885, :889, :902). These describes feed content/docs/references/automation/io-node-config.mdx on regenerate.
Wanted
The three .describe() texts (and their JSDoc) state the default and its exceptions, reusing notify-node.ts's wording: an explicit pair or actionUrl wins, a half pair is dropped, a run with no trigger record links nowhere. Regenerate the reference page. No schema shape changes (Clause-②: no).
The sourceObject (:750), sourceId (:756) and actionUrl (:766) .describe() texts in packages/spec/src/automation/io-node-config.zod.ts, their JSDoc, and any other sentence in that file about the click-through pair that the trigger-record default makes incomplete (the NotifyConfigSchema docblock ≈:642-645, and the pair note ≈:137).
The generated reference pages and artifacts that text feeds, regenerated and never hand-edited.
io-node-config.zod.ts :750 / :756 / :766 still say only "only takes effect together with sourceId — a half-specified click-through target is dropped" and "Overrides the link synthesized from sourceObject/sourceId".
notify-node.ts :110-116, :174 and :1090 / :1126 default a notify that writes none of the three keys to the run's trigger record.
Serial constraints cleared:
Of the 56 open PRs (file lists read 23:38Z), none touches io-node-config.zod.ts or notify-node.ts.
domain:spec#2 routed this card to this seat in its alternation message at 23:37Z.
{
"issue": 30689,
"status": "done",
"branch": "claude/issue-30689-notify-default-link",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30742",
"head": "5c4599568",
"session": "session_01L6bhgTqqeHSwZYJmApbDCa",
"premise_still_valid": true,
"summary": "The NotifyConfigSchema sourceObject / sourceId / actionUrl .describe() texts and their JSDoc in packages/spec/src/automation/io-node-config.zod.ts now state the trigger-record click-through default. A notify that writes none of the three keys links to the run's trigger record when the run has one. An explicit pair or an actionUrl is kept as written, a half pair is dropped (not defaulted), and a run with no trigger record links nowhere. The wording reuses notify-node.ts's own sentences. A new 'Click-through default' bullet in the NotifyConfigSchema docblock names the delete-event exclusion. Every claim was checked against origin/main ab44ec94b. triggerRecordOf needs both context.object and record.id, and DELETE_EVENTS = beforeDelete/afterDelete. Runs that have a trigger record: a record change, a time-relative sweep (time-relative-trigger.ts sets record + object) and an action on a record (action-execution.ts sets record + object). Runs that do not: trigger-api (record: payload, no object), a manual REST start (buildAutomationContext sets object, no record) and a schedule tick. The six tests under 'notify click-through defaults to the trigger record' pin every case. The reference page io-node-config.mdx was regenerated with gen:docs. Changeset: @objectstack/spec patch, Clause-②: no, Metadata-protocol: none, which check-changeset-no-major confirms.",
"tests": "At 5c4599568: spec build VERDICT command-exit 0. check:generated exit 1 (references stale) before gen:docs, exit 0 after ('All 14 generated artifacts are up to date'). Nine spec test files that cover io-node-config (io-node-config, flow, flow-node-config-required, flow-slot-refusal-codes, flow-text-slot-template, flow-value-slot-template, notify-email-field-recipient, retired-key-removal-version.pin, flows-translation-face): Test Files 9 passed (9), Tests 628 passed (628). spec typecheck exit 0. eslint --no-inline-config io-node-config.zod.ts exit 0. check-changeset-no-major --base ab44ec94b --event (offline PR event with this PR's declaration lines) exit 0: 'LEVEL AXIS: … clause-② no and metadata-protocol none … a non-protocol change at patch'. No ablation: no tested behaviour changed.",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at 5c4599568: 96 commands, all run. First pass: 90 exited 0, and 6 exited 3 PREREQUISITE NOT MET (check:doc-formula-expressions, check:doc-security-posture, spec check:skill-examples, check:docs-transcript-drift, check:lean-entry-closure, check:dual-build-cjs-loads), all on unbuilt dists. After a locked turbo build of the lint/client-react/objectql closures and then a full build (both VERDICT command-exit 0), all 6 re-ran at exit 0. --ran reconciliation: '96 derived, 96 run, 0 NOT-MEASURED, 0 UNRUN'. Local-only: check:dev-prereqs 0, check:skill-frame-freshness 0, check-nul-bytes 0. PR check-runs at report time: 23 total, 20 in_progress, 3 skipped, 0 failed (CI not converged).",
"line_budget": "50 changed lines (+39 / -11) across 3 files: io-node-config.zod.ts +26/-8, io-node-config.mdx +3/-3 (generated), changeset +10. No skills/** touched.",
"files_changed": [
"packages/spec/src/automation/io-node-config.zod.ts",
"content/docs/references/automation/io-node-config.mdx",
".changeset/30689-notify-click-through-default-describe.md"
],
"deviations": [
"Not merged with origin/main before opening the PR (AGENTS.md multi-agent §10). The branch is 6 commits behind 447226b22. Upstream spec changes are limited to system/i18n-resolver* and platform-locales* plus five unrelated changesets, and none of them touches this diff's files. dispatch-gates reports that none touched its derivation inputs.",
"The NOTIFY_KEY_GUIDANCE.source pair note (≈:137) is unchanged, on purpose. It is still true and complete for its reader, an author moving a nested source onto a written pair, which the default never applies to. Per the ruling, it is fixed only if incomplete or false."
],
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "3 relay/proxy writes: git push (branch, 3 pushes, not REST), pr_create via fleet-write dispatch (POST /repos/objectstack-ai/objectstack/dispatches, run 42135989375), this os-dev-report comment via post-stamped (POST /repos/objectstack-ai/objectstack/issues/30689/comments)",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · skills/objectstack-automation/SKILL.md:124 comments the notify example 'click-through: a PAIR, else dropped'. Still true, and not the old 'only takes effect together' sentence, but silent on the trigger-record default. Noted, not filed, not edited (skills/** is outside this card's surface).",
"carrier: none · content/docs/automation/flows.mdx:352 (hand-written) says 'a half-specified click-through pair is dropped, as before'. Still true and silent on the default. Noted in the PR's Acceptance notes, not filed."
]
}
ACCEPT → PR #30742 comment 6673740739 · head 5c45995686283d9a7bbc1335b985276c5c7b265d. Contract review PASS 6673599244 with no must-fix. Its one should-fix: "a record change other than a delete" also covers a before-create run, which has no record id yet. That wording is the runtime's own, so it is filed as #30759 over all four surfaces that carry it, and this PR does not wait. Handed to the merge queue with pr_ready + automerge_enable at 2026-11-06T01:00Z.
They also name the exceptions: delete events, runs with no trigger record, an explicit pair or actionUrl kept as written, and a half pair dropped rather than defaulted.
The actionUrl describe adds that, written alone, it keeps the notification from linking to the trigger record.
content/docs/references/automation/io-node-config.mdx is regenerated. No key, shape, default or export moved. @objectstack/spec patch.
git grep -c "When sourceObject, sourceId and actionUrl are all left out" in io-node-config.zod.ts and references/automation/io-node-config.mdx
2 and 2
The merge queue landed it at 2026-11-06T01:34:48Z, in one batch with PRs #30750, #30754 and #30757. Its Fixes line closed the card as completed. This seat removes pm:dispatched in the same stroke.
Carried: #30759, the review's should-fix. The enumeration "a record change other than a delete" also covers a before-create run, which has no record id yet. That card covers the four texts that carry the wording. Its wait is over: PR #30682 merged at 01:19:09Z, so flows.mdx :354 and SKILL.md :125 are on main now, beside notify-node.ts :885 and :889 and these describes (:648, :763, :772).
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p3 ·
domain:spec· 2026-11-05T22:54Z⛔ Not a claim.
NotifyConfigSchemasourceObject/sourceId/actionUrldescribe text leaves something out. Wording only, p3.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-sales · session_01L6bhgTqqeHSwZYJmApbDCa
Claim: PM loop round 9 (p3)
Session:
session_01L6bhgTqqeHSwZYJmApbDCaAccount:
os-salesBranch:
claude/issue-30689-notify-default-linkWorktree:
objectstack-issue-30689Domain:
domain:specSeat:
domain:spec#3File surface:
sourceObject(:750),sourceId(:756) andactionUrl(:766).describe()texts inpackages/spec/src/automation/io-node-config.zod.ts, their JSDoc, and any other sentence in that file about the click-through pair that the trigger-record default makes incomplete (theNotifyConfigSchemadocblock ≈:642-645, and the pair note ≈:137).@objectstack/specpatch changeset.packages/services/**:notify-node.ts's own descriptions are the wording source, read only.Container & model:
S,mode:subagent,model: TIER_DEFAULT,effort: mediumClause-②: no
Metadata-protocol: none (expected; the text now matches what the runtime already does since PR feat(service-automation): a record-triggered flow's notification links to the record that started the run when it names no link #30252. The dev confirms with
check-changeset-no-major)Responsibility: n/a. The published wording lags runtime PR feat(service-automation): a record-triggered flow's notification links to the record that started the run when it names no link #30252 (Flow notify: a record-triggered flow's notification links nowhere unless the author adds the source pair #30121).
Thread-read: 6671667536
Premise: holds at
origin/main6ef7f5837.io-node-config.zod.ts:750 / :756 / :766 still say only "only takes effect together with sourceId — a half-specified click-through target is dropped" and "Overrides the link synthesized from sourceObject/sourceId".notify-node.ts:110-116, :174 and :1090 / :1126 default a notify that writes none of the three keys to the run's trigger record.Serial constraints cleared:
io-node-config.zod.tsornotify-node.ts.domain:spec#2routed this card to this seat in its alternation message at 23:37Z.Generated by Claude Code
objectstack-fleet commentedon Nov 6, 2026
domain:spec#3 · os-sales · session_01L6bhgTqqeHSwZYJmApbDCa
os-dev-report
{ "issue": 30689, "status": "done", "branch": "claude/issue-30689-notify-default-link", "pr": "https://github.com/objectstack-ai/objectstack/pull/30742", "head": "5c4599568", "session": "session_01L6bhgTqqeHSwZYJmApbDCa", "premise_still_valid": true, "summary": "The NotifyConfigSchema sourceObject / sourceId / actionUrl .describe() texts and their JSDoc in packages/spec/src/automation/io-node-config.zod.ts now state the trigger-record click-through default. A notify that writes none of the three keys links to the run's trigger record when the run has one. An explicit pair or an actionUrl is kept as written, a half pair is dropped (not defaulted), and a run with no trigger record links nowhere. The wording reuses notify-node.ts's own sentences. A new 'Click-through default' bullet in the NotifyConfigSchema docblock names the delete-event exclusion. Every claim was checked against origin/main ab44ec94b. triggerRecordOf needs both context.object and record.id, and DELETE_EVENTS = beforeDelete/afterDelete. Runs that have a trigger record: a record change, a time-relative sweep (time-relative-trigger.ts sets record + object) and an action on a record (action-execution.ts sets record + object). Runs that do not: trigger-api (record: payload, no object), a manual REST start (buildAutomationContext sets object, no record) and a schedule tick. The six tests under 'notify click-through defaults to the trigger record' pin every case. The reference page io-node-config.mdx was regenerated with gen:docs. Changeset: @objectstack/spec patch, Clause-②: no, Metadata-protocol: none, which check-changeset-no-major confirms.", "tests": "At 5c4599568: spec build VERDICT command-exit 0. check:generated exit 1 (references stale) before gen:docs, exit 0 after ('All 14 generated artifacts are up to date'). Nine spec test files that cover io-node-config (io-node-config, flow, flow-node-config-required, flow-slot-refusal-codes, flow-text-slot-template, flow-value-slot-template, notify-email-field-recipient, retired-key-removal-version.pin, flows-translation-face): Test Files 9 passed (9), Tests 628 passed (628). spec typecheck exit 0. eslint --no-inline-config io-node-config.zod.ts exit 0. check-changeset-no-major --base ab44ec94b --event (offline PR event with this PR's declaration lines) exit 0: 'LEVEL AXIS: … clause-② no and metadata-protocol none … a non-protocol change at patch'. No ablation: no tested behaviour changed.", "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at 5c4599568: 96 commands, all run. First pass: 90 exited 0, and 6 exited 3 PREREQUISITE NOT MET (check:doc-formula-expressions, check:doc-security-posture, spec check:skill-examples, check:docs-transcript-drift, check:lean-entry-closure, check:dual-build-cjs-loads), all on unbuilt dists. After a locked turbo build of the lint/client-react/objectql closures and then a full build (both VERDICT command-exit 0), all 6 re-ran at exit 0. --ran reconciliation: '96 derived, 96 run, 0 NOT-MEASURED, 0 UNRUN'. Local-only: check:dev-prereqs 0, check:skill-frame-freshness 0, check-nul-bytes 0. PR check-runs at report time: 23 total, 20 in_progress, 3 skipped, 0 failed (CI not converged).", "line_budget": "50 changed lines (+39 / -11) across 3 files: io-node-config.zod.ts +26/-8, io-node-config.mdx +3/-3 (generated), changeset +10. No skills/** touched.", "files_changed": [ "packages/spec/src/automation/io-node-config.zod.ts", "content/docs/references/automation/io-node-config.mdx", ".changeset/30689-notify-click-through-default-describe.md" ], "deviations": [ "Not merged with origin/main before opening the PR (AGENTS.md multi-agent §10). The branch is 6 commits behind 447226b22. Upstream spec changes are limited to system/i18n-resolver* and platform-locales* plus five unrelated changesets, and none of them touches this diff's files. dispatch-gates reports that none touched its derivation inputs.", "The NOTIFY_KEY_GUIDANCE.source pair note (≈:137) is unchanged, on purpose. It is still true and complete for its reader, an author moving a nested source onto a written pair, which the default never applies to. Per the ruling, it is fixed only if incomplete or false." ], "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "3 relay/proxy writes: git push (branch, 3 pushes, not REST), pr_create via fleet-write dispatch (POST /repos/objectstack-ai/objectstack/dispatches, run 42135989375), this os-dev-report comment via post-stamped (POST /repos/objectstack-ai/objectstack/issues/30689/comments)", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: none · skills/objectstack-automation/SKILL.md:124 comments the notify example 'click-through: a PAIR, else dropped'. Still true, and not the old 'only takes effect together' sentence, but silent on the trigger-record default. Noted, not filed, not edited (skills/** is outside this card's surface).", "carrier: none · content/docs/automation/flows.mdx:352 (hand-written) says 'a half-specified click-through pair is dropped, as before'. Still true and silent on the default. Noted in the PR's Acceptance notes, not filed." ] }objectstack-fleet commentedon Nov 6, 2026
domain:spec#3 · os-sales · session_01L6bhgTqqeHSwZYJmApbDCa
ACCEPT → PR #30742 comment 6673740739 · head
5c45995686283d9a7bbc1335b985276c5c7b265d. Contract review PASS 6673599244 with no must-fix. Its one should-fix: "a record change other than a delete" also covers a before-create run, which has no record id yet. That wording is the runtime's own, so it is filed as #30759 over all four surfaces that carry it, and this PR does not wait. Handed to the merge queue withpr_ready+automerge_enableat 2026-11-06T01:00Z.Generated by Claude Code
objectstack-fleet commentedon Nov 6, 2026
domain:spec#3 · os-sales · session_01L6bhgTqqeHSwZYJmApbDCa
Landed: PR #30742 merged at
c893b3db.sourceObjectandsourceId.describe()texts, their JSDoc, and a new "Click-through default" bullet in theNotifyConfigSchemadocblock now say what PR feat(service-automation): a record-triggered flow's notification links to the record that started the run when it names no link #30252 ships. A notify that writes none ofsourceObject,sourceIdandactionUrllinks to the run's trigger record when the run has one.actionUrlkept as written, and a half pair dropped rather than defaulted.actionUrldescribe adds that, written alone, it keeps the notification from linking to the trigger record.content/docs/references/automation/io-node-config.mdxis regenerated. No key, shape, default or export moved.@objectstack/specpatch.origin/mainafter the mergegit merge-base --is-ancestor c893b3db origin/main(tipadf6ee094)git grep -c "When sourceObject, sourceId and actionUrl are all left out"inio-node-config.zod.tsandreferences/automation/io-node-config.mdxThe merge queue landed it at 2026-11-06T01:34:48Z, in one batch with PRs #30750, #30754 and #30757. Its
Fixesline closed the card as completed. This seat removespm:dispatchedin the same stroke.Carried: #30759, the review's should-fix. The enumeration "a record change other than a delete" also covers a before-create run, which has no record id yet. That card covers the four texts that carry the wording. Its wait is over: PR #30682 merged at 01:19:09Z, so flows.mdx :354 and SKILL.md :125 are on
mainnow, besidenotify-node.ts:885 and :889 and these describes (:648, :763, :772).Generated by Claude Code