create-agdf 0.8.6 → 0.8.7

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.
@@ -125,6 +125,17 @@ After each accepted gate approval is persisted, emit exactly one narration line
125
125
 
126
126
  When rendering the compact human Run Status Card, collapse internal sub-states (`verified_change` sub-states, `context_graph_required_action`, `multi_scope_state`) to stable human labels. `escalated`, `open_gap` and `blocked` remain explicitly visible. The full machine/audit projection retains all raw values unchanged. See the Runtime Contract §Internal-State Collapse for the complete mapping table.
127
127
 
128
+ ### On-Demand "Why?" Response
129
+
130
+ When the user asks "why?" or "Warum?" at any gate or internal step, respond with a `status` interaction (not `gate_approval`):
131
+
132
+ 1. Pull the curated rationale from `gateRationale()` in the resolved locale.
133
+ 2. Compose one fulfilled line from the selected run's Approvals table and artefact status.
134
+ 3. Compose one protects-against line from the gate's rationale and the existing `primary.actions` copy.
135
+ 4. Do not show approval controls. Do not advance any gate. Do not merge with the approval envelope.
136
+
137
+ The response is deterministic: same gate, same question, same answer. The `gate_approval` options remain exactly `approve | revise | decline | cancel`; no "why" option is added. See the Runtime Contract §Gate-Rationale-Registry and §On-Demand "Why?" Interaction for the full contract.
138
+
128
139
  ## Rules
129
140
  1. Fail closed when a required approval or artefact status is missing.
130
141
  2. The earliest blocking gate wins.
@@ -98,7 +98,12 @@
98
98
  "declineLabel": "Decline",
99
99
  "declineDescription": "Reject this gate deliberately; authority remains unchanged.",
100
100
  "cancelLabel": "Cancel",
101
- "cancelDescription": "Close this decision without approving or declining it."
101
+ "cancelDescription": "Close this decision without approving or declining it.",
102
+ "why": {
103
+ "label": "Why?",
104
+ "fulfilledPrefix": "Fulfilled:",
105
+ "protectsPrefix": "Protects against:"
106
+ }
102
107
  },
103
108
  "artefacts": {
104
109
  "notYetCreated": "not yet created"
@@ -156,6 +161,20 @@
156
161
  "UAT": { "agentNext": "Agent prepares the delivery report" }
157
162
  }
158
163
  }
164
+ },
165
+ "gateRationale": {
166
+ "UR": "UR clarifies what you want, why and for whom — before anything gets built that nobody needed.",
167
+ "PRD": "PRD defines product behavior before the solution design locks it in.",
168
+ "SD": "Solution design fixes ownership, architecture and dependencies — before code makes them permanent.",
169
+ "TP": "Task plan makes acceptance criteria and tests binding, so QA can measure later.",
170
+ "QA": "QA evaluates real evidence before a release relies on assumptions.",
171
+ "UAT": "UAT requires deliberate acceptance before the run counts as delivered.",
172
+ "Brownfield Review": "Checks whether existing systems, owners and conventions are affected, so nothing breaks or duplicates.",
173
+ "Mode/Slice Decision": "Decides the proportionate delivery scope, so the process fits the change — not the other way around.",
174
+ "Brownfield Analysis": "Verifies reuse paths, owners and regression risk before code exists.",
175
+ "CD+Tests": "Implementation and tests produce evidence — not just code.",
176
+ "CR": "Code review is mandatory before QA decides.",
177
+ "OR": "The delivery report makes the run auditable — not just claimed."
159
178
  }
160
179
  },
161
180
  "de": {
@@ -248,7 +267,12 @@
248
267
  "declineLabel": "Ablehnen",
249
268
  "declineDescription": "Dieses Gate bewusst ablehnen; die Berechtigung bleibt unverändert.",
250
269
  "cancelLabel": "Abbrechen",
251
- "cancelDescription": "Diese Entscheidung ohne Freigabe oder Ablehnung schließen."
270
+ "cancelDescription": "Diese Entscheidung ohne Freigabe oder Ablehnung schließen.",
271
+ "why": {
272
+ "label": "Warum?",
273
+ "fulfilledPrefix": "Erfüllt:",
274
+ "protectsPrefix": "Schützt vor:"
275
+ }
252
276
  },
