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
package/README.md CHANGED
@@ -17,7 +17,7 @@ If you use Codex, this is the recommended first installation:
17
17
  npx --yes @agdf/cli@latest codex
18
18
  ```
19
19
 
20
- Restart Codex, open a new task in the repository you want to work in, and describe the intended change. AGDF starts with the smallest permitted governance step; it does not make implementation automatic.
20
+ Fully restart Codex, open a fresh task in the repository you want to work in, and describe the intended change. Restoring a previous task can retain stale AGDF skills. AGDF starts with the smallest permitted governance step; it does not make implementation automatic.
21
21
 
22
22
  Use a different target when Codex is not your agent surface:
23
23
 
@@ -72,6 +72,8 @@ npx --yes @agdf/cli@latest opencode-status
72
72
  npx --yes @agdf/cli@latest opencode-repo
73
73
  npx --yes @agdf/cli@latest status --surface codex
74
74
  npx --yes @agdf/cli@latest disable --surface codex --scope repository
75
+ npx --yes @agdf/cli@latest disable --surface copilot --scope repository
76
+ npx --yes @agdf/cli@latest disable --surface copilot --scope repository --shared
75
77
  npx --yes @agdf/cli@latest uninstall --surface codex --scope global
76
78
  npx --yes @agdf/cli@latest init
77
79
  npx --yes @agdf/cli@latest config --language en
@@ -125,6 +127,7 @@ Optional flags:
125
127
  - `--verbose` show captured host installer output and generated-file details after the concise lifecycle card
126
128
  - `--scope <repository|global>` select an explicit lifecycle mutation scope
127
129
  - `--confirm` apply a global uninstall after reviewing the default non-mutating preview
130
+ - `--shared` use commit-capable `.github/copilot/settings.json` for an explicit shared Copilot repository disable; without it Copilot uses ignored personal-local settings
128
131
 
129
132
  If no language is provided, `create-agdf` derives the preference from the local system locale (`LC_ALL`, `LC_MESSAGES`, `LANG`, `LANGUAGE` or the Node.js runtime locale) and falls back to `en`.
130
133
 
@@ -142,7 +145,7 @@ it does not localize the CLI lifecycle card.
142
145
  - `opencode-status` reports OpenCode global config, package loadability, global native-skill completeness, installed host/plugin-SDK versions, declaration-level support for AGDF's two experimental hooks, durable repository activation, legacy compatibility and observable session signals
143
146
  - `status` reports installation, repository activation and delivery separately without mutating state
144
147
  - `runtime-checks status|enable|manual` reports the requested/effective automatic-check state or gives the exact reinstall route needed to change it
145
- - `disable` writes a supported repository-local opt-out while retaining global capability and durable control state
148
+ - `disable` keeps Codex repository behavior and supports Copilot personal-local opt-out by default; Copilot shared repository effect requires `--shared`
146
149
  - `uninstall` previews and, only with `--confirm`, applies a selected global removal through supported native/owned operations
147
150
  - `opencode-repo` writes durable AGDF control configuration and templates under `.agdf/control/`; it does not copy a second OpenCode runtime surface
148
151
  - `config` writes or updates only `.agdf/control/config.json` for an already installed plugin or an existing repository
@@ -153,12 +156,41 @@ the Copilot manifest, prefixed skills, hook, required contracts and exact-versio
153
156
  is rendered from the same canonical sources. The installers atomically stage their profile under an AGDF-owned user-data marketplace, register
154
157
  that stable local path through the host CLI and verify the exposed version. Source `plugin/` therefore
155
158
  contains no generated runtime bytes and the source checkout exposes no installable root marketplace.
159
+
160
+ Repository lifecycle support is deliberately asymmetric:
161
+
162
+ | Surface | Personal repository opt-out | Shared repository opt-out | Repository activation | Global uninstall |
163
+ |---|---|---|---|---|
164
+ | Codex | supported by its existing local plugin state | no new `--shared` mode | `codex-repo` | supported |
165
+ | Claude Code | not supported without a verified host mechanism | not supported | no new mechanism | supported |
166
+ | GitHub Copilot | default in ignored `.github/copilot/settings.local.json` | explicit `--shared` in `.github/copilot/settings.json` | plugin discovery remains separate | supported |
167
+ | OpenCode | not supported as disable | not supported | `opencode-repo` | supported |
168
+
169
+ The personal Copilot command fails before mutation unless Git confirms the local settings path is
170
+ ignored. It never edits `.gitignore` or `.git/info/exclude`. Existing JSON must be strict JSON;
171
+ JSONC, comments, invalid types and symlinked paths fail closed. Only
172
+ `enabledPlugins["agdf@agdf"]` changes. Restart Copilot and inspect `/plugin list`; inspect
173
+ `/instructions` separately because plugin disablement does not disable `AGENTS.md`,
174
+ `.github/copilot-instructions.md` or other applicable instructions.
156
175
  The staged plugin contains one installation-provenance marker and the shared exact-version runtime;
157
176
  routine installed validation does not depend on the GitHub
158
177
  checkout, npm cache, PATH or registry. Rerunning either command performs the explicit update and
159
178
  migrates only the exact known legacy AGDF GitHub marketplace; foreign same-name registrations fail
160
179
  closed and failed host operations restore the prior owned stage.
161
180
 
181
+ The shared installer recognizes exact packaged snapshots for the verified AGDF-owned four-profile
182
+ releases `0.13.6`, `0.13.7`, `0.13.8` and `0.14.1`, then rebuilds them from current canonical
183
+ package content. Current-shape `0.14.2` and `0.14.3` stay on ordinary current validation.
184
+ `agdf-v0.14.0` is not a release alias: its internal version is `0.13.8`, so it grants no
185
+ compatibility. Historical lookup uses no Git or network access and does not accept unknown versions,
186
+ partial contracts or tampered provenance. Claude's Windows-only contention recovery removes at most the one
187
+ contained `temp_local_*` directory named by the current install command's `EPERM` rename failure and
188
+ retries once; it does not enumerate or broadly clear the host cache.
189
+
190
+ Successful installation verifies the installed version but not an already loaded session. Fully
191
+ restart the host and start a fresh session or task. Restoring the previous session can retain stale
192
+ AGDF skills and must not be treated as current loaded-session evidence.
193
+
162
194
  Copilot staging uses the independent path `<AGDF data directory>/marketplaces/agdf-copilot`. This
163
195
  prevents Copilot updates and rollbacks from replacing the shared Codex and Claude payload while the
164
196
  host-facing Marketplace identity remains `agdf` and the install identity remains `agdf@agdf`.
@@ -286,7 +318,11 @@ Requirements and boundaries:
286
318
  - OpenCode candidate generation is intentionally unavailable; Copilot has no executable native evaluator
287
319
  - cost units are rubric values used for bounded comparison, not measured provider currency
288
320
 
289
- The result is either one recommendation or `no_safe_recommendation`. In both cases run canonical `gate-check` afterwards.
321
+ The result reports the selected run/revision/objective, the phase that actually ran and candidate and
322
+ evaluation provenance. `input_unavailable`, `no_legal_candidates`, `evaluator_unavailable` and
323
+ `evaluator_error` are non-recommendation outcomes. `recommendation` and
324
+ `no_safe_recommendation` require at least one valid evaluation; only those evaluated outcomes may be
325
+ persisted. A result applies only to its selected run objective. Run canonical `gate-check` afterwards.
290
326
 
291
327
  `gate-check --json` and `delivery-map --json` also expose a `status_card` object. It is a compact projection of the current control state: current gate, allowed and forbidden actions, blocker, next skill, next permissible step and `quality_outlook`. `next_step` is process permission; `quality_outlook` is the next meaningful quality-improvement focus and does not unlock gates.
292
328
 
@@ -4,11 +4,24 @@
4
4
 
5
5
  Delivery Path Search is an optional read-only planning step for high-impact decisions with several materially different next actions.
6
6
 
7
- - It consumes current AGDF state and must reject gate-illegal candidates before model evaluation.
8
- - It returns one advisory recommendation or `no_safe_recommendation`.
7
+ - It consumes the canonical selected-run `agdf-gate-check` evaluation for run, revision, current gate and
8
+ legal actions. Persisted presentation Markdown such as the Run Status Card is never policy input.
9
+ - It binds the selected `scope_key`, `scope_revision` and objective to one control snapshot. A stale
10
+ or incomplete snapshot fails before candidate generation or evaluation.
11
+ - It reports the phase that actually ran: `input | candidate | evaluation | search`. A phase that
12
+ did not run cannot produce a later-phase conclusion.
13
+ - Terminal status is `input_unavailable | no_legal_candidates | evaluator_unavailable |
14
+ evaluator_error | recommendation | no_safe_recommendation`. Recommendation-facing statuses
15
+ require at least one contract-valid evaluation. `candidate_queue_exhausted` is a stopping reason,
16
+ not recommendation evidence.
17
+ - It reports baseline/generated/legal/rejected candidate counts and attempted/valid/invalid
18
+ evaluation counts. Zero valid evaluations must never be presented or persisted as an evaluated
19
+ recommendation conclusion.
9
20
  - It must report budgets, stopping reason and `full | tool_enforced | instruction_only` enforcement.
10
21
  - Model scores are judgements, not measurements.
11
22
  - Search output is evidence only. Canonical `agdf-gate-check` independently decides what may proceed.
23
+ - Search applies only to the selected run objective. An unrelated decision needs the correct
24
+ governed scope; Delivery Path Search is not a second task-target resolver.
12
25
  - The bounded first-release algorithm must not be labelled MCTS.
13
26
  - Surface adapters may translate transport and presentation, but must not fork scoring, search or gate semantics.
14
27
  - Optional AI-native candidate generation supplements the deterministic candidate baseline; it never replaces it.
@@ -19,6 +32,8 @@ Delivery Path Search is an optional read-only planning step for high-impact deci
19
32
  - Codex and Claude Code may provide tool-enforced generator transports. Copilot, OpenCode and generic surfaces remain instruction-only without conforming evidence.
20
33
  - OpenCode may provide a tool-enforced evaluator only for an invocation whose capability preflight proves `opencode run --pure --agent`, the owned evaluator agent and effective executable-tool denies. Preflight or transport failure must return `evaluator_unavailable` with `instruction_only` enforcement and point to the existing instruction-only workflow; it must not continue through a weaker subprocess.
21
34
  - OpenCode candidate generation remains unavailable.
35
+ - Persistence accepts only contract-valid `recommendation` or `no_safe_recommendation` results with
36
+ at least one valid evaluation. Input, candidate and evaluator failure results remain transient.
22
37
 
23
38
  The field names above are the stable machine-readable contract used by JSON
24
39
  reports and automation. Human-facing Markdown must present the same projection
@@ -154,8 +154,8 @@ required decision and one neutral instruction to choose approve, request revisio
154
154
  or decline. It does not contain the exact approval value or quality outlook. It uses localized human-readable labels
155
155
  and must not contain evidence, diagnostic codes, raw control-state keys,
156
156
  allowed/forbidden inventories or machine values. The complete Run Status Card remains the operational,
157
- CLI and audit projection and remains available for complete detail outside the
158
- approval-time compact view.
157
+ CLI and audit projection. Every ready-gate presentation renders the complete operational Run Status Card exactly once, between the compact approval-time Run Status Card and the Gate Transition Card, consumed verbatim from the code-owned status presentation; when it is undeliverable, the localized status-presentation failure line with its concrete diagnostic codes takes its place and the decision is still requested.
158
+ The exact-approval once-only requirement applies to the compact approval-time Run Status Card and the Gate Transition Card only; the complete Run Status Card may carry the missing approval as audit data.
159
159
 
160
160
  The first scan across both cards reveals the requested decision, readiness,
161
161
  required approval, approval effect, remaining boundary and next transition.
@@ -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 `agdf-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
  {
2
2
  "name": "agdf",
3
- "version": "0.14.2",
3
+ "version": "0.14.4",
4
4
  "description": "AI Governance & Delivery Framework (AGDF) is a governance framework for agentic work. Its first implementation provides a control layer for governed AI-assisted software delivery. It combines workflow skills, explicit gates, control templates and machine-readable repository checks to keep work aligned with approved scope and make evidence a prerequisite for consequential gate transitions. Supported workflows include brownfield analysis, task-plan review, QA decisions, durable run state and auditable delivery closeout. AGDF is an independent open-source project, not a security sandbox, compliance certification or autonomous release system.",
5
5
  "keywords": [
6
6
  "agentic",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agdf",
3
- "version": "0.14.2",
3
+ "version": "0.14.4",
4
4
  "description": "Control layer for governed AI-assisted delivery.",
5
5
  "author": {
6
6
  "name": "Arndt Gold",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "id": "agdf",
4
- "version": "0.14.2",
4
+ "version": "0.14.4",
5
5
  "displayName": "AI Governance & Delivery Framework",
6
6
  "developerName": "Arndt Gold",
7
7
  "description": "Control layer for governed AI-assisted delivery.",
@@ -4,11 +4,24 @@
4
4
 
5
5
  Delivery Path Search is an optional read-only planning step for high-impact decisions with several materially different next actions.
6
6
 
7
- - It consumes current AGDF state and must reject gate-illegal candidates before model evaluation.
8
- - It returns one advisory recommendation or `no_safe_recommendation`.
7
+ - It consumes the canonical selected-run `gate-check` evaluation for run, revision, current gate and
8
+ legal actions. Persisted presentation Markdown such as the Run Status Card is never policy input.
9
+ - It binds the selected `scope_key`, `scope_revision` and objective to one control snapshot. A stale
10
+ or incomplete snapshot fails before candidate generation or evaluation.
11
+ - It reports the phase that actually ran: `input | candidate | evaluation | search`. A phase that
12
+ did not run cannot produce a later-phase conclusion.
13
+ - Terminal status is `input_unavailable | no_legal_candidates | evaluator_unavailable |
14
+ evaluator_error | recommendation | no_safe_recommendation`. Recommendation-facing statuses
15
+ require at least one contract-valid evaluation. `candidate_queue_exhausted` is a stopping reason,
16
+ not recommendation evidence.
17
+ - It reports baseline/generated/legal/rejected candidate counts and attempted/valid/invalid
18
+ evaluation counts. Zero valid evaluations must never be presented or persisted as an evaluated
19
+ recommendation conclusion.
9
20
  - It must report budgets, stopping reason and `full | tool_enforced | instruction_only` enforcement.
10
21
  - Model scores are judgements, not measurements.
11
22
  - Search output is evidence only. Canonical `gate-check` independently decides what may proceed.
23
+ - Search applies only to the selected run objective. An unrelated decision needs the correct
24
+ governed scope; Delivery Path Search is not a second task-target resolver.
12
25
  - The bounded first-release algorithm must not be labelled MCTS.
13
26
  - Surface adapters may translate transport and presentation, but must not fork scoring, search or gate semantics.
14
27
  - Optional AI-native candidate generation supplements the deterministic candidate baseline; it never replaces it.
@@ -19,6 +32,8 @@ Delivery Path Search is an optional read-only planning step for high-impact deci
19
32
  - Codex and Claude Code may provide tool-enforced generator transports. Copilot, OpenCode and generic surfaces remain instruction-only without conforming evidence.
20
33
  - OpenCode may provide a tool-enforced evaluator only for an invocation whose capability preflight proves `opencode run --pure --agent`, the owned evaluator agent and effective executable-tool denies. Preflight or transport failure must return `evaluator_unavailable` with `instruction_only` enforcement and point to the existing instruction-only workflow; it must not continue through a weaker subprocess.
21
34
  - OpenCode candidate generation remains unavailable.
35
+ - Persistence accepts only contract-valid `recommendation` or `no_safe_recommendation` results with
36
+ at least one valid evaluation. Input, candidate and evaluator failure results remain transient.
22
37
 
23
38
  The field names above are the stable machine-readable contract used by JSON
24
39
  reports and automation. Human-facing Markdown must present the same projection
@@ -154,8 +154,8 @@ required decision and one neutral instruction to choose approve, request revisio
154
154
  or decline. It does not contain the exact approval value or quality outlook. It uses localized human-readable labels
155
155
  and must not contain evidence, diagnostic codes, raw control-state keys,
156
156
  allowed/forbidden inventories or machine values. The complete Run Status Card remains the operational,
157
- CLI and audit projection and remains available for complete detail outside the
158
- approval-time compact view.
157
+ CLI and audit projection. Every ready-gate presentation renders the complete operational Run Status Card exactly once, between the compact approval-time Run Status Card and the Gate Transition Card, consumed verbatim from the code-owned status presentation; when it is undeliverable, the localized status-presentation failure line with its concrete diagnostic codes takes its place and the decision is still requested.
158
+ The exact-approval once-only requirement applies to the compact approval-time Run Status Card and the Gate Transition Card only; the complete Run Status Card may carry the missing approval as audit data.
159
159
 
160
160
  The first scan across both cards reveals the requested decision, readiness,
161
161
  required approval, approval effect, remaining boundary and next transition.
@@ -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
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "id": "agdf",
4
- "version": "0.14.2",
4
+ "version": "0.14.4",
5
5
  "displayName": "AI Governance & Delivery Framework",
6
6
  "developerName": "Arndt Gold",
7
7
  "description": "Control layer for governed AI-assisted delivery.",
@@ -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
  }
@@ -45,6 +45,7 @@ export function parseArgs(argv, dependencies = {}) {
45
45
  let allActive = false;
46
46
  let scope;
47
47
  let confirm = false;
48
+ let shared = false;
48
49
  let runtimeChecksDecision;
49
50
  let runtimeChecksAction;
50
51
 
@@ -61,6 +62,7 @@ export function parseArgs(argv, dependencies = {}) {
61
62
  if (arg === "--generate-candidates") { generateCandidates = true; continue; }
62
63
  if (arg === "--all-active") { allActive = true; continue; }
63
64
  if (arg === "--confirm") { confirm = true; continue; }
65
+ if (arg === "--shared") { shared = true; continue; }
64
66
 
65
67
  if (arg === "--runtime-checks") {
66
68
  const next = requiredValue(args, i, arg);
@@ -162,6 +164,7 @@ export function parseArgs(argv, dependencies = {}) {
162
164
  allActive,
163
165
  scope,
164
166
  confirm,
167
+ shared,
165
168
  runtimeChecksDecision,
166
169
  runtimeChecksAction: runtimeChecksAction ?? "status",
167
170
  generatorModel,