create-pmos 0.133.0 → 0.135.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 (212) 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/bin/notes-replay.js +235 -0
  7. package/workspace/c3-briefing-test.js +130 -0
  8. package/workspace/c3-foundation-test.js +159 -0
  9. package/workspace/c3-ib-items-test.js +105 -0
  10. package/workspace/c3-ib-more-test.js +120 -0
  11. package/workspace/c3-ib-triage-backlog-test.js +119 -0
  12. package/workspace/c3-ini-harness.js +66 -0
  13. package/workspace/c3-initiatives-test.js +140 -0
  14. package/workspace/c3-one-home-test.js +14 -1
  15. package/workspace/c3-reports-test.js +57 -18
  16. package/workspace/c3-settings-test.js +139 -0
  17. package/workspace/c3-work-test.js +42 -10
  18. package/workspace/fixtures/one-home-baseline.json +1 -9
  19. package/workspace/guide/briefing-cards.md +15 -3
  20. package/workspace/guide/briefing.md +12 -8
  21. package/workspace/guide/calendar-popup.md +2 -2
  22. package/workspace/guide/console-calendar.md +39 -10
  23. package/workspace/guide/index.md +1 -0
  24. package/workspace/guide/initiative-boards.md +65 -0
  25. package/workspace/guide/jira.md +3 -1
  26. package/workspace/guide/layout.md +2 -0
  27. package/workspace/guide/my-work.md +5 -3
  28. package/workspace/guide/notes.md +35 -2
  29. package/workspace/guide/reports-dashboards.md +29 -5
  30. package/workspace/guide/settings.md +68 -0
  31. package/workspace/guide/welcome.md +10 -10
  32. package/workspace/lib/calendar-cli.js +3 -2
  33. package/workspace/lib/calendar-layers.js +21 -10
  34. package/workspace/lib/calendar-tidy.js +230 -0
  35. package/workspace/lib/engine/boards.js +542 -0
  36. package/workspace/lib/engine/breakdown-ops.js +180 -0
  37. package/workspace/lib/engine/calendar-import.js +84 -0
  38. package/workspace/lib/engine/calendar-model.js +185 -0
  39. package/workspace/lib/engine/card-state.js +92 -0
  40. package/workspace/lib/engine/derived/derive.js +92 -0
  41. package/workspace/lib/engine/derived/plan.js +3 -0
  42. package/workspace/lib/engine/derived/trust.js +3 -0
  43. package/workspace/lib/engine/doc-health.js +142 -0
  44. package/workspace/lib/engine/doc-sheet.js +75 -0
  45. package/workspace/lib/engine/intake.js +78 -0
  46. package/workspace/lib/engine/outbox.js +86 -0
  47. package/workspace/lib/engine/plan-forecast.js +342 -0
  48. package/workspace/lib/engine/promises.js +29 -0
  49. package/workspace/lib/engine/records/index.js +114 -0
  50. package/workspace/lib/engine/releases.js +96 -0
  51. package/workspace/lib/engine/replies.js +99 -0
  52. package/workspace/lib/engine/reply-contract/reply-contract.js +372 -0
  53. package/workspace/lib/engine/report-families.js +175 -0
  54. package/workspace/lib/engine/roadmap-ops.js +150 -0
  55. package/workspace/lib/engine/sessions-list.js +27 -0
  56. package/workspace/lib/engine/signal-rules.js +95 -0
  57. package/workspace/lib/engine/signals/cards.js +57 -0
  58. package/workspace/lib/engine/signals/detectors.js +370 -0
  59. package/workspace/lib/engine/signals/facts-cli.js +8 -0
  60. package/workspace/lib/engine/signals/facts.js +197 -0
  61. package/workspace/lib/engine/signals/index.js +33 -0
  62. package/workspace/lib/engine/signals/kinds.js +110 -0
  63. package/workspace/lib/engine/signals/layout-paths.js +44 -0
  64. package/workspace/lib/engine/signals/options.js +24 -0
  65. package/workspace/lib/engine/signals/score.js +72 -0
  66. package/workspace/lib/engine/signals/select.js +47 -0
  67. package/workspace/lib/engine/step-planner.js +65 -0
  68. package/workspace/lib/engine/trust/claim-rules.json +93 -0
  69. package/workspace/lib/engine/trust/import-calendar.js +21 -0
  70. package/workspace/lib/engine/trust/import-guard.js +36 -0
  71. package/workspace/lib/engine/trust/ledger.js +53 -0
  72. package/workspace/lib/engine/trust/outbox.js +45 -0
  73. package/workspace/lib/engine/trust/plan.js +5 -0
  74. package/workspace/lib/engine/trust/trust.js +21 -0
  75. package/workspace/lib/engine/truth-table.js +57 -0
  76. package/workspace/lib/engine/workspace-lib.js +24 -0
  77. package/workspace/lib/factory-join.js +1 -1
  78. package/workspace/lib/facts-async.js +4 -4
  79. package/workspace/lib/headless.js +95 -0
  80. package/workspace/lib/import-overlay.js +2 -1
  81. package/workspace/lib/jira-status.js +30 -3
  82. package/workspace/lib/notes-audio.js +28 -9
  83. package/workspace/lib/notes-capture.js +136 -0
  84. package/workspace/lib/notes-final.js +38 -13
  85. package/workspace/lib/notes-live-guard.js +117 -0
  86. package/workspace/lib/notes-replay.js +125 -0
  87. package/workspace/lib/notes-screen.js +180 -0
  88. package/workspace/lib/notes-whisper.js +139 -16
  89. package/workspace/lib/notes.js +4 -2
  90. package/workspace/lib/outbox-store.js +10 -6
  91. package/workspace/lib/pmos-verbs.js +3 -1
  92. package/workspace/lib/proactive-cli.js +7 -0
  93. package/workspace/lib/proactive.js +15 -2
  94. package/workspace/lib/repo-script.js +36 -0
  95. package/workspace/lib/report-dashboards.js +5 -2
  96. package/workspace/lib/report-frame.js +122 -0
  97. package/workspace/lib/report-schedules.js +113 -0
  98. package/workspace/lib/route-modules.js +9 -2
  99. package/workspace/lib/routes-boards.js +734 -0
  100. package/workspace/lib/routes-brief-page.js +13 -4
  101. package/workspace/lib/routes-briefing.js +22 -11
  102. package/workspace/lib/routes-c3-init.js +4 -3
  103. package/workspace/lib/routes-c3-life.js +2 -1
  104. package/workspace/lib/routes-c3-reports.js +96 -13
  105. package/workspace/lib/routes-c3-strategy.js +4 -3
  106. package/workspace/lib/routes-c3-timeline.js +3 -2
  107. package/workspace/lib/routes-calendar-import.js +3 -2
  108. package/workspace/lib/routes-calendar-views.js +9 -4
  109. package/workspace/lib/routes-doc-health.js +2 -1
  110. package/workspace/lib/routes-doc-sheet.js +2 -1
  111. package/workspace/lib/routes-forecast.js +2 -1
  112. package/workspace/lib/routes-hooks.js +3 -2
  113. package/workspace/lib/routes-initiatives.js +2 -1
  114. package/workspace/lib/routes-intake.js +2 -1
  115. package/workspace/lib/routes-notes.js +113 -15
  116. package/workspace/lib/routes-outbox.js +23 -3
  117. package/workspace/lib/routes-pm-items.js +19 -6
  118. package/workspace/lib/routes-records.js +3 -2
  119. package/workspace/lib/routes-releases.js +2 -1
  120. package/workspace/lib/routes-report-facts.js +4 -3
  121. package/workspace/lib/routes-report-families.js +2 -1
  122. package/workspace/lib/routes-roadmap-ops.js +5 -4
  123. package/workspace/lib/routes-runs.js +6 -5
  124. package/workspace/lib/routes-settings.js +51 -0
  125. package/workspace/lib/routes-signals.js +3 -2
  126. package/workspace/lib/routes-stage-tools.js +220 -0
  127. package/workspace/lib/run-answers.js +2 -1
  128. package/workspace/lib/settings-store.js +226 -0
  129. package/workspace/lib/stage-tools.js +208 -0
  130. package/workspace/lib/vendor/scripts/signals/layout-paths.js +2 -1
  131. package/workspace/lib/vendor/scripts/workspace-lib.js +24 -0
  132. package/workspace/lib/work-evidence.js +73 -0
  133. package/workspace/package-lock.json +2 -2
  134. package/workspace/package.json +1 -1
  135. package/workspace/public/pm/briefing-deck.js +63 -17
  136. package/workspace/public/pm/briefing-model.js +36 -7
  137. package/workspace/public/pm/c3-ambient.js +100 -0
  138. package/workspace/public/pm/c3-brief-needs.js +26 -6
  139. package/workspace/public/pm/c3-brief-pulse.js +12 -4
  140. package/workspace/public/pm/c3-brief-today.js +56 -21
  141. package/workspace/public/pm/c3-brief.js +2 -1
  142. package/workspace/public/pm/c3-calendar.js +161 -42
  143. package/workspace/public/pm/c3-calpop.js +5 -5
  144. package/workspace/public/pm/c3-demo-boards.js +649 -0
  145. package/workspace/public/pm/c3-demo-brief-page.js +1 -1
  146. package/workspace/public/pm/c3-demo-cal4.js +3 -2
  147. package/workspace/public/pm/c3-demo-cal5.js +52 -0
  148. package/workspace/public/pm/c3-demo-data.js +17 -27
  149. package/workspace/public/pm/c3-demo-rep3.js +46 -5
  150. package/workspace/public/pm/c3-demo.js +2 -1
  151. package/workspace/public/pm/c3-dock.js +1 -1
  152. package/workspace/public/pm/c3-ib-docs.js +80 -0
  153. package/workspace/public/pm/c3-ib-initiatives.js +134 -0
  154. package/workspace/public/pm/c3-ib-items.js +201 -0
  155. package/workspace/public/pm/c3-ib-releases.js +51 -0
  156. package/workspace/public/pm/c3-ib-sprints.js +55 -0
  157. package/workspace/public/pm/c3-ib-triage.js +178 -0
  158. package/workspace/public/pm/c3-ii-tabs.js +240 -0
  159. package/workspace/public/pm/c3-ini-records.js +197 -0
  160. package/workspace/public/pm/c3-ini-timeline.js +278 -0
  161. package/workspace/public/pm/c3-ini-ui.js +229 -0
  162. package/workspace/public/pm/c3-ini-work.js +139 -0
  163. package/workspace/public/pm/c3-initiatives.css +218 -0
  164. package/workspace/public/pm/c3-initiatives.js +741 -0
  165. package/workspace/public/pm/c3-plan.js +2 -2
  166. package/workspace/public/pm/c3-reports.css +47 -47
  167. package/workspace/public/pm/c3-reports.js +223 -185
  168. package/workspace/public/pm/c3-settings.css +74 -0
  169. package/workspace/public/pm/c3-settings.js +703 -0
  170. package/workspace/public/pm/c3-shell.js +102 -36
  171. package/workspace/public/pm/c3-terminal-icons.js +2 -2
  172. package/workspace/public/pm/c3-terminal.js +2 -2
  173. package/workspace/public/pm/calendar-views.js +26 -13
  174. package/workspace/public/pm/components.css +319 -213
  175. package/workspace/public/pm/console3.css +118 -23
  176. package/workspace/public/pm/dest-notes.js +26 -4
  177. package/workspace/public/pm/notes-screen-capture.js +165 -0
  178. package/workspace/public/pm/notes-screen-view.js +98 -0
  179. package/workspace/public/pm/panel-trees.js +5 -2
  180. package/workspace/public/pm/pm-work-view.js +233 -146
  181. package/workspace/public/pm/shell-bell.js +3 -2
  182. package/workspace/public/pm/shell-recording.js +148 -17
  183. package/workspace/public/pm/tokens.css +2 -2
  184. package/workspace/public/pm/view-notes.js +53 -11
  185. package/workspace/public/pm/welcome.js +197 -89
  186. package/workspace/public/welcome.html +6 -4
  187. package/workspace/server.js +105 -6
  188. package/workspace/skills/day-check.skill +1 -1
  189. package/workspace/skills/jira-sync.skill +6 -4
  190. package/workspace/skills/morning-brief.skill +1 -1
  191. package/workspace/test-files.json +14 -3
  192. package/workspace/test-lists/c3-ib-items.json +9 -0
  193. package/workspace/test-lists/c3-ib-more.json +9 -0
  194. package/workspace/test-lists/c3-ib-triage-backlog.json +9 -0
  195. package/workspace/test-lists/c3-initiative-boards.json +6 -0
  196. package/workspace/test-lists/calendar-tidy-up.json +6 -0
  197. package/workspace/test-lists/console3-briefing.json +9 -0
  198. package/workspace/test-lists/console3-foundation.json +9 -0
  199. package/workspace/test-lists/console3-reports.json +3 -3
  200. package/workspace/test-lists/meeting-notes.json +12 -4
  201. package/workspace/test-lists/workspace-headless-jobs.json +5 -0
  202. package/workspace/test-lists/workspace-package-script-closure.json +6 -0
  203. package/workspace/lib/vendor/workspace/lib/actor.js +0 -91
  204. package/workspace/lib/vendor/workspace/lib/board-cache.js +0 -156
  205. package/workspace/lib/vendor/workspace/lib/console-state.js +0 -295
  206. package/workspace/lib/vendor/workspace/lib/factory-join.js +0 -158
  207. package/workspace/lib/vendor/workspace/lib/git-info.js +0 -306
  208. package/workspace/lib/vendor/workspace/lib/plan-items.js +0 -922
  209. package/workspace/lib/vendor/workspace/lib/plan-tree.js +0 -419
  210. package/workspace/lib/vendor/workspace/lib/review-gate.js +0 -39
  211. package/workspace/lib/vendor/workspace/lib/sink.js +0 -321
  212. package/workspace/lib/vendor/workspace/lib/state-root.js +0 -587
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  type: Guide
3
3
  title: "Guide: the Calendar tab of the console page"
