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.
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, theoriginremote name,gh/gh apiforge-lock, Conventional-Commits branch grammar, andraw.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
ci-status.needs).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 existingkeywordsfield — 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.