runlist 0.98.0 → 0.98.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/README.md +8 -7
- package/package.json +1 -1
- package/plugins/runlist-codex/.codex-plugin/plugin.json +1 -1
- package/src/brief.mjs +1 -1
- package/src/show.mjs +19 -3
package/README.md
CHANGED
|
@@ -71,8 +71,8 @@ controls are experimental; live retrieval depends on a compatible external
|
|
|
71
71
|
provider. Local chat and push are deferred.
|
|
72
72
|
|
|
73
73
|
<!-- runlist:release:start -->
|
|
74
|
-
CLI and desktop release version: **0.98.
|
|
75
|
-
[Mac installer and release notes](https://github.com/reowens/runlist/releases/tag/desktop-v0.98.
|
|
74
|
+
CLI and desktop release version: **0.98.1**.
|
|
75
|
+
[Mac installer and release notes](https://github.com/reowens/runlist/releases/tag/desktop-v0.98.1).
|
|
76
76
|
Normal product releases publish both components; an installed Mac app is updated with rollback after it has quit.
|
|
77
77
|
<!-- runlist:release:end -->
|
|
78
78
|
|
|
@@ -105,11 +105,12 @@ Host source, cache and registry copies are labelled separately; a cache entry
|
|
|
105
105
|
alone does not prove which copy a running host has loaded. No package manager or
|
|
106
106
|
host command runs to produce the `doctor --project` installation report.
|
|
107
107
|
|
|
108
|
-
**0.
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
**0.98.0 is published and installed locally.** `runlist show` briefs a plan
|
|
109
|
+
(outline, open boxes and `--section` reads with line numbers), marks each
|
|
110
|
+
phase's tally and the active phase, and groups open boxes by phase;
|
|
111
|
+
`runlist use <doc>` briefs a doc over 500 lines. The agent workflow says to
|
|
112
|
+
read plans that way. The desktop app's own code is unchanged from 0.96.1; it
|
|
113
|
+
bundles the 0.98.0 engine. The Mac installer is signed, notarized and verified; installation
|
|
113
114
|
retained the previous app for rollback. Open it with `rl desktop`. See the
|
|
114
115
|
[release validation](desktop/VALIDATION.md#current-mac-release--2026-10-22)
|
|
115
116
|
for checks and evidence. Full-app dialog accessibility remains an open finding;
|
package/package.json
CHANGED
package/src/brief.mjs
CHANGED
|
@@ -16,7 +16,7 @@ export const LIMITS = {
|
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
// Several files at once is a survey; each one gets less.
|
|
19
|
-
export const SURVEY_LIMITS = { ...LIMITS, outline: 20, boxes: 10 };
|
|
19
|
+
export const SURVEY_LIMITS = { ...LIMITS, outline: 20, boxes: 10, listItems: 4 };
|
|
20
20
|
|
|
21
21
|
export const cut = (text, width = LIMITS.width) =>
|
|
22
22
|
text.length > width ? `${text.slice(0, width - 3)}...` : text;
|
package/src/show.mjs
CHANGED
|
@@ -79,6 +79,9 @@ export function showDoc(abs, config) {
|
|
|
79
79
|
};
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
// A long next step is cut in the brief, as the pickup card cuts it.
|
|
83
|
+
const NEXT_STEP_WIDTH = 300;
|
|
84
|
+
|
|
82
85
|
// Fields the text card prints. Everything else non-empty is named on one line
|
|
83
86
|
// so a reader knows it is there without printing the frontmatter.
|
|
84
87
|
const CARD_FIELDS = new Set(['title', 'status', 'next_step', 'blockers']);
|
|
@@ -228,12 +231,25 @@ export function runShow(args, config) {
|
|
|
228
231
|
cards.forEach((c, n) => {
|
|
229
232
|
if (n) process.stdout.write('\n');
|
|
230
233
|
const out = [`${c.title} (${c.status ?? 'no status'})`, c.path];
|
|
231
|
-
if (c.nextStep) out.push(`Next: ${c.nextStep}`);
|
|
234
|
+
if (c.nextStep) out.push(`Next: ${c.brief ? cut(c.nextStep, NEXT_STEP_WIDTH) : c.nextStep}`);
|
|
232
235
|
for (const b of c.blockers) out.push(`Blocker: ${b}`);
|
|
233
236
|
// The brief's open-box line carries the same count, read outside code fences.
|
|
234
237
|
if (c.checklist?.total && !c.brief) out.push(`Checklist: ${c.checklist.completed} of ${c.checklist.total} done`);
|
|
235
|
-
|
|
236
|
-
|
|
238
|
+
// With the brief, each related field and the body links show their first
|
|
239
|
+
// few entries and a count: a hub's dozens of related plans outweighed the
|
|
240
|
+
// brief itself. --card and --json list every one.
|
|
241
|
+
const cap = c.brief ? limits.listItems : Infinity;
|
|
242
|
+
const perField = new Map();
|
|
243
|
+
for (const r of c.related) {
|
|
244
|
+
const n = (perField.get(r.field) ?? 0) + 1;
|
|
245
|
+
perField.set(r.field, n);
|
|
246
|
+
if (n <= cap) out.push(`${r.field}: ${r.path ?? `${r.ref} (missing)`}${r.status ? ` (${r.status})` : ''}`);
|
|
247
|
+
}
|
|
248
|
+
for (const [field, n] of perField) if (n > cap) out.push(`${field}: +${n - cap} more (--card lists all)`);
|
|
249
|
+
if (c.links.length) {
|
|
250
|
+
const shown = c.links.slice(0, cap).map(l => l.path).join(', ');
|
|
251
|
+
out.push(`Linked from the body: ${shown}${c.links.length > cap ? ` (+${c.links.length - cap} more)` : ''}`);
|
|
252
|
+
}
|
|
237
253
|
if (c.brief) out.push(...renderBrief(c, c.brief));
|
|
238
254
|
process.stdout.write(out.join('\n') + '\n');
|
|
239
255
|
});
|