create-pmos 0.52.0 → 0.53.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 +2 -2
  3. package/payload/mods/pmos-cockpit/README.md +13 -0
  4. package/payload/mods/pmos-cockpit/hooks/lib/commands.mjs +2 -1
  5. package/payload/mods/pmos-cockpit/hooks/lib/grants.mjs +41 -11
  6. package/payload/mods/pmos-cockpit/hooks/lib/guard.mjs +228 -8
  7. package/payload/mods/pmos-cockpit/hooks/register.tsx +11 -3
  8. package/payload/planning/evals/eval-calibration.md +1 -1
  9. package/payload/planning/okrs/health-budgets.md +1 -1
  10. package/payload/scripts/plan-items-stage.js +271 -0
  11. package/payload/scripts/pmos-log.sh +18 -7
  12. package/payload/scripts/workflow-state.js +28 -2
  13. package/payload/state/discoveries.md +1 -1
  14. package/payload/state/log.md +1 -1
  15. package/workspace/bin/pmos.js +15 -1
  16. package/workspace/cut-stub.js +40 -0
  17. package/workspace/first-paint-audit.js +145 -0
  18. package/workspace/fixtures/capture/requirements/capture-2026-10-04-1.md +10 -0
  19. package/workspace/fixtures/initiatives-api/list.json +176 -0
  20. package/workspace/fixtures/initiatives-api/post-403.json +5 -0
  21. package/workspace/fixtures/initiatives-api/post-ok.json +10 -0
  22. package/workspace/fixtures/initiatives-api/roadmap.json +208 -0
  23. package/workspace/fixtures/initiatives-api/sheet.json +112 -0
  24. package/workspace/fixtures/report-api/draft.json +177 -0
  25. package/workspace/fixtures/reports-page/draft-biweekly-2026-10-16.md +97 -0
  26. package/workspace/fixtures/today-api/provider-rows.json +204 -0
  27. package/workspace/fixtures/today-api/seam-probe-kinds.json +5 -0
  28. package/workspace/guide/board.md +81 -0
  29. package/workspace/guide/breakdown.md +154 -0
  30. package/workspace/guide/command-palette.md +75 -0
  31. package/workspace/guide/index.md +27 -17
  32. package/workspace/guide/initiatives-roadmap.md +130 -0
  33. package/workspace/guide/initiatives-screen.md +89 -0
  34. package/workspace/guide/initiatives-timeline.md +57 -0
  35. package/workspace/guide/integrated-work.md +94 -0
  36. package/workspace/guide/knowledge-graph.md +3 -68
  37. package/workspace/guide/layout.md +98 -32
  38. package/workspace/guide/live-notes.md +3 -3
  39. package/workspace/guide/pm-only-acts.md +89 -0
  40. package/workspace/guide/pm-only-lines.md +61 -0
  41. package/workspace/guide/reports-page.md +80 -0
  42. package/workspace/guide/reports.md +73 -0
  43. package/workspace/guide/timeline.md +70 -0
  44. package/workspace/guide/today.md +85 -0
  45. package/workspace/guide/validate-with-typesafe.md +1 -1
  46. package/workspace/lib/actor.js +91 -0
  47. package/workspace/lib/board-cache.js +32 -2
  48. package/workspace/lib/board-cli.js +108 -0
  49. package/workspace/lib/board-fold.js +232 -0
  50. package/workspace/lib/breakdown-export.js +80 -0
  51. package/workspace/lib/capture.js +98 -0
  52. package/workspace/lib/engine/plan-items-stage.js +271 -0
  53. package/workspace/lib/engine/workflow-state.js +28 -2
  54. package/workspace/lib/factory-join.js +158 -0
  55. package/workspace/lib/grant-mint.js +113 -0
  56. package/workspace/lib/health-rules-factory.js +92 -0
  57. package/workspace/lib/health-rules-plan.js +164 -0
  58. package/workspace/lib/health.js +79 -0
  59. package/workspace/lib/initiative-cli.js +222 -0
  60. package/workspace/lib/initiative-display.js +183 -0
  61. package/workspace/lib/initiative-needs.js +127 -0
  62. package/workspace/lib/initiative-rows.js +206 -0
  63. package/workspace/lib/initiative-writer.js +141 -0
  64. package/workspace/lib/issues.js +206 -0
  65. package/workspace/lib/item-cli.js +195 -0
  66. package/workspace/lib/item-spans.js +137 -0
  67. package/workspace/lib/measure-cli.js +100 -0
  68. package/workspace/lib/measurements.js +189 -0
  69. package/workspace/lib/mobile-nav.js +57 -53
  70. package/workspace/lib/needs-providers.js +120 -0
  71. package/workspace/lib/placements.js +440 -0
  72. package/workspace/lib/plan-items.js +922 -0
  73. package/workspace/lib/plan-ledgers.js +85 -0
  74. package/workspace/lib/plan-rules.js +72 -0
  75. package/workspace/lib/plan-tree.js +367 -0
  76. package/workspace/lib/pm-guard.js +174 -0
  77. package/workspace/lib/pm-lines-needs.js +331 -0
  78. package/workspace/lib/pmos-verbs.js +66 -0
  79. package/workspace/lib/proactive.js +7 -4
  80. package/workspace/lib/report-cli.js +152 -0
  81. package/workspace/lib/report-draft.js +579 -0
  82. package/workspace/lib/report-needs.js +213 -0
  83. package/workspace/lib/route-modules.js +128 -0
  84. package/workspace/lib/routes-board.js +91 -0
  85. package/workspace/lib/routes-capture.js +52 -0
  86. package/workspace/lib/routes-initiatives.js +371 -0
  87. package/workspace/lib/routes-reports.js +163 -0
  88. package/workspace/lib/routes-timeline.js +197 -0
  89. package/workspace/lib/routes-today.js +32 -0
  90. package/workspace/lib/today-cli.js +99 -0
  91. package/workspace/lib/today.js +333 -0
  92. package/workspace/lib/triage.js +163 -0
  93. package/workspace/lib/verify-work-cli.js +81 -0
  94. package/workspace/lib/work-check-needs.js +99 -0
  95. package/workspace/package-lock.json +1 -1
  96. package/workspace/package.json +4 -5
  97. package/workspace/public/index.html +29 -19
  98. package/workspace/public/pm/app.js +299 -30
  99. package/workspace/public/pm/bd-board.js +113 -0
  100. package/workspace/public/pm/bd-drag.js +59 -0
  101. package/workspace/public/pm/bd-model.js +152 -0
  102. package/workspace/public/pm/bd-timeline.js +233 -0
  103. package/workspace/public/pm/bd-tree.js +244 -0
  104. package/workspace/public/pm/board-copy.js +57 -0
  105. package/workspace/public/pm/breakdown-api.js +58 -0
  106. package/workspace/public/pm/breakdown-copy.js +138 -0
  107. package/workspace/public/pm/components.css +3054 -0
  108. package/workspace/public/pm/cycle-review.js +125 -0
  109. package/workspace/public/pm/data.js +40 -187
  110. package/workspace/public/pm/dest-board.js +438 -0
  111. package/workspace/public/pm/dest-initiatives.js +134 -0
  112. package/workspace/public/pm/dest-reports.js +270 -0
  113. package/workspace/public/pm/dest-settings.js +217 -0
  114. package/workspace/public/pm/dest-today.js +176 -0
  115. package/workspace/public/pm/dialogs.js +88 -0
  116. package/workspace/public/pm/display-word.js +56 -0
  117. package/workspace/public/pm/dock.js +105 -0
  118. package/workspace/public/pm/fixture.js +8 -227
  119. package/workspace/public/pm/frame-copy.js +94 -0
  120. package/workspace/public/pm/handoff-box.js +82 -0
  121. package/workspace/public/pm/http.js +88 -0
  122. package/workspace/public/pm/icons.js +53 -0
  123. package/workspace/public/pm/initiative-list.js +218 -0
  124. package/workspace/public/pm/initiative-sheet.js +261 -0
  125. package/workspace/public/pm/initiatives-api.js +59 -0
  126. package/workspace/public/pm/initiatives-copy.js +215 -0
  127. package/workspace/public/pm/initiatives-timeline-copy.js +59 -0
  128. package/workspace/public/pm/initiatives-timeline.js +410 -0
  129. package/workspace/public/pm/initiatives-ui.js +123 -0
  130. package/workspace/public/pm/item-sheet.js +251 -0
  131. package/workspace/public/pm/keep-card.js +204 -0
  132. package/workspace/public/pm/lifecycle.js +7 -1
  133. package/workspace/public/pm/mobile.css +49 -20
  134. package/workspace/public/pm/mobile.js +157 -29
  135. package/workspace/public/pm/modes-live.js +7 -883
  136. package/workspace/public/pm/modes.js +32 -1024
  137. package/workspace/public/pm/new-initiative-sheet.js +74 -0
  138. package/workspace/public/pm/next-step-ui.js +3 -2
  139. package/workspace/public/pm/palette-copy.js +51 -0
  140. package/workspace/public/pm/palette.js +312 -0
  141. package/workspace/public/pm/panel-breakdown.js +702 -0
  142. package/workspace/public/pm/panel-cockpit.js +63 -295
  143. package/workspace/public/pm/panel-detail.js +25 -172
  144. package/workspace/public/pm/panel-initiatives.js +1 -19
  145. package/workspace/public/pm/panel-repos.js +31 -81
  146. package/workspace/public/pm/panel-tabs.js +197 -110
  147. package/workspace/public/pm/panel-trees.js +5 -2
  148. package/workspace/public/pm/portfolio-report.js +61 -0
  149. package/workspace/public/pm/primitives.js +656 -0
  150. package/workspace/public/pm/print.css +33 -0
  151. package/workspace/public/pm/provider-cards.js +136 -0
  152. package/workspace/public/pm/registry.js +194 -0
  153. package/workspace/public/pm/release-card.js +110 -0
  154. package/workspace/public/pm/report-view.js +309 -0
  155. package/workspace/public/pm/reports-copy.js +114 -0
  156. package/workspace/public/pm/roadmap.js +271 -0
  157. package/workspace/public/pm/sig-watch.js +41 -0
  158. package/workspace/public/pm/state.js +8 -4
  159. package/workspace/public/pm/status-banner.js +13 -5
  160. package/workspace/public/pm/tab-doc.js +2 -4
  161. package/workspace/public/pm/tab-term.js +12 -2
  162. package/workspace/public/pm/tab-web.js +3 -2
  163. package/workspace/public/pm/timeline-copy.js +48 -0
  164. package/workspace/public/pm/today-cards.js +244 -0
  165. package/workspace/public/pm/today-copy.js +97 -0
  166. package/workspace/public/pm/tokens.css +16 -18
  167. package/workspace/public/pm/topbar.js +102 -0
  168. package/workspace/public/pm/triage-card.js +60 -0
  169. package/workspace/public/pm/undo-hold.js +103 -0
  170. package/workspace/public/pm/view-addrepo.js +2 -1
  171. package/workspace/public/pm/view-livenotes.js +3 -1
  172. package/workspace/public/pm/view-today.js +7 -162
  173. package/workspace/public/vendor/Sortable.min.js +2 -0
  174. package/workspace/public/vendor/lucide-sprite.js +79 -0
  175. package/workspace/replaced-tests.json +2864 -0
  176. package/workspace/run-tests.js +56 -5
  177. package/workspace/server.js +312 -36
  178. package/workspace/sheet-answer.js +61 -0
  179. package/workspace/skills/measure.skill +41 -0
  180. package/workspace/skills/report-biweekly.skill +23 -25
  181. package/workspace/skills/tracker-refresh.skill +50 -0
  182. package/workspace/test-files.json +19 -3
  183. package/workspace/test-lists/base.json +6 -0
  184. package/workspace/test-lists/run2-a.json +6 -0
  185. package/workspace/test-lists/run2-b.json +13 -0
  186. package/workspace/test-lists/run2-c.json +19 -0
  187. package/workspace/test-lists/run2-d.json +22 -0
  188. package/workspace/test-lists/run3-0.json +5 -0
  189. package/workspace/test-lists/run3-a.json +5 -0
  190. package/workspace/test-lists/run3-b.json +6 -0
  191. package/workspace/test-lists/run3-c.json +15 -0
  192. package/workspace/test-lists/run3-d.json +6 -0
  193. package/workspace/test-lists/run4-a.json +8 -0
  194. package/workspace/test-lists/run4-b.json +6 -0
  195. package/workspace/test-lists/run4-c.json +13 -0
  196. package/workspace/test-lists/run4-d.json +9 -0
  197. package/workspace/test-lists/run5-a.json +6 -0
  198. package/workspace/test-lists/run5-b.json +6 -0
  199. package/workspace/test-lists/run5-c.json +15 -0
  200. package/workspace/test-run.js +27 -1
  201. package/workspace/third-party/README.md +44 -0
  202. package/workspace/third-party/lucide-static-1.52.0.LICENSE +43 -0
  203. package/workspace/third-party/sortablejs-1.15.7.LICENSE +21 -0
  204. package/workspace/design-parity.js +0 -673
  205. package/workspace/public/pm/tab-task.js +0 -86
  206. package/workspace/public/pm/view-guide.js +0 -141
  207. package/workspace/public/pm/view-knowledge.js +0 -225
  208. package/workspace/public/pm/view-memory.js +0 -122
  209. package/workspace/public/pm/view-portfolio.js +0 -153
  210. package/workspace/public/pm/view-reports.js +0 -190
  211. package/workspace/public/pm/view-scheduled.js +0 -161
  212. package/workspace/public/pm/view-skills.js +0 -216
