@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.
Files changed (82) hide show
  1. package/dist/services/adapter-hook-sources.d.ts +1 -0
  2. package/dist/services/adapter-hook-sources.d.ts.map +1 -1
  3. package/dist/services/adapter-hook-sources.js +1 -0
  4. package/dist/services/adapter-hook-sources.js.map +1 -1
  5. package/dist/services/adapters.d.ts +1 -1
  6. package/dist/services/adapters.d.ts.map +1 -1
  7. package/dist/services/adapters.js +3 -2
  8. package/dist/services/adapters.js.map +1 -1
  9. package/dist/services/codex-hook-activation.d.ts +1 -1
  10. package/dist/services/codex-hook-activation.d.ts.map +1 -1
  11. package/dist/services/codex-hook-activation.js +1 -0
  12. package/dist/services/codex-hook-activation.js.map +1 -1
  13. package/dist/services/codex-pre-tool-dependencies.test-support.d.ts.map +1 -1
  14. package/dist/services/codex-pre-tool-dependencies.test-support.js +2 -0
  15. package/dist/services/codex-pre-tool-dependencies.test-support.js.map +1 -1
  16. package/dist/services/codex-pre-tool-hook-template.js +1 -1
  17. package/dist/services/codex-pre-tool-release-review-template.d.ts +2 -0
  18. package/dist/services/codex-pre-tool-release-review-template.d.ts.map +1 -0
  19. package/dist/services/codex-pre-tool-release-review-template.js +98 -0
  20. package/dist/services/codex-pre-tool-release-review-template.js.map +1 -0
  21. package/dist/services/codex-pre-tool-support-template.d.ts.map +1 -1
  22. package/dist/services/codex-pre-tool-support-template.js +12 -30
  23. package/dist/services/codex-pre-tool-support-template.js.map +1 -1
  24. package/package.json +1 -1
  25. package/templates/.agents/README-ENG.md +4 -0
  26. package/templates/.agents/README.md +4 -0
  27. package/templates/.agents/config/agents/discovery.json +1 -1
  28. package/templates/.agents/dashboard/.zaip-managed.json +30 -30
  29. package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-B5YEOEej.js → DashboardHelpDialog-C-J7yI0E.js} +5 -1
  30. package/templates/.agents/dashboard/apps/frontend/dist/assets/{PricingSettingsDialog--irvqUl5.js → PricingSettingsDialog-6Lx9UnYo.js} +1 -1
  31. package/templates/.agents/dashboard/apps/frontend/dist/assets/{ProjectSettingsPage-DxyjL1__.js → ProjectSettingsPage-B6Dvz-Je.js} +1 -1
  32. package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-BWEEMNV-.js → TraceabilityWorkspace-YRJB7Gxh.js} +1 -1
  33. package/templates/.agents/dashboard/apps/frontend/dist/assets/{dashboard-localization-C45x75cf.js → dashboard-localization-CCXDvXwr.js} +4 -0
  34. package/templates/.agents/dashboard/apps/frontend/dist/assets/{index-DGUs5bRP.js → index-CYc50ABs.js} +2 -2
  35. package/templates/.agents/dashboard/apps/frontend/dist/index.html +1 -1
  36. package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
  37. package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
  38. package/templates/.agents/dashboard/modules/operations/package.json +1 -1
  39. package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
  40. package/templates/.agents/dashboard/packages/branding/package.json +1 -1
  41. package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
  42. package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
  43. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +16 -16
  44. package/templates/.agents/dashboard/packages/local-runtime/package.json +1 -1
  45. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +21 -21
  46. package/templates/.agents/dashboard/packages/ui/package.json +1 -1
  47. package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
  48. package/templates/.agents/design/.zaip-managed.json +3 -3
  49. package/templates/.agents/design/apps/catalog/package.json +1 -1
  50. package/templates/.agents/design/packages/local-runtime/package.json +1 -1
  51. package/templates/.agents/requirements/autonomous-assurance.md +1 -1
  52. package/templates/.agents/requirements/cloud-hostinger-autonomy.md +1 -1
  53. package/templates/.agents/requirements/comparative-audit.md +1 -1
  54. package/templates/.agents/requirements/context-engine.md +1 -1
  55. package/templates/.agents/requirements/cost-observability.md +1 -1
  56. package/templates/.agents/requirements/dashboard-launch.md +1 -1
  57. package/templates/.agents/requirements/data-export.md +1 -1
  58. package/templates/.agents/requirements/design-system.md +1 -1
  59. package/templates/.agents/requirements/execution-engine.md +1 -1
  60. package/templates/.agents/requirements/kanban-dashboard.md +1 -1
  61. package/templates/.agents/requirements/model-orchestration.md +1 -1
  62. package/templates/.agents/requirements/public-distribution.md +1 -1
  63. package/templates/.agents/requirements/software-architecture.md +1 -1
  64. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  65. package/templates/.agents/requirements/work-lifecycle.md +1 -1
  66. package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
  67. package/templates/.agents/runtime/VERSION +1 -1
  68. package/templates/.agents/runtime/bin/zaip.mjs +156 -78
  69. package/templates/.agents/runtime/checksums.sha256 +5 -5
  70. package/templates/.agents/runtime/manifest.json +1 -1
  71. package/templates/.agents/runtime/provenance.json +4 -4
  72. package/templates/.agents/runtime/sbom.cdx.json +1 -1
  73. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-contract.mjs +16 -6
  74. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-publication-intent.test.mjs +49 -0
  75. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/framework-identity.mjs +30 -0
  76. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +1 -0
  77. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs +5 -12
  78. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.test.mjs +12 -1
  79. package/templates/.agents/skills/zaip-skill-lifecycle-closure/references/post-publication-task-first.md +2 -0
  80. package/templates/.agents/skills/zaip-skill-task/references/commit-policy.md +1 -1
  81. package/templates/.agents/zaip-aios/VERSION +1 -1
  82. package/templates/template-manifest.json +74 -70
