create-agdf 0.14.2 → 0.14.4

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.
Files changed (103) hide show
  1. package/README.md +39 -3
  2. package/generated/.opencode/contracts/control-scaffold.md +17 -2
  3. package/generated/.opencode/contracts/interaction.md +2 -2
  4. package/generated/.opencode/skills/agdf-delivery-path-search/SKILL.md +16 -4
  5. package/generated/.opencode/skills/agdf-gate-check/SKILL.md +6 -4
  6. package/generated/plugins/agdf/.claude-plugin/plugin.json +1 -1
  7. package/generated/plugins/agdf/.codex-plugin/plugin.json +1 -1
  8. package/generated/plugins/agdf/meta/agdf-plugin.definition.json +1 -1
  9. package/generated/plugins/agdf/meta/contracts/control-scaffold.md +17 -2
  10. package/generated/plugins/agdf/meta/contracts/interaction.md +2 -2
  11. package/generated/plugins/agdf/meta/copilot-payload-baseline.json +3 -3
  12. package/generated/plugins/agdf/meta/distribution-profile-history.json +125 -0
  13. package/generated/plugins/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-plugin.definition.json +1 -1
  14. package/generated/plugins/agdf/runtime/create-agdf/lib/cli/command-registry.js +8 -1
  15. package/generated/plugins/agdf/runtime/create-agdf/lib/cli/delivery-path-search-command.js +51 -19
  16. package/generated/plugins/agdf/runtime/create-agdf/lib/cli/parse-args.js +3 -0
  17. package/generated/plugins/agdf/runtime/create-agdf/lib/control-evaluation/doctor.js +13 -0
  18. package/generated/plugins/agdf/runtime/create-agdf/lib/control-evaluation/gate-check.js +64 -13
  19. package/generated/plugins/agdf/runtime/create-agdf/lib/control-evaluation/run-state.js +6 -0
  20. package/generated/plugins/agdf/runtime/create-agdf/lib/control-state/run-identity.js +9 -0
  21. package/generated/plugins/agdf/runtime/create-agdf/lib/control-state/run-state-parser.js +4 -2
  22. package/generated/plugins/agdf/runtime/create-agdf/lib/delivery-path-search/contracts.js +37 -0
  23. package/generated/plugins/agdf/runtime/create-agdf/lib/delivery-path-search/persistence.js +14 -2
  24. package/generated/plugins/agdf/runtime/create-agdf/lib/delivery-path-search/search-engine.js +126 -36
  25. package/generated/plugins/agdf/runtime/create-agdf/lib/delivery-path-search/state-adapter.js +40 -92
  26. package/generated/plugins/agdf/runtime/create-agdf/lib/interaction-presentation.js +57 -7
  27. package/generated/plugins/agdf/runtime/create-agdf/lib/runtime/plugin-provenance.js +46 -3
  28. package/generated/plugins/agdf/runtime/create-agdf/package.json +1 -1
  29. package/generated/plugins/agdf/runtime/runtime-manifest.json +2 -2
  30. package/generated/plugins/agdf/scripts/check-runtime-integrity.mjs +2 -0
  31. package/generated/plugins/agdf/skills/delivery-path-search/SKILL.md +16 -4
  32. package/generated/plugins/agdf/skills/gate-check/SKILL.md +6 -4
  33. package/generated/plugins/agdf/submission/openai/availability.md +1 -1
  34. package/generated/plugins/agdf/submission/openai/capability-matrix.json +1 -1
  35. package/generated/plugins/agdf/submission/openai/release-notes.md +7 -1
  36. package/generated/plugins/agdf/submission/openai/reviewer-cases.json +1 -1
  37. package/generated/plugins/copilot/agdf/.agdf-payload-inventory.json +71 -51
  38. package/generated/plugins/copilot/agdf/copilot-skills/agdf-delivery-path-search/SKILL.md +16 -4
  39. package/generated/plugins/copilot/agdf/copilot-skills/agdf-gate-check/SKILL.md +6 -4
  40. package/generated/plugins/copilot/agdf/copilot-skills/contracts/control-scaffold.md +17 -2
  41. package/generated/plugins/copilot/agdf/copilot-skills/contracts/interaction.md +2 -2
  42. package/generated/plugins/copilot/agdf/meta/agdf-plugin.definition.json +1 -1
  43. package/generated/plugins/copilot/agdf/meta/distribution-profile-history.json +125 -0
  44. package/generated/plugins/copilot/agdf/plugin.json +1 -1
  45. package/generated/plugins/copilot/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-plugin.definition.json +1 -1
  46. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/cli/command-registry.js +8 -1
  47. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/cli/delivery-path-search-command.js +51 -19
  48. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/cli/parse-args.js +3 -0
  49. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-evaluation/doctor.js +13 -0
  50. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-evaluation/gate-check.js +64 -13
  51. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-evaluation/run-state.js +6 -0
  52. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-state/run-identity.js +9 -0
  53. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-state/run-state-parser.js +4 -2
  54. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/delivery-path-search/contracts.js +37 -0
  55. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/delivery-path-search/persistence.js +14 -2
  56. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/delivery-path-search/search-engine.js +126 -36
  57. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/delivery-path-search/state-adapter.js +40 -92
  58. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/interaction-presentation.js +57 -7
  59. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/runtime/plugin-provenance.js +46 -3
  60. package/generated/plugins/copilot/agdf/runtime/create-agdf/package.json +1 -1
  61. package/generated/plugins/copilot/agdf/runtime/runtime-manifest.json +2 -2
  62. package/generated/submissions/openai/agdf/.codex-plugin/plugin.json +1 -1
  63. package/generated/submissions/openai/agdf/meta/agdf-plugin.definition.json +1 -1
  64. package/generated/submissions/openai/agdf/meta/contracts/control-scaffold.md +17 -2
  65. package/generated/submissions/openai/agdf/meta/contracts/interaction.md +2 -2
  66. package/generated/submissions/openai/agdf/meta/copilot-payload-baseline.json +3 -3
  67. package/generated/submissions/openai/agdf/meta/distribution-profile-history.json +125 -0
  68. package/generated/submissions/openai/agdf/skills/delivery-path-search/SKILL.md +16 -4
  69. package/generated/submissions/openai/agdf/skills/gate-check/SKILL.md +6 -4
  70. package/generated/submissions/openai/agdf/submission/openai/availability.md +1 -1
  71. package/generated/submissions/openai/agdf/submission/openai/capability-matrix.json +1 -1
  72. package/generated/submissions/openai/agdf/submission/openai/inventory.json +18 -14
  73. package/generated/submissions/openai/agdf/submission/openai/listing.json +1 -1
  74. package/generated/submissions/openai/agdf/submission/openai/readiness.json +2 -2
  75. package/generated/submissions/openai/agdf/submission/openai/readiness.md +2 -2
  76. package/generated/submissions/openai/agdf/submission/openai/release-notes.md +7 -1
  77. package/generated/submissions/openai/agdf/submission/openai/reviewer-cases.json +1 -1
  78. package/lib/cli/application.js +24 -6
  79. package/lib/cli/command-registry.js +8 -1
  80. package/lib/cli/delivery-path-search-command.js +51 -19
  81. package/lib/cli/parse-args.js +3 -0
  82. package/lib/control-evaluation/doctor.js +13 -0
  83. package/lib/control-evaluation/gate-check.js +64 -13
  84. package/lib/control-evaluation/run-state.js +6 -0
  85. package/lib/control-state/run-identity.js +9 -0
  86. package/lib/control-state/run-state-parser.js +4 -2
  87. package/lib/delivery-path-search/contracts.js +37 -0
  88. package/lib/delivery-path-search/persistence.js +14 -2
  89. package/lib/delivery-path-search/search-engine.js +126 -36
  90. package/lib/delivery-path-search/state-adapter.js +40 -92
  91. package/lib/installers/claude-cache-recovery.js +76 -0
  92. package/lib/installers/copilot-settings.js +146 -16
  93. package/lib/installers/local-marketplace.js +169 -14
  94. package/lib/installers/plugin-installers.js +96 -9
  95. package/lib/interaction-presentation.js +57 -7
  96. package/lib/lifecycle/operations.js +28 -4
  97. package/lib/lifecycle/result.js +4 -4
  98. package/lib/release/profile-history.js +222 -0
  99. package/lib/release/version-bump.js +527 -0
  100. package/lib/release/version-coherence.js +92 -38
  101. package/lib/runtime/distribution-profile-history.js +173 -0
  102. package/lib/runtime/plugin-provenance.js +46 -3
  103. package/package.json +7 -3
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema_version": 1,
3
3
  "profile_id": "copilot-runtime-plugin",