@@ -1,27 +1,101 @@
1
1
  ---
2
2
  type: Guide
3
3
  title: "Guide: layout"
4
- description: "The three workspace columns: navigation, detail and tabs, and what each one holds."
4
+ description: "The frame: one top bar, the place on screen, the detail and the agent dock; the phone tabs; the keys; and the older layout."
5
5
  timestamp: 2026-10-05
6
6
  ---
7
7
 
8
8
  # Guide: layout
9
9
 
10
- On a desktop screen the workspace has four columns. They are, from left to right, the repository rail, the list, the detail and the tabs. A phone, and the address option `?layout=legacy`, keep the older layout with three columns: navigation, detail and tabs. The rest of this page describes those three columns.
10
+ On a desktop screen the workspace is one frame. It has one top bar, the place on screen under it, the detail when you open one, and the agent dock at the right. There is no left sidebar.
11
11
 
12
- ## The repository rail, the list and the tools
12
+ ## The top bar
13
13
 
14
- 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 and the menu button opens the tools: knowledge, memory, skills, scheduled tasks, validate, the guide and the others.
14
+ The top bar has these parts, from left to right:
15
15
 
16
- A tool opens as a tab, not in place of the list. Choose the same tool again and the existing tab comes to the front.
16
+ - **Repository ▾** names the current repository. Press it to choose another repository, or **All repositories** to see the work of every repository at once. All repositories replaces the old Portfolio mode.
17
+ - **Today, Initiatives, Board and Reports** are the four places. Press one to show it. The Today count shows how many items need you.
18
+ - **Search or capture ⌘K** opens the command palette. Type to find an initiative, a repository, an open tab or a command.
19
+ - **Sync** shows only when the current repository is not in sync with its remote. Press it to fetch, bring in the work of the other machine, record your changes and push. When the repository is in sync, Sync is not shown.
20
+ - **Settings** opens the settings of the workspace.
17
21
 
