create-agdf 0.12.0 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/generated/plugins/agdf/.claude-plugin/plugin.json +2 -2
- package/generated/plugins/agdf/.codex-plugin/plugin.json +9 -6
- package/generated/plugins/agdf/meta/agdf-plugin.definition.json +41 -5
- package/generated/plugins/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-plugin.definition.json +41 -5
- package/generated/plugins/agdf/runtime/create-agdf/package.json +4 -68
- package/generated/plugins/agdf/runtime/runtime-manifest.json +2 -2
- package/generated/plugins/agdf/scripts/check-runtime-integrity.mjs +27 -37
- package/generated/plugins/agdf/submission/openai/availability.md +16 -0
- package/generated/plugins/agdf/submission/openai/capability-matrix.json +49 -0
- package/generated/plugins/agdf/submission/openai/release-notes.md +16 -0
- package/generated/plugins/agdf/submission/openai/reviewer-cases.json +116 -0
- package/generated/submissions/openai/agdf/.codex-plugin/plugin.json +43 -0
- package/generated/submissions/openai/agdf/assets/agdf-icon.svg +16 -0
- package/generated/submissions/openai/agdf/assets/agdf-logo.svg +16 -0
- package/generated/submissions/openai/agdf/meta/agdf-agent-router.md +129 -0
- package/generated/submissions/openai/agdf/meta/agdf-constitution.md +329 -0
- package/generated/submissions/openai/agdf/meta/agdf-interaction-locales.json +514 -0
- package/generated/submissions/openai/agdf/meta/agdf-plugin.definition.json +263 -0
- package/generated/submissions/openai/agdf/meta/agdf-runtime-contract.md +16 -0
- package/generated/submissions/openai/agdf/meta/agdf-tenets.md +201 -0
- package/generated/submissions/openai/agdf/meta/contracts/closeout.md +29 -0
- package/generated/submissions/openai/agdf/meta/contracts/context-graph.md +48 -0
- package/generated/submissions/openai/agdf/meta/contracts/control-scaffold.md +115 -0
- package/generated/submissions/openai/agdf/meta/contracts/gate-transition.md +165 -0
- package/generated/submissions/openai/agdf/meta/contracts/interaction.md +476 -0
- package/generated/submissions/openai/agdf/meta/contracts/modes.md +183 -0
- package/generated/submissions/openai/agdf/meta/contracts/quality.md +157 -0
- package/generated/submissions/openai/agdf/meta/contracts/task-target-resolution.md +102 -0
- package/generated/submissions/openai/agdf/skills/brownfield-analysis/SKILL.md +175 -0
- package/generated/submissions/openai/agdf/skills/brownfield-analysis/help.md +23 -0
- package/generated/submissions/openai/agdf/skills/clean-implementation-review/SKILL.md +126 -0
- package/generated/submissions/openai/agdf/skills/clean-implementation-review/help.md +23 -0
- package/generated/submissions/openai/agdf/skills/code-review/SKILL.md +119 -0
- package/generated/submissions/openai/agdf/skills/code-review/help.md +23 -0
- package/generated/submissions/openai/agdf/skills/delivery-closeout/SKILL.md +118 -0
- package/generated/submissions/openai/agdf/skills/delivery-closeout/help.md +23 -0
- package/generated/submissions/openai/agdf/skills/delivery-path-search/SKILL.md +94 -0
- package/generated/submissions/openai/agdf/skills/delivery-path-search/help.md +23 -0
- package/generated/submissions/openai/agdf/skills/gate-check/SKILL.md +238 -0
- package/generated/submissions/openai/agdf/skills/gate-check/help.md +23 -0
- package/generated/submissions/openai/agdf/skills/qa-gate/SKILL.md +137 -0
- package/generated/submissions/openai/agdf/skills/qa-gate/help.md +23 -0
- package/generated/submissions/openai/agdf/skills/release-or/SKILL.md +137 -0
- package/generated/submissions/openai/agdf/skills/release-or/help.md +23 -0
- package/generated/submissions/openai/agdf/skills/task-plan-review/SKILL.md +157 -0
- package/generated/submissions/openai/agdf/skills/task-plan-review/help.md +23 -0
- package/generated/submissions/openai/agdf/skills/ux-intent-definition/SKILL.md +94 -0
- package/generated/submissions/openai/agdf/skills/ux-intent-definition/help.md +17 -0
- package/generated/submissions/openai/agdf/submission/openai/availability.md +16 -0
- package/generated/submissions/openai/agdf/submission/openai/capability-matrix.json +49 -0
- package/generated/submissions/openai/agdf/submission/openai/inventory.json +175 -0
- package/generated/submissions/openai/agdf/submission/openai/listing.json +38 -0
- package/generated/submissions/openai/agdf/submission/openai/readiness.json +40 -0
- package/generated/submissions/openai/agdf/submission/openai/readiness.md +24 -0
- package/generated/submissions/openai/agdf/submission/openai/release-notes.md +16 -0
- package/generated/submissions/openai/agdf/submission/openai/reviewer-cases.json +116 -0
- package/lib/installers/local-marketplace.js +20 -19
- package/lib/public-plugin/builder.js +82 -0
- package/lib/public-plugin/contract.js +102 -0
- package/lib/public-plugin/manifest.js +72 -0
- package/lib/public-plugin/report.js +33 -0
- package/lib/public-plugin/validator.js +101 -0
- package/package.json +4 -2
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
# AGDF Runtime Contract — Interaction
|
|
2
|
+
|
|
3
|
+
## Run Status Card
|
|
4
|
+
|
|
5
|
+
When a run needs an operational status view, use the Run Status Card as a compact projection of existing control state.
|
|
6
|
+
It must not introduce a second gate model or override `gate-check`, `delivery-map`, QA, OR, or user approvals.
|
|
7
|
+
|
|
8
|
+
- `mode`: `quick_task | verified_change | structured_delivery | unknown`
|
|
9
|
+
- `run_id`: the exactly selected canonical run
|
|
10
|
+
- `presentation_language`: the resolved complete locale-pack tag; absent, unsupported or incomplete packs resolve to the registry's deterministic `en` fallback
|
|
11
|
+
- `status`: `open | blocked | pass | warn | revise | block | in_progress`
|
|
12
|
+
- `current_gate`: current user gate or internal step
|
|
13
|
+
- `mode_slice_decision`: `undecided | quick_task | verified_change | structured_slice | structured_delivery | block`
|
|
14
|
+
- `allowed_now`: outputs or actions currently permitted
|
|
15
|
+
- `forbidden_now`: outputs or actions currently forbidden
|
|
16
|
+
- `blocking_condition`: current blocker or `none`
|
|
17
|
+
- `missing_approval`: exact missing approval formula or `none`
|
|
18
|
+
- `next_gate_after_approval`: the next user gate or internal step unlocked by the missing approval, or `none`
|
|
19
|
+
- `allowed_after_approval`: concise description of what becomes allowed after the missing approval, or `none`
|
|
20
|
+
- `user_visible_outcome_after_approval`: concise user-facing result of approving the current gate
|
|
21
|
+
- `internal_next_step`: the next agent-controlled process step, or `none`
|
|
22
|
+
- `next_user_gate`: the next actual user approval gate, or `none`
|
|
23
|
+
- `user_action_required`: `yes` only when the user must provide another deliberate approval or decision; otherwise `no`
|
|
24
|
+
- `evidence`: concrete evidence references currently visible
|
|
25
|
+
- `next_skill`: next AGDF skill or `none`
|
|
26
|
+
- `next_step`: the single next permissible process action
|
|
27
|
+
- `quality_outlook`: the next meaningful quality-improvement focus, or `none`
|
|
28
|
+
|
|
29
|
+
`next_step` and `quality_outlook` are intentionally different:
|
|
30
|
+
|
|
31
|
+
- `next_step` is process permission: what may happen next.
|
|
32
|
+
- `quality_outlook` is quality direction: what would most improve confidence, maintainability, evidence, or delivery integrity if further investment is made.
|
|
33
|
+
|
|
34
|
+
`quality_outlook` must not unlock gates, imply QA pass, or substitute for missing evidence.
|
|
35
|
+
|
|
36
|
+
`allowed_now` and `allowed_after_approval` are intentionally different:
|
|
37
|
+
|
|
38
|
+
- `allowed_now` is current authority under the active gate.
|
|
39
|
+
- `allowed_after_approval` is the immediate authority unlocked only after the exact `missing_approval` is supplied.
|
|
40
|
+
|
|
41
|
+
`next_gate_after_approval` and `allowed_after_approval` must be `none` when no approval is missing, when the current step is internal, or when the run is in OR/completed handoff. They must not imply implementation, QA, release, commit, push or PR authority unless the existing gate model already allows that authority.
|
|
42
|
+
|
|
43
|
+
### Deterministic Operational Presentation
|
|
44
|
+
|
|
45
|
+
`status_card` is the canonical machine/audit projection. The same evaluation also exposes an additive
|
|
46
|
+
`status_presentation` object with selected run/revision/gate/locale identity, `semantic_block:
|
|
47
|
+
run_status_card`, one compact Markdown block with localized labels and canonical evaluated values,
|
|
48
|
+
and `authorizes: false`. The full raw and evidence-bearing projection remains available unchanged in
|
|
49
|
+
`status_card` JSON for audit and automation; it is not duplicated into the primary chat card.
|
|
50
|
+
Fresh legacy-compatible control state without a durable revision uses the explicit non-authorizing
|
|
51
|
+
identity `unversioned`; ready approval presentation remains impossible without a real revision.
|
|
52
|
+
|
|
53
|
+
`interaction-presentation.js` is the only owner that may select, label, order, localize and render the
|
|
54
|
+
operational status fields. The gate-check CLI, skills and surface adapters consume
|
|
55
|
+
`status_presentation.markdown` verbatim. They may add concise surrounding explanation, but they must
|
|
56
|
+
not reconstruct a table, omit or rename fields, substitute generic gate actions for evaluated
|
|
57
|
+
`allowed_now`/`forbidden_now`, or maintain another status-card template. If the projection is missing
|
|
58
|
+
or its selected run, revision, gate or locale identity is stale, presentation fails closed rather
|
|
59
|
+
than falling back to model-generated status Markdown.
|
|
60
|
+
|
|
61
|
+
This determinism protects semantic parity, permission boundaries and evidence visibility across
|
|
62
|
+
hosts. It does not standardize host chrome or unrelated conversational prose. `approval_presentation`
|
|
63
|
+
remains the separate decision-time projection and is present only for a ready user gate; both public
|
|
64
|
+
presentations derive from the same `status_card` snapshot and neither grants approval.
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
### Breadcrumb
|
|
68
|
+
|
|
69
|
+
The compact human Run Status Card may include a single-line path-derived breadcrumb that
|
|
70
|
+
shows the user's position in the delivery journey. It is derived from the Mode/Slice
|
|
71
|
+
Decision and the Approvals table — not a fixed template.
|
|
72
|
+
|
|
73
|
+
| Mode/Slice | Breadcrumb gates |
|
|
74
|
+
|---|---|
|
|
75
|
+
| structured_delivery / structured_slice | `UR · PRD · SD · TP · QA · UAT` |
|
|
76
|
+
| verified_change | `UR · Verified Change · OR` |
|
|
77
|
+
| quick_task | `UR · Quick Task` |
|
|
78
|
+
| block | `UR · Block` |
|
|
79
|
+
|
|
80
|
+
- `✓` fulfilled, `●` current, `○` open.
|
|
81
|
+
- Non-applicable gates are absent (no `–` placeholders, no thinned standard template).
|
|
82
|
+
- `verified_change` is one collapsed node, not a degraded standard route.
|
|
83
|
+
- The breadcrumb is a derived, non-authorising projection. It does not add a new gate
|
|
84
|
+
model or override the Gate Transition Model.
|
|
85
|
+
- The machine-readable `status_card` JSON may carry a derived `breadcrumb` array
|
|
86
|
+
`[{gate, status}]` for the presentation layer; this is additive and does not replace
|
|
87
|
+
any existing field.
|
|
88
|
+
|
|
89
|
+
### Post-Acceptance Transition Narration
|
|
90
|
+
|
|
91
|
+
After each accepted gate approval, the agent emits exactly one status line using the
|
|
92
|
+
template:
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
<what was satisfied> → <what the agent does next internally> → <user action: yes/no>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
This narration is temporally and structurally separate from the Gate Transition Card:
|
|
99
|
+
|
|
100
|
+
- The Gate Transition Card is **pre-approval** (in the orientation envelope); it is
|
|
101
|
+
subjunctive and contains the exact `Approval:` value.
|
|
102
|
+
- The narration is **post-acceptance** (after the gate advanced); it is indicative and
|
|
103
|
+
does not contain the `Approval:` value.
|
|
104
|
+
- Both never appear in the same assistant message.
|
|
105
|
+
- The narration does not repeat the decision's effect (the card's job) and uses its own
|
|
106
|
+
template, not the card's three-question form.
|
|
107
|
+
- For internal steps (Brownfield Review, Brownfield Analysis), the narration states what
|
|
108
|
+
the agent does next and that no user action is required, without exposing
|
|
109
|
+
`next_user_gate: none` or asking for a second approval.
|
|
110
|
+
|
|
111
|
+
### Internal-State Collapse
|
|
112
|
+
|
|
113
|
+
The derived-projection principle above applies explicitly to internal sub-states. The
|
|
114
|
+
full Run Status Card (machine/audit projection) keeps all fields unchanged. Only the
|
|
115
|
+
compact human card collapses internal sub-states to stable human labels:
|
|
116
|
+
|
|
117
|
+
| Internal sub-state | Human label | Stays explicit |
|
|
118
|
+
|---|---|---|
|
|
119
|
+
| `verified_change`: missing/draft/invalid/eligible/executed | "Compact change under review" | `escalated` → "Escalated to structured delivery" |
|
|
120
|
+
| `context_graph_required_action`: link/update/create/resolve_drift | "Project memory maintained" | `open_gap` → "Graph gap open" |
|
|
121
|
+
| `multi_scope_state`: clear/ambiguous | (not shown) | `blocked` → "Ambiguous scope, clarification needed" |
|
|
122
|
+
|
|
123
|
+
`open_gap` and `escalated` remain explicitly visible. The full machine projection retains
|
|
124
|
+
all raw values unchanged.
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
## Gate Transition Card
|
|
128
|
+
|
|
129
|
+
Every ready `gate_approval` uses one fixed visible sequence: first the compact
|
|
130
|
+
approval-time Run Status Card, then the Gate Transition Card, then exactly one
|
|
131
|
+
native question or exact-text fallback. Both cards derive from one immutable,
|
|
132
|
+
non-authorizing presentation snapshot produced after canonical selected-run,
|
|
133
|
+
gate and durable-artefact readiness evaluation. The snapshot never selects a
|
|
134
|
+
run, decides a gate, persists state or grants approval.
|
|
135
|
+
|
|
136
|
+
The two distinct card blocks form one Approval Orientation Envelope in one
|
|
137
|
+
immediately preceding assistant message. The agent must complete that message
|
|
138
|
+
before invoking any native question tool or emitting an exact-text approval
|
|
139
|
+
request. Splitting the cards across separate assistant turns or invoking the
|
|
140
|
+
tool after only one card is a failed interaction, not a valid presentation.
|
|
141
|
+
|
|
142
|
+
The first visible line of that envelope is the localized neutral decision title
|
|
143
|
+
of the current user gate, rendered as a level-two Markdown heading or equivalent
|
|
144
|
+
accessible host heading inside the compact approval-time Run Status Card.
|
|
145
|
+
`AGDF Status`, `Run Status Card`, `Gate Transition Card`, raw gate identifiers
|
|
146
|
+
and machine values are semantic or diagnostic labels only and must not become
|
|
147
|
+
the primary heading. Approval-directed titles such as `Approve solution design`
|
|
148
|
+
are also invalid. The decision title appears exactly once and does not replace,
|
|
149
|
+
merge or reorder either required card block.
|
|
150
|
+
|
|
151
|
+
The compact approval-time Run Status Card contains exactly five operational
|
|
152
|
+
fields: selected run, readiness status, current gate, a localized human-readable
|
|
153
|
+
required decision and one neutral instruction to choose approve, request revision
|
|
154
|
+
or decline. It does not contain the exact approval value or quality outlook. It uses localized human-readable labels
|
|
155
|
+
and must not contain evidence, diagnostic codes, raw control-state keys,
|
|
156
|
+
allowed/forbidden inventories or machine values. The complete Run Status Card remains the operational,
|
|
157
|
+
CLI and audit projection and remains available for complete detail outside the
|
|
158
|
+
approval-time compact view.
|
|
159
|
+
|
|
160
|
+
The first scan across both cards reveals the requested decision, readiness,
|
|
161
|
+
required approval, approval effect, remaining boundary and next transition.
|
|
162
|
+
Identity and artefact references provide supporting context without competing
|
|
163
|
+
with that sequence. Across the two cards, the exact `Approval: <GateName>` value
|
|
164
|
+
appears exactly once, in the Gate Transition Card. The later native prompt or
|
|
165
|
+
exact-text request may repeat it only as the required input.
|
|
166
|
+
|
|
167
|
+
The canonical `interaction-presentation.js` owner builds and validates one
|
|
168
|
+
immutable snapshot, then renders both complete Markdown blocks and the approval
|
|
169
|
+
interaction. The public additive `approval_presentation` schema contains
|
|
170
|
+
`schema_version`, selected run/revision/gate/locale identity, fixed sequence,
|
|
171
|
+
both rendered blocks, canonical prompt/options/exact-text fallback and
|
|
172
|
+
`authorizes: false`. It is a valid object only for a ready user gate and `null`
|
|
173
|
+
otherwise. Agents and surface adapters transmit these blocks without rebuilding
|
|
174
|
+
headings, fields, ordering, locale copy or Markdown.
|
|
175
|
+
|
|
176
|
+
The Gate Transition Card is the second orientation message. It is derived from
|
|
177
|
+
the same snapshot and canonical post-approval transition, but it is not another
|
|
178
|
+
state model, persisted record, renderer or approval authority. It turns only
|
|
179
|
+
the decision-relevant subset into concise product copy immediately before the
|
|
180
|
+
host-native question or exact-text fallback.
|
|
181
|
+
|
|
182
|
+
The card answers exactly three user questions, in this order:
|
|
183
|
+
|
|
184
|
+
1. **Where am I?** A localized human-readable gate title, deterministic human
|
|
185
|
+
run title, selected `run_id` as secondary context, compact `UR · PRD · SD · TP`
|
|
186
|
+
artefact links and a clear ready-for-decision state.
|
|
187
|
+
2. **What does this decision do?** The exact `Approval: <GateName>` value, its
|
|
188
|
+
concrete next outcome and the most important boundary that remains.
|
|
189
|
+
3. **What happens next?** The immediate agent-controlled action and the next
|
|
190
|
+
actual user decision when one exists; otherwise a plain statement that no
|
|
191
|
+
further user action is required now.
|
|
192
|
+
|
|
193
|
+
Use this compact composition:
|
|
194
|
+
|
|
195
|
+
```text
|
|
196
|
+
<localized gate title> · <human run title> · `<run_id>`
|
|
197
|
+
<UR link or localized missing text> · <PRD link or localized missing text> · <SD link or localized missing text> · <TP link or localized missing text>
|
|
198
|
+
<localized ready-for-decision line>
|
|
199
|
+
|
|
200
|
+
<localized approve heading>
|
|
201
|
+
`Approval: <GateName>` <localized concrete effect>. <localized remaining boundary>.
|
|
202
|
+
|
|
203
|
+
<localized next heading>
|
|
204
|
+
<localized immediate agent action>. <localized next user decision or no-action statement>.
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Resolve all AGDF-owned explanatory text through the canonical Interaction
|
|
208
|
+
Locale Registry. `en` and `de` are initial reviewed packs, not a closed locale
|
|
209
|
+
list. English is the deterministic fallback for absent, unsupported or
|
|
210
|
+
incomplete packs. Gate identifiers, `run_id`, canonical paths and exact
|
|
211
|
+
approval values are never translated. The visible gate title is localized;
|
|
212
|
+
for example, the German title may be `Lösungsdesign` while the authorization
|
|
213
|
+
value remains `Approval: SD`. Meaning, ordering and authority boundaries are
|
|
214
|
+
identical across locale packs.
|
|
215
|
+
|
|
216
|
+
The Gate Transition Card must not be a Markdown table or dashboard. It must not
|
|
217
|
+
present raw control-state keys, machine status values, diagnostic codes,
|
|
218
|
+
evidence lists, allowed/forbidden inventories or implementation detail that is
|
|
219
|
+
not needed for the decision. It must not repeat the native question. The card
|
|
220
|
+
normally fits in one title, one readiness line and two short content blocks.
|
|
221
|
+
Run and gate identity may appear in both cards to anchor the shared snapshot;
|
|
222
|
+
status rows, action inventories and transition prose must not be duplicated.
|
|
223
|
+
|
|
224
|
+
For `Approval: TP`, the effect is permission to run pre-implementation
|
|
225
|
+
Brownfield Analysis, implementation remains gated until that analysis passes,
|
|
226
|
+
and the next block states plainly that no further user decision is required
|
|
227
|
+
now. Brownfield Analysis must not be presented as a user gate.
|
|
228
|
+
|
|
229
|
+
If snapshot validation or rendering fails, emit no partial card and forbid native
|
|
230
|
+
invocation. Perform a fresh gate evaluation. Show only the localized exact-text
|
|
231
|
+
request when the same gate remains ready and the canonical approval value is
|
|
232
|
+
independently valid. Otherwise report the current non-ready reason and request no
|
|
233
|
+
decision. Never patch, guess or model-reconstruct missing presentation content.
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
## Native Interaction Contract
|
|
237
|
+
|
|
238
|
+
Native host controls improve how a decision is presented; they do not create a second approval model or authority source.
|
|
239
|
+
|
|
240
|
+
Every AGDF interaction belongs to exactly one semantic kind:
|
|
241
|
+
|
|
242
|
+
- `clarification`: asks for missing intent or a choice that does not itself authorize a gated transition.
|
|
243
|
+
- `tool_permission`: requests host-owned authority for a command, file change, network access, external path, app action or comparable technical side effect.
|
|
244
|
+
- `gate_approval`: requests deliberate user input for the one current AGDF user gate after its durable artefact and selected run are ready.
|
|
245
|
+
- `blocked`: explains a blocker and the one permissible recovery action without offering approval controls.
|
|
246
|
+
- `status`: reports current state without asking for a decision.
|
|
247
|
+
|
|
248
|
+
The semantic interaction envelope is:
|
|
249
|
+
|
|
250
|
+
```text
|
|
251
|
+
interaction_kind: clarification | tool_permission | gate_approval | blocked | status
|
|
252
|
+
surface: codex | claude | opencode | fallback
|
|
253
|
+
run_id: required for gate_approval
|
|
254
|
+
current_gate: required for gate_approval
|
|
255
|
+
native_attempt_required: true only after ready-gate and adapter-capability preflight prove exact value transport and safe deliberate waiting
|
|
256
|
+
prompt: required
|
|
257
|
+
options: required for a structured question
|
|
258
|
+
effects: required when the interaction can cause side effects
|
|
259
|
+
required_evidence: required for gate_approval
|
|
260
|
+
auto_resolution: forbidden for gate_approval
|
|
261
|
+
response_origin: deliberate_user_input for gate_approval
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
This envelope is not a new persisted record. The selected canonical `RUN_STATE.md` and existing artefact chain remain the durable authority.
|
|
265
|
+
|
|
266
|
+
Before presenting `gate_approval` for any user gate (`UR`, `PRD`, `SD`, `TP`,
|
|
267
|
+
`QA`, or `UAT`), the agent must emit the compact localized Run Status Card and
|
|
268
|
+
the localized Gate Transition Card as two distinct blocks in that order within
|
|
269
|
+
one immediately preceding assistant message. Neither card is optional, hidden
|
|
270
|
+
in the question text or replaced by a host button label. Do not invoke the
|
|
271
|
+
native question tool until the complete two-card envelope is visible. Native
|
|
272
|
+
buttons or exact-text fallback may appear only after both cards. Render the two
|
|
273
|
+
cards once per eligible attempt; an unavailable or not-applied native control
|
|
274
|
+
proceeds to exact text without repeating them.
|
|
275
|
+
|
|
276
|
+
Before presenting `gate_approval`, the agent must:
|
|
277
|
+
|
|
278
|
+
1. resolve exactly one selected run;
|
|
279
|
+
2. run the canonical gate evaluation and confirm that the current gate's durable artefact is present and ready;
|
|
280
|
+
3. consume one validated canonical `approval_presentation`, emit its compact Run Status Card and Gate Transition Card verbatim in that order immediately before the gate question, then ask exactly one gate question that identifies `run_id` and `current_gate` and offers the exact approving value `Approval: <GateName>` followed by stable `revise` and `decline` outcomes; host-owned dismissal maps to `cancel` where only three choices are available;
|
|
281
|
+
4. wait for deliberate user input without a timeout, default, preselection, hook-supplied answer or agent-to-agent substitute;
|
|
282
|
+
5. re-run canonical gate evaluation against the same `run_id` and expected gate immediately before persistence;
|
|
283
|
+
6. reject missing evidence, ambiguous or wrong run, wrong gate, stale state and any response that is no longer valid;
|
|
284
|
+
7. persist an accepted approval only through the existing control-state workflow.
|
|
285
|
+
|
|
286
|
+
For a ready `gate_approval`, interaction kind and native capability are separate. Evaluate callability,
|
|
287
|
+
deliberate wait safety and canonical approval-value transport before invocation. `native_attempt_required`
|
|
288
|
+
is true only when current evidence proves `exact_option_value` or `separate_label_and_value` transport
|
|
289
|
+
with safe deliberate waiting. Decorated-only, missing, conflicting or unknown capability fails closed to
|
|
290
|
+
`unavailable_before_invocation`; unsafe waiting fails closed to `unsafe_to_wait`. Both expose false and use
|
|
291
|
+
exact text without invoking the adapter. A report-only CLI evaluation has no verified current host adapter
|
|
292
|
+
and therefore exposes false. Hooks may prepare context but must not answer, approve or replace an eligible attempt.
|
|
293
|
+
An adapter that requires a visible suffix such as `(Recommended)` on its approving option is
|
|
294
|
+
`decorated_label_only`: do not invoke it for an AGDF gate. `Approval: <GateName> (Recommended)` is never a
|
|
295
|
+
valid AGDF approval option or authorization value; use the undecorated exact-text fallback instead.
|
|
296
|
+
|
|
297
|
+
The first eligible native-attempt has a single bounded outcome: the declared
|
|
298
|
+
host control is presented, or the agent immediately uses the exact-text
|
|
299
|
+
fallback. A host that does not apply the control does not trigger a second
|
|
300
|
+
native prompt. AGDF must not simulate or force host-owned presentation.
|
|
301
|
+
|
|
302
|
+
An eligible interaction must make its presentation outcome visible and
|
|
303
|
+
distinguishable: `presented`, `unavailable_before_invocation`,
|
|
304
|
+
`attempted_not_applied`, or `unsafe_to_wait`. This is transient presentation
|
|
305
|
+
evidence only, never a persisted approval, selected-run authority or substitute
|
|
306
|
+
for post-response revalidation. A textual fallback names the outcome, gives the
|
|
307
|
+
exact approval value and confirms that authority is unchanged. A fresh explicit
|
|
308
|
+
user request may reopen the unchanged decision after revalidation; it is not an
|
|
309
|
+
automatic retry.
|
|
310
|
+
|
|
311
|
+
For deterministic local projection, use an already installed `agdf gate-check
|
|
312
|
+
--json` and consume `approval_presentation`, or use `agdf gate-check
|
|
313
|
+
--approval-envelope` on an exact-text surface. These are renderer/validator
|
|
314
|
+
helpers, not a second UX or gate authority. Do not require a registry-resolved
|
|
315
|
+
`npx ...@latest` call for each normal interaction. `npx` remains the explicit
|
|
316
|
+
bootstrap, installation, refresh or missing-local-executable path.
|
|
317
|
+
|
|
318
|
+
A free-form native response is valid only when the existing exact-approval validator accepts it for the current gate after revalidation. A localized label, description, option position, recommendation style or host action never authorizes a gate. Revise, decline and cancel outcomes never advance a gate.
|
|
319
|
+
|
|
320
|
+
Surface adapter rules:
|
|
321
|
+
|
|
322
|
+
| Surface | Native question adapter | Gate-safe use | Technical permission boundary |
|
|
323
|
+
|---|---|---|---|
|
|
324
|
+
| Codex | native `request_user_input` or equivalent short-question control when callable | invoke on the first eligible attempt when preflight proves `exact_option_value`; if unavailable or not applied, use exact text without retry | Codex command, edit, network, external-directory and app-action approvals remain host-owned `tool_permission`. |
|
|
325
|
+
| 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. |
|
|
326
|
+
| 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. |
|
|
327
|
+
| GitHub Copilot | none in the current AGDF repository-instruction surface | transmit the canonical rendered cards followed by the exact-text request; never claim or simulate a native approval control | Copilot tool confirmations, plan interactions and repository permissions are not AGDF approval. |
|
|
328
|
+
| 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. |
|
|
329
|
+
|
|
330
|
+
Native structured questions are for real decision points. Prefer repository inspection over clarification and do not show them for status reporting, discoverable facts, routine read-only work or repeated non-ready gate prompts.
|
|
331
|
+
|
|
332
|
+
### Read-only request orientation
|
|
333
|
+
|
|
334
|
+
For a newly classified read-only request that does not require a run decision, render the localized
|
|
335
|
+
`primary.readOnlyOrientationDescription` sentence exactly once before the findings. This is a visible
|
|
336
|
+
orientation, not durable state: do not create a run, write control files, request gate approval or
|
|
337
|
+
repeat the sentence later in the same request. Existing-run status inspection remains read-only and
|
|
338
|
+
uses the existing status projection; this branch must not create a second status-card or narration
|
|
339
|
+
owner.
|
|
340
|
+
|
|
341
|
+
### Task Target Orientation
|
|
342
|
+
|
|
343
|
+
Task-target semantics and ordering live in `task-target-resolution.md`. When target/context
|
|
344
|
+
separation is material, a confirmed target changes, or resolution is unresolved, the agent consumes
|
|
345
|
+
the canonical `task_target_orientation.markdown` verbatim from `renderTaskTargetOrientation` in
|
|
346
|
+
`create-agdf/lib/interaction-presentation.js`.
|
|
347
|
+
|
|
348
|
+
The projection may show the primary target, governance target, evidence sources and working
|
|
349
|
+
directory for a resolved result. For an unresolved result it shows the localized reason and required
|
|
350
|
+
next action. It carries `authorizes: false`, never renders approval controls and never selects or
|
|
351
|
+
derives a target.
|
|
352
|
+
|
|
353
|
+
For a fresh request, render the target orientation before read-only orientation, Scope
|
|
354
|
+
Classification or any gate presentation when it is required. An unresolved result suppresses every
|
|
355
|
+
downstream orientation and gate surface. A resolved result with material target separation may be
|
|
356
|
+
followed by the one applicable downstream surface. Avoid a redundant target block for an obvious
|
|
357
|
+
unchanged target.
|
|
358
|
+
|
|
359
|
+
If the input is incomplete or contradictory, the renderer returns `null`. The agent then fails closed
|
|
360
|
+
to target clarification and must not model-reconstruct Markdown. `gate-check` must not maintain a
|
|
361
|
+
skill-local target-orientation template.
|
|
362
|
+
|
|
363
|
+
### Scope Classification Card
|
|
364
|
+
|
|
365
|
+
When `gate-check` classifies a fresh scope as ungated (Quick Task or Trivial Change Boundary),
|
|
366
|
+
the agent consumes the canonical `scope_classification.markdown` verbatim from
|
|
367
|
+
`renderScopeClassificationCard` in `create-agdf/lib/interaction-presentation.js`. The card is a
|
|
368
|
+
compact, localized, non-authorizing projection of the classification: mode, boundary result,
|
|
369
|
+
UR-trigger evaluation, one currently-allowed line, one remains-forbidden line, escalation triggers
|
|
370
|
+
and the challenge path. It carries `authorizes: false` and never renders approval controls.
|
|
371
|
+
|
|
372
|
+
The card renders exactly once per fresh-scope ungated classification, before work proceeds. It must
|
|
373
|
+
not appear for gated scopes, internal steps of a selected run, or as a substitute for the two-card
|
|
374
|
+
approval envelope. Read-only requests keep the single read-only orientation sentence above; the
|
|
375
|
+
scope classification card and the read-only orientation are mutually exclusive for the same request.
|
|
376
|
+
|
|
377
|
+
If the classification input is missing, unknown, contradictory or the locale section is incomplete,
|
|
378
|
+
the renderer returns `null` and the agent fails closed to the existing ceremony — never
|
|
379
|
+
model-reconstructed Markdown. The card introduces no gate, no approval value, no persistence and no
|
|
380
|
+
second presentation owner. `gate-check` must not maintain a skill-local card template.
|
|
381
|
+
|
|
382
|
+
Exact textual approvals remain canonical and fully supported on every surface. If native capability availability or safety is unknown, use the textual fallback. Host permission, plan approval, native question presentation, timeout/default behavior, hook output and agent messages never carry AGDF gate authority by themselves.
|
|
383
|
+
|
|
384
|
+
### Interaction Locale Contract
|
|
385
|
+
|
|
386
|
+
User-facing native questions, option descriptions, primary chat cards, exact-text
|
|
387
|
+
fallback and human CLI output use the configured project chat language from
|
|
388
|
+
`.agdf/control/config.json` and the canonical registry
|
|
389
|
+
`plugin/meta/agdf-interaction-locales.json`:
|
|
390
|
+
|
|
391
|
+
- resolve an exact complete pack, then its language subtag, then deterministic English fallback;
|
|
392
|
+
- `en` and `de` are the initial complete packs; additional reviewed complete packs are supported without changing runtime logic;
|
|
393
|
+
- an incomplete pack is unsupported and must fail to English as a unit;
|
|
394
|
+
- one interaction must not mix presentation languages, including labels and descriptions;
|
|
395
|
+
- durable artefacts, runtime rules, task identifiers and machine-facing approval values remain English;
|
|
396
|
+
- the exact approval value remains `Approval: <GateName>` in every locale;
|
|
397
|
+
- localized `revise`, `decline` and `cancel` labels are presentation text only and never carry gate authority;
|
|
398
|
+
- host-owned chrome follows the host's own UI language and must not be presented as AGDF-translated chat copy.
|
|
399
|
+
|
|
400
|
+
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.
|
|
401
|
+
|
|
402
|
+
### Gate-Rationale-Registry
|
|
403
|
+
|
|
404
|
+
The locale registry contains a deterministic, localized `gateRationale` section with one
|
|
405
|
+
curated one-liner per gate and internal step. The agent retrieves rationale strings via
|
|
406
|
+
the `gateRationale()` function; it does not generate rationale prose. Rationale strings
|
|
407
|
+
are the same across invocations for the same gate and locale.
|
|
408
|
+
|
|
409
|
+
The registry covers all user gates (`UR`, `PRD`, `SD`, `TP`, `QA`, `UAT`) and all internal
|
|
410
|
+
steps (`Brownfield Review`, `Mode/Slice Decision`, `Brownfield Analysis`, `CD+Tests`, `CR`,
|
|
411
|
+
`OR`). Each string stays within the declared `lengthBudgets.description` budget. Key parity
|
|
412
|
+
across locale packs is enforced by the existing `validateLocaleRegistry` baseline
|
|
413
|
+
comparison.
|
|
414
|
+
|
|
415
|
+
A one-liner cannot explain the full protective function. The user needs enough to accept
|
|
416
|
+
that the gate makes sense, not the complete rationale. Deeper context is available on
|
|
417
|
+
demand through the "Why?" interaction.
|
|
418
|
+
|
|
419
|
+
### On-Demand "Why?" Interaction
|
|
420
|
+
|
|
421
|
+
When the user asks "why?" at any gate or internal step, the agent responds with a `status`
|
|
422
|
+
interaction containing the curated rationale (Gate-Rationale-Registry) plus one line of
|
|
423
|
+
fulfilled/protects context composed from existing state.
|
|
424
|
+
|
|
425
|
+
- The response is deterministic, non-authorizing, and does not display approval controls.
|
|
426
|
+
- It is a separate `status` interaction, never merged with the `gate_approval` sequence.
|
|
427
|
+
- The `gate_approval` options remain exactly `approve | revise | decline | cancel`; no
|
|
428
|
+
"why" option is added.
|
|
429
|
+
- The response never breaks `APPROVAL_SEQUENCE` or `validateApprovalOrientationSnapshot`.
|
|
430
|
+
- Default output is unchanged when the user does not ask.
|
|
431
|
+
- The fulfilled line is composed from the selected run's Approvals table and artefact
|
|
432
|
+
status; the protects-against line is composed from the gate's rationale and existing
|
|
433
|
+
`primary.actions` copy. The agent does not generate new prose.
|
|
434
|
+
|
|
435
|
+
### Human Decision Presentation Contract
|
|
436
|
+
|
|
437
|
+
The primary user surface is a pure projection of the selected canonical run.
|
|
438
|
+
It must never become a second evaluator, state store, renderer authority or
|
|
439
|
+
approval path. Native controls, exact-text fallback and human CLI output use
|
|
440
|
+
the same semantic payload and outcome ordering; machine JSON retains its
|
|
441
|
+
stable field names and diagnostic values.
|
|
442
|
+
|
|
443
|
+
For every primary chat card:
|
|
444
|
+
|
|
445
|
+
1. Resolve a human run title deterministically from the current artefact
|
|
446
|
+
heading, approved UR heading, first non-empty Objective line, then normalized
|
|
447
|
+
`run_id`.
|
|
448
|
+
2. Show `UR · PRD · SD · TP` in that stable order. Existing selected-run
|
|
449
|
+
artefacts are links with readable labels; missing artefacts use localized
|
|
450
|
+
non-link text. Never guess a path or emit a broken link.
|
|
451
|
+
3. Use a localized neutral decision title while preserving the exact gate identifier
|
|
452
|
+
and `Approval: <GateName>` authorization value. The technical value appears
|
|
453
|
+
once across the two cards, in the transition card; the later input control may
|
|
454
|
+
repeat it as the required value.
|
|
455
|
+
4. Keep primary copy decision-oriented. Raw keys such as `next_user_gate`,
|
|
456
|
+
`mode_slice_decision` and `required_next_gate`, diagnostic codes and machine
|
|
457
|
+
status values belong to JSON or audit detail, not the primary interaction.
|
|
458
|
+
|
|
459
|
+
For a ready approval, explicit options are ordered `approve`, `revise`,
|
|
460
|
+
`decline`; an explicit `cancel` follows only on surfaces that support it, while
|
|
461
|
+
host dismissal maps to `cancel` on three-choice surfaces. Do not preselect,
|
|
462
|
+
auto-submit, recommend as authorization, skip or reorder an option. Labels and
|
|
463
|
+
descriptions use the same resolved locale and must have distinct, non-empty
|
|
464
|
+
accessible names. Translation length budgets must preserve meaning without
|
|
465
|
+
truncation being the only distinction.
|
|
466
|
+
|
|
467
|
+
Normalize outcomes as distinct values:
|
|
468
|
+
|
|
469
|
+
```text
|
|
470
|
+
approve | revise | decline | cancel | no_response | timeout | empty | invalid | stale
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
Missing input, timeout, cancellation and empty input are not decline. Only
|
|
474
|
+
`approve` backed by the exact revalidated `Approval: <GateName>` value may
|
|
475
|
+
advance a gate. Clarification, blocked, internal-step and status-only
|
|
476
|
+
interactions must not display gate-approval controls.
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# AGDF Runtime Contract — Modes
|
|
2
|
+
|
|
3
|
+
## Mode Selection
|
|
4
|
+
|
|
5
|
+
| Mode | Default | Escalate When |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| Quick Task Mode | small questions, reviews, debugging, local fixes without new product semantics | a new user capability, architecture/policy/persistence impact, formal artefacts, or approvals are involved |
|
|
8
|
+
| Structured Delivery Mode | formal delivery runs, gate-relevant work, release-critical changes | always use gate discipline, internal reviews, and OR |
|
|
9
|
+
|
|
10
|
+
Quick Task Mode must not become ritual gate overhead.
|
|
11
|
+
Structured Delivery must not bypass missing approvals.
|
|
12
|
+
New product semantics, functional change, user-visible behaviour, policy, persistence, architecture or release-critical work requires a durable UR in `.agdf/control/` or a linked authoritative repository SoT before later artefacts or implementation.
|
|
13
|
+
UR, PRD, SD, TP and QA report approvals require durable artefacts or linked authoritative repository SoT entries before the next gate can open.
|
|
14
|
+
|
|
15
|
+
## Quick Task Output
|
|
16
|
+
|
|
17
|
+
Quick Tasks are intentionally lightweight, but they must not become invisible.
|
|
18
|
+
Use this compact output shape when no formal gate artefact is required:
|
|
19
|
+
|
|
20
|
+
- `result`: what changed or was concluded
|
|
21
|
+
- `evidence`: files, commands, observations, or reasoning that support the result
|
|
22
|
+
- `risk`: remaining risk or `none`
|
|
23
|
+
- `next_step`: the single next useful action or `none`
|
|
24
|
+
|
|
25
|
+
Do not add a separate `Quality outlook` line for pure Quick Tasks unless the task became a relevant run.
|
|
26
|
+
|
|
27
|
+
### Quick Task and Compact Delivery
|
|
28
|
+
|
|
29
|
+
Use **Quick Task** for ungated questions, reviews, debugging and eligible narrow fixes that introduce
|
|
30
|
+
no new product semantics or formal artefacts. When an approved UR is followed by a Brownfield Review
|
|
31
|
+
that selects the persisted `quick_task` mode, use **Compact Delivery** as the human-facing label. The
|
|
32
|
+
stored and JSON value remains `quick_task`; Compact Delivery is not a new mode or approval gate.
|
|
33
|
+
|
|
34
|
+
Brownfield Review owns the Mode/Slice selection. A completed review records its decision, scope
|
|
35
|
+
reason, evidence and required next depth in the same internal operation. `Mode/Slice Decision` remains
|
|
36
|
+
only a fail-closed recovery step for incomplete or legacy records and is not a normal second user
|
|
37
|
+
decision.
|
|
38
|
+
|
|
39
|
+
### Structured Depth Decision
|
|
40
|
+
|
|
41
|
+
This section is the sole normative owner for choosing between `structured_slice` and
|
|
42
|
+
`structured_delivery`. Apply it only after an approved durable UR, a Brownfield Review of the
|
|
43
|
+
existing-system context, and unchanged evaluation of Quick Task/Compact Delivery and Verified
|
|
44
|
+
Change. A compact path must be ineligible or explicitly escalated, and the decisive depth facts must
|
|
45
|
+
be durably evidenced before a positive structured decision is recorded.
|
|
46
|
+
|
|
47
|
+
Choose `structured_delivery` when any one evidenced full-depth trigger applies:
|
|
48
|
+
|
|
49
|
+
1. **Authority, policy or security** — a trust or authority boundary, permission, security,
|
|
50
|
+
compliance or normative policy changes, or independent decision owners require coordinated
|
|
51
|
+
approval.
|
|
52
|
+
2. **Architecture or runtime** — execution, orchestration, durable execution, concurrency, failure
|
|
53
|
+
or recovery boundaries change beyond a local slice.
|
|
54
|
+
3. **Persistence, data or migration** — persistent schema or meaning changes, data migration,
|
|
55
|
+
irreversible state transition, coordinated cutover, an extended compatibility window or
|
|
56
|
+
non-local rollback is required.
|
|
57
|
+
4. **External or public contract** — an external API, public CLI behavior, protocol, file format or
|
|
58
|
+
compatibility-sensitive integration contract changes, including independent consumer
|
|
59
|
+
coordination or versioning.
|
|
60
|
+
5. **Release, deployment or cross-host** — the work needs its own rollout, deployment, rollback,
|
|
61
|
+
feature-flag or release plan, or coordinated activation across hosts, products or operational
|
|
62
|
+
boundaries.
|
|
63
|
+
6. **Unbounded consumer or owner coordination** — the outcome cannot be delivered as an
|
|
64
|
+
independently acceptable and reversible slice, or consumers or owners require a shared cutover
|
|
65
|
+
or compatibility window.
|
|
66
|
+
|
|
67
|
+
A single trigger is decisive because of its effect, never because of a numeric count.
|
|
68
|
+
|
|
69
|
+
Choose `structured_slice` only when `depth_facts_status` is `complete`, no full-depth trigger is
|
|
70
|
+
evidenced, and all seven bounded-slice checks are positively evidenced as `pass`:
|
|
71
|
+
|
|
72
|
+
| Check ID | Required evidence |
|
|
73
|
+
|---|---|
|
|
74
|
+
| `coherent_outcome` | One coherent user or product outcome has a clear acceptance boundary. |
|
|
75
|
+
| `authority_boundary` | Authority and source of truth are known and no new trust, policy, permission or security boundary is introduced. |
|
|
76
|
+
| `owner_consumer_coordination` | Owners and consumers are identified and coordination stays inside the slice without a shared external cutover. |
|
|
77
|
+
| `full_depth_impacts_absent` | Architecture, runtime, persistence, data, external API, public CLI, release and cross-host effects are evidenced as not full-depth relevant. |
|
|
78
|
+
| `migration_propagation_bounded` | Migration and propagation are bounded, compatible, testable and locally reversible. |
|
|
79
|
+
| `failure_recovery_local` | Failure, recovery and rollback remain controllable inside the slice. |
|
|
80
|
+
| `independently_acceptable` | The slice has independent acceptance signals and hides no unknown later work as a prerequisite. |
|
|
81
|
+
|
|
82
|
+
Multiple files, owners, consumers or derived paths do not fail these checks by themselves. File,
|
|
83
|
+
owner, consumer, task or derived-path counts are not a decision proxy and must never be used as a
|
|
84
|
+
threshold for either structured mode.
|
|
85
|
+
|
|
86
|
+
If a decisive fact is missing or conflicting and no evidenced full-depth trigger already supports
|
|
87
|
+
`structured_delivery`, the product-language result is `depth_unresolved`. This is not a persisted
|
|
88
|
+
mode. Persist the existing Mode/Slice value `block`, use `depth_facts_missing` or
|
|
89
|
+
`depth_facts_conflicting`, name the affected facts and evidence owner where known, link the
|
|
90
|
+
Brownfield Review, forbid later artefacts and implementation, and provide a precise next action for
|
|
91
|
+
evidence completion and Brownfield/Mode-Slice re-evaluation. Unknown facts must not default to
|
|
92
|
+
`structured_delivery`.
|
|
93
|
+
|
|
94
|
+
Positive decisions persist the existing `structured_slice | structured_delivery` value, required
|
|
95
|
+
next gate, a `scope_reason` containing the primary reason code and decisive rationale plus the
|
|
96
|
+
rejected alternative, and evidence linking the complete Structured Depth Evidence. Re-evaluate
|
|
97
|
+
before continuing whenever scope growth reveals a new full-depth trigger.
|
|
98
|
+
|
|
99
|
+
Normalized reason codes are audit and rationale categories, not new modes or gates:
|
|
100
|
+
|
|
101
|
+
- `bounded_structured_slice`
|
|
102
|
+
- `authority_policy_security_depth`
|
|
103
|
+
- `architecture_runtime_depth`
|
|
104
|
+
- `persistence_migration_depth`
|
|
105
|
+
- `external_contract_depth`
|
|
106
|
+
- `release_cross_host_depth`
|
|
107
|
+
- `unbounded_consumer_coordination`
|
|
108
|
+
- `depth_facts_missing`
|
|
109
|
+
- `depth_facts_conflicting`
|
|
110
|
+
|
|
111
|
+
Structured Slice and Structured Delivery use the same existing gate and approval sequence. Their
|
|
112
|
+
difference is artefact depth: Slice artefacts cover only the coherent bounded outcome and its owners,
|
|
113
|
+
contracts, propagation, recovery, tasks and tests; Full Delivery covers every affected authority,
|
|
114
|
+
architecture, runtime, consumer, migration, operational and release boundary.
|
|
115
|
+
|
|
116
|
+
Historical or deterministic benchmark observations are non-authorizing evidence. They do not define
|
|
117
|
+
this policy, retroactively regrade historical runs or prove live-host behavior. A future benchmark
|
|
118
|
+
may apply this policy only with complete, versioned neutral depth facts.
|
|
119
|
+
|
|
120
|
+
### Verified Change
|
|
121
|
+
|
|
122
|
+
`verified_change` is a compact, fail-closed path for a bounded user-visible change with one canonical owner and deterministic proof. It is neither a prose exception nor a new user approval gate.
|
|
123
|
+
|
|
124
|
+
After `Approval: UR`, Brownfield Review may select `verified_change` only when a durable `VERIFIED_CHANGE.md` record can prove all of the following before implementation:
|
|
125
|
+
|
|
126
|
+
1. exactly one repository-relative canonical owner and bounded source/derived paths;
|
|
127
|
+
2. no gate, permission, security, persistence, architecture, external API, CLI or release behavior impact;
|
|
128
|
+
3. deterministic propagation when derived paths exist, plus at least one deterministic validation command;
|
|
129
|
+
4. a full baseline commit plus tracked and untracked worktree baseline paths captured before eligibility, with no candidate path already dirty; and
|
|
130
|
+
5. an explicit `structured_slice` or `structured_delivery` escalation target.
|
|
131
|
+
|
|
132
|
+
The record is the compact Brownfield selection, eligibility, execution and mini-closeout artefact. The selected run may link the same normalized record path as Brownfield Review, Verified Change and OR only in `verified_change` mode and only with lifecycle-consistent role states; separate Brownfield and OR files remain supported. Permitted control paths derive only from recognized, explicitly linked artefacts beneath the selected run's own artefact directory.
|
|
133
|
+
|
|
134
|
+
A missing, failed, unknown or ambiguous field/check must fail closed: mark the record `escalated` and continue at its declared structured target. Unrelated paths already dirty at baseline remain isolated; newly introduced unlisted paths invalidate the compact path. An executed record requires a machine-readable exact changed-path snapshot with passing scope status, passing validation evidence and, where applicable, passing propagation evidence. Active runs compare that snapshot with the current post-baseline worktree. Completed executed runs validate the persisted snapshot and record evidence without being retroactively invalidated by later unrelated live-worktree changes.
|
|
135
|
+
|
|
136
|
+
### Non-Normative Trivial Change Boundary
|
|
137
|
+
|
|
138
|
+
A `quick_task` whose entire diff stays fully outside all of the following paths may close using only
|
|
139
|
+
the compact output shape above, and must not create, rewrite or expand any selected canonical
|
|
140
|
+
`RUN_STATE.md` core
|
|
141
|
+
sections (Run Meta, Objective, Current Control State, Source And Scope State, Run Status Card,
|
|
142
|
+
Approvals, Artefacts, Mode/Slice Decision, Artefact Chain, Evidence, Missing Evidence, Risks, Context
|
|
143
|
+
Graph Impact, Knowledge Persistence Decision, Closeout):
|
|
144
|
+
|
|
145
|
+
- `plugin/skills/**`
|
|
146
|
+
- `plugin/control/templates/**`
|
|
147
|
+
- `plugin/meta/**`
|
|
148
|
+
- `create-agdf/lib/**`
|
|
149
|
+
- `create-agdf/bin/**`
|
|
150
|
+
- any other executable code file, in any language, anywhere in the repository
|
|
151
|
+
|
|
152
|
+
A `MASTER_BACKLOG.md` entry is required only when the change is otherwise a "Relevant Run" below. A
|
|
153
|
+
change that is not clearly and fully outside every listed path fails closed to the existing, unchanged
|
|
154
|
+
ceremony — ambiguity is never read as permission for the lighter path.
|
|
155
|
+
|
|
156
|
+
#### Narrow Code-Fix Criterion
|
|
157
|
+
|
|
158
|
+
A change that touches one of the otherwise-excluded code paths above may still close with only the
|
|
159
|
+
compact Quick Task Output shape — Code Review remains mandatory regardless — when **all** of the
|
|
160
|
+
following hold. Any single condition failing, or any ambiguity about whether a condition holds, keeps
|
|
161
|
+
the full existing ceremony unchanged:
|
|
162
|
+
|
|
163
|
+
1. The diff is confined to a single function, or a function together with its direct,
|
|
164
|
+
necessarily-coupled caller, in exactly one file.
|
|
165
|
+
2. A new or updated automated regression test exercises the fixed behavior and passes.
|
|
166
|
+
3. No PRD, SD, TP, gate name, exact approval formula, or documented CLI flag/output-schema field is
|
|
167
|
+
added, removed, or changed — only internal correctness of already-approved behavior.
|
|
168
|
+
4. `doctor` (or the locally available equivalent) and the directly affected existing test suite both
|
|
169
|
+
pass unchanged in shape after the fix, with no assertion skipped or weakened beyond what the fix
|
|
170
|
+
itself introduces.
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
## Bug Lightweight Track
|
|
174
|
+
|
|
175
|
+
For narrow defect work, a repository may use a lightweight bug scope instead of the full UR/PRD/SD/TP chain when all of the following are true:
|
|
176
|
+
|
|
177
|
+
- the defect is tied to a concrete symptom or ticket
|
|
178
|
+
- the expected behavior is clear enough to test
|
|
179
|
+
- no new product semantics, architecture, policy, persistence or cross-owner decision is introduced
|
|
180
|
+
- a durable bug artefact or linked authoritative issue records reproduction, actual behavior, expected behavior, fix boundary, open questions and evidence plan
|
|
181
|
+
|
|
182
|
+
The Bug Lightweight Track does not remove QA, OR, evidence, Brownfield fit or exact approvals required by the target repository.
|
|
183
|
+
If the bug grows beyond the stated boundary, escalate to normal AGDF gate flow.
|