qv-agent-stack-sync
Skill697 starsChanged 18 days agoApache-2.0View on GitHub
Plan and prepare the QVAC agent-stack release cascade across @qvac/inference, @qvac/sdk, @qvac/cli, @qvac/ai-sdk-provider, @qvac/opencode-plugin, and @qvac/openclaw-plugin. Use for /qv-agent-stack-sync --plan, --prepare-cascade, or --promote; syncing CLI to a newer SDK; or checking OpenCode/OpenClaw/provider compatibility.
- Installs packages
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 3 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 33
When --plan lists two or more packages of a release train, release them with qv-release-train instead of --prepare-cascade and --promote: …
- Distinctive: line 71
Prefer a clean worktree / dedicated worktree for cascade prep.
- Distinctive: line 90
Do not: create branches or PRs in this mode.
- Very specific: line 98
Create org release-<slug>-<version> from main if missing.
- Distinctive: line 104
Do not merge. Do not trigger publish (Dima / human).
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
QVAC Agent Stack Sync
Orchestrate the published dependency cascade:
@qvac/inference
-> @qvac/sdk
-> @qvac/cli
-> @qvac/ai-sdk-provider
-> @qvac/opencode-plugin
-> @qvac/openclaw-pluginGoal: know which packages need a release, prepare draft release + backmerge PRs when asked, never auto-publish. SDK releases run qv-sdk-inference-version for the @qvac/inference range and sdk-python.
Modes
| Mode | Mutates? | When |
--plan (default) | No | Always run first. Cascade matrix + version recommendations. |
--prepare-cascade | Yes (confirm first) | Open draft release PRs and draft backmerge PRs for needs_release packages. |
--promote <slug> | Yes (confirm first) | Mark a draft release PR ready after lower-layer npm is live; re-verify. Does not publish. |
Invoke: /qv-agent-stack-sync or /qv-agent-stack-sync --plan.
Release train
When --plan lists two or more packages of a release train, release them with
qv-release-train instead of --prepare-cascade and --promote: one branch,
one release PR, one publish run, and no wait for each layer to reach npm.
References
.github/teams/sdk.json— current SDK pod scope- Current package manifests — agent-stack dependency order
.agents/skills/qv-sdk-changelog/SKILL.md.agents/skills/qv-sdk-pr-create/SKILL.md.agents/skills/qv-sdk-backmerge/SKILL.md.agents/skills/qv-sdk-inference-version/SKILL.md(sdk releases only)docs/architecture/AGENT-INTEGRATIONS.mdpackages/cli/test/AGENT_STACK_E2E.md- Planner:
.agents/skills/_lib/sdk/agent-stack-plan.mjs - Path map:
scripts/sdk/package-paths.cjs - Cascade details: references/prepare-cascade.md
Version policy (pre-major 0.x)
Recommend with rationale — never silent-bump. Confirm before --prepare-cascade.
0.xcarets do not cross minors (^0.8.0≠0.9.0); tildes never do.- Minor — outstanding
[bc],[api], orfeat:commits. - Patch — dep-range alignment, or other non-breaking outstanding commits (e.g.
fix:). - Shared major.minor —
@qvac/sdksits on@qvac/inference's major and minor, so an engine minor makes the SDK a minor too, whatever its own commits say. Patches move independently.
Blockers the plan must surface
- AI SDK major mismatch — e.g. provider on
ai@7while OpenCode still depends onai@6/ provider^0.2.x. Hold that plugin release until code + deps align. - Missing git tags vs npm latest — stop and ask; do not guess changelog base.
- Lower layer not on npm yet — drafts may declare future ranges;
--promote/ publish wait onnpm view.
Workflow
0. Shared preflight
- Prefer a clean worktree / dedicated worktree for cascade prep.
git fetchorg remote (upstream/tetherto/qvac) tags +main.- Identify org remote vs fork remote (same policy as
qv-sdk-pr-create).
1. --plan (mandatory first step)
node .agents/skills/_lib/sdk/agent-stack-plan.mjs
node .agents/skills/_lib/sdk/agent-stack-plan.mjs --jsonShow the markdown table to the user. For each package report:
- local version, npm latest, last tag
needs_release/ blocked- suggested next version + rationale
- dep ranges vs target lower version
- outstanding non-noise commits since tag
Do not create branches or PRs in this mode.
2. --prepare-cascade
Requires explicit user confirmation of the plan (versions + which packages).
Then for each needs_release package in dependency order, follow references/prepare-cascade.md:
- Create org
release-<slug>-<version>frommainif missing. - Prep version bump + dep ranges, then
qv-sdk-changelog --package=<slug>(follow that skill; do not call the generator as a shortcut) + NOTICE. - Open draft release PR →
release-<slug>-<version>. - Open draft backmerge PR →
main([skiplog], cherry-pick-x) in the same session. - Skip packages marked blocked; report them clearly.
- Do not merge. Do not trigger publish (Dima / human).
@qvac/inference is the first hop: it releases from release-inference-<version> through
publish-inference.yml, and the SDK release PR points at the engine version already on npm. SDK
releases chain qv-sdk-inference-version + docs Step 8 from qv-sdk-changelog.
3. --promote <slug>
- Confirm lower dependencies are on npm (
npm view). - Fresh-install verification (below).
- Re-run NOTICE for this package so JS can resolve. If install still fails,
restore the JS block from
HEAD. - Mark the draft release PR ready for review (and keep backmerge draft until release merges, or ready it alongside — prefer ready both when release is ready to merge).
- Remind: human merges; human triggers publish; then promote the next upper package.
The release-<slug>-* line is the cut. Do not cherry-pick later main onto it.
Backmerge keeps main in sync with the cut.
File updates (when preparing releases)
Inference
packages/inference/package.json— version only; the SDK's range moves in the SDK's own release- changelog via
qv-sdk-changelog --package=inference - NOTICE via
qv-notice-generate inference
SDK
packages/sdk/package.json— version +dependencies["@qvac/inference"]viaqv-sdk-inference-version, against the engine version already on npm- changelog via
qv-sdk-changelog --package=sdk(engine commits are scanned in), then docs Step 8 - sdk-python regenerated;
tetherto-qvac-sdkpublishes at the SDK's version
CLI
packages/cli/package.json— version +dependencies["@qvac/sdk"]- changelog via
qv-sdk-changelog --package=cli - NOTICE via
qv-notice-generate cli - README committed SDK range if documented
AI SDK Provider
packages/ai-sdk-provider/package.json— version + extendpeerDependencies["@qvac/cli"]- changelog + NOTICE via SDK pod tools
OpenCode / OpenClaw plugins
plugins/opencode/package.jsonorplugins/openclaw/package.json(+openclaw.plugin.jsonversion when present)- bump
@qvac/cliand@qvac/ai-sdk-providerdeps to the planned minors - OpenCode may also need
ai/@ai-sdk/openai-compatiblemajors to match the provider — if not aligned, plan marks blocked - changelog:
qv-sdk-changelog --package=opencode-pluginor--package=openclaw-plugin(path map resolvesplugins/*) - NOTICE + README compatibility lines
Verification
Per package (from package dir)
- CLI:
lint,build,test:unit,test:e2e,node scripts/check-publish-ready.cjs - Provider:
lint,build,test:unit(optionalQVAC_INTEGRATION_TEST=1 npm run test:integration) - OpenCode / OpenClaw:
lint,build,test:unit(optional integration where available)
Fresh install (after lower npm publish)
tmp=$(mktemp -d)
cd "$tmp"
npm init -y
npm install --no-fund --no-audit @qvac/opencode-plugin@latest
npm ls @qvac/opencode-plugin @qvac/ai-sdk-provider @qvac/cli @qvac/sdkRepeat with @qvac/openclaw-plugin@latest when promoting OpenClaw.
Completion report
Always end with:
- plan table (or link to
--jsonoutput) - packages released / drafted / blocked / skipped
- confirmed versions and dep ranges before → after
- draft release + backmerge PR URLs
- tests run
- reminder that publish is human-gated
Quality checklist
--planrun before any mutation- User confirmed versions for
--prepare-cascade - OpenClaw included in the cascade
@qvac/inferencereleased ahead of an SDK release that moves major.minor- Draft release and draft backmerge opened together per package
- Release head is
chore/<slug>-<version>-changelog, notrelease-* qv-sdk-changelogcompleted for each hop (published-version audit included)- Blocked plugins (e.g. AI SDK mismatch) not force-released
- No publish / workflow_dispatch for npm
- Org-branch heads preferred (
tetherto/qvac)
In this repository56 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .github/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- .cursor/rules/agent-integrations.mdcCursor rule
- .cursor/rules/cpp/string-api-conventions.mdcCursor rule
- .cursor/rules/devops/main.mdcCursor rule
- .cursor/rules/no-remote-code-execution.mdcCursor rule
- .cursor/rules/qip-triage.mdcCursor rule
- .cursor/rules/sdk/commit-and-pr-format.mdcCursor rule
- .cursor/rules/sdk/error-handling.mdcCursor rule
- .cursor/rules/sdk/first-class-product-parity.mdcCursor rule
- .cursor/rules/sdk/main.mdcCursor rule
- .cursor/rules/sdk/public-constants-contract.mdcCursor rule
- .cursor/rules/sdk/request-lifecycle-primitives.mdcCursor rule
- .cursor/rules/sdk/sdk-pod-packages.mdcCursor rule
- .cursor/rules/sdk/skill-authoring-guidelines.mdcCursor rule
- cpp-string-api-reviewSkill
- qv-addon-changelogSkill
- qv-addon-pr-createSkill
- qv-addon-release-notesSkill
- qv-asana-syncSkill
- qv-daily-work-updateSkill
- qv-dev-diary-setupSkill
- qv-dev-diarySkill
- qv-devops-daily-updateSkill
- qv-devops-pr-createSkill
- qv-devops-pr-reviewSkill
- qv-devops-pr-statusSkill
- qv-devops-runner-queueSkill
- qv-devops-why-my-pr-notSkill
- qv-docs-solution-createSkill
- qv-docs-updateSkill
- qv-holepunch-devSkill
- qv-merge-guard-wireSkill
- qv-mobile-test-dispatchSkill
- qv-notice-generateSkill
- qv-pr-mineSkill
- qv-pr-reviewSkill
- qv-pr-testSkill
- qv-qip-createSkill
- qv-qip-reviewSkill
- qv-qip-triageSkill
- qv-quality-reportingSkill
- qv-registry-autobase-patternsSkill
- qv-release-trainSkill
- qv-sdk-backmergeSkill
- qv-sdk-changelogSkill
- qv-sdk-e2e-createSkill
- qv-sdk-inference-versionSkill
- qv-sdk-pr-createSkill
- qv-sdk-pr-statusSkill
- qv-sdk-update-modelsSkill
- qv-skill-listSkill
- setupSkill
- setupSkill
- qv-nx-ciSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