18
- Press ⌘K (Ctrl-K) to jump to anything: an initiative, a repository, an open tab, a session or a tool. Type to filter, use the arrow keys to choose, and press Enter. Esc closes it.
22
+ Each place is drawn when its run is built. Until then the place says which run brings it, for example "Board arrives in Run 4."
23
+
24
+ ## Settings
25
+
26
+ Settings holds settings only, in five sections:
27
+
28
+ - **Repositories**: every registered repository. Press a repository to make it the current one. Press its ⋯ for **Rename** or **Remove from PMOS**. Each asks in a sheet, and a remove asks you to confirm. **Add repository** shows the scan of a folder before you add it.
29
+ - **Profiles**: the Claude profiles a session can start with. They open in the detail.
30
+ - **New sessions**: the default CLI and the default model for a new session in the dock.
31
+ - **Validate consent**: the consent of the current repository. Turn it on or off here. **Open Validate** opens the Validate page as a tab.
32
+ - **Theme**: Dark or Light.
33
+
34
+ Your work is never in Settings. It is in Today, Initiatives, Board and Reports.
35
+
36
+ ## The agent dock
37
+
38
+ The dock holds your terminals, documents, conversations, skills and web pages. It is open on Today. On every other place it is a 44-pixel rail at the right edge.
39
+
40
+ - Press ⌘J (Ctrl-J), or the button on the rail, to open the dock. Press ⌘J again, or the fold button in the dock, to fold it to the rail.
41
+ - The dock never opens by itself. A tab that opens while the dock is a rail waits in the dock until you open it.
42
+ - **+ Session** in the dock starts a new session. Its menu also has **Session with options** and one item for each skill of the repository. A skill opens in its own tab in the dock.
43
+ - The Web button in the dock opens a web page in a tab.
44
+
45
+ Folding the dock, or going to another place, does not touch your terminals.
46
+
47
+ ## The detail
48
+
49
+ The detail shows one item in full, for example an initiative or the profiles. It opens as a column between the place and the dock when you open an item. Press × at its top, or press Esc, to close it.
50
+
51
+ ## Questions
52
+
53
+ When the workspace needs an answer from you, for example the name for a rename or a confirmation before a remove, it opens a sheet. A sheet has a title, the question, and two buttons: the one that does it and **Cancel**. Esc, the close button and a press outside the sheet all mean Cancel. The workspace never uses the browser's own dialogs.
54
+
55
+ ## Colour and size
56
+
57
+ The workspace is neutral. A primary button is the text colour on the page colour, in both themes. The one brand colour marks the Today dot and the Today count, and nothing else. The bar, the dock and the bottom bar follow the theme; only a terminal stays dark. Corners are square. Controls are icons from one set, not text symbols. On a touch screen every field is 16 pixels, so the phone does not zoom when you tap it, and every control is at least 44 pixels high.
19
58
 
20
- Press ⌘↵ (Ctrl-Enter) to enter Focus. The rail and the list go out of view, the active tab takes the width, and the detail stays as a narrow slice on the right. Press Esc or Navigate to return. Focus does not restart a terminal.
59
+ ## Keys
21
60
 
22
- Today is a tool tab. It shows what needs you, with an action and a reason to dismiss each item, what is being prepared, and a Repository / All switch.
61
+ | Key | What it does |
62
+ |---|---|
63
+ | g t, g i, g b, g r | Show Today, Initiatives, Board or Reports. |
64
+ | ⌘K (Ctrl-K) | Open or close the command palette. |
65
+ | ⌘J (Ctrl-J) | Open or fold the dock. |
66
+ | j, k | Move down or up the rows of the place. |
67
+ | Enter | Open the row that has the focus. |
68
+ | Space | Tick the row. Space never opens a row. On another button of the row, for example ⋯, Space presses that button. |
69
+ | a | Do the main action of the row, when the row has one. |
70
+ | x | Dismiss the row, when the row can be dismissed. |
71
+ | Alt-Up, Alt-Down | Move the row up or down, when the row can move. |
72
+ | Esc | Close the palette, then the detail. In the open dock, Esc closes the tab in front. After a click in the place or the detail, Esc does not close a tab. |
23
73
 
