@passioncode-ai/passioncode 0.2.61 → 0.2.62

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,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.62 - 2026-11-03
4
+
5
+ ### Fixed
6
+
7
+ - `setup` and `doctor --fix` no longer print a bare "Nothing to do." or "Everything ... is in place"
8
+ above a failing check: both add "The checks below still stand." (PC-104). A plan that would leave an
9
+ app out names it ("Nothing would change: Fabric would not be installed (see the plan below).") and a
10
+ plan whose only change is a release train is shown as a plan. The line under the plan says "answer
11
+ its questions", which covers the repairs question. The README, the setting-up skill and the reference name the cases more exactly.
12
+
3
13
  ## 0.2.61 - 2026-11-03
4
14
 
5
15
  ### Fixed
package/README.md CHANGED
@@ -44,7 +44,7 @@ secret into a product's own hidden prompt, starting Docker for Fabric, and resta
44
44
 
45
45
  1. **Install** (Node 18 or newer; the Claude Code CLI on `PATH` for the plugins):
46
46
  `npx @passioncode-ai/passioncode@latest setup`, then restart your agents. In a terminal it asks
47
- one question per app and one for the repairs (a `--json` run never asks); `--yes` accepts the plan, `--with`/`--without <ids>` choose apps
47
+ one question per absent app (on macOS) and one for the repairs, if any (a `--json` run never asks); `--yes` accepts the plan, `--with`/`--without <ids>` choose apps
48
48
  (`switchboard`, `dashboards`, `observatory`, `inbox`, `fabric`), `--no-apps` sets up the skills
49
49
  and MCP only, `--dry-run` shows the plan. Apps are installed on macOS; on other systems setup
50
50
  names each download page, and on Windows `doctor` reads which version of each app is installed. Skills only: `npx @passioncode-ai/passioncode@latest update`.
@@ -118,7 +118,7 @@ the versions in [`trains/organization-r1.json`](trains/organization-r1.json), re
118
118
  and `doctor` then compares every app with its pin (offline too) in an `app.<id>` line per app and
119
119
  one `train` line. An app newer than its pin is reported and left alone (a damaged one, or one whose version cannot be read, is reinstalled from the latest
120
120
  release): the train never takes an app back, because its data may not open in an older release. `setup --train none` returns to the
121
- latest releases. Either change is saved with `--yes` or in a terminal (after its answers, or at once when there is nothing to ask; a `--json` run never asks); without either it is only shown as a plan. A named
121
+ latest releases. Either change is saved with `--yes` or in a terminal (after its answers, or at once when there is nothing to ask; a `--json` run never asks), never with `--dry-run`; without either it is only shown as a plan. A named
122
122
  train is not saved when every offer in the terminal (at least one of them defaulting to yes) is
123
123
  answered no, while `--train none` is saved on any answer. The skills are pinned by the launcher release itself (`family.json`). Which
124
124
  version each app pins is the train's record in fabric-workspace
package/lib/setup.js CHANGED
@@ -308,6 +308,9 @@ const declined = (r) => (r.notTaken
308
308
  : 'You declined every offer; nothing was changed. The checks below still stand.');
309
309
  const notTaken = (names) => `Nothing was changed: ${were(names)} offered and not installed. The checks below still stand.`;
310
310
  const skipped = (names) => `Nothing was changed: ${were(names)} not installed (see your steps below). The checks below still stand.`;
311
+ const wouldSkip = (names, a) => `Nothing would change: ${names.join(' and ')} would not be installed (see the plan below).${stand(a)}`;
312
+ // PC-104: a headline that says nothing is left must not stand alone above failing checks.
313
+ const stand = (a) => (a.fail ? ' The checks below still stand.' : '');
311
314
 