4
- "max_files": 78,
5
- "max_bytes": 539607,
6
- "rationale": "Reviewed Copilot-only manifest, ten prefixed skills, required contracts, exact-version runtime and evidence-plane separation. Any further increase requires review."
4
+ "max_files": 80,
5
+ "max_bytes": 568459,
6
+ "rationale": "Reviewed Copilot-only manifest, ten prefixed skills, required contracts, exact-version runtime, Delivery Path Search input-integrity provenance, evidence-plane separation, shared run-identity validation and the one-file distribution profile history catalogue. Measured payload is 80 files/563615 bytes; no byte-capacity increase was required. Any further increase requires review."
7
7
  }
@@ -0,0 +1,125 @@
1
+ {
2
+ "schema_version": 1,
3
+ "contracts": {
4
+ "five-profile-v1": {
5
+ "distribution_profiles": {
6
+ "schemaVersion": 1,
7
+ "marketplaceIdentities": {
8
+ "durable": "agdf",
9
+ "generatedRepository": "agdf-repo"
10
+ },
11
+ "profiles": {
12
+ "source-development": {
13
+ "runtime": "absent",
14
+ "installable": false,
15
+ "machineValidation": "unavailable"
16
+ },
17
+ "runtime-plugin": {
18
+ "runtime": "required",
19
+ "installable": true,
20
+ "machineValidation": "local_exact_version_digest"
21
+ },
22
+ "copilot-runtime-plugin": {
23
+ "runtime": "required",
24
+ "installable": true,
25
+ "machineValidation": "local_exact_version_digest_inventory"
26
+ },
27
+ "opencode-config-local": {
28
+ "runtime": "config_local_package",
29
+ "installable": true,
30
+ "machineValidation": "local_exact_version"
31
+ },
32
+ "portable-skills": {
33
+ "runtime": "absent",
34
+ "installable": true,
35
+ "machineValidation": "unavailable_or_external_required"
36
+ }
37
+ }
38
+ },
39
+ "contract_digest": "0211f4e6054a23f0a3ba302e57303adcb8f5903581e99643f803647dd156fe32"
40
+ },
41
+ "four-profile-v1": {
42
+ "distribution_profiles": {
43
+ "schemaVersion": 1,
44
+ "marketplaceIdentities": {
45
+ "durable": "agdf",
46
+ "generatedRepository": "agdf-repo"
47
+ },
48
+ "profiles": {
49
+ "source-development": {
50
+ "runtime": "absent",
51
+ "installable": false,
52
+ "machineValidation": "unavailable"
53
+ },
54
+ "runtime-plugin": {
55
+ "runtime": "required",
56
+ "installable": true,
57
+ "machineValidation": "local_exact_version_digest"
58
+ },
59
+ "opencode-config-local": {
60
+ "runtime": "config_local_package",
61
+ "installable": true,
62
+ "machineValidation": "local_exact_version"
63
+ },
64
+ "portable-skills": {
65
+ "runtime": "absent",
66
+ "installable": true,
67
+ "machineValidation": "unavailable_or_external_required"
68
+ }
69
+ }
70
+ },
71
+ "contract_digest": "9987baa4ea91e28a096cac2be8daa876f1c0593e7edbfe2e96b713814aa65ce8"
72
+ }
73
+ },
74
+ "releases": {
75
+ "0.13.6": {
76
+ "contract_id": "four-profile-v1",
77
+ "provenance_schema_version": 1,
78
+ "profile_id": "runtime-plugin",
79
+ "entry_digest": "1c21c3fa99cdd788994013f25cbe606ffdcea2cc91d53c679cf061567f652bf3",
80
+ "status": "supported"
81
+ },
82
+ "0.13.7": {
83
+ "contract_id": "four-profile-v1",
84
+ "provenance_schema_version": 1,
85
+ "profile_id": "runtime-plugin",
86
+ "entry_digest": "6d5383537d2640dc13773f2929dd94d0e7e219e82d08418464c77786b475c3ee",
87
+ "status": "supported"
88
+ },
89
+ "0.13.8": {
90
+ "contract_id": "four-profile-v1",
91
+ "provenance_schema_version": 1,
92
+ "profile_id": "runtime-plugin",
93
+ "entry_digest": "405e8cfa72ec2e469354dab52197675783b3723adb969a0692e56ba7c95c85c8",
94
+ "status": "supported"
95
+ },
96
+ "0.14.1": {
97
+ "contract_id": "four-profile-v1",
98
+ "provenance_schema_version": 1,
99
+ "profile_id": "runtime-plugin",
100
+ "entry_digest": "1a6fd6f6a411eddb29e82d7b7abc7d5f658312f555dcf39e160a709194a8b867",
101
+ "status": "supported"
102
+ },
103
+ "0.14.2": {
104
+ "contract_id": "five-profile-v1",
105
+ "provenance_schema_version": 1,
106
+ "profile_id": "runtime-plugin",
107
+ "entry_digest": "f71ee26df3d4a89ecc727a1c30b40221cf062fce9f716a83453bced9503be8fd",
108
+ "status": "supported"
109
+ },
110
+ "0.14.3": {
111
+ "contract_id": "five-profile-v1",
112
+ "provenance_schema_version": 1,
113
+ "profile_id": "runtime-plugin",
114
+ "entry_digest": "c5dbe4044d11a976cd4ccd6de6cf1405ebfcb4a26ce5c6308c34f10142db50c9",
115
+ "status": "supported"
116
+ },
117
+ "0.14.4": {
118
+ "contract_id": "five-profile-v1",
119
+ "provenance_schema_version": 1,
120
+ "profile_id": "runtime-plugin",
121
+ "entry_digest": "a441d633fe11ea402c3366cfac0cec659d32eae5eb4ae6b1d25a1e366a029813",
122
+ "status": "supported"
123
+ }
124
+ }
125
+ }
@@ -33,7 +33,9 @@ Skip for routine questions, obvious local fixes and approved implementation with
33
33
  ## Workflow