4
- description: "The Calendar tab of the console page (/c3.html): the five zooms, the layer chips, the markers, the context of a meeting, free time and the empty states."
4
+ description: "The Calendar tab of the console page (/c3.html): the five zooms, the layer chips, the markers, the context of a meeting, free time, the tidy-up suggestions and the empty states."
5
5
  timestamp: 2026-10-11
6
6
  ---
7
7
 
8
8
  # Guide: the Calendar tab of the console page
9
9
 
10
- The Calendar tab of the console page (`/c3.html`) shows time. It shows what happens and what falls due, by date. It shows no card deck, no task list and no strategy panel. Your due items live in Work. The strategy and progress panels live in Reports and Initiatives.
10
+ The Calendar tab of the console page (`/c3.html`) shows time. It shows what happens and what falls due, by date. At the top it shows a short deck of headline cards about your calendar, for example a conflict or a meeting with no time to prepare. The deck shows nothing when PMOS has no card about your calendar. The tab shows no task list and no strategy panel. Your due items live in Work. The strategy and progress panels live in Reports and Initiatives.
11
11
 
12
12
  ## Zoom and move
13
13
 
@@ -26,26 +26,29 @@ The chips under the zoom bar are the layers. Each chip shows the number of items
26
26
  | Releases | The release dates. |
