Skip to content

Console Pin Gate never runs on a packages/** change — so the one instrument AGENTS.md names for "did this removal break the pinned sibling?" is structurally absent on exactly the diffs that rule governs #17673

Description

@baozhoutao

Filed by the domain:devx execution PM seat (#6023), found while reviewing PR #17671 (card #17328), which withdraws a lint rule and removes a published export (FORM_COLSPAN_ABSOLUTE from @objectstack/lint).

⚠️ priority: and domain: deliberately unset — triage's call.

The rule this is about

AGENTS.md → Post-Task Checklist, item 4:

A removal that breaks the pinned sibling checkout ships together with the sibling fix and the pin bump — or it does not ship. The Console Pin Gate job builds objectui at the pinned .objectui-sha against current main, so a removal or rename the pinned sibling still imports turns main red for every PR in the repo the moment it merges — "retire the surface" and "leave the sibling untouched" cannot both hold.

⇒ The rule names one instrument, by name, for answering it.

The readings

Measured on origin/main and on PR #17671's head 70e35f4beb:

reading value
Console Pin Gate conclusion on a PR removing a published export skipped
its condition (ci.yml:1820) if: ${{ !cancelled() && needs.filter.outputs.console != 'false' }}
paths in the console filter (ci.yml:105-112) .objectui-sha, scripts/build-console.sh, scripts/check-console-sha.mjs, scripts/check-console-injection.mjs, scripts/console-spec-probes.mjs, scripts/assert-console-spec-injection.mjs, .github/workflows/ci.yml
packages/** entries in that filter 0
Console Pin Gate in the required-context set no — dropped 2026-08-18 by the #9533 ruling (tombstone at scripts/check-required-contexts.mjs:288)

⇒ A diff that removes or renames a published export from packages/* — precisely the class item 4 governs — cannot trigger the gate at all. And a skipped check reads as SUCCESS in branch protection, so the PR goes green with the question never asked.

Why this is the sharper shape, not just a missing path

The two limbs are not equivalent and only one of them is the defect:

This is the repo's own recurring discipline applied to its own CI: a zero from a probe that never ran is NOT MEASURED, not a pass.

Prior art on the same blind-spot shape, opposite direction: scripts/pm/dispatch-gates.mjs:939-953 records that a single-file .objectui-sha diff derived zero gate families, and that check:objectui-pin-citations was deliberately left unfiltered for exactly that reason.

⛔ What is NOT measured

Whether the pinned objectui (53ded82bf7a49...) actually imports anything that PR #17671 removes is NOT MEASURED, and nothing in this card asserts that it does. This seat cannot read the objectui repository (session scope is objectstack-ai/objectstack). The point stands either way: the mechanism that is supposed to answer that question did not run. ⛔ Do not restate this card as "PR #17671 breaks the console".

Also not measured: whether any other published-export removal has already shipped through this gap. Someone should look, and a zero there needs a positive control like any other.

Acceptance (⛔ implementation not prescribed)

  1. A diff that removes or renames a published export from a packages/* source tree causes the pinned-sibling question to be asked — by this gate or by something else that answers it.
  2. Negative control, mandatory: an ordinary packages/** change that removes nothing must not start paying for this. The gate takes up to 45 minutes and builds a foreign repo; widening the filter to all of packages/** would run it on most PRs in the repo. State the measured cost of whatever trigger you choose.
  3. Positive control, mandatory: construct a diff that removes an export the pinned sibling genuinely imports, and show the new mechanism goes red on it. ⛔ A mechanism that has never been seen to fire proves nothing.
  4. ⛔ Do not achieve item 1 by adding Console Pin Gate to the required set — that reverses the finding: required-context registry pins Build Docs and Console Pin Gate, absent from the maintainer's 2026-08-18 six-item required-set reading #9533 ruling and is a maintainer decision, not this card's.
  5. ⛔ Do not achieve it by making the gate advisory-but-always-on without measuring item 2 first.

Links

domain:devx execution PM seat · session_012GKcPZbMoGq7WPzKLfRBTU · seat post #6023 · readings taken against origin/main and PR #17671 head 70e35f4beb

Activity

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

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions