@zaip-ai/cli 5.6.0 → 5.8.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/dist/services/adapter-hook-sources.d.ts +1 -0
- package/dist/services/adapter-hook-sources.d.ts.map +1 -1
- package/dist/services/adapter-hook-sources.js +1 -0
- package/dist/services/adapter-hook-sources.js.map +1 -1
- package/dist/services/adapters.d.ts +1 -1
- package/dist/services/adapters.d.ts.map +1 -1
- package/dist/services/adapters.js +3 -2
- package/dist/services/adapters.js.map +1 -1
- package/dist/services/codex-hook-activation.d.ts +1 -1
- package/dist/services/codex-hook-activation.d.ts.map +1 -1
- package/dist/services/codex-hook-activation.js +1 -0
- package/dist/services/codex-hook-activation.js.map +1 -1
- package/dist/services/codex-pre-tool-dependencies.test-support.d.ts.map +1 -1
- package/dist/services/codex-pre-tool-dependencies.test-support.js +2 -0
- package/dist/services/codex-pre-tool-dependencies.test-support.js.map +1 -1
- package/dist/services/codex-pre-tool-hook-template.js +1 -1
- package/dist/services/codex-pre-tool-release-review-template.d.ts +2 -0
- package/dist/services/codex-pre-tool-release-review-template.d.ts.map +1 -0
- package/dist/services/codex-pre-tool-release-review-template.js +98 -0
- package/dist/services/codex-pre-tool-release-review-template.js.map +1 -0
- package/dist/services/codex-pre-tool-support-template.d.ts.map +1 -1
- package/dist/services/codex-pre-tool-support-template.js +12 -30
- package/dist/services/codex-pre-tool-support-template.js.map +1 -1
- package/package.json +1 -1
- package/templates/.agents/README-ENG.md +4 -0
- package/templates/.agents/README.md +4 -0
- package/templates/.agents/config/agents/discovery.json +1 -1
- package/templates/.agents/dashboard/.zaip-managed.json +30 -30
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-B5YEOEej.js → DashboardHelpDialog-C-J7yI0E.js} +5 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{PricingSettingsDialog--irvqUl5.js → PricingSettingsDialog-6Lx9UnYo.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{ProjectSettingsPage-DxyjL1__.js → ProjectSettingsPage-B6Dvz-Je.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-BWEEMNV-.js → TraceabilityWorkspace-YRJB7Gxh.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{dashboard-localization-C45x75cf.js → dashboard-localization-CCXDvXwr.js} +4 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{index-DGUs5bRP.js → index-CYc50ABs.js} +2 -2
- package/templates/.agents/dashboard/apps/frontend/dist/index.html +1 -1
- package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
- package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
- package/templates/.agents/dashboard/modules/operations/package.json +1 -1
- package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
- package/templates/.agents/dashboard/packages/branding/package.json +1 -1
- package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
- package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +16 -16
- package/templates/.agents/dashboard/packages/local-runtime/package.json +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/server.mjs +21 -21
- package/templates/.agents/dashboard/packages/ui/package.json +1 -1
- package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
- package/templates/.agents/design/.zaip-managed.json +3 -3
- package/templates/.agents/design/apps/catalog/package.json +1 -1
- package/templates/.agents/design/packages/local-runtime/package.json +1 -1
- package/templates/.agents/requirements/autonomous-assurance.md +1 -1
- package/templates/.agents/requirements/cloud-hostinger-autonomy.md +1 -1
- package/templates/.agents/requirements/comparative-audit.md +1 -1
- package/templates/.agents/requirements/context-engine.md +1 -1
- package/templates/.agents/requirements/cost-observability.md +1 -1
- package/templates/.agents/requirements/dashboard-launch.md +1 -1
- package/templates/.agents/requirements/data-export.md +1 -1
- package/templates/.agents/requirements/design-system.md +1 -1
- package/templates/.agents/requirements/execution-engine.md +1 -1
- package/templates/.agents/requirements/kanban-dashboard.md +1 -1
- package/templates/.agents/requirements/model-orchestration.md +1 -1
- package/templates/.agents/requirements/public-distribution.md +1 -1
- package/templates/.agents/requirements/software-architecture.md +1 -1
- package/templates/.agents/requirements/strategic-improvements.md +1 -1
- package/templates/.agents/requirements/work-lifecycle.md +1 -1
- package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
- package/templates/.agents/runtime/VERSION +1 -1
- package/templates/.agents/runtime/bin/zaip.mjs +156 -78
- package/templates/.agents/runtime/checksums.sha256 +5 -5
- package/templates/.agents/runtime/manifest.json +1 -1
- package/templates/.agents/runtime/provenance.json +4 -4
- package/templates/.agents/runtime/sbom.cdx.json +1 -1
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-contract.mjs +16 -6
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-publication-intent.test.mjs +49 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/framework-identity.mjs +30 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +1 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs +5 -12
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.test.mjs +12 -1
- package/templates/.agents/skills/zaip-skill-lifecycle-closure/references/post-publication-task-first.md +2 -0
- package/templates/.agents/skills/zaip-skill-task/references/commit-policy.md +1 -1
- package/templates/.agents/zaip-aios/VERSION +1 -1
- package/templates/template-manifest.json +74 -70
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
b146bd0c7c60b1ab43c4f71e0b1d2262c6df6da6f7053a0425f834ccb77a6b48 LICENSE
|
|
2
2
|
bc02cba77e8d51e5c580f43668863dc868eda66f1ff663bfaa49fcf3ca16320e THIRD_PARTY_NOTICES.md
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
9de5986a86cd88a2fe559a78a5c5f3fd6856a825c52217de5e892c9015bbac86 VERSION
|
|
4
|
+
e0a1498512dc8b585db8d5b3c36db485f45efc777c765df5a350728cd6511a05 bin/zaip.mjs
|
|
5
|
+
56cf499ac0c627572d27e91fb78bd104a77af948448e7329dd4255c048911a36 manifest.json
|
|
6
6
|
7f89219d7c567c82a51679ad136d84364bded7ac659492537e125d33b1d58a7a migrations/001-layout-v1.json
|
|
7
7
|
5f8c48b286d0b44d8fbb57a9a5d009a8a500439aa3148d750b8f193f72995c9f migrations/002-layout-v2.json
|
|
8
8
|
2bd34b2f5c253a2167d9addaf1994167308ac0bb4fec22a794c8a5b488205278 pnpm-lock.sha256
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
94e932ec43eb12d4e9e1dfd625878a2cc8a62325f252b6f8712478ea5806d25e provenance.json
|
|
10
|
+
ce29b875af132dd4217bd80777146386aa7fe9cde264707ee455bdc926a8926a sbom.cdx.json
|
|
11
11
|
b3ffedf9e146be802a15b4009f33e031dec3071ca1525e12c67606fd964a3067 schemas/contracts.schema.json
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"schema_version": 1,
|
|
3
3
|
"statement_type": "self_reported_build_integrity",
|
|
4
4
|
"authenticity": "unverified",
|
|
5
|
-
"version": "5.
|
|
5
|
+
"version": "5.8.0",
|
|
6
6
|
"source_origin": "zaip-aios:local-build",
|
|
7
7
|
"lockfile_sha256": "b5e11351951654d41aa78dc858d43990a12964ba4051a070613ac8b11bc73a27",
|
|
8
|
-
"sbom_sha256": "
|
|
9
|
-
"runtime_sha256": "
|
|
10
|
-
"statement_sha256": "
|
|
8
|
+
"sbom_sha256": "ce29b875af132dd4217bd80777146386aa7fe9cde264707ee455bdc926a8926a",
|
|
9
|
+
"runtime_sha256": "c9c9412a99ca95e60a9fee09f04f6064716fbfbf623c5f5c64afd3cb45f714d2",
|
|
10
|
+
"statement_sha256": "c5c21b617fc3ab611036450068c7fcb48a0e9a08a95fcf00b477b3bb016d30b0"
|
|
11
11
|
}
|
|
@@ -77,6 +77,15 @@ export function requestedDeployment(request) {
|
|
|
77
77
|
"A bounded current human request is required",
|
|
78
78
|
);
|
|
79
79
|
const text = normalize(request);
|
|
80
|
+
// Provenance and explicit human holds constrain every authorization route.
|
|
81
|
+
const quotedOrReported =
|
|
82
|
+
/[`"'“”]/.test(request) || /\b(?:disse|citou|exemplo|quoted|said)\b/.test(text);
|
|
83
|
+
const approvalHold =
|
|
84
|
+
/\b(?:ate|quando|se|apos|depois|aguard\w*|esper\w*|so|somente|apenas|depend\w*|condicion\w*)\b[^.!?]*\b(?:revis\w*|autor\w*|aprov\w*|confirm\w*)\b/.test(
|
|
85
|
+
text,
|
|
86
|
+
);
|
|
87
|
+
if (quotedOrReported || approvalHold)
|
|
88
|
+
return { authorized: false, reason: "not-a-direct-deployment-request" };
|
|
80
89
|
// A separate, literal imperative paragraph can authorize implementation and
|
|
81
90
|
// publication together. Do not rewrite the user's request or accept reported,
|
|
82
91
|
// quoted, conditional or merely mentioned publication language.
|
|
@@ -93,10 +102,10 @@ export function requestedDeployment(request) {
|
|
|
93
102
|
text,
|
|
94
103
|
) &&
|
|
95
104
|
request
|
|
96
|
-
.split(/\r?\n
|
|
105
|
+
.split(/\r?\n|(?<=[.!])\s+/)
|
|
97
106
|
.map(normalize)
|
|
98
107
|
.some((line) =>
|
|
99
|
-
/^(?:(?:faca|realize|execute)\s+(?:as mudancas necessarias|os ajustes necessarios|as melhorias|todos os testes)(?:\s+e\s+(?:todos os testes|as validacoes|os testes))?|pode implementar)\s+e\s+(?:publique|publica|publicar)\s+(?:(?:em|como)\s+)?(?:uma\s+|a\s+)?(?:nova|proxima)\s+versao[.!]?$/.test(
|
|
108
|
+
/^(?:(?:(?:faca|realize|execute)\s+(?:as mudancas necessarias|os ajustes necessarios|as melhorias|todos os testes)(?:\s+e\s+(?:todos os testes|as validacoes|os testes))?|pode implementar)\s+e\s+|depois\s+|apos\s+os\s+ajustes\s+e\s+(?:os\s+)?testes\s+)(?:publique|publica|publicar)\s+(?:(?:em|como)\s+)?(?:uma\s+|a\s+)?(?:nova|proxima)\s+versao[.!]?$/.test(
|
|
100
109
|
line,
|
|
101
110
|
),
|
|
102
111
|
);
|
|
@@ -119,9 +128,10 @@ export function requestedDeployment(request) {
|
|
|
119
128
|
/^primeiro passo entao e corrigir\b[^\n?]*\bfazer merge\b[^\n?]*,\s*fazer deploy\b/.test(
|
|
120
129
|
withoutCourtesy,
|
|
121
130
|
) && !/\b(?:nao|sem)\s+fazer deploy\b/.test(withoutCourtesy);
|
|
122
|
-
const releaseDirective =
|
|
123
|
-
|
|
124
|
-
|
|
131
|
+
const releaseDirective =
|
|
132
|
+
/^(?:resolva essas pendencias,\s*)?preciso que crie (?:uma |a )?nova versao\s+v?\d+\.\d+\b/.test(
|
|
133
|
+
withoutCourtesy,
|
|
134
|
+
);
|
|
125
135
|
const proceedToVersion =
|
|
126
136
|
/^(?:pode\s+)?(?:seguir|continue|avancar)\s+para\s+(?:a\s+)?v\d+\.\d+\b/.test(withoutCourtesy);
|
|
127
137
|
const finalAdjustmentsToPublish =
|
|
@@ -163,7 +173,7 @@ export function requestedDeployment(request) {
|
|
|
163
173
|
finalAdjustmentsToPublish ||
|
|
164
174
|
implementAndPublish ||
|
|
165
175
|
shortPublicationVersion !== null;
|
|
166
|
-
if (!direct || /\?/.test(text) || waitsForAuthorization)
|
|
176
|
+
if (!direct || (/\?/.test(text) && !implementAndPublish) || waitsForAuthorization)
|
|
167
177
|
return { authorized: false, reason: "not-a-direct-deployment-request" };
|
|
168
178
|
const noRelease =
|
|
169
179
|
/\b(?:sem|nao)\s+(?:(?:quero|criar|fazer|publicar|publique|crie|faca)\s+)?(?:(?:um|uma|o|a|novo|nova)\s+)*(?:release|nova versao|proxima versao|versao)\b/.test(
|
package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-publication-intent.test.mjs
CHANGED
|
@@ -11,6 +11,39 @@ const builder = {
|
|
|
11
11
|
workspaceVersion: "4.5.0",
|
|
12
12
|
};
|
|
13
13
|
const input = (request, identity) => ({ request, identity });
|
|
14
|
+
|
|
15
|
+
test("accepts publication after technical adjustments and tests, preserving human approval conditions", () => {
|
|
16
|
+
const directive = "Após os ajustes e testes publique uma nova versão";
|
|
17
|
+
const request = `A nota ficou pior? Faça os ajustes necessários. ${directive}`;
|
|
18
|
+
assert.equal(resolveDeployment(input(request, builder)).mode, "release");
|
|
19
|
+
for (const rejected of [
|
|
20
|
+
`Ele disse: ${directive}`,
|
|
21
|
+
`"${directive}"`,
|
|
22
|
+
`${directive}?`,
|
|
23
|
+
`${directive} se eu aprovar`,
|
|
24
|
+
`${directive}. Aguarde minha autorização.`,
|
|
25
|
+
`Não publique. ${directive}`,
|
|
26
|
+
directive.replace("publique", "não publique"),
|
|
27
|
+
"Após minha revisão e autorização publique uma nova versão",
|
|
28
|
+
])
|
|
29
|
+
assert.equal(resolveDeployment(input(rejected, builder)).mode, "none", rejected);
|
|
30
|
+
});
|
|
31
|
+
test("recognizes a separate publication sentence and preserves approval conditions", () => {
|
|
32
|
+
const request =
|
|
33
|
+
"Pode executar tudo e dê uma atenção especial sobre eficiência e prevençao de retrabalho. Quero nota 9. Depois publique a nova versão";
|
|
34
|
+
assert.equal(resolveDeployment(input(request, builder)).mode, "release");
|
|
35
|
+
for (const rejected of [
|
|
36
|
+
`Ele disse: ${request}`,
|
|
37
|
+
`Exemplo: ${request}`,
|
|
38
|
+
`"${request}"`,
|
|
39
|
+
`${request}?`,
|
|
40
|
+
`${request}. Aguarde minha aprovação.`,
|
|
41
|
+
`${request} se eu autorizar`,
|
|
42
|
+
`Não publique. ${request}`,
|
|
43
|
+
`Quando eu confirmar. ${request}`,
|
|
44
|
+
])
|
|
45
|
+
assert.equal(resolveDeployment(input(rejected, builder)).mode, "none", rejected);
|
|
46
|
+
});
|
|
14
47
|
test("recognizes the current implementation and publication request without inventing authority", () => {
|
|
15
48
|
const directive = "pode implementar e publica como nova versão";
|
|
16
49
|
assert.equal(resolveDeployment(input(directive, builder)).mode, "release");
|
|
@@ -54,3 +87,19 @@ test("implementation plus publication accepts a literal paragraph but not quotat
|
|
|
54
87
|
])
|
|
55
88
|
assert.equal(resolveDeployment(input(rejected, builder)).mode, "none", rejected);
|
|
56
89
|
});
|
|
90
|
+
|
|
91
|
+
test("all publication routes reject human holds and quoted or reported authority", () => {
|
|
92
|
+
for (const request of [
|
|
93
|
+
"Publique a v5.8. Aguarde minha autorização.",
|
|
94
|
+
"Publique a v5.8. Espere minha aprovação.",
|
|
95
|
+
"Ele disse: preciso que crie uma nova versão v5.8",
|
|
96
|
+
'"Preciso que crie uma nova versão v5.8"',
|
|
97
|
+
"Preciso que crie uma nova versão v5.8. Só publique com minha confirmação.",
|
|
98
|
+
])
|
|
99
|
+
assert.equal(resolveDeployment(input(request, builder)).mode, "none", request);
|
|
100
|
+
assert.equal(resolveDeployment(input("Publique a v5.8", builder)).npm_publication, true);
|
|
101
|
+
assert.equal(
|
|
102
|
+
resolveDeployment(input("Preciso que crie uma nova versão v5.8", builder)).mode,
|
|
103
|
+
"release",
|
|
104
|
+
);
|
|
105
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
|
|
4
|
+
export function isFrameworkRepository(repository) {
|
|
5
|
+
const manifest = resolve(repository, "package.json");
|
|
6
|
+
if (!existsSync(manifest) || !existsSync(resolve(repository, "packages/core/src/config.ts")))
|
|
7
|
+
return false;
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(readFileSync(manifest, "utf8")).name === "@zaip-ai/aios";
|
|
10
|
+
} catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function isCanonicalMainBuilder(repository, git) {
|
|
16
|
+
if (!isFrameworkRepository(repository)) return false;
|
|
17
|
+
try {
|
|
18
|
+
const origin = git(repository, ["remote", "get-url", "origin"]).trim();
|
|
19
|
+
const cli = JSON.parse(
|
|
20
|
+
readFileSync(resolve(repository, "public-cli/packages/cli/package.json"), "utf8"),
|
|
21
|
+
);
|
|
22
|
+
return (
|
|
23
|
+
/^(?:git@github\.com:|https:\/\/github\.com\/|ssh:\/\/git@github\.com\/)zaip-ai\/zaip-aios(?:\.git)?$/.test(
|
|
24
|
+
origin,
|
|
25
|
+
) && cli.name === "@zaip-ai/cli"
|
|
26
|
+
);
|
|
27
|
+
} catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs
CHANGED
|
@@ -15,6 +15,7 @@ const managedDeployFiles = [
|
|
|
15
15
|
"skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.test.mjs",
|
|
16
16
|
"skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs",
|
|
17
17
|
"skills/zaip-skill-github-deploy/scripts/preflight.mjs",
|
|
18
|
+
"skills/zaip-skill-github-deploy/scripts/framework-identity.mjs",
|
|
18
19
|
"skills/zaip-skill-github-deploy/scripts/preflight.test.mjs",
|
|
19
20
|
"skills/zaip-skill-github-deploy/scripts/deploy-contract.mjs",
|
|
20
21
|
"skills/zaip-skill-github-deploy/scripts/deploy-contract.test.mjs",
|
|
@@ -4,6 +4,7 @@ import { spawnSync } from "node:child_process";
|
|
|
4
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
import { homedir } from "node:os";
|
|
6
6
|
import { dirname, isAbsolute, relative, resolve } from "node:path";
|
|
7
|
+
import { isCanonicalMainBuilder, isFrameworkRepository } from "./framework-identity.mjs";
|
|
7
8
|
import { parseDocument } from "./yaml-parser.mjs";
|
|
8
9
|
|
|
9
10
|
const options = parseArguments(process.argv.slice(2));
|
|
@@ -240,7 +241,10 @@ function configuredDeployment(repository) {
|
|
|
240
241
|
fail(`project.yaml deploy.branch is invalid: ${validationBranch}`);
|
|
241
242
|
if (!isValidBranch(repository, protectedProductionBranch))
|
|
242
243
|
fail(`project.yaml deploy.production_branch is invalid: ${protectedProductionBranch}`);
|
|
243
|
-
if (
|
|
244
|
+
if (
|
|
245
|
+
(validationBranch === "main" || validationBranch === protectedProductionBranch) &&
|
|
246
|
+
!(validationBranch === "main" && isCanonicalMainBuilder(repository, git))
|
|
247
|
+
)
|
|
244
248
|
fail("project.yaml deploy.branch is framework-only and must not equal the production branch");
|
|
245
249
|
return {
|
|
246
250
|
framework: validationBranch,
|
|
@@ -251,17 +255,6 @@ function configuredDeployment(repository) {
|
|
|
251
255
|
};
|
|
252
256
|
}
|
|
253
257
|
|
|
254
|
-
function isFrameworkRepository(repository) {
|
|
255
|
-
const manifest = resolve(repository, "package.json");
|
|
256
|
-
if (!existsSync(manifest) || !existsSync(resolve(repository, "packages/core/src/config.ts")))
|
|
257
|
-
return false;
|
|
258
|
-
try {
|
|
259
|
-
return JSON.parse(readFileSync(manifest, "utf8")).name === "@zaip-ai/aios";
|
|
260
|
-
} catch {
|
|
261
|
-
return false;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
258
|
function isValidBranch(repository, branch) {
|
|
266
259
|
if (
|
|
267
260
|
branch.length > 255 ||
|
|
@@ -15,7 +15,7 @@ test("standalone consumer resolves fresh project targets without node_modules",
|
|
|
15
15
|
const scripts = join(root, ".agents/skills/zaip-skill-github-deploy/scripts");
|
|
16
16
|
mkdirSync(scripts, { recursive: true });
|
|
17
17
|
mkdirSync(join(root, ".agents/config"), { recursive: true });
|
|
18
|
-
for (const file of ["preflight.mjs", "yaml-parser.mjs"])
|
|
18
|
+
for (const file of ["preflight.mjs", "yaml-parser.mjs", "framework-identity.mjs"])
|
|
19
19
|
copyFileSync(join(import.meta.dirname, file), join(scripts, file));
|
|
20
20
|
const run = (...args) =>
|
|
21
21
|
spawnSync(process.execPath, [join(scripts, "preflight.mjs"), "--repository", root, ...args], {
|
|
@@ -83,6 +83,17 @@ test("standalone consumer resolves fresh project targets without node_modules",
|
|
|
83
83
|
assert.match(run("--resolve-branch", "--scope", "database").stderr, /literal beta/);
|
|
84
84
|
config("deploy: { branch: main, allow_production: true }\n");
|
|
85
85
|
assert.match(run("--resolve-branch", "--scope", "framework").stderr, /framework-only/);
|
|
86
|
+
mkdirSync(join(root, "public-cli/packages/cli"), { recursive: true });
|
|
87
|
+
writeFileSync(join(root, "public-cli/packages/cli/package.json"), '{"name":"@zaip-ai/cli"}\n');
|
|
88
|
+
git("remote", "add", "origin", "git@github.com:zaip-ai/zaip-aios.git");
|
|
89
|
+
assert.equal(
|
|
90
|
+
JSON.parse(run("--resolve-branch", "--scope", "framework", "--branch", "main").stdout)
|
|
91
|
+
.configured_branch,
|
|
92
|
+
"main",
|
|
93
|
+
);
|
|
94
|
+
git("remote", "set-url", "origin", "git@github.com:example/consumer.git");
|
|
95
|
+
assert.match(run("--resolve-branch", "--scope", "framework").stderr, /framework-only/);
|
|
96
|
+
git("remote", "remove", "origin");
|
|
86
97
|
for (const source of [
|
|
87
98
|
"deploy: { branch: null, production_branch: production }\n",
|
|
88
99
|
"deploy: { branch: beta, validation_branch: staging }\n",
|
|
@@ -46,6 +46,8 @@ prova de 5.3 para 5.2, trocar SHA ou alterar a Evidence. A fronteira entre candi
|
|
|
46
46
|
original e publicação continua limitada às alterações de registros admitidas.
|
|
47
47
|
Alterações posteriores do produto não são atribuídas ao candidato antigo.
|
|
48
48
|
|
|
49
|
+
Quando existe um reparo de publicador posterior à tag, a fronteira exige inventário exato de controle, todos os commits intermediários sem merge e ciclo congelado idêntico. O SHA do pacote e seu CI permanecem imutáveis. O publicador manual precisa ser workflow_dispatch em main no SHA do reparo, com CI push próprio aprovado; evento, branch, repositório ou SHA divergente continuam recusados. Assets e bytes npm são verificados independentemente. Essa compatibilidade não concede aceite retroativo nem remove a Decision humana específica do recibo histórico.
|
|
50
|
+
|
|
49
51
|
## Procedimento canônico
|
|
50
52
|
|
|
51
53
|
1. Inspecione somente os IDs envolvidos, a revisão atual e as evidências originais.
|
|
@@ -37,5 +37,5 @@ release-cycle advance of its tagged product, plus records. The validator checks
|
|
|
37
37
|
the product SHA ancestry, tag, causal Task/Change/Execution identity, matching
|
|
38
38
|
terminal states and frozen cycle owner. Previous history and unrelated fields
|
|
39
39
|
must remain unchanged. This does not approve or complete the Task and does not
|
|
40
|
-
authorize new product changes. Remote GitHub/npm proof remains the responsibility
|
|
40
|
+
authorize new product changes. A publisher recovery must preserve the frozen cycle, exact package tag and ancestry, single-parent repair history, a restricted control-path inventory and a positive repair CI identity. Every intermediate commit is inspected, including reverted edits; package/manifests/signing-policy changes are rejected. The candidate and publication gates validate the same local boundary. Remote GitHub/npm proof remains the responsibility
|
|
41
41
|
of the protected publication workflow.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
5.
|
|
1
|
+
5.8
|