253
277
  "artefacts": {
254
278
  "notYetCreated": "noch nicht erstellt"
@@ -306,6 +330,20 @@
306
330
  "UAT": { "agentNext": "Agent bereitet den Lieferbericht vor" }
307
331
  }
308
332
  }
333
+ },
334
+ "gateRationale": {
335
+ "UR": "UR klärt, was du willst, warum und für wen — bevor etwas gebaut wird, das niemand brauchte.",
336
+ "PRD": "PRD definiert das Produktverhalten, bevor das Lösungsdesign es zementiert.",
337
+ "SD": "Lösungsdesign legt Ownership, Architektur und Abhängigkeiten fest — bevor Code sie faktisch zementiert.",
338
+ "TP": "Taskplan macht Akzeptanzkriterien und Tests verbindlich, damit QA später messen kann.",
339
+ "QA": "QA bewertet die echten Nachweise, bevor eine Freigabe auf Vermutungen basiert.",
340
+ "UAT": "UAT verlangt eine bewusste Abnahme, bevor der Lauf als geliefert gilt.",
341
+ "Brownfield Review": "Prüft, ob bestehende Systeme, Owners und Konventionen betroffen sind, damit nichts kaputt geht oder doppelt entsteht.",
342
+ "Mode/Slice Decision": "Entscheidet den angemessenen Lieferumfang, damit der Prozess zur Veränderung passt — nicht umgekehrt.",
343
+ "Brownfield Analysis": "Verifiziert Wiederverwendung, Owners und Regressionstests, bevor Code existiert.",
344
+ "CD+Tests": "Implementierung und Tests liefern Nachweise — nicht nur Code.",
345
+ "CR": "Code-Review ist verpflichtend, bevor QA entscheidet.",
346
+ "OR": "Der Lieferbericht macht den Lauf auditierbar — nicht nur behauptet."
309
347
  }
310
348
  }
311
349
  }
@@ -545,6 +545,39 @@ fallback and human CLI output use the configured project chat language from
545
545
 
546
546
  The locale changes presentation only. It must not change gate meaning, option ordering, readiness, validation, revalidation or persistence. Host-provided free-text labels and skip actions are not AGDF-owned approval options and must never advance a gate.
547
547
 
548
+ ### Gate-Rationale-Registry
549
+
550
+ The locale registry contains a deterministic, localized `gateRationale` section with one
551
+ curated one-liner per gate and internal step. The agent retrieves rationale strings via
552
+ the `gateRationale()` function; it does not generate rationale prose. Rationale strings
553
+ are the same across invocations for the same gate and locale.
554
+
555
+ The registry covers all user gates (`UR`, `PRD`, `SD`, `TP`, `QA`, `UAT`) and all internal
556
+ steps (`Brownfield Review`, `Mode/Slice Decision`, `Brownfield Analysis`, `CD+Tests`, `CR`,
557
+ `OR`). Each string stays within the declared `lengthBudgets.description` budget. Key parity
558
+ across locale packs is enforced by the existing `validateLocaleRegistry` baseline
559
+ comparison.
560
+
561
+ A one-liner cannot explain the full protective function. The user needs enough to accept
562
+ that the gate makes sense, not the complete rationale. Deeper context is available on
563
+ demand through the "Why?" interaction.
564
+
565
+ ### On-Demand "Why?" Interaction
566
+
567
+ When the user asks "why?" at any gate or internal step, the agent responds with a `status`
568
+ interaction containing the curated rationale (Gate-Rationale-Registry) plus one line of
569
+ fulfilled/protects context composed from existing state.
570
+
571
+ - The response is deterministic, non-authorizing, and does not display approval controls.
572
+ - It is a separate `status` interaction, never merged with the `gate_approval` sequence.
573
+ - The `gate_approval` options remain exactly `approve | revise | decline | cancel`; no
574
+ "why" option is added.
575
+ - The response never breaks `APPROVAL_SEQUENCE` or `validateApprovalOrientationSnapshot`.
576
+ - Default output is unchanged when the user does not ask.
577
+ - The fulfilled line is composed from the selected run's Approvals table and artefact
578
+ status; the protects-against line is composed from the gate's rationale and existing
579
+ `primary.actions` copy. The agent does not generate new prose.
580
+
548
581
  ### Human Decision Presentation Contract
