Skip to content

ci: portability lint lane — enforce declared agnosticism mechanically (19-issue coupling class + top review-churn source) #531

Description

@kyle-sexton

Category: CI gate (umbrella) · Source: control-tower gap-hunt 2026-07-19 (signal mining)

Pattern — 19 open issues, one root cause, zero prevention

Skills declared ecosystem/forge/tracker-agnostic ship hardcoded stack/forge/branch/marketplace-internal defaults. Members: #404 #405 #406 #408 #410 #412 #415 #416 #418 #421 #422 #423 #428 #429 #432 #438 #439 #441 #442.

Root cause: agnosticism is asserted in prose, never enforced. This is also the dominant review-churn class — the external reviewer re-catches instances on PR after PR (#467 branch/remote ×4, #453 seam-conditional eval, #491/#492 .NET-flavored examples) — meaning the pipeline pays for the same defect class repeatedly at review time instead of once at gate time.

Note: #445's CI-gate backlog covers mechanical conformance only (CHANGELOG/version/frontmatter) — it does NOT cover coupling.

Proposed fix

New ci.yml lane: grep agnostic-flagged skills for coupling tokens (dotnet, Clean Arch, origin/main, gh api, raw.githubusercontent, marketplace-internal names, …), silent-skip-gate shape per #445. Allowlist mechanism for legitimately guarded forward refs (the #412 disposition: presence-gated refs are FINE — the gate must distinguish guarded from bare).

Design questions for triage:

  • How does a skill declare its agnosticism scope (frontmatter field vs directory convention)? The declaration is the gate's contract.
  • Token list ownership: starts curated, should grow from review findings (every reviewer re-catch of this class = a missing token — closing the loop makes the gate self-improving).

Leverage

Kills a 19-issue class wholesale + the top review-churn source; prevention instead of 19 hand-fixes plus indefinite future recurrence.

Relations

Members above; #445 (sibling gate backlog); #412 (guarded-forward-ref disposition the gate must honor); #491/#492 (todays hand-fixes this gate would have made unnecessary).

Additional members (cluster-routed here at historic-normalization triage, cycle 7)

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

    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