34
34
 
35
35
  1. Run AGDF gate-check and inspect durable control state.
36
- 2. Confirm that search is allowed and implementation is not occurring during exploration.
36
+ 2. Confirm that the requested decision matches the selected run objective, and that search is
37
+ allowed while implementation is not occurring during exploration. If the objective differs,
38
+ stop and select or create the correct governed scope; do not apply the result across scopes.
37
39
  3. Declare the active surface and its enforcement level.
38
40
  4. Resolve the exact-version surface-local validator using the same ownership rules as `gate-check`. Do not search `PATH`, query a registry, install a package or invoke `npx ...@latest` during routine planning. If no owned or explicitly configured exact-version validator is available, report `machine_validation: unavailable` or `machine_validation: external_required` and stop the machine-evaluated search.
39
41
  5. Invoke the shared CLI runtime:
@@ -54,7 +56,9 @@ node <surface-local-agdf> delivery-path-search \
54
56
  It supplements the deterministic baseline with at most one bounded generator call. Treat proposals as untrusted until the canonical core validates schema, gate action, scope, duplicates and material diversity. Report generation provenance, budgets, rejections and failure. Never hide deterministic fallback or switch providers automatically.
55
57
 
56
58
  6. Treat facts, repository evidence, assumptions and model judgements separately.
57
- 7. Return exactly one recommendation or `no_safe_recommendation`.
59
+ 7. Report the actual terminal phase and status. Return a recommendation-facing conclusion only
60
+ after at least one valid evaluation. Missing/stale input, zero legal candidates and evaluator
61
+ unavailability/error remain typed non-recommendation outcomes with one recovery action.
58
62
  8. Run canonical AGDF gate-check after search. Never translate a recommendation into permission.
59
63
 
60
64
  ## Enforcement