549
582
 
550
583
  The primary user surface is a pure projection of the selected canonical run.
@@ -98,7 +98,12 @@
98
98
  "declineLabel": "Decline",
99
99
  "declineDescription": "Reject this gate deliberately; authority remains unchanged.",
100
100
  "cancelLabel": "Cancel",
101
- "cancelDescription": "Close this decision without approving or declining it."
101
+ "cancelDescription": "Close this decision without approving or declining it.",
102
+ "why": {
103
+ "label": "Why?",
104
+ "fulfilledPrefix": "Fulfilled:",
105
+ "protectsPrefix": "Protects against:"
106
+ }
102
107
  },
103
108
  "artefacts": {
104
109
  "notYetCreated": "not yet created"
@@ -156,6 +161,20 @@
156
161
  "UAT": { "agentNext": "Agent prepares the delivery report" }
157
162
  }
158
163
  }
164
+ },
165
+ "gateRationale": {
166
+ "UR": "UR clarifies what you want, why and for whom — before anything gets built that nobody needed.",
167
+ "PRD": "PRD defines product behavior before the solution design locks it in.",
168
+ "SD": "Solution design fixes ownership, architecture and dependencies — before code makes them permanent.",
169
+ "TP": "Task plan makes acceptance criteria and tests binding, so QA can measure later.",
170
+ "QA": "QA evaluates real evidence before a release relies on assumptions.",
171
+ "UAT": "UAT requires deliberate acceptance before the run counts as delivered.",
172
+ "Brownfield Review": "Checks whether existing systems, owners and conventions are affected, so nothing breaks or duplicates.",
173
+ "Mode/Slice Decision": "Decides the proportionate delivery scope, so the process fits the change — not the other way around.",
174
+ "Brownfield Analysis": "Verifies reuse paths, owners and regression risk before code exists.",
175
+ "CD+Tests": "Implementation and tests produce evidence — not just code.",
176
+ "CR": "Code review is mandatory before QA decides.",
177
+ "OR": "The delivery report makes the run auditable — not just claimed."
159
178
  }
160
179
  },
161
180
  "de": {
@@ -248,7 +267,12 @@
248
267
  "declineLabel": "Ablehnen",
249
268
  "declineDescription": "Dieses Gate bewusst ablehnen; die Berechtigung bleibt unverändert.",
250
269
  "cancelLabel": "Abbrechen",
251
- "cancelDescription": "Diese Entscheidung ohne Freigabe oder Ablehnung schließen."
270
+ "cancelDescription": "Diese Entscheidung ohne Freigabe oder Ablehnung schließen.",
271
+ "why": {
272
+ "label": "Warum?",
273
+ "fulfilledPrefix": "Erfüllt:",
274
+ "protectsPrefix": "Schützt vor:"
275
+ }
252
276
  },
253
277
  "artefacts": {
254
278
  "notYetCreated": "noch nicht erstellt"
@@ -306,6 +330,20 @@
306
330
  "UAT": { "agentNext": "Agent bereitet den Lieferbericht vor" }
307
331
  }
308
332
  }
