create-pmos 0.513.0 → 0.514.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.513.0",
3
+ "version": "0.514.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": {
@@ -32,6 +32,19 @@
32
32
  "audit"
33
33
  ],
34
34
  "pmosChanges": [
35
+ {
36
+ "v": "0.514.0",
37
+ "at": "2026-11-03T16:19:12.685Z",
38
+ "f": 4,
39
+ "prs": [
40
+ {
41
+ "n": 1205,
42
+ "t": "Closed also reads the Done category and terminal stage names",
43
+ "s": "Closed also reads the Done category and terminal stage names",
44
+ "k": "fix"
45
+ }
46
+ ]
47
+ },
35
48
  {
36
49
  "v": "0.513.0",
37
50
  "at": "2026-11-03T15:46:14.696Z",
@@ -483,85 +496,6 @@
483
496
  "d": "Every new initiative needed its workflow chosen by hand. Now you star one in Settings and new work uses it."
484
497
  }
485
498
  ]
486
- },
487
- {
488
- "v": "0.494.0",
489
- "at": "2026-11-02T15:38:38.702Z",
490
- "f": 4,
491
- "prs": [
492
- {
493
- "n": 1156,
494
- "t": "A report change from the chat edits the existing draft in place",
495
- "s": "A report change from the chat edits the existing draft in place",
496
- "k": "fix",
497
- "h": "Report edits from chat change the draft",
498
- "d": "Asking the chat to change a report could start a new draft. Now it edits the draft you already have."
499
- },
500
- {
501
- "n": 1150,
502
- "t": "A report's chat icon opens its own conversation beside it",
503
- "s": "A report's chat icon opens its own conversation beside it",
504
- "k": "new",
505
- "h": "Talk about a report beside it",
506
- "d": "A report had no place of its own to discuss it. Now its chat icon opens a conversation next to the report."
507
- },
508
- {
509
- "n": 1149,
510
- "t": "Product groups use the product name, not the folder name",
511
- "s": "Product groups use the product name, not the folder name",
512
- "k": "fix",
513
- "h": "Products show their real names",
514
- "d": "Board groups showed the folder name of a product. Now they show the product's own name."
515
- },
516
- {
517
- "n": 1157,
518
- "t": "Weekly impact check as thank-you bubbles, counted by default",
519
- "s": "Weekly impact check as thank-you bubbles, counted by default",
520
- "k": "new",
521
- "h": "Your weekly impact, as thank-yous",
522
- "d": "The weekly impact check was easy to miss. Now it arrives as small thank-you bubbles and is counted by default."
523
- },
524
- {
525
- "n": 1158,
526
- "t": "Grill every initiative with open work, not only late work; Home says how many",
527
- "s": "Grill every initiative with open work, not only late work; Home says how many",
528
- "k": "fix",
529
- "h": "Every open initiative gets a grill",
530
- "d": "Claude only grilled initiatives that were late. Now it grills every initiative with open work, and Home says how many."
531
- },
532
- {
533
- "n": 1159,
534
- "t": "Pages open faster after a break and after a start",
535
- "s": "Pages open faster after a break and after a start",
536
- "k": "imp",
537
- "h": "Pages open faster",
538
- "d": "Pages were slow after a break or a fresh start. Now they open quicker in both cases."
539
- },
540
- {
541
- "n": 1161,
542
- "t": "A report template keeps its look and sections",
543
- "s": "A report template keeps its look and sections",
544
- "k": "new",
545
- "h": "Report templates keep their look",
546
- "d": "A report made from a template could lose the template's look and sections. Now it keeps both."
547
- },
548
- {
549
- "n": 1162,
550
- "t": "Finished report slides, the Pyramid deck",
551
- "s": "Finished report slides, the Pyramid deck",
552
- "k": "new",
553
- "h": "Finished report slides",
554
- "d": "Reports could not become a finished slide deck. Now a report can come out as clean slides in the Pyramid style."
555
- },
556
- {
557
- "n": 1160,
558
- "t": "Tighter phone initiative page, one 16 px inset",
559
- "s": "Tighter phone initiative page, one 16 px inset",
560
- "k": "new",
561
- "h": "A tidier initiative page on the phone",
562
- "d": "On a phone the initiative page had uneven edges. Now everything lines up on one even margin."
563
- }
564
- ]
565
499
  }
566
500
  ]
567
501
  }
