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

138 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.