333
+ },
334
+ "gateRationale": {
335
+ "UR": "UR klärt, was du willst, warum und für wen — bevor etwas gebaut wird, das niemand brauchte.",
336
+ "PRD": "PRD definiert das Produktverhalten, bevor das Lösungsdesign es zementiert.",
337
+ "SD": "Lösungsdesign legt Ownership, Architektur und Abhängigkeiten fest — bevor Code sie faktisch zementiert.",
338
+ "TP": "Taskplan macht Akzeptanzkriterien und Tests verbindlich, damit QA später messen kann.",
339
+ "QA": "QA bewertet die echten Nachweise, bevor eine Freigabe auf Vermutungen basiert.",
340
+ "UAT": "UAT verlangt eine bewusste Abnahme, bevor der Lauf als geliefert gilt.",
341
+ "Brownfield Review": "Prüft, ob bestehende Systeme, Owners und Konventionen betroffen sind, damit nichts kaputt geht oder doppelt entsteht.",
342
+ "Mode/Slice Decision": "Entscheidet den angemessenen Lieferumfang, damit der Prozess zur Veränderung passt — nicht umgekehrt.",
343
+ "Brownfield Analysis": "Verifiziert Wiederverwendung, Owners und Regressionstests, bevor Code existiert.",
344
+ "CD+Tests": "Implementierung und Tests liefern Nachweise — nicht nur Code.",
345
+ "CR": "Code-Review ist verpflichtend, bevor QA entscheidet.",
346
+ "OR": "Der Lieferbericht macht den Lauf auditierbar — nicht nur behauptet."
309
347
  }
310
348
  }
311
349
  }
@@ -545,6 +545,39 @@ fallback and human CLI output use the configured project chat language from
545
545
 
546
546
  The locale changes presentation only. It must not change gate meaning, option ordering, readiness, validation, revalidation or persistence. Host-provided free-text labels and skip actions are not AGDF-owned approval options and must never advance a gate.
547
547
 
548
+ ### Gate-Rationale-Registry
549
+
550
+ The locale registry contains a deterministic, localized `gateRationale` section with one
551
+ curated one-liner per gate and internal step. The agent retrieves rationale strings via
552
+ the `gateRationale()` function; it does not generate rationale prose. Rationale strings
553
+ are the same across invocations for the same gate and locale.
554
+
555
+ The registry covers all user gates (`UR`, `PRD`, `SD`, `TP`, `QA`, `UAT`) and all internal
556
+ steps (`Brownfield Review`, `Mode/Slice Decision`, `Brownfield Analysis`, `CD+Tests`, `CR`,
557
+ `OR`). Each string stays within the declared `lengthBudgets.description` budget. Key parity
558
+ across locale packs is enforced by the existing `validateLocaleRegistry` baseline
559
+ comparison.
560
+
561
+ A one-liner cannot explain the full protective function. The user needs enough to accept
562
+ that the gate makes sense, not the complete rationale. Deeper context is available on
563
+ demand through the "Why?" interaction.
564
+
565
+ ### On-Demand "Why?" Interaction
566
+
567
+ When the user asks "why?" at any gate or internal step, the agent responds with a `status`
568
+ interaction containing the curated rationale (Gate-Rationale-Registry) plus one line of
569
+ fulfilled/protects context composed from existing state.
570
+
571
+ - The response is deterministic, non-authorizing, and does not display approval controls.
572
+ - It is a separate `status` interaction, never merged with the `gate_approval` sequence.
573
+ - The `gate_approval` options remain exactly `approve | revise | decline | cancel`; no
574
+ "why" option is added.
575
+ - The response never breaks `APPROVAL_SEQUENCE` or `validateApprovalOrientationSnapshot`.
576
+ - Default output is unchanged when the user does not ask.
577
+ - The fulfilled line is composed from the selected run's Approvals table and artefact
578
+ status; the protects-against line is composed from the gate's rationale and existing
579
+ `primary.actions` copy. The agent does not generate new prose.
580
+
548
581
  ### Human Decision Presentation Contract
549
582
 
550
583
  The primary user surface is a pure projection of the selected canonical run.
@@ -125,6 +125,17 @@ After each accepted gate approval is persisted, emit exactly one narration line
125
125
 
