You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Minors: in-range pnpm update across prod + dev deps; vite pin 8.0.16→8.1.4.
Added
qring has <key> — script-friendly existence check (exit 0 if present, 1 if not; --quiet for exit-code-only, honors --json). Decay-aware like the MCP has_secret tool, closing the last MCP→CLI parity gap.
Claude Code plugin is now a real installable plugin — added claude-code-plugin/.claude-plugin/plugin.json and a repo-root .claude-plugin/marketplace.json, so it installs via /plugin marketplace add I4cTime/quantum_ring + /plugin install qring@q-ring instead of file copying. Plugin components (agents/commands/skills/hooks) moved from claude-code-plugin/.claude/ to the plugin root to match the Claude Code plugin format; hooks are wired via hooks/hooks.json (${CLAUDE_PLUGIN_ROOT}) for plugin installs and .claude/settings.json for project-scoped sync installs. sync-versions now stamps both new manifests.
CONTRIBUTING.md — dev environment, branch/commit conventions, and the list of files to keep in sync (parity doc, plugin manifests, dashboard client bundle).
Docker install instructions in the README for the MCP-server container path.
CI smoke tests — the built qring binary (--version, --help) and an MCP initialize handshake against dist/mcp.js now run in CI after the build.
--json is now honored by ~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 emit { ok: true, data: … }, making the whole read surface scriptable. Previously only 4 commands supported the advertised global flag.
Confirmation prompts on destructive operations — delete, forget --all, teleport unpack (overwriting existing keys), wizard (regenerating existing keys), and env:generate -o (existing file) now ask before proceeding. Pass -y/--yes to skip; non-interactive use without --yes errors instead of silently proceeding. Breaking for scripts that relied on unconfirmed qring delete/forget --all — add --yes.
Plugin skills are now generated from a single source — cursor-plugin/skills/*/SKILL.md is canonical; scripts/plugin-generate-skills.mjs derives the Claude Code skills and Kiro steering files (pnpm run plugin:gen-skills). Reconciles the cosmetic drift that hand-copying had accumulated.
CI parity guard (pnpm run check:parity + a parity CI job) — fails when the three plugins' command/agent/skill sets diverge, doc'd MCP tool counts don't match the registered count (44), manifest versions drift from package.json, generated skills are stale, or the committed dashboard client bundle differs from a fresh build.
Cross-platform CI matrix (experimental, non-blocking) — macOS + Windows on Node 22, ubuntu on Node 24, and a Node 18 engines-floor leg (build + CLI smoke; vitest 4 needs Node 20+). Exercises the per-OS keyring backends for the first time.
qring doctor — one-shot install diagnosis: keyring-backend round-trip probe (the headless-Linux failure mode), audit-dir writability + hash-chain integrity, .q-ring.json validity, active policy, and qring-mcp on PATH. Supports --json; exits 1 on any failed check.
qring completion bash|zsh|fish — shell completion scripts generated from the live command tree, so they can never drift from the actual commands/flags.
Dashboard: entanglement graph — entangled secrets now render as an SVG node/edge graph (circular layout, up to 14 keys; falls back to the pair list beyond that), as the docs always advertised.
Dashboard: audit-chain badge — the Audit Log card shows hash-chain integrity live (same check as qring audit:verify), green when intact, red with the break position when tampered.
Tag-driven release automation — pnpm run release:prepare <patch|minor|major|x.y.z> bumps the version, syncs all manifests, rolls the CHANGELOG, and runs the parity guard; pushing the v* tag then runs release.yml, which creates the GitHub Release (notes from the CHANGELOG) and chains the npm/MCP publish and Homebrew update via workflow_call. See docs/releasing.md.
Docs — docs/troubleshooting.md (keyring backends, MCP connection, approval gate, policy-root pinning, scripting gotchas, AGPL FAQ), per-editor quickstarts (docs/quickstart-{claude-code,cursor,kiro}.md), docs/releasing.md, and a docs index in the README.
Changed
CLI errors are now one-line messages instead of stack traces — a central handler catches errors thrown by any command (policy denials, keyring backend failures) and prints them in red; set QRING_DEBUG=1 for the full stack.
pnpm audit moved off the blocking CI path — it runs as a separate non-blocking job, so a freshly disclosed advisory in a transitive dependency no longer fails unrelated PRs.
npm publish now triggers on release: published (was created), so draft releases can no longer publish; mcp-publisher is pinned to v1.7.9 instead of latest; publish and Homebrew workflows gained concurrency guards.
Fixed
qring set <key> no longer hangs when the value is piped — promptSecret reads stdin to EOF when it isn't a TTY (e.g. echo "$VALUE" | qring set KEY).
Homebrew formula test asserted the string "qring" in qring --version output, which prints only the bare version — brew test would have failed on every release. It now asserts the version string.
Status dashboard actually sends security headers — Content-Security-Policy (default-deny, inline-only), 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 on every response. Previously the page was CSP-compatible but no policy was enforced. Added tests for token auth (403) and the new headers.