create-agdf 0.4.2 → 0.4.4

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.
@@ -1188,6 +1188,9 @@ function evaluateDoctor(targetDir) {
1188
1188
  }
1189
1189
 
1190
1190
  const runState = readRunState(targetDir);
1191
+ for (const finding of analyzeDurableGateArtefactConsistency(runState)) {
1192
+ addFinding(findings, finding.severity, finding.code, finding.message, finding.path, finding.next_step);
1193
+ }
1191
1194
  for (const finding of analyzeDeliveryMap(runState).findings) {
1192
1195
  addFinding(findings, finding.severity, finding.code, finding.message, finding.path, finding.next_step);
1193
1196
  }
@@ -1421,6 +1424,38 @@ function isDurableGateArtefactSatisfied(runState, gate) {
1421
1424
  return artefact.status === "approved";
1422
1425
  }
1423
1426
 
1427
+ function expectedDurableArtefactStatuses(gate) {
1428
+ return gate === "QA" ? ["pass", "passed"] : ["approved"];
1429
+ }
1430
+
1431
+ function describeDurableArtefactStatuses(gate) {
1432
+ return expectedDurableArtefactStatuses(gate).map((status) => `\`${status}\``).join(" or ");
1433
+ }
1434
+
1435
+ function analyzeDurableGateArtefactConsistency(runState) {
1436
+ const findings = [];
1437
+
1438
+ for (const gate of durableGateArtefacts) {
1439
+ if (gateApprovalStatus(runState, gate) !== "approved") continue;
1440
+
1441
+ const artefact = gateArtefactStatus(runState, gate);
1442
+ if (!artefact.path || isPlaceholderValue(artefact.path) || !artefact.status) continue;
1443
+
1444
+ const expectedStatuses = expectedDurableArtefactStatuses(gate);
1445
+ if (expectedStatuses.includes(artefact.status)) continue;
1446
+
1447
+ findings.push({
1448
+ severity: "revise",
1449
+ code: "AGDF_GATE_ARTEFACT_STATUS_INCONSISTENT",
1450
+ message: `${gate} approval is recorded, but the durable artefact row uses status \`${artefact.status}\`; expected ${describeDurableArtefactStatuses(gate)}.`,
1451
+ path: runState.path,
1452
+ next_step: `Update the ${gate} artefact row in AGDF_RUN.md to use the gate-specific durable status vocabulary.`,
1453
+ });
1454
+ }
1455
+
1456
+ return findings;
1457
+ }
1458
+
1424
1459
  function isInternalStepSatisfied(runState, step) {
1425
1460
  const artefact = runState.artefacts.get(step);
1426
1461
  if (!artefact) return false;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agdf",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "Codex-first workflow skills for gated, auditable AI-assisted software delivery.",
5
5
  "author": {
6
6
  "name": "AI-native Governance & Delivery Framework",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "id": "agdf",
4
- "version": "0.4.2",
4
+ "version": "0.4.4",
5
5
  "displayName": "AI Governance & Delivery Framework",
6
6
  "developerName": "AI-native Governance & Delivery Framework",
7
7
  "description": "Codex-first workflow skills for gated, auditable AI-assisted software delivery.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-agdf",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "Bootstrap AGDF repository-local plugin files, Copilot/OpenCode instructions, skills, control files and machine-readable checks.",
5
5
  "type": "module",
6
6
  "files": [