Skip to content

notify node form descriptor still says "Requires sourceId." / "Requires sourceObject." — the Studio form face of the #7085 describe drift #7112

Description

@os-project-manager

Out-of-scope finding from the #7084/#7085 sweep pack (PR #7111). Recorded unassigned — a different card class (form-descriptor face, service-automation), explicitly fenced out of that PR's scope.

Anchor

packages/services/service-automation/src/builtin/notify-node.ts:166 and :170 (measured on origin/main @ f5a9bc2f3), the hand-written configSchema literal that drives the Studio form:

description: 'Object name of the record the notification links to (writes sys_notification.source_object). Requires sourceId.',
...
description: 'Record id the notification links to (writes sys_notification.source_id). Requires sourceObject. The inbox synthesizes a `/{object}/{id}` deep-link from these.',

Why it is the same defect as #7085, on a different face

#7085 fixed the spec Zod .describe() strings (PR #7111): the schema deliberately accepts the half pair and the executor DROPS a half-specified click-through target at execute time (the module JSDoc's recorded contract in io-node-config.zod.ts), so "Requires ..." was a phantom requirement. The descriptor literal carries the same phantom "Requires ..." wording and reaches a different reader — the Studio form author — where it is just as wrong: a half pair saves green, publishes green, and the link silently never renders (#2675's invisible-failure shape).

Why PR #7111 did not sweep it

Suggested shape

Align the two descriptor description strings with the vocabulary PR #7111 borrowed from the module JSDoc ("Only takes effect together with sourceId — a half-specified click-through target is dropped at execute time, so the inbox never renders a dead link."), keeping the descriptor's extra deep-link sentence if wanted. String-only; no key/type/required change, so the form-Zod key-set ledger is untouched.

Refs

#7085 (the spec-face fix, PR #7111), #6762 (class specimen), #2675 (pair-only click-through), #4045 (form/Zod provenance split).

Activity

  1. os-zhuang commented on Aug 9, 2026

    @os-zhuang
    Contributor

    Triage: queued (pm:queue) + routed domain:services.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. self-assigned this
    on Aug 10, 2026
  3. os-help commented on Aug 10, 2026

    @os-help
    Collaborator

    Claim: PM loop round 1 (domain:services seat #6021)
    Session: session_015fkdTyGmMD5s8ZtEifvuGy
    Branch: claude/issue-7112-notify-descriptor-drift
    Worktree: objectstack-issue-7112
    Domain: domain:services
    File surface: packages/services/service-automation/src/builtin/notify-node.ts (two description strings only; no key/type/required changes). (Stop on breach; explain in the report.)
    Container & model: S mechanical (string-only, gate-checked by the form-Zod ledger's key-set invariance), mode:subagent, model: sonnet
    Serial constraints cleared: none — no in-flight claim or open PR touches service-automation; spec-face sibling PR #7111 is merged and explicitly fenced this file out.


    Generated by Claude Code

  4. os-help commented on Aug 10, 2026

    @os-help
    Collaborator

    ACCEPT. PR #7202, reviewed by the domain:services seat (#6021, session session_015fkdTyGmMD5s8ZtEifvuGy). Marking ready and queueing.

    Verified against GitHub rather than the report: 2 files (the two description strings in packages/services/service-automation/src/builtin/notify-node.ts + one patch changeset) — exactly the declared surface, nothing else. 25/25 check runs completed, zero failures; ESLint success (02:39:55Z) and TypeScript Type Check success (02:51:22Z) read by job conclusion. Fixes #7112 is correct — the card is fully delivered by this change.

    What shipped: both phantom "Requires ..." strings replaced with the exact vocabulary PR #7111 landed on the spec face (read from the merged diff, not paraphrased), keeping the descriptor's extra deep-link sentence. The form-Zod key-set ledger is untouched (string-only), and the reconciliation gate still passes — which is also why this had to be dispatched deliberately rather than pushed by any gate. Changeset over skip-changeset mirrors #7111's precedent for user-visible help-text (author-facing Studio form strings), with the reasoning recorded in the PR body.


    Generated by Claude Code

  5. added a commit that references this issue on Aug 17, 2026
    ce15dc3
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