diff --git a/.cursor/rules/devops/agentic-automation.mdc b/.cursor/rules/devops/agentic-automation.mdc index c6f551c165..a50d5d3c58 100644 --- a/.cursor/rules/devops/agentic-automation.mdc +++ b/.cursor/rules/devops/agentic-automation.mdc @@ -21,9 +21,9 @@ Rules governing agent-driven automation in DevOps surfaces — Cursor skills, ho ## Read-only default - **Skills default to read-only.** Mutations to the local repo, the remote (GitHub state, releases, branch protection), or external systems (cloud, k8s, Slack, Asana) require explicit user opt-in per call. -- **The `pr-review` pattern is the reference**: print the exact command, wait for user confirmation, then execute. Never auto-execute. +- **The `qv-pr-review` pattern is the reference**: print the exact command, wait for user confirmation, then execute. Never auto-execute. - **No silent file mutations** to the user's working tree. If a skill writes outside `/tmp/` or its own `_lib/` cache, it announces what and why first. -- **No silent git mutations**: forbidden without explicit user instruction — `git switch`, `git checkout` (any ref/file), `git reset`, `git restore`, `git stash`, `git pull`, `git merge`, `git rebase`, `git cherry-pick`, `git clean`, `gh pr checkout`. (See `.cursor/skills/pr-review/SKILL.md` "Safety rules" section for the canonical wording.) +- **No silent git mutations**: forbidden without explicit user instruction — `git switch`, `git checkout` (any ref/file), `git reset`, `git restore`, `git stash`, `git pull`, `git merge`, `git rebase`, `git cherry-pick`, `git clean`, `gh pr checkout`. (See `.cursor/skills/qv-pr-review/SKILL.md` "Safety rules" section for the canonical wording.) ## Plan-then-apply for state changes @@ -44,7 +44,7 @@ Rules governing agent-driven automation in DevOps surfaces — Cursor skills, ho ## Idempotency - **Skills must be idempotent.** Re-running with identical inputs produces the same effect, or reports "already applied" without making changes. -- **Generated artifacts (NOTICE files, changelog entries, generated docs) sort deterministically** so re-runs produce byte-identical output and clean diffs (the `notice-generate` skill is the reference). +- **Generated artifacts (NOTICE files, changelog entries, generated docs) sort deterministically** so re-runs produce byte-identical output and clean diffs (the `qv-notice-generate` skill is the reference). - **Network-dependent skills** cache responses where reasonable (`/tmp/-.json`) and document staleness. ## Validation before success @@ -78,7 +78,7 @@ Rules governing agent-driven automation in DevOps surfaces — Cursor skills, ho ## Bounded resource use -- **Bound shell-call count per skill.** State an explicit budget in the skill's "Efficiency rules" section (the `pr-review` skill caps at ~5–8 calls; treat that as the ceiling unless justified). +- **Bound shell-call count per skill.** State an explicit budget in the skill's "Efficiency rules" section (the `qv-pr-review` skill caps at ~5–8 calls; treat that as the ceiling unless justified). - **Cache fetched data once per session** (`/tmp/-.json`). Never re-fetch the same PR/run/file in one session. - **Use dedicated tools, not shell.** `Read` instead of `cat`/`head`/`tail`, `Grep` instead of `grep`/`rg`, `Glob` instead of `find`, `Write`/`StrReplace` instead of `echo >` / heredoc. - **Prefer scripts in `_lib//`** over inline shell pipelines. Scripts are testable, deterministic, and share-able across skills. @@ -86,7 +86,7 @@ Rules governing agent-driven automation in DevOps surfaces — Cursor skills, ho ## Skill authoring conventions - **One skill = one capability.** Don't compose unrelated workflows in a single skill. -- **Naming**: kebab-case, prefix-grouped (`devops-*`, `sdk-*`, `addon-*`, `pr-*`). +- **Naming**: kebab-case, all custom repo skills use the `qv-` prefix, then pod or domain segment (`qv-devops-*`, `qv-sdk-*`, `qv-addon-*`, `qv-pr-*`). - **`SKILL.md` body ≤ 500 lines.** Push detail to `references/*.md` and link one level deep. - **Slash-command discoverability**: include `/` in the description. - **Auto-invoke vs explicit**: `disable-model-invocation: true` for any skill that mutates state, posts publicly, or runs slow / expensive tooling. Auto-invoke only for read-only, fast, contextually obvious helpers. diff --git a/.cursor/rules/devops/main.mdc b/.cursor/rules/devops/main.mdc index 33b7ef8991..7c418de3ec 100644 --- a/.cursor/rules/devops/main.mdc +++ b/.cursor/rules/devops/main.mdc @@ -29,7 +29,7 @@ Owns CI/CD pipelines (GitHub Actions workflows + composite actions), repo-wide a | `.cursor/rules/devops/secrets-and-credentials.mdc` | `.github/**`, `scripts/**` | Anything that can read, derive, or transmit a secret | | `.cursor/rules/devops/agentic-automation.mdc` | `.cursor/skills/**`, `.cursor/rules/**`, `.cursor/hooks/**`, `.github/workflows/**`, `.github/scripts/**`, `scripts/**` | Authoring skills, hooks, MCP integrations, or any AI-driven DevOps workflow | -Commit message and PR title format guidance lives in the [`devops-pr-create`](../../skills/devops-pr-create/SKILL.md) skill — invoke it explicitly rather than autoloading a rule for it (skill-only on purpose, to keep the format spec out of the always-on context window). +Commit message and PR title format guidance lives in the [`qv-devops-pr-create`](../../skills/qv-devops-pr-create/SKILL.md) skill — invoke it explicitly rather than autoloading a rule for it (skill-only on purpose, to keep the format spec out of the always-on context window). ## Quick rules — surface-level reminders @@ -82,4 +82,4 @@ These are the bar; the deep-dive lives in the topic files above. ## Commit messages and PR titles -The full format spec, allowed prefixes, allowed tags, validation regex, and quality guidelines live in the [`devops-pr-create`](../../skills/devops-pr-create/SKILL.md) skill. Invoke `/devops-pr-create` rather than relying on this rule — kept out of the auto-load context window on purpose. +The full format spec, allowed prefixes, allowed tags, validation regex, and quality guidelines live in the [`qv-devops-pr-create`](../../skills/qv-devops-pr-create/SKILL.md) skill. Invoke `/qv-devops-pr-create` rather than relying on this rule — kept out of the auto-load context window on purpose. diff --git a/.cursor/rules/registry-server/main.mdc b/.cursor/rules/registry-server/main.mdc index 0a493fd614..2b34214188 100644 --- a/.cursor/rules/registry-server/main.mdc +++ b/.cursor/rules/registry-server/main.mdc @@ -73,4 +73,4 @@ Use `lib/logger.js`. Avoid logging sensitive information (keys, tokens). ### Autobase + HyperDB Multi-Writer Patterns -When working with Autobase, HyperDB, multi-writer patterns, or peer discovery, use the `registry-autobase-patterns` skill. +When working with Autobase, HyperDB, multi-writer patterns, or peer discovery, use the `qv-registry-autobase-patterns` skill. diff --git a/.cursor/rules/sdk/docs-freshness.mdc b/.cursor/rules/sdk/docs-freshness.mdc index 808ecb67db..6fdeab8ab3 100644 --- a/.cursor/rules/sdk/docs-freshness.mdc +++ b/.cursor/rules/sdk/docs-freshness.mdc @@ -37,7 +37,7 @@ This rule monitors two packages that have dedicated knowledge-base documentation | Source area | Documentation | |---|---| -| `lib/registry-service.js`, `scripts/build-db-spec.js`, `shared/spec/` | `.cursor/skills/registry-autobase-patterns/` | +| `lib/registry-service.js`, `scripts/build-db-spec.js`, `shared/spec/` | `.cursor/skills/qv-registry-autobase-patterns/` | ## What to do diff --git a/.cursor/rules/sdk/sdk-pod-packages.mdc b/.cursor/rules/sdk/sdk-pod-packages.mdc index aa96a41df2..558cd44a72 100644 --- a/.cursor/rules/sdk/sdk-pod-packages.mdc +++ b/.cursor/rules/sdk/sdk-pod-packages.mdc @@ -30,8 +30,10 @@ globs: ## Skill Naming Convention -Skills for SDK pod should use the `sdk-` prefix: +Skills for SDK pod should use the `qv-sdk-` prefix: -- `sdk-pr-create` -- `sdk-changelog` -- `sdk-release` +- `qv-sdk-pr-create` +- `qv-sdk-changelog` +- `qv-sdk-backmerge` +- `qv-sdk-e2e-create` +- `qv-sdk-pr-status` diff --git a/.cursor/rules/sdk/skill-authoring-guidelines.mdc b/.cursor/rules/sdk/skill-authoring-guidelines.mdc index 73206320dc..bc1be83175 100644 --- a/.cursor/rules/sdk/skill-authoring-guidelines.mdc +++ b/.cursor/rules/sdk/skill-authoring-guidelines.mdc @@ -2,7 +2,7 @@ description: Guidelines for creating SDK pod Cursor skills alwaysApply: false globs: - - .cursor/skills/sdk-** + - .cursor/skills/qv-sdk-** --- # Skill Authoring Guidelines @@ -25,10 +25,12 @@ Guidelines for creating effective Cursor skills, based on the [Agent Skills spec ## Naming Convention -**Use pod prefix for skill directories:** +**Use `qv-` prefix plus pod segment for skill directories:** -- SDK pod skills: `sdk-pr-create`, `sdk-changelog`, `sdk-release` -- Other pods: `infra-deploy`, `platform-migration` +- SDK pod skills: `qv-sdk-pr-create`, `qv-sdk-changelog`, `qv-sdk-backmerge` +- DevOps pod: `qv-devops-pr-create`, `qv-devops-pr-review` +- Addon pod: `qv-addon-changelog`, `qv-addon-pr-create` +- Cross-pod PR workflow: `qv-pr-review`, `qv-pr-test`, `qv-pr-mine` **If pod is unclear, ask the user.** @@ -42,7 +44,7 @@ Guidelines for creating effective Cursor skills, based on the [Agent Skills spec **Prefer gerund form or action-oriented names:** -- Good: `processing-pdfs`, `analyzing-data`, `sdk-pr-create` +- Good: `processing-pdfs`, `analyzing-data`, `qv-sdk-pr-create` - Avoid: `helper`, `utils`, `tools` ## Required Frontmatter @@ -328,7 +330,7 @@ Choose one term and use it throughout: ### Vague Skill Names -- Good: `sdk-pr-create`, `processing-pdfs` +- Good: `qv-sdk-pr-create`, `processing-pdfs` - Bad: `helper`, `utils`, `stuff` ## Degrees of Freedom diff --git a/.cursor/skills/_lib/pr-skills/README.md b/.cursor/skills/_lib/pr-skills/README.md index eb5dd4e552..9e58a6cb46 100644 --- a/.cursor/skills/_lib/pr-skills/README.md +++ b/.cursor/skills/_lib/pr-skills/README.md @@ -6,9 +6,9 @@ Cross-cutting daily workflow helpers live next door in This directory does not contain a `SKILL.md`; it is not a Cursor skill itself. The user-facing skills live under `.cursor/skills/`: -- `pr-review/` — generic single-PR review. Pod-agnostic. -- `pr-test/` — generic single-PR local validation. Pod-agnostic. -- `pr-mine/` — cross-pod "my open PRs" dashboard. Discovers every pod under `.github/teams/` and routes per-PR ping logic to the owning pod. +- `qv-pr-review/` — generic single-PR review. Pod-agnostic. +- `qv-pr-test/` — generic single-PR local validation. Pod-agnostic. +- `qv-pr-mine/` — cross-pod "my open PRs" dashboard. Discovers every pod under `.github/teams/` and routes per-PR ping logic to the owning pod. - `-pr-status/` — per-pod team dashboard, thin wrapper invoking the shared script with `--pod --mode team`. ## Files @@ -17,11 +17,11 @@ This directory does not contain a `SKILL.md`; it is not a Cursor skill itself. T - [`pr-activity.mjs`](pr-activity.mjs) — shared PR data collector/classifier used by `pr-status.mjs` and daily workflow tooling. It fetches open PRs, resolves pod ownership, computes review state, stale/re-review/ready groups, and merge-conflict flags. - [`team.mjs`](team.mjs) — team-metadata loader. `loadTeam(pod)` reads a single pod; `discoverPods()` enumerates every `.github/teams/.json`; `findPodForFiles(files, pods)` returns the pod that owns a PR's touched files (first match wins). - [`slack.mjs`](slack.mjs) — Slack-handle map loader. File lives at `~/.config/qvac-pr-skills/slack.json`, schema `{ map, pendingReview }`. Bootstraps missing entries from `gh api users/` and parks newly seeded logins on `pendingReview` so the skill workflow can confirm them with the user. -- [`worktree.mjs`](worktree.mjs) — worktree manager for `/pr-review` and `/pr-test`. `resolvePR` (gh-resolved baseRefName, fail-fast — does NOT default to main), `fetchPRRefs` (single fetch for both PR head and base ref), `ensureWorktreeSynced` (sync mode, in-place `reset --hard`; preserves untracked artifacts at the same SHA and runs `clean -fdx` only after SHA drift), `lockPR` (per-PR flock), `computePatch` (3-dot diff to `/tmp/pr-.patch`), `cleanupCache` (LRU keep 3). -- [`worktree-prepare.mjs`](worktree-prepare.mjs) — CLI entry for `/pr-review`'s worktree mode. Success: prints `WORKTREE_PATH`, `HEAD_SHA`, `PATCH_PATH`, `BASE_REF` on stdout. Any failure: prints `WORKTREE_FALLBACK=` on stderr and exits 0 so the agent transparently falls back to API-only mode. -- [`pr-test-discover.mjs`](pr-test-discover.mjs) — discovery CLI for `/pr-test`. Orchestrates PR metadata/patch loading, package discovery, and JSON manifest output. It never uses `git diff`/`git status` against the worktree for classification. +- [`worktree.mjs`](worktree.mjs) — worktree manager for `/qv-pr-review` and `/qv-pr-test`. `resolvePR` (gh-resolved baseRefName, fail-fast — does NOT default to main), `fetchPRRefs` (single fetch for both PR head and base ref), `ensureWorktreeSynced` (sync mode, in-place `reset --hard`; preserves untracked artifacts at the same SHA and runs `clean -fdx` only after SHA drift), `lockPR` (per-PR flock), `computePatch` (3-dot diff to `/tmp/pr-.patch`), `cleanupCache` (LRU keep 3). +- [`worktree-prepare.mjs`](worktree-prepare.mjs) — CLI entry for `/qv-pr-review`'s worktree mode. Success: prints `WORKTREE_PATH`, `HEAD_SHA`, `PATCH_PATH`, `BASE_REF` on stdout. Any failure: prints `WORKTREE_FALLBACK=` on stderr and exits 0 so the agent transparently falls back to API-only mode. +- [`pr-test-discover.mjs`](pr-test-discover.mjs) — discovery CLI for `/qv-pr-test`. Orchestrates PR metadata/patch loading, package discovery, and JSON manifest output. It never uses `git diff`/`git status` against the worktree for classification. - [`pr-test-generic.mjs`](pr-test-generic.mjs) — package-agnostic discovery helpers: PR JSON/patch loading, patch-status parsing, package path detection, package.json script discovery, generic package classification, and non-SDK recommendation logic. -- [`pr-test-sdk.mjs`](pr-test-sdk.mjs) — SDK-specific `/pr-test` heuristics: SDK pod package detection, SDK example command generation, related SDK examples, related `tests-qvac` filters, and SDK e2e setup recommendations. +- [`pr-test-sdk.mjs`](pr-test-sdk.mjs) — SDK-specific `/qv-pr-test` heuristics: SDK pod package detection, SDK example command generation, related SDK examples, related `tests-qvac` filters, and SDK e2e setup recommendations. ## Modes @@ -29,7 +29,7 @@ This directory does not contain a `SKILL.md`; it is not a Cursor skill itself. T |---|---|---|---| | `team` | required (`--pod`) | All open PRs touching the pod's `ownedPaths` that still need reviews. Three sections: needs-your-re-review, stale (>3d), needs-review. PRs with `mergeable: CONFLICTING` are flagged with `⚠️ MERGE CONFLICTS!`. Pass `--authors pod` to additionally scope the dashboard to PRs authored by pod-roster members; non-roster authors touching pod paths are surfaced in a separate "Excluded" section. | `-pr-status` | | `review` | required (`--pod`) | The current user's personal review queue: PRs needing their first review, plus PRs where their review was dismissed. | (currently unused; available for a future skill) | -| `my` | optional (`--pod`); cross-pod by default | The current user's own open PRs grouped by merge readiness. Per-PR pod resolution drives ping logic. Emits copy-paste Slack ping messages for missing reviewers. | `pr-mine` | +| `my` | optional (`--pod`); cross-pod by default | The current user's own open PRs grouped by merge readiness. Per-PR pod resolution drives ping logic. Emits copy-paste Slack ping messages for missing reviewers. | `qv-pr-mine` | ## CLI @@ -75,11 +75,11 @@ from the local `upstream` remote. `ownedPaths` are prefix-matched against changed-file paths to decide whether a PR is "owned" by this pod. Use trailing slashes. -2. Create the per-pod dashboard skill by copying `.cursor/skills/sdk-pr-status/` to `.cursor/skills/-pr-status/`. Inside the copy, update the SKILL.md frontmatter (`name:`, `description:`) and the script invocation in the `## Usage` block to swap `--pod sdk` for `--pod `. No other changes required. +2. Create the per-pod dashboard skill by copying `.cursor/skills/qv-sdk-pr-status/` to `.cursor/skills/qv--pr-status/`. Inside the copy, update the SKILL.md frontmatter (`name:`, `description:`) and the script invocation in the `## Usage` block to swap `--pod sdk` for `--pod `. No other changes required. -3. `pr-mine`, `pr-review`, and `pr-test` are NOT pod-specific and do not need duplication. They live at `.cursor/skills/pr-mine/`, `.cursor/skills/pr-review/`, and `.cursor/skills/pr-test/` and discover the new pod automatically. +3. `qv-pr-mine`, `qv-pr-review`, and `qv-pr-test` are NOT pod-specific and do not need duplication. They live at `.cursor/skills/qv-pr-mine/`, `.cursor/skills/qv-pr-review/`, and `.cursor/skills/qv-pr-test/` and discover the new pod automatically. -4. The first time anyone on the new pod runs `/pr-mine`, the shared script auto-fills `~/.config/qvac-pr-skills/slack.json` with `gh api users/` names for the newly added logins and emits `SLACK_VALIDATION_REQUIRED ` on stderr, prompting the skill workflow to drive a confirm-or-correct flow with the user. +4. The first time anyone on the new pod runs `/qv-pr-mine`, the shared script auto-fills `~/.config/qvac-pr-skills/slack.json` with `gh api users/` names for the newly added logins and emits `SLACK_VALIDATION_REQUIRED ` on stderr, prompting the skill workflow to drive a confirm-or-correct flow with the user. ## Slack-handle map (per-user, never committed) @@ -91,7 +91,7 @@ from the local `upstream` remote. "pendingReview": [""] } ``` -- The script appends to `pendingReview` whenever it auto-fills a new entry. The `pr-mine` SKILL workflow consumes the pending list, presents each entry to the user via `AskQuestion`, applies corrections, and clears `pendingReview` once validation is done. +- The script appends to `pendingReview` whenever it auto-fills a new entry. The `qv-pr-mine` SKILL workflow consumes the pending list, presents each entry to the user via `AskQuestion`, applies corrections, and clears `pendingReview` once validation is done. - Edit the file directly at any time — the script never overwrites entries already in `map`, only adds new ones. ## Worktree cache (per-user, never committed) @@ -100,7 +100,7 @@ from the local `upstream` remote. - One subdirectory per PR num: `pr-/` (sync mode — single path per PR, kept in sync via `fetch + reset --hard` when SHA advances). - One lock file per PR num: `pr-.lock`. Held by `worktree-prepare.mjs` for the duration of fetch + sync; released before printing the path. Same-PR concurrent invocations serialize on this lock. - LRU eviction: only the 3 most recently touched worktrees are retained. Older entries are removed via `git worktree remove --force` + `rm -rf`. -- Used by `/pr-review` (read-only source inspection) and `/pr-test` (package manager/build/test commands inside the isolated cache). +- Used by `/qv-pr-review` (read-only source inspection) and `/qv-pr-test` (package manager/build/test commands inside the isolated cache). - Dirty handling: - Same SHA: `reset --hard HEAD` resets tracked-file edits and preserves untracked build/test artifacts (`node_modules`, `dist`, native `build/`, logs). - SHA drift: `reset --hard refs/pr//head` followed by `clean -fdx` so artifacts from the old PR head are not reused against the new commit. diff --git a/.cursor/skills/_lib/pr-skills/pr-test-discover.mjs b/.cursor/skills/_lib/pr-skills/pr-test-discover.mjs index 61320c0581..730567728e 100644 --- a/.cursor/skills/_lib/pr-skills/pr-test-discover.mjs +++ b/.cursor/skills/_lib/pr-skills/pr-test-discover.mjs @@ -1,6 +1,6 @@ #!/usr/bin/env node // -// Discovery helper for /pr-test. +// Discovery helper for /qv-pr-test. // // Usage: // node pr-test-discover.mjs --worktree \ @@ -9,7 +9,7 @@ // The file list and per-file status come from committed PR state only: // `/tmp/pr-.json` (`gh pr view --json files`) plus the patch emitted by // worktree-prepare.mjs. This helper never uses git diff/status against the -// worktree, which may contain untracked build artifacts from /pr-test. +// worktree, which may contain untracked build artifacts from /qv-pr-test. import { readFileSync } from "node:fs"; import { dirname, join, relative } from "node:path"; diff --git a/.cursor/skills/_lib/pr-skills/team.mjs b/.cursor/skills/_lib/pr-skills/team.mjs index 860b31a795..2c91ebd0c6 100644 --- a/.cursor/skills/_lib/pr-skills/team.mjs +++ b/.cursor/skills/_lib/pr-skills/team.mjs @@ -64,7 +64,7 @@ export function loadTeam(pod) { } // Discover every pod registered under .github/teams/. Used by cross-pod -// modes (e.g. /pr-mine) where the user's PRs may span multiple pods. +// modes (e.g. /qv-pr-mine) where the user's PRs may span multiple pods. // Returns an array of team objects (same shape as loadTeam(pod)). export function discoverPods() { const dir = teamsDir(); diff --git a/.cursor/skills/_lib/pr-skills/worktree-prepare.mjs b/.cursor/skills/_lib/pr-skills/worktree-prepare.mjs index df3df6b25d..d0f5893acf 100644 --- a/.cursor/skills/_lib/pr-skills/worktree-prepare.mjs +++ b/.cursor/skills/_lib/pr-skills/worktree-prepare.mjs @@ -1,6 +1,6 @@ #!/usr/bin/env node // -// CLI entry for the default-on worktree mode of /pr-review. +// CLI entry for the default-on worktree mode of /qv-pr-review. // // Usage: // node worktree-prepare.mjs diff --git a/.cursor/skills/_lib/pr-skills/worktree.mjs b/.cursor/skills/_lib/pr-skills/worktree.mjs index 59555432fa..4d06d6febc 100644 --- a/.cursor/skills/_lib/pr-skills/worktree.mjs +++ b/.cursor/skills/_lib/pr-skills/worktree.mjs @@ -1,4 +1,4 @@ -// Worktree helpers for the /pr-review skill (sync mode). +// Worktree helpers for the /qv-pr-review skill (sync mode). // // One worktree per PR num at ~/.cache/qvac-pr-review/pr-, kept in sync // with refs/pr//head via fetch + reset --hard. Concurrency safety via @@ -8,7 +8,7 @@ // reset --hard`, and `git -C clean -fdx` calls in this // module are intentionally scoped to the cache directory and to fork-PR-head // refs. The agent itself never runs reset / switch / checkout / stash etc. — -// see pr-review/SKILL.md "Safety rules". +// see qv-pr-review/SKILL.md "Safety rules". import { execFileSync } from "node:child_process"; import { @@ -192,7 +192,7 @@ export function lockPR(num) { if (Date.now() - start > LOCK_TIMEOUT_MS) { throw new Error( `Could not acquire lock ${lockPath} within ${LOCK_TIMEOUT_MS}ms ` + - `(another /pr-review may be running on this PR)`, + `(another /qv-pr-review may be running on this PR)`, ); } sleepMs(LOCK_RETRY_MS); @@ -364,7 +364,7 @@ export function ensureWorktreeSynced({ num, sha }) { if (headNow !== sha) { try { git(["-C", path, "reset", "--hard", PR_REF(num)]); - // Drop build/test artifacts from the old PR head so the next /pr-test + // Drop build/test artifacts from the old PR head so the next /qv-pr-test // setup starts from a clean artifact state for the new commit. git(["-C", path, "clean", "-fdx"]); } catch { diff --git a/.cursor/skills/addon-changelog/SKILL.md b/.cursor/skills/qv-addon-changelog/SKILL.md similarity index 99% rename from .cursor/skills/addon-changelog/SKILL.md rename to .cursor/skills/qv-addon-changelog/SKILL.md index fea3c886d1..746596c0d4 100644 --- a/.cursor/skills/addon-changelog/SKILL.md +++ b/.cursor/skills/qv-addon-changelog/SKILL.md @@ -1,5 +1,5 @@ --- -name: addon-changelog +name: qv-addon-changelog description: Generate changelog entries for a target add-on package. Use when preparing a new release. --- @@ -13,7 +13,7 @@ Generate changelog entries for add-on packages following the add-on release work - Preparing a release for an add-on package - User asks to generate release notes or changelog for an add-on -- User invokes `/addon-changelog` +- User invokes `/qv-addon-changelog` ## Workflow diff --git a/.cursor/skills/addon-pr-create/SKILL.md b/.cursor/skills/qv-addon-pr-create/SKILL.md similarity index 99% rename from .cursor/skills/addon-pr-create/SKILL.md rename to .cursor/skills/qv-addon-pr-create/SKILL.md index 1d7ec51886..0c10cdf8c1 100644 --- a/.cursor/skills/addon-pr-create/SKILL.md +++ b/.cursor/skills/qv-addon-pr-create/SKILL.md @@ -1,5 +1,5 @@ --- -name: addon-pr-create +name: qv-addon-pr-create description: Generate PR descriptions for addon packages (non-SDK inference addons, decoder, OCR). Use when creating a PR description or user asks to "prepare PR description" for an addon package. --- diff --git a/.cursor/skills/addon-release-notes/SKILL.md b/.cursor/skills/qv-addon-release-notes/SKILL.md similarity index 99% rename from .cursor/skills/addon-release-notes/SKILL.md rename to .cursor/skills/qv-addon-release-notes/SKILL.md index 29783701c4..c5fca96b7e 100644 --- a/.cursor/skills/addon-release-notes/SKILL.md +++ b/.cursor/skills/qv-addon-release-notes/SKILL.md @@ -1,5 +1,5 @@ --- -name: addon-release-notes +name: qv-addon-release-notes description: Generate release notes for addon packages (non-SDK inference addons, decoder, OCR). Use when preparing release notes or user asks to "generate release notes" for an addon package. --- diff --git a/.cursor/skills/asana-sync/SKILL.md b/.cursor/skills/qv-asana-sync/SKILL.md similarity index 99% rename from .cursor/skills/asana-sync/SKILL.md rename to .cursor/skills/qv-asana-sync/SKILL.md index cb015073e9..0685fbecae 100644 --- a/.cursor/skills/asana-sync/SKILL.md +++ b/.cursor/skills/qv-asana-sync/SKILL.md @@ -1,5 +1,5 @@ --- -name: asana-sync +name: qv-asana-sync description: Look up and update Asana tasks using local developer-workflow config and direct Asana REST calls. Use when the user asks to sync an Asana task, move task status, add a PR link to Asana, or validate Asana configuration. disable-model-invocation: true --- diff --git a/.cursor/skills/daily-work-update/SKILL.md b/.cursor/skills/qv-daily-work-update/SKILL.md similarity index 99% rename from .cursor/skills/daily-work-update/SKILL.md rename to .cursor/skills/qv-daily-work-update/SKILL.md index ac3795a49b..8baf509eaa 100644 --- a/.cursor/skills/daily-work-update/SKILL.md +++ b/.cursor/skills/qv-daily-work-update/SKILL.md @@ -1,5 +1,5 @@ --- -name: daily-work-update +name: qv-daily-work-update description: Generate a concise end-of-day work update from local diary, GitHub activity, PR queue state, and optional Asana config. Use when the user asks for daily update, EOD update, standup, or what they did today. disable-model-invocation: true --- diff --git a/.cursor/skills/dev-diary-setup/SKILL.md b/.cursor/skills/qv-dev-diary-setup/SKILL.md similarity index 99% rename from .cursor/skills/dev-diary-setup/SKILL.md rename to .cursor/skills/qv-dev-diary-setup/SKILL.md index 8ebd8a3b46..1f11c8b7ef 100644 --- a/.cursor/skills/dev-diary-setup/SKILL.md +++ b/.cursor/skills/qv-dev-diary-setup/SKILL.md @@ -1,5 +1,5 @@ --- -name: dev-diary-setup +name: qv-dev-diary-setup description: Set up the opt-in local dev diary for any developer. Use when the user asks to enable diary logging, initialize diary capture, run diary --init, or configure local daily work updates. disable-model-invocation: true --- diff --git a/.cursor/skills/dev-diary/SKILL.md b/.cursor/skills/qv-dev-diary/SKILL.md similarity index 95% rename from .cursor/skills/dev-diary/SKILL.md rename to .cursor/skills/qv-dev-diary/SKILL.md index a0d13e27f1..68d4eac6d4 100644 --- a/.cursor/skills/dev-diary/SKILL.md +++ b/.cursor/skills/qv-dev-diary/SKILL.md @@ -1,12 +1,12 @@ --- -name: dev-diary +name: qv-dev-diary description: Read, inspect, and add local dev diary entries after diary setup. Use when the user asks to view today's diary, edit diary notes, add work to the diary, or check what has been logged. disable-model-invocation: true --- # Dev Diary -Operate on the local diary after setup. This is not the setup skill; use `dev-diary-setup` for initialization. +Operate on the local diary after setup. This is not the setup skill; use `qv-dev-diary-setup` for initialization. Diary files live under `~/.config/qvac-pr-skills/diary/` and are never committed. diff --git a/.cursor/skills/devops-daily-update/SKILL.md b/.cursor/skills/qv-devops-daily-update/SKILL.md similarity index 95% rename from .cursor/skills/devops-daily-update/SKILL.md rename to .cursor/skills/qv-devops-daily-update/SKILL.md index 05b308d9da..9abce87730 100644 --- a/.cursor/skills/devops-daily-update/SKILL.md +++ b/.cursor/skills/qv-devops-daily-update/SKILL.md @@ -1,6 +1,6 @@ --- -name: devops-daily-update -description: Compose a daily standup in the team's Slack format (🔨 Done today / 📅 Planned for tomorrow / 🚧 Blockers / risks), aggregating recent PRs, reviews, and CI from tetherto/qvac. Use when asked for a daily update, standup, EOD, or invoking /devops-daily-update. +name: qv-devops-daily-update +description: Compose a daily standup in the team's Slack format (🔨 Done today / 📅 Planned for tomorrow / 🚧 Blockers / risks), aggregating recent PRs, reviews, and CI from tetherto/qvac. Use when asked for a daily update, standup, EOD, or invoking /qv-devops-daily-update. disable-model-invocation: true --- @@ -15,7 +15,7 @@ The skill is read-only with respect to GitHub state and the local working tree. **Use when:** - User asks for a "daily update", "standup", "EOD", or "what did I do yesterday?" -- User invokes `/devops-daily-update` +- User invokes `/qv-devops-daily-update` - User asks to draft a status post for the team channel ## Prerequisites @@ -94,13 +94,13 @@ gh search prs \ > /tmp/devops-daily-update-reviews-owed.json ``` -If `pr-status.mjs` stderr contains `SLACK_VALIDATION_REQUIRED`, follow the validation gate in [`pr-mine`'s workflow](../pr-mine/SKILL.md) (step 2). Do not present the daily update until the gate clears. +If `pr-status.mjs` stderr contains `SLACK_VALIDATION_REQUIRED`, follow the validation gate in [`pr-mine`'s workflow](../qv-pr-mine/SKILL.md) (step 2). Do not present the daily update until the gate clears. Output routing: - Open PRs I authored that received commits since `$SINCE` (i.e., I pushed work on them today) → `🔨 Done today` with the action `addressed comments on the PR` (when the recent commits follow a review event) or `pushed updates on ` (otherwise). - Open PRs I authored without recent commits → `📅 Planned for tomorrow` with the action `continue / wrap up `. -- Reviews owed (`--review-requested "@me"`) → `📅 Planned for tomorrow` as `review # by <author>`. **Cap surfaced reviews at 5** (sorted by `updatedAt` desc — most recent first); if the queue is longer, append a single line `(+N more review requests in queue — run /devops-pr-status for the full list)`. A standup with 30 review-bullets is unreadable. +- Reviews owed (`--review-requested "@me"`) → `📅 Planned for tomorrow` as `review #<num> — <title> by <author>`. **Cap surfaced reviews at 5** (sorted by `updatedAt` desc — most recent first); if the queue is longer, append a single line `(+N more review requests in queue — run /qv-devops-pr-status for the full list)`. A standup with 30 review-bullets is unreadable. - Open PRs I authored with `mergeable: CONFLICTING` → `🚧 Blockers / risks` as `conflicts on #<num> — needs rebase`. - Open PRs I authored with stale review requests (no review activity in >3 days) → `🚧 Blockers / risks` as `stale review on #<num> — pinged <reviewer> on <date>`. @@ -237,6 +237,6 @@ Before printing the output, verify: - DevOps main rule: [.cursor/rules/devops/main.mdc](.cursor/rules/devops/main.mdc) - Agentic automation rule: [.cursor/rules/devops/agentic-automation.mdc](.cursor/rules/devops/agentic-automation.mdc) (read-only default; bounded shell calls; idempotency) -- Cross-pod my-PRs skill: [.cursor/skills/pr-mine/SKILL.md](.cursor/skills/pr-mine/SKILL.md) -- DevOps PR status skill: [.cursor/skills/devops-pr-status/SKILL.md](.cursor/skills/devops-pr-status/SKILL.md) +- Cross-pod my-PRs skill: [.cursor/skills/qv-pr-mine/SKILL.md](.cursor/skills/qv-pr-mine/SKILL.md) +- DevOps PR status skill: [.cursor/skills/qv-devops-pr-status/SKILL.md](.cursor/skills/qv-devops-pr-status/SKILL.md) - Pod metadata: [.github/teams/devops.json](.github/teams/devops.json) diff --git a/.cursor/skills/devops-pr-create/SKILL.md b/.cursor/skills/qv-devops-pr-create/SKILL.md similarity index 98% rename from .cursor/skills/devops-pr-create/SKILL.md rename to .cursor/skills/qv-devops-pr-create/SKILL.md index 5dc25807c4..21783fbc75 100644 --- a/.cursor/skills/devops-pr-create/SKILL.md +++ b/.cursor/skills/qv-devops-pr-create/SKILL.md @@ -1,6 +1,6 @@ --- -name: devops-pr-create -description: Generate PR titles and descriptions for DevOps surfaces (CI/CD, composite actions, automation scripts, IaC) following the devops.md PR template and commit/PR format rule. Use when creating a DevOps PR or invoking /devops-pr-create. +name: qv-devops-pr-create +description: Generate PR titles and descriptions for DevOps surfaces (CI/CD, composite actions, automation scripts, IaC) following the devops.md PR template and commit/PR format rule. Use when creating a DevOps PR or invoking /qv-devops-pr-create. disable-model-invocation: true --- @@ -16,7 +16,7 @@ Generate PR titles and descriptions for DevOps changes (CI/CD workflows, composi - Creating a PR for any DevOps change - User asks to generate a DevOps PR description -- User invokes `/devops-pr-create` +- User invokes `/qv-devops-pr-create` If the touched paths are dominated by a non-DevOps pod (e.g., `packages/sdk/**`), use that pod's `*-pr-create` skill instead. If a PR mixes DevOps + package changes, prefer the package's pod skill and call out the cross-pod touches in the PR body. diff --git a/.cursor/skills/devops-pr-review/SKILL.md b/.cursor/skills/qv-devops-pr-review/SKILL.md similarity index 77% rename from .cursor/skills/devops-pr-review/SKILL.md rename to .cursor/skills/qv-devops-pr-review/SKILL.md index e7864ecce7..965e0e3b3b 100644 --- a/.cursor/skills/devops-pr-review/SKILL.md +++ b/.cursor/skills/qv-devops-pr-review/SKILL.md @@ -1,24 +1,24 @@ --- -name: devops-pr-review -description: PR review for DevOps changes — runs the generic /pr-review flow then layers a structured GitHub Actions security audit (action pinning, permissions, OIDC, hardened runner, secrets handling). Use when reviewing a PR that touches DevOps paths or invoking /devops-pr-review. +name: qv-devops-pr-review +description: PR review for DevOps changes — runs the generic /qv-pr-review flow then layers a structured GitHub Actions security audit (action pinning, permissions, OIDC, hardened runner, secrets handling). Use when reviewing a PR that touches DevOps paths or invoking /qv-devops-pr-review. disable-model-invocation: true --- # DevOps PR Review -A DevOps-flavored PR review on top of the generic [`/pr-review`](../pr-review/SKILL.md) flow. Adds a deterministic GitHub Actions security audit pass driven by [`.cursor/rules/devops/github-actions.mdc`](../../rules/devops/github-actions.mdc) and [`.cursor/rules/devops/secrets-and-credentials.mdc`](../../rules/devops/secrets-and-credentials.mdc), so DevOps reviewers always see the same checklist of high-risk patterns regardless of the prose style of the diff. +A DevOps-flavored PR review on top of the generic [`/qv-pr-review`](../qv-pr-review/SKILL.md) flow. Adds a deterministic GitHub Actions security audit pass driven by [`.cursor/rules/devops/github-actions.mdc`](../../rules/devops/github-actions.mdc) and [`.cursor/rules/devops/secrets-and-credentials.mdc`](../../rules/devops/secrets-and-credentials.mdc), so DevOps reviewers always see the same checklist of high-risk patterns regardless of the prose style of the diff. -The skill is **a wrapper, not a fork** — the bulk of the review (gitflow, CI, title/body, generic correctness, security) is done by `/pr-review`. This skill layers DevOps-specific findings into the same pending review payload. +The skill is **a wrapper, not a fork** — the bulk of the review (gitflow, CI, title/body, generic correctness, security) is done by `/qv-pr-review`. This skill layers DevOps-specific findings into the same pending review payload. ## When to use this skill **Use when:** - User asks to review a PR whose changes are dominated by DevOps-owned paths (`.github/workflows/`, `.github/actions/`, `.github/scripts/`, `scripts/`, IaC under `terraform/`, `ansible/`, `k8s/`, `Dockerfile*`, `.github/CODEOWNERS`, `.github/dependabot.yml`) -- User invokes `/devops-pr-review` with a PR URL -- Triggered as a follow-up from `/devops-pr-status` after the user picks a PR +- User invokes `/qv-devops-pr-review` with a PR URL +- Triggered as a follow-up from `/qv-devops-pr-status` after the user picks a PR -If the PR's touched paths are dominated by a different pod, fall back to `/pr-review`. The generic flow already auto-loads the relevant pod's rules. +If the PR's touched paths are dominated by a different pod, fall back to `/qv-pr-review`. The generic flow already auto-loads the relevant pod's rules. ## Inputs @@ -29,26 +29,26 @@ If the URL is missing, ask for it. Nothing else to ask up-front. ## Safety rules -Inherits all safety rules from [`/pr-review`](../pr-review/SKILL.md#safety-rules--do-not-touch-the-users-local-repo) verbatim: +Inherits all safety rules from [`/qv-pr-review`](../qv-pr-review/SKILL.md#safety-rules--do-not-touch-the-users-local-repo) verbatim: - **Read-only with respect to the user's local working tree.** No `git switch`, `git checkout`, `git reset`, `git restore`, `git stash`, `git pull`, `git merge`, `git rebase`, `git cherry-pick`, `git clean`, `gh pr checkout`, or any write inside the user's working tree. - All file inspection happens in the worktree cache at `~/.cache/qvac-pr-review/pr-<num>/` (managed by `worktree-prepare.mjs`) or via `gh api .../contents/<path>?ref=<sha>` to `/tmp/`. ## Efficiency rules -Inherits the `~5–8 shell-call` budget from `/pr-review`. The DevOps audit pass adds at most **3 additional reads** (Read/Grep/Glob, not shell) per touched workflow/action file. Cache: reuse `/tmp/pr-<num>.json`, `/tmp/pr-<num>.patch`, and the worktree path from the underlying `/pr-review` run. +Inherits the `~5–8 shell-call` budget from `/qv-pr-review`. The DevOps audit pass adds at most **3 additional reads** (Read/Grep/Glob, not shell) per touched workflow/action file. Cache: reuse `/tmp/pr-<num>.json`, `/tmp/pr-<num>.patch`, and the worktree path from the underlying `/qv-pr-review` run. ## Workflow -### 1. Run the generic /pr-review flow up to step 7a (overview) +### 1. Run the generic /qv-pr-review flow up to step 7a (overview) -Read [`.cursor/skills/pr-review/SKILL.md`](../pr-review/SKILL.md) and follow steps 0a → 7a inclusive: +Read [`.cursor/skills/qv-pr-review/SKILL.md`](../qv-pr-review/SKILL.md) and follow steps 0a → 7a inclusive: - 0a. Prepare worktree (`worktree-prepare.mjs`) - 1. Parse PR URL - 2. Fetch PR metadata - 3. Gitflow validation -- 4. Read applicable cursor rules — the touched DevOps paths will auto-load `.cursor/rules/devops/main.mdc`, `.cursor/rules/devops/github-actions.mdc`, and `.cursor/rules/devops/secrets-and-credentials.mdc`. (The PR-format spec is intentionally NOT a rule — it lives in the [`devops-pr-create`](../devops-pr-create/SKILL.md) skill, invoked explicitly.) +- 4. Read applicable cursor rules — the touched DevOps paths will auto-load `.cursor/rules/devops/main.mdc`, `.cursor/rules/devops/github-actions.mdc`, and `.cursor/rules/devops/secrets-and-credentials.mdc`. (The PR-format spec is intentionally NOT a rule — it lives in the [`devops-pr-create`](../qv-devops-pr-create/SKILL.md) skill, invoked explicitly.) - 5. Validate PR title + body against the format spec inlined below (DevOps allowed prefixes: `infra`/`feat`/`fix`/`chore`/`doc`/`test`; tags: `[bc]`/`[notask]`/`[skiplog]`; title regex: `^([A-Z]+-\d+ )?(infra|feat|fix|chore|doc|test)(\[(bc|notask|skiplog)\])?: \S.+$`) - 6. Review dimensions - 7a. Print risk overview in chat — but **do not yet run step 7b** (the inline-comment selection prompt). The DevOps audit pass in step 2 below contributes additional findings. @@ -75,13 +75,13 @@ For every `.github/workflows/*.yml` and `.github/actions/**/action.yml` in the p | A14 | When `actions/cache` is used, cache writes are gated on non-fork triggers (`push` / `workflow_dispatch` / `merge_group`) — not blanket on `pull_request`. | github-actions.mdc § Caching | Medium | | A15 | Workflow filename matches the existing repo conventions (`on-pr-*.yml`, `on-merge-*.yml`, `on-pr-close-*.yml`, `release-*.yml`, `create-github-release-*.yml`, `prebuilds-*.yml`, `pr-test-*.yml`, `pr-validation-*.yml`, `pr-checks-*.yml`, `integration-*-*.yml`, `reusable-*.yml`, `trigger-reusable-*.yml`). New file with a divergent name → finding. Pre-existing files keep their name unless the PR renames them. | github-actions.mdc § File layout and naming | Low | -For each finding, capture: file, line, the offending excerpt (3-8 lines), the tier, and a one-line "why" pulled from the rule. Write findings into the same chat overview structure that `/pr-review` step 7a uses, under a new sub-heading `### GHA security audit`. +For each finding, capture: file, line, the offending excerpt (3-8 lines), the tier, and a one-line "why" pulled from the rule. Write findings into the same chat overview structure that `/qv-pr-review` step 7a uses, under a new sub-heading `### GHA security audit`. ### 3. Re-print the consolidated chat overview -After both passes, re-print the full overview (gitflow / CI / generic-high / generic-medium / GHA-audit / lows / verified) so the user sees one ranked list. Findings retain the deep-link + excerpt rules from `/pr-review` step 7a. +After both passes, re-print the full overview (gitflow / CI / generic-high / generic-medium / GHA-audit / lows / verified) so the user sees one ranked list. Findings retain the deep-link + excerpt rules from `/qv-pr-review` step 7a. -### 4. Run /pr-review steps 7b → 12 +### 4. Run /qv-pr-review steps 7b → 12 Continue with the generic flow: @@ -104,7 +104,7 @@ This makes audit coverage observable without reading the inline payload. ## Inline comment style for GHA-audit findings -Inherit the comment style from `/pr-review`. Add one DevOps-specific convention: every GHA-audit finding's body MUST cite the rule it traces back to, e.g.: +Inherit the comment style from `/qv-pr-review`. Add one DevOps-specific convention: every GHA-audit finding's body MUST cite the rule it traces back to, e.g.: ```markdown Untrusted input piped directly into shell. Per `.cursor/rules/devops/github-actions.mdc § Triggers and untrusted input`, @@ -124,7 +124,7 @@ The cite makes the audit finding auditable: the reviewer can verify the rule sti Before posting the pending review, verify: -- [ ] Underlying `/pr-review` workflow ran through step 7a successfully (worktree prepared, gitflow checked, CI checked, rules loaded, title/body validated) +- [ ] Underlying `/qv-pr-review` workflow ran through step 7a successfully (worktree prepared, gitflow checked, CI checked, rules loaded, title/body validated) - [ ] GHA-audit pass ran on every changed `.github/workflows/*.yml` and `.github/actions/**/action.yml` - [ ] Each GHA-audit finding has: file path, post-change line, 3-8 line excerpt at PR head SHA, deep link, tier, rule cite - [ ] User-confirmed selection from step 7b matches the assembled payload exactly (count + IDs) @@ -132,9 +132,9 @@ Before posting the pending review, verify: ## References -- Generic PR review skill (parent flow): [.cursor/skills/pr-review/SKILL.md](../pr-review/SKILL.md) +- Generic PR review skill (parent flow): [.cursor/skills/qv-pr-review/SKILL.md](../qv-pr-review/SKILL.md) - DevOps GHA conventions (audit source): [.cursor/rules/devops/github-actions.mdc](../../rules/devops/github-actions.mdc) - DevOps secrets handling (audit source): [.cursor/rules/devops/secrets-and-credentials.mdc](../../rules/devops/secrets-and-credentials.mdc) -- DevOps PR-create skill (canonical home for commit / PR-title format): [`devops-pr-create`](../devops-pr-create/SKILL.md) +- DevOps PR-create skill (canonical home for commit / PR-title format): [`devops-pr-create`](../qv-devops-pr-create/SKILL.md) - Pod metadata: [.github/teams/devops.json](../../../.github/teams/devops.json) - Worktree manager: [.cursor/skills/_lib/pr-skills/worktree-prepare.mjs](../_lib/pr-skills/worktree-prepare.mjs) diff --git a/.cursor/skills/devops-pr-status/SKILL.md b/.cursor/skills/qv-devops-pr-status/SKILL.md similarity index 92% rename from .cursor/skills/devops-pr-status/SKILL.md rename to .cursor/skills/qv-devops-pr-status/SKILL.md index 5a50164138..e766e0a097 100644 --- a/.cursor/skills/devops-pr-status/SKILL.md +++ b/.cursor/skills/qv-devops-pr-status/SKILL.md @@ -1,6 +1,6 @@ --- -name: devops-pr-status -description: Team-wide PR dashboard for the DevOps pod, scoped to PRs authored by pod-roster members. Shows open PRs touching DevOps-owned paths and authored by DevOps leads/members, grouped into needs-your-re-review / stale (>3d) / needs-review, with merge-conflict warnings and a separate Excluded section for non-roster authors. Use when checking DevOps pod PR status, asking about stale PRs, or invoking /devops-pr-status. +name: qv-devops-pr-status +description: Team-wide PR dashboard for the DevOps pod, scoped to PRs authored by pod-roster members. Shows open PRs touching DevOps-owned paths and authored by DevOps leads/members, grouped into needs-your-re-review / stale (>3d) / needs-review, with merge-conflict warnings and a separate Excluded section for non-roster authors. Use when checking DevOps pod PR status, asking about stale PRs, or invoking /qv-devops-pr-status. disable-model-invocation: true --- @@ -15,7 +15,7 @@ Thin wrapper over the shared pr-skills library, pinned to the DevOps pod and sco - User asks about open DevOps pod PRs, review status, or what needs attention - User asks specifically about stale PRs touching DevOps paths - User wants to know which DevOps pod PRs to review next -- User invokes `/devops-pr-status` +- User invokes `/qv-devops-pr-status` ## Prerequisites @@ -49,7 +49,7 @@ For the personal review queue scoped to DevOps PRs, use `--mode review` (without wl-copy < /tmp/devops-pr-status-${DATE}.txt # Wayland ``` -5. After showing results, offer: "Want me to review any of these? Provide the PR URL and I'll run `/devops-pr-review` (or `/pr-review` for the generic flow)." +5. After showing results, offer: "Want me to review any of these? Provide the PR URL and I'll run `/qv-devops-pr-review` (or `/qv-pr-review` for the generic flow)." ## Chat presentation format @@ -94,5 +94,5 @@ Bullet format for the Excluded section (compact — these are not the pod's revi - Pod metadata: [.github/teams/devops.json](.github/teams/devops.json) - Shared library README: [.cursor/skills/_lib/pr-skills/README.md](.cursor/skills/_lib/pr-skills/README.md) -- Generic PR review skill: [.cursor/skills/pr-review/SKILL.md](.cursor/skills/pr-review/SKILL.md) -- DevOps-flavored PR review skill: [.cursor/skills/devops-pr-review/SKILL.md](.cursor/skills/devops-pr-review/SKILL.md) +- Generic PR review skill: [.cursor/skills/qv-pr-review/SKILL.md](.cursor/skills/qv-pr-review/SKILL.md) +- DevOps-flavored PR review skill: [.cursor/skills/qv-devops-pr-review/SKILL.md](.cursor/skills/qv-devops-pr-review/SKILL.md) diff --git a/.cursor/skills/devops-why-my-pr-not/SKILL.md b/.cursor/skills/qv-devops-why-my-pr-not/SKILL.md similarity index 95% rename from .cursor/skills/devops-why-my-pr-not/SKILL.md rename to .cursor/skills/qv-devops-why-my-pr-not/SKILL.md index 8ffcf0521b..5051c049a0 100644 --- a/.cursor/skills/devops-why-my-pr-not/SKILL.md +++ b/.cursor/skills/qv-devops-why-my-pr-not/SKILL.md @@ -1,6 +1,6 @@ --- -name: devops-why-my-pr-not -description: Diagnose why CI checks are not running on a PR and/or why a PR cannot be merged, by cross-referencing the live PR state (via gh CLI) against the repo's labels, teams, CODEOWNERS, label-gate trust model, and tier-based approval rules. Read-only by default — proposes labels / re-review comments / unblock actions in plan-then-apply mode. Use when a developer asks "why aren't my checks running", "why can't I merge", "what's blocking my PR", or invokes /devops-why-my-pr-not with a PR URL. +name: qv-devops-why-my-pr-not +description: Diagnose why CI checks are not running on a PR and/or why a PR cannot be merged, by cross-referencing the live PR state (via gh CLI) against the repo's labels, teams, CODEOWNERS, label-gate trust model, and tier-based approval rules. Read-only by default — proposes labels / re-review comments / unblock actions in plan-then-apply mode. Use when a developer asks "why aren't my checks running", "why can't I merge", "what's blocking my PR", or invokes /qv-devops-why-my-pr-not with a PR URL. disable-model-invocation: true --- @@ -29,13 +29,13 @@ The skill cross-references the live PR state (via `gh`) against the canonical re - A developer asks "why aren't my checks running on PR #N?" - A developer asks "why can't I merge PR #N?" / "what's blocking my PR?" - A reviewer asks "what does this PR still need before I can merge it?" -- User invokes `/devops-why-my-pr-not <PR URL>` +- User invokes `/qv-devops-why-my-pr-not <PR URL>` **Do NOT use when:** -- Reviewing a PR for correctness — use [`/devops-pr-review`](../devops-pr-review/SKILL.md) or [`/pr-review`](../pr-review/SKILL.md). -- Generating a PR description — use [`/devops-pr-create`](../devops-pr-create/SKILL.md) or [`/sdk-pr-create`](../sdk-pr-create/SKILL.md). -- Listing all open PRs in the pod — use [`/devops-pr-status`](../devops-pr-status/SKILL.md) or [`/sdk-pr-status`](../sdk-pr-status/SKILL.md). +- Reviewing a PR for correctness — use [`/qv-devops-pr-review`](../qv-devops-pr-review/SKILL.md) or [`/qv-pr-review`](../qv-pr-review/SKILL.md). +- Generating a PR description — use [`/qv-devops-pr-create`](../qv-devops-pr-create/SKILL.md) or [`/qv-sdk-pr-create`](../qv-sdk-pr-create/SKILL.md). +- Listing all open PRs in the pod — use [`/qv-devops-pr-status`](../qv-devops-pr-status/SKILL.md) or [`/qv-sdk-pr-status`](../qv-sdk-pr-status/SKILL.md). ## Inputs @@ -265,5 +265,5 @@ Before printing the final report, verify: - DevOps pod metadata: [`.github/teams/devops.json`](../../../.github/teams/devops.json) - SDK pod metadata: [`.github/teams/sdk.json`](../../../.github/teams/sdk.json) - Agentic automation rules (mutation policy): [`.cursor/rules/devops/agentic-automation.mdc`](../../rules/devops/agentic-automation.mdc) -- Generic PR review skill: [`.cursor/skills/pr-review/SKILL.md`](../pr-review/SKILL.md) -- DevOps PR review skill: [`.cursor/skills/devops-pr-review/SKILL.md`](../devops-pr-review/SKILL.md) +- Generic PR review skill: [`.cursor/skills/qv-pr-review/SKILL.md`](../qv-pr-review/SKILL.md) +- DevOps PR review skill: [`.cursor/skills/qv-devops-pr-review/SKILL.md`](../qv-devops-pr-review/SKILL.md) diff --git a/.cursor/skills/holepunch-dev/SKILL.md b/.cursor/skills/qv-holepunch-dev/SKILL.md similarity index 98% rename from .cursor/skills/holepunch-dev/SKILL.md rename to .cursor/skills/qv-holepunch-dev/SKILL.md index 7f8eff300c..4f94ae4b0e 100644 --- a/.cursor/skills/holepunch-dev/SKILL.md +++ b/.cursor/skills/qv-holepunch-dev/SKILL.md @@ -1,5 +1,5 @@ --- -name: holepunch-dev +name: qv-holepunch-dev description: Guides discovery and development with Holepunch ecosystem libraries. Use when working with P2P stack (Hypercore, Hyperswarm, Autobase, Hyperdb, Corestore), Bare runtime (bare-* modules like bare-fs), or Pear app framework (pear-* modules). Teaches on-the-fly API discovery via docs.pears.com and gh CLI. --- @@ -171,6 +171,6 @@ swarm.join(drive.discoveryKey) ## Scope Boundaries - Static content in this skill is limited to **non-fetchable knowledge**: the QVAC-oriented P2P taxonomy (extends docs.pears.com with libraries QVAC uses), repo-name anomalies, composition patterns across multiple libraries, and verified production gotchas. Anything discoverable via docs.pears.com or a single `gh api` README fetch does not belong here. -- Project-specific gotchas belong in a project-scoped skill (e.g. `.cursor/skills/registry-autobase-patterns/`) or `.cursor/rules/<project>/`, not in this skill. +- Project-specific gotchas belong in a project-scoped skill (e.g. `.cursor/skills/qv-registry-autobase-patterns/`) or `.cursor/rules/<project>/`, not in this skill. - This skill covers ecosystem-level knowledge and discovery strategy only. - If a section starts looking like a paraphrase of an upstream README or the docs.pears.com index, delete it. diff --git a/.cursor/skills/notice-generate/SKILL.md b/.cursor/skills/qv-notice-generate/SKILL.md similarity index 84% rename from .cursor/skills/notice-generate/SKILL.md rename to .cursor/skills/qv-notice-generate/SKILL.md index 3220217591..44b06a994a 100644 --- a/.cursor/skills/notice-generate/SKILL.md +++ b/.cursor/skills/qv-notice-generate/SKILL.md @@ -1,5 +1,5 @@ --- -name: notice-generate +name: qv-notice-generate description: Generate NOTICE files with third-party attributions for all packages in the monorepo. --- @@ -13,7 +13,7 @@ Generate deterministic, sorted NOTICE files for individual packages or all packa - Generating or updating NOTICE files for any package - Adding new third-party dependencies that need attribution - Preparing a release that requires up-to-date NOTICE files -- User invokes `/notice-generate` +- User invokes `/qv-notice-generate` ## Prerequisites @@ -40,10 +40,10 @@ System requirements for Python scanning: ```bash source .env -node .cursor/skills/notice-generate/scripts/generate-notice.js <package-dir-name> +node .cursor/skills/qv-notice-generate/scripts/generate-notice.js <package-dir-name> ``` -Example: `node .cursor/skills/notice-generate/scripts/generate-notice.js sdk` +Example: `node .cursor/skills/qv-notice-generate/scripts/generate-notice.js sdk` For registry sub-packages use the full path: - `registry-server/client` @@ -53,15 +53,15 @@ For registry sub-packages use the full path: ```bash source .env -node .cursor/skills/notice-generate/scripts/generate-notice.js --all +node .cursor/skills/qv-notice-generate/scripts/generate-notice.js --all ``` ### Dry-run (no file writes, safe for testing) ```bash source .env -node .cursor/skills/notice-generate/scripts/generate-notice.js --all --dry-run -node .cursor/skills/notice-generate/scripts/generate-notice.js sdk --dry-run +node .cursor/skills/qv-notice-generate/scripts/generate-notice.js --all --dry-run +node .cursor/skills/qv-notice-generate/scripts/generate-notice.js sdk --dry-run ``` In dry-run mode: @@ -73,8 +73,8 @@ In dry-run mode: ```bash source .env -node .cursor/skills/notice-generate/scripts/check-forbidden-licenses.js --all --dry-run -node .cursor/skills/notice-generate/scripts/check-forbidden-licenses.js --all +node .cursor/skills/qv-notice-generate/scripts/check-forbidden-licenses.js --all --dry-run +node .cursor/skills/qv-notice-generate/scripts/check-forbidden-licenses.js --all ``` Uses an **allowlist** approach. The `ALLOWED_LICENSES` array in `config.js` controls which licenses pass: @@ -85,12 +85,12 @@ License strings from all sources (npm, PyPI, GitHub, models) are normalized to c If violations are found, writes `FORBIDDEN_LICENSES.txt` to the repo root and exits with code 1. -**Important:** The agent should NOT edit `ALLOWED_LICENSES` directly. Present the scan results to the user and let them decide which licenses to allow. The allowlist and normalization map live in `.cursor/skills/notice-generate/scripts/constants.js`. +**Important:** The agent should NOT edit `ALLOWED_LICENSES` directly. Present the scan results to the user and let them decide which licenses to allow. The allowlist and normalization map live in `.cursor/skills/qv-notice-generate/scripts/constants.js`. ### Generate license overview report ```bash -node .cursor/skills/notice-generate/scripts/generate-report.js +node .cursor/skills/qv-notice-generate/scripts/generate-report.js ``` Reads existing NOTICE files across all packages (no scanning, no tokens needed) and produces `NOTICE_FULL_REPORT.txt` with: @@ -143,6 +143,6 @@ All entries within every NOTICE file section are sorted deterministically using ## References -- Constants (allowlist, normalization, copyright): `.cursor/skills/notice-generate/scripts/constants.js` -- Package definitions & internal wiring: `.cursor/skills/notice-generate/scripts/lib/config.js` +- Constants (allowlist, normalization, copyright): `.cursor/skills/qv-notice-generate/scripts/constants.js` +- Package definitions & internal wiring: `.cursor/skills/qv-notice-generate/scripts/lib/config.js` - SDK pod packages: `.cursor/rules/sdk/sdk-pod-packages.mdc` diff --git a/.cursor/skills/notice-generate/scripts/check-forbidden-licenses.js b/.cursor/skills/qv-notice-generate/scripts/check-forbidden-licenses.js similarity index 100% rename from .cursor/skills/notice-generate/scripts/check-forbidden-licenses.js rename to .cursor/skills/qv-notice-generate/scripts/check-forbidden-licenses.js diff --git a/.cursor/skills/notice-generate/scripts/constants.js b/.cursor/skills/qv-notice-generate/scripts/constants.js similarity index 100% rename from .cursor/skills/notice-generate/scripts/constants.js rename to .cursor/skills/qv-notice-generate/scripts/constants.js diff --git a/.cursor/skills/notice-generate/scripts/generate-notice.js b/.cursor/skills/qv-notice-generate/scripts/generate-notice.js similarity index 100% rename from .cursor/skills/notice-generate/scripts/generate-notice.js rename to .cursor/skills/qv-notice-generate/scripts/generate-notice.js diff --git a/.cursor/skills/notice-generate/scripts/generate-report.js b/.cursor/skills/qv-notice-generate/scripts/generate-report.js similarity index 100% rename from .cursor/skills/notice-generate/scripts/generate-report.js rename to .cursor/skills/qv-notice-generate/scripts/generate-report.js diff --git a/.cursor/skills/notice-generate/scripts/lib/config.js b/.cursor/skills/qv-notice-generate/scripts/lib/config.js similarity index 100% rename from .cursor/skills/notice-generate/scripts/lib/config.js rename to .cursor/skills/qv-notice-generate/scripts/lib/config.js diff --git a/.cursor/skills/notice-generate/scripts/lib/notice-writer.js b/.cursor/skills/qv-notice-generate/scripts/lib/notice-writer.js similarity index 100% rename from .cursor/skills/notice-generate/scripts/lib/notice-writer.js rename to .cursor/skills/qv-notice-generate/scripts/lib/notice-writer.js diff --git a/.cursor/skills/notice-generate/scripts/lib/scan-cpp-deps.js b/.cursor/skills/qv-notice-generate/scripts/lib/scan-cpp-deps.js similarity index 100% rename from .cursor/skills/notice-generate/scripts/lib/scan-cpp-deps.js rename to .cursor/skills/qv-notice-generate/scripts/lib/scan-cpp-deps.js diff --git a/.cursor/skills/notice-generate/scripts/lib/scan-js-deps.js b/.cursor/skills/qv-notice-generate/scripts/lib/scan-js-deps.js similarity index 100% rename from .cursor/skills/notice-generate/scripts/lib/scan-js-deps.js rename to .cursor/skills/qv-notice-generate/scripts/lib/scan-js-deps.js diff --git a/.cursor/skills/notice-generate/scripts/lib/scan-models.js b/.cursor/skills/qv-notice-generate/scripts/lib/scan-models.js similarity index 100% rename from .cursor/skills/notice-generate/scripts/lib/scan-models.js rename to .cursor/skills/qv-notice-generate/scripts/lib/scan-models.js diff --git a/.cursor/skills/notice-generate/scripts/lib/scan-python-deps.js b/.cursor/skills/qv-notice-generate/scripts/lib/scan-python-deps.js similarity index 100% rename from .cursor/skills/notice-generate/scripts/lib/scan-python-deps.js rename to .cursor/skills/qv-notice-generate/scripts/lib/scan-python-deps.js diff --git a/.cursor/skills/notice-generate/scripts/lib/utils.js b/.cursor/skills/qv-notice-generate/scripts/lib/utils.js similarity index 100% rename from .cursor/skills/notice-generate/scripts/lib/utils.js rename to .cursor/skills/qv-notice-generate/scripts/lib/utils.js diff --git a/.cursor/skills/pr-mine/SKILL.md b/.cursor/skills/qv-pr-mine/SKILL.md similarity index 97% rename from .cursor/skills/pr-mine/SKILL.md rename to .cursor/skills/qv-pr-mine/SKILL.md index 231cc4269a..8dc279be98 100644 --- a/.cursor/skills/pr-mine/SKILL.md +++ b/.cursor/skills/qv-pr-mine/SKILL.md @@ -1,6 +1,6 @@ --- -name: pr-mine -description: Show the current user's open PRs across every pod registered under .github/teams/, grouped by merge readiness, with copy-paste Slack ping messages routed to the owning pod's team. Use when the user asks about their own PRs, merge readiness, who to ping, or invokes /pr-mine. +name: qv-pr-mine +description: Show the current user's open PRs across every pod registered under .github/teams/, grouped by merge readiness, with copy-paste Slack ping messages routed to the owning pod's team. Use when the user asks about their own PRs, merge readiness, who to ping, or invokes /qv-pr-mine. disable-model-invocation: true --- @@ -14,7 +14,7 @@ Cross-pod skill. Surfaces the current user's open PRs in the configured repo and - User asks about their own PRs, merge readiness, or who to ping - User wants Slack messages to request reviews -- User invokes `/pr-mine` +- User invokes `/qv-pr-mine` ## Prerequisites @@ -47,7 +47,7 @@ node .cursor/skills/_lib/pr-skills/pr-status.mjs --mode my 4. For PRs in "needs re-review" or "awaiting review", present the "Slack messages (copy-paste ready)" sections in copy-friendly fenced code blocks so the user can paste directly into Slack. -5. Offer: "Want me to review any of these before requesting reviews? Provide the PR URL and I'll run `/pr-review`." +5. Offer: "Want me to review any of these before requesting reviews? Provide the PR URL and I'll run `/qv-pr-review`." ## Output groups diff --git a/.cursor/skills/pr-review/SKILL.md b/.cursor/skills/qv-pr-review/SKILL.md similarity index 95% rename from .cursor/skills/pr-review/SKILL.md rename to .cursor/skills/qv-pr-review/SKILL.md index bd03c18747..56defc5290 100644 --- a/.cursor/skills/pr-review/SKILL.md +++ b/.cursor/skills/qv-pr-review/SKILL.md @@ -1,6 +1,6 @@ --- -name: pr-review -description: Deep-dive review of any GitHub PR in tetherto/qvac. Validates gitflow, CI, title/body format, code quality, security, and applicable repo rules. Posts a PENDING review with inline comments. Use when reviewing a PR, given a PR link, or invoking /pr-review. +name: qv-pr-review +description: Deep-dive review of any GitHub PR in tetherto/qvac. Validates gitflow, CI, title/body format, code quality, security, and applicable repo rules. Posts a PENDING review with inline comments. Use when reviewing a PR, given a PR link, or invoking /qv-pr-review. disable-model-invocation: true --- @@ -18,8 +18,8 @@ The user submits the pending review manually from the GitHub UI. **Use when:** - User asks to review a PR or provides a PR URL -- User invokes `/pr-review` -- Triggered as follow-up from `/sdk-pr-status`, `/sdk-pr-my`, or another pod's status/my skill +- User invokes `/qv-pr-review` +- Triggered as follow-up from `/qv-sdk-pr-status`, `/qv-pr-mine`, or another pod's status/my skill The skill applies to any PR; cursor rules and PR-template format applicable to the touched paths are discovered dynamically (see step 4 / step 5). @@ -67,7 +67,7 @@ This skill is **read-only with respect to the user's local working tree**. The u ### Worktree mode carve-out -`/pr-review` runs by default in worktree mode (see step 0a). The dedicated cache directory at `~/.cache/qvac-pr-review/` is fully isolated from the user's working tree — it lives outside the repo entirely. Inside that cache directory only, the **shared script** (`worktree-prepare.mjs`) is allowed to: +`/qv-pr-review` runs by default in worktree mode (see step 0a). The dedicated cache directory at `~/.cache/qvac-pr-review/` is fully isolated from the user's working tree — it lives outside the repo entirely. Inside that cache directory only, the **shared script** (`worktree-prepare.mjs`) is allowed to: - `git fetch <remote> "pull/<n>/head:refs/pr/<n>/head"` - `git worktree add --detach <cache-path> refs/pr/<n>/head` @@ -77,9 +77,9 @@ This skill is **read-only with respect to the user's local working tree**. The u - `git worktree remove --force <cache-path>` and `git worktree prune` - Read-only diagnostics: `git -C <cache-path> rev-parse|log|show|diff|status` -These run from the script, not from the agent. The agent itself MUST NOT run any of the forbidden commands above — including inside the cache path. The agent only Reads/Greps/Globs source files in the cache path and never writes to them during `/pr-review`. +These run from the script, not from the agent. The agent itself MUST NOT run any of the forbidden commands above — including inside the cache path. The agent only Reads/Greps/Globs source files in the cache path and never writes to them during `/qv-pr-review`. -The same cache path is also used by `/pr-test`, so it may contain untracked build/test artifacts such as `node_modules`, `dist`, native `build/` directories, or logs. Those artifacts are ignored by `/pr-review`; the patch is computed from committed refs (`<BASE_REF>...HEAD`), not from the worktree's unstaged or untracked state. +The same cache path is also used by `/qv-pr-test`, so it may contain untracked build/test artifacts such as `node_modules`, `dist`, native `build/` directories, or logs. Those artifacts are ignored by `/qv-pr-review`; the patch is computed from committed refs (`<BASE_REF>...HEAD`), not from the worktree's unstaged or untracked state. ### File access rules @@ -124,7 +124,7 @@ Copy this checklist and track progress: ### 0a. Prepare worktree (default-on) -Worktree mode is the default — full local Read/Grep/Glob context at the PR head SHA, isolated under `~/.cache/qvac-pr-review/`, never touches the user's working tree. The same script also fetches the PR's base ref and writes the canonical PR diff to `/tmp/`. Skip this step only if the user invoked `/pr-review URL --no-worktree`. +Worktree mode is the default — full local Read/Grep/Glob context at the PR head SHA, isolated under `~/.cache/qvac-pr-review/`, never touches the user's working tree. The same script also fetches the PR's base ref and writes the canonical PR diff to `/tmp/`. Skip this step only if the user invoked `/qv-pr-review URL --no-worktree`. ```bash node .cursor/skills/_lib/pr-skills/worktree-prepare.mjs <PR-URL> diff --git a/.cursor/skills/pr-test/SKILL.md b/.cursor/skills/qv-pr-test/SKILL.md similarity index 99% rename from .cursor/skills/pr-test/SKILL.md rename to .cursor/skills/qv-pr-test/SKILL.md index 0107191fd0..ac7ab72b70 100644 --- a/.cursor/skills/pr-test/SKILL.md +++ b/.cursor/skills/qv-pr-test/SKILL.md @@ -1,6 +1,6 @@ --- -name: pr-test -description: Plan and run local PR validation for tetherto/qvac PRs. Reuses the shared PR worktree, discovers touched packages and package.json scripts, recommends a test tier, and analyzes results. Use when testing a PR or invoking /pr-test. +name: qv-pr-test +description: Plan and run local PR validation for tetherto/qvac PRs. Reuses the shared PR worktree, discovers touched packages and package.json scripts, recommends a test tier, and analyzes results. Use when testing a PR or invoking /qv-pr-test. disable-model-invocation: true --- @@ -22,7 +22,7 @@ High-level flow: Use when: - User asks to test a PR or provides a PR URL for validation. -- User invokes `/pr-test`. +- User invokes `/qv-pr-test`. - A PR review/status flow needs local verification before reviewers are pinged. ## Inputs diff --git a/.cursor/skills/registry-autobase-patterns/SKILL.md b/.cursor/skills/qv-registry-autobase-patterns/SKILL.md similarity index 97% rename from .cursor/skills/registry-autobase-patterns/SKILL.md rename to .cursor/skills/qv-registry-autobase-patterns/SKILL.md index 860d0d61ab..514ea48a35 100644 --- a/.cursor/skills/registry-autobase-patterns/SKILL.md +++ b/.cursor/skills/qv-registry-autobase-patterns/SKILL.md @@ -1,5 +1,5 @@ --- -name: registry-autobase-patterns +name: qv-registry-autobase-patterns description: Reference material for Autobase, HyperDB, and multi-writer patterns in the QVAC registry server. Use when working with Autobase, HyperDB schemas, blind pairing/peering, Hyperdispatch, or debugging Corestore/replication issues. --- diff --git a/.cursor/skills/registry-autobase-patterns/references/autobase-patterns.md b/.cursor/skills/qv-registry-autobase-patterns/references/autobase-patterns.md similarity index 100% rename from .cursor/skills/registry-autobase-patterns/references/autobase-patterns.md rename to .cursor/skills/qv-registry-autobase-patterns/references/autobase-patterns.md diff --git a/.cursor/skills/registry-autobase-patterns/references/hyperdb-autobase-learnings.md b/.cursor/skills/qv-registry-autobase-patterns/references/hyperdb-autobase-learnings.md similarity index 100% rename from .cursor/skills/registry-autobase-patterns/references/hyperdb-autobase-learnings.md rename to .cursor/skills/qv-registry-autobase-patterns/references/hyperdb-autobase-learnings.md diff --git a/.cursor/skills/registry-autobase-patterns/references/hyperdb-learnings.md b/.cursor/skills/qv-registry-autobase-patterns/references/hyperdb-learnings.md similarity index 100% rename from .cursor/skills/registry-autobase-patterns/references/hyperdb-learnings.md rename to .cursor/skills/qv-registry-autobase-patterns/references/hyperdb-learnings.md diff --git a/.cursor/skills/registry-autobase-patterns/references/implementation-kb.md b/.cursor/skills/qv-registry-autobase-patterns/references/implementation-kb.md similarity index 100% rename from .cursor/skills/registry-autobase-patterns/references/implementation-kb.md rename to .cursor/skills/qv-registry-autobase-patterns/references/implementation-kb.md diff --git a/.cursor/skills/sdk-backmerge/SKILL.md b/.cursor/skills/qv-sdk-backmerge/SKILL.md similarity index 96% rename from .cursor/skills/sdk-backmerge/SKILL.md rename to .cursor/skills/qv-sdk-backmerge/SKILL.md index 030c3c92e0..abced04f2f 100644 --- a/.cursor/skills/sdk-backmerge/SKILL.md +++ b/.cursor/skills/qv-sdk-backmerge/SKILL.md @@ -1,5 +1,5 @@ --- -name: sdk-backmerge +name: qv-sdk-backmerge description: Open the follow-up "backmerge" PR that lands a release's version bump + changelog onto main. Use after (or alongside) creating a release PR for an SDK pod package. --- @@ -14,7 +14,7 @@ Create the backmerge PR that keeps `main` aligned with what shipped on a `releas **Use when:** - A release PR has been (or is being) created for `release-<pkg>-<x.y.z>` -- User invokes `/sdk-backmerge` +- User invokes `/qv-sdk-backmerge` - `sdk-pr-create` chains into this flow automatically when the target is a release branch (see that skill's "Release Target Dual-PR Flow") The backmerge PR carries the version bump + changelog metadata from the release branch onto `main` so future development sees it. It is tagged `[skiplog]` to keep it out of subsequent changelogs. @@ -117,7 +117,7 @@ When stopping, print: # After resolving manually: git add <files> git cherry-pick --continue - # Then re-run: /sdk-backmerge --resume + # Then re-run: /qv-sdk-backmerge --resume ``` ### Step 7: Push the fork branch @@ -197,8 +197,8 @@ Before completing: ## References -- `.cursor/skills/sdk-pr-create/SKILL.md` — companion skill, auto-chains into this one for release targets -- `.cursor/skills/sdk-changelog/SKILL.md` — changelog regeneration used during conflict resolution +- `.cursor/skills/qv-sdk-pr-create/SKILL.md` — companion skill, auto-chains into this one for release targets +- `.cursor/skills/qv-sdk-changelog/SKILL.md` — changelog regeneration used during conflict resolution - `.cursor/rules/sdk/commit-and-pr-format.mdc` — title format and `[skiplog]` semantics - `.cursor/rules/sdk/sdk-pod-packages.mdc` — packages this skill applies to - `docs/gitflow.md` — release flow and "Keep main aligned" rules diff --git a/.cursor/skills/sdk-changelog/SKILL.md b/.cursor/skills/qv-sdk-changelog/SKILL.md similarity index 97% rename from .cursor/skills/sdk-changelog/SKILL.md rename to .cursor/skills/qv-sdk-changelog/SKILL.md index 983afb0dba..6439c57002 100644 --- a/.cursor/skills/sdk-changelog/SKILL.md +++ b/.cursor/skills/qv-sdk-changelog/SKILL.md @@ -1,5 +1,5 @@ --- -name: sdk-changelog +name: qv-sdk-changelog description: Generate changelogs for SDK pod packages using tag-based GitFlow. Use when preparing a release, generating changelog, or creating CHANGELOG_LLM.md. --- @@ -17,7 +17,7 @@ Generate changelogs for SDK pod packages following the monorepo GitFlow. - User asks to generate changelog - User asks to create human-readable/presentable changelog - User asks to generate CHANGELOG_LLM.md -- User invokes `/sdk-changelog` +- User invokes `/qv-sdk-changelog` ## Workflow @@ -153,13 +153,13 @@ its NOTICE file reflects any dependency changes in the release: ```bash source .env -node .cursor/skills/notice-generate/scripts/generate-notice.js <package-name> +node .cursor/skills/qv-notice-generate/scripts/generate-notice.js <package-name> ``` Do NOT commit the announcement post (gitignored) and let the user review the rest before committing. -See `.cursor/skills/notice-generate/SKILL.md` for full details. +See `.cursor/skills/qv-notice-generate/SKILL.md` for full details. ## CLI Parameters @@ -222,4 +222,4 @@ Before completing: - GitFlow: `/gitflow.md` - PR format: `.cursor/rules/sdk/commit-and-pr-format.mdc` - LLM changelog format: [references/changelog-llm-format.md](references/changelog-llm-format.md) -- NOTICE generation: `.cursor/skills/notice-generate/SKILL.md` +- NOTICE generation: `.cursor/skills/qv-notice-generate/SKILL.md` diff --git a/.cursor/skills/sdk-changelog/references/changelog-llm-format.md b/.cursor/skills/qv-sdk-changelog/references/changelog-llm-format.md similarity index 100% rename from .cursor/skills/sdk-changelog/references/changelog-llm-format.md rename to .cursor/skills/qv-sdk-changelog/references/changelog-llm-format.md diff --git a/.cursor/skills/sdk-e2e-create/SKILL.md b/.cursor/skills/qv-sdk-e2e-create/SKILL.md similarity index 99% rename from .cursor/skills/sdk-e2e-create/SKILL.md rename to .cursor/skills/qv-sdk-e2e-create/SKILL.md index 0951f3b8b6..54a73b47b4 100644 --- a/.cursor/skills/sdk-e2e-create/SKILL.md +++ b/.cursor/skills/qv-sdk-e2e-create/SKILL.md @@ -1,5 +1,5 @@ --- -name: sdk-e2e-create +name: qv-sdk-e2e-create description: > Plans and scaffolds e2e tests in packages/sdk/tests-qvac for a new or changed public SDK API. Use when adding or modifying SDK functionality that is exposed to consumers. Enforces happy / sad / error @@ -20,7 +20,7 @@ Use when: - Adding a new public SDK function, model type, or capability. - Changing an existing public SDK API in a way that affects runtime behaviour. -- User invokes `/sdk-e2e-create`. +- User invokes `/qv-sdk-e2e-create`. - User asks to "add e2e tests for <feature>" or similar. Do NOT use for: diff --git a/.cursor/skills/sdk-pr-create/SKILL.md b/.cursor/skills/qv-sdk-pr-create/SKILL.md similarity index 91% rename from .cursor/skills/sdk-pr-create/SKILL.md rename to .cursor/skills/qv-sdk-pr-create/SKILL.md index 850524b881..1187987f4c 100644 --- a/.cursor/skills/sdk-pr-create/SKILL.md +++ b/.cursor/skills/qv-sdk-pr-create/SKILL.md @@ -1,6 +1,6 @@ --- -name: sdk-pr-create -description: Generate PR descriptions for SDK pod packages following template and format rules. +name: qv-sdk-pr-create +description: Generate PR descriptions for SDK pod packages following template and format rules. Use when creating an SDK pod PR or invoking /qv-sdk-pr-create. --- # SDK Pod PR Creation @@ -14,7 +14,7 @@ Generate PR titles and descriptions for SDK pod packages, following the team's t **Use when:** - Creating a PR for any SDK pod package - User asks to generate PR description -- User invokes `/sdk-pr-create` +- User invokes `/qv-sdk-pr-create` ## Workflow @@ -127,18 +127,18 @@ When triggered, automatically chain into the `sdk-backmerge` skill so a follow-u - Release branch name (`release-<pkg>-<x.y.z>`) and parsed `<pkg>` / `<x.y.z>` - Source fork branch (the head of the release PR) - Ticket number from the title -2. Invoke the `sdk-backmerge` workflow inline with these inputs (read `.cursor/skills/sdk-backmerge/SKILL.md` and follow it). +2. Invoke the `sdk-backmerge` workflow inline with these inputs (read `.cursor/skills/qv-sdk-backmerge/SKILL.md` and follow it). 3. **Fail-stop policy** — if the backmerge cherry-pick produces a conflict outside `sdk-backmerge`'s auto-resolve list, STOP. Print: - The release PR URL (success — PR #1 is open) - The current `git status -sb` from the conflicted cherry-pick - - Resume instructions: `git add <files> && git cherry-pick --continue`, then run `/sdk-backmerge --resume` + - Resume instructions: `git add <files> && git cherry-pick --continue`, then run `/qv-sdk-backmerge --resume` 4. On success, print **both** PR URLs as clickable hyperlinks, ordered: - Release PR (target: `release-<pkg>-<x.y.z>`) - Backmerge PR (target: `main`) ### Opt-out -To skip the backmerge for a single run, the user can invoke `/sdk-pr-create --no-backmerge`. The skill still creates PR #1 normally and prints a reminder pointing to `/sdk-backmerge` for later. +To skip the backmerge for a single run, the user can invoke `/qv-sdk-pr-create --no-backmerge`. The skill still creates PR #1 normally and prints a reminder pointing to `/qv-sdk-backmerge` for later. ## Quality Checklist @@ -159,5 +159,5 @@ Before outputting the PR description, verify: - SDK pod packages: `.cursor/rules/sdk/sdk-pod-packages.mdc` - PR template: `.github/PULL_REQUEST_TEMPLATE/sdk-pod.md` - Format rules: `.cursor/rules/sdk/commit-and-pr-format.mdc` -- Backmerge skill: `.cursor/skills/sdk-backmerge/SKILL.md` +- Backmerge skill: `.cursor/skills/qv-sdk-backmerge/SKILL.md` - GitFlow: `docs/gitflow.md` diff --git a/.cursor/skills/sdk-pr-status/SKILL.md b/.cursor/skills/qv-sdk-pr-status/SKILL.md similarity index 89% rename from .cursor/skills/sdk-pr-status/SKILL.md rename to .cursor/skills/qv-sdk-pr-status/SKILL.md index b4392a0a1f..d77fac05c6 100644 --- a/.cursor/skills/sdk-pr-status/SKILL.md +++ b/.cursor/skills/qv-sdk-pr-status/SKILL.md @@ -1,6 +1,6 @@ --- -name: sdk-pr-status -description: Team-wide PR dashboard for the SDK pod. Shows open PRs touching SDK pod paths, sorted oldest-first, grouped into needs-your-re-review / stale / needs-review, with merge-conflict warnings. Use when checking team SDK pod PR status or invoking /sdk-pr-status. +name: qv-sdk-pr-status +description: Team-wide PR dashboard for the SDK pod. Shows open PRs touching SDK pod paths, sorted oldest-first, grouped into needs-your-re-review / stale / needs-review, with merge-conflict warnings. Use when checking team SDK pod PR status or invoking /qv-sdk-pr-status. disable-model-invocation: true --- @@ -14,7 +14,7 @@ Thin wrapper over the shared pr-skills library, pinned to the SDK pod. PR data c - User asks about open SDK pod PRs, review status, or what needs attention - User wants to know which SDK pod PRs to review -- User invokes `/sdk-pr-status` +- User invokes `/qv-sdk-pr-status` ## Prerequisites @@ -41,4 +41,4 @@ node .cursor/skills/_lib/pr-skills/pr-status.mjs --pod sdk --mode team --json 1. Run the script with `--pod sdk --mode team`. 2. Present the grouped output to the user (stderr contains progress info — ignore it). 3. Surface the summary header counts (need your re-review / stale / merge conflicts) prominently. -4. After showing results, offer: "Want me to review any of these? Provide the PR URL and I'll run `/pr-review`." +4. After showing results, offer: "Want me to review any of these? Provide the PR URL and I'll run `/qv-pr-review`." diff --git a/.cursor/skills/qv-skill-list/SKILL.md b/.cursor/skills/qv-skill-list/SKILL.md new file mode 100644 index 0000000000..abbdfa4a07 --- /dev/null +++ b/.cursor/skills/qv-skill-list/SKILL.md @@ -0,0 +1,118 @@ +--- +name: qv-skill-list +description: Catalog of all repo qv-* custom skills with one-line purpose and when-to-use. Use when the user asks what skills exist, which skill to use, how to invoke a skill, or invokes /qv-skill-list. +--- + +# QVAC Custom Skills Catalog + +All custom repo skills live under `.cursor/skills/` and use the `qv-` prefix. Invoke with `/qv-<name>` in chat. + +**Not listed here (by design):** + +- [`setup`](../setup/SKILL.md) — repo-wide bootstrap (`/setup`); copies shared config from `packages/ocr-onnx/.agent/` into `.claude/` and `.cursor/`. +- `packages/ocr-onnx/.agent/skills/` — framework skills (`orchestrate`, `release`, `ci-validate`, `commit-trace`, `review`); installed by `/setup`, not `qv-*` prefixed. + +## How to invoke + +| Mode | Behavior | +|------|----------| +| **Auto-invokable** | No `disable-model-invocation` in frontmatter — the agent may load the skill when your request matches the description. | +| **Manual only** | `disable-model-invocation: true` — invoke explicitly with `/qv-<name>` (or ask the agent to run that skill). | + +When unsure which skill fits, scan the tables below or ask: *"which qv skill should I use for …?"* + +--- + +## PR workflow (cross-pod) + +| Skill | Purpose | Use when | +|-------|---------|----------| +| [`qv-pr-review`](../qv-pr-review/SKILL.md) | Deep PR review: gitflow, CI, format, code quality, security; posts a PENDING GitHub review with inline comments. | Reviewing any PR, given a PR URL, or follow-up from a pod status/my skill. **Manual:** `/qv-pr-review` | +| [`qv-pr-test`](../qv-pr-test/SKILL.md) | Plan and run local PR validation; discovers packages/scripts, recommends test tier, analyzes results. | Testing a PR locally before merge. **Manual:** `/qv-pr-test` | +| [`qv-pr-mine`](../qv-pr-mine/SKILL.md) | Your open PRs across all pods, merge readiness, Slack ping messages for reviewers. | "What are my PRs?", merge readiness, who to ping. **Manual:** `/qv-pr-mine` | + +--- + +## DevOps pod + +| Skill | Purpose | Use when | +|-------|---------|----------| +| [`qv-devops-pr-create`](../qv-devops-pr-create/SKILL.md) | PR titles and bodies for CI/CD, composite actions, automation, IaC. | Creating a DevOps PR. **Manual:** `/qv-devops-pr-create` | +| [`qv-devops-pr-review`](../qv-devops-pr-review/SKILL.md) | `/qv-pr-review` plus GitHub Actions security audit (pinning, permissions, OIDC, secrets). | Reviewing PRs that touch DevOps paths. **Manual:** `/qv-devops-pr-review` | +| [`qv-devops-pr-status`](../qv-devops-pr-status/SKILL.md) | Team DevOps PR dashboard: re-review, stale, needs-review, conflicts. | DevOps pod PR queue health. **Manual:** `/qv-devops-pr-status` | +| [`qv-devops-why-my-pr-not`](../qv-devops-why-my-pr-not/SKILL.md) | Diagnose missing CI checks or merge blockers (labels, CODEOWNERS, approvals). | "Why aren't checks running?" / "Why can't I merge?" **Manual:** `/qv-devops-why-my-pr-not` | +| [`qv-devops-daily-update`](../qv-devops-daily-update/SKILL.md) | Slack standup (Done / Planned / Blockers) from PRs, reviews, CI. | DevOps EOD or standup. **Manual:** `/qv-devops-daily-update` | + +--- + +## SDK pod + +| Skill | Purpose | Use when | +|-------|---------|----------| +| [`qv-sdk-pr-create`](../qv-sdk-pr-create/SKILL.md) | PR descriptions for SDK pod packages (`sdk`, `cli`, `rag`, `logging`, `error`). | Creating an SDK pod PR; may chain to backmerge. **Auto** | +| [`qv-sdk-pr-status`](../qv-sdk-pr-status/SKILL.md) | Team SDK pod PR dashboard. | SDK pod PR queue. **Manual:** `/qv-sdk-pr-status` | +| [`qv-sdk-changelog`](../qv-sdk-changelog/SKILL.md) | Changelogs for SDK pod packages (tag-based GitFlow). | Release prep, `CHANGELOG_LLM.md`. **Auto** | +| [`qv-sdk-backmerge`](../qv-sdk-backmerge/SKILL.md) | Open backmerge PR (release version bump + changelog → `main`). | After SDK release PR; often chained from `qv-sdk-pr-create`. **Auto** | +| [`qv-sdk-e2e-create`](../qv-sdk-e2e-create/SKILL.md) | Scaffold e2e tests in `packages/sdk/tests-qvac` for new/changed public APIs. | Adding consumer-facing SDK APIs. **Auto** | + +--- + +## Addon pod (native inference / decoder / OCR) + +| Skill | Purpose | Use when | +|-------|---------|----------| +| [`qv-addon-changelog`](../qv-addon-changelog/SKILL.md) | Changelog entries for a target add-on package. | Add-on release prep. **Auto** | +| [`qv-addon-pr-create`](../qv-addon-pr-create/SKILL.md) | PR descriptions for non-SDK inference addons, decoder, OCR. | "Prepare PR description" for an addon. **Auto** | +| [`qv-addon-release-notes`](../qv-addon-release-notes/SKILL.md) | Release notes for addon packages. | Addon release notes. **Auto** | + +--- + +## Registry server + +| Skill | Purpose | Use when | +|-------|---------|----------| +| [`qv-registry-autobase-patterns`](../qv-registry-autobase-patterns/SKILL.md) | Autobase, HyperDB, multi-writer patterns, replication debugging. | Registry server, Autobase/HyperDB schemas, Corestore issues. **Auto** | + +--- + +## Developer diary and standup + +| Skill | Purpose | Use when | +|-------|---------|----------| +| [`qv-dev-diary-setup`](../qv-dev-diary-setup/SKILL.md) | Opt-in local dev diary (`~/.config/qvac-pr-skills/`). | Enable diary, `diary --init`, configure capture. **Manual:** `/qv-dev-diary-setup` | +| [`qv-dev-diary`](../qv-dev-diary/SKILL.md) | Read, inspect, append diary entries. | View today's log, add notes after setup. **Manual:** `/qv-dev-diary` | +| [`qv-daily-work-update`](../qv-daily-work-update/SKILL.md) | Personal EOD update from diary + GitHub + PR state (+ optional Asana). | Personal standup / "what did I do today". **Manual:** `/qv-daily-work-update` | +| [`qv-asana-sync`](../qv-asana-sync/SKILL.md) | Look up and update Asana tasks (status, comments, PR links). | Sync Asana task, move status, validate config. **Manual:** `/qv-asana-sync` | + +--- + +## Ecosystem and compliance + +| Skill | Purpose | Use when | +|-------|---------|----------| +| [`qv-holepunch-dev`](../qv-holepunch-dev/SKILL.md) | Holepunch/P2P/Bare/Pear API discovery via docs.pears.com and `gh`. | Hypercore, Hyperswarm, Autobase, Bare, Pear development. **Auto** | +| [`qv-notice-generate`](../qv-notice-generate/SKILL.md) | NOTICE files and third-party attributions for monorepo packages. | License compliance, release NOTICE updates. **Auto** | + +--- + +## Quick picker + +| You want to… | Skill | +|--------------|-------| +| Review any PR | `qv-pr-review` | +| Review a DevOps/CI PR | `qv-devops-pr-review` | +| Test a PR locally | `qv-pr-test` | +| See your open PRs | `qv-pr-mine` | +| SDK team PR board | `qv-sdk-pr-status` | +| DevOps team PR board | `qv-devops-pr-status` | +| Why CI/merge is blocked | `qv-devops-why-my-pr-not` | +| Write SDK PR body | `qv-sdk-pr-create` | +| Write addon PR body | `qv-addon-pr-create` | +| SDK release changelog | `qv-sdk-changelog` | +| Addon release changelog | `qv-addon-changelog` | +| Backmerge after SDK release | `qv-sdk-backmerge` | +| New SDK e2e tests | `qv-sdk-e2e-create` | +| Registry Autobase/HyperDB help | `qv-registry-autobase-patterns` | +| Holepunch stack help | `qv-holepunch-dev` | +| Generate NOTICE files | `qv-notice-generate` | +| List all skills | `qv-skill-list` (this file) | diff --git a/CLAUDE.md b/CLAUDE.md index 005bf206a2..15e1c9cfd6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -125,7 +125,7 @@ qvac/ │ └── settings.json # [GENERATED] from packages/ocr-onnx/.agent/settings.json ├── .cursor/ # Cursor config │ ├── skills/setup/ # Bootstrap skill (tracked in git) -│ ├── skills/ # Existing skills (addon-changelog, sdk-*, etc.) +│ ├── skills/ # Custom skills (qv-addon-*, qv-sdk-*, qv-pr-*, etc.) │ ├── commands/ # Existing commands │ └── rules/ # .mdc files with Cursor-specific rules │ ├── sdk/ # Main SDK entry point diff --git a/packages/ocr-onnx/.agent/README.md b/packages/ocr-onnx/.agent/README.md index 811a522788..fc2228c7f4 100644 --- a/packages/ocr-onnx/.agent/README.md +++ b/packages/ocr-onnx/.agent/README.md @@ -79,7 +79,7 @@ Not all features work identically in both tools: Agent files copied to Cursor have Claude-specific frontmatter (`model`, `color`, `memory`) stripped and `.claude/` path references replaced with Cursor equivalents. -Existing skills in `.cursor/skills/` (addon-changelog, sdk-changelog, etc.) are not managed by setup — they remain as-is. +Existing skills in `.cursor/skills/` (`qv-addon-changelog`, `qv-sdk-changelog`, etc.) are not managed by setup — they remain as-is. ## Full Pipeline (`/orchestrate`) @@ -139,7 +139,7 @@ SDK/TS packages get automatic PR checks via `pr-checks-sdk-pod`. All other packa | `/release <package>` | Release a package to NPM | | `/ci-validate <package>` | Trigger and monitor CI for a package | -Existing skills in `.cursor/` (addon-changelog, sdk-changelog, etc.) continue to work as before. +Existing skills in `.cursor/` (`qv-addon-changelog`, `qv-sdk-changelog`, etc.) continue to work as before. ## Parallel Execution diff --git a/packages/ocr-onnx/.agent/skills/orchestrate/SKILL.md b/packages/ocr-onnx/.agent/skills/orchestrate/SKILL.md index 9cfca9f610..d110fd74d3 100644 --- a/packages/ocr-onnx/.agent/skills/orchestrate/SKILL.md +++ b/packages/ocr-onnx/.agent/skills/orchestrate/SKILL.md @@ -160,8 +160,8 @@ If no CI needed or no reviewer fixes, proceed to reporting. 3. **Create the PR** using `gh pr create`: - **Title**: `<ticket> <prefix>[tags]: <task-title-summary>` (following commit format from CLAUDE.md) - **Body**: Generate based on PR type: - - For addon packages: follow the format from `/addon-pr-description` - - For SDK packages: follow the format from `/sdk-pr-create` + - For addon packages: follow the format from `/qv-addon-pr-create` + - For SDK packages: follow the format from `/qv-sdk-pr-create` - Include: what changed, why, test plan, link to Asana task - **Base**: `main` - Example: diff --git a/packages/ocr-onnx/.agent/skills/release/SKILL.md b/packages/ocr-onnx/.agent/skills/release/SKILL.md index 94db0c5d99..eb3a41222a 100644 --- a/packages/ocr-onnx/.agent/skills/release/SKILL.md +++ b/packages/ocr-onnx/.agent/skills/release/SKILL.md @@ -30,8 +30,8 @@ Where: ``` 3. If the local version is **not higher** than the npm version, stop and ask the user to bump the version first. 4. Check that `packages/<package>/CHANGELOG.md` has a section matching the current version (`## [X.Y.Z]`). If missing, generate it first then continue: - - For addon packages (native C++): run `/addon-changelog` - - For SDK pod packages (TypeScript): run `/sdk-changelog` + - For addon packages (native C++): run `/qv-addon-changelog` + - For SDK pod packages (TypeScript): run `/qv-sdk-changelog` ### Step 2: Confirm with user