@@ -1,3 +1,3 @@
1
- kernel-source: pmos@d90291c5
1
+ kernel-source: pmos@cdccf707
2
2
  assembled: 2026-11-03
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-11-03T15:46:12Z"}
5
+ generated: {by: process:create-pmos, at: "2026-11-03T16:19:09Z"}
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-11-03T15:46:12Z"}
5
+ generated: {by: process:create-pmos, at: "2026-11-03T16:19:09Z"}
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-11-03T15:46:12Z"}
5
+ generated: {by: process:create-pmos, at: "2026-11-03T16:19:09Z"}
6
6
  status: stable
7
7
  ---
8
8
 
@@ -1,4 +1,17 @@
1
1
  [
2
+ {
3
+ "v": "0.514.0",
4
+ "at": "2026-11-03T16:19:12.685Z",
5
+ "f": 4,
6
+ "prs": [
7
+ {
8
+ "n": 1205,
9
+ "t": "Closed also reads the Done category and terminal stage names",
10
+ "s": "Closed also reads the Done category and terminal stage names",
11
+ "k": "fix"
12
+ }
13
+ ]
14
+ },
2
15
  {
3
16
  "v": "0.513.0",
4
17
  "at": "2026-11-03T15:46:14.696Z",
@@ -477,15 +477,27 @@ const gapFields = (spans) => ({ gaps: holdSpans.planGaps(spans, 14), stageSpans:
477
477
  const minDay = (a, b) => (!a ? b || null : !b ? a : a < b ? a : b);
478
478
  const maxDay = (a, b) => (!a ? b || null : !b ? a : a > b ? a : b);
479
479
 
480
- /** batch 26 item 5: whether an initiative stands in its workflow's terminal stage, read from the workflow, never from a list of names. On a
481
- * D99 workflow: the stage is in the Done category, or it is the workflow's last stage. On a board's own column workflow: its last column. */
480
+ /** batch 26 item 5: whether an initiative stands in its workflow's terminal stage. Read from the workflow first: the stage is in the Done
481
+ * category, or it is the last stage (stages after it that only end work, such as Won't do or Cancelled, do not count). A stage the workflow
482
+ * does not hold (a Jira-read status such as "Closed") is terminal when its name says so, as tkStatus reads a ticket (done, closed, resolved,
483
+ * released). Follow-up (CAS rows still late after #1202): the board column branch ignored the Done category and any stage outside the list. */
484
+ const TERMINAL_RE = /\b(done|closed|resolved|released|complete|completed|finished)\b/i;
485
+ const END_RE = /\b(won'?t do|cancel+ed|archived|abandoned|dropped|rejected)\b/i;
486
+ const isDoneCat = (c) => String(c || '').toLowerCase() === 'done';
482
487
  function closedOf(row, wx) {
483
- if (wx.own) {
484
- const st = wx.stages.find((x) => x.key === wx.stage);
485
- return !!st && (st.cat === 'done' || (st.of > 1 && st.n === st.of));
488
+ const cur = (wx && wx.stages || []).find((x) => x.key === wx.stage);
489
+ if (cur && (wx.own || cur.name === row.stage)) {
490
+ if (isDoneCat(cur.cat) || (cur.of > 1 && cur.n === cur.of)) return true;
491
+ if (wx.own) return false;
486
492
  }
493
+ if (isDoneCat(row.cat)) return true;
487
494
  const wf = Array.isArray(row.workflow) ? row.workflow : [];
488
- return wf.length > 1 && wf.findIndex((x) => x.name === row.stage) === wf.length - 1;
495
+ const name = String(row.stage || '');
496
+ const i = wf.findIndex((x) => x && x.name === name);
497
+ if (i < 0) return TERMINAL_RE.test(name);
498
+ if (isDoneCat(wf[i].cat)) return true;
499
+ // the last stage, not counting the ones after it that only end work
500
+ return wf.length > 1 && wf.slice(i + 1).every((x) => END_RE.test(String(x && x.name || '')));
489
501
  }
490
502
  function boardRow(board, base, folded, lib) {
491
503
  const s = B.stageOf(board, base.id, base.reading, folded);
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pmos-workspace",
3
- "version": "0.513.0",
3
+ "version": "0.514.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pmos-workspace",
9
- "version": "0.513.0",
9
+ "version": "0.514.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@anthropic-ai/sdk": "^1.3.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmos-workspace",
3
- "version": "0.513.0",
3
+ "version": "0.514.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",