create-pmos 0.527.0 → 0.528.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 +32 -16
- 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/adler-moments-test.js +4 -3
- package/workspace/changelog.json +31 -0
- package/workspace/ev-everywhere-test.js +2 -6
- package/workspace/guide/home.md +7 -6
- package/workspace/guide/reports-set-up.md +1 -0
- package/workspace/lib/bg-queue.js +5 -2
- package/workspace/lib/okr-goals.js +23 -3
- package/workspace/lib/routes-morning-goals.js +5 -1
- package/workspace/news-viewers-test.js +2 -1
- package/workspace/package-lock.json +2 -2
- package/workspace/package.json +1 -1
- package/workspace/product-lane-test.js +1 -1
- package/workspace/program-charter-test.js +2 -2
- package/workspace/public/pm/bd-ini-panel.js +1 -1
- package/workspace/public/pm/bd-span.js +10 -7
- package/workspace/public/pm/cozy-board.css +1 -0
- package/workspace/public/pm/cozy-search.js +10 -17
- package/workspace/public/pm/cozy-settings.js +8 -2
- package/workspace/public/pm/cozy-today.css +30 -14
- package/workspace/public/pm/good-morning.js +30 -17
- package/workspace/public/pm/home-app.js +11 -1
- package/workspace/public/pm/home-data.js +4 -1
- package/workspace/public/pm/home-day.js +12 -5
- package/workspace/public/pm/premium-board.js +7 -5
- package/workspace/public/pm/premium-initiative-head.js +9 -1
- package/workspace/public/pm/premium-insights.js +5 -3
- package/workspace/public/pm/premium-report-read.js +11 -4
- package/workspace/public/pm/program-model.js +2 -1
- package/workspace/public/premium-board.html +4 -4
- package/workspace/server.js +1 -1
- package/workspace/task-milestones-test.js +2 -2
- package/workspace/timeline-holds-test.js +3 -3
package/workspace/server.js
CHANGED
|
@@ -11098,7 +11098,7 @@ writeTmuxConf(); // must exist before restore may reattach or
|
|
|
11098
11098
|
// premium-session-end: asked only once the restore has FINISHED. The running server restores in slices after it listens, so
|
|
11099
11099
|
// checking right after the call saw no live pane on every launch and spawned one more `shell`, which tmux then kept: one idle
|
|
11100
11100
|
// shell per restart, piling up in the session list.
|
|
11101
|
-
restorePersisted({ progressive: !REQUIRED_AS_LIBRARY, onDone: () => firstShell(sessions.values(), { canHost: HOME_ENABLED || workspaces.size > 0, spawn: () => spawnSession({ name: 'shell', agent: 'shell' }) }) });
|
|
11101
|
+
restorePersisted({ progressive: !REQUIRED_AS_LIBRARY, onDone: () => firstShell(sessions.values(), { canHost: HOME_ENABLED || workspaces.size > 0, spawn: () => spawnSession({ name: 'shell', agent: 'shell', origin: 'first-shell' }) }) });
|
|
11102
11102
|
|
|
11103
11103
|
if (require.main === module) {
|
|
11104
11104
|
// pm-os-absorb Run 2 (R25, X11): one nonce per launch, held in memory only. Never in process.env (so no PTY inherits
|
|
@@ -100,8 +100,8 @@ const ITEMS = [
|
|
|
100
100
|
const { ctx, page: p, errors } = await open();
|
|
101
101
|
const sc = await rowOf(p, 'board:scarlet');
|
|
102
102
|
ok('B one ◇ per milestone: the done Pilot filled, Feature delivered open with "◆ Deliver" in its name; no ◇ for a plain task or one with no due date',
|
|
103
|
-
sc && sc.tm.length === 2 && /tg-tm dn\|Pilot with 2 newsrooms · Dec 11 · done/.test(sc.tm[0]) && /^tg-tm\|Feature delivered · Jan 29 · ◆ Deliver$/.test(sc.tm[1]), JSON.stringify(sc));
|
|
104
|
-
ok('B said once: the Evaluate task IS the end ◇ and takes its name; it is not drawn again', sc && /^tg-end\|KPI evaluated · Mar 31 · ◆ Evaluate$/.test(sc.end) && !sc.tm.some((x) => /KPI/.test(x)), JSON.stringify(sc));
|
|
103
|
+
sc && sc.tm.length === 2 && /tg-tm dn\|Pilot with 2 newsrooms · Dec 11 · done/.test(sc.tm[0]) && /^tg-tm\|Feature delivered · Jan 29(?: ’\d\d)? · ◆ Deliver$/.test(sc.tm[1]), JSON.stringify(sc));
|
|
104
|
+
ok('B said once: the Evaluate task IS the end ◇ and takes its name; it is not drawn again', sc && /^tg-end\|KPI evaluated · Mar 31(?: ’\d\d)? · ◆ Evaluate$/.test(sc.end) && !sc.tm.some((x) => /KPI/.test(x)), JSON.stringify(sc));
|
|
105
105
|
ok('S Year puts no date under a ◇: its hover names it (batch 13 item 4)', sc && !sc.tml.length, JSON.stringify(sc && sc.tml));
|
|
106
106
|
const pk = await rowOf(p, 'board:passkey');
|
|
107
107
|
ok('B a late milestone: an orange outline, and the row\'s dot turns orange', pk && /tg-tm late\|Beta to staff · Oct 16 · late/.test(pk.tm[0]) && !pk.tml.length && /cz-dot late/.test(pk.dot), JSON.stringify(pk));
|
|
@@ -102,7 +102,7 @@ const ROWS = [
|
|
|
102
102
|
ok('A the done part fills the pieces in order and skips the gap: the first piece fills before the second starts', otp && otp.bars[0].done > 0 && (otp.bars[0].done === 100 || otp.bars[1].done === 0), JSON.stringify(otp && otp.bars));
|
|
103
103
|
const rc = await rowOf(p, 'Recovery codes');
|
|
104
104
|
ok('A a plain gap in the dated work breaks the bar with a hairline that is no hold: no label (batch 11 item 13)', rc && rc.bars.length === 2 && !rc.ho.length && !rc.old
|
|
105
|
-
&& rc.ng.length === 1 && rc.ng[0].tag === 'BUTTON' &&
|
|
105
|
+
&& rc.ng.length === 1 && rc.ng[0].tag === 'BUTTON' && /^Nothing planned, Oct 21 to Jan 9(?: ’\d\d)? · 12 wk\. Plan skipped$/.test(rc.ng[0].label) && rc.ng[0].sk, JSON.stringify(rc));
|
|
106
106
|
const pk = await rowOf(p, 'Passkey sign-in');
|
|
107
107
|
ok('A a row with no hold and no gap keeps one whole bar', pk && pk.bars.length === 1 && !/x[lr]/.test(pk.bars[0].cls), JSON.stringify(pk));
|
|
108
108
|
const lg = await p.evaluate(() => (document.querySelector('#bdChipset .tg-lgd') || {}).textContent || '');
|
|
@@ -223,11 +223,11 @@ const ROWS = [
|
|
|
223
223
|
// the press: a future gap's card with its words and + New task with its dates
|
|
224
224
|
await p.click('#ibBody [data-row="board:recovery-codes"] .tg-ng');
|
|
225
225
|
const card = await p.evaluate(() => { const c = document.querySelector('.tg-gpc'); return c ? { words: [...c.querySelectorAll('p')].map((x) => x.textContent), add: (c.querySelector('.gp-add') || {}).getAttribute && c.querySelector('.gp-add').getAttribute('aria-label') } : null; });
|
|
226
|
-
ok('X a future gap opens a card with its words and + New task with the gap\'s dates', card &&
|
|
226
|
+
ok('X a future gap opens a card with its words and + New task with the gap\'s dates', card && /^Nothing planned, Oct 21 to Jan 9(?: ’\d\d)? · 12 wk\|Plan skipped$/.test(card.words.join('|')) && /^New task, Oct 21 to Jan 9(?: ’\d\d)?$/.test(card.add), JSON.stringify(card));
|
|
227
227
|
await shot(p, 'timeline-gap-card-1440');
|
|
228
228
|
await p.click('.tg-gpc .gp-add'); await p.waitForTimeout(400);
|
|
229
229
|
const add = await p.evaluate(() => { const f = document.querySelector('#ivAddTask'); return f ? f.placeholder : null; });
|
|
230
|
-
ok('X + opens the initiative with New task ready, the gap\'s dates named',
|
|
230
|
+
ok('X + opens the initiative with New task ready, the gap\'s dates named', /^A task for Recovery codes, Oct 21 to Jan 9(?: ’\d\d)?$/.test(String(add)), String(add));
|
|
231
231
|
ok('X the gap press threw nothing', !errors.length, errors.join('\n'));
|
|
232
232
|
await ctx.close();
|
|
233
233
|
}
|