@zaip-ai/cli 4.9.0 → 5.0.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 (180) hide show
  1. package/dist/services/adapter-hook-sources.d.ts +3 -0
  2. package/dist/services/adapter-hook-sources.d.ts.map +1 -1
  3. package/dist/services/adapter-hook-sources.js +3 -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 +5 -2
  8. package/dist/services/adapters.js.map +1 -1
  9. package/dist/services/adapters.test.js +1 -1
  10. package/dist/services/adapters.test.js.map +1 -1
  11. package/dist/services/codex-conversation-lifecycle-hook.d.ts.map +1 -1
  12. package/dist/services/codex-conversation-lifecycle-hook.js +16 -6
  13. package/dist/services/codex-conversation-lifecycle-hook.js.map +1 -1
  14. package/dist/services/codex-hook-activation.d.ts +1 -1
  15. package/dist/services/codex-hook-activation.d.ts.map +1 -1
  16. package/dist/services/codex-hook-activation.js +116 -10
  17. package/dist/services/codex-hook-activation.js.map +1 -1
  18. package/dist/services/codex-pre-tool-cli-capture-template.d.ts +2 -0
  19. package/dist/services/codex-pre-tool-cli-capture-template.d.ts.map +1 -0
  20. package/dist/services/codex-pre-tool-cli-capture-template.js +104 -0
  21. package/dist/services/codex-pre-tool-cli-capture-template.js.map +1 -0
  22. package/dist/services/codex-pre-tool-cloud-template.d.ts +2 -0
  23. package/dist/services/codex-pre-tool-cloud-template.d.ts.map +1 -0
  24. package/dist/services/codex-pre-tool-cloud-template.js +190 -0
  25. package/dist/services/codex-pre-tool-cloud-template.js.map +1 -0
  26. package/dist/services/codex-pre-tool-dependencies.test-support.d.ts +2 -0
  27. package/dist/services/codex-pre-tool-dependencies.test-support.d.ts.map +1 -0
  28. package/dist/services/codex-pre-tool-dependencies.test-support.js +9 -0
  29. package/dist/services/codex-pre-tool-dependencies.test-support.js.map +1 -0
  30. package/dist/services/codex-pre-tool-hook-fixture.test-support.d.ts +5 -0
  31. package/dist/services/codex-pre-tool-hook-fixture.test-support.d.ts.map +1 -0
  32. package/dist/services/codex-pre-tool-hook-fixture.test-support.js +19 -0
  33. package/dist/services/codex-pre-tool-hook-fixture.test-support.js.map +1 -0
  34. package/dist/services/codex-pre-tool-hook-template-bootstrap.test.d.ts +2 -0
  35. package/dist/services/codex-pre-tool-hook-template-bootstrap.test.d.ts.map +1 -0
  36. package/dist/services/codex-pre-tool-hook-template-bootstrap.test.js +107 -0
  37. package/dist/services/codex-pre-tool-hook-template-bootstrap.test.js.map +1 -0
  38. package/dist/services/codex-pre-tool-hook-template.d.ts.map +1 -1
  39. package/dist/services/codex-pre-tool-hook-template.js +96 -210
  40. package/dist/services/codex-pre-tool-hook-template.js.map +1 -1
  41. package/dist/services/codex-pre-tool-hook-template.test.js +32 -80
  42. package/dist/services/codex-pre-tool-hook-template.test.js.map +1 -1
  43. package/dist/services/codex-pre-tool-host-context-template.d.ts +2 -0
  44. package/dist/services/codex-pre-tool-host-context-template.d.ts.map +1 -0
  45. package/dist/services/codex-pre-tool-host-context-template.js +139 -0
  46. package/dist/services/codex-pre-tool-host-context-template.js.map +1 -0
  47. package/dist/services/codex-pre-tool-support-template.d.ts.map +1 -1
  48. package/dist/services/codex-pre-tool-support-template.js +61 -101
  49. package/dist/services/codex-pre-tool-support-template.js.map +1 -1
  50. package/dist/services/codex-subagent-hook-template.d.ts +1 -1
  51. package/dist/services/codex-subagent-hook-template.d.ts.map +1 -1
  52. package/dist/services/codex-subagent-hook-template.js +13 -2
  53. package/dist/services/codex-subagent-hook-template.js.map +1 -1
  54. package/dist/services/codex-validation-runtime-template.d.ts.map +1 -1
  55. package/dist/services/codex-validation-runtime-template.js +10 -4
  56. package/dist/services/codex-validation-runtime-template.js.map +1 -1
  57. package/dist/services/runtime-template-test-support.d.ts +1 -0
  58. package/dist/services/runtime-template-test-support.d.ts.map +1 -1
  59. package/dist/services/runtime-template-test-support.js +23 -2
  60. package/dist/services/runtime-template-test-support.js.map +1 -1
  61. package/dist/services/runtime-template.test.js +4 -23
  62. package/dist/services/runtime-template.test.js.map +1 -1
  63. package/package.json +1 -1
  64. package/templates/.agents/README-ENG.md +49 -7
  65. package/templates/.agents/README.md +37 -10
  66. package/templates/.agents/config/agents/discovery.json +1 -1
  67. package/templates/.agents/dashboard/.zaip-managed.json +121 -73
  68. package/templates/.agents/dashboard/apps/frontend/dist/assets/{CostCalculationGuidePage-BW7Vy1cp.js → CostCalculationGuidePage-w6pjt4OM.js} +1 -1
  69. package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-Cp_hEVd8.js → DashboardHelpDialog-DhlntQcR.js} +76 -11
  70. package/templates/.agents/dashboard/apps/frontend/dist/assets/{PricingSettingsDialog-Prcs-ydy.js → PricingSettingsDialog-BHoZT2an.js} +1 -1
  71. package/templates/.agents/dashboard/apps/frontend/dist/assets/{ProjectSettingsPage-Cu40wAFF.js → ProjectSettingsPage-IcncIZ9Y.js} +1 -1
  72. package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-Bh3YBd3C.js → TraceabilityWorkspace-C6rORjpr.js} +1 -1
  73. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-uPnOBShc.js +68 -0
  74. package/templates/.agents/dashboard/apps/frontend/dist/assets/{dashboard-localization-CF7B1Hjn.js → dashboard-localization-DWXjEIgc.js} +49 -7
  75. package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-DOhy6D2-.js → icons-vendor-Hc9fp_gs.js} +1 -1
  76. package/templates/.agents/dashboard/apps/frontend/dist/assets/{index-qVSJnJ0_.js → index-BqeOEZW5.js} +2 -2
  77. package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-CkPC-yMz.js → react-vendor-C9ta_O10.js} +1 -1
  78. package/templates/.agents/dashboard/apps/frontend/dist/assets/{traceability-BEdGoIDm.js → traceability-IcefoTOv.js} +1 -1
  79. package/templates/.agents/dashboard/apps/frontend/dist/index.html +5 -5
  80. package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
  81. package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
  82. package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +10 -3
  83. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostFilters.run-page.test.ts +5 -1
  84. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostGroupsTable.period-values.test.tsx +2 -2
  85. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-keeps-legacy-codex-identity-fields-blank.test.ts +5 -5
  86. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +36 -43
  87. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-loaders.ts +1 -0
  88. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-formatters.ts +6 -4
  89. package/templates/.agents/dashboard/modules/cost-monitor/src/server/aggregate.ts +2 -2
  90. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts +1 -1
  91. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +11 -25
  92. package/templates/.agents/dashboard/modules/cost-monitor/src/server/cost-summary-defaults.ts +26 -0
  93. package/templates/.agents/dashboard/modules/operations/package.json +1 -1
  94. package/templates/.agents/dashboard/modules/operations/src/contracts.ts +11 -16
  95. package/templates/.agents/dashboard/modules/operations/src/planning-contracts.ts +14 -0
  96. package/templates/.agents/dashboard/modules/operations/src/react/DecisionTable.tsx +65 -0
  97. package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +5 -71
  98. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +10 -36
  99. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +7 -2
  100. package/templates/.agents/dashboard/modules/operations/src/react/use-operations-filter-sync.ts +66 -0
  101. package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
  102. package/templates/.agents/dashboard/packages/branding/package.json +1 -1
  103. package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
  104. package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
  105. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +193 -191
  106. package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +169 -169
  107. package/templates/.agents/dashboard/packages/local-runtime/package.json +1 -1
  108. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +193 -191
  109. package/templates/.agents/dashboard/packages/local-runtime/src/active-capture-failure.test.ts +38 -0
  110. package/templates/.agents/dashboard/packages/local-runtime/src/active-capture-failure.ts +35 -0
  111. package/templates/.agents/dashboard/packages/local-runtime/src/active-codex-telemetry.test.ts +53 -2
  112. package/templates/.agents/dashboard/packages/local-runtime/src/active-codex-telemetry.ts +18 -1
  113. package/templates/.agents/dashboard/packages/local-runtime/src/manifest-runs.ts +8 -2
  114. package/templates/.agents/dashboard/packages/local-runtime/src/server-capture-projection-order.test.ts +118 -0
  115. package/templates/.agents/dashboard/packages/local-runtime/src/server-cost-run-search.test.ts +90 -0
  116. package/templates/.agents/dashboard/packages/local-runtime/src/server-cost-run-search.ts +86 -0
  117. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-routes.ts +8 -1
  118. package/templates/.agents/dashboard/packages/local-runtime/src/server-projection-loaders.ts +13 -0
  119. package/templates/.agents/dashboard/packages/local-runtime/src/server-projections.ts +30 -74
  120. package/templates/.agents/dashboard/packages/local-runtime/src/server-route-handlers.ts +42 -0
  121. package/templates/.agents/dashboard/packages/local-runtime/src/server-routes.test.ts +60 -0
  122. package/templates/.agents/dashboard/packages/local-runtime/src/server-run-projections.test.ts +12 -2
  123. package/templates/.agents/dashboard/packages/local-runtime/src/server-telemetry-command.test.ts +29 -4
  124. package/templates/.agents/dashboard/packages/local-runtime/src/server-telemetry-refresh.ts +7 -0
  125. package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +51 -54
  126. package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +28 -45
  127. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-filter-matrix.test.ts +5 -0
  128. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-invocation-page.test.ts +49 -0
  129. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-invocation-page.ts +44 -1
  130. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-cached-cost-page.ts +11 -10
  131. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-summary.ts +1 -1
  132. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-work-item-index.test.ts +18 -1
  133. package/templates/.agents/dashboard/packages/ui/package.json +1 -1
  134. package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
  135. package/templates/.agents/design/.zaip-managed.json +3 -3
  136. package/templates/.agents/design/apps/catalog/package.json +1 -1
  137. package/templates/.agents/design/packages/local-runtime/package.json +1 -1
  138. package/templates/.agents/requirements/autonomous-assurance.md +11 -2
  139. package/templates/.agents/requirements/cloud-hostinger-autonomy.md +1 -1
  140. package/templates/.agents/requirements/comparative-audit.md +1 -1
  141. package/templates/.agents/requirements/context-engine.md +1 -1
  142. package/templates/.agents/requirements/cost-observability.md +1 -1
  143. package/templates/.agents/requirements/dashboard-launch.md +1 -1
  144. package/templates/.agents/requirements/data-export.md +1 -1
  145. package/templates/.agents/requirements/design-system.md +1 -1
  146. package/templates/.agents/requirements/execution-engine.md +1 -1
  147. package/templates/.agents/requirements/kanban-dashboard.md +1 -1
  148. package/templates/.agents/requirements/model-orchestration.md +1 -1
  149. package/templates/.agents/requirements/public-distribution.md +1 -1
  150. package/templates/.agents/requirements/software-architecture.md +1 -1
  151. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  152. package/templates/.agents/requirements/work-lifecycle.md +2 -1
  153. package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
  154. package/templates/.agents/rules/run-lifecycle-closure.md +2 -1
  155. package/templates/.agents/rules/workflow.md +1 -0
  156. package/templates/.agents/runtime/VERSION +1 -1
  157. package/templates/.agents/runtime/bin/zaip.mjs +1178 -764
  158. package/templates/.agents/runtime/checksums.sha256 +6 -6
  159. package/templates/.agents/runtime/manifest.json +1 -1
  160. package/templates/.agents/runtime/pnpm-lock.sha256 +1 -1
  161. package/templates/.agents/runtime/provenance.json +5 -5
  162. package/templates/.agents/runtime/sbom.cdx.json +59 -59
  163. package/templates/.agents/skills/zaip-skill-execution/SKILL.md +1 -1
  164. package/templates/.agents/skills/zaip-skill-execution/references/controlled-release-recovery.md +14 -0
  165. package/templates/.agents/skills/zaip-skill-execution/references/runtime-governance.md +1 -1
  166. package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +5 -1
  167. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-contract.mjs +12 -0
  168. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/deploy-contract.test.mjs +25 -0
  169. package/templates/.agents/skills/zaip-skill-maintenance-enter/SKILL.md +23 -0
  170. package/templates/.agents/skills/zaip-skill-maintenance-enter/agents/openai.yaml +4 -0
  171. package/templates/.agents/skills/zaip-skill-maintenance-enter/scripts/maintenance.mjs +213 -0
  172. package/templates/.agents/skills/zaip-skill-maintenance-enter/scripts/maintenance.test.mjs +207 -0
  173. package/templates/.agents/skills/zaip-skill-maintenance-exit/SKILL.md +21 -0
  174. package/templates/.agents/skills/zaip-skill-maintenance-exit/agents/openai.yaml +4 -0
  175. package/templates/.agents/skills/zaip-skill-release-qualification/SKILL.md +2 -0
  176. package/templates/.agents/skills/zaip-skill-release-qualification/references/local-preparation.md +37 -8
  177. package/templates/.agents/zaip-aios/VERSION +1 -1
  178. package/templates/.agents/zaip-aios/guides/26-qualidade-e-release.md +38 -0
  179. package/templates/template-manifest.json +188 -116
  180. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-Co2Jiuzh.js +0 -68
