@cleocode/contracts 2026.10.8 → 2026.10.9
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/dist/branch-lock.d.ts +5 -2
- package/dist/branch-lock.d.ts.map +1 -1
- package/dist/branch-lock.js.map +1 -1
- package/dist/dispatch/operations-registry.d.ts.map +1 -1
- package/dist/dispatch/operations-registry.js +7 -1
- package/dist/dispatch/operations-registry.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/invariants/sync-write-invariants.d.ts.map +1 -1
- package/dist/invariants/sync-write-invariants.js +10 -1
- package/dist/invariants/sync-write-invariants.js.map +1 -1
- package/dist/nexus-cloud.d.ts +19 -1
- package/dist/nexus-cloud.d.ts.map +1 -1
- package/dist/nexus-cloud.js +4 -0
- package/dist/nexus-cloud.js.map +1 -1
- package/dist/nexus-vault.d.ts +155 -1
- package/dist/nexus-vault.d.ts.map +1 -1
- package/dist/operations/nexus.d.ts +4 -0
- package/dist/operations/nexus.d.ts.map +1 -1
- package/dist/operations/nexus.js.map +1 -1
- package/dist/operations/orchestrate.d.ts +7 -0
- package/dist/operations/orchestrate.d.ts.map +1 -1
- package/dist/operations/validate.d.ts +5 -0
- package/dist/operations/validate.d.ts.map +1 -1
- package/dist/operations/worktree.d.ts +61 -0
- package/dist/operations/worktree.d.ts.map +1 -1
- package/dist/project-context.d.ts +9 -0
- package/dist/project-context.d.ts.map +1 -1
- package/dist/project-hook-delivery.d.ts +137 -0
- package/dist/project-hook-delivery.d.ts.map +1 -0
- package/dist/project-hook-delivery.js +21 -0
- package/dist/project-hook-delivery.js.map +1 -0
- package/dist/project-hooks.d.ts +276 -0
- package/dist/project-hooks.d.ts.map +1 -0
- package/dist/project-hooks.js +113 -0
- package/dist/project-hooks.js.map +1 -0
- package/dist/release/channel.d.ts +1 -1
- package/dist/release/channel.d.ts.map +1 -1
- package/dist/release/hook-pilot.d.ts +179 -0
- package/dist/release/hook-pilot.d.ts.map +1 -0
- package/dist/release/hook-pilot.js +112 -0
- package/dist/release/hook-pilot.js.map +1 -0
- package/dist/release/plan.d.ts +12 -1
- package/dist/release/plan.d.ts.map +1 -1
- package/dist/release/plan.js +25 -2
- package/dist/release/plan.js.map +1 -1
- package/dist/release/plan.test.js +14 -3
- package/dist/release/plan.test.js.map +1 -1
- package/dist/row-identity.d.ts +7 -0
- package/dist/row-identity.d.ts.map +1 -1
- package/dist/task.d.ts +7 -0
- package/dist/task.d.ts.map +1 -1
- package/dist/tools/atomic.d.ts +6 -0
- package/dist/tools/atomic.d.ts.map +1 -1
- package/dist/tools/atomic.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/__snapshots__/operations-registry.test.ts.snap +1 -1
- package/src/branch-lock.ts +5 -2
- package/src/dispatch/operations-registry.ts +7 -1
- package/src/index.ts +7 -0
- package/src/invariants/sync-write-invariants.ts +10 -1
- package/src/nexus-cloud.ts +13 -1
- package/src/nexus-vault.ts +138 -1
- package/src/operations/nexus.ts +4 -0
- package/src/operations/orchestrate.ts +7 -0
- package/src/operations/validate.ts +5 -0
- package/src/operations/worktree.ts +59 -0
- package/src/project-context.ts +9 -0
- package/src/project-hook-delivery.ts +144 -0
- package/src/project-hooks.ts +256 -0
- package/src/release/channel.ts +1 -1
- package/src/release/hook-pilot.ts +163 -0
- package/src/release/plan.test.ts +15 -3
- package/src/release/plan.ts +81 -56
- package/src/row-identity.ts +7 -0
- package/src/task.ts +7 -0
- package/src/tools/atomic.ts +8 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/** Project-owned checks shared by Git, harness and worktree adapters (T13343). */
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
/** Invocation origin; CI has stricter failure handling than local adapters. */
|
|
4
|
+
export const HookSourceSchema = z.enum(['agent', 'git', 'worktree', 'direct', 'ci']);
|
|
5
|
+
/** A checkout-relative path; runtime validation also resolves symlinks. */
|
|
6
|
+
export const ProjectHookPathSchema = z
|
|
7
|
+
.string()
|
|
8
|
+
.min(1)
|
|
9
|
+
.max(4096)
|
|
10
|
+
.refine((value) => !value.startsWith('/') &&
|
|
11
|
+
!value.includes('\\') &&
|
|
12
|
+
!value.split('/').includes('..') &&
|
|
13
|
+
!/^[A-Za-z]:/.test(value), 'Expected a project-relative path without traversal');
|
|
14
|
+
/** One project definition; CLEO IDs are reserved for shipped infrastructure. */
|
|
15
|
+
export const ProjectHookDefinitionSchema = z
|
|
16
|
+
.object({
|
|
17
|
+
id: z
|
|
18
|
+
.string()
|
|
19
|
+
.regex(/^[a-z][a-z0-9.-]{0,127}$/)
|
|
20
|
+
.refine((value) => !value.startsWith('cleo.'), 'CLEO IDs are reserved'),
|
|
21
|
+
owner: z.literal('project'),
|
|
22
|
+
bindings: z
|
|
23
|
+
.array(z.object({ source: HookSourceSchema, event: z.string().min(1).max(128) }).strict())
|
|
24
|
+
.min(1)
|
|
25
|
+
.max(16),
|
|
26
|
+
executable: z.string().min(1).max(4096),
|
|
27
|
+
handler: ProjectHookPathSchema,
|
|
28
|
+
args: z.array(z.string().max(8192)).max(64).default([]),
|
|
29
|
+
dependencies: z.array(ProjectHookPathSchema).max(128).default([]),
|
|
30
|
+
timeoutMs: z.number().int().min(1).max(120000).default(30000),
|
|
31
|
+
checkerErrorPolicy: z.enum(['warn', 'block']).default('warn'),
|
|
32
|
+
})
|
|
33
|
+
.strict();
|
|
34
|
+
/** Tracked single source of truth; array order defines execution order. */
|
|
35
|
+
export const ProjectHooksManifestSchema = z
|
|
36
|
+
.object({
|
|
37
|
+
schemaVersion: z.literal(1),
|
|
38
|
+
hooks: z.array(ProjectHookDefinitionSchema).max(64),
|
|
39
|
+
})
|
|
40
|
+
.strict()
|
|
41
|
+
.superRefine((manifest, context) => {
|
|
42
|
+
const ids = new Set();
|
|
43
|
+
for (const hook of manifest.hooks) {
|
|
44
|
+
if (ids.has(hook.id))
|
|
45
|
+
context.addIssue({ code: 'custom', message: `Duplicate hook ID: ${hook.id}` });
|
|
46
|
+
ids.add(hook.id);
|
|
47
|
+
const bindings = new Set();
|
|
48
|
+
for (const binding of hook.bindings) {
|
|
49
|
+
const key = `${binding.source}:${binding.event}`;
|
|
50
|
+
if (bindings.has(key))
|
|
51
|
+
context.addIssue({ code: 'custom', message: `Duplicate binding: ${hook.id}:${key}` });
|
|
52
|
+
bindings.add(key);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
/** Structured checker verdict written as one JSON object on stdout. */
|
|
57
|
+
export const ProjectHookVerdictSchema = z
|
|
58
|
+
.object({
|
|
59
|
+
status: z.enum(['pass', 'block', 'warn', 'skip', 'checker-error']),
|
|
60
|
+
message: z.string().max(4096).optional(),
|
|
61
|
+
})
|
|
62
|
+
.strict();
|
|
63
|
+
/** Content hashes approved explicitly on this machine. */
|
|
64
|
+
export const HookActivationSchema = z
|
|
65
|
+
.object({
|
|
66
|
+
schemaVersion: z.literal(1),
|
|
67
|
+
projectRoot: z.string(),
|
|
68
|
+
projectIdentity: z.string(),
|
|
69
|
+
manifestHash: z.string().regex(/^[a-f0-9]{64}$/),
|
|
70
|
+
files: z.record(z.string(), z.string().regex(/^[a-f0-9]{64}$/)),
|
|
71
|
+
executables: z.record(z.string(), z.string()),
|
|
72
|
+
activatedAt: z.string(),
|
|
73
|
+
})
|
|
74
|
+
.strict();
|
|
75
|
+
/** Local feature state; activation never confers native harness trust. */
|
|
76
|
+
export const ProjectHooksLocalStateSchema = z
|
|
77
|
+
.object({
|
|
78
|
+
hooks: z.object({ project: z.object({ enabled: z.boolean() }).strict() }).strict(),
|
|
79
|
+
activation: HookActivationSchema.optional(),
|
|
80
|
+
})
|
|
81
|
+
.strict();
|
|
82
|
+
/** Validator for sanitized execution records, rejecting unexpected payload fields. */
|
|
83
|
+
export const HookExecutionReceiptSchema = z
|
|
84
|
+
.object({
|
|
85
|
+
schemaVersion: z.literal(1),
|
|
86
|
+
manifestHash: z.string().regex(/^[a-f0-9]{64}$/),
|
|
87
|
+
source: HookSourceSchema,
|
|
88
|
+
event: z.string().max(128),
|
|
89
|
+
recordedAt: z.string(),
|
|
90
|
+
outcomes: z
|
|
91
|
+
.array(z
|
|
92
|
+
.object({
|
|
93
|
+
id: z.string().max(128),
|
|
94
|
+
status: z.enum([
|
|
95
|
+
'pass',
|
|
96
|
+
'block',
|
|
97
|
+
'warn',
|
|
98
|
+
'skip',
|
|
99
|
+
'checker-error',
|
|
100
|
+
'timeout',
|
|
101
|
+
'infrastructure-error',
|
|
102
|
+
]),
|
|
103
|
+
blocks: z.boolean(),
|
|
104
|
+
code: z.string().regex(/^HOOK_[A-Z_]+$/),
|
|
105
|
+
exitCode: z.number().int().nullable(),
|
|
106
|
+
signal: z.string().max(32).nullable(),
|
|
107
|
+
durationMs: z.number().nonnegative(),
|
|
108
|
+
})
|
|
109
|
+
.strict())
|
|
110
|
+
.max(65),
|
|
111
|
+
})
|
|
112
|
+
.strict();
|
|
113
|
+
//# sourceMappingURL=project-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-hooks.js","sourceRoot":"","sources":["../src/project-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* @adr ADR-063
|
|
10
10
|
*/
|
|
11
11
|
/** npm dist-tag channel for a release. */
|
|
12
|
-
export type ReleaseChannel = 'latest' | 'beta' | 'alpha';
|
|
12
|
+
export type ReleaseChannel = 'latest' | 'beta' | 'alpha' | 'canary';
|
|
13
13
|
/** Result of validating a version string against a channel's expectations. */
|
|
14
14
|
export interface ChannelValidationResult {
|
|
15
15
|
valid: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/release/channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,0CAA0C;AAC1C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/release/channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,0CAA0C;AAC1C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEpE,8EAA8E;AAC9E,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/** Bound, retained evidence required before promoting project hooks to stable (T13350). */
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
/** Required pilot checks; every named check must pass on the same implementation. */
|
|
4
|
+
export declare const HOOK_PILOT_CHECKS: readonly ["packedArtifact", "publishedCanary", "readOnlyDev", "readOnlyProd", "liveClaude", "liveCodex", "hostedCi"];
|
|
5
|
+
/** A required hook pilot check. */
|
|
6
|
+
export type HookPilotCheck = (typeof HOOK_PILOT_CHECKS)[number];
|
|
7
|
+
/** SHA-256 evidence or implementation digest. */
|
|
8
|
+
export declare const HookPilotDigestSchema: z.ZodString;
|
|
9
|
+
/** An independent, numbered canary release; RC/beta does not satisfy this pilot. */
|
|
10
|
+
export declare const HookPilotCanarySchema: z.ZodString;
|
|
11
|
+
/** Exact live harness versions, kept separate from source-version normalization. */
|
|
12
|
+
export declare const HookPilotHarnessVersionsSchema: z.ZodObject<{
|
|
13
|
+
claude: z.ZodString;
|
|
14
|
+
codex: z.ZodString;
|
|
15
|
+
}, z.core.$strict>;
|
|
16
|
+
/** Retained proof path remains inside the evidence artifact directory. */
|
|
17
|
+
export declare const HookPilotProofReferenceSchema: z.ZodObject<{
|
|
18
|
+
path: z.ZodString;
|
|
19
|
+
sha256: z.ZodString;
|
|
20
|
+
}, z.core.$strict>;
|
|
21
|
+
/** Common identity attached to every retained proof, never inferred from similar releases. */
|
|
22
|
+
export declare const HookPilotIdentitySchema: z.ZodObject<{
|
|
23
|
+
canaryVersion: z.ZodString;
|
|
24
|
+
sourceDigest: z.ZodString;
|
|
25
|
+
vidaCommit: z.ZodString;
|
|
26
|
+
harnessVersions: z.ZodObject<{
|
|
27
|
+
claude: z.ZodString;
|
|
28
|
+
codex: z.ZodString;
|
|
29
|
+
}, z.core.$strict>;
|
|
30
|
+
}, z.core.$strict>;
|
|
31
|
+
/** A bounded collection of actual pilot receipts. Missing or partial checks hold promotion. */
|
|
32
|
+
export declare const HookPilotEvidenceSchema: z.ZodObject<{
|
|
33
|
+
canaryVersion: z.ZodString;
|
|
34
|
+
sourceDigest: z.ZodString;
|
|
35
|
+
vidaCommit: z.ZodString;
|
|
36
|
+
harnessVersions: z.ZodObject<{
|
|
37
|
+
claude: z.ZodString;
|
|
38
|
+
codex: z.ZodString;
|
|
39
|
+
}, z.core.$strict>;
|
|
40
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
41
|
+
vidaRepository: z.ZodString;
|
|
42
|
+
hostedRunId: z.ZodNumber;
|
|
43
|
+
checks: z.ZodObject<{
|
|
44
|
+
packedArtifact: z.ZodObject<{
|
|
45
|
+
path: z.ZodString;
|
|
46
|
+
sha256: z.ZodString;
|
|
47
|
+
}, z.core.$strict>;
|
|
48
|
+
publishedCanary: z.ZodObject<{
|
|
49
|
+
path: z.ZodString;
|
|
50
|
+
sha256: z.ZodString;
|
|
51
|
+
}, z.core.$strict>;
|
|
52
|
+
readOnlyDev: z.ZodObject<{
|
|
53
|
+
path: z.ZodString;
|
|
54
|
+
sha256: z.ZodString;
|
|
55
|
+
}, z.core.$strict>;
|
|
56
|
+
readOnlyProd: z.ZodObject<{
|
|
57
|
+
path: z.ZodString;
|
|
58
|
+
sha256: z.ZodString;
|
|
59
|
+
}, z.core.$strict>;
|
|
60
|
+
liveClaude: z.ZodObject<{
|
|
61
|
+
path: z.ZodString;
|
|
62
|
+
sha256: z.ZodString;
|
|
63
|
+
}, z.core.$strict>;
|
|
64
|
+
liveCodex: z.ZodObject<{
|
|
65
|
+
path: z.ZodString;
|
|
66
|
+
sha256: z.ZodString;
|
|
67
|
+
}, z.core.$strict>;
|
|
68
|
+
hostedCi: z.ZodObject<{
|
|
69
|
+
path: z.ZodString;
|
|
70
|
+
sha256: z.ZodString;
|
|
71
|
+
}, z.core.$strict>;
|
|
72
|
+
}, z.core.$strict>;
|
|
73
|
+
}, z.core.$strict>;
|
|
74
|
+
/** Validated evidence bundle index. */
|
|
75
|
+
export type HookPilotEvidence = z.infer<typeof HookPilotEvidenceSchema>;
|
|
76
|
+
/** Structured, redacted proof produced by a real check and retained with its hash. */
|
|
77
|
+
export declare const HookPilotProofSchema: z.ZodObject<{
|
|
78
|
+
canaryVersion: z.ZodString;
|
|
79
|
+
sourceDigest: z.ZodString;
|
|
80
|
+
vidaCommit: z.ZodString;
|
|
81
|
+
harnessVersions: z.ZodObject<{
|
|
82
|
+
claude: z.ZodString;
|
|
83
|
+
codex: z.ZodString;
|
|
84
|
+
}, z.core.$strict>;
|
|
85
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
86
|
+
check: z.ZodEnum<{
|
|
87
|
+
packedArtifact: "packedArtifact";
|
|
88
|
+
publishedCanary: "publishedCanary";
|
|
89
|
+
readOnlyDev: "readOnlyDev";
|
|
90
|
+
readOnlyProd: "readOnlyProd";
|
|
91
|
+
liveClaude: "liveClaude";
|
|
92
|
+
liveCodex: "liveCodex";
|
|
93
|
+
hostedCi: "hostedCi";
|
|
94
|
+
}>;
|
|
95
|
+
status: z.ZodLiteral<"pass">;
|
|
96
|
+
observedAt: z.ZodString;
|
|
97
|
+
checkedCount: z.ZodNumber;
|
|
98
|
+
exitCode: z.ZodLiteral<0>;
|
|
99
|
+
mode: z.ZodEnum<{
|
|
100
|
+
"read-only": "read-only";
|
|
101
|
+
"packed-artifact": "packed-artifact";
|
|
102
|
+
"published-canary": "published-canary";
|
|
103
|
+
"live-harness": "live-harness";
|
|
104
|
+
"hosted-ci": "hosted-ci";
|
|
105
|
+
}>;
|
|
106
|
+
packageVersions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
107
|
+
ordinaryCommands: z.ZodOptional<z.ZodNumber>;
|
|
108
|
+
disposablePushes: z.ZodOptional<z.ZodNumber>;
|
|
109
|
+
hostedRunId: z.ZodOptional<z.ZodNumber>;
|
|
110
|
+
url: z.ZodOptional<z.ZodString>;
|
|
111
|
+
}, z.core.$strict>;
|
|
112
|
+
/** A validated retained proof. */
|
|
113
|
+
export type HookPilotProof = z.infer<typeof HookPilotProofSchema>;
|
|
114
|
+
/** Minimal authoritative GitHub response required for an actual successful workflow run. */
|
|
115
|
+
export declare const HookPilotHostedRunSchema: z.ZodObject<{
|
|
116
|
+
id: z.ZodNumber;
|
|
117
|
+
head_sha: z.ZodString;
|
|
118
|
+
status: z.ZodLiteral<"completed">;
|
|
119
|
+
conclusion: z.ZodLiteral<"success">;
|
|
120
|
+
path: z.ZodString;
|
|
121
|
+
html_url: z.ZodString;
|
|
122
|
+
repository: z.ZodObject<{
|
|
123
|
+
full_name: z.ZodString;
|
|
124
|
+
}, z.core.$strip>;
|
|
125
|
+
}, z.core.$strip>;
|
|
126
|
+
/** Minimal runner/step evidence; an empty never-started job cannot satisfy hosted CI. */
|
|
127
|
+
export declare const HookPilotHostedJobsSchema: z.ZodObject<{
|
|
128
|
+
jobs: z.ZodArray<z.ZodObject<{
|
|
129
|
+
name: z.ZodString;
|
|
130
|
+
status: z.ZodString;
|
|
131
|
+
conclusion: z.ZodNullable<z.ZodString>;
|
|
132
|
+
runner_id: z.ZodNumber;
|
|
133
|
+
runner_name: z.ZodNullable<z.ZodString>;
|
|
134
|
+
labels: z.ZodArray<z.ZodString>;
|
|
135
|
+
steps: z.ZodArray<z.ZodObject<{
|
|
136
|
+
name: z.ZodString;
|
|
137
|
+
status: z.ZodString;
|
|
138
|
+
conclusion: z.ZodNullable<z.ZodString>;
|
|
139
|
+
}, z.core.$strip>>;
|
|
140
|
+
}, z.core.$strip>>;
|
|
141
|
+
}, z.core.$strip>;
|
|
142
|
+
/** A bounded API JSON reader. Production uses gh; tests inject only transport responses. */
|
|
143
|
+
export type HookPilotApiReader = (endpoint: string) => string;
|
|
144
|
+
/** Inputs that bind validation to the release currently being promoted. */
|
|
145
|
+
export interface HookPilotValidationOptions {
|
|
146
|
+
/** Repository checkout used for the normalized implementation digest. */
|
|
147
|
+
root: string;
|
|
148
|
+
/** Retained evidence index; its directory contains all proof files. */
|
|
149
|
+
evidencePath: string;
|
|
150
|
+
/** Stable version receiving promotion; cannot precede the canary base. Source proof must match. */
|
|
151
|
+
stableVersion: string;
|
|
152
|
+
/** Trusted release-side pilot repository; evidence cannot redirect authority. */
|
|
153
|
+
vidaRepository: string;
|
|
154
|
+
/** Authoritative read transport, injectable for sanitized tests. */
|
|
155
|
+
readApi?: HookPilotApiReader;
|
|
156
|
+
}
|
|
157
|
+
/** Reusable normalized source digest and exact publish cohort. */
|
|
158
|
+
export interface HookPilotSourceDigest {
|
|
159
|
+
/** Algorithm format, including inclusion and normalization rules. */
|
|
160
|
+
schemaVersion: 1;
|
|
161
|
+
/** SHA-256 of sorted framed mode/path/content records with manifest normalization. */
|
|
162
|
+
digest: string;
|
|
163
|
+
/** Number of assessed tracked files. */
|
|
164
|
+
fileCount: number;
|
|
165
|
+
/** Package names from release.yml's publish_pkg SSoT. */
|
|
166
|
+
cohort: string[];
|
|
167
|
+
}
|
|
168
|
+
/** Validation result contains attribution only, never proof payloads or credentials. */
|
|
169
|
+
export interface HookPilotValidationResult {
|
|
170
|
+
/** Confirmed independent canary. */
|
|
171
|
+
canaryVersion: string;
|
|
172
|
+
/** Normalized source digest used by this validation. */
|
|
173
|
+
sourceDigest: string;
|
|
174
|
+
/** Exact VidaPeps commit validated by hosted CI. */
|
|
175
|
+
vidaCommit: string;
|
|
176
|
+
/** Required checks validated. */
|
|
177
|
+
checks: HookPilotCheck[];
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=hook-pilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-pilot.d.ts","sourceRoot":"","sources":["../../src/release/hook-pilot.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,sHAQpB,CAAC;AACX,mCAAmC;AACnC,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAChE,iDAAiD;AACjD,eAAO,MAAM,qBAAqB,aAAqC,CAAC;AACxE,oFAAoF;AACpF,eAAO,MAAM,qBAAqB,aAAoD,CAAC;AACvF,oFAAoF;AACpF,eAAO,MAAM,8BAA8B;;;kBAKhC,CAAC;AACZ,0EAA0E;AAC1E,eAAO,MAAM,6BAA6B;;;kBAgB/B,CAAC;AACZ,8FAA8F;AAC9F,eAAO,MAAM,uBAAuB;;;;;;;;kBAOzB,CAAC;AACZ,+FAA+F;AAC/F,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkBzB,CAAC;AACZ,uCAAuC;AACvC,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,sFAAsF;AACtF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAatB,CAAC;AACZ,kCAAkC;AAClC,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,4FAA4F;AAC5F,eAAO,MAAM,wBAAwB;;;;;;;;;;iBAQnC,CAAC;AACH,yFAAyF;AACzF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;iBAsBpC,CAAC;AACH,4FAA4F;AAC5F,MAAM,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;AAC9D,2EAA2E;AAC3E,MAAM,WAAW,0BAA0B;IACzC,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,aAAa,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,cAAc,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AACD,kEAAkE;AAClE,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,aAAa,EAAE,CAAC,CAAC;IACjB,sFAAsF;IACtF,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AACD,wFAAwF;AACxF,MAAM,WAAW,yBAAyB;IACxC,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/** Bound, retained evidence required before promoting project hooks to stable (T13350). */
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
/** Required pilot checks; every named check must pass on the same implementation. */
|
|
4
|
+
export const HOOK_PILOT_CHECKS = [
|
|
5
|
+
'packedArtifact',
|
|
6
|
+
'publishedCanary',
|
|
7
|
+
'readOnlyDev',
|
|
8
|
+
'readOnlyProd',
|
|
9
|
+
'liveClaude',
|
|
10
|
+
'liveCodex',
|
|
11
|
+
'hostedCi',
|
|
12
|
+
];
|
|
13
|
+
/** SHA-256 evidence or implementation digest. */
|
|
14
|
+
export const HookPilotDigestSchema = z.string().regex(/^[a-f0-9]{64}$/);
|
|
15
|
+
/** An independent, numbered canary release; RC/beta does not satisfy this pilot. */
|
|
16
|
+
export const HookPilotCanarySchema = z.string().regex(/^\d{4}\.\d+\.\d+-canary\.\d+$/);
|
|
17
|
+
/** Exact live harness versions, kept separate from source-version normalization. */
|
|
18
|
+
export const HookPilotHarnessVersionsSchema = z
|
|
19
|
+
.object({
|
|
20
|
+
claude: z.string().min(1).max(128),
|
|
21
|
+
codex: z.string().min(1).max(128),
|
|
22
|
+
})
|
|
23
|
+
.strict();
|
|
24
|
+
/** Retained proof path remains inside the evidence artifact directory. */
|
|
25
|
+
export const HookPilotProofReferenceSchema = z
|
|
26
|
+
.object({
|
|
27
|
+
path: z
|
|
28
|
+
.string()
|
|
29
|
+
.min(1)
|
|
30
|
+
.max(4096)
|
|
31
|
+
.refine((value) => !value.startsWith('/') &&
|
|
32
|
+
!value.includes('\\') &&
|
|
33
|
+
!value.split('/').includes('..') &&
|
|
34
|
+
!/^[A-Za-z]:/.test(value), 'Expected a relative proof path without traversal'),
|
|
35
|
+
sha256: HookPilotDigestSchema,
|
|
36
|
+
})
|
|
37
|
+
.strict();
|
|
38
|
+
/** Common identity attached to every retained proof, never inferred from similar releases. */
|
|
39
|
+
export const HookPilotIdentitySchema = z
|
|
40
|
+
.object({
|
|
41
|
+
canaryVersion: HookPilotCanarySchema,
|
|
42
|
+
sourceDigest: HookPilotDigestSchema,
|
|
43
|
+
vidaCommit: z.string().regex(/^[a-f0-9]{40}$/),
|
|
44
|
+
harnessVersions: HookPilotHarnessVersionsSchema,
|
|
45
|
+
})
|
|
46
|
+
.strict();
|
|
47
|
+
/** A bounded collection of actual pilot receipts. Missing or partial checks hold promotion. */
|
|
48
|
+
export const HookPilotEvidenceSchema = HookPilotIdentitySchema.extend({
|
|
49
|
+
schemaVersion: z.literal(1),
|
|
50
|
+
vidaRepository: z
|
|
51
|
+
.string()
|
|
52
|
+
.regex(/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/)
|
|
53
|
+
.max(256),
|
|
54
|
+
hostedRunId: z.number().int().positive().safe(),
|
|
55
|
+
checks: z
|
|
56
|
+
.object({
|
|
57
|
+
packedArtifact: HookPilotProofReferenceSchema,
|
|
58
|
+
publishedCanary: HookPilotProofReferenceSchema,
|
|
59
|
+
readOnlyDev: HookPilotProofReferenceSchema,
|
|
60
|
+
readOnlyProd: HookPilotProofReferenceSchema,
|
|
61
|
+
liveClaude: HookPilotProofReferenceSchema,
|
|
62
|
+
liveCodex: HookPilotProofReferenceSchema,
|
|
63
|
+
hostedCi: HookPilotProofReferenceSchema,
|
|
64
|
+
})
|
|
65
|
+
.strict(),
|
|
66
|
+
}).strict();
|
|
67
|
+
/** Structured, redacted proof produced by a real check and retained with its hash. */
|
|
68
|
+
export const HookPilotProofSchema = HookPilotIdentitySchema.extend({
|
|
69
|
+
schemaVersion: z.literal(1),
|
|
70
|
+
check: z.enum(HOOK_PILOT_CHECKS),
|
|
71
|
+
status: z.literal('pass'),
|
|
72
|
+
observedAt: z.string().datetime(),
|
|
73
|
+
checkedCount: z.number().int().min(1).max(100000),
|
|
74
|
+
exitCode: z.literal(0),
|
|
75
|
+
mode: z.enum(['packed-artifact', 'published-canary', 'read-only', 'live-harness', 'hosted-ci']),
|
|
76
|
+
packageVersions: z.record(z.string().max(256), z.string().max(128)).optional(),
|
|
77
|
+
ordinaryCommands: z.number().int().min(1).max(100000).optional(),
|
|
78
|
+
disposablePushes: z.number().int().min(1).max(100000).optional(),
|
|
79
|
+
hostedRunId: z.number().int().positive().safe().optional(),
|
|
80
|
+
url: z.string().url().max(2048).optional(),
|
|
81
|
+
}).strict();
|
|
82
|
+
/** Minimal authoritative GitHub response required for an actual successful workflow run. */
|
|
83
|
+
export const HookPilotHostedRunSchema = z.object({
|
|
84
|
+
id: z.number().int().positive(),
|
|
85
|
+
head_sha: z.string().regex(/^[a-f0-9]{40}$/),
|
|
86
|
+
status: z.literal('completed'),
|
|
87
|
+
conclusion: z.literal('success'),
|
|
88
|
+
path: z.string().max(4096),
|
|
89
|
+
html_url: z.string().url().max(2048),
|
|
90
|
+
repository: z.object({ full_name: z.string().max(256) }),
|
|
91
|
+
});
|
|
92
|
+
/** Minimal runner/step evidence; an empty never-started job cannot satisfy hosted CI. */
|
|
93
|
+
export const HookPilotHostedJobsSchema = z.object({
|
|
94
|
+
jobs: z
|
|
95
|
+
.array(z.object({
|
|
96
|
+
name: z.string().max(256),
|
|
97
|
+
status: z.string().max(32),
|
|
98
|
+
conclusion: z.string().nullable(),
|
|
99
|
+
runner_id: z.number().int(),
|
|
100
|
+
runner_name: z.string().nullable(),
|
|
101
|
+
labels: z.array(z.string().max(128)).max(32),
|
|
102
|
+
steps: z
|
|
103
|
+
.array(z.object({
|
|
104
|
+
name: z.string().max(512),
|
|
105
|
+
status: z.string().max(32),
|
|
106
|
+
conclusion: z.string().nullable(),
|
|
107
|
+
}))
|
|
108
|
+
.max(256),
|
|
109
|
+
}))
|
|
110
|
+
.max(100),
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=hook-pilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-pilot.js","sourceRoot":"","sources":["../../src/release/hook-pilot.ts"],"names":[],"mappings":"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"}
|
package/dist/release/plan.d.ts
CHANGED
|
@@ -44,7 +44,15 @@ export declare const RELEASE_PLAN_SCHEMA_URL = "https://cleocode.io/schemas/rele
|
|
|
44
44
|
* Includes `rc` in addition to the legacy `latest|beta|alpha` triple to allow
|
|
45
45
|
* release candidates without conflating with `beta` per SPEC §6.1.
|
|
46
46
|
*/
|
|
47
|
-
export declare const RELEASE_CHANNEL: readonly ["latest", "beta", "alpha", "rc"];
|
|
47
|
+
export declare const RELEASE_CHANNEL: readonly ["latest", "beta", "alpha", "rc", "canary"];
|
|
48
|
+
/** Persisted prerelease classification, shared by planning and reconciliation. */
|
|
49
|
+
export declare const RELEASE_PERSISTED_CHANNEL: {
|
|
50
|
+
readonly latest: "latest";
|
|
51
|
+
readonly beta: "beta";
|
|
52
|
+
readonly alpha: "dev";
|
|
53
|
+
readonly rc: "beta";
|
|
54
|
+
readonly canary: "beta";
|
|
55
|
+
};
|
|
48
56
|
/**
|
|
49
57
|
* Version-scheme variants. `calver-suffix` is the hotfix grammar
|
|
50
58
|
* `vYYYY.M.DD.N` per SPEC R-402.
|
|
@@ -101,6 +109,7 @@ export declare const ReleaseChannelSchema: z.ZodEnum<{
|
|
|
101
109
|
beta: "beta";
|
|
102
110
|
latest: "latest";
|
|
103
111
|
alpha: "alpha";
|
|
112
|
+
canary: "canary";
|
|
104
113
|
rc: "rc";
|
|
105
114
|
}>;
|
|
106
115
|
/** Zod schema for {@link RELEASE_SCHEME}. */
|
|
@@ -351,6 +360,7 @@ export declare const ReleasePlanSchema: z.ZodObject<{
|
|
|
351
360
|
beta: "beta";
|
|
352
361
|
latest: "latest";
|
|
353
362
|
alpha: "alpha";
|
|
363
|
+
canary: "canary";
|
|
354
364
|
rc: "rc";
|
|
355
365
|
}>;
|
|
356
366
|
epicId: z.ZodNullable<z.ZodString>;
|
|
@@ -359,6 +369,7 @@ export declare const ReleasePlanSchema: z.ZodObject<{
|
|
|
359
369
|
regular: "regular";
|
|
360
370
|
prerelease: "prerelease";
|
|
361
371
|
}>;
|
|
372
|
+
hooksV1Promotion: z.ZodOptional<z.ZodBoolean>;
|
|
362
373
|
createdAt: z.ZodISODateTime;
|
|
363
374
|
createdBy: z.ZodString;
|
|
364
375
|
previousVersion: z.ZodNullable<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/release/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,UAAU,CAAC;AAEnD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,qDAAqD,CAAC;AAI1F;;;;;GAKG;AACH,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/release/plan.ts"],"names":[],"mappings":"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"}
|
package/dist/release/plan.js
CHANGED
|
@@ -46,7 +46,15 @@ export const RELEASE_PLAN_SCHEMA_URL = 'https://cleocode.io/schemas/release-plan
|
|
|
46
46
|
* Includes `rc` in addition to the legacy `latest|beta|alpha` triple to allow
|
|
47
47
|
* release candidates without conflating with `beta` per SPEC §6.1.
|
|
48
48
|
*/
|
|
49
|
-
export const RELEASE_CHANNEL = ['latest', 'beta', 'alpha', 'rc'];
|
|
49
|
+
export const RELEASE_CHANNEL = ['latest', 'beta', 'alpha', 'rc', 'canary'];
|
|
50
|
+
/** Persisted prerelease classification, shared by planning and reconciliation. */
|
|
51
|
+
export const RELEASE_PERSISTED_CHANNEL = {
|
|
52
|
+
latest: 'latest',
|
|
53
|
+
beta: 'beta',
|
|
54
|
+
alpha: 'dev',
|
|
55
|
+
rc: 'beta',
|
|
56
|
+
canary: 'beta',
|
|
57
|
+
};
|
|
50
58
|
/**
|
|
51
59
|
* Version-scheme variants. `calver-suffix` is the hotfix grammar
|
|
52
60
|
* `vYYYY.M.DD.N` per SPEC R-402.
|
|
@@ -307,7 +315,8 @@ export const ReleasePlanMetaSchema = z
|
|
|
307
315
|
* - R-305: `platformMatrix[]` non-empty.
|
|
308
316
|
* - R-306: deterministic re-validation inside `open` and `reconcile`.
|
|
309
317
|
*/
|
|
310
|
-
export const ReleasePlanSchema = z
|
|
318
|
+
export const ReleasePlanSchema = z
|
|
319
|
+
.object({
|
|
311
320
|
/** Schema URL for this plan version. */
|
|
312
321
|
$schema: z.string().optional(),
|
|
313
322
|
/** Requested version string (e.g. "v2026.6.0"). Includes the leading `v`. */
|
|
@@ -328,6 +337,8 @@ export const ReleasePlanSchema = z.object({
|
|
|
328
337
|
epicId: NonEmptyString.nullable(),
|
|
329
338
|
/** Release-kind classification. */
|
|
330
339
|
releaseKind: ReleaseKindSchema,
|
|
340
|
+
/** Explicit hooks-v1 stable promotion; ordinary and hotfix releases are exempt. */
|
|
341
|
+
hooksV1Promotion: z.boolean().optional(),
|
|
331
342
|
/** ISO-8601 timestamp the plan was written. */
|
|
332
343
|
createdAt: Iso8601,
|
|
333
344
|
/** Identifier of the actor that wrote the plan (agent name or operator). */
|
|
@@ -361,6 +372,18 @@ export const ReleasePlanSchema = z.object({
|
|
|
361
372
|
status: ReleaseStatusSchema,
|
|
362
373
|
/** Informational / forward-compat metadata. */
|
|
363
374
|
meta: ReleasePlanMetaSchema.optional(),
|
|
375
|
+
})
|
|
376
|
+
.superRefine((plan, context) => {
|
|
377
|
+
const canaryVersion = /-canary\.\d+$/.test(plan.resolvedVersion);
|
|
378
|
+
const canarySuffix = /-canary(?:\.|$)/.test(plan.resolvedVersion);
|
|
379
|
+
if ((plan.channel === 'canary' && !canaryVersion) ||
|
|
380
|
+
(plan.channel !== 'canary' && canarySuffix)) {
|
|
381
|
+
context.addIssue({
|
|
382
|
+
code: 'custom',
|
|
383
|
+
path: ['channel'],
|
|
384
|
+
message: 'Numbered canary versions require the independent canary channel.',
|
|
385
|
+
});
|
|
386
|
+
}
|
|
364
387
|
});
|
|
365
388
|
// ─── Parse helper ────────────────────────────────────────────────────────────
|
|
366
389
|
/**
|
package/dist/release/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/release/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,OAAO,CAAC;AAEnD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,kDAAkD,CAAC;AAE1F,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/release/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -103,8 +103,8 @@ describe('Release plan constant tuples', () => {
|
|
|
103
103
|
]);
|
|
104
104
|
expect(RELEASE_STATUS).toHaveLength(8);
|
|
105
105
|
});
|
|
106
|
-
it('exports the
|
|
107
|
-
expect(new Set(RELEASE_CHANNEL)).toEqual(new Set(['latest', 'beta', 'alpha', 'rc']));
|
|
106
|
+
it('exports the independent canary channel alongside existing channels', () => {
|
|
107
|
+
expect(new Set(RELEASE_CHANNEL)).toEqual(new Set(['latest', 'beta', 'alpha', 'rc', 'canary']));
|
|
108
108
|
});
|
|
109
109
|
it('exports the 3-scheme set including calver-suffix', () => {
|
|
110
110
|
expect(RELEASE_SCHEME).toContain('calver');
|
|
@@ -202,9 +202,20 @@ describe('ReleasePlanSchema — status FSM', () => {
|
|
|
202
202
|
// ─── Enum rejection per field ────────────────────────────────────────────────
|
|
203
203
|
describe('ReleasePlanSchema — enum rejection', () => {
|
|
204
204
|
it('rejects unknown channel', () => {
|
|
205
|
-
const plan = { ...makeValidPlan(), channel: '
|
|
205
|
+
const plan = { ...makeValidPlan(), channel: 'rolling' };
|
|
206
206
|
expect(() => parseReleasePlan(plan)).toThrow();
|
|
207
207
|
});
|
|
208
|
+
it('accepts numbered canaries and rejects channel/version disagreement', () => {
|
|
209
|
+
const plan = {
|
|
210
|
+
...makeValidPlan(),
|
|
211
|
+
version: 'v2026.10.6-canary.1',
|
|
212
|
+
resolvedVersion: 'v2026.10.6-canary.1',
|
|
213
|
+
channel: 'canary',
|
|
214
|
+
};
|
|
215
|
+
expect(parseReleasePlan(plan).channel).toBe('canary');
|
|
216
|
+
expect(() => parseReleasePlan({ ...plan, channel: 'latest' })).toThrow();
|
|
217
|
+
expect(() => parseReleasePlan({ ...plan, resolvedVersion: 'v2026.10.6-canary' })).toThrow();
|
|
218
|
+
});
|
|
208
219
|
it('rejects unknown scheme', () => {
|
|
209
220
|
const plan = { ...makeValidPlan(), scheme: 'rolling' };
|
|
210
221
|
expect(() => parseReleasePlan(plan)).toThrow();
|