312
315
  function render(result, { repairOnly = false } = {}) {
313
316
  const lines = [];
@@ -316,13 +319,16 @@ function render(result, { repairOnly = false } = {}) {
316
319
  lines.push(`${repairOnly ? 'doctor --fix' : 'setup'} · ${result.mode === 'new' ? 'a new setup' : 'an existing setup'} · ${result.platform}`);
317
320
  const todo = result.plan.filter((i) => i.selected);
318
321
  if (result.planOnly) {
319
- lines.push('', todo.length ? 'Plan (nothing was changed):' : result.declined ? declined(result) : 'Nothing to do.');
322
+ // PC-104: a plan whose only change is a train is still a plan; an empty one names the apps it would leave.
323
+ const leftApps = result.plan.filter((i) => i.kind === 'install' && !i.selected).map((i) => catalog.byId(i.product).name);
324
+ lines.push('', todo.length || (result.trainNotSaved && !result.declined) ? 'Plan (nothing was changed):'
325
+ : result.declined ? declined(result) : leftApps.length ? wouldSkip(leftApps, a) : `Nothing to do.${stand(a)}`);
320
326
  for (const i of result.plan) lines.push(` ${i.selected ? '•' : '–'} ${i.detail}${i.note ? ` (${i.note})` : ''}`);
321
327
  if (result.trainNotSaved) lines.push('', `The release train (${result.trainNotSaved}) was not saved${result.declined ? '.' : ': run it with --yes, or answer in a terminal.'}`);
322
- if (todo.length) lines.push('', 'Run it with --yes to apply, or in a terminal to answer one question per app.');
328
+ if (todo.length) lines.push('', 'Run it with --yes to apply, or in a terminal to answer its questions.');
323
329
  } else if (!result.actions.length) {
324
330
  lines.push('', result.declined ? declined(result) : result.notTaken ? notTaken(result.notTaken)
325
- : result.skipped ? skipped(result.skipped) : 'Everything this command can set up is in place; nothing was changed.');
331
+ : result.skipped ? skipped(result.skipped) : `Everything this command can set up is in place; nothing was changed.${stand(a)}`);
326
332
  } else {
327
333
  lines.push('', 'Done:');
328
334
  for (const x of result.actions) lines.push(` ${x.outcome === 'failed' ? 'FAILED' : 'done '} ${x.detail}${x.error ? `\n ${x.error}` : ''}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@passioncode-ai/passioncode",
3
- "version": "0.2.61",
3
+ "version": "0.2.62",
4
4
  "description": "Set up PassionCode.ai on a computer with one command: the apps from their verified releases, their MCP servers for every coding agent and the PassionCode.ai skills. Check and repair it with the same command or `doctor`.",
5
5
  "bin": {
6
6
  "passioncode": "bin/passioncode.js"
@@ -35,7 +35,7 @@
35
35
  "name": "passioncode",
36
36
  "displayName": "PassionCode.ai",
37
37
  "source": "./plugins/passioncode",
38
- "version": "0.2.61",
38
+ "version": "0.2.62",
39
39
  "description": "Set up and check PassionCode.ai on a computer with one command (setting-up-passioncode), the organisation's working rules for every contributor's agent (working-in-passioncode), and a once-a-day check that keeps the PassionCode.ai set current.",
40
40
  "author": {
41
41
  "name": "PassionCode.ai",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "family": "passioncode",
3
- "version": "0.2.61",
3
+ "version": "0.2.62",
4
4
  "release": true,
5
5
  "members": [
6
6
  {
@@ -62,9 +62,9 @@
62
62
  "name": "passioncode",
63
63
  "displayName": "PassionCode.ai",
64
64
  "repo": "passioncode-ai/passioncode",
65
- "ref": "v0.2.61",
65
+ "ref": "v0.2.62",
66
66
  "commit": null,
67
- "version": "0.2.61",
67
+ "version": "0.2.62",
68
68
  "via": "this repository",
69
69
  "skills": [
70
70
  "setting-up-passioncode",
@@ -72,7 +72,7 @@
72
72
  ],
73
73
  "legacyPluginIds": [],
74
74
  "legacyMarketplaces": [],
75
- "contentHash": "sha256:dd7944178aad8bd982956561df9a0bdc0be71ac2139bd8bcb948a5335ded8933",
75
+ "contentHash": "sha256:5675d12790395c5cf3777d55de9412ab40a8f929088dd3bba59936a0bcc5c3ff",
76
76
  "description": "Set up and check PassionCode.ai on a computer with one command (setting-up-passioncode), the organisation's working rules for every contributor's agent (working-in-passioncode), and a once-a-day check that keeps the PassionCode.ai set current.",
77
77
  "author": {
78
78
  "name": "PassionCode.ai",
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "passioncode",
4
4
  "displayName": "PassionCode.ai",
5
- "version": "0.2.61",
5
+ "version": "0.2.62",
6
6
  "description": "Set up and check PassionCode.ai on a computer with one command (setting-up-passioncode), the organisation's working rules for every contributor's agent (working-in-passioncode), and a once-a-day check at session start that keeps the PassionCode.ai skill set current.",
7
7
  "author": {
8
8
  "name": "PassionCode.ai",
@@ -34,7 +34,8 @@ npx --yes @passioncode-ai/passioncode@latest setup --yes --json
34
34
  - A healthy machine: an empty `actions` list, no `skipped`, exit 0. Running it again is always safe.
35
35
  - Exit 0: no step and no check failed; 1: a step or a check failed; 2: bad arguments. A plan
36
36
  (`planOnly: true`: `--dry-run`, or a run without `--yes` that would change something, since a
37
- `--json` run never asks) changes nothing and exits 0 even when a check fails: read
37
+ `--json` run never asks; a declined terminal run, `planOnly` with `declined: true`, exits by its checks) changes nothing and exits 0 even
38
+ when a check fails: read
38
39
  `after.summary` and `plan`, not the exit code alone. Exit 1 with no JSON on stdout is a runtime
39
40
  error: report its stderr line and the exit code.
40
41
  - Use `--with <ids>` / `--without <ids>` for a subset (`switchboard`, `dashboards`,
@@ -92,8 +93,8 @@ Then run `doctor --json` again and report the change.
92
93
 
93
94
  Reply in the person's language, briefly:
94
95
 
95
- 1. What was set up or repaired (from `actions`), what was skipped (from `skipped`, or the `plan` install items
96
- with `selected: false` when the run changed something), and the before → after counts.
96
+ 1. What was set up or repaired (from `actions`), what was skipped (from `skipped`, or, when there is no `skipped` (a plan,
97
+ or a run with any `actions`), the `plan` install items with `selected: false`), and the before → after counts.
97
98
  2. What still fails, each with its `fix`.
98
99
  3. **Your steps**: the numbered `humanSteps` you could not finish yourself: sign-ins, consents,
99
100
  secrets in hidden prompts, starting Docker, the restart.