create-agdf 0.7.0 → 0.7.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/README.md CHANGED
@@ -1,8 +1,34 @@
1
1
  # create-agdf
2
2
 
3
- Bootstrap AGDF repository instructions and a machine-checkable control loop for one repository.
3
+ Bootstrap AGDF into the coding-agent surface and repository where work actually happens. It installs or generates the surface-specific guidance, skills and optional durable control files that help teams make scope, approvals, evidence and delivery state visible.
4
4
 
5
- ## Usage
5
+ AGDF is useful when AI-assisted work can affect an existing system and a team needs a traceable answer to: what is allowed next, who approved it and what evidence supports it. It is deliberately not a substitute for engineering judgement, security review, tests, product ownership or human acceptance. For the framework's fit, limits and examples, start with the [project overview](../README.md).
6
+
7
+ ## Quick start
8
+
9
+ If you use Codex, this is the recommended first installation:
10
+
11
+ ```bash
12
+ npx --yes @agdf/cli@latest codex
13
+ ```
14
+
15
+ Restart Codex, open a new task in the repository you want to work in, and describe the intended change. AGDF starts with the smallest permitted governance step; it does not make implementation automatic.
16
+
17
+ Use a different target when Codex is not your agent surface:
18
+
19
+ | Surface or goal | Start with | What it gives you |
20
+ |---|---|---|
21
+ | Claude Code | `npx --yes @agdf/cli@latest claude` | The AGDF plugin for Claude Code. |
22
+ | OpenCode, user-wide discovery | `npx --yes @agdf/cli@latest opencode` | The npm plugin and global native skills; repository governance remains opt-in. |
23
+ | OpenCode, one repository | `npx --yes @agdf/cli@latest opencode-repo` | Repository instructions, native skills, permissions and control templates. |
24
+ | GitHub Copilot | `npm create agdf@latest -- copilot` | Repository instructions, visible skills and control templates. |
25
+ | Durable control state in an existing setup | `npx --yes @agdf/cli@latest init` | Live `.agdf/control/` state when the repository explicitly needs it. |
26
+
27
+ For prerequisites, all surface-specific flows and operational boundaries, use the authoritative [installation guide](../INSTALL.md). Do not run `init` merely to ask a fresh question: an agent can first clarify the request and ask for `Approval: UR` when durable control state is needed.
28
+
29
+ ## Full command reference
30
+
31
+ The commands below are the complete package reference. The Quick Start above is the recommended entry point; these commands cover the remaining surfaces, repository-local variants and validation paths.
6
32
 
7
33
  Preferred long-term CLI shape:
8
34
 
@@ -203,6 +229,18 @@ npm run test:routing
203
229
 
204
230
  The routing test installs `both` into a temporary target repository and checks that plugin routing stays unprefixed while Copilot routing receives the configured `agdf-` prefix.
205
231
 
