owlrunkit 0.16.0 → 0.17.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 +40 -3
- package/README.md +61 -12
- package/docs/architecture/OWLCODA_RUNKIT_017_AGENT_NATIVE_PRODUCT_DEFINITION.md +154 -0
- package/integrations/codex/skills/owlcoda-runkit/SKILL.md +74 -16
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
- package/package.json +1 -1
- package/packages/attest/distribution-manifest-v1.json +10 -0
- package/packages/attest/src/quick.mjs +10 -0
- package/registry-release-policy-v1.json +5 -5
- package/sbom.spdx.json +5 -5
- package/scripts/runkit-contract/core-contract.mjs +12 -2
- package/scripts/runkit-contract/fleet-discovery.mjs +768 -26
- package/scripts/runkit-contract/formal-workflow.mjs +201 -0
- package/scripts/runkit-contract/lifecycle-orchestration.mjs +7 -2
- package/scripts/runkit-contract/project-cli-resolver.mjs +3 -0
- package/scripts/runkit-contract/project-control-parser.mjs +62 -3
- package/scripts/runkit-contract/runkit-cli.mjs +162 -13
- package/scripts/runkit-contract/schemas/core-successor-plan-v1.schema.json +14 -2
- package/scripts/runkit-contract/schemas/fleet-discovery-v1.schema.json +33 -2
- package/scripts/runkit-contract/schemas/team-project-definition-v1.schema.json +108 -0
- package/scripts/runkit-contract/schemas/team-project-event-v1.schema.json +99 -0
- package/scripts/runkit-contract/schemas/team-project-status-v1.schema.json +50 -0
- package/scripts/runkit-contract/schemas/verification-envelope-v1.schema.json +102 -0
- package/scripts/runkit-contract/sync-core016-release-identity.mjs +9 -4
- package/scripts/runkit-contract/sync-release-identity.mjs +224 -0
- package/scripts/runkit-contract/team-project.mjs +1006 -0
- package/scripts/runkit-contract/templates/team-project-definition.json +30 -0
- package/scripts/runkit-contract/templates/team-project-event.json +9 -0
- package/scripts/runkit-contract/templates/verification-envelope.json +28 -0
- package/scripts/runkit-contract/verification-envelope-check.mjs +45 -0
- package/scripts/runkit-contract/verification-envelope.mjs +846 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "OwlCodaRunKitTeamProjectDefinitionV1",
|
|
3
|
+
"projectId": "project-id",
|
|
4
|
+
"objective": "State the durable project outcome",
|
|
5
|
+
"milestones": [
|
|
6
|
+
{ "id": "m1", "title": "First milestone" }
|
|
7
|
+
],
|
|
8
|
+
"workstreams": [
|
|
9
|
+
{ "id": "runtime", "title": "Runtime", "milestoneId": "m1" }
|
|
10
|
+
],
|
|
11
|
+
"workItems": [
|
|
12
|
+
{
|
|
13
|
+
"id": "work-item-1",
|
|
14
|
+
"title": "Deliver one evidence-backed outcome",
|
|
15
|
+
"milestoneId": "m1",
|
|
16
|
+
"workstreamId": "runtime",
|
|
17
|
+
"dependencies": [],
|
|
18
|
+
"ownedPaths": ["src/**"],
|
|
19
|
+
"measurable": { "unit": "acceptance_tests", "total": 1 }
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"integrationGates": [
|
|
23
|
+
{
|
|
24
|
+
"id": "integration-ready",
|
|
25
|
+
"title": "All required work accepted",
|
|
26
|
+
"requiredWorkItemIds": ["work-item-1"],
|
|
27
|
+
"requiredDecisionIds": []
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "OwlCodaRunKitVerificationEnvelopeV1",
|
|
3
|
+
"envelopeId": "quality-v1",
|
|
4
|
+
"cwd": ".",
|
|
5
|
+
"lockfiles": ["package-lock.json"],
|
|
6
|
+
"paths": {
|
|
7
|
+
"immutableSource": ["src/**", "tests/**", "package-lock.json"],
|
|
8
|
+
"declaredOutput": ["dist/**", "coverage/**"],
|
|
9
|
+
"disposableScratch": [".tmp/**"],
|
|
10
|
+
"forbidden": [".env", ".ssh/**", ".owlcoda/**"]
|
|
11
|
+
},
|
|
12
|
+
"environment": { "allowNames": ["PATH"], "values": {} },
|
|
13
|
+
"network": { "mode": "deny" },
|
|
14
|
+
"process": {
|
|
15
|
+
"allowSubprocesses": false,
|
|
16
|
+
"allowedExecutables": [],
|
|
17
|
+
"allowBackgroundAfterFinish": false
|
|
18
|
+
},
|
|
19
|
+
"phases": {
|
|
20
|
+
"setup": null,
|
|
21
|
+
"check": {
|
|
22
|
+
"executable": "/absolute/path/to/node",
|
|
23
|
+
"argv": ["tests/run.mjs"],
|
|
24
|
+
"timeoutMs": 120000
|
|
25
|
+
},
|
|
26
|
+
"teardown": null
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { realpathSync } from "node:fs";
|
|
4
|
+
import { pathToFileURL } from "node:url";
|
|
5
|
+
|
|
6
|
+
import { verifyVerificationEnvelopeReceiptV1 } from "./verification-envelope.mjs";
|
|
7
|
+
|
|
8
|
+
function option(argv, name) {
|
|
9
|
+
const index = argv.indexOf(name);
|
|
10
|
+
if (index < 0 || index === argv.length - 1) {
|
|
11
|
+
throw new Error(`${name} is required.`);
|
|
12
|
+
}
|
|
13
|
+
return argv[index + 1];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function verifyEnvelopeForFormalV1(argv = process.argv.slice(2)) {
|
|
17
|
+
if (argv.length !== 4
|
|
18
|
+
|| argv[0] !== "--workspace"
|
|
19
|
+
|| argv[2] !== "--receipt") {
|
|
20
|
+
throw new Error("Usage: verification-envelope-check.mjs --workspace <path> --receipt <path>");
|
|
21
|
+
}
|
|
22
|
+
const workspaceRoot = realpathSync(option(argv, "--workspace"));
|
|
23
|
+
const result = verifyVerificationEnvelopeReceiptV1({
|
|
24
|
+
workspaceRoot,
|
|
25
|
+
receiptPath: option(argv, "--receipt"),
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
...result,
|
|
29
|
+
status: result.formalEligible
|
|
30
|
+
? "verification_envelope_formal_eligible"
|
|
31
|
+
: "verification_envelope_not_formal_eligible",
|
|
32
|
+
exitCode: result.formalEligible ? 0 : 2,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
|
37
|
+
try {
|
|
38
|
+
const result = verifyEnvelopeForFormalV1();
|
|
39
|
+
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
40
|
+
process.exitCode = result.exitCode;
|
|
41
|
+
} catch (error) {
|
|
42
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
43
|
+
process.exitCode = 3;
|
|
44
|
+
}
|
|
45
|
+
}
|