27
27
  | Report dates | The dates on which a report goes out. |
28
28
  | My due items | The due dates of your own items, as markers. |
29
- | Free time | The free blocks of your working day. This chip is off at the start. |
29
+ | Free time | The free blocks of your working day. The chip shows the number of blocks in the range. |
30
+ | Tidy-up | The suggestions to tidy up the calendar of the range. This chip is off at the start. |
30
31
 
31
- All layers are on at the start, except Free time.
32
+ All layers and Free time are on at the start. Tidy-up is off.
32
33
 
33
34
  ## The grid
34
35
 
35
36
  - **Day** shows the timeline of the day. The markers of the day are in a strip above it.
36
- - **Week** shows a timeline for each day. The markers of each day are in a strip under the day name. Press a day name to open that day.
37
- - **Month** shows a cell for each day. A cell shows the number of meetings and up to three markers. "+2" means two more markers. Press the day number to open the day.
38
- - **Quarter** shows a row for each week. **Year** shows a card for each month. Each shows the number of meetings and dated items, and the most important markers.
37
+ - **Week** shows a timeline for each day. Each day name has the hours of meetings of that day and a small bar. The bar has three parts: time tied to a promise or a decision, routine time, and the rest of a 6 hour day. The markers of each day are in a strip under the day name. Press a day name to open that day.
38
+ - **Month** shows a cell for each day. A cell shows the number of meetings and up to three markers. "+2" is a button. It opens the day with the other markers. Press the day number to open the day.
39
+ - **Quarter** shows a row for each week. **Year** shows a card for each month. Each shows the number of meetings and dated items, and the most important markers. A "+N" button opens the week or the month that holds the rest.
39
40
 
40
41
  A marker has a symbol and a short title. A red edge means late or at risk of missing. An amber edge means at risk.
41
42
 
43
+ A meeting is blue when it is tied to a promise or a decision, and grey when it is routine. A red meeting is blocked: its prep waits on someone. A coming meeting with prep left ends its time line with "prep to do". A past meeting that PMOS holds a record for ends it with "held". A line under the grid explains the colours.
44
+
42
45
  ## Select a marker
43
46
 
44
- Press a marker to show its detail in the side column. The detail shows the title, the kind and the date. The link under it opens the item where it lives: an initiative opens in Initiatives, your item opens in Work, and a report opens in Reports. A marker has no action of its own. You act on the item in its home.
47
+ Press a marker to show its detail in the side column. The detail shows the title, then a row with where the item lives, the kind, the date and its initiative. The link under it opens the item where it lives: an initiative opens in Initiatives, your item opens in Work, and a report opens in Reports. A marker has no action of its own. You act on the item in its home.
45
48
 
46
49
  ## Select a meeting
47
50
 
48
- Press a meeting to show its context in the side column. Each line has a link to its source.
51
+ Press a meeting to show its context in the side column. Under the title, a row shows where the meeting lives, the people and the initiative. Each line has a link to its source.
49
52
 
50
53
  - For a past meeting, **What came out of it** lists the decisions and actions of its note. **What moved after it** lists the items that changed within 48 hours and refer to the meeting or its initiative.
51
54
  - For a coming meeting, **Prepared** lists what is ready, and **To prepare** lists what is still open.
@@ -54,12 +57,38 @@ When PMOS holds nothing for a meeting, the detail says so. It does not guess.
54
57
 
55
58
  ## Free time
56
59
 
57
- Press **Free time** to show the free blocks. A free block is 90 minutes or more inside your working hours. On Day and Week, each block is a hatched window on the timeline. On Month, each day shows the number of free blocks. The side column lists the blocks.
60
+ Press **Free time** to show the free blocks. A free block is a gap inside your working hours that is long enough to use. On Day and Week, each block is a dashed purple window on the timeline, with its length, for example "1.5 h focus". The side column lists the blocks, up to 8, with the suggestion for each. On Month, Quarter and Year the list says that free time shows in the Day and Week views, and the chip still shows the number of blocks.
58
61
 
59
62
  Each block can have a suggested use, for example a prep step that is at risk or the top item due that week. When nothing fits, the block says "Free, nothing specific to suggest". A suggestion is only a proposal. PMOS writes nothing to your calendar.
60
63
 
64
+ ## Tidy-up
65
+
66
+ Press **Tidy-up** to see what to change in the calendar of the range. The chip shows the number of suggestions. PMOS finds them with fixed rules. It does not use a model.
67
+
68
+ | Rule | When PMOS raises it | Severity |
69
+ |---|---|---|
70
+ | Overlap | Two meetings with a time overlap. | Needs a fix |
71
+ | No break | A meeting starts less than 10 minutes after the one before it ends, on the same day. | At risk |
72
+ | Prep at risk | A coming meeting has prep steps left, and less than 30 minutes of free time remain before it for each step. | At risk |
73
+ | Stopped initiative | A meeting is about an initiative that is done, parked, on hold, closed or cancelled. | At risk |
74
+ | Review too early | A review, sync or checkpoint comes before a milestone or promised date of its initiative that is not done. | Worth a look |
75
+ | Late initiative | A milestone or promised date in the range belongs to an initiative that is delayed, overdue or at risk. | Needs a fix when delayed or overdue, At risk when at risk |
76
+ | Heavy day | A working day has more than 6 hours of meetings. | Worth a look |
77
+
78
+ All-day events take no time, so the time rules do not use them.
79
+
80
+ The side column lists the suggestions in three groups: **Needs a fix**, **At risk** and **Worth a look**. Each suggestion tells you why PMOS raised it and proposes one change, for example "Move Design sync to 10:30 or shorten Standup." The links under it open the items involved: a meeting link shows the meeting in the detail, and an initiative link opens the initiative in Initiatives.
81
+
82
+ On Day and Week, each meeting that a suggestion names has a coloured ring. Red means Needs a fix. Amber means At risk.
83
+
84
+ A suggestion is only a proposal. PMOS has no access to your calendar and changes nothing. You make the change in your calendar or where the item lives.
85
+
86
+ When the range has no suggestion, the list says "Nothing to tidy in this range." When a rule cannot run, for example because no calendar is imported, the list names the rule under **Not checked** and tells you why. When the server sends no tidy-up list, the list says so.
87
+
61
88
  ## Empty states
62
89
 
63
90
  The **In this range** list in the side column names each layer with its count. When a layer is empty, it tells you why. For example, no calendar is cached yet, or the server sent no dated items. When the range has nothing at all, the grid says so.
64
91
 
65
92
  On a narrow screen the side column is under the grid. From 1100 pixels wide it is at the right.
93
+
94
+ Each suggestion has two buttons. **Propose it** marks it as proposed and shows a note that nothing changed in your calendar. **Dismiss** hides it for the rest of the visit. Neither button changes your calendar or sends anything to anyone.
@@ -69,3 +69,4 @@ On a desktop the workspace is one frame. [Layout](layout.md) explains each part.
69
69
  - [Integrated work](integrated-work.md): how `pmos verify-work` turns a merged commit into Done, and what "Done · your call · not merged" means.
70
70
  - [Report slides](report-slides.md): how the Reports page shows a report as the PM-OS biweekly slides, Present and Print / PDF, and how your notes become the words on the slides.
