owlrunkit 0.19.2 → 0.21.0
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/CHANGELOG.md +63 -0
- package/README.md +94 -8
- package/docs/architecture/OWLCODA_RUNKIT_0201_RELEASE_TRUTH_AND_PROFILE_NORMALIZATION_PATCH_DECISION_20260813.md +95 -0
- package/docs/architecture/OWLCODA_RUNKIT_020_TEAM_DELIVERY_PHASE1_PRODUCT_DECISION_20260813.md +296 -0
- package/docs/architecture/OWLCODA_RUNKIT_021_TEAM_DELIVERY_PHASE2_PRODUCT_DECISION_20260813.md +249 -0
- package/integrations/codex/skills/owlcoda-runkit/SKILL.md +114 -12
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
- package/package.json +1 -1
- package/packages/attest/README.md +7 -1
- package/packages/attest/consumer-surface-v3.json +275 -0
- package/packages/attest/distribution-manifest-v1.json +19 -0
- package/packages/attest/schemas/canonical-candidate-identity-v1.schema.json +112 -0
- package/packages/attest/schemas/foreign-workspace-filesystem-identity-v1.schema.json +32 -0
- package/packages/attest/schemas/quick-verification-receipt-v4.schema.json +226 -0
- package/packages/attest/src/candidate-identity.mjs +454 -0
- package/packages/attest/src/index.mjs +11 -0
- package/packages/attest/src/quick-receipt-contract.mjs +126 -5
- package/packages/attest/src/quick.mjs +48 -8
- package/{registry-release-policy-v1.json → registry-release-policy-v2.json} +8 -9
- package/sbom.spdx.json +4 -4
- package/scripts/runkit-contract/core-contract.mjs +21 -1
- package/scripts/runkit-contract/fleet-skill-plan.mjs +223 -0
- package/scripts/runkit-contract/formal-workflow.mjs +3 -1
- package/scripts/runkit-contract/inspect-presentation.mjs +56 -0
- package/scripts/runkit-contract/install-codex-skill.mjs +1 -0
- package/scripts/runkit-contract/onboarding-bootstrap.mjs +15 -0
- package/scripts/runkit-contract/onboarding-doctor.mjs +201 -7
- package/scripts/runkit-contract/profile-onboarding.mjs +6 -0
- package/scripts/runkit-contract/project-cli-resolver.mjs +12 -1
- package/scripts/runkit-contract/quick-metrics.mjs +9 -5
- package/scripts/runkit-contract/quick-verify.mjs +108 -24
- package/scripts/runkit-contract/registry-adoption-gate.mjs +12 -3
- package/scripts/runkit-contract/registry-adoption.mjs +10 -5
- package/scripts/runkit-contract/runkit-cli.mjs +367 -20
- package/scripts/runkit-contract/schemas/candidate-transfer-packet-v1.schema.json +98 -0
- package/scripts/runkit-contract/schemas/delivery-lifecycle-v1.schema.json +91 -0
- package/scripts/runkit-contract/schemas/external-gate-v1.schema.json +68 -0
- package/scripts/runkit-contract/schemas/fleet-skill-upgrade-plan-v1.schema.json +140 -0
- package/scripts/runkit-contract/schemas/inspect-compact-v1.schema.json +93 -0
- package/scripts/runkit-contract/schemas/team-acceptance-packet-v2.schema.json +109 -0
- package/scripts/runkit-contract/schemas/team-delivery-status-v1.schema.json +72 -0
- package/scripts/runkit-contract/schemas/team-delivery-status-v2.schema.json +219 -0
- package/scripts/runkit-contract/schemas/team-packet-validation-v1.schema.json +33 -0
- package/scripts/runkit-contract/schemas/team-project-event-v6.schema.json +82 -0
- package/scripts/runkit-contract/schemas/team-project-event-v7.schema.json +80 -0
- package/scripts/runkit-contract/schemas/team-project-status-v4.schema.json +208 -0
- package/scripts/runkit-contract/schemas/team-recommendation-v1.schema.json +121 -0
- package/scripts/runkit-contract/schemas/team-task-packet-v2.schema.json +228 -0
- package/scripts/runkit-contract/sync-release-identity.mjs +87 -0
- package/scripts/runkit-contract/team-delivery.mjs +1031 -0
- package/scripts/runkit-contract/team-project.mjs +970 -9
|
@@ -126,6 +126,77 @@ function requireSurface(condition, surface) {
|
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
+
const REGISTRY_GATED_POLICY_V2_FIELDS = Object.freeze([
|
|
130
|
+
"artifactVersion",
|
|
131
|
+
"authorizationGranted",
|
|
132
|
+
"embeddedAttestComponentVersion",
|
|
133
|
+
"exactVersionRequired",
|
|
134
|
+
"forbiddenAdoptionSources",
|
|
135
|
+
"foreignProjectWriteAuthorized",
|
|
136
|
+
"githubActionRequired",
|
|
137
|
+
"packageName",
|
|
138
|
+
"registry",
|
|
139
|
+
"registryEvidenceMustBeExternal",
|
|
140
|
+
"registryEvidenceSchemaVersion",
|
|
141
|
+
"registryRequiredBeforeAdoption",
|
|
142
|
+
"requiredRegistryBindings",
|
|
143
|
+
"rollbackRelease",
|
|
144
|
+
"schemaVersion",
|
|
145
|
+
"signatureRequired",
|
|
146
|
+
"standaloneAttestPublicationRequired",
|
|
147
|
+
"status",
|
|
148
|
+
]);
|
|
149
|
+
|
|
150
|
+
function exactStringArray(actual, expected) {
|
|
151
|
+
return Array.isArray(actual)
|
|
152
|
+
&& actual.length === expected.length
|
|
153
|
+
&& actual.every((value, index) => value === expected[index]);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function registryGatedPolicyV2Exact(policy, core) {
|
|
157
|
+
const rollback = policy?.rollbackRelease;
|
|
158
|
+
return policy?.schemaVersion === "OwlCodaRunKitRegistryReleasePolicyV2"
|
|
159
|
+
&& Object.keys(policy).sort().join("\n") === REGISTRY_GATED_POLICY_V2_FIELDS.join("\n")
|
|
160
|
+
&& policy.status === "release_artifact_registry_gated"
|
|
161
|
+
&& policy.packageName === "owlrunkit"
|
|
162
|
+
&& policy.artifactVersion === core.coreVersion
|
|
163
|
+
&& policy.registry === "https://registry.npmjs.org"
|
|
164
|
+
&& policy.registryRequiredBeforeAdoption === true
|
|
165
|
+
&& policy.exactVersionRequired === true
|
|
166
|
+
&& exactStringArray(policy.requiredRegistryBindings, [
|
|
167
|
+
"packageName",
|
|
168
|
+
"version",
|
|
169
|
+
"shasum",
|
|
170
|
+
"integrity",
|
|
171
|
+
"tarballUrl",
|
|
172
|
+
])
|
|
173
|
+
&& exactStringArray(policy.forbiddenAdoptionSources, [
|
|
174
|
+
"directory",
|
|
175
|
+
"file",
|
|
176
|
+
"git",
|
|
177
|
+
"local_tarball",
|
|
178
|
+
"symlink",
|
|
179
|
+
"workspace",
|
|
180
|
+
])
|
|
181
|
+
&& rollback?.packageName === "owlrunkit"
|
|
182
|
+
&& /^\d+\.\d+\.\d+$/u.test(rollback?.version ?? "")
|
|
183
|
+
&& rollback.version !== core.coreVersion
|
|
184
|
+
&& /^[a-f0-9]{40}$/u.test(rollback?.shasum ?? "")
|
|
185
|
+
&& /^sha512-[A-Za-z0-9+/]+={0,2}$/u.test(rollback?.integrity ?? "")
|
|
186
|
+
&& rollback.tarballUrl
|
|
187
|
+
=== `https://registry.npmjs.org/owlrunkit/-/owlrunkit-${rollback.version}.tgz`
|
|
188
|
+
&& Object.keys(rollback).sort().join("\n")
|
|
189
|
+
=== ["integrity", "packageName", "shasum", "tarballUrl", "version"].join("\n")
|
|
190
|
+
&& policy.registryEvidenceMustBeExternal === true
|
|
191
|
+
&& policy.registryEvidenceSchemaVersion === "OwlCodaRunKitRegistryReleaseEvidenceV1"
|
|
192
|
+
&& policy.embeddedAttestComponentVersion === "0.2.0"
|
|
193
|
+
&& policy.standaloneAttestPublicationRequired === false
|
|
194
|
+
&& policy.signatureRequired === false
|
|
195
|
+
&& policy.githubActionRequired === false
|
|
196
|
+
&& policy.foreignProjectWriteAuthorized === false
|
|
197
|
+
&& policy.authorizationGranted === false;
|
|
198
|
+
}
|
|
199
|
+
|
|
129
200
|
export function verifyReleaseIdentitySurfacesV1(input) {
|
|
130
201
|
const core = input?.core;
|
|
131
202
|
requireSurface(
|
|
@@ -155,6 +226,7 @@ export function verifyReleaseIdentitySurfacesV1(input) {
|
|
|
155
226
|
};
|
|
156
227
|
const releasePolicy = input.releasePolicy ?? null;
|
|
157
228
|
const candidateUnpublished = releasePolicy?.status === "release_candidate_unpublished";
|
|
229
|
+
const registryGatedArtifact = releasePolicy?.status === "release_artifact_registry_gated";
|
|
158
230
|
if (candidateUnpublished) {
|
|
159
231
|
requireSurface(
|
|
160
232
|
releasePolicy?.packageName === "owlrunkit"
|
|
@@ -167,6 +239,8 @@ export function verifyReleaseIdentitySurfacesV1(input) {
|
|
|
167
239
|
&& releasePolicy.currentPublishedRelease.version !== core.coreVersion,
|
|
168
240
|
"release_policy",
|
|
169
241
|
);
|
|
242
|
+
} else if (registryGatedArtifact) {
|
|
243
|
+
requireSurface(registryGatedPolicyV2Exact(releasePolicy, core), "release_policy");
|
|
170
244
|
}
|
|
171
245
|
const skillExact = (markdown) => {
|
|
172
246
|
if (typeof markdown !== "string") return false;
|
|
@@ -175,6 +249,19 @@ export function verifyReleaseIdentitySurfacesV1(input) {
|
|
|
175
249
|
&& hashes[0] === core.coreManifestSha256
|
|
176
250
|
&& markdown.includes(`Core \`${core.coreVersion}\``);
|
|
177
251
|
if (!identityExact) return false;
|
|
252
|
+
if (registryGatedArtifact) {
|
|
253
|
+
const rollback = releasePolicy.rollbackRelease.version;
|
|
254
|
+
return markdown.includes(
|
|
255
|
+
`Bundled release artifact: standalone \`owlrunkit@${core.coreVersion}\``,
|
|
256
|
+
)
|
|
257
|
+
&& markdown.includes(
|
|
258
|
+
`provenance for \`owlrunkit@${core.coreVersion}\` is independently verified`,
|
|
259
|
+
)
|
|
260
|
+
&& markdown.includes(
|
|
261
|
+
`published rollback baseline for this artifact is \`owlrunkit@${rollback}\``,
|
|
262
|
+
)
|
|
263
|
+
&& !/(?:candidate is not published|current published release remains|already published|is published|registry publication pending|unpublished release candidate)/iu.test(markdown);
|
|
264
|
+
}
|
|
178
265
|
if (!candidateUnpublished) {
|
|
179
266
|
return markdown.includes(
|
|
180
267
|
`Bundled release: standalone \`owlrunkit@${core.coreVersion}\``,
|