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.
Files changed (37) hide show
  1. package/package.json +32 -16
  2. package/payload/KIT-VERSION +1 -1
  3. package/payload/planning/evals/eval-calibration.md +1 -1
  4. package/payload/planning/okrs/health-budgets.md +1 -1
  5. package/payload/state/discoveries.md +1 -1
  6. package/workspace/adler-moments-test.js +4 -3
  7. package/workspace/changelog.json +31 -0
  8. package/workspace/ev-everywhere-test.js +2 -6
  9. package/workspace/guide/home.md +7 -6
  10. package/workspace/guide/reports-set-up.md +1 -0
  11. package/workspace/lib/bg-queue.js +5 -2
  12. package/workspace/lib/okr-goals.js +23 -3
  13. package/workspace/lib/routes-morning-goals.js +5 -1
  14. package/workspace/news-viewers-test.js +2 -1
  15. package/workspace/package-lock.json +2 -2
  16. package/workspace/package.json +1 -1
  17. package/workspace/product-lane-test.js +1 -1
  18. package/workspace/program-charter-test.js +2 -2
  19. package/workspace/public/pm/bd-ini-panel.js +1 -1
  20. package/workspace/public/pm/bd-span.js +10 -7
  21. package/workspace/public/pm/cozy-board.css +1 -0
  22. package/workspace/public/pm/cozy-search.js +10 -17
  23. package/workspace/public/pm/cozy-settings.js +8 -2
  24. package/workspace/public/pm/cozy-today.css +30 -14
  25. package/workspace/public/pm/good-morning.js +30 -17
  26. package/workspace/public/pm/home-app.js +11 -1
  27. package/workspace/public/pm/home-data.js +4 -1
  28. package/workspace/public/pm/home-day.js +12 -5
  29. package/workspace/public/pm/premium-board.js +7 -5
  30. package/workspace/public/pm/premium-initiative-head.js +9 -1
  31. package/workspace/public/pm/premium-insights.js +5 -3
  32. package/workspace/public/pm/premium-report-read.js +11 -4
  33. package/workspace/public/pm/program-model.js +2 -1
  34. package/workspace/public/premium-board.html +4 -4
  35. package/workspace/server.js +1 -1
  36. package/workspace/task-milestones-test.js +2 -2
  37. package/workspace/timeline-holds-test.js +3 -3
@@ -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' && rc.ng[0].label === 'Nothing planned, Oct 21 to Jan 9 · 12 wk. Plan skipped' && rc.ng[0].sk, JSON.stringify(rc));
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 && card.words.join('|') === 'Nothing planned, Oct 21 to Jan 9 · 12 wk|Plan skipped' && card.add === 'New task, Oct 21 to Jan 9', JSON.stringify(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', add === 'A task for Recovery codes, Oct 21 to Jan 9', String(add));
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
  }