Skip to content

chore(deps-dev): bump the development-minor-patch group across 1 directory with 5 updates#70

Closed
dependabot[bot] wants to merge 1 commit into
developfrom
dependabot/npm_and_yarn/development-minor-patch-2b7d2db49a
Closed

chore(deps-dev): bump the development-minor-patch group across 1 directory with 5 updates#70
dependabot[bot] wants to merge 1 commit into
developfrom
dependabot/npm_and_yarn/development-minor-patch-2b7d2db49a

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jun 29, 2026

Copy link
Copy Markdown

Bumps the development-minor-patch group with 5 updates:

Package From To
preact 10.29.2 10.29.3
prettier 3.8.3 3.9.1
typescript-eslint 8.59.0 8.62.0
vite 8.0.16 8.1.0
vitest 4.1.4 4.1.9

Updates preact from 10.29.2 to 10.29.3

Release notes

Sourced from preact's releases.

10.29.3

Fixes

Performance

Types

Maintenance

Commits

Updates prettier from 3.8.3 to 3.9.1

Release notes

Sourced from prettier's releases.

3.9.1

🔗 Changelog

3.9.0

diff

🔗 Prettier 3.9: Major parser upgrades and Formatting improvements

3.8.5

🔗 Changelog

3.8.4

🔗 Changelog

Changelog

Sourced from prettier's changelog.

3.9.1

diff

