create-pmos 0.230.0 → 0.231.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-pmos",
3
- "version": "0.230.0",
3
+ "version": "0.231.0",
4
4
  "description": "Scaffold the PMOS portable kit — run the PMOS product-management workflow (initiative → lane-fit spec → contract → build → three gates, with work-type lanes for features, research, maintenance, incidents, and content) entirely inside your own repo, with all state as git-versioned files. Includes `workflow-sweep`, which audits the state every board derives from and separates real defects from work you simply have not done. `create-pmos workspace` also installs + launches the local Terminal Workspace GUI. No database, no network, no telemetry.",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -1,3 +1,3 @@
1
- kernel-source: pmos@19db06e
1
+ kernel-source: pmos@26c827f
2
2
  assembled: 2026-10-14
3
3
  mode: vendor
@@ -2,7 +2,7 @@
2
2
  type: Reference
3
3
  title: "Eval calibration log"
4
4
  description: "Append-only record of every PM override of an evaluator verdict."
5
- generated: {by: process:create-pmos, at: "2026-10-14T07:57:03Z"}
5
+ generated: {by: process:create-pmos, at: "2026-10-14T08:36:52Z"}
6
6
  status: stable
7
7
  ---
8
8
 
@@ -2,7 +2,7 @@
2
2
  type: Reference
3
3
  title: "Health budgets"
4
4
  description: "Closed registry of health-budget anchors (D59), edited only by the PM."
5
- generated: {by: process:create-pmos, at: "2026-10-14T07:57:03Z"}
5
+ generated: {by: process:create-pmos, at: "2026-10-14T08:36:52Z"}
6
6
  status: stable
7
7
  ---
8
8
 
@@ -2,7 +2,7 @@
2
2
  type: Reference
3
3
  title: "Discoveries and friction log"
4
4
  description: "Append-only record of what runs discovered and where the process rubbed."
5
- generated: {by: process:create-pmos, at: "2026-10-14T07:57:03Z"}
5
+ generated: {by: process:create-pmos, at: "2026-10-14T08:36:52Z"}
6
6
  status: stable
7
7
  ---
8
8
 
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+ /* lib/win-hide.js — on Windows, no console window for the commands the server runs.
3
+ *
4
+ * The server runs in the background with no console of its own (bin/pmos.js starts it detached and
5
+ * hidden). On Windows, a process with no console that starts a console program (git, claude, npm, cmd)
6
+ * gets a NEW console window for it, unless the call passes `windowsHide: true`. The server runs such
7
+ * commands all the time, so without this the PM sees windows open again and again.
8
+ *
9
+ * This makes `windowsHide: true` the default for every child_process call in this process. It must be
10
+ * required before any other module takes a reference to child_process (server.js requires it first),
11
+ * because `const { spawn } = require('child_process')` keeps the function it saw at that moment.
12
+ * A call that passes `windowsHide` itself keeps its own value. Elsewhere this does nothing.
13
+ */
14
+ const util = require('util');
15
+
16
+ function withHide(args) {
17
+ const a = [...args];
18
+ // The options object comes after the command and its optional argument list, before any callback.
19
+ const i = Array.isArray(a[1]) || (a[1] == null && a.length > 2) ? 2 : 1;
20
+ const o = a[i];
21
+ if (o && typeof o === 'object' && !Array.isArray(o)) {
22
+ if (o.windowsHide === undefined) a[i] = { ...o, windowsHide: true };
23
+ } else if (o == null && i < a.length) {
24
+ a[i] = { windowsHide: true };
25
+ } else {
26
+ a.splice(i, 0, { windowsHide: true });
27
+ }
28
+ return a;
29
+ }
30
+
31
+ function install(cp = require('child_process')) {
32
+ if (cp.__pmosWindowsHide) return cp;
33
+ for (const name of ['spawn', 'spawnSync', 'execFile', 'execFileSync', 'exec', 'execSync', 'fork']) {
34
+ const orig = cp[name];
35
+ if (typeof orig !== 'function') continue;
36
+ const wrapped = function (...args) { return orig.apply(this, withHide(args)); };
37
+ // util.promisify(execFile) resolves { stdout, stderr } through this hook; keep it, with the default.
38
+ const custom = orig[util.promisify.custom];
39
+ if (custom) wrapped[util.promisify.custom] = (...args) => custom(...withHide(args));
40
+ cp[name] = wrapped;
41
+ }
42
+ Object.defineProperty(cp, '__pmosWindowsHide', { value: true });
43
+ return cp;
44
+ }
45
+
46
+ if (process.platform === 'win32') install();
47
+
48
+ module.exports = { withHide, install };
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pmos-workspace",
3
- "version": "0.230.0",
3
+ "version": "0.231.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pmos-workspace",
9
- "version": "0.230.0",
9
+ "version": "0.231.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@xterm/addon-fit": "^0.11.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmos-workspace",
3
- "version": "0.230.0",
3
+ "version": "0.231.0",
4
4
  "private": true,
5
5
  "description": "PMOS Terminal Workspace — local companion hosting real PTYs beside the library and gates (D62)",
6
6
  "license": "MIT",
@@ -20,6 +20,8 @@
20
20
  * under state/ (the reconcile seam). Request headers are never logged (D08).
21
21
  */
22
22
  'use strict';
23
+ // Windows: hide the console window of every command the server runs. First, before anything holds child_process.
24
+ require('./lib/win-hide');
23
25
  // The workspace reads git in the background (repo-watch, git-info, claims), and a plain `git status` takes the index lock to
24
26
  // refresh the index. A press that writes, such as Sync's `git add`, then fails on `index.lock: File exists` when the two
25
27
  // meet. With optional locks off, the server's reads never take that lock. Set only when the PM has not set it, and taken back
@@ -0,0 +1,5 @@
1
+ {
2
+ "_comment": "one-line-setup: on Windows the background server hides the console window of every command it runs (lib/win-hide.js).",
3
+ "modules": ["win-hide.test.js"],
4
+ "seconds": { "win-hide.test.js": 1 }
5
+ }