Skip to content

finding(pm-dispatch): the skill cites repo-scoped instruments without naming their cross-repo applicability — three cited scripts, three different behaviours, one of which hands a sibling repo a clearance it cannot judge #18454

Description

@hotlong

Filed unassigned by the domain:spec @ objectui execution seat, session session_01VCpmqvacV4BypY48QdoxcE, 2026-09-16T11:4xZ, on the maintainer's instruction 「如果技能有问题的话,也要立卡修改」. ⛔ Not claiming; grading and domain:* are the triage seat's.

The shape

SKILL.md and its references make several instruments named preconditions of an action, without saying whether the named instrument answers for the repository the seat is standing in. The scripts live in objectstack; several lanes work a sibling repo.

⚠️ This is a SKILL-text gap, ⛔ not a tooling defect — stated up front because this seat initially got it backwards. Each script's own behaviour is defensible and at least one documents the hazard in its header. What no line says is which of the three behaviours below a given citation implies.

Measured this shift, from one seat working objectstack-ai/objectui, three instruments, three DIFFERENT behaviours:

instrument cited by cross-repo behaviour how it fails
dispatch-gates.mjs 〈派发〉 「门禁清单取 dispatch-gates.mjs --commands 逐条跑」 REFUSES, loudly: "asked for objectstack-ai/objectui, but this checkout is objectstack-ai/objectstack" ✅ safe — it says so
check-expected-skips.mjs 〈复核〉 「入队资格 = 每个 check 为 success 或预期 skip(名单:check-expected-skips.mjs)」 ANSWERS, with the wrong rosterEXPECTED_SKIPS is objectstack's workflow names ⚠️ a clearance that does not apply
check-clause2-carriers.mjs 〈入队与落地〉 gate ② WORKS, via PM_SWEEP_REPO ✅ but only if the seat knows to set it

⇒ ⛔ no uniform rule; it must be judged per script — and nothing in the skill says that.

The measurement

On objectui PR #9604, the three skipped check-runs were Test (coverage), the coverage shard job, and dependabot. Against check-expected-skips.mjs's roster: 0 hits for all three, with a lit control (Build Core11 hits in the same file). ⇒ the roster is objectstack's and cannot judge this board.

The script already documents this in its own header, which is why this card is filed against the skill and not against the script:

The board is PM_SWEEP_REPO, else GITHUB_REPOSITORY, else the default … The roster, however, is THIS repository's workflows — a sibling repo needs its own roster, and pointing this file at another board judges […]

⇒ the author knew. The reader of SKILL.md, who is told only 「名单:check-expected-skips.mjs」, does not.

Why it matters more than a docs nit

The enqueue bar is 「每个 check 为 success 或预期 skip」. A seat on a sibling repo that runs the named instrument and reads its silence as the skip half of that bar has cleared a gate with an instrument that cannot see its board. That is a false green on a landing path, and it is invisible: unlike dispatch-gates.mjs, nothing refuses.

ℹ️ On PR #9604 this seat judged the three skips by hand from objectui's own ci.yml (both coverage jobs carry if: github.event_name == 'push'; dependabot is the dependabot-only gate) — so nothing landed on a false clearance. ⛔ But that was caught by noticing the roster looked foreign, not by any rule telling it to check.

⛔ Not prescribed here

Whether the repair is a line per citation naming the applicability, a single applicability table, a repo guard added to the scripts that currently lack one, or per-repo rosters, is the skills lane's call. ⛔ This card establishes the three measured behaviours and the citation gap, and chooses nothing.

⚠️ A fourth instance, already recorded elsewhere and ⛔ not re-filed: SKILL.md 〈候选与批次〉 makes the depth wait 「第 N 单派发前读 scripts/pm/os-verify-lock.sh --status」 a named precondition, and that script does not exist in objectui at all (objectstack#18426 §3).

Dedup words

cross-repo instrument applicability · check-expected-skips roster sibling repo · PM_SWEEP_REPO per-script · enqueue bar expected skip false clearance · dispatch-gates refuses cross-repo


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions