@passioncode-ai/passioncode 0.2.56 → 0.2.58

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,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.58 - 2026-11-03
4
+
5
+ ### Fixed
6
+
7
+ - `help` says that exit code 0 also means only a plan was shown, and `docs/reference/cli.md` says
8
+ when a run without a terminal and without `--yes` is a plan: only when it would change something;
9
+ otherwise it exits by its checks (PC-100). The setup and doctor variant of "unsupported
10
+ arguments" is in the string registry. The help test now reads the flags setup parses by pattern
11
+ and the command aliases from the parser itself, and the string registry test requires each
12
+ location to hold the longest literal run of its text.
13
+
14
+ ## 0.2.57 - 2026-11-03
15
+
16
+ ### Fixed
17
+
18
+ - A terminal `setup` that declined every offer (PC-91) exits by its checks, 1 when a check still
19
+ fails, whether or not it named a release train (PC-93). Before, naming a train other than the
20
+ saved one made it exit 0 as a plan does, and otherwise it exited by its checks, though in both
21
+ the person changed nothing. A run that only returns a plan (`--dry-run`, or no terminal and no
22
+ `--yes` when it would change something) still exits 0.
23
+
3
24
  ## 0.2.56 - 2026-11-03
4
25
 
5
26
  ### Fixed
package/README.md CHANGED
@@ -108,8 +108,8 @@ does not answer is started through launchd (`launchctl kickstart`, never a kill)
108
108
 
109
109
  `doctor` changes nothing. It reads prerequisites, the skill set, each app's version, signature
110
110
  and team, each agent's MCP entries with one proving call per server, and the Fabric services of
111
- the family; each line names its state and its fix. Exit codes: **0** no check failed, **1** a
112
- check (or a setup step) failed, **2** bad arguments. `doctor --fix` runs setup's repairs without
111
+ the family; each line names its state and its fix. Exit codes: **0** no check failed (or `setup`
112
+ only showed its plan), **1** a check (or a setup step) failed, **2** bad arguments. `doctor --fix` runs setup's repairs without
113
113
  installing new apps. Details: the [CLI contract](docs/reference/cli.md#setup-and-doctor).
114
114
 
115
115
  **Release trains.** An organization's machines install one set of pinned app versions instead of
@@ -30,9 +30,10 @@ const HELP = `passioncode sets up and checks PassionCode.ai on this machine: the
30
30
 
31
31
  onboard is another name for setup, install for update. --offline skips the check for newer app
32
32
  releases; --quiet prints nothing when an update succeeds. App ids: switchboard, dashboards,
33
- observatory, inbox, fabric. Exit codes: 0 nothing failed, 1 a check or a step failed, 2 bad
34
- arguments. Claude Code gets plugins from the local "passioncode" marketplace; other agents get
35
- the same skills through ~/.agents/skills. Restart your agent after a change.`;
33
+ observatory, inbox, fabric. Exit codes: 0 nothing failed (or only a plan was shown), 1 a check
34
+ or a step failed, 2 bad arguments. Claude Code gets plugins from the local "passioncode"
35
+ marketplace; other agents get the same skills through ~/.agents/skills. Restart your agent after
36
+ a change.`;
36
37
 
37
38
  const IDS = ['switchboard', 'dashboards', 'observatory', 'inbox', 'fabric'];
38
39
 
@@ -93,7 +94,7 @@ async function setupOrDoctor(cmd, rest) {
93
94
  noOpen: o.flags.has('--no-open'), dryRun: o.flags.has('--dry-run'), repairOnly, online, ask: json ? null : asker(), log, train: o.train,
94
95
  });
95
96
  process.stdout.write(json ? JSON.stringify(r, null, 2) + '\n' : S.render(r, { repairOnly }) + '\n');
96
- return r.planOnly ? 0 : r.ok ? 0 : 1;
97
+ return S.exitCode(r);
97
98
  }
98
99
 
99
100
  async function main(argv) {
package/lib/setup.js CHANGED
@@ -283,6 +283,11 @@ function finish(result, home, checks) {
283
283
  return result;
284
284
  }
285
285
 
286
+ // The exit code of a setup or doctor --fix run. A plan exits 0 (nothing was agreed, nothing ran);
287
+ // a declined run (PC-91) is not a plan but the person's answer, so it exits by its checks like any
288
+ // run that changed nothing (PC-93): 1 when a check still fails, with or without a named train.
289
+ const exitCode = (r) => (r.planOnly && !r.declined ? 0 : r.ok ? 0 : 1);
290
+
286
291
  const DECLINED = 'You declined every offer; nothing was changed. The checks below still stand.';
287
292
  const notTaken = (names) => `Nothing was changed: ${names.join(' and ')} ${names.length > 1 ? 'were' : 'was'} offered and not installed. The checks below still stand.`;
288
293
 
@@ -331,4 +336,4 @@ function render(result, { repairOnly = false } = {}) {
331
336
  return lines.join('\n');
332
337
  }
333
338
 
334
- module.exports = { setup, plan, render };
339
+ module.exports = { setup, plan, render, exitCode };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@passioncode-ai/passioncode",
3
- "version": "0.2.56",
3
+ "version": "0.2.58",
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.56",
38
+ "version": "0.2.58",
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.56",
3
+ "version": "0.2.58",
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.56",
65
+ "ref": "v0.2.58",
66
66
  "commit": null,
67
- "version": "0.2.56",
67
+ "version": "0.2.58",
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:74cc82e781ba9b34e48e223ad2cb87c0e2d512d486cf1a204fbf08a2a95571cc",
75
+ "contentHash": "sha256:91ec6c72329e954bd6857f6759dd5fdaf062d686dcd7e5ef6571155589be3d22",
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.56",
5
+ "version": "0.2.58",
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",