create-agdf 0.14.2 → 0.14.3

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 (53) hide show
  1. package/README.md +5 -1
  2. package/generated/.opencode/contracts/control-scaffold.md +17 -2
  3. package/generated/.opencode/skills/agdf-delivery-path-search/SKILL.md +16 -4
  4. package/generated/plugins/agdf/.claude-plugin/plugin.json +1 -1
  5. package/generated/plugins/agdf/.codex-plugin/plugin.json +1 -1
  6. package/generated/plugins/agdf/meta/agdf-plugin.definition.json +1 -1
  7. package/generated/plugins/agdf/meta/contracts/control-scaffold.md +17 -2
  8. package/generated/plugins/agdf/meta/copilot-payload-baseline.json +2 -2
  9. package/generated/plugins/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-plugin.definition.json +1 -1
  10. package/generated/plugins/agdf/runtime/create-agdf/lib/cli/delivery-path-search-command.js +51 -19
  11. package/generated/plugins/agdf/runtime/create-agdf/lib/delivery-path-search/contracts.js +37 -0
  12. package/generated/plugins/agdf/runtime/create-agdf/lib/delivery-path-search/persistence.js +14 -2
  13. package/generated/plugins/agdf/runtime/create-agdf/lib/delivery-path-search/search-engine.js +126 -36
  14. package/generated/plugins/agdf/runtime/create-agdf/lib/delivery-path-search/state-adapter.js +40 -92
  15. package/generated/plugins/agdf/runtime/create-agdf/package.json +1 -1
  16. package/generated/plugins/agdf/runtime/runtime-manifest.json +2 -2
  17. package/generated/plugins/agdf/skills/delivery-path-search/SKILL.md +16 -4
  18. package/generated/plugins/agdf/submission/openai/availability.md +1 -1
  19. package/generated/plugins/agdf/submission/openai/capability-matrix.json +1 -1
  20. package/generated/plugins/agdf/submission/openai/release-notes.md +7 -1
  21. package/generated/plugins/agdf/submission/openai/reviewer-cases.json +1 -1
  22. package/generated/plugins/copilot/agdf/.agdf-payload-inventory.json +27 -27
  23. package/generated/plugins/copilot/agdf/copilot-skills/agdf-delivery-path-search/SKILL.md +16 -4
  24. package/generated/plugins/copilot/agdf/copilot-skills/contracts/control-scaffold.md +17 -2
  25. package/generated/plugins/copilot/agdf/meta/agdf-plugin.definition.json +1 -1
  26. package/generated/plugins/copilot/agdf/plugin.json +1 -1
  27. package/generated/plugins/copilot/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-plugin.definition.json +1 -1
  28. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/cli/delivery-path-search-command.js +51 -19
  29. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/delivery-path-search/contracts.js +37 -0
  30. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/delivery-path-search/persistence.js +14 -2
  31. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/delivery-path-search/search-engine.js +126 -36
  32. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/delivery-path-search/state-adapter.js +40 -92
  33. package/generated/plugins/copilot/agdf/runtime/create-agdf/package.json +1 -1
  34. package/generated/plugins/copilot/agdf/runtime/runtime-manifest.json +2 -2
  35. package/generated/submissions/openai/agdf/.codex-plugin/plugin.json +1 -1
  36. package/generated/submissions/openai/agdf/meta/agdf-plugin.definition.json +1 -1
  37. package/generated/submissions/openai/agdf/meta/contracts/control-scaffold.md +17 -2
  38. package/generated/submissions/openai/agdf/meta/copilot-payload-baseline.json +2 -2
  39. package/generated/submissions/openai/agdf/skills/delivery-path-search/SKILL.md +16 -4
  40. package/generated/submissions/openai/agdf/submission/openai/availability.md +1 -1
  41. package/generated/submissions/openai/agdf/submission/openai/capability-matrix.json +1 -1
  42. package/generated/submissions/openai/agdf/submission/openai/inventory.json +12 -12
  43. package/generated/submissions/openai/agdf/submission/openai/listing.json +1 -1
  44. package/generated/submissions/openai/agdf/submission/openai/readiness.json +2 -2
  45. package/generated/submissions/openai/agdf/submission/openai/readiness.md +2 -2
  46. package/generated/submissions/openai/agdf/submission/openai/release-notes.md +7 -1
  47. package/generated/submissions/openai/agdf/submission/openai/reviewer-cases.json +1 -1
  48. package/lib/cli/delivery-path-search-command.js +51 -19
  49. package/lib/delivery-path-search/contracts.js +37 -0
  50. package/lib/delivery-path-search/persistence.js +14 -2
  51. package/lib/delivery-path-search/search-engine.js +126 -36
  52. package/lib/delivery-path-search/state-adapter.js +40 -92
  53. package/package.json +1 -1