71
71
  - [Reports: dashboards of reports](reports-dashboards.md): the console Reports page, its dashboards at portfolio, board and initiative scope, how to edit and share one as a draft, and the Drafts tab.
72
+ - [Settings in console3](settings.md): how to open Settings, what each section holds, the scope tags, the environment notes, and where the settings are kept.
@@ -0,0 +1,65 @@
1
+ ---
2
+ type: Guide
3
+ title: "Initiatives on the console: Portfolio, boards and workflows"
4
+ description: "How to use the Initiatives tab of the console page (/c3.html): the Portfolio of boards, a board and its nine tabs, an initiative with its own workflow and stage records, and the Build and deliver setting."
5
+ timestamp: 2026-10-11
6
+ ---
7
+
8
+ # Initiatives on the console: Portfolio, boards and workflows
9
+
10
+ The Initiatives tab of the console page (`/c3.html`) has these levels: **Portfolio** › **Board** › **Initiative** › **Epic** › **Item**. A breadcrumb at the top takes you back one level. The address bar keeps your place in the `init=` parameter, so a reload opens the same page.
11
+
12
+ ## Portfolio
13
+
14
+ The Portfolio shows one row per board. A board is a product folder, for example IDPF. Each row shows:
15
+
16
+ - the board name and its health: On track, Needs attention or Off track
17
+ - the owner, and **Build and deliver** with the Jira project key, or "PMOS tasks only"
18
+ - the initiatives per category: Discover, Plan, Do and Learn
19
+ - the next release
20
+
21
+ Under the rows are a timeline of all boards (board › initiative › epic) and the boards that have new asks. Press a board name to open the board. Press **New board** to add a board.
22
+
23
+ ## A board
24
+
25
+ The tabs are **Summary**, **Initiatives**, **Triage**, **Backlog**, **Board**, **Timeline**, **Releases**, **Docs** and **Sprints**. A board with Build and deliver off has no Releases and no Sprints tab.
26
+
27
+ - **Summary** shows the initiatives at a glance and one bar per category. Press a bar to open the Initiatives tab with that category.
28
+ - **Initiatives** lists the initiatives of the board, 25 on each page. Use the saved views (Now and next, Mine, At risk, No owner, All), the filters and the sort. Press **Move** on a row to move the initiative to a stage of its own workflow.
29
+ - **Triage** lists the new asks. Add an ask, then open it to see its draft. Press **Accept** to start an initiative. An initiative needs an anchor (a KR or a health budget). Press **Ask for more** to ask a question, or **Decline** and give a reason.
30
+ - **Backlog**, **Board** and **Timeline** show the epics and items. Jira items and PMOS tasks are mixed. The **Initiative** and **Source** filters are the same on the three tabs.
31
+ - In Backlog, add a PMOS task to an initiative.
32
+ - In Board, drag a PMOS task to a column, or use its menu. A Jira item has a lock: change it in Jira.
33
+ - In Timeline, use **Week**, **Month** and **Quarter** to zoom, and drag the empty chart to pan. Drag a PMOS bar to reschedule the task, or focus the bar and press the Left or Right arrow key. The toast has **Undo**. A Jira bar is locked.
34
+ - **Releases** shows the next release, the later ones and the past ones, with their scope initiatives.
35
+ - **Docs** lists the documents of the board by initiative.
36
+ - **Sprints** shows the Jira sprints and the sprint burndown. They are read-only.
37
+
38
+ ### Board settings
39
+
40
+ Press the gear in the board header to open the board settings.
41
+
42
+ - **Build and deliver**: turn it on to mirror a Jira project. Type the Jira project key. With it off, every item is a PMOS task and the Build workflows are not available.
43
+ - **Workflows this board offers**: the templates that a new initiative on this board can use.
44
+ - **Default for new initiatives and accepted asks**: the template that a new initiative or an accepted ask starts on.
45
+
46
+ ## An initiative
47
+
48
+ Each initiative has its own workflow, picked from a template: for example Product, Quick fix, Research only, or Content and launch. The stepper shows the stages of that workflow. Press a stage to move the initiative there. The move is your decision, so nothing blocks it. An order rule shows as a warning chip, for example "Skipped Plan" or "No spec yet". Press **Workflow** to change the template or edit the stages. When you remove a stage that holds the initiative, the editor asks where it goes.
49
+
50
+ Under the stepper are the tools of the current stage. **More tools** lists the tools of the other stages. The tabs are **Overview**, **Breakdown**, **Docs**, **Tickets**, **Timeline** and **History**.
51
+
52
+ The **Overview** shows the stage records of the current stage:
53
+
54
+ | Category | Records |
55
+ |---|---|
56
+ | Discover | Problem statement |
57
+ | Plan | RICE score, with its rank on the board |
58
+ | Do | Launch checklist, sprint burndown (from Jira, read-only) |
59
+ | Learn | Kill conditions, learnings |
60
+
61
+ A project workflow has the launch checklist and the learnings only. If the workspace server cannot store stage records yet, the cards say "Nothing recorded yet." and nothing is saved.
62
+
63
+ ## Demo mode
64
+
65
+ Open `/c3.html?demo=1` to see five sample boards and about 310 initiatives. In demo mode nothing is saved, and a reload starts again.
@@ -2,7 +2,7 @@
2
2
  type: Guide
3
3
  title: "Jira: tickets drafted from the PRD, and their status"
4
4
  description: "How to draft Jira tickets from a PRD in your ticket template, push the ones that are ready, and see their status, sprint and progress on the initiative's Jira tickets tab."
5
- timestamp: 2026-10-06
5
+ timestamp: 2026-10-11
6
6
  ---
7
7
 
8
8
  # Jira: tickets drafted from the PRD, and their status
@@ -95,6 +95,8 @@ The agent runs the **Push to Jira** skill. It reads what to send with `pmos jira
95
95
 
96
96
  Each row shows the ticket's status in Jira, and whether it is in the **Active sprint**, the **Next sprint** or the **Backlog**, with its subtasks done. A blocked ticket shows **Blocked** and the reason.
97
97
 
98
+ The check also reads each ticket's story points, its resolution date, and the start and end dates of its sprint. The initiative's sprint burndown uses them. When the sprints have no dates or the tickets have no story points, the burndown is not shown. The burndown uses the tickets in the sprint at the time of the last check. It does not show scope that was added or removed during the sprint.
99
+
98
100
  The **Jira status check** reads this for every initiative. **Check now** on the tab reads it for one. To run it every day before the morning brief (06:45), schedule it at 06:30:
99
101
 
100
102
  ```
@@ -157,6 +157,8 @@ On an iPhone or an iPad, the terminal gets smaller when the keyboard opens, so t
157
157
 
158
158
  The address options `?layout=legacy` and `?fixture=cockpit` keep the older layouts. The rest of this page describes them. In the cockpit, the workspace has four columns: the repository rail, the list, the detail and the tabs. With `?layout=legacy` it has three columns: navigation, detail and tabs.
159
159
 
160
+ In the older layout, each working tree of a repository has **+ session here**. It starts a shell in that tree. If you press it while the page is still loading, the session starts when the terminal is ready.
161
+
160
162
  ### The repository rail, the list and the tools
161
163
 
162
164
  The rail is 64 pixels wide and shows one tile for each repository. A dot on a tile means that repository has something that needs you. The selected repository has no dot, because the list beside it shows what needs you. The `+` tile adds a repository. The rail has no tools menu: the repository list and Validate are in Settings, and everything else is in ⌘K.
