scrumrun 2.6.5 → 2.6.6
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 +1 -1
- package/lib/commands/repair.js +23 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
ScrumRun gives an agent a small command surface and a precise project memory: what should be done, how each attempt happened, which decisions constrain the code, and why the architecture exists in its current form.
|
|
6
6
|
|
|
7
|
-
**Package:** `2.6.
|
|
7
|
+
**Package:** `2.6.6` · **Method target:** `2.0.0` · **Runtime:** Node.js `>=22.13.0` · **License:** MIT
|
|
8
8
|
|
|
9
9
|
**New here?** Read the [Quickstart](docs/QUICKSTART.md) — first Run in under 10 minutes, no `SPEC.md` reading required. Full docs map in [`docs/INDEX.md`](docs/INDEX.md).
|
|
10
10
|
|
package/lib/commands/repair.js
CHANGED
|
@@ -31,6 +31,8 @@ const RUN_FILE = /^RUN-\d{3,}\.md$/;
|
|
|
31
31
|
const FEAT_FILE = /^FEAT-\d{3,}\.md$/;
|
|
32
32
|
const SPRINT_FILE = /^SPRINT-\d{3,}\.md$/;
|
|
33
33
|
const MEMORY_FILE = /^(K|DEC|INS|DOS)-\d{3,}\.md$/;
|
|
34
|
+
const TASK_REF = /^TASK-\d{3,}$/;
|
|
35
|
+
const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
|
|
34
36
|
const FEAT_REF = /^FEAT-\d{3,}$/;
|
|
35
37
|
const SLUG_REF = /^[a-z0-9][a-z0-9-]*$/;
|
|
36
38
|
|
|
@@ -105,6 +107,19 @@ function planFile(file, kind, ctx) {
|
|
|
105
107
|
let header = split.header;
|
|
106
108
|
const changes = [];
|
|
107
109
|
|
|
110
|
+
const updated = extractField(header, "updated");
|
|
111
|
+
if (updated !== undefined && updated !== "null" && !ISO_DATE.test(updated)) {
|
|
112
|
+
const parsed = new Date(updated);
|
|
113
|
+
if (!isNaN(parsed.getTime())) {
|
|
114
|
+
const iso = parsed.toISOString().slice(0, 10);
|
|
115
|
+
const next = replaceField(header, "updated", iso);
|
|
116
|
+
if (next !== header) {
|
|
117
|
+
changes.push({ field: "updated", from: updated, to: iso });
|
|
118
|
+
header = next;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
108
123
|
const method = extractField(header, "method");
|
|
109
124
|
if (method === undefined) {
|
|
110
125
|
if (hasField(header, "id")) {
|
|
@@ -145,6 +160,14 @@ function planFile(file, kind, ctx) {
|
|
|
145
160
|
}
|
|
146
161
|
|
|
147
162
|
if (kind === "run") {
|
|
163
|
+
const taskRef = extractField(header, "task");
|
|
164
|
+
if (taskRef !== undefined && taskRef !== "null" && taskRef !== null && taskRef !== "" && !TASK_REF.test(taskRef)) {
|
|
165
|
+
const next = replaceField(header, "task", "null");
|
|
166
|
+
if (next !== header) {
|
|
167
|
+
changes.push({ field: "task", from: taskRef, to: "null" });
|
|
168
|
+
header = next;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
148
171
|
const status = extractField(header, "status");
|
|
149
172
|
if (status && RUN_STATUS_ALIAS[status]) {
|
|
150
173
|
const next = replaceField(header, "status", RUN_STATUS_ALIAS[status]);
|