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
packages/lint/src/validate-dashboard-action-refs.ts 的 resolveActionTarget 对 actionType:'modal' 仍接受裸对象名与 verb_object(MODAL_VERB_RE),其 docblock 自述理由:「mirrors the objectui runtime dispatch(DashboardRenderer + DashboardView)so the lint flags exactly what would fail to resolve at runtime」—— 该镜像依据正是 PR objectui#4782 按维护者裁定(#6739-A)删除的代码。
Triage: lands in packages/lint/src/validate-dashboard-action-refs.ts + its three pinned tests + content/docs/deployment/validating-metadata.mdx:83; rationale: after objectui#4782 merges, os validate blesses a shape the runtime refuses by maintainer ruling objectstack#6739-A — declared≠enforced on the ruled contract ⇒ type Bug, pm:queue + domain:devx (anchoring rule: packages/lint is a devx package; the rule mirrors objectui runtime dispatch, not a spec schema).
Upstream verified this round: objectui#4782 is an open draft (created 06:07Z) — this card must not dispatch until it is MERGED (the corpus-then-delete sequencing in the card is #6739 discipline, not optional). The Blocked-by: line lives in this comment rather than the body (comment-level unlock scanning is standing instruction ⑥ on the triage seat post; body rewrite avoided per the #8813 HTML-escape trap — the body carries quoted code). On unlock, re-verify the three pinned test line numbers on the merged ref before dispatch.
Size/model suggestion: S–M / subagent / opus (ruling implementation; the ruling text is already on the card).
Triage: this comment comes from the triage seat Routine; not a claim.
Claim: session session_011RB4waLuNbdruCo6X9oobm, branch claude/issue-9013-modal-target-page-only. Starting implementation per the dispatch note (narrow resolveActionTarget for modal to page-only, update the three pinning tests, fix the docs example — all in one batch).
{
"issue": 9013,
"status": "done",
"branch": "claude/issue-9013-modal-target-page-only",
"pr": "https://github.com/objectstack-ai/objectstack/pull/9077",
"premise_still_valid": true,
"summary": "Narrowed resolveActionTarget per ruling #6739-A: an actionType:'modal' header target now resolves only against declared pages (stack.pages) — the old resolver accepted action names / bare objects / verb_object AND wrongly errored on page targets, so the fix corrects both directions. All three card items landed in one batch, plus two named additions: the stale rule-registration comment in authoring-rules.ts (same file surface, same defect class), and ADR-0087 semantic entry dashboard-header-modal-target-page-only in packages/spec — required because the changeset is declared BREAKING with a FROM→TO prescription, making 'registered' the only honest check:adr-0087-registration disposition. Changeset: @objectstack/lint + @objectstack/spec minor per the post-v17 lockstep convention (analytics-authorable-unknown-keys-refused precedent), justified in the PR body; no skip-changeset.",
"tests": "At final HEAD 25bd737b5 (union run after final commit, clean tree): lint 73 files / 2061 tests + typecheck green; spec 406 files / 10743 tests + typecheck + check:generated (13/13 artifacts) green. Reverse verification, direction predicted in advance: against origin/main resolver exactly 4 tests red (3 retired shapes accepted-before, 1 page target refused-before: 'Test Files 1 failed | 72 passed, Tests 4 failed | 2057 passed'), #3367 repro green in both regimes as predicted; restored at HEAD all green. dispatch-gates union over real changed paths all green: changeset-gate-self-tests, cross-package-test-inputs, doc-formula-expressions, docs-audit-scope, merge-driver, objectui-changeset, role-word, spec-parsed-alias, type-source-resolution, adr-0087-registration, changeset-no-major, dev-prereqs (after full packages-closure build), empty-changeset, nul-bytes, plus test-file convention gates query-options-erasure, type-check-coverage, type-check-debt (re-measure, no drift), engine-double-contract, where-matcher.",
"open_questions": [],
"out_of_scope_findings": []
}
No other mirror of the retired convention survives (measured: repo-wide sweep — remaining verb_object mentions are immutable CHANGELOG history; other create_opportunity hits are unrelated flow/param/translation fixtures), so nothing to file. Worktree removed; no background processes or monitors left.
Activity
os-project-manager commentedon Aug 16, 2026
Triage: lands in
packages/lint/src/validate-dashboard-action-refs.ts+ its three pinned tests +content/docs/deployment/validating-metadata.mdx:83; rationale: after objectui#4782 merges,os validateblesses a shape the runtime refuses by maintainer ruling objectstack#6739-A — declared≠enforced on the ruled contract ⇒ type Bug,pm:queue+domain:devx(anchoring rule:packages/lintis a devx package; the rule mirrors objectui runtime dispatch, not a spec schema).Blocked-by: objectstack-ai/objectui#4782
Upstream verified this round: objectui#4782 is an open draft (created 06:07Z) — this card must not dispatch until it is MERGED (the corpus-then-delete sequencing in the card is #6739 discipline, not optional). The
Blocked-by:line lives in this comment rather than the body (comment-level unlock scanning is standing instruction ⑥ on the triage seat post; body rewrite avoided per the #8813 HTML-escape trap — the body carries quoted code). On unlock, re-verify the three pinned test line numbers on the merged ref before dispatch.Size/model suggestion: S–M / subagent / opus (ruling implementation; the ruling text is already on the card).
Triage: this comment comes from the triage seat Routine; not a claim.
Generated by Claude Code
os-project-manager commentedon Aug 16, 2026
解锁:
pm:blocked摘除,回到pm:queue。本卡的排序条件是正文写的「sequencing:objectui#4782 合并之后」。判据实读:
merged_at=2026-08-16T06:28:14Z,merged: true,squash 头eb2a8dbb2。showcase_new_taskaction targets a PAGE, so the global_nav "New Task" command opens the home page in a dialog instead of creating a task #6739-A 删掉了DashboardView自带的第二份 modal target 解析,而resolveActionTarget的 docblock 自述的镜像依据正是那段代码。⇒ 方向反转已经在
objectui侧成为既成事实,本卡从「等上游」变成「补下游」。⛔ 但顺序纪律仍在:正文第 2、3 项(三条钉子测试、validating-metadata.mdx:83的create_opportunity示例)与第 1 项必须同批改——只收窄resolveActionTarget而留下祝福旧形态的测试与文档,会把一次方向修正拆成两次半成品。未认领,未派发;本席排进
domain:devx队列,等并发出位(现 5/5 满载)。⛔ 未打domain:*——该字段是分诊席的。Generated by Claude Code
os-project-manager commentedon Aug 16, 2026
PM dispatch:同文件锁已解除,派发。
pm:queue→pm:dispatched。Sessionsession_011RB4waLuNbdruCo6X9oobm,分支claude/issue-9013-modal-target-page-only,modelclaude-fable-5。锁解除的判据:#9033 已合并落地(
c0525b2b9),它重写的正是本卡第 3 项要改的content/docs/deployment/validating-metadata.mdx。两卡同文件,先前串行压着。validating-metadata.mdx:83,在origin/main上现在是第 95 行——#9033 在同一页上净增 31 行把它推下去了。行号给的是「去哪找」,不是「改哪行」。模型档位:
claude-fable-5,强制,不是尺寸判断。本卡改的是packages/lint对已发布授权面的接受集收窄——actionType:'modal'的字符串 target 从「裸对象名 +verb_object+ page」收到「只认 page」。座位贴常设承诺:凡改变契约接受/拒绝行为,一律 fable 档。三项必须同批,这一条写进了派发词:只收窄
resolveActionTarget而留下仍在祝福旧形态的三条钉子测试和那行标着 ✓ 的文档示例,等于把一次方向修正拆成两个互相矛盾的半成品——而「文档与实现互相矛盾」正是本卡这一族缺陷的成因。⛔ 不重开裁定。#6739-A 已裁,objectui#4782 已按裁定删掉了
DashboardView那份镜像实现(merged_at2026-08-16T06:28:14Z),本卡是补下游,不是再议。Generated by Claude Code
os-project-manager commentedon Aug 16, 2026
Claim: session
session_011RB4waLuNbdruCo6X9oobm, branchclaude/issue-9013-modal-target-page-only. Starting implementation per the dispatch note (narrowresolveActionTargetfor modal to page-only, update the three pinning tests, fix the docs example — all in one batch).Generated by Claude Code
Generated by Claude Code
os-project-manager commentedon Aug 16, 2026
{ "issue": 9013, "status": "done", "branch": "claude/issue-9013-modal-target-page-only", "pr": "https://github.com/objectstack-ai/objectstack/pull/9077", "premise_still_valid": true, "summary": "Narrowed resolveActionTarget per ruling #6739-A: an actionType:'modal' header target now resolves only against declared pages (stack.pages) — the old resolver accepted action names / bare objects / verb_object AND wrongly errored on page targets, so the fix corrects both directions. All three card items landed in one batch, plus two named additions: the stale rule-registration comment in authoring-rules.ts (same file surface, same defect class), and ADR-0087 semantic entry dashboard-header-modal-target-page-only in packages/spec — required because the changeset is declared BREAKING with a FROM→TO prescription, making 'registered' the only honest check:adr-0087-registration disposition. Changeset: @objectstack/lint + @objectstack/spec minor per the post-v17 lockstep convention (analytics-authorable-unknown-keys-refused precedent), justified in the PR body; no skip-changeset.", "tests": "At final HEAD 25bd737b5 (union run after final commit, clean tree): lint 73 files / 2061 tests + typecheck green; spec 406 files / 10743 tests + typecheck + check:generated (13/13 artifacts) green. Reverse verification, direction predicted in advance: against origin/main resolver exactly 4 tests red (3 retired shapes accepted-before, 1 page target refused-before: 'Test Files 1 failed | 72 passed, Tests 4 failed | 2057 passed'), #3367 repro green in both regimes as predicted; restored at HEAD all green. dispatch-gates union over real changed paths all green: changeset-gate-self-tests, cross-package-test-inputs, doc-formula-expressions, docs-audit-scope, merge-driver, objectui-changeset, role-word, spec-parsed-alias, type-source-resolution, adr-0087-registration, changeset-no-major, dev-prereqs (after full packages-closure build), empty-changeset, nul-bytes, plus test-file convention gates query-options-erasure, type-check-coverage, type-check-debt (re-measure, no drift), engine-double-contract, where-matcher.", "open_questions": [], "out_of_scope_findings": [] }No other mirror of the retired convention survives (measured: repo-wide sweep — remaining verb_object mentions are immutable CHANGELOG history; other create_opportunity hits are unrelated flow/param/translation fixtures), so nothing to file. Worktree removed; no background processes or monitors left.
Generated by Claude Code
Generated by Claude Code
fix(lint): a dashboard header modal target resolves against declared …