create-agdf 0.8.6 → 0.8.9
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/bin/create-agdf.js +24 -6
- package/generated/.github/skills/agdf-clean-implementation-review/SKILL.md +5 -0
- package/generated/.github/skills/agdf-code-review/SKILL.md +5 -0
- package/generated/.github/skills/agdf-gate-check/SKILL.md +15 -3
- package/generated/.github/skills/agdf-interaction-locales.json +40 -2
- package/generated/.github/skills/agdf-qa-gate/SKILL.md +6 -0
- package/generated/.github/skills/agdf-runtime-contract.md +73 -1
- package/generated/.github/skills/agdf-task-plan-review/SKILL.md +5 -0
- package/generated/.opencode/agdf-interaction-locales.json +40 -2
- package/generated/.opencode/agdf-runtime-contract.md +73 -1
- package/generated/.opencode/skills/agdf-clean-implementation-review/SKILL.md +5 -0
- package/generated/.opencode/skills/agdf-code-review/SKILL.md +5 -0
- package/generated/.opencode/skills/agdf-gate-check/SKILL.md +15 -3
- package/generated/.opencode/skills/agdf-qa-gate/SKILL.md +6 -0
- package/generated/.opencode/skills/agdf-task-plan-review/SKILL.md +5 -0
- package/generated/plugins/agdf/.codex-plugin/plugin.json +1 -1
- package/generated/plugins/agdf/meta/agdf-interaction-locales.json +40 -2
- package/generated/plugins/agdf/meta/agdf-plugin.definition.json +1 -1
- package/generated/plugins/agdf/meta/agdf-runtime-contract.md +73 -1
- package/generated/plugins/agdf/skills/clean-implementation-review/SKILL.md +5 -0
- package/generated/plugins/agdf/skills/code-review/SKILL.md +5 -0
- package/generated/plugins/agdf/skills/gate-check/SKILL.md +15 -3
- package/generated/plugins/agdf/skills/qa-gate/SKILL.md +6 -0
- package/generated/plugins/agdf/skills/task-plan-review/SKILL.md +5 -0
- package/lib/interaction-presentation.js +5 -1
- package/package.json +1 -1
package/bin/create-agdf.js
CHANGED
|
@@ -1531,6 +1531,13 @@ function filled(value) {
|
|
|
1531
1531
|
return Boolean(value && !isPlaceholderValue(value) && value.trim() !== "");
|
|
1532
1532
|
}
|
|
1533
1533
|
|
|
1534
|
+
function runSelectionRecovery(target) {
|
|
1535
|
+
const directSelection = "Pass --run <run_id> or set AGDF_RUN_ID to select the intended run";
|
|
1536
|
+
return ["doctor", "delivery-map"].includes(target)
|
|
1537
|
+
? `${directSelection}, or use --all-active to evaluate every active run independently.`
|
|
1538
|
+
: `${directSelection}.`;
|
|
1539
|
+
}
|
|
1540
|
+
|
|
1534
1541
|
function parseQualityContracts(content) {
|
|
1535
1542
|
const parsed = JSON.parse(content);
|
|
1536
1543
|
if (!Array.isArray(parsed.contracts) || parsed.contracts.length === 0) {
|
|
@@ -1627,7 +1634,7 @@ function evaluateDoctor(targetDir, selection = {}) {
|
|
|
1627
1634
|
selectedRunState.resolution_error.split(":")[0] || "AGDF_ACTIVE_RUN_UNRESOLVED",
|
|
1628
1635
|
`Run selection failed: ${selectedRunState.resolution_error}`,
|
|
1629
1636
|
runPath,
|
|
1630
|
-
|
|
1637
|
+
runSelectionRecovery(selection.target),
|
|
1631
1638
|
);
|
|
1632
1639
|
} else {
|
|
1633
1640
|
const currentGateLine = run.match(/^- current_gate:[^\S\r\n]*(.*)$/m)?.[1]?.trim() ?? "";
|
|
@@ -2344,6 +2351,12 @@ const BREADCRUMB_PATH_TEMPLATES = {
|
|
|
2344
2351
|
|
|
2345
2352
|
const BREADCRUMB_STANDARD_GATES = ["UR", "PRD", "SD", "TP", "QA", "UAT"];
|
|
2346
2353
|
|
|
2354
|
+
function isReadyUserGateApproval({ status, currentGate, missingApproval }) {
|
|
2355
|
+
return status === "open"
|
|
2356
|
+
&& BREADCRUMB_STANDARD_GATES.includes(currentGate)
|
|
2357
|
+
&& missingApproval === `Approval: ${currentGate}`;
|
|
2358
|
+
}
|
|
2359
|
+
|
|
2347
2360
|
function buildBreadcrumbPath(modeSliceDecision, currentGate, runState) {
|
|
2348
2361
|
const gates = BREADCRUMB_PATH_TEMPLATES[modeSliceDecision] ?? ["UR"];
|
|
2349
2362
|
return gates.map((gate) => {
|
|
@@ -2381,7 +2394,7 @@ function buildStatusCard({
|
|
|
2381
2394
|
}) {
|
|
2382
2395
|
const qualityOutlook = deriveQualityOutlook(runState, findings);
|
|
2383
2396
|
const postApproval = postApprovalTransition(missingApproval);
|
|
2384
|
-
const isUserGateApproval = missingApproval
|
|
2397
|
+
const isUserGateApproval = isReadyUserGateApproval({ status, currentGate, missingApproval });
|
|
2385
2398
|
const lifecycle = extractField(runState.content ?? "", "lifecycle") || "unknown";
|
|
2386
2399
|
const nativeAttemptRequired = false;
|
|
2387
2400
|
const interactionKind = status === "open" && isUserGateApproval ? "gate_approval" : status === "blocked" ? "blocked" : "status";
|
|
@@ -2529,9 +2542,9 @@ function transitionDecisionForRunState(runState, verifiedChange = null) {
|
|
|
2529
2542
|
|
|
2530
2543
|
if (!isGateSatisfied(runState, "UR")) {
|
|
2531
2544
|
return {
|
|
2532
|
-
status: "
|
|
2545
|
+
status: "open",
|
|
2533
2546
|
current_gate: "UR",
|
|
2534
|
-
blocking_reason: "
|
|
2547
|
+
blocking_reason: "none",
|
|
2535
2548
|
missing_approval: "Approval: UR",
|
|
2536
2549
|
allowed: ["clarify user need", "formulate and persist UR", "record evidence", "request exact UR approval"],
|
|
2537
2550
|
forbidden: ["create PRD", "create SD", "create TP", "run Brownfield Analysis", "implement code", "claim QA or release readiness"],
|
|
@@ -2847,7 +2860,7 @@ function evaluateGateCheck(targetDir, selection = {}) {
|
|
|
2847
2860
|
enumerable: false,
|
|
2848
2861
|
});
|
|
2849
2862
|
attachApprovalOrientationSnapshot(statusCard, {
|
|
2850
|
-
ready: status
|
|
2863
|
+
ready: isReadyUserGateApproval({ status, currentGate, missingApproval }),
|
|
2851
2864
|
humanPresentation,
|
|
2852
2865
|
revisionId: extractField(runState.content ?? "", "revision_id"),
|
|
2853
2866
|
registry: interactionLocales,
|
|
@@ -3280,4 +3293,9 @@ async function main() {
|
|
|
3280
3293
|
printNextSteps(options.target, options.dir, files, wroteAgentsFragment, wroteOpenCodeConfigFragment, removedOpenCodeAgents);
|
|
3281
3294
|
}
|
|
3282
3295
|
|
|
3283
|
-
|
|
3296
|
+
try {
|
|
3297
|
+
await main();
|
|
3298
|
+
} catch (error) {
|
|
3299
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
3300
|
+
process.exitCode = 1;
|
|
3301
|
+
}
|
|
@@ -91,6 +91,11 @@ Use this compact structure:
|
|
|
91
91
|
- `revise`: solution works but contains avoidable fallback, unclear ownership, or missing evidence.
|
|
92
92
|
- `block`: solution creates a second SoT, a second owner, unbounded fallback, or masks unresolved product semantics.
|
|
93
93
|
|
|
94
|
+
### Compact Chat Output
|
|
95
|
+
|
|
96
|
+
At `pass`: one line — `Clean Review: pass — <one-line summary>`.
|
|
97
|
+
At `revise`/`block`: show the specific fallback/workaround/parallel-structure risk with file references.
|
|
98
|
+
|
|
94
99
|
## Forbidden
|
|
95
100
|
This skill must not:
|
|
96
101
|
|
|
@@ -84,6 +84,11 @@ Use this compact structure:
|
|
|
84
84
|
- `block`: a hard defect, security risk, data-integrity risk, or unresolved critical uncertainty remains.
|
|
85
85
|
- `not_applicable`: no code changes were present for review.
|
|
86
86
|
|
|
87
|
+
### Compact Chat Output
|
|
88
|
+
|
|
89
|
+
At `pass`: one line — `Code Review: pass — <one-line summary>`.
|
|
90
|
+
At `revise`/`block`: show blocking findings with file references. Full report remains in durable file or inline evidence as specified.
|
|
91
|
+
|
|
87
92
|
## Forbidden
|
|
88
93
|
This skill must not:
|
|
89
94
|
|
|
@@ -69,7 +69,7 @@ For a ready `gate_approval`:
|
|
|
69
69
|
7. Distinguish internal process steps from user decisions in natural language. For example, after `Approval: TP`, say that pre-implementation Brownfield Analysis runs next and that no further user action is required now; do not expose `next_user_gate: none` or `user_action_required: no`, and do not ask for a second approval for Brownfield Analysis.
|
|
70
70
|
8. Ask exactly one question that names the selected `run_id` and `current_gate`.
|
|
71
71
|
9. Offer options in stable order: exact `Approval: <GateName>`, localized revise and localized decline. Add explicit cancel only where supported after decline; otherwise host dismissal maps to cancel. Never preselect, skip, auto-submit or reorder an option.
|
|
72
|
-
10. Use the surface adapter declared in the canonical plugin definition only when it can wait for deliberate input without auto-resolution
|
|
72
|
+
10. Use the surface adapter declared in the canonical plugin definition only when it can wait for deliberate input without auto-resolution and can transport `exact_option_value` or `separate_label_and_value`; never invoke a `decorated_label_only` adapter. Otherwise request the same exact approval in concise text.
|
|
73
73
|
11. Render both cards once in that single complete assistant message. Never merge, reverse, omit or duplicate them; the action heading does not replace either card. If the native attempt is unavailable or not applied, continue to exact text without repeating either card.
|
|
74
74
|
12. Re-run gate evaluation for the same run and expected gate after the response and immediately before persistence.
|
|
75
75
|
13. Reject a missing artefact, ambiguous or wrong run, wrong gate, stale expected gate, timeout/default, hook-supplied answer, agent message, technical permission outcome or plan approval.
|
|
@@ -88,7 +88,7 @@ For the transition card, use the complete resolved locale pack. The initial Germ
|
|
|
88
88
|
|
|
89
89
|
The primary option is derived exactly as `Approval: <GateName>` from the evaluated current gate; only explanatory copy and non-authoritative outcome labels are localized. Concrete localized copy belongs to the user-facing interaction layer or the approved delivery artefact, not to English runtime rules.
|
|
90
90
|
|
|
91
|
-
Make exactly one native-attempt for the ready gate. If the host does not render,
|
|
91
|
+
Make exactly one native-attempt for the eligible ready gate. If the host does not render,
|
|
92
92
|
apply or safely return the native question on that attempt, switch immediately
|
|
93
93
|
to the exact textual approval. Do not ask the user to request the buttons again
|
|
94
94
|
and do not create a retry loop or simulated control.
|
|
@@ -102,7 +102,7 @@ only after fresh run/gate/artefact revalidation; never retry automatically.
|
|
|
102
102
|
|
|
103
103
|
Surface behavior:
|
|
104
104
|
|
|
105
|
-
- Codex: invoke the native short-question/request-user-input control
|
|
105
|
+
- Codex: invoke the native short-question/request-user-input control only when preflight proves `exact_option_value` or `separate_label_and_value`, and omit auto-resolution. The canonical `decorated_label_only` capability must use exact text without invoking the adapter. `Approval: <GateName> (Recommended)` is never a valid option or approval.
|
|
106
106
|
- Claude Code: invoke `AskUserQuestion` on the first eligible attempt only when no timeout can auto-continue and no hook supplies `answers` or `updatedInput`; if it is not rendered or applied, use exact text immediately. Claude permissions and `ExitPlanMode` remain separate.
|
|
107
107
|
- OpenCode: use built-in `question` when permitted. Preserve explicit `permission.question` denial and use exact text in that case. `once`, `always`, `reject` and auto mode never become gate input.
|
|
108
108
|
- Other, unavailable or non-interactive surfaces: use exact textual approval and wait for a new explicit user response.
|
|
@@ -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.
|
|
@@ -221,6 +232,7 @@ from the same snapshot and are shown exactly once.
|
|
|
221
232
|
|
|
222
233
|
If this skill creates or updates control artefacts, do not paste full file bodies into the chat.
|
|
223
234
|
List paths, summarize the decision, name the blocker or approval needed, and keep the durable content in the files.
|
|
235
|
+
See the Runtime Contract §Chat and Tool-Call Discipline for tool-call batching and skill output compaction rules.
|
|
224
236
|
|
|
225
237
|
## Forbidden
|
|
226
238
|
This skill must not:
|
|
@@ -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
|
}
|
|
@@ -102,6 +102,12 @@ Use this shape:
|
|
|
102
102
|
|
|
103
103
|
If Context Graph impact is relevant, include the fields from `../agdf-runtime-contract.md`.
|
|
104
104
|
|
|
105
|
+
### Compact Chat Output
|
|
106
|
+
|
|
107
|
+
At `pass`: one line — `QA: pass — <one-line summary>`. Reference the durable QA report
|
|
108
|
+
path. Do not show the Quality Readiness projection or evidence inventory in chat.
|
|
109
|
+
At `revise`/`block`: show the decisive dimension, reason and next action.
|
|
110
|
+
|
|
105
111
|
## Decision Guidance
|
|
106
112
|
- `pass`: required TP tasks are done, evidence is strong, no blocking Brownfield or solution-integrity risk remains.
|
|
107
113
|
- `revise`: implementation is plausible but missing evidence, partial tasks, UX gaps, or fixable integrity issues remain.
|
|
@@ -402,6 +402,42 @@ When a skill creates or updates `.agdf/control/` files, gate artefacts, reviews,
|
|
|
402
402
|
Do not paste full control files, full artefact bodies, full templates or full generated reports into the chat unless the user explicitly asks to see the full content.
|
|
403
403
|
For larger or more formal work, create or update the durable artefacts fully, then reference them by path and summarize what changed.
|
|
404
404
|
|
|
405
|
+
### Chat and Tool-Call Discipline
|
|
406
|
+
|
|
407
|
+
Chat output shows decisions and outcomes. Files show evidence and detail. The agent
|
|
408
|
+
minimises both the number of tool calls and the amount of accompanying chat text. This
|
|
409
|
+
is surface-agnostic: it changes agent behaviour and framework text, not host rendering.
|
|
410
|
+
Whether a host renders a tool-call block visibly is a host concern; the framework ensures
|
|
411
|
+
the agent makes fewer calls and produces less text around them.
|
|
412
|
+
|
|
413
|
+
Skill output compaction:
|
|
414
|
+
|
|
415
|
+
- QA, Code Review, TP Review and Clean Implementation Review output is 1 line at `pass`:
|
|
416
|
+
`<skill>: pass — <one-line summary>`.
|
|
417
|
+
- At `revise`/`block`: the decisive dimension, reason and next action. The Quality
|
|
418
|
+
Readiness projection is shown only at `revise`/`block`, not at `pass`.
|
|
419
|
+
- Full reports remain in durable files; the chat references the path.
|
|
420
|
+
|
|
421
|
+
Tool-call batching:
|
|
422
|
+
|
|
423
|
+
- `RUN_STATE.md` is written once per user gate approval, not once per field change. The
|
|
424
|
+
agent keeps intermediate state in memory between gate approvals and writes the complete
|
|
425
|
+
updated state in one operation.
|
|
426
|
+
- The agent does not `read` existing artefacts for format reference. Skill instructions
|
|
427
|
+
carry the format/structure inline. If a specific existing artefact must be inspected
|
|
428
|
+
for content (not format), the read has no accompanying commentary.
|
|
429
|
+
- Artefact writes are silent: the agent names the path and a 1-line summary only when an
|
|
430
|
+
artefact is first created or significantly changed — not on every state update.
|
|
431
|
+
- Validation commands (tests, integrity, diff) show pass/fail only. Full output appears
|
|
432
|
+
only on failure.
|
|
433
|
+
|
|
434
|
+
Always visible:
|
|
435
|
+
|
|
436
|
+
- Gate decisions (Run Status Card, Gate Transition Card, approval question).
|
|
437
|
+
- Post-acceptance narration (1 line per gate transition).
|
|
438
|
+
- Delivery summary (UAT/OR compact summary).
|
|
439
|
+
- Errors, blockers and evidence at `revise`/`block`.
|
|
440
|
+
|
|
405
441
|
## Relevant Run
|
|
406
442
|
|
|
407
443
|
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.
|
|
@@ -497,6 +533,9 @@ with safe deliberate waiting. Decorated-only, missing, conflicting or unknown ca
|
|
|
497
533
|
`unavailable_before_invocation`; unsafe waiting fails closed to `unsafe_to_wait`. Both expose false and use
|
|
498
534
|
exact text without invoking the adapter. A report-only CLI evaluation has no verified current host adapter
|
|
499
535
|
and therefore exposes false. Hooks may prepare context but must not answer, approve or replace an eligible attempt.
|
|
536
|
+
An adapter that requires a visible suffix such as `(Recommended)` on its approving option is
|
|
537
|
+
`decorated_label_only`: do not invoke it for an AGDF gate. `Approval: <GateName> (Recommended)` is never a
|
|
538
|
+
valid AGDF approval option or authorization value; use the undecorated exact-text fallback instead.
|
|
500
539
|
|
|
501
540
|
The first eligible native-attempt has a single bounded outcome: the declared
|
|
502
541
|
host control is presented, or the agent immediately uses the exact-text
|
|
@@ -518,7 +557,7 @@ Surface adapter rules:
|
|
|
518
557
|
|
|
519
558
|
| Surface | Native question adapter | Gate-safe use | Technical permission boundary |
|
|
520
559
|
|---|---|---|---|
|
|
521
|
-
| Codex | native `request_user_input` or equivalent short-question control when callable |
|
|
560
|
+
| Codex | native `request_user_input` or equivalent short-question control when callable | invoke only when preflight proves `exact_option_value` or `separate_label_and_value`; the current canonical `decorated_label_only` capability uses exact text without invoking the adapter | Codex command, edit, network, external-directory and app-action approvals remain host-owned `tool_permission`. |
|
|
522
561
|
| Claude Code | `AskUserQuestion` | on the first eligible attempt, use only when no timeout can auto-continue and no hook supplies `answers` or `updatedInput`; if unavailable or not applied, use exact text without retry | Claude permissions and `ExitPlanMode` are not AGDF approval. |
|
|
523
562
|
| OpenCode | built-in `question` | use with exact approval/revise/cancel options when `permission.question` permits it; explicit user deny selects exact-text fallback | `once`, `always`, `reject`, permission suggestions and auto mode are technical outcomes only. |
|
|
524
563
|
| Fallback or non-interactive | concise exact text | wait for a new explicit user response; never synthesize or auto-resolve one | Host-specific technical permission remains separate. |
|
|
@@ -545,6 +584,39 @@ fallback and human CLI output use the configured project chat language from
|
|
|
545
584
|
|
|
546
585
|
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
586
|
|
|
587
|
+
### Gate-Rationale-Registry
|
|
588
|
+
|
|
589
|
+
The locale registry contains a deterministic, localized `gateRationale` section with one
|
|
590
|
+
curated one-liner per gate and internal step. The agent retrieves rationale strings via
|
|
591
|
+
the `gateRationale()` function; it does not generate rationale prose. Rationale strings
|
|
592
|
+
are the same across invocations for the same gate and locale.
|
|
593
|
+
|
|
594
|
+
The registry covers all user gates (`UR`, `PRD`, `SD`, `TP`, `QA`, `UAT`) and all internal
|
|
595
|
+
steps (`Brownfield Review`, `Mode/Slice Decision`, `Brownfield Analysis`, `CD+Tests`, `CR`,
|
|
596
|
+
`OR`). Each string stays within the declared `lengthBudgets.description` budget. Key parity
|
|
597
|
+
across locale packs is enforced by the existing `validateLocaleRegistry` baseline
|
|
598
|
+
comparison.
|
|
599
|
+
|
|
600
|
+
A one-liner cannot explain the full protective function. The user needs enough to accept
|
|
601
|
+
that the gate makes sense, not the complete rationale. Deeper context is available on
|
|
602
|
+
demand through the "Why?" interaction.
|
|
603
|
+
|
|
604
|
+
### On-Demand "Why?" Interaction
|
|
605
|
+
|
|
606
|
+
When the user asks "why?" at any gate or internal step, the agent responds with a `status`
|
|
607
|
+
interaction containing the curated rationale (Gate-Rationale-Registry) plus one line of
|
|
608
|
+
fulfilled/protects context composed from existing state.
|
|
609
|
+
|
|
610
|
+
- The response is deterministic, non-authorizing, and does not display approval controls.
|
|
611
|
+
- It is a separate `status` interaction, never merged with the `gate_approval` sequence.
|
|
612
|
+
- The `gate_approval` options remain exactly `approve | revise | decline | cancel`; no
|
|
613
|
+
"why" option is added.
|
|
614
|
+
- The response never breaks `APPROVAL_SEQUENCE` or `validateApprovalOrientationSnapshot`.
|
|
615
|
+
- Default output is unchanged when the user does not ask.
|
|
616
|
+
- The fulfilled line is composed from the selected run's Approvals table and artefact
|
|
617
|
+
status; the protects-against line is composed from the gate's rationale and existing
|
|
618
|
+
`primary.actions` copy. The agent does not generate new prose.
|
|
619
|
+
|
|
548
620
|
### Human Decision Presentation Contract
|
|
549
621
|
|
|
550
622
|
The primary user surface is a pure projection of the selected canonical run.
|
|
@@ -105,6 +105,11 @@ Evidence confidence:
|
|
|
105
105
|
- `medium`
|
|
106
106
|
- `low`
|
|
107
107
|
|
|
108
|
+
### Compact Chat Output
|
|
109
|
+
|
|
110
|
+
At `pass`: one line — `TP Review: pass — <X>/<total> tasks fully_done`.
|
|
111
|
+
At `revise`/`block`: show incomplete tasks with missing evidence.
|
|
112
|
+
|
|
108
113
|
## Forbidden
|
|
109
114
|
This skill must not:
|
|
110
115
|
|
|
@@ -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
|
}
|
|
@@ -402,6 +402,42 @@ When a skill creates or updates `.agdf/control/` files, gate artefacts, reviews,
|
|
|
402
402
|
Do not paste full control files, full artefact bodies, full templates or full generated reports into the chat unless the user explicitly asks to see the full content.
|
|
403
403
|
For larger or more formal work, create or update the durable artefacts fully, then reference them by path and summarize what changed.
|
|
404
404
|
|
|
405
|
+
### Chat and Tool-Call Discipline
|
|
406
|
+
|
|
407
|
+
Chat output shows decisions and outcomes. Files show evidence and detail. The agent
|
|
408
|
+
minimises both the number of tool calls and the amount of accompanying chat text. This
|
|
409
|
+
is surface-agnostic: it changes agent behaviour and framework text, not host rendering.
|
|
410
|
+
Whether a host renders a tool-call block visibly is a host concern; the framework ensures
|
|
411
|
+
the agent makes fewer calls and produces less text around them.
|
|
412
|
+
|
|
413
|
+
Skill output compaction:
|
|
414
|
+
|
|
415
|
+
- QA, Code Review, TP Review and Clean Implementation Review output is 1 line at `pass`:
|
|
416
|
+
`<skill>: pass — <one-line summary>`.
|
|
417
|
+
- At `revise`/`block`: the decisive dimension, reason and next action. The Quality
|
|
418
|
+
Readiness projection is shown only at `revise`/`block`, not at `pass`.
|
|
419
|
+
- Full reports remain in durable files; the chat references the path.
|
|
420
|
+
|
|
421
|
+
Tool-call batching:
|
|
422
|
+
|
|
423
|
+
- `RUN_STATE.md` is written once per user gate approval, not once per field change. The
|
|
424
|
+
agent keeps intermediate state in memory between gate approvals and writes the complete
|
|
425
|
+
updated state in one operation.
|
|
426
|
+
- The agent does not `read` existing artefacts for format reference. Skill instructions
|
|
427
|
+
carry the format/structure inline. If a specific existing artefact must be inspected
|
|
428
|
+
for content (not format), the read has no accompanying commentary.
|
|
429
|
+
- Artefact writes are silent: the agent names the path and a 1-line summary only when an
|
|
430
|
+
artefact is first created or significantly changed — not on every state update.
|
|
431
|
+
- Validation commands (tests, integrity, diff) show pass/fail only. Full output appears
|
|
432
|
+
only on failure.
|
|
433
|
+
|
|
434
|
+
Always visible:
|
|
435
|
+
|
|
436
|
+
- Gate decisions (Run Status Card, Gate Transition Card, approval question).
|
|
437
|
+
- Post-acceptance narration (1 line per gate transition).
|
|
438
|
+
- Delivery summary (UAT/OR compact summary).
|
|
439
|
+
- Errors, blockers and evidence at `revise`/`block`.
|
|
440
|
+
|
|
405
441
|
## Relevant Run
|
|
406
442
|
|
|
407
443
|
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.
|
|
@@ -497,6 +533,9 @@ with safe deliberate waiting. Decorated-only, missing, conflicting or unknown ca
|
|
|
497
533
|
`unavailable_before_invocation`; unsafe waiting fails closed to `unsafe_to_wait`. Both expose false and use
|
|
498
534
|
exact text without invoking the adapter. A report-only CLI evaluation has no verified current host adapter
|
|
499
535
|
and therefore exposes false. Hooks may prepare context but must not answer, approve or replace an eligible attempt.
|
|
536
|
+
An adapter that requires a visible suffix such as `(Recommended)` on its approving option is
|
|
537
|
+
`decorated_label_only`: do not invoke it for an AGDF gate. `Approval: <GateName> (Recommended)` is never a
|
|
538
|
+
valid AGDF approval option or authorization value; use the undecorated exact-text fallback instead.
|
|
500
539
|
|
|
501
540
|
The first eligible native-attempt has a single bounded outcome: the declared
|
|
502
541
|
host control is presented, or the agent immediately uses the exact-text
|
|
@@ -518,7 +557,7 @@ Surface adapter rules:
|
|
|
518
557
|
|
|
519
558
|
| Surface | Native question adapter | Gate-safe use | Technical permission boundary |
|
|
520
559
|
|---|---|---|---|
|
|
521
|
-
| Codex | native `request_user_input` or equivalent short-question control when callable |
|
|
560
|
+
| Codex | native `request_user_input` or equivalent short-question control when callable | invoke only when preflight proves `exact_option_value` or `separate_label_and_value`; the current canonical `decorated_label_only` capability uses exact text without invoking the adapter | Codex command, edit, network, external-directory and app-action approvals remain host-owned `tool_permission`. |
|
|
522
561
|
| Claude Code | `AskUserQuestion` | on the first eligible attempt, use only when no timeout can auto-continue and no hook supplies `answers` or `updatedInput`; if unavailable or not applied, use exact text without retry | Claude permissions and `ExitPlanMode` are not AGDF approval. |
|
|
523
562
|
| OpenCode | built-in `question` | use with exact approval/revise/cancel options when `permission.question` permits it; explicit user deny selects exact-text fallback | `once`, `always`, `reject`, permission suggestions and auto mode are technical outcomes only. |
|
|
524
563
|
| Fallback or non-interactive | concise exact text | wait for a new explicit user response; never synthesize or auto-resolve one | Host-specific technical permission remains separate. |
|
|
@@ -545,6 +584,39 @@ fallback and human CLI output use the configured project chat language from
|
|
|
545
584
|
|
|
546
585
|
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
586
|
|
|
587
|
+
### Gate-Rationale-Registry
|
|
588
|
+
|
|
589
|
+
The locale registry contains a deterministic, localized `gateRationale` section with one
|
|
590
|
+
curated one-liner per gate and internal step. The agent retrieves rationale strings via
|
|
591
|
+
the `gateRationale()` function; it does not generate rationale prose. Rationale strings
|
|
592
|
+
are the same across invocations for the same gate and locale.
|
|
593
|
+
|
|
594
|
+
The registry covers all user gates (`UR`, `PRD`, `SD`, `TP`, `QA`, `UAT`) and all internal
|
|
595
|
+
steps (`Brownfield Review`, `Mode/Slice Decision`, `Brownfield Analysis`, `CD+Tests`, `CR`,
|
|
596
|
+
`OR`). Each string stays within the declared `lengthBudgets.description` budget. Key parity
|
|
597
|
+
across locale packs is enforced by the existing `validateLocaleRegistry` baseline
|
|
598
|
+
comparison.
|
|
599
|
+
|
|
600
|
+
A one-liner cannot explain the full protective function. The user needs enough to accept
|
|
601
|
+
that the gate makes sense, not the complete rationale. Deeper context is available on
|
|
602
|
+
demand through the "Why?" interaction.
|
|
603
|
+
|
|
604
|
+
### On-Demand "Why?" Interaction
|
|
605
|
+
|
|
606
|
+
When the user asks "why?" at any gate or internal step, the agent responds with a `status`
|
|
607
|
+
interaction containing the curated rationale (Gate-Rationale-Registry) plus one line of
|
|
608
|
+
fulfilled/protects context composed from existing state.
|
|
609
|
+
|
|
610
|
+
- The response is deterministic, non-authorizing, and does not display approval controls.
|
|
611
|
+
- It is a separate `status` interaction, never merged with the `gate_approval` sequence.
|
|
612
|
+
- The `gate_approval` options remain exactly `approve | revise | decline | cancel`; no
|
|
613
|
+
"why" option is added.
|
|
614
|
+
- The response never breaks `APPROVAL_SEQUENCE` or `validateApprovalOrientationSnapshot`.
|
|
615
|
+
- Default output is unchanged when the user does not ask.
|
|
616
|
+
- The fulfilled line is composed from the selected run's Approvals table and artefact
|
|
617
|
+
status; the protects-against line is composed from the gate's rationale and existing
|
|
618
|
+
`primary.actions` copy. The agent does not generate new prose.
|
|
619
|
+
|
|
548
620
|
### Human Decision Presentation Contract
|
|
549
621
|
|
|
550
622
|
The primary user surface is a pure projection of the selected canonical run.
|
|
@@ -91,6 +91,11 @@ Use this compact structure:
|
|
|
91
91
|
- `revise`: solution works but contains avoidable fallback, unclear ownership, or missing evidence.
|
|
92
92
|
- `block`: solution creates a second SoT, a second owner, unbounded fallback, or masks unresolved product semantics.
|
|
93
93
|
|
|
94
|
+
### Compact Chat Output
|
|
95
|
+
|
|
96
|
+
At `pass`: one line — `Clean Review: pass — <one-line summary>`.
|
|
97
|
+
At `revise`/`block`: show the specific fallback/workaround/parallel-structure risk with file references.
|
|
98
|
+
|
|
94
99
|
## Forbidden
|
|
95
100
|
This skill must not:
|
|
96
101
|
|
|
@@ -84,6 +84,11 @@ Use this compact structure:
|
|
|
84
84
|
- `block`: a hard defect, security risk, data-integrity risk, or unresolved critical uncertainty remains.
|
|
85
85
|
- `not_applicable`: no code changes were present for review.
|
|
86
86
|
|
|
87
|
+
### Compact Chat Output
|
|
88
|
+
|
|
89
|
+
At `pass`: one line — `Code Review: pass — <one-line summary>`.
|
|
90
|
+
At `revise`/`block`: show blocking findings with file references. Full report remains in durable file or inline evidence as specified.
|
|
91
|
+
|
|
87
92
|
## Forbidden
|
|
88
93
|
This skill must not:
|
|
89
94
|
|
|
@@ -69,7 +69,7 @@ For a ready `gate_approval`:
|
|
|
69
69
|
7. Distinguish internal process steps from user decisions in natural language. For example, after `Approval: TP`, say that pre-implementation Brownfield Analysis runs next and that no further user action is required now; do not expose `next_user_gate: none` or `user_action_required: no`, and do not ask for a second approval for Brownfield Analysis.
|
|
70
70
|
8. Ask exactly one question that names the selected `run_id` and `current_gate`.
|
|
71
71
|
9. Offer options in stable order: exact `Approval: <GateName>`, localized revise and localized decline. Add explicit cancel only where supported after decline; otherwise host dismissal maps to cancel. Never preselect, skip, auto-submit or reorder an option.
|
|
72
|
-
10. Use the surface adapter declared in the canonical plugin definition only when it can wait for deliberate input without auto-resolution
|
|
72
|
+
10. Use the surface adapter declared in the canonical plugin definition only when it can wait for deliberate input without auto-resolution and can transport `exact_option_value` or `separate_label_and_value`; never invoke a `decorated_label_only` adapter. Otherwise request the same exact approval in concise text.
|
|
73
73
|
11. Render both cards once in that single complete assistant message. Never merge, reverse, omit or duplicate them; the action heading does not replace either card. If the native attempt is unavailable or not applied, continue to exact text without repeating either card.
|
|
74
74
|
12. Re-run gate evaluation for the same run and expected gate after the response and immediately before persistence.
|
|
75
75
|
13. Reject a missing artefact, ambiguous or wrong run, wrong gate, stale expected gate, timeout/default, hook-supplied answer, agent message, technical permission outcome or plan approval.
|
|
@@ -88,7 +88,7 @@ For the transition card, use the complete resolved locale pack. The initial Germ
|
|
|
88
88
|
|
|
89
89
|
The primary option is derived exactly as `Approval: <GateName>` from the evaluated current gate; only explanatory copy and non-authoritative outcome labels are localized. Concrete localized copy belongs to the user-facing interaction layer or the approved delivery artefact, not to English runtime rules.
|
|
90
90
|
|
|
91
|
-
Make exactly one native-attempt for the ready gate. If the host does not render,
|
|
91
|
+
Make exactly one native-attempt for the eligible ready gate. If the host does not render,
|
|
92
92
|
apply or safely return the native question on that attempt, switch immediately
|
|
93
93
|
to the exact textual approval. Do not ask the user to request the buttons again
|
|
94
94
|
and do not create a retry loop or simulated control.
|
|
@@ -102,7 +102,7 @@ only after fresh run/gate/artefact revalidation; never retry automatically.
|
|
|
102
102
|
|
|
103
103
|
Surface behavior:
|
|
104
104
|
|
|
105
|
-
- Codex: invoke the native short-question/request-user-input control
|
|
105
|
+
- Codex: invoke the native short-question/request-user-input control only when preflight proves `exact_option_value` or `separate_label_and_value`, and omit auto-resolution. The canonical `decorated_label_only` capability must use exact text without invoking the adapter. `Approval: <GateName> (Recommended)` is never a valid option or approval.
|
|
106
106
|
- Claude Code: invoke `AskUserQuestion` on the first eligible attempt only when no timeout can auto-continue and no hook supplies `answers` or `updatedInput`; if it is not rendered or applied, use exact text immediately. Claude permissions and `ExitPlanMode` remain separate.
|
|
107
107
|
- OpenCode: use built-in `question` when permitted. Preserve explicit `permission.question` denial and use exact text in that case. `once`, `always`, `reject` and auto mode never become gate input.
|
|
108
108
|
- Other, unavailable or non-interactive surfaces: use exact textual approval and wait for a new explicit user response.
|
|
@@ -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.
|
|
@@ -221,6 +232,7 @@ from the same snapshot and are shown exactly once.
|
|
|
221
232
|
|
|
222
233
|
If this skill creates or updates control artefacts, do not paste full file bodies into the chat.
|
|
223
234
|
List paths, summarize the decision, name the blocker or approval needed, and keep the durable content in the files.
|
|
235
|
+
See the Runtime Contract §Chat and Tool-Call Discipline for tool-call batching and skill output compaction rules.
|
|
224
236
|
|
|
225
237
|
## Forbidden
|
|
226
238
|
This skill must not:
|
|
@@ -102,6 +102,12 @@ Use this shape:
|
|
|
102
102
|
|
|
103
103
|
If Context Graph impact is relevant, include the fields from `../../agdf-runtime-contract.md`.
|
|
104
104
|
|
|
105
|
+
### Compact Chat Output
|
|
106
|
+
|
|
107
|
+
At `pass`: one line — `QA: pass — <one-line summary>`. Reference the durable QA report
|
|
108
|
+
path. Do not show the Quality Readiness projection or evidence inventory in chat.
|
|
109
|
+
At `revise`/`block`: show the decisive dimension, reason and next action.
|
|
110
|
+
|
|
105
111
|
## Decision Guidance
|
|
106
112
|
- `pass`: required TP tasks are done, evidence is strong, no blocking Brownfield or solution-integrity risk remains.
|
|
107
113
|
- `revise`: implementation is plausible but missing evidence, partial tasks, UX gaps, or fixable integrity issues remain.
|
|
@@ -105,6 +105,11 @@ Evidence confidence:
|
|
|
105
105
|
- `medium`
|
|
106
106
|
- `low`
|
|
107
107
|
|
|
108
|
+
### Compact Chat Output
|
|
109
|
+
|
|
110
|
+
At `pass`: one line — `TP Review: pass — <X>/<total> tasks fully_done`.
|
|
111
|
+
At `revise`/`block`: show incomplete tasks with missing evidence.
|
|
112
|
+
|
|
108
113
|
## Forbidden
|
|
109
114
|
This skill must not:
|
|
110
115
|
|
|
@@ -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
|
}
|
|
@@ -402,6 +402,42 @@ When a skill creates or updates `.agdf/control/` files, gate artefacts, reviews,
|
|
|
402
402
|
Do not paste full control files, full artefact bodies, full templates or full generated reports into the chat unless the user explicitly asks to see the full content.
|
|
403
403
|
For larger or more formal work, create or update the durable artefacts fully, then reference them by path and summarize what changed.
|
|
404
404
|
|
|
405
|
+
### Chat and Tool-Call Discipline
|
|
406
|
+
|
|
407
|
+
Chat output shows decisions and outcomes. Files show evidence and detail. The agent
|
|
408
|
+
minimises both the number of tool calls and the amount of accompanying chat text. This
|
|
409
|
+
is surface-agnostic: it changes agent behaviour and framework text, not host rendering.
|
|
410
|
+
Whether a host renders a tool-call block visibly is a host concern; the framework ensures
|
|
411
|
+
the agent makes fewer calls and produces less text around them.
|
|
412
|
+
|
|
413
|
+
Skill output compaction:
|
|
414
|
+
|
|
415
|
+
- QA, Code Review, TP Review and Clean Implementation Review output is 1 line at `pass`:
|
|
416
|
+
`<skill>: pass — <one-line summary>`.
|
|
417
|
+
- At `revise`/`block`: the decisive dimension, reason and next action. The Quality
|
|
418
|
+
Readiness projection is shown only at `revise`/`block`, not at `pass`.
|
|
419
|
+
- Full reports remain in durable files; the chat references the path.
|
|
420
|
+
|
|
421
|
+
Tool-call batching:
|
|
422
|
+
|
|
423
|
+
- `RUN_STATE.md` is written once per user gate approval, not once per field change. The
|
|
424
|
+
agent keeps intermediate state in memory between gate approvals and writes the complete
|
|
425
|
+
updated state in one operation.
|
|
426
|
+
- The agent does not `read` existing artefacts for format reference. Skill instructions
|
|
427
|
+
carry the format/structure inline. If a specific existing artefact must be inspected
|
|
428
|
+
for content (not format), the read has no accompanying commentary.
|
|
429
|
+
- Artefact writes are silent: the agent names the path and a 1-line summary only when an
|
|
430
|
+
artefact is first created or significantly changed — not on every state update.
|
|
431
|
+
- Validation commands (tests, integrity, diff) show pass/fail only. Full output appears
|
|
432
|
+
only on failure.
|
|
433
|
+
|
|
434
|
+
Always visible:
|
|
435
|
+
|
|
436
|
+
- Gate decisions (Run Status Card, Gate Transition Card, approval question).
|
|
437
|
+
- Post-acceptance narration (1 line per gate transition).
|
|
438
|
+
- Delivery summary (UAT/OR compact summary).
|
|
439
|
+
- Errors, blockers and evidence at `revise`/`block`.
|
|
440
|
+
|
|
405
441
|
## Relevant Run
|
|
406
442
|
|
|
407
443
|
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.
|
|
@@ -497,6 +533,9 @@ with safe deliberate waiting. Decorated-only, missing, conflicting or unknown ca
|
|
|
497
533
|
`unavailable_before_invocation`; unsafe waiting fails closed to `unsafe_to_wait`. Both expose false and use
|
|
498
534
|
exact text without invoking the adapter. A report-only CLI evaluation has no verified current host adapter
|
|
499
535
|
and therefore exposes false. Hooks may prepare context but must not answer, approve or replace an eligible attempt.
|
|
536
|
+
An adapter that requires a visible suffix such as `(Recommended)` on its approving option is
|
|
537
|
+
`decorated_label_only`: do not invoke it for an AGDF gate. `Approval: <GateName> (Recommended)` is never a
|
|
538
|
+
valid AGDF approval option or authorization value; use the undecorated exact-text fallback instead.
|
|
500
539
|
|
|
501
540
|
The first eligible native-attempt has a single bounded outcome: the declared
|
|
502
541
|
host control is presented, or the agent immediately uses the exact-text
|
|
@@ -518,7 +557,7 @@ Surface adapter rules:
|
|
|
518
557
|
|
|
519
558
|
| Surface | Native question adapter | Gate-safe use | Technical permission boundary |
|
|
520
559
|
|---|---|---|---|
|
|
521
|
-
| Codex | native `request_user_input` or equivalent short-question control when callable |
|
|
560
|
+
| Codex | native `request_user_input` or equivalent short-question control when callable | invoke only when preflight proves `exact_option_value` or `separate_label_and_value`; the current canonical `decorated_label_only` capability uses exact text without invoking the adapter | Codex command, edit, network, external-directory and app-action approvals remain host-owned `tool_permission`. |
|
|
522
561
|
| Claude Code | `AskUserQuestion` | on the first eligible attempt, use only when no timeout can auto-continue and no hook supplies `answers` or `updatedInput`; if unavailable or not applied, use exact text without retry | Claude permissions and `ExitPlanMode` are not AGDF approval. |
|
|
523
562
|
| OpenCode | built-in `question` | use with exact approval/revise/cancel options when `permission.question` permits it; explicit user deny selects exact-text fallback | `once`, `always`, `reject`, permission suggestions and auto mode are technical outcomes only. |
|
|
524
563
|
| Fallback or non-interactive | concise exact text | wait for a new explicit user response; never synthesize or auto-resolve one | Host-specific technical permission remains separate. |
|
|
@@ -545,6 +584,39 @@ fallback and human CLI output use the configured project chat language from
|
|
|
545
584
|
|
|
546
585
|
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
586
|
|
|
587
|
+
### Gate-Rationale-Registry
|
|
588
|
+
|
|
589
|
+
The locale registry contains a deterministic, localized `gateRationale` section with one
|
|
590
|
+
curated one-liner per gate and internal step. The agent retrieves rationale strings via
|
|
591
|
+
the `gateRationale()` function; it does not generate rationale prose. Rationale strings
|
|
592
|
+
are the same across invocations for the same gate and locale.
|
|
593
|
+
|
|
594
|
+
The registry covers all user gates (`UR`, `PRD`, `SD`, `TP`, `QA`, `UAT`) and all internal
|
|
595
|
+
steps (`Brownfield Review`, `Mode/Slice Decision`, `Brownfield Analysis`, `CD+Tests`, `CR`,
|
|
596
|
+
`OR`). Each string stays within the declared `lengthBudgets.description` budget. Key parity
|
|
597
|
+
across locale packs is enforced by the existing `validateLocaleRegistry` baseline
|
|
598
|
+
comparison.
|
|
599
|
+
|
|
600
|
+
A one-liner cannot explain the full protective function. The user needs enough to accept
|
|
601
|
+
that the gate makes sense, not the complete rationale. Deeper context is available on
|
|
602
|
+
demand through the "Why?" interaction.
|
|
603
|
+
|
|
604
|
+
### On-Demand "Why?" Interaction
|
|
605
|
+
|
|
606
|
+
When the user asks "why?" at any gate or internal step, the agent responds with a `status`
|
|
607
|
+
interaction containing the curated rationale (Gate-Rationale-Registry) plus one line of
|
|
608
|
+
fulfilled/protects context composed from existing state.
|
|
609
|
+
|
|
610
|
+
- The response is deterministic, non-authorizing, and does not display approval controls.
|
|
611
|
+
- It is a separate `status` interaction, never merged with the `gate_approval` sequence.
|
|
612
|
+
- The `gate_approval` options remain exactly `approve | revise | decline | cancel`; no
|
|
613
|
+
"why" option is added.
|
|
614
|
+
- The response never breaks `APPROVAL_SEQUENCE` or `validateApprovalOrientationSnapshot`.
|
|
615
|
+
- Default output is unchanged when the user does not ask.
|
|
616
|
+
- The fulfilled line is composed from the selected run's Approvals table and artefact
|
|
617
|
+
status; the protects-against line is composed from the gate's rationale and existing
|
|
618
|
+
`primary.actions` copy. The agent does not generate new prose.
|
|
619
|
+
|
|
548
620
|
### Human Decision Presentation Contract
|
|
549
621
|
|
|
550
622
|
The primary user surface is a pure projection of the selected canonical run.
|
|
@@ -91,6 +91,11 @@ Use this compact structure:
|
|
|
91
91
|
- `revise`: solution works but contains avoidable fallback, unclear ownership, or missing evidence.
|
|
92
92
|
- `block`: solution creates a second SoT, a second owner, unbounded fallback, or masks unresolved product semantics.
|
|
93
93
|
|
|
94
|
+
### Compact Chat Output
|
|
95
|
+
|
|
96
|
+
At `pass`: one line — `Clean Review: pass — <one-line summary>`.
|
|
97
|
+
At `revise`/`block`: show the specific fallback/workaround/parallel-structure risk with file references.
|
|
98
|
+
|
|
94
99
|
## Forbidden
|
|
95
100
|
This skill must not:
|
|
96
101
|
|
|
@@ -84,6 +84,11 @@ Use this compact structure:
|
|
|
84
84
|
- `block`: a hard defect, security risk, data-integrity risk, or unresolved critical uncertainty remains.
|
|
85
85
|
- `not_applicable`: no code changes were present for review.
|
|
86
86
|
|
|
87
|
+
### Compact Chat Output
|
|
88
|
+
|
|
89
|
+
At `pass`: one line — `Code Review: pass — <one-line summary>`.
|
|
90
|
+
At `revise`/`block`: show blocking findings with file references. Full report remains in durable file or inline evidence as specified.
|
|
91
|
+
|
|
87
92
|
## Forbidden
|
|
88
93
|
This skill must not:
|
|
89
94
|
|
|
@@ -69,7 +69,7 @@ For a ready `gate_approval`:
|
|
|
69
69
|
7. Distinguish internal process steps from user decisions in natural language. For example, after `Approval: TP`, say that pre-implementation Brownfield Analysis runs next and that no further user action is required now; do not expose `next_user_gate: none` or `user_action_required: no`, and do not ask for a second approval for Brownfield Analysis.
|
|
70
70
|
8. Ask exactly one question that names the selected `run_id` and `current_gate`.
|
|
71
71
|
9. Offer options in stable order: exact `Approval: <GateName>`, localized revise and localized decline. Add explicit cancel only where supported after decline; otherwise host dismissal maps to cancel. Never preselect, skip, auto-submit or reorder an option.
|
|
72
|
-
10. Use the surface adapter declared in the canonical plugin definition only when it can wait for deliberate input without auto-resolution
|
|
72
|
+
10. Use the surface adapter declared in the canonical plugin definition only when it can wait for deliberate input without auto-resolution and can transport `exact_option_value` or `separate_label_and_value`; never invoke a `decorated_label_only` adapter. Otherwise request the same exact approval in concise text.
|
|
73
73
|
11. Render both cards once in that single complete assistant message. Never merge, reverse, omit or duplicate them; the action heading does not replace either card. If the native attempt is unavailable or not applied, continue to exact text without repeating either card.
|
|
74
74
|
12. Re-run gate evaluation for the same run and expected gate after the response and immediately before persistence.
|
|
75
75
|
13. Reject a missing artefact, ambiguous or wrong run, wrong gate, stale expected gate, timeout/default, hook-supplied answer, agent message, technical permission outcome or plan approval.
|
|
@@ -88,7 +88,7 @@ For the transition card, use the complete resolved locale pack. The initial Germ
|
|
|
88
88
|
|
|
89
89
|
The primary option is derived exactly as `Approval: <GateName>` from the evaluated current gate; only explanatory copy and non-authoritative outcome labels are localized. Concrete localized copy belongs to the user-facing interaction layer or the approved delivery artefact, not to English runtime rules.
|
|
90
90
|
|
|
91
|
-
Make exactly one native-attempt for the ready gate. If the host does not render,
|
|
91
|
+
Make exactly one native-attempt for the eligible ready gate. If the host does not render,
|
|
92
92
|
apply or safely return the native question on that attempt, switch immediately
|
|
93
93
|
to the exact textual approval. Do not ask the user to request the buttons again
|
|
94
94
|
and do not create a retry loop or simulated control.
|
|
@@ -102,7 +102,7 @@ only after fresh run/gate/artefact revalidation; never retry automatically.
|
|
|
102
102
|
|
|
103
103
|
Surface behavior:
|
|
104
104
|
|
|
105
|
-
- Codex: invoke the native short-question/request-user-input control
|
|
105
|
+
- Codex: invoke the native short-question/request-user-input control only when preflight proves `exact_option_value` or `separate_label_and_value`, and omit auto-resolution. The canonical `decorated_label_only` capability must use exact text without invoking the adapter. `Approval: <GateName> (Recommended)` is never a valid option or approval.
|
|
106
106
|
- Claude Code: invoke `AskUserQuestion` on the first eligible attempt only when no timeout can auto-continue and no hook supplies `answers` or `updatedInput`; if it is not rendered or applied, use exact text immediately. Claude permissions and `ExitPlanMode` remain separate.
|
|
107
107
|
- OpenCode: use built-in `question` when permitted. Preserve explicit `permission.question` denial and use exact text in that case. `once`, `always`, `reject` and auto mode never become gate input.
|
|
108
108
|
- Other, unavailable or non-interactive surfaces: use exact textual approval and wait for a new explicit user response.
|
|
@@ -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.
|
|
@@ -221,6 +232,7 @@ from the same snapshot and are shown exactly once.
|
|
|
221
232
|
|
|
222
233
|
If this skill creates or updates control artefacts, do not paste full file bodies into the chat.
|
|
223
234
|
List paths, summarize the decision, name the blocker or approval needed, and keep the durable content in the files.
|
|
235
|
+
See the Runtime Contract §Chat and Tool-Call Discipline for tool-call batching and skill output compaction rules.
|
|
224
236
|
|
|
225
237
|
## Forbidden
|
|
226
238
|
This skill must not:
|
|
@@ -102,6 +102,12 @@ Use this shape:
|
|
|
102
102
|
|
|
103
103
|
If Context Graph impact is relevant, include the fields from `../../meta/agdf-runtime-contract.md`.
|
|
104
104
|
|
|
105
|
+
### Compact Chat Output
|
|
106
|
+
|
|
107
|
+
At `pass`: one line — `QA: pass — <one-line summary>`. Reference the durable QA report
|
|
108
|
+
path. Do not show the Quality Readiness projection or evidence inventory in chat.
|
|
109
|
+
At `revise`/`block`: show the decisive dimension, reason and next action.
|
|
110
|
+
|
|
105
111
|
## Decision Guidance
|
|
106
112
|
- `pass`: required TP tasks are done, evidence is strong, no blocking Brownfield or solution-integrity risk remains.
|
|
107
113
|
- `revise`: implementation is plausible but missing evidence, partial tasks, UX gaps, or fixable integrity issues remain.
|
|
@@ -105,6 +105,11 @@ Evidence confidence:
|
|
|
105
105
|
- `medium`
|
|
106
106
|
- `low`
|
|
107
107
|
|
|
108
|
+
### Compact Chat Output
|
|
109
|
+
|
|
110
|
+
At `pass`: one line — `TP Review: pass — <X>/<total> tasks fully_done`.
|
|
111
|
+
At `revise`/`block`: show incomplete tasks with missing evidence.
|
|
112
|
+
|
|
108
113
|
## Forbidden
|
|
109
114
|
This skill must not:
|
|
110
115
|
|
|
@@ -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