Skip to content

portability lint stage 1: cross-plugin bare-ref gate engine (child of #531) #612

Description

@kyle-sexton

Part of #531 — stage 1 of the control-tower planning agent's staged execution plan (see the plan comment on #531 for full context and the member-disposition map). Filed by the control tower per the #603 child-per-stage pattern. STOPGAP NOTE: plain child issue pending the #552 sub-issues convention — convert to a native sub-issue when #552 lands.

Scope

Repo-local orchestrator scripts/check-portability.sh + scripts/check-portability.test.sh, and a new portability-gate job in ci.yml added to ci-status.needs. Load-bearing work: the guard-detection engine (shared by every later stage) — a presence-gated "if installed" reference or one declared in dependencies passes; a bare unguarded cross-plugin / marketplace-internal reference fails. Mirrors check-silent-skips.sh's grep-tripwire-plus-annotated-exemption shape.

Stopgaps sanctioned by the plan (no operator lock needed for this stage): seed tokens inline in the script (external token-list format = OPERATOR DECISION #3 on #531, deferred); site-level escape hatch # portability-ok: <reason> tagged STOPGAP (final name = OPERATOR DECISION #2 on #531); repo-local script placement per the #593 precedent.

Acceptance criteria (lifted from PR #593 / silent-skip precedent)

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.priority: highSignificant impact, or blocks an imminent release; staff this cycle.status: readyTriaged, unblocked, and fully specified; eligible to pick up.

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions