create-agdf 0.10.3 → 0.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/generated/.agdf/control/templates/artefacts/BROWNFIELD_REVIEW.md +12 -0
- package/generated/.agdf/control/templates/artefacts/PRD.md +40 -8
- package/generated/.agdf/control/templates/artefacts/UX_INTENT_DEFINITION.md +51 -0
- package/generated/.github/skills/README.md +1 -0
- package/generated/.github/skills/agdf-brownfield-analysis/SKILL.md +9 -0
- package/generated/.github/skills/agdf-clean-implementation-review/SKILL.md +18 -0
- package/generated/.github/skills/agdf-code-review/SKILL.md +17 -0
- package/generated/.github/skills/agdf-gate-check/SKILL.md +6 -0
- package/generated/.github/skills/agdf-qa-gate/SKILL.md +15 -5
- package/generated/.github/skills/agdf-task-plan-review/SKILL.md +33 -0
- package/generated/.github/skills/agdf-ux-intent-definition/SKILL.md +94 -0
- package/generated/.github/skills/contracts/control-scaffold.md +4 -0
- package/generated/.github/skills/contracts/gate-transition.md +25 -0
- package/generated/.github/skills/contracts/quality.md +58 -1
- package/generated/.opencode/AGDF.md +6 -0
- package/generated/.opencode/README.md +1 -0
- package/generated/.opencode/contracts/control-scaffold.md +4 -0
- package/generated/.opencode/contracts/gate-transition.md +25 -0
- package/generated/.opencode/contracts/quality.md +58 -1
- package/generated/.opencode/skills/agdf-brownfield-analysis/SKILL.md +9 -0
- package/generated/.opencode/skills/agdf-clean-implementation-review/SKILL.md +18 -0
- package/generated/.opencode/skills/agdf-code-review/SKILL.md +17 -0
- package/generated/.opencode/skills/agdf-gate-check/SKILL.md +6 -0
- package/generated/.opencode/skills/agdf-qa-gate/SKILL.md +15 -5
- package/generated/.opencode/skills/agdf-task-plan-review/SKILL.md +33 -0
- package/generated/.opencode/skills/agdf-ux-intent-definition/SKILL.md +94 -0
- package/generated/AGENTS.md +6 -0
- package/generated/plugins/agdf/.claude-plugin/plugin.json +1 -1
- package/generated/plugins/agdf/.codex-plugin/plugin.json +1 -1
- package/generated/plugins/agdf/control/templates/artefacts/BROWNFIELD_REVIEW.md +12 -0
- package/generated/plugins/agdf/control/templates/artefacts/PRD.md +40 -8
- package/generated/plugins/agdf/control/templates/artefacts/UX_INTENT_DEFINITION.md +51 -0
- package/generated/plugins/agdf/meta/agdf-agent-router.md +6 -0
- package/generated/plugins/agdf/meta/agdf-plugin.definition.json +7 -1
- package/generated/plugins/agdf/meta/contracts/control-scaffold.md +4 -0
- package/generated/plugins/agdf/meta/contracts/gate-transition.md +25 -0
- package/generated/plugins/agdf/meta/contracts/quality.md +58 -1
- package/generated/plugins/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-plugin.definition.json +7 -1
- package/generated/plugins/agdf/runtime/create-agdf/package.json +1 -1
- package/generated/plugins/agdf/runtime/runtime-manifest.json +2 -2
- package/generated/plugins/agdf/scripts/check-runtime-integrity.mjs +138 -1
- package/generated/plugins/agdf/skills/brownfield-analysis/SKILL.md +9 -0
- package/generated/plugins/agdf/skills/clean-implementation-review/SKILL.md +18 -0
- package/generated/plugins/agdf/skills/code-review/SKILL.md +17 -0
- package/generated/plugins/agdf/skills/gate-check/SKILL.md +6 -0
- package/generated/plugins/agdf/skills/qa-gate/SKILL.md +15 -5
- package/generated/plugins/agdf/skills/task-plan-review/SKILL.md +33 -0
- package/generated/plugins/agdf/skills/ux-intent-definition/SKILL.md +94 -0
- package/generated/plugins/agdf/skills/ux-intent-definition/help.md +17 -0
- package/lib/scaffold/plan.js +3 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"id": "agdf",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.11.2",
|
|
5
5
|
"displayName": "AI Governance & Delivery Framework",
|
|
6
6
|
"developerName": "Arndt Gold",
|
|
7
7
|
"description": "Operating system for governed AI-assisted delivery.",
|
|
@@ -168,6 +168,12 @@
|
|
|
168
168
|
"useFor": "after gate-check permits Brownfield Review or implementation preparation, before non-trivial changes in existing systems",
|
|
169
169
|
"boundary": "clarifies reuse, owners, risks and Mode/Slice Decision; never bypasses gate-check; Brownfield Review is not implementation permission"
|
|
170
170
|
},
|
|
171
|
+
{
|
|
172
|
+
"slug": "ux-intent-definition",
|
|
173
|
+
"discovery": "automatic",
|
|
174
|
+
"useFor": "after approved UR and post-UR routing for medium/high UI/UX impact or ambiguous low-impact product semantics before PRD readiness",
|
|
175
|
+
"boundary": "non-authorizing analytical PRD input; never creates product intent, gate permission, technical design or a parallel product source of truth"
|
|
176
|
+
},
|
|
171
177
|
{
|
|
172
178
|
"slug": "clean-implementation-review",
|
|
173
179
|
"discovery": "automatic",
|
|
@@ -89,6 +89,10 @@ Helper commands are deterministic proof and automation interfaces, not the norma
|
|
|
89
89
|
Machine-readable outputs should stay agent-friendly: stable decisions, blocking gate or current gate, missing approval, allowed outputs, forbidden outputs, next step, evidence and findings.
|
|
90
90
|
They make the repository state checkable, but they do not replace the native skill workflow or the durable control artefacts.
|
|
91
91
|
|
|
92
|
+
### Repository Activation Diagnosis Boundary
|
|
93
|
+
|
|
94
|
+
`doctor --json` on the resolved surface-local validator is the sole canonical, code-owned, tool-shell-safe activation probe. Plugin `AGDF_*` environment variables set by the OpenCode `shell.env` hook are an internal plugin status channel consumed by `opencode-status`, not an agent-facing diagnosis proof; host shell-env propagation to spawned tool shells is not guaranteed and is OpenCode-owned. A relative glob or `grep` for `.agdf/control/config.json` must not be used as proof of presence or absence of `.agdf/control/config.json`; an absolute `read` or the canonical CLI probe is required.
|
|
95
|
+
|
|
92
96
|
## Delivery Map
|
|
93
97
|
|
|
94
98
|
`delivery-map --json` is the machine-readable delivery picture for the selected canonical control state.
|
|
@@ -99,6 +99,31 @@ Mode/Slice Decision rules:
|
|
|
99
99
|
|
|
100
100
|
A Mode/Slice Decision without scope reason and evidence is not recorded. Treat it as missing and keep the next step at `Mode/Slice Decision`.
|
|
101
101
|
|
|
102
|
+
### UI/UX Impact And UX Intent Definition
|
|
103
|
+
|
|
104
|
+
The existing `brownfield-analysis` `post_ur_review` mode is the single proportional routing owner for
|
|
105
|
+
both Greenfield and Brownfield delivery. It records:
|
|
106
|
+
|
|
107
|
+
- `delivery_context: greenfield | brownfield`
|
|
108
|
+
- `ui_ux_impact: none | low | medium | high`
|
|
109
|
+
- `ui_ux_impact_reason`
|
|
110
|
+
- `ux_intent_definition_required: yes | no`
|
|
111
|
+
|
|
112
|
+
Classify impact as:
|
|
113
|
+
|
|
114
|
+
- `none`: no user-facing capability, decision, state, feedback or recovery behavior changes;
|
|
115
|
+
- `low`: a bounded user-facing change preserves unambiguous intent, working modes, effective-state,
|
|
116
|
+
activation and recovery semantics;
|
|
117
|
+
- `medium`: a bounded capability materially changes its primary action, working mode, effective
|
|
118
|
+
state, visible state type, blocker, activation or recovery behavior; or
|
|
119
|
+
- `high`: the change spans capabilities or modes, creates competing or safety-relevant authority,
|
|
120
|
+
adds high-consequence decisions or materially changes cross-surface activation and recovery.
|
|
121
|
+
|
|
122
|
+
`medium | high` requires `ux-intent-definition` before PRD readiness. `low` requires it when any
|
|
123
|
+
mandatory PRD UX semantics remain ambiguous. `none` records the analytical decision
|
|
124
|
+
`not_applicable`. The skill is an internal, non-authorizing step: it adds no gate, approval value or
|
|
125
|
+
implementation permission. A required `blocked` result keeps PRD readiness closed.
|
|
126
|
+
|
|
102
127
|
|
|
103
128
|
## Gate Transition Model
|
|
104
129
|
|
|
@@ -83,6 +83,64 @@ Structured Delivery skills use this shape when relevant:
|
|
|
83
83
|
- `required_next_step`: exactly the next clean step
|
|
84
84
|
- `impact_codes`: affected Quality Contract codes, if the target repo has a registry
|
|
85
85
|
|
|
86
|
+
|
|
87
|
+
## Normalized Review Gaps
|
|
88
|
+
|
|
89
|
+
This section is the sole normative owner for review-gap classification and routing. An applicable
|
|
90
|
+
finding from Task Plan Review, Clean Implementation Review or Code Review carries exactly one
|
|
91
|
+
normalized gap type and one routing target:
|
|
92
|
+
|
|
93
|
+
| gap_type | meaning | routing_target |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| `requirements_gap` | approved product behavior or an acceptance criterion is missing or contradictory | `PRD`; use `UR` only when user intent or scope changed |
|
|
96
|
+
| `design_gap` | technical ownership, architecture, fallback policy, exit criterion or a prohibited parallel structure was not decided | `SD` |
|
|
97
|
+
| `plan_gap` | an approved requirement or design obligation lacks an executable task, test or evidence mapping | `TP` |
|
|
98
|
+
| `implementation_gap` | code or a surface does not fulfil an approved requirement, design or task | `CD+Tests` |
|
|
99
|
+
| `evidence_gap` | required test, runtime or visible evidence is absent or insufficient | `evidence_obligation` |
|
|
100
|
+
| `emergent_risk` | implementation exposes a concrete risk not reasonably decidable from approved artefacts | earliest affected `UR | PRD | SD | TP | CD+Tests | evidence_obligation` target after explicit assessment |
|
|
101
|
+
|
|
102
|
+
Normalized finding rows use these fields in order:
|
|
103
|
+
|
|
104
|
+
`finding_id | gap_type | routing_target | gap_status | evidence | required_next_step`
|
|
105
|
+
|
|
106
|
+
- `finding_id` is stable within the durable review report.
|
|
107
|
+
- `gap_type` is exactly one type from the table above.
|
|
108
|
+
- `routing_target` is exactly `UR | PRD | SD | TP | CD+Tests | evidence_obligation` and must agree
|
|
109
|
+
with the fixed route above. `requirements_gap` may use `UR` only with evidence of changed user
|
|
110
|
+
intent or scope. `emergent_risk` requires an explicit earliest-owner assessment.
|
|
111
|
+
- `gap_status` is exactly `open | resolved`.
|
|
112
|
+
- `evidence` names concrete source, diff, test, observation or missing proof.
|
|
113
|
+
- `required_next_step` is exactly one executable action consistent with the routing target.
|
|
114
|
+
|
|
115
|
+
Missing, unknown or contradictory fields fail closed as an open gap. Consumers must not silently
|
|
116
|
+
reclassify a finding. Classification is non-authorizing: it cannot edit or approve UR, PRD, SD or TP,
|
|
117
|
+
advance a gate or replace a review decision. `qa-gate` consumes the normalized findings and cannot
|
|
118
|
+
return `pass` while any applicable finding is open or invalid.
|
|
119
|
+
|
|
120
|
+
`none` is permitted only as a presentation sentinel on a fulfilled UX Intent Fidelity row.
|
|
121
|
+
It is not a seventh normalized finding type and must not appear in a normalized finding row.
|
|
122
|
+
|
|
123
|
+
A consumer may repeat the field order and allowed scalar values needed to emit valid output. It must
|
|
124
|
+
reference this section for meanings and routes instead of maintaining a second complete mapping.
|
|
125
|
+
|
|
126
|
+
## UX Intent Fidelity
|
|
127
|
+
|
|
128
|
+
When an approved PRD contains applicable UX criteria, `task-plan-review` produces an additional
|
|
129
|
+
evidence matrix with these columns in order:
|
|
130
|
+
|
|
131
|
+
`prd_criterion | working_mode_state | task_id | visible_evidence | fidelity_status | gap_type`
|
|
132
|
+
|
|
133
|
+
`fidelity_status` is exactly `fulfilled | partial | missing | not_verifiable`. A fulfilled row uses
|
|
134
|
+
the `none` sentinel. Any non-fulfilled row uses the applicable normalized type from `Normalized
|
|
135
|
+
Review Gaps`; it may also emit the normalized finding shape when routing detail is required.
|
|
136
|
+
|
|
137
|
+
This matrix verifies PRD-to-TP coverage and TP-to-code/surface fulfilment. It does not create product
|
|
138
|
+
requirements and does not decide QA. A missing implementation-relevant PRD requirement is a
|
|
139
|
+
`requirements_gap` and routes to PRD revision. `qa-gate` consumes this evidence and cannot return
|
|
140
|
+
`pass` while an applicable row is `partial`, `missing` or `not_verifiable`, or while a visible-behavior
|
|
141
|
+
claim has code evidence without visible evidence. The four-row Quality Readiness projection and
|
|
142
|
+
`qa-gate` sole decision ownership remain unchanged.
|
|
143
|
+
|
|
86
144
|
A skill may briefly remind this shape, but must not duplicate a complete code or rule matrix.
|
|
87
145
|
|
|
88
146
|
|
|
@@ -97,4 +155,3 @@ It must distinguish:
|
|
|
97
155
|
- interpretations
|
|
98
156
|
- missing evidence
|
|
99
157
|
- the next permissible step
|
|
100
|
-
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"id": "agdf",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.11.2",
|
|
5
5
|
"displayName": "AI Governance & Delivery Framework",
|
|
6
6
|
"developerName": "Arndt Gold",
|
|
7
7
|
"description": "Operating system for governed AI-assisted delivery.",
|
|
@@ -168,6 +168,12 @@
|
|
|
168
168
|
"useFor": "after gate-check permits Brownfield Review or implementation preparation, before non-trivial changes in existing systems",
|
|
169
169
|
"boundary": "clarifies reuse, owners, risks and Mode/Slice Decision; never bypasses gate-check; Brownfield Review is not implementation permission"
|
|
170
170
|
},
|
|
171
|
+
{
|
|
172
|
+
"slug": "ux-intent-definition",
|
|
173
|
+
"discovery": "automatic",
|
|
174
|
+
"useFor": "after approved UR and post-UR routing for medium/high UI/UX impact or ambiguous low-impact product semantics before PRD readiness",
|
|
175
|
+
"boundary": "non-authorizing analytical PRD input; never creates product intent, gate permission, technical design or a parallel product source of truth"
|
|
176
|
+
},
|
|
171
177
|
{
|
|
172
178
|
"slug": "clean-implementation-review",
|
|
173
179
|
"discovery": "automatic",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schema_version": "1",
|
|
3
3
|
"generated": true,
|
|
4
4
|
"source": "create-agdf/cli",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.11.2",
|
|
6
6
|
"entrypoint": "create-agdf/bin/agdf-validator.js",
|
|
7
|
-
"digest": "
|
|
7
|
+
"digest": "a4508a485d3954d88c3ba4cd12f007c046f803d181b40bf97ada2f81913224cc"
|
|
8
8
|
}
|
|
@@ -137,6 +137,7 @@ const expectedControlFiles = [
|
|
|
137
137
|
"templates/artefacts/BROWNFIELD_REVIEW.md",
|
|
138
138
|
"templates/artefacts/VERIFIED_CHANGE.md",
|
|
139
139
|
"templates/artefacts/PRD.md",
|
|
140
|
+
"templates/artefacts/UX_INTENT_DEFINITION.md",
|
|
140
141
|
"templates/artefacts/SD.md",
|
|
141
142
|
"templates/artefacts/TP.md",
|
|
142
143
|
"templates/artefacts/QA_REPORT.md",
|
|
@@ -375,6 +376,36 @@ if (!gateCheckSkill.includes("`status_presentation.markdown` verbatim")) {
|
|
|
375
376
|
if (gateCheckSkill.includes("| Run status | Value |")) {
|
|
376
377
|
failures.push("gate-check must not maintain a second operational status-card template");
|
|
377
378
|
}
|
|
379
|
+
if (!gateCheckSkill.includes("## Repository Activation Diagnosis")) {
|
|
380
|
+
failures.push("gate-check must own the repository activation diagnosis section");
|
|
381
|
+
}
|
|
382
|
+
if (!gateCheckSkill.includes("`doctor --json` on the resolved surface-local validator is the sole canonical, code-owned, tool-shell-safe activation probe")) {
|
|
383
|
+
failures.push("gate-check must name doctor --json as the sole canonical activation probe");
|
|
384
|
+
}
|
|
385
|
+
if (!gateCheckSkill.includes("must not be used as the only proof of activation")) {
|
|
386
|
+
failures.push("gate-check must forbid AGDF_* env vars as sole activation proof");
|
|
387
|
+
}
|
|
388
|
+
if (!gateCheckSkill.includes("must not be used as proof of presence or absence of `.agdf/control/config.json`")) {
|
|
389
|
+
failures.push("gate-check must forbid relative glob/grep as activation proof");
|
|
390
|
+
}
|
|
391
|
+
for (const antiPattern of [
|
|
392
|
+
"AGDF_CONTROL_DIR` to confirm",
|
|
393
|
+
"AGDF_CONTROL_DIR` to verify",
|
|
394
|
+
"AGDF_CONTROL_DIR` to check",
|
|
395
|
+
"relative glob to confirm",
|
|
396
|
+
"relative glob to verify",
|
|
397
|
+
]) {
|
|
398
|
+
if (gateCheckSkill.includes(antiPattern)) failures.push(`gate-check must not instruct agents to use anti-pattern diagnosis: ${antiPattern}`);
|
|
399
|
+
}
|
|
400
|
+
if (!runtimeContract.includes("### Repository Activation Diagnosis Boundary")) {
|
|
401
|
+
failures.push("control-scaffold contract must own the repository activation diagnosis boundary");
|
|
402
|
+
}
|
|
403
|
+
if (!runtimeContract.includes("not an agent-facing diagnosis proof")) {
|
|
404
|
+
failures.push("control-scaffold contract must classify AGDF_* env vars as non-agent-facing diagnosis");
|
|
405
|
+
}
|
|
406
|
+
if (!runtimeContract.includes("must not be used as proof of presence or absence of `.agdf/control/config.json`")) {
|
|
407
|
+
failures.push("control-scaffold contract must forbid relative glob/grep as activation proof");
|
|
408
|
+
}
|
|
378
409
|
if (!runtimeContract.includes("### Deterministic Operational Presentation")
|
|
379
410
|
|| !/must\s+not reconstruct a table/.test(runtimeContract)) {
|
|
380
411
|
failures.push("interaction contract must own deterministic operational status presentation");
|
|
@@ -517,6 +548,37 @@ if (isFile(pagesIndexPath) && !read(pagesIndexPath).includes("{skills.length} Co
|
|
|
517
548
|
failures.push("Pages skill heading must derive its count from skills.length");
|
|
518
549
|
}
|
|
519
550
|
|
|
551
|
+
if (isFile(pagesSiteDataPath)) {
|
|
552
|
+
const pagesSiteData = read(pagesSiteDataPath);
|
|
553
|
+
for (const requiredWorkflowPhrase of [
|
|
554
|
+
"Conditional: UX Intent Definition",
|
|
555
|
+
"Post-UR routing records Greenfield or Brownfield and UI/UX impact",
|
|
556
|
+
"This fail-closed analysis is not a gate",
|
|
557
|
+
"The approved PRD is the sole product authority",
|
|
558
|
+
"Task Plan Review then verifies UX Intent Fidelity",
|
|
559
|
+
"QA cannot pass partial, missing or not-verifiable criteria",
|
|
560
|
+
]) {
|
|
561
|
+
if (!pagesSiteData.includes(requiredWorkflowPhrase)) {
|
|
562
|
+
failures.push(`Pages workflow must preserve UX-intent lifecycle phrase: ${requiredWorkflowPhrase}`);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
if (isFile(pagesIndexPath)) {
|
|
568
|
+
const pagesIndex = read(pagesIndexPath);
|
|
569
|
+
for (const requiredFidelityPhrase of [
|
|
570
|
+
"Approved PRD contract",
|
|
571
|
+
"requirements_gap",
|
|
572
|
+
"not_verifiable",
|
|
573
|
+
"Incomplete UX Intent Fidelity prevents a QA pass",
|
|
574
|
+
"{skills.map(skill => (",
|
|
575
|
+
]) {
|
|
576
|
+
if (!pagesIndex.includes(requiredFidelityPhrase)) {
|
|
577
|
+
failures.push(`Pages fidelity evidence must preserve phrase: ${requiredFidelityPhrase}`);
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
|
|
520
582
|
if (codexPlugin && pluginDefinition) {
|
|
521
583
|
if (codexPlugin.name !== pluginDefinition.id) failures.push("Codex plugin manifest name must match canonical AGDF plugin definition");
|
|
522
584
|
if (codexPlugin.version !== pluginDefinition.version) failures.push("Codex plugin manifest version must match canonical AGDF plugin definition");
|
|
@@ -911,6 +973,8 @@ const contextGraphTemplatePath = join(controlRoot, "templates", "CONTEXT_GRAPH.m
|
|
|
911
973
|
const sotRegistryTemplatePath = join(controlRoot, "templates", "SOT_REGISTRY.md");
|
|
912
974
|
const qualityContractsPath = join(controlRoot, "templates", "AGENT_QUALITY_CONTRACTS.json");
|
|
913
975
|
const brownfieldReviewTemplatePath = join(controlRoot, "templates", "artefacts", "BROWNFIELD_REVIEW.md");
|
|
976
|
+
const uxIntentTemplatePath = join(controlRoot, "templates", "artefacts", "UX_INTENT_DEFINITION.md");
|
|
977
|
+
const prdTemplatePath = join(controlRoot, "templates", "artefacts", "PRD.md");
|
|
914
978
|
const verifiedChangeTemplatePath = join(controlRoot, "templates", "artefacts", "VERIFIED_CHANGE.md");
|
|
915
979
|
const orTemplatePath = join(controlRoot, "templates", "artefacts", "OR.md");
|
|
916
980
|
const backlogTemplatePath = join(controlRoot, "templates", "MASTER_BACKLOG.md");
|
|
@@ -980,11 +1044,84 @@ if (isFile(sotRegistryTemplatePath)) {
|
|
|
980
1044
|
|
|
981
1045
|
if (isFile(brownfieldReviewTemplatePath)) {
|
|
982
1046
|
const brownfieldReviewTemplate = read(brownfieldReviewTemplatePath);
|
|
983
|
-
for (const required of ["Existing-System View", "Reuse And Parallel-Structure Risk", "Mode / Slice Decision", "transparency_note", "Next Permissible Step"]) {
|
|
1047
|
+
for (const required of ["Existing-System View", "Reuse And Parallel-Structure Risk", "Mode / Slice Decision", "transparency_note", "Next Permissible Step", "delivery_context", "ui_ux_impact", "ui_ux_impact_reason", "ux_intent_definition_required", "ux_intent_definition_result"]) {
|
|
984
1048
|
if (!brownfieldReviewTemplate.includes(required)) failures.push(`BROWNFIELD_REVIEW.md missing control field: ${required}`);
|
|
985
1049
|
}
|
|
986
1050
|
}
|
|
987
1051
|
|
|
1052
|
+
if (isFile(uxIntentTemplatePath)) {
|
|
1053
|
+
const template = read(uxIntentTemplatePath);
|
|
1054
|
+
for (const required of ["Decision: ready | blocked | not_applicable", "effective_state_authority_by_mode", "primary_state_presentation_owner_by_mode", "recovery_paths", "Proposed PRD Acceptance Criteria", "non-authorizing analytical input"]) {
|
|
1055
|
+
if (!template.includes(required)) failures.push(`UX_INTENT_DEFINITION.md missing contract field: ${required}`);
|
|
1056
|
+
}
|
|
1057
|
+
if (/^Gate:|^Gate approval:|Approval:/m.test(template)) failures.push("UX_INTENT_DEFINITION.md must not carry gate or approval authority");
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
if (isFile(prdTemplatePath)) {
|
|
1061
|
+
const template = read(prdTemplatePath);
|
|
1062
|
+
for (const required of ["UX Intent And Success", "Working Modes And Effective State", "effective_state_authority", "primary_state_presentation_owner", "Activation, Blockers, Recovery And Transitions", "visible retry", "stable `criterion_id`"]) {
|
|
1063
|
+
if (!template.includes(required)) failures.push(`PRD.md missing mandatory UX requirement: ${required}`);
|
|
1064
|
+
}
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
if (isFile(join(skillRoot, "ux-intent-definition", "SKILL.md"))) {
|
|
1068
|
+
const skill = read(join(skillRoot, "ux-intent-definition", "SKILL.md"));
|
|
1069
|
+
for (const required of ["ready | blocked | not_applicable", "effective_state_authority_by_mode", "primary_state_presentation_owner_by_mode", "A required blocked result prevents PRD readiness", "not a user gate"]) {
|
|
1070
|
+
if (!skill.includes(required)) failures.push(`ux-intent-definition SKILL.md missing invariant: ${required}`);
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
const normalizedGapFieldOrder = "finding_id | gap_type | routing_target | gap_status | evidence | required_next_step";
|
|
1075
|
+
const normalizedGapMappingHeader = "| gap_type | meaning | routing_target |";
|
|
1076
|
+
const qualityContractPath = join(contractsDir, "quality.md");
|
|
1077
|
+
if (isFile(qualityContractPath)) {
|
|
1078
|
+
const contract = read(qualityContractPath);
|
|
1079
|
+
for (const required of [
|
|
1080
|
+
"## Normalized Review Gaps",
|
|
1081
|
+
normalizedGapFieldOrder,
|
|
1082
|
+
"requirements_gap",
|
|
1083
|
+
"design_gap",
|
|
1084
|
+
"plan_gap",
|
|
1085
|
+
"implementation_gap",
|
|
1086
|
+
"evidence_gap",
|
|
1087
|
+
"emergent_risk",
|
|
1088
|
+
"UR | PRD | SD | TP | CD+Tests | evidence_obligation",
|
|
1089
|
+
"gap_status` is exactly `open | resolved",
|
|
1090
|
+
"It is not a seventh normalized finding type",
|
|
1091
|
+
]) {
|
|
1092
|
+
if (!contract.includes(required)) failures.push(`quality contract missing normalized review-gap invariant: ${required}`);
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
for (const skillName of ["task-plan-review", "clean-implementation-review", "code-review", "qa-gate"]) {
|
|
1097
|
+
const path = join(skillRoot, skillName, "SKILL.md");
|
|
1098
|
+
if (!isFile(path)) continue;
|
|
1099
|
+
const skill = read(path);
|
|
1100
|
+
for (const required of ["§Normalized Review Gaps", "fail closed"]) {
|
|
1101
|
+
if (!skill.includes(required)) failures.push(`${skillName} SKILL.md missing normalized review-gap consumer invariant: ${required}`);
|
|
1102
|
+
}
|
|
1103
|
+
if (skillName !== "qa-gate" && !skill.includes(normalizedGapFieldOrder)) {
|
|
1104
|
+
failures.push(`${skillName} SKILL.md missing normalized finding field order`);
|
|
1105
|
+
}
|
|
1106
|
+
if (skill.includes(normalizedGapMappingHeader)) {
|
|
1107
|
+
failures.push(`${skillName} SKILL.md must not duplicate the complete normalized gap mapping`);
|
|
1108
|
+
}
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
if (isFile(join(skillRoot, "task-plan-review", "SKILL.md"))) {
|
|
1112
|
+
const skill = read(join(skillRoot, "task-plan-review", "SKILL.md"));
|
|
1113
|
+
for (const required of ["## UX Intent Fidelity", "prd_criterion | working_mode_state | task_id | visible_evidence | fidelity_status | gap_type", "requirements_gap", "not_verifiable"]) {
|
|
1114
|
+
if (!skill.includes(required)) failures.push(`task-plan-review SKILL.md missing UX fidelity invariant: ${required}`);
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
if (isFile(join(skillRoot, "qa-gate", "SKILL.md"))) {
|
|
1119
|
+
const skill = read(join(skillRoot, "qa-gate", "SKILL.md"));
|
|
1120
|
+
for (const required of ["UX Intent Fidelity", "visible evidence", "requirements_gap"]) {
|
|
1121
|
+
if (!skill.includes(required)) failures.push(`qa-gate SKILL.md missing UX fidelity consumption: ${required}`);
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
|
|
988
1125
|
if (isFile(verifiedChangeTemplatePath)) {
|
|
989
1126
|
const verifiedChangeTemplate = read(verifiedChangeTemplatePath);
|
|
990
1127
|
for (const required of ["related_ur", "canonical_owner", "allowed_source_paths", "allowed_derived_paths", "baseline_tracked_paths", "baseline_untracked_paths", "escalation_target", "validation_commands"]) {
|
|
@@ -35,6 +35,11 @@ When `.agdf/control/` is present, persist or link `post_ur_review` output under
|
|
|
35
35
|
|
|
36
36
|
Do not mix both modes silently. Name the active mode in the output.
|
|
37
37
|
|
|
38
|
+
In `post_ur_review`, also record `delivery_context`, `ui_ux_impact`, `ui_ux_impact_reason` and
|
|
39
|
+
`ux_intent_definition_required` using the single classification and routing contract in
|
|
40
|
+
`../../meta/contracts/gate-transition.md`. Greenfield records make existing-system evidence explicitly
|
|
41
|
+
not applicable; Brownfield records cite repository evidence. Do not create a second Greenfield router.
|
|
42
|
+
|
|
38
43
|
## Rules
|
|
39
44
|
1. Brownfield first: understand the existing codebase before PRD/SD decisions when existing-system impact is possible, and again before implementation.
|
|
40
45
|
2. Brownfield Review after `Approval: UR` is a sizing and routing step. It must visibly decide `quick_task`, `verified_change`, `structured_slice`, `structured_delivery`, or `block` before PRD depth or implementation is chosen. Persist the completed review and its decision, scope reason, evidence and required next gate in the same internal operation; mark the review `done` only after both the artefact and canonical run projection are complete. An interrupted, incomplete or legacy record stays at fail-closed `Mode/Slice Decision` recovery without another user approval.
|
|
@@ -124,6 +129,10 @@ Use a concise structure:
|
|
|
124
129
|
- required_next_step:
|
|
125
130
|
```
|
|
126
131
|
|
|
132
|
+
For `post_ur_review`, include the four UI/UX routing fields immediately after `scope`. If UX intent
|
|
133
|
+
definition is required, its `ready | blocked | not_applicable` result must be visible before PRD
|
|
134
|
+
readiness. A required `blocked` result is at least `revise` for this routing step.
|
|
135
|
+
|
|
127
136
|
## Pass / Revise / Block Guidance
|
|
128
137
|
- `pass`: existing owners are understood, reuse path is clear, and no blocking drift or parallel structure risk remains.
|
|
129
138
|
- `revise`: relevant evidence, tests, ownership, or reuse path is incomplete.
|
|
@@ -24,6 +24,8 @@ Use these focused runtime-contract modules:
|
|
|
24
24
|
- `../../meta/contracts/context-graph.md`
|
|
25
25
|
|
|
26
26
|
Clean-review-specific output must make the primary solution, fallbacks, workarounds, parallel structures, exit criteria, and next cleanup/review step visible.
|
|
27
|
+
Applicable findings must use `../../meta/contracts/quality.md` §Normalized Review Gaps. This skill
|
|
28
|
+
must distinguish a missing upstream decision from implementation that violates an approved decision.
|
|
27
29
|
|
|
28
30
|
## Rules
|
|
29
31
|
1. Clean primary solution before fallback.
|
|
@@ -35,6 +37,10 @@ Clean-review-specific output must make the primary solution, fallbacks, workarou
|
|
|
35
37
|
7. Maintainability matters; "works somehow" is not enough.
|
|
36
38
|
8. Async execute paths must not decide product rules again.
|
|
37
39
|
9. Shared finalization or merge rules belong in one owner.
|
|
40
|
+
10. Missing canonical ownership, fallback policy, exit criteria or parallel-structure decisions are
|
|
41
|
+
upstream gaps; do not invent those decisions during review.
|
|
42
|
+
11. Actual code that violates an approved design or plan is an implementation gap.
|
|
43
|
+
12. Missing, unknown or contradictory classifications fail closed and stay open.
|
|
38
44
|
|
|
39
45
|
## When To Use
|
|
40
46
|
- after `CD+Tests`
|
|
@@ -89,6 +95,16 @@ Use this compact structure:
|
|
|
89
95
|
- required_next_step:
|
|
90
96
|
```
|
|
91
97
|
|
|
98
|
+
When findings exist, append:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
## Normalized Findings
|
|
102
|
+
| finding_id | gap_type | routing_target | gap_status | evidence | required_next_step |
|
|
103
|
+
|---|---|---|---|---|---|
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Use the shared Quality Contract for meanings and routes; do not copy its complete mapping here.
|
|
107
|
+
|
|
92
108
|
## Pass / Revise / Block Guidance
|
|
93
109
|
- `pass`: primary solution is clean, tested, and integrated with existing owners.
|
|
94
110
|
- `revise`: solution works but contains avoidable fallback, unclear ownership, or missing evidence.
|
|
@@ -106,3 +122,5 @@ This skill must not:
|
|
|
106
122
|
- hide unjustified workarounds
|
|
107
123
|
- treat green tests as proof of solution integrity
|
|
108
124
|
- decide final QA
|
|
125
|
+
- create a missing design, plan or product decision during review
|
|
126
|
+
- silently repair or reclassify an invalid normalized finding
|
|
@@ -23,6 +23,8 @@ Use these focused runtime-contract modules:
|
|
|
23
23
|
- `../../meta/contracts/context-graph.md`
|
|
24
24
|
|
|
25
25
|
Code-review-specific output must make actual findings, missing review scope, evidence strength, and the next required step visible.
|
|
26
|
+
Applicable findings must use `../../meta/contracts/quality.md` §Normalized Review Gaps. Concrete diff
|
|
27
|
+
defects remain Code Review findings; missing upstream constraints route to their authoritative owner.
|
|
26
28
|
|
|
27
29
|
## Rules
|
|
28
30
|
1. Review the actual diff and impacted code, not intent alone.
|
|
@@ -33,6 +35,9 @@ Code-review-specific output must make actual findings, missing review scope, evi
|
|
|
33
35
|
6. Brownfield owners and existing conventions are binding unless deviation is justified.
|
|
34
36
|
7. Distinguish blocking defects from fixable review findings.
|
|
35
37
|
8. CR does not grant QA pass.
|
|
38
|
+
9. Do not turn Code Review into a static requirements checklist or invent missing upstream constraints.
|
|
39
|
+
10. A genuinely new implementation risk uses `emergent_risk` with an explicit earliest-owner assessment.
|
|
40
|
+
11. Missing, unknown or contradictory classifications fail closed and stay open.
|
|
36
41
|
|
|
37
42
|
## When To Use
|
|
38
43
|
- after `CD+Tests`
|
|
@@ -81,6 +86,16 @@ Use this compact structure:
|
|
|
81
86
|
- required_next_step:
|
|
82
87
|
```
|
|
83
88
|
|
|
89
|
+
When findings exist, append:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
## Normalized Findings
|
|
93
|
+
| finding_id | gap_type | routing_target | gap_status | evidence | required_next_step |
|
|
94
|
+
|---|---|---|---|---|---|
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Use the shared Quality Contract for meanings and routes; do not copy its complete mapping here.
|
|
98
|
+
|
|
84
99
|
## Decision Guidance
|
|
85
100
|
- `pass`: no meaningful review finding remains evident in reviewed scope.
|
|
86
101
|
- `revise`: fixable correctness, regression, or maintainability issues remain.
|
|
@@ -100,3 +115,5 @@ This skill must not:
|
|
|
100
115
|
- hide missing review scope
|
|
101
116
|
- generate style-only findings
|
|
102
117
|
- duplicate TP Review or QA as if they were the same step
|
|
118
|
+
- invent a requirement, design decision or plan obligation to justify a finding
|
|
119
|
+
- silently repair or reclassify an invalid normalized finding
|
|
@@ -69,6 +69,12 @@ for a native-capable adapter.
|
|
|
69
69
|
|
|
70
70
|
The CLI reports are validators and JSON evidence, not the primary user experience, not a required ritual for normal work and not a second rule system. If a report says `blocked`, do not continue with later-gate artefacts until the reported blocker is resolved.
|
|
71
71
|
|
|
72
|
+
## Repository Activation Diagnosis
|
|
73
|
+
|
|
74
|
+
`doctor --json` on the resolved surface-local validator is the sole canonical, code-owned, tool-shell-safe activation probe. Determine whether a repository is AGDF-active through `doctor --json` (or `gate-check --json` for a selected run), not through plugin `AGDF_*` environment variables, not through a relative glob, not through a relative `grep`, and not through a relative `read` of `.agdf/control/config.json`.
|
|
75
|
+
|
|
76
|
+
Plugin `AGDF_*` environment variables set by the OpenCode `shell.env` hook are convenience only and must not be used as the only proof of activation; host shell-env propagation to spawned tool shells is not guaranteed and is OpenCode-owned, not AGDF-owned. A relative glob or `grep` for `.agdf/control/config.json` must not be used as proof of presence or absence of `.agdf/control/config.json`; an absolute `read` or the canonical CLI probe is required.
|
|
77
|
+
|
|
72
78
|
## Native Interaction Path
|
|
73
79
|
|
|
74
80
|
`../../meta/contracts/interaction.md` is the complete normative owner for interaction kinds, locale,
|
|
@@ -31,6 +31,8 @@ Use these focused runtime-contract modules:
|
|
|
31
31
|
QA-specific `decision` is exactly `pass | revise | block`.
|
|
32
32
|
`pass` is allowed only when TP coverage, Brownfield fit, solution integrity, and relevant documentation/Context Graph impact are sufficiently evidenced.
|
|
33
33
|
`sot_drift` must not pass silently as a warning.
|
|
34
|
+
Consume applicable findings through `../../meta/contracts/quality.md` §Normalized Review Gaps.
|
|
35
|
+
QA must not maintain a second mapping or reclassify review findings.
|
|
34
36
|
|
|
35
37
|
When post-CD+Tests review evidence exists, present the Runtime Contract's derived Quality
|
|
36
38
|
Readiness projection before the detailed QA report: Plan coverage, Solution integrity, Code
|
|
@@ -48,6 +50,11 @@ Gate Transition Card or the durable QA report.
|
|
|
48
50
|
6. Solution integrity is mandatory.
|
|
49
51
|
7. Always output exactly one decision: `pass`, `revise`, or `block`.
|
|
50
52
|
8. Open risks, missing tests, partial TP coverage, or side effects must be visible.
|
|
53
|
+
9. Applicable UX Intent Fidelity rows must all be `fulfilled` with suitable visible evidence before `pass`.
|
|
54
|
+
10. A `requirements_gap` routes to PRD revision; QA must not invent or accept the missing criterion.
|
|
55
|
+
11. Any applicable normalized finding that is `open`, missing, unknown, contradictory or supported by
|
|
56
|
+
insufficient evidence prevents `pass`.
|
|
57
|
+
12. A `resolved` finding counts only when its durable review evidence proves the routed correction or decision.
|
|
51
58
|
|
|
52
59
|
## When To Use
|
|
53
60
|
- after `CD+Tests`
|
|
@@ -82,14 +89,16 @@ If evidence is missing, lower the decision accordingly.
|
|
|
82
89
|
2. Verify TP coverage.
|
|
83
90
|
3. Verify P0/P1 completion.
|
|
84
91
|
4. Verify Brownfield fit.
|
|
85
|
-
5. Verify
|
|
86
|
-
6.
|
|
87
|
-
7. Verify
|
|
88
|
-
8.
|
|
92
|
+
5. Verify UX Intent Fidelity when applicable, including visible evidence for visible-behavior claims.
|
|
93
|
+
6. Consume normalized findings without reclassification; fail closed on every open or invalid row.
|
|
94
|
+
7. Verify solution integrity.
|
|
95
|
+
8. Verify tests and evidence strength.
|
|
96
|
+
9. Verify documentation and Context Graph impact if relevant.
|
|
97
|
+
10. Decide:
|
|
89
98
|
- `pass`
|
|
90
99
|
- `revise`
|
|
91
100
|
- `block`
|
|
92
|
-
|
|
101
|
+
11. State the single required next step.
|
|
93
102
|
|
|
94
103
|
## Output
|
|
95
104
|
Use this shape:
|
|
@@ -125,3 +134,4 @@ This skill must not:
|
|
|
125
134
|
- replace UAT
|
|
126
135
|
- treat missing reviews as completed
|
|
127
136
|
- downgrade SoT drift to harmless warning
|
|
137
|
+
- silently repair, normalize or reroute a review finding
|
|
@@ -27,6 +27,8 @@ Use these focused runtime-contract modules:
|
|
|
27
27
|
|
|
28
28
|
TP-specific output must evaluate every relevant `task_id` with completion status, AC coverage, evidence, missing evidence, and QA-relevant gaps.
|
|
29
29
|
If `context_graph_required_action` is not `none`, the affected task is complete only if follow-up, evidence, or an intentionally open gap is visible.
|
|
30
|
+
Applicable review gaps must use `../../meta/contracts/quality.md` §Normalized Review Gaps. This skill
|
|
31
|
+
must not maintain its own type-to-route mapping.
|
|
30
32
|
|
|
31
33
|
## Rules
|
|
32
34
|
1. The Task Plan is the reference, not plausible code.
|
|
@@ -39,6 +41,12 @@ If `context_graph_required_action` is not `none`, the affected task is complete
|
|
|
39
41
|
8. P0/P1 gaps must be handed to QA.
|
|
40
42
|
9. Out-of-scope changes must be reported.
|
|
41
43
|
10. When evidence is unclear, fail closed to at least `partially_done`.
|
|
44
|
+
11. When approved PRD UX criteria apply, verify both PRD-to-TP coverage and TP-to-code/surface fulfilment.
|
|
45
|
+
12. Never invent a missing UX requirement. Report `requirements_gap` and route it to PRD revision.
|
|
46
|
+
13. Visible behavior requires visible evidence; code evidence alone is `not_verifiable`.
|
|
47
|
+
14. A fulfilled UX Intent Fidelity row uses `none`; every non-fulfilled applicable row uses one
|
|
48
|
+
normalized gap type and a contract-valid route.
|
|
49
|
+
15. Missing, unknown or contradictory classifications fail closed and stay open.
|
|
42
50
|
|
|
43
51
|
## Clarifications
|
|
44
52
|
### TP Slice Before Target State
|
|
@@ -90,6 +98,27 @@ Use this compact structure:
|
|
|
90
98
|
- required_next_step:
|
|
91
99
|
```
|
|
92
100
|
|
|
101
|
+
When applicable, append:
|
|
102
|
+
|
|
103
|
+
```text
|
|
104
|
+
## UX Intent Fidelity
|
|
105
|
+
| prd_criterion | working_mode_state | task_id | visible_evidence | fidelity_status | gap_type |
|
|
106
|
+
|---|---|---|---|---|---|
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Use `fulfilled | partial | missing | not_verifiable` for `fidelity_status` and
|
|
110
|
+
the shared Quality Contract for `gap_type`. `none` is allowed only on a fulfilled row.
|
|
111
|
+
|
|
112
|
+
When an applicable gap needs routing detail, append:
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
## Normalized Findings
|
|
116
|
+
| finding_id | gap_type | routing_target | gap_status | evidence | required_next_step |
|
|
117
|
+
|---|---|---|---|---|---|
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Use only contract-defined values. Do not reconstruct the type-to-route mapping locally.
|
|
121
|
+
|
|
93
122
|
Completion status:
|
|
94
123
|
|
|
95
124
|
- `fully_done`
|
|
@@ -122,3 +151,7 @@ This skill must not:
|
|
|
122
151
|
- hide partial work
|
|
123
152
|
- upgrade missing evidence into confidence
|
|
124
153
|
- reinterpret the TP scope
|
|
154
|
+
- create or silently repair product requirements
|
|
155
|
+
- treat code existence as visible UX evidence
|
|
156
|
+
- emit `none` as a normalized finding type
|
|
157
|
+
- silently repair or reclassify an invalid finding
|