126
126
  When rendering the compact human Run Status Card, collapse internal sub-states (`verified_change` sub-states, `context_graph_required_action`, `multi_scope_state`) to stable human labels. `escalated`, `open_gap` and `blocked` remain explicitly visible. The full machine/audit projection retains all raw values unchanged. See the Runtime Contract §Internal-State Collapse for the complete mapping table.
127
127
 
128
+ ### On-Demand "Why?" Response
129
+
130
+ When the user asks "why?" or "Warum?" at any gate or internal step, respond with a `status` interaction (not `gate_approval`):
131
+
132
+ 1. Pull the curated rationale from `gateRationale()` in the resolved locale.
133
+ 2. Compose one fulfilled line from the selected run's Approvals table and artefact status.
134
+ 3. Compose one protects-against line from the gate's rationale and the existing `primary.actions` copy.
135
+ 4. Do not show approval controls. Do not advance any gate. Do not merge with the approval envelope.
136
+
137
+ The response is deterministic: same gate, same question, same answer. The `gate_approval` options remain exactly `approve | revise | decline | cancel`; no "why" option is added. See the Runtime Contract §Gate-Rationale-Registry and §On-Demand "Why?" Interaction for the full contract.
138
+
128
139
  ## Rules
129
140
  1. Fail closed when a required approval or artefact status is missing.
130
141
  2. The earliest blocking gate wins.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agdf",
3
- "version": "0.8.6",
3
+ "version": "0.8.7",
4
4
  "description": "Codex-first operating system for governed AI-assisted delivery.",
5
5
  "author": {
6
6
  "name": "Arndt Gold",
@@ -98,7 +98,12 @@
98
98
  "declineLabel": "Decline",
99
99
  "declineDescription": "Reject this gate deliberately; authority remains unchanged.",
100
100
  "cancelLabel": "Cancel",
101
- "cancelDescription": "Close this decision without approving or declining it."
101
+ "cancelDescription": "Close this decision without approving or declining it.",
102
+ "why": {
103
+ "label": "Why?",
104
+ "fulfilledPrefix": "Fulfilled:",
105
+ "protectsPrefix": "Protects against:"
106
+ }
102
107
  },
103
108
  "artefacts": {
104
109
  "notYetCreated": "not yet created"
@@ -156,6 +161,20 @@
156
161
  "UAT": { "agentNext": "Agent prepares the delivery report" }
157
162
  }
158
163
  }
164
+ },
165
+ "gateRationale": {
166
+ "UR": "UR clarifies what you want, why and for whom — before anything gets built that nobody needed.",
167
+ "PRD": "PRD defines product behavior before the solution design locks it in.",
168
+ "SD": "Solution design fixes ownership, architecture and dependencies — before code makes them permanent.",
169
+ "TP": "Task plan makes acceptance criteria and tests binding, so QA can measure later.",
170
+ "QA": "QA evaluates real evidence before a release relies on assumptions.",
171
+ "UAT": "UAT requires deliberate acceptance before the run counts as delivered.",
172
+ "Brownfield Review": "Checks whether existing systems, owners and conventions are affected, so nothing breaks or duplicates.",
173
+ "Mode/Slice Decision": "Decides the proportionate delivery scope, so the process fits the change — not the other way around.",
174
+ "Brownfield Analysis": "Verifies reuse paths, owners and regression risk before code exists.",
175
+ "CD+Tests": "Implementation and tests produce evidence — not just code.",
176
+ "CR": "Code review is mandatory before QA decides.",
177
+ "OR": "The delivery report makes the run auditable — not just claimed."
159
178
  }
160
179
  },
161
180
  "de": {
@@ -248,7 +267,12 @@
248
267
  "declineLabel": "Ablehnen",
249
268
  "declineDescription": "Dieses Gate bewusst ablehnen; die Berechtigung bleibt unverändert.",
250
269
  "cancelLabel": "Abbrechen",
251
- "cancelDescription": "Diese Entscheidung ohne Freigabe oder Ablehnung schließen."
270
+ "cancelDescription": "Diese Entscheidung ohne Freigabe oder Ablehnung schließen.",
271
+ "why": {
272
+ "label": "Warum?",
273
+ "fulfilledPrefix": "Erfüllt:",
274
+ "protectsPrefix": "Schützt vor:"
275
+ }
252
276
  },
253
277
  "artefacts": {
254
278
  "notYetCreated": "noch nicht erstellt"
@@ -306,6 +330,20 @@
306
330
  "UAT": { "agentNext": "Agent bereitet den Lieferbericht vor" }
307
331
  }
308
332
  }
333
+ },
334
+ "gateRationale": {
335
+ "UR": "UR klärt, was du willst, warum und für wen — bevor etwas gebaut wird, das niemand brauchte.",
336
+ "PRD": "PRD definiert das Produktverhalten, bevor das Lösungsdesign es zementiert.",
337
+ "SD": "Lösungsdesign legt Ownership, Architektur und Abhängigkeiten fest — bevor Code sie faktisch zementiert.",
338
+ "TP": "Taskplan macht Akzeptanzkriterien und Tests verbindlich, damit QA später messen kann.",
339
+ "QA": "QA bewertet die echten Nachweise, bevor eine Freigabe auf Vermutungen basiert.",
340
+ "UAT": "UAT verlangt eine bewusste Abnahme, bevor der Lauf als geliefert gilt.",
341
+ "Brownfield Review": "Prüft, ob bestehende Systeme, Owners und Konventionen betroffen sind, damit nichts kaputt geht oder doppelt entsteht.",
342
+ "Mode/Slice Decision": "Entscheidet den angemessenen Lieferumfang, damit der Prozess zur Veränderung passt — nicht umgekehrt.",
343
+ "Brownfield Analysis": "Verifiziert Wiederverwendung, Owners und Regressionstests, bevor Code existiert.",
344
+ "CD+Tests": "Implementierung und Tests liefern Nachweise — nicht nur Code.",
345
+ "CR": "Code-Review ist verpflichtend, bevor QA entscheidet.",
346
+ "OR": "Der Lieferbericht macht den Lauf auditierbar — nicht nur behauptet."
309
347
  }
310
348
  }
311
349
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "id": "agdf",
4
- "version": "0.8.6",
4
+ "version": "0.8.7",
5
5
  "displayName": "AI Governance & Delivery Framework",
6
6
  "developerName": "Arndt Gold",
7
7
  "description": "Codex-first operating system for governed AI-assisted delivery.",
@@ -545,6 +545,39 @@ fallback and human CLI output use the configured project chat language from
545
545
 
546
546
  The locale changes presentation only. It must not change gate meaning, option ordering, readiness, validation, revalidation or persistence. Host-provided free-text labels and skip actions are not AGDF-owned approval options and must never advance a gate.
547
547
 
548
+ ### Gate-Rationale-Registry
549
+
550
+ The locale registry contains a deterministic, localized `gateRationale` section with one
551
+ curated one-liner per gate and internal step. The agent retrieves rationale strings via
552
+ the `gateRationale()` function; it does not generate rationale prose. Rationale strings
553
+ are the same across invocations for the same gate and locale.
554
+
555
+ The registry covers all user gates (`UR`, `PRD`, `SD`, `TP`, `QA`, `UAT`) and all internal
556
+ steps (`Brownfield Review`, `Mode/Slice Decision`, `Brownfield Analysis`, `CD+Tests`, `CR`,
557
+ `OR`). Each string stays within the declared `lengthBudgets.description` budget. Key parity
558
+ across locale packs is enforced by the existing `validateLocaleRegistry` baseline
559
+ comparison.
560
+
561
+ A one-liner cannot explain the full protective function. The user needs enough to accept
562
+ that the gate makes sense, not the complete rationale. Deeper context is available on
563
+ demand through the "Why?" interaction.
564
+
565
+ ### On-Demand "Why?" Interaction
566
+
567
+ When the user asks "why?" at any gate or internal step, the agent responds with a `status`
568
+ interaction containing the curated rationale (Gate-Rationale-Registry) plus one line of
569
+ fulfilled/protects context composed from existing state.
570
+
571
+ - The response is deterministic, non-authorizing, and does not display approval controls.
572
+ - It is a separate `status` interaction, never merged with the `gate_approval` sequence.
573
+ - The `gate_approval` options remain exactly `approve | revise | decline | cancel`; no
574
+ "why" option is added.
575
+ - The response never breaks `APPROVAL_SEQUENCE` or `validateApprovalOrientationSnapshot`.
576
+ - Default output is unchanged when the user does not ask.
577
+ - The fulfilled line is composed from the selected run's Approvals table and artefact
578
+ status; the protects-against line is composed from the gate's rationale and existing
579
+ `primary.actions` copy. The agent does not generate new prose.
580
+
548
581
  ### Human Decision Presentation Contract