@@ -108,7 +108,7 @@ Some items are not done in PMOS, such as "talk to Ana" or "set up a meeting with
108
108
  - **Not yet.** Choose later today, tomorrow or next week. Tomorrow and next week set a defer date, and the item returns to Today on that day. Next week means the next Monday. Later today reminds you in 3 hours.
109
109
  - **Drop.**
110
110
 
111
- An offline item can carry evidence that it is done, for example a meeting that took place. The row then says **Looks done?** and shows a **Confirm** button. PMOS never marks an item done by itself. You press Confirm.
111
+ An offline item can carry evidence that it is done. PMOS looks at your calendar and your notes for the person on the item. It uses a meeting that has ended and names the person, or a note that is not private and names the person, and that is newer than the item. The row then says **Looks done?**, gives the meeting or note title and its day, and shows a **Confirm** button. PMOS never reads a private note and never marks an item done by itself. You press Confirm.
112
112
 
113
113
  ### Review
114
114
 
@@ -130,9 +130,11 @@ Each item is in one view only. The rule, in order: an item in Someday stays in S
130
130
 
131
131
  Decisions are not on the Work page. They have their own place in the console.
132
132
 
133
- **Today** starts with a Focus band. It suggests up to 3 items. Select **Accept** to pin one, **Not today** to remove the suggestion, or **Unpin** to remove a pinned item. You can edit the title of a pinned item.
133
+ The right column of every view shows **Focus: jobs to be done**. Focus suggests up to 3 jobs, each with the reason. Select **Accept** to pin one, **Edit** to change its title, **Not today** to remove the suggestion, or **Unpin** to take a pinned job back. The line under Focus says how many you marked not today, with **Bring back**. Select a Focus row, or its job chip, to open the job's sheet, where you edit or delete the job. The **+** button in the Focus header opens a sheet to create a job.
134
134
 
135
- **Upcoming** shows one block for each of the next 7 days, then **Later**.
135
+ **Today** has three cards: **Overdue**, **Due today** and **Flagged**. Each row has a **Done** check. In **Inbox**, **Decide** opens the row. In **Waiting**, **Nudge** drafts a nudge and sends nothing. The **Review** view also holds the agent's drafts, which Briefing used to show.
136
+
137
+ **Upcoming** shows a **Next 7 days** card with one heading for each day, then a **Later** card.
136
138
 
137
139
  **Review** shows the items in Inbox, Waiting and Someday that nobody changed for 7 days or more, one at a time, the oldest first. For each item, select **Keep**, **Change** or **Drop**. When no items remain, the view shows **Review done**.
138
140
 
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  type: Guide
3
3
  title: "Guide: notes"
4
- description: "How to take notes in a meeting: one note top to bottom, typed notes as timed lines, key points written each minute and labelled by Jev, delete a note; final notes written after Stop from the whole recording, with speakers and a quote for each item, decisions with their why and who, next steps with an open question, a discussion paragraph, and Wispr Flow's notes merged in and fetched by hand when the fetch fails; listen to your microphone and the meeting on this machine, see decisions, actions and questions caught as they are said, check them against the repository for conflicts, capture highlights during the meeting, create tasks from next steps, correct and tag lines, see what changed in your notes, replay the meeting, link a note to its meeting and its initiative, and get a summary."
5
- timestamp: 2026-10-08
4
+ description: "How to take notes in a meeting: one note top to bottom, typed notes as timed lines, key points written each minute and labelled by Jev, delete a note; final notes written after Stop from the whole recording, with speakers and a quote for each item, decisions with their why and who, next steps with an open question, a discussion paragraph, and Wispr Flow's notes merged in and fetched by hand when the fetch fails; listen to your microphone and the meeting on this machine, see decisions, actions and questions caught as they are said, check them against the repository for conflicts, capture highlights during the meeting, create tasks from next steps, correct and tag lines, see what changed in your notes, replay the meeting, see screenshots of the shared screen beside the transcript, link a note to its meeting and its initiative, and get a summary."
5
+ timestamp: 2026-10-11
6
6
  ---
7
7
 
8
8
  # Guide: notes
@@ -20,6 +20,24 @@ The Record control is at the right of the top bar. It has two groups, always in
20
20
 
21
21
  Starting a note, from the Record control or from **Take notes** on a calendar event, shows the Notes page with that note.
22
22
 
23
+ ### The Record control in the console
24
+
25
+ The console (the page at `/c3.html`) has the same Record control in its top bar, beside the Sessions button. It is always there, also when nothing is recording. **Record** (the microphone) starts an untitled note and listens at once. The arrow lists the meetings of today that have not started. Press one to start a note linked to that calendar event. While a meeting records, the red group shows its name and clock, **Highlight**, **Pause** and **Stop**. While it is paused, the group shows **Resume** and **Stop**. **Stop** asks first and offers **Pause instead**. A red dot shows on the Calendar tab while a meeting is held. The console has no Notes page, so the name in the red group opens the note in the main app.
26
+
27
+ When Whisper or Qwen3-ASR transcribes the meeting, the red group also names the engine and the language, for example **Whisper · English**. Check it when lines come out in the wrong language: the language is set in the Notes settings.
28
+
29
+ One meeting records in one tab at a time. If another tab or window already records the meeting, **Record** there says so and starts nothing.
30
+
31
+
32
+ ## What the live transcript leaves out
33
+
34
+ The live transcript keeps each sentence once:
35
+
36
+ - When the meeting plays on your speakers, your microphone hears the other people too. PMOS takes their words out of your microphone's line, and keeps the line from the meeting. Your own words stay.
37
+ - A line that only repeats the line before it is left out. A sentence said twice in a row in one line is kept once.
38
+ - If the meeting language is English (the default), a line that comes back in another language, for example Hindi, Indonesian or Chinese, is transcribed again in English. The first text stays with the line.
39
+ - If the workspace restarts during a meeting, the recording continues where it was. Nothing is written twice.
40
+
23
41
  ## Pause, resume and stop
24
42
 
25
43
  **Pause** keeps the meeting open. PMOS stops listening and the clock stops. It does not ask, and it does not write the final notes yet. You can resume for one hour. The top bar shows the minutes left. After an hour the meeting ends by itself, and PMOS writes its final notes.
@@ -189,6 +207,21 @@ The workspace makes the copy from the replay only. It does not change the transc
189
207
 
190
208
  To stop keeping audio, clear **Keep the audio for replay** in the settings. To delete one note's audio, press **Delete this note's audio** in the settings; the notes and the transcript stay. The browser's own recognition keeps no audio, so a meeting heard that way cannot be replayed.
191
209
 
