create-pmos 0.493.0 → 0.495.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 +99 -27
- package/payload/KIT-VERSION +1 -1
- package/payload/planning/evals/eval-calibration.md +1 -1
- package/payload/planning/okrs/health-budgets.md +1 -1
- package/payload/state/discoveries.md +1 -1
- package/workspace/briefing-premium-adddoc-test.js +2 -1
- package/workspace/briefing-premium-board-test.js +5 -4
- package/workspace/briefing-premium-initiative-test.js +4 -2
- package/workspace/changelog.json +98 -0
- package/workspace/guide/briefing-premium.md +4 -1
- package/workspace/guide/claude-proposes.md +2 -2
- package/workspace/guide/data-freshness.md +3 -1
- package/workspace/guide/initiatives-screen.md +3 -1
- package/workspace/guide/report-slides.md +14 -1
- package/workspace/guide/reports.md +2 -0
- package/workspace/guide/workflows.md +15 -3
- package/workspace/guide/your-impact.md +6 -7
- package/workspace/ini-workflow-test.js +2 -1
- package/workspace/lib/board-trail.js +30 -3
- package/workspace/lib/engine/workflows.js +19 -6
- package/workspace/lib/git-shape.js +21 -0
- package/workspace/lib/grill-runs.js +21 -6
- package/workspace/lib/grill.js +1 -1
- package/workspace/lib/impact.js +29 -16
- package/workspace/lib/initiative-cli.js +15 -1
- package/workspace/lib/open-mission.js +14 -0
- package/workspace/lib/page-warm.js +68 -0
- package/workspace/lib/report-design.js +6 -1
- package/workspace/lib/report-export.js +150 -9
- package/workspace/lib/report-pyramid.js +535 -0
- package/workspace/lib/report-structure.js +5 -1
- package/workspace/lib/report-templates.js +111 -20
- package/workspace/lib/routes-boards.js +36 -3
- package/workspace/lib/routes-brief-page.js +21 -3
- package/workspace/lib/routes-grill.js +10 -4
- package/workspace/lib/routes-impact.js +12 -4
- package/workspace/lib/routes-initiatives.js +1 -0
- package/workspace/lib/routes-programs.js +6 -4
- package/workspace/lib/routes-report-design.js +15 -0
- package/workspace/lib/routes-report-flow.js +115 -19
- package/workspace/lib/routes-report-setups.js +4 -2
- package/workspace/lib/routes-report-structure.js +3 -0
- package/workspace/lib/routes-workflows.js +6 -1
- package/workspace/lib/wf-bridge.js +5 -3
- package/workspace/lib/workflow-cli.js +2 -2
- package/workspace/lib/workflows-store.js +15 -1
- package/workspace/metric-drafts-ui-test.js +2 -1
- package/workspace/package-lock.json +2 -2
- package/workspace/package.json +1 -1
- package/workspace/premium-board-actions-test.js +2 -1
- package/workspace/premium-chat-report-tab-test.js +5 -1
- package/workspace/premium-vw-backlog-test.js +3 -2
- package/workspace/premium-vw-item-test.js +3 -2
- package/workspace/premium-vw-jira-test.js +3 -2
- package/workspace/program-panel-test.js +2 -1
- package/workspace/public/pm/cozy-home.css +1 -0
- package/workspace/public/pm/cozy-vw-rp.css +12 -0
- package/workspace/public/pm/fetch-share.js +38 -0
- package/workspace/public/pm/home-app.js +24 -4
- package/workspace/public/pm/home-chat.js +53 -11
- package/workspace/public/pm/home-impact.css +23 -13
- package/workspace/public/pm/home-impact.js +49 -32
- package/workspace/public/pm/home-ini.css +2 -0
- package/workspace/public/pm/ini-view.css +55 -0
- package/workspace/public/pm/ini-view.js +7 -4
- package/workspace/public/pm/premium-board.js +1 -0
- package/workspace/public/pm/premium-insights.js +1 -0
- package/workspace/public/pm/premium-report-read.js +25 -6
- package/workspace/public/pm/premium-report-tab.js +69 -14
- package/workspace/public/pm/premium-shell.js +57 -6
- package/workspace/public/pm/premium.css +1 -0
- package/workspace/public/pm/report-flow.js +93 -10
- package/workspace/public/pm/wf-page.css +8 -0
- package/workspace/public/pm/wf-page.js +33 -5
- package/workspace/server.js +24 -3
- package/workspace/skills/report-template.skill +10 -0
- package/workspace/split-merge-ui-test.js +3 -2
- package/workspace/stage-card-test.js +2 -1
- package/workspace/task-press-test.js +2 -1
- package/workspace/test-lists/page-open-speed.json +5 -0
- package/workspace/test-lists/report-pyramid.json +9 -0
- package/workspace/tk-tasks-test.js +2 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-pmos",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.495.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,104 @@
|
|
|
32
32
|
"audit"
|
|
33
33
|
],
|
|
34
34
|
"pmosChanges": [
|
|
35
|
+
{
|
|
36
|
+
"v": "0.495.0",
|
|
37
|
+
"at": "2026-11-02T23:26:48.050Z",
|
|
38
|
+
"f": 3,
|
|
39
|
+
"prs": [
|
|
40
|
+
{
|
|
41
|
+
"n": 1164,
|
|
42
|
+
"t": "Report fixes from the live check of 0.494.0",
|
|
43
|
+
"s": "Report fixes from the live check of 0.494.0",
|
|
44
|
+
"k": "fix"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"n": 1167,
|
|
48
|
+
"t": "Keep a live New workflow draft on the Workflows list",
|
|
49
|
+
"s": "Keep a live New workflow draft on the Workflows list",
|
|
50
|
+
"k": "fix"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"n": 1166,
|
|
54
|
+
"t": "Initiative telemetry card starts collapsed (batch 24)",
|
|
55
|
+
"s": "Initiative telemetry card starts collapsed (batch 24)",
|
|
56
|
+
"k": "fix"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"n": 1168,
|
|
60
|
+
"t": "A sent chat message shows at once",
|
|
61
|
+
"s": "A sent chat message shows at once",
|
|
62
|
+
"k": "fix"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"n": 1169,
|
|
66
|
+
"t": "A default workflow, set with a star in Settings › Workflows (canvas DfA)",
|
|
67
|
+
"s": "A default workflow, set with a star in Settings › Workflows (canvas DfA)",
|
|
68
|
+
"k": "new"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"v": "0.494.0",
|
|
74
|
+
"at": "2026-11-02T15:32:51.920Z",
|
|
75
|
+
"f": 3,
|
|
76
|
+
"prs": [
|
|
77
|
+
{
|
|
78
|
+
"n": 1156,
|
|
79
|
+
"t": "A report change from the chat edits the existing draft in place",
|
|
80
|
+
"s": "A report change from the chat edits the existing draft in place",
|
|
81
|
+
"k": "fix"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"n": 1150,
|
|
85
|
+
"t": "A report's chat icon opens its own conversation beside it",
|
|
86
|
+
"s": "A report's chat icon opens its own conversation beside it",
|
|
87
|
+
"k": "new"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"n": 1149,
|
|
91
|
+
"t": "Product groups use the product name, not the folder name",
|
|
92
|
+
"s": "Product groups use the product name, not the folder name",
|
|
93
|
+
"k": "fix"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"n": 1157,
|
|
97
|
+
"t": "Weekly impact check as thank-you bubbles, counted by default (batch 23 item 4)",
|
|
98
|
+
"s": "Weekly impact check as thank-you bubbles, counted by default (batch 23 item 4)",
|
|
99
|
+
"k": "new"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"n": 1158,
|
|
103
|
+
"t": "Grill every initiative with open work, not only late work; Home says how many",
|
|
104
|
+
"s": "Grill every initiative with open work, not only late work; Home says how many",
|
|
105
|
+
"k": "fix"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"n": 1159,
|
|
109
|
+
"t": "Pages open faster after a break and after a start",
|
|
110
|
+
"s": "Pages open faster after a break and after a start",
|
|
111
|
+
"k": "imp"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"n": 1161,
|
|
115
|
+
"t": "A report template keeps its look and sections (canvas TplA)",
|
|
116
|
+
"s": "A report template keeps its look and sections (canvas TplA)",
|
|
117
|
+
"k": "new"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"n": 1162,
|
|
121
|
+
"t": "Finished report slides, the Pyramid deck (canvas RsA)",
|
|
122
|
+
"s": "Finished report slides, the Pyramid deck (canvas RsA)",
|
|
123
|
+
"k": "new"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"n": 1160,
|
|
127
|
+
"t": "Tighter phone initiative page, one 16 px inset (batch 23 item 5)",
|
|
128
|
+
"s": "Tighter phone initiative page, one 16 px inset (batch 23 item 5)",
|
|
129
|
+
"k": "new"
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
},
|
|
35
133
|
{
|
|
36
134
|
"v": "0.493.0",
|
|
37
135
|
"at": "2026-11-02T14:33:09.369Z",
|
|
@@ -269,32 +367,6 @@
|
|
|
269
367
|
"k": "new"
|
|
270
368
|
}
|
|
271
369
|
]
|
|
272
|
-
},
|
|
273
|
-
{
|
|
274
|
-
"v": "0.475.0",
|
|
275
|
-
"at": "2026-11-01T06:12:23.972Z",
|
|
276
|
-
"f": 3,
|
|
277
|
-
"prs": [
|
|
278
|
-
{
|
|
279
|
-
"n": 1110,
|
|
280
|
-
"t": "Set up a project from the Cozy Home in one guided conversation",
|
|
281
|
-
"s": "Set up a project from the Cozy Home in one guided conversation",
|
|
282
|
-
"k": "new"
|
|
283
|
-
}
|
|
284
|
-
]
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
"v": "0.474.0",
|
|
288
|
-
"at": "2026-11-01T01:28:22.776Z",
|
|
289
|
-
"f": 3,
|
|
290
|
-
"prs": [
|
|
291
|
-
{
|
|
292
|
-
"n": 1129,
|
|
293
|
-
"t": "A published copy keeps the Tasks section when a stage holds a note",
|
|
294
|
-
"s": "A published copy keeps the Tasks section when a stage holds a note",
|
|
295
|
-
"k": "fix"
|
|
296
|
-
}
|
|
297
|
-
]
|
|
298
370
|
}
|
|
299
371
|
]
|
|
300
372
|
}
|
package/payload/KIT-VERSION
CHANGED
|
@@ -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-
|
|
5
|
+
generated: {by: process:create-pmos, at: "2026-11-02T23:26:44Z"}
|
|
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-
|
|
5
|
+
generated: {by: process:create-pmos, at: "2026-11-02T23:26:44Z"}
|
|
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-
|
|
5
|
+
generated: {by: process:create-pmos, at: "2026-11-02T23:26:44Z"}
|
|
6
6
|
status: stable
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
const path = require('path');
|
|
7
7
|
const { spawn } = require('child_process');
|
|
8
8
|
const { findBrowser } = require('./lib/find-browser');
|
|
9
|
+
const { openMission } = require('./lib/open-mission');
|
|
9
10
|
const T = require('./test-run').configure({ name: 'briefing-premium-adddoc' });
|
|
10
11
|
const BP = require('./lib/board-premium.js');
|
|
11
12
|
const IP = require('./lib/initiative-premium.js');
|
|
@@ -49,7 +50,7 @@ const PAGES = {
|
|
|
49
50
|
|
|
50
51
|
const open = async (kind, { w = 1280, h = 900, theme = 'light', custom = [], add = { status: 200, body: { ok: true } } } = {}) => {
|
|
51
52
|
const P = PAGES[kind];
|
|
52
|
-
const ctx = await browser.newContext({ viewport: { width: w, height: h } });
|
|
53
|
+
const ctx = await openMission(await browser.newContext({ viewport: { width: w, height: h } }));
|
|
53
54
|
if (kind === 'board') await ctx.addInitScript(() => { try { localStorage.setItem('pmos.premium.openAs', 'popup'); } catch { /* none */ } });
|
|
54
55
|
const page = await ctx.newPage();
|
|
55
56
|
let current = custom, calls = 0, reply = add; const errors = [], posts = [];
|
|
@@ -16,6 +16,7 @@ const fs = require('fs');
|
|
|
16
16
|
const path = require('path');
|
|
17
17
|
const { spawn } = require('child_process');
|
|
18
18
|
const { findBrowser } = require('./lib/find-browser');
|
|
19
|
+
const { openMission } = require('./lib/open-mission');
|
|
19
20
|
const T = require('./test-run').configure({ name: 'briefing-premium-board' });
|
|
20
21
|
const BP = require('./lib/board-premium.js');
|
|
21
22
|
const F = require('./fixtures/board-premium-facts.js');
|
|
@@ -79,7 +80,7 @@ const IVREAD = () => {
|
|
|
79
80
|
browser = await chromium.launch({ executablePath: exe });
|
|
80
81
|
|
|
81
82
|
const open = async ({ w = 1440, h = 900, theme = 'light', model = mk(), answers = null, trail = null, qs = '', slowSheet = 0 } = {}) => {
|
|
82
|
-
const ctx = await browser.newContext({ viewport: { width: w, height: h } });
|
|
83
|
+
const ctx = await openMission(await browser.newContext({ viewport: { width: w, height: h } }));
|
|
83
84
|
const page = await ctx.newPage();
|
|
84
85
|
if (slowSheet) await page.route('**/pm/cozy-panels.css', async (r) => { await new Promise((ok) => setTimeout(ok, slowSheet)); r.continue(); }); // the panels sheet lands after the first Viewer
|
|
85
86
|
let current = model, calls = 0; const errors = [], posts = []; let answer = { status: 200, body: { ok: true } }; let thread = { ok: true, turns: [], working: false };
|
|
@@ -417,13 +418,13 @@ const IVREAD = () => {
|
|
|
417
418
|
|
|
418
419
|
/* B2 reading and failure */
|
|
419
420
|
{
|
|
420
|
-
const ctx = await browser.newContext({ viewport: { width: 1280, height: 900 } }), pg = await ctx.newPage(); let calls = 0;
|
|
421
|
+
const ctx = await openMission(await browser.newContext({ viewport: { width: 1280, height: 900 } })), pg = await ctx.newPage(); let calls = 0;
|
|
421
422
|
await pg.route('**/api/board-premium*', (r) => { calls++; if (calls < 2) return r.fulfill({ status: 202, contentType: 'application/json', body: JSON.stringify({ ok: true, state: 'reading' }) }); return r.fulfill({ contentType: 'application/json', body: JSON.stringify({ ok: true, state: 'ready', model: mk(), as_of: Date.now() }) }); });
|
|
422
423
|
await pg.goto(BASE + '/premium-board.html');
|
|
423
424
|
ok('B2 while the board is read the page says so, with the seconds, and shows no row instead of a guess', await until(() => pg.evaluate(() => /Reading the board · \d+ s so far/.test(document.querySelector('#snap').textContent) && document.querySelectorAll('#ibBody .ini2').length === 0 && /shows nothing until it has read/.test(document.querySelector('#ibBody').textContent)), 4000));
|
|
424
425
|
ok('B2 it asks again and draws when the answer is ready', await until(() => pg.evaluate(() => document.querySelectorAll('#ibBody .ini2').length === 7 && /^Real data/.test(document.querySelector('#snap').textContent)), 9000));
|
|
425
426
|
await ctx.close();
|
|
426
|
-
const c2 = await browser.newContext({ viewport: { width: 1280, height: 900 } }), p2 = await c2.newPage();
|
|
427
|
+
const c2 = await openMission(await browser.newContext({ viewport: { width: 1280, height: 900 } })), p2 = await c2.newPage();
|
|
427
428
|
await p2.route('**/api/board-premium*', (r) => r.fulfill({ status: 500, contentType: 'application/json', body: JSON.stringify({ ok: false, state: 'error', error: 'the board could not be read' }) }));
|
|
428
429
|
await p2.goto(BASE + '/premium-board.html');
|
|
429
430
|
ok('B2 a failed read says why and draws nothing', await until(() => p2.evaluate(() => /The reason: the board could not be read/.test((document.querySelector('#ibBody .bd-msg') || {}).textContent || '') && document.querySelectorAll('#ibBody .ini2').length === 0), 4000));
|
|
@@ -567,7 +568,7 @@ const IVREAD = () => {
|
|
|
567
568
|
ok('E3 the real model has the eight steps and a track on every row', !!m && m.steps.length === 8 && m.initiatives.list.rows.every((r) => r.track && typeof r.track.k === 'number'));
|
|
568
569
|
const post = await fetch(BASE + '/api/board-premium', { method: 'POST', headers: await T.pressHeaders(BASE), body: '{}' }).then((r) => r.status);
|
|
569
570
|
ok('E4 the model route is read-only', post === 405, String(post));
|
|
570
|
-
const ctx = await browser.newContext({ viewport: { width: 1280, height: 900 } }), pg = await ctx.newPage(), errs = [];
|
|
571
|
+
const ctx = await openMission(await browser.newContext({ viewport: { width: 1280, height: 900 } })), pg = await ctx.newPage(), errs = [];
|
|
571
572
|
pg.on('pageerror', (e) => errs.push(String(e)));
|
|
572
573
|
await pg.goto(BASE + '/premium-board.html');
|
|
573
574
|
ok('E5 the real page draws this repository\'s board and its count agrees with the route', await until(() => pg.evaluate((n) => document.querySelectorAll('#ibBody .ini2').length > 0 && document.querySelector('#nIni').textContent === n, String(m.initiatives.open || m.initiatives.list.rows.length)), 30000));
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
const path = require('path');
|
|
14
14
|
const { spawn } = require('child_process');
|
|
15
15
|
const { findBrowser } = require('./lib/find-browser');
|
|
16
|
+
const { openMission } = require('./lib/open-mission');
|
|
16
17
|
const T = require('./test-run').configure({ name: 'briefing-premium-initiative' });
|
|
17
18
|
const IP = require('./lib/initiative-premium.js');
|
|
18
19
|
const F = require('./fixtures/initiative-premium-facts.js');
|
|
@@ -52,7 +53,7 @@ const WRITES = /^\/api\/(?:boards\/(?:move|tasks\/(?:add|state))|lifecycle|core-
|
|
|
52
53
|
browser = await chromium.launch({ executablePath: exe });
|
|
53
54
|
|
|
54
55
|
const open = async ({ w = 1280, h = 900, theme = 'light', model = mk(), answers = null, url = '/premium.html?ini=self-serve-v2&ws=w1&board=w1' } = {}) => {
|
|
55
|
-
const ctx = await browser.newContext({ viewport: { width: w, height: h } });
|
|
56
|
+
const ctx = await openMission(await browser.newContext({ viewport: { width: w, height: h } }));
|
|
56
57
|
const page = await ctx.newPage();
|
|
57
58
|
let current = model, calls = 0, answer = { status: 200, body: { ok: true } };
|
|
58
59
|
const errors = [], posts = [];
|
|
@@ -260,12 +261,13 @@ const WRITES = /^\/api\/(?:boards\/(?:move|tasks\/(?:add|state))|lifecycle|core-
|
|
|
260
261
|
const cs = (s) => { const e = document.querySelector(s); return e ? getComputedStyle(e) : null; };
|
|
261
262
|
const fab = document.querySelector('#czFab'), fr = fab && fab.getBoundingClientRect();
|
|
262
263
|
const c = document.querySelector('#czViewer .iv-tel').getBoundingClientRect();
|
|
263
|
-
return { font: cs('body').fontFamily, cta: (cs('#czViewer .iv-go') || {}).backgroundColor, ctaAlt: !document.querySelector('#czViewer .iv-go'), solid: tok('--cz-solid'), blue: tok('--cz-blue'), well: tok('--cz-well'), card: tok('--cz-card'), box: cs('#czViewer .iv-mc').backgroundColor, rad: parseFloat(cs('#czViewer .iv-mc').borderTopLeftRadius), fab: fr ? [Math.round(fr.width), Math.round(fr.height)] : null, over: document.documentElement.scrollWidth - innerWidth, cardW: Math.round(c.width) };
|
|
264
|
+
return { font: cs('body').fontFamily, cta: (cs('#czViewer .iv-go') || {}).backgroundColor, ctaAlt: !document.querySelector('#czViewer .iv-go'), solid: tok('--cz-solid'), blue: tok('--cz-blue'), well: tok('--cz-well'), card: tok('--cz-card'), box: cs('#czViewer .iv-mc').backgroundColor, rad: parseFloat(cs(innerWidth <= 760 ? '#czViewer .iv-tel' : '#czViewer .iv-mc').borderTopLeftRadius), fab: fr ? [Math.round(fr.width), Math.round(fr.height)] : null, over: document.documentElement.scrollWidth - innerWidth, cardW: Math.round(c.width) };
|
|
264
265
|
});
|
|
265
266
|
const d = [];
|
|
266
267
|
if (!/^Nunito/.test(g.font)) d.push('font ' + g.font);
|
|
267
268
|
if (!g.ctaAlt && ![g.solid, g.blue].includes(g.cta)) d.push('cta ' + g.cta + ' want ' + g.solid + ' or ' + g.blue);
|
|
268
269
|
if (![g.well, g.card].includes(g.box) && !/rgba/.test(g.box)) d.push('card box ' + g.box);
|
|
270
|
+
// a phone has no wrapper card (batch 23 item 5, canvas PmA): the mission is the first card there
|
|
269
271
|
if (g.rad < 12) d.push('card radius ' + g.rad);
|
|
270
272
|
// on a phone the initiative's page is the Viewer, full screen over the list: the floating menu waits under it (HbCPhone)
|
|
271
273
|
if (w > 760 && (!g.fab || g.fab[0] !== 56 || g.fab[1] !== 56)) d.push('fab ' + JSON.stringify(g.fab));
|
package/workspace/changelog.json
CHANGED
|
@@ -1,4 +1,102 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"v": "0.495.0",
|
|
4
|
+
"at": "2026-11-02T23:26:48.050Z",
|
|
5
|
+
"f": 3,
|
|
6
|
+
"prs": [
|
|
7
|
+
{
|
|
8
|
+
"n": 1164,
|
|
9
|
+
"t": "Report fixes from the live check of 0.494.0",
|
|
10
|
+
"s": "Report fixes from the live check of 0.494.0",
|
|
11
|
+
"k": "fix"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"n": 1167,
|
|
15
|
+
"t": "Keep a live New workflow draft on the Workflows list",
|
|
16
|
+
"s": "Keep a live New workflow draft on the Workflows list",
|
|
17
|
+
"k": "fix"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"n": 1166,
|
|
21
|
+
"t": "Initiative telemetry card starts collapsed (batch 24)",
|
|
22
|
+
"s": "Initiative telemetry card starts collapsed (batch 24)",
|
|
23
|
+
"k": "fix"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"n": 1168,
|
|
27
|
+
"t": "A sent chat message shows at once",
|
|
28
|
+
"s": "A sent chat message shows at once",
|
|
29
|
+
"k": "fix"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"n": 1169,
|
|
33
|
+
"t": "A default workflow, set with a star in Settings › Workflows (canvas DfA)",
|
|
34
|
+
"s": "A default workflow, set with a star in Settings › Workflows (canvas DfA)",
|
|
35
|
+
"k": "new"
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"v": "0.494.0",
|
|
41
|
+
"at": "2026-11-02T15:32:51.920Z",
|
|
42
|
+
"f": 3,
|
|
43
|
+
"prs": [
|
|
44
|
+
{
|
|
45
|
+
"n": 1156,
|
|
46
|
+
"t": "A report change from the chat edits the existing draft in place",
|
|
47
|
+
"s": "A report change from the chat edits the existing draft in place",
|
|
48
|
+
"k": "fix"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"n": 1150,
|
|
52
|
+
"t": "A report's chat icon opens its own conversation beside it",
|
|
53
|
+
"s": "A report's chat icon opens its own conversation beside it",
|
|
54
|
+
"k": "new"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"n": 1149,
|
|
58
|
+
"t": "Product groups use the product name, not the folder name",
|
|
59
|
+
"s": "Product groups use the product name, not the folder name",
|
|
60
|
+
"k": "fix"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"n": 1157,
|
|
64
|
+
"t": "Weekly impact check as thank-you bubbles, counted by default (batch 23 item 4)",
|
|
65
|
+
"s": "Weekly impact check as thank-you bubbles, counted by default (batch 23 item 4)",
|
|
66
|
+
"k": "new"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"n": 1158,
|
|
70
|
+
"t": "Grill every initiative with open work, not only late work; Home says how many",
|
|
71
|
+
"s": "Grill every initiative with open work, not only late work; Home says how many",
|
|
72
|
+
"k": "fix"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"n": 1159,
|
|
76
|
+
"t": "Pages open faster after a break and after a start",
|
|
77
|
+
"s": "Pages open faster after a break and after a start",
|
|
78
|
+
"k": "imp"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"n": 1161,
|
|
82
|
+
"t": "A report template keeps its look and sections (canvas TplA)",
|
|
83
|
+
"s": "A report template keeps its look and sections (canvas TplA)",
|
|
84
|
+
"k": "new"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"n": 1162,
|
|
88
|
+
"t": "Finished report slides, the Pyramid deck (canvas RsA)",
|
|
89
|
+
"s": "Finished report slides, the Pyramid deck (canvas RsA)",
|
|
90
|
+
"k": "new"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"n": 1160,
|
|
94
|
+
"t": "Tighter phone initiative page, one 16 px inset (batch 23 item 5)",
|
|
95
|
+
"s": "Tighter phone initiative page, one 16 px inset (batch 23 item 5)",
|
|
96
|
+
"k": "new"
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
},
|
|
2
100
|
{
|
|
3
101
|
"v": "0.493.0",
|
|
4
102
|
"at": "2026-11-02T14:33:09.369Z",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
type: Guide
|
|
3
3
|
title: "The premium Briefing (/premium.html)"
|
|
4
4
|
description: "The Briefing page at /premium.html: the hero sentence, What you need to do, Today, the dock, and what each one reads from the repository."
|
|
5
|
-
timestamp: 2026-11-
|
|
5
|
+
timestamp: 2026-11-02
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# The premium Briefing
|
|
@@ -435,6 +435,7 @@ Every popup has this chat, including the ones that have no row of their own: a t
|
|
|
435
435
|
|
|
436
436
|
- **Your first message** in a dialog starts one session for that row, the page or the initiative, in its repository. Claude gets the row as the page shows it: the title, what the page says, the facts and the files to start from. Then it gets your words.
|
|
437
437
|
- **The message box** takes several lines. **Enter** sends; **Shift+Enter** starts a new line. The box grows as you type, up to about eight lines, and then scrolls. The send button stays at its foot, also with a phone keyboard open.
|
|
438
|
+
- **Your message shows at once.** When you send, the box empties and your message appears in the chat straight away, a little lighter with **Sending…** until PMOS takes it, then with **You · HH:MM**. If the message could not be sent, it leaves the chat and your words go back in the box, so you can send them again. This is the same in every chat: Home, an initiative, a new workflow, and the Board and Intelligence chat.
|
|
438
439
|
- **Later messages** in the same dialog go to the same session. Write `/compact`, `/clear` or any other slash command, and Claude Code runs it.
|
|
439
440
|
- **What it may do** is set by your own Claude Code settings. Claude can change files and run commands. When your settings say to ask first, the question shows in the panel with its options; press one to answer.
|
|
440
441
|
- **Claude's questions** show as a card in the conversation. Claude Code's question picker cannot show in the panel, so the session does not open it: the card shows each question with its options as buttons. Press an option to answer a single question. When Claude asks several questions, or a question takes more than one answer, press the options and then **Send answers**. You can also write your own answer in the box. A session that started before this change still opens the picker: end it in the session list, and your next message resumes the same conversation without it.
|
|
@@ -460,7 +461,9 @@ Any chat can become a report. There is no button for it: say it in the chat, for
|
|
|
460
461
|
- **A new report** asks a few questions first, and Claude's picks are filled in: **Format**, **Readers**, **Goes out** (**Once** or **Repeats**, with how often, the day and the time), **Look** (the standard PMOS look, 16:9 slides) and **Sources**. The chip under Claude's answer says **Answer a few questions, then Draft it**. Change any answer, then press **Draft it**. Nothing goes out. That press records the report and its first template (T1), and the report drafts in its own session, not in your chat. While it drafts, the tab says so. If the session ends with no draft, **Draft it again** starts it again.
|
|
461
462
|
- **The report's current state.** When a report is set up, the chip under Claude's answer says **Open the report**, and the tab opens its latest draft in the reader. Under a draft that is not issued, Claude's review reads it as your readers would and lists what to fix, in the ✦ pattern: **Do it** passes one fix to the report's own session, **Do all** passes them all, and **Not now** hides one. The checks that found nothing are named under it. There is no score.
|
|
462
463
|
- **A change from the chat.** Ask for a change to the draft in the chat, for example "use 30 Jun on both slides". The chip says **Change to the draft** and passes it to the report's own session. Your chat does not draft the report.
|
|
464
|
+
- **Talk to Claude about the report.** The chat icon in the reader's header, beside the template icon, opens the report's own conversation in Home's chat, with the report beside it (on a phone the chat takes the page). Claude knows which report and draft it is. Say what to change, then press the chip to pass it to the report's session; the draft beside the chat changes. From another page the icon takes you to Home.
|
|
463
465
|
- **Template versions.** The template icon in the reader's header opens the questions with the current answers. A changed answer is marked and said in words, for example "Format: Slides → Document". **Make a different template** saves it as the next version (T2, T3, …), and **Keep the current template** leaves it. **Template history** lists each version with the cycles issued under it, and **Go back** makes an earlier one current. Nothing is deleted. **Sections, look and cycles** opens the structure, the design and the cycles below.
|
|
466
|
+
- **A template keeps its sections and look.** Each version also holds the report's **Sections** (shown as chips, in order) and its **Look** (a small title slide, its name and the sample it follows). To change them, ask in the chat. Sections you name, or a look Claude made from your words, wait in the template as one ✦ **Make T4**, with the change in words (for example "Sections: + Customers" and "Look: D1 → D2") and a **changed** tag on each row. Press ✕ to drop it or ✓ to make it. Nothing is saved before ✓, and the open draft stays as it is. Each earlier version says what **Go back** restores: format, readers, schedule, sections and look. Cycles already made keep the look they were made with. Saving sections or a look in **Sections, look and cycles** also makes a new version.
|
|
464
467
|
- **A goal with a report in it.** When a goal names a report, that point counts only when you issue the report. If only report points are open, the goal waits for you to issue it.
|
|
465
468
|
- **Your own sections.** Name them in the chat, for example "use these sections: Decision question; Current position; Options and recommendation; Open items; Sources". The tab shows them as the slides. ✓ saves them as the report's structure (S1), and the first draft follows them. Your first section is the report's lead, the one before Sources holds the asks to the readers, and Sources is always last. If you describe a change without a list, **Structure and look** shows the change: the first draft uses the seven standard sections, Claude starts the change right after ✓, and **Use this** keeps it. When you press **Use this**, Claude writes the draft again with the new sections.
|
|
466
469
|
- **A look to follow.** Say how the report should look, or name a file for it to follow, such as your draft deck (a PDF, PowerPoint, Word file or picture). **Structure and look** shows **Look** with the file's name. After ✓, Claude adds the file as the look's sample and makes the look from it.
|
|
@@ -60,13 +60,13 @@ Claude also tests an initiative without being asked. There is no Grill button an
|
|
|
60
60
|
- before it leaves a stage (the stage has one open task or none left),
|
|
61
61
|
- when its forecast turns at risk or will miss,
|
|
62
62
|
- when its scope or dates move a lot (30% more or fewer tasks, or the end moves 14 days or more),
|
|
63
|
-
- once a month,
|
|
63
|
+
- once a month, every running initiative that has open tasks: the ones with late work first, then the ones it grilled longest ago. Each one at most once in 30 days, and only while the monthly credit lasts.
|
|
64
64
|
|
|
65
65
|
You can also start one any time: in the initiative's chat, write "grill this" (or "grill it"). The run starts at once in the background, and the chat says so in one line. If it cannot start, for example because another grill is running or this month's credit is spent, the chat says why. The findings arrive under the ✦ as for the other runs.
|
|
66
66
|
|
|
67
67
|
Each finding is a proposal in the group "Claude grilled it", under the same ✦. Each row shows the mark and the name of the angle that found it: Premortem, Red team, Voices, Reframe, Scope or What-if. Voices are simulated from your stored research and meeting notes, only with 3 sources or more, and carry the tag "Simulated, not evidence". A What-if carries "Simulated, not the plan". Each finding ends with one next step. ✓ adds that step as a task. ✎ lets you write the step in your own words first; ✓ then adds your words. ✕ drops the finding. A finding never rides on the header's ✓. Above the findings, one quiet line names the angles Claude chose, when and why it ran, and what the run cost. Three findings show at a time; "+N smaller findings" and its ⋯ show the rest. On a phone the findings are cards side by side: swipe for the next. With no findings, nothing shows.
|
|
68
68
|
|
|
69
|
-
When Claude grilled an initiative this week and left findings, Home says so in one line under "Good morning", and its ✦ opens the findings. When a key result will miss its goal, or drifted to at risk, Intelligence's ✦ line names it and the initiative Claude grilled for it; its ✦ opens those findings.
|
|
69
|
+
When Claude grilled an initiative this week and left findings, Home says so in one line under "Good morning", and its ✦ opens the findings. When it grilled more than one, the line names the newest and says how many more, for example "I grilled Inline login and 5 more this week: 21 findings." The others' findings are under each initiative's own ✦. When a key result will miss its goal, or drifted to at risk, Intelligence's ✦ line names it and the initiative Claude grilled for it; its ✦ opens those findings.
|
|
70
70
|
|
|
71
71
|
Every run counts against a monthly credit cap. A run starts only when the cap holds its whole budget, and it stops at that budget, so the month never goes past the cap. At the cap Claude pauses until the next month.
|
|
72
72
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: Guide
|
|
3
3
|
title: "Data freshness: how the workspace keeps up to date, and how old each source is"
|
|
4
|
-
timestamp: 2026-
|
|
4
|
+
timestamp: 2026-11-02
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Data freshness
|
|
@@ -109,6 +109,8 @@ A refresh waits for the sources it uses. The briefing waits for work assigned to
|
|
|
109
109
|
- A schedule you never changed moves to the new default once (quick reads every 30 or 60 minutes in working hours). A schedule you picked stays as it is.
|
|
110
110
|
- **One server runs the schedules.** When several PMOS servers run on one computer (for example an npm install and a checkout), only one of them runs the schedules and starts background runs; the others serve pages only. If that server stops, another one takes over within 3 minutes. A refresh you press runs on the server where you press it.
|
|
111
111
|
- **Quiet start**: a server starts no background run in its first 5 minutes, so the first pages load quickly. A missed refresh catches up after that.
|
|
112
|
+
- **Warm start**: 5 seconds after PMOS starts, it reads what Home and the Board show once, so your first page opens as fast as later ones. This read writes nothing you would see as read or seen. `PMOS_WARM=off` turns it off.
|
|
113
|
+
- **Fresh answers, asked once**: when two parts of a page ask for the same thing at the same moment, the server is asked once and both get the same answer. Nothing is kept after it arrives, so the next look always reads again.
|
|
112
114
|
|
|
113
115
|
### The refresh log
|
|
114
116
|
|
|
@@ -19,7 +19,9 @@ An open initiative uses one column. At its top is the **mission**: one panel wit
|
|
|
19
19
|
- **To finish this stage.** It shows how many tasks of the stage are done, the stage's open milestone tasks with their dates, and the move to the next stage. The move is blue only when every task of the stage is done and nothing waits on you. At other times it is quiet. Under the rows are the owner, the stakeholders, the workflow and the program. On a wide screen this part stands beside the telemetry card.
|
|
20
20
|
- **About.** It has the description and the success measure. The description is the first paragraph of the PRD's Problem section. Press **Show more** to read all of it, or **Open the PRD** to open the file. The success measure is the one Claude drafts. A proposal opens About until you press its check mark. A kept measure shows each row with its now value and its target. When there is no description or no measure, About gives you a link that asks Claude in Home to write it.
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
When you open an initiative, the three parts are hidden at first and only a banner shows: the stage, the dates, the days left, the count of tasks done, the success measure and the move to the next stage. Press the arrow on the banner to show the telemetry card first. Press the arrow on the telemetry card to hide all three parts again. **To finish this stage** and **About** each have their own arrow, and they stay as you left them when you hide and show the mission. The workspace keeps these choices for each initiative in this browser. On a phone, the first screen shows **To finish this stage** and **About** closed.
|
|
23
|
+
|
|
24
|
+
On a phone, the page uses one 16 px margin and has no grey panel around the mission. The telemetry card is shorter: the stage name is on the first line, and the dates, **Time left** and **Elapsed** are on the next line, so the picture does not repeat the Today label. **To finish this stage** and **About** are one white card. The first row shows the next stage and the count of tasks done. Its round arrow opens the move sheet. The second row shows the owner, the stakeholders, the workflow and the program. The third row is **About**. In Tasks, the rows start near the card's edge, and the late and open counts of a stage are on the same line as its dates.
|
|
23
25
|
|
|
24
26
|
Tasks has no **Full width** icon: use the split panel to make the Viewer wider. On a phone, Tasks is a list only. The workspace keeps a Timeline or Kanban view that you chose on a larger screen, and shows it again there.
|
|
25
27
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
type: Guide
|
|
3
3
|
title: "Report slides: present and print a report"
|
|
4
4
|
description: "How the Reports page shows a report as the PM-OS biweekly slides, how to present and print them, and how your notes become the words on the slides."
|
|
5
|
-
timestamp: 2026-
|
|
5
|
+
timestamp: 2026-11-02
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Report slides
|
|
@@ -27,4 +27,17 @@ The type is Launch, Improvement, Fix, Security, Deprecation or Beta. To give an
|
|
|
27
27
|
|
|
28
28
|
A draft from before the slides has no slides block. Press **Redraft** to add it. Your notes stay as you wrote them.
|
|
29
29
|
|
|
30
|
+
## The finished slides in the report viewer
|
|
31
|
+
|
|
32
|
+
When you open a drafted report in the viewer, the **Slides** view shows the finished deck. The answer comes first, and the title of each slide is a finding. Read only the titles and you have the story:
|
|
33
|
+
|
|
34
|
+
1. **Title**: the answer. This is the first sentence of your `report.headline` note when you wrote one, so write the answer first. A long sentence is cut so that it fits. If there is no note, PMOS writes a sentence that says which initiatives are off plan.
|
|
35
|
+
2. **The answer**: one sentence, then the rest of the first paragraph of your headline note, and up to three supports, off-plan initiatives first. Your ask is beside them.
|
|
36
|
+
3. **Scorecard**: the title is the verdict on one line, for example "3 of 12 off plan" with up to three names. Each initiative's stage, its status (a shape and a colour), done of total with the change since the last report, and the KR value against its target. The gap is the value minus the target. Only a row that is off plan (at risk or off track) has a comment. A row that is on track has none.
|
|
37
|
+
4. **Timeline**: the dated work, the due dates and any overdue item, for up to six initiatives. The title compares two due dates of the rows on the slide.
|
|
38
|
+
5. **Needs your call**: only when the report has an audience and the `report.asks` note has words. Write each option on its own line that starts with "- ". Write "by" and a date in the note to show a deadline. PMOS adds nothing that you did not write.
|
|
39
|
+
6. **Sources**: the sources that PMOS read, and "What we don't know yet" for each source that it could not read, with the reason. PMOS reads these from the draft's "Sources reached and not reached" section, from the cycle's data file and from the "Sources:" paragraph of the notes.
|
|
40
|
+
|
|
41
|
+
Each slide names its source and shows its page number. **Download › PDF** opens the print window with the same slides, one on each page: choose **Save as PDF** there. There is no PDF file to download from PMOS itself, because the browser makes the PDF. **Download › PPTX** gives the same slides as a PowerPoint file. The slides use the report's saved look: its font and its own title or main colour. If the report has no saved look, they use the standard PMOS look. PMOS does not draw KR trend lines, last-quarter bars or forecast ranges, because the draft does not have that data yet.
|
|
42
|
+
|
|
30
43
|
A report that you set up can have its own design, as a deck or an interactive document, with a presenter view, speaker notes and notes on the slide. See [Design how a report looks](report-design.md).
|
|
@@ -47,6 +47,8 @@ The Reports page shows a report as slides. [Report slides](report-slides.md) tel
|
|
|
47
47
|
|
|
48
48
|
When you draft a slot again, every note stays as you wrote it, next to its initiative. The order of the blocks can change. A note for an initiative that is no longer in the window moves to "Notes kept from an earlier draft".
|
|
49
49
|
|
|
50
|
+
When you ask Claude in a chat to change a report, the change goes to the latest draft of that report, in its own file. The report's session edits only the notes that the change is about, even when they have text, and keeps every other note and every number as it is. It keeps each caveat (a sentence that says something is provisional, not decided or unverified), also when you ask for shorter text, and it tells you which notes it changed and quotes any sentence it removed. It drafts the same slot again only when you ask for fresh numbers. It never drafts a new slot for today. A change to a number, a date, a section or a slide is not made in the draft: the session tells you which setting to change in the template or the studio. If the latest cycle is issued, it is frozen, and the change is not passed on.
|
|
51
|
+
|
|
50
52
|
## The commands
|
|
51
53
|
|
|
52
54
|
`pmos report draft <cadence> [<slot>]` writes the draft to `planning/reports/<cadence>/<slot>.md`. The slot is a date, YYYY-MM-DD. If you do not give a slot, the slot is today. If a draft for the slot exists, the command stops and writes nothing. To draft the slot again and keep every note, add `--redraft`. To fix the clock, add `--now <time>`: two drafts with the same inputs and the same `--now` are the same, byte for byte.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: Guide
|
|
3
3
|
title: "Workflows: the stages each kind of initiative goes through"
|
|
4
|
-
description: "Settings › Workflows: the workflow list, one numbered list of stages across To do, In progress and Done, the stage panel, Only when conditions, removing a stage in use, New workflow in the chat, moving initiatives to a simpler workflow, and the pmos workflow commands."
|
|
5
|
-
timestamp: 2026-11-
|
|
4
|
+
description: "Settings › Workflows: the workflow list, the default workflow (the star), one numbered list of stages across To do, In progress and Done, the stage panel, Only when conditions, removing a stage in use, New workflow in the chat, moving initiatives to a simpler workflow, and the pmos workflow commands."
|
|
5
|
+
timestamp: 2026-11-02
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Workflows
|
|
@@ -14,11 +14,21 @@ Open it from **Menu › Settings › Workflows**. The address is `/premium-workf
|
|
|
14
14
|
## The page
|
|
15
15
|
|
|
16
16
|
- **The list** on the left shows each workflow and how many initiatives use it. **+** starts a new workflow. An archived workflow shows last, under **Archived**.
|
|
17
|
+
- **The star** on a row marks the **default workflow**: the workflow a new initiative starts on. Point at a row, or tab to it, to see its star, and press it to make that workflow the default. The toast has **Undo**. Product feature is the default until you pick another, and it can be the default again.
|
|
17
18
|
- **The workflow** is one numbered list of stages, in three columns: **To do**, **In progress** and **Done**. Drag a stage to change its place or its column. **Add a stage** adds one at the end of that column. The dashed **Won't do · Archived** column is in every workflow: any initiative can go there from any stage, and come back to Triage.
|
|
18
19
|
- **Triage** is always the first stage, in To do.
|
|
19
20
|
- Tap the name of the workflow to rename it. **⋯** has **Copy** and **Archive**. You cannot archive a workflow that initiatives use.
|
|
20
21
|
- **Product feature** cannot change. **Copy it** to make a workflow of your own from it. A stage of Product feature has **Copy it** too: the copy opens on that stage.
|
|
21
22
|
|
|
23
|
+
## The default workflow
|
|
24
|
+
|
|
25
|
+
A new initiative starts in Triage on the default workflow. It does not matter how you add it: from Triage, from a Horizon scan proposal, from the initiative form, or with `pmos initiative new`. PMOS still reads the initiative's BRD and proposes a switch when the work reads like another workflow. You decide.
|
|
26
|
+
|
|
27
|
+
- The default is per workspace. A workspace that never set a default uses the one you set in Settings.
|
|
28
|
+
- Changing the default does not move initiatives that already exist.
|
|
29
|
+
- If you archive the default workflow, Product feature is the default again. Restoring the workflow does not make it the default again: press its star.
|
|
30
|
+
- The **In:** chip in the chat names where a message goes. It does not show a workflow.
|
|
31
|
+
|
|
22
32
|
## A stage
|
|
23
33
|
|
|
24
34
|
Tap a stage to open it in the side panel. Tap its name at the top to rename it. The panel has:
|
|
@@ -47,6 +57,8 @@ Press **+**. The chat opens, scoped **New workflow**. Tell Claude how the work g
|
|
|
47
57
|
- **Edit by hand** opens the draft on the page, so you can change it before you create it.
|
|
48
58
|
- You can also start **blank** (only Triage) or **from a copy** of a workflow.
|
|
49
59
|
|
|
60
|
+
You can open another workflow while a draft is going. The draft keeps its row at the end of the list, marked **draft**, until you create it. Press that row to go back to the chat and the draft beside it. In the chat list on Home, the same chat shows **In: New workflow**.
|
|
61
|
+
|
|
50
62
|
## Move initiatives to a simpler workflow
|
|
51
63
|
|
|
52
64
|
To use fewer stages, copy Product feature and make the copy simpler. For example, use Discovery, Implementation and Evaluation.
|
|
@@ -62,7 +74,7 @@ To use fewer stages, copy Product feature and make the copy simpler. For example
|
|
|
62
74
|
|
|
63
75
|
An agent writes a draft or a reading with these commands, and moves an initiative along its workflow when you ask. It never saves, copies or archives a workflow: those are your presses on the page.
|
|
64
76
|
|
|
65
|
-
- `pmos workflow list` names the workflows of this repository.
|
|
77
|
+
- `pmos workflow list` names the workflows of this repository and marks the default one.
|
|
66
78
|
- `pmos workflow show <id>` shows one workflow, its stages numbered.
|
|
67
79
|
- `pmos workflow draft --file <path>` writes the draft that the New workflow chat shows. `--note` adds a line.
|
|
68
80
|
- `pmos workflow show-draft` shows the draft that is open.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
type: Guide
|
|
3
3
|
title: "Your impact"
|
|
4
4
|
description: "What Your impact is, what counts and what never counts, the weekly check in Home's chat, the switch in Settings, and the pmos impact commands."
|
|
5
|
-
timestamp: 2026-
|
|
5
|
+
timestamp: 2026-11-02
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Your impact
|
|
@@ -19,15 +19,14 @@ There are no numbers. You see no points, scores, counts, streaks, levels or rank
|
|
|
19
19
|
|
|
20
20
|
## The weekly check
|
|
21
21
|
|
|
22
|
-
Once a day, Claude reads your sources and files what it found. After the week ends, Claude
|
|
22
|
+
Once a day, Claude reads your sources and files what it found. After the week ends, Claude shows that week's items in Home's chat as thank-you notes: the words in bold, who and what under them, and the source link. They already count. You do not have to do anything.
|
|
23
23
|
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
- ✓✓ keeps every item that is not checked yet.
|
|
24
|
+
- If an item is not right, press ⋯ on its row, then **Not right, drop it**. A dropped item does not count, and Claude does not file it again.
|
|
25
|
+
- **Undo** brings a dropped item back.
|
|
27
26
|
|
|
28
|
-
|
|
27
|
+
You can drop items until the next week ends. After that, every item you did not drop counts as real.
|
|
29
28
|
|
|
30
|
-
Adler's sprout and your impact log stay hidden until two weekly checks show that at least 9 of 10 items are real. Then Adler's sprout grows a leaf for each week's
|
|
29
|
+
Adler's sprout and your impact log stay hidden until two weekly checks show that at least 9 of 10 items are real. A week counts toward this only if Claude showed you its check. Then Adler's sprout grows a leaf for each week's items, and the log in the Viewer shows your weeks, newest first. A quiet week says "A quiet week". Nothing wilts and nothing resets.
|
|
31
30
|
|
|
32
31
|
## Where you see it
|
|
33
32
|
|
|
@@ -10,6 +10,7 @@ const fs = require('fs');
|
|
|
10
10
|
const path = require('path');
|
|
11
11
|
const { spawn } = require('child_process');
|
|
12
12
|
const { findBrowser } = require('./lib/find-browser');
|
|
13
|
+
const { openMission } = require('./lib/open-mission');
|
|
13
14
|
const T = require('./test-run').configure({ name: 'ini-workflow' });
|
|
14
15
|
const IP = require('./lib/initiative-premium.js');
|
|
15
16
|
const F = require('./fixtures/initiative-premium-facts.js');
|
|
@@ -71,7 +72,7 @@ const BRIEF = BRP.build(BRF.facts());
|
|
|
71
72
|
const shot = async (p, name) => { if (SHOTS) await p.screenshot({ path: path.join(SHOTS, name + '.png') }); };
|
|
72
73
|
|
|
73
74
|
const open = async ({ w = 1440, h = 900, theme = 'light', B = board('triage', { pmos: true }), fresh = true } = {}) => {
|
|
74
|
-
const ctx = await browser.newContext({ viewport: { width: w, height: h } });
|
|
75
|
+
const ctx = await openMission(await browser.newContext({ viewport: { width: w, height: h } }));
|
|
75
76
|
const page = await ctx.newPage();
|
|
76
77
|
const S = { B };
|
|
77
78
|
const errors = [], posts = [];
|