549
582
 
550
583
  The primary user surface is a pure projection of the selected canonical run.
@@ -125,6 +125,17 @@ After each accepted gate approval is persisted, emit exactly one narration line
125
125
 
126
126
  When rendering the compact human Run Status Card, collapse internal sub-states (`verified_change` sub-states, `context_graph_required_action`, `multi_scope_state`) to stable human labels. `escalated`, `open_gap` and `blocked` remain explicitly visible. The full machine/audit projection retains all raw values unchanged. See the Runtime Contract §Internal-State Collapse for the complete mapping table.
127
127
 
128
+ ### On-Demand "Why?" Response
129
+
130
+ When the user asks "why?" or "Warum?" at any gate or internal step, respond with a `status` interaction (not `gate_approval`):
131
+
132
+ 1. Pull the curated rationale from `gateRationale()` in the resolved locale.
133
+ 2. Compose one fulfilled line from the selected run's Approvals table and artefact status.
134
+ 3. Compose one protects-against line from the gate's rationale and the existing `primary.actions` copy.
135
+ 4. Do not show approval controls. Do not advance any gate. Do not merge with the approval envelope.
136
+
137
+ The response is deterministic: same gate, same question, same answer. The `gate_approval` options remain exactly `approve | revise | decline | cancel`; no "why" option is added. See the Runtime Contract §Gate-Rationale-Registry and §On-Demand "Why?" Interaction for the full contract.
138
+
128
139
  ## Rules
129
140
  1. Fail closed when a required approval or artefact status is missing.
130
141
  2. The earliest blocking gate wins.
@@ -64,7 +64,7 @@ export function validateLocaleRegistry(registry) {
64
64
  for (const [key, value] of visibleStrings(pack)) {
65
65
  if (!value.trim()) errors.push(`empty_copy:${locale}:${key}`);
66
66
  const budget = key.startsWith("gateTitles.") ? budgets.title
67
- : key.includes("Description") || key.includes("fallbackReasons") || key.startsWith("primary.actions.") || key.startsWith("primary.afterApproval.") || key.startsWith("primary.narration.") || key === "primary.quality"
67
+ : key.includes("Description") || key.includes("fallbackReasons") || key.startsWith("primary.actions.") || key.startsWith("primary.afterApproval.") || key.startsWith("primary.narration.") || key.startsWith("gateRationale.") || key.startsWith("interaction.why.") || key === "primary.quality"
68
68
  ? budgets.description
69
69
  : budgets.label;
70
70
  if (Number.isInteger(budget) && value.length > budget) errors.push(`length_budget:${locale}:${key}`);
@@ -97,6 +97,10 @@ export function gateTitle(registry, requestedLocale, gate) {
97
97
  return localePack(registry, requestedLocale).gateTitles[gate] || String(gate || "");
98
98
  }
99
99
 
100
+ export function gateRationale(registry, requestedLocale, gate) {
101
+ return localePack(registry, requestedLocale).gateRationale?.[gate] || String(gate || "");
102
+ }
103
+
100
104
  function stripMarkdown(value) {
101
105
  return String(value ?? "")
102
106
  .replace(/^#+\s*/, "")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-agdf",
3
- "version": "0.8.6",
3
+ "version": "0.8.7",
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": [