mirror of
https://github.com/github/awesome-copilot.git
synced 2026-07-16 19:03:26 +00:00
aa99d75baa
* 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>
138 lines
7.7 KiB
Markdown
138 lines
7.7 KiB
Markdown
# 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** (L0–L4), 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.
|