create-agdf 0.2.5 → 0.2.6

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
@@ -17,6 +17,9 @@ Optional flags:
17
17
 
18
18
  - `--dir <path>` write into a specific directory
19
19
  - `--force` overwrite existing generated files
20
+ - `--language <de|en>` or `--lang <de|en>` persist the preferred AGDF artefact and chat language
21
+
22
+ If no language is provided, `create-agdf` derives the preference from the local system locale (`LC_ALL`, `LC_MESSAGES`, `LANG`, `LANGUAGE` or the Node.js runtime locale) and falls back to `en`.
20
23
 
21
24
  ## Targets and existing AGENTS.md
22
25
 
@@ -51,6 +54,7 @@ This writes:
51
54
 
52
55
  - `.agdf/control/AGDF_RUN.md`
53
56
  - `.agdf/control/MASTER_BACKLOG.md`
57
+ - `.agdf/control/config.json`
54
58
  - `.agdf/control/templates/artefacts/UR.md`
55
59
  - `.agdf/control/templates/artefacts/PRD.md`
56
60
  - `.agdf/control/templates/artefacts/SD.md`
@@ -60,6 +64,8 @@ This writes:
60
64
  - `.agdf/control/CONTEXT_GRAPH.md`
61
65
  - `.agdf/control/AGENT_QUALITY_CONTRACTS.json`
62
66
 
67
+ `config.json` stores `artifact_language` and `chat_language` for governed work in the target repository. Runtime rules stay English so all AGDF surfaces share the same control contract.
68
+
63
69
  Use `doctor` to check whether the live control state is actionable:
64
70
 
65
71
  ```bash
@@ -128,17 +128,72 @@ Usage:
128
128
  Options:
129
129
  --dir <path> Write files into a specific directory
130
130
  --force Overwrite existing generated files
131
+ --language <de|en>
132
+ Set AGDF chat and artefact language. Defaults to detected system locale.
133
+ --lang <de|en> Alias for --language
131
134
  --json Print doctor, gate-check or delivery-map output as JSON
132
135
  --help Show this help
133
136
  `);
134
137
  }
135
138
 
