create-agdf 0.14.3 → 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.
- package/README.md +34 -2
- package/generated/.opencode/contracts/interaction.md +2 -2
- package/generated/.opencode/skills/agdf-gate-check/SKILL.md +6 -4
- package/generated/plugins/agdf/.claude-plugin/plugin.json +1 -1
- package/generated/plugins/agdf/.codex-plugin/plugin.json +1 -1
- package/generated/plugins/agdf/meta/agdf-plugin.definition.json +1 -1
- package/generated/plugins/agdf/meta/contracts/interaction.md +2 -2
- package/generated/plugins/agdf/meta/copilot-payload-baseline.json +3 -3
- package/generated/plugins/agdf/meta/distribution-profile-history.json +125 -0
- package/generated/plugins/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-plugin.definition.json +1 -1
- package/generated/plugins/agdf/runtime/create-agdf/lib/cli/command-registry.js +8 -1
- package/generated/plugins/agdf/runtime/create-agdf/lib/cli/parse-args.js +3 -0
- package/generated/plugins/agdf/runtime/create-agdf/lib/control-evaluation/doctor.js +13 -0
- package/generated/plugins/agdf/runtime/create-agdf/lib/control-evaluation/gate-check.js +64 -13
- package/generated/plugins/agdf/runtime/create-agdf/lib/control-evaluation/run-state.js +6 -0
- package/generated/plugins/agdf/runtime/create-agdf/lib/control-state/run-identity.js +9 -0
- package/generated/plugins/agdf/runtime/create-agdf/lib/control-state/run-state-parser.js +4 -2
- package/generated/plugins/agdf/runtime/create-agdf/lib/interaction-presentation.js +57 -7
- package/generated/plugins/agdf/runtime/create-agdf/lib/runtime/plugin-provenance.js +46 -3
- package/generated/plugins/agdf/runtime/create-agdf/package.json +1 -1
- package/generated/plugins/agdf/runtime/runtime-manifest.json +2 -2
- package/generated/plugins/agdf/scripts/check-runtime-integrity.mjs +2 -0
- package/generated/plugins/agdf/skills/gate-check/SKILL.md +6 -4
- package/generated/plugins/agdf/submission/openai/availability.md +1 -1
- package/generated/plugins/agdf/submission/openai/capability-matrix.json +1 -1
- package/generated/plugins/agdf/submission/openai/release-notes.md +1 -1
- package/generated/plugins/agdf/submission/openai/reviewer-cases.json +1 -1
- package/generated/plugins/copilot/agdf/.agdf-payload-inventory.json +55 -35
- package/generated/plugins/copilot/agdf/copilot-skills/agdf-gate-check/SKILL.md +6 -4
- package/generated/plugins/copilot/agdf/copilot-skills/contracts/interaction.md +2 -2
- package/generated/plugins/copilot/agdf/meta/agdf-plugin.definition.json +1 -1
- package/generated/plugins/copilot/agdf/meta/distribution-profile-history.json +125 -0
- package/generated/plugins/copilot/agdf/plugin.json +1 -1
- package/generated/plugins/copilot/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-plugin.definition.json +1 -1
- package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/cli/command-registry.js +8 -1
- package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/cli/parse-args.js +3 -0
- package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-evaluation/doctor.js +13 -0
- package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-evaluation/gate-check.js +64 -13
- package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-evaluation/run-state.js +6 -0
- package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-state/run-identity.js +9 -0
- package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/control-state/run-state-parser.js +4 -2
- package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/interaction-presentation.js +57 -7
- package/generated/plugins/copilot/agdf/runtime/create-agdf/lib/runtime/plugin-provenance.js +46 -3
- package/generated/plugins/copilot/agdf/runtime/create-agdf/package.json +1 -1
- package/generated/plugins/copilot/agdf/runtime/runtime-manifest.json +2 -2
- package/generated/submissions/openai/agdf/.codex-plugin/plugin.json +1 -1
- package/generated/submissions/openai/agdf/meta/agdf-plugin.definition.json +1 -1
- package/generated/submissions/openai/agdf/meta/contracts/interaction.md +2 -2
- package/generated/submissions/openai/agdf/meta/copilot-payload-baseline.json +3 -3
- package/generated/submissions/openai/agdf/meta/distribution-profile-history.json +125 -0
- package/generated/submissions/openai/agdf/skills/gate-check/SKILL.md +6 -4
- package/generated/submissions/openai/agdf/submission/openai/availability.md +1 -1
- package/generated/submissions/openai/agdf/submission/openai/capability-matrix.json +1 -1
- package/generated/submissions/openai/agdf/submission/openai/inventory.json +16 -12
- package/generated/submissions/openai/agdf/submission/openai/listing.json +1 -1
- package/generated/submissions/openai/agdf/submission/openai/readiness.json +2 -2
- package/generated/submissions/openai/agdf/submission/openai/readiness.md +2 -2
- package/generated/submissions/openai/agdf/submission/openai/release-notes.md +1 -1
- package/generated/submissions/openai/agdf/submission/openai/reviewer-cases.json +1 -1
- package/lib/cli/application.js +24 -6
- package/lib/cli/command-registry.js +8 -1
- package/lib/cli/parse-args.js +3 -0
- package/lib/control-evaluation/doctor.js +13 -0
- package/lib/control-evaluation/gate-check.js +64 -13
- package/lib/control-evaluation/run-state.js +6 -0
- package/lib/control-state/run-identity.js +9 -0
- package/lib/control-state/run-state-parser.js +4 -2
- package/lib/installers/claude-cache-recovery.js +76 -0
- package/lib/installers/copilot-settings.js +146 -16
- package/lib/installers/local-marketplace.js +169 -14
- package/lib/installers/plugin-installers.js +96 -9
- package/lib/interaction-presentation.js +57 -7
- package/lib/lifecycle/operations.js +28 -4
- package/lib/lifecycle/result.js +4 -4
- package/lib/release/profile-history.js +222 -0
- package/lib/release/version-bump.js +527 -0
- package/lib/release/version-coherence.js +92 -38
- package/lib/runtime/distribution-profile-history.js +173 -0
- package/lib/runtime/plugin-provenance.js +46 -3
- 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 (!
|
|
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
|
|
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
|
|
227
|
-
|
|
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 {
|
|
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({
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schema_version": "1",
|
|
3
3
|
"generated": true,
|
|
4
4
|
"source": "create-agdf/cli",
|
|
5
|
-
"version": "0.14.
|
|
5
|
+
"version": "0.14.4",
|
|
6
6
|
"entrypoint": "create-agdf/bin/agdf-validator.js",
|
|
7
|
-
"digest": "
|
|
7
|
+
"digest": "68b83a6721a799c34067cdbcc0ed6664f7fbf89bce186a3d8de284b0959deac7"
|
|
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
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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,4 +1,4 @@
|
|
|
1
|
-
# AGDF 0.14.
|
|
1
|
+
# AGDF 0.14.4 — Initial OpenAI Public Plugin Candidate
|
|
2
2
|
|
|
3
3
|
This candidate packages the canonical AGDF workflow skills for public discovery in ChatGPT and
|
|
4
4
|
Codex. It helps users assess delivery fit, preserve explicit human approvals, inspect existing-system
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": 1,
|
|
3
3
|
"profile_id": "copilot-runtime-plugin",
|
|
4
|
-
"version": "0.14.
|
|
4
|
+
"version": "0.14.4",
|
|
5
5
|
"baseline": {
|
|
6
|
-
"max_files":
|
|
7
|
-
"max_bytes":
|
|
6
|
+
"max_files": 80,
|
|
7
|
+
"max_bytes": 568459
|
|
8
8
|
},
|
|
9
9
|
"stats": {
|
|
10
|
-
"files":
|
|
11
|
-
"bytes":
|
|
10
|
+
"files": 80,
|
|
11
|
+
"bytes": 564486
|
|
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": "
|
|
88
|
-
"digest": "
|
|
89
|
-
"bytes":
|
|
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": "
|
|
209
|
-
"digest": "
|
|
210
|
-
"bytes":
|
|
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": "
|
|
252
|
+
"source_digest": "c0b249067a3fea29e551af28ccc855bfb4e9c7ef95f418d96d7e102c53650159",
|
|
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": "
|
|
286
|
-
"digest": "
|
|
285
|
+
"source_digest": "c0b249067a3fea29e551af28ccc855bfb4e9c7ef95f418d96d7e102c53650159",
|
|
286
|
+
"digest": "c0b249067a3fea29e551af28ccc855bfb4e9c7ef95f418d96d7e102c53650159",
|
|
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": "63a78c2659fe6ece380883d10188e7dad7373866711aeca13005193b68be1ab2",
|
|
308
|
+
"digest": "63a78c2659fe6ece380883d10188e7dad7373866711aeca13005193b68be1ab2",
|
|
309
|
+
"bytes": 4141
|
|
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": "
|
|
308
|
-
"digest": "
|
|
318
|
+
"source_digest": "c0b249067a3fea29e551af28ccc855bfb4e9c7ef95f418d96d7e102c53650159",
|
|
319
|
+
"digest": "20c0b63fce6257d1731f5c283f37b3589db3d27156f02812e18946a1fb7eee0b",
|
|
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": "
|
|
373
|
+
"digest": "c0b249067a3fea29e551af28ccc855bfb4e9c7ef95f418d96d7e102c53650159",
|
|
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": "
|
|
372
|
-
"bytes":
|
|
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": "
|
|
390
|
-
"bytes":
|
|
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": "
|
|
426
|
-
"bytes":
|
|
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": "
|
|
435
|
-
"bytes":
|
|
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": "
|
|
471
|
-
"bytes":
|
|
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": "
|
|
534
|
-
"bytes":
|
|
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": "
|
|
714
|
-
"bytes":
|
|
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": "
|
|
732
|
-
"bytes":
|
|
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": "
|
|
778
|
+
"digest": "10edb2974a67e4f75eb42a0dde270fa044afb4c6f57da831a063d8a8880b360c",
|
|
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": "
|
|
787
|
+
"digest": "4af36ec9fc74e233d36858a09ac0360eeb633b647401ffd9159b23e39e237dd3",
|
|
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
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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
|
|
158
|
-
approval-
|
|
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.
|