@@ -1,11 +1,11 @@
1
1
  b146bd0c7c60b1ab43c4f71e0b1d2262c6df6da6f7053a0425f834ccb77a6b48 LICENSE
2
2
  bc02cba77e8d51e5c580f43668863dc868eda66f1ff663bfaa49fcf3ca16320e THIRD_PARTY_NOTICES.md
3
- e51f139763c0958d77e9454ad75fc927c601dad6512842bdf94a79a8e755374c VERSION
4
- a16e656eab3d659f2234ffcfc654e45054a6b4435b6e77ef243245e9db5661eb bin/zaip.mjs
5
- 874a6105517333a379b58a01a79a32b579f0a9f1c1666e46849c54acac9a2e4c manifest.json
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
- 09c428d0226f7bf35472301b3ed6202aa884e2c9e646ba87493c74e00354821a provenance.json
10
- 2dac3f4fc5813d91e9d3095c4ba14f67baa24fa4f80c4d6b2d0791b6a67ac42d sbom.cdx.json
9
+ 94e932ec43eb12d4e9e1dfd625878a2cc8a62325f252b6f8712478ea5806d25e provenance.json
10
+ ce29b875af132dd4217bd80777146386aa7fe9cde264707ee455bdc926a8926a sbom.cdx.json
11
11
  b3ffedf9e146be802a15b4009f33e031dec3071ca1525e12c67606fd964a3067 schemas/contracts.schema.json
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "name": "zaip-aios",
4
- "version": "5.6.0",
4
+ "version": "5.8.0",
5
5
  "node": ">=22",
6
6
  "files": [
7
7
  "LICENSE",
@@ -2,10 +2,10 @@
2
2
  "schema_version": 1,
3
3
  "statement_type": "self_reported_build_integrity",
4
4
  "authenticity": "unverified",
5
- "version": "5.6.0",
5
+ "version": "5.8.0",
6
6
  "source_origin": "zaip-aios:local-build",
7
7
  "lockfile_sha256": "b5e11351951654d41aa78dc858d43990a12964ba4051a070613ac8b11bc73a27",
8
- "sbom_sha256": "2dac3f4fc5813d91e9d3095c4ba14f67baa24fa4f80c4d6b2d0791b6a67ac42d",
9
- "runtime_sha256": "1ed523415e3f43b456a76cd96350d08b3310fd7e115c83fc43defb59d5abd280",
10
- "statement_sha256": "26fd4ec41fc8e36f2da9b9f156315e16df99643cb3b78084d29d00bc6e797ddf"
8
+ "sbom_sha256": "ce29b875af132dd4217bd80777146386aa7fe9cde264707ee455bdc926a8926a",
9
+ "runtime_sha256": "c9c9412a99ca95e60a9fee09f04f6064716fbfbf623c5f5c64afd3cb45f714d2",
10
+ "statement_sha256": "c5c21b617fc3ab611036450068c7fcb48a0e9a08a95fcf00b477b3bb016d30b0"
11
11
  }
@@ -6,7 +6,7 @@
6
6
  "component": {
7
7
  "type": "application",
8
8
  "name": "zaip-aios",
9
- "version": "5.6.0"
9
+ "version": "5.8.0"
10
10
  }
11
11
  },
12
12
  "components": [
@@ -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 = /\bpreciso que crie (?:uma |a )?nova versao\s+v?\d+\.\d+\b/.test(
123
- withoutCourtesy,
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(
@@ -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
+ }
@@ -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 (validationBranch === "main" || validationBranch === protectedProductionBranch)
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.6
1
+ 5.8