@troylar/flightdeck 2.1.0 → 2.2.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.
- package/CHANGELOG.md +27 -0
- package/README.md +7 -1
- package/bin/flightdeck.js +1 -1
- package/dist/flightdeck.html +1405 -155
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- Generated by build.py from src/releases.json. Edit that file, not this one. -->
|
|
4
4
|
|
|
5
|
+
## 2.2.0 · Oct 24, 2026
|
|
6
|
+
|
|
7
|
+
Practice a draft while you edit it.
|
|
8
|
+
|
|
9
|
+
### New
|
|
10
|
+
|
|
11
|
+
- **Practice: run the draft on screen while you edit it, recording nothing** (Editing). Practice in the draft editor runs what's on screen: check steps, pass gates, try sample details, and keep editing. A step you change says Try it again; a gate whose steps changed asks for a pass again; the rest keeps your place. It has its own Undo, and offers Stage it for a test run at the end. It stays in this browser tab, is never written to the team folder, and never counts as a run. *Where:* The draft editor, Practice
|
|
12
|
+
- **Practice evidence, Fill in, values steps set, and Run from here** (Editing). Checking a step that asks for evidence opens its boxes under the step, checked as a run checks them, or Check without it. Fill in works as in a run. A value a step sets flows to the steps after it, and they ask again if that step does. Run from here starts partway: the steps before it are assumed, and it asks for the sample details it needs. *Where:* The draft editor, Practice
|
|
13
|
+
|
|
14
|
+
## 2.1.1 · Oct 23, 2026
|
|
15
|
+
|
|
16
|
+
A planned run starts exactly once.
|
|
17
|
+
|
|
18
|
+
### Improved
|
|
19
|
+
|
|
20
|
+
- **A plan that was started or declined can't be started again after someone edits it** (Plans). A decision on any version of a plan holds it: it shows "Decided on an earlier version of this plan" with who decided what and when, and it can't be started, declined or switched. To run it again, make a new plan. Decisions that disagree are flagged across every version. Needs 2.1.1 on every computer. *Where:* Runs, a plan's page; reading for other apps (status changed); the folder checker
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- **A start that couldn't save its run can only be saved again, never started twice** (Plans). A start marks the plan started, naming its run, then saves the run. If the run doesn't save, that window offers Try again, which saves exactly that run, and only for the same person in the same folder. Each plan keeps its own Try again. Other windows see the plan started and its run missing in Folder health, even after an edit, and nothing starts it again. *Where:* A plan's start form; Folder health
|
|
25
|
+
- **A switch to another version is kept when the plan is then started** (Plans). A start or decline is written to its own file, <plan>.status-<window>-d.json, beside the switch. Flightdeck 2.1.0 reads it as before. *Where:* proposals/
|
|
26
|
+
- **A decision file that can't be used holds its plan everywhere** (Plans). Any file named for a decision on a plan (<plan>.status-…) that can't be read, was made by a newer Flightdeck, or isn't in its format holds that plan: it can't be started, declined or switched until the file reads, or is fixed or deleted. Reading for other apps says so in a new held field, and the folder checker agrees with the app. *Where:* A plan's page; Folder health; reading for other apps (held); the folder checker
|
|
27
|
+
- **The folder checker matches the app on plans** (Plans). It reads plan decisions, copies of a plan, file names in proposals/ and format names as the app does, so what your AI assistant reports about a plan matches what Flightdeck shows. *Where:* The folder checker
|
|
28
|
+
- **Folder health doesn't call a damaged file newer** (Files). Folder health names it on its own, says why it can't be read, and says to fix or delete it, as a plan's page does. *Where:* Folder health
|
|
29
|
+
- **A file in proposals/ that can't be read and names no plan is named** (Plans). Folder health names it on its own: its name doesn't say which plan it's for, so if it's a decision, that plan could be started again while it can't be read. Restore it from a backup, or delete it if it's a stray copy. *Where:* Folder health
|
|
30
|
+
- **A note that couldn't be read is named, not dropped without a word** (Runs). The run page and Folder health name the notes file and the line that couldn't be read. It may still be arriving; once it reads, the warning goes. The other notes show as usual. *Where:* The run page; Folder health
|
|
31
|
+
|
|
5
32
|
## 2.1.0 · Oct 22, 2026
|
|
6
33
|
|
|
7
34
|
Steps and phases that only some runs need.
|
package/README.md
CHANGED
|
@@ -570,7 +570,7 @@ A process is one page, with its checklist in the middle.
|
|
|
570
570
|
| **See its shape** | **Flight plan**: phases as waypoints, gates as checkpoints, tracks as parallel lanes, linked processes as connecting flights. From that version's runs and skills it adds typical times, autopilot (steps skills cover) and turbulence (steps that go off-script most). Each phase's steps open under it, or all at once with **Show all steps** and **Hide all steps**. Choose a phase to jump to it. |
|
|
571
571
|
| **Edit it** | **Edit** opens the draft on a page of its own, with the **Builder** or the **Markdown** beside a live check (what blocks publishing, and what's just a tip) and a preview. |
|
|
572
572
|
| **Look back** | The Versions panel shows the newest, with every version under **All versions**. An older version shows a way back to the current one and **Restore as draft**. |
|
|
573
|
-
| **Try it first** |
|
|
573
|
+
| **Try it first** | **Practice** in the editor runs the draft as you edit it, recording nothing. Then, under **All versions**, **Stage the draft for testing**, then **Start a test run** on the staged line. Real runs stay on the current default until someone chooses **Make v3 the default**. See [Staging and test runs](#staging-and-test-runs). |
|
|
574
574
|
| **See how runs go** | **How runs go**: typical time per phase, the steps that go off-script most, and who has held each role. |
|
|
575
575
|
| **Plan ahead** | **Plan a run**, next to **Start a run**: a name, the details you know, who does what and an optional time. |
|
|
576
576
|
|
|
@@ -599,6 +599,10 @@ A process is one page, with its checklist in the middle.
|
|
|
599
599
|
|
|
600
600
|
**New process** on the Processes page asks for a title; the file name is made from it and shown before you create it. The group, tags, run details, roles, owner and file name are under **More options**. Start blank, from Code check-in or Weekly review (publish v1 as it is, or open it in the editor), or copy a prompt for your AI assistant.
|
|
601
601
|
|
|
602
|
+
### Practice while you edit
|
|
603
|
+
|
|
604
|
+
**Practice** in the draft editor runs what's on screen without recording anything: check steps, pass gates, give run details sample values, and keep editing as you go. A step you change shows **Try it again**; a gate whose steps or details changed asks to be passed again. Evidence opens under the step as it would in a run (or **Check without it**), **Fill in** works as in a run, a step's `sets:` value flows to the steps after it, and **Run from here** starts partway, assuming the steps before it and asking for the sample details it needs. It's kept in this browser tab only, never written to the team folder, and never counted as a run. Links and commands you follow still act on real systems. When you get through the whole checklist, **Stage it for a test run**. See docs/design.md, section 34.
|
|
605
|
+
|
|
602
606
|
### Staging and test runs
|
|
603
607
|
|
|
604
608
|
A stage is a safe rehearsal: the next version, tried by test runs, while every real run stays on the current default.
|
|
@@ -933,6 +937,8 @@ Moving from 2.0 to 2.1: put 2.1 in the team folder and have everyone reopen it b
|
|
|
933
937
|
|
|
934
938
|
**Known issue:** an older copy shows a test run by name only and never changes it, but counts it in Home's running number, and How runs go and Compare versions list its stage as one more version (marked Clash once that stage is made the default). Updating to 2.1 fixes both.
|
|
935
939
|
|
|
940
|
+
**Fixed in 2.1.1:** 2.1.0 could start a planned run twice when the run saved but its decision couldn't be written (a retry started a second run), or when the copy of the plan that was started was deleted while another copy remained. 2.1.1 closes both once every computer has it; a 2.1.0 copy can still start a plan that was edited after someone started or declined it. If a plan already has two runs, keep one and cancel the other. **Known issue:** two computers starting the same plan at the same moment can both start it (Runs shows the decisions disagreeing; keep one run), and a renamed plan decision that can't be read holds no plan until it reads (Folder health names it). [Updating Flightdeck](https://github.com/troylar/flightdeck/blob/main/docs/updating.md#what-to-know-when-moving-to-21) has the details.
|
|
941
|
+
|
|
936
942
|
</details>
|
|
937
943
|
|
|
938
944
|
<details>
|
package/bin/flightdeck.js
CHANGED
|
@@ -865,7 +865,7 @@ async function readData(eng, adapter, req) {
|
|
|
865
865
|
/* Which version a plan starts on is unknown (null), not missing, when any of its process's versions couldn't be read or
|
|
866
866
|
verified: only problems with the versions themselves count (a run that doesn't match its version is named at the run). */
|
|
867
867
|
const probs = ledger(), unsure = (proc) => probs.some((x) => ['', 'publications', 'publications/'].indexOf(x.path) >= 0 || x.path === 'publications/' + proc || x.path.indexOf('publications/' + proc + '/') === 0);
|
|
868
|
-
return done(all, two ? A.runs2(list, plans, nameOf, d.processes, unsure, leftOut) : A.runs(list, plans, nameOf, d.processes, unsure), d.readAt);
|
|
868
|
+
return done(all, two ? A.runs2(list, plans, nameOf, d.processes, unsure, leftOut, d) : A.runs(list, plans, nameOf, d.processes, unsure, d), d.readAt);
|
|
869
869
|
}
|
|
870
870
|
/* followups: every run's follow-ups come from its run.json, so any run that couldn't be read may hide some. */
|
|
871
871
|
const items = F.list(runs.filter((r) => !req.proc || r.process === req.proc), d.fuDecisions).filter((x) => req.status !== 'open' || F.isOpen(x));
|