@@ -71,15 +75,20 @@ Do not overstate the surface's guarantee.
71
75
 
72
76
  Keep chat output compact:
73
77
 
74
- - recommendation or `no_safe_recommendation`
78
+ - selected run, revision and objective
79
+ - outcome phase and typed terminal status
80
+ - recommendation only for a recommendation-facing evaluated result
75
81
  - current gate
76
82
  - enforcement level
77
83
  - decisive evidence and assumptions
78
84
  - rejected alternatives and reasons
79
85
  - budgets and stopping reason
86
+ - candidate and evaluation provenance, including attempted, valid and invalid counts
80
87
  - next AGDF gate action
81
88
 
82
- Persist only the redacted decision summary when durable evidence is required. Do not persist raw prompts, hidden reasoning, secrets or source snapshots.
89
+ Persist only a contract-valid evaluated recommendation-facing summary when durable evidence is
90
+ required. Never persist input, candidate or evaluator failure as a decision. Do not persist raw
91
+ prompts, hidden reasoning, secrets or source snapshots.
83
92
 
84
93
  ## Boundaries
85
94
 
@@ -87,6 +96,9 @@ Persist only the redacted decision summary when durable evidence is required. Do
87
96
  - Do not modify repository files during search.
88
97
  - Do not execute evaluator-returned commands.
89
98
  - Do not invent default scores for invalid evaluator output.
99
+ - Do not parse Run Status Card or other presentation Markdown as gate-policy input.
100
+ - Do not describe zero valid evaluations as `no_safe_recommendation`.
101
+ - Do not apply one selected run's result to an unrelated question.
90
102
  - Do not implement, approve or release based on search output.
91
103
  - Do not create agent-specific scoring, gate logic or skill copies.
92
104
  - Do not replace deterministic candidates with generated proposals.
@@ -209,10 +209,12 @@ the primary chat card into an audit dump. Do not maintain or render a skill-loca
209
209
 
210
210
  This complete operational status table remains the status-reporting and detail
211
211
  surface. When the same response immediately requests a ready gate approval,
212
- render its five-field compact approval-time projection first, then the Gate
213
- Transition Card in the same immediately preceding assistant message, then
214
- invoke exactly one native question or exact-text fallback. Both cards derive
215
- from the same snapshot and are shown exactly once.
212
+ render its five-field compact approval-time projection first, then the complete
213
+ operational Run Status Card verbatim (or its localized failure line with
214
+ diagnostic codes when undeliverable), then the Gate Transition Card in the same
215
+ immediately preceding assistant message, then invoke exactly one native
216
+ question or exact-text fallback. The runtime contract owns this sequence; every
217
+ block is shown exactly once.
216
218
 
217
219
  If this skill creates or updates control artefacts, do not paste full file bodies into the chat.
218
220
  List paths, summarize the decision, name the blocker or approval needed, and keep the durable content in the files.
@@ -1,6 +1,6 @@
1
1
  # Availability Decision Record
2
2
 
3
- - release: `0.14.2`
3
+ - release: `0.14.4`
4
4
  - decision_state: `pending`
5
5
  - decision_owner: verified publisher
