scrumrun 3.0.3 → 3.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/CORE.md +18 -26
- package/README.md +14 -18
- package/SPEC.md +6 -6
- package/bin/scrumrun.js +33 -7
- package/docs/COMMANDS.md +8 -8
- package/lib/commands/render.js +9 -8
- package/lib/v2/conformance.js +1 -1
- package/package.json +1 -1
- package/templates/project/AGENTS.md +13 -14
- package/templates/project-lean/AGENTS.md +7 -5
- package/templates/shared/skills/scrumrun/SKILL.md +16 -14
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,24 @@ All notable changes follow Semantic Versioning.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## 3.1.1 - 2026-08-31
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **No strict-Run commands in daily work.** Generated Core and agent instructions now explicitly prohibit `plan run --fail|--block|--retry|--finalize|--complete|--validate` and `plan task --start` in normal operation. A legacy Run incorrectly failed for administrative reasons stays as history; the Task's direct Markdown handoff records the real result.
|
|
12
|
+
|
|
13
|
+
## 3.1.0 - 2026-08-31
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- **Markdown-first daily workflow.** `.scrumrun/` is now the normal runtime: agents create and update Task handoffs directly instead of making CLI state transitions their prerequisite. Feature, Sprint, and Run are optional context/audit records; malformed or missing administrative metadata no longer blocks approved work.
|
|
18
|
+
- **CLI at the edges.** The CLI is now positioned for `init`, `update --project`, migration, repair, doctor, reports, and release checks. Strict ledger finalization and edit permits remain opt-in for teams that explicitly want them.
|
|
19
|
+
- **Existing projects.** `scrumrun update --project` refreshes packaged `core.md` and recognized generated `AGENTS.md`, preserving byte-exact local backups before replacement. Ordinary `update` no longer applies a migration implicitly; only `update --migrate` may do so.
|
|
20
|
+
|
|
21
|
+
### Safety
|
|
22
|
+
|
|
23
|
+
- Agents block only for active Guardrails, security/secret risks, destructive work without approval, or unmet required Acceptance Criteria. Missing Runs, legacy status vocabulary, stale derived views, and optional test coverage are documented warnings/follow-ups, not workflow blockers.
|
|
24
|
+
|
|
7
25
|
## 3.0.3 - 2026-08-31
|
|
8
26
|
|
|
9
27
|
### Fixed
|
package/CORE.md
CHANGED
|
@@ -84,9 +84,13 @@ AGENTS.md
|
|
|
84
84
|
|
|
85
85
|
**Before querying project state, read `.scrumrun/method.json`.** Its `paths` block is the authoritative index of every canonical location in this project. Navigate by that index; if a path is not declared there, it is not canonical truth. Directory listing and grep are fallbacks — never the first step. A ScrumRun-aware agent must never search for `goals/`, `backlog.md`, `sprint.md`, or any legacy layout: those are absent by design once migration completes and are surfaced only through `.scrumrun/.migration-backup/`.
|
|
86
86
|
|
|
87
|
-
**
|
|
87
|
+
**Markdown is the normal runtime.** After explicit approval, work directly in source files and relevant `.scrumrun/` Markdown. A Task is free to be created, refined, started, completed, and handed off in Markdown; a Run is optional audit context, never a state machine that can prevent daily work. Update the Task's scope, Acceptance Criteria, Technical Summary, and Follow-ups directly. Do not use `npx scrumrun@latest` or normal `scrumrun plan/run` commands during execution.
|
|
88
88
|
|
|
89
|
-
**
|
|
89
|
+
**The CLI is maintenance, not a work gate.** Use it for `init`, `update --project`, `migrate`, `repair`, `doctor`, reports, and release checks. Strict per-edit permits and ledger finalization remain available only when the owner asks for that audit level. Missing/invalid Runs, old status vocabulary, stale projections, and optional tests are warnings to reconcile in Markdown — never an automatic blocker.
|
|
90
|
+
|
|
91
|
+
**Block only on real constraints.** An agent must stop for an explicit active Guardrail, secret/security risk, destructive action without approval, or an unmet required Acceptance Criterion. It must not manufacture a failed/blocked Run because optional E2E coverage, an optional reviewer, or a non-required environment is unavailable; record meaningful gaps in `## Follow-ups` or a risk note.
|
|
92
|
+
|
|
93
|
+
**Normal operation never mutates Run state through the CLI.** Do not call `plan run --fail|--block|--retry|--finalize|--complete|--validate` or `plan task --start` in daily work. Those are owner-requested strict audit tools only. When a legacy Run already has the wrong administrative outcome, preserve it as history and correct the delivery record directly in the Task's Technical Summary and Follow-ups.
|
|
90
94
|
|
|
91
95
|
Canonical truth is Markdown. SQLite/cache data stores only rebuildable indexes, symbol projections, relations, and bounded context packages. Deleting `.cache/` must never delete authored truth.
|
|
92
96
|
|
|
@@ -164,34 +168,22 @@ Before approval, do not create canonical files, update status, edit application
|
|
|
164
168
|
|
|
165
169
|
## Execution lifecycle
|
|
166
170
|
|
|
167
|
-
Explicit approval
|
|
171
|
+
Explicit approval authorizes direct source and Markdown work. The normal lifecycle is a human-readable Task handoff:
|
|
168
172
|
|
|
169
173
|
```text
|
|
170
|
-
|
|
171
|
-
→ validating
|
|
172
|
-
→ learning
|
|
173
|
-
→ completed
|
|
174
|
-
↘ failed
|
|
175
|
-
↘ blocked
|
|
174
|
+
understand → approve → work → validate required criteria → hand off
|
|
176
175
|
```
|
|
177
176
|
|
|
178
177
|
Rules:
|
|
179
178
|
|
|
180
|
-
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
- configured reviews run before completion;
|
|
189
|
-
- every deferred policy result is persisted as a Run Guardrail obligation;
|
|
190
|
-
- before changing application/source files, issue a short-lived path-scoped mutation permit and record the verified before/after hashes in the Run;
|
|
191
|
-
- unrecorded workspace drift, policy drift, out-of-scope paths, unsafe symlinks, new secret-like content, or unresolved obligations block validation/completion;
|
|
192
|
-
- learning proposes memory candidates after validation and never auto-confirms AI inference;
|
|
193
|
-
- record a `## Technical Summary` at completion with `scrumrun plan run --complete --summary "…"` so the next agent inherits what was actually done;
|
|
194
|
-
- complete a Sprint only when all its included Tasks meet the Sprint exit gate;
|
|
179
|
+
- a Task carries the intended scope, `## Acceptance Criteria`, `## Technical Summary`, and relevant `## Follow-ups`;
|
|
180
|
+
- validation matches risk and acceptance criteria; tests, reviews, and environments are gates only when explicitly required by the owner, the Task, or an active Guardrail;
|
|
181
|
+
- direct Markdown workflow never blocks on Run linkage, status syntax, stale generated views, or missing optional coverage. If an optional check matters, record it as a follow-up/risk instead of fabricating failure;
|
|
182
|
+
- configured reviews run only when a Guardrail requires one;
|
|
183
|
+
- a structured Run may be created for audit/release work. When used, it follows `executing → validating → learning → completed|failed|blocked` and preserves prior attempts;
|
|
184
|
+
- strict permits, workspace-drift checks, and append-only Guardrail obligations apply only to that optional strict audit path;
|
|
185
|
+
- learning proposes memory candidates when work reveals reusable context and never auto-confirms AI inference;
|
|
186
|
+
- complete a Sprint only when its included Tasks meet its real exit gate;
|
|
195
187
|
- do not mark work complete merely because time or token budget ended.
|
|
196
188
|
|
|
197
189
|
Canonical mutations are schema-validated, lossless, and atomic. Preserve unknown fields, prose, and unrelated owner edits. A failed mutation must leave canonical state unchanged or recoverable.
|
|
@@ -200,7 +192,7 @@ Task/Run pair mutations use an ignored durable journal under `.scrumrun/.backup/
|
|
|
200
192
|
|
|
201
193
|
### Backlog and sequencing
|
|
202
194
|
|
|
203
|
-
Backlog is the queue of Tasks
|
|
195
|
+
Backlog is the queue of Tasks that are intentionally parked. The briefing may name the next one, but an explicit owner request/approval starts work; no CLI state transition is required.
|
|
204
196
|
|
|
205
197
|
### Agent identity and assignment
|
|
206
198
|
|
|
@@ -251,7 +243,7 @@ scrumrun migrate --to 2 --apply
|
|
|
251
243
|
scrumrun migrate --to 2 --rollback
|
|
252
244
|
```
|
|
253
245
|
|
|
254
|
-
- ordinary install/update never applies a migration;
|
|
246
|
+
- ordinary install/update never inspects or applies a migration; only explicit `update --migrate` performs and applies its verified migration plan;
|
|
255
247
|
- early v2 Run prose is also preflighted read-only and upgraded explicitly to ledger schema 1 with byte-exact backup and safe rollback;
|
|
256
248
|
- dry-run writes no project data;
|
|
257
249
|
- apply inventories source hashes, creates a byte-exact local backup, transforms in staging, validates, and activates by atomic directory swap;
|
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:** `3.
|
|
7
|
+
**Package:** `3.1.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
|
|
|
@@ -79,33 +79,29 @@ RECEIVED → CONTEXTUALIZING → POLICY → RISK → CLASSIFICATION
|
|
|
79
79
|
|
|
80
80
|
The agent may assert the classification (`--type fix|task|feature|docs|discovery`) and attach a short technical preview (`--preview "…"`), rendered with color in the terminal before any Task exists. Nothing canonical is persisted before approval.
|
|
81
81
|
|
|
82
|
-
Explicit approval
|
|
82
|
+
Explicit approval authorizes work. In 3.1, the daily runtime is the `.scrumrun/` folder: the agent creates or refines the relevant Task Markdown, works in code, and leaves a short handoff. Feature, Sprint, and Run are optional context, not prerequisites. A structured CLI audit path remains available when a team wants it.
|
|
83
83
|
|
|
84
84
|
```text
|
|
85
85
|
EXECUTING → VALIDATING → LEARNING → COMPLETED | FAILED | BLOCKED
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
Every
|
|
88
|
+
Every Task carries `## Acceptance Criteria` so "done" is defined before work begins. After approval, the agent works directly in code and Task Markdown, updating `## Technical Summary` and `## Follow-ups`. The normal close is simply the documented Task handoff — no CLI transition is required.
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
scrumrun plan run --finalize RUN-001
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
The checkpoint validates the complete delta, policy, protected paths, secret boundary, Task summary, and every applicable Guardrail before writing the Run ledger and synchronizing the Task. Failed retries remain available as separate Runs. Tests, reviews, and environments are a completion gate only when the owner, Acceptance Criteria, or an active Guardrail explicitly requires them; an optional missing E2E suite is a follow-up/risk, not a failed Task.
|
|
90
|
+
Guardrails still apply. An agent stops only for an explicit active Guardrail, a secret/security risk, destructive work without approval, or an unmet required Acceptance Criterion. Tests, reviews, and environments are gates only when the owner, Acceptance Criteria, or a Guardrail explicitly requires them. Optional missing E2E coverage is a follow-up/risk, not a failed Task.
|
|
95
91
|
|
|
96
|
-
|
|
92
|
+
Use the CLI at the edges, where its safety is valuable:
|
|
97
93
|
|
|
98
94
|
```bash
|
|
99
|
-
scrumrun
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
95
|
+
scrumrun init
|
|
96
|
+
scrumrun update --project
|
|
97
|
+
scrumrun doctor
|
|
98
|
+
scrumrun repair --recover-orphan-tasks --apply
|
|
99
|
+
scrumrun review release --run
|
|
104
100
|
```
|
|
105
101
|
|
|
106
|
-
|
|
102
|
+
`update --project` refreshes packaged `core.md` and recognized generated `AGENTS.md` with a local byte-exact backup before replacing them. The CLI can still generate/validate Task, Feature, Sprint, and Run records when desired, but it must never become a routine blocker.
|
|
107
103
|
|
|
108
|
-
Each Run contains a machine-validated event ledger.
|
|
104
|
+
Each optional structured Run contains a machine-validated event ledger. It remains useful for strict audit/release work, but daily history can stay as concise, human-readable Task handoff Markdown.
|
|
109
105
|
|
|
110
106
|
Linked Task/Run writes use a durable ignored transaction journal. Captured failures roll back immediately; interrupted operations are recovered byte-exactly on retry or through explicit `doctor --recover`. Read-only audit reports pending recovery and never repairs state silently.
|
|
111
107
|
|
|
@@ -163,10 +159,10 @@ It is progressive disclosure: the briefing is enough for most work; the agent fo
|
|
|
163
159
|
|
|
164
160
|
## Migrating an ongoing v1 project
|
|
165
161
|
|
|
166
|
-
Update the client integrations
|
|
162
|
+
Update the client integrations. For an existing project, refresh the Markdown-first guidance explicitly:
|
|
167
163
|
|
|
168
164
|
```bash
|
|
169
|
-
scrumrun update
|
|
165
|
+
scrumrun update --project
|
|
170
166
|
```
|
|
171
167
|
|
|
172
168
|
This shows the source inventory, proposed mappings, and blockers without changing project data. Apply only the verified plan with:
|
package/SPEC.md
CHANGED
|
@@ -200,15 +200,15 @@ RECEIVED
|
|
|
200
200
|
|
|
201
201
|
Everything through `AWAITING_APPROVAL` is read-only. It may exist in process memory or ignored cache only. A valid approval token binds the normalized request, policy result, classification, risk, issuance time, canonical context fingerprint, and complete workspace fingerprint. Canonical or source drift after planning invalidates approval.
|
|
202
202
|
|
|
203
|
-
Approval
|
|
203
|
+
Approval authorizes work after the read-only planning pass. In Markdown-first mode, a Task and optional Run may be created or updated directly; their absence or imperfect administrative metadata never prevents approved work. The CLI's atomic Task/Run creation remains an optional strict/audit path. Tests, reviews, and environments are completion gates only when explicitly required by the owner, the Task's Acceptance Criteria, or an active Guardrail; missing optional coverage is a documented follow-up/risk, not a failure by itself.
|
|
204
204
|
|
|
205
|
-
|
|
205
|
+
When a structured Run is explicitly chosen, it binds the exact Guardrail-policy fingerprint and workspace baseline. Strict audit then verifies the complete delta: policy freshness, read-only boundaries, symlink safety, scannability, newly introduced secret-like content, and evidence for every Guardrail. Strict teams may opt into short-lived, path-scoped permits and per-edit recording. This audit path is never a prerequisite for ordinary Markdown-first execution.
|
|
206
206
|
|
|
207
207
|
The agent may assert the classification explicitly (`--type fix|task|feature|docs|discovery`), overriding keyword inference with validation and a stable reason. It may attach a short technical preview (`--preview`), rendered in the terminal, bound into the approval token, and stored as `## Preview` on the approved Task. A Task declares its `## Acceptance Criteria` before execution; completion is measured against them, never against elapsed time or token budget.
|
|
208
208
|
|
|
209
|
-
Run transitions synchronously update the linked Task and append
|
|
209
|
+
When a structured Run is used, CLI transitions synchronously update the linked Task and append one event to its ledger. This is an optional audit path, not daily operational authority. Markdown-first completion records the Acceptance Criteria, Technical Summary, validation evidence, and Follow-ups directly on the Task. Multi-file CLI mutations use a durable local transaction journal; `doctor --recover` and `repair` remain explicit maintenance operations. Entering learning may extract candidates, but no administrative artifact failure blocks approved work.
|
|
210
210
|
|
|
211
|
-
Backlog is a queue view of
|
|
211
|
+
Backlog is a queue view of intentionally parked Tasks, ordered oldest-first by id. CLI `--next`/`--start` helpers may create a structured Run when wanted, but an explicit owner approval is the only daily-work start gate.
|
|
212
212
|
|
|
213
213
|
## 6. Policy and precedence
|
|
214
214
|
|
|
@@ -274,7 +274,7 @@ scrumrun migrate --to 2 --apply
|
|
|
274
274
|
scrumrun migrate --to 2 --rollback
|
|
275
275
|
```
|
|
276
276
|
|
|
277
|
-
`scrumrun update`
|
|
277
|
+
`scrumrun update` refreshes integrations only. `update --migrate` is the explicit request to inspect and apply the verified migration plan; migration is never implicit.
|
|
278
278
|
|
|
279
279
|
Inside an early v2 project, the same commands preflight and explicitly upgrade legacy Run prose to ledger schema 1. Deterministic transition chains are recovered; incomplete history becomes an evidenced snapshot. Apply keeps byte-exact ignored backups, verifies hashes, is idempotent, and supports rollback that refuses to erase later Run changes.
|
|
280
280
|
|
|
@@ -296,7 +296,7 @@ Legacy sprint entries become Tasks. History entries become Runs only with an evi
|
|
|
296
296
|
## 10. Normative invariants
|
|
297
297
|
|
|
298
298
|
- **I-01** No canonical artifact or code write occurs before explicit approval.
|
|
299
|
-
- **I-02**
|
|
299
|
+
- **I-02** The optional strict CLI approval path creates a linked Task/Run pair atomically or creates nothing; Markdown-first approval remains human-authorized and non-blocking.
|
|
300
300
|
- **I-03** Task is atomic work; Sprint only groups Tasks with real batch/timebox evidence.
|
|
301
301
|
- **I-04** Every retry creates a new Run and preserves earlier attempts.
|
|
302
302
|
- **I-05** Only declared, ordered, evidenced state transitions are accepted; Run event ids are unique and paired transitions are recoverable.
|
package/bin/scrumrun.js
CHANGED
|
@@ -58,7 +58,7 @@ Usage:
|
|
|
58
58
|
scrumrun <noun> <subject> <action> [args]
|
|
59
59
|
scrumrun sc <noun> <subject> <action> [args] # compatibility alias
|
|
60
60
|
scrumrun install [all|codex|opencode|claude] [--force]
|
|
61
|
-
scrumrun update [all|codex|opencode|claude] [--
|
|
61
|
+
scrumrun update [all|codex|opencode|claude] [--project] [--migrate] [--verbose]
|
|
62
62
|
scrumrun init [--local|--shared] [--lean] [--no-agent-hint] [--force]
|
|
63
63
|
scrumrun status
|
|
64
64
|
scrumrun core [--path|--prompt]
|
|
@@ -318,7 +318,7 @@ function migrationPreflightOnUpdate({ apply = false } = {}) {
|
|
|
318
318
|
return { status: "blocked" };
|
|
319
319
|
}
|
|
320
320
|
if (!apply) {
|
|
321
|
-
console.log("\nThe project remains unchanged.
|
|
321
|
+
console.log("\nThe project remains unchanged. Apply only with: scrumrun update --migrate");
|
|
322
322
|
return { status: "ready" };
|
|
323
323
|
}
|
|
324
324
|
const result = applyRunLedgerMigration(process.cwd());
|
|
@@ -344,7 +344,7 @@ function migrationPreflightOnUpdate({ apply = false } = {}) {
|
|
|
344
344
|
return { status: "blocked" };
|
|
345
345
|
}
|
|
346
346
|
if (!apply) {
|
|
347
|
-
console.log("\nThe project remains unchanged.
|
|
347
|
+
console.log("\nThe project remains unchanged. Apply only with: scrumrun update --migrate");
|
|
348
348
|
return { status: "ready" };
|
|
349
349
|
}
|
|
350
350
|
const result = applyMigration(process.cwd(), { plan: preview.plan });
|
|
@@ -359,14 +359,39 @@ function migrationPreflightOnUpdate({ apply = false } = {}) {
|
|
|
359
359
|
}
|
|
360
360
|
}
|
|
361
361
|
|
|
362
|
-
function
|
|
362
|
+
function refreshProjectGuidance(cwd = process.cwd()) {
|
|
363
|
+
if (!v2Project(cwd)) return [];
|
|
364
|
+
const vars = { PROJECT_NAME: path.basename(cwd), DATE: today() };
|
|
365
|
+
const renderTemplate = (source) => Object.entries(vars).reduce(
|
|
366
|
+
(content, [key, value]) => content.split(`{{${key}}}`).join(value),
|
|
367
|
+
fs.readFileSync(source, "utf8")
|
|
368
|
+
);
|
|
369
|
+
const results = [];
|
|
370
|
+
const coreFile = path.join(cwd, ".scrumrun", "core.md");
|
|
371
|
+
const coreResult = writeFile(coreFile, renderTemplate(path.join(root, "CORE.md")), { backup: true });
|
|
372
|
+
results.push({ status: coreResult.changed ? "updated" : "skipped", dest: coreFile, backup: coreResult.backup });
|
|
373
|
+
const agentsFile = path.join(cwd, "AGENTS.md");
|
|
374
|
+
if (!fs.existsSync(agentsFile) || looksLikeScrumRunAgents(agentsFile)) {
|
|
375
|
+
const current = readIfExists(agentsFile);
|
|
376
|
+
const leanProject = /lean read policy/i.test(current);
|
|
377
|
+
const template = path.join(templates, leanProject ? "project-lean" : "project", "AGENTS.md");
|
|
378
|
+
const agentResult = writeFile(agentsFile, renderTemplate(template), { backup: true });
|
|
379
|
+
results.push({ status: agentResult.changed ? "updated" : "skipped", dest: agentsFile, backup: agentResult.backup });
|
|
380
|
+
} else {
|
|
381
|
+
results.push({ status: "skipped", dest: `${agentsFile} (not recognized as ScrumRun-generated)` });
|
|
382
|
+
}
|
|
383
|
+
return results;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
function updateInstallation(target, { migrate = false, project = false, verbose = false } = {}) {
|
|
363
387
|
installVerbose = verbose;
|
|
364
388
|
installSummary.cleaned = 0;
|
|
365
389
|
installSummary.written = 0;
|
|
366
390
|
installSummary.skipped = 0;
|
|
367
391
|
installSummary.targets.length = 0;
|
|
368
|
-
const migration = migrationPreflightOnUpdate({ apply:
|
|
392
|
+
const migration = migrate ? migrationPreflightOnUpdate({ apply: true }) : { status: "skipped" };
|
|
369
393
|
install(target, true, { compatibility: true });
|
|
394
|
+
const projectResults = project ? refreshProjectGuidance() : [];
|
|
370
395
|
if (migrate && v2Project()) {
|
|
371
396
|
try {
|
|
372
397
|
refreshState(path.join(process.cwd(), ".scrumrun"));
|
|
@@ -377,7 +402,8 @@ function updateInstallation(target, { migrate = false, verbose = false } = {}) {
|
|
|
377
402
|
}
|
|
378
403
|
if (!verbose) {
|
|
379
404
|
const targetSummary = installSummary.targets.join(", ") || "no clients";
|
|
380
|
-
|
|
405
|
+
const projectSummary = projectResults.length ? ` Project guidance: ${projectResults.filter((item) => item.status === "updated").length} file(s) refreshed.` : "";
|
|
406
|
+
console.log(`Updated ${targetSummary} — ${installSummary.written} files written, ${installSummary.cleaned} legacy removed.${projectSummary} Run with --verbose to see file paths.`);
|
|
381
407
|
}
|
|
382
408
|
return migration;
|
|
383
409
|
}
|
|
@@ -2597,7 +2623,7 @@ if (!command || command === "--help" || command === "-h") {
|
|
|
2597
2623
|
console.log(`ScrumRun ${version}`);
|
|
2598
2624
|
} else if (command === "install" || command === "update") {
|
|
2599
2625
|
const target = ["all", "codex", "opencode", "claude"].includes(args[1]) ? args[1] : "all";
|
|
2600
|
-
if (command === "update") updateInstallation(target, { migrate:
|
|
2626
|
+
if (command === "update") updateInstallation(target, { migrate: args.includes("--migrate"), project: args.includes("--project"), verbose: args.includes("--verbose") });
|
|
2601
2627
|
else install(target, true, { compatibility: false });
|
|
2602
2628
|
} else if (command === "sc") {
|
|
2603
2629
|
runRoot(args.slice(1));
|
package/docs/COMMANDS.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ScrumRun 3.
|
|
1
|
+
# ScrumRun 3.1 Command Reference
|
|
2
2
|
|
|
3
3
|
The canonical grammar is:
|
|
4
4
|
|
|
@@ -6,7 +6,7 @@ The canonical grammar is:
|
|
|
6
6
|
scrumrun <noun> <subject> <action> [args]
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
Use
|
|
9
|
+
Use `.scrumrun/` Markdown for normal project work. `/sc` and the installed CLI are optional maintenance/release tools; do not use `npx scrumrun@latest` inside an agent's execution loop.
|
|
10
10
|
|
|
11
11
|
## Plan
|
|
12
12
|
|
|
@@ -27,9 +27,9 @@ scrumrun plan run --satisfy-guardrail RUN-NNN --guardrail GR-NNN [typed evidence
|
|
|
27
27
|
scrumrun plan challenge <question>
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
Normal execution is Markdown-first: after approval, work in code and the
|
|
30
|
+
Normal execution is Markdown-first: after approval, work in code and the relevant Task Markdown, then record the Technical Summary and any Follow-ups directly. A Run/`--finalize` checkpoint is optional strict audit, never a prerequisite. Mutation permits are available only for explicitly requested strict mode.
|
|
31
31
|
|
|
32
|
-
`--amend` is
|
|
32
|
+
`--amend` is an optional structured helper. The Markdown-first workflow may adjust Task/Feature/Sprint content directly, preserving a useful handoff. Use the CLI when atomic relation synchronization or machine audit is valuable; do not let status vocabulary or missing relations stop approved work.
|
|
33
33
|
|
|
34
34
|
Every new Task starts with a `## Validation Scope`: only checks explicitly required by the owner, Acceptance Criteria, or an active Guardrail block completion. Missing optional E2E, integration, or review coverage belongs in a follow-up/risk note; it must not be used to mark the Run failed.
|
|
35
35
|
|
|
@@ -37,8 +37,8 @@ Every new Task starts with a `## Validation Scope`: only checks explicitly requi
|
|
|
37
37
|
|
|
38
38
|
| Artifact | Canonical operation | Why |
|
|
39
39
|
| --- | --- | --- |
|
|
40
|
-
| Task, Feature, Sprint | `--add`, `--amend`, lifecycle
|
|
41
|
-
| Run | transitions
|
|
40
|
+
| Task, Feature, Sprint | Markdown directly; optional `--add`, `--amend`, lifecycle helpers | Planning truth can be refined at the speed of work. |
|
|
41
|
+
| Run | optional Markdown handoff; CLI transitions/`--finalize` for strict audit | Useful operational history, never an administrative work gate. |
|
|
42
42
|
| Review | `--run` / `--record` | A verdict is evidence, not editable prose. Record another review if it changes. |
|
|
43
43
|
| Knowledge, Decision, Insight, Dossier | create + lifecycle commands | Preserve evidence lineage; supersede/deprecate rather than rewrite confirmed truth. |
|
|
44
44
|
| Guardrail | `--add` / `--retire` | Policy history must remain auditable. |
|
|
@@ -80,14 +80,14 @@ scrumrun review release --run
|
|
|
80
80
|
```text
|
|
81
81
|
scrumrun config project --show|--language|--interaction|--approval|--quick-tasks
|
|
82
82
|
scrumrun config init --local|--shared|--lean|--no-agent-hint|--force
|
|
83
|
-
scrumrun config update [all|codex|opencode|claude] [--migrate]
|
|
83
|
+
scrumrun config update [all|codex|opencode|claude] [--project] [--migrate]
|
|
84
84
|
scrumrun config migrate --to 2 --dry-run|--apply|--rollback
|
|
85
85
|
scrumrun config doctor [all|codex|opencode|claude] [--strict] [--recover]
|
|
86
86
|
scrumrun config uninstall --force
|
|
87
87
|
scrumrun config help <topic>
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
Top-level CLI aliases (`init`, `update`, `migrate`, `doctor`, `uninstall`, `status`) remain available for shell automation.
|
|
90
|
+
Top-level CLI aliases (`init`, `update`, `migrate`, `doctor`, `uninstall`, `status`) remain available for shell automation. `update --project` refreshes the packaged Markdown-first Core and recognized generated agent instructions with local backup; ordinary update does not inspect migrations, while `--migrate` explicitly does so and applies the verified plan.
|
|
91
91
|
|
|
92
92
|
Run transitions accept typed evidence through `--command`, `--test`, `--file`, `--review`, `--decision`, `--insight`, `--risk`, or generic `--evidence kind:value`. `doctor --recover` is an explicit write that resolves only safe pending kernel transactions; doctor without it remains read-only.
|
|
93
93
|
|
package/lib/commands/render.js
CHANGED
|
@@ -19,7 +19,7 @@ Execute ScrumRun with this request: $ARGUMENTS
|
|
|
19
19
|
|
|
20
20
|
Use the installed \`scrumrun\` skill as the authoritative workflow. This prompt is the only canonical slash-command entry point.
|
|
21
21
|
|
|
22
|
-
If \`$ARGUMENTS\` is empty, show the five nouns below and the current project status; do not guess an action. Otherwise parse exactly \`<noun> <subject> <action> [args]
|
|
22
|
+
If \`$ARGUMENTS\` is empty, show the five nouns below and the current project status; do not guess an action. Otherwise parse exactly \`<noun> <subject> <action> [args]\`. \`/sc\` is a client shortcut retained for compatibility, never a reason to use \`npx\`. The CLI is optional maintenance; do not turn ordinary product work into a sequence of CLI calls.
|
|
23
23
|
|
|
24
24
|
## Grammar
|
|
25
25
|
|
|
@@ -27,16 +27,17 @@ ${grammarLines().join("\n")}
|
|
|
27
27
|
|
|
28
28
|
## Execution contract
|
|
29
29
|
|
|
30
|
-
- Natural-language product work
|
|
30
|
+
- Natural-language product work begins with a read-only understanding pass; do not invoke \`plan intake\` merely to satisfy procedure.
|
|
31
31
|
- Intake, contextualization, policy, risk, classification, and planning are read-only until explicit approval.
|
|
32
|
-
-
|
|
33
|
-
- Run
|
|
34
|
-
-
|
|
35
|
-
- Linked Task/Run writes use a durable recovery journal; audit reports pending recovery and never repairs without explicit authorization.
|
|
32
|
+
- After approval, work directly in source files and relevant \`.scrumrun/\` Markdown. Create/refine a Task, acceptance criteria, technical summary, and follow-ups directly. Feature/Sprint/Run are useful only when they add context.
|
|
33
|
+
- A Run is optional audit/handoff context, never a prerequisite for starting, amending, or completing a Task. Do not block on a missing Run, a legacy status, or stale generated state.
|
|
34
|
+
- The CLI can inspect/repair/report structured artifacts, but it does not own the daily workflow.
|
|
36
35
|
- \`guardrails.md\` is canonical project policy; \`golden-rules.md\` is v1 compatibility only.
|
|
37
36
|
- Evaluate active Guardrails as \`passed\`, \`blocked\`, or \`deferred\`; cite exact \`GR-NNN\` ids and keep deferred execution gates visible.
|
|
38
|
-
-
|
|
39
|
-
-
|
|
37
|
+
- Block only for an explicit Guardrail, secret/security risk, destructive action without approval, or an unmet required Acceptance Criterion. Optional unrun E2E/review coverage is a follow-up/risk, not a failed Run.
|
|
38
|
+
- Use the CLI only for \`init\`, \`update --project\`, \`migrate\`, \`repair\`, \`doctor\`, reports, or release checks. Do not invoke \`npx scrumrun@latest\` during execution.
|
|
39
|
+
- Never invoke \`plan run --fail|--block|--retry|--finalize|--complete|--validate\` or \`plan task --start\` during normal work. These optional strict-audit commands must not decide a Task outcome.
|
|
40
|
+
- Strict per-path Mutation Gateway permits and ledger finalization remain available only when the owner explicitly requests strict execution.
|
|
40
41
|
- Knowledge/Decision/Insight records require evidence; AI-proposed Insights remain \`candidate\` until confirmed.
|
|
41
42
|
- Never print vault values or write before approval.
|
|
42
43
|
- Unknown nouns, subjects, actions, ids, or ambiguous approval must produce a deterministic explanation, never a guessed mutation.
|
package/lib/v2/conformance.js
CHANGED
|
@@ -30,7 +30,7 @@ const INVARIANTS = Object.freeze([
|
|
|
30
30
|
{ id: "I-12", summary: "canonical schemas and identities are valid", tests: ["v2 artifact schemas round-trip", "malformed and mismatched artifacts are rejected"] },
|
|
31
31
|
{ id: "I-13", summary: "generated state exposes staleness", tests: ["generated state includes structured decisions", "approval rejects tampered or stale plans", "state staleness uses metadata fast path", "generated map status refuses stale projection"] },
|
|
32
32
|
{ id: "I-14", summary: "context and retrieval are bounded", tests: ["lean context stays within twenty-five percent", "semantic query caps relation output", "semantic index staleness uses metadata fast path"] },
|
|
33
|
-
{ id: "I-15", summary: "migration and ordinary update
|
|
33
|
+
{ id: "I-15", summary: "migration is explicit and ordinary update does not touch project migration state", tests: ["migration dry-run is read-only", "ordinary update refreshes integrations without inspecting an ongoing v1 project"] },
|
|
34
34
|
{ id: "I-16", summary: "migration is hashed, idempotent, and reversible", tests: ["migration apply is idempotent and rollback restores", "Run ledger migration failure and rollback restore"] },
|
|
35
35
|
{ id: "I-17", summary: "ambiguous migration is preserved and warned", tests: ["partial v1 layout is preserved"] },
|
|
36
36
|
{ id: "I-18", summary: "unsafe and partial writes fail safely", tests: ["canonical writes reject traversal and symlink paths", "repository refuses conflicting overwrite", "interrupted kernel transaction is recovered"] },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AGENTS.md - {{PROJECT_NAME}}
|
|
2
2
|
|
|
3
|
-
## ScrumRun 3.
|
|
3
|
+
## ScrumRun 3.1 — Markdown-first
|
|
4
4
|
|
|
5
5
|
This project uses ScrumRun. The method is mandatory; the direct CLI is `scrumrun <noun> <subject> <action>`. `/sc` is only an optional client shortcut.
|
|
6
6
|
|
|
@@ -11,23 +11,22 @@ For normal work, read:
|
|
|
11
11
|
3. the referenced Task, Sprint, Feature, Run, Memory, and Review artifacts relevant to the request (go deeper only when the briefing lacks what you need);
|
|
12
12
|
4. `.scrumrun/core.md` when the method contract or an exceptional transition is needed.
|
|
13
13
|
|
|
14
|
-
Natural-language product requests
|
|
14
|
+
Natural-language product requests begin with a read-only understanding pass. Before explicit approval, do not modify application code. After approval, operate directly in `.scrumrun/` Markdown and source files; normal work must not depend on a CLI state transition.
|
|
15
15
|
|
|
16
16
|
After approval:
|
|
17
17
|
|
|
18
|
-
- Task is the atomic work item; define its `## Acceptance Criteria`
|
|
18
|
+
- Task is the atomic work item; create or refine its Markdown directly, define its `## Acceptance Criteria`, and retain a short `## Technical Summary` / `## Follow-ups` handoff;
|
|
19
19
|
- validation is scoped: only a test/review/environment explicitly required by the owner, the Task's Acceptance Criteria, or an active Guardrail can block completion; a missing optional E2E suite is a documented follow-up/risk, never a reason to fail an otherwise accepted Task;
|
|
20
|
-
-
|
|
20
|
+
- Feature and Sprint remain useful organization, but are optional; create them only when they clarify real initiative or timebox context;
|
|
21
21
|
- Sprint is only a real timebox/batch of Tasks;
|
|
22
|
-
- Run is
|
|
23
|
-
- a
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
Never bypass guardrails or edit around the Mutation Gateway, overwrite owner work, treat generated state/cache as truth, auto-confirm AI knowledge, auto-migrate a v1 project, or print vault values.
|
|
22
|
+
- Run is an optional audit/handoff record, never an administrative prerequisite to start, amend, or complete a Task; preserve useful prior attempts but do not let missing/invalid Run metadata stop work;
|
|
23
|
+
- record a `## Technical Summary` at completion so the next agent inherits what was done; record optional missing coverage in `## Follow-ups`;
|
|
24
|
+
- work directly in code and Task Markdown after approval; do not call `npx scrumrun@latest` or normal `scrumrun plan/run` commands during execution;
|
|
25
|
+
- use the CLI only for `init`, `update --project`, `migrate`, `repair`, `doctor`, reports, or release checks. It audits/repairs the folder; it does not own the daily workflow;
|
|
26
|
+
- never invoke `plan run --fail`, `--block`, `--retry`, `--finalize`, `--complete`, `--validate`, or `plan task --start` in normal work. A failed legacy Run due to administrative state remains historical; write the corrected delivery outcome directly in the Task instead;
|
|
27
|
+
- learning proposes evidence-backed Knowledge, Decisions, or candidate Insights when the work reveals reusable context;
|
|
28
|
+
- guardrails remain mandatory: stop only for an explicit Guardrail, security/secret risk, destructive action without approval, or an unmet required Acceptance Criterion. Status vocabulary, missing Runs, unavailable optional tests, and stale generated state are warnings to reconcile, not blockers.
|
|
29
|
+
|
|
30
|
+
Never bypass guardrails, overwrite owner work, treat generated state/cache as truth, auto-confirm AI knowledge, auto-migrate a v1 project, or print vault values.
|
|
32
31
|
|
|
33
32
|
Never use `npx scrumrun@latest` in the normal work loop. If the installed CLI is unavailable, stop and report that blocker rather than substituting a network command.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AGENTS.md - {{PROJECT_NAME}}
|
|
2
2
|
|
|
3
|
-
## ScrumRun
|
|
3
|
+
## ScrumRun 3.1 lean read policy — Markdown-first
|
|
4
4
|
|
|
5
5
|
This project stores the complete ScrumRun v2 truth but uses a bounded default read path:
|
|
6
6
|
|
|
@@ -11,10 +11,12 @@ This project stores the complete ScrumRun v2 truth but uses a bounded default re
|
|
|
11
11
|
|
|
12
12
|
Do not scan every Task, Run, Sprint, Feature, or Memory file by default. Generated `state.md`, `map.md`, and `.cache/` guide retrieval but never override canonical Markdown.
|
|
13
13
|
|
|
14
|
-
Natural-language product work begins as read-only
|
|
14
|
+
Natural-language product work begins as a read-only understanding pass. Explicit approval authorizes direct work in source files and `.scrumrun/` Markdown. Define the Task's `## Acceptance Criteria` before execution and record a `## Technical Summary` at completion. A Run is optional handoff/audit context, not a state machine that may prevent starting, amending, or completing work. A Sprint exists only for a real batch/timebox.
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Guardrails are mandatory, but administrative state is not: block only for an explicit Guardrail, security/secret risk, destructive action without approval, or an unmet required Acceptance Criterion. Missing Runs, invalid legacy status vocabulary, stale generated views, and optional unrun tests are warnings to reconcile in Markdown. Record meaningful optional coverage gaps under `## Follow-ups`; they do not fail a delivered Task.
|
|
17
17
|
|
|
18
|
-
`.scrumrun/guardrails.md` is canonical policy. Never bypass it
|
|
18
|
+
`.scrumrun/guardrails.md` is canonical policy. Never bypass it, overwrite owner work, auto-confirm AI knowledge, auto-migrate v1 state, or print vault values.
|
|
19
19
|
|
|
20
|
-
Use
|
|
20
|
+
Use the installed CLI only for `init`, `update --project`, `migrate`, `repair`, `doctor`, reports, and release checks. For daily product work, follow `.scrumrun/core.md` and edit the relevant Markdown directly.
|
|
21
|
+
|
|
22
|
+
Never invoke `plan run --fail`, `--block`, `--retry`, `--finalize`, `--complete`, `--validate`, or `plan task --start` during normal work. If an old Run says failed for an administrative reason, leave it as history and record the actual delivered outcome in the Task's Technical Summary and Follow-ups.
|
|
@@ -36,15 +36,17 @@ Normal hot path:
|
|
|
36
36
|
5. follow the briefing's pointers to only the relevant canonical artifacts; go deeper only when the briefing lacks what you need (`## Where to look`, `scrumrun knowledge study "<topic>"`);
|
|
37
37
|
6. load `.scrumrun/core.md` when the method contract or an exceptional transition is needed.
|
|
38
38
|
|
|
39
|
-
**
|
|
39
|
+
**Markdown is the daily runtime.** After approval, work directly in source files and the relevant `.scrumrun/` Markdown. Create/refine the Task, its acceptance criteria, technical summary, follow-ups, and optional Run handoff without waiting for a CLI transition. Do not invoke `npx scrumrun@latest` or normal `scrumrun plan/run` commands during execution. The CLI is optional maintenance for `init`, `update --project`, `migrate`, `repair`, `doctor`, reports, and release checks.
|
|
40
40
|
|
|
41
|
-
**
|
|
41
|
+
**Do not block on administrative state.** A missing/invalid Run, legacy status vocabulary, stale generated view, or optional unrun test is a warning to reconcile in Markdown, not a reason to refuse productive work. Block only for an explicit Guardrail, security/secret risk, destructive action without approval, or an unmet required Acceptance Criterion. Optional E2E/integration/review coverage belongs in `## Follow-ups` or a risk note, never in a fabricated failed Run.
|
|
42
|
+
|
|
43
|
+
**Normal-operation command ban.** Do not invoke `scrumrun plan run --fail`, `--block`, `--retry`, `--finalize`, `--complete`, `--validate`, or `scrumrun plan task --start` during ordinary work. Those are optional strict-audit tools and cannot be used to decide whether a Task is delivered. If an old Run is already failed for an administrative reason, leave it as historical evidence, continue the Task directly, and write the corrected outcome in the Task's Technical Summary and Follow-ups.
|
|
42
44
|
|
|
43
45
|
Lean mode is a read policy, not an incomplete store. Generated files and `.scrumrun/.cache/` are never authoritative.
|
|
44
46
|
|
|
45
47
|
Generated state and semantic indexes use a metadata-watch fast path with a full content-hash fallback. Treat cache-schema mismatch as a request to rebuild the disposable projection, never as permission to rewrite canonical Markdown.
|
|
46
48
|
|
|
47
|
-
For a v1 project without canonical v2 artifacts,
|
|
49
|
+
For a v1 project without canonical v2 artifacts, recommend `scrumrun migrate --to 2 --dry-run`. `update` refreshes integrations only; only explicit `update --migrate` may inspect and apply migration.
|
|
48
50
|
|
|
49
51
|
## Domain model
|
|
50
52
|
|
|
@@ -55,7 +57,7 @@ For a v1 project without canonical v2 artifacts, use the dual-layout reader conc
|
|
|
55
57
|
- Memory — what was learned and why: `K-NNN`, `DEC-NNN`, `INS-NNN`, and dossiers.
|
|
56
58
|
- Review (`REV-NNN`) — evidence from a scoped quality gate.
|
|
57
59
|
|
|
58
|
-
Never create a Sprint merely because work exists. A standalone Task is valid.
|
|
60
|
+
Never create a Sprint merely because work exists. A standalone Task is valid. Strict audit retries preserve their prior Runs, but retries are never part of the normal workflow.
|
|
59
61
|
|
|
60
62
|
## Request pipeline
|
|
61
63
|
|
|
@@ -91,7 +93,7 @@ The approval token binds both canonical context and a complete workspace fingerp
|
|
|
91
93
|
|
|
92
94
|
## Approved execution
|
|
93
95
|
|
|
94
|
-
Explicit approval
|
|
96
|
+
Explicit approval authorizes the Task and source changes. A Run may be created as an audit/handoff record when useful; it never gates daily work. When used, its historical lifecycle is:
|
|
95
97
|
|
|
96
98
|
```text
|
|
97
99
|
executing → validating → learning → completed
|
|
@@ -103,19 +105,19 @@ During execution:
|
|
|
103
105
|
1. keep the change inside the approved Task scope;
|
|
104
106
|
2. preserve existing owner work and unrelated dirty files;
|
|
105
107
|
3. define or confirm the Task's `## Acceptance Criteria` before execution and check them off as evidence;
|
|
106
|
-
4. work normally: edit code and update the Task's `## Technical Summary
|
|
107
|
-
5. validate in proportion to risk and against the acceptance criteria. Tests, reviews, and environments are required only when the owner, Acceptance Criteria, or an active Guardrail says so. Do not fail or block an otherwise accepted Task merely because an optional E2E/integration suite does not exist or was not run;
|
|
108
|
-
6. run configured
|
|
109
|
-
7.
|
|
108
|
+
4. work normally: edit code and update the Task's `## Technical Summary`, `## Follow-ups`, and any Guardrail evidence required by an active rule;
|
|
109
|
+
5. validate in proportion to risk and against the acceptance criteria. Tests, reviews, and environments are required only when the owner, Acceptance Criteria, or an active Guardrail says so. Do not fail or block an otherwise accepted Task merely because an optional E2E/integration suite does not exist or was not run;
|
|
110
|
+
6. run a configured reviewer only when a Guardrail requires it;
|
|
111
|
+
7. complete the Task directly in Markdown after the required work is satisfied; use CLI release/doctor/repair commands only when their audit or recovery value is wanted;
|
|
110
112
|
8. use path-scoped Mutation Gateway commands only when the owner explicitly requests strict execution.
|
|
111
113
|
|
|
112
114
|
Never overwrite a prior attempt. Never mark work complete because time/token budget ended.
|
|
113
115
|
|
|
114
|
-
When
|
|
116
|
+
When work remains queued, the briefing may name the next backlog Task. The owner starts it through natural-language approval; do not call CLI start/retry commands to manufacture operational state. Each agent may record its identity in the Task handoff when useful.
|
|
115
117
|
|
|
116
|
-
Every
|
|
118
|
+
Every explicit Guardrail remains mandatory. In strict mode, the CLI final checkpoint fails closed on policy drift, protected-path changes, unsafe symlinks, unscannable content, newly introduced secret-like content, or missing Guardrail Evidence. The ignored permit cache is disposable; deleting it invalidates outstanding strict-mode permits and never creates authority.
|
|
117
119
|
|
|
118
|
-
|
|
120
|
+
Task Markdown is the daily operational handoff authority. A structured Run is optional strict audit history only. Early v2 prose Runs may be repaired/migrated explicitly, but their state never overrides the Task's direct handoff or blocks approved work.
|
|
119
121
|
|
|
120
122
|
Linked canonical writes use the ignored durable transaction journal. An interrupted prepared mutation rolls back before the next approved mutation; a committed journal is verified and finalized. Audit remains read-only and reports pending recovery. Use `doctor --recover` only when explicitly requested, and never overwrite bytes changed after interruption.
|
|
121
123
|
|
|
@@ -157,7 +159,7 @@ scrumrun migrate --to 2 --apply
|
|
|
157
159
|
scrumrun migrate --to 2 --rollback
|
|
158
160
|
```
|
|
159
161
|
|
|
160
|
-
Inside a v1 project, `scrumrun update
|
|
162
|
+
Inside a v1 project, `scrumrun update --migrate` explicitly inspects and approves application of the verified plan; ordinary update never performs migration work.
|
|
161
163
|
|
|
162
164
|
Dry-run must not write project data. Apply requires a hashed inventory, byte-exact local backup, staged validation, atomic switch, mapping report, and idempotent replay. Incomplete hybrid trees reuse existing evidenced v2 relations rather than duplicating them; early v2 prose Runs upgrade to ledger schema 1 only through the same explicit apply gate. Legacy-only aggregates leave the active tree but remain byte-exact in the ignored backup. Ambiguous records are preserved as warnings or evidenced snapshots, never guessed. Vault content remains local and is never rendered. Rollback must refuse if it would erase post-migration changes.
|
|
163
165
|
|
|
@@ -165,7 +167,7 @@ Dry-run must not write project data. Apply requires a hashed inventory, byte-exa
|
|
|
165
167
|
|
|
166
168
|
### `scrumrun plan`
|
|
167
169
|
|
|
168
|
-
- `task`: add/amend/list/show/run/audit/cancel/retry
|
|
170
|
+
- `task`: optional add/amend/list/show/run/audit/cancel/retry helpers. Daily Task planning and handoff are Markdown-first; use the helpers for reports/recovery when useful.
|
|
169
171
|
- `sprint`: add/amend/list/show/start/complete/block a real Task batch/timebox.
|
|
170
172
|
- `feature`: add/amend/list/show/activate/complete long-lived initiatives.
|
|
171
173
|
- `run`: list/show/render/stats/normalize-legacy/authorize-mutation/record-mutation/satisfy-guardrail/validate/learn/complete/resume/fail/block concrete Task attempts. `--complete` accepts `--summary "…"` to store a technical summary.
|