210
+ ## See the shared screen
211
+
212
+ When you share the meeting's screen, the workspace also keeps screenshots of it, so the note shows what people saw. The browser's sharing window is your permission: the workspace takes no screenshot of a screen you did not share, and the browser shows that it is sharing for as long as you listen.
213
+
214
+ - The workspace follows the meeting to choose when to keep a screenshot. It keeps one when the picture changes and then holds still, such as a new slide, a new window or the end of a scroll. A still screen keeps no new screenshot, and the frames of a transition are not kept.
215
+ - When the picture keeps moving, such as a video or a demo, the workspace keeps one sample every 15 seconds while it moves, not every frame.
216
+ - When someone says something about the screen, such as "as you can see" or "this slide", the workspace keeps the picture that was on the screen when the line was said. It does the same for a line that the workspace labels a decision or a next step, and when you press the highlighter.
217
+ - Each screenshot says why it was kept, for example "Kept when the screen changed" or "Kept when someone said "this slide"". A picture that the last screenshot already shows is not kept again.
218
+ - Each screenshot has the meeting time, the same clock as the transcript and the replay. Screenshots are kept on this machine with the note, outside every repository, and are never sent anywhere. A private note keeps none.
219
+ - After **Stop**, the note shows **Screen** below the replay: one picture for each screenshot, with its time. Press a picture to see it large, with **Previous**, **Next** and **Play from here**. While the replay plays, the picture on the screen at that time is marked.
220
+ - In the transcript, a line said while a new screenshot came up has a small picture beside it. Press it to see the screenshot.
221
+ - When **tesseract** is on this machine, the workspace reads the text on each screenshot, on this machine, and shows it under the large picture. To install it, run `brew install tesseract` in a terminal.
222
+
223
+ To stop taking screenshots, clear **Capture the shared screen** in the settings. The sound of the shared screen is still used. To stop sharing only the picture during a meeting, stop the share in the browser's sharing bar; the screenshots stop. To delete one note's screenshots, press **Delete this note's screenshots** in the settings, or **Delete screenshots** in the note's **More** menu. The notes, the transcript and the audio stay. Deleting a note, or marking it private, deletes its screenshots.
224
+
192
225
  ## Capture highlights during the meeting
193
226
 
194
227
  While listening, press the highlighter in the top bar to capture the last 30 seconds of conversation. A pop-up opens just below the Record control and shows the highlight's progress. Its icons keep the highlight, discard it, or close the pop-up (the highlight keeps working):
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  type: Guide
3
3
  title: "Reports: dashboards of reports"
4
- description: "How the console Reports page shows dashboards at portfolio, board and initiative scope, how to edit one, how to share one as a draft, and where the report drafts went."
4
+ description: "How the console Reports page shows dashboards at portfolio, board and initiative scope, how to edit one, how to share one as a draft, how to put one on a schedule, and where the report drafts went."
5
5
  timestamp: 2026-10-11
6
6
  ---
7
7
 
@@ -13,7 +13,9 @@ A report answers one question. A dashboard is a set of reports for one scope. Op
13
13
 
14
14
  - **Dashboards.** The reports of one scope, drawn from the repository's records.
15
15
  - **Library.** Every report the workspace can draw, with the question it answers and where it is used.
16
- - **Drafts.** The four report families, the claims check and the outbox. They work as before.
16
+ - **Drafts.** The dashboard drafts you made with Share, what the Briefing used to show below Needs you, and the report families. See "Drafts" below.
17
+
18
+ The headline deck of the Reports page is above the tabs. It shows only report signals: claims that block sending, ticket keys in a leadership report, a digest that is due, and people who hold an old date. It never repeats the Briefing's cards. When there is no report signal, the deck says that nothing needs you. The scope buttons are on the same row as the tabs.
17
19
 
18
20
  ## Choose a scope
19
21
 
@@ -42,7 +44,7 @@ The Calendar page no longer carries these. They moved here.
42
44
  ## Edit a dashboard
43
45
 
44
46
  1. Press **Edit dashboard**.
45
- 2. Use the arrows to move a report. Press **Remove** to take one off. The report stays in the library, and **Undo** brings it back.
47
+ 2. Use the arrows to move a report. Press the cross to take one off. The report stays in the library, and **Undo** brings it back.
46
48
  3. Choose a report under **Add from the report library**.
47
49
  4. Press **Done editing**.
48
50
 
@@ -52,6 +54,28 @@ The workspace keeps your layout for each scope in its runtime state. It does not
52
54
 
53
55
  Press **Share**. A sheet shows the dashboard as a report: a headline, one section per report, what needs your call, and the sources. Choose **Leadership** for one sentence per report. Choose **Team** to add the numbers behind each sentence.
54
56
 
55
- **Save as draft** puts one draft in the outbox. Nothing is sent. With no channel connected, the outbox says so.
57
+ **Make a draft now** puts one draft in the outbox. Nothing is sent. With no channel connected, the outbox says so.
58
+
59
+ ## Put a dashboard on a schedule
60
+
61
+ A schedule makes a ready draft of a dashboard and tells you on the bell. Nothing is sent. No sender channel is connected yet, so you send the draft yourself.
62
+
63
+ 1. Press **Share**.
64
+ 2. Choose the audience: **Leadership** or **Team**.
65
+ 3. Choose **Weekly, Mondays 08:00** or **Monthly, 1st at 08:00**. The sheet shows the next draft.
66
+ 4. Press **Save schedule**.
67
+
68
+ The dashboard head then says "Scheduled: ..., draft only". To stop a schedule, choose **Not scheduled** and press **Save schedule**. A dashboard has one schedule. The times are the time on this computer.
69
+
70
+ On each run, the workspace reads the dashboard as it is then, with your layout, and puts one draft in the outbox. The draft text is the same as the text **Make a draft now** makes. The bell shows "a scheduled draft is ready" for 7 days, or until you discard the draft. Press the notice to open **Drafts**.
71
+
72
+ If the workspace is not running at the time, the run happens once when it starts again. It does not make one draft for each run it missed. If a run cannot read the dashboard, **Scheduled** shows why, and the next run tries again.
73
+
74
+ ## Drafts
75
+
76
+ Open the **Drafts** tab. It has these parts, in order.
56
77
 
