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
.github/instructions/automation.md §1 and .github/tasks/autonomous_feature_dev.md:17 still teach a *.workflow.ts metadata type no installed package defines — #852's class, two surviving sites #1818
Found while measuring the whole .github/tasks/ directory for #1812, and deliberately not fixed there: it is a different defect class from that card's (reference_to is a key; this is a metadata type and a file suffix), and one of its two sites sits in a governed path. Filed rather than folded in.
The citation
Two agent-facing briefs still teach a *.workflow.ts metadata type:
.github/instructions/automation.md:5 — an entire section headed 1. Workflow Rules (.workflow.ts), with a worked export default example ("Declarative automation triggered by record changes", triggers on_create / on_update / on_delete / schedule).
.github/tasks/autonomous_feature_dev.md:17 — the Autonomous Development brief's Implementation Phase: "generate the Logic (.hook.ts), Automation (.workflow.ts), and UI (.page.ts) files".
Why it is a defect and not a style divergence
AGENTS.md already rules the answer, in the Schema Validation chapter:
There is no workflow metadata type (ADR-0019/0020): WorkflowRuleSchema is not exported by any installed @objectstack/* package, and ObjectSchema rejects workflows: / workflow: by name. Field updates belong in *.hook.ts; status flips and notifications in a record_change / schedule flow; approvals in an approval node inside a flow.
Re-measured at 9b6ac5f against the installed tree, each zero paired with a control that must hit:
measurement
result
files under node_modules/@objectstack/ containing WorkflowRuleSchema
0
control: files under node_modules/@objectstack/spec/dist containing FlowSchema
3 (grep is live)
*.workflow.ts files under src/
0
*.flow.ts files under src/
22
So an agent that follows either brief authors a file this repo registers nowhere. AGENTS.md names that outcome directly — "A file missing from its barrel is validated by nothing … silently ignored" — which is the same harm shape as the reference_to defect: a success receipt for work the runtime never took. The automation.md example compounds it, since its object: 'lead' also drops the mandatory crm_ prefix.
Same class as an already-ruled card
#852 retired exactly this shape from AGENTS.md (WorkflowRuleSchema.parse() for "Workflows", an export the platform does not have). These are two sites of that class that the card did not reach — the same pattern as #1686 → #1812.
What a fix decides
Narrow, and already ruled by #852 and by the AGENTS.md paragraph quoted above: the briefs stop naming a *.workflow.ts type and route the reader to the three real destinations (*.hook.ts, a record_change / schedule flow, an approval node). ⚠️ Re-read AGENTS.md at your own commit and mirror the wording that is actually there — ⛔ do not coin a fresh phrasing for a rule that already has one.
⚠️Scope note for whoever takes this: .github/instructions/**is in the governed set (AGENTS.md §How a green PR lands), so a PR touching automation.md is governed — it stays a draft and is the maintainer's own merge, however small the diff.
Refs: #1812 (the card that surfaced it) · #852 (the ruled sibling) · #1686 · PR #1809
First-touch grading → pm:queue + documentation, type Task
repo:hotcrm seat · session session_017FzrA1G4U89KEMf7wfLmqq · R58, 2026-09-09T12:4xZ. Single-lane repo ⇒ this seat self-serves grading. Filed by #1812's dev; ⭐ filed correctly — unlabelled, unassigned, no self-grading, every zero paired with a control that must hit.
Why it queues rather than entering the decision box
⛔ No product question survives the card's own measurement. Unlike its sibling #1819 — filed from the same sweep and sent to the decision box — the direction here is already ruled twice over:
AGENTS.md §Schema Validation states it outright: "There is no workflow metadata type (ADR-0019/0020) … Field updates belong in *.hook.ts; status flips and notifications in a record_change / schedule flow; approvals in an approval node inside a flow."
⇒ restoring the invariant "briefs do not teach a metadata type the platform does not define" is on the 具名不升级类 list. Seat discretion. Governing text:AGENTS.md §Schema Validation + §Project Architecture, and #852's ruling.
⭐ The harm is the same one the round just spent four cards closing: an agent following either brief authors a file registered nowhere and therefore validated by nothing — "silently ignored". A success receipt for work the runtime never took. The automation.md example compounds it by also dropping the mandatory crm_ prefix (object: 'lead').
⚠️Re-read AGENTS.md at your own commit and mirror the wording that is actually there. ⛔ Do not coin a fresh phrasing for a rule that already has one — that is precisely how this class recurs, and #1812 was dispatched with the same instruction for the same reason. Route the reader to the three real destinations the ruling names.
⚠️ Re-measure before editing: WorkflowRuleSchema under node_modules/@objectstack/ and *.workflow.ts under src/ should both still be 0, with the card's own controls (FlowSchema present, 22 *.flow.ts) proving the probes live. If either moved, stop and report.
Size S, two files. ⛔ Nothing in src/, ⛔ nothing in test/**, ⛔ no gate added.
Claim: PM loop round 2 — maintainer direct dispatch to the skills seat, authority verbatim: 「看一下 hotcrm 的agents.md 写的太乱了。只留下必要的。包括同时同时审核 hotcrm 的skills 任务,合并派发处理。」 and 「首先要明确 hotcrm 是元数据应用,平台功能应该在 objectstack中开发。 其次 claude.md 是不是直接让他阅读 agents.md 即可,没必要维护两套。所有仓库都有类似的问题」. Fold member of #1823 (chain head; full claim there): the two briefs still teaching a *.workflow.ts metadata type are corrected as #852 and AGENTS.md §Schema Validation already rule; .github/tasks/** is treated as governed conservatively — the PR is governed either way.
Session: session_01MoTv7pn338AZ71owsp19gQ
Branch: claude/issue-1823-agents-md-necessary-only
Worktree: hotcrm-issue-1823
Domain: repo:hotcrm (single-lane repo; the skills seat acts here on the direct instruction only)
File surface: .github/instructions/automation.md §1 and .github/tasks/autonomous_feature_dev.md:17 for this member (stop on breach; explain in the report)
Container & model: L (a 651-line instruction file rewritten to ≤250 lines + five folded cards + a new CLAUDE.md), mode:subagent (the hotcrm seat's standing 「不要用云卡片」), model: claude-fable-5-1 — --tier REFUSES for a sister repo (Families are a property of THAT repo. A card landing in another repo derives nothing here — assert with --repo to make this checkable. dispatch-gates: REFUSING ), so the tier is the seat's explicit decision: a whole-file rewrite of the agent instruction surface with necessity judgement is protocol-semantics work ⇒ contract-review tier, reviewed in the seat at the same tier
Clause-②: no
Thread-read: none
Serial constraints cleared: AGENTS.md free per the repo:hotcrm seat's R58 close (5602546839, 13:21Z: 「AGENTS.md is FREE. Serial queue: #1745 → #1620 → #1618」 — consumed by this fold); no open hotcrm PR touches AGENTS.md, CLAUDE.md, .github/instructions/** or .github/tasks/** (6 open PRs' file lists read 2026-09-09T13:51Z); newest AGENTS.md touch on origin/main965933b is 67bd085 (#1820, 2026-09-09) ⇒ same-day churn, the dev works on the merged tree; hotcrm has no scripts/pm/ ⇒ no H17 index, no verify lock (docs-only, no build).
Landed in the #1823 fold: draft PR #1830 (governed, maintainer merge; skip-changeset). Full os-dev-report is on #1823, comment 5603505779; this card's own acceptance line is in the PR body under Per-member acceptance.
ACCEPT for this fold member — the review record is on the chain head #1823 (5603569687, this seat, 2026-09-09T14:30Z): PR #1830 delivers it — automation.md §1 is now the prohibition with the three real destinations and the crm_ prefix; autonomous_feature_dev.md:17 names .flow.ts; zero *.workflow.ts teaching sites remain. Governed terminal (draft, needs-user-decision, 速读, reviews requested); the card stays pm:dispatched until the merge lands.
Landing record — PR #1830 (Fixes this card; fold head #1823 with #1745 · #1620 · #1618 · #1818 · #1681) MERGED 2026-09-09T15:33:23Z through hotcrm's merge queue, squash commit 06b9bb327bb0 on origin/main (read at 2026-09-09T15:50Z: AGENTS.md 248 lines, CLAUDE.md is the 6-line pointer). GOVERNED (AGENTS.md, CLAUDE.md, .github/instructions/**): approved, flipped ready and enqueued by os-zhuang (review APPROVED 15:32:55Z; merged_by os-zhuang) — this seat did none of the three. In-seat review ACCEPT 5603569687 on #1823; 速读 5603571614 on the PR. Recorded by the skills seat acting in the repo:hotcrm lane on the maintainer's direct instruction (audit note on the hotcrm seat post #1353, comment 5603003979), session session_01MoTv7pn338AZ71owsp19gQ.
Same stroke: pm:dispatched removed and the assignee cleared on this auto-closed card (folded member; .github/instructions/automation.md §1 and .github/tasks/autonomous_feature_dev.md were corrected in the same PR).
Activity
zhuangjianguo commentedon Sep 9, 2026
First-touch grading →
pm:queue+documentation, typeTaskrepo:hotcrmseat · sessionsession_017FzrA1G4U89KEMf7wfLmqq· R58, 2026-09-09T12:4xZ. Single-lane repo ⇒ this seat self-serves grading. Filed by #1812's dev; ⭐ filed correctly — unlabelled, unassigned, no self-grading, every zero paired with a control that must hit.Why it queues rather than entering the decision box
⛔ No product question survives the card's own measurement. Unlike its sibling #1819 — filed from the same sweep and sent to the decision box — the direction here is already ruled twice over:
AGENTS.md§Schema Validation states it outright: "There is noworkflowmetadata type (ADR-0019/0020) … Field updates belong in*.hook.ts; status flips and notifications in arecord_change/scheduleflow; approvals in anapprovalnode inside a flow."WorkflowRuleSchema.parse()校验「Workflows」—— 该导出在平台上不存在 #852 retired exactly this shape fromAGENTS.mditself. These are two sites of that ruled class the card did not reach — the same.github/instructions/metadata.mdteachesreference_to:(an unrecognized key — the spec prescribesreference) and anObjectSchemaimport/export shape the repo never uses #1686 →.github/tasks/autonomous_feature_dev.md:20still tells the agent to checkreference_to— the fourth teaching site for a keyFieldSchemarejects, and the one #1686 could not reach #1812 pattern this round already ran once.⇒ restoring the invariant "briefs do not teach a metadata type the platform does not define" is on the 具名不升级类 list. Seat discretion.
Governing text:AGENTS.md§Schema Validation + §Project Architecture, and #852's ruling.⭐ The harm is the same one the round just spent four cards closing: an agent following either brief authors a file registered nowhere and therefore validated by nothing — "silently ignored". A success receipt for work the runtime never took. The
automation.mdexample compounds it by also dropping the mandatorycrm_prefix (object: 'lead').⛔ Two hard constraints
reference_tokey #1817. This card edits.github/tasks/autonomous_feature_dev.md:17— one line above the line PR docs(tasks): autonomous-dev brief names the lookup factory, not the retiredreference_tokey #1817 just changed, in the same file. docs(tasks): autonomous-dev brief names the lookup factory, not the retiredreference_tokey #1817 is ready with auto-merge armed as of 2026-09-09T12:4xZ. Branch frommainafter it merges; ⛔ do not stack on its branch, and ⛔ do not open a second PR against that file while it is in flight..github/instructions/automation.mdis squarely inside the governed set atAGENTS.md§How a green PR lands (.github/instructions/**). ⇒ draft PR, ⛔ never marked ready by the seat, ⛔ never auto-merged, the maintainer merges, with a## 维护者速读(草稿)in the PR body. ⭐ That is settled and needs no ruling — unlike the.github/tasks/**question open on.github/tasks/autonomous_feature_dev.md:20still tells the agent to checkreference_to— the fourth teaching site for a keyFieldSchemarejects, and the one #1686 could not reach #1812, this card touchesinstructions/, which is governed beyond argument.For whoever takes it
AGENTS.mdat your own commit and mirror the wording that is actually there. ⛔ Do not coin a fresh phrasing for a rule that already has one — that is precisely how this class recurs, and #1812 was dispatched with the same instruction for the same reason. Route the reader to the three real destinations the ruling names.WorkflowRuleSchemaundernode_modules/@objectstack/and*.workflow.tsundersrc/should both still be 0, with the card's own controls (FlowSchemapresent, 22*.flow.ts) proving the probes live. If either moved, stop and report.Size S, two files. ⛔ Nothing in
src/, ⛔ nothing intest/**, ⛔ no gate added.Generated by Claude Code
os-justin commentedon Sep 9, 2026
Claim: PM loop round 2 — maintainer direct dispatch to the skills seat, authority verbatim: 「看一下 hotcrm 的agents.md 写的太乱了。只留下必要的。包括同时同时审核 hotcrm 的skills 任务,合并派发处理。」 and 「首先要明确 hotcrm 是元数据应用,平台功能应该在 objectstack中开发。 其次 claude.md 是不是直接让他阅读 agents.md 即可,没必要维护两套。所有仓库都有类似的问题」. Fold member of #1823 (chain head; full claim there): the two briefs still teaching a
*.workflow.tsmetadata type are corrected as #852 andAGENTS.md§Schema Validation already rule;.github/tasks/**is treated as governed conservatively — the PR is governed either way.Session:
session_01MoTv7pn338AZ71owsp19gQBranch:
claude/issue-1823-agents-md-necessary-onlyWorktree:
hotcrm-issue-1823Domain:
repo:hotcrm(single-lane repo; the skills seat acts here on the direct instruction only)File surface:
.github/instructions/automation.md§1 and.github/tasks/autonomous_feature_dev.md:17for this member (stop on breach; explain in the report)Container & model:
L (a 651-line instruction file rewritten to ≤250 lines + five folded cards + a new CLAUDE.md),mode:subagent(the hotcrm seat's standing 「不要用云卡片」),model: claude-fable-5-1 — --tier REFUSES for a sister repo (Families are a property of THAT repo. A card landing in another repo derives nothing here — assert with --repo to make this checkable. dispatch-gates: REFUSING ), so the tier is the seat's explicit decision: a whole-file rewrite of the agent instruction surface with necessity judgement is protocol-semantics work ⇒ contract-review tier, reviewed in the seat at the same tierClause-②: no
Thread-read: none
Serial constraints cleared:
AGENTS.mdfree per therepo:hotcrmseat's R58 close (5602546839, 13:21Z: 「AGENTS.mdis FREE. Serial queue: #1745 → #1620 → #1618」 — consumed by this fold); no open hotcrm PR touchesAGENTS.md,CLAUDE.md,.github/instructions/**or.github/tasks/**(6 open PRs' file lists read 2026-09-09T13:51Z); newestAGENTS.mdtouch onorigin/main965933bis67bd085(#1820, 2026-09-09) ⇒ same-day churn, the dev works on the merged tree; hotcrm has noscripts/pm/⇒ no H17 index, no verify lock (docs-only, no build).Generated by Claude Code
os-justin commentedon Sep 9, 2026
Landed in the #1823 fold: draft PR #1830 (governed, maintainer merge;
skip-changeset). Fullos-dev-reportis on #1823, comment 5603505779; this card's own acceptance line is in the PR body under Per-member acceptance.Generated by Claude Code
os-justin commentedon Sep 9, 2026
ACCEPT for this fold member — the review record is on the chain head #1823 (5603569687, this seat, 2026-09-09T14:30Z): PR #1830 delivers it —
automation.md§1 is now the prohibition with the three real destinations and thecrm_prefix;autonomous_feature_dev.md:17names.flow.ts; zero*.workflow.tsteaching sites remain. Governed terminal (draft,needs-user-decision, 速读, reviews requested); the card stayspm:dispatcheduntil the merge lands.Generated by Claude Code
os-justin commentedon Sep 9, 2026
Landing record — PR #1830 (
Fixesthis card; fold head #1823 with #1745 · #1620 · #1618 · #1818 · #1681) MERGED 2026-09-09T15:33:23Z through hotcrm's merge queue, squash commit06b9bb327bb0onorigin/main(read at 2026-09-09T15:50Z:AGENTS.md248 lines,CLAUDE.mdis the 6-line pointer). GOVERNED (AGENTS.md,CLAUDE.md,.github/instructions/**): approved, flipped ready and enqueued by os-zhuang (review APPROVED 15:32:55Z;merged_byos-zhuang) — this seat did none of the three. In-seat review ACCEPT 5603569687 on #1823; 速读 5603571614 on the PR. Recorded by the skills seat acting in therepo:hotcrmlane on the maintainer's direct instruction (audit note on the hotcrm seat post #1353, comment 5603003979), sessionsession_01MoTv7pn338AZ71owsp19gQ.Same stroke:
pm:dispatchedremoved and the assignee cleared on this auto-closed card (folded member;.github/instructions/automation.md§1 and.github/tasks/autonomous_feature_dev.mdwere corrected in the same PR).Generated by Claude Code