From 9b4c6952c55df3583985df20de6ce3cb5b0ab966 Mon Sep 17 00:00:00 2001 From: Steve Beaulac Date: Tue, 14 Jul 2026 11:52:20 -0400 Subject: [PATCH] docs(setup-skills): refine setup flow and issue tracker guidance --- common/engineering/setup-skills/SKILL.md | 57 +++++++++++------------- 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/common/engineering/setup-skills/SKILL.md b/common/engineering/setup-skills/SKILL.md index bc0dd6e..20f7339 100644 --- a/common/engineering/setup-skills/SKILL.md +++ b/common/engineering/setup-skills/SKILL.md @@ -21,51 +21,44 @@ This is a prompt-driven skill, not a deterministic script. Explore, present what Look at the current repo to understand its starting state. Read whatever exists; don't assume: -- find out what force is being used for the issue tracker (GitHub, GitLab, or Gitea) -- `AGENTS.md` and `CLAUDE.md` at the repo root — does either exist? Is there already an ## Agent skills section in either? -* `CONTEXT.md` and `CONTEXT-MAP.md` at the repo root. -- `docs/adr/` (check whether it's a wiki clone via `docs/adr/.git/config`) and any `src/*/docs/adr/` directories +- `git remote -v` and `.git/config` — is this a GitHub repo? Which one? +- `AGENTS.md` and `CLAUDE.md` at the repo root — does either exist? Is there already an `## Agent skills` section in either? +- `CONTEXT.md` and `CONTEXT-MAP.md` at the repo root +- `docs/adr/` and any `src/*/docs/adr/` directories - `docs/agents/` — does this skill's prior output already exist? +- Is the `triage` skill installed? (a `triage` skill folder alongside this one, or `triage` in your available skills.) This decides whether Section B runs at all. +- Monorepo signals — a `pnpm-workspace.yaml`, a `workspaces` field in `package.json`, or a populated `packages/*` with its own `src/`. Present only in a genuinely large multi-package repo; their absence means single-context, which is almost every repo. ### 2. Present findings and ask -Summarise what's present and what's missing. Then walk the user through the five decisions **one at a time** - present a section, get the user's answer, then move to the next. Don't dump all at once. +Summarise what's present and what's missing. Then take the sections in order — one section, one answer, then the next. -Assume the user does not know what these terms mean. Each section starts with a short explainer (what it is, why these skills need it, what changes if they pick differently). Then show the choices and the default. +Lead each section with the recommended answer so the user can accept it in a word. Give a one-line explainer only when the choice genuinely branches; skip the section entirely when exploration already settled it (Section B when `triage` isn't installed, Section C when there's no monorepo). Section A - Issue tracker: -> Explainer: The "issue tracker" is where issues live for this repo. Skills like `to-tickets`, `triage`, `to-spec`, and `qa` read from and write to it — they need to know whether to call `gh issue create`, write a markdown file under `.scratch/`, or follow some other workflow you describe. Pick the place you actually track work for this repo. +> Explainer: The "issue tracker" is where issues live for this repo. Skills like `to-tickets`, `triage`, `to-spec`, and `qa` read from and write to it — they need to know whether to call `gh issue create`, or follow some other workflow you describe. Pick the place you actually track work for this repo. Default posture: these skills were designed for GitHub. If a `git remote` points at GitHub, propose that. If a `git remote` points at GitLab (`gitlab.com` or a self-hosted host), propose GitLab. If a `git remote` point at a Gitea (a self-hosted host with a `gitea` in the url). Otherwise ask the user, offer: - **GitHub** — issues live in the repo's GitHub Issues (uses the `gh` CLI) - **GitLab** — issues live in the repo's GitLab Issues (uses the [`glab`](https://gitlab.com/gitlab-org/cli) CLI) -* Gitea — issues live in the repo's Gitea Issues (uses the `tea` CLI) +- Gitea — issues live in the repo's Gitea Issues (uses the `tea` CLI) - **Other** (Jira, Linear, etc.) — ask the user to describe the workflow in one paragraph; the skill will record it as freeform prose -If — and only if — the user picked **GitHub**, **GitLab** or **Gitea**, ask one follow-up: +Record the choice in `docs/agents/issue-tracker.md`. The GitHub and GitLab templates carry a "PRs as a request surface" flag, defaulted **off** — leave it off and don't raise it; a user who wants external PRs in the triage queue can flip the flag in the file later. -> Explainer: Open-source repos often receive feature requests as pull requests, not just issues — a PR is an issue with attached code. If you turn this on, `/triage` pulls *external* PRs into the same queue and runs them through the same labels and states as issues (collaborators' in-flight PRs are left alone). Leave it off if PRs aren't a request surface for you. +**Section B — Triage label vocabulary.** Skip this section entirely if the `triage` skill isn't installed (exploration told you) — an uninstalled skill needs no labels. -- **PRs as a request surface** — yes / no (default: no). Record the answer in `docs/agents/issue-tracker.md`. For local-markdown and other trackers, skip this question — there are no PRs. +If it is installed, ask exactly one question: -**Section B — Triage label vocabulary.** +> Do you want to keep the default triage labels? (recommended: **yes**) -> Explainer: When the `triage` skill processes an incoming issue, it moves it through a state machine — needs evaluation, waiting on reporter, ready for an AFK agent to pick up, ready for a human, or won't fix. To do that, it needs to apply labels (or the equivalent in your issue tracker) that match strings *you've actually configured*. If your repo already uses different label names (e.g. `bug:triage` instead of `needs-triage`), map them here so the skill applies the right ones instead of creating duplicates. +The defaults canonical roles are listed in `triage-labels.md` each label string equal to its name. On **yes**, write them as-is. Only if the user says no — usually because their tracker already uses other names (e.g. `bug:triage` for `needs-triage`) — collect the overrides so `triage` applies existing labels instead of creating duplicates. -Look at the `triage-labels.md` file for the labels and each roles they define. +**Section C — Domain docs.** Default to **single-context** — one `CONTEXT.md` + `docs/adr/` at the repo root. This fits almost every repo; write it without asking. -Default: each role's string equals its name. Ask the user if they want to override any. If their issue tracker has no existing labels, the defaults are fine. - -**Section C — Domain docs.** - -> Explainer: Some skills (`improve-codebase-architecture`, `diagnosing-bugs`, `tdd`) read a `CONTEXT.md` file to learn the project's domain language, and `adr` for past architectural decisions. They need to know whether the repo has one global context or multiple (e.g. a monorepo with separate frontend/backend contexts) so they look in the right place. - -Confirm the layout: - -- **Single-context** — one `CONTEXT.md` + `docs/adr` at the repo root. Most repos are this. -- **Multi-context** — `CONTEXT-MAP.md` at the root pointing to per-context `CONTEXT.md` files (typically a monorepo). +Offer **multi-context** — a root `CONTEXT-MAP.md` pointing to per-context `CONTEXT.md` files — only when exploration found monorepo signals. Then confirm which layout they want. **Section D — ADR wiki.** @@ -74,7 +67,7 @@ Confirm the layout: Derive the wiki URL from the forge detected in Section A: | Forge | Wiki URL pattern | -|---|---| +| --- | --- | | **GitHub** | `https://github.com//.wiki.git` | | **Gitea** | `https:////.wiki.git` | | **GitLab** | `https://gitlab.com//.wiki.git` | @@ -94,7 +87,7 @@ Record the answers in `docs/agents/adr-wiki.md`. Show the user a draft of: - The `## Agent skills` block to add to whichever of `CLAUDE.md` / `AGENTS.md` is being edited (see step 4 for selection rules) -- The contents of `docs/agents/issue-tracker.md`, `docs/agents/triage-labels.md`, `docs/agents/domain.md`, and `docs/agents/adr-wiki.md` +- The contents of `docs/agents/issue-tracker.md`, `docs/agents/domain.md`, `docs/agents/adr-wiki.md` and `docs/agents/triage-labels.md` (the last only when `triage` is installed) Let them edit before writing. @@ -117,7 +110,7 @@ The block: ### Issue tracker -[one-line summary of where issues are tracked, plus whether external PRs are a triage surface]. See `docs/agents/issue-tracker.md`. +[one-line summary of where issues are tracked]. See `docs/agents/issue-tracker.md`. ### Triage labels @@ -139,14 +132,16 @@ The block: Then write the docs files: -- [issue-tracker-github.md](./issue-tracker-github.md) — GitHub issue tracker -- [issue-tracker-gitlab.md](./issue-tracker-gitlab.md) — GitLab issue tracker -- [issue-tracker-gitea.md](./issue-tracker-gitea.md) — Gitea issue tracker +- [issue-tracker-github.md](./issue-tracker-github.md) — GitHub issue tracker, including wayfinding operations +- [issue-tracker-gitlab.md](./issue-tracker-gitlab.md) — GitLab issue tracker, including wayfinding operations +- [issue-tracker-gitea.md](./issue-tracker-gitea.md) — Gitea issue tracker, including wayfinding operations - [triage-labels.md](./triage-labels.md) — label mapping - [domain.md](./domain.md) — domain doc consumer rules + layout - [adr-wiki.md](./adr-wiki.md) — ADR wiki clone and push workflow -For "other" issue trackers, write `docs/agents/issue-tracker.md` from scratch using the user's description. +For GitHub, GitLab, and Gitea, the generated `docs/agents/issue-tracker.md` must include the full "Wayfinding operations" section from the selected template. Do not omit that section when composing the project file. + +For "other" issue trackers, write `docs/agents/issue-tracker.md` from scratch using the user's description, and include an equivalent wayfinding section only if the user described a workable wayfinding workflow for that tracker. ### 5. Done