57
- Scheduled sending is not available yet. The schedule control is off, and the sheet says why.
78
+ - **Drafts.** One row for each dashboard draft. A row says **Made by schedule** or **Made by you**. Press **Preview** to read the text. Press **Discard** to remove it from the list. **Undo** in the message brings it back. The log keeps the line.
79
+ - **Scheduled.** One row for each schedule: the dashboard, how often, the audience and the next draft.
80
+ - **Handled for you**, **What I could stop** and **Data you can lean on.** The Briefing used to show these. They come from the same briefing data. A card with no data does not show.
81
+ - **Reports to send.** The four report families, the claims check and the outbox. They work as before.
@@ -0,0 +1,68 @@
1
+ ---
2
+ type: Guide
3
+ title: "Settings in console3: one home for each setting"
4
+ description: "How to open Settings in console3, what each section holds, what the scope tags and the environment notes mean, and where the settings are kept."
5
+ timestamp: 2026-10-11
6
+ ---
7
+
8
+ # Settings in console3: one home for each setting
9
+
10
+ Settings is the page in console3 (`/c3.html`) where you change how PMOS works. Each setting has one home on this page. When another page shows a setting, it shows a link to this page and not a second control.
11
+
12
+ ## Open Settings
13
+
14
+ Use one of these:
15
+
16
+ 1. Press the gear in the top bar, next to More.
17
+ 2. Press More, then **Settings**.
18
+ 3. Press ⌘K, type `settings`, and press Enter.
19
+ 4. Open `/c3.html?tab=settings`. Add `&section=recording` to open one section, for example.
20
+
21
+ Settings is not a tab. While it is open, no tab is selected. Press a tab to go back to that tab.
22
+
23
+ ## The sections
24
+
25
+ | Section | What it holds |
26
+ |---|---|
27
+ | About you | Your name, your role, what you do and your job description. The Welcome page asks for the same four on first run. |
28
+ | Workspaces | Your workspaces: rename, remove, add one by its folder. Which workspace opens on start, and what the Briefing covers. |
29
+ | Boards and workflows | The workflow templates for new boards and the default template. The rules that move a card. To change the workflow of one board, open that board in Initiatives. |
30
+ | Connectors | How your Claude session reaches Google Calendar, Jira, Wispr Flow and a sender. The import window, the refresh time, how private events show, and attendee names. |
31
+ | Recording | The live transcript: what to listen to, the Whisper model, the language, the echo removal, the final pass after Stop, the words to recognize, and how long kept audio stays. A card at the top says what recording uses now. |
32
+ | Day and time | The time zone, the first day of the week, your working hours, the free time before a meeting with prep, the buffer between meetings, and the time-of-day tint and daylight strip. |
33
+ | Sharing | How a dashboard is shared: off, a link, or sent by the sender. The audiences of the workspace. |
34
+ | Access and devices | Use from a phone or another computer: the host, the tunnel and the people who may open it. |
35
+ | Claude sessions | What a new session starts with: the CLI, the model, the Claude profile and the launch flags. The session limits. Validate consent for this workspace. |
36
+ | Privacy and data | A list of what leaves this computer and when. Whether a TypeSafe key is saved, and the data folder. |
37
+ | Appearance | The theme (Same as system, Light or Dark) and the page that opens first. |
38
+ | Updates | The version of the app and of each workspace's kit. Check for updates, and how updates are found and applied. |
39
+
40
+ Type in **Search settings** to find a setting in any section. Press **Open section** to go to its section.
41
+
42
+ ## Read a row
43
+
44
+ Each row has a label, a help line and a control.
45
+
46
+ - **This computer** means the setting applies to every workspace on this computer.
47
+ - **Workspace · name** means the setting applies only to the workspace in the **Workspace** list at the top of the page. Pick another workspace to see or change its value.
48
+ - A dot after the scope tag means the value is not the default. **Reset** puts the default back. The section name in the list on the left shows how many of its settings you changed.
49
+ - A yellow note with a name such as `PMOS_WHISPER_LANG=en` means a variable in the environment where PMOS starts sets this value. The variable wins over the page. Remove it from your shell profile, then restart PMOS.
50
+ - A lock means the value is fixed or is set somewhere else. The row says where.
51
+
52
+ A change is saved when you make it. A message at the bottom of the page says **Saved** and the setting's name. Press **Undo** in the message to put the old value back. If a value is refused, the row shows why.
53
+
54
+ When a section has changed settings, **Reset section** at the top of the section puts all of them back to the default.
55
+
56
+ Some rows show a feature that PMOS does not have yet, such as choosing calendars, mapping Jira projects, pairing a phone, the device list, and export or reset of every setting. The control on these rows is off, and the row says why.
57
+
58
+ ## Where the settings are kept
59
+
60
+ The settings that had a home before this page keep it. For example, the recording engine is kept by the notes engine, Validate consent by the validate route, and the theme and the new-session defaults in this browser.
61
+
62
+ The other settings are kept in the PMOS state directory, in `settings.json` for this computer and in `settings-ws/<workspace>.json` for each workspace. Only you can read these files. `GET /api/settings` returns every setting with its value and default. A change goes through `POST /api/settings` and must come from the workspace page.
63
+
64
+ ## Limits
65
+
66
+ - A setting changes what the page stores. Some features read their setting in a later release. Until then, the feature uses its default.
67
+ - Settings changes templates and defaults for boards. It does not change an existing board.
68
+ - Nothing on this page sends a message or shares a dashboard by itself.
@@ -6,7 +6,7 @@ timestamp: 2026-10-11
6
6
 
7
7
  # Welcome (first run)
8
8
 
9
- The Welcome page is the first screen of a new folder. It reads your folder, shows what it found, and sets up your portfolio from it. You do not need to answer questions first.
9
+ The Welcome page is the first screen of a new folder. It asks who you are and where your work lives, reads your folder and the tools you choose, shows what it found, and sets up your portfolio from it.
10
10
 
11
11
  ## How you get there
12
12
 
@@ -14,20 +14,20 @@ Run `pmos` in a plain folder that PMOS has not imported. The terminal says "firs
14
14
 
15
15
  Run `pmos welcome` to open the page on purpose, for example to scan a folder again or to undo an import. `pmos welcome <path>` opens it for another folder.
16
16
 
17
- Choose **Not now** on the first screen to go to the console. Welcome then stops opening on its own for that folder. `pmos welcome` still opens it.
17
+ Choose **Not now** on the first screen, or **Skip setup** on the screens after it, to go to the console. Welcome then stops opening on its own for that folder. `pmos welcome` still opens it. To go back, choose **Back** or a step you finished in the steps bar at the top.
18
18
 
19
19
  ## The promise
20
20
 
21
- The page says it before the scan: PMOS reads only, writes nothing in your folder, and nothing leaves this computer. The scan runs on your machine and uses no model. The import is stored in the PMOS state folder, never in your folder.
21
+ The page says it before the scan: PMOS reads only, writes nothing in your folders or your tools, and sends nothing out. The folder scan runs on your machine and uses no model. The tools you tick are read by your agent session with your own connection, read-only. The import is stored in the PMOS state folder, never in your folder.
22
22
 
23
23
  ## The steps
24
24
 
25
- 1. **Welcome.** The page shows the folder name and path. Choose **Add another folder** to open the system folder chooser and add a second folder. Choose **Scan** to start. A spinner shows while the scan runs. A large folder can take a minute or two, and the rest of PMOS keeps working.
26
- 2. **First look.** One sentence gives the counts: initiatives, documents, deadlines, stale documents, duplicates, people and risks. Up to ten findings follow. Each finding shows the file and line it comes from. Choose **Continue**.
27
- 3. **Your portfolio.** PMOS proposes one board for each product folder (`products/<name>/`). If there is no product folder, it proposes one board for the whole folder. Each board lists its initiatives. Each row has a checkbox, a title you can edit, a lane, an anchor, a stage and a document count. Choose the document count to see the documents. Use the board list on a row to move it to another board. Each board shows how many documents PMOS could not place. High and medium confidence rows start checked. The button reads **Import N initiatives into M boards**. The numbers change as you check, uncheck and move rows.
28
- 4. **Questions.** This step appears only when the scan could not decide something. There are three questions at most. Each question shows its default already chosen. Choose **Import** to accept what is chosen. Choose **Skip** to leave a question open: for the anchor question, the proposed anchors then stay marked for you to confirm later.
29
- 5. **First Briefing.** After the import, the page lists up to five things that need you first. An item that belongs to an imported initiative names the initiative and its board. Choose **Continue**. Choose **Undo this import** to take the import back and return to your portfolio.
30
- 6. **More sources.** This step is optional. It offers Calendar (your meetings today and for the next 14 days) and Jira (the issues assigned to you). PMOS reads nothing from them until you choose **Bring in**. Bring in starts the source's read-only skill as an agent session in the workspace, with your own connection. The skill writes nothing to the tool. Choose **Skip** to leave a source out. You can bring it in later from Settings. Inbox and Slack have no import yet. Choose **Open PMOS** to go to the console.
25
+ 1. **About you.** Type your name, your role, what you do in one line, and your job description. Every field is optional. Choose **Continue** to save them. The morning brief and the day check use them to judge what matters to you. `pmos proactive settings` shows them, and `pmos proactive settings --role <text> --work <text> --duties <text>` changes them.
26
+ 2. **Your sources.** The page shows the folder and its path. Choose **Add another folder** to open the system folder chooser and add a second folder. Under **Tools**, tick the tools PMOS can read: Calendar (your meetings today and for the next 14 days), Jira (the issues assigned to you), Inbox (the threads waiting on you, by subject and sender only) and Slack (messages that mention you and your direct messages, as short summaries). None is ticked at first. Choose **Scan** to start. With tools ticked, the button reads, for example, **Scan the folder and read 2 tools**. Calendar and Jira each start their read-only skill as an agent session. Inbox and Slack are turned on for your daily brief, and the day is prepared now; if the morning brief was not scheduled, it is scheduled for 06:45 each day. A spinner shows while the scan runs. A large folder can take a minute or two, and the rest of PMOS keeps working.
27
+ 3. **First look.** One sentence gives the counts: initiatives, documents, deadlines, stale documents, duplicates, people and risks. Up to ten findings follow. Each finding shows the file and line it comes from. Choose **Continue**.
28
+ 4. **Your portfolio.** PMOS proposes one board for each product folder (`products/<name>/`). If there is no product folder, it proposes one board for the whole folder. Each board lists its initiatives. Each row has a checkbox, a title you can edit, a lane, an anchor, a stage and a document count. Choose the document count to see the documents. Use the board list on a row to move it to another board. Each board shows how many documents PMOS could not place. High and medium confidence rows start checked. The button reads **Import N initiatives into M boards**. The numbers change as you check, uncheck and move rows.
29
+ 5. **Questions.** This step appears only when the scan could not decide something. There are three questions at most. Each question shows its default already chosen. Choose **Import** to accept what is chosen. Choose **Skip** to leave a question open: for the anchor question, the proposed anchors then stay marked for you to confirm later.
30
+ 6. **First Briefing.** After the import, the page lists up to five things that need you first. An item that belongs to an imported initiative names the initiative and its board. Under **Your tools**, each tool you ticked says it is being read; its items join your Briefing in PMOS when the agent session finishes. Choose **Open PMOS** to go to the console. Choose **Undo this import** to take the import back and return to your portfolio.
31
31
 