232
+ ## Project, contribution and support
233
+
234
+ This README is the package guide. Keep framework rationale, limits and examples in the [project overview](../README.md); keep target-specific installation in [INSTALL.md](../INSTALL.md); and use [RELEASE.md](../RELEASE.md) only when maintaining a published AGDF release.
235
+
236
+ Non-sensitive feedback, examples and contributions are welcome through [GitHub Issues](https://github.com/ArndtGold/ai-native-governance-delivery-framework/issues). To validate a local package change before proposing it, run:
237
+
238
+ ```bash
239
+ npm --prefix create-agdf run smoke-test
240
+ ```
241
+
242
+ The repository is licensed under [Apache-2.0](../LICENSE). No separate public `CONTRIBUTING.md`, `SECURITY.md` or private security-reporting channel is currently published. Do not treat a public issue as a private vulnerability disclosure.
243
+
206
244
  ## Publishing
207
245
 
208
246
  The repository publishes this package and the primary user-facing `@agdf/cli` wrapper as one coupled AGDF release.
@@ -3,7 +3,7 @@
3
3
  import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
4
4
  import { execFileSync } from "node:child_process";
5
5
  import { homedir } from "node:os";
6
- import { dirname, join, posix, resolve } from "node:path";
6
+ import { dirname, isAbsolute, join, posix, relative, resolve } from "node:path";
7
7
  import { fileURLToPath } from "node:url";
8
8
  import process from "node:process";
9
9
  import { searchInputFromControl } from "../lib/delivery-path-search/state-adapter.js";
@@ -48,7 +48,7 @@ const agdfFragmentPath = "AGENTS.agdf.md";
48
48
  const openCodeConfigFragmentPath = "opencode.agdf.json";
49
49
  const userGateOrder = ["UR", "PRD", "SD", "TP", "QA", "UAT"];
50
50
  const durableGateArtefacts = new Set(["UR", "PRD", "SD", "TP", "QA"]);
51
- const internalStepArtefacts = new Set(["Brownfield Review", "Brownfield Analysis", "CD+Tests", "CR"]);
51
+ const internalStepArtefacts = new Set(["Brownfield Review", "Verified Change", "Brownfield Analysis", "CD+Tests", "CR"]);
52
52
  const deliveryRelationships = [
53
53
  { from: "UR", relationship: "approved_by", to: "Approval: UR", requiredBy: "UR" },
54
54
  { from: "PRD", relationship: "derived_from", to: "UR", requiredBy: "PRD" },
@@ -61,6 +61,7 @@ const nextSkillByGate = {
61
61
  "Brownfield Review": "brownfield-analysis",
62
62
  "Mode/Slice Decision": "gate-check",
63
63
  "Quick Task Execution": "none",
64
+ "Verified Change Execution": "gate-check",
64
65
  PRD: "gate-check",
65
66
  SD: "gate-check",
66
67
  TP: "gate-check",
@@ -90,6 +91,7 @@ const codexPluginFiles = [
90
91
  join("plugins", "agdf", "control", "templates", "AGENT_QUALITY_CONTRACTS.json"),
91
92
  join("plugins", "agdf", "control", "templates", "artefacts", "UR.md"),
92
93
  join("plugins", "agdf", "control", "templates", "artefacts", "BROWNFIELD_REVIEW.md"),
94
+ join("plugins", "agdf", "control", "templates", "artefacts", "VERIFIED_CHANGE.md"),
93
95
  join("plugins", "agdf", "control", "templates", "artefacts", "PRD.md"),
94
96
  join("plugins", "agdf", "control", "templates", "artefacts", "SD.md"),
95
97
  join("plugins", "agdf", "control", "templates", "artefacts", "TP.md"),
@@ -114,6 +116,7 @@ const controlFiles = [
114
116
  join(".agdf", "control", "templates", "AGENT_QUALITY_CONTRACTS.json"),
115
117
  join(".agdf", "control", "templates", "artefacts", "UR.md"),
116
118
  join(".agdf", "control", "templates", "artefacts", "BROWNFIELD_REVIEW.md"),
119
+ join(".agdf", "control", "templates", "artefacts", "VERIFIED_CHANGE.md"),
117
120
  join(".agdf", "control", "templates", "artefacts", "PRD.md"),
118
121
  join(".agdf", "control", "templates", "artefacts", "SD.md"),
119
122
  join(".agdf", "control", "templates", "artefacts", "TP.md"),
@@ -145,6 +148,7 @@ const liveControlFiles = [
145
148
  const artefactTemplateFiles = [
146
149
  join(".agdf", "control", "templates", "artefacts", "UR.md"),
147
150
  join(".agdf", "control", "templates", "artefacts", "BROWNFIELD_REVIEW.md"),
151
+ join(".agdf", "control", "templates", "artefacts", "VERIFIED_CHANGE.md"),
148
152
  join(".agdf", "control", "templates", "artefacts", "PRD.md"),
149
153
  join(".agdf", "control", "templates", "artefacts", "SD.md"),
150
154
  join(".agdf", "control", "templates", "artefacts", "TP.md"),
@@ -1709,6 +1713,12 @@ function evaluateDoctor(targetDir, selection = {}) {
1709
1713
  }
1710
1714
 
1711
1715
  const runState = selectedRunState;
1716
+ if (modeSliceDecision(runState) === "verified_change") {
1717
+ const verifiedChange = evaluateVerifiedChange(targetDir, runState);
1718
+ for (const finding of verifiedChange.findings) {
1719
+ addFinding(findings, finding.severity, finding.code, finding.message, finding.path, finding.next_step);
1720
+ }
1721
+ }
1712
1722
  for (const finding of analyzeDurableGateArtefactConsistency(runState)) {
1713
1723
  addFinding(findings, finding.severity, finding.code, finding.message, finding.path, finding.next_step);
1714
1724
  }
@@ -1760,6 +1770,115 @@ function extractField(content, field) {
1760
1770
  return content.match(pattern)?.[1]?.trim() ?? "";
1761
1771
  }
1762
1772
 
1773
+ const verifiedChangeStatuses = new Set(["draft", "eligible", "executed", "escalated"]);
1774
+ const verifiedChangeEscalationTargets = new Set(["structured_slice", "structured_delivery"]);
1775
+
1776
+ function parseVerifiedChangePathList(value) {
1777
+ const cleaned = cleanStatusCell(value ?? "");
1778
+ if (!cleaned || cleaned === "none") return [];
1779
+ return cleaned.split(",").map((item) => item.trim()).filter(Boolean);
1780
+ }
1781
+
1782
+ function isSafeRepoRelativePath(value) {
1783
+ if (!value || value === "none" || value.startsWith("/") || value.includes("\\")) return false;
1784
+ const normalized = posix.normalize(value);
1785
+ return normalized !== "." && normalized !== ".." && !normalized.startsWith("../") && normalized === value;
1786
+ }
1787
+
1788
+ function gitPathList(targetDir, args) {
1789
+ try {
1790
+ return execFileSync("git", args, { cwd: targetDir, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] })
1791
+ .split("\n")
1792
+ .map((item) => item.trim())
1793
+ .filter(Boolean);
1794
+ } catch {
1795
+ return null;
1796
+ }
1797
+ }
1798
+
1799
+ function readVerifiedChangeRecord(targetDir, runState) {
1800
+ const artefact = runState.artefacts.get("Verified Change");
1801
+ if (!artefact?.path || isPlaceholderValue(artefact.path)) return { status: "missing", path: "", content: "" };
1802
+ if (!isSafeRepoRelativePath(artefact.path)) return { status: "invalid", path: artefact.path, content: "", error: "record_path_invalid" };
1803
+ const absolutePath = resolve(targetDir, artefact.path);
1804
+ const relativePath = relative(resolve(targetDir), absolutePath);
1805
+ if (isAbsolute(relativePath) || relativePath === ".." || relativePath.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) || !existsSync(absolutePath)) {
1806
+ return { status: "missing", path: artefact.path, content: "", error: "record_missing" };
1807
+ }
1808
+ return { status: "present", path: artefact.path, content: readFileSync(absolutePath, "utf8") };
1809
+ }
1810
+
1811
+ function evaluateVerifiedChange(targetDir, runState) {
1812
+ const record = readVerifiedChangeRecord(targetDir, runState);
1813
+ const findings = [];
1814
+ const add = (code, message, nextStep, severity = "revise") => findings.push({
1815
+ severity,
1816
+ code,
1817
+ message,
1818
+ path: record.path || runState.path,
1819
+ next_step: nextStep,
1820
+ });
1821
+
1822
+ if (record.status === "missing") {
1823
+ return { status: "missing", record, findings };
1824
+ }
1825
+ if (record.status === "invalid") {
1826
+ add("AGDF_VERIFIED_CHANGE_RECORD_PATH_INVALID", "Verified Change record path must be a repository-relative path inside the target repository.", "Link a stable repository-relative VERIFIED_CHANGE.md artefact from the selected run state.", "block");
1827
+ return { status: "invalid", record, findings };
1828
+ }
1829
+
1830
+ const status = cleanStatusCell(extractField(record.content, "status"));
1831
+ const relatedUr = cleanStatusCell(extractField(record.content, "related_ur"));
1832
+ const escalationTarget = cleanStatusCell(extractField(record.content, "escalation_target"));
1833
+ const canonicalOwner = cleanStatusCell(extractField(record.content, "canonical_owner"));
1834
+ const sourcePaths = parseVerifiedChangePathList(extractField(record.content, "allowed_source_paths"));
1835
+ const derivedPaths = parseVerifiedChangePathList(extractField(record.content, "allowed_derived_paths"));
1836
+ const prohibitedImpacts = cleanStatusCell(extractField(record.content, "prohibited_impacts"));
1837
+ const propagationCommand = extractField(record.content, "propagation_command");
1838
+ const validationCommands = extractField(record.content, "validation_commands");
1839
+ const baselineTracked = parseVerifiedChangePathList(extractField(record.content, "baseline_tracked_paths"));
1840
+ const baselineUntracked = parseVerifiedChangePathList(extractField(record.content, "baseline_untracked_paths"));
1841
+ const validationStatus = cleanStatusCell(extractField(record.content, "validation_status"));
1842
+ const propagationStatus = cleanStatusCell(extractField(record.content, "propagation_status"));
1843
+ const urArtefact = runState.artefacts.get("UR");
1844
+
1845
+ if (!verifiedChangeStatuses.has(status)) add("AGDF_VERIFIED_CHANGE_STATUS_INVALID", "Verified Change record must use status draft, eligible, executed or escalated.", "Set a supported record status or escalate to the declared structured target.");
1846
+ if (!isSafeRepoRelativePath(relatedUr) || relatedUr !== urArtefact?.path) add("AGDF_VERIFIED_CHANGE_RELATED_UR_INVALID", "Verified Change record must link exactly to the selected run's repository-relative UR artefact.", "Set related_ur to the selected run's durable UR artefact path.");
1847
+ if (!verifiedChangeEscalationTargets.has(escalationTarget)) add("AGDF_VERIFIED_CHANGE_ESCALATION_INVALID", "Verified Change record must declare structured_slice or structured_delivery as its escalation target.", "Record the Brownfield-selected structured escalation target.");
1848
+ if (!canonicalOwner || canonicalOwner.includes(",") || !isSafeRepoRelativePath(canonicalOwner)) add("AGDF_VERIFIED_CHANGE_OWNER_INVALID", "Verified Change requires exactly one repository-relative canonical_owner.", "Name one canonical owner path; otherwise escalate.");
1849
+ if (sourcePaths.length === 0 || sourcePaths.some((path) => !isSafeRepoRelativePath(path))) add("AGDF_VERIFIED_CHANGE_SOURCE_PATHS_INVALID", "Verified Change requires non-empty normalized allowed_source_paths.", "Declare a bounded comma-separated source path list; otherwise escalate.");
1850
+ if (derivedPaths.some((path) => !isSafeRepoRelativePath(path))) add("AGDF_VERIFIED_CHANGE_DERIVED_PATHS_INVALID", "Verified Change derived paths must be normalized repository-relative paths or none.", "Correct the derived path list or escalate.");
1851
+ if (prohibitedImpacts !== "none") add("AGDF_VERIFIED_CHANGE_IMPACTS_INVALID", "Verified Change must declare prohibited_impacts: none after checking gates, permissions, security, persistence, architecture, external API, CLI and release behavior.", "Use the structured path when any prohibited impact applies.");
1852
+ if (!validationCommands || validationCommands === "none") add("AGDF_VERIFIED_CHANGE_VALIDATION_MISSING", "Verified Change requires at least one deterministic validation command.", "Record a deterministic acceptance or consistency check, or escalate.");
1853
+ if (derivedPaths.length > 0 && (!propagationCommand || propagationCommand === "none")) add("AGDF_VERIFIED_CHANGE_PROPAGATION_MISSING", "Derived paths require a deterministic propagation command.", "Record the propagation command or escalate.");
1854
+ if (!extractField(record.content, "baseline_tracked_paths") || !extractField(record.content, "baseline_untracked_paths")) add("AGDF_VERIFIED_CHANGE_BASELINE_MISSING", "Verified Change requires both tracked and untracked baseline path fields, using none when empty.", "Capture the worktree baseline before marking the record eligible.");
1855
+
1856
+ const allowedPaths = new Set([...sourcePaths, ...derivedPaths]);
1857
+ const baselinePaths = new Set([...baselineTracked, ...baselineUntracked]);
1858
+ const dirtyCandidate = [...allowedPaths].find((path) => baselinePaths.has(path));
1859
+ if (dirtyCandidate) add("AGDF_VERIFIED_CHANGE_BASELINE_CANDIDATE_DIRTY", `Declared candidate path is already dirty at baseline: ${dirtyCandidate}.`, "Escalate or start from a clean candidate path; do not adopt pre-existing edits.", "block");
1860
+
1861
+ const currentTracked = gitPathList(targetDir, ["diff", "HEAD", "--name-only"]);
1862
+ const currentUntracked = gitPathList(targetDir, ["ls-files", "--others", "--exclude-standard"]);
1863
+ if (currentTracked === null || currentUntracked === null) {
1864
+ add("AGDF_VERIFIED_CHANGE_GIT_BASELINE_UNAVAILABLE", "Verified Change requires a readable Git worktree for scoped baseline validation.", "Use the structured path or restore Git worktree access.", "block");
1865
+ } else {
1866
+ const currentPaths = new Set([...currentTracked, ...currentUntracked]);
1867
+ const permittedControlPaths = new Set([record.path, runState.path, ".agdf/control/MASTER_BACKLOG.md"]);
1868
+ const unexpected = [...currentPaths].filter((path) => !baselinePaths.has(path) && !allowedPaths.has(path) && !permittedControlPaths.has(path));
1869
+ if (unexpected.length > 0) add("AGDF_VERIFIED_CHANGE_SCOPE_ESCAPE", `Verified Change introduced unlisted path(s): ${unexpected.join(", ")}.`, "Mark the record escalated and continue at the declared structured target.", "block");
1870
+ }
1871
+
1872
+ if (status === "executed") {
1873
+ if (validationStatus !== "pass") add("AGDF_VERIFIED_CHANGE_VALIDATION_EVIDENCE_MISSING", "Executed Verified Change requires validation_status: pass.", "Record passing deterministic validation evidence or escalate.");
1874
+ if (derivedPaths.length > 0 && propagationStatus !== "pass") add("AGDF_VERIFIED_CHANGE_PROPAGATION_EVIDENCE_MISSING", "Executed Verified Change with derived paths requires propagation_status: pass.", "Record successful propagation evidence or escalate.");
1875
+ }
1876
+
1877
+ if (status === "escalated") return { status: "escalated", record, escalation_target: escalationTarget, findings };
1878
+ if (findings.length > 0) return { status: "invalid", record, escalation_target: escalationTarget, findings };
1879
+ return { status, record, escalation_target: escalationTarget, findings };
1880
+ }
1881
+
1763
1882
  function cleanStatusCell(value) {
1764
1883
  return value.replace(/^`|`$/g, "").trim();
1765
1884
  }
@@ -2117,7 +2236,7 @@ function isGateSatisfied(runState, gate) {
2117
2236
  return isDurableGateArtefactSatisfied(runState, gate);
2118
2237
  }
2119
2238
 
2120
- function transitionDecisionForRunState(runState) {
2239
+ function transitionDecisionForRunState(runState, verifiedChange = null) {
2121
2240
  if (gateApprovalStatus(runState, "UR") === "approved" && !isGateSatisfied(runState, "UR")) return durableArtefactBlock("UR", "PRD");
2122
2241
 
2123
2242
  if (!isGateSatisfied(runState, "UR")) {
@@ -2159,7 +2278,7 @@ function transitionDecisionForRunState(runState) {
2159
2278
  blocking_reason: "none",
2160
2279
  missing_approval: "none",
2161
2280
  allowed: [
2162
- "decide whether the approved UR is quick_task, structured_slice, structured_delivery or block",
2281
+ "decide whether the approved UR is quick_task, verified_change, structured_slice, structured_delivery or block",
2163
2282
  "record scope reason, evidence and required next gate depth in the selected RUN_STATE.md",
2164
2283
  "choose the next required gate depth before drafting PRD or implementing",
2165
2284
  ],
@@ -2192,6 +2311,53 @@ function transitionDecisionForRunState(runState) {
2192
2311
  };
2193
2312
  }
2194
2313
 
2314
+ if (modeDecision === "verified_change") {
2315
+ const state = verifiedChange?.status ?? "missing";
2316
+ const escalationTarget = verifiedChange?.escalation_target ?? "structured_slice";
2317
+ if (state === "executed") {
2318
+ return {
2319
+ status: "open",
2320
+ current_gate: "OR",
2321
+ blocking_reason: "none",
2322
+ missing_approval: "none",
2323
+ allowed: ["use the Verified Change mini-closeout", "offer delivery closeout when requested"],
2324
+ forbidden: ["create PRD, SD, TP, QA or UAT by ritual", "commit, push, open PR or release automatically"],
2325
+ next_allowed_action: "Close the executed Verified Change with its compact record and offer delivery closeout; do not perform VCS actions automatically.",
2326
+ };
2327
+ }
2328
+ if (state === "escalated" || (state === "invalid" && verifiedChangeEscalationTargets.has(escalationTarget))) {
2329
+ return {
2330
+ status: "open",
2331
+ current_gate: "PRD",
2332
+ blocking_reason: state === "escalated" ? "verified_change_escalated" : "verified_change_invalid_escalated",
2333
+ missing_approval: "Approval: PRD",
2334
+ allowed: ["draft the structured PRD required by the declared escalation target", "retain the Verified Change escalation evidence"],
2335
+ forbidden: ["implement through Verified Change", "create SD or TP before PRD approval", "claim QA or release readiness"],
2336
+ next_allowed_action: `Proceed as ${escalationTarget}: draft the required PRD and request exact approval: Approval: PRD.`,
2337
+ };
2338
+ }
2339
+ if (state === "eligible") {
2340
+ return {
2341
+ status: "open",
2342
+ current_gate: "Verified Change Execution",
2343
+ blocking_reason: "none",
2344
+ missing_approval: "none",
2345
+ allowed: ["implement only declared source and derived paths", "run declared propagation and validation commands", "record execution evidence and mini-closeout"],
2346
+ forbidden: ["touch unlisted paths", "add prohibited impacts", "claim QA, UAT or release readiness"],
2347
+ next_allowed_action: "Implement only the eligible Verified Change record scope, then record passing propagation and validation evidence.",
2348
+ };
2349
+ }
2350
+ return {
2351
+ status: state === "missing" || state === "draft" ? "open" : "blocked",
2352
+ current_gate: "Verified Change Execution",
2353
+ blocking_reason: state === "invalid" ? "verified_change_invalid" : "verified_change_record_required",
2354
+ missing_approval: "none",
2355
+ allowed: ["create or refine the compact Verified Change record", "capture baseline paths", "prove fail-closed eligibility with doctor and gate-check"],
2356
+ forbidden: ["implement candidate changes", "claim validation, QA, UAT or release readiness"],
2357
+ next_allowed_action: "Create or repair VERIFIED_CHANGE.md, capture the baseline and satisfy every eligibility check before implementation; escalate when any condition cannot be proven.",
2358
+ };
2359
+ }
2360
+
2195
2361
  return {
2196
2362
  status: "open",
2197
2363
  current_gate: "PRD",
@@ -2310,10 +2476,16 @@ function transitionDecisionForRunState(runState) {
2310
2476
  function evaluateGateCheck(targetDir, selection = {}) {
2311
2477
  const doctorReport = evaluateDoctor(targetDir, selection);
2312
2478
  const runState = readRunState(targetDir, selection);
2313
- const transitionDecision = transitionDecisionForRunState(runState);
2479
+ const verifiedChange = modeSliceDecision(runState) === "verified_change"
2480
+ ? evaluateVerifiedChange(targetDir, runState)
2481
+ : null;
2482
+ const transitionDecision = transitionDecisionForRunState(runState, verifiedChange);
2314
2483
  const deliveryMap = analyzeDeliveryMap(runState);
2315
2484
  const doctorBlocker = doctorReport.findings.find((finding) => finding.severity === "block");
2316
2485
  const doctorRevise = doctorReport.findings.find((finding) => finding.severity === "revise");
2486
+ const routesInvalidVerifiedChange = modeSliceDecision(runState) === "verified_change"
2487
+ && verifiedChange?.status === "invalid"
2488
+ && verifiedChangeEscalationTargets.has(verifiedChange.escalation_target);
2317
2489
 
2318
2490
  let status = transitionDecision.status;
2319
2491
  let currentGate = transitionDecision.current_gate;
@@ -2321,7 +2493,9 @@ function evaluateGateCheck(targetDir, selection = {}) {
2321
2493
  let missingApproval = transitionDecision.missing_approval;
2322
2494
  let allowed = transitionDecision.allowed;
2323
2495
  let forbidden = transitionDecision.forbidden;
2324
- let nextAllowedAction = isPlaceholderValue(runState.next_allowed_action)
2496
+ let nextAllowedAction = modeSliceDecision(runState) === "verified_change"
2497
+ ? transitionDecision.next_allowed_action
2498
+ : isPlaceholderValue(runState.next_allowed_action)
2325
2499
  ? transitionDecision.next_allowed_action
2326
2500
  : runState.next_allowed_action;
2327
2501
 
@@ -2337,13 +2511,13 @@ function evaluateGateCheck(targetDir, selection = {}) {
2337
2511
  ];
2338
2512
  forbidden = ["create PRD", "create SD", "create TP", "run Brownfield Analysis", "implement code", "claim QA or release readiness"];
2339
2513
  nextAllowedAction = "Draft the minimal UR for the request in the response, then ask for exact approval: Approval: UR. Do not write a full .agdf/control scaffold unless durable control state or deterministic setup is explicitly needed.";
2340
- } else if (doctorBlocker) {
2514
+ } else if (doctorBlocker && !routesInvalidVerifiedChange) {
2341
2515
  status = "blocked";
2342
2516
  blockingReason = doctorBlocker.code;
2343
2517
  allowed = ["repair the AGDF control scaffold", ...transitionDecision.allowed, "run doctor again"];
2344
2518
  forbidden = ["create later-gate artefacts beyond the current allowed gate", "implement gated work", "claim QA or release readiness"];
2345
2519
  nextAllowedAction = doctorBlocker.next_step;
2346
- } else if (doctorRevise) {
2520
+ } else if (doctorRevise && !routesInvalidVerifiedChange) {
2347
2521
  status = "blocked";
2348
2522
  blockingReason = doctorRevise.code;
2349
2523
  allowed = [...new Set(["complete the current control-state fields", ...transitionDecision.allowed, "run doctor again"])];
@@ -2389,6 +2563,7 @@ function evaluateGateCheck(targetDir, selection = {}) {
2389
2563
  memory: deliveryMap.memory,
2390
2564
  findings: deliveryMap.findings,
2391
2565
  },
2566
+ verified_change: verifiedChange,
2392
2567
  doctor_report: doctorReport,
2393
2568
  };
2394
2569
  }
@@ -14,6 +14,7 @@ Use this scaffold when a target repository should keep AGDF state outside chat h
14
14
  | `templates/MASTER_BACKLOG.md` | Template for the living backlog pointer: active initiatives and current UR/Brownfield/PRD/SD/TP/QA/OR artefacts |
15
15
  | `templates/artefacts/UR.md` | Template for the durable user requirement artefact of a work item |
16
16
  | `templates/artefacts/BROWNFIELD_REVIEW.md` | Template for the durable Brownfield Review and Mode/Slice Decision |
17
+ | `templates/artefacts/VERIFIED_CHANGE.md` | Compact fail-closed record for an eligible Verified Change |
17
18
  | `templates/artefacts/PRD.md` | Template for the durable product requirements artefact |
18
19
  | `templates/artefacts/SD.md` | Template for the durable solution design artefact |
19
20
  | `templates/artefacts/TP.md` | Template for the durable task and test plan artefact |
@@ -84,7 +85,7 @@ npx --yes @agdf/cli@latest gate-check --json
84
85
  - The selected `runs/<run_id>/RUN_STATE.md` is the current run dashboard.
85
86
  - `config.json` stores the project preference for artefact and chat language; runtime rules stay English.
86
87
  - `MASTER_BACKLOG.md` points to active delivery work; detailed artefacts live beside the work item.
87
- - Brownfield Review records the post-UR Mode/Slice Decision before PRD depth or Quick Task execution is chosen.
88
+ - Brownfield Review records the post-UR Mode/Slice Decision before PRD depth, Verified Change execution or Quick Task execution is chosen.
88
89
  - UR, PRD, SD, TP and QA decisions require durable artefacts or links to the authoritative repository source of truth before the next gate can open.
89
90
  - OR records the run closeout and next permissible step; it does not approve later gates.
90
91
  - `SOT_REGISTRY.md` decides which document owns which domain.
@@ -4,8 +4,8 @@
4
4
 
5
5
  - run_id:
6
6
  - started_at:
7
- - mode: `quick_task | structured_delivery`
8
- - current_gate: `none | UR | Brownfield Review | Mode/Slice Decision | PRD | SD | TP | Quick Task Execution | Brownfield Analysis | CD+Tests | CR | QA | UAT | OR`
7
+ - mode: `quick_task | verified_change | structured_delivery`
8
+ - current_gate: `none | UR | Brownfield Review | Mode/Slice Decision | PRD | SD | TP | Quick Task Execution | Verified Change Execution | Brownfield Analysis | CD+Tests | CR | QA | UAT | OR`
9
9
  - decision: `pass | revise | block | in_progress`
10
10
  - owner:
11
11
 
@@ -68,6 +68,7 @@ Valid approval format for new runs: `Approval: <GateName>`.
68
68
  | SD | | `draft | approved | superseded | not_applicable` | |
69
69
  | TP | | `draft | approved | superseded | not_applicable` | |
70
70
  | Brownfield Review | | `missing | draft | done | not_applicable | superseded` | |
71
+ | Verified Change | | `missing | draft | eligible | executed | escalated` | |
71
72
  | Review | | `missing | done | not_applicable` | |
72
73
  | QA | | `missing | pass | revise | block | not_applicable` | |
73
74
  | OR | | `missing | done | not_applicable` | |
@@ -77,7 +78,7 @@ Valid approval format for new runs: `Approval: <GateName>`.
77
78
  Set this after Brownfield Review. Do not assume the full gate chain before the existing-system impact is understood.
78
79
  Quick Task execution or implementation is not allowed until this decision is visible with scope reason and evidence.
79
80
 
80
- - decision: `undecided | quick_task | structured_slice | structured_delivery | block`
81
+ - decision: `undecided | quick_task | verified_change | structured_slice | structured_delivery | block`
81
82
  - required_next_gate: `none | PRD | SD | TP | Brownfield Analysis`
82
83
  - scope_reason:
83
84
  - evidence:
@@ -43,6 +43,7 @@ Describe the trustworthy outcome.
43
43
  |---|---|---|---|
44
44
  | UR | | draft | |
45
45
  | Brownfield Review | | missing | |
46
+ | Verified Change | | missing | |
46
47
  | PRD | | missing | |
47
48
  | SD | | missing | |
48
49
  | TP | | missing | |
@@ -53,7 +54,7 @@ Describe the trustworthy outcome.
53
54
 
54
55
  ## Mode/Slice Decision
55
56
 
56
- - decision:
57
+ - decision: `quick_task | verified_change | structured_slice | structured_delivery | block`
57
58
  - required_next_gate:
58
59
  - scope_reason:
59
60
  - evidence:
@@ -37,7 +37,7 @@ What approved UR scope is being sized and routed?
37
37
 
38
38
  ## Mode / Slice Decision
39
39
 
40
- - decision: `quick_task | structured_slice | structured_delivery | block`
40
+ - decision: `quick_task | verified_change | structured_slice | structured_delivery | block`
41
41
  - required_next_gate: `none | PRD | SD | TP | Brownfield Analysis`
42
42
  - scope_reason:
43
43
  - evidence:
@@ -0,0 +1,48 @@
1
+ # Verified Change: <Title>
2
+
3
+ Status: `draft | eligible | executed | escalated`
4
+
5
+ ## Record
6
+
7
+ - status: draft
8
+ - related_ur:
9
+ - escalation_target: `structured_slice | structured_delivery`
10
+ - canonical_owner:
11
+ - allowed_source_paths:
12
+ - allowed_derived_paths: none
13
+ - prohibited_impacts: none
14
+ - propagation_command: none
15
+ - validation_commands:
16
+ - baseline_tracked_paths: none
17
+ - baseline_untracked_paths: none
18
+ - validation_status: pending
19
+ - propagation_status: not_applicable
20
+
21
+ ## Eligibility Assertions
22
+
23
+ | Condition | Evidence | Status |
24
+ |---|---|---|
25
+ | Exactly one canonical owner | | `pass | fail` |
26
+ | Source and derived paths are bounded | | `pass | fail` |
27
+ | No gate, permission, security, persistence, architecture, external API, CLI or release impact | | `pass | fail` |
28
+ | Deterministic propagation is defined when derived paths exist | | `pass | fail | not_applicable` |
29
+ | Deterministic validation is defined | | `pass | fail` |
30
+ | Candidate paths are clean at baseline | | `pass | fail` |
31
+
32
+ ## Execution Evidence
33
+
34
+ | Evidence | Source | Result |
35
+ |---|---|---|
36
+ | Changed paths since baseline | | `pass | fail` |
37
+ | Propagation command | | `pass | fail | not_applicable` |
38
+ | Validation commands | | `pass | fail` |
39
+
40
+ ## Mini-Closeout
41
+
42
+ - delivered:
43
+ - intentionally_not_delivered:
44
+ - escalation_result: none
45
+ - residual_risk: none
46
+ - next_step:
47
+
48
+ This compact record is valid only for a Brownfield-selected `verified_change`. Any missing, failed or ambiguous condition must set `status: escalated` and continue at `escalation_target`.
@@ -27,6 +27,20 @@ Use this compact output shape when no formal gate artefact is required:
27
27
 
28
28
  Do not add a separate `Quality outlook` line for pure Quick Tasks unless the task became a relevant run.
29
29
 
30
+ ### Verified Change
31
+
32
+ `verified_change` is a compact, fail-closed path for a bounded user-visible change with one canonical owner and deterministic proof. It is neither a prose exception nor a new user approval gate.
33
+
34
+ After `Approval: UR`, Brownfield Review may select `verified_change` only when a durable `VERIFIED_CHANGE.md` record can prove all of the following before implementation:
35
+
36
+ 1. exactly one repository-relative canonical owner and bounded source/derived paths;
37
+ 2. no gate, permission, security, persistence, architecture, external API, CLI or release behavior impact;
38
+ 3. deterministic propagation when derived paths exist, plus at least one deterministic validation command;
39
+ 4. tracked and untracked worktree baseline paths captured before eligibility, with no candidate path already dirty; and
40
+ 5. an explicit `structured_slice` or `structured_delivery` escalation target.
41
+
42
+ The record is the compact eligibility, execution and mini-closeout artefact. A missing, failed, unknown or ambiguous field/check must fail closed: mark the record `escalated` and continue at its declared structured target. Unrelated paths already dirty at baseline remain isolated; newly introduced unlisted paths invalidate the compact path. An executed record requires passing validation evidence and, where applicable, passing propagation evidence.
43
+
30
44
  ### Non-Normative Trivial Change Boundary
31
45
 
32
46
  A `quick_task` whose entire diff stays fully outside all of the following paths may close using only
@@ -68,10 +82,10 @@ the full existing ceremony unchanged:
68
82
  When a run needs an operational status view, use the Run Status Card as a compact projection of existing control state.
69
83
  It must not introduce a second gate model or override `agdf-gate-check`, `delivery-map`, QA, OR, or user approvals.
70
84
 
71
- - `mode`: `quick_task | structured_delivery | unknown`
85
+ - `mode`: `quick_task | verified_change | structured_delivery | unknown`
72
86
  - `status`: `open | blocked | pass | warn | revise | block | in_progress`
73
87
  - `current_gate`: current user gate or internal step
74
- - `mode_slice_decision`: `undecided | quick_task | structured_slice | structured_delivery | block`
88
+ - `mode_slice_decision`: `undecided | quick_task | verified_change | structured_slice | structured_delivery | block`
75
89
  - `allowed_now`: outputs or actions currently permitted
76
90
  - `forbidden_now`: outputs or actions currently forbidden
77
91
  - `blocking_condition`: current blocker or `none`
@@ -232,7 +246,7 @@ section or any other existing line.
232
246
  ## Gate Rules
233
247
 
234
248
  - User gates: `UR -> PRD -> SD -> TP -> QA -> UAT`
235
- - Internal mandatory steps: `Brownfield Review -> Mode/Slice Decision -> Brownfield Analysis -> CD+Tests -> CR -> OR`
249
+ - Internal mandatory steps: `Brownfield Review -> Mode/Slice Decision -> Verified Change Execution | Brownfield Analysis -> CD+Tests -> CR -> OR`
236
250
  - On the approved-TP path, `CD+Tests` and `CR` are satisfied only by `done`; `not_applicable` may satisfy Brownfield Review or Brownfield Analysis, but it must not bypass implementation/test evidence or mandatory Code Review.
237
251
  - Exact approval formula: `Approval: <GateName>`
238
252
  - Legacy alias: `Freigabe: <GateName>` may be accepted when reviewing older German runs, but all new outputs must use `Approval: <GateName>`.
@@ -264,7 +278,7 @@ It is the sizing and routing step that decides how much later gate discipline is
264
278
  Its output is limited to:
265
279
 
266
280
  - workstream or follow-up-slice classification
267
- - `Mode/Slice Decision`: `quick_task | structured_slice | structured_delivery | block`
281
+ - `Mode/Slice Decision`: `quick_task | verified_change | structured_slice | structured_delivery | block`
268
282
  - affected existing owners, source-of-truth artefacts, contracts, policies, runtime paths or tests
269
283
  - reuse-before-create risks and parallel-structure risks
270
284
  - open questions that PRD or SD must resolve
@@ -273,6 +287,7 @@ Its output is limited to:
273
287
  Mode/Slice Decision rules:
274
288
 
275
289
  - `quick_task`: use only when Brownfield Review shows a narrow local change, no new product semantics beyond the approved UR, no architecture/policy/persistence/contract expansion, and evidence is sufficient to proceed with a small implementation plus relevant checks.
290
+ - `verified_change`: use only when the compact record can prove one canonical owner, bounded clean-at-baseline paths, no prohibited impact, deterministic propagation/validation and a structured escalation target. It skips later approvals only after every condition is evidenced and machine-validated.
276
291
  - `structured_slice`: use when some formal artefacts are needed, but they can stay intentionally small and scoped to the approved slice.
277
292
  - `structured_delivery`: use when the change has broad product, architecture, runtime, policy, persistence, release or cross-owner impact.
278
293
  - `block`: use when ownership, SoT, impact, evidence or product direction is not clear enough to choose a safe path.
@@ -287,8 +302,12 @@ This table is the canonical transition model. Skills may reference it, but must
287
302
  |---|---|---|---|---|
288
303
  | No approved UR | `UR` | clarify user need, formulate and persist UR, request `Approval: UR` | PRD, SD, TP, Brownfield Analysis, implementation, QA, release | `Approval: UR` |
289
304
  | `UR` approved and UR artefact persisted or linked, Brownfield Review missing | `Brownfield Review` | classify workstream, existing owners, SoT, reuse risks, change size and PRD/SD open questions; mark review done or not_applicable | PRD, SD, TP, implementation, QA, release | none |
290
- | Brownfield Review done or not_applicable, Mode/Slice Decision missing or incomplete | `Mode/Slice Decision` | decide `quick_task`, `structured_slice`, `structured_delivery` or `block`; record scope reason, evidence and required next gate depth | PRD, SD, TP, implementation, QA, release | none |
305
+ | Brownfield Review done or not_applicable, Mode/Slice Decision missing or incomplete | `Mode/Slice Decision` | decide `quick_task`, `verified_change`, `structured_slice`, `structured_delivery` or `block`; record scope reason, evidence and required next gate depth | PRD, SD, TP, implementation, QA, release | none |
291
306
  | Mode/Slice Decision is `quick_task` | `Quick Task Execution` | implement only the narrow approved UR scope, run relevant checks, record evidence and OR-lite when the run is relevant | broad PRD/SD/TP by ritual, scope expansion, QA or release claims without evidence | none |
307
+ | Mode/Slice Decision is `verified_change`, record missing/draft/invalid | `Verified Change Execution` | create or repair compact record, capture baseline and prove eligibility with doctor/agdf-gate-check | implementation, QA, UAT, release | none |
308
+ | Verified Change record is `eligible` | `Verified Change Execution` | implement only declared paths, run declared propagation/validation, record mini-closeout | unlisted paths, prohibited impacts, QA/UAT/release claims | none |
309
+ | Verified Change record is `executed` | `OR` | use mini-closeout and offer delivery closeout when requested | PRD/SD/TP/QA/UAT by ritual; automatic VCS actions | none |
310
+ | Verified Change record is `escalated` | `PRD` | draft the PRD for declared `structured_slice` or `structured_delivery` escalation target | implementation through Verified Change | `Approval: PRD` |
292
311
  | Mode/Slice Decision is `structured_slice` or `structured_delivery`, PRD missing or draft | `PRD` | draft/refine PRD at the smallest justified depth, define scope, acceptance criteria and non-goals, persist/link PRD, request `Approval: PRD` | SD, TP, implementation-preparation Brownfield Analysis, implementation, QA, release | `Approval: PRD` |
293
312
  | `PRD` approved and PRD artefact persisted or linked, SD missing or draft | `SD` | draft/refine Solution Design, ownership and architecture, persist/link SD, request `Approval: SD` | TP, implementation, QA, release | `Approval: SD` |
294
313
  | `SD` approved and SD artefact persisted or linked, TP missing or draft | `TP` | draft/refine Task/Test Plan, task IDs, evidence plan, persist/link TP, request `Approval: TP` | implementation, QA, release | `Approval: TP` |
@@ -26,7 +26,7 @@ Codex and Claude Code plugin surfaces use unprefixed skill names because their p
26
26
  ## Mode Selection
27
27
  Default entry rule: a new user intent to build, add, change, extend, refactor or otherwise deliver something starts with `agdf-gate-check` unless it is clearly only a question, explanation, local inspection, or explicitly scoped review.
28
28
 
29
- Use Quick Task Mode for questions, small reviews, local debugging and narrow fixes without new product semantics.
29
+ Use Quick Task Mode for questions, small reviews, local debugging and narrow fixes without new product semantics. Use Verified Change only after approved UR and Brownfield Review when the Runtime Contract's compact record can prove bounded ownership, clean-at-baseline paths, prohibited-impact absence and deterministic validation.
30
30
 
31
31
  Use Structured Delivery Mode for new capabilities, architecture, policy, persistence, release-critical work, formal artefacts or explicit approvals.
32
32
 
@@ -38,9 +38,9 @@ Those phrases may express intent to proceed, but they do not unlock a gate unles
38
38
  Do not infer active scope from branch names, uncommitted workspace deltas, chat history or generated summaries when durable artefacts point elsewhere.
39
39
  If multiple active scopes are plausible, list the evidenced lines and route to `agdf-gate-check` or workstate clarification instead of choosing silently.
40
40
  After `Approval: UR`, run lightweight Brownfield Review before PRD when Brownfield, ownership, runtime, policy, persistence, architecture, UI or UX impact is possible.
41
- Brownfield Review must produce a Mode/Slice Decision: `quick_task`, `structured_slice`, `structured_delivery` or `block`.
41
+ Brownfield Review must produce a Mode/Slice Decision: `quick_task`, `verified_change`, `structured_slice`, `structured_delivery` or `block`.
42
42
  Make that decision visible before coding or drafting later artefacts: state the selected path, scope reason, evidence and next required gate in the live control state or linked artefact.
43
- Do not assume the full PRD/SD/TP chain before that decision; use only as much gate depth as the reviewed change size justifies.
43
+ Do not assume the full PRD/SD/TP chain before that decision; use only as much gate depth as the reviewed change size justifies. A user-visible change is not automatically Verified Change eligible; any missing or ambiguous record condition escalates to the declared structured target before implementation.
44
44
 
45
45
  Quick Task Mode must still use the Runtime Contract mini-output: `result`, `evidence`, `risk`, `next_step`.
46
46
  Narrow defect work may use the Runtime Contract's Bug Lightweight Track only when a durable bug artefact or linked authoritative issue carries reproduction, actual behavior, expected behavior, fix boundary and evidence plan.
@@ -27,6 +27,20 @@ Use this compact output shape when no formal gate artefact is required:
27
27
 
28
28
  Do not add a separate `Quality outlook` line for pure Quick Tasks unless the task became a relevant run.
29
29
 
30
+ ### Verified Change
31
+
32
+ `verified_change` is a compact, fail-closed path for a bounded user-visible change with one canonical owner and deterministic proof. It is neither a prose exception nor a new user approval gate.
33
+
34
+ After `Approval: UR`, Brownfield Review may select `verified_change` only when a durable `VERIFIED_CHANGE.md` record can prove all of the following before implementation:
35
+
36
+ 1. exactly one repository-relative canonical owner and bounded source/derived paths;
37
+ 2. no gate, permission, security, persistence, architecture, external API, CLI or release behavior impact;
38
+ 3. deterministic propagation when derived paths exist, plus at least one deterministic validation command;
39
+ 4. tracked and untracked worktree baseline paths captured before eligibility, with no candidate path already dirty; and
40
+ 5. an explicit `structured_slice` or `structured_delivery` escalation target.
41
+
42
+ The record is the compact eligibility, execution and mini-closeout artefact. A missing, failed, unknown or ambiguous field/check must fail closed: mark the record `escalated` and continue at its declared structured target. Unrelated paths already dirty at baseline remain isolated; newly introduced unlisted paths invalidate the compact path. An executed record requires passing validation evidence and, where applicable, passing propagation evidence.
43
+
30
44
  ### Non-Normative Trivial Change Boundary
31
45
 
32
46
  A `quick_task` whose entire diff stays fully outside all of the following paths may close using only
@@ -68,10 +82,10 @@ the full existing ceremony unchanged:
68
82
  When a run needs an operational status view, use the Run Status Card as a compact projection of existing control state.
69
83
  It must not introduce a second gate model or override `agdf-gate-check`, `delivery-map`, QA, OR, or user approvals.
70
84
 
71
- - `mode`: `quick_task | structured_delivery | unknown`
85
+ - `mode`: `quick_task | verified_change | structured_delivery | unknown`
72
86
  - `status`: `open | blocked | pass | warn | revise | block | in_progress`
73
87
  - `current_gate`: current user gate or internal step
74
- - `mode_slice_decision`: `undecided | quick_task | structured_slice | structured_delivery | block`
88
+ - `mode_slice_decision`: `undecided | quick_task | verified_change | structured_slice | structured_delivery | block`
75
89
  - `allowed_now`: outputs or actions currently permitted
76
90
  - `forbidden_now`: outputs or actions currently forbidden
77
91
  - `blocking_condition`: current blocker or `none`
@@ -232,7 +246,7 @@ section or any other existing line.
232
246
  ## Gate Rules
233
247
 
234
248
  - User gates: `UR -> PRD -> SD -> TP -> QA -> UAT`
235
- - Internal mandatory steps: `Brownfield Review -> Mode/Slice Decision -> Brownfield Analysis -> CD+Tests -> CR -> OR`
249
+ - Internal mandatory steps: `Brownfield Review -> Mode/Slice Decision -> Verified Change Execution | Brownfield Analysis -> CD+Tests -> CR -> OR`
236
250
  - On the approved-TP path, `CD+Tests` and `CR` are satisfied only by `done`; `not_applicable` may satisfy Brownfield Review or Brownfield Analysis, but it must not bypass implementation/test evidence or mandatory Code Review.
237
251
  - Exact approval formula: `Approval: <GateName>`
238
252
  - Legacy alias: `Freigabe: <GateName>` may be accepted when reviewing older German runs, but all new outputs must use `Approval: <GateName>`.
@@ -264,7 +278,7 @@ It is the sizing and routing step that decides how much later gate discipline is
264
278
  Its output is limited to:
265
279
 
266
280
  - workstream or follow-up-slice classification
267
- - `Mode/Slice Decision`: `quick_task | structured_slice | structured_delivery | block`
281
+ - `Mode/Slice Decision`: `quick_task | verified_change | structured_slice | structured_delivery | block`
268
282
  - affected existing owners, source-of-truth artefacts, contracts, policies, runtime paths or tests
269
283
  - reuse-before-create risks and parallel-structure risks
270
284
  - open questions that PRD or SD must resolve
@@ -273,6 +287,7 @@ Its output is limited to:
273
287
  Mode/Slice Decision rules:
274
288
 
275
289
  - `quick_task`: use only when Brownfield Review shows a narrow local change, no new product semantics beyond the approved UR, no architecture/policy/persistence/contract expansion, and evidence is sufficient to proceed with a small implementation plus relevant checks.
290
+ - `verified_change`: use only when the compact record can prove one canonical owner, bounded clean-at-baseline paths, no prohibited impact, deterministic propagation/validation and a structured escalation target. It skips later approvals only after every condition is evidenced and machine-validated.
276
291
  - `structured_slice`: use when some formal artefacts are needed, but they can stay intentionally small and scoped to the approved slice.
277
292
  - `structured_delivery`: use when the change has broad product, architecture, runtime, policy, persistence, release or cross-owner impact.
278
293
  - `block`: use when ownership, SoT, impact, evidence or product direction is not clear enough to choose a safe path.
@@ -287,8 +302,12 @@ This table is the canonical transition model. Skills may reference it, but must
287
302
  |---|---|---|---|---|
288
303
  | No approved UR | `UR` | clarify user need, formulate and persist UR, request `Approval: UR` | PRD, SD, TP, Brownfield Analysis, implementation, QA, release | `Approval: UR` |
289
304
  | `UR` approved and UR artefact persisted or linked, Brownfield Review missing | `Brownfield Review` | classify workstream, existing owners, SoT, reuse risks, change size and PRD/SD open questions; mark review done or not_applicable | PRD, SD, TP, implementation, QA, release | none |
290
- | Brownfield Review done or not_applicable, Mode/Slice Decision missing or incomplete | `Mode/Slice Decision` | decide `quick_task`, `structured_slice`, `structured_delivery` or `block`; record scope reason, evidence and required next gate depth | PRD, SD, TP, implementation, QA, release | none |
305
+ | Brownfield Review done or not_applicable, Mode/Slice Decision missing or incomplete | `Mode/Slice Decision` | decide `quick_task`, `verified_change`, `structured_slice`, `structured_delivery` or `block`; record scope reason, evidence and required next gate depth | PRD, SD, TP, implementation, QA, release | none |
291
306
  | Mode/Slice Decision is `quick_task` | `Quick Task Execution` | implement only the narrow approved UR scope, run relevant checks, record evidence and OR-lite when the run is relevant | broad PRD/SD/TP by ritual, scope expansion, QA or release claims without evidence | none |
307
+ | Mode/Slice Decision is `verified_change`, record missing/draft/invalid | `Verified Change Execution` | create or repair compact record, capture baseline and prove eligibility with doctor/agdf-gate-check | implementation, QA, UAT, release | none |
308
+ | Verified Change record is `eligible` | `Verified Change Execution` | implement only declared paths, run declared propagation/validation, record mini-closeout | unlisted paths, prohibited impacts, QA/UAT/release claims | none |
309
+ | Verified Change record is `executed` | `OR` | use mini-closeout and offer delivery closeout when requested | PRD/SD/TP/QA/UAT by ritual; automatic VCS actions | none |
310
+ | Verified Change record is `escalated` | `PRD` | draft the PRD for declared `structured_slice` or `structured_delivery` escalation target | implementation through Verified Change | `Approval: PRD` |
292
311
  | Mode/Slice Decision is `structured_slice` or `structured_delivery`, PRD missing or draft | `PRD` | draft/refine PRD at the smallest justified depth, define scope, acceptance criteria and non-goals, persist/link PRD, request `Approval: PRD` | SD, TP, implementation-preparation Brownfield Analysis, implementation, QA, release | `Approval: PRD` |
293
312
  | `PRD` approved and PRD artefact persisted or linked, SD missing or draft | `SD` | draft/refine Solution Design, ownership and architecture, persist/link SD, request `Approval: SD` | TP, implementation, QA, release | `Approval: SD` |
294
313
  | `SD` approved and SD artefact persisted or linked, TP missing or draft | `TP` | draft/refine Task/Test Plan, task IDs, evidence plan, persist/link TP, request `Approval: TP` | implementation, QA, release | `Approval: TP` |
@@ -26,7 +26,7 @@ Codex and Claude Code plugin surfaces use the same canonical router with unprefi
26
26
  ## Mode Selection
27
27
  Default entry rule: a new user intent to build, add, change, extend, refactor or otherwise deliver something starts with `agdf-gate-check` unless it is clearly only a question, explanation, local inspection, or explicitly scoped review.
28
28
 
29
- Use Quick Task Mode for questions, small reviews, local debugging and narrow fixes without new product semantics.
29
+ Use Quick Task Mode for questions, small reviews, local debugging and narrow fixes without new product semantics. Use Verified Change only after approved UR and Brownfield Review when the Runtime Contract's compact record can prove bounded ownership, clean-at-baseline paths, prohibited-impact absence and deterministic validation.
30
30
 
31
31
  Use Structured Delivery Mode for new capabilities, architecture, policy, persistence, release-critical work, formal artefacts or explicit approvals.
32
32
 
@@ -38,9 +38,9 @@ Those phrases may express intent to proceed, but they do not unlock a gate unles
38
38
  Do not infer active scope from branch names, uncommitted workspace deltas, chat history or generated summaries when durable artefacts point elsewhere.
39
39
  If multiple active scopes are plausible, list the evidenced lines and route to `agdf-gate-check` or workstate clarification instead of choosing silently.
40
40
  After `Approval: UR`, run lightweight Brownfield Review before PRD when Brownfield, ownership, runtime, policy, persistence, architecture, UI or UX impact is possible.
41
- Brownfield Review must produce a Mode/Slice Decision: `quick_task`, `structured_slice`, `structured_delivery` or `block`.
41
+ Brownfield Review must produce a Mode/Slice Decision: `quick_task`, `verified_change`, `structured_slice`, `structured_delivery` or `block`.
42
42
  Make that decision visible before coding or drafting later artefacts: state the selected path, scope reason, evidence and next required gate in the live control state or linked artefact.
43
- Do not assume the full PRD/SD/TP chain before that decision; use only as much gate depth as the reviewed change size justifies.
43
+ Do not assume the full PRD/SD/TP chain before that decision; use only as much gate depth as the reviewed change size justifies. A user-visible change is not automatically Verified Change eligible; any missing or ambiguous record condition escalates to the declared structured target before implementation.
44
44
 
45
45
  Quick Task Mode must still use the Runtime Contract mini-output: `result`, `evidence`, `risk`, `next_step`.
46
46
  Narrow defect work may use the Runtime Contract's Bug Lightweight Track only when a durable bug artefact or linked authoritative issue carries reproduction, actual behavior, expected behavior, fix boundary and evidence plan.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agdf",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "description": "Codex-first operating system for governed AI-assisted delivery.",
5
5
  "author": {
6
6
  "name": "Arndt Gold",
@@ -32,7 +32,7 @@
32
32
  "composerIcon": "./assets/agdf-icon.svg",
33
33
  "logo": "./assets/agdf-logo.svg",
34
34
  "defaultPrompt": [
35
- "Evaluate whether AGDF is appropriate for this repository and request. Explain its purpose, practical value, governance overhead, and fit for the project's risk level. Recommend the smallest suitable AGDF path before proposing implementation.",
35
+ "Assess whether AGDF is proportionate for this repository and request before proposing any implementation. Explain AGDF's purpose and practical benefits, weigh governance overhead against the project's delivery risk, and recommend the lightest suitable path — or explicitly advise against AGDF where it would add more process than value.",
36
36
  "Start this request under AGDF governance.",
37
37
  "Create durable AGDF control state for this repository.",
38
38
  "Close this delivery run with an auditable AGDF report."
@@ -14,6 +14,7 @@ Use this scaffold when a target repository should keep AGDF state outside chat h
14
14
  | `templates/MASTER_BACKLOG.md` | Template for the living backlog pointer: active initiatives and current UR/Brownfield/PRD/SD/TP/QA/OR artefacts |
15
15
  | `templates/artefacts/UR.md` | Template for the durable user requirement artefact of a work item |
16
16
  | `templates/artefacts/BROWNFIELD_REVIEW.md` | Template for the durable Brownfield Review and Mode/Slice Decision |
17
+ | `templates/artefacts/VERIFIED_CHANGE.md` | Compact fail-closed record for an eligible Verified Change |
17
18
  | `templates/artefacts/PRD.md` | Template for the durable product requirements artefact |
18
19
  | `templates/artefacts/SD.md` | Template for the durable solution design artefact |
19
20
  | `templates/artefacts/TP.md` | Template for the durable task and test plan artefact |
@@ -84,7 +85,7 @@ npx --yes @agdf/cli@latest gate-check --json
84
85
  - The selected `runs/<run_id>/RUN_STATE.md` is the current run dashboard.
85
86
  - `config.json` stores the project preference for artefact and chat language; runtime rules stay English.
86
87
  - `MASTER_BACKLOG.md` points to active delivery work; detailed artefacts live beside the work item.
87
- - Brownfield Review records the post-UR Mode/Slice Decision before PRD depth or Quick Task execution is chosen.
88
+ - Brownfield Review records the post-UR Mode/Slice Decision before PRD depth, Verified Change execution or Quick Task execution is chosen.
88
89
  - UR, PRD, SD, TP and QA decisions require durable artefacts or links to the authoritative repository source of truth before the next gate can open.
89
90
  - OR records the run closeout and next permissible step; it does not approve later gates.
90
91
  - `SOT_REGISTRY.md` decides which document owns which domain.
@@ -4,8 +4,8 @@
4
4
 
5
5
  - run_id:
6
6
  - started_at:
7
- - mode: `quick_task | structured_delivery`
8
- - current_gate: `none | UR | Brownfield Review | Mode/Slice Decision | PRD | SD | TP | Quick Task Execution | Brownfield Analysis | CD+Tests | CR | QA | UAT | OR`
7
+ - mode: `quick_task | verified_change | structured_delivery`
8
+ - current_gate: `none | UR | Brownfield Review | Mode/Slice Decision | PRD | SD | TP | Quick Task Execution | Verified Change Execution | Brownfield Analysis | CD+Tests | CR | QA | UAT | OR`
9
9
  - decision: `pass | revise | block | in_progress`
10
10
  - owner:
11
11
 
@@ -68,6 +68,7 @@ Valid approval format for new runs: `Approval: <GateName>`.
68
68
  | SD | | `draft | approved | superseded | not_applicable` | |
69
69
  | TP | | `draft | approved | superseded | not_applicable` | |
70
70
  | Brownfield Review | | `missing | draft | done | not_applicable | superseded` | |
71
+ | Verified Change | | `missing | draft | eligible | executed | escalated` | |
71
72
  | Review | | `missing | done | not_applicable` | |
72
73
  | QA | | `missing | pass | revise | block | not_applicable` | |
73
74
  | OR | | `missing | done | not_applicable` | |
@@ -77,7 +78,7 @@ Valid approval format for new runs: `Approval: <GateName>`.
77
78
  Set this after Brownfield Review. Do not assume the full gate chain before the existing-system impact is understood.
78
79
  Quick Task execution or implementation is not allowed until this decision is visible with scope reason and evidence.
79
80
 
80
- - decision: `undecided | quick_task | structured_slice | structured_delivery | block`
81
+ - decision: `undecided | quick_task | verified_change | structured_slice | structured_delivery | block`
81
82
  - required_next_gate: `none | PRD | SD | TP | Brownfield Analysis`
82
83
  - scope_reason:
83
84
  - evidence:
@@ -43,6 +43,7 @@ Describe the trustworthy outcome.
43
43
  |---|---|---|---|
44
44
  | UR | | draft | |
45
45
  | Brownfield Review | | missing | |
46
+ | Verified Change | | missing | |
46
47
  | PRD | | missing | |
47
48
  | SD | | missing | |
48
49
  | TP | | missing | |
@@ -53,7 +54,7 @@ Describe the trustworthy outcome.
53
54
 
54
55
  ## Mode/Slice Decision
55
56
 
56
- - decision:
57
+ - decision: `quick_task | verified_change | structured_slice | structured_delivery | block`
57
58
  - required_next_gate:
58
59
  - scope_reason:
59
60
  - evidence:
@@ -37,7 +37,7 @@ What approved UR scope is being sized and routed?
37
37
 
38
38
  ## Mode / Slice Decision
39
39
 
40
- - decision: `quick_task | structured_slice | structured_delivery | block`
40
+ - decision: `quick_task | verified_change | structured_slice | structured_delivery | block`
41
41
  - required_next_gate: `none | PRD | SD | TP | Brownfield Analysis`
42
42
  - scope_reason:
43
43
  - evidence:
@@ -0,0 +1,48 @@
1
+ # Verified Change: <Title>
2
+
3
+ Status: `draft | eligible | executed | escalated`
4
+
5
+ ## Record
6
+
7
+ - status: draft
8
+ - related_ur:
9
+ - escalation_target: `structured_slice | structured_delivery`
10
+ - canonical_owner:
11
+ - allowed_source_paths:
12
+ - allowed_derived_paths: none
13
+ - prohibited_impacts: none
14
+ - propagation_command: none
15
+ - validation_commands:
16
+ - baseline_tracked_paths: none
17
+ - baseline_untracked_paths: none
18
+ - validation_status: pending
19
+ - propagation_status: not_applicable
20
+
21
+ ## Eligibility Assertions
22
+
23
+ | Condition | Evidence | Status |
24
+ |---|---|---|
25
+ | Exactly one canonical owner | | `pass | fail` |
26
+ | Source and derived paths are bounded | | `pass | fail` |
27
+ | No gate, permission, security, persistence, architecture, external API, CLI or release impact | | `pass | fail` |
28
+ | Deterministic propagation is defined when derived paths exist | | `pass | fail | not_applicable` |
29
+ | Deterministic validation is defined | | `pass | fail` |
30
+ | Candidate paths are clean at baseline | | `pass | fail` |
31
+
32
+ ## Execution Evidence
33
+
34
+ | Evidence | Source | Result |
35
+ |---|---|---|
36
+ | Changed paths since baseline | | `pass | fail` |
37
+ | Propagation command | | `pass | fail | not_applicable` |
38
+ | Validation commands | | `pass | fail` |
39
+
40
+ ## Mini-Closeout
41
+
42
+ - delivered:
43
+ - intentionally_not_delivered:
44
+ - escalation_result: none
45
+ - residual_risk: none
46
+ - next_step:
47
+
48
+ This compact record is valid only for a Brownfield-selected `verified_change`. Any missing, failed or ambiguous condition must set `status: escalated` and continue at `escalation_target`.
@@ -27,7 +27,7 @@ That `agdf-` prefix is reserved for GitHub Copilot repository skills, where no p
27
27
  ## Mode Selection
28
28
  Default entry rule: a new user intent to build, add, change, extend, refactor or otherwise deliver something starts with `gate-check` unless it is clearly only a question, explanation, local inspection, or explicitly scoped review.
29
29
 
30
- Use Quick Task Mode for questions, small reviews, local debugging and narrow fixes without new product semantics.
30
+ Use Quick Task Mode for questions, small reviews, local debugging and narrow fixes without new product semantics. Use Verified Change only after approved UR and Brownfield Review when the Runtime Contract's compact record can prove bounded ownership, clean-at-baseline paths, prohibited-impact absence and deterministic validation.
31
31
 
32
32
  Use Structured Delivery Mode for new capabilities, architecture, policy, persistence, release-critical work, formal artefacts or explicit approvals.
33
33
 
@@ -39,9 +39,9 @@ Those phrases may express intent to proceed, but they do not unlock a gate unles
39
39
  Do not infer active scope from branch names, uncommitted workspace deltas, chat history or generated summaries when durable artefacts point elsewhere.
40
40
  If multiple active scopes are plausible, list the evidenced lines and route to `gate-check` or workstate clarification instead of choosing silently.
41
41
  After `Approval: UR`, run lightweight Brownfield Review before PRD when Brownfield, ownership, runtime, policy, persistence, architecture, UI or UX impact is possible.
42
- Brownfield Review must produce a Mode/Slice Decision: `quick_task`, `structured_slice`, `structured_delivery` or `block`.
42
+ Brownfield Review must produce a Mode/Slice Decision: `quick_task`, `verified_change`, `structured_slice`, `structured_delivery` or `block`.
43
43
  Make that decision visible before coding or drafting later artefacts: state the selected path, scope reason, evidence and next required gate in the live control state or linked artefact.
44
- Do not assume the full PRD/SD/TP chain before that decision; use only as much gate depth as the reviewed change size justifies.
44
+ Do not assume the full PRD/SD/TP chain before that decision; use only as much gate depth as the reviewed change size justifies. A user-visible change is not automatically Verified Change eligible; any missing or ambiguous record condition escalates to the declared structured target before implementation.
45
45
 
46
46
  Quick Task Mode must still use the Runtime Contract mini-output: `result`, `evidence`, `risk`, `next_step`.
47
47
  Narrow defect work may use the Runtime Contract's Bug Lightweight Track only when a durable bug artefact or linked authoritative issue carries reproduction, actual behavior, expected behavior, fix boundary and evidence plan.
@@ -184,11 +184,11 @@ Gate Discipline
184
184
 
185
185
  AGDF work follows a gate-driven flow:
186
186
 
187
- UR → Brownfield Review → Mode/Slice Decision → PRD/SD/TP as needed → QA → UAT
187
+ UR → Brownfield Review → Mode/Slice Decision → Verified Change or PRD/SD/TP as needed → QA → UAT
188
188
 
189
189
  with internal process steps:
190
190
 
191
- Brownfield Review → Mode/Slice Decision → Brownfield Analysis → CD+Tests → CR → OR
191
+ Brownfield Review → Mode/Slice Decision → Verified Change Execution or Brownfield Analysis → CD+Tests → CR → OR
192
192
 
193
193
  Rules:
194
194
 
@@ -208,7 +208,7 @@ Rules:
208
208
  internal mandatory step.
209
209
  * **Size before ceremony**: After an approved durable UR, Brownfield Review
210
210
  determines change size and routing before PRD depth is chosen. The Mode/Slice
211
- Decision is one of `quick_task`, `structured_slice`, `structured_delivery` or
211
+ Decision is one of `quick_task`, `verified_change`, `structured_slice`, `structured_delivery` or
212
212
  `block`.
213
213
  * **No gate leaks**: Later gate artefacts must not be produced when an
214
214
  earlier gate is still blocking.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "id": "agdf",
4
- "version": "0.7.0",
4
+ "version": "0.7.1",
5
5
  "displayName": "AI Governance & Delivery Framework",
6
6
  "developerName": "Arndt Gold",
7
7
  "description": "Codex-first operating system for governed AI-assisted delivery.",
@@ -35,7 +35,7 @@
35
35
  "Write"
36
36
  ],
37
37
  "defaultPrompt": [
38
- "Evaluate whether AGDF is appropriate for this repository and request. Explain its purpose, practical value, governance overhead, and fit for the project's risk level. Recommend the smallest suitable AGDF path before proposing implementation.",
38
+ "Assess whether AGDF is proportionate for this repository and request before proposing any implementation. Explain AGDF's purpose and practical benefits, weigh governance overhead against the project's delivery risk, and recommend the lightest suitable path — or explicitly advise against AGDF where it would add more process than value.",
39
39
  "Start this request under AGDF governance.",
40
40
  "Create durable AGDF control state for this repository.",
41
41
  "Close this delivery run with an auditable AGDF report."
@@ -27,6 +27,20 @@ Use this compact output shape when no formal gate artefact is required:
27
27
 
28
28
  Do not add a separate `Quality outlook` line for pure Quick Tasks unless the task became a relevant run.
29
29
 
30
+ ### Verified Change
31
+
32
+ `verified_change` is a compact, fail-closed path for a bounded user-visible change with one canonical owner and deterministic proof. It is neither a prose exception nor a new user approval gate.
33
+
34
+ After `Approval: UR`, Brownfield Review may select `verified_change` only when a durable `VERIFIED_CHANGE.md` record can prove all of the following before implementation:
35
+
36
+ 1. exactly one repository-relative canonical owner and bounded source/derived paths;
37
+ 2. no gate, permission, security, persistence, architecture, external API, CLI or release behavior impact;
38
+ 3. deterministic propagation when derived paths exist, plus at least one deterministic validation command;
39
+ 4. tracked and untracked worktree baseline paths captured before eligibility, with no candidate path already dirty; and
40
+ 5. an explicit `structured_slice` or `structured_delivery` escalation target.
41
+
42
+ The record is the compact eligibility, execution and mini-closeout artefact. A missing, failed, unknown or ambiguous field/check must fail closed: mark the record `escalated` and continue at its declared structured target. Unrelated paths already dirty at baseline remain isolated; newly introduced unlisted paths invalidate the compact path. An executed record requires passing validation evidence and, where applicable, passing propagation evidence.
43
+
30
44
  ### Non-Normative Trivial Change Boundary
31
45
 
32
46
  A `quick_task` whose entire diff stays fully outside all of the following paths may close using only
@@ -68,10 +82,10 @@ the full existing ceremony unchanged:
68
82
  When a run needs an operational status view, use the Run Status Card as a compact projection of existing control state.
69
83
  It must not introduce a second gate model or override `gate-check`, `delivery-map`, QA, OR, or user approvals.
70
84
 
71
- - `mode`: `quick_task | structured_delivery | unknown`
85
+ - `mode`: `quick_task | verified_change | structured_delivery | unknown`
72
86
  - `status`: `open | blocked | pass | warn | revise | block | in_progress`
73
87
  - `current_gate`: current user gate or internal step
74
- - `mode_slice_decision`: `undecided | quick_task | structured_slice | structured_delivery | block`
88
+ - `mode_slice_decision`: `undecided | quick_task | verified_change | structured_slice | structured_delivery | block`
75
89
  - `allowed_now`: outputs or actions currently permitted
76
90
  - `forbidden_now`: outputs or actions currently forbidden
77
91
  - `blocking_condition`: current blocker or `none`
@@ -232,7 +246,7 @@ section or any other existing line.
232
246
  ## Gate Rules
233
247
 
234
248
  - User gates: `UR -> PRD -> SD -> TP -> QA -> UAT`
235
- - Internal mandatory steps: `Brownfield Review -> Mode/Slice Decision -> Brownfield Analysis -> CD+Tests -> CR -> OR`
249
+ - Internal mandatory steps: `Brownfield Review -> Mode/Slice Decision -> Verified Change Execution | Brownfield Analysis -> CD+Tests -> CR -> OR`
236
250
  - On the approved-TP path, `CD+Tests` and `CR` are satisfied only by `done`; `not_applicable` may satisfy Brownfield Review or Brownfield Analysis, but it must not bypass implementation/test evidence or mandatory Code Review.
237
251
  - Exact approval formula: `Approval: <GateName>`
238
252
  - Legacy alias: `Freigabe: <GateName>` may be accepted when reviewing older German runs, but all new outputs must use `Approval: <GateName>`.
@@ -264,7 +278,7 @@ It is the sizing and routing step that decides how much later gate discipline is
264
278
  Its output is limited to:
265
279
 
266
280
  - workstream or follow-up-slice classification
267
- - `Mode/Slice Decision`: `quick_task | structured_slice | structured_delivery | block`
281
+ - `Mode/Slice Decision`: `quick_task | verified_change | structured_slice | structured_delivery | block`
268
282
  - affected existing owners, source-of-truth artefacts, contracts, policies, runtime paths or tests
269
283
  - reuse-before-create risks and parallel-structure risks
270
284
  - open questions that PRD or SD must resolve
@@ -273,6 +287,7 @@ Its output is limited to:
273
287
  Mode/Slice Decision rules:
274
288
 
275
289
  - `quick_task`: use only when Brownfield Review shows a narrow local change, no new product semantics beyond the approved UR, no architecture/policy/persistence/contract expansion, and evidence is sufficient to proceed with a small implementation plus relevant checks.
290
+ - `verified_change`: use only when the compact record can prove one canonical owner, bounded clean-at-baseline paths, no prohibited impact, deterministic propagation/validation and a structured escalation target. It skips later approvals only after every condition is evidenced and machine-validated.
276
291
  - `structured_slice`: use when some formal artefacts are needed, but they can stay intentionally small and scoped to the approved slice.
277
292
  - `structured_delivery`: use when the change has broad product, architecture, runtime, policy, persistence, release or cross-owner impact.
278
293
  - `block`: use when ownership, SoT, impact, evidence or product direction is not clear enough to choose a safe path.
@@ -287,8 +302,12 @@ This table is the canonical transition model. Skills may reference it, but must
287
302
  |---|---|---|---|---|
288
303
  | No approved UR | `UR` | clarify user need, formulate and persist UR, request `Approval: UR` | PRD, SD, TP, Brownfield Analysis, implementation, QA, release | `Approval: UR` |
289
304
  | `UR` approved and UR artefact persisted or linked, Brownfield Review missing | `Brownfield Review` | classify workstream, existing owners, SoT, reuse risks, change size and PRD/SD open questions; mark review done or not_applicable | PRD, SD, TP, implementation, QA, release | none |
290
- | Brownfield Review done or not_applicable, Mode/Slice Decision missing or incomplete | `Mode/Slice Decision` | decide `quick_task`, `structured_slice`, `structured_delivery` or `block`; record scope reason, evidence and required next gate depth | PRD, SD, TP, implementation, QA, release | none |
305
+ | Brownfield Review done or not_applicable, Mode/Slice Decision missing or incomplete | `Mode/Slice Decision` | decide `quick_task`, `verified_change`, `structured_slice`, `structured_delivery` or `block`; record scope reason, evidence and required next gate depth | PRD, SD, TP, implementation, QA, release | none |
291
306
  | Mode/Slice Decision is `quick_task` | `Quick Task Execution` | implement only the narrow approved UR scope, run relevant checks, record evidence and OR-lite when the run is relevant | broad PRD/SD/TP by ritual, scope expansion, QA or release claims without evidence | none |
307
+ | Mode/Slice Decision is `verified_change`, record missing/draft/invalid | `Verified Change Execution` | create or repair compact record, capture baseline and prove eligibility with doctor/gate-check | implementation, QA, UAT, release | none |
308
+ | Verified Change record is `eligible` | `Verified Change Execution` | implement only declared paths, run declared propagation/validation, record mini-closeout | unlisted paths, prohibited impacts, QA/UAT/release claims | none |
309
+ | Verified Change record is `executed` | `OR` | use mini-closeout and offer delivery closeout when requested | PRD/SD/TP/QA/UAT by ritual; automatic VCS actions | none |
310
+ | Verified Change record is `escalated` | `PRD` | draft the PRD for declared `structured_slice` or `structured_delivery` escalation target | implementation through Verified Change | `Approval: PRD` |
292
311
  | Mode/Slice Decision is `structured_slice` or `structured_delivery`, PRD missing or draft | `PRD` | draft/refine PRD at the smallest justified depth, define scope, acceptance criteria and non-goals, persist/link PRD, request `Approval: PRD` | SD, TP, implementation-preparation Brownfield Analysis, implementation, QA, release | `Approval: PRD` |
293
312
  | `PRD` approved and PRD artefact persisted or linked, SD missing or draft | `SD` | draft/refine Solution Design, ownership and architecture, persist/link SD, request `Approval: SD` | TP, implementation, QA, release | `Approval: SD` |
294
313
  | `SD` approved and SD artefact persisted or linked, TP missing or draft | `TP` | draft/refine Task/Test Plan, task IDs, evidence plan, persist/link TP, request `Approval: TP` | implementation, QA, release | `Approval: TP` |
@@ -23,6 +23,11 @@ you *MUST* honor the following **GENERIC TENETS**:
23
23
  and tooling maintenance when no new product meaning, user capability,
24
24
  architecture, policy or persistence decision is introduced.
25
25
 
26
+ Verified Change may handle a bounded user-visible canonical metadata or
27
+ copy change only after approved UR and Brownfield Review when the Runtime
28
+ Contract record proves one owner, clean-at-baseline paths, no prohibited
29
+ impact and deterministic validation; every uncertainty escalates.
30
+
26
31
  - **Fail Closed**:
27
32
  When a necessary approval, input, or quality statement is missing,
28
33
  the process must stop or demand revision.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-agdf",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
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": [
@@ -25,9 +25,11 @@
25
25
  "test:delivery-path-search-unit": "node ./scripts/delivery-path-search-unit-test.js",
26
26
  "test:delivery-path-search-generator": "node ./scripts/delivery-path-search-generator-test.js",
27
27
  "test:control-state": "node ./scripts/control-state-test.js",
28
+ "test:verified-change": "node ./scripts/verified-change-test.js",
29
+ "test:runtime-integrity-negative": "node ./scripts/runtime-integrity-negative-test.js",
28
30
  "test:release-bootstrap": "node ./scripts/release-bootstrap-smoke-test.js",
29
31
  "test:routing": "npm run sync-package-assets && node ./scripts/test-routing.js",
30
- "smoke-test": "npm run sync-package-assets && npm run test:control-state && npm run test:delivery-path-search && npm run test:delivery-path-search-unit && npm run test:delivery-path-search-generator && node ./scripts/smoke-test.js && node ./scripts/test-routing.js",
32
+ "smoke-test": "npm run sync-package-assets && npm run test:control-state && npm run test:verified-change && npm run test:runtime-integrity-negative && npm run test:delivery-path-search && npm run test:delivery-path-search-unit && npm run test:delivery-path-search-generator && node ./scripts/smoke-test.js && node ./scripts/test-routing.js",
31
33
  "prepack": "npm run sync-package-assets"
32
34
  },
33
35
  "keywords": [