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.
Files changed (51) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +94 -8
  3. package/docs/architecture/OWLCODA_RUNKIT_0201_RELEASE_TRUTH_AND_PROFILE_NORMALIZATION_PATCH_DECISION_20260813.md +95 -0
  4. package/docs/architecture/OWLCODA_RUNKIT_020_TEAM_DELIVERY_PHASE1_PRODUCT_DECISION_20260813.md +296 -0
  5. package/docs/architecture/OWLCODA_RUNKIT_021_TEAM_DELIVERY_PHASE2_PRODUCT_DECISION_20260813.md +249 -0
  6. package/integrations/codex/skills/owlcoda-runkit/SKILL.md +114 -12
  7. package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
  8. package/package.json +1 -1
  9. package/packages/attest/README.md +7 -1
  10. package/packages/attest/consumer-surface-v3.json +275 -0
  11. package/packages/attest/distribution-manifest-v1.json +19 -0
  12. package/packages/attest/schemas/canonical-candidate-identity-v1.schema.json +112 -0
  13. package/packages/attest/schemas/foreign-workspace-filesystem-identity-v1.schema.json +32 -0
  14. package/packages/attest/schemas/quick-verification-receipt-v4.schema.json +226 -0
  15. package/packages/attest/src/candidate-identity.mjs +454 -0
  16. package/packages/attest/src/index.mjs +11 -0
  17. package/packages/attest/src/quick-receipt-contract.mjs +126 -5
  18. package/packages/attest/src/quick.mjs +48 -8
  19. package/{registry-release-policy-v1.json → registry-release-policy-v2.json} +8 -9
  20. package/sbom.spdx.json +4 -4
  21. package/scripts/runkit-contract/core-contract.mjs +21 -1
  22. package/scripts/runkit-contract/fleet-skill-plan.mjs +223 -0
  23. package/scripts/runkit-contract/formal-workflow.mjs +3 -1
  24. package/scripts/runkit-contract/inspect-presentation.mjs +56 -0
  25. package/scripts/runkit-contract/install-codex-skill.mjs +1 -0
  26. package/scripts/runkit-contract/onboarding-bootstrap.mjs +15 -0
  27. package/scripts/runkit-contract/onboarding-doctor.mjs +201 -7
  28. package/scripts/runkit-contract/profile-onboarding.mjs +6 -0
  29. package/scripts/runkit-contract/project-cli-resolver.mjs +12 -1
  30. package/scripts/runkit-contract/quick-metrics.mjs +9 -5
  31. package/scripts/runkit-contract/quick-verify.mjs +108 -24
  32. package/scripts/runkit-contract/registry-adoption-gate.mjs +12 -3
  33. package/scripts/runkit-contract/registry-adoption.mjs +10 -5
  34. package/scripts/runkit-contract/runkit-cli.mjs +367 -20
  35. package/scripts/runkit-contract/schemas/candidate-transfer-packet-v1.schema.json +98 -0
  36. package/scripts/runkit-contract/schemas/delivery-lifecycle-v1.schema.json +91 -0
  37. package/scripts/runkit-contract/schemas/external-gate-v1.schema.json +68 -0
  38. package/scripts/runkit-contract/schemas/fleet-skill-upgrade-plan-v1.schema.json +140 -0
  39. package/scripts/runkit-contract/schemas/inspect-compact-v1.schema.json +93 -0
  40. package/scripts/runkit-contract/schemas/team-acceptance-packet-v2.schema.json +109 -0
  41. package/scripts/runkit-contract/schemas/team-delivery-status-v1.schema.json +72 -0
  42. package/scripts/runkit-contract/schemas/team-delivery-status-v2.schema.json +219 -0
  43. package/scripts/runkit-contract/schemas/team-packet-validation-v1.schema.json +33 -0
  44. package/scripts/runkit-contract/schemas/team-project-event-v6.schema.json +82 -0
  45. package/scripts/runkit-contract/schemas/team-project-event-v7.schema.json +80 -0
  46. package/scripts/runkit-contract/schemas/team-project-status-v4.schema.json +208 -0
  47. package/scripts/runkit-contract/schemas/team-recommendation-v1.schema.json +121 -0
  48. package/scripts/runkit-contract/schemas/team-task-packet-v2.schema.json +228 -0
  49. package/scripts/runkit-contract/sync-release-identity.mjs +87 -0
  50. package/scripts/runkit-contract/team-delivery.mjs +1031 -0
  51. 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}\``,