just-vibe 0.14.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.14.1
4
+
5
+ - Update, inspect and remove Claude Code installations made by 0.12.0 or earlier. 0.14.0 checked the installed copy against workflow rules added in 0.13.0, so `update --target claude` and `doctor --target claude` stopped with "Command compare: procedure[5] promises a write". An installed copy is now read with shape checks only. Codex installations were not affected.
6
+
3
7
  ## 0.14.0
4
8
 
5
9
  0.13.0 was prepared but not published to npm. This release also contains its changes, listed under 0.13.0.
package/README.md CHANGED
@@ -6,7 +6,7 @@ Engineering workflows and role profiles for coding agents, with remembered prefe
6
6
 
7
7
  Describe what you want normally. With supported, trusted host hooks, just-vibe suggests relevant workflows and directs the agent to load their methods and discover the tools it needs. Explicit corrections can refine later instructions. Current requests always take precedence, and saved preferences grant no permissions.
8
8
 
9
- **Source version: 0.14.0**, with language-server checks, structural rules, mutation evidence, sandboxed workers, a ready queue and in-host MCP review, and lower per-prompt and per-tool-call hook cost. It also contains the routing, workflow contract and profile revisions prepared for 0.13.0, which was not published separately. The catalog has 221 skill names, 218 canonical workflows, 113 engineering profiles and 22 packs. Check [npm](https://www.npmjs.com/package/just-vibe) for published versions and the [implementation and verification plan](https://github.com/Zachshotamartin/just-vibe/blob/main/docs/agent-qa-and-learning-plan.md) for acceptance evidence. A source build is not evidence of publication.
9
+ **Source version: 0.14.1**, with language-server checks, structural rules, mutation evidence, sandboxed workers, a ready queue and in-host MCP review, and lower per-prompt and per-tool-call hook cost. It also contains the routing, workflow contract and profile revisions prepared for 0.13.0, which was not published separately. The catalog has 221 skill names, 218 canonical workflows, 113 engineering profiles and 22 packs. Check [npm](https://www.npmjs.com/package/just-vibe) for published versions and the [implementation and verification plan](https://github.com/Zachshotamartin/just-vibe/blob/main/docs/agent-qa-and-learning-plan.md) for acceptance evidence. A source build is not evidence of publication.
10
10
 
11
11
  ## Install
12
12
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "just-vibe",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "description": "Engineering workflows and role profiles for coding agents.",
5
5
  "homepage": "https://just-vibe-tools.vercel.app/",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "just-vibe",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "description": "Engineering workflows and role profiles for coding agents.",
5
5
  "author": {
6
6
  "name": "Zachary Martin",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "just-vibe",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "description": "Engineering workflows and role profiles for coding agents.",
5
5
  "author": {
6
6
  "name": "Zachary Martin",
@@ -152,6 +152,22 @@ export function loadCatalog(root = pluginRoot) {
152
152
  return { ...catalog, packs: packs.packs, root };
153
153
  }
154
154
 
155
+ // An installed copy was validated by the release that built it. Newer authoring rules must not
156
+ // block reading it to update, inspect or remove that installation, so only the fields that name
157
+ // files are checked.
158
+ export function loadInstalledCatalog(root) {
159
+ const packs = JSON.parse(readFileSync(resolve(root, 'catalog/packs.json'), 'utf8'));
160
+ const source = JSON.parse(readFileSync(resolve(root, 'catalog/commands.json'), 'utf8'));
161
+ if (source.schemaVersion !== 1 || !Array.isArray(source.commands) || !Array.isArray(packs.packs)) throw new Error('Unsupported installed catalog.');
162
+ const ids = new Set();
163
+ for (const c of source.commands) {
164
+ if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(c?.id) || ids.has(c.id) || typeof c.summary !== 'string'
165
+ || (!c.aliasOf && c.skillPath !== `skills/${c.id}/SKILL.md`)) throw new Error(`Invalid installed command: ${c?.id}`);
166
+ ids.add(c.id);
167
+ }
168
+ return { ...materializeAliases(source), packs: packs.packs, root };
169
+ }
170
+
155
171
  export function getCommand(catalog, id, { canonical = false } = {}) {
156
172
  const name = commandName(id);
157
173
  let command = catalog.commands.find(c => c.id === name);
@@ -2,7 +2,7 @@ import { existsSync, mkdirSync, readFileSync, readdirSync } from 'node:fs';
2
2
  import { resolve, join } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
4
  import { managedFiles } from './managed-files.mjs';
5
- import { loadCatalog } from './catalog.mjs';
5
+ import { loadCatalog, loadInstalledCatalog } from './catalog.mjs';
6
6
  import { DEFAULT_SELECTION, selectPayload } from './selection.mjs';
7
7
  import { within, readJson } from './storage.mjs';
8
8
 
@@ -40,7 +40,7 @@ export function claudeShortcuts(options, { source, operation, dryRun = false, ro
40
40
  // Read the actual staged selection when available, rather than exposing skills
41
41
  // which a core/frontend/ML installation intentionally excluded.
42
42
  const plugin = source && join(source, 'plugins/just-vibe');
43
- let catalog = loadCatalog(plugin && existsSync(join(plugin, 'catalog/commands.json')) ? plugin : undefined), ids;
43
+ let catalog = plugin && existsSync(join(plugin, 'catalog/commands.json')) ? loadInstalledCatalog(plugin) : loadCatalog(), ids;
44
44
  if (dryRun && operation === 'install' && !options.local && !options.github
45
45
  && (options.command === 'update' || !plugin || !existsSync(join(plugin, 'catalog/commands.json')))) {
46
46
  // Preflight the future payload before the native host or managed bundle is