32
32
  ## Undo
33
33
 
@@ -35,4 +35,4 @@ The page says it before the scan: PMOS reads only, writes nothing in your folder
35
35
 
36
36
  ## What the page does not do
37
37
 
38
- The page does not change your folder. It does not open the files that the exclusion list names, such as `.git`, `node_modules` and files that look like secrets. It does not read Calendar or Jira until you choose **Bring in** on More sources, and the PMOS server itself calls nothing outside this computer. It does not import from Drive, Inbox, Slack or other tools.
38
+ The page does not change your folder. It does not open the files that the exclusion list names, such as `.git`, `node_modules` and files that look like secrets. It reads no tool you did not tick, and nothing before you choose **Scan**. The PMOS server itself calls nothing outside this computer. It does not import from Drive or other tools.
@@ -11,8 +11,9 @@
11
11
  const fs = require('fs');
12
12
  const path = require('path');
13
13
  const stateRoot = require('./state-root');
14
- const CI = require('../../scripts/calendar-import.js');
15
- const L = require('../../scripts/trust/ledger.js');
14
+ const { repoScript } = require('./repo-script.js');
15
+ const CI = require(repoScript('calendar-import.js'));
16
+ const L = require(repoScript('trust/ledger.js'));
16
17
 
17
18
  const COMMANDS = { calendar: ['import', 'status'] };
18
19
  const USAGE = [
@@ -213,29 +213,40 @@ function prepOf(e) {
213
213
 
214
214
  function nextWorkday(date) { let d = addDays(date, 1); while (!isWorkday(d)) d = addDays(d, 1); return d; }
215
215
 
216
- function freeFrom(events, range, today, opts = {}) {
217
- const view = range.view;
218
- const nowMs = Number.isFinite(opts.nowMs) ? opts.nowMs : localMs(today);
216
+ /** Prep at risk (calendar-memory's PER_STEP rule): each coming timed event with prep steps left and less free working time
217
+ * before it than PER_STEP minutes for each step left. Sorted by start. Shared by freeFrom and lib/calendar-tidy.js. */
218
+ function prepRisks(events, today, nowMs) {
219
+ const now = Number.isFinite(nowMs) ? nowMs : localMs(today);
219
220
  const spans = (events || []).map((e) => ({ e, ...(spanOf(e) || {}) })).filter((x) => x.s !== undefined);
220
221
  const memo = new Map();
221
222
  const loadOf = (date) => { if (!memo.has(date)) memo.set(date, memory.dayLoad(minutesOn(spans, date))); return memo.get(date); };
222
-
223
- // prep at risk: a coming event with steps left and less free time before it than PER_STEP for each step
224
223
  const risky = [];
225
224
  for (const x of spans) {
226
225
  const p = prepOf(x.e);
227
226
  const left = p.steps.length - p.done;
228
- if (!left || x.f <= nowMs) continue;
227
+ if (!left || x.f <= now) continue;
229
228
  const date = localDay(x.s);
230
229
  const startMin = minuteOfDay(x.s);
231
- let free = freeBetween(loadOf(date).merged, date === today ? minuteOfDay(nowMs) : DAY_START, startMin);
230
+ let free = freeBetween(loadOf(date).merged, date === today ? minuteOfDay(now) : DAY_START, startMin);
232
231
  for (let dd = today; dd < date; dd = addDays(dd, 1)) {
233
232
  if (!isWorkday(dd)) continue;
234
- free += Math.min(PER_DAY, freeBetween(loadOf(dd).merged, dd === today ? minuteOfDay(nowMs) : DAY_START, DAY_END));
233
+ free += Math.min(PER_DAY, freeBetween(loadOf(dd).merged, dd === today ? minuteOfDay(now) : DAY_START, DAY_END));
235
234
  }
236
- if (free < left * PER_STEP) risky.push({ id: x.e.id, title: str(x.e.title) || 'a meeting', date, s: x.s, left });
235
+ if (free < left * PER_STEP) risky.push({ id: x.e.id, title: str(x.e.title) || 'a meeting', date, s: x.s, left, free: Math.max(0, free) });
237
236
  }
238
237
  risky.sort((a, b) => a.s - b.s);
238
+ return risky;
239
+ }
240
+
241
+ function freeFrom(events, range, today, opts = {}) {
242
+ const view = range.view;
243
+ const nowMs = Number.isFinite(opts.nowMs) ? opts.nowMs : localMs(today);
244
+ const spans = (events || []).map((e) => ({ e, ...(spanOf(e) || {}) })).filter((x) => x.s !== undefined);
245
+ const memo = new Map();
246
+ const loadOf = (date) => { if (!memo.has(date)) memo.set(date, memory.dayLoad(minutesOn(spans, date))); return memo.get(date); };
247
+
248
+ // prep at risk: a coming event with steps left and less free time before it than PER_STEP for each step
249
+ const risky = prepRisks(events, today, nowMs);
239
250
 
240
251
  // items due soon, most pressing first: overdue and nearest due date, then the higher priority, then the title
241
252
  const prio = (p) => (/^P[1-3]$/.test(String(p || '')) ? Number(String(p)[1]) : 9);
@@ -369,4 +380,4 @@ function build({ range, today, nowMs, events, dated, src, own, planItemsDue }) {
369
380
  return { layers: l.layers, layers_total: l.layers_total, layers_note: l.layers_note, free, context: c.context, context_total: c.context_total };
370
381
  }
371
382
 
372
- module.exports = { layersFrom, freeFrom, contextFrom, build, toneOf, prepOf, spanOf, LAYER_CAP, CONTEXT_CAP, MIN_BLOCK, WINDOW_MS };
383
+ module.exports = { layersFrom, freeFrom, contextFrom, build, toneOf, prepOf, spanOf, prepRisks, minutesOn, localDay, minuteOfDay, LAYER_CAP, CONTEXT_CAP, MIN_BLOCK, WINDOW_MS };