create-pmos 0.509.0 → 0.511.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 (39) hide show
  1. package/package.json +247 -134
  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/board-programs-test.js +3 -0
  7. package/workspace/briefing-premium-board-test.js +6 -7
  8. package/workspace/changelog.json +352 -909
  9. package/workspace/ev-everywhere-test.js +4 -4
  10. package/workspace/guide/home.md +2 -1
  11. package/workspace/guide/initiative-boards.md +3 -1
  12. package/workspace/guide/programs.md +2 -1
  13. package/workspace/guide/settings.md +9 -5
  14. package/workspace/lib/board-premium.js +3 -2
  15. package/workspace/lib/kit-update.js +19 -4
  16. package/workspace/lib/routes-boards.js +15 -1
  17. package/workspace/package-lock.json +2 -2
  18. package/workspace/package.json +1 -1
  19. package/workspace/panels-test.js +68 -1
  20. package/workspace/public/pm/bd-cols.js +2 -1
  21. package/workspace/public/pm/bd-deliveries.js +1 -1
  22. package/workspace/public/pm/bd-prog.js +10 -5
  23. package/workspace/public/pm/bd-span.js +15 -10
  24. package/workspace/public/pm/cozy-board.css +8 -2
  25. package/workspace/public/pm/cozy-ev.css +24 -10
  26. package/workspace/public/pm/cozy-live-pill.css +9 -0
  27. package/workspace/public/pm/cozy-live-pill.js +50 -3
  28. package/workspace/public/pm/cozy-panels.css +9 -0
  29. package/workspace/public/pm/cozy-panels.js +99 -16
  30. package/workspace/public/pm/cozy-settings.js +34 -15
  31. package/workspace/public/pm/cozy-viewer.js +15 -3
  32. package/workspace/public/pm/home-chat.js +4 -0
  33. package/workspace/public/pm/page-chat.css +9 -0
  34. package/workspace/public/pm/page-chat.js +90 -0
  35. package/workspace/public/pm/premium-board.js +9 -0
  36. package/workspace/public/pm/readonly.js +3 -1
  37. package/workspace/public/pm/upd-weeks.js +27 -9
  38. package/workspace/public/premium-board.html +2 -2
  39. package/workspace/test-lists/closed-not-late.json +5 -0
@@ -1,3 +1,3 @@
1
- kernel-source: pmos@be5277db
1
+ kernel-source: pmos@f8d9c6e4
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-03T14:11:20Z"}
5
+ generated: {by: process:create-pmos, at: "2026-11-03T15:10:26Z"}
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-03T14:11:20Z"}
5
+ generated: {by: process:create-pmos, at: "2026-11-03T15:10:26Z"}
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-03T14:11:20Z"}
5
+ generated: {by: process:create-pmos, at: "2026-11-03T15:10:26Z"}
6
6
  status: stable
7
7
  ---
8
8
 
@@ -99,6 +99,9 @@ process.on('unhandledRejection', (e) => { console.error(e); finish(1); });
99
99
  ok('O pressing the band dispatches bd:program with the program id and opens no initiative panel', (await events(p)).join() === 'project-ascent' && await p.evaluate(() => !/Initiative/.test(((window.czViewer && window.czViewer.current()) || {}).kind || '')), JSON.stringify(await events(p)));
100
100
  await p.keyboard.press('Escape'); await p.waitForFunction(() => { const v = document.querySelector('#czViewer'); return !v || v.hidden; });
101
101
 
102
+ // batch 26 item 3: a product head's tile and name open its page in Home's Viewer; the chevron is its own button and folds
103
+ const ph = await p.evaluate(() => { const o = document.querySelector('#ibBody .bt-prd [data-prodopen]'), f = document.querySelector('#ibBody .bt-prd [data-fold]'); return { open: !!o && !o.contains(f) && /^Open IDPF, a product$/.test(o.getAttribute('aria-label')) && !!o.querySelector('.bd-ti'), fold: !!f && f.hasAttribute('aria-expanded') }; });
104
+ ok('P a product head: the tile and name are one button that opens the product, the fold is a separate button', ph.open && ph.fold, JSON.stringify(ph));
102
105
  await p.click('#ibBody .bt-pg [data-fold]');
103
106
  const f1 = await p.evaluate(() => ({ kids: document.querySelectorAll('#ibBody .bt-kid').length, band: !!document.querySelector('#ibBody .bt-pg'), exp: document.querySelector('#ibBody .bt-pg [data-fold]').getAttribute('aria-expanded'), st: localStorage.getItem('pmos.board.fold') }));
104
107
  ok('F the program group folds to its band row, and the fold is stored', f1.kids === 0 && f1.band && f1.exp === 'false' && /g:project-ascent/.test(f1.st), JSON.stringify(f1));
@@ -258,15 +258,14 @@ const IVREAD = () => {
258
258
  await q.keyboard.press('Escape');
259
259
  ok('B1 the new asks, the sprint and release, Find and Filter open their popovers, and New initiative its panel with material and no lane field', waits.join() === 'New asks,Sprints and releases,Find,Filter,New initiative', waits.join());
260
260
  ok('B1 none of them opened the old dialog', await q.evaluate(() => !document.querySelector('#dlg.on')));
261
- /* B3 Ask about this goes to Home */
262
- await q.route('**/premium.html?**', (r) => r.fulfill({ contentType: 'text/html', body: '<title>home</title>' }));
261
+ /* B3 Discuss in chat (batch 26 item 4): Home's chat about the initiative opens in a panel on the Board; the page stays */
262
+ const keysB3 = [];
263
+ await q.route(/\/api\/briefing-premium\/thread\?/, (r) => { keysB3.push(new URL(r.request().url()).searchParams.get('key')); return r.fulfill({ contentType: 'application/json', body: JSON.stringify({ ok: true, session: null, history: { messages: [] } }) }); });
263
264
  await q.click('.bt-l[data-row="board:sso-partners"] .bt-nm'); await until(() => vwOn(q, 'Initiative'));
264
- /* re-pointed (viewer-shell-a, XvABoard): the Ask box is gone; Discuss in chat opens Home in that initiative */
265
+ const u0 = q.url();
265
266
  await q.click('#czViewer [data-cz-vw="discuss"]');
266
- await until(() => /premium\.html/.test(q.url()), 5000);
267
- const u = new URL(q.url());
268
- // the shell's own link (cozy-viewer.js discuss): the chat about the initiative, which Home reopens beside it by its id
269
- ok('B3 the Board has no chat: Discuss in chat opens Home in the chat about that initiative, with the initiative beside it', u.pathname === '/premium.html' && u.searchParams.get('about') === 'init:sso-partners' && u.searchParams.get('vk') === 'initiative' && u.searchParams.get('vid') === 'sso-partners', q.url());
267
+ const b3 = await until(() => q.evaluate(() => { const v = [...document.querySelectorAll('.cz-vw')].find((x) => !x.hidden && x.querySelector('.pc-chat textarea')); return v ? v.dataset.czPanel : null; }), 6000);
268
+ ok('B3 Discuss in chat opens the chat about that initiative in a panel on the Board (Home\'s conversation init:<id>), and the Board stays', !!b3 && q.url() === u0 && keysB3.includes('init:sso-partners'), JSON.stringify([b3, keysB3, q.url()]));
270
269
  ok('0 no page error on the stage track', R.errors.length === 0, R.errors.join(' | '));
271
270
  await R.ctx.close();
272
271
  }