scrumrun 2.5.0 → 2.5.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 +6 -0
- package/README.md +1 -1
- package/lib/v2/conformance.js +13 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,12 @@ All notable changes follow Semantic Versioning.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## 2.5.1 - 2026-07-23
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- `doctor` no longer crashes on Runs with a null `task` reference. `conformance.js` now guards `repository.read("task", …)` and emits a specific `RUN_TASK_MISSING` finding when `record.task` is `null`, differentiating it from the "task exists but is invalid" case. Affects any project normalized with `sc plan run --normalize-legacy` where the original Run had an unparseable task ref.
|
|
12
|
+
|
|
7
13
|
## 2.5.0 - 2026-07-23
|
|
8
14
|
|
|
9
15
|
### Added
|
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.5.
|
|
7
|
+
**Package:** `2.5.1` · **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/v2/conformance.js
CHANGED
|
@@ -133,8 +133,19 @@ function auditProject(projectRoot) {
|
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
for (const run of records.run || []) {
|
|
136
|
-
|
|
137
|
-
if (run.record &&
|
|
136
|
+
let task = null;
|
|
137
|
+
if (run.record && run.record.task) {
|
|
138
|
+
try {
|
|
139
|
+
task = repository.read("task", run.record.task);
|
|
140
|
+
} catch (error) {
|
|
141
|
+
task = null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (run.record && !run.record.task) {
|
|
145
|
+
findings.push(finding("high", "RUN_TASK_MISSING", `${run.record.id} has no task reference (record.task is null).`, run.file));
|
|
146
|
+
} else if (run.record && (!task || task.errors.length)) {
|
|
147
|
+
findings.push(finding("high", "RUN_TASK_MISSING", `${run.record.id} references missing or invalid ${run.record.task}.`, run.file));
|
|
148
|
+
}
|
|
138
149
|
if (run.record && task && !task.errors.length && (run.record.sprint || null) !== (task.record.sprint || null)) {
|
|
139
150
|
findings.push(finding("high", "RUN_SPRINT_MISMATCH", `${run.record.id}.sprint must match ${task.record.id}.sprint.`, run.file));
|
|
140
151
|
}
|