@@ -1,7 +1,56 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import { filterCostInvocationProjection } from "./sqlite-cost-invocation-page.js";
3
+ import { readCachedCostViewPage } from "./sqlite-query-cached-cost-page.js";
4
+ import type { SqliteQueryContext } from "./sqlite-query-context.js";
3
5
 
4
6
  describe("cost invocation projection page", () => {
7
+ it("searches the immutable projection before pagination, preserving nulls and empty results", () => {
8
+ const context = {
9
+ technicalPayloadRows: () => [
10
+ {
11
+ agent_invocation_id: "AINV-OTHER",
12
+ task_id: null,
13
+ occurred_at: "2026-08-01T12:00:00Z",
14
+ total_tokens: 20,
15
+ },
16
+ {
17
+ agent_invocation_id: "AINV-TARGET-1",
18
+ task_id: null,
19
+ occurred_at: "2026-08-01T11:00:00Z",
20
+ total_tokens: 12,
21
+ },
22
+ {
23
+ agent_invocation_id: "AINV-TARGET-2",
24
+ task_id: null,
25
+ occurred_at: "2026-08-01T10:00:00Z",
26
+ total_tokens: null,
27
+ },
28
+ ],
29
+ } as unknown as SqliteQueryContext;
30
+ expect(
31
+ readCachedCostViewPage(context, "cost_monitor_agent_invocations", {
32
+ query: "target",
33
+ offset: 1,
34
+ limit: 1,
35
+ }),
36
+ ).toMatchObject({
37
+ total_count: 2,
38
+ has_more: false,
39
+ rows: [{ agent_invocation_id: "AINV-TARGET-2", total_tokens: null }],
40
+ });
41
+ expect(
42
+ readCachedCostViewPage(context, "cost_monitor_agent_invocations", { query: "absent" }),
43
+ ).toMatchObject({ total_count: 0, rows: [] });
44
+ expect(
45
+ readCachedCostViewPage(context, "cost_monitor_agent_invocations", { query: "TARGET%" }),
46
+ ).toBeNull();
47
+ expect(
48
+ readCachedCostViewPage(context, "cost_monitor_agent_invocations", {
49
+ query: "target",
50
+ provider: "openai",
51
+ }),
52
+ ).toBeNull();
53
+ });
5
54
  it("uses the Sao Paulo source day for the fast date-only page", () => {
6
55
  const rows = [
7
56
  { agent_invocation_id: "before", source_started_at: "2026-08-01T02:30:00.000Z" },
@@ -1,4 +1,6 @@
1
- type CostInvocationDateFilter = { from?: string | null; to?: string | null };
1
+ import type { DatabaseSync } from "node:sqlite";
2
+
3
+ type CostInvocationDateFilter = { from?: string | null; to?: string | null; query?: string };
2
4
 
3
5
  function costDay(value: string | null | undefined): string | null {
4
6
  if (!value) return null;
@@ -21,9 +23,50 @@ export function filterCostInvocationProjection(
21
23
  ) {
22
24
  const from = costDay(input.from);
23
25
  const to = costDay(input.to);
26
+ // SQLite LIKE folds ASCII only. Wildcard queries remain on the SQL reader.
27
+ const fold = (value: string) => value.replace(/[A-Z]/g, (letter) => letter.toLowerCase());
28
+ const query = input.query ? fold(input.query) : null;
24
29
  return rows.filter((row) => {
30
+ if (
31
+ query !== null &&
32
+ ![row.agent_invocation_id, row.task_id, row.execution_id].some(
33
+ (value) => typeof value === "string" && fold(value).includes(query),
34
+ )
35
+ )
36
+ return false;
25
37
  const timestamp = row.source_started_at ?? row.source_occurred_at ?? row.occurred_at;
26
38
  const day = typeof timestamp === "string" ? costDay(timestamp) : null;
27
39
  return day !== null && (from === null || day >= from) && (to === null || day <= to);
28
40
  });
29
41
  }
42
+
43
+ /** Enrich only the selected page, matching the original SQL left join. */
44
+ export function enrichCostInvocationPage(
45
+ database: DatabaseSync,
46
+ rows: Array<Record<string, unknown>>,
47
+ ) {
48
+ const ids = [
49
+ ...new Set(rows.flatMap((row) => (typeof row.task_id === "string" ? [row.task_id] : []))),
50
+ ];
51
+ const tasks =
52
+ ids.length === 0
53
+ ? []
54
+ : (database
55
+ .prepare(
56
+ "SELECT id, priority, risk, status AS task_status, title AS task_title FROM tasks WHERE id IN (" +
57
+ ids.map(() => "?").join(",") +
58
+ ")",
59
+ )
60
+ .all(...ids) as Array<Record<string, unknown>>);
61
+ const byId = new Map(tasks.map((task) => [task.id, task]));
62
+ return rows.map((row) => {
63
+ const task = byId.get(row.task_id);
64
+ return {
65
+ ...row,
66
+ priority: task?.priority ?? null,
67
+ risk: task?.risk ?? null,
68
+ task_status: task?.task_status ?? null,
69
+ task_title: task?.task_title ?? null,
70
+ };
71
+ });
72
+ }
@@ -1,4 +1,7 @@
1
- import { filterCostInvocationProjection } from "./sqlite-cost-invocation-page.js";
1
+ import {
2
+ enrichCostInvocationPage,
3
+ filterCostInvocationProjection,
4
+ } from "./sqlite-cost-invocation-page.js";
2
5
  import type { SqliteQueryContext, SqliteViewPage } from "./sqlite-query-context.js";
3
6
  import type { SqliteViewName } from "./sqlite-read-model-types.js";
4
7
 
@@ -38,9 +41,9 @@ export function readCachedCostViewPage(
38
41
  !input.origin &&
39
42
  !input.workType &&
40
43
  !input.priority;
41
- const isDateOnlyCostInvocationPage =
44
+ const isCompactCostInvocationPage =
42
45
  view === "cost_monitor_agent_invocations" &&
43
- !input.query &&
46
+ !/[\0%_]/.test(input.query ?? "") &&
44
47
  !input.status &&
45
48
  !input.risk &&
46
49
  !input.provider &&
@@ -50,12 +53,10 @@ export function readCachedCostViewPage(
50
53
  !input.origin &&
51
54
  !input.workType &&
52
55
  !input.priority;
53
- if (isDateOnlyCostInvocationPage) {
54
- const projection = filterCostInvocationProjection(
55
- context.technicalPayloadRows("cost_agent_invocation_projection_v1"),
56
- input,
57
- );
58
- if (projection.length > 0) {
56
+ if (isCompactCostInvocationPage) {
57
+ const cachedRows = context.technicalPayloadRows("cost_agent_invocation_projection_v1");
58
+ const projection = filterCostInvocationProjection(cachedRows, input);
59
+ if (cachedRows.length > 0) {
59
60
  const limit = Math.min(200, Math.max(1, input.limit ?? 100));
60
61
  const offset = Math.max(0, input.offset ?? 0);
61
62
  const rows = projection.slice(offset, offset + limit);
@@ -66,7 +67,7 @@ export function readCachedCostViewPage(
66
67
  limit,
67
68
  total_count: projection.length,
68
69
  has_more: offset + rows.length < projection.length,
69
- rows,
70
+ rows: input.query ? enrichCostInvocationPage(context.database, rows) : rows,
70
71
  };
71
72
  }
72
73
  }
@@ -110,7 +110,7 @@ export function queryCostMonitorSummaryAggregate(
110
110
  add("work_type", filter.workTypes);
111
111
  if (filter.query) {
112
112
  clauses.push(
113
- "(a.task_id LIKE ? OR a.spec_id LIKE ? OR a.prd_id LIKE ? OR a.execution_id LIKE ? OR a.conversation_id LIKE ? OR a.zaip_agent LIKE ? OR a.model LIKE ? OR a.run_id LIKE ? OR a.agent_run_id LIKE ? OR EXISTS (SELECT 1 FROM canonical_work_items task WHERE task.id=a.task_id AND task.title LIKE ?))",
113
+ "(a.task_id LIKE ? OR a.spec_id LIKE ? OR a.prd_id LIKE ? OR a.execution_id LIKE ? OR a.conversation_id LIKE ? OR a.zaip_agent LIKE ? OR a.model LIKE ? OR a.run_id LIKE ? OR a.agent_run_id LIKE ? OR EXISTS (SELECT 1 FROM canonical_work_items task WHERE task.entity_kind='task' AND task.id=a.task_id AND task.title LIKE ?))",
114
114
  );
115
115
  values.push(...Array(10).fill(`%${filter.query}%`));
116
116
  }
@@ -2,7 +2,7 @@ import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
2
2
  import { tmpdir } from "node:os";
3
3
  import { join } from "node:path";
4
4
  import { DatabaseSync } from "node:sqlite";
5
- import { afterEach, describe, expect, it } from "vitest";
5
+ import { afterEach, describe, expect, it, vi } from "vitest";
6
6
  import { rebuildSqliteReadModel, SqliteReadModelFileSystem } from "./sqlite-read-model.js";
7
7
 
8
8
  const roots: string[] = [];
@@ -35,6 +35,23 @@ describe("SQLite work-item identity index", () => {
35
35
  ).toContain("TASK-INDEXED");
36
36
  const database = new DatabaseSync(process.env.ZAIP_SQLITE_DB_PATH, { readOnly: true });
37
37
  try {
38
+ const reader = new SqliteReadModelFileSystem(root, database);
39
+ const prepared = vi.spyOn(database, "prepare");
40
+ reader.costMonitorSummaryAggregate({ from: null, to: null, query: "Indexed" });
41
+ const searchSql = prepared.mock.calls
42
+ .map(([sql]) => sql)
43
+ .find(
44
+ (sql) =>
45
+ sql.startsWith("WITH selected AS MATERIALIZED") && sql.includes("task.title LIKE"),
46
+ );
47
+ prepared.mockRestore();
48
+ expect(searchSql).toBeDefined();
49
+ const searchPlan = database
50
+ .prepare(`EXPLAIN QUERY PLAN ${searchSql}`)
51
+ .all(null, null, null, null, ...Array(10).fill("%Indexed%")) as Array<{ detail: string }>;
52
+ expect(searchPlan.map((row) => row.detail).join("\n")).toContain(
53
+ "zaip_activities_work_item_identity",
54
+ );
38
55
  const plan = database
39
56
  .prepare(`EXPLAIN QUERY PLAN
40
57
  SELECT a.task_id FROM zaip_vw_activities a WHERE a.task_id IS NOT NULL
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/dashboard-ui",
3
- "version": "4.9.0",
3
+ "version": "5.0.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/dashboard-e2e",
3
- "version": "4.9.0",
3
+ "version": "5.0.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "4.9.0",
3
+ "version": "5.0.0",
4
4
  "files": [
5
5
  {
6
6
  "path": "DESIGN.md",
@@ -276,7 +276,7 @@
276
276
  },
277
277
  {
278
278
  "path": "apps/catalog/package.json",
279
- "sha256": "51e5b590cefb6e579380f6bd25aefacecdaae63e0334452d802cfed620ff8626"
279
+ "sha256": "dcd0c6a84e8c1cdc34fafca8ce9089ea55db196d82ac8ef9e8bb9234168dd3c2"
280
280
  },
281
281
  {
282
282
  "path": "apps/catalog/public/logo_novo_azul.png",
@@ -408,7 +408,7 @@
408
408
  },
409
409
  {
410
410
  "path": "packages/local-runtime/package.json",
411
- "sha256": "36000642ad5ec75354a48998989c41030e3fc1990998d521ac417bed51595d85"
411
+ "sha256": "74dea06fa11afb30713fd1c286bc38833fe60ab782d5f9ed83ff380d9c032606"
412
412
  },
413
413
  {
414
414
  "path": "packages/local-runtime/runtime.mjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/design-catalog",
3
- "version": "4.9.0",
3
+ "version": "5.0.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/design-local-runtime",
3
- "version": "4.9.0",
3
+ "version": "5.0.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -4,9 +4,9 @@ id: REQUIREMENTS-AUTONOMOUS-ASSURANCE
4
4
  area: autonomous-assurance
5
5
  title: Garantia adaptativa e execução autônoma
6
6
  status: active
7
- version: 5
7
+ version: 6
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Garantia adaptativa e execução autônoma
@@ -22,6 +22,14 @@ Uma Task avulsa deve provar todos os Acceptance Criteria com profundidade propor
22
22
  - `AC-ASSURE-001-05`: uma Task sensível a segurança, migração, irreversibilidade ou múltiplos domínios não pode usar `lite` para contornar controles críticos.
23
23
  - `AC-ASSURE-001-06`: somente sob `assurance.version: 1`, uma Task `lite` com `editorial_delivery:true`, `verification_scope:"scoped"`, write scope editorial estreito e candidato textual regular pode dispensar a Decision das seis etapas. Ela ainda exige check tipado real, Evidence tipada cobrindo os ACs, commit/candidato Git, revisão e finalização. Código, configuração, controles de agente, ação externa, dado sensível, migração, risco `standard|critical` ou sinal sensível rejeitam a exceção; qualquer Task sem esse opt-in preserva a Decision.
24
24
 
25
+ A rota editorial de `AC-ASSURE-001-06` inclui os literais `README.md` e
26
+ `README-ENG.md`, Markdown literal em `docs/` e subdiretório documental estreito
27
+ como `docs/quality/**`, além das raízes editoriais de negócio existentes.
28
+ `docs/**` amplo não concede exceção. A prova usa o diff Git completo, modo de
29
+ arquivo regular não executável e conteúdo textual; controles de agente,
30
+ código, configuração, links, binários e sinais sensíveis continuam rejeitados.
31
+ Uma alteração nesses controles é mudança de código/regra e conserva seu risco.
32
+
25
33
  ## REQ-ASSURE-002 — Garantia parental para SPEC e PRD
26
34
 
27
35
  Entregar uma SPEC ou PRD deve exigir prova no nível do produto planejado, além da soma dos testes das Tasks descendentes.
@@ -61,6 +69,7 @@ Aprendizado e alegações de maturidade devem ser derivados de fatos verificáve
61
69
  - `AC-EVOL-001-02`: lesson exige finding e locator verificável; opinião isolada não promove Rule, Requirement ou skill.
62
70
  - `AC-EVOL-001-03`: maturidade progride sequencialmente por `declared`, `implemented`, `locally_evidenced`, `cleanroom_validated`, `representative_validated` e `production_observed`.
63
71
  - `AC-EVOL-001-04`: Evidence de validação referencia o hash exato do candidato; cleanroom e estados posteriores exigem verificador independente, e produção exige Run observado. No runtime autônomo, o candidato é confirmado por Git e por ausência de alterações posteriores de produto no escopo, não somente pelo hash declarado em artefatos. Aprovação independente e Evidence devem referenciar o mesmo candidato. Qualidade conhecida abaixo do piso bloqueia mesmo sem dados de custo disponíveis.
72
+ - No fechamento pós-publicação de `AC-EVOL-001-04`, o SHA validado permanece o candidato original. Um SHA publicado descendente só é aceito se cada commit intermediário, inclusive cada pai de merge, alterar exclusivamente `.agents/records/**`; igualdade final de bytes ou reversão posterior não substitui essa prova. O ciclo deve conter um único append com o SHA publicado exato, e Evidence/Validation selecionadas são vinculadas por hash de conteúdo. Mutação do limite de produto deve falhar no teste isolado.
64
73
 
65
74
  ## REQ-QUALITY-001 — Gates de release e cobertura sem regressão
66
75
 
@@ -6,7 +6,7 @@ title: Autonomia delimitada para Cloudflare e Hostinger
6
6
  status: proposed
7
7
  version: 1
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Cloudflare e Hostinger (proposta de requisito)
@@ -6,7 +6,7 @@ title: Auditoria comparativa e plano de evolução
6
6
  status: active
7
7
  version: 1
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Auditoria comparativa e plano de evolução
@@ -6,7 +6,7 @@ title: Contexto mínimo, seguro e navegável
6
6
  status: active
7
7
  version: 9
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Context engine
@@ -6,7 +6,7 @@ title: Tokens, custos e cobertura
6
6
  status: active
7
7
  version: 10
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Cost observability
@@ -6,7 +6,7 @@ title: Inicialização e hidratação confiável do dashboard
6
6
  status: active
7
7
  version: 1
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Inicialização e hidratação confiável do dashboard
@@ -6,7 +6,7 @@ title: Exportação contextual de dados para Excel
6
6
  status: proposed
7
7
  version: 2
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Exportação contextual de dados
@@ -6,7 +6,7 @@ title: Contrato visual e catálogo executável
6
6
  status: active
7
7
  version: 5
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Design system
@@ -6,7 +6,7 @@ title: Preparação, materialização e DAG
6
6
  status: active
7
7
  version: 13
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Execution engine
@@ -6,7 +6,7 @@ title: Projeções operacionais e analíticas
6
6
  status: active
7
7
  version: 14
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Kanban and dashboard
@@ -6,7 +6,7 @@ title: Seleção automática e observável de modelo e effort
6
6
  status: active
7
7
  version: 10
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Orquestração de modelos
@@ -6,7 +6,7 @@ title: Distribuição pública e ativação
6
6
  status: active
7
7
  version: 10
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Distribuição pública e ativação
@@ -6,7 +6,7 @@ title: Layout modular e limites de código-fonte
6
6
  status: active
7
7
  version: 5
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Software architecture
@@ -6,7 +6,7 @@ title: Melhorias estratégicas de custo, qualidade e resiliência
6
6
  status: active
7
7
  version: 1
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Melhorias estratégicas de custo, qualidade e resiliência
@@ -6,7 +6,7 @@ title: Ciclo de vida do trabalho
6
6
  status: active
7
7
  version: 26
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Work lifecycle
@@ -75,6 +75,7 @@ Cada Execução ZAIP possui uma Invocação do Orquestrador. `interaction` read-
75
75
  - `AC-WORK-006-01`: uma Run raiz de `orchestration` governa exatamente uma tentativa de Task e permanece aberta enquanto seus Sub-Runs executam; antes de a Run terminar, a Task deve estar `completed`, `blocked`, `failed` ou `cancelled`. `executing` e `verifying` nunca são estados válidos no fim da tentativa.
76
76
  - `AC-WORK-006-02`: `RUN-*` continua a chave física compatível do ledger, mas representa uma Invocação de Agente. `parent_run_id: null` e `invocation_kind: orchestrator` identificam exclusivamente a Invocação do Orquestrador; toda Invocação Delegada exige pai, raiz e profundidade positivos. Valores históricos permanecem legíveis e são normalizados na borda. A invocação raiz não pode terminar enquanto qualquer descendente estiver ativo.
77
77
  - `AC-WORK-006-03`: em `delivery` ou interaction com descendente delegado, o último filho é um Sub-Run `finalization` executado por `zaip-agent-finalizer`. Ele só inicia depois que todos os descendentes existentes terminam, impede novos filhos e retorna uma decisão restrita. O resultado `completed` exige executor elegível ou a autorização direta válida de `AC-WORK-001-09`, além dos demais gates. Sem executor ou autorização válida, Gui pode avaliar e devolver `blocked`/`failed`, mas não conceder sucesso; não se cria executor cerimonial para contornar a barreira; reviewer, auditor e integrator são permitidos antes da barreira. Quando o host observa o evento terminal, pai, agent_path e identidade catalogada, mas não expõe session/turn filhos, a captura terminal idempotente é permitida somente para o finalizador ou para executor elegível a delivery com capacidade `task-delivery`, exigindo `parent-agent-id` e `parent-run-id` da raiz ativa exata, além de agent_path terminado no `codex_task_name` canônico, e mantendo session, turn, modelo, provider e usage indisponíveis. Uma `interaction` read-only sem descendentes não inicia filhos e a CLI a conclui deterministicamente após a resposta entregue.
78
+ - `AC-WORK-006-04`: uma manutenção autorizada para reparar o fechamento pós-publicação pode emitir recibo canônico na própria Change enquanto sua Run delivery permanece ativa. Após Task de manutenção e Gui terminarem `completed`, a CLI pública consome o recibo somente para a Task/SPEC/Execution histórica exata, com revisões, autorização humana observada, provas de candidato/publicação/CI/ciclo e conteúdo de Evidence revalidados. O claim exclusivo permite uma raiz sucessora da SPEC no mesmo turno observado ou em turno novo autenticamente observado; crash parcial não cria outra raiz ou aprovação. A Task histórica não ganha escrita de produto nem reutiliza o Gui da manutenção: seu fechamento precisa de executor elegível, Evidence e seu último finalizador próprios. Testes de mutação devem matar a remoção da barreira de Gui e da verificação da fronteira de produto.
78
79
  - `AC-WORK-006-04`: uma Run raiz de SPEC/PRD pode terminar sem terminalizar o macro. O pai passa a `active` quando uma Task filha inicia, permanece em Execução durante intervalos e só entra em Verificação depois de todas as Tasks concluírem; delivery exige gates parentais próprios.
79
80
  - `AC-WORK-006-05`: status técnico de Run/Sub-Run (`completed`, `failed`, `cancelled`) é independente do resultado da Task (`completed`, `blocked`, `failed`, `cancelled`); a orquestração pode concluir tecnicamente e bloquear a Task por falha de gate.
80
81
  - `AC-WORK-006-06`: continuação não preserva Task em `executing` ou `verifying`, e fechamento da tentativa não pode ser adiado. Retomada de `blocked` usa `resume`; `failed` usa `rework` na mesma Task e incrementa a tentativa; `completed` e `cancelled` são imutáveis.
@@ -6,7 +6,7 @@ title: Evidências, custo por Task e autonomia por SPEC
6
6
  status: active
7
7
  version: 1
8
8
  source_change: null
9
- source_release: "4.9.0"
9
+ source_release: "5.0.0"
10
10
  ---
11
11
 
12
12
  # Evidências, custo por Task e autonomia por SPEC
@@ -14,6 +14,7 @@ phases: [execution, verification, evidence]
14
14
 
15
15
  - Toda Execution tem raiz `zaip-agent-orchestrator`. Interaction read-only sem descendentes conclui após resposta sem executor/finalizador; delegada e delivery aguardam a árvore. Sucesso exige executor elegível ou raiz Task direta com `--direct-authorization` explícita desde captura e turno/modelo observados, além de Evidence e Gui. Gui pode avaliar bloqueio/falha sem executor; `executor_missing` impede completed, não o registro verdadeiro de inconclusão.
16
16
  - Cada tentativa de Task tem um orquestrador responsável; ao terminar, concilia `completed`, `blocked`, `failed` ou `cancelled`. Falha de persistência mantém recibo recuperável, nunca sucesso fictício. Terminar executor não termina Task.
17
+ - Retomada pós-publicação exige manutenção e seu último Gui concluídos. O recibo na Change fixa autorização humana, Task/SPEC/Execution, revisões e provas; o consumo revalida publicação, ciclo e proprietário único. O handoff tipado preserva uma raiz ativa por invocação. A Task histórica exige Evidence, revisão aplicável e novo Gui.
17
18
  - Se a raiz física já possui a Task, ela é esse responsável e despacha executor/revisor e Gui diretamente, sem Dave adicional. Uma raiz macro delega um orquestrador por Task; não cria outro proprietário para a mesma tentativa.
18
19
  - Raiz física tem `run_role: orchestrator`, pai nulo/profundidade zero. Orquestrador de Task delegado preserva `run_role: subagent`, propósito `orchestration` e ancestralidade real; papel de agente não redefine raiz física.
19
20
  - Em delivery e interaction delegada, o último filho é exatamente um Sub-Run do `zaip-agent-finalizer` do orquestrador responsável, irmão dos executores, nunca filho deles. Aguarda descendentes; sua barreira impede novos Sub-Runs. Fechamento parental é separado.
@@ -21,7 +22,7 @@ phases: [execution, verification, evidence]
21
22
  - O resultado da Task é separado do status técnico da Run/Sub-Run: uma orquestração tecnicamente `completed` pode produzir Task `blocked` se gate, validação ou Evidence não passar.
22
23
  - Gui read-only não precisa permanecer vivo esperando recibo. O host pode transmitir sua decisão real em `subagent capture --event stop` com `--task-outcome`, `--summary`, `--evidence` e `--changed-files`: a CLI autentica a identidade rica e persiste a decisão imutável antes de Stop/fechamento. Aceita Gui já terminal apenas enquanto o responsável está aberto; responsável fechado aceita somente replay da decisão já existente, não nova aprovação. Ausência de decisão continua fail-closed.
23
24
  - Use `completed` somente com gates e Evidences aprovados; `blocked` para dependência externa, autoridade ou informação ausente, gate/teste pendente, falta de Evidence ou outra inconclusão após recuperação. Duração não determina abandono. Registre o motivo e a condição objetiva de retomada.
24
- - Use `failed` somente para erro técnico ou de integridade comprovadamente impeditivo. Nunca use `failed` por tempo, silêncio do usuário, escopo incompleto ou gate pendente; esses casos são `blocked`. `cancelled` requer pedido humano explícito e nunca é inferido. A exigência de finalizador aplica-se somente a `delivery` e `interaction` com descendente delegado; interaction read-only sem descendentes conclui após a resposta. Nesses fluxos, toda terminalização é aplicada pelo orquestrador após Gui concluir o Sub-Run finalizador.
25
+ - Use `failed` somente para erro técnico ou de integridade impeditivo. Tempo, silêncio, escopo incompleto ou gate pendente não são falha técnica; inconclusões são `blocked`. `cancelled` exige pedido humano explícito. Nos fluxos que exigem Gui, o orquestrador terminaliza após sua conclusão.
25
26
  - `blocked` retoma com `task resume`; `failed` exige `task rework` na mesma Task, incrementa a tentativa e inicia nova Run. A continuação não preserva Task em `executing` ou `verifying`; `completed` e `cancelled` são imutáveis.
26
27
  - Run de SPEC/PRD não terminaliza o macro a cada turno/Task: o pai fica `active`, inclusive nos intervalos, até todas as Tasks terminarem; depois passa à Verificação e aos gates parentais.
27
28
  - `run reconcile --open` é reparação manual: só ocorre após confirmação humana no popup Reconciliar, nunca ao abrir/atualizar o dashboard, em cada turno ou por intervalo. Fecha somente `task_complete` local exato; Run órfã sem invocação ativa por dez minutos falha tecnicamente; gates ausentes bloqueiam; conclusão e cancelamento nunca são inferidos.
@@ -26,4 +26,5 @@ phases: [planning, execution, verification, evidence]
26
26
  - Pedido explícito de deploy/push/publicação GitHub segue `$zaip-skill-github-deploy` e `.agents/config/deploy-policy.json`. Resolva modo e escopo pelo pedido: `auto` publica Release + npm via Actions somente no builder verificado e faz commits + push no consumidor; `apenas commits` e `deploy com release` são overrides, não preferência permanente. `prepare`, discussão ou negação não publicam. Preserve trabalho, index, causalidade, SHA, integridade e autorização; nunca faça staging amplo, force, publique segredos ou inclua feature alheia. O procedimento de refs, checks, versão, rollback e publicação está na skill canônica; gates densos do pacote ficam na release, com testes por impacto antes dela, sem teto de relógio da Task.
27
27
  - Executar uma entrega autoriza seu commit local via `task commit TASK --files PATH[,PATH] --run RUN` antes da prova final; preserve o index alheio e resolva sobreposição de autoria. Git, HEAD e identidade devem estar prontos antes de iniciar. Conversas não criam commits artificiais. `validation execute` usa o Node do host e script relativo versionado/revisado no SHA, sem código inline/loaders; a worktree comprova o candidato, não é sandbox do SO. Só essa prova separa alterações concorrentes da entrega intacta; registros manuais mantêm o gate conservador. Documento externo exige revisão identificada ou exportação versionada. Commit não autoriza push nem substitui revisão/finalizador.
28
28
  - Ciclo de release: `.agents/config/release-cycle.json` define a versão `major.minor` corrente e `open|frozen`; início exige alvo corrente, futuros ficam draft. Reconcilie frentes, encerre trabalho corrente, congele e audite SHA/main/branches/worktrees. Checks locais precedem push somente de `main`; CI verde no SHA precede Release. Nunca crie branch remota candidata. A exceção da coordenação exige Task crítica e IDs explícitos no frozen. Coordenação simples com escopos só de release conclui Task/Run antes de `audit`. Raiz delivery com `--integrated-task` registra `release_mode: integrated_task` e escopo da configuração; ou coordenação delegada de SPEC com ancestralidade/predecessores validados: nesses modos Task executando e Run ativa atravessam `audit`/`advance`, com records exigidos no SHA limpo e exclusão só da coordenação declarada. Após provas de publicação, complete Evidence/revisão aplicável/Gui e persista fechamento; metadata posterior não muda produto/tag. Avance só com Release/CI exatas e demais Tasks terminais; falha preserva bloqueio recuperável. Detalhes no guia 26, seção de ciclo corrente.
29
+ - Fechamento pós-publicação de uma Task histórica bloqueada usa somente `task recover-post-publication` e `task resume-post-publication` com recibo emitido pela Change da manutenção e prova imutável da publicação. O novo responsável recebe a Execution/SPEC original, revisões exatas e claim exclusivo; se a mesma invocação humana continuar após a manutenção terminada com Gui, o handoff tipado preserva ambas as raízes e seus turnos observados. O ciclo já avançado permanece aberto na versão corrente, sem novo grant, refreeze, reetiquetagem de SHA, produto novo ou segunda publicação. Task histórica não recebe claim de escrita de produto; apenas records e o avanço já comprovado podem integrar o fechamento. Guie-se pelo contrato canônico de recuperação da skill execution.
29
30
  - Plano visível: `DEFINE:` contexto/resultado/critério, `PLAN:` ciclo/DAG, `EXECUTE:` mudança, `VERIFY:` valida/Evidence/encerra; não use artefato como fase nem narre comandos internos. Registre decisão humana/IA com origem junto de Change/Execution; derive ledger do Git diff e preserve alterações do usuário. Estado novo fica em `.agents/records/<kind>/<ano>/<mês>`; diário, `.agents/data` e V1 são legado só leitura até migração explícita.
@@ -1 +1 @@
1
- 4.9.0
1
+ 5.0.0