create-agdf 0.10.2 → 0.11.0
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 +11 -18
- package/generated/.github/skills/agdf-interaction-locales.json +8 -0
- package/generated/.github/skills/agdf-qa-gate/SKILL.md +15 -5
- package/generated/.github/skills/agdf-release-or/SKILL.md +1 -1
- 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/gate-transition.md +25 -0
- package/generated/.github/skills/contracts/interaction.md +23 -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/agdf-interaction-locales.json +8 -0
- package/generated/.opencode/contracts/gate-transition.md +25 -0
- package/generated/.opencode/contracts/interaction.md +23 -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 +11 -18
- package/generated/.opencode/skills/agdf-qa-gate/SKILL.md +15 -5
- package/generated/.opencode/skills/agdf-release-or/SKILL.md +1 -1
- 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-interaction-locales.json +8 -0
- package/generated/plugins/agdf/meta/agdf-plugin.definition.json +7 -1
- package/generated/plugins/agdf/meta/contracts/gate-transition.md +25 -0
- package/generated/plugins/agdf/meta/contracts/interaction.md +23 -0
- package/generated/plugins/agdf/meta/contracts/quality.md +58 -1
- package/generated/plugins/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-interaction-locales.json +8 -0
- package/generated/plugins/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-plugin.definition.json +7 -1
- package/generated/plugins/agdf/runtime/create-agdf/lib/cli/validation-handlers.js +2 -1
- package/generated/plugins/agdf/runtime/create-agdf/lib/control-evaluation/gate-check.js +16 -25
- package/generated/plugins/agdf/runtime/create-agdf/lib/interaction-presentation.js +80 -0
- 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 +128 -6
- 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 +11 -18
- package/generated/plugins/agdf/skills/qa-gate/SKILL.md +15 -5
- package/generated/plugins/agdf/skills/release-or/SKILL.md +1 -1
- 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/cli/validation-handlers.js +2 -1
- package/lib/control-evaluation/gate-check.js +16 -25
- package/lib/installers/opencode.js +52 -4
- package/lib/interaction-presentation.js +80 -0
- package/lib/scaffold/plan.js +3 -0
- package/package.json +1 -1
|
@@ -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.0",
|
|
6
6
|
"entrypoint": "create-agdf/bin/agdf-validator.js",
|
|
7
|
-
"digest": "
|
|
7
|
+
"digest": "55653e0c7f7d732bd4bf2973f5208fea23c6d7edb6a4616499c818d1089c4f3b"
|
|
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",
|
|
@@ -369,6 +370,16 @@ for (const required of gateCheckOperationalBoundaries) {
|
|
|
369
370
|
for (const duplicatedPolicy of ["Surface behavior:", "Make exactly one native-attempt", "Interaction Locale Contract", "decorated_label_only"]) {
|
|
370
371
|
if (gateCheckSkill.includes(duplicatedPolicy)) failures.push(`gate-check must not duplicate normative interaction policy: ${duplicatedPolicy}`);
|
|
371
372
|
}
|
|
373
|
+
if (!gateCheckSkill.includes("`status_presentation.markdown` verbatim")) {
|
|
374
|
+
failures.push("gate-check must consume the deterministic operational status presentation");
|
|
375
|
+
}
|
|
376
|
+
if (gateCheckSkill.includes("| Run status | Value |")) {
|
|
377
|
+
failures.push("gate-check must not maintain a second operational status-card template");
|
|
378
|
+
}
|
|
379
|
+
if (!runtimeContract.includes("### Deterministic Operational Presentation")
|
|
380
|
+
|| !/must\s+not reconstruct a table/.test(runtimeContract)) {
|
|
381
|
+
failures.push("interaction contract must own deterministic operational status presentation");
|
|
382
|
+
}
|
|
372
383
|
|
|
373
384
|
for (const gate of ["UR", "PRD", "SD", "TP", "QA", "UAT"]) {
|
|
374
385
|
for (const locale of ["en", "de"]) {
|
|
@@ -507,6 +518,37 @@ if (isFile(pagesIndexPath) && !read(pagesIndexPath).includes("{skills.length} Co
|
|
|
507
518
|
failures.push("Pages skill heading must derive its count from skills.length");
|
|
508
519
|
}
|
|
509
520
|
|
|
521
|
+
if (isFile(pagesSiteDataPath)) {
|
|
522
|
+
const pagesSiteData = read(pagesSiteDataPath);
|
|
523
|
+
for (const requiredWorkflowPhrase of [
|
|
524
|
+
"Conditional: UX Intent Definition",
|
|
525
|
+
"Post-UR routing records Greenfield or Brownfield and UI/UX impact",
|
|
526
|
+
"This fail-closed analysis is not a gate",
|
|
527
|
+
"The approved PRD is the sole product authority",
|
|
528
|
+
"Task Plan Review then verifies UX Intent Fidelity",
|
|
529
|
+
"QA cannot pass partial, missing or not-verifiable criteria",
|
|
530
|
+
]) {
|
|
531
|
+
if (!pagesSiteData.includes(requiredWorkflowPhrase)) {
|
|
532
|
+
failures.push(`Pages workflow must preserve UX-intent lifecycle phrase: ${requiredWorkflowPhrase}`);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
if (isFile(pagesIndexPath)) {
|
|
538
|
+
const pagesIndex = read(pagesIndexPath);
|
|
539
|
+
for (const requiredFidelityPhrase of [
|
|
540
|
+
"Approved PRD contract",
|
|
541
|
+
"requirements_gap",
|
|
542
|
+
"not_verifiable",
|
|
543
|
+
"Incomplete UX Intent Fidelity prevents a QA pass",
|
|
544
|
+
"{skills.map(skill => (",
|
|
545
|
+
]) {
|
|
546
|
+
if (!pagesIndex.includes(requiredFidelityPhrase)) {
|
|
547
|
+
failures.push(`Pages fidelity evidence must preserve phrase: ${requiredFidelityPhrase}`);
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
|
|
510
552
|
if (codexPlugin && pluginDefinition) {
|
|
511
553
|
if (codexPlugin.name !== pluginDefinition.id) failures.push("Codex plugin manifest name must match canonical AGDF plugin definition");
|
|
512
554
|
if (codexPlugin.version !== pluginDefinition.version) failures.push("Codex plugin manifest version must match canonical AGDF plugin definition");
|
|
@@ -824,11 +866,8 @@ for (const skill of expectedSkills) {
|
|
|
824
866
|
if (!skillMd.includes("The canonical gate order and transition model live only in `../../meta/contracts/gate-transition.md`")) {
|
|
825
867
|
failures.push("gate-check must point to gate-transition.md as gate transition SoT");
|
|
826
868
|
}
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
}
|
|
830
|
-
if (!skillMd.includes("Next gate after approval") || !skillMd.includes("Allowed after approval")) {
|
|
831
|
-
failures.push("gate-check must render post-approval Run Status Card fields when an approval is missing");
|
|
869
|
+
if (!skillMd.includes("`status_presentation.markdown` verbatim") || !skillMd.includes("Do not maintain or render a skill-local table template")) {
|
|
870
|
+
failures.push("gate-check must delegate operational status rendering to the canonical projection");
|
|
832
871
|
}
|
|
833
872
|
if (!skillMd.includes("A decision value without scope reason and evidence is still missing")) {
|
|
834
873
|
failures.push("gate-check must require evidenced Mode/Slice Decision before later work");
|
|
@@ -864,6 +903,14 @@ for (const skill of expectedSkills) {
|
|
|
864
903
|
failures.push("gate-check must classify CLI reports as validators, not the primary workflow");
|
|
865
904
|
}
|
|
866
905
|
}
|
|
906
|
+
if (skill === "release-or") {
|
|
907
|
+
const rulesSection = skillMd.match(/## Rules\r?\n([\s\S]*?)(?=\r?\n## )/)?.[1] ?? "";
|
|
908
|
+
const ruleNumbers = [...rulesSection.matchAll(/^(\d+)\. /gm)].map((match) => Number(match[1]));
|
|
909
|
+
const expectedRuleNumbers = ruleNumbers.map((_, index) => index + 1);
|
|
910
|
+
if (ruleNumbers.length === 0 || JSON.stringify(ruleNumbers) !== JSON.stringify(expectedRuleNumbers)) {
|
|
911
|
+
failures.push(`release-or Rules numbering must be sequential from 1, got ${ruleNumbers.join(", ") || "none"}`);
|
|
912
|
+
}
|
|
913
|
+
}
|
|
867
914
|
|
|
868
915
|
for (const [pathLabel, content] of [
|
|
869
916
|
[`${skill}/SKILL.md`, skillMd],
|
|
@@ -896,6 +943,8 @@ const contextGraphTemplatePath = join(controlRoot, "templates", "CONTEXT_GRAPH.m
|
|
|
896
943
|
const sotRegistryTemplatePath = join(controlRoot, "templates", "SOT_REGISTRY.md");
|
|
897
944
|
const qualityContractsPath = join(controlRoot, "templates", "AGENT_QUALITY_CONTRACTS.json");
|
|
898
945
|
const brownfieldReviewTemplatePath = join(controlRoot, "templates", "artefacts", "BROWNFIELD_REVIEW.md");
|
|
946
|
+
const uxIntentTemplatePath = join(controlRoot, "templates", "artefacts", "UX_INTENT_DEFINITION.md");
|
|
947
|
+
const prdTemplatePath = join(controlRoot, "templates", "artefacts", "PRD.md");
|
|
899
948
|
const verifiedChangeTemplatePath = join(controlRoot, "templates", "artefacts", "VERIFIED_CHANGE.md");
|
|
900
949
|
const orTemplatePath = join(controlRoot, "templates", "artefacts", "OR.md");
|
|
901
950
|
const backlogTemplatePath = join(controlRoot, "templates", "MASTER_BACKLOG.md");
|
|
@@ -965,11 +1014,84 @@ if (isFile(sotRegistryTemplatePath)) {
|
|
|
965
1014
|
|
|
966
1015
|
if (isFile(brownfieldReviewTemplatePath)) {
|
|
967
1016
|
const brownfieldReviewTemplate = read(brownfieldReviewTemplatePath);
|
|
968
|
-
for (const required of ["Existing-System View", "Reuse And Parallel-Structure Risk", "Mode / Slice Decision", "transparency_note", "Next Permissible Step"]) {
|
|
1017
|
+
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"]) {
|
|
969
1018
|
if (!brownfieldReviewTemplate.includes(required)) failures.push(`BROWNFIELD_REVIEW.md missing control field: ${required}`);
|
|
970
1019
|
}
|
|
971
1020
|
}
|
|
972
1021
|
|
|
1022
|
+
if (isFile(uxIntentTemplatePath)) {
|
|
1023
|
+
const template = read(uxIntentTemplatePath);
|
|
1024
|
+
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"]) {
|
|
1025
|
+
if (!template.includes(required)) failures.push(`UX_INTENT_DEFINITION.md missing contract field: ${required}`);
|
|
1026
|
+
}
|
|
1027
|
+
if (/^Gate:|^Gate approval:|Approval:/m.test(template)) failures.push("UX_INTENT_DEFINITION.md must not carry gate or approval authority");
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
if (isFile(prdTemplatePath)) {
|
|
1031
|
+
const template = read(prdTemplatePath);
|
|
1032
|
+
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`"]) {
|
|
1033
|
+
if (!template.includes(required)) failures.push(`PRD.md missing mandatory UX requirement: ${required}`);
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
if (isFile(join(skillRoot, "ux-intent-definition", "SKILL.md"))) {
|
|
1038
|
+
const skill = read(join(skillRoot, "ux-intent-definition", "SKILL.md"));
|
|
1039
|
+
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"]) {
|
|
1040
|
+
if (!skill.includes(required)) failures.push(`ux-intent-definition SKILL.md missing invariant: ${required}`);
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
const normalizedGapFieldOrder = "finding_id | gap_type | routing_target | gap_status | evidence | required_next_step";
|
|
1045
|
+
const normalizedGapMappingHeader = "| gap_type | meaning | routing_target |";
|
|
1046
|
+
const qualityContractPath = join(contractsDir, "quality.md");
|
|
1047
|
+
if (isFile(qualityContractPath)) {
|
|
1048
|
+
const contract = read(qualityContractPath);
|
|
1049
|
+
for (const required of [
|
|
1050
|
+
"## Normalized Review Gaps",
|
|
1051
|
+
normalizedGapFieldOrder,
|
|
1052
|
+
"requirements_gap",
|
|
1053
|
+
"design_gap",
|
|
1054
|
+
"plan_gap",
|
|
1055
|
+
"implementation_gap",
|
|
1056
|
+
"evidence_gap",
|
|
1057
|
+
"emergent_risk",
|
|
1058
|
+
"UR | PRD | SD | TP | CD+Tests | evidence_obligation",
|
|
1059
|
+
"gap_status` is exactly `open | resolved",
|
|
1060
|
+
"It is not a seventh normalized finding type",
|
|
1061
|
+
]) {
|
|
1062
|
+
if (!contract.includes(required)) failures.push(`quality contract missing normalized review-gap invariant: ${required}`);
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
for (const skillName of ["task-plan-review", "clean-implementation-review", "code-review", "qa-gate"]) {
|
|
1067
|
+
const path = join(skillRoot, skillName, "SKILL.md");
|
|
1068
|
+
if (!isFile(path)) continue;
|
|
1069
|
+
const skill = read(path);
|
|
1070
|
+
for (const required of ["§Normalized Review Gaps", "fail closed"]) {
|
|
1071
|
+
if (!skill.includes(required)) failures.push(`${skillName} SKILL.md missing normalized review-gap consumer invariant: ${required}`);
|
|
1072
|
+
}
|
|
1073
|
+
if (skillName !== "qa-gate" && !skill.includes(normalizedGapFieldOrder)) {
|
|
1074
|
+
failures.push(`${skillName} SKILL.md missing normalized finding field order`);
|
|
1075
|
+
}
|
|
1076
|
+
if (skill.includes(normalizedGapMappingHeader)) {
|
|
1077
|
+
failures.push(`${skillName} SKILL.md must not duplicate the complete normalized gap mapping`);
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
if (isFile(join(skillRoot, "task-plan-review", "SKILL.md"))) {
|
|
1082
|
+
const skill = read(join(skillRoot, "task-plan-review", "SKILL.md"));
|
|
1083
|
+
for (const required of ["## UX Intent Fidelity", "prd_criterion | working_mode_state | task_id | visible_evidence | fidelity_status | gap_type", "requirements_gap", "not_verifiable"]) {
|
|
1084
|
+
if (!skill.includes(required)) failures.push(`task-plan-review SKILL.md missing UX fidelity invariant: ${required}`);
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
if (isFile(join(skillRoot, "qa-gate", "SKILL.md"))) {
|
|
1089
|
+
const skill = read(join(skillRoot, "qa-gate", "SKILL.md"));
|
|
1090
|
+
for (const required of ["UX Intent Fidelity", "visible evidence", "requirements_gap"]) {
|
|
1091
|
+
if (!skill.includes(required)) failures.push(`qa-gate SKILL.md missing UX fidelity consumption: ${required}`);
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
|
+
|
|
973
1095
|
if (isFile(verifiedChangeTemplatePath)) {
|
|
974
1096
|
const verifiedChangeTemplate = read(verifiedChangeTemplatePath);
|
|
975
1097
|
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
|
|
@@ -85,10 +85,11 @@ This skill owns only these operational responsibilities:
|
|
|
85
85
|
5. Revalidate the same run, gate and revision immediately after the response and before persistence.
|
|
86
86
|
6. Persist only a currently valid exact approval through the existing control-state workflow.
|
|
87
87
|
|
|
88
|
-
For status, blocked, read-only or rationale interactions, consume the
|
|
89
|
-
locale contract without asking for approval.
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
For status, blocked, read-only or rationale interactions, consume the canonical
|
|
89
|
+
`status_presentation.markdown` verbatim and apply the locale contract without asking for approval.
|
|
90
|
+
Do not reconstruct its fields, ordering, labels or Markdown from `status_card` JSON. Internal process
|
|
91
|
+
steps remain distinct from user decisions. If the projection, adapter evidence or revalidation is
|
|
92
|
+
missing, follow the contract's fail-closed outcome and leave authority unchanged.
|
|
92
93
|
|
|
93
94
|
## Rules
|
|
94
95
|
1. Fail closed when a required approval or artefact status is missing.
|
|
@@ -163,23 +164,15 @@ If a status is not explicit, do not assume it is satisfied.
|
|
|
163
164
|
12. If branch, workspace and durable artefacts disagree, do not choose a scope silently; report the ambiguity and ask for the smallest clarifying gate action.
|
|
164
165
|
|
|
165
166
|
## Output
|
|
166
|
-
Keep the result short and operational.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
| Current gate | `<GateName or internal step>` |
|
|
172
|
-
| Allowed now | `<currently allowed outputs>` |
|
|
173
|
-
| Blocked by | `<blocking condition or none>` |
|
|
174
|
-
| Missing approval | `Approval: <GateName> | none` |
|
|
175
|
-
| Next step | `<single permissible next step>` |
|
|
176
|
-
| Quality outlook | `<next meaningful quality focus or none>` |
|
|
177
|
-
|
|
178
|
-
When an approval is missing, also include `Next gate after approval` and `Allowed after approval` exactly as constrained by the Runtime Contract. Keep forbidden outputs, evidence and next-skill detail in the concise surrounding text when relevant; they are not extra status-card rows.
|
|
167
|
+
Keep the result short and operational. For a status-only response, consume the Runtime Contract's
|
|
168
|
+
code-owned `status_presentation.markdown` verbatim. It is the compact localized operational Run
|
|
169
|
+
Status Card and already includes current and post-approval authority, next-step and quality fields.
|
|
170
|
+
Keep full raw evidence in `status_card` JSON or concise surrounding detail when relevant; do not turn
|
|
171
|
+
the primary chat card into an audit dump. Do not maintain or render a skill-local table template.
|
|
179
172
|
|
|
180
173
|
This complete operational status table remains the status-reporting and detail
|
|
181
174
|
surface. When the same response immediately requests a ready gate approval,
|
|
182
|
-
render its
|
|
175
|
+
render its five-field compact approval-time projection first, then the Gate
|
|
183
176
|
Transition Card in the same immediately preceding assistant message, then
|
|
184
177
|
invoke exactly one native question or exact-text fallback. Both cards derive
|
|
185
178
|
from the same snapshot and are shown exactly once.
|
|
@@ -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
|
|
@@ -52,7 +52,7 @@ Use the Runtime Contract definition of `Relevant Run` to decide whether OR is ma
|
|
|
52
52
|
13. Keep machine status normalization in the CLI; do not write internal snake_case status values into the human-facing backlog.
|
|
53
53
|
14. Reconcile Context Graph impact before clean closeout: report `context_graph_reconciliation: resolved | not_applicable | open_gap`.
|
|
54
54
|
15. If Context Graph work remains unresolved, report it as an explicit open gap and do not describe the run as cleanly handoff-ready.
|
|
55
|
-
|
|
55
|
+
16. After writing or updating `MASTER_BACKLOG.md`, run `doctor --json` (or the locally available equivalent) and resolve any `AGDF_BACKLOG_STATUS_UNKNOWN` or `AGDF_BACKLOG_ARTEFACT_LABEL_UNKNOWN` finding before closeout. See the AGDF control scaffold's `MASTER_BACKLOG.md` template Rules section for the canonical status/artefact label vocabulary.
|
|
56
56
|
|
|
57
57
|
## When To Use
|
|
58
58
|
- at the end of every relevant run
|
|
@@ -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
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ux-intent-definition
|
|
3
|
+
description: Use this skill after approved UR and post-UR routing when UI/UX impact is medium or high, or low with ambiguous product semantics, to define user intent, success, working modes, effective state, visible state ownership, activation, blockers, recovery and transitions as structured PRD input; fail closed when evidence or product decisions are unresolved. This internal analysis never grants gate permission or replaces the approved PRD.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ux-intent-definition
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Create structured, testable UX intent input before PRD approval so implementation reviews verify an
|
|
11
|
+
approved product promise instead of inventing requirements after code exists.
|
|
12
|
+
|
|
13
|
+
## Runtime Contract
|
|
14
|
+
|
|
15
|
+
Use:
|
|
16
|
+
|
|
17
|
+
- `../../meta/contracts/gate-transition.md` for impact routing, authority and revision behavior;
|
|
18
|
+
- `../../meta/contracts/quality.md` for evidence and fail-closed output discipline.
|
|
19
|
+
|
|
20
|
+
## Authority
|
|
21
|
+
|
|
22
|
+
This is an internal analytical skill, not a user gate. It cannot approve artefacts, grant
|
|
23
|
+
implementation permission, change approved UR/PRD intent, prescribe technical design or become a
|
|
24
|
+
parallel product source of truth. Proposed criteria become authoritative only when incorporated into
|
|
25
|
+
and approved as PRD content. Technical storage, derivation and component ownership remain SD concerns.
|
|
26
|
+
|
|
27
|
+
## Inputs
|
|
28
|
+
|
|
29
|
+
- approved UR and its intent, success signal, primary action and persona/context;
|
|
30
|
+
- post-UR `delivery_context`, `ui_ux_impact`, reason and required flag;
|
|
31
|
+
- existing behavior/ownership evidence for Brownfield work;
|
|
32
|
+
- known working modes, state semantics, activation, blockers, recovery and transitions.
|
|
33
|
+
|
|
34
|
+
## Workflow
|
|
35
|
+
|
|
36
|
+
1. Confirm the approved UR and routing evidence. If required evidence is absent or conflicts, block.
|
|
37
|
+
2. Identify the primary user intent, observable success and primary decision/action.
|
|
38
|
+
3. For every relevant working mode, define effective state and visible state types.
|
|
39
|
+
4. Separate `effective_state_authority_by_mode` from
|
|
40
|
+
`primary_state_presentation_owner_by_mode`; do not turn either into technical ownership.
|
|
41
|
+
5. Define activation/deactivation, blockers with visible next actions, actionable recovery (including
|
|
42
|
+
visible retry for recoverable transient failure) and relevant state transitions.
|
|
43
|
+
6. Propose observable PRD acceptance criteria and identify open product questions.
|
|
44
|
+
7. Return exactly one decision: `ready | blocked | not_applicable`.
|
|
45
|
+
|
|
46
|
+
## Decision Rules
|
|
47
|
+
|
|
48
|
+
- `ready`: every required output is reliable enough for PRD drafting.
|
|
49
|
+
- `blocked`: user intent, modes, effective state, authority, activation, blockers, recovery, transitions
|
|
50
|
+
or Brownfield evidence is missing, contradictory or materially ambiguous.
|
|
51
|
+
- `not_applicable`: routing proves that no relevant user-facing intent, state or recovery behavior changes.
|
|
52
|
+
|
|
53
|
+
A conflict with approved UR routes to UR revision. A material product change discovered after PRD
|
|
54
|
+
approval routes to PRD revision, or UR revision when intent/scope changes. Never resolve the conflict
|
|
55
|
+
silently. A required blocked result prevents PRD readiness.
|
|
56
|
+
|
|
57
|
+
## Output
|
|
58
|
+
|
|
59
|
+
Populate each field or use an explicit, justified `not_applicable`:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
- decision: ready | blocked | not_applicable
|
|
63
|
+
- blocking_reason:
|
|
64
|
+
- primary_user_intent:
|
|
65
|
+
- success_signal:
|
|
66
|
+
- primary_decision_or_action:
|
|
67
|
+
- working_modes:
|
|
68
|
+
- effective_state_by_mode:
|
|
69
|
+
- visible_state_types:
|
|
70
|
+
- effective_state_authority_by_mode:
|
|
71
|
+
- primary_state_presentation_owner_by_mode:
|
|
72
|
+
- activation_paths:
|
|
73
|
+
- blockers:
|
|
74
|
+
- recovery_paths:
|
|
75
|
+
- relevant_state_transitions:
|
|
76
|
+
- proposed_prd_acceptance_criteria:
|
|
77
|
+
- open_product_questions:
|
|
78
|
+
- affected_outputs:
|
|
79
|
+
- evidence:
|
|
80
|
+
- missing_evidence:
|
|
81
|
+
- required_next_step:
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
For `blocked`, `blocking_reason`, `open_product_questions`, `affected_outputs`, `evidence`,
|
|
85
|
+
`missing_evidence` and `required_next_step` are mandatory. When durable control state exists, write
|
|
86
|
+
the result to `.agdf/control/artefacts/<key>/UX_INTENT_DEFINITION.md` without a Gate or approval field.
|
|
87
|
+
|
|
88
|
+
## Forbidden
|
|
89
|
+
|
|
90
|
+
- invent product intent or silently choose between conflicting modes/state authorities;
|
|
91
|
+
- bypass UR/PRD revision or claim PRD readiness from a blocked result;
|
|
92
|
+
- add a gate, approval value or implementation permission;
|
|
93
|
+
- prescribe components, persistence, endpoints, styles or other technical design;
|
|
94
|
+
- treat supporting analysis as authoritative beside the approved PRD.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## NAME
|
|
2
|
+
|
|
3
|
+
`ux-intent-definition` - define testable UX intent before PRD approval
|
|
4
|
+
|
|
5
|
+
## SYNOPSIS
|
|
6
|
+
|
|
7
|
+
`/ux-intent-definition` [`--help`|`-h`]
|
|
8
|
+
|
|
9
|
+
## DESCRIPTION
|
|
10
|
+
|
|
11
|
+
Produces structured `ready | blocked | not_applicable` PRD input for user intent, success, working
|
|
12
|
+
modes, effective state, visible ownership, activation, blockers, recovery and transitions. It is an
|
|
13
|
+
internal non-authorizing analysis and fails closed when product semantics or evidence are unresolved.
|
|
14
|
+
|
|
15
|
+
## SEE ALSO
|
|
16
|
+
|
|
17
|
+
See SKILL.md for triggers, authority, required fields and decision rules.
|
|
@@ -24,7 +24,8 @@ export function createValidationHandlers(io = console) {
|
|
|
24
24
|
const output = printApprovalEnvelope(report, { io, reEvaluate: () => evaluateGateCheck(options.dir, options) });
|
|
25
25
|
return output.status === "blocked" ? 2 : 0;
|
|
26
26
|
}
|
|
27
|
-
printGateCheckReport(report, options.json, options.statusCard, io);
|
|
27
|
+
const presentationRendered = printGateCheckReport(report, options.json, options.statusCard, io);
|
|
28
|
+
if (presentationRendered === false) return 2;
|
|
28
29
|
return report.status === "blocked" ? 2 : 0;
|
|
29
30
|
}],
|
|
30
31
|
["delivery-map", (options) => {
|