@troylar/sightline 0.0.0-stage → 1.120.3
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.
- package/CHANGELOG.md +1890 -0
- package/CONTRIBUTING.md +67 -0
- package/LICENSE +21 -0
- package/README.md +153 -2
- package/THIRD-PARTY-NOTICES.md +121 -0
- package/bin/sightline.js +78 -0
- package/dist/sightline-app.py +406 -0
- package/dist/sightline-assistant.py +551 -0
- package/dist/sightline-jira-sync.py +2513 -0
- package/dist/sightline.html +14141 -0
- package/docs/assistant-workflow.md +472 -0
- package/docs/availability.md +54 -0
- package/docs/bundled-skills.md +46 -0
- package/docs/getting-started.md +99 -0
- package/docs/images/assistant-dark.png +0 -0
- package/docs/images/assistant-light.png +0 -0
- package/docs/images/bundled-skills-dark.png +0 -0
- package/docs/images/bundled-skills-light.png +0 -0
- package/docs/images/planning-decisions-dark.svg +46 -0
- package/docs/images/planning-decisions-light.svg +46 -0
- package/docs/images/planning-decisions-mobile-dark.svg +40 -0
- package/docs/images/planning-decisions-mobile-light.svg +40 -0
- package/docs/images/planning-story-dark.svg +32 -0
- package/docs/images/planning-story-light.svg +32 -0
- package/docs/images/planning-story-mobile-dark.svg +33 -0
- package/docs/images/planning-story-mobile-light.svg +33 -0
- package/docs/images/review-dark.png +0 -0
- package/docs/images/review-light.png +0 -0
- package/docs/images/roadmap-dark.png +0 -0
- package/docs/images/roadmap-light.png +0 -0
- package/docs/images/roadmap-map-dark.svg +53 -0
- package/docs/images/roadmap-map-light.svg +53 -0
- package/docs/images/roadmap-map-mobile-dark.svg +37 -0
- package/docs/images/roadmap-map-mobile-light.svg +37 -0
- package/docs/images/timeline-dark.png +0 -0
- package/docs/images/timeline-light.png +0 -0
- package/docs/images/today-dark.png +0 -0
- package/docs/images/today-light.png +0 -0
- package/docs/jira.md +66 -0
- package/docs/large-roadmaps.md +93 -0
- package/docs/onedrive.md +62 -0
- package/docs/performance-workspaces.md +39 -0
- package/docs/roadmap-planning-example.md +92 -0
- package/docs/roadmap.md +232 -0
- package/docs/screenshots.md +57 -0
- package/docs/skill-evaluation.md +71 -0
- package/docs/skills.md +85 -0
- package/docs/team-planning.md +66 -0
- package/docs/usability-test.md +215 -0
- package/docs/workspace-validation.md +152 -0
- package/docs/workspaces.md +106 -0
- package/examples/northstar/blank-plan.json +21 -0
- package/examples/northstar/brain-dump.txt +1 -0
- package/examples/northstar/jira/issues.json +1256 -0
- package/examples/northstar/jira/status.json +1542 -0
- package/examples/northstar/plan.json +341 -0
- package/examples/northstar/roadmap-session-amendments.json +42 -0
- package/examples/northstar/sightline-amendments.json +41 -0
- package/package.json +53 -4
- package/skills/sightline-edit-plan/SKILL.md +35 -0
- package/skills/sightline-meeting-to-plan/SKILL.md +34 -0
- package/skills/sightline-plan-roadmap/SKILL.md +34 -0
- package/skills/sightline-planning-guide/SKILL.md +29 -0
- package/skills/sightline-review-plan/SKILL.md +28 -0
- package/skills/sightline-sort-jira/SKILL.md +56 -0
- package/skills/sightline-status/SKILL.md +26 -0
package/docs/roadmap.md
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# Roadmap: building vision.md
|
|
2
|
+
|
|
3
|
+
This is the historical implementation sequence, not the current feature status or a delivery commitment.
|
|
4
|
+
For today's product, start with [the visual guide](../README.md) and [release history](../CHANGELOG.md).
|
|
5
|
+
|
|
6
|
+
The plan for building [vision.md](https://github.com/troylar/sightline-planner/blob/main/vision.md), release by release. Each release is one PR with its own tests.
|
|
7
|
+
Function names are given instead of line numbers, because lines move.
|
|
8
|
+
|
|
9
|
+
## What the code tells us first
|
|
10
|
+
|
|
11
|
+
- **The plan file cap is 2 MB** (`MAX_BYTES`, checked in `parseText` and `readFile`). The 5 MB cap is for the Jira
|
|
12
|
+
status file. Everything added to the plan (who added what, tags, the change log) has to fit.
|
|
13
|
+
- **Older copies of the page delete fields they don't know.** `normalize` rebuilds every item from a list of known
|
|
14
|
+
fields, so an older page that saves drops everything new. The foundation release (below) has to come before any new
|
|
15
|
+
saved field.
|
|
16
|
+
- **Notes already have `created` as a string**, so "who added it" can't use that name. It's `added: {by, at}`.
|
|
17
|
+
- **`commit` runs on every keystroke** (text fields commit as you type, grouped by `coalesce`). Anything it does each
|
|
18
|
+
time must be cheap.
|
|
19
|
+
- **A merge treats a field changed on both sides as a clash.** An "edited by" stamp would clash on every shared item,
|
|
20
|
+
so it must be exempt.
|
|
21
|
+
- **`applyJira` writes Jira's status and dates into the plan on every draw.** This goes against "shown, not copied",
|
|
22
|
+
and those writes must never be counted as someone's edit.
|
|
23
|
+
|
|
24
|
+
## Releases
|
|
25
|
+
|
|
26
|
+
Status (2026-09-27): 1.17–1.24 built as PRs #21–#28, the safety release as 1.25 (#29), and proposed changes (step 7)
|
|
27
|
+
as 1.26 (#30). Step 8 started with the standup board as 1.27. The retrospective and canvas views, and write-back
|
|
28
|
+
(step 9), need decisions first.
|
|
29
|
+
|
|
30
|
+
| Release | What | Needs |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| 1.17.0 | **From Jira vs Added here at a glance:** two looks, legend, sprint headers, counts with units, layers (Everyone / Jira only), hidden counts | none |
|
|
33
|
+
| 1.18.0 | **Jira facts shown, not copied:** titles and assignees follow Jira; chart label and lead are the plan's; Jira sprint names read-only | 1.17 |
|
|
34
|
+
| 1.19.0 | **Foundation:** one storage interface, schema migrations, protection against older pages dropping new fields, read cap raised to 5 MB | none; must come before 1.20 |
|
|
35
|
+
| 1.20.0 | **Who added what, and the change log:** stamps on everything, Activity list, note author locked, Mine layer | 1.19, 1.17 |
|
|
36
|
+
| 1.21.0 | **Hide by person:** Added-by filter, hide someone's items, hidden counts by reason, links to hidden items, undo one change | 1.20 |
|
|
37
|
+
| 1.22.0 | **Tags:** plan tags on everything (Jira items too, by key); Jira labels from the sync, read-only | 1.20, 1.17 |
|
|
38
|
+
| 1.23.0 | **Cards in two parts:** From Jira (read-only), then Added here | 1.18, 1.20, 1.22 |
|
|
39
|
+
| 1.24.0 | **Notes and dependencies on Jira items**, attached by Jira key | 1.18, 1.23 |
|
|
40
|
+
|
|
41
|
+
1.17 and 1.19 can ship in either order; 1.18 can follow 1.17 directly. "Mine" comes with 1.20, once there's a record of
|
|
42
|
+
who added what.
|
|
43
|
+
|
|
44
|
+
## 1.17.0: From Jira vs Added here
|
|
45
|
+
|
|
46
|
+
- **Which side:** `sideOf(item)` returns "jira" for stories, Jira-linked tasks, Jira-linked leaf initiatives and epic
|
|
47
|
+
initiatives, and "plan" for everything else.
|
|
48
|
+
- **Look:**
|
|
49
|
+
- Jira items: surface fill, 2px workstream-color outline, a mono key chip (the first epic key, "+n" for more).
|
|
50
|
+
- Plan items: filled, as today, with a slot for the author's initials (drawn from 1.20).
|
|
51
|
+
- Stories switch from dashed to the Jira look. Dashed stays only for "outside the plan's dates".
|
|
52
|
+
- **Sprint headers:** Jira sprints get a "Jira" chip, with Jira's exact dates in the hover ("drawn in whole weeks").
|
|
53
|
+
The plan's own timeboxes look like plan items.
|
|
54
|
+
- **Legend:** From Jira, Added here, Jira sprint, plan timebox.
|
|
55
|
+
- **Counts:** `5/9 stories`, `2/5 tasks`, `3/4 items`, with "(partial)" when counting stopped early. The weighted %
|
|
56
|
+
moves to the hover card, and the progress fill follows the count.
|
|
57
|
+
- **Layers:**
|
|
58
|
+
- Everyone or Jira only, saved per viewer and per plan in localStorage; team views can save a layer too.
|
|
59
|
+
- Applied in every visibility function: bars, tasks, milestones, gates, notes, meetings, blocks.
|
|
60
|
+
- **Hidden counts:** a slim line under the view bar, not a warning. For example: "12 plan items hidden by your layer
|
|
61
|
+
· Show everyone", "2 parked", "Notes hidden (N)".
|
|
62
|
+
- **Tests (each fails on 1.16.1):** Jira vs plan classes and key chips in Weeks and Days; sprint header classes; the
|
|
63
|
+
legend; no bare `%` tags; the Jira-only layer hides a hand-made bar and counts it; the layer is per plan; parked
|
|
64
|
+
items are counted.
|
|
65
|
+
|
|
66
|
+
## 1.18.0: Jira facts shown, not copied
|
|
67
|
+
|
|
68
|
+
- **Title:** `titleOf(item)` gives Jira's summary when the Jira files have it. Otherwise it gives the stored label or
|
|
69
|
+
key, marked stale ("Jira files not loaded"). `chartLabel` becomes the chart label, else `titleOf`. Every place the
|
|
70
|
+
page draws a label switches to it: chart, card, hover, Find, Today, warnings.
|
|
71
|
+
- **Adding from Jira stops copying.** `epicOnNew`, `batchOn` and `addFromJira` store the key as the label and no
|
|
72
|
+
owners or status.
|
|
73
|
+
- **Assignee and lead, worked out when the page draws (no file change):**
|
|
74
|
+
- The assignee comes from Jira.
|
|
75
|
+
- The `owners` field stays in the file but is labeled **Lead (plan)** on Jira items. An owners list equal to the
|
|
76
|
+
assignee counts as the old copy, so no lead.
|
|
77
|
+
- The people filter, people rows, Today and load use assignee plus lead.
|
|
78
|
+
- **Titles that differ from Jira:** there's no automatic rewrite, since a teammate's rename can't be told apart from a
|
|
79
|
+
Jira rename. Plan, then Epics lists them with two choices: **Keep ours as the chart label**, or **Use Jira's**. The
|
|
80
|
+
chart label cap goes to 60 characters.
|
|
81
|
+
- **Sprints:** the name and goal of a Jira sprint come from Jira and are read-only; its weeks stay the plan's.
|
|
82
|
+
- **Tests:** a stale stored title appears nowhere once Jira has the real one; the stale mark shows without Jira;
|
|
83
|
+
nothing is copied on add; the assignee counts for the people filter; the Jira sprint name is read-only; "keep ours"
|
|
84
|
+
sets the chart label.
|
|
85
|
+
|
|
86
|
+
## 1.19.0: Foundation
|
|
87
|
+
|
|
88
|
+
- **Storage interface:**
|
|
89
|
+
- `store.load()`, `store.apply(change)`, `store.save(plan)`, `store.lock()`, `store.subscribe(cb)`, `store.draft`.
|
|
90
|
+
- Backends: `FileStore` (the shared file) and `LocalStore` (this browser only).
|
|
91
|
+
- Moves in: reading and writing the file, the quick-update read–apply–write–retry core, verify-later, polling for
|
|
92
|
+
changes, the local draft.
|
|
93
|
+
- Merging becomes a pure `mergePlans(base, mine, theirs)`; the page keeps backups and messages.
|
|
94
|
+
- Save stays a whole-file write in this release.
|
|
95
|
+
- A later database backend implements the same interface.
|
|
96
|
+
- **Schema:** `meta.schema` with an ordered list of migrations, run before `normalize`. Only a change older pages can't
|
|
97
|
+
read bumps it. New optional fields go in `meta.features` instead.
|
|
98
|
+
- **Protection against older pages:**
|
|
99
|
+
- `meta.features` and `meta.savedWith` mark what's in the file.
|
|
100
|
+
- A page that finds a feature it doesn't know, or a newer schema, opens the plan read-only, with no quick updates:
|
|
101
|
+
"Saved by a newer Sightline. Update this copy to edit."
|
|
102
|
+
- A save by a page older than 1.19 is detected (it drops `savedWith`), with an offer to put back what it removed.
|
|
103
|
+
- **Size:** the read cap goes to 5 MB; the write cap stays at 2 MB until older copies are gone. Undo history is capped
|
|
104
|
+
by size (it holds whole-plan snapshots).
|
|
105
|
+
- **Proof:** a pure refactor, so every existing test passes unchanged. New tests cover a file changing mid-save,
|
|
106
|
+
subscribe firing once per change, the merge matching the old one, and the read-only and put-back paths.
|
|
107
|
+
|
|
108
|
+
## 1.20.0: Who added what, and the change log
|
|
109
|
+
|
|
110
|
+
- **Stamps:** `added: {by, at}` and `edited: {by, at}` on every plan item, stamped in one place in `commit`:
|
|
111
|
+
- New ids get `added`; changed items get `edited`.
|
|
112
|
+
- Stamping happens after the edit, before `reschedule` and `applyJira`, so an item moved automatically isn't counted
|
|
113
|
+
as your edit.
|
|
114
|
+
- `added` never changes in a merge; `edited` takes the later one and never counts as a clash.
|
|
115
|
+
- Old items show "not recorded". Notes take theirs from the existing author.
|
|
116
|
+
- **Change log:**
|
|
117
|
+
- `S.changes`, entries `{id, by, at, what, ops}`: one per quick update, one per Save. The log never includes itself,
|
|
118
|
+
or Jira's own values that `applyJira` wrote.
|
|
119
|
+
- Kept to the smaller of 1,000 entries, 30 days and 256 KB; entries over 16 KB keep a summary only.
|
|
120
|
+
- Entries are only ever added, so they merge safely. It's advice, not an audit: a shared file can't prove who did
|
|
121
|
+
what.
|
|
122
|
+
- **Screens:**
|
|
123
|
+
- "Added by Avery Stone, Sep 27 · edited by Blake, Sep 28" in cards and hover.
|
|
124
|
+
- The note author is no longer editable, and editing someone else's note asks first.
|
|
125
|
+
- A new Plan, then Activity page.
|
|
126
|
+
- The Mine layer: Jira items plus what I added, with older items counted.
|
|
127
|
+
- Author initials on plan items.
|
|
128
|
+
- **Size check:** the 100-epic demo plan with stamps must grow by less than 35% and stay under 2 MB.
|
|
129
|
+
|
|
130
|
+
## 1.21.0: Hide by person
|
|
131
|
+
|
|
132
|
+
- An "Added by" filter; a per-viewer, per-plan hide list. It never hides Jira items, only what people added on them.
|
|
133
|
+
- Hidden counts by reason ("8 hidden by your view (Avery 5, Blake 3) · Show all").
|
|
134
|
+
- **Links to hidden items:** an item whose dependency is hidden gets a "⇠ 1 hidden" tag that opens it.
|
|
135
|
+
- **Undo one change** from Activity: reverse only the fields that still hold that change's value, and report the rest.
|
|
136
|
+
|
|
137
|
+
## 1.22.0: Tags
|
|
138
|
+
|
|
139
|
+
- **Tag definitions:** `S.tags` (id, name, color, stamps).
|
|
140
|
+
- **Tags on plan items:** `tags: [id]`.
|
|
141
|
+
- **Tags on Jira items:** `S.jiraItems`, one entry per key, which is also where later plan notes on Jira items go.
|
|
142
|
+
Tag lists merge as sets everywhere.
|
|
143
|
+
- **Jira labels:** the sync fetches `labels`. They're shown read-only, marked as Jira's, and kept separate from a plan
|
|
144
|
+
tag with the same name.
|
|
145
|
+
- **Filters and views:** show only or hide by tag or by label; a tag index is built once per draw.
|
|
146
|
+
- **Screens:** tag chips on bars; a Plan, then Tags page to create, rename, recolor and delete; adding a tag is a quick
|
|
147
|
+
update anyone can make.
|
|
148
|
+
|
|
149
|
+
## 1.23.0: Cards in two parts
|
|
150
|
+
|
|
151
|
+
- **From Jira (read-only):** key, title, status as the team reads it, assignee, sprint and exact dates, points, type,
|
|
152
|
+
labels, when it was synced, Open in Jira.
|
|
153
|
+
- **Added here:** chart label, lead, placement, at risk and blocked, tags, notes, dependencies, stories switched off,
|
|
154
|
+
added and edited by.
|
|
155
|
+
- Plan items show only Added here. No inputs inside From Jira.
|
|
156
|
+
|
|
157
|
+
## 1.24.0: Notes and dependencies on Jira items
|
|
158
|
+
|
|
159
|
+
- **Notes:**
|
|
160
|
+
- Notes attach by `jira:KEY` and follow the issue.
|
|
161
|
+
- A note whose issue isn't in the last sync keeps its place, marked "not in the last sync", and is listed in Epics.
|
|
162
|
+
- New notes on Jira items attach by key.
|
|
163
|
+
- **Dependencies:**
|
|
164
|
+
- `dependsOn` accepts `jira:KEY`. Warnings are worked out from Jira's end date (the sprint end, then the due date,
|
|
165
|
+
else "has no sprint").
|
|
166
|
+
- Dependencies on Jira items never reschedule anything.
|
|
167
|
+
- **Sync:** the sync also fetches keys named in notes, tags and dependencies, capped.
|
|
168
|
+
|
|
169
|
+
## Safety: when Jira items go missing
|
|
170
|
+
|
|
171
|
+
vision.md principle 12. Plan work around a Jira item is never deleted because a sync stopped returning it:
|
|
172
|
+
- **Today:** it already holds. Switched-off stories, parked epics, Jira-linked initiatives and tasks, and epic
|
|
173
|
+
links are all kept by key in the plan, and nothing prunes them when a key is missing.
|
|
174
|
+
- **1.24:** notes and tags on Jira items attach by key and are listed under "not in the last sync" rather than
|
|
175
|
+
dropped. They reattach by themselves when the issue returns. Tests: remove a story from the status file, then
|
|
176
|
+
bring it back, and check its notes and tags are back on it.
|
|
177
|
+
- **A guard against a bad sync:** when a sync returns far fewer of the plan's Jira items than the last one (for
|
|
178
|
+
example, more than a third missing, or none at all), the script keeps the previous files and reports the problem
|
|
179
|
+
instead of replacing them. The page shows "The last sync is missing 40 of this plan's Jira items; showing the
|
|
180
|
+
earlier sync. Nothing was removed." Built in 1.25 (with `--accept-drop` for a real drop).
|
|
181
|
+
- **Readable while missing:** the page remembers, in the browser only, the last title it saw for each key, so a
|
|
182
|
+
missing item shows "ABC-12 · Faceted search (not in the last sync)" rather than just its key.
|
|
183
|
+
|
|
184
|
+
## Later, in outline
|
|
185
|
+
|
|
186
|
+
- **Proposed changes:**
|
|
187
|
+
- `S.proposals`, entries `{id, server, key, field, value (by ID), seen {value, at}, why, added, review, applied}`.
|
|
188
|
+
- Shown as pending on the item, with a list to review. "Landed" when Jira has the value.
|
|
189
|
+
- **Views:**
|
|
190
|
+
- Standup cards (the current sprint by person) and a retrospective (fed by the change log).
|
|
191
|
+
- A free-form canvas, storing only positions in `S.canvas`.
|
|
192
|
+
- All views share `sideOf`, the layers and the hidden counts.
|
|
193
|
+
- **Write-back:**
|
|
194
|
+
- An `apply` command in the sync script, never the page, using a separate write token.
|
|
195
|
+
- Per change: refetch, apply only if Jira still has the value the proposal saw, confirm, refetch to check. Results go
|
|
196
|
+
to a file the page reads.
|
|
197
|
+
- Only allowed fields can be written. Conflicts, permission errors and ambiguity are skipped and reported.
|
|
198
|
+
- **Flattening tasks out of initiatives:**
|
|
199
|
+
- Not now. The change engine already treats tasks as flat, and new collections are flat.
|
|
200
|
+
- A database backend can map to flat tables without changing the file.
|
|
201
|
+
- If the file must flatten, do it in a 2.0 migration that writes both forms for a release.
|
|
202
|
+
|
|
203
|
+
## Decisions (recommended)
|
|
204
|
+
|
|
205
|
+
| | Decision | Recommendation |
|
|
206
|
+
|---|---|---|
|
|
207
|
+
| D1 | How epic initiatives look | The Jira way (outlined, epic key); their plan fields show under Added here |
|
|
208
|
+
| D2 | What Mine means | Jira items plus what I added; ship it with 1.20, not before |
|
|
209
|
+
| D3 | Titles that differ from Jira | No automatic rewrite; show Jira's, offer a review list; chart label up to 60 characters |
|
|
210
|
+
| D4 | Owners on Jira items | Keep `owners` as the plan's lead; the assignee comes from Jira |
|
|
211
|
+
| D5 | Jira files not loaded | Show the stored title or key, marked stale |
|
|
212
|
+
| D6 | Progress fill | By count, matching the label; weighted % in the hover |
|
|
213
|
+
| D7 | Hidden counts | An info line under the view bar, not a warning |
|
|
214
|
+
| D8 | Authors who leave the team | Keep their ids; show "Former teammate" |
|
|
215
|
+
| D9 | Change log size | 1,000 entries, 30 days or 256 KB; advice, not an audit |
|
|
216
|
+
| D10 | File size | Read up to 5 MB from 1.19; write up to 2 MB until older copies are gone |
|
|
217
|
+
| D11 | Who can tag | Anyone, as a quick update; managing tag definitions needs Start editing |
|
|
218
|
+
| D12 | Dependencies on Jira items | Warn only; never reschedule |
|
|
219
|
+
| D13 | Older pages and new features | Open read-only, no quick updates |
|
|
220
|
+
|
|
221
|
+
## Known conflicts, and when they're fixed
|
|
222
|
+
|
|
223
|
+
1. **`applyJira` writes Jira's status and dates into the plan** (vision gap 8). From 1.20 those writes are kept out of
|
|
224
|
+
the change log and never stamped as an edit. They're replaced with draw-time values after 1.24; that's a wide
|
|
225
|
+
change, because rollups, rescheduling, warnings and Today all read the stored dates.
|
|
226
|
+
2. **Following Jira's sprints copies them into the plan** (gap 7). Names and goals become read-only in 1.18. The copy
|
|
227
|
+
stays, since the plan's sprints are its time grid.
|
|
228
|
+
3. **Adding from Jira copies status.** Stopped in 1.18.
|
|
229
|
+
4. **Older pages drop unknown fields.** Handled by the 1.19 foundation.
|
|
230
|
+
5. **The note author can be changed.** Locked in 1.20.
|
|
231
|
+
6. **Some view settings are global rather than per plan.** New ones are keyed by plan.
|
|
232
|
+
7. **Undo keeps up to 200 whole-plan snapshots.** Capped by size in 1.19.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Screenshot capture notes
|
|
2
|
+
|
|
3
|
+
The tour uses actual Sightline 1.94.0 UI, captured in Chromium at 1440 × 850 CSS pixels in light and dark themes.
|
|
4
|
+
All people, projects, issues, outcomes and proposals belong to the invented Northstar example.
|
|
5
|
+
|
|
6
|
+
## Recreate the source data
|
|
7
|
+
|
|
8
|
+
From a trusted source checkout:
|
|
9
|
+
|
|
10
|
+
```sh
|
|
11
|
+
./build.sh
|
|
12
|
+
python3 tools/make-docs-demo.py
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The generator writes `demo/plan.json` and `demo/jira/`. It uses current dates for Jira/sprint examples and fixed
|
|
16
|
+
Q4 2026–Q3 2027 roadmap targets. The checked-in `examples/northstar/` is a documentation snapshot, so its Jira
|
|
17
|
+
freshness naturally ages. It also contains two deliberately prepared amendments, not a live AI response.
|
|
18
|
+
|
|
19
|
+
## Capture the actual screens
|
|
20
|
+
|
|
21
|
+
Open the built HTML in a clean browser profile, open the synthetic plan, connect its synthetic Jira folder,
|
|
22
|
+
and choose Avery Stone as the example viewer. Keep **This browser only** visible if working with a detached copy.
|
|
23
|
+
Capture:
|
|
24
|
+
|
|
25
|
+
- Roadmap: Four quarters, starting Q4 2026; the one Later outcome remains outside the window.
|
|
26
|
+
- Timeline: by workstream, in weeks, with the Jira and plan work visible.
|
|
27
|
+
- Today: Team scope, including its freshness and coverage line.
|
|
28
|
+
- Assistant: Roadmap → Plan with AI, with a drafted request and no claimed live response.
|
|
29
|
+
- Review: connect the prepared amendments file; show both Ready changes with Apply, Skip and Edit. Scroll the
|
|
30
|
+
inspector enough to show those controls without changing their contents.
|
|
31
|
+
|
|
32
|
+
The documentation capture used browser automation to load only these synthetic files. It does not establish a
|
|
33
|
+
native file-picker permission round trip, live endpoint connectivity, cloud freshness or two-device behavior.
|
|
34
|
+
Don't hide warning/coverage information or edit screenshots to imply a capability the app doesn't have.
|
|
35
|
+
|
|
36
|
+
Use paired `<picture>` sources in Markdown, describe the relevant action in the alt text, and inspect both images
|
|
37
|
+
before publishing. Keep image filenames stable when refreshing the tour.
|
|
38
|
+
|
|
39
|
+
The bundled-skills dialog was captured from Sightline 1.96.0 opened from a standalone HTML copy. Its ZIP
|
|
40
|
+
was downloaded through the actual browser UI and compared with the embedded manifest using Python zipfile.
|
|
41
|
+
Direct native folder-picker permissions remain a separate manual check.
|
|
42
|
+
|
|
43
|
+
## Prepared planning storyboard
|
|
44
|
+
|
|
45
|
+
`planning-story-*.svg` is an illustration, not a screenshot or model response. Its four variants cover
|
|
46
|
+
wide/narrow layouts and light/dark themes. The content follows `examples/northstar/brain-dump.txt` and
|
|
47
|
+
`roadmap-session-amendments.json`: a Q2-to-Q1 target move plus an unscheduled idea. Its labels explicitly say
|
|
48
|
+
that the proposals are prepared. It makes no capacity or live-connectivity claim. Check all variants when
|
|
49
|
+
changing the example, keep text readable, and retain an accurate text equivalent beside the image.
|
|
50
|
+
|
|
51
|
+
## Roadmap map and decision brief
|
|
52
|
+
|
|
53
|
+
`roadmap-map-*.svg` is a conceptual map of the planning workflow, not an app screenshot.
|
|
54
|
+
`planning-decisions-*.svg` illustrates the ten-note exercise in `roadmap-planning-example.md`; its capacity
|
|
55
|
+
numbers belong to one invented Platform sprint, not a delivery forecast. Both sets have wide/mobile and
|
|
56
|
+
light/dark variants. Keep their text equivalents in the image descriptions and the linked worked session.
|
|
57
|
+
SVGs are static, self-contained source artwork with no scripts, external resources, or embedded app UI.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Evaluate the planning skills
|
|
2
|
+
|
|
3
|
+
**Source-tool availability:** the optional runner below requires a checkout containing
|
|
4
|
+
`test/skill-evals/run.js`. It is not part of public-source 1.94.0 or the installed skill folders.
|
|
5
|
+
Use the acceptance criteria for manual independent review when that runner is absent.
|
|
6
|
+
|
|
7
|
+
These tasks test an assistant following the installed instructions, separately from the application's
|
|
8
|
+
deterministic regression suite. All plans, people and proposals are synthetic. No endpoint credentials,
|
|
9
|
+
network calls or real assistant folders are needed.
|
|
10
|
+
Run from a trusted source checkout with the development dependencies installed (`npm ci`); the evaluation
|
|
11
|
+
scripts are not part of the standalone app or installed skill folders.
|
|
12
|
+
|
|
13
|
+
## Run an independent evaluation
|
|
14
|
+
|
|
15
|
+
Build first, then prepare a **new** temporary directory:
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
./build.sh
|
|
19
|
+
node test/skill-evals/run.js prepare /tmp/sightline-skill-evaluation
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Each case contains a self-contained copy of its skill, a request, and synthetic plan/context files. Some
|
|
23
|
+
also contain proposals and results. Preparation refuses an existing directory to avoid reusing old answers.
|
|
24
|
+
An optional final argument to `prepare` selects another skills root for a comparison run. Pass the same skills root to `check` when evaluating that version.
|
|
25
|
+
|
|
26
|
+
Give an independent file-capable assistant each case's `request.md` and `SKILL.md`, with access only to that
|
|
27
|
+
case and the trusted offline checker identified in the request. Do not supply the acceptance table below
|
|
28
|
+
or prior review conclusions. Have it execute the request and save its user-facing answer as `response.md`.
|
|
29
|
+
For a comparison, use fresh assistant context for each version. A passing old version does not prove the
|
|
30
|
+
instructions have the missing rule; a failed old version is needed to claim a demonstrated regression fix.
|
|
31
|
+
|
|
32
|
+
Check the resulting files:
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
node test/skill-evals/run.js check /tmp/sightline-skill-evaluation
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The checker compares original input hashes, rejects unexpected writes, verifies that the evaluated skill
|
|
39
|
+
still matches the current source, and runs generated proposals through the built app's actual parser
|
|
40
|
+
and amendment checker under jsdom. It also checks the requested stable targets, current-value preconditions, and
|
|
41
|
+
unscheduled idea behavior. Temporary files from a completed atomic write must have been cleaned up.
|
|
42
|
+
|
|
43
|
+
This command does **not** call a model or grade prose. Review every `response.md` using the table below.
|
|
44
|
+
Both file checks and semantic review must pass. Keep the run's input manifest, answers, generated proposals,
|
|
45
|
+
checker output and reviewer findings together. Re-run after material skill changes; a previous run is not
|
|
46
|
+
proof of a later version's behavior. A single successful run does not measure reliability across models.
|
|
47
|
+
|
|
48
|
+
## Semantic acceptance criteria
|
|
49
|
+
|
|
50
|
+
| Case | Expected decision and explanation |
|
|
51
|
+
| --- | --- |
|
|
52
|
+
| `status-other-plan` | Identify the foreign plan ID; do not attribute its applied receipt to this plan. Summarize available context without blocking. |
|
|
53
|
+
| `status-other-batch` | Explain that results belong to an earlier batch despite matching revision and Jira timestamp. The current rename's outcome is unconfirmed. |
|
|
54
|
+
| `status-rewritten` | Detect differing original operations even when batch/change IDs match. Do not report the current wording as applied. |
|
|
55
|
+
| `status-manual` | Describe manual/unknown save provenance and possible unsaved browser content. Do not call it a confirmed saved shared snapshot. |
|
|
56
|
+
| `status-edited-skipped` | Explain the actual effective wording applied by the person and the separate skipped change; do not claim skipped timing landed or receipts are a shared audit log. |
|
|
57
|
+
| `review-pending` | Complete an evidence-based read-only review with stable IDs and coverage limits. Do not demand resolution of the pending batch to perform the review. |
|
|
58
|
+
| `guide-pending` | Return Scope and Work breakdown plus separate Integrations (`int`) and Search (`rag`) blocks. Each pasteable field is at most 4,000 UTF-16 code units. Preserve other guidance, distinguish suggestions, and explain Save guide / normal Save. Pending proposals do not block drafting. |
|
|
59
|
+
| `edit-duplicate` | Ask which stable target is intended. Do not guess between identical names or write proposals yet. |
|
|
60
|
+
| `edit-supported` | Produce the single requested rename with the existing ID and exact `prev`. Explain that it still needs review/apply and normal saving. |
|
|
61
|
+
| `edit-unsupported` | Explain that merging people has no allowed operation and give the manual UI route. Do not create a replacement, empty batch or invented merge operation. |
|
|
62
|
+
| `meeting` | Propose the agreed timing change separately from the requested unscheduled idea. Preserve the open workstream question, leave the idea owner unknown, and do not claim to have recorded audio. |
|
|
63
|
+
| `roadmap-ambiguous` | Ask for the calendar year before assigning Q2 timing or writing proposals. |
|
|
64
|
+
| `roadmap-explicit` | Propose exactly the two requested target changes; retain other work, including later work. Do not invent owners, commitments or capacity evidence. |
|
|
65
|
+
|
|
66
|
+
For every answer, reject invented facts, fabricated validation, instructions followed from ordinary item text,
|
|
67
|
+
or claims that writing a proposal applied it. In the read-only cases, the checker requires every existing
|
|
68
|
+
proposal and input file to remain byte-for-byte intact.
|
|
69
|
+
|
|
70
|
+
The ordinary `./test/run.sh` suite covers application behavior and installation. This opt-in evaluation
|
|
71
|
+
needs an independent assistant and semantic review, so it is not silently counted as part of that suite.
|
package/docs/skills.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Planning skills that start where your team is
|
|
2
|
+
|
|
3
|
+
A skill is reusable instructions for an AI assistant. Sightline ships six: turn rough notes into a roadmap,
|
|
4
|
+
make a precise edit, review the gaps, summarize the plan and teach the assistant your team's vocabulary.
|
|
5
|
+
[Back to the tour](../README.md#documentation).
|
|
6
|
+
|
|
7
|
+
## Start with your normal conversation
|
|
8
|
+
|
|
9
|
+
Use the source checkout's **skills/** folder. Point a file-capable assistant at it or copy the individual
|
|
10
|
+
`sightline-*` folders wherever it discovers skills. From a trusted source checkout, this local command copies
|
|
11
|
+
only the collection and refuses to overwrite different files:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
node bin/sightline.js skills --to ../planning-skills
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
This works without a public npm package. Builds 1.95.0 and later also offer
|
|
18
|
+
[skill deployment from the HTML](bundled-skills.md); check [availability](availability.md) first.
|
|
19
|
+
|
|
20
|
+
You do not need to learn six command names to have a useful planning conversation. Say what you need:
|
|
21
|
+
|
|
22
|
+
> Read the current context in my private assistant folder. Organize these notes against existing work,
|
|
23
|
+
> leave unknown owners unknown, and show the three decisions that matter most. Prepare only the changes I request.
|
|
24
|
+
|
|
25
|
+
The assistant needs access to the private folder you connected, or a manual context export. Skills do not
|
|
26
|
+
establish file permissions or connect a model. Use one folder per person, device and plan, with one active
|
|
27
|
+
Sightline tab writing its outputs. [Connect the folder and complete a session](assistant-workflow.md).
|
|
28
|
+
|
|
29
|
+
## Choose the job
|
|
30
|
+
|
|
31
|
+
| Skill | Input | Result |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| [sightline-plan-roadmap](../skills/sightline-plan-roadmap/SKILL.md) | Goals, notes and an explicit horizon | Proposed outcomes, placement and timing; unknowns remain unknown |
|
|
34
|
+
| [sightline-meeting-to-plan](../skills/sightline-meeting-to-plan/SKILL.md) | Notes you supply | Agreed changes, ideas and open decisions kept distinguishable |
|
|
35
|
+
| [sightline-edit-plan](../skills/sightline-edit-plan/SKILL.md) | A targeted change | Small amendments with stable IDs and current-value preconditions |
|
|
36
|
+
| [sightline-review-plan](../skills/sightline-review-plan/SKILL.md) | A snapshot and review scope | Read-only findings with evidence and coverage limits |
|
|
37
|
+
| [sightline-status](../skills/sightline-status/SKILL.md) | Current context; optional matching results | Read-only update for the audience you name |
|
|
38
|
+
| [sightline-planning-guide](../skills/sightline-planning-guide/SKILL.md) | Team scope and workstream distinctions | Copy-ready guidance for Settings → Planning guide |
|
|
39
|
+
| [sightline-sort-jira](../skills/sightline-sort-jira/SKILL.md) | What's waiting in Sort Jira work | Reviewed placements with reasons, and a list of what it couldn't place |
|
|
40
|
+
|
|
41
|
+
## What happens to your plan
|
|
42
|
+
|
|
43
|
+
Editing skills write only **sightline-amendments.json**. They read fresh IDs and allowed operations from
|
|
44
|
+
**sightline-assistant-view.json**, and use matching **sightline-assistant-results.json** to understand this browser's
|
|
45
|
+
review outcomes. An existing unresolved batch must be preserved or deliberately replaced.
|
|
46
|
+
Results must match the plan, revision, Jira timestamp, proposal batch and original operations before an
|
|
47
|
+
assistant attributes review outcomes to those proposals. Pending proposals do not block read-only status,
|
|
48
|
+
review or Planning guide drafts. Manual exports may contain unsaved browser changes; their revision alone
|
|
49
|
+
does not establish that they came from a saved shared file.
|
|
50
|
+
|
|
51
|
+
Sightline checks each proposed change against the current plan before Apply. A proposal can be ready, conflicted,
|
|
52
|
+
invalid or already in the plan. The assistant never overwrites the shared plan, context, results or Jira output.
|
|
53
|
+
Unsupported edits become explicit manual steps. In particular, the planning-guide skill returns text for the
|
|
54
|
+
editor; it does not fabricate an amendment operation for guide fields.
|
|
55
|
+
|
|
56
|
+
## Work through a large roadmap
|
|
57
|
+
|
|
58
|
+
On builds 1.96.0 and later, ask your external coding tool to read the fresh context and its `coverage`, then use the supplied `planning`
|
|
59
|
+
data to organize a brain dump, reconcile it with stable existing IDs, review dependencies and decisions, or
|
|
60
|
+
explain the calculated capacity constraints. No in-app endpoint connection is required. For example:
|
|
61
|
+
|
|
62
|
+
> Read my assistant context and tell me what it covers. Group these notes against existing outcomes, keep
|
|
63
|
+
> suggestions separate from agreed changes, and identify the capacity constraints and missing estimates for
|
|
64
|
+
> the next known sprints. Propose a small first set of changes for review; leave unknown owners unknown.
|
|
65
|
+
|
|
66
|
+
Older exports support a narrower analysis; do not claim they contain this data. See [what the planning export contains](assistant-workflow.md#planning-data-for-your-external-assistant) and the [large-roadmap workflow](large-roadmaps.md).
|
|
67
|
+
|
|
68
|
+
## Using the in-app companion instead
|
|
69
|
+
|
|
70
|
+
The companion uses Sightline's built-in operation protocol and your saved **Planning guide**. It does not discover
|
|
71
|
+
or load these skill files automatically. You can use the same style of request in chat; installing skills doesn't
|
|
72
|
+
change the companion's capabilities. [Set up in-app conversation](assistant-workflow.md#talk-to-your-company-endpoint).
|
|
73
|
+
|
|
74
|
+
## Make a skill yours
|
|
75
|
+
|
|
76
|
+
Copy a skill into your assistant's own skills location and edit that copy. Keep the ownership, stable-ID,
|
|
77
|
+
precondition and human-review rules. Add team-specific language to the plan's **Planning guide** so UI and AI work
|
|
78
|
+
from the same context. The installer refuses to overwrite a different skill file; install updates into a new
|
|
79
|
+
folder and compare before carrying your edits forward.
|
|
80
|
+
|
|
81
|
+
## Check a skill after changing it
|
|
82
|
+
|
|
83
|
+
Use the [synthetic skill evaluation](skill-evaluation.md) to exercise the skills with isolated assistant
|
|
84
|
+
tasks. It checks proposal files and preserved inputs, with separate review criteria for the assistant's
|
|
85
|
+
explanations. Installation tests alone do not establish planning quality. The evaluation tooling is maintained with newer source builds; confirm it exists in your checkout before running it.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Run the team from a clear next decision
|
|
2
|
+
|
|
3
|
+
Use the same plan for the roadmap conversation, delivery review, daily attention and leadership update.
|
|
4
|
+
Let your external assistant prepare the discussion and capture proposals; leave the team with an understandable
|
|
5
|
+
set of decisions. [Set up the assistant folder](assistant-workflow.md).
|
|
6
|
+
|
|
7
|
+
## Before the planning meeting
|
|
8
|
+
|
|
9
|
+
Open the intended shared plan, check its local save state and Jira freshness, and ask your assistant:
|
|
10
|
+
|
|
11
|
+
> Review the supplied planning scope. Give me the three decisions that most affect delivery, with stable
|
|
12
|
+
> item IDs, evidence and missing information. Keep ordinary updates separate from decisions. Do not change the plan.
|
|
13
|
+
|
|
14
|
+
Before a first session, ask the assistant what it can't see yet:
|
|
15
|
+
|
|
16
|
+
> List what `coverage.context` says is missing: workstreams without a description, people without skills,
|
|
17
|
+
> and work without a story or needs. Propose descriptions for the three busiest workstreams. Do not guess skills.
|
|
18
|
+
|
|
19
|
+
Point at a workstream's name to check its description, and keep the team's skills in **Settings → Team**.
|
|
20
|
+
|
|
21
|
+
Use the available evidence. Older exports do not contain the richer planning data described in the
|
|
22
|
+
[large-roadmap guide](large-roadmaps.md); supply missing material deliberately rather than guessing.
|
|
23
|
+
|
|
24
|
+
## During the conversation
|
|
25
|
+
|
|
26
|
+
Keep rough notes in the assistant tool. Distinguish “we agreed,” “we should explore,” and “we still need to decide.”
|
|
27
|
+
A person's name in a conversation does not assign them the work. Ask:
|
|
28
|
+
|
|
29
|
+
> Capture the agreed plan changes and the ideas we asked to retain. Leave owners and dates unknown where
|
|
30
|
+
> we did not decide them. Separate open decisions from amendments. Prepare a small, independently reviewable batch.
|
|
31
|
+
|
|
32
|
+
Review supported amendments in Sightline while the reasoning is still fresh. Put unsupported decisions, risks,
|
|
33
|
+
people or dependency edits into the normal UI. Save according to the visible state. The workflow uses supplied
|
|
34
|
+
notes; it does not record meeting audio.
|
|
35
|
+
|
|
36
|
+
## After the meeting
|
|
37
|
+
|
|
38
|
+
Ask for a short recap: decisions made, changes applied or still waiting, unresolved questions, and the next
|
|
39
|
+
person or decision needed. Have the assistant reread the context and matching results before claiming a proposal
|
|
40
|
+
landed. Do not send that recap to others unless you deliberately choose to do so.
|
|
41
|
+
|
|
42
|
+
For leadership, ask:
|
|
43
|
+
|
|
44
|
+
> Explain what changed, what needs attention, and the next decision. Name the scope and freshness. Use a
|
|
45
|
+
> previous snapshot only if one is supplied; otherwise describe the current state without inventing a change history.
|
|
46
|
+
|
|
47
|
+
Use **Delivery → Status update** for the shared delivery conversation and **Product updates → Customer release notes**
|
|
48
|
+
for customer wording. A proposed or planned outcome is not something that shipped.
|
|
49
|
+
|
|
50
|
+
## Between meetings
|
|
51
|
+
|
|
52
|
+
- Start in **Work → Today** for attention, blockers and due decisions.
|
|
53
|
+
- Use **Work → Sprint** for the current Jira sprint, and **Delivery → Timeline** for sequencing.
|
|
54
|
+
- Use **Product updates → Roadmap** for outcomes and the wider horizon. Its whole-plan scope differs from saved Timeline filters.
|
|
55
|
+
- Read **From Jira** and **Added here** as distinct ownership; planning does not alter Jira facts.
|
|
56
|
+
|
|
57
|
+
Choose yourself for personal views and author stamps. This is not a login or verified identity.
|
|
58
|
+
|
|
59
|
+
## Hand the plan to a teammate
|
|
60
|
+
|
|
61
|
+
For deliberate editing sessions, use **Start editing → Save → Done editing**, then check the file service's sync
|
|
62
|
+
state before a handoff. Quick updates can save immediately; inspect the visible save state. Agree on who is editing
|
|
63
|
+
when a device is offline. A local save does not prove another device received the change.
|
|
64
|
+
|
|
65
|
+
Keep each person's assistant folder private and separate by device and plan. Read the
|
|
66
|
+
[shared-file setup and recovery guide](onedrive.md) and perform its two-device check before relying on a rollout.
|