@troylar/flightdeck 2.1.0 → 2.1.1
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 +18 -0
- package/README.md +2 -0
- package/bin/flightdeck.js +1 -1
- package/dist/flightdeck.html +348 -109
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- Generated by build.py from src/releases.json. Edit that file, not this one. -->
|
|
4
4
|
|
|
5
|
+
## 2.1.1 · Oct 23, 2026
|
|
6
|
+
|
|
7
|
+
A planned run starts exactly once.
|
|
8
|
+
|
|
9
|
+
### Improved
|
|
10
|
+
|
|
11
|
+
- **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
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- **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
|
|
16
|
+
- **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/
|
|
17
|
+
- **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
|
|
18
|
+
- **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
|
|
19
|
+
- **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
|
|
20
|
+
- **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
|
|
21
|
+
- **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
|
|
22
|
+
|
|
5
23
|
## 2.1.0 · Oct 22, 2026
|
|
6
24
|
|
|
7
25
|
Steps and phases that only some runs need.
|
package/README.md
CHANGED
|
@@ -933,6 +933,8 @@ Moving from 2.0 to 2.1: put 2.1 in the team folder and have everyone reopen it b
|
|
|
933
933
|
|
|
934
934
|
**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
935
|
|
|
936
|
+
**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.
|
|
937
|
+
|
|
936
938
|
</details>
|
|
937
939
|
|
|
938
940
|
<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));
|