create-pmos 0.53.1 → 0.53.2

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 (45) hide show
  1. package/package.json +1 -1
  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/REMOTE.md +87 -6
  7. package/workspace/first-paint-audit.js +6 -2
  8. package/workspace/fixtures/initiatives-api/list.json +13 -0
  9. package/workspace/fixtures/initiatives-api/roadmap.json +13 -0
  10. package/workspace/fixtures/report-api/draft.json +105 -0
  11. package/workspace/fixtures/reports-page/draft-biweekly-2026-10-16.md +12 -0
  12. package/workspace/guide/index.md +1 -0
  13. package/workspace/guide/initiatives-roadmap.md +1 -0
  14. package/workspace/guide/initiatives-screen.md +1 -0
  15. package/workspace/guide/layout.md +3 -2
  16. package/workspace/guide/report-slides.md +28 -0
  17. package/workspace/guide/reports.md +2 -0
  18. package/workspace/lib/auto-sync.js +83 -0
  19. package/workspace/lib/remote-access.js +96 -16
  20. package/workspace/lib/report-draft.js +33 -4
  21. package/workspace/lib/report-slides-data.js +141 -0
  22. package/workspace/lib/routes-initiatives.js +35 -2
  23. package/workspace/lib/routes-reports.js +3 -3
  24. package/workspace/lib/sync.js +61 -6
  25. package/workspace/package-lock.json +1 -1
  26. package/workspace/package.json +1 -1
  27. package/workspace/public/pm/app.js +16 -1
  28. package/workspace/public/pm/components.css +783 -0
  29. package/workspace/public/pm/dest-reports.js +8 -2
  30. package/workspace/public/pm/initiative-list.js +18 -1
  31. package/workspace/public/pm/initiatives-copy.js +4 -0
  32. package/workspace/public/pm/print.css +11 -0
  33. package/workspace/public/pm/report-slides.js +438 -0
  34. package/workspace/public/pm/report-view.js +8 -2
  35. package/workspace/public/pm/reports-copy.js +3 -0
  36. package/workspace/public/pm/roadmap.js +23 -0
  37. package/workspace/public/pm/slides-copy.js +52 -0
  38. package/workspace/public/pm/tokens.css +13 -0
  39. package/workspace/public/pm/topbar.js +5 -2
  40. package/workspace/replaced-tests.json +23 -1
  41. package/workspace/server.js +33 -13
  42. package/workspace/skills/report-biweekly.skill +1 -0
  43. package/workspace/test-files.json +2 -0
  44. package/workspace/test-lists/run6.json +9 -0
  45. package/workspace/test-lists/workspace-public-host.json +5 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmos-workspace",
3
- "version": "0.53.1",
3
+ "version": "0.53.2",
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",
@@ -509,10 +509,25 @@ async function runSync() {
509
509
  try { res = await mods.data.syncRepository(repo); } catch (e) { res = { ok: false, message: String((e && e.message) || e) }; }
510
510
  fr.syncing = false;
511
511
  syncSeen.delete(repo);
512
- toast({ text: res && res.ok ? FC.sync.done : FC.sync.stopped((res && res.step) || FC.sync.label, (res && (res.message || res.error)) || '') });
512
+ toast({ text: res && res.ok ? FC.sync.done : FC.sync.stopped((res && (res.stopped_at || res.step)) || FC.sync.label, (res && (res.message || res.error)) || '') });
513
513
  setState({});
514
514
  }
515
515
 
516
+ /* Closing the tab with work that is not yet pushed asks first (D70 as amended 2026-10-06): idle auto-sync waits for a
517
+ * few quiet minutes, and a laptop closed inside that window would carry the work away unsynced. The reading is the
518
+ * last local one for each repository; a stale or unread reading never asks. */
519
+ function unpushedOf(st) {
520
+ // only a repository with an upstream: one with none has nowhere to push, and would ask on every close for ever
521
+ return !!st && st.ok !== false && !!st.upstream && ((st.ahead | 0) > 0 || (st.dirty_records | 0) > 0);
522
+ }
523
+ if (FRAME) {
524
+ window.addEventListener('beforeunload', (e) => {
525
+ if (![...syncSeen.values()].some((v) => unpushedOf(v.st))) return;
526
+ e.preventDefault();
527
+ e.returnValue = '';
528
+ });
529
+ }
530
+
516
531
  let bar = null;
517
532
  let dockRail = null;
518
533
  let frDetail = null;