Repository navigation
Commit 83fc231
docs(skills): teach that a notify with no link opens the run's trigger record (#30682)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} -->
_Requested by **Elon** · [project
thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9D8rNJVDBGUc9LuK6RAGm4BT)_
Fixes #30254
Clause-②: no
Metadata-protocol: none
## 维护者速读
- 改了什么:自动化技能的 notify 示例、flows 文档的 notify 段落、一条新
eval,改教「不写链接时,通知点开就是触发这次运行的那条记录」。
- 为什么改:PR #30252 已让运行时这样做,技能和文档还在教旧规则「不写成对的 sourceObject/sourceId
就没有链接」,AI 会白写一对多余的键。
- 风险与回滚:只改教学文字和 eval,不改任何代码或 schema;回滚即整体 revert 本 PR。
- 先看:`skills/objectstack-automation/SKILL.md` 的 notify 示例三行(L124–126),其次
`content/docs/automation/flows.mdx` 约 L351 的段落。
- 两分钟验证:`node scripts/check-skills-token-ratchet.mjs`,应看到
objectstack-automation/SKILL.md 为 6447 tokens(上限 6449)。
- 需要你做的:受管面(`skills/**`,Tier H),请审阅后批准或合并。
## What changes
The runtime default that PR #30252 landed, read off `origin/main`
`b77c160a`
(`packages/services/service-automation/src/builtin/notify-node.ts`,
`defaultClickThroughOf` and the `sourceObject` / `sourceId` /
`actionUrl` config-schema descriptions): a `notify` node 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). An
explicit pair or `actionUrl` wins; a half-written pair is dropped, never
defaulted; a run with no trigger record links nowhere.
- `skills/objectstack-automation/SKILL.md`: the notify example's link
comments now state the default and its three exceptions (`link: PAIR,
else dropped; none of the 3 ⇒ the trigger record (not on delete), if
any`; `actionUrl` overrides the pair). The old `// click-through: a
PAIR, else dropped` is gone.
- `content/docs/automation/flows.mdx`: the notify `sourceId` paragraph
states the default, its three cases, and the three exceptions, with the
no-trigger-record examples the code comment names (a schedule tick, an
inbound API post, a manual start with no record).
- `skills/objectstack-automation/evals/flows-triggers-approvals.json`:
eval 14, a record-triggered notify that should open its case. It expects
no `sourceObject:` / `actionUrl:` written and the words `trigger record`
(taught in SKILL.md).
- `.changeset/30254-notify-default-link-skill.md`:
`'@objectstack/skills': patch`.
### Token readings (`skills/**`)
| Reading | Before (`b77c160a`) | After (`HEAD`) |
|:--|--:|--:|
| `skills/objectstack-automation/SKILL.md` lines | 452 | 452 |
| same file, ratchet tokens (stamp line excluded) | 6449 (ceiling 6449,
headroom 0) | 6447 (headroom 2) |
| all `skills/*/SKILL.md` lines | 4534 | 4534 |
| all `skills/*/SKILL.md` bytes | 226877 | 226867 |
The new notify comment costs 13 bytes net inside the example (it also
drops the `(a value slot)` and `text slot;` asides, which
Valid-but-silently-wrong item 1 teaches for `sourceId` and `actionUrl`).
It is paid inside the same file by deleting a duplicated aside from the
Flow Types `api` row, `or a literal secret;`: the Inbound webhook config
table still teaches `secretRef` / `secret`. No ceiling moved.
## Tests
Teaching text and an eval only; no code changed, so no unit suite and no
ablation apply. The gate readings are under Verification.
## Acceptance notes
- Card item 3 is not in this PR (spec lane, out of this file surface).
On `origin/main` `b77c160a`,
`packages/spec/src/automation/io-node-config.zod.ts` still carries the
old rule: the `sourceObject` (L750) and `sourceId` (L756) `.describe()`
texts say only that a half pair is dropped, and the `actionUrl` text
says only that it overrides the synthesized link. None of the three
mentions the trigger-record default. The generated
`content/docs/references/automation/io-node-config.mdx` (L106, L107,
L109) repeats them. The seat carries this to `domain:spec`.
- The SKILL.md ceiling is left at 6449 (headroom 2): lowering it is a
`scripts/` edit outside this file surface.
## Verification
All readings at head `d9415882`, after `turbo run build` of
`@objectstack/spec`, `@objectstack/lint...`,
`@objectstack/client-react...` and `@objectstack/formula` (`BUILD ::
exit 0`).
- `node scripts/pm/dispatch-gates.mjs --ran FILE --repo
objectstack-ai/objectstack`: 68 derived families accounted for, 67 run,
1 NOT MEASURED, 0 unrun.
- NOT MEASURED: `pnpm check:dual-build-cjs-loads`, reason: exit 3,
PREREQUISITE NOT MET (it needs a whole-tree build; CI runs it).
- `pnpm lint :: exit 0`.
- `check-skills-token-ratchet`: `57 authored bundle file(s) within their
ceilings`; `skills/objectstack-automation/SKILL.md is 6447 tokens
(ceiling 6449; headroom 2)`.
- `check:skill-examples`: `283 prose examples type-check across 3
surface(s)`.
- `check:dts-closure` is green over the 41 built packages only; CI
sweeps the whole tree.
<details><summary>Every local family and its exit code</summary>
```text
node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0
node scripts/check-adr-0087-registration.mjs --self-test :: exit 0
node scripts/check-adr-links.mjs :: exit 0
node scripts/check-adr-links.mjs --self-test :: exit 0
node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0
node scripts/check-closing-keyword-parity.mjs :: exit 0
node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0
node scripts/check-comment-mask-corpus.mjs :: exit 0
node scripts/check-doc-route-spelling.mjs --advisory :: exit 0
node scripts/check-doc-route-spelling.mjs --self-test :: exit 0
node scripts/check-docs-section-name.mjs :: exit 0
node scripts/check-docs-section-name.mjs --self-test :: exit 0
node scripts/check-dts-emitted.mjs --self-test :: exit 0
node scripts/check-empty-changeset.mjs --base origin/main :: exit 0
node scripts/check-empty-changeset.mjs --self-test :: exit 0
node scripts/check-section-landing-index.mjs :: exit 0
node scripts/check-section-landing-index.mjs --self-test :: exit 0
node scripts/check-skills-token-ratchet.mjs :: exit 0
node scripts/check-skills-token-ratchet.mjs --self-test :: exit 0
node scripts/ci/assert-turbo-remote-cache.mjs --self-test :: exit 0
node scripts/ci/plan-test-core-shards.mjs --self-test :: exit 0
node scripts/ci/prune-turbo-cache.mjs --self-test :: exit 0
node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0
node scripts/release-pending-publish.mjs --self-test :: exit 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0
pnpm --filter @objectstack/lint run check:doc-security-posture :: exit 0
pnpm --filter @objectstack/spec run check:docs :: exit 0
pnpm --filter @objectstack/spec run check:empty-state :: exit 0
pnpm --filter @objectstack/spec run check:liveness :: exit 0
pnpm --filter @objectstack/spec run check:skill-docs :: exit 0
pnpm --filter @objectstack/spec run check:skill-examples :: exit 0
pnpm --filter @objectstack/spec run check:strictness-ledger :: exit 0
pnpm --filter @objectstack/spec run check:variant-docs :: exit 0
pnpm --filter @objectstack/spec run check:yaml-examples :: exit 0
pnpm check:agent-test-spelling :: exit 0
pnpm check:changeset-gate-self-tests :: exit 0
pnpm check:ci-filter-parity :: exit 0
pnpm check:closed-ceremony-text :: exit 0
pnpm check:corpus-claim-drift :: exit 0
pnpm check:cross-package-test-inputs :: exit 0
pnpm check:doc-anchors :: exit 0
pnpm check:doc-authoring :: exit 0
pnpm check:doc-frontmatter :: exit 0
pnpm check:docs-audit-scope :: exit 0
pnpm check:docs-redirects :: exit 0
pnpm check:docs-single-h1 :: exit 0
pnpm check:docs-spec-enumerations :: exit 0
pnpm check:docs-transcript-drift :: exit 0
pnpm check:driver-memory-census :: exit 0
pnpm check:dts-closure :: exit 0
pnpm check:dual-build-cjs-loads :: exit 3
pnpm check:gitlink-declared :: exit 0
pnpm check:lean-entry-closure :: exit 0
pnpm check:merge-driver :: exit 0
pnpm check:nul-bytes :: exit 0
pnpm check:pm-governed-merges :: exit 0
pnpm check:pm-skill-id-lint :: exit 0
pnpm check:published-files :: exit 0
pnpm check:published-readme-links :: exit 0
pnpm check:react-page-adapter-contract :: exit 0
pnpm check:refd-timer-probe :: exit 0
pnpm check:role-word :: exit 0
pnpm check:skill-compatibility :: exit 0
pnpm check:skill-frame-sync :: exit 0
pnpm check:skill-identifier-liveness :: exit 0
pnpm check:sourcemap-no-sources-content :: exit 0
pnpm check:vendor-version-stamps :: exit 0
pnpm check:watch-hint-literal :: exit 0
pnpm lint :: exit 0
```
</details>
---
_Generated by [Claude
Code](https://claude.ai/code/session_016WV4cyou7XDWHnizyxR5MQ)_
Co-authored-by: Claude <noreply@anthropic.com>1 parent fcefe4e commit 83fc231
4 files changed
Lines changed: 42 additions & 6 deletions
File tree
- .changeset
- content/docs/automation
- skills/objectstack-automation
- evals
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
349 | 349 | | |
350 | 350 | | |
351 | 351 | | |
352 | | - | |
353 | | - | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
354 | 360 | | |
355 | 361 | | |
356 | 362 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
48 | | - | |
| 48 | + | |
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
| |||
121 | 121 | | |
122 | 122 | | |
123 | 123 | | |
124 | | - | |
125 | | - | |
126 | | - | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
127 | 127 | | |
128 | 128 | | |
129 | 129 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
242 | 242 | | |
243 | 243 | | |
244 | 244 | | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
245 | 263 | | |
246 | 264 | | |
247 | 265 | | |
0 commit comments