Files
awesome-copilot/skills/doc-and-modernize/references/copilot-instructions.template.md
T
samqbush aa99d75baa Add arch plugin (architecture + modernization skills) (#2253)
* Add arch plugin (architecture + modernization skills)

Add the `arch` plugin with two skills:
- `arch:document` — produce a single, cited architecture document for a
  locally-cloned repo, reading files on disk only.
- `arch:modernize` — generate a phased modernization plan, auto-running the
  document workflow first when no architecture doc exists.

Skill sources live in top-level skills/ and are referenced declaratively
from plugins/arch/.github/plugin/plugin.json, per the repo's plugin model.
Regenerated docs/README.plugins.md, docs/README.skills.md and marketplace.json.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Merge arch skills into single doc-and-modernize skill

Collapse the document and modernize skills into one standalone skill
(doc-and-modernize) with Documentation and Modernization modes, keeping
the plugin named arch. Modernization mode now runs the Documentation
workflow inline instead of invoking a separate arch:document skill,
fixing standalone-install cross-skill references. Reframe Documentation
mode as local-first (remote/API lookups are a flagged last resort)
rather than local-only. Regenerate docs and marketplace.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address PR review: list skill by bare ID in arch README

Use 'doc-and-modernize' (repo convention) instead of the namespaced
'arch:doc-and-modernize', noting it surfaces as arch:doc-and-modernize
when installed via the plugin.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address PR review: use non-HTML placeholder in instructions template

Change plain-text <PROJECT NAME> to [PROJECT NAME] in the header and
first paragraph so Markdown renderers don't parse it as an HTML tag and
drop it. The code-span `<N>` on the phase line is unaffected.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address PR review + fix codespell CI failure

- Fix codespell: pre-empts -> preempts in the instructions template
- Consistent terminology: replace 'research step/workflow' with
  'Documentation mode' in SKILL.md, README, and plugin.json description
- Fix run-on: add 'that' before 'Modernization mode must surface'
- Regenerate docs/marketplace for the updated plugin description

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address PR review feedback

- Instruct redacting credentials/tokens from git remote URLs before recording
- CI enforcement: ask user or mark [UNVERIFIED]; remote lookup is flagged last resort

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: samqbush <samqbush@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-10 10:30:32 +10:00

7.7 KiB
Raw Blame History

Copilot Instructions — [PROJECT NAME]

Generated by the doc-and-modernize skill (Modernization mode) as an editable starting point. Save this at .github/copilot-instructions.md (the path GitHub Copilot auto-loads). It encodes the canonical commands and the phase-gating rules an agent (or human) must follow while executing MODERNIZATION_PLAN.md. Tune the gates, commands, and branch rules to your project — the placeholders below are intentionally generic. Delete this note once customized.

[PROJECT NAME] is being modernized. The safety strategy is adaptive: the legacy stack may be partly or wholly dead, so we do not assume a fully-green legacy CI gate exists up front. Each component is on the highest achievable rung of the safety ladder (L0L4), has a named Testability Milestone (the phase where it first builds, runs, and passes ≥1 test on a supported toolchain), and is labeled pre-testability ("dark") or post-testability ("lit"). CI is stood up at a named CI Milestone (the first lit phase); enforcing it as a required check is a manual human step. See MODERNIZATION_PLAN.md for the phase roadmap, per-component testability/rung, the CI Milestone, and the residual-risk register; ARCHITECTURE.md for the audited current state. Work one phase at a time; do not advance until the current phase's exit criteria are demonstrably met.

Commands

Fill from the architecture doc's Commands & Verification Inventory. Use your ecosystem's real runner (npm/yarn/pnpm, make, just, cargo, go, poetry/tox/nox, gradle/mvn, …). Delete rows that don't apply.

Action Command
Install / restore deps <install command>
Build <build command>
Run / serve locally <run command>
Unit tests (all) <test command>
Single test file <single-file test command>
Single test by name <single-test-by-name command>
Lint <lint command>
Format / check <format command> / <format-check command>
Typecheck (if applicable) <typecheck command>
End-to-end / smoke (if applicable) <e2e command>
Contract / characterization tests <contract test command>

CI (<path to CI workflow>) runs <ordered gate list, e.g. lint → typecheck → test → e2e> on <runtime/version> for every push and PR. CI was stood up in phase <N> (the first lit phase). Enforcement is a separate manual step: until a human turns this workflow into a required status check / branch-protection rule (<platform: e.g. GitHub → Settings → Branches; GitLab protected branches>), CI runs on PRs but does not block merges.

Keep this table current. If a phase introduces a new long-term command, update this table (and confirm it with the user during planning) — don't leave the canonical command list stale.

Phase gating (regime-aware; applies to every phase)

A phase is not complete until its Verification & Exit Criteria in MODERNIZATION_PLAN.md pass. Those criteria must be:

  1. Objectively verifiable — runnable commands / captured evidence, not a subjective judgement.
  2. Actually executed and recorded — run them and note the result in the plan before starting the next phase.
  3. Gated — do not advance to phase N+1 until phase N's criteria are demonstrably met.

Which criteria are valid depends on the component's regime:

  • Post-testability ("lit") phases: exit on runnable commands / green CI on the phase's branch/PR — the authoritative signal. Shared baseline: <lint command> and <test command> must pass; if the change touched the client / transport / protocol / any public interface, the relevant end-to-end and contract/characterization tests must also stay green.
  • Pre-testability ("dark") phases: the component isn't alive yet, so a green CI test gate is a category error. Exit on the phase's achievable safety-ladder rung instead — captured seam/oracle snapshots, reversibility scaffolding proven present, a passed smoke checklist, recorded review. Do not block a dark phase on a test suite that can't run yet. A blessed downgrade to a lower rung (with residual risk named) is a valid exit, not a failure.

Never require a component's automated test gate before it crosses its own Testability Milestone. Report to the user any phase whose pass/fail is unknown rather than assuming it passed.

Decisions

  • When a phase is planned, all sub-decisions must be resolved and documented in the plan so implementation needs no further user input.
  • State "dropped" vs "deferred" explicitly for anything cut — don't leave it ambiguous.
  • Update MODERNIZATION_PLAN.md status markers ( complete / ⏭️ descoped / 🗑️ dropped) as each phase's exit criteria are met, and update the safety-ladder rung / residual-risk register as components cross their Testability Milestone.

Branching & PRs

Each phase is developed on its own branch — never commit phase work directly to the default branch (<default branch>). Create a new branch at the start of a phase (e.g. phase-N-<short-name>). Once the phase's exit criteria are met and recorded, push the branch and open a PR to the default branch. For post-testability ("lit") phases, let CI on the PR be the authoritative green signal before merging. For pre-testability ("dark") phases, the PR instead carries the achievable safety-ladder rung's evidence (captured contracts, smoke results, reversibility scaffolding) with residual risk named.

Merge to trunk before the next phase; never stack. Cut each phase branch from the trunk (<default branch>), and merge its PR to trunk before starting the next phase. Never base a phase branch or its PR on a sibling phase-N branch — stacked phase PRs get merged into each other, the trunk silently stalls several phases behind, and later phases are forced into a bind. Before starting a phase, verify the previous phase is merged and git log origin/<default branch>..HEAD is empty at branch creation. Controlled stacking is allowed only if genuinely unavoidable — and only with a reconciliation PR that lands the stack onto trunk plus an explicit residual-risk note.

Confirm the trunk name; retire legacy defaults. Pin the real trunk (<default branch>). If a second default-ish branch exists (e.g. a legacy master alongside main), mark it "history only — do not target" so phase work never lands on the wrong branch.

Keep the executable docs alive with the code. Any phase that changes topology — module/reactor membership, removed services, renamed branches, changed commands, new/removed endpoints — must update this file, the README, and any module/topology list in the same PR. A stale module list or a hard-coded old-branch link actively misleads the next agent/human.

Register transitional-insecure states. If a phase intentionally introduces a temporary weak state to stay runnable (permit-all shim, CSRF disabled, an open endpoint, a placeholder secret), record it with the phase that closes it and a by-design-until-phase-N note, and scope it as tightly as possible — this preempts recurring scanner/reviewer churn.

CI enforcement is a manual, human-only step. An agent can author and run the CI workflow, but making it a required status check / branch-protection rule so it actually blocks merges is a platform-UI/admin action (<GitHub → Settings → Branches; GitLab protected branches; etc.>) the agent cannot perform. Until you configure it, treat "green CI is authoritative" as a convention you enforce by hand. Do this once, at/after the CI Milestone phase.