6
6
  - countries: not selected
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.14.2",
3
+ "releaseVersion": "0.14.4",
4
4
  "evidenceStates": [
5
5
  "common",
6
6
  "codex-specific",
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.14.2",
4
- "digest": "0c78d217817ca7cec6cd2e8638e3a4fa678a7dc4c954119606f5f954bd1a2ca2",
3
+ "releaseVersion": "0.14.4",
4
+ "digest": "594be5be291554c4567bcd711274498d9600a896d2e6b5f85ca941e1dff77d12",
5
5
  "files": [
6
6
  {
7
7
  "path": ".codex-plugin/plugin.json",
8
- "sha256": "0eccc7ed08162a4f4437c7ccfbdd9145a9034b4ab6de44f5565ca608989d5c4a"
8
+ "sha256": "44c8561c912ed14a44849a23597e1786612d58596e745df691e6f343c0c595f8"
9
9
  },
10
10
  {
11
11
  "path": "assets/agdf-icon.svg",
@@ -29,7 +29,7 @@
29
29
  },
30
30
  {
31
31
  "path": "meta/agdf-plugin.definition.json",
32
- "sha256": "ba636c3e224125df8f2dedde215b00473174b1a02fdeecbf91da1a262dcde778"
32
+ "sha256": "c0b249067a3fea29e551af28ccc855bfb4e9c7ef95f418d96d7e102c53650159"
33
33
  },
34
34
  {
35
35
  "path": "meta/agdf-runtime-contract.md",
@@ -53,7 +53,7 @@
53
53
  },
54
54
  {
55
55
  "path": "meta/contracts/control-scaffold.md",
56
- "sha256": "bf5773ec22013d3332cf4900d59880ebdfbaab7dee227c66b1721d0fd05aeac2"
56
+ "sha256": "82d298d5399c56ecbaeef78ac367556b675200c09ea96e160534ec03adb07f42"
57
57
  },
58
58
  {
59
59
  "path": "meta/contracts/gate-transition.md",
@@ -61,7 +61,7 @@
61
61
  },
62
62
  {
63
63
  "path": "meta/contracts/interaction.md",
64
- "sha256": "799ff1d27f16004844775f2802a94d6d336d9130b08a6484c5f325d7ea6b0df8"
64
+ "sha256": "45cb0bf83af21d46e55f6fbbc934f7bf1571d0d087a0a304b629297427078ce9"
65
65
  },
66
66
  {
67
67
  "path": "meta/contracts/modes.md",
@@ -77,7 +77,11 @@
77
77
  },
78
78
  {
79
79
  "path": "meta/copilot-payload-baseline.json",
80
- "sha256": "ab87e177288c36a056cccc583c78fd57b50fd82517a56276a009345e065ec1d6"
80
+ "sha256": "c2d5f1fe5285898d90bc9a15972bc388b485b5d212b6952f01d07c2d71f41a17"
81
+ },
82
+ {
83
+ "path": "meta/distribution-profile-history.json",
84
+ "sha256": "63a78c2659fe6ece380883d10188e7dad7373866711aeca13005193b68be1ab2"
81
85
  },
82
86
  {
83
87
  "path": "skills/brownfield-analysis/SKILL.md",
@@ -113,7 +117,7 @@
113
117
  },
114
118
  {
115
119
  "path": "skills/delivery-path-search/SKILL.md",
116
- "sha256": "8c4a94c8ad86a51380f2f636d8b2fedd5a3554adf3edb19d350eb6a7c8254914"
120
+ "sha256": "688a0e04f6a1a39be17ded0047f88187b109f25bd9f22927a3d4261cbfdc0bd5"
117
121
  },
118
122
  {
119
123
  "path": "skills/delivery-path-search/help.md",
@@ -121,7 +125,7 @@
121
125
  },
122
126
  {
123
127
  "path": "skills/gate-check/SKILL.md",
124
- "sha256": "84b83b23f18e24ebea94b5f24f1e438de2c93da7740fbc1bba95281e98b68ae0"
128
+ "sha256": "7f49c12942fc4312fe57f6be1c9844a9bf1ec5c7c9cce43b1c1d3e81d6c7adbb"
125
129
  },
126
130
  {
127
131
  "path": "skills/gate-check/help.md",
@@ -161,23 +165,23 @@
161
165
  },
162
166
  {
163
167
  "path": "submission/openai/availability.md",
164
- "sha256": "57e428da0faf2a48f459796781b4f5b472dc10e1cea957f6078404bf6e7a184b"
168
+ "sha256": "f92ddfc516a7ffa9abbb847118597bdcce52b0087adbe1c3066a7821a9ad22bc"
165
169
  },
166
170
  {
167
171
  "path": "submission/openai/capability-matrix.json",
168
- "sha256": "203b63da20727ac116fe816893c669725d46ff67388a934fa17cda68ea97f09a"
172
+ "sha256": "0839d499972d89c7d173f3193a3e54a5b82aecd280192f80bff09733998e6cd6"
169
173
  },
170
174
  {
171
175
  "path": "submission/openai/listing.json",
172
- "sha256": "29c2a8865f69e227d746548b487422135b7165c4c5aa4f92ed414b220dd21151"
176
+ "sha256": "c5a069a9047ded702678d928014434dc0b44ead7ecf2b7b84d3d45c1d842742b"
173
177
  },
174
178
  {
175
179
  "path": "submission/openai/release-notes.md",
176
- "sha256": "fcacfc5c8382ae589871359a3467dafac700822928999e680a106c484cc7044e"
180
+ "sha256": "30e0057bd7e0538b25ca5bcf276fb418887f2e7d1806b431c013ba0d095dabb6"
177
181
  },
178
182
  {
179
183
  "path": "submission/openai/reviewer-cases.json",
180
- "sha256": "e1ffc93e955edfab9a95cfaf0437badbf5f4741763cb0161f3de6b0e23c8bb27"
184
+ "sha256": "f145161287a42a891734e27f6c3b8c88fb873227d4d759c0867e60c17217e715"
181
185
  }
182
186
  ]
183
187
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.14.2",
3
+ "releaseVersion": "0.14.4",
4
4
  "submissionType": "skills",
5
5
  "identity": {
6
6
  "technicalId": "agdf",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.14.2",
3
+ "releaseVersion": "0.14.4",
4
4
  "candidateState": "repository_ready",
5
5
  "submissionReady": false,
6
6
  "submissionBlockers": [
@@ -16,7 +16,7 @@
16
16
  },
17
17
  "bundle": {
18
18
  "state": "pass",
19
- "detail": "44 inventoried files; inventory digest 0c78d217817ca7cec6cd2e8638e3a4fa678a7dc4c954119606f5f954bd1a2ca2"
19
+ "detail": "45 inventoried files; inventory digest 594be5be291554c4567bcd711274498d9600a896d2e6b5f85ca941e1dff77d12"
20
20
  },
21
21
  "installed_host": {
22
22
  "state": "unverified",
@@ -1,6 +1,6 @@
1
1
  # AGDF Public Plugin Readiness
2
2
 
3
- - release: `0.14.2`
3
+ - release: `0.14.4`
4
4
  - candidate_state: `repository_ready`
5
5
  - submission_ready: `false`
6
6
 
@@ -9,7 +9,7 @@
9
9
  | Class | State | Detail |
10
10
  |---|---|---|
11
11
  | repository | pass | canonical contract and deterministic source checks |
12
- | bundle | pass | 44 inventoried files; inventory digest 0c78d217817ca7cec6cd2e8638e3a4fa678a7dc4c954119606f5f954bd1a2ca2 |
12
+ | bundle | pass | 45 inventoried files; inventory digest 594be5be291554c4567bcd711274498d9600a896d2e6b5f85ca941e1dff77d12 |
13
13
  | installed_host | unverified | PPD-L02 and PPD-L03 not performed |
14
14
  | portal | unverified | unverified |
15
15
  | post_publication | unverified | not published |
@@ -1,4 +1,4 @@
1
- # AGDF 0.14.2 — Initial OpenAI Public Plugin Candidate
1
+ # AGDF 0.14.4 — Initial OpenAI Public Plugin Candidate
2
2
 
3
3
  This candidate packages the canonical AGDF workflow skills for public discovery in ChatGPT and
4
4
  Codex. It helps users assess delivery fit, preserve explicit human approvals, inspect existing-system
@@ -19,6 +19,12 @@ runtime or hooks, so automatic runtime checks remain unavailable in this profile
19
19
  installers also show the target and verified installed AGDF version, distinguish previous intent from
20
20
  effective host permission, explain manual mode and recover visibly from an invalid key.
21
21
 
22
+ Delivery Path Search now consumes canonical selected-run gate actions instead of persisted
23
+ presentation Markdown. Its additive version-1 result fields expose run revision, objective, outcome
24
+ phase and candidate/evaluation provenance. Missing input, zero legal candidates and evaluator
25
+ failures no longer appear as `no_safe_recommendation`; recommendation-facing results require at
26
+ least one valid evaluation and are the only persistable outcomes.
27
+
22
28
  AGDF is an independent open-source project by Arndt Gold. It is not affiliated with, endorsed by or
23
29
  sponsored by OpenAI and is not a security sandbox, legal assessment, compliance certification or
24
30
  autonomous shipping system.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.14.2",
3
+ "releaseVersion": "0.14.4",
4
4
  "cases": [
5
5
  {
6
6
  "id": "positive-proportional-fit",
@@ -279,10 +279,10 @@ function runLifecyclePhase(phase, operation) {
279
279
 
280
280
  function installNextAction(surface, runtimeChecks, fallback) {
281
281
  if (surface === "codex" && runtimeChecks.requested === "enabled" && runtimeChecks.effective === "decision_required") {
282
- return "Restart Codex, then approve the AGDF session hook when Codex asks.";
282
+ return `${fallback} Approve the AGDF session hook when the fresh Codex session asks.`;
283
283
  }
284
284
  if (surface === "copilot" && runtimeChecks.requested === "enabled" && runtimeChecks.effective === "decision_required") {
285
- return "Restart GitHub Copilot, then review the AGDF session hook when Copilot asks.";
285
+ return `${fallback} Review the AGDF session hook when the fresh Copilot session asks.`;
286
286
  }
287
287
  return fallback;
288
288
  }
@@ -430,9 +430,11 @@ function printInstallFailure(surface, error, options, io, command = surface) {
430
430
 
431
431
  function runDisable(options, { io, exec }) {
432
432
  try {
433
- const plan = planRepositoryDisable(options.dir, options.surface);
433
+ const plan = planRepositoryDisable(options.dir, options.surface, { shared: options.shared, exec });
434
434
  const applied = applyLifecyclePlan(plan, exec ? { exec } : {});
435
- const verified = applied.status === "success" ? verifyRepositoryDisabled(options.dir) : { status: "failed", evidence: [] };
435
+ const verified = applied.status === "success"
436
+ ? verifyRepositoryDisabled(options.dir, options.surface, { shared: options.shared })
437
+ : { status: "failed", evidence: [] };
436
438
  const result = applied.status === "success" && verified.status !== "healthy" ? "failed" : applied.status;
437
439
  const report = createLifecycleResult({
438
440
  operation: "disable",
@@ -440,9 +442,12 @@ function runDisable(options, { io, exec }) {
440
442
  surface: options.surface,
441
443
  scope: "repository",
442
444
  verification: { status: verified.status === "healthy" ? "healthy" : "degraded", evidence: [...applied.completed.map((item) => item.path || item.executable), ...verified.evidence] },
445
+ activation: { status: result === "success" ? "pending_restart" : "unknown" },
443
446
  restart: { required: result === "success", reason: result === "success" ? "host_reload" : "none" },
444
447
  next_action: result === "success"
445
- ? { kind: "restart", text: "Restart the host in this repository; global AGDF availability and .agdf/control are retained." }
448
+ ? options.surface === "copilot"
449
+ ? { kind: "restart", text: "Restart GitHub Copilot in this repository, then inspect /plugin list; independent instructions remain separate." }
450
+ : { kind: "restart", text: "Restart the host in this repository; global AGDF availability and .agdf/control are retained." }
446
451
  : { kind: "verify", text: "Inspect the reported repository configuration failure before retrying disable." },
447
452
  changes: applied.completed,
448
453
  retained: applied.retained,
@@ -453,7 +458,20 @@ function runDisable(options, { io, exec }) {
453
458
  printLifecycleResult(report, { json: options.json, io });
454
459
  return result === "success" ? 0 : 1;
455
460
  } catch (error) {
456
- io.error(error.message);
461
+ const report = lifecycleFailure({
462
+ operation: "disable",
463
+ surface: options.surface,
464
+ scope: "repository",
465
+ phase: "repository_preflight",
466
+ message: error.message,
467
+ evidence: [error.message],
468
+ nextAction: "Resolve the reported repository configuration or ignore precondition, then retry disable without changing unrelated files.",
469
+ });
470
+ if (options.json) printLifecycleResult(report, { json: true, io });
471
+ else {
472
+ io.error(error.message);
473
+ printLifecycleResult(report, { io });
474
+ }
457
475
  return 1;
458
476
  }
459
477
  }
@@ -18,7 +18,7 @@ export const commandRegistry = Object.freeze([
18
18
  command("opencode-status", { preferred: [""], scaffold: [""] }),
19
19
  command("status", { preferred: [" [--surface <surface>] [--run <run_id>] [--json]"] }),
20
20
  command("runtime-checks", { preferred: [" <status|enable|manual> --surface <codex|claude|copilot|opencode> [--json]"] }),
21
- command("disable", { preferred: [" --surface <surface> [--scope repository] [--dir <path>]"] }),
21
+ command("disable", { preferred: [" --surface <surface> [--scope repository] [--shared] [--dir <path>]"] }),
22
22
  command("uninstall", { preferred: [" --surface <surface> --scope global [--confirm]"] }),
23
23
  command("opencode-repo", { preferred: [""], scaffold: [""] }),
24
24
  command("init", { preferred: [""], scaffold: [""] }),
@@ -65,6 +65,12 @@ export function validateCommandOptions(options) {
65
65
  throw new Error("uninstall requires explicit --scope global");
66
66
  }
67
67
  if (options.confirm && options.target !== "uninstall") throw new Error("--confirm is supported only by uninstall");
68
+ if (options.shared && !(options.target === "disable" && options.surface === "copilot" && options.scope === "repository")) {
69
+ throw new Error("--shared is supported only by disable --surface copilot --scope repository");
70
+ }
71
+ if (options.target === "disable" && options.surface === "copilot" && options.scope !== "repository") {
72
+ throw new Error("Copilot disable requires explicit --scope repository");
73
+ }
68
74
  if (options.runtimeChecksDecision && !["codex", "claude", "copilot", "opencode"].includes(options.target)) {
69
75
  throw new Error("--runtime-checks is supported only by codex, claude, copilot and opencode installation commands");
70
76
  }
@@ -126,6 +132,7 @@ Options:
126
132
  --scope <repository|global>
127
133
  Select the lifecycle mutation scope
128
134
  --confirm Apply a previously previewed global uninstall plan
135
+ --shared Apply Copilot repository disable through shared .github/copilot/settings.json
129
136
  --runtime-checks <enable|manual|cancel>
130
137
  Make the installation-time automatic-check decision explicitly; no TTY defaults to manual
131
138
  --fixture <path>
@@ -12,21 +12,25 @@ import { enforcementForSurface } from '../delivery-path-search/surfaces/capabili
12
12
  import { persistSearchResult } from '../delivery-path-search/persistence.js';
13
13
 
14
14
  function unavailableOpenCodeResult({ options, preflight, input = null, error = null }) {
15
+ const surface = options.surface ?? "opencode";
15
16
  const mutation = error?.code === "OPENCODE_EVALUATOR_MUTATION_DETECTED";
16
- const attempted = Boolean(input);
17
+ const attempted = Boolean(input && error);
17
18
  const nextAction = mutation
18
19
  ? "Investigate and revert the detected repository mutation before any evaluator fallback or retry."
19
20
  : "Repair the reported OpenCode capability and retry, or use the existing instruction-only Delivery Path Search workflow.";
20
21
  return {
21
22
  contract_version: "1",
22
- surface: "opencode",
23
+ surface,
23
24
  scope_key: input?.scope_key ?? options.runId ?? null,
25
+ scope_revision: input?.scope_revision ?? "unversioned",
26
+ objective: input?.objective ?? "Delivery Path Search evaluator capability",
24
27
  current_gate: input?.current_gate ?? null,
28
+ outcome_phase: "evaluation",
25
29
  status: mutation ? "evaluator_error" : "evaluator_unavailable",
26
30
  recommendation: null,
27
- enforcement: enforcementForSurface("opencode"),
31
+ enforcement: enforcementForSurface(surface),
28
32
  evaluator: {
29
- name: "opencode",
33
+ name: surface,
30
34
  preflight: preflight?.code ?? "not_run",
31
35
  failure_code: error?.code ?? preflight?.code,
32
36
  detail: error?.message ?? preflight?.detail,
@@ -38,6 +42,16 @@ function unavailableOpenCodeResult({ options, preflight, input = null, error = n
38
42
  failure_code: error?.code ?? preflight?.code,
39
43
  evidence: preflight?.evidence ?? [],
40
44
  },
45
+ provenance: {
46
+ baseline_candidates: Math.min(input?.allowed_actions?.length ?? 0, input?.budgets?.max_candidates ?? 0),
47
+ generated_candidates: 0,
48
+ legal_candidates: attempted ? 1 : 0,
49
+ rejected_candidates: 0,
50
+ evaluation_attempts: attempted ? 1 : 0,
51
+ valid_evaluations: 0,
52
+ invalid_evaluations: attempted ? 1 : 0,
53
+ },
54
+ failure_code: error?.code ?? preflight?.code,
41
55
  stopping_reason: mutation ? "opencode_mutation_detected" : attempted ? "opencode_evaluator_failed" : "opencode_preflight_failed",
42
56
  next_action: nextAction,
43
57
  next_gate_action: nextAction,
@@ -46,11 +60,26 @@ function unavailableOpenCodeResult({ options, preflight, input = null, error = n
46
60
 
47
61
  export async function executeDeliveryPathSearch(options, io = console, dependencies = {}) {
48
62
  const fixture = options.fixture ? JSON.parse(readFileSync(options.fixture, "utf8")) : null;
63
+ const fixtureGeneration = fixture?.generator_response;
64
+ const generationEnabled = Boolean(fixtureGeneration || options.generateCandidates);
65
+ const initialEnforcement = fixture?.input?.enforcement ?? enforcementForSurface(options.surface);
66
+ const initialInput = fixture?.input ?? (dependencies.searchInputFromControl ?? searchInputFromControl)(options.dir, {
67
+ scopeKey: options.runId,
68
+ enforcement: initialEnforcement,
69
+ generation: generationEnabled ? {
70
+ enabled: true,
71
+ maxProposals: options.maxGeneratedCandidates,
72
+ maxDurationMs: options.generationTimeoutMs,
73
+ maxCostUnits: options.generationCostUnits,
74
+ } : undefined,
75
+ });
49
76
  const preflight = !fixture && options.surface === "opencode"
50
77
  ? (dependencies.preflightOpenCodeEvaluator ?? preflightOpenCodeEvaluator)({ cwd: options.dir })
51
78
  : null;
52
79
  if (preflight?.status === "failed") {
53
- const result = unavailableOpenCodeResult({ options, preflight });
80
+ const result = initialInput.input_failure_code
81
+ ? await runDeliveryPathSearch(initialInput, { name: "not-invoked", async evaluate() { throw new Error("input failure must stop before evaluation"); } })
82
+ : unavailableOpenCodeResult({ options, preflight, input: initialInput });
54
83
  printDeliveryPathSearchResult(result, options, io);
55
84
  return result;
56
85
  }
@@ -58,18 +87,7 @@ export async function executeDeliveryPathSearch(options, io = console, dependenc
58
87
  ?? (preflight
59
88
  ? enforcementForSurface("opencode", preflight.evidence, { preflight })
60
89
  : enforcementForSurface(options.surface));
61
- const fixtureGeneration = fixture?.generator_response;
62
- const generationEnabled = Boolean(fixtureGeneration || options.generateCandidates);
63
- const baseInput = fixture?.input ?? (dependencies.searchInputFromControl ?? searchInputFromControl)(options.dir, {
64
- scopeKey: options.runId,
65
- enforcement,
66
- generation: generationEnabled ? {
67
- enabled: true,
68
- maxProposals: options.maxGeneratedCandidates,
69
- maxDurationMs: options.generationTimeoutMs,
70
- maxCostUnits: options.generationCostUnits,
71
- } : undefined,
72
- });
90
+ const baseInput = fixture ? initialInput : { ...initialInput, enforcement };
73
91
  const input = generationEnabled && !baseInput.generation ? {
74
92
  ...baseInput,
75
93
  generation: {
@@ -90,7 +108,13 @@ export async function executeDeliveryPathSearch(options, io = console, dependenc
90
108
  ? (dependencies.openCodeEvaluator ?? openCodeEvaluator)({ cwd: options.dir, model: options.model, preflight })
91
109
  : null;
92
110
  if (!evaluator) {
93
- throw new Error(`${options.surface} has no executable evaluator in this release. Codex, Claude and preflight-qualified OpenCode are the executable adapters; --fixture is available for deterministic contract testing.`);
111
+ const detail = `${options.surface} has no executable evaluator in this release. Codex, Claude and preflight-qualified OpenCode are the executable adapters; --fixture is available for deterministic contract testing.`;
112
+ const result = {
113
+ ...unavailableOpenCodeResult({ options, preflight: { code: "surface_evaluator_unavailable", detail, evidence: [] }, input }),
114
+ surface: options.surface,
115
+ };
116
+ printDeliveryPathSearchResult(result, options, io);
117
+ return result;
94
118
  }
95
119
  const generator = fixtureGeneration
96
120
  ? fixtureGenerator(fixtureGeneration)
@@ -125,15 +149,23 @@ function printDeliveryPathSearchResult(result, options, io) {
125
149
  return;
126
150
  }
127
151
  io.log(`AGDF Delivery Path Search: ${result.status}`);
152
+ io.log(`Scope: ${result.scope_key ?? "unknown"} @ ${result.scope_revision ?? "unversioned"}`);
153
+ if (result.objective) io.log(`Objective: ${result.objective}`);
128
154
  io.log(`Current gate: ${result.current_gate ?? "unknown"}`);
155
+ io.log(`Outcome phase: ${result.outcome_phase ?? "unknown"}`);
129
156
  io.log(`Enforcement: ${result.enforcement.level}`);
130
157
  io.log(`Recommendation: ${result.recommendation?.action ?? "none"}`);
131
158
  if (result.budgets) io.log(`Evaluations: ${result.budgets.evaluations}`);
159
+ if (result.provenance) {
160
+ io.log(`Candidates: ${result.provenance.legal_candidates} legal, ${result.provenance.rejected_candidates} rejected`);
161
+ io.log(`Evaluation provenance: ${result.provenance.valid_evaluations}/${result.provenance.evaluation_attempts} valid, ${result.provenance.invalid_evaluations} invalid`);
162
+ }
132
163
  if (result.generation) {
133
164
  io.log(`Generation: ${result.generation.status} (${result.generation.accepted}/${result.generation.returned} accepted)`);
134
165
  io.log(`Generation budget: ${result.generation.cost_units} cost units, ${result.generation.duration_ms} ms`);
135
166
  if (result.generation.failure_code) io.log(`Generation failure: ${result.generation.failure_code}`);
136
167
  }
137
168
  io.log(`Stopping reason: ${result.stopping_reason}`);
138
- io.log(result.next_gate_action);
169
+ if (result.failure_code) io.log(`Failure: ${result.failure_code}`);
170
+ io.log(result.next_action ?? result.next_gate_action);
139
171
  }