create-agdf 0.14.3 → 0.14.5

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 (80) hide show
  1. package/README.md +34 -2
  2. package/generated/.opencode/contracts/interaction.md +2 -2
  3. package/generated/.opencode/skills/agdf-gate-check/SKILL.md +6 -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/interaction.md +2 -2
  8. package/generated/plugins/agdf/meta/copilot-payload-baseline.json +3 -3
  9. package/generated/plugins/agdf/meta/distribution-profile-history.json +132 -0
  10. package/generated/plugins/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-plugin.definition.json +1 -1
  11. package/generated/plugins/agdf/runtime/create-agdf/lib/cli/command-registry.js +8 -1
  12. package/generated/plugins/agdf/runtime/create-agdf/lib/cli/parse-args.js +3 -0
  13. package/generated/plugins/agdf/runtime/create-agdf/lib/control-evaluation/doctor.js +13 -0
  14. package/generated/plugins/agdf/runtime/create-agdf/lib/control-evaluation/gate-check.js +64 -13
  15. package/generated/plugins/agdf/runtime/create-agdf/lib/control-evaluation/run-state.js +6 -0
  16. package/generated/plugins/agdf/runtime/create-agdf/lib/control-state/run-identity.js +9 -0
  17. package/generated/plugins/agdf/runtime/create-agdf/lib/control-state/run-state-parser.js +4 -2
  18. package/generated/plugins/agdf/runtime/create-agdf/lib/interaction-presentation.js +57 -7
  19. package/generated/plugins/agdf/runtime/create-agdf/lib/runtime/plugin-provenance.js +46 -3
  20. package/generated/plugins/agdf/runtime/create-agdf/package.json +1 -1
  21. package/generated/plugins/agdf/runtime/runtime-manifest.json +2 -2
  22. package/generated/plugins/agdf/scripts/check-runtime-integrity.mjs +2 -0
  23. package/generated/plugins/agdf/skills/gate-check/SKILL.md +6 -4
  24. package/generated/plugins/agdf/submission/openai/availability.md +1 -1
  25. package/generated/plugins/agdf/submission/openai/capability-matrix.json +1 -1
  26. package/generated/plugins/agdf/submission/openai/release-notes.md +1 -1
  27. package/generated/plugins/agdf/submission/openai/reviewer-cases.json +1 -1
  28. package/generated/plugins/copilot/agdf/.agdf-payload-inventory.json +55 -35
  29. package/generated/plugins/copilot/agdf/copilot-skills/agdf-gate-check/SKILL.md +6 -4
  30. package/generated/plugins/copilot/agdf/copilot-skills/contracts/interaction.md +2 -2
  31. package/generated/plugins/copilot/agdf/meta/agdf-plugin.definition.json +1 -1
  32. package/generated/plugins/copilot/agdf/meta/distribution-profile-history.json +132 -0
  33. package/generated/plugins/copilot/agdf/plugin.json +1 -1
  34. package/generated/plugins/copilot/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-plugin.definition.json +1 -1
  35. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/cli/command-registry.js +8 -1
  36. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/cli/parse-args.js +3 -0
  37. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-evaluation/doctor.js +13 -0
  38. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-evaluation/gate-check.js +64 -13
  39. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-evaluation/run-state.js +6 -0
  40. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-state/run-identity.js +9 -0
  41. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-state/run-state-parser.js +4 -2
  42. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/interaction-presentation.js +57 -7
  43. package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/runtime/plugin-provenance.js +46 -3
  44. package/generated/plugins/copilot/agdf/runtime/create-agdf/package.json +1 -1
  45. package/generated/plugins/copilot/agdf/runtime/runtime-manifest.json +2 -2
  46. package/generated/submissions/openai/agdf/.codex-plugin/plugin.json +1 -1
  47. package/generated/submissions/openai/agdf/meta/agdf-plugin.definition.json +1 -1
  48. package/generated/submissions/openai/agdf/meta/contracts/interaction.md +2 -2
  49. package/generated/submissions/openai/agdf/meta/copilot-payload-baseline.json +3 -3
  50. package/generated/submissions/openai/agdf/meta/distribution-profile-history.json +132 -0
  51. package/generated/submissions/openai/agdf/skills/gate-check/SKILL.md +6 -4
  52. package/generated/submissions/openai/agdf/submission/openai/availability.md +1 -1
  53. package/generated/submissions/openai/agdf/submission/openai/capability-matrix.json +1 -1
  54. package/generated/submissions/openai/agdf/submission/openai/inventory.json +16 -12
  55. package/generated/submissions/openai/agdf/submission/openai/listing.json +1 -1
  56. package/generated/submissions/openai/agdf/submission/openai/readiness.json +2 -2
  57. package/generated/submissions/openai/agdf/submission/openai/readiness.md +2 -2
  58. package/generated/submissions/openai/agdf/submission/openai/release-notes.md +1 -1
  59. package/generated/submissions/openai/agdf/submission/openai/reviewer-cases.json +1 -1
  60. package/lib/cli/application.js +24 -6
  61. package/lib/cli/command-registry.js +8 -1
  62. package/lib/cli/parse-args.js +3 -0
  63. package/lib/control-evaluation/doctor.js +13 -0
  64. package/lib/control-evaluation/gate-check.js +64 -13
  65. package/lib/control-evaluation/run-state.js +6 -0
  66. package/lib/control-state/run-identity.js +9 -0
  67. package/lib/control-state/run-state-parser.js +4 -2
  68. package/lib/installers/claude-cache-recovery.js +76 -0
  69. package/lib/installers/copilot-settings.js +146 -16
  70. package/lib/installers/local-marketplace.js +169 -14
  71. package/lib/installers/plugin-installers.js +96 -9
  72. package/lib/interaction-presentation.js +57 -7
  73. package/lib/lifecycle/operations.js +28 -4
  74. package/lib/lifecycle/result.js +4 -4
  75. package/lib/release/profile-history.js +222 -0
  76. package/lib/release/version-bump.js +549 -0
  77. package/lib/release/version-coherence.js +92 -38
  78. package/lib/runtime/distribution-profile-history.js +173 -0
  79. package/lib/runtime/plugin-provenance.js +46 -3
  80. package/package.json +7 -3
