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 +40 -2
- package/bin/create-agdf.js +183 -8
- package/generated/.agdf/control/README.md +2 -1
- package/generated/.agdf/control/templates/AGDF_RUN.md +4 -3
- package/generated/.agdf/control/templates/RUN_STATE.md +2 -1
- package/generated/.agdf/control/templates/artefacts/BROWNFIELD_REVIEW.md +1 -1
- package/generated/.agdf/control/templates/artefacts/VERIFIED_CHANGE.md +48 -0
- package/generated/.github/skills/agdf-runtime-contract.md +24 -5
- package/generated/.opencode/AGDF.md +3 -3
- package/generated/.opencode/agdf-runtime-contract.md +24 -5
- package/generated/AGENTS.md +3 -3
- package/generated/plugins/agdf/.codex-plugin/plugin.json +2 -2
- package/generated/plugins/agdf/control/README.md +2 -1
- package/generated/plugins/agdf/control/templates/AGDF_RUN.md +4 -3
- package/generated/plugins/agdf/control/templates/RUN_STATE.md +2 -1
- package/generated/plugins/agdf/control/templates/artefacts/BROWNFIELD_REVIEW.md +1 -1
- package/generated/plugins/agdf/control/templates/artefacts/VERIFIED_CHANGE.md +48 -0
- package/generated/plugins/agdf/meta/agdf-agent-router.md +3 -3
- package/generated/plugins/agdf/meta/agdf-constitution.md +3 -3
- package/generated/plugins/agdf/meta/agdf-plugin.definition.json +2 -2
- package/generated/plugins/agdf/meta/agdf-runtime-contract.md +24 -5
- package/generated/plugins/agdf/meta/agdf-tenets.md +5 -0
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
# create-agdf
|
|
2
2
|
|
|
3
|
-
Bootstrap AGDF
|
|
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
|
-
|
|
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.
|
package/bin/create-agdf.js
CHANGED
|
@@ -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
|
|
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 =
|
|
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` |
|
package/generated/AGENTS.md
CHANGED
|
@@ -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.
|
|
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
|
-
"
|
|
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.
|
|
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
|
-
"
|
|
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.
|
|
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": [
|