CLI: Fix ignored file has been cached incorrectly (#19483 by @​kovsu)

Bug details prettier/prettier#18016

3.9.0

diff

🔗 Release Notes

3.8.5

diff

Flow: Support readonly as a variance annotation (#19022 by @​marcoww6)

Flow now accepts readonly as a property variance annotation, equivalent to + (covariant/read-only).

// Input
type T = {
  readonly foo: string,
};
// Prettier 3.8.4
SyntaxError
// Prettier 3.8.5
type T = {
readonly foo: string,
};

3.8.4

diff

Markdown: Fix blank lines between list items and nested sub-lists being removed in Markdown/MDX (#17746 by @​byplayer)

Prettier was removing blank lines between list items and their nested sub-lists, converting loose lists into tight lists and changing their semantic meaning.

<!-- Input -->
- a
</tr></table> 

... (truncated)

Commits

Updates typescript-eslint from 8.59.0 to 8.62.0

Release notes

Sourced from typescript-eslint's releases.

v8.62.0

8.62.0 (2026-06-22)

🚀 Features

  • remove redundant package.json "files" (#12444)

🩹 Fixes

  • add "files" to rule-schema-to-typescript-types (#12441)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

v8.61.1

8.61.1 (2026-06-15)

🩹 Fixes

  • eslint-plugin: [consistent-indexed-object-style] do not remove comments when fixing (#12396, #10577)
  • eslint-plugin: [no-unnecessary-type-assertion] avoid false positive for template literal expressions (#12281)
  • eslint-plugin: [no-unnecessary-type-assertion] wrap object literal in parens when removing TSTypeAssertion in arrow body (#12394, #12393)
  • eslint-plugin: [no-unnecessary-boolean-literal-compare] fix precedence bug in autofix (#12413)
  • eslint-plugin: [no-unnecessary-template-expression] respect ECMAScript line terminators (#12388)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

v8.61.0

8.61.0 (2026-06-08)

🚀 Features

  • ast-spec: change type of UnaryExpression.prefix to always true (#12372)
  • ast-spec: tighten types of ArrowFunction, YieldExpression, TSTypePredicate (#12373)

... (truncated)

Changelog

Sourced from typescript-eslint's changelog.

8.62.0 (2026-06-22)

🚀 Features

  • remove redundant package.json "files" (#12444)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.61.1 (2026-06-15)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.61.0 (2026-06-08)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.60.1 (2026-06-01)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.60.0 (2026-05-25)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.59.4 (2026-05-18)

🩹 Fixes

... (truncated)

Commits
  • 54e2857 chore(release): publish 8.62.0
  • 81e4c26 feat: remove redundant package.json "files" (#12444)
  • aaad718 chore(release): publish 8.61.1
  • 16a5b24 chore(release): publish 8.61.0
  • 4f84a69 chore(release): publish 8.60.1
  • 1849b53 chore: typecheck using tsgo (#12139)
  • f891c29 chore(release): publish 8.60.0
  • ca6ca14 chore(release): publish 8.59.4
  • 4b927c6 fix(typescript-eslint): export Compatible* types from typescript-eslint to re...
  • 48e13c0 chore(release): publish 8.59.3
  • Additional commits viewable in compare view

Updates vite from 8.0.16 to 8.1.0

Release notes

Sourced from vite's releases.

create-vite@8.1.0

Please refer to CHANGELOG.md for details.

plugin-legacy@8.1.0

Please refer to CHANGELOG.md for details.

v8.1.0

Please refer to CHANGELOG.md for details.

plugin-legacy@8.1.0-beta.0

Please refer to CHANGELOG.md for details.

v8.1.0-beta.0

Please refer to CHANGELOG.md for details.

Changelog

Sourced from vite's changelog.

8.1.0 (2026-06-23)

Features

Bug Fixes

  • bundled-dev: errors should be kept when incremental build fails (#22617) (9a0dd48)
  • cache falsy values in perEnvironmentState (#22715) (0e91e79)
  • glob: respect caseSensitive option in hmr matcher (#22711) (65f525e)
  • html: omit nonce on import map when cspNonce is unset (#22713) (8340bb5)
  • optimizer: skip null-valued exports in expandGlobIds glob resolution (#22611) (8b9f5cd)
  • resolved build options should be kept as a getter (#22691) (3527191)
  • server: handle malformed URI in memory files middleware (#22714) (df9e0a5)
  • use literal envPrefix queries for Vite Task (#22706) (da72733)
  • warn on deprecated envFile (#22555) (ed7b283)

Code Refactoring

8.1.0-beta.0 (2026-06-15)

Features

  • import.meta.glob support caseSensitive option (#21707) (2ad6737)
  • add warning to discourage Vite with yarn pnp (#21906) (3fbb55a)
  • build: chunk importmap (#21580) (e180312)
  • css: support lightningcss plugin dependency (#21748) (0b7aaed)
  • deps: bump @​vitejs/devtools peer dependency version (#22542) (d2c2bc0)
  • html: add html.additionalAssetSources option (#21412) (a41404b)
  • integrate with Vite Task for zero-config build caching (#22453) (f8d75f7)
  • rename server.hmr options to server.ws options (#21357) (9ce3036)
  • server: support multiple hosts in __VITE_ADDITIONAL_SERVER_ALLOWED_HOSTS (#21501) (735f9a1)
  • track dependencies when loading config with native (#22602) (a7e2da8)
  • types: add more precise typing for known query types to match known as types (#21863) (cc39e55)
  • update rolldown to 1.1.1 (#22593) (8a13d63)
  • wasm: direct .wasm imports (WASM ESM Integration) (#21779) (c23d85b)

Bug Fixes

  • apply correct fs restrictions for pnpm gvs (#22415) (092320b)
  • css: support external CSS with lightningcss (#18389) (d64a1a5)
  • deps: update all non-major dependencies (#22637) (44bb9d9)
  • deps: update all non-major dependencies (#22681) (f4f0633)
  • html: insert import map before modulepreload that is not self-close tag (#21409) (e399c89)
  • optimizer: preserve sourcemaps for transformed optimized deps with follow-up transforms (#22428) (1298951)

... (truncated)

Commits

Updates vitest from 4.1.4 to 4.1.9

Release notes

Sourced from vitest's releases.

v4.1.9

🐞 Bug Fixes

View changes on GitHub

v4.1.8

   🐞 Bug Fixes

    View changes on GitHub

v4.1.7

   🐞 Bug Fixes

    View changes on GitHub

v4.1.6

   🐞 Bug Fixes

   🏎 Performance

    View changes on GitHub

v4.1.5

   🚀 Experimental Features

   🐞 Bug Fixes

... (truncated)

Commits
  • a7a61e7 chore: release v4.1.9 (#10598)
  • 934b0f5 fix(pool): prevent test run hang on worker crash (#10543) [backport to v4] (#...
  • 7fb2965 fix(browser): wait for orchestrator readiness before resolving browser sessio...
  • a518019 fix: fix importOriginal with optimizer and query import [backport to v4] (#...
  • e61f2dd chore: release v4.1.8
  • e4067b3 fix(browser): disable client cdp API when allowWrite/allowExec: false [ba...
  • a09d472 chore: release v4.1.7
  • a8fd24c chore: release v4.1.6
  • 18af98c fix(browser): simplify orchestrator otel carrier (#10285)
  • 3188260 feat(browser): provide project reference in ToMatchScreenshotResolvePath (#...
  • Additional commits viewable in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions

@dependabot dependabot Bot added the dependencies Dependency updates label Jun 29, 2026
@dependabot
dependabot Bot requested a review from I4cTime as a code owner June 29, 2026 01:46
@dependabot dependabot Bot added the dependencies Dependency updates label Jun 29, 2026
…ctory with 5 updates

---
updated-dependencies:
- dependency-name: preact
  dependency-version: 10.29.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-minor-patch
- dependency-name: prettier
  dependency-version: 3.9.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-minor-patch
- dependency-name: typescript-eslint
  dependency-version: 8.62.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-minor-patch
- dependency-name: vite
  dependency-version: 8.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-minor-patch
- dependency-name: vitest
  dependency-version: 4.1.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot changed the title chore(deps-dev): bump the development-minor-patch group with 5 updates chore(deps-dev): bump the development-minor-patch group across 1 directory with 5 updates Jul 11, 2026
@dependabot
dependabot Bot force-pushed the dependabot/npm_and_yarn/development-minor-patch-2b7d2db49a branch from 80caeb1 to 8f1e155 Compare July 11, 2026 06:04
@I4cTime

I4cTime commented Jul 11, 2026

Copy link
Copy Markdown
Owner

Superseded by #75, which applies this bump (verified against the post-#74 workflow/codebase, where this PR would conflict).

@I4cTime I4cTime closed this Jul 11, 2026
@dependabot @github

dependabot Bot commented on behalf of github Jul 11, 2026

Copy link
Copy Markdown
Author

This pull request was built based on a group rule. Closing it will not ignore any of these versions in future pull requests.

To ignore these dependencies, configure ignore rules in dependabot.yml

@dependabot
dependabot Bot deleted the dependabot/npm_and_yarn/development-minor-patch-2b7d2db49a branch July 11, 2026 06:18
I4cTime added a commit that referenced this pull request Jul 11, 2026
* chore(deps): in-range updates, vite 8.1.4, fix js-yaml advisory

pnpm update across in-range deps (mcp sdk, zod, eslint 9.x line,
vitest, tsup, etc.), vite pin bumped 8.0.16 -> 8.1.4 (both the explicit
devDependency and the pnpm override), and a js-yaml >=4.2.0 override
resolving GHSA-h67p-54hq-rp68 (quadratic-complexity DoS in merge key
handling; dev-scope via eslint) — js-yaml now resolves to 4.3.0.

Covers Dependabot PRs #69 and #70.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore(deps-dev): @types/node 25 -> 26

Typecheck and build clean. Covers Dependabot PR #73.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore(deps-dev): eslint 9 -> 10, fix findings from newly-default rules

Flat config works unchanged. ESLint 10 enables no-useless-assignment
and preserve-caught-error, which found three real issues — fixed the
code instead of disabling the rules:

- envelope.ts: timeRemaining was assigned null then unconditionally
  reassigned on every path; initialize with the fallback instead
- provision.ts (x2): rethrown provision errors now attach the original
  error as { cause } so the underlying AWS/HTTP failure isn't lost

Covers Dependabot PR #72.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore(deps): commander 14 -> 15

Typecheck, build, all 182 tests, and a live smoke pass: grouped help
renderer, set/get/has/delete roundtrip, completion generation (bash -n
clean), doctor, and unknown-command error handling all behave
identically on v15.

Covers Dependabot PR #71.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci(deps): bump action majors — checkout v7, setup-node v6, pnpm/action-setup v6, codeql-action v4

Applied across all five workflows (including the ones PR #74 added, so
the Dependabot PRs against the old files would have conflicted). Clears
the Node 20 deprecation warnings the v4-generation actions emit on
current runners.

Covers Dependabot PRs #60, #61, #62, #63.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: changelog for dependency + security updates

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
I4cTime added a commit that referenced this pull request Jul 11, 2026
* feat: v0.11.7 — Glama TDQS overhaul for all 44 MCP tools

All 44 tools now ship a 3-sentence description hitting the six Glama
Tool Definition Quality Score dimensions (purpose, when-to-use vs.
siblings, side-effects/audit/network, parameter semantics, conciseness,
returns). Common parameter schemas (`scope`, `projectPath`, `env`,
`teamId`, `orgId`) and per-tool Zod `.describe()` strings now include
formats, defaults, and concrete examples to lift the per-tool minimum
score that dominates the server-level grade (60% mean / 40% min).

- src/mcp/tools/_shared.ts: enriched commonSchemas describe() strings
- src/mcp/tools/{secrets,project,tunnel,teleport,audit,validation,hooks,
  tooling,agent,policy}.ts: 44 tool descriptions rewritten + parameter
  describe() strings tightened
- README.md: MCP tables resynced with new one-liners
- CHANGELOG.md: 0.11.7 entry
- package.json / server.json / plugin.json / marketplace.json: 0.11.7

No runtime / MCP wire-format changes — agents will see longer, clearer
tool descriptions on next tools/list refresh; tool names, parameters,
and return shapes are unchanged.

Test plan:
- pnpm run typecheck ✓
- pnpm run lint ✓ (max-warnings 0)
- pnpm run build ✓
- pnpm run test:ci ✓ (24 files / 164 tests)

Made-with: Cursor

* v0.12.0 — security hardening, dashboard rebuild (Preact), dependency patches (#58)

* feat: v0.12.0 — security hardening, dashboard rebuild, dependency patches

Security
- export_secrets now honors the requiresApproval gate on bulk reads (was
  bypassable over MCP); skips protected keys lacking a valid grant.
- Governance policy is anchored to the MCP server's launch CWD (setPolicyRoot)
  so an agent can't escape .q-ring.json restrictions via a crafted projectPath.
- import_dotenv treats input as literal content for MCP/agent/api callers
  (file-path convenience is CLI-only), closing a local-file-read vector.
- SSRF protection re-validates the resolved IP at connect time (guardedLookup),
  closing the DNS-rebinding TOCTOU window.
- Teleport PBKDF2 raised 100k -> 210k (SHA-512, OWASP); bundles record `iter`
  so legacy bundles still decrypt.
- Status dashboard endpoints require a per-launch, timing-safe token.
- Hardened exec network detection (basename) and checkExecPolicy (token/path
  boundary, not substring); policy cache invalidates on .q-ring.json mtime.
- Fixed dotenv inline-comment parsing and the password class guarantee.
- New regression tests (176 total).

Dashboard
- Rebuilt the live status dashboard on Preact + htm with VDOM diffing, so the
  SSE stream updates data in place: entrance animations run once instead of
  replaying every 5s (the flicker/"reload" bug), and focus/scroll are preserved.
- Still a single self-contained, offline, CSP-clean page: the runtime + app are
  esbuild-bundled (src/dashboard-client/main.js -> src/core/dashboard-client.ts
  via scripts/build-dashboard-client.mjs, run by `build`) and inlined.

Dependencies
- Cleared 23 Dependabot alerts via pnpm overrides (hono, qs, ip-address,
  fast-uri, esbuild, postcss) + vite pinned as a devDependency.
- Added preact/htm/esbuild as devDependencies only; no new runtime deps.

Breaking
- Dashboard returns 403 without the token; use the printed tokenized URL.
- Single MCP server spanning multiple project roots now applies only the launch
  directory's policy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(ci): pin pnpm, trim bleeding-edge deps to satisfy lockfile policy

CI ran pnpm@latest (v11), which ships a default minimumReleaseAge
supply-chain policy and no longer reads `pnpm.overrides` from package.json
— diverging from the local pnpm 10 and failing `--frozen-lockfile` on 18
freshly-published lockfile entries.

- Pin pnpm via `packageManager: pnpm@10.32.1`; CI reads it (drop `version:
  latest`) so resolution matches local exactly. Add pnpm cache to setup-node.
- Pin `vite` to 8.0.16 (was floating to 8.1.0, which drags in the just-
  published rolldown 1.1.3 native-binary stack); 8.0.16 uses aged rolldown
  1.0.3 and still fixes the vite advisory.
- Pin the `qs` override to 6.15.2 (the patched, aged release) instead of
  floating to the same-day 6.15.3.
- Regenerate a lean lockfile from the develop baseline (no --force churn).

Local parity with CI: install --frozen-lockfile, audit --audit-level=high
(0; 2 dev-only moderates remain), typecheck, lint, build, 176 tests — all green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* ci: cancel superseded runs on the same ref

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* chore(repo): add Dependabot config and PR template (#59)

- Dependabot: weekly npm + github-actions updates; minor/patch grouped into
  prod/dev batches to cut PR noise, majors/security stay individual.
- PR template with type + verification checklist matching CI gates.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* fix(ci): drop pnpm version pin in publish.yml (conflicts with packageManager) (#65)

pnpm/action-setup errors when both a `version` input and the package.json
`packageManager` field are set. ci.yml was already fixed; do the same here so
the release publish workflow can run.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* fix(release): sync server.json version + idempotent npm publish (#67)

The v0.12.0 npm publish succeeded, but the MCP Registry step failed with
'cannot publish duplicate version' because server.json was still at 0.11.7 —
sync-versions never updated it.

- Bump server.json to 0.12.0 (top-level + npm package entry).
- Teach sync-versions to keep server.json in lockstep going forward.
- Make the npm-publish step skip when the version already exists, so the
  release workflow is safe to re-run (e.g. after the MCP step fails).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* Hardening pass: workflows, plugins, CLI UX, dashboard, release automation (#74)

* ci: harden workflows — smoke tests, non-blocking audit, pinned mcp-publisher, brew test fix

- CI: smoke-test the built qring CLI (--version/--help) and the MCP server
  (initialize handshake) after build; move pnpm audit to a separate
  non-blocking job so new upstream advisories don't fail unrelated PRs
- CodeQL: also scan direct pushes to main
- publish: trigger on release published (not created — drafts no longer
  publish), pin mcp-publisher to v1.7.9, add concurrency guard, enable
  pnpm cache (pnpm setup moved before setup-node)
- update-homebrew: formula test now asserts the version string (qring
  --version prints the bare version, so asserting "qring" failed every
  brew test), guard tarball download with curl -f + sha check, skip
  commit when formula is unchanged, add concurrency guard
- bug template: version placeholder 0.2.9 → 0.12.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(claude-plugin): make the Claude Code plugin actually installable

Add claude-code-plugin/.claude-plugin/plugin.json and a repo-root
.claude-plugin/marketplace.json so the plugin installs via
/plugin marketplace add I4cTime/quantum_ring + /plugin install qring@q-ring
instead of file copying. Components (agents/commands/skills/hooks) move
from .claude/ to the plugin root to match the Claude Code plugin format;
hooks get a plugin-format hooks/hooks.json using ${CLAUDE_PLUGIN_ROOT}.

The project-scoped sync path still works: plugin-sync-claude.mjs maps the
new layout back under .claude/ (skipping the plugin-only hooks.json) and
keeps wiring hooks via settings.json. sync-versions.mjs now stamps both
new manifests so the Claude plugin is version-tracked like Cursor's.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(cli): central error handler, qring has, non-TTY stdin for set

- Wrap program.parseAsync() in a central handler: errors thrown by any
  command (policy denials, keyring backend failures) print as a one-line
  red message with exit code 1 instead of a raw Node stack trace;
  QRING_DEBUG=1 restores the full stack for bug reports
- Add qring has <key>: decay-aware existence check, exit 0/1, --quiet
  for exit-code-only scripting, honors --json — closes the last
  MCP→CLI parity gap (has_secret)
- promptSecret reads stdin to EOF when it isn't a TTY, so
  echo "$VALUE" | qring set KEY works instead of hanging forever;
  empty piped input errors cleanly

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(dashboard): enforce security headers, test the auth path

The dashboard was documented as CSP-clean but never sent a policy. Every
response now carries Content-Security-Policy (default-deny; inline
script/style + same-origin SSE only, frame-ancestors 'none'),
X-Frame-Options: DENY, X-Content-Type-Options: nosniff,
Referrer-Policy: no-referrer (keeps the ?token= URL out of Referer
headers), and Cache-Control: no-store (the HTML embeds the launch token).

Adds the first dashboard server tests: missing/wrong token → 403, valid
token → 200, and the security headers on both paths.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: Docker install section, CONTRIBUTING.md, changelog for unreleased changes

- README: document the Dockerfile/mcp-proxy container path (previously
  only discoverable via docs/publishing-log.md) with a note on the
  no-OS-keychain limitation; add qring has example; link CONTRIBUTING.md
- CONTRIBUTING.md: dev environment, branch/commit conventions, and the
  keep-in-sync list (parity doc, plugin manifests, dashboard bundle)
- CHANGELOG: record all unreleased changes from this branch

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(cli): universal --json output and destructive-op confirmations

--json (global or per-command) now works on ~20 more commands — list,
inspect, delete, import, audit, audit:verify, health, analyze, recall,
check, env, validate (single/--all/--list-providers), rotate,
tunnel list, hook list, approvals, scan, lint — all emitting
{ ok: true, data } via a shared emitJson helper. Previously only 4 of
~40 commands honored the advertised flag. JSON output never includes
secret values.

Destructive operations now confirm before proceeding: delete,
forget --all, teleport unpack (when it would overwrite existing keys),
wizard (when its generated keys already exist), and env:generate -o
(when the output file exists). -y/--yes skips the prompt; non-TTY use
without --yes is an error, never a silent yes. BREAKING for scripts
that relied on unconfirmed delete/forget --all — add --yes.

Also narrows teleport unpack's catch so confirm/import errors are no
longer misreported as "wrong passphrase", and scan/lint/check/
audit:verify set exit code 1 on findings in JSON mode to stay
script-friendly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(plugins): generate skills from single source + parity check script

cursor-plugin/skills/*/SKILL.md is now the canonical source; a new
scripts/plugin-generate-skills.mjs derives the Claude Code skills
(verbatim) and Kiro steering files (manual-inclusion transform with
#qring-<slug> chat tags) — pnpm run plugin:gen-skills. The regenerated
files in this commit reconcile the cosmetic drift (heading case,
arrows) that hand-copying had accumulated across the three plugins.

scripts/check-plugin-parity.mjs (pnpm run check:parity) fails when:
- the plugins' command/agent/skill sets diverge
- doc'd MCP tool counts don't match the registered count (44 today,
  verified against server.tool( registrations in src/mcp/tools)
- plugin manifest versions drift from package.json
- generated skill files are stale (--check mode of the generator)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: plugin-parity job and cross-platform compat matrix

parity job: runs check:parity (plugin sync, tool counts, versions,
generated skills) and verifies the committed dashboard client bundle
matches a fresh build:dashboard.

compat matrix (experimental, continue-on-error until proven green):
macOS + Windows on Node 22 exercise the per-OS keyring backends for
the first time; ubuntu Node 24 covers the publish toolchain; a Node 18
engines-floor leg does build + CLI smoke only (vitest 4 requires
Node 20+).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: changelog + contributing notes for Phase 2

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(cli): qring doctor self-check and shell completions

qring doctor diagnoses the install in one shot: keyring-backend
write/read/delete probe (isolated service, never touches real secrets —
this is the check that catches headless Linux without a Secret Service),
audit-dir writability + hash-chain integrity, .q-ring.json validity,
active policy summary, and qring-mcp resolvable on PATH (with per-OS
extension handling for Windows). --json supported; exit 1 on any fail,
warnings don't fail.

qring completion bash|zsh|fish prints completion scripts generated by
walking the live commander program — command names, aliases,
subcommands, and long flags can never drift from the actual CLI.
bash/zsh output passes bash -n / zsh -n.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(dashboard): entanglement graph and audit-chain integrity badge

The snapshot now carries auditChain (same data as qring audit:verify),
recomputed each 5s tick; the Audit Log card renders it as a live badge —
green "chain intact · N events verified", red with the break position
when tampered.

Entangled secrets render as an SVG node/edge graph on a circular layout
(nodes are unique keys, one edge per pair, labels anchored outward with
full-name tooltips) instead of the flat pair list the CHANGELOG had been
advertising as a graph. Falls back to the list beyond 14 keys. Styled
via theme variables, aria-labelled, no new dependencies — the committed
client bundle is regenerated.

Tests: snapshot includes auditChain, and the served page contains the
graph/badge styles and rendered badge markup.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(release): tag-driven release automation

pnpm run release:prepare <patch|minor|major|x.y.z> stages a release:
bumps package.json, runs sync-versions across every manifest, rolls the
CHANGELOG [Unreleased] section into [x.y.z] — date (failing if empty),
runs the plugin-parity guard, and prints the commit/tag/push steps.
Verified end-to-end against a repo copy.

Pushing the v* tag runs the new release.yml: creates the GitHub Release
idempotently with notes extracted from that version's CHANGELOG section
(fails loudly if the section is missing), then chains publish.yml and
update-homebrew.yml via workflow_call. The explicit chaining exists
because GITHUB_TOKEN-created releases emit no events, so the
release:published triggers can't fire on this path; they remain for
releases created manually in the UI, and every downstream step is
idempotent with a shared publish concurrency group.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: troubleshooting guide, per-editor quickstarts, releasing guide

- docs/troubleshooting.md: qring doctor first, keyring backends
  (headless Linux/CI), MCP-not-connecting per editor with a manual
  handshake probe, approval gate, 0.12.0 policy-root pinning, audit log,
  scripting gotchas (--yes, --json, --raw, has --quiet), AGPL FAQ
- docs/quickstart-{claude-code,cursor,kiro}.md: five-minute setups with
  example prompts per editor (the "prompt cookbooks" the README promises)
- docs/releasing.md: the tag-driven flow and failure recovery
- README: docs index section, doctor + completion in Quick Start
- parity check now also guards the tool-count claims in the quickstarts

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix: track exec-with-secrets cursor skill; fix approval test on Windows

Two bugs the new CI jobs caught on their first run:

- The blanket *secret* pattern in .gitignore silently kept
  cursor-plugin/skills/exec-with-secrets/SKILL.md out of git — the
  canonical source for a shipped skill existed only on the maintainer's
  machine. Extend the gitignore allow-list to cover it and modernize the
  Claude plugin entries to the new plugin-root layout (the old
  .claude/skills paths no longer exist). Caught by the parity job.

- approval.test.ts redirected the approval store via $HOME, but
  os.homedir() reads USERPROFILE on Windows, so the store went to the
  runner's real profile while the test read the temp dir (3 ENOENT
  failures). Set and restore both variables. Caught by the compat
  matrix — which otherwise passed everywhere, including the Windows and
  macOS keyring backends (179/182 on first-ever Windows run).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Dependencies: fix js-yaml advisory, all Dependabot majors + minors (#75)

* chore(deps): in-range updates, vite 8.1.4, fix js-yaml advisory

pnpm update across in-range deps (mcp sdk, zod, eslint 9.x line,
vitest, tsup, etc.), vite pin bumped 8.0.16 -> 8.1.4 (both the explicit
devDependency and the pnpm override), and a js-yaml >=4.2.0 override
resolving GHSA-h67p-54hq-rp68 (quadratic-complexity DoS in merge key
handling; dev-scope via eslint) — js-yaml now resolves to 4.3.0.

Covers Dependabot PRs #69 and #70.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore(deps-dev): @types/node 25 -> 26

Typecheck and build clean. Covers Dependabot PR #73.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore(deps-dev): eslint 9 -> 10, fix findings from newly-default rules

Flat config works unchanged. ESLint 10 enables no-useless-assignment
and preserve-caught-error, which found three real issues — fixed the
code instead of disabling the rules:

- envelope.ts: timeRemaining was assigned null then unconditionally
  reassigned on every path; initialize with the fallback instead
- provision.ts (x2): rethrown provision errors now attach the original
  error as { cause } so the underlying AWS/HTTP failure isn't lost

Covers Dependabot PR #72.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore(deps): commander 14 -> 15

Typecheck, build, all 182 tests, and a live smoke pass: grouped help
renderer, set/get/has/delete roundtrip, completion generation (bash -n
clean), doctor, and unknown-command error handling all behave
identically on v15.

Covers Dependabot PR #71.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci(deps): bump action majors — checkout v7, setup-node v6, pnpm/action-setup v6, codeql-action v4

Applied across all five workflows (including the ones PR #74 added, so
the Dependabot PRs against the old files would have conflicted). Clears
the Node 20 deprecation warnings the v4-generation actions emit on
current runners.

Covers Dependabot PRs #60, #61, #62, #63.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: changelog for dependency + security updates

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* release: v0.13.0 (#76)

Version 0.13.0 staged via pnpm run release:prepare minor — package.json,
plugin manifests, server.json, SECURITY.md bumped in lockstep;
CHANGELOG [Unreleased] rolled into [0.13.0] — 2026-07-11.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Dependency updates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant