@troylar/sightline 1.120.3 → 1.175.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.
@@ -9,9 +9,36 @@ or use Sightline's Send button for this route.
9
9
  The optional [company endpoint companion](#talk-to-your-company-endpoint) is an advanced alternative below.
10
10
  Check [build availability](availability.md) before using version-specific instructions.
11
11
 
12
+ ## Analyze with any assistant
13
+
14
+ To ask questions about the plan, without changing it, any assistant will do: GitHub Copilot, ChatGPT, Claude,
15
+ Gemini or your company's own. Open **Connect assistant** (in the menu under your name, top right, until an assistant is connected; then the assistant button in the toolbar), then **Analyze with any assistant** (since 1.130.0):
16
+
17
+ - **Copy analysis instructions** copies read-only instructions that name each Sightline file, what it holds, who owns
18
+ which facts (Jira owns its issues, the team owns what it added) and how to read dates, estimates and coverage.
19
+ Paste them, then ask your question. Use this when the assistant can read your files.
20
+ - **Copy instructions with data** adds the plan's data to the same paste: the file **Export for your assistant**
21
+ writes, with notes left out. Use this when the assistant can't read files, such as a chat window. It puts team
22
+ information on your clipboard, so paste it only into an assistant your team is allowed to use.
23
+ - **Download AGENTS.md** saves the same instructions as a file. Put it in the folder with your plan and exported
24
+ files. Copilot in VS Code, Codex and other coding assistants read `AGENTS.md` from the folder you open, so you can
25
+ just ask. The file holds the plan's title and the rules, never the plan itself, so it's safe in a shared folder.
26
+
27
+ For example: *"What's late or at risk, and why? Cite the ids."* or *"Who has the most work in the next sprint?"*
28
+ The instructions are read-only.
29
+
30
+ **Ask about one item** (since 1.174.0): select it and choose **Copy** > **For your assistant** at the top of its details, or press
31
+ **Ctrl+C** (⌘C on a Mac) when no text is selected. It copies a short reference: the item's name, its type and id as the
32
+ export writes them (for example `[bar:c4]`), its Jira key and epics, the plan's id and revision, whether your copy is
33
+ saved, and when Jira was last synced. Paste it and ask, for example *"How many stories are in this, and how many are
34
+ done?"* For more, choose **Copy** > **With its details** (or type **details** in Find): it adds the item's
35
+ record from the export and, for an initiative, its epics' story counts and its stories, so an assistant that can't read
36
+ files can answer too. **Copy your starred items for your assistant** copies a reference for each of your stars. Sticky
37
+ notes are never copied. Each copy is your team's plan data, so paste it only into an assistant your team allows. To have an assistant propose changes, use the private folder below.
38
+
12
39
  ## Use an external assistant
13
40
 
14
- Choose **Connect assistant** in the toolbar (or **Changes** when proposals are waiting), then choose **Connect your assistant**. In Edge or Chrome, select a private folder that your local assistant can read and write. Keep the team plan in OneDrive if needed. Use a separate private assistant folder for each person, device and plan, with one active Sightline tab writing to it. Sightline remembers the connection in this browser; a later visit may require **Reconnect**.
41
+ Open the menu under your name (top right) and choose **Connect assistant**. Once an assistant is connected, the toolbar shows its state instead (**Assistant connected**, or **Changes** when proposals are waiting). Then choose **Connect your assistant**. In Edge or Chrome, select a private folder that your local assistant can read and write. Keep the team plan in OneDrive if needed. Use a separate private assistant folder for each person, device and plan, with one active Sightline tab writing to it. Sightline remembers the connection in this browser; a later visit may require **Reconnect**.
15
42
 
16
43
  Choose **Copy instructions for your assistant**, then paste them into your assistant with the folder location and your request:
17
44
 
@@ -100,6 +127,8 @@ connects your company endpoint for conversations. Neither feature captures meeti
100
127
 
101
128
  For a shared plan, context comes from the last confirmed read or save of the local plan file, with the latest successful Jira sync applied for display. Sightline cannot confirm whether OneDrive has uploaded or downloaded that version. `snapshot.source` is `saved-shared-file`; `snapshot.unsavedChangesInBrowser` explicitly reports local edits that have not been published. Those local edits are excluded from shared context. Save them before asking the assistant to work from them. A disconnected plan uses `snapshot.source: "this-browser"` and `snapshot.shared: false`; it makes no claim to be a shared source of truth.
102
129
 
130
+ The context's `actions` list every change an assistant may propose: each with its `args`, its scope and risk, and a one-line `desc` of what it does (since 1.129.0), so an assistant can pick the right one without guessing from its name.
131
+
103
132
  Both outputs include the plan revision and Jira sync timestamp. Dates and status derived from children or Jira are identified by ownership rules and item flags; an assistant must propose Jira changes instead of rewriting those facts. Names and other free text remain untrusted data, not assistant instructions. Notes are excluded from exported context. Outputs contain team information: keep the folder private using your operating system or sync-service permissions. A browser picker cannot enforce who else can access a folder.
104
133
 
105
134
  Results describe the current proposal batch against the plan as it is in this browser (since 1.110.0; earlier
@@ -169,7 +198,8 @@ state and can include unsaved applied edits. Neither path establishes cloud fres
169
198
 
170
199
  **Requires Sightline 1.109.0 or later.** An initiative or task can carry a story: a markdown description of why
171
200
  the work exists, what it delivers and when it's done. Hover an item to see the first lines; click it to read the
172
- whole story in the details panel, or Edit to write one with a live preview. A new story starts from the plan's
201
+ whole story at the top of the details panel, or Edit to write one with a live preview (an item with no story yet
202
+ folds it under **Story**). A new story starts from the plan's
173
203
  template for that kind of item (**Settings → Planning guide**, Story templates). An initiative's panel also lists its tasks and
174
204
  whether each has a story, so you can walk the breakdown; Up and Down move to the next item while the panel is open.
175
205
 
@@ -193,6 +223,75 @@ HTML, shows as plain text.
193
223
  set with `template.set`), and gates have a description. Propose them with `milestone.set` field `story` and
194
224
  `gate.set` field `description`. A meeting's note is shown as Markdown and set with `meeting.set` field `note`.
195
225
 
226
+ ## What a change moves, and what Apply did
227
+
228
+ The review lists each date a change moves, like "Wire it moves 2 days later (Oct 14 to Oct 16), waits for "Adapter"".
229
+ It says what the item waits for, not that it moved because of it: holidays, time off and gates move dates too. After
230
+ Apply, the status line counts what changed, like "Applied changes 1 to 30 (30 tasks added, 29 links added, 12 dates
231
+ moved)". Your assistant reads the same summary in its results file.
232
+
233
+ ## Order before dates
234
+
235
+ When you know the order of the work but not its dates, don't give every task the same placeholder start. Add each task
236
+ with `after`, the tasks it starts after, and leave out `start`:
237
+
238
+ ```json
239
+ {"op": "action", "action": "task.add", "args": {"id": "task-r02", "bar": "init-rollout", "after": ["task-r01"], "days": 3, "rough": true, "label": "R-02"}}
240
+ ```
241
+
242
+ - The task starts the working day after the last of those finishes, skipping weekends, holidays and its owners' time off.
243
+ - Add tasks in order, so each one's `after` is already placed. The review says what each starts after.
244
+ - Give both `start` and `after`, and the later of the two wins.
245
+ - `rough: true` marks a length as a guess. The task is hatched and labeled "guess" on the Days view, its card says
246
+ "Length is a guess", and the initiative counts how many lengths are guesses. Guessed lengths don't change the capacity
247
+ forecast, which uses effort.
248
+ - When what it waits for runs late, Sightline pushes the task later on its own, unless automatic moving is off or a Jira
249
+ sprint dates the task. Then the task is flagged on its card, tagged **too early** on the Days view, and counted in
250
+ the warning bar's "starts before what it waits for finishes" list and Present's "starts too early" count. A done task
251
+ is never moved and never counted: it keeps the dates it ran on.
252
+ - When what it waits for finishes sooner, the task's card offers the day it could start. Sightline never moves work
253
+ earlier on its own.
254
+
255
+ For a task already in the plan, move it with `"start": "after"` instead of a date. It starts the working day after the
256
+ last task it waits for finishes, the same day its card offers, and keeps its id and links. It needs at least one task
257
+ to wait for; link it first with `task.link` in the same change. When a task it waits for is late and not done, `after`
258
+ is refused, for adding and for moving: there's no day after a finish that has passed, so give a start instead. `prev` can be the task's current start alone. To mark
259
+ an existing length as a guess, set `rough` with `prev: false` when the task isn't marked yet:
260
+
261
+ ```json
262
+ {"op": "action", "action": "task.move", "args": {"id": "task-r02", "start": "after", "prev": "2026-11-03"}}
263
+ {"op": "action", "action": "task.set", "args": {"id": "task-r02", "field": "rough", "value": true, "prev": false}}
264
+ ```
265
+
266
+ There's no undated task: every task has a start. A task added or moved with `after` gets a real date, which Sightline
267
+ pushes later when what it waits for slips.
268
+
269
+ To wait for an approval, use a gate and have the initiative wait for it.
270
+
271
+ ## Dates in words
272
+
273
+ Any date in a proposed change can be written the way people say it, not only as YYYY-MM-DD: a task's start, a
274
+ milestone's day, time off, when a capture was raised, a due date. Sightline reads it against today when you review
275
+ the change:
276
+
277
+ | Say | Means (on Wednesday, Oct 7) |
278
+ |-----|-----------------------------|
279
+ | today, tomorrow, yesterday | Oct 7, Oct 8, Oct 6 |
280
+ | +3d, in 2 weeks, 3 days ago, -2w | Oct 10, Oct 21, Oct 4, Sep 23 |
281
+ | Friday | the next Friday: Oct 9 |
282
+ | this Friday, next Friday | that day this week or next week (weeks start Monday): Oct 9, Oct 16 |
283
+ | last Friday | the latest Friday before today: Oct 2 |
284
+ | next week, last week | that week's Monday: Oct 12, Sep 28 |
285
+ | next month, last month | the 1st: Nov 1, Sep 1 |
286
+ | this sprint, next sprint | the sprint's first day |
287
+
288
+ The review says which date each one became ("next Friday" is Friday, Oct 16, 2026), and Apply uses that date. A
289
+ task's start that lands on a weekend or holiday moves to the next working day, as a typed date does, and the review
290
+ says so ("+3d" is Saturday, Oct 10, 2026, so the task starts Monday, Oct 12). A day that turns out to be before today is
291
+ flagged "(that's in the past)", unless the words mean the past on purpose (yesterday, last Friday, 3 days ago, -2d).
292
+ Anything else is refused with the forms that work, never guessed. Because words are read on the day you review, review a change on the
293
+ day it was written if the exact day matters.
294
+
196
295
  ## Skills, needs and hints
197
296
 
198
297
  **Requires Sightline 1.117.0 or later.** The plan keeps a skills catalog (**Settings → Team**, up to 500, each label
@@ -216,6 +315,15 @@ action, field `aiHint`.
216
315
  workstream. `workstream.del` {id} removes one only when it's empty (no work, splits, own reserve, deliverables or
217
316
  block types) and always waits for a person, at every review level. Its guidance goes with it.
218
317
 
318
+ `workstream.reid` {lane, id, prev} changes a workstream's id, so the id says what the workstream is now: `lane` is its id
319
+ now and `id` the new one. Everything that names it changes in the same update, with one Undo: initiatives, milestones,
320
+ notes, meetings, process types and blocks, deliverables, people's time splits, its guidance, saved views, the baseline,
321
+ snapshots and the last status update. The old id stays on the workstream (`was`, exported with it), so a file written
322
+ before the change still finds it; review says when a change used an old id, and what it applies names the new one. The
323
+ new id follows the rules for a new workstream's (1 to 60 letters, digits, dots, dashes or underscores, starting with a
324
+ letter or digit) and is never one in use, or one another workstream had before. It always waits for a person. A plan
325
+ with a former id needs this version or later: older copies open it read-only.
326
+
219
327
  ### What's missing
220
328
 
221
329
  `coverage.context` lists, counted from the whole plan before anything is trimmed: workstreams without guidance,
@@ -311,7 +419,9 @@ Placements are actions, and they use the same rules as the bulk sort, so a place
311
419
  - `jira.toWorkstream {keys, lane, epic?}` puts issues in a workstream. Stories of an epic whose stories are all known go on one initiative for the epic, with the stories nobody picked switched off; otherwise each becomes its own Jira-linked initiative. With `epic`, the stories move together or not at all.
312
420
  - `jira.toInitiative {keys, id}` adds them as Jira-linked tasks on an initiative that takes Jira work, or switches a story its epic already counts back on.
313
421
  - `jira.notOurs {keys}` hides them from Sort Jira work. Undo, or **Show them again** in Sort Jira work, brings them back.
314
- - `jira.epicLink {epic, id}` and `jira.epicNew {epic, lane, id?}` place a whole epic, like the epic's **On** menu.
422
+ - `jira.hide {keys, why?}` keeps Jira items off the plan's views, the plan's own way for each: a story is switched off in its epic's initiative, an epic is parked, and an issue the plan doesn't show is marked not ours. The review says which, and says so when hiding parks an epic. `jira.unhide {keys}` brings them back. `cards.hidden` in the context lists what's hidden and why. Plan work (a Jira task, or an initiative that is one Jira issue) can't be hidden.
423
+ - `cards.set {field, value, prev}` changes the team's card layout on the Cards page: `fields` (an ordered list from `cards.fields`), `density` (`compact`, `normal`, `detailed`) or `width` (`fixed`, `points`).
424
+ - `jira.epicLink {epic, id}` and `jira.epicNew {epic, lane, id?}` place a whole epic, like the epic's **On** menu. An epic counts on one initiative: `jira.epicLink` refuses one another initiative holds and a 51st, and moves one that's parked elsewhere.
315
425
 
316
426
  Each is checked again when it applies, against both Jira files: an issue already where the change puts it counts as done; one placed somewhere else, a target that can't take work any more (parked, waiting, with sub-initiatives), or an epic's stories that changed in Jira make the change wait as changed since, and nothing in it is applied. New initiatives and tasks get ids made from the Jira key (`bar-abc-101`, `task-abc-106`), so a retry can't add them twice.
317
427
 
@@ -8,7 +8,7 @@ without the repository, Node.js, npm or Python. Keep this HTML file; the skills
8
8
 
9
9
  ## Open the collection
10
10
 
11
- In the toolbar, choose **Connect assistant** (or **Changes**), then **Setup and files → Planning skills and team guidance → Planning skills**. You can also open
11
+ Choose **Connect assistant** in the menu under your name (or, once an assistant is connected, the assistant button in the toolbar), then **Setup and files → Planning skills and team guidance → Planning skills**. You can also open
12
12
  **Settings → Planning guide → Get planning skills**. The dialog shows the bundled Sightline version and each
13
13
  skill's purpose. You don't need to connect a plan or an AI endpoint to get the files.
14
14
 
@@ -48,7 +48,7 @@ outcome's ID, leaves the new idea unassigned, and does not turn this into a whol
48
48
  The repository contains [roadmap-session-amendments.json](../examples/northstar/roadmap-session-amendments.json),
49
49
  a **prepared example**, not a live model response. With the Northstar plan open:
50
50
 
51
- 1. Choose **Connect assistant** in the toolbar and expand **Use individual files instead**.
51
+ 1. Choose **Connect assistant**: it's in the menu under your name (top right), or type "assistant" in Find (/ or Ctrl+K, ⌘K on a Mac). Then expand **Use individual files instead**.
52
52
  2. Choose **Connect that file**, then select **examples/northstar/roadmap-session-amendments.json**.
53
53
  3. Inspect the two proposals: move **Bring customer context into everyday work** from **Q2 2027** to **Q1 2027**;
54
54
  add **Explore offline search** as an unscheduled idea with no owner.
@@ -78,7 +78,7 @@ Do not connect both batches at once.
78
78
  Preserve any example edits you want first. Choose **File → Open a copy…** and select
79
79
  **examples/northstar/blank-plan.json**. This opens an empty, detached plan rather than linking writes to the
80
80
  example file. In Settings, set your plan title and calendar before scheduling work. On Roadmap, add an outcome
81
- in **New idea**, such as “New teams can create their first shared plan.” Keep unknown timing and owners unknown.
81
+ in **New roadmap idea**, such as “New teams can create their first shared plan.” Keep unknown timing and owners unknown.
82
82
 
83
83
  Choose **File → Save as a new shared plan…** and save a separate JSON file. Confirm that the toolbar identifies
84
84
  it as a shared plan. Close and reopen the app, choose **File → Open shared plan…**, and select that file.
@@ -87,7 +87,7 @@ copied separately.
87
87
 
88
88
  ## Bring your own assistant
89
89
 
90
- 1. Open your own plan and connect a private folder using **Connect assistant → Connect your assistant**.
90
+ 1. Open your own plan and connect a private folder using **Connect assistant → Connect your assistant** (in the menu under your name).
91
91
  2. Choose **Copy instructions for your assistant**. Paste them into your external coding tool with that folder's location.
92
92
  3. Point it at the source checkout's **skills/** folder, or install the individual skill folders where it discovers them.
93
93
  4. Start with a small real request. The assistant reads fresh context and writes proposals; you review and apply them here.
package/docs/jira.md CHANGED
@@ -52,8 +52,16 @@ that computer. The default output is a **jira** folder beside the plan.
52
52
  Your assistant can propose where each issue goes (the **Sort Jira work** skill); you review every placement in
53
53
  **Changes** before anything joins the plan, and nothing is written to Jira. See
