@fourier-labs/harbour-contracts 0.42.0 → 0.44.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/contract-release.json +23 -17
- package/dist/gen-ts/builder-input-proposal.d.ts +36 -0
- package/dist/gen-ts/builder-input-proposal.js +3 -0
- package/dist/gen-ts/contract-release.d.ts +6 -6
- package/dist/gen-ts/contract-release.js +6 -6
- package/dist/gen-ts/deploy-request.d.ts +1 -1
- package/dist/gen-ts/deployment-continuation.d.ts +19 -0
- package/dist/gen-ts/deployment-continuation.js +3 -0
- package/dist/gen-ts/deployment-status-response.d.ts +30 -1
- package/dist/gen-ts/index.d.ts +3 -0
- package/dist/gen-ts/index.js +3 -0
- package/dist/gen-ts/sanitized-binding-evidence.d.ts +1 -1
- package/dist/gen-ts/secret-reference.d.ts +1 -1
- package/dist/gen-ts/transform-parked-result.d.ts +15 -0
- package/dist/gen-ts/transform-parked-result.js +3 -0
- package/gen-ts/builder-input-proposal.ts +40 -0
- package/gen-ts/contract-release.ts +6 -6
- package/gen-ts/deploy-request.ts +1 -1
- package/gen-ts/deployment-continuation.ts +22 -0
- package/gen-ts/deployment-status-response.ts +31 -0
- package/gen-ts/index.ts +3 -0
- package/gen-ts/sanitized-binding-evidence.ts +1 -1
- package/gen-ts/secret-reference.ts +1 -1
- package/gen-ts/transform-parked-result.ts +18 -0
- package/package.json +1 -1
- package/schema/builder-input-proposal.schema.json +73 -0
- package/schema/deploy-request.schema.json +1 -1
- package/schema/deployment-continuation.schema.json +39 -0
- package/schema/deployment-status-response.schema.json +50 -1
- package/schema/sanitized-binding-evidence.schema.json +1 -1
- package/schema/secret-reference.schema.json +1 -1
- package/schema/transform-parked-result.schema.json +26 -0
package/contract-release.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "harbour.contract-release/1.0",
|
|
3
|
-
"repositoryVersion": "0.
|
|
4
|
-
"publishVersion": "0.
|
|
5
|
-
"publishTag": "v0.
|
|
6
|
-
"schemasDigest": "sha256:
|
|
3
|
+
"repositoryVersion": "0.44.0.0",
|
|
4
|
+
"publishVersion": "0.44.0",
|
|
5
|
+
"publishTag": "v0.44.0",
|
|
6
|
+
"schemasDigest": "sha256:a83a5d65514b34668ba1aea770f626585b24d07c7bfcc5bb68cf6382a8b6ff6c",
|
|
7
7
|
"aiFixturesDigest": "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6",
|
|
8
|
-
"generatedGoDigest": "sha256:
|
|
9
|
-
"generatedTypeScriptDigest": "sha256:
|
|
8
|
+
"generatedGoDigest": "sha256:95f1e5ec97ac5883d529af6442fa58ae3a59bb3e00d4b5852d03049e23cb7f4d",
|
|
9
|
+
"generatedTypeScriptDigest": "sha256:49048cdb1c9ec15433f6cb7d4fa42d6f39a5fc5da48c9d2c3b4b2ef0c2b39b3d",
|
|
10
10
|
"generatedExclusions": {
|
|
11
11
|
"gen-go/contract_release.go": "contains the generated aggregate digests (self-reference)",
|
|
12
12
|
"gen-ts/contract-release.ts": "contains the generated aggregate digests (self-reference)"
|
|
@@ -33,26 +33,29 @@
|
|
|
33
33
|
"schema/api-error-response.schema.json": "sha256:3d43d5bdf0b59c944e20509d832e6776c3ecdba4d6c245a9118bbe52062a8304",
|
|
34
34
|
"schema/artifact-contract.schema.json": "sha256:8047b461a1c6d07bbe867a259c57bdf5cc0fdf282cf842ec7b683a9e93713b10",
|
|
35
35
|
"schema/binding-classification-subject.schema.json": "sha256:a8825ce652e7e00a18759c4249bd5bcd0cae552dd58440513f867e87f685133c",
|
|
36
|
+
"schema/builder-input-proposal.schema.json": "sha256:fe85cffa6d76b1e1effe1f5d75525f8fe0e1eaa3be4a304e491aa23ad72c0e72",
|
|
36
37
|
"schema/data-dependency.schema.json": "sha256:89ba8481ccabc935e7dab5d13871c985839a751ad1586710d8382a15e1f3340c",
|
|
37
38
|
"schema/data-grant.schema.json": "sha256:e640553831ecc1c01cc9a37fe388b84d0ffeaa0d0050e63712b48f65fa437c8a",
|
|
38
39
|
"schema/data-source.schema.json": "sha256:aec8d2497dae9a91886a3df9f6fbbdb3d3fcab44b14fbcacc3f5e99b827f1bba",
|
|
39
|
-
"schema/deploy-request.schema.json": "sha256:
|
|
40
|
+
"schema/deploy-request.schema.json": "sha256:32531e21983cdfeec511f8b4cddd4dad6530cd90e4e9fe147225d78d138b6198",
|
|
40
41
|
"schema/deploy-response.schema.json": "sha256:09064948abdbba7022738285d802ed44648a16ddc2a5b8c2eeb170ae19a66aeb",
|
|
42
|
+
"schema/deployment-continuation.schema.json": "sha256:55b6945439f2c91cd851dfe4bc9484e67a64091b7763b2d8267354b4a8bfae8c",
|
|
41
43
|
"schema/deployment-environment.schema.json": "sha256:3f1325d5579b3fc47d02c83b6ac0657108909b1dfb901f68203c9c8b668c2ef4",
|
|
42
44
|
"schema/deployment-source.schema.json": "sha256:256988b1efbfc90bd0e1ae31a2c5d69b20ef1e4471dc24c9f9aa759278270fbe",
|
|
43
45
|
"schema/deployment-status-failure.schema.json": "sha256:7cc021d53a07c63b66eb48146d33e8875b64faf77ee927b235795469eb9a1559",
|
|
44
46
|
"schema/deployment-status-request.schema.json": "sha256:1f9f87adc947a252b53b61f71ae17f8c1b8fbc1166f31301a043d11ac257dc66",
|
|
45
|
-
"schema/deployment-status-response.schema.json": "sha256:
|
|
47
|
+
"schema/deployment-status-response.schema.json": "sha256:e591edf08d9dcfce7551b69b449be13927668309b2ebc3b064370f3cfef0385b",
|
|
46
48
|
"schema/env-bindings.schema.json": "sha256:ae09bc4ca5508afa698ef854a59153c4c6f99b07017b48cb9b07ce05abad12f2",
|
|
47
49
|
"schema/error-category.enum.json": "sha256:2268b8a00dfa1f1ab6db7650c117028247fca980d4a23aa5969ce30b76692be9",
|
|
48
50
|
"schema/error-envelope.schema.json": "sha256:75dccda7dd16fdf8435deda53fc7dbcdc109b65114617a17f11763010c656f90",
|
|
49
51
|
"schema/kvs-routing-entry.schema.json": "sha256:b75f3a5dfa93a428b2764e03222b66b6ef2bed980f8bac8ffac54afdf3526bc5",
|
|
50
52
|
"schema/promotion-request.schema.json": "sha256:00e96dfd8ddbdba88ea222941d43f3609ff6c815a79e34f6705cab458101c969",
|
|
51
53
|
"schema/promotion-response.schema.json": "sha256:4129712d2e29d6ef21d93d4bd0bacfd60ada3f2ee0ade852824e64346b817634",
|
|
52
|
-
"schema/sanitized-binding-evidence.schema.json": "sha256:
|
|
53
|
-
"schema/secret-reference.schema.json": "sha256:
|
|
54
|
+
"schema/sanitized-binding-evidence.schema.json": "sha256:1191ab88e2764df927e5f17837674cebebe068d480da2b2fdb390e589f96b51f",
|
|
55
|
+
"schema/secret-reference.schema.json": "sha256:db4e3c2c6a2dbd72d7ea0f9c91cb3b2343a7e67b601996c6818b2ef08e440895",
|
|
54
56
|
"schema/security-scan-input.schema.json": "sha256:83502dffb3c07ac2e0698928e6dc123f454fc667d4aacd336bcad6944ef2ac3d",
|
|
55
57
|
"schema/security-verdict.schema.json": "sha256:ec3c2d5c9df3601aeed0909b36c7f427469c7f0eeb3295c5809b96d09bf3fc26",
|
|
58
|
+
"schema/transform-parked-result.schema.json": "sha256:11729980d4c89d4a9e18f5f213232cd3359739c85626b36c20c2a37ba794c9af",
|
|
56
59
|
"schema/transform-report.schema.json": "sha256:5943c90ad7a8b473119dde5879c59ed384d5dc19253b90bc3507dd1ff4dd9abe",
|
|
57
60
|
"schema/version-state.schema.json": "sha256:3b190007e2f8e3821c41ef11c6f5b226da7d5a18d34d4077f4618004846fd444",
|
|
58
61
|
"schema/well-defined-app-manifest.schema.json": "sha256:75a06690411880e670f133066a7a469150b53560b9dafa2f066a04485e4b50a0"
|
|
@@ -93,8 +96,8 @@
|
|
|
93
96
|
"gen-go/contracts_test.go": "sha256:56376287cb1548be1b35ab4c65d6f0b558c5d34885f7a47cb3d9e8d786607bf5",
|
|
94
97
|
"gen-go/doc.go": "sha256:c17bc2d39ed175ce7105c68305f8ae7152f659eb7cd187ecceee7698eb3a65dd",
|
|
95
98
|
"gen-go/error_category.go": "sha256:b2ddea22dcfa030f1a45e721e635485b0bd816cf1f38e7654628a653f5ed4583",
|
|
96
|
-
"gen-go/schema_documents.go": "sha256:
|
|
97
|
-
"gen-go/types.go": "sha256:
|
|
99
|
+
"gen-go/schema_documents.go": "sha256:bc8a5119241953827affa45588a1492fdf1e74bb9119564202baf424596d0d86",
|
|
100
|
+
"gen-go/types.go": "sha256:94c0936e557e6d43d9468793428fe5f2fc737668f51fe0fc058755c219be0c9f",
|
|
98
101
|
"gen-go/version_state.go": "sha256:4ef8abb126414c0025cf2c59bc9c79a74ef4a2ff89e8f316cbf05acc872371c1"
|
|
99
102
|
},
|
|
100
103
|
"generatedTypeScript": {
|
|
@@ -122,29 +125,32 @@
|
|
|
122
125
|
"gen-ts/artifact-contract.ts": "sha256:4a6dc6d2caaeed4bb2066cc8a333e6e09e5a0d4745e0b1038293d54ab9403aeb",
|
|
123
126
|
"gen-ts/binding-classification-digest-helper.ts": "sha256:40fc7d85b4c3f3ffc5caf7d7950c62d013c83ee42058c7453b2100d95817f167",
|
|
124
127
|
"gen-ts/binding-classification-subject.ts": "sha256:c409a3fd7b942b50419632c51d9a79474fb30d6374bdc79c0e25c73618e800c3",
|
|
128
|
+
"gen-ts/builder-input-proposal.ts": "sha256:b0108c3787873d3cf1a39f00967379418a6766275d3474cfa55f5a9d93ead174",
|
|
125
129
|
"gen-ts/data-dependency.ts": "sha256:0572c31d7ae9088eccc104eee1a205bf176d1d6dacfaf0f290d666024e284966",
|
|
126
130
|
"gen-ts/data-grant.ts": "sha256:2358579d8aa1e57b01a6f2b0eacce5531e7f21ef226404c9809925365e0d6155",
|
|
127
131
|
"gen-ts/data-source.ts": "sha256:77d6bb3b0eaa355789c5d97dd1f548734add6950329dc69549350b8d17c8d582",
|
|
128
|
-
"gen-ts/deploy-request.ts": "sha256:
|
|
132
|
+
"gen-ts/deploy-request.ts": "sha256:0214faa8be6680f0bfc117d5ce67c1a59fcc18bd0ea4bc840e03e7d051fa9ab6",
|
|
129
133
|
"gen-ts/deploy-response.ts": "sha256:364d9f1acf32e491498237cdd3f402d5f8e102f208db7748034f4ec68c6a6137",
|
|
134
|
+
"gen-ts/deployment-continuation.ts": "sha256:cc9f63af4d0da5086a79103789e4f043783b75b4ed11c6512f044439a551a79c",
|
|
130
135
|
"gen-ts/deployment-environment.ts": "sha256:bbd6eec3a1631b13a8de6e6b95081696f7be01d0bd2bf1b7a9e3a1db809a727c",
|
|
131
136
|
"gen-ts/deployment-source.ts": "sha256:8ccb55aaa7260eb6d19a00987d6a20a4b514e343564da13f27cd7fee8013500a",
|
|
132
137
|
"gen-ts/deployment-status-failure.ts": "sha256:6da2e6eb2f708efa51d416a1ec50f71ea7967cf9be9f93e7ce2e4760dae2cfe3",
|
|
133
138
|
"gen-ts/deployment-status-request.ts": "sha256:7ddccd07ab9f6d0821903a291ab35f903bb055727e03a058b99165ec048f6483",
|
|
134
|
-
"gen-ts/deployment-status-response.ts": "sha256:
|
|
139
|
+
"gen-ts/deployment-status-response.ts": "sha256:91f99eaa875968934bf9f920aa2bb3f7e8d4b0c24b18536a1e5c7bb739608a51",
|
|
135
140
|
"gen-ts/env-bindings.ts": "sha256:a167cfe9842352c9fec6412ff0d82bda9c5f5c3a1af541bd5c27a57f54fd0941",
|
|
136
141
|
"gen-ts/error-category-registry.ts": "sha256:7466a502c0723a77db825cdeaa9556a244201b55d9b7acbf2c098e9e84351df1",
|
|
137
142
|
"gen-ts/error-category.ts": "sha256:9bda89180c3b740c9aa8be466216592e8ca9d0d368c274333edf6ea5c45afd8e",
|
|
138
143
|
"gen-ts/error-envelope.ts": "sha256:4457309be794f9d4fc0cf62530cc2d442c007bac9ae84aff66df099cc9e40310",
|
|
139
|
-
"gen-ts/index.ts": "sha256:
|
|
144
|
+
"gen-ts/index.ts": "sha256:2e8ea8a7b31e5db66cc733c286b18ac4589fdf712f5ca0f481dfbbce9f425b4e",
|
|
140
145
|
"gen-ts/kvs-routing-entry.ts": "sha256:d92e85ee9f257d77850d1d3aac9438e2055f38084ff84a48fcedae239d47d4ca",
|
|
141
146
|
"gen-ts/promotion-request.ts": "sha256:9db88cef67f777a16bac628039ec3f582acb9e8cfff6fb592b30d0a0e55abc68",
|
|
142
147
|
"gen-ts/promotion-response.ts": "sha256:f1c9cafac96faeb02a443a31786f67714e818f38d90108e7af41958396524d6f",
|
|
143
148
|
"gen-ts/sanitized-binding-digest-helper.ts": "sha256:c47d7fdc20500e2e72c23fe39ecdd610fc397c47fcba51335ebec3c380fe6872",
|
|
144
|
-
"gen-ts/sanitized-binding-evidence.ts": "sha256:
|
|
145
|
-
"gen-ts/secret-reference.ts": "sha256:
|
|
149
|
+
"gen-ts/sanitized-binding-evidence.ts": "sha256:f3fb7b1d7d2e0929eb0ea981eaf32db3104010647185f6ae59f67167d42538a9",
|
|
150
|
+
"gen-ts/secret-reference.ts": "sha256:731fbcde7315cb4128d5b01bdbe6e6f248f13c7ad8dea04a3a4e927ac4890198",
|
|
146
151
|
"gen-ts/security-scan-input.ts": "sha256:b31f048be04c34b40f49d3b3ba53277e473cd435ae9216ba3a3b4dac69fb5685",
|
|
147
152
|
"gen-ts/security-verdict.ts": "sha256:fea950cddbd12fe0218e2573c9a29c6748d56612a464559f1e6d688fa97f68c7",
|
|
153
|
+
"gen-ts/transform-parked-result.ts": "sha256:6279e27cee8d75c29f3ede45580fef1daa0ca300867a78e43ead8a7689ec613f",
|
|
148
154
|
"gen-ts/transform-report.ts": "sha256:a4f7f895342cd63048b2add63393a1251abb3e97f057b00e3ebd3f96fd1a510e",
|
|
149
155
|
"gen-ts/version-state-machine.ts": "sha256:c67af3e86ac306743345b850dfd3ae5201c19d10c40e2c149cf8c38258320d5f",
|
|
150
156
|
"gen-ts/version-state.ts": "sha256:a835112930299e7b593a1b8810b7414f6c9e809da2092306c743128170a3b702",
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export type BuilderInputQuestion = {
|
|
2
|
+
id: string;
|
|
3
|
+
kind: 'secret' | 'text' | 'choice';
|
|
4
|
+
format?: 'plain' | 'email' | 'url' | 'integer';
|
|
5
|
+
prompt: string;
|
|
6
|
+
whyNeeded: string;
|
|
7
|
+
effect: string;
|
|
8
|
+
secretName?: string;
|
|
9
|
+
/**
|
|
10
|
+
* @minItems 2
|
|
11
|
+
* @maxItems 5
|
|
12
|
+
*/
|
|
13
|
+
options?: string[];
|
|
14
|
+
/**
|
|
15
|
+
* @minItems 1
|
|
16
|
+
* @maxItems 8
|
|
17
|
+
*/
|
|
18
|
+
evidence: {
|
|
19
|
+
path: string;
|
|
20
|
+
line?: number;
|
|
21
|
+
finding: string;
|
|
22
|
+
}[];
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Bounded, value-free proposal emitted when sequential preview transformation cannot continue without builder-owned input. The deployment control plane remains authoritative and applies eligibility checks before exposing it.
|
|
26
|
+
*/
|
|
27
|
+
export interface BuilderInputProposal {
|
|
28
|
+
outcome: 'needs_input';
|
|
29
|
+
summary: string;
|
|
30
|
+
outstandingWork: string;
|
|
31
|
+
/**
|
|
32
|
+
* @minItems 1
|
|
33
|
+
* @maxItems 5
|
|
34
|
+
*/
|
|
35
|
+
questions: BuilderInputQuestion[];
|
|
36
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export declare const ContractRepositoryVersion: "0.
|
|
2
|
-
export declare const ContractPublishVersion: "0.
|
|
3
|
-
export declare const ContractPublishTag: "v0.
|
|
4
|
-
export declare const ContractSchemasDigest: "sha256:
|
|
1
|
+
export declare const ContractRepositoryVersion: "0.44.0.0";
|
|
2
|
+
export declare const ContractPublishVersion: "0.44.0";
|
|
3
|
+
export declare const ContractPublishTag: "v0.44.0";
|
|
4
|
+
export declare const ContractSchemasDigest: "sha256:a83a5d65514b34668ba1aea770f626585b24d07c7bfcc5bb68cf6382a8b6ff6c";
|
|
5
5
|
export declare const ContractAiFixturesDigest: "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6";
|
|
6
|
-
export declare const ContractGeneratedGoDigest: "sha256:
|
|
7
|
-
export declare const ContractGeneratedTypeScriptDigest: "sha256:
|
|
6
|
+
export declare const ContractGeneratedGoDigest: "sha256:95f1e5ec97ac5883d529af6442fa58ae3a59bb3e00d4b5852d03049e23cb7f4d";
|
|
7
|
+
export declare const ContractGeneratedTypeScriptDigest: "sha256:49048cdb1c9ec15433f6cb7d4fa42d6f39a5fc5da48c9d2c3b4b2ef0c2b39b3d";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
|
-
export const ContractRepositoryVersion = "0.
|
|
4
|
-
export const ContractPublishVersion = "0.
|
|
5
|
-
export const ContractPublishTag = "v0.
|
|
6
|
-
export const ContractSchemasDigest = "sha256:
|
|
3
|
+
export const ContractRepositoryVersion = "0.44.0.0";
|
|
4
|
+
export const ContractPublishVersion = "0.44.0";
|
|
5
|
+
export const ContractPublishTag = "v0.44.0";
|
|
6
|
+
export const ContractSchemasDigest = "sha256:a83a5d65514b34668ba1aea770f626585b24d07c7bfcc5bb68cf6382a8b6ff6c";
|
|
7
7
|
export const ContractAiFixturesDigest = "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6";
|
|
8
|
-
export const ContractGeneratedGoDigest = "sha256:
|
|
9
|
-
export const ContractGeneratedTypeScriptDigest = "sha256:
|
|
8
|
+
export const ContractGeneratedGoDigest = "sha256:95f1e5ec97ac5883d529af6442fa58ae3a59bb3e00d4b5852d03049e23cb7f4d";
|
|
9
|
+
export const ContractGeneratedTypeScriptDigest = "sha256:49048cdb1c9ec15433f6cb7d4fa42d6f39a5fc5da48c9d2c3b4b2ef0c2b39b3d";
|
|
@@ -7,7 +7,7 @@ export type DeployRequestEnvironmentBinding = {
|
|
|
7
7
|
*/
|
|
8
8
|
name: string;
|
|
9
9
|
/**
|
|
10
|
-
* secretref URI resolved at runtime; the value never appears in the request.
|
|
10
|
+
* secretref URI resolved at runtime; the value never appears in the request. Multiple unique names may point to the same app-owned secret-bundle reference; each name selects its exact JSON key.
|
|
11
11
|
*/
|
|
12
12
|
secretRef?: string;
|
|
13
13
|
/**
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal immutable reference admitting one child deployment from a parked sequential-preview input request. It contains references and accepted non-secret answers, never credential values.
|
|
3
|
+
*/
|
|
4
|
+
export interface DeploymentContinuation {
|
|
5
|
+
resumeFrom: {
|
|
6
|
+
parentVersionId: string;
|
|
7
|
+
requestId: string;
|
|
8
|
+
checkpointKey: string;
|
|
9
|
+
checkpointSha256: string;
|
|
10
|
+
answerRevision: number;
|
|
11
|
+
/**
|
|
12
|
+
* @minItems 1
|
|
13
|
+
* @maxItems 5
|
|
14
|
+
*/
|
|
15
|
+
answers: {
|
|
16
|
+
[k: string]: unknown;
|
|
17
|
+
}[];
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
export type StatusInputQuestion = {
|
|
2
|
+
id: string;
|
|
3
|
+
kind: 'secret' | 'text' | 'choice';
|
|
4
|
+
format?: 'plain' | 'email' | 'url' | 'integer';
|
|
5
|
+
prompt: string;
|
|
6
|
+
whyNeeded: string;
|
|
7
|
+
effect: string;
|
|
8
|
+
secretName?: string;
|
|
9
|
+
/**
|
|
10
|
+
* @minItems 2
|
|
11
|
+
* @maxItems 5
|
|
12
|
+
*/
|
|
13
|
+
options?: string[];
|
|
14
|
+
};
|
|
1
15
|
/**
|
|
2
16
|
* 200 OK body returned by GET /v1/tenants/{tenant}/apps/{app}/deployments/{versionId}. It describes that exact immutable version; newer deployments cannot change which record this response represents.
|
|
3
17
|
*/
|
|
@@ -7,7 +21,7 @@ export interface DeploymentStatusResponse {
|
|
|
7
21
|
tenant: string;
|
|
8
22
|
app: string;
|
|
9
23
|
environment: 'preview' | 'prod';
|
|
10
|
-
status: 'QUEUED' | 'ANALYZING' | 'TRANSFORMING' | 'VALIDATING' | 'BUILDING' | 'VERIFYING' | 'GATING' | 'LIVE' | 'AWAITING-PROMOTION' | 'PROMOTING' | 'FAILED' | 'STALE';
|
|
24
|
+
status: 'QUEUED' | 'ANALYZING' | 'TRANSFORMING' | 'WAITING_INPUT' | 'VALIDATING' | 'BUILDING' | 'VERIFYING' | 'GATING' | 'LIVE' | 'AWAITING-PROMOTION' | 'PROMOTING' | 'FAILED' | 'STALE';
|
|
11
25
|
message: string;
|
|
12
26
|
branch: string;
|
|
13
27
|
commit: string;
|
|
@@ -26,6 +40,7 @@ export interface DeploymentStatusResponse {
|
|
|
26
40
|
*/
|
|
27
41
|
progress?: StatusProgressEvent[];
|
|
28
42
|
deployTarget?: StatusDeployTarget;
|
|
43
|
+
pendingInput?: StatusPendingInput;
|
|
29
44
|
}
|
|
30
45
|
export interface StatusFailureProjection {
|
|
31
46
|
category: string;
|
|
@@ -83,3 +98,17 @@ export interface StatusDeployTarget {
|
|
|
83
98
|
*/
|
|
84
99
|
region: string;
|
|
85
100
|
}
|
|
101
|
+
export interface StatusPendingInput {
|
|
102
|
+
requestId: string;
|
|
103
|
+
revision: number;
|
|
104
|
+
/**
|
|
105
|
+
* @minItems 1
|
|
106
|
+
* @maxItems 5
|
|
107
|
+
*/
|
|
108
|
+
questions: StatusInputQuestion[];
|
|
109
|
+
waitMode: 'active' | 'parking' | 'parked';
|
|
110
|
+
warmUntil?: string;
|
|
111
|
+
createdAt: string;
|
|
112
|
+
continuationVersionId?: string;
|
|
113
|
+
statusUrl?: string;
|
|
114
|
+
}
|
package/dist/gen-ts/index.d.ts
CHANGED
|
@@ -22,12 +22,14 @@ export * from './api-error-response.js';
|
|
|
22
22
|
export * from './artifact-contract.js';
|
|
23
23
|
export * from './binding-classification-digest-helper.js';
|
|
24
24
|
export * from './binding-classification-subject.js';
|
|
25
|
+
export * from './builder-input-proposal.js';
|
|
25
26
|
export * from './contract-release.js';
|
|
26
27
|
export * from './data-dependency.js';
|
|
27
28
|
export * from './data-grant.js';
|
|
28
29
|
export * from './data-source.js';
|
|
29
30
|
export * from './deploy-request.js';
|
|
30
31
|
export * from './deploy-response.js';
|
|
32
|
+
export * from './deployment-continuation.js';
|
|
31
33
|
export * from './deployment-environment.js';
|
|
32
34
|
export * from './deployment-source.js';
|
|
33
35
|
export * from './deployment-status-failure.js';
|
|
@@ -45,6 +47,7 @@ export * from './sanitized-binding-evidence.js';
|
|
|
45
47
|
export * from './secret-reference.js';
|
|
46
48
|
export * from './security-scan-input.js';
|
|
47
49
|
export * from './security-verdict.js';
|
|
50
|
+
export * from './transform-parked-result.js';
|
|
48
51
|
export * from './transform-report.js';
|
|
49
52
|
export * from './version-state-machine.js';
|
|
50
53
|
export * from './version-state.js';
|
package/dist/gen-ts/index.js
CHANGED
|
@@ -24,12 +24,14 @@ export * from './api-error-response.js';
|
|
|
24
24
|
export * from './artifact-contract.js';
|
|
25
25
|
export * from './binding-classification-digest-helper.js';
|
|
26
26
|
export * from './binding-classification-subject.js';
|
|
27
|
+
export * from './builder-input-proposal.js';
|
|
27
28
|
export * from './contract-release.js';
|
|
28
29
|
export * from './data-dependency.js';
|
|
29
30
|
export * from './data-grant.js';
|
|
30
31
|
export * from './data-source.js';
|
|
31
32
|
export * from './deploy-request.js';
|
|
32
33
|
export * from './deploy-response.js';
|
|
34
|
+
export * from './deployment-continuation.js';
|
|
33
35
|
export * from './deployment-environment.js';
|
|
34
36
|
export * from './deployment-source.js';
|
|
35
37
|
export * from './deployment-status-failure.js';
|
|
@@ -47,6 +49,7 @@ export * from './sanitized-binding-evidence.js';
|
|
|
47
49
|
export * from './secret-reference.js';
|
|
48
50
|
export * from './security-scan-input.js';
|
|
49
51
|
export * from './security-verdict.js';
|
|
52
|
+
export * from './transform-parked-result.js';
|
|
50
53
|
export * from './transform-report.js';
|
|
51
54
|
export * from './version-state-machine.js';
|
|
52
55
|
export * from './version-state.js';
|
|
@@ -9,7 +9,7 @@ export type SanitizedRuntimeBinding = {
|
|
|
9
9
|
*/
|
|
10
10
|
value?: string;
|
|
11
11
|
/**
|
|
12
|
-
* Value-free app secret, app-scoped minted data-source credential, or approved tenant-source credential reference. Integration and provider credential references are outside this contract.
|
|
12
|
+
* Value-free app secret, shared app-secret bundle, app-scoped minted data-source credential, or approved tenant-source credential reference. A binding name selects the same-named JSON field when this is an app secret-bundle reference. Integration and provider credential references are outside this contract.
|
|
13
13
|
*/
|
|
14
14
|
secretRef?: string;
|
|
15
15
|
};
|
|
@@ -28,7 +28,7 @@ export interface SecretReference {
|
|
|
28
28
|
*/
|
|
29
29
|
ownerBuilderId?: string;
|
|
30
30
|
/**
|
|
31
|
-
* secretref URI of the stored value. The value itself never crosses this boundary.
|
|
31
|
+
* secretref URI of the stored value. Builder app-secret rows may share one app-owned secret-bundle reference; each row's name selects its JSON key. The value itself never crosses this boundary.
|
|
32
32
|
*/
|
|
33
33
|
secretRef: string;
|
|
34
34
|
status: SecretReferenceStatus;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discriminated result returned by sequential preview after it has durably checkpointed settled transformation work and must stop for builder input. It is not a successful transformation report.
|
|
3
|
+
*/
|
|
4
|
+
export interface TransformParkedResult {
|
|
5
|
+
outcome: 'parked';
|
|
6
|
+
requestId: string;
|
|
7
|
+
checkpoint: {
|
|
8
|
+
schema: 'harbour.transform-checkpoint/1.0';
|
|
9
|
+
key: string;
|
|
10
|
+
sha256: string;
|
|
11
|
+
};
|
|
12
|
+
answerRevision: number;
|
|
13
|
+
remainingActiveMs: number;
|
|
14
|
+
outstandingWork: string;
|
|
15
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
|
+
|
|
4
|
+
export type BuilderInputQuestion = {
|
|
5
|
+
id: string;
|
|
6
|
+
kind: 'secret' | 'text' | 'choice';
|
|
7
|
+
format?: 'plain' | 'email' | 'url' | 'integer';
|
|
8
|
+
prompt: string;
|
|
9
|
+
whyNeeded: string;
|
|
10
|
+
effect: string;
|
|
11
|
+
secretName?: string;
|
|
12
|
+
/**
|
|
13
|
+
* @minItems 2
|
|
14
|
+
* @maxItems 5
|
|
15
|
+
*/
|
|
16
|
+
options?: string[];
|
|
17
|
+
/**
|
|
18
|
+
* @minItems 1
|
|
19
|
+
* @maxItems 8
|
|
20
|
+
*/
|
|
21
|
+
evidence: {
|
|
22
|
+
path: string;
|
|
23
|
+
line?: number;
|
|
24
|
+
finding: string;
|
|
25
|
+
}[];
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Bounded, value-free proposal emitted when sequential preview transformation cannot continue without builder-owned input. The deployment control plane remains authoritative and applies eligibility checks before exposing it.
|
|
30
|
+
*/
|
|
31
|
+
export interface BuilderInputProposal {
|
|
32
|
+
outcome: 'needs_input';
|
|
33
|
+
summary: string;
|
|
34
|
+
outstandingWork: string;
|
|
35
|
+
/**
|
|
36
|
+
* @minItems 1
|
|
37
|
+
* @maxItems 5
|
|
38
|
+
*/
|
|
39
|
+
questions: BuilderInputQuestion[];
|
|
40
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
3
|
|
|
4
|
-
export const ContractRepositoryVersion = "0.
|
|
5
|
-
export const ContractPublishVersion = "0.
|
|
6
|
-
export const ContractPublishTag = "v0.
|
|
7
|
-
export const ContractSchemasDigest = "sha256:
|
|
4
|
+
export const ContractRepositoryVersion = "0.44.0.0" as const;
|
|
5
|
+
export const ContractPublishVersion = "0.44.0" as const;
|
|
6
|
+
export const ContractPublishTag = "v0.44.0" as const;
|
|
7
|
+
export const ContractSchemasDigest = "sha256:a83a5d65514b34668ba1aea770f626585b24d07c7bfcc5bb68cf6382a8b6ff6c" as const;
|
|
8
8
|
export const ContractAiFixturesDigest = "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6" as const;
|
|
9
|
-
export const ContractGeneratedGoDigest = "sha256:
|
|
10
|
-
export const ContractGeneratedTypeScriptDigest = "sha256:
|
|
9
|
+
export const ContractGeneratedGoDigest = "sha256:95f1e5ec97ac5883d529af6442fa58ae3a59bb3e00d4b5852d03049e23cb7f4d" as const;
|
|
10
|
+
export const ContractGeneratedTypeScriptDigest = "sha256:49048cdb1c9ec15433f6cb7d4fa42d6f39a5fc5da48c9d2c3b4b2ef0c2b39b3d" as const;
|
package/gen-ts/deploy-request.ts
CHANGED
|
@@ -10,7 +10,7 @@ export type DeployRequestEnvironmentBinding = {
|
|
|
10
10
|
*/
|
|
11
11
|
name: string;
|
|
12
12
|
/**
|
|
13
|
-
* secretref URI resolved at runtime; the value never appears in the request.
|
|
13
|
+
* secretref URI resolved at runtime; the value never appears in the request. Multiple unique names may point to the same app-owned secret-bundle reference; each name selects its exact JSON key.
|
|
14
14
|
*/
|
|
15
15
|
secretRef?: string;
|
|
16
16
|
/**
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Internal immutable reference admitting one child deployment from a parked sequential-preview input request. It contains references and accepted non-secret answers, never credential values.
|
|
6
|
+
*/
|
|
7
|
+
export interface DeploymentContinuation {
|
|
8
|
+
resumeFrom: {
|
|
9
|
+
parentVersionId: string;
|
|
10
|
+
requestId: string;
|
|
11
|
+
checkpointKey: string;
|
|
12
|
+
checkpointSha256: string;
|
|
13
|
+
answerRevision: number;
|
|
14
|
+
/**
|
|
15
|
+
* @minItems 1
|
|
16
|
+
* @maxItems 5
|
|
17
|
+
*/
|
|
18
|
+
answers: {
|
|
19
|
+
[k: string]: unknown;
|
|
20
|
+
}[];
|
|
21
|
+
};
|
|
22
|
+
}
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
3
|
|
|
4
|
+
export type StatusInputQuestion = {
|
|
5
|
+
id: string;
|
|
6
|
+
kind: 'secret' | 'text' | 'choice';
|
|
7
|
+
format?: 'plain' | 'email' | 'url' | 'integer';
|
|
8
|
+
prompt: string;
|
|
9
|
+
whyNeeded: string;
|
|
10
|
+
effect: string;
|
|
11
|
+
secretName?: string;
|
|
12
|
+
/**
|
|
13
|
+
* @minItems 2
|
|
14
|
+
* @maxItems 5
|
|
15
|
+
*/
|
|
16
|
+
options?: string[];
|
|
17
|
+
};
|
|
18
|
+
|
|
4
19
|
/**
|
|
5
20
|
* 200 OK body returned by GET /v1/tenants/{tenant}/apps/{app}/deployments/{versionId}. It describes that exact immutable version; newer deployments cannot change which record this response represents.
|
|
6
21
|
*/
|
|
@@ -14,6 +29,7 @@ export interface DeploymentStatusResponse {
|
|
|
14
29
|
| 'QUEUED'
|
|
15
30
|
| 'ANALYZING'
|
|
16
31
|
| 'TRANSFORMING'
|
|
32
|
+
| 'WAITING_INPUT'
|
|
17
33
|
| 'VALIDATING'
|
|
18
34
|
| 'BUILDING'
|
|
19
35
|
| 'VERIFYING'
|
|
@@ -41,6 +57,7 @@ export interface DeploymentStatusResponse {
|
|
|
41
57
|
*/
|
|
42
58
|
progress?: StatusProgressEvent[];
|
|
43
59
|
deployTarget?: StatusDeployTarget;
|
|
60
|
+
pendingInput?: StatusPendingInput;
|
|
44
61
|
}
|
|
45
62
|
export interface StatusFailureProjection {
|
|
46
63
|
category: string;
|
|
@@ -98,3 +115,17 @@ export interface StatusDeployTarget {
|
|
|
98
115
|
*/
|
|
99
116
|
region: string;
|
|
100
117
|
}
|
|
118
|
+
export interface StatusPendingInput {
|
|
119
|
+
requestId: string;
|
|
120
|
+
revision: number;
|
|
121
|
+
/**
|
|
122
|
+
* @minItems 1
|
|
123
|
+
* @maxItems 5
|
|
124
|
+
*/
|
|
125
|
+
questions: StatusInputQuestion[];
|
|
126
|
+
waitMode: 'active' | 'parking' | 'parked';
|
|
127
|
+
warmUntil?: string;
|
|
128
|
+
createdAt: string;
|
|
129
|
+
continuationVersionId?: string;
|
|
130
|
+
statusUrl?: string;
|
|
131
|
+
}
|
package/gen-ts/index.ts
CHANGED
|
@@ -25,12 +25,14 @@ export * from './api-error-response.js';
|
|
|
25
25
|
export * from './artifact-contract.js';
|
|
26
26
|
export * from './binding-classification-digest-helper.js';
|
|
27
27
|
export * from './binding-classification-subject.js';
|
|
28
|
+
export * from './builder-input-proposal.js';
|
|
28
29
|
export * from './contract-release.js';
|
|
29
30
|
export * from './data-dependency.js';
|
|
30
31
|
export * from './data-grant.js';
|
|
31
32
|
export * from './data-source.js';
|
|
32
33
|
export * from './deploy-request.js';
|
|
33
34
|
export * from './deploy-response.js';
|
|
35
|
+
export * from './deployment-continuation.js';
|
|
34
36
|
export * from './deployment-environment.js';
|
|
35
37
|
export * from './deployment-source.js';
|
|
36
38
|
export * from './deployment-status-failure.js';
|
|
@@ -48,6 +50,7 @@ export * from './sanitized-binding-evidence.js';
|
|
|
48
50
|
export * from './secret-reference.js';
|
|
49
51
|
export * from './security-scan-input.js';
|
|
50
52
|
export * from './security-verdict.js';
|
|
53
|
+
export * from './transform-parked-result.js';
|
|
51
54
|
export * from './transform-report.js';
|
|
52
55
|
export * from './version-state-machine.js';
|
|
53
56
|
export * from './version-state.js';
|
|
@@ -12,7 +12,7 @@ export type SanitizedRuntimeBinding = {
|
|
|
12
12
|
*/
|
|
13
13
|
value?: string;
|
|
14
14
|
/**
|
|
15
|
-
* Value-free app secret, app-scoped minted data-source credential, or approved tenant-source credential reference. Integration and provider credential references are outside this contract.
|
|
15
|
+
* Value-free app secret, shared app-secret bundle, app-scoped minted data-source credential, or approved tenant-source credential reference. A binding name selects the same-named JSON field when this is an app secret-bundle reference. Integration and provider credential references are outside this contract.
|
|
16
16
|
*/
|
|
17
17
|
secretRef?: string;
|
|
18
18
|
};
|
|
@@ -32,7 +32,7 @@ export interface SecretReference {
|
|
|
32
32
|
*/
|
|
33
33
|
ownerBuilderId?: string;
|
|
34
34
|
/**
|
|
35
|
-
* secretref URI of the stored value. The value itself never crosses this boundary.
|
|
35
|
+
* secretref URI of the stored value. Builder app-secret rows may share one app-owned secret-bundle reference; each row's name selects its JSON key. The value itself never crosses this boundary.
|
|
36
36
|
*/
|
|
37
37
|
secretRef: string;
|
|
38
38
|
status: SecretReferenceStatus;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Discriminated result returned by sequential preview after it has durably checkpointed settled transformation work and must stop for builder input. It is not a successful transformation report.
|
|
6
|
+
*/
|
|
7
|
+
export interface TransformParkedResult {
|
|
8
|
+
outcome: 'parked';
|
|
9
|
+
requestId: string;
|
|
10
|
+
checkpoint: {
|
|
11
|
+
schema: 'harbour.transform-checkpoint/1.0';
|
|
12
|
+
key: string;
|
|
13
|
+
sha256: string;
|
|
14
|
+
};
|
|
15
|
+
answerRevision: number;
|
|
16
|
+
remainingActiveMs: number;
|
|
17
|
+
outstandingWork: string;
|
|
18
|
+
}
|
package/package.json
CHANGED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://schemas.harbour.dev/builder-input-proposal.schema.json",
|
|
4
|
+
"title": "BuilderInputProposal",
|
|
5
|
+
"description": "Bounded, value-free proposal emitted when sequential preview transformation cannot continue without builder-owned input. The deployment control plane remains authoritative and applies eligibility checks before exposing it.",
|
|
6
|
+
"x-go-embed": true,
|
|
7
|
+
"type": "object",
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"required": ["outcome", "summary", "outstandingWork", "questions"],
|
|
10
|
+
"properties": {
|
|
11
|
+
"outcome": { "const": "needs_input" },
|
|
12
|
+
"summary": { "type": "string", "minLength": 1, "maxLength": 500 },
|
|
13
|
+
"outstandingWork": { "type": "string", "minLength": 1, "maxLength": 2000 },
|
|
14
|
+
"questions": {
|
|
15
|
+
"type": "array",
|
|
16
|
+
"minItems": 1,
|
|
17
|
+
"maxItems": 5,
|
|
18
|
+
"items": { "$ref": "#/definitions/BuilderInputQuestion" }
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"definitions": {
|
|
22
|
+
"BuilderInputQuestion": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"additionalProperties": false,
|
|
25
|
+
"required": ["id", "kind", "prompt", "whyNeeded", "effect", "evidence"],
|
|
26
|
+
"properties": {
|
|
27
|
+
"id": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,63}$" },
|
|
28
|
+
"kind": { "type": "string", "enum": ["secret", "text", "choice"] },
|
|
29
|
+
"format": { "type": "string", "enum": ["plain", "email", "url", "integer"] },
|
|
30
|
+
"prompt": { "type": "string", "minLength": 1, "maxLength": 300 },
|
|
31
|
+
"whyNeeded": { "type": "string", "minLength": 1, "maxLength": 500 },
|
|
32
|
+
"effect": { "type": "string", "minLength": 1, "maxLength": 500 },
|
|
33
|
+
"secretName": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]{0,254}$" },
|
|
34
|
+
"options": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"minItems": 2,
|
|
37
|
+
"maxItems": 5,
|
|
38
|
+
"uniqueItems": true,
|
|
39
|
+
"items": { "type": "string", "minLength": 1, "maxLength": 200 }
|
|
40
|
+
},
|
|
41
|
+
"evidence": {
|
|
42
|
+
"type": "array",
|
|
43
|
+
"minItems": 1,
|
|
44
|
+
"maxItems": 8,
|
|
45
|
+
"items": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"required": ["path", "finding"],
|
|
49
|
+
"properties": {
|
|
50
|
+
"path": { "type": "string", "minLength": 1, "maxLength": 512 },
|
|
51
|
+
"line": { "type": "integer", "minimum": 1 },
|
|
52
|
+
"finding": { "type": "string", "minLength": 1, "maxLength": 500 }
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"allOf": [
|
|
58
|
+
{
|
|
59
|
+
"if": { "properties": { "kind": { "const": "secret" } } },
|
|
60
|
+
"then": { "required": ["secretName"], "not": { "required": ["options"] } }
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"if": { "properties": { "kind": { "const": "choice" } } },
|
|
64
|
+
"then": { "required": ["options"], "not": { "required": ["secretName"] } }
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"if": { "properties": { "kind": { "const": "text" } } },
|
|
68
|
+
"then": { "not": { "anyOf": [{ "required": ["secretName"] }, { "required": ["options"] }] } }
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"secretRef": {
|
|
96
96
|
"type": "string",
|
|
97
97
|
"pattern": "^secretref://[A-Za-z0-9][A-Za-z0-9/_.:-]*$",
|
|
98
|
-
"description": "secretref URI resolved at runtime; the value never appears in the request."
|
|
98
|
+
"description": "secretref URI resolved at runtime; the value never appears in the request. Multiple unique names may point to the same app-owned secret-bundle reference; each name selects its exact JSON key."
|
|
99
99
|
},
|
|
100
100
|
"value": {
|
|
101
101
|
"type": "string",
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://schemas.harbour.dev/deployment-continuation.schema.json",
|
|
4
|
+
"title": "DeploymentContinuation",
|
|
5
|
+
"description": "Internal immutable reference admitting one child deployment from a parked sequential-preview input request. It contains references and accepted non-secret answers, never credential values.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["resumeFrom"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"resumeFrom": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"additionalProperties": false,
|
|
13
|
+
"required": ["parentVersionId", "requestId", "checkpointKey", "checkpointSha256", "answerRevision", "answers"],
|
|
14
|
+
"properties": {
|
|
15
|
+
"parentVersionId": { "type": "string", "pattern": "^[^#]+#[^#]+#preview#[0-9]{6,}$" },
|
|
16
|
+
"requestId": { "type": "string", "minLength": 1, "maxLength": 128 },
|
|
17
|
+
"checkpointKey": { "type": "string", "minLength": 1, "maxLength": 1024 },
|
|
18
|
+
"checkpointSha256": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" },
|
|
19
|
+
"answerRevision": { "type": "integer", "minimum": 1 },
|
|
20
|
+
"answers": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"minItems": 1,
|
|
23
|
+
"maxItems": 5,
|
|
24
|
+
"items": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"additionalProperties": false,
|
|
27
|
+
"required": ["questionId"],
|
|
28
|
+
"properties": {
|
|
29
|
+
"questionId": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,63}$" },
|
|
30
|
+
"value": { "type": "string", "maxLength": 2000 },
|
|
31
|
+
"secretRef": { "type": "string", "pattern": "^secretref://[A-Za-z0-9][A-Za-z0-9/_.:-]*$" }
|
|
32
|
+
},
|
|
33
|
+
"oneOf": [{ "required": ["value"] }, { "required": ["secretRef"] }]
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"status": {
|
|
27
27
|
"type": "string",
|
|
28
|
-
"enum": ["QUEUED", "ANALYZING", "TRANSFORMING", "VALIDATING", "BUILDING", "VERIFYING", "GATING", "LIVE", "AWAITING-PROMOTION", "PROMOTING", "FAILED", "STALE"]
|
|
28
|
+
"enum": ["QUEUED", "ANALYZING", "TRANSFORMING", "WAITING_INPUT", "VALIDATING", "BUILDING", "VERIFYING", "GATING", "LIVE", "AWAITING-PROMOTION", "PROMOTING", "FAILED", "STALE"]
|
|
29
29
|
},
|
|
30
30
|
"message": {
|
|
31
31
|
"type": "string",
|
|
@@ -66,9 +66,58 @@
|
|
|
66
66
|
},
|
|
67
67
|
"deployTarget": {
|
|
68
68
|
"$ref": "#/definitions/StatusDeployTarget"
|
|
69
|
+
},
|
|
70
|
+
"pendingInput": {
|
|
71
|
+
"$ref": "#/definitions/StatusPendingInput"
|
|
69
72
|
}
|
|
70
73
|
},
|
|
71
74
|
"definitions": {
|
|
75
|
+
"StatusPendingInput": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"additionalProperties": false,
|
|
78
|
+
"required": ["requestId", "revision", "questions", "waitMode", "createdAt"],
|
|
79
|
+
"properties": {
|
|
80
|
+
"requestId": { "type": "string", "minLength": 1, "maxLength": 128 },
|
|
81
|
+
"revision": { "type": "integer", "minimum": 0 },
|
|
82
|
+
"questions": {
|
|
83
|
+
"type": "array",
|
|
84
|
+
"minItems": 1,
|
|
85
|
+
"maxItems": 5,
|
|
86
|
+
"items": { "$ref": "#/definitions/StatusInputQuestion" }
|
|
87
|
+
},
|
|
88
|
+
"waitMode": { "type": "string", "enum": ["active", "parking", "parked"] },
|
|
89
|
+
"warmUntil": { "type": "string", "format": "date-time" },
|
|
90
|
+
"createdAt": { "type": "string", "format": "date-time" },
|
|
91
|
+
"continuationVersionId": { "type": "string", "pattern": "^[^#]+#[^#]+#preview#[0-9]{6,}$" },
|
|
92
|
+
"statusUrl": { "type": "string", "pattern": "^/v1/tenants/[^/]+/apps/[^/]+/deployments/[^/]+$" }
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"StatusInputQuestion": {
|
|
96
|
+
"type": "object",
|
|
97
|
+
"additionalProperties": false,
|
|
98
|
+
"required": ["id", "kind", "prompt", "whyNeeded", "effect"],
|
|
99
|
+
"properties": {
|
|
100
|
+
"id": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,63}$" },
|
|
101
|
+
"kind": { "type": "string", "enum": ["secret", "text", "choice"] },
|
|
102
|
+
"format": { "type": "string", "enum": ["plain", "email", "url", "integer"] },
|
|
103
|
+
"prompt": { "type": "string", "minLength": 1, "maxLength": 300 },
|
|
104
|
+
"whyNeeded": { "type": "string", "minLength": 1, "maxLength": 500 },
|
|
105
|
+
"effect": { "type": "string", "minLength": 1, "maxLength": 500 },
|
|
106
|
+
"secretName": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]{0,254}$" },
|
|
107
|
+
"options": {
|
|
108
|
+
"type": "array",
|
|
109
|
+
"minItems": 2,
|
|
110
|
+
"maxItems": 5,
|
|
111
|
+
"uniqueItems": true,
|
|
112
|
+
"items": { "type": "string", "minLength": 1, "maxLength": 200 }
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"allOf": [
|
|
116
|
+
{ "if": { "properties": { "kind": { "const": "secret" } } }, "then": { "required": ["secretName"], "not": { "required": ["options"] } } },
|
|
117
|
+
{ "if": { "properties": { "kind": { "const": "choice" } } }, "then": { "required": ["options"], "not": { "required": ["secretName"] } } },
|
|
118
|
+
{ "if": { "properties": { "kind": { "const": "text" } } }, "then": { "not": { "anyOf": [{ "required": ["secretName"] }, { "required": ["options"] }] } } }
|
|
119
|
+
]
|
|
120
|
+
},
|
|
72
121
|
"StatusDeployTarget": {
|
|
73
122
|
"type": "object",
|
|
74
123
|
"additionalProperties": false,
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"properties": {
|
|
81
81
|
"kind": { "type": "string", "enum": ["configuration", "secret"] },
|
|
82
82
|
"value": { "type": "string", "minLength": 1, "maxLength": 4096, "description": "Approved non-secret configuration literal. Provider-credential values are never approved or persisted here." },
|
|
83
|
-
"secretRef": { "type": "string", "pattern": "^secretref://tenant/[A-Za-z0-9._-]+/(?:app/[A-Za-z0-9._-]+/(?:secret/[A-Z][A-Z0-9_]{0,127}|source/[a-z0-9][a-z0-9._-]{0,63})|source/[a-z0-9][a-z0-9._-]{0,63})$", "description": "Value-free app secret, app-scoped minted data-source credential, or approved tenant-source credential reference. Integration and provider credential references are outside this contract." }
|
|
83
|
+
"secretRef": { "type": "string", "pattern": "^secretref://tenant/[A-Za-z0-9._-]+/(?:app/[A-Za-z0-9._-]+/(?:secret/[A-Z][A-Z0-9_]{0,127}|secret-bundle|source/[a-z0-9][a-z0-9._-]{0,63})|source/[a-z0-9][a-z0-9._-]{0,63})$", "description": "Value-free app secret, shared app-secret bundle, app-scoped minted data-source credential, or approved tenant-source credential reference. A binding name selects the same-named JSON field when this is an app secret-bundle reference. Integration and provider credential references are outside this contract." }
|
|
84
84
|
},
|
|
85
85
|
"allOf": [
|
|
86
86
|
{
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"secretRef": {
|
|
32
32
|
"type": "string",
|
|
33
33
|
"pattern": "^secretref://[A-Za-z0-9][A-Za-z0-9/_.:-]*$",
|
|
34
|
-
"description": "secretref URI of the stored value. The value itself never crosses this boundary."
|
|
34
|
+
"description": "secretref URI of the stored value. Builder app-secret rows may share one app-owned secret-bundle reference; each row's name selects its JSON key. The value itself never crosses this boundary."
|
|
35
35
|
},
|
|
36
36
|
"status": {
|
|
37
37
|
"$ref": "#/definitions/SecretReferenceStatus"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://schemas.harbour.dev/transform-parked-result.schema.json",
|
|
4
|
+
"title": "TransformParkedResult",
|
|
5
|
+
"description": "Discriminated result returned by sequential preview after it has durably checkpointed settled transformation work and must stop for builder input. It is not a successful transformation report.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["outcome", "requestId", "checkpoint", "answerRevision", "remainingActiveMs", "outstandingWork"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"outcome": { "const": "parked" },
|
|
11
|
+
"requestId": { "type": "string", "minLength": 1, "maxLength": 128 },
|
|
12
|
+
"checkpoint": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"additionalProperties": false,
|
|
15
|
+
"required": ["schema", "key", "sha256"],
|
|
16
|
+
"properties": {
|
|
17
|
+
"schema": { "const": "harbour.transform-checkpoint/1.0" },
|
|
18
|
+
"key": { "type": "string", "minLength": 1, "maxLength": 1024 },
|
|
19
|
+
"sha256": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"answerRevision": { "type": "integer", "minimum": 0 },
|
|
23
|
+
"remainingActiveMs": { "type": "integer", "minimum": 0, "maximum": 86400000 },
|
|
24
|
+
"outstandingWork": { "type": "string", "minLength": 1, "maxLength": 2000 }
|
|
25
|
+
}
|
|
26
|
+
}
|