Skip to content

portability lint stage 2: forge/branch/remote grammar class + plugin-scope declaration (child of #531) #713

Description

@kyle-sexton

This was generated by AI during triage (decomposition intake, rule 8f).

Part of #531.

Scope (from the control-tower plan comment on #531)

Extend the portability-lint engine's token set to the forge/branch/remote coupling class: origin/main, the origin remote name, gh / gh api forge-lock, Conventional-Commits branch grammar, and raw.githubusercontent / publisher-URL propagation. Add the declared-narrower-scope honor so a legitimately forge-locked plugin under a neutral name is exempt rather than falsely flagged.

Files: extend the Stage 1 orchestrator script + its test suite; new test fixtures per token; a short note in docs/PLUGIN-PHILOSOPHY.md.

Acceptance criteria

  • Same lane discipline as Stage 1 (self-test-first, fail-closed, never silent-skips, shellcheck-clean, wired into ci-status.needs).
  • New fixtures for each token class in scope.
  • A fixture proving a declared-scope plugin is exempt while an undeclared one is flagged.
  • The escape-hatch annotation token name finalized (currently a Stage-1 STOPGAP pending confirmation).

OPERATOR DECISION (unresolved — this stage is gated on it, not resolved here)

Plugin-scope declaration mechanism: how a plugin declares a narrower forge/stack lock so the gate exempts it. RECOMMENDED (from the #531 plan): read plugin.json's existing keywords field — no new frontmatter. Alternative: a dedicated declaration line or a per-plugin allowlist file. Also unresolved: the annotation token name (# portability-ok: <reason> STOPGAP vs. a confirmed/renamed final).

Prerequisite

Depends on the Stage 1 engine (portability lint stage 1: cross-plugin bare-ref gate engine, child of #531) — do not start until that lands.

STOPGAP NOTE: plain child issue pending the #552 native sub-issues convention — convert when #552 lands.

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

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.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