24
- Each tool tab shows a board: Today, All repos, Knowledge, Memory, Skills, Scheduled tasks, Validate, the guide and Reports. Reports is in the menu, under Library, and lists only the run reports that exist. If a part of a board has no data behind it, the board does not show that part, or it says that the data is not read.
74
+ A key that you type in a field, or in a terminal, goes to the field or the terminal.
75
+
76
+ ## On a phone
77
+
78
+ A phone shows one panel at a time. The tabs at the bottom are **Today, Initiatives, Board, Reports and Agent**. Agent shows the dock, with your terminals. Search or capture ⌘K is pinned at the top of Today.
79
+
80
+ The bar at the top has Back (when you are deeper than a tab), Repository, the name of the screen, ⌘K, Sync (only when the repository is not in sync) and Settings. Settings opens over the current tab. Back returns to the tab.
81
+
82
+ Every row has a visible ⋯ button. Every control is at least 44 pixels high. Nothing works only when you hover.
83
+
84
+ ## The older layout
85
+
86
+ 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.
87
+
88
+ ### The repository rail, the list and the tools
89
+
90
+ 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.
91
+
92
+ Today, Validate, live notes and Add repository open as a tab, not in place of the list. Choose the same one again and the existing tab comes to the front.
93
+
94
+ Press ⌘K (Ctrl-K) to jump to anything: an initiative, a repository, an open tab, a session or a tool. Type to filter, use the arrow keys to choose, and press Enter. Esc closes it.
95
+
96
+ In the older layouts, Today is a tab. It shows what needs you, with an action and a reason to dismiss each item, what is being prepared, and a Repository / All switch.
97
+
98
+ If a part of a board has no data behind it, the board does not show that part, or it says that the data is not read.
25
99
 
26
100
  The `+` tile on the rail opens Add repository as a tab. The tab shows the scan of the folder before you add it.
27
101
 
@@ -37,23 +111,23 @@ Each tab shows a dot, its title and, under the title, its initiative and its ses
37
111
 
38
112
  If many tabs are open, the strip stays one row and scrolls sideways. Use the mouse wheel on the strip to scroll it. The tab in front always scrolls into view. Press `⇅ tabs at side` to show the tabs as a list down the left of the tabs column. In the list, each tab is one row, with its title, its initiative and session, and ×. The `+ session` button is at the top of the list, and the other controls are at the bottom. Press `⇆ tabs on top` to go back to the strip. The workspace remembers your choice in this browser. A phone and `?layout=legacy` always show the strip.
39
113
 
40
- ## Navigation
114
+ ### Navigation
41
115
 
42
- The first column holds the list of repositories. Under it is the list for the current mode. When you choose a repository, its initiatives appear there. When you choose an item in the settings and tools drawer, its list replaces the initiatives. Choose a repository again to return to its initiatives.
116
+ The first column holds the list of repositories. Under it is the list for the current mode. When you choose a repository, its initiatives appear there.
43
117
 
44
118
  If you have many repositories, the repository list scrolls inside its own space. The list under it stays on screen.
45
119
 
46
120
  Drag the right edge of the column to change its width. Double-click the edge to restore the default width.
47
121
 
48
- ## Detail
122
+ ### Detail
49
123
 
50
- The second column shows one item in full. Choose an initiative, a skill, a schedule or a memory item, and its detail opens here.
124
+ The second column shows one item in full. Choose an initiative or the profiles, and its detail opens here.
51
125
 
52
- ## Tabs
126
+ ### Tabs
53
127
 
54
128
  The third column holds your terminals, documents, conversations and guide pages. Folding or resizing the other columns does not touch your terminals.
55
129
 
56
- ## Open a file
130
+ ### Open a file
57
131
 
58
132
  Press a file anywhere in the workspace to open it in a tab. Any text file opens, whatever its extension.
59
133
 
@@ -67,30 +141,22 @@ A tab for a file that is not markdown is read-only. It has no edit, diff or save
67
141
 
68
142
  If a file cannot be shown, the tab says why. The reasons are: the file is binary, it is larger than 2 MB, it is not valid text, or it is outside the workspace.
69
143
 
70
- ## The rule for where things open
144
+ ### The rule for where things open
71
145
 
72
146
  A list or a directory opens in the navigation column, under the repository list. A detail opens in the detail column. A file-like row opens in a tab, as any document does.
73
147
 
74
148
  | Item | Kind | Opens in |
75
149
  |---|---|---|
76
150
  | Initiatives | list | navigation |
77
- | Memory | list | navigation |
78
- | Knowledge | list | navigation |
79
- | Portfolio | list | navigation |
80
- | Guide | list | navigation |
81
151
  | Validate | list | navigation |
82
- | Today | list | navigation |
83
- | Focus | list | navigation |
84
- | Skills | list | navigation |
85
- | Scheduled tasks | list | navigation |
86
152
 
87
153
  What a row in a list opens:
88
154
 
89
- - A row in Initiatives, Portfolio or Focus opens the initiative in the detail column.
90
- - A row in Skills, Knowledge, Guide or Validate opens the file in a tab, beside your terminals.
91
- - Scheduled tasks, Memory and Today are used inside the list. They have no separate detail.
155
+ - A row in Initiatives opens the initiative in the detail column.
156
+ - Validate opens as a tab, beside your terminals.
157
+ - A Knowledge, Memory or Guide result in ⌘K opens a document in a tab, or a memory entry in a sheet.
92
158
 
93
- ## Folding
159
+ ### Folding
94
160
 
95
161
  On a desktop screen, the list and the detail each have a `⟨` button. The list's button is at the right of `+ New initiative`. The detail's button is at its top right. Press it to fold that column to a thin strip. Press the strip to open the column again. The rail does not fold.
96
162
 
@@ -102,10 +168,10 @@ In the older layout:
102
168
 
103
169
  The workspace remembers which columns are open and how wide the navigation column is.
104
170
 
105
- ## Light theme
171
+ ### Light theme
106
172
 
107
- In the light theme, the tabs column stays dark, because a terminal is dark in both themes. The tab strip and the bar under the tabs use light text on that dark band.
173
+ In the light theme, the whole workspace is light: the top bar, the dock, the tab strip and the bar under the tabs follow the theme. Only the terminal stays dark, because a terminal is dark in both themes.
108
174
 
109
- ## On a phone
175
+ ### On a phone
110
176
 