@@ -1,11 +1,10 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import { join } from "node:path";
3
1
  import {
4
2
  CONTRACT_VERSION,
5
3
  GENERATOR_CONTRACT_VERSION,
6
4
  validateGeneratorRequest,
7
5
  } from "./contracts.js";
8
- import { resolveRuns, verifyLegacyProjection } from "../control-state/index.js";
6
+ import { evaluateGateCheck } from "../control-evaluation/gate-check.js";
7
+ import { readRunState } from "../control-evaluation/run-state.js";
9
8
 
10
9
  function section(content, heading) {
11
10
  return (
@@ -15,100 +14,44 @@ function section(content, heading) {
15
14
  );
16
15
  }
17
16
 
18
- function tableAnswers(content) {
19
- const answers = {};
20
- for (const line of section(content, "Current Control State").split(/\r?\n/)) {
21
- const cells = line
22
- .split("|")
23
- .slice(1, -1)
24
- .map((cell) => cell.trim());
25
- if (
26
- cells.length >= 2 &&
27
- cells[0] &&
28
- !cells[0].startsWith("---") &&
29
- cells[0] !== "Question"
30
- )
31
- answers[cells[0]] = cells[1];
32
- }
33
- return answers;
34
- }
35
-
36
- function statusCard(content) {
37
- const card = {};
38
- for (const line of section(content, "Run Status Card").split(/\r?\n/)) {
39
- const cells = line
40
- .split("|")
41
- .slice(1, -1)
42
- .map((cell) => cell.trim().replace(/^`|`$/g, ""));
43
- if (
44
- cells.length >= 2 &&
45
- cells[0] &&
46
- !cells[0].startsWith("---") &&
47
- cells[0] !== "Run status"
48
- )
49
- card[cells[0]] = cells[1];
50
- }
51
- return card;
17
+ function metaField(content, name) {
18
+ return content.match(new RegExp(`^- ${name}:\\s*(.+)$`, "m"))?.[1]
19
+ ?.replace(/^`|`$/g, "")
20
+ .trim() ?? "";
52
21
  }
53
22
 
54
- function listCell(value) {
55
- return String(value ?? "")
56
- .split(/\s*;\s*/)
57
- .map((item) => item.trim())
58
- .filter(Boolean);
59
- }
60
-
61
- export function searchInputFromControl(targetDir, options = {}) {
62
- const canonicalRoot = join(targetDir, ".agdf", "control", "runs");
63
- if (existsSync(canonicalRoot)) {
64
- const projection = verifyLegacyProjection(targetDir);
65
- if (!["absent", "valid"].includes(projection.status)) {
66
- throw new Error(`AGDF_LEGACY_PROJECTION_DRIFT:${projection.status}`);
67
- }
23
+ export function searchInputFromControl(targetDir, options = {}, dependencies = {}) {
24
+ const evaluate = dependencies.evaluateGateCheck ?? evaluateGateCheck;
25
+ const readRun = dependencies.readRunState ?? readRunState;
26
+ const selection = options.scopeKey ? { runId: options.scopeKey } : {};
27
+ const gate = evaluate(targetDir, selection);
28
+ const run = readRun(targetDir, selection);
29
+ const content = run.content ?? "";
30
+ const evaluatedRunId = gate.status_card?.run_id ?? "";
31
+ const evaluatedRevision = gate.status_presentation?.revision_id ?? "";
32
+ const runId = metaField(content, "run_id");
33
+ const runRevision = metaField(content, "revision_id");
34
+ const runGate = metaField(content, "current_gate");
35
+ let inputFailureCode = "";
36
+ if (!content || run.resolution_error) inputFailureCode = "canonical_control_unavailable";
37
+ else if (!evaluatedRunId || !evaluatedRevision) inputFailureCode = "canonical_snapshot_identity_missing";
38
+ else if (evaluatedRunId !== runId || evaluatedRevision !== runRevision || gate.current_gate !== runGate) {
39
+ inputFailureCode = "stale_control_snapshot";
40
+ } else if (!Array.isArray(gate.allowed) || gate.allowed.length === 0) {
41
+ inputFailureCode = "canonical_actions_unavailable";
68
42
  }
69
- const resolved = existsSync(canonicalRoot)
70
- ? resolveRuns(targetDir, {
71
- runIdArg: options.scopeKey,
72
- runIdEnv: process.env.AGDF_RUN_ID,
73
- })
74
- : null;
75
- const runPath =
76
- resolved?.run.path ?? join(targetDir, ".agdf", "control", "AGDF_RUN.md");
77
- if (!existsSync(runPath)) throw new Error("missing AGDF run state");
78
- const content = readFileSync(runPath, "utf8");
79
- const meta = Object.fromEntries(
80
- [...content.matchAll(/^- ([a-z_]+):\s*(.+)$/gm)].map((match) => [
81
- match[1],
82
- match[2].replace(/^`|`$/g, "").trim(),
83
- ]),
84
- );
85
- const answers = tableAnswers(content);
86
- const card = statusCard(content);
87
43
  const result = {
88
44
  contract_version: CONTRACT_VERSION,
89
- scope_key: options.scopeKey ?? meta.run_id ?? "unknown-scope",
90
- objective: section(content, "Objective").trim(),
91
- current_gate: card["Current gate"] ?? meta.current_gate ?? "unknown",
92
- allowed_actions: options.allowedActions ?? listCell(card["Allowed now"]),
93
- forbidden_actions:
94
- options.forbiddenActions ??
95
- listCell(answers["What is explicitly forbidden right now?"]),
96
- evidence_refs: [
97
- ...content.matchAll(
98
- /\|\s*([^|]+)\s*\|\s*([^|]+)\s*\|\s*([^|]+)\s*\|\s*(direct|indirect)\s*\|/g,
99
- ),
100
- ]
101
- .slice(1)
102
- .map((match) => `${match[1].trim()}: ${match[2].trim()}`),
103
- risks: section(content, "Risks")
104
- .split(/\r?\n/)
105
- .filter(
106
- (line) =>
107
- line.startsWith("|") &&
108
- !line.includes("---") &&
109
- !line.includes("| Risk |"),
110
- )
111
- .map((line) => line.split("|")[1].trim()),
45
+ scope_key: evaluatedRunId || runId || options.scopeKey || "unknown-scope",
46
+ scope_revision: evaluatedRevision || runRevision || "unversioned",
47
+ objective: section(content, "Objective").trim() || "Canonical Delivery Path Search input unavailable",
48
+ current_gate: gate.current_gate || runGate || "unknown",
49
+ allowed_actions: inputFailureCode ? [] : [...gate.allowed],
50
+ forbidden_actions: Array.isArray(gate.forbidden) ? [...gate.forbidden] : [],
51
+ evidence_refs: Array.isArray(gate.evidence_refs)
52
+ ? gate.evidence_refs.map((item) => `${item.evidence}: ${item.source}`)
53
+ : [],
54
+ risks: Array.isArray(run.risks) ? run.risks.map((item) => item.risk).filter(Boolean) : [],
112
55
  enforcement: options.enforcement ?? {
113
56
  level: "instruction_only",
114
57
  evidence: ["surface instruction prohibits implementation during search"],
@@ -122,6 +65,11 @@ export function searchInputFromControl(targetDir, options = {}) {
122
65
  stability_window: options.stabilityWindow ?? 3,
123
66
  },
124
67
  };
68
+ if (inputFailureCode) {
69
+ result.input_failure_code = inputFailureCode;
70
+ result.input_failure_detail = run.resolution_error || (gate.blocking_reason !== "none" ? gate.blocking_reason : "") || "canonical input is not ready";
71
+ result.input_recovery_action = gate.next_allowed_action || "Run canonical AGDF gate-check and repair the selected control state.";
72
+ }
125
73
  if (options.generation?.enabled)
126
74
  result.generation = {
127
75
  enabled: true,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agdf/local-validator-runtime",
3
- "version": "0.14.2",
3
+ "version": "0.14.3",
4
4
  "private": true,
5
5
  "type": "module"
6
6
  }
@@ -2,7 +2,7 @@
2
2
  "schema_version": "1",
3
3
  "generated": true,
4
4
  "source": "create-agdf/cli",
5
- "version": "0.14.2",
5
+ "version": "0.14.3",
6
6
  "entrypoint": "create-agdf/bin/agdf-validator.js",
7
- "digest": "51035c8735d47aa727980d82709326071b372464ae077a1d269aadc0d30f2624"
7
+ "digest": "8f6dbd5e647aff7dfc1405f4e54a5b135a8d820858b5f8f85873964f6eb2f7cf"
8
8
  }
@@ -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.
@@ -1,6 +1,6 @@
1
1
  # Availability Decision Record
2
2
 
3
- - release: `0.14.2`
3
+ - release: `0.14.3`
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.3",
4
4
  "evidenceStates": [
5
5
  "common",
6
6
  "codex-specific",
@@ -1,4 +1,4 @@
1
- # AGDF 0.14.2 — Initial OpenAI Public Plugin Candidate
1
+ # AGDF 0.14.3 — 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.3",
4
4
  "cases": [
5
5
  {
6
6
  "id": "positive-proportional-fit",
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "schema_version": 1,
3
3
  "profile_id": "copilot-runtime-plugin",
4
- "version": "0.14.2",
4
+ "version": "0.14.3",
5
5
  "baseline": {
6
6
  "max_files": 78,
7
- "max_bytes": 539607
7
+ "max_bytes": 550979
8
8
  },
9
9
  "stats": {
10
10
  "files": 78,
11
- "bytes": 539607
11
+ "bytes": 550979
12
12
  },
13
13
  "entries": [
14
14
  {
@@ -73,9 +73,9 @@
73
73
  "rule": "copilot_name_projection",
74
74
  "requirement": "Copilot skill agdf-delivery-path-search",
75
75
  "source": "plugin/skills/delivery-path-search/SKILL.md",
76
- "source_digest": "8c4a94c8ad86a51380f2f636d8b2fedd5a3554adf3edb19d350eb6a7c8254914",
77
- "digest": "02daa240a02d85037d50b7eafd7524c0a18ea9b07a69d5fe70a58d11d3002478",
78
- "bytes": 4001
76
+ "source_digest": "688a0e04f6a1a39be17ded0047f88187b109f25bd9f22927a3d4261cbfdc0bd5",
77
+ "digest": "986c74ab103ca04084bfc1b9fce66090988106670cd224fca43c437a7ee4705b",
78
+ "bytes": 4916
79
79
  },
80
80
  {
81
81
  "destination": "copilot-skills/agdf-gate-check/SKILL.md",
@@ -183,9 +183,9 @@
183
183
  "rule": "copilot_name_projection",
184
184
  "requirement": "focused runtime contract",
185
185
  "source": "plugin/meta/contracts/control-scaffold.md",
186
- "source_digest": "bf5773ec22013d3332cf4900d59880ebdfbaab7dee227c66b1721d0fd05aeac2",
187
- "digest": "975cca738b1856a89397d9d629077496833e63ffee7a29dfe9689dc42c7ee161",
188
- "bytes": 8992
186
+ "source_digest": "82d298d5399c56ecbaeef78ac367556b675200c09ea96e160534ec03adb07f42",
187
+ "digest": "2aaa38c39d19d38575270d8bc6e8c113be3bd652f988657d53dae10613f95243",
188
+ "bytes": 10256
189
189
  },
190
190
  {
191
191
  "destination": "copilot-skills/contracts/gate-transition.md",
@@ -249,7 +249,7 @@
249
249
  "rule": "render_copilot_hook",
250
250
  "requirement": "consent-bound session start check",
251
251
  "source": "plugin/meta/agdf-plugin.definition.json",
252
- "source_digest": "ba636c3e224125df8f2dedde215b00473174b1a02fdeecbf91da1a262dcde778",
252
+ "source_digest": "16b69b796510bf4f6907fd986ad64dcf8e5ac4f3860d12e0e62381ea2582b012",
253
253
  "digest": "60d7cd31d6c9483c720c5e775c10d94ba7fd214a0b15b046703ced3953bd489f",
254
254
  "bytes": 273
255
255
  },
@@ -282,8 +282,8 @@
282
282
  "rule": "copy",
283
283
  "requirement": "local validator and session orientation dependency",
284
284
  "source": "plugin/meta/agdf-plugin.definition.json",
285
- "source_digest": "ba636c3e224125df8f2dedde215b00473174b1a02fdeecbf91da1a262dcde778",
286
- "digest": "ba636c3e224125df8f2dedde215b00473174b1a02fdeecbf91da1a262dcde778",
285
+ "source_digest": "16b69b796510bf4f6907fd986ad64dcf8e5ac4f3860d12e0e62381ea2582b012",
286
+ "digest": "16b69b796510bf4f6907fd986ad64dcf8e5ac4f3860d12e0e62381ea2582b012",
287
287
  "bytes": 11491
288
288
  },
289
289
  {
@@ -304,8 +304,8 @@
304
304
  "rule": "render_copilot_manifest",
305
305
  "requirement": "Copilot plugin discovery",
306
306
  "source": "plugin/meta/agdf-plugin.definition.json",
307
- "source_digest": "ba636c3e224125df8f2dedde215b00473174b1a02fdeecbf91da1a262dcde778",
308
- "digest": "19ed3eacf4050fc0b4323d2714ea3b5b8aa0c60e67259ae9bbafd5a08e029ec4",
307
+ "source_digest": "16b69b796510bf4f6907fd986ad64dcf8e5ac4f3860d12e0e62381ea2582b012",
308
+ "digest": "2e60d46f88338ce119067c2681c2517572c15d66b7f3f775bb9da0b0d5048673",
309
309
  "bytes": 551
310
310
  },
311
311
  {
@@ -359,7 +359,7 @@
359
359
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
360
360
  "rule": "generated_exact_runtime",
361
361
  "requirement": "offline exact-version validator and session check",
362
- "digest": "ba636c3e224125df8f2dedde215b00473174b1a02fdeecbf91da1a262dcde778",
362
+ "digest": "16b69b796510bf4f6907fd986ad64dcf8e5ac4f3860d12e0e62381ea2582b012",
363
363
  "bytes": 11491
364
364
  },
365
365
  {
@@ -377,8 +377,8 @@
377
377
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
378
378
  "rule": "generated_exact_runtime",
379
379
  "requirement": "offline exact-version validator and session check",
380
- "digest": "0819ad3320dc1ac04d975ee8ae9fda321b0cc5accd7e9c06350aa71ce5349859",
381
- "bytes": 7084
380
+ "digest": "cd7b9545e9629db6f6834db30669cede62161810f324a35cde322875864ca22c",
381
+ "bytes": 9041
382
382
  },
383
383
  {
384
384
  "destination": "runtime/create-agdf/lib/cli/parse-args.js",
@@ -575,8 +575,8 @@
575
575
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
576
576
  "rule": "generated_exact_runtime",
577
577
  "requirement": "offline exact-version validator and session check",
578
- "digest": "5db0c1c433f7f08e332b203c6355a0b7ae8541c4b9f49412cd14bc8431706aea",
579
- "bytes": 13000
578
+ "digest": "02ebfb153815d22d2e67debe7d51b09e94416b3f86966c92db4621dfb984a3a8",
579
+ "bytes": 15955
580
580
  },
581
581
  {
582
582
  "destination": "runtime/create-agdf/lib/delivery-path-search/evaluators/claude.js",
@@ -656,8 +656,8 @@
656
656
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
657
657
  "rule": "generated_exact_runtime",
658
658
  "requirement": "offline exact-version validator and session check",
659
- "digest": "7764fcc5bd0efc51f12a2560847ef7ef8bf7f9d0fa0b909d9b8b52e6a8a8a70e",
660
- "bytes": 1856
659
+ "digest": "9629b8ff1fda2514baf03a99590d52a9379ad2505431634fd6fa953e553af9fd",
660
+ "bytes": 2521
661
661
  },
662
662
  {
663
663
  "destination": "runtime/create-agdf/lib/delivery-path-search/scoring.js",
@@ -674,8 +674,8 @@
674
674
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
675
675
  "rule": "generated_exact_runtime",
676
676
  "requirement": "offline exact-version validator and session check",
677
- "digest": "e51ba0fb5f66ddfe72d0f03320a80eb5669556e7aa75f7650ea8aeee387e7abb",
678
- "bytes": 7168
677
+ "digest": "4ac4d4bb11297f684a0161b03bb0d07909ee814e2687026f4d2c8059befb5990",
678
+ "bytes": 11244
679
679
  },
680
680
  {
681
681
  "destination": "runtime/create-agdf/lib/delivery-path-search/state-adapter.js",
@@ -683,8 +683,8 @@
683
683
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
684
684
  "rule": "generated_exact_runtime",
685
685
  "requirement": "offline exact-version validator and session check",
686
- "digest": "c26b30a48d6424d996401756fbf3dae7b0fa1d32ae0c24d1f99e7fab031f48ab",
687
- "bytes": 5056
686
+ "digest": "8f7223d79f68c0321c502dab4c4083b08535c67c0e9d6b1420645af06f3f3d13",
687
+ "bytes": 4596
688
688
  },
689
689
  {
690
690
  "destination": "runtime/create-agdf/lib/delivery-path-search/surfaces/capabilities.js",
@@ -755,7 +755,7 @@
755
755
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
756
756
  "rule": "generated_exact_runtime",
757
757
  "requirement": "offline exact-version validator and session check",
758
- "digest": "7e085f5f2a711a23c9a97bf3a845d30cf7ef651e8884318f6ffe62a6377d0b90",
758
+ "digest": "1af259f416c44d6168ce860767481fb2cd470f0041f6b8ec14cd6ef1d7120f9a",
759
759
  "bytes": 108
760
760
  },
761
761
  {
@@ -764,7 +764,7 @@
764
764
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
765
765
  "rule": "generated_exact_runtime",
766
766
  "requirement": "offline exact-version validator and session check",
767
- "digest": "97dbaf03692fc43270184ea5a63c36d504093df2470d8c313ff1fc273ad75083",
767
+ "digest": "cd60d50cfba731efb56267ec292b0bcb978b2d7fc4bed2872c91edeb4c4e7911",
768
768
  "bytes": 236
769
769
  }
770
770
  ]
@@ -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.
@@ -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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "id": "agdf",
4
- "version": "0.14.2",
4
+ "version": "0.14.3",
5
5
  "displayName": "AI Governance & Delivery Framework",
6
6
  "developerName": "Arndt Gold",
7
7
  "description": "Control layer for governed AI-assisted delivery.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agdf",
3
- "version": "0.14.2",
3
+ "version": "0.14.3",
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.3",
5
5
  "displayName": "AI Governance & Delivery Framework",
6
6
  "developerName": "Arndt Gold",
7
7
  "description": "Control layer for governed AI-assisted delivery.",