@@ -1,3 +1,5 @@
1
+ import { RUN_ID_PATTERN } from "./control-state/run-identity.js";
2
+
1
3
  const REQUIRED_GATES = ["UR", "PRD", "SD", "TP", "QA", "UAT"];
2
4
  const ARTEFACT_ORDER = ["UR", "PRD", "SD", "TP"];
3
5
  const OUTCOMES = new Set(["approve", "revise", "decline", "cancel", "no_response", "timeout", "empty", "invalid", "stale"]);
@@ -313,17 +315,37 @@ function operationalBreadcrumb(value, labels) {
313
315
  .join(labels.breadcrumbSeparator);
314
316
  }
315
317
 
318
+ export function validateOperationalStatusCardPreconditions(statusCard, {
319
+ registry,
320
+ humanPresentation,
321
+ } = {}) {
322
+ const errors = [];
323
+ if (!plainObject(statusCard)) errors.push("status_card_missing");
324
+ if (humanPresentation !== undefined && !plainObject(humanPresentation)) errors.push("human_presentation_missing");
325
+ if (plainObject(statusCard)) {
326
+ if (!String(statusCard.run_id ?? "").trim()) errors.push("run_id_missing");
327
+ if (!String(statusCard.current_gate ?? "").trim()) errors.push("current_gate_missing");
328
+ let locale = "";
329
+ try {
330
+ locale = resolvePresentationLocale(registry, statusCard.presentation_language);
331
+ } catch {
332
+ locale = "";
333
+ }
334
+ if (!locale) errors.push("locale_unresolved");
335
+ }
336
+ return Object.freeze({ valid: errors.length === 0, errors: Object.freeze(errors) });
337
+ }
338
+
316
339
  export function renderOperationalStatusCard(statusCard, {
317
340
  registry,
318
341
  humanPresentation,
319
342
  revisionId = "",
320
343
  } = {}) {
321
- if (!plainObject(statusCard) || !plainObject(humanPresentation)) return null;
344
+ if (!validateOperationalStatusCardPreconditions(statusCard, { registry, humanPresentation: humanPresentation ?? null }).valid) return null;
322
345
  const runId = String(statusCard.run_id ?? "").trim();
323
346
  const currentGate = String(statusCard.current_gate ?? "").trim();
324
347
  const revision = String(revisionId ?? "").trim() || "unversioned";
325
348
  const locale = resolvePresentationLocale(registry, statusCard.presentation_language);
326
- if (!runId || !currentGate || !locale) return null;
327
349
 
328
350
  const pack = localePack(registry, locale);
329
351
  const labels = pack.statusCard;
@@ -537,6 +559,37 @@ export function normalizeInteractionOutcome(value, { expectedApproval, stale = f
537
559
  return "invalid";
538
560
  }
539
561
 
562
+ export function validateApprovalOrientationPreconditions({
563
+ statusCard,
564
+ humanPresentation,
565
+ registry,
566
+ requestedLocale,
567
+ } = {}) {
568
+ const errors = [];
569
+ if (!plainObject(statusCard)) return Object.freeze({ valid: false, errors: Object.freeze(["status_card_missing"]) });
570
+ if (humanPresentation !== undefined && !plainObject(humanPresentation)) errors.push("human_presentation_missing");
571
+ const gate = String(statusCard.current_gate ?? "").trim();
572
+ const runId = String(statusCard.run_id ?? "").trim();
573
+ if (!REQUIRED_GATES.includes(gate)) errors.push("gate_not_user_gate");
574
+ if (!RUN_ID_PATTERN.test(runId)) errors.push("run_id_invalid");
575
+ if (statusCard.status !== "open") errors.push("status_not_open");
576
+ if (statusCard.missing_approval !== `Approval: ${gate}`) errors.push("missing_approval_mismatch");
577
+ const nextGate = String(statusCard.next_gate_after_approval ?? "none");
578
+ const nextUserGate = String(statusCard.next_user_gate ?? "").trim();
579
+ const userActionRequired = String(statusCard.user_action_required ?? "").trim();
580
+ const userActionSemanticsValid = (userActionRequired === "no" && nextUserGate === "none")
581
+ || (userActionRequired === "yes" && REQUIRED_GATES.includes(nextUserGate) && nextGate === nextUserGate);
582
+ if (!userActionSemanticsValid) errors.push("user_action_semantics_invalid");
583
+ let locale = "";
584
+ try {
585
+ locale = resolvePresentationLocale(registry, requestedLocale);
586
+ } catch {
587
+ locale = "";
588
+ }
589
+ if (!locale) errors.push("locale_unresolved");
590
+ return Object.freeze({ valid: errors.length === 0, errors: Object.freeze(errors) });
591
+ }
592
+
540
593
  export function buildApprovalOrientationSnapshot({
541
594
  ready = false,
542
595
  statusCard,
@@ -545,11 +598,11 @@ export function buildApprovalOrientationSnapshot({
545
598
  registry,
546
599
  requestedLocale,
547
600
  } = {}) {
548
- if (!ready || !plainObject(statusCard) || !plainObject(humanPresentation)) return null;
601
+ if (!ready) return null;
602
+ if (!validateApprovalOrientationPreconditions({ statusCard, humanPresentation: humanPresentation ?? null, registry, requestedLocale }).valid) return null;
549
603
  const gate = String(statusCard.current_gate ?? "").trim();
550
604
  const runId = String(statusCard.run_id ?? "").trim();
551
605
  const expectedApproval = `Approval: ${gate}`;
552
- if (!REQUIRED_GATES.includes(gate) || !/^[A-Za-z0-9._-]+$/.test(runId) || statusCard.status !== "open" || statusCard.missing_approval !== expectedApproval) return null;
553
606
 
554
607
  const locale = resolvePresentationLocale(registry, requestedLocale);
555
608
  const pack = localePack(registry, locale);
@@ -560,9 +613,6 @@ export function buildApprovalOrientationSnapshot({
560
613
  const nextGate = String(statusCard.next_gate_after_approval ?? "none");
561
614
  const nextUserGate = String(statusCard.next_user_gate ?? "").trim();
562
615
  const userActionRequired = String(statusCard.user_action_required ?? "").trim();
563
- const userActionSemanticsValid = (userActionRequired === "no" && nextUserGate === "none")
564
- || (userActionRequired === "yes" && REQUIRED_GATES.includes(nextUserGate) && nextGate === nextUserGate);
565
- if (!userActionSemanticsValid) return null;
566
616
  const narration = pack.primary.narration.gates[gate] ?? {};
567
617
  const nextDecision = userActionRequired === "no"
568
618
  ? pack.primary.narration.noAction
@@ -137,6 +137,22 @@ export function validateDistributionProfiles(definition) {
137
137
  return { status: "matched", contract };
138
138
  }
139
139
 
140
+ function classifyInstalledHistoricalProfile(catalogue, definition, classifyHistoricalProfile) {
141
+ if (typeof classifyHistoricalProfile !== "function") {
142
+ return { status: "invalid", reason: "profile_history_invalid" };
143
+ }
144
+ const result = classifyHistoricalProfile({
145
+ catalogue,
146
+ version: definition?.version,
147
+ distributionProfiles: definition?.distributionProfiles,
148
+ });
149
+ if (result.status !== "matched") return result;
150
+ return {
151
+ ...result,
152
+ contract: catalogue.contracts[result.contract_id].distribution_profiles,
153
+ };
154
+ }
155
+
140
156
  export function inspectGeneratedRepositoryMarketplace(targetDir) {
141
157
  const marketplacePath = join(targetDir, ".agents", "plugins", "marketplace.json");
142
158
  if (!existsSync(marketplacePath)) return { status: "absent", marketplacePath };
@@ -196,11 +212,23 @@ export function inspectInstallationProvenance(pluginRoot, {
196
212
  allowLegacy = false,
197
213
  profileId = "runtime-plugin",
198
214
  inventoryDigest = null,
215
+ allowHistoricalProfilesForMigration = false,
216
+ distributionProfileHistory = null,
217
+ classifyHistoricalProfile = null,
199
218
  } = {}) {
200
219
  const markerPath = join(pluginRoot, INSTALLATION_PROVENANCE_FILE);
201
220
  const legacyPath = join(pluginRoot, LEGACY_LOCAL_INSTALL_FILE);
202
221
  if (!existsSync(markerPath)) {
203
222
  if (allowLegacy && existsSync(legacyPath)) {
223
+ const currentProfile = validateDistributionProfiles(definition);
224
+ if (Object.hasOwn(definition ?? {}, "distributionProfiles")
225
+ && currentProfile.status !== "matched") {
226
+ return allowHistoricalProfilesForMigration
227
+ ? classifyInstalledHistoricalProfile(distributionProfileHistory, definition, classifyHistoricalProfile).status === "matched"
228
+ ? { status: "invalid", reason: "installation_provenance_invalid" }
229
+ : classifyInstalledHistoricalProfile(distributionProfileHistory, definition, classifyHistoricalProfile)
230
+ : currentProfile;
231
+ }
204
232
  const marker = readJson(legacyPath);
205
233
  if (!marker
206
234
  || marker.schema_version !== 1
@@ -223,8 +251,14 @@ export function inspectInstallationProvenance(pluginRoot, {
223
251
  if (profile.status !== "matched") return profile;
224
252
  return { status: "missing", reason: "installation_provenance_missing" };
225
253
  }
226
- const profile = validateDistributionProfiles(definition);
227
- if (profile.status !== "matched") return profile;
254
+ const currentProfile = validateDistributionProfiles(definition);
255
+ const historicalProfile = currentProfile.status !== "matched" && allowHistoricalProfilesForMigration
256
+ ? classifyInstalledHistoricalProfile(distributionProfileHistory, definition, classifyHistoricalProfile)
257
+ : null;
258
+ if (currentProfile.status !== "matched" && historicalProfile?.status !== "matched") {
259
+ return historicalProfile ?? currentProfile;
260
+ }
261
+ const profile = currentProfile.status === "matched" ? currentProfile : historicalProfile;
228
262
  const marker = readJson(markerPath);
229
263
  if (!marker
230
264
  || marker.schema_version !== 1
@@ -247,7 +281,16 @@ export function inspectInstallationProvenance(pluginRoot, {
247
281
  if (observedSourceDigest !== marker.source_digest) {
248
282
  return { status: "invalid", reason: "source_digest_mismatch", marker, observedSourceDigest };
249
283
  }
250
- return { status: "matched", marker, observedSourceDigest };
284
+ return {
285
+ status: "matched",
286
+ marker,
287
+ observedSourceDigest,
288
+ profileClassification: historicalProfile ? "supported_historical" : "current",
289
+ historicalReleaseVersion: historicalProfile?.release_version ?? null,
290
+ historicalContractId: historicalProfile?.contract_id ?? null,
291
+ historicalContractDigest: historicalProfile?.contract_digest ?? null,
292
+ historicalEntryDigest: historicalProfile?.entry_digest ?? null,
293
+ };
251
294
  }
252
295
 
253
296
  export const distributionProfileContract = Object.freeze({
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agdf/local-validator-runtime",
3
- "version": "0.14.3",
3
+ "version": "0.14.5",
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.3",
5
+ "version": "0.14.5",
6
6
  "entrypoint": "create-agdf/bin/agdf-validator.js",
7
- "digest": "8f6dbd5e647aff7dfc1405f4e54a5b135a8d820858b5f8f85873964f6eb2f7cf"
7
+ "digest": "c5065a1f27cad7399b0a4bf8f6c580b54a012e6b174c11705cdcfa9b629ea423"
8
8
  }
@@ -607,6 +607,8 @@ for (const required of [
607
607
  "### Human Decision Presentation Contract",
608
608
  "Never guess a path or emit a broken link",
609
609
  "A localized label, description, option position, recommendation style or host action never authorizes a gate",
610
+ "renders the complete operational Run Status Card exactly once, between the compact approval-time Run Status Card and the Gate Transition Card",
611
+ "may carry the missing approval as audit data",
610
612
  ]) {
611
613
  if (!runtimeContract.includes(required)) failures.push(`interaction contract ownership boundary missing: ${required}`);
612
614
  }
@@ -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.3`
3
+ - release: `0.14.5`
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.3",
3
+ "releaseVersion": "0.14.5",
4
4
  "evidenceStates": [
5
5
  "common",
6
6
  "codex-specific",
@@ -1,4 +1,4 @@
1
- # AGDF 0.14.3 — Initial OpenAI Public Plugin Candidate
1
+ # AGDF 0.14.5 — 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.14.3",
3
+ "releaseVersion": "0.14.5",
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.3",
4
+ "version": "0.14.5",
5
5
  "baseline": {
6
- "max_files": 78,
7
- "max_bytes": 550979
6
+ "max_files": 80,
7
+ "max_bytes": 568459
8
8
  },
9
9
  "stats": {
10
- "files": 78,
11
- "bytes": 550979
10
+ "files": 80,
11
+ "bytes": 564743
12
12
  },
13
13
  "entries": [
14
14
  {
@@ -84,9 +84,9 @@
84
84
  "rule": "copilot_name_projection",
85
85
  "requirement": "Copilot skill agdf-gate-check",
86
86
  "source": "plugin/skills/gate-check/SKILL.md",
87
- "source_digest": "84b83b23f18e24ebea94b5f24f1e438de2c93da7740fbc1bba95281e98b68ae0",
88
- "digest": "40ad3d12b98def98ef8274d4eef0e955261194a7ff68c6d59547fbe5bcbbb92b",
89
- "bytes": 17637
87
+ "source_digest": "7f49c12942fc4312fe57f6be1c9844a9bf1ec5c7c9cce43b1c1d3e81d6c7adbb",
88
+ "digest": "251e482d8ede0f07f1820626c49d8525d8b7af72c413e61048bb70644f59c1b7",
89
+ "bytes": 17773
90
90
  },
91
91
  {
92
92
  "destination": "copilot-skills/agdf-interaction-locales.json",
@@ -205,9 +205,9 @@
205
205
  "rule": "copilot_name_projection",
206
206
  "requirement": "focused runtime contract",
207
207
  "source": "plugin/meta/contracts/interaction.md",
208
- "source_digest": "799ff1d27f16004844775f2802a94d6d336d9130b08a6484c5f325d7ea6b0df8",
209
- "digest": "93a2e04569f57fd93bf67b0fe179f1177994c57a9080b93a16b87973a8d26ac6",
210
- "bytes": 31617
208
+ "source_digest": "45cb0bf83af21d46e55f6fbbc934f7bf1571d0d087a0a304b629297427078ce9",
209
+ "digest": "b323c8a1208f276ac1e7c61ef357c3c8355947c3c3b75c69e96bb2eb88828dd9",
210
+ "bytes": 32133
211
211
  },
212
212
  {
213
213
  "destination": "copilot-skills/contracts/modes.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": "16b69b796510bf4f6907fd986ad64dcf8e5ac4f3860d12e0e62381ea2582b012",
252
+ "source_digest": "1a4874e35cfda6bb89b78f5421bf7e9ea7317d87467223316b8da882a6ec6328",
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": "16b69b796510bf4f6907fd986ad64dcf8e5ac4f3860d12e0e62381ea2582b012",
286
- "digest": "16b69b796510bf4f6907fd986ad64dcf8e5ac4f3860d12e0e62381ea2582b012",
285
+ "source_digest": "1a4874e35cfda6bb89b78f5421bf7e9ea7317d87467223316b8da882a6ec6328",
286
+ "digest": "1a4874e35cfda6bb89b78f5421bf7e9ea7317d87467223316b8da882a6ec6328",
287
287
  "bytes": 11491
288
288
  },
289
289
  {
@@ -297,6 +297,17 @@
297
297
  "digest": "6f4e0735e69f7104460809810b4b8f2ee2a61368efd93db27bd23d341a07fb2c",
298
298
  "bytes": 1334
299
299
  },
300
+ {
301
+ "destination": "meta/distribution-profile-history.json",
302
+ "component": "runtime_support",
303
+ "owner": "plugin/meta/distribution-profile-history.json",
304
+ "rule": "copy",
305
+ "requirement": "local validator and session orientation dependency",
306
+ "source": "plugin/meta/distribution-profile-history.json",
307
+ "source_digest": "c746c93daa3ee3d229c2e33f46f0235cb512953cf9229df773725dde3ebb8033",
308
+ "digest": "c746c93daa3ee3d229c2e33f46f0235cb512953cf9229df773725dde3ebb8033",
309
+ "bytes": 4398
310
+ },
300
311
  {
301
312
  "destination": "plugin.json",
302
313
  "component": "manifest",
@@ -304,8 +315,8 @@
304
315
  "rule": "render_copilot_manifest",
305
316
  "requirement": "Copilot plugin discovery",
306
317
  "source": "plugin/meta/agdf-plugin.definition.json",
307
- "source_digest": "16b69b796510bf4f6907fd986ad64dcf8e5ac4f3860d12e0e62381ea2582b012",
308
- "digest": "2e60d46f88338ce119067c2681c2517572c15d66b7f3f775bb9da0b0d5048673",
318
+ "source_digest": "1a4874e35cfda6bb89b78f5421bf7e9ea7317d87467223316b8da882a6ec6328",
319
+ "digest": "608ced3e8ebddddb4fc1065f7055007b204cafde4915441dafa7a2f769ba88d8",
309
320
  "bytes": 551
310
321
  },
311
322
  {
@@ -359,7 +370,7 @@
359
370
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
360
371
  "rule": "generated_exact_runtime",
361
372
  "requirement": "offline exact-version validator and session check",
362
- "digest": "16b69b796510bf4f6907fd986ad64dcf8e5ac4f3860d12e0e62381ea2582b012",
373
+ "digest": "1a4874e35cfda6bb89b78f5421bf7e9ea7317d87467223316b8da882a6ec6328",
363
374
  "bytes": 11491
364
375
  },
365
376
  {
@@ -368,8 +379,8 @@
368
379
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
369
380
  "rule": "generated_exact_runtime",
370
381
  "requirement": "offline exact-version validator and session check",
371
- "digest": "dc93be75faf538744661116704edaaf80945d315400011c5d78a47849d603e67",
372
- "bytes": 6766
382
+ "digest": "10122d7cc72f4e5ae882297d7d27ef192e0a234d5e7dec327ce3c6330272828a",
383
+ "bytes": 7287
373
384
  },
374
385
  {
375
386
  "destination": "runtime/create-agdf/lib/cli/delivery-path-search-command.js",
@@ -386,8 +397,8 @@
386
397
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
387
398
  "rule": "generated_exact_runtime",
388
399
  "requirement": "offline exact-version validator and session check",
389
- "digest": "233a1bd68f5a0b7a100760bc273adcda35f7017ad50abb532c628e5cfedecbd4",
390
- "bytes": 5821
400
+ "digest": "8ea88a8b7c6914aa3105c58470b3258635695747d24b94ec331fa0fb75ba7273",
401
+ "bytes": 5914
391
402
  },
392
403
  {
393
404
  "destination": "runtime/create-agdf/lib/cli/runtime-context.js",
@@ -422,8 +433,8 @@
422
433
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
423
434
  "rule": "generated_exact_runtime",
424
435
  "requirement": "offline exact-version validator and session check",
425
- "digest": "18022ae5c6b1691fe71c87ae96163a6bee8a98363794e91b5e3398bfe7ac32eb",
426
- "bytes": 10898
436
+ "digest": "95772b7a20fea9bf070f7de50e6fc48c7c6b54224e1495f2207ee737bcf9729a",
437
+ "bytes": 11522
427
438
  },
428
439
  {
429
440
  "destination": "runtime/create-agdf/lib/control-evaluation/gate-check.js",
@@ -431,8 +442,8 @@
431
442
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
432
443
  "rule": "generated_exact_runtime",
433
444
  "requirement": "offline exact-version validator and session check",
434
- "digest": "eb1165dd75897444ab375e2f183ff32107cf13f1a4177f76a1d09cd20f46557e",
435
- "bytes": 20173
445
+ "digest": "dfed26553946774135d386eccc137d19eafa7608ffc516f3affa60fa73fba7bc",
446
+ "bytes": 22609
436
447
  },
437
448
  {
438
449
  "destination": "runtime/create-agdf/lib/control-evaluation/gate-policy.js",
@@ -467,8 +478,8 @@
467
478
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
468
479
  "rule": "generated_exact_runtime",
469
480
  "requirement": "offline exact-version validator and session check",
470
- "digest": "17951b7bc0367edd96e7a92983d46f2ceadcb7ea0cd5e1d203da517638fb8398",
471
- "bytes": 10156
481
+ "digest": "8fc81a8e642ff8b39dd8603de05ff2aa80038e4791859c54d8f8b44b90d913e8",
482
+ "bytes": 10456
472
483
  },
473
484
  {
474
485
  "destination": "runtime/create-agdf/lib/control-evaluation/shared.js",
@@ -524,14 +535,23 @@
524
535
  "digest": "39b50abd4ccc25c64bf0b9837055e503724cb65a0af5941a974a5fe6a0936013",
525
536
  "bytes": 4176
526
537
  },
538
+ {
539
+ "destination": "runtime/create-agdf/lib/control-state/run-identity.js",
540
+ "component": "runtime",
541
+ "owner": "create-agdf/scripts/sync-plugin-runtime.js",
542
+ "rule": "generated_exact_runtime",
543
+ "requirement": "offline exact-version validator and session check",
544
+ "digest": "4b778370cad2b7d6827c8011d14c4d1c82bd9808f3c36157410dcf3bfb854595",
545
+ "bytes": 488
546
+ },
527
547
  {
528
548
  "destination": "runtime/create-agdf/lib/control-state/run-state-parser.js",
529
549
  "component": "runtime",
530
550
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
531
551
  "rule": "generated_exact_runtime",
532
552
  "requirement": "offline exact-version validator and session check",
533
- "digest": "c652193b6b931dc2e943f45690c26de2ae57bc50d0946e5ff51f1afe3753beb5",
534
- "bytes": 9303
553
+ "digest": "18f4e37bce517ac9308b16d16f870c47a32bb98b273b2dceb4eb047e051dade1",
554
+ "bytes": 9321
535
555
  },
536
556
  {
537
557
  "destination": "runtime/create-agdf/lib/control-state/run-state-repository.js",
@@ -710,8 +730,8 @@
710
730
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
711
731
  "rule": "generated_exact_runtime",
712
732
  "requirement": "offline exact-version validator and session check",
713
- "digest": "3bf974032966c087191039a94ab3d84624f1530f9cb3daf2e843300d91406f1e",
714
- "bytes": 42487
733
+ "digest": "de5fb0eb1d87f7e1e42bc487183a26c8774d6e33e2d16c1acd6063a77a0feaeb",
734
+ "bytes": 44658
715
735
  },
716
736
  {
717
737
  "destination": "runtime/create-agdf/lib/runtime/local-validator.js",
@@ -728,8 +748,8 @@
728
748
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
729
749
  "rule": "generated_exact_runtime",
730
750
  "requirement": "offline exact-version validator and session check",
731
- "digest": "2df41558a207aaf61bef12ef41d143c1cde5239c60828d7425784cfcabc178e7",
732
- "bytes": 11940
751
+ "digest": "a1ef3494e6383970c886719b3038f1525e74147d6e94b5649dbab2388b376d0f",
752
+ "bytes": 14003
733
753
  },
734
754
  {
735
755
  "destination": "runtime/create-agdf/lib/runtime/validator-application.js",
@@ -755,7 +775,7 @@
755
775
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
756
776
  "rule": "generated_exact_runtime",
757
777
  "requirement": "offline exact-version validator and session check",
758
- "digest": "1af259f416c44d6168ce860767481fb2cd470f0041f6b8ec14cd6ef1d7120f9a",
778
+ "digest": "d63d2b99be1b4bb1c4942bde49d0ddaf7efc3424869d151e1fac3794602facbb",
759
779
  "bytes": 108
760
780
  },
761
781
  {
@@ -764,7 +784,7 @@
764
784
  "owner": "create-agdf/scripts/sync-plugin-runtime.js",
765
785
  "rule": "generated_exact_runtime",
766
786
  "requirement": "offline exact-version validator and session check",
767
- "digest": "cd60d50cfba731efb56267ec292b0bcb978b2d7fc4bed2872c91edeb4c4e7911",
787
+ "digest": "a3d75dd965a4c7253c534051c4915200575beb8fcb9be664bb46e94937b5b0f9",
768
788
  "bytes": 236
769
789
  }
770
790
  ]
@@ -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.
@@ -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
  "schemaVersion": 1,
3
3
  "id": "agdf",
4
- "version": "0.14.3",
4
+ "version": "0.14.5",
5
5
  "displayName": "AI Governance & Delivery Framework",
6
6
  "developerName": "Arndt Gold",
7
7
  "description": "Control layer for governed AI-assisted delivery.",