docguard-cli 0.41.0 → 0.41.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 +28 -0
- package/cli/commands/specs.mjs +15 -4
- package/extensions/spec-kit-docguard/extension.yml +1 -1
- package/extensions/spec-kit-docguard/skills/docguard-fix/SKILL.md +2 -2
- package/extensions/spec-kit-docguard/skills/docguard-guard/SKILL.md +2 -2
- package/extensions/spec-kit-docguard/skills/docguard-review/SKILL.md +2 -2
- package/extensions/spec-kit-docguard/skills/docguard-score/SKILL.md +2 -2
- package/extensions/spec-kit-docguard/skills/docguard-sync/SKILL.md +2 -2
- package/extensions/spec-kit-docguard/templates/github-workflows/docguard-autofix.yml +1 -1
- package/extensions/spec-kit-docguard/templates/github-workflows/docguard-guard.yml +1 -1
- package/package.json +1 -1
- package/templates/ci/github-actions.yml +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,34 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.41.1] - 2026-09-15
|
|
11
|
+
|
|
12
|
+
Automated weekly release — batches everything merged since `v0.41.0`.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Anchor lifecycle evidence to main (#400)
|
|
17
|
+
- Anchor R9 lifecycle evidence to main (#399)
|
|
18
|
+
- Fix living spec finalization and close R9 (#398)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Allow an evidence-complete living specification to finish without creating a
|
|
24
|
+
stale `tasks.md` solely for lifecycle bookkeeping, while continuing to reject
|
|
25
|
+
missing task ledgers for other persistence models and empty or incomplete
|
|
26
|
+
ledgers wherever they are declared. Released living contracts can record later
|
|
27
|
+
maintenance without downgrading their release state.
|
|
28
|
+
- Record the reviewed document-lifecycle maintenance outcome against its exact
|
|
29
|
+
source revision and qualified implementation/test evidence.
|
|
30
|
+
- Close roadmap milestone R9 after independently verifying every v0.41.0
|
|
31
|
+
publication target and record the adoption workflow's reviewed outcome without
|
|
32
|
+
creating a stale task ledger.
|
|
33
|
+
- Anchor the adoption workflow's final maintenance outcome to durable main commit
|
|
34
|
+
`2ff1baa` after the protected merge checks completed.
|
|
35
|
+
- Anchor the document-lifecycle maintenance outcome to durable main commit
|
|
36
|
+
`2a47de5`, completing the post-merge evidence chain.
|
|
37
|
+
|
|
10
38
|
## [0.41.0] - 2026-09-15
|
|
11
39
|
|
|
12
40
|
Automated weekly release — batches everything merged since `v0.40.5`.
|
package/cli/commands/specs.mjs
CHANGED
|
@@ -57,7 +57,10 @@ function archiveReadiness(spec, targetVerified = false) {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
function completionTransition(spec) {
|
|
60
|
-
if (spec?.reviewed.lifecycle.
|
|
60
|
+
if (spec?.reviewed.lifecycle.persistenceModel === 'living'
|
|
61
|
+
&& ['verified', 'released'].includes(spec.reviewed.lifecycle.delivery)) {
|
|
62
|
+
return `${spec.reviewed.lifecycle.delivery}→${spec.reviewed.lifecycle.delivery}`;
|
|
63
|
+
}
|
|
61
64
|
return spec?.reviewed.lifecycle.delivery === 'in_progress'
|
|
62
65
|
? 'in_progress→implemented→verified'
|
|
63
66
|
: 'implemented→verified';
|
|
@@ -77,14 +80,22 @@ export function planSpecCompletion(projectDir, config, flags, options = {}) {
|
|
|
77
80
|
|
|
78
81
|
let reconcile = null;
|
|
79
82
|
if (spec) {
|
|
80
|
-
const maintenance = spec.reviewed.lifecycle.delivery
|
|
83
|
+
const maintenance = ['verified', 'released'].includes(spec.reviewed.lifecycle.delivery)
|
|
81
84
|
&& spec.reviewed.lifecycle.persistenceModel === 'living';
|
|
82
85
|
if (spec.reviewed.lifecycle.approval !== 'approved') blockers.push({ code: 'SPC002', message: 'Only an approved spec can become verified.' });
|
|
83
86
|
if (!['in_progress', 'implemented'].includes(spec.reviewed.lifecycle.delivery) && !maintenance) {
|
|
84
87
|
blockers.push({ code: 'SPC002', message: `Expected delivery=in_progress, implemented, or verified with persistenceModel=living; found ${spec.reviewed.lifecycle.delivery}/${spec.reviewed.lifecycle.persistenceModel || 'unset'}.` });
|
|
85
88
|
}
|
|
86
89
|
const tasks = spec.observed.taskCompletion;
|
|
87
|
-
|
|
90
|
+
const hasTaskLedger = spec.observed.artifacts.some(artifact => /(?:^|\/)tasks\.md$/i.test(artifact.path));
|
|
91
|
+
if (hasTaskLedger && (!tasks.total || tasks.checked !== tasks.total)) {
|
|
92
|
+
blockers.push({ code: 'SPC003', message: `All declared tasks must be checked (${tasks.checked}/${tasks.total}).` });
|
|
93
|
+
} else if (!hasTaskLedger && spec.reviewed.lifecycle.persistenceModel !== 'living') {
|
|
94
|
+
blockers.push({
|
|
95
|
+
code: 'SPC003',
|
|
96
|
+
message: 'Completion requires a task ledger unless the approved spec is a living verification contract with qualified evidence for every requirement.',
|
|
97
|
+
});
|
|
98
|
+
}
|
|
88
99
|
if (spec.observed.implementationEvidence.length === 0) blockers.push({ code: 'SPC004', message: 'At least one qualified source implementation annotation is required.' });
|
|
89
100
|
if (spec.observed.testEvidence.length === 0) blockers.push({ code: 'SPC004', message: 'At least one qualified test annotation is required.' });
|
|
90
101
|
const covered = new Set([...spec.observed.implementationEvidence, ...spec.observed.testEvidence].map(item => item.requirementId));
|
|
@@ -162,7 +173,7 @@ export function completeSpec(projectDir, config, flags, options = {}) {
|
|
|
162
173
|
successor: flags.successor || null,
|
|
163
174
|
};
|
|
164
175
|
const specContent = appendImplementationOutcome(readFileSync(specPath, 'utf8'), outcome);
|
|
165
|
-
spec.reviewed.lifecycle.delivery = 'verified';
|
|
176
|
+
if (spec.reviewed.lifecycle.delivery !== 'released') spec.reviewed.lifecycle.delivery = 'verified';
|
|
166
177
|
spec.reviewed.reconciliation.lastReviewedRevision = plan.revision;
|
|
167
178
|
spec.reviewed.reconciliation.outcomes = [...spec.reviewed.reconciliation.outcomes, outcome].slice(-20);
|
|
168
179
|
const artifact = spec.observed.artifacts.find(item => item.path === spec.path);
|
|
@@ -3,7 +3,7 @@ schema_version: "1.0"
|
|
|
3
3
|
extension:
|
|
4
4
|
id: "docguard"
|
|
5
5
|
name: "DocGuard — CDD Enforcement"
|
|
6
|
-
version: "0.41.
|
|
6
|
+
version: "0.41.1"
|
|
7
7
|
description: "Documentation integrity for AI-assisted repositories: lifecycle registry, drift validation, traceability, safe archival, SARIF/JUnit, MCP, GitHub Actions, and Spec Kit hooks."
|
|
8
8
|
author: "Ricardo Accioly"
|
|
9
9
|
repository: "https://github.com/raccioly/docguard"
|
|
@@ -6,10 +6,10 @@ description: AI-driven documentation repair with structured research workflow, t
|
|
|
6
6
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
7
7
|
metadata:
|
|
8
8
|
author: docguard
|
|
9
|
-
version: 0.41.
|
|
9
|
+
version: 0.41.1
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-fix
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.41.
|
|
12
|
+
<!-- docguard:version: 0.41.1 -->
|
|
13
13
|
|
|
14
14
|
# DocGuard Fix Skill
|
|
15
15
|
|
|
@@ -7,10 +7,10 @@ description: Run DocGuard guard validation against Canonical-Driven Development
|
|
|
7
7
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
8
8
|
metadata:
|
|
9
9
|
author: docguard
|
|
10
|
-
version: 0.41.
|
|
10
|
+
version: 0.41.1
|
|
11
11
|
source: extensions/spec-kit-docguard/skills/docguard-guard
|
|
12
12
|
---
|
|
13
|
-
<!-- docguard:version: 0.41.
|
|
13
|
+
<!-- docguard:version: 0.41.1 -->
|
|
14
14
|
|
|
15
15
|
# DocGuard Guard Skill
|
|
16
16
|
|
|
@@ -6,10 +6,10 @@ description: Cross-document consistency analysis and quality assessment. Perform
|
|
|
6
6
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
7
7
|
metadata:
|
|
8
8
|
author: docguard
|
|
9
|
-
version: 0.41.
|
|
9
|
+
version: 0.41.1
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-review
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.41.
|
|
12
|
+
<!-- docguard:version: 0.41.1 -->
|
|
13
13
|
|
|
14
14
|
# DocGuard Review Skill
|
|
15
15
|
|
|
@@ -6,10 +6,10 @@ description: CDD maturity assessment with category-aware improvement roadmap. Ru
|
|
|
6
6
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
7
7
|
metadata:
|
|
8
8
|
author: docguard
|
|
9
|
-
version: 0.41.
|
|
9
|
+
version: 0.41.1
|
|
10
10
|
source: extensions/spec-kit-docguard/skills/docguard-score
|
|
11
11
|
---
|
|
12
|
-
<!-- docguard:version: 0.41.
|
|
12
|
+
<!-- docguard:version: 0.41.1 -->
|
|
13
13
|
|
|
14
14
|
# DocGuard Score Skill
|
|
15
15
|
|
|
@@ -4,10 +4,10 @@ description: Keep canonical documentation ALWAYS UP TO DATE. Refreshes code-trut
|
|
|
4
4
|
compatibility: Requires DocGuard CLI installed (npm i -g docguard-cli or npx docguard-cli)
|
|
5
5
|
metadata:
|
|
6
6
|
author: docguard
|
|
7
|
-
version: 0.41.
|
|
7
|
+
version: 0.41.1
|
|
8
8
|
source: extensions/spec-kit-docguard/skills/docguard-sync
|
|
9
9
|
---
|
|
10
|
-
<!-- docguard:version: 0.41.
|
|
10
|
+
<!-- docguard:version: 0.41.1 -->
|
|
11
11
|
|
|
12
12
|
# DocGuard Sync Skill
|
|
13
13
|
|
package/package.json
CHANGED