111
- A phone shows one panel at a time. The bottom bar moves between them.
177
+ In the older layouts, a phone also shows one panel at a time. The tabs at the bottom move between them.
@@ -12,7 +12,7 @@ The Live notes view takes notes during a meeting. Each thing that is said become
12
12
  ## Open the view
13
13
 
14
14
  1. Select the repository in the navigation column.
15
- 2. Open the menu and select **live notes** under **Library**. The view opens as a tab for that repository.
15
+ 2. Press ⌘K, type **live notes** and press Enter. The view opens as a tab for that repository.
16
16
  3. Press **New session**. A session is one meeting.
17
17
 
18
18
  If the repository has more than 255 open initiatives, the view asks you to select an anchor first. The session then uses only the initiatives of that anchor.
@@ -57,8 +57,8 @@ A point that looks like a secret, such as a key or a token, is withheld. The vie
57
57
 
58
58
  Jev checks a point only when all three of these are true:
59
59
 
60
- 1. A TypeSafe key is saved (open **validate** in the settings and tools drawer).
61
- 2. Validation is turned on for this repository (also under **validate**).
60
+ 1. A TypeSafe key is saved (open Settings, then **Open Validate** under Validate consent).
61
+ 2. Validation is turned on for this repository (also in Settings, under Validate consent).
62
62
  3. **Check with Jev** is on in the Live notes view. It applies to this repository only.
63
63
 
64
64
  If one is missing, the view says which one, in words.