54
54
  [Sorting Jira work](assistant-workflow.md#sorting-jira-work).
55
+ On the Timeline, a bar with no Jira key was added here and isn't tracked in Jira (hover it to see). Once the plan
56
+ has Jira work, the List and the Days view label such work **Added here**. An initiative counts as tracked when it,
57
+ or anything inside it, links to Jira.
55
58
  5. An initiative or task linked to an issue shows the issue's description as its story, marked **From Jira**
56
59
  (Sightline 1.109.0 or later, with the matching sync). The sync reads descriptions only for issues the plan links.
60
+ 6. Every Jira item shows who owns it as a small circle with their initials. You'll see it on story and Jira-linked
61
+ bars, sprint shelf tiles, cards, List rows, and the hover card and details. A dashed empty circle means unassigned.
62
+ An outlined circle is an owner outside the team. Hover it, or use a screen reader, for the full name. Spotlight
63
+ rings that person's circles. The initials come from the plan's people and Jira's display names. No pictures are
64
+ fetched. If two people share initials, each gets a third letter.
57
65
 
58
66
  For repeated syncs, run `python3 /trusted/helpers/sightline-jira-sync.py watch`. Read `install --help` before
59
67
  configuring startup behavior. Run trusted helper code from your own computer, never a mutable shared folder.
package/docs/onedrive.md CHANGED
@@ -9,6 +9,7 @@ Sightline opens the plan file on your computer. OneDrive carries that file betwe
9
9
  3. Wait for OneDrive to finish downloading the folder, then open Sightline in Edge or Chrome. Choose **File → Open shared plan** and select the local file. Connect the local Jira folder if your team uses it.
10
10
  4. Leave **File → Check for teammates' saves every 15 s** on to pick up local changes; this is enabled by default unless you previously turned it off. Use **Refresh** before starting work. Check OneDrive's own status before handing the plan to a teammate.
11
11
  5. Edit one at a time: **Start editing**, **Save**, then **Done editing**. Agree who is editing when a computer is offline or sync is paused.
12
+ The file only changes when the plan does: **Save** with nothing changed writes nothing, and **Done editing** with nothing changed puts the file back exactly as it was before **Start editing**, with the same revision.
12
13
 
13
14
  OneDrive and your organization control folder access. Sightline's views, author stamps and edit lock are not access controls.
14
15
 
@@ -18,7 +19,7 @@ The page shows its last confirmed local read or save. Automatic checks can notic
18
19
 
19
20
  The edit lock is stored in the same shared file, so it also travels through OneDrive. Two offline computers can each believe editing is available. Sightline checks local content before saving, keeps backups for detected clashes, and preserves unsaved drafts, but it cannot guarantee that an unseen cloud update will never cross a save. Keep both versions if OneDrive produces a conflict copy.
20
21
 
21
- If another person starts editing while you have unsaved changes, Sightline keeps your browser copy, undo history and recovery draft. Review the conflict choices before replacing either version. After a file-read failure, **Try again** reconnects from your current browser contents, including edits made since the failure. An unchanged file preserves your edits; a changed file is merged or presented for conflict review. A newer unsupported file format keeps your edits available for download and requires updating Sightline before saving.
22
+ If another person starts editing while you have unsaved changes, Sightline keeps your browser copy, undo history and recovery draft. Review the conflict choices before replacing either version. After a file-read failure, **Try again** reconnects from your current browser contents, including edits made since the failure. An unchanged file preserves your edits; a changed file is merged or presented for conflict review. When you and a teammate both change what the same task or initiative waits for, both sets of links are kept, and a link one of you removed stays removed. A link that would make work wait for itself through the other person's links isn't merged: their version wins, yours is backed up, and Sightline says which link wasn't kept and why. A newer unsupported file format keeps your edits available for download and requires updating Sightline before saving.
22
23
 
23
24
  ## Keep assistant folders personal
24
25
 
@@ -37,3 +37,80 @@ The deferred update is cancelled when a full render supersedes it. Regression ch
37
37
  undo, cursor retention and the deferred screen update without depending on a machine-specific time threshold.
38
38
 
39
39
  The connected-assistant regression harness (`harness100`) counts payload builds and file writes. View changes and unchanged foreground checks must add neither; real saved-source, Jira, proposal and receipt changes must still refresh outputs. A Chrome Incognito smoke test also verified that ordinary navigation left context/results modification times unchanged after a proposal was reviewed and applied.
40
+
41
+ ## Browser harness
42
+
43
+ `test/perf/` measures the built page in Chromium on synthetic plans. It's the harness to use before claiming a change is
44
+ faster or slower. It needs Playwright (a dev dependency) and its Chromium:
45
+
46
+ ```bash
47
+ npm ci && npx playwright install chromium
48
+ ./build.sh
49
+ npm run perf -- --sizes S,M --cpu 1,4 # results.json and report.html in test/perf/
50
+ npm run perf -- --sizes L --cpu 4 --compare test/perf/baseline.json
51
+ node test/perf/profile.js M tl.two 4 # where one scenario's time goes, by function
52
+ ```
53
+
54
+ **Plans.** `test/perf/gen.js` makes a plan file and a Jira status file from a fixed seed, in four sizes. The names, keys
55
+ and text are invented.
56
+
57
+ | Size | Workstreams | Initiatives | Plan tasks | Jira stories | Time span |
58
+ |---|---|---|---|---|---|
59
+ | S | 5 | 30 | 150 | 300 | 6 months |
60
+ | M | 12 | 120 | 800 | 2,000 | 1 year |
61
+ | L | 25 | 400 | 3,000 | 8,000 | 2 years |
62
+ | XL | 40 | 1,000 | 8,000 | 25,000 | 3 years asked, 2 drawn |
63
+
64
+ Each plan mixes in the hard shapes:
65
+ - long labels and overlapping bars;
66
+ - eight milestones on one day;
67
+ - dependency chains 20 deep;
68
+ - epics across several sprints, stories not estimated, with no sprint or abandoned;
69
+ - a stale future sprint, parked initiatives and stories turned off;
70
+ - notes, decisions and risks.
71
+
72
+ A plan covers at most 104 weeks, so XL is drawn over two years. XL's Jira file is past the page's read limits (5 MB and
73
+ 9,000 issues), so the harness loads it in memory to measure the drawing only. The report says so.
74
+
75
+ **Scenarios.** Plans are built around today's date, so the page runs on its real clock: a stand-in `Date` costs
76
+ measurable time in every draw. The same size, seed and day give the same plan (`PERF_TODAY` rebuilds another day's).
77
+ Each run opens a fresh page at 1440 by 900 and opens the plan
78
+ the way a person does: a file handle through `adopt`, then the Jira folder through `readJiraDir`. Then it runs:
79
+
80
+ - **Load:** opening the plan and Jira folder, to the first drawn Timeline.
81
+ - **Jira:** a new sync arriving.
82
+ - **Timeline:**
83
+ - Weeks at Fit, This sprint, This + next and Next 3;
84
+ - zooming in and out;
85
+ - scrolling sideways and down;
86
+ - turning sprint shelves off and on, where the version has them.
87
+ - **Days:** switching to it, and scrolling across a quarter.
88
+ - **Interactions:**
89
+ - opening and closing a panel;
90
+ - dragging a bar and dropping it;
91
+ - typing in Find;
92
+ - a filter;
93
+ - switching views;
94
+ - Undo;
95
+ - saving.
96
+ - **Pages:** Today, Sprint, Cards (where present), List, Roadmap and Capacity.
97
+
98
+ **Measures.**
99
+ - **Responses:** from the change to the next painted frame, as the median and 95th percentile over the runs (5 at S
100
+ and M, 3 at L and XL). For real clicks and keys, it is the time from the input event's own time stamp to the second
101
+ frame after it, plus any long task the drop sets off.
102
+ - **Long tasks:** count, and the longest over 50 ms.
103
+ - **Layouts and style recalcs:** from the DevTools protocol.
104
+ - **Page state:** DOM nodes and JS heap after each scenario.
105
+ - **Motion:** frames per second, dropped frames (over 25 ms) and the worst frame. Scrolling sets the scroll position once per frame, so scroll handlers run on the
106
+ main thread: this is the worst case, not compositor-only scrolling.
107
+
108
+ `--cpu 4` throttles the CPU four times, as a stand-in for a slower work machine.
109
+
110
+ **Budgets and the baseline.**
111
+ - `budgets.json` holds the proposed budgets at M and L with 4x throttling.
112
+ - A scenario already over budget is listed under `known` with today's measured value, so the check still fails if it
113
+ gets worse, and the entry is removed when a fix brings it under budget.
114
+ - `--compare baseline.json` flags any scenario more than 20% slower than the baseline. Compare only runs from the same
115
+ machine.
116
+ - CI runs S and M on every change against `budgets-ci.json`, which is calibrated for the CI runner. L and XL run by hand.
@@ -47,6 +47,40 @@ For leadership, ask:
47
47
  Use **Delivery → Status update** for the shared delivery conversation and **Product updates → Customer release notes**
48
48
  for customer wording. A proposed or planned outcome is not something that shipped.
49
49
 
50
+ ## Capture what comes up
51
+
52
+ Meetings raise things that aren't work yet: "the support team wants to hear when the release process changes", "we
53
+ have no way to send release notes to the teams that use them". Keep them in the plan as captures (since 1.131.0):
54
+
55
+ - Paste your notes into your assistant with the meeting-to-plan skill. It proposes one capture per item: a request,
56
+ idea, process gap or question, with who asked (a person or a group already in the plan), the meeting and its date,
57
+ and the workstream when it's clear. A team that isn't in the plan yet comes as a new group, which always waits for
58
+ your review.
59
+ - Or capture one by hand, live in the meeting: **Add** (or press A, then C) → **Capture a request or idea**, or
60
+ **+ Capture a request or idea** in To triage. Only what was raised is needed; who asked and the workstream stay
61
+ unknown unless you pick them, and the meeting and its date carry over to the next capture. **Capture and add
62
+ another** keeps the form open.
63
+ - Raised again? As you type what was raised, the form lists captures with a similar name. **Same thing: record it
64
+ there** adds this meeting, who asked and the date to that one instead of capturing it twice; **Capture** keeps it
65
+ separate. Nothing is ever merged on its own. A capture's card lists every time it was raised again, with
66
+ **Record it** to add one by hand and **Remove** to take one out, and its row in To triage says how many times it's
67
+ come up. Your assistant does the same with the meeting-to-plan skill (since 1.133.0).
68
+ - **To triage**, on the Roadmap, lists open captures by workstream, oldest first, with **Unassigned** last. Open one
69
+ to **Hand off** (to an initiative or a Jira issue) or **Decline** with a reason; **Reopen** puts it back.
70
+ - A capture still open after 30 days also shows on **Today**, in the **Team** view, under **Waiting in triage** (oldest
71
+ first, with a count in Needs attention), so none quietly rots. **Triage** on a row opens it in To triage to hand it off or decline it.
72
+
73
+ **By asker**, in To triage, lists everything each person or group raised, open ones first, then what became of the
74
+ rest. **Copy a note for them** copies a short plain-text note to send back: each thing they raised and where it stands,
75
+ naming no one else. **Meeting recap** says what's new, raised again, closed and reopened since your last meeting (pick
76
+ another day if you like), with how many are still open. It leaves out who asked unless you tick **Say who asked**, since
77
+ a recap is often pasted where others read it. Closed and reopened come from the plan's change log, which keeps 30 days.
78
+ Neither saves anything to the plan (since 1.134.0).
79
+
80
+ A date doesn't commit a capture, and handing it off doesn't mark anything done: those stay roadmap decisions. A Jira
81
+ issue it became stays Jira's; the plan keeps only its key. Captures sit in the shared plan file, so write them as you'd
82
+ say them in the room.
83
+
50
84
  ## Between meetings
51
85
 
52
86
  - Start in **Work → Today** for attention, blockers and due decisions.
@@ -4,21 +4,57 @@ Start with the [launch instructions](../README.md#try-it-with-an-invented-team-p
4
4
  plan file from Sightline's **File** menu. The source template is not the runnable release, and a plan link alone does
5
5
  not grant access to its file.
6
6
 
7
- The menu runs down the left side. Every page has one home:
7
+ The menu runs down the left side. At the top are your pinned pages: Today, Sprint, Timeline and Capacity until you
8
+ change them. Below them, every page has one home in a group:
8
9
 
9
- - **Work**: Today shows attention and next actions. Sprint shows the current sprint by person, workstream or epic. Sort Jira work places synced issues on the plan, and Jira change proposals reviews what the sync suggests.
10
- - **Delivery**: Timeline shows planned work. List shows the same work as rows. Capacity shows the forecast, people and time off. Status update, Decisions and Risks support delivery reviews. Milestones, Gates, Snapshots and Activity hold the supporting lists.
10
+ - **Work**: Today shows attention and next actions. Sprint shows the current sprint by person, workstream or epic. Sort Jira work places synced issues on the plan. Cards shows the plan's Jira work as cards by workstream. Jira change proposals reviews what the sync suggests.
11
+ - **Delivery**, in three parts. Plan: Timeline shows planned work. List shows the same work as rows. Capacity shows the forecast, people and time off. Review: Status update, Milestones, Gates, Decisions and Risks support delivery reviews. History: Snapshots and Activity.
11
12
  - **Product updates**: Roadmap explains what the team plans to ship. Customer release notes opens the customer wording approved for each Jira release.
12
- - **Settings**: Plan (Tags, Planning guide), Team (Team, Work calendar, Meetings, Timeboxes and ceremonies) and Connections (Jira connection).
13
-
14
- Counts and warnings sit on the page they belong to, such as open risks on Risks. Click a group's heading to fold it;
15
- the group you're in stays open. The button at the top of the menu, or the `\` key, collapses the menu to a rail of
13
+ - **Settings**: Plan (Tags, Cards, Planning guide), Team (Team, Work calendar, Meetings, Timeboxes and ceremonies) and Connections (Jira connection).
14
+
15
+ Groups start closed. Click a group's heading to open or fold it; the group you're in opens unless its page is pinned.
16
+ A number shows only when something needs you, such as high risks on Risks or what needs attention on Today, and a
17
+ closed group shows a dot when something inside it does. To pin a page, point at it in its group and click the pin, or
18
+ focus it in the menu and press P (the arrow keys move through the menu). A filled pin means it's pinned. Unpin it the
19
+ same way, from its group or from the top. You can pin up to five pages; pins stay in this browser and
20
+ never change the plan. The button at the top of the menu, or the `\` key, collapses the menu to a rail of
16
21
  icons, and hovering or focusing an icon opens that group beside it. Sightline remembers the choice in this browser.
17
22
  On a narrow window the menu starts as a rail.
18
23
 
19
- Each group remembers your last page. Existing saved startup choices and links still open their original destinations. Views express audience preferences; file permissions control access.
24
+ Each group remembers your last page. Existing saved startup choices and links still open their original destinations. The browser's Back and Forward buttons step through the pages and items you opened, and bring each back as you left it: the same item open, and the page, chart and details panel scrolled where they were. Where you'd scrolled stays in this browser's history, so a copied link opens clean. Views express audience preferences; file permissions control access.
25
+
26
+ Saved views and filters apply to Timeline, List and Capacity. To look at one initiative or one person's work, select it and click **Show only this initiative** or **Show Avery's work** on its card, or press **Z** (double-clicking an initiative does the same). It shows as a chip above the chart, such as **Initiative: Search** or **Person: Avery**; show an initiative and a person together to see that person's work in it. Click a chip to take it off, or **Show all work** to clear every filter. The browser's Back button undoes each of these. A person's work is the tasks and Jira stories assigned to them, plus initiatives they lead. Showing a person takes the place of any people you picked in Filters, and showing an initiative takes the place of any initiatives you picked; your other filters still apply, and the zoom stays as it was. If none of what's shown is in the dates on screen, a line under the chips says when it is, and **Go to it** scrolls there; if nothing matches at all, it says so. Chips are your own view in this browser and never go in the plan; links carry them. To look at several initiatives at once, pick them under **Filters > Initiatives**. Each shows with everything inside it and the initiatives that hold it, plus the milestones done when a shown initiative is. Gates are hidden while you're picking. Roadmap and Status update use the whole plan and say so. Your filters remain available when you return to Timeline.
27
+
28
+ To see one item with everything tied to it, select an initiative, task, milestone or gate and click **Show linked work** on its card, or choose **Show only what's linked to the selection** in Find. It shows the item, everything it waits for all the way back and everything that waits on it all the way on, but not work that only shares a prerequisite with it. An initiative brings what's inside it, and a task brings the initiatives that hold it. The Timeline switches to **Fit** so all of it is on screen, and the late count says it covers the whole plan. A **Linked to** chip above the chart says what it's linked to; take it off, press Back, or click **Back to where I was** beside the chips, to see everything again at the zoom you had. Back to where I was also brings back what you'd hidden or folded and what was selected before you started. It changes nothing in the plan, and the List shows the same work. While linked work is shown, select another item and click **Add to linked work** (or use Find) to see what's linked to it too, up to 5 picks; each has its own chip, and **Remove from linked work** on a pick's card takes just that one off. To keep everything on screen instead, click **Highlight instead** next to the chips: what isn't linked is dimmed, and still works when you hover, click or tab to it. **Hide the rest** switches back, Back undoes either, and taking the last chip off ends it. With an item selected, a dashed outline marks what it's directly linked to; the Key says so. On a narrow window with the details panel open, a long span can be wider than the chart even at **Fit**, because weeks keep a minimum width; scroll sideways, or close the panel, to see the rest.
29
+
30
+ To see what a milestone is waiting on, select it: **What leads here** on its card lists the work it waits for, all the way back, but nothing that waits on it. It names what finishes last and when, then the rest, latest finish first, with each item's date, status and owner. Work finishing after the milestone's date is marked, and so are dates that come from Jira's sprints. A milestone that's done when its initiatives finish takes its date from them, and the card says so. Click an item to open it; nothing in the list changes the plan. To see all of it on the Timeline, click **Show on the Timeline**: it shows the milestone and only what leads to it, with a **Leading to** chip above the chart.
31
+
32
+ Any linked work can be shown one way. While linked work is showing, open **Linked work** beside the chips and choose **Leads here only** (or press **>**) to keep what the picks wait for, all the way back, and hide what waits on them; with several picks, it's what leads to any of them. **Both ways** switches back, and Back undoes either. Taking the last chip off ends it. The status line counts the linked items that are on screen; when your other filters (a person, a workstream, hidden done work, a tag) hide some of them, it says how many, and in the List it says how many linked milestones and gates are on the Timeline. To see sideways too, choose **Work that waits for the same things** in the same menu: it adds the work that waits for something the picks wait for (directly, not further back), and what's in it, and the status line counts those items on their own. It shows linked work both ways, so choosing it from Leads here only switches back to both ways; choose it again to take those items off. It's yours alone: a saved view never keeps linked work, so a view always opens with nothing picked.
33
+
34
+ ## Cards
35
+
36
+ **Work > Cards** shows every Jira story, Jira task and one-issue initiative on the plan as a card. Rows are workstreams in
37
+ plan order. Inside a workstream, cards sit under their initiative, and the ones that aren't on an initiative come last.
38
+ Rows can also be people or epics. Columns are status (to do, in progress, done, and canceled when you tick it) or sprint
39
+ (earlier sprints, the active one, the next ones, no sprint). Filter by sprint, person, status, epic or text, or click
40
+ **Mine**. Each total says what it leaves out: cards not estimated, cards you hid, and cards the filters hide, each counted
41
+ on its own.
20
42
 
21
- Saved views and filters apply to Timeline, List and Capacity. Roadmap and Status update use the whole plan and say so. Your filters remain available when you return to Timeline.
43
+ - **Drag a card to another workstream or onto an initiative** to place it there. It's the same change Sort Jira work
44
+ makes: a story leaves its epic's initiative (switched off there), and a Jira task leaves its initiative. One save, with
45
+ Undo. A one-issue initiative moves between workstreams; to put it inside another initiative, change its parent in its panel.
46
+ - **Drag a card to another status or sprint** to propose that change for Jira. Jira doesn't change. When a status column
47
+ covers several of your workflow's statuses, Sightline asks which one and remembers your choice in this browser.
48
+ - **Without a mouse**: focus a card and press **M**, choose a place with the arrow keys, then press **Enter** (or **Esc** to cancel).
49
+ - **Hide** keeps a Jira item off the plan's views (cards, the timeline and List), with an optional reason, using the plan's
50
+ own ways: a story is switched off in its initiative, an epic is parked, and an issue the plan doesn't show is marked not
51
+ ours. **Hidden** lists each one, how it's hidden and why, with **Bring back**. Work that's on the plan as its own task or
52
+ initiative can't be hidden; take it off the plan instead.
53
+
54
+ **Settings > Cards** sets what a card shows: the fields and their order, the density (compact, normal or detailed) and
55
+ whether cards get wider for more points. The plan holds the team's layout (change it while editing). **Mine** is your own
56
+ layout in this browser, with **Reset to the team's layout**. A plan with a team layout or hide reasons opens read-only in
57
+ an older copy of Sightline.
22
58
 
23
59
  ## Declutter: hide what you don't need
24
60
 
@@ -35,15 +71,16 @@ Saved views and filters apply to Timeline, List and Capacity. Roadmap and Status
35
71
 
36
72
  ## List
37
73
 
38
- **List** (Delivery, next to Timeline, or press L) reads the plan top to bottom, like a checklist. It shows the work Timeline draws for the same filters: initiatives with their tasks, and Jira stories placed on the plan or counted under an epic. Each row has Start, End, Item, Owner, Waits on and Status.
74
+ **List** (Delivery, next to Timeline, or press L) reads the plan top to bottom, like a checklist. It shows the work Timeline draws for the same filters: initiatives with their tasks, and Jira stories placed on the plan or counted under an epic. Each row has Start, End, Item, Workstream, Owner, Waits on and Status.
39
75
 
40
- - **Layouts:** By initiative (initiatives are group headers with their own dates, owner and item count), By person (a task with two owners appears under each, marked shared), and Everything by start date. Ties keep initiative order, then plan order. The layout stays in your browser for each plan; it isn't part of a saved view.
76
+ - **Layouts:** By workstream, the default (each workstream in its order, with its color, its initiatives and their tasks under it; the Workstream column is left out, since each group names it), By initiative (initiatives are group headers with their own dates, owner and item count), By person (a task with two owners appears under each, marked shared), By start date (everything in one list), and By connection (each chain of linked work as its own group, named for where it starts (every starting point, when it has more than one), in the order it has to happen: what a row waits for comes before it; chains go by when they start, a chain holding linked work you picked comes first, a chain with a loop says so, and work with no links is last; filters hide rows but never move one to another group), By order (steps from what waits for what: step 1 waits for nothing, each later step waits only on earlier ones, waiting for an initiative means waiting for everything in it, and work in a loop is set apart; filters hide rows but never change a step; waiting and unstaffed rows are listed apart, last). Steps show order, not what's ready: a done item still counts, so a step 2 item whose step 1 work is done can start now. Ties keep initiative order, then plan order. The layout stays in your browser for each plan; it isn't part of a saved view.
41
77
  - **Dates** are Timeline's own: weekends, holidays and owners' time off are already skipped.
42
78
  - **Owner** shows the plan's owners; for a Jira item, its Jira assignee and, separately, any plan lead. People outside the team or inactive are marked.
43
- - **Waits on** lists what an item waits for: a task's links, and an initiative's waits on other initiatives, gates and process steps. In the flat layouts a task's row also shows its initiative's waits. Jira dependencies link to Jira, with a warning when one ends after the item starts. Click a name to open it.
79
+ - **Waits for** lists what an item waits for: a task's links, and an initiative's waits on other initiatives, gates and process steps. In the flat layouts a task's row also shows its initiative's waits. Jira dependencies link to Jira, with a warning when one ends after the item starts. Click a name to open it.
44
80
  - **Status** is the status Timeline shows. For a Jira item, Jira's own status and when it was synced.
45
81
  - Work Timeline doesn't draw (parked, switched off, abandoned in Jira, or without sprint dates) is in **Not on the timeline** at the end, with the reason, so nothing goes missing.
46
82
  - Hover or focus a row for its card; click it or press Enter for its details. Escape closes them and returns you to the row; Up and Down move between rows. A selection carries between Timeline and List, and the page, layout and selection are in the link.
83
+ - **Columns:** drag the edge of a column's heading to make it wider or narrower, or focus the edge (Tab) and use Left and Right (Shift for bigger steps). Double-click an edge for that column's default width. The first resize sets every column to the width it shows, so nothing else moves, and a wide table scrolls sideways. **Columns** in the toolbar sets each column to wrap or keep one line; a one-line column is cut short with the full text on hover. Out of the box only the dates keep one line. **Reset columns** goes back to that. These settings are yours, kept in this browser for every plan; they aren't in the plan or a saved view, and printing always shows every column in full.
47
84
  - **Copy as table** copies the rows as shown as a markdown table. If the browser doesn't allow copying, the table appears selected so you can copy it yourself. **Print** prints every row, with the header repeated on each page.
48
85
 
49
86
  Edits stay in the details panel; List has no editable cells.
@@ -62,12 +99,13 @@ selection while keeping your text. **Test reply** checks for a response, and **C
62
99
  instructions. Read the [first planning session](assistant-workflow.md#first-four-quarter-planning-session)
63
100
  for the in-app route. External tools use the [private-folder session](assistant-workflow.md#your-first-external-planning-session) and their own conversation.
64
101
 
65
- Unsubmitted **New idea** text stays with its plan during navigation and redraws in this tab's session. It is not
102
+ Unsubmitted **New roadmap idea** text stays with its plan during navigation and redraws in this tab's session. It is not
66
103
  included in the saved plan or assistant context until added. Successful submission clears only the submitted text;
67
104
  an idea you start typing while the save finishes is retained. Copy or submit drafts before closing the app.
68
105
 
69
106
  Today distinguishes no work loaded, missing Jira status data, and incomplete connected data. Its attention flags
70
107
  describe the available plan and sync; a quiet summary does not establish delivery feasibility.
108
+ In the Team view it also lists captures that have waited in To triage for over 30 days.
71
109
 
72
110
  Open the menu at the right of the header (**Choose yourself**, or your initials once you have) and choose **Choose yourself** or **You: [name]** to identify yourself for Mine and author stamps. This is a browser preference, not a verified identity. The same menu has text size, theme, **What's new** and help.
73
111
 
@@ -75,17 +113,65 @@ Open the menu at the right of the header (**Choose yourself**, or your initials
75
113
 
76
114
  **File** holds only what you do with the plan file: the shared file, importing a copy and exporting one. The plan's start date, default sprint length, whether linked items move automatically and where Jira links go are in **Settings → Plan details**. **Set baseline** is on **Delivery → Snapshots**, and the page Sightline opens on is under **Start Sightline with…** in the menu at the right of the header. Each Settings page is titled with its name in the menu.
77
115
 
116
+ **The Time button.** On the Timeline, the time controls (Weeks and Days, the sprint picker, **‹** **›**, the presets and **+** **−**) sit behind one **Time** button that says what's on screen, for example **Time: Weeks · S2 (Oct 19 – Oct 30)**. It starts closed; click it to open the controls in place, where the button shrinks to its arrow so the toolbar stays one row, and this browser remembers whether you left it open. The shortcuts and Find work either way, and the button keeps up with them. Warnings about the plan, like the late count, never go inside it.
117
+
118
+ **What's hidden.** When the Timeline leaves things out, a line under the toolbar says why: kinds you hid, the Added by filter, parked initiatives, workstreams outside the dates on screen. With two or more reasons it folds into one line that counts each, with what you chose to hide first, and **Details** opens the full notes and their buttons (**Show everything**, **Review parked**, **Clear it**). It starts closed, and this browser remembers whether you left it open. One reason shows in full. Warnings, like the late count, are never folded into it.
119
+
120
+ **One sprint, edge to edge.** Open **Time**, then beside Weeks and Days pick a sprint (its tooltip shows the dates on screen). The view fits it exactly, its first day at the left edge and its last at the right, in Weeks and Days, whatever its length and the window's width. **‹** and **›** (or **[** and **]**) step to the previous and next sprint; **.** goes to the sprint we're in, or the next one between sprints. With **+** and **−** you can show two or more sprints from the chosen one. **Fit** lets the view scroll freely again. The choice stays in this browser, and a link to the Timeline carries it. Beside the picker, **1** (This sprint), **2** (This + next), **3** (Next 3) and **Fit** get there in one click, always from the sprint we're in (or the next one, between sprints); Shift+1, Shift+2, Shift+3 and Shift+0 do the same. A plan with sprints opens on This + next the first time, and after that on your last choice, moved along to the current sprint. A link with a sprint wins over both.
121
+
122
+ **Sprint shelves.** In Weeks, with rows by workstream, each workstream's Jira stories sit on a shelf per sprint instead of a bar each. Tiles are grouped under their initiative, with stories not on one last. A tile's width follows its points, one scale for the whole chart (a minimum so small stories stay readable; past 13 points the width stops growing and the tile is marked ▸). Each tile shows its points, a status symbol (○ not started, ◐ in progress, ● done) and the assignee's initials; hover or focus a tile for the full facts, and click it, or press Enter, to open its panel. A red corner and ⛔ mean blocked in the plan. Stories with no estimate sit in a Not estimated strip, and stories with no sprint in this plan are counted as Unscheduled, beside the shelves. Canceled stories are left out. Where a tile sits inside a sprint says nothing about when. The summaries count estimated points and done points, next to the story counts; they aren't effort or a forecast, and capacity isn't compared yet. At Fit or several sprints the shelves show summaries only; pick one or two sprints for the tiles, or use Show the stories beside a workstream's shelves. Tab reaches each shelf once; the arrow keys, Home and End move along it. Spotlight lights up one person's tiles. Show, then On sprint shelves, turns them off. Shelves are display only: a one-story initiative is still in the plan, and List shows every story as a row.
123
+
78
124
  **Where we are.** The sprint we're in is a soft band behind the bars, and its header reads, for example, **Sprint 42 · now**. Today is a red line with a **Today** tab in the time header; in Weeks it sits at today inside the week. Between sprints there's no band, and the next sprint's header says when it starts. Before or after the plan's dates the tab waits at that edge with the date. Capacity's load grid marks the sprint's weeks and this week, and Roadmap marks the quarter we're in. Press **.** to jump to today in either zoom. All of it prints.
79
125
 
80
126
  On the Timeline, **View** holds the rows (by workstream, person or epic) and, when the plan has Jira work, which sources to show. The button says what's chosen, for example **View: By person · Jira only**, so a filtered review is never a surprise. R still switches rows.
81
127
 
128
+ The sources are **All sources**, **Jira only**, **Jira + mine** and **Added here**. **Added here** shows only work that nothing in Jira tracks: tasks and initiatives with no Jira key, and any initiative that holds such work. Jira-linked items and Jira's stories are hidden; milestones, gates and notes stay. It works on the Timeline and the List. Sprint shows Jira's sprint, so it isn't offered there. While it's on, a banner above the chart says so, in Present too, with **Show everything** to turn it off, and the late count says it covers the whole plan. It's your own choice for this plan in this browser, and saved views never record it.
129
+
82
130
  Today names each due decision's decider; its owners may be different people.
83
131
 
84
- Find reveals a matching milestone, gate or note through the Timeline's filters, folded rows and hidden layers. **Restore previous view** returns to the view you had before opening the result. Filter controls retain keyboard focus when the view updates, and status messages remain visible on narrow screens.
132
+ **Stars** get you back to anything fast. Select an item and press **,** (comma), or click the star at the top of its details, to star it; do it again to unstar it. Initiatives, tasks, Jira stories, milestones, gates, meetings, notes, people, workstreams, releases, process blocks and deliverables can be starred, up to 24 per plan. Your stars are listed under **Starred** in the menu (the first five, then **Show all**) and near the top of Find when you open it with nothing typed (right after a few actions for what you've selected): press **/**, then Enter or the arrow keys. Going to a star shows it even if your filters or Show settings hid it, and **Back to where I was** (in the menu and above the chart) then puts everything back: the page, filters, what's hidden or folded, zoom, selection and scroll. A Jira item keeps its star by its key, wherever it's shown (a story, a task or an initiative); when it can't be found the star says why (Jira isn't loaded, not in the last sync, or not on this plan's chart) and stays until you unstar it. Stars are yours alone: kept in this browser for this plan, never in the plan file, so nobody else sees them.
133
+
134
+ **Copy** at the top of an item's details copies a link to it (**Link**) or a reference to paste into any assistant (**For your assistant**, or **With its details**); **Ctrl+C** does the same when no text is selected. See [Ask about one item](assistant-workflow.md#analyze-with-any-assistant).
135
+
136
+ **Find** (/ or Ctrl+K) with nothing typed starts with what fits where you are: **For** the item you've selected, up to five of its most used actions, such as star it, copy it for your assistant, write an update or copy a link to it, with the rest one **>** away; then **Starred**; then **Recent**, the last 8 items you opened, newest first, without what's starred or selected; then **On this page**, the actions for the page you're on. The selection is taken when Find opens, so if it changes before you pick an action, the action does nothing and says so. Recent is yours alone, kept in this browser for this plan; Back and Forward don't add to it, and "clear recent" in Find forgets it. Start what you type with **>** to see only actions, for example "> zoom".
137
+
138
+ **Find** (/ or Ctrl+K) also runs actions by name: type "days", "start editing", "rows by person" or "show only" and press Enter. Each action shows its shortcut, and only actions that apply right now are offered, so what's selected and whether you're editing decide what you see. Press **?** for every shortcut. Before you open a result, Find says when your view doesn't show it as it is: **Outside your filter**, **Outside linked work**, **Folded row**, **Dimmed: not linked** or **Not on Timeline**. Opening it changes the view to show it, in one step: it unfolds rows, shows hidden kinds and layers and switches the zoom where needed, and for an initiative or task a filter hides, it clears your filters (for a milestone or gate, only the filters that hide it). A strip above the chart says so, and the note at the bottom of the window offers the same way back for a few seconds. **Back to where I was** in that strip, or one press of the browser's **Back**, puts everything back as it was: a linked chain you were looking at, the filters, folds, zoom, selection and scroll. Searching again from there still goes back to where you started, and **Keep this view** stays where you are. Back and Forward between these steps show each one as it was. Starred and Recent results in Find are marked the same way. Going to a person or workstream, or to something already on screen, changes nothing else and isn't something to go back from. Filter controls retain keyboard focus when the view updates, and status messages remain visible on narrow screens.
139
+
140
+ **J** and **K** move to the next or previous item in the view you're in. On the Timeline and the List they select it, so its details open beside it; on Today, Sprint, Capacity and the Roadmap they move keyboard focus, and **Enter** opens it. Once you're on a row there, the **Up** and **Down** arrows do the same. In People load, **Enter** on a person opens their card. On the Plan pages with a table (Milestones, Gates, Decisions and Risks) they step through its rows, and **Enter** puts the cursor in the row's first field; on Cards they step through the cards (press **M** on one to move it). At either end they stay put and say so. On a Mac, the keyboard help, Find and the toolbar's tooltips show ⌘, ⇧ and ⌥ where other computers show Ctrl, Shift and Alt.
141
+
142
+ With a task or initiative selected on the Timeline or the List, **O** puts the cursor in its owner picker: type a name and press **Enter** to add them, or **Backspace** to take off the last one. It's a plan edit, so it works while you're editing. On a Jira item it sets the plan's lead, never Jira's assignee. An initiative whose owners come from its tasks says so instead. Find also moves the selection while you're editing: type "week later", "week earlier" or "next sprint". Each move is one Undo (Ctrl+Z, or ⌘Z on a Mac), the status line says where it now starts and what moved with it, and focus stays on the item so J, K and another move carry on. To link a Jira epic to the selected initiative, type "link epic": the cursor lands in its epic box. An epic counts on one initiative, so a key that's already on another one is refused with its name. Work whose dates come from Jira isn't offered a move.
143
+
144
+ **More keys.** With something selected on the Timeline or the List:
145
+
146
+ - **C** shows only what's linked to it; **C** again shows everything. **Shift+C** adds the selection to the linked work and **Shift+X** takes it off. **Shift+Z** switches between highlighting the linked work and hiding the rest.
147
+ - **Shift+N** moves it to the next sprint, and **{** and **}** move it a week earlier or later. Each move is one change that **Undo** reverses. Work whose dates come from Jira's sprint says so instead of moving, as dragging does, and nothing moves while you present.
148
+ - **Shift+J** opens the Jira epic link on an initiative, while you're editing.
149
+ - On a milestone, **Shift+L** or **<** goes to **What leads here**.
150
+ - **>** shows what leads to the selection on the Timeline. While linked work is showing, **>** switches between only what leads there and both ways.
151
+
152
+ Anywhere on the Timeline, the List or People, **0** shows all work. **Back** puts your filters back.
153
+
154
+ On the Timeline:
155
+
156
+ - **Shift+T** or **;** opens and closes the time controls.
157
+ - **Shift+D** opens the Details of what's hidden.
158
+ - **Shift+W**, **Shift+O** and **Shift+E** show rows by workstream, person or epic.
159
+
160
+ **Shift+A** opens the assistant and **Shift+U** shows what's new.
161
+
162
+ Shift and a letter is read from the Shift key, so with Caps Lock on a letter still does what it does without Shift.
163
+
164
+ To switch off every single-key shortcut (letters, digits and symbols), clear **Single-key shortcuts** at the top of the **?** shortcuts page. This helps with screen readers and speech input. Find and keys with Ctrl (⌘ on a Mac) keep working, and this browser remembers the choice.
85
165
 
86
166
  Unsent notes, quick updates and blocker explanations stay with their plan and item during this session when details redraw. They clear after successful submission. They are temporary browser-session drafts; submit the text before closing the page. Saving other plan edits does not submit a composer draft.
87
167
 
88
- Use **Connect assistant** in the toolbar to set up the [private assistant folder](assistant-workflow.md). Proposed changes wait for your review. Common initiative and task updates remain visible; open **Organize this initiative** or **Move this task** for structural changes.
168
+ Use **Connect assistant**, in the menu under your name, to set up the [private assistant folder](assistant-workflow.md). Once an assistant is connected, the toolbar shows its state, and proposed changes wait there for your review. Common initiative and task updates remain visible; open **Organize this initiative** or **Move this task** for structural changes.
169
+
170
+ The details panel shows what you need first: warnings, quick status, updates, notes, the title, status, owner,
171
+ dates and an initiative's first three tasks (**Show all** lists the rest). The rest folds into **Story** (when none is
172
+ written yet), **Schedule**, **Waits for**, **Organize** and **More**, and each fold's line says what's inside, such as
173
+ "2 weeks" or "1 item". Warnings never fold. Sightline remembers which folds you open for initiatives and for tasks,
174
+ in this browser only.
89
175
 
90
176
  **Settings → Planning guide** describes project scope, workstream purposes, work breakdown, vocabulary, rules,
91
177
  and examples for your assistant. Save the guide, then save the shared plan to include it in automatic assistant
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@troylar/sightline",
3
- "version": "1.120.3",
3
+ "version": "1.175.0",
4
4
  "description": "Your team's work, in plain sight. One HTML delivery planner, Jira context, and human-reviewed AI planning.",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -39,7 +39,8 @@
39
39
  "build": "bash ./build.sh",
40
40
  "test": "bash ./test/run.sh",
41
41
  "check": "bash ./build.sh && bash ./test/run.sh",
42
- "prepack": "bash ./build.sh"
42
+ "prepack": "bash ./build.sh",
43
+ "perf": "node test/perf/run.js"
43
44
  },
44
45
  "repository": {
45
46
  "type": "git",
@@ -50,6 +51,7 @@
50
51
  "url": "https://github.com/troylar/sightline-planner/issues"
51
52
  },
52
53
  "devDependencies": {
53
- "jsdom": "^24.1.3"
54
+ "jsdom": "^24.1.3",
55
+ "playwright": "1.57.0"
54
56
  }
55
57
  }