139
+ function normalizeLanguage(value) {
140
+ const normalized = String(value ?? "").trim().toLowerCase().replace("_", "-");
141
+ if (!normalized) return "";
142
+ if (normalized.startsWith("de")) return "de";
143
+ if (normalized.startsWith("en")) return "en";
144
+ return "";
145
+ }
146
+
147
+ function detectSystemLocale() {
148
+ const envLocale = process.env.LC_ALL || process.env.LC_MESSAGES || process.env.LANG || process.env.LANGUAGE || "";
149
+ if (envLocale) return envLocale;
150
+ try {
151
+ return Intl.DateTimeFormat().resolvedOptions().locale || "";
152
+ } catch {
153
+ return "";
154
+ }
155
+ }
156
+
157
+ function resolveLanguagePreference(explicitLanguage) {
158
+ const explicit = normalizeLanguage(explicitLanguage);
159
+ if (explicit) {
160
+ return {
161
+ artifact_language: explicit,
162
+ chat_language: explicit,
163
+ runtime_language: "en",
164
+ source: "parameter",
165
+ detected_locale: detectSystemLocale() || "unknown",
166
+ };
167
+ }
168
+
169
+ const detectedLocale = detectSystemLocale();
170
+ const detected = normalizeLanguage(detectedLocale) || "en";
171
+ return {
172
+ artifact_language: detected,
173
+ chat_language: detected,
174
+ runtime_language: "en",
175
+ source: detectedLocale ? "system_locale" : "default",
176
+ detected_locale: detectedLocale || "unknown",
177
+ };
178
+ }
179
+
180
+ function languageConfigContent(languagePreference) {
181
+ return `${JSON.stringify({
182
+ artifact_language: languagePreference.artifact_language,
183
+ chat_language: languagePreference.chat_language,
184
+ runtime_language: languagePreference.runtime_language,
185
+ source: languagePreference.source,
186
+ detected_locale: languagePreference.detected_locale,
187
+ }, null, 2)}\n`;
188
+ }
189
+
136
190
  function parseArgs(argv) {
137
191
  const args = [...argv];
138
192
  let target;
139
193
  let dir = ".";
140
194
  let force = false;
141
195
  let json = false;
196
+ let language;
142
197
 
143
198
  for (let i = 0; i < args.length; i += 1) {
144
199
  const arg = args[i];
@@ -159,6 +214,22 @@ function parseArgs(argv) {
159
214
  continue;
160
215
  }
161
216
 
217
+ if (arg === "--language" || arg === "--lang") {
218
+ const next = args[i + 1];
219
+ if (!next) {
220
+ console.error(`Missing value for ${arg}`);
221
+ process.exit(1);
222
+ }
223
+ const normalized = normalizeLanguage(next);
224
+ if (!normalized) {
225
+ console.error("Unsupported language. Use --language de or --language en.");
226
+ process.exit(1);
227
+ }
228
+ language = normalized;
229
+ i += 1;
230
+ continue;
231
+ }
232
+
162
233
  if (arg === "--dir") {
163
234
  const next = args[i + 1];
164
235
  if (!next) {
@@ -201,6 +272,7 @@ function parseArgs(argv) {
201
272
  dir: resolve(process.cwd(), dir),
202
273
  force,
203
274
  json,
275
+ language: resolveLanguagePreference(language),
204
276
  };
205
277
  }
206
278
 
@@ -219,10 +291,18 @@ function writeGeneratedFile(targetDir, relativePath, content, force) {
219
291
  writeFileSync(outputPath, content, "utf8");
220
292
  }
221
293
 
222
- function generatedFilesForTarget(target, targetDir, force) {
294
+ function addLanguageConfig(files, languagePreference) {
295
+ files.push({
296
+ path: join(".agdf", "control", "config.json"),
297
+ content: languageConfigContent(languagePreference),
298
+ });
299
+ }
300
+
301
+ function generatedFilesForTarget(target, targetDir, force, languagePreference) {
223
302
  const files = [];
224
303
 
225
304
  if (target === "init") {
305
+ addLanguageConfig(files, languagePreference);
226
306
  files.push({
227
307
  path: join(".agdf", "control", "README.md"),
228
308
  content: loadAsset(join(".agdf", "control", "README.md")),
@@ -246,6 +326,7 @@ function generatedFilesForTarget(target, targetDir, force) {
246
326
  }
247
327
 
248
328
  if (target === "codex" || target === "both") {
329
+ addLanguageConfig(files, languagePreference);
249
330
  for (const codexPath of codexPluginFiles) {
250
331
  files.push({
251
332
  path: codexPath,
@@ -255,6 +336,7 @@ function generatedFilesForTarget(target, targetDir, force) {
255
336
  }
256
337
 
257
338
  if (target === "copilot" || target === "both") {
339
+ if (target !== "both") addLanguageConfig(files, languagePreference);
258
340
  const agentsTargetPath = existsSync(join(targetDir, "AGENTS.md")) && !force ? agdfFragmentPath : "AGENTS.md";
259
341
  files.push({
260
342
  path: agentsTargetPath,
@@ -297,6 +379,11 @@ function printNextSteps(target, destination, files, wroteAgentsFragment) {
297
379
 
298
380
  console.log("");
299
381
  console.log("Next steps:");
382
+ const languageConfig = files.find((file) => file.path === join(".agdf", "control", "config.json"));
383
+ if (languageConfig) {
384
+ const language = JSON.parse(languageConfig.content);
385
+ console.log(`- AGDF language preference: artefacts=${language.artifact_language}, chat=${language.chat_language}, runtime=${language.runtime_language}.`);
386
+ }
300
387
  if (target === "init") {
301
388
  console.log("- Fill .agdf/control/AGDF_RUN.md with the current gate, evidence and next allowed action.");
302
389
  console.log("- Run npm create agdf@latest doctor to check the control state before the next agent run.");
@@ -1026,18 +1113,33 @@ function evaluateGateCheck(targetDir) {
1026
1113
  ? transitionDecision.next_allowed_action
1027
1114
  : runState.next_allowed_action;
1028
1115
 
1029
- if (doctorBlocker) {
1116
+ if (doctorBlocker?.code === "AGDF_CONTROL_FILE_MISSING") {
1117
+ status = "blocked";
1118
+ blockingReason = doctorBlocker.code;
1119
+ currentGate = "UR";
1120
+ missingApproval = "Approval: UR";
1121
+ allowed = [
1122
+ "initialize the AGDF control scaffold with npm create agdf@latest init",
1123
+ "draft and persist the minimal UR for the requested change",
1124
+ "link the UR from AGDF_RUN.md and MASTER_BACKLOG.md",
1125
+ "request exact approval: Approval: UR",
1126
+ ];
1127
+ forbidden = ["create PRD", "create SD", "create TP", "run Brownfield Analysis", "implement code", "claim QA or release readiness"];
1128
+ nextAllowedAction = "Initialize .agdf/control, draft the minimal UR for the request, then ask for exact approval: Approval: UR.";
1129
+ } else if (doctorBlocker) {
1030
1130
  status = "blocked";
1031
1131
  blockingReason = doctorBlocker.code;
1032
- allowed = ["repair the AGDF control scaffold", "run doctor again"];
1033
- forbidden = ["continue governed delivery", "create later-gate artefacts", "implement gated work"];
1132
+ allowed = ["repair the AGDF control scaffold", ...transitionDecision.allowed, "run doctor again"];
1133
+ forbidden = ["create later-gate artefacts beyond the current allowed gate", "implement gated work", "claim QA or release readiness"];
1034
1134
  nextAllowedAction = doctorBlocker.next_step;
1035
1135
  } else if (doctorRevise) {
1036
1136
  status = "blocked";
1037
1137
  blockingReason = doctorRevise.code;
1038
- allowed = [...new Set(["repair the incomplete control state", ...transitionDecision.allowed, "run doctor again"])];
1039
- forbidden = ["continue governed delivery", "create later-gate artefacts", "implement gated work"];
1040
- nextAllowedAction = doctorRevise.next_step;
1138
+ allowed = [...new Set(["complete the current control-state fields", ...transitionDecision.allowed, "run doctor again"])];
1139
+ forbidden = ["create later-gate artefacts beyond the current allowed gate", "implement gated work before the gate allows it", "claim QA or release readiness"];
1140
+ nextAllowedAction = transitionDecision.current_gate === "UR"
1141
+ ? "Fill the current UR control state, persist the UR draft, and request exact approval: Approval: UR."
1142
+ : doctorRevise.next_step;
1041
1143
  }
1042
1144
 
1043
1145
  return {
@@ -1183,7 +1285,7 @@ function main() {
1183
1285
  process.exit(report.status === "block" ? 2 : 0);
1184
1286
  }
1185
1287
 
1186
- const files = generatedFilesForTarget(options.target, options.dir, options.force);
1288
+ const files = generatedFilesForTarget(options.target, options.dir, options.force, options.language);
1187
1289
  const wroteAgentsFragment = files.some(file => file.path === agdfFragmentPath);
1188
1290
 
1189
1291
  try {
@@ -8,6 +8,7 @@ Use this scaffold when a target repository should keep AGDF state outside chat h
8
8
 
9
9
  | File | Purpose |
10
10
  |---|---|
11
+ | `config.json` | Project language preference for generated AGDF artefacts and user-facing chat |
11
12
  | `templates/AGDF_RUN.md` | Template for current run state: mode, gate, approvals, evidence, risks, next allowed action |
12
13
  | `templates/MASTER_BACKLOG.md` | Template for the living backlog pointer: active initiatives and current UR/Brownfield/PRD/SD/TP/QA/OR artefacts |
13
14
  | `templates/artefacts/UR.md` | Template for the durable user requirement artefact of a work item |
@@ -26,6 +27,7 @@ Use this scaffold when a target repository should keep AGDF state outside chat h
26
27
  ```text
27
28
  .agdf/
28
29
  control/
30
+ config.json
29
31
  AGDF_RUN.md
30
32
  MASTER_BACKLOG.md
31
33
  artefacts/
@@ -64,6 +66,7 @@ npm create agdf@latest gate-check --json
64
66
  ## Operating Rules
65
67
 
66
68
  - `AGDF_RUN.md` is the current run dashboard.
69
+ - `config.json` stores the project preference for artefact and chat language; runtime rules stay English.
67
70
  - `MASTER_BACKLOG.md` points to active delivery work; detailed artefacts live beside the work item.
68
71
  - Brownfield Review records the post-UR Mode/Slice Decision before PRD depth or Quick Task execution is chosen.
69
72
  - 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.
@@ -61,6 +61,7 @@ The CLI reports are validators and JSON evidence, not the primary user experienc
61
61
  12. Approval text and durable artefact presence are separate requirements for UR, PRD, SD, TP and QA report decisions. Approval text without the corresponding persisted or linked artefact keeps the current gate at that gate.
62
62
  13. After Brownfield Review, decide the process size before drafting PRD or implementing: `quick_task | structured_slice | structured_delivery | block`.
63
63
  14. The Mode/Slice Decision must be visible and evidenced before any Quick Task execution, PRD shortcut or implementation. A decision value without scope reason and evidence is still missing.
64
+ 15. Missing or incomplete control state must not push work back to the user. If the next allowed step is an artefact draft, the agent may initialize the scaffold, draft the current allowed artefact, link it, and then request the exact approval. Implementation remains forbidden.
64
65
 
65
66
  ## Gate Evaluation
66
67
 
@@ -107,6 +108,7 @@ If a status is not explicit, do not assume it is satisfied.
107
108
  8. Treat a generic "start", "continue" or "leg los" request as a request to perform only the current next allowed action.
108
109
  9. After Brownfield Review, choose the smallest safe process path before creating later artefacts.
109
110
  10. If the selected path is not visibly recorded with scope reason and evidence, keep the run at `Mode/Slice Decision`.
111
+ 11. When `.agdf/control/` is missing or incomplete, make the next allowed artefact action explicit. For a fresh request, that means initialize control state, draft the minimal UR, then request `Approval: UR`.
110
112
 
111
113
  ## Output
112
114
  Keep the result short and operational:
@@ -25,6 +25,8 @@ Use this compact output shape when no formal gate artefact is required:
25
25
  - `risk`: remaining risk or `none`
26
26
  - `next_step`: the single next useful action or `none`
27
27
 
28
+ Do not add a separate `Quality outlook` line for pure Quick Tasks unless the task became a relevant run.
29
+
28
30
  ## Relevant Run
29
31
 
30
32
  A relevant run is any run that changes durable state, creates or updates an AGDF artefact, changes code or runtime behaviour, performs a gate decision, blocks on a governance condition, produces QA/UAT/release evidence, or closes a delivery slice.
@@ -43,6 +45,7 @@ When in doubt, use a short OR-lite only if it clarifies gate state, evidence, ri
43
45
  - For UR, PRD, SD, TP and QA, approval and durable artefact presence are separate requirements. A gate is not satisfied by approval text alone when its artefact is missing from `.agdf/control/` or not linked to the authoritative repository SoT.
44
46
  - Approval of one user gate permits work on the next allowed gate artefact or required internal step only. It does not permit implementation unless the approved gate is `TP` and required internal implementation prerequisites are satisfied.
45
47
  - Gates must never be skipped or inferred from urgency, tone, chat history, task wording or an instruction to "start". The next allowed action is always the next unsatisfied gate or internal mandatory step.
48
+ - Missing control files or missing current-state fields do not forbid the agent from preparing the current allowed artefact. They forbid later-gate work and implementation. For a fresh request, the allowed work is to initialize `.agdf/control/`, draft the minimal UR, link it, and request `Approval: UR`.
46
49
  - `Approval: UR` permits Brownfield Review after G-00 first, then a Mode/Slice Decision. It never permits implementation by itself.
47
50
  - PRD, SD and TP depth is chosen after Brownfield Review through the Mode/Slice Decision, not before existing-system impact is understood.
48
51
  - The Mode/Slice Decision must be visible before any PRD shortcut, Quick Task execution or implementation: record the decision, required next gate, scope reason and evidence in `AGDF_RUN.md` or an equivalent linked control artefact.
@@ -137,6 +140,7 @@ Do not create a new node for a mere version, a general chat summary, or a local
137
140
 
138
141
  When a repository needs durable AGDF state, use the plugin-local `control/` scaffold as the starting point.
139
142
 
143
+ - `config.json` stores project language preferences. Use `artifact_language` for generated AGDF artefacts and `chat_language` for user-facing responses unless the user explicitly asks otherwise. Runtime rules remain English.
140
144
  - `AGDF_RUN.md` is the current run dashboard.
141
145
  - `MASTER_BACKLOG.md` is the living pointer for active delivery work.
142
146
  - `BROWNFIELD_REVIEW.md` records the post-UR existing-system view and Mode/Slice Decision before PRD depth or Quick Task execution is chosen.
@@ -76,7 +76,14 @@ AGDF is a native agent workflow first: read the live control state, apply the ac
76
76
  Use `doctor`, `gate-check --json` or `delivery-map --json` as validators when a machine-readable proof is useful, not as a substitute for the router or skills.
77
77
 
78
78
  ## Closeout
79
- After relevant code, documentation, skill or governance changes:
79
+ For Quick Task Mode, close with the Runtime Contract mini-output only:
80
+
81
+ - `result`
82
+ - `evidence`
83
+ - `risk`
84
+ - `next_step`
85
+
86
+ For relevant runs that change durable state, code, artefacts or gate status:
80
87
 
81
88
  - run relevant checks or state the test gap
82
89
  - never commit, push or open a PR automatically
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agdf",
3
- "version": "0.2.5",
3
+ "version": "0.2.6",
4
4
  "description": "Codex-first workflow skills for gated, auditable AI-assisted software delivery.",
5
5
  "author": {
6
6
  "name": "AI-native Governance & Delivery Framework",
@@ -8,6 +8,7 @@ Use this scaffold when a target repository should keep AGDF state outside chat h
8
8
 
9
9
  | File | Purpose |
10
10
  |---|---|
11
+ | `config.json` | Project language preference for generated AGDF artefacts and user-facing chat |
11
12
  | `templates/AGDF_RUN.md` | Template for current run state: mode, gate, approvals, evidence, risks, next allowed action |
12
13
  | `templates/MASTER_BACKLOG.md` | Template for the living backlog pointer: active initiatives and current UR/Brownfield/PRD/SD/TP/QA/OR artefacts |
13
14
  | `templates/artefacts/UR.md` | Template for the durable user requirement artefact of a work item |
@@ -26,6 +27,7 @@ Use this scaffold when a target repository should keep AGDF state outside chat h
26
27
  ```text
27
28
  .agdf/
28
29
  control/
30
+ config.json
29
31
  AGDF_RUN.md
30
32
  MASTER_BACKLOG.md
31
33
  artefacts/
@@ -64,6 +66,7 @@ npm create agdf@latest gate-check --json
64
66
  ## Operating Rules
65
67
 
66
68
  - `AGDF_RUN.md` is the current run dashboard.
69
+ - `config.json` stores the project preference for artefact and chat language; runtime rules stay English.
67
70
  - `MASTER_BACKLOG.md` points to active delivery work; detailed artefacts live beside the work item.
68
71
  - Brownfield Review records the post-UR Mode/Slice Decision before PRD depth or Quick Task execution is chosen.
69
72
  - 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.
@@ -77,7 +77,14 @@ AGDF is a native agent workflow first: read the live control state, apply the ac
77
77
  Use `doctor`, `gate-check --json` or `delivery-map --json` as validators when a machine-readable proof is useful, not as a substitute for the router or skills.
78
78
 
79
79
  ## Closeout
80
- After relevant code, documentation, skill or governance changes:
80
+ For Quick Task Mode, close with the Runtime Contract mini-output only:
81
+
82
+ - `result`
83
+ - `evidence`
84
+ - `risk`
85
+ - `next_step`
86
+
87
+ For relevant runs that change durable state, code, artefacts or gate status:
81
88
 
82
89
  - run relevant checks or state the test gap
83
90
  - never commit, push or open a PR automatically
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "id": "agdf",
4
- "version": "0.2.5",
4
+ "version": "0.2.6",
5
5
  "displayName": "AI Governance & Delivery Framework",
6
6
  "developerName": "AI-native Governance & Delivery Framework",
7
7
  "description": "Codex-first workflow skills for gated, auditable AI-assisted software delivery.",
@@ -25,6 +25,8 @@ Use this compact output shape when no formal gate artefact is required:
25
25
  - `risk`: remaining risk or `none`
26
26
  - `next_step`: the single next useful action or `none`
27
27
 
28
+ Do not add a separate `Quality outlook` line for pure Quick Tasks unless the task became a relevant run.
29
+
28
30
  ## Relevant Run
29
31
 
30
32
  A relevant run is any run that changes durable state, creates or updates an AGDF artefact, changes code or runtime behaviour, performs a gate decision, blocks on a governance condition, produces QA/UAT/release evidence, or closes a delivery slice.
@@ -43,6 +45,7 @@ When in doubt, use a short OR-lite only if it clarifies gate state, evidence, ri
43
45
  - For UR, PRD, SD, TP and QA, approval and durable artefact presence are separate requirements. A gate is not satisfied by approval text alone when its artefact is missing from `.agdf/control/` or not linked to the authoritative repository SoT.
44
46
  - Approval of one user gate permits work on the next allowed gate artefact or required internal step only. It does not permit implementation unless the approved gate is `TP` and required internal implementation prerequisites are satisfied.
45
47
  - Gates must never be skipped or inferred from urgency, tone, chat history, task wording or an instruction to "start". The next allowed action is always the next unsatisfied gate or internal mandatory step.
48
+ - Missing control files or missing current-state fields do not forbid the agent from preparing the current allowed artefact. They forbid later-gate work and implementation. For a fresh request, the allowed work is to initialize `.agdf/control/`, draft the minimal UR, link it, and request `Approval: UR`.
46
49
  - `Approval: UR` permits Brownfield Review after G-00 first, then a Mode/Slice Decision. It never permits implementation by itself.
47
50
  - PRD, SD and TP depth is chosen after Brownfield Review through the Mode/Slice Decision, not before existing-system impact is understood.
48
51
  - The Mode/Slice Decision must be visible before any PRD shortcut, Quick Task execution or implementation: record the decision, required next gate, scope reason and evidence in `AGDF_RUN.md` or an equivalent linked control artefact.
@@ -137,6 +140,7 @@ Do not create a new node for a mere version, a general chat summary, or a local
137
140
 
138
141
  When a repository needs durable AGDF state, use the plugin-local `control/` scaffold as the starting point.
139
142
 
143
+ - `config.json` stores project language preferences. Use `artifact_language` for generated AGDF artefacts and `chat_language` for user-facing responses unless the user explicitly asks otherwise. Runtime rules remain English.
140
144
  - `AGDF_RUN.md` is the current run dashboard.
141
145
  - `MASTER_BACKLOG.md` is the living pointer for active delivery work.
142
146
  - `BROWNFIELD_REVIEW.md` records the post-UR existing-system view and Mode/Slice Decision before PRD depth or Quick Task execution is chosen.
@@ -61,6 +61,7 @@ The CLI reports are validators and JSON evidence, not the primary user experienc
61
61
  12. Approval text and durable artefact presence are separate requirements for UR, PRD, SD, TP and QA report decisions. Approval text without the corresponding persisted or linked artefact keeps the current gate at that gate.
62
62
  13. After Brownfield Review, decide the process size before drafting PRD or implementing: `quick_task | structured_slice | structured_delivery | block`.
63
63
  14. The Mode/Slice Decision must be visible and evidenced before any Quick Task execution, PRD shortcut or implementation. A decision value without scope reason and evidence is still missing.
64
+ 15. Missing or incomplete control state must not push work back to the user. If the next allowed step is an artefact draft, the agent may initialize the scaffold, draft the current allowed artefact, link it, and then request the exact approval. Implementation remains forbidden.
64
65
 
65
66
  ## Gate Evaluation
66
67
 
@@ -107,6 +108,7 @@ If a status is not explicit, do not assume it is satisfied.
107
108
  8. Treat a generic "start", "continue" or "leg los" request as a request to perform only the current next allowed action.
108
109
  9. After Brownfield Review, choose the smallest safe process path before creating later artefacts.
109
110
  10. If the selected path is not visibly recorded with scope reason and evidence, keep the run at `Mode/Slice Decision`.
111
+ 11. When `.agdf/control/` is missing or incomplete, make the next allowed artefact action explicit. For a fresh request, that means initialize control state, draft the minimal UR, then request `Approval: UR`.
110
112
 
111
113
  ## Output
112
114
  Keep the result short and operational:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-agdf",
3
- "version": "0.2.5",
3
+ "version": "0.2.6",
4
4
  "description": "Bootstrap AGDF repository-local plugin files, Copilot instructions, skills, control files and machine-readable checks.",
5
5
  "type": "module",
6
6
  "files": [