@@ -0,0 +1,89 @@
1
+ ---
2
+ type: Guide
3
+ title: "PM-only acts: what only you can do"
4
+ description: "Which acts only the PM can do, how the workspace checks that a press comes from your page or your terminal, what to do when a press is refused, and what an agent can and cannot write."
5
+ timestamp: 2026-10-05
6
+ ---
7
+
8
+ # PM-only acts: what only you can do
9
+
10
+ Some acts decide what the work is and when it is done. Only you, the PM, can do them. An agent cannot do them, even when you ask it to in a chat.
11
+
12
+ ## The acts
13
+
14
+ | Act | Where you do it |
15
+ |---|---|
16
+ | Accept a run, approve or return a review, approve a document | Not on the page yet. In your own terminal, run `node scripts/record-acceptance.js`. |
17
+ | Accept or send back a step that an agent ran | Not on the page yet. A later run adds it. |
18
+ | Approve a contract | Not on the page yet. In your own terminal, run `node scripts/log-run.js` with `PM_approved: true` in the contract. |
19
+ | Record a D60 disposition of a prototype | Not on the page yet. A later run adds it. |
20
+ | Hold, close, cancel or reopen an initiative | The initiative's lifecycle menu |
21
+ | Keep the items an agent proposed | The Keep card in the Breakdown or on Today |
22
+ | Move an initiative to Now, or adopt an agent's proposal to move it | Initiatives (arrives with the Initiatives screen) |
23
+ | Change the anchor (`parent_kr`) of an initiative | The document editor, or the confirm step of Add a repository |
24
+ | Bind a session to an initiative | The session's initiative menu, or + session on an initiative |
25
+ | Issue a report | Reports (arrives in Run 5) |
26
+ | Release a batch of factory work | The Board (arrives in Run 4) |
27
+
28
+ Each line that the workspace server writes for one of these acts says who wrote it (`by: pm:wawan`) and how (`via: ui` from the page, `via: cli` from a terminal).
29
+
30
+ ## How the workspace checks a press
31
+
32
+ When the workspace server starts, it makes a new random value for this launch. It puts the value in the page that it serves to your browser. It does not put the value in any terminal session, and it does not write the value to a log.
33
+
34
+ Each press from the page sends three things: the page's own address (the Origin), the launch value, and the request. The server refuses the press when:
35
+
36
+ - the request has no Origin, or the Origin is a different site or a different port;
37
+ - the launch value is missing or wrong.
38
+ The server also refuses a request that sets a field that only the server sets, for example `by`, `via`, `at` or `grant`.
39
+
40
+ A press that is refused writes nothing.
41
+
42
+ The terminal on the page sends the launch value when it connects. A session that you start with + session on an initiative is bound to that initiative only when the value is correct. If it is not correct, the session starts without an initiative and the terminal says why.
43
+
44
+ ### When a press is refused
45
+
46
+ If the workspace started again after you opened the page, the page reads the new launch value and sends your press again, one time. You do not have to do anything.
47
+
48
+ If a press shows "the workspace restarted, so reload the page, then try again", reload the page, then press again.
49
+
50
+ ## Acts from a terminal
51
+
52
+ A command that does a PM-only act asks you to type a word first, usually the initiative id. Type the id exactly, then press Enter. If the text does not match, the command writes nothing.
53
+
54
+ The command refuses the act when:
55
+
56
+ - it runs inside an agent session (the session has a `PMOS_SESSION` value);
57
+ - it does not run in an interactive terminal, for example in a pipe or a script.
58
+
59
+ Any other command that runs without a terminal is recorded as `agent:unknown`, not as you.
60
+
61
+ ## Change many initiatives at once
62
+
63
+ You can change the lifecycle of up to 20 initiatives in one press. The press makes one grant for the change, and each lifecycle line names that grant. Until the grant writer is available, the workspace refuses the press and writes nothing.
64
+
65
+ You cannot move initiatives to Now or change an anchor in one press for many initiatives. Do these one at a time.
66
+
67
+ ## What an agent can write
68
+
69
+ An agent can:
70
+
71
+ - add items, and order, date, start and finish the items of its session (with evidence);
72
+ - move an item that you handed to that session with Hand to agent. It cannot move any other item that you own;
73
+ - create an initiative (it lands in Later), write report text, and record a measurement with a source;
74
+ - propose a change for you to keep or drop.
75
+
76
+ An agent cannot:
77
+
78
+ - do any act in the table above;
79
+ - change the title, stage, dates or owner of an item that you own (owner "you"), or mark it blocked. It asks you instead;
80
+ - withdraw an item that it did not add.
81
+
82
+ ## What this does not prevent
83
+
84
+ A program that runs as your own user can read the page, as your browser does, and send a press. A program that fakes a terminal can type the id. The workspace closes the paths that an agent's tools use by default.
85
+
86
+ Some paths are still open:
87
+
88
+ - A program can connect to the terminal socket without the launch value. It cannot bind a session to an initiative, but it can start a session and type into any terminal, including your own shell. A `pmos` command that it types in your shell runs as you.
89
+ - An agent's `pmos item` commands are not yet checked against the initiative that its session is bound to, and a session value that names no session is not refused. The repository's checks find the other lines later, when they reach a pull request. See [Breakdown](breakdown.md) for the items and the Keep card.
@@ -0,0 +1,61 @@
1
+ ---
2
+ type: Guide
3
+ title: "PM-only lines: how the workspace checks your acts"
4
+ description: "Which acts only you can do, how each one is recorded, what the Today card 'A PM-only line is not attested' means, what to do about it, and the grants for a bulk lifecycle change and a Release."
5
+ timestamp: 2026-10-05
6
+ ---
7
+
8
+ # PM-only lines: how the workspace checks your acts
9
+
10
+ Some acts are yours only. An agent can propose them, but it cannot do them. These acts are PM-only:
11
+
12
+ - Move to Now, and adopt an agent's proposal.
13
+ - Issue a report.
14
+ - Accept a run, approve or return a review, approve a document or a contract, and record a D60 disposition.
15
+ - Change the lifecycle of an initiative.
16
+ - Change the anchor of an initiative.
17
+ - Keep the items that an agent proposed.
18
+ - Release a factory batch.
19
+
20
+ Each act adds one line to a ledger in the repository. The line records who did the act (`by`) and how (`via`). `via` is `ui` for a press in the workspace and `cli` for a command that you confirm at your own terminal.
21
+
22
+ ## How the acts are protected
23
+
24
+ - **In the workspace.** A press sends a value that the workspace makes each time it starts. A request without it is refused.
25
+ - **At a terminal.** A PM-only `pmos` command asks you to type a confirmation. An agent's tool has no terminal, so the command refuses it.
26
+ - **In an agent session.** The cockpit mod stops an agent that calls a PM-only route, runs a PM-only `pmos` command, or loads a ledger's writer from its own code.
27
+ - **In CI.** The Initiative Gate runs `scripts/check-pm-lines.js`. It fails on a PM-only line that is not attested (see below). It needs the full git history: on a shallow clone it fails and asks for `fetch-depth: 0`.
28
+
29
+ These checks find a forged line. They do not make a forgery impossible. A program that runs as your own user can still write a line that looks like yours.
30
+
31
+ ## The Today card "A PM-only line is not attested"
32
+
33
+ Today shows a needs-repair card for each PM-only line that fails a check. The card names the file and the line number, for example `planning/runs/placements.jsonl line 12`. Press **Show line** to see the line. The cause is one of these:
34
+
35
+ | Cause | What it means | What to do |
36
+ |---|---|---|
37
+ | … has no via | The line was written after `via_required_from` and does not say how. A writer always adds `via`, so a person or a program added the line by hand. | If you did the act, do it again from the workspace or the terminal, then remove the hand-written line in a commit. If you did not do it, remove the line. |
38
+ | … cites a grant that grants.jsonl does not hold | The line names a grant that does not exist. | Remove the line. Do the act again; the press mints a new grant. |
39
+ | … cites a grant that does not cover it | The grant exists, but it is for a different act: another scope, another state or initiative, or a time outside the grant's 120 minutes. | Remove the line. Do the act again; the press mints a new grant. |
40
+ | … is written by an agent | A line that only you may write has an agent in `by`. An agent's placement is always a proposal. | Remove the line. If you agree with the change, make it yourself. |
41
+ | … arrived in an agent-authored commit | A commit by an agent added a PM-only line. This is how a line that a script wrote, or a patch added with `git apply`, arrives. | Look at the commit. If the act is yours, commit the ledger line yourself, without an agent trailer. Otherwise remove the line. |
42
+
43
+ A line can have more than one cause. The card then lists each one.
44
+
45
+ ## Older lines
46
+
47
+ `via_required_from` in `planning/plan-rules.json` is the time from which a PM-only line must say how it was written. Lines written before that time have no `via`. The gate counts them once for each file and does not fail on them. A line counts as older only when both of these are true:
48
+
49
+ - Its own time is before `via_required_from`.
50
+ - The commit that added it comes before the commit that set `via_required_from`, in the git history.
51
+
52
+ The gate does not use the dates of a commit, because the person or program that makes a commit can set them. While the value is `null`, every line counts as older.
53
+
54
+ ## Grants for a bulk change and a Release
55
+
56
+ Some presses mint a grant: your permission for one action, used once, for 120 minutes.
57
+
58
+ - **A bulk lifecycle change.** In the Initiatives list, select up to 20 initiatives and change their lifecycle. The press mints one `lifecycle-bulk` grant that names the state and each initiative. Each lifecycle line cites that grant. Move to Now and an anchor change are never bulk acts.
59
+ - **A Release.** A Release of a factory batch mints one `release` grant for that batch.
60
+
61
+ To mint a grant at a terminal in a cockpit session, type `/pmos-grant release:<initiative>:<batch-id>` or `/pmos-grant lifecycle-bulk:<state>:<id>,<id>`. The state is one of `active`, `closed`, `on-hold` and `cancelled`.
@@ -0,0 +1,80 @@
1
+ ---
2
+ type: Guide
3
+ title: "Reports: draft, read and issue"
4
+ description: "How to draft a report, add your notes, issue it, and print or copy it. How the report schedules and the Today cards for reports work."
5
+ timestamp: 2026-10-05
6
+ ---
7
+
8
+ # Reports: draft, read and issue
9
+
10
+ A report tells one audience what moved in the repository. The workspace drafts it from the repository's own files. You read it, add your notes and issue it. A report that you issued is frozen.
11
+
12
+ The workspace keeps each report in a file of the repository, for example `planning/reports/biweekly/2026-10-16.md`. The issues ledger, `planning/runs/issues.jsonl`, records each Issue. The page and the `pmos report` command use the same writers, so they always show the same reports.
13
+
14
+ ## Open Reports
15
+
16
+ Open the Reports tab with the shortcut `g r`, from the command palette, or from the Today card of a report. Reports shows the repository that is open.
17
+
18
+ The page has three parts:
19
+
20
+ - **Report schedules.** The schedules that draft a report.
21
+ - **Reports.** The reports of the repository, newest first.
22
+ - **The selected report.** Its text and the actions you can do on it.
23
+
24
+ ## Draft a report
25
+
26
+ 1. Press **Draft now**. The workspace writes the draft of the cadence you have selected, for example biweekly. A cadence is one kind of report: daily, weekly, biweekly or monthly.
27
+ 2. The new draft is selected. Every number in it comes from the repository's ledgers. The page never changes a number.
28
+
29
+ A second **Draft now** for the same slot is refused. Press **Redraft** to write the draft again. A Redraft keeps every note. It moves a note with its initiative, even when the order of the initiatives changed. A note of an initiative that left the window stays at the end, under "Notes kept from an earlier draft".
30
+
31
+ To draft another cadence, open the menu with the three dots and choose **Draft now** with the name of the cadence.
32
+
33
+ ## Edit notes
34
+
35
+ Press **Edit notes**. One sheet shows every note of the draft: the headline, each initiative, and the needs-your-call part when the definition names an audience. Write your text and press **Save notes**. Saving a note draws the report again from the files as they are now, and keeps every note. Use it for the text, not to freeze a number: a number can change when the repository changed since the draft was written. A draft with no note markers has no note to edit. An issued report cannot be edited.
36
+
37
+ ## Issue a report
38
+
39
+ Issue takes two presses.
40
+
41
+ 1. Press **Issue**. This button is on the page and on the Today card "A draft is ready to issue". A sheet reads the draft and shows its headline.
42
+ 2. Press **Issue** in the sheet. The workspace records the Issue in the issues ledger with the sha of the file you read.
43
+
44
+ If the file changed after you read it, the workspace refuses and nothing is issued. Close the sheet, read the draft again and press Issue again.
45
+
46
+ After Issue the file is frozen. **Redraft** and **Edit notes** are gone for that report. If someone edits the file anyway, the row shows "Edited after issue".
47
+
48
+ Only you can issue. An agent cannot press Issue, and the page does not take a name from you: the workspace writes who pressed.
49
+
50
+ ## Print or copy an issued report
51
+
52
+ An issued report offers two actions, in the sheet after Issue and on the page:
53
+
54
+ - **Print / PDF** opens the print dialog with the report alone, in the light theme. Choose "Save as PDF" in that dialog to make a PDF.
55
+ - **Copy as markdown** puts the report on the clipboard without its frontmatter and without the note markers.
56
+
57
+ These are the only two ways a report leaves the page. The page has no control that moves a report out of the workspace. You decide where a printed or copied report goes.
58
+
59
+ ## Report schedules
60
+
61
+ A schedule drafts a report at its time. It never issues one. A schedule belongs to a report by its skill: the skill `report-biweekly` feeds the biweekly report, whatever the cadence of the schedule says.
62
+
63
+ - **Pause** stops a schedule. **Resume** starts it again.
64
+ - **Set up report schedules** appears when the repository has none. One press creates the recommended schedules. It never creates one twice.
65
+ - **Other schedules (n)** lists the schedules that feed no report. Manage them with the `pmos schedule` commands.
66
+
67
+ A schedule fires only while the workspace server runs.
68
+
69
+ ## The Today cards
70
+
71
+ | Card | When it shows | What the press does |
72
+ |---|---|---|
73
+ | A draft is ready to issue | A draft exists, it is newer than the last issued report of its cadence, and it is not issued. | Opens the Issue sheet. |
74
+ | A schedule ran and left no draft | A schedule ran and no report file of its cadence is newer than the run, after two hours of grace. | Writes the draft now. |
75
+
76
+ The card for the monthly kill-condition check is drawn with the initiative cards.
77
+
78
+ ## In a terminal
79
+
80
+ The same acts exist as commands: `pmos report draft`, `pmos report issue` and `pmos report list`. The ledger records who ran each command.
@@ -0,0 +1,73 @@
1
+ ---
2
+ type: Guide
3
+ title: "Reports: draft and issue a cadence report"
4
+ description: "How pmos report drafts a cadence report with every number, how the notes are kept when you draft again, and how you issue and freeze a report."
5
+ timestamp: 2026-10-05
6
+ ---
7
+
8
+ # Reports: draft and issue a cadence report
9
+
10
+ A cadence report tells its readers where each initiative stands. The biweekly report is the first one. The `pmos report` command drafts a report, issues it and lists the reports. It reads files in the repository only. It sends nothing and it fetches nothing.
11
+
12
+ ## What a draft contains
13
+
14
+ The script `pmos report draft` writes every number. No model runs. It reads the ledgers since the last issued report of the same cadence. If no report is issued yet, it reads the last 14 days (`report_cycle_days` in `planning/plan-rules.json`).
15
+
16
+ The draft has these sections, in this order:
17
+
18
+ 1. **Headline.** A count of the initiatives that moved, are off track or are at risk.
19
+ 2. **Timeline.** The dated items of each initiative, as they were when the numbers were read.
20
+ 3. **One block for each initiative.** Only work initiatives that were active in the window get a block. Off track and at risk come first. A block shows the stage, the health and its reason, and the progress, for example "7 of 12 (+4)": 7 of 12 items are done, and 4 of them were done in this window. **Last cycle** lists the items done, the gates passed, the moves between Now, Next and Later, and the overdue items. **Coming cycle** lists the items that start or are due in the next window. If there are none, it lists the next 3 items in order.
21
+ 4. **New since last report.** The initiatives that were added in the window.
22
+ 5. **Decided this cycle.** The decisions you made in the window. A decision that waits for you is not in the report. It comes to you on the Cycle review card, and it does not stop you from issuing.
23
+ 6. **Needs your call.** The asks to the audience that the definition names, and to no one else.
24
+ 7. **Sources reached and not reached.** The files the script read, and each source it did not read, with the reason.
25
+
26
+ A block shows a measured value only when a measurement line gives it, with its source as `<path>@<sha>`. The script does not calculate a value.
27
+
28
+ If a block is off track or at risk and has no reason, the script stops and writes no draft.
29
+
30
+ ## The definition
31
+
32
+ The definition file tells the script and the agent what the report is for. For PMOS itself it is `planning/reports/definitions/biweekly.md`. In a kit repository it is `pmos/state/reports/definitions/biweekly.md`. Its frontmatter gives the `cadence`, the `audience` and the `sections`. If the definition names no audience, Needs your call stays empty.
33
+
34
+ ## Notes
35
+
36
+ Each block has a note between two markers:
37
+
38
+ ```
39
+ <!-- pmos:note <initiative-id> -->
40
+ Your note. Start it with "Warning:" when the block needs attention.
41
+ <!-- /pmos:note -->
42
+ ```
43
+
44
+ The headline note is `report.headline`. The asks are in the `report.asks` note, one ask on each line, each line starting with "- ". Write prose only between the markers. Do not type numbers: the script writes them.
45
+
46
+ When you draft a slot again, every note stays as you wrote it, next to its initiative. The order of the blocks can change. A note for an initiative that is no longer in the window moves to "Notes kept from an earlier draft".
47
+
48
+ ## The commands
49
+
50
+ `pmos report draft <cadence> [<slot>]` writes the draft to `planning/reports/<cadence>/<slot>.md`. The slot is a date, YYYY-MM-DD. If you do not give a slot, the slot is today. If a draft for the slot exists, the command stops and writes nothing. To draft the slot again and keep every note, add `--redraft`. To fix the clock, add `--now <time>`: two drafts with the same inputs and the same `--now` are the same, byte for byte.
51
+
52
+ ```
53
+ pmos report draft biweekly 2026-10-16
54
+ pmos report draft biweekly 2026-10-16 --redraft
55
+ ```
56
+
57
+ `pmos report issue <cadence> <slot>` issues the report. Only you can do this, at a terminal. The command asks you to type the cadence and the slot, for example `biweekly-2026-10-16`. An agent session, a command with no terminal, or a different text is refused, and nothing is written. The command records the path and the git blob sha of the file in `planning/runs/issues.jsonl`. The report is then frozen: a draft of that slot is refused, and the Initiative Gate fails if the file changes. Nothing is sent. To share the report, print it or copy it as markdown.
58
+
59
+ ```
60
+ pmos report issue biweekly 2026-10-16
61
+ ```
62
+
63
+ `pmos report list [<cadence>]` shows each draft and each issued report, newest first, with who issued it.
64
+
65
+ Every command accepts `--root <dir>` to name the repository. `draft` and `list` also accept `--json`.
66
+
67
+ ## The window
68
+
69
+ The window starts at the time of the last issued report of the same cadence, so no time falls between two reports. The next draft starts where the last issued report stopped.
70
+
71
+ ## The report lane
72
+
73
+ An initiative in the report lane completes its last step when you issue its report. The workflow engine reads the issued line for the initiative's `doc_path` in `issues.jsonl`.
@@ -0,0 +1,70 @@
1
+ ---
2
+ type: Guide
3
+ title: "Breakdown › Timeline: the items on a time axis"
4
+ description: "How to read the Timeline view of a Breakdown, move the dates of an item by dragging its bar, change a due date by dragging the end of a bar, and read the health flags."
5
+ timestamp: 2026-10-05
6
+ ---
7
+
8
+ # Breakdown › Timeline: the items on a time axis
9
+
10
+ The Timeline view shows the items of one initiative on a time axis. Each item that has a start date or a due date has a bar. The bar runs from the start date to the due date.
11
+
12
+ ## Open the Timeline
13
+
14
+ 1. Open the Breakdown of an initiative.
15
+ 2. At the top of the Breakdown, press **Timeline**. The Timeline is next to **Tree** and **Board**.
16
+
17
+ ## Read the Timeline
18
+
19
+ - **Months.** The months are across the top. The axis starts at the first month that has a date and stops at the last month that has a date. It always shows today and at least three months.
20
+ - **Today.** A vertical line shows today. The label **Today** is on its own line above the month labels, next to the line.
21
+ - **Scrolling.** The chart scrolls to the side inside its own area, on every screen width. When the Timeline opens, the chart scrolls so that today shows. The column with the titles stays in its position while the chart scrolls.
22
+ - **All items.** The first row shows the full initiative, from the first start date to the last due date. It has one segment for each stage. A small gap shows where each stage starts, also when two stages overlap.
23
+ - **Stage rows.** Under the first row, the items are in groups by stage. The stages are in the same order as in the Tree. Each stage row shows the dates of its items and the number of dated items, for example "Build, 3 dated items".
24
+ - **Item rows.** Each item row shows the title, the dates and the bar. A Done item has a darker bar.
25
+ - **Milestones.** An item that is a milestone shows a diamond on its due date. The diamond also shows on the stage row and on the first row.
26
+ - **Proposed items.** An item that an agent proposed and that you did not keep yet has a lighter bar with a dashed edge and the signal **Proposed**. A proposed item does not make a stage bar or the first row longer.
27
+ - **Items with no dates.** An item with no start date and no due date has no bar. A line under the chart gives the number of such items. To give an item dates, open it and set **Start** and **Due** in the item sheet.
28
+
29
+ An item with only a start date or only a due date has a bar of one day.
30
+
31
+ ## Move the dates of an item
32
+
33
+ - **Move both dates.** Drag the bar to the left or to the right. The start date and the due date move by the same number of days.
34
+ - **Change the due date.** Drag the end of the bar (the line at its right edge). Only the due date changes. The due date cannot go before the start date.
35
+ - **Short bars.** A bar that is narrower than about 24 pixels always moves whole. To change only its due date, use the keyboard or the item sheet.
36
+ - **Open the item.** Press the bar without moving it. The item sheet opens.
37
+
38
+ The bar shows the new dates while you drag it. When you let go, the workspace saves the change.
39
+
40
+ With the keyboard:
41
+
42
+ 1. Press Tab until the bar has the focus.
43
+ 2. Press the Left or Right arrow key to move both dates by one day.
44
+ 3. Press Shift with the Left or Right arrow key to change only the due date.
45
+ 4. Press Enter to save. Press Escape to go back to the saved dates.
46
+
47
+ If you move the focus away from a bar that has a change, the workspace saves the change. If you press Tab, the focus then goes to the next bar.
48
+
49
+ What a move writes:
50
+
51
+ - Each drag adds one line to `planning/runs/plan-items.jsonl`. The line is a `set` line with the dates of the item. When you change only the due date, the line has only the due date.
52
+ - An item that has only a due date keeps only a due date when you move it.
53
+ - A move changes one item only. The dates of other items do not change, also when they come after the item. The Timeline does not count effort in days.
54
+ - If the workspace cannot save the change, a message gives the reason. The bar goes back to the saved dates.
55
+
56
+ ## Health
57
+
58
+ The Timeline shows a flag only when an item is not on track. The flag is text and a small dot, on its own line under the dates of the item. The bar of the item has a coloured outline.
59
+
60
+ - **At risk: starts before an item ends.** The item starts on or before the day that one of its predecessors ends. The flag names that predecessor and its due date. A Done predecessor does not cause this flag. A Done item never shows it.
61
+ - **At risk: due on a date, not done.** The due date is before today and the item is not Done.
62
+ - **Off track: milestone due on a date, not done.** A milestone has a due date before today and it is not Done. Its diamond has the same colour as the text of the flag.
63
+
64
+ Limit: this view checks only the predecessors in the same initiative. A predecessor in a different initiative does not cause a flag here. To see such a clash, compare the dates of the two items.
65
+
66
+ To remove a flag, change the dates of the item or of its predecessor, or move the item to Done.
67
+
68
+ ## On a phone
69
+
70
+ On a narrow screen, the page does not scroll to the side: only the chart does. To move a bar, touch it and drag it to the side. A short bar takes a touch a little to its left or right. To scroll the chart, drag the empty part of a row.