@cleocode/core 2026.10.17 → 2026.10.18-rc.ci.688

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 (188) hide show
  1. package/dist/audit-prune.d.ts +37 -8
  2. package/dist/audit-prune.d.ts.map +1 -1
  3. package/dist/audit-prune.js +46 -12
  4. package/dist/audit-prune.js.map +1 -1
  5. package/dist/build-provenance.json +2 -2
  6. package/dist/cloud/manifest-check.d.ts +21 -0
  7. package/dist/cloud/manifest-check.d.ts.map +1 -1
  8. package/dist/cloud/manifest-check.js +46 -1
  9. package/dist/cloud/manifest-check.js.map +1 -1
  10. package/dist/cloud/nexus-vault.d.ts +19 -0
  11. package/dist/cloud/nexus-vault.d.ts.map +1 -1
  12. package/dist/cloud/nexus-vault.js +134 -23
  13. package/dist/cloud/nexus-vault.js.map +1 -1
  14. package/dist/cloud/signing.d.ts.map +1 -1
  15. package/dist/cloud/signing.js +4 -0
  16. package/dist/cloud/signing.js.map +1 -1
  17. package/dist/doctor/row-identity.d.ts.map +1 -1
  18. package/dist/doctor/row-identity.js +2 -1
  19. package/dist/doctor/row-identity.js.map +1 -1
  20. package/dist/git/work-tree.d.ts +17 -0
  21. package/dist/git/work-tree.d.ts.map +1 -1
  22. package/dist/git/work-tree.js +30 -0
  23. package/dist/git/work-tree.js.map +1 -1
  24. package/dist/goal/close.d.ts +95 -0
  25. package/dist/goal/close.d.ts.map +1 -0
  26. package/dist/goal/close.js +497 -0
  27. package/dist/goal/close.js.map +1 -0
  28. package/dist/goal/draft.d.ts +81 -0
  29. package/dist/goal/draft.d.ts.map +1 -0
  30. package/dist/goal/draft.js +331 -0
  31. package/dist/goal/draft.js.map +1 -0
  32. package/dist/hooks/release-gate.d.ts +3 -0
  33. package/dist/hooks/release-gate.d.ts.map +1 -1
  34. package/dist/hooks/release-gate.js +4 -1
  35. package/dist/hooks/release-gate.js.map +1 -1
  36. package/dist/orchestration/lean-gain.d.ts +26 -0
  37. package/dist/orchestration/lean-gain.d.ts.map +1 -0
  38. package/dist/orchestration/lean-gain.js +61 -0
  39. package/dist/orchestration/lean-gain.js.map +1 -0
  40. package/dist/release/backfill.d.ts.map +1 -1
  41. package/dist/release/backfill.js +15 -5
  42. package/dist/release/backfill.js.map +1 -1
  43. package/dist/release/ci-evidence.d.ts +90 -5
  44. package/dist/release/ci-evidence.d.ts.map +1 -1
  45. package/dist/release/ci-evidence.js +277 -4
  46. package/dist/release/ci-evidence.js.map +1 -1
  47. package/dist/release/plan.d.ts +4 -1
  48. package/dist/release/plan.d.ts.map +1 -1
  49. package/dist/release/plan.js +10 -2
  50. package/dist/release/plan.js.map +1 -1
  51. package/dist/release/reconcile.d.ts +10 -0
  52. package/dist/release/reconcile.d.ts.map +1 -1
  53. package/dist/release/reconcile.js +42 -19
  54. package/dist/release/reconcile.js.map +1 -1
  55. package/dist/release/release-manifest.d.ts +2 -1
  56. package/dist/release/release-manifest.d.ts.map +1 -1
  57. package/dist/release/release-manifest.js +15 -1
  58. package/dist/release/release-manifest.js.map +1 -1
  59. package/dist/resources/admission-ledger.d.ts +21 -4
  60. package/dist/resources/admission-ledger.d.ts.map +1 -1
  61. package/dist/resources/admission-ledger.js +102 -19
  62. package/dist/resources/admission-ledger.js.map +1 -1
  63. package/dist/resources/run-class.d.ts +22 -0
  64. package/dist/resources/run-class.d.ts.map +1 -1
  65. package/dist/resources/run-class.js +81 -0
  66. package/dist/resources/run-class.js.map +1 -1
  67. package/dist/sessions/handoff.d.ts +2 -2
  68. package/dist/sessions/handoff.js +2 -2
  69. package/dist/store/audit-log-schema.d.ts +106 -39
  70. package/dist/store/audit-log-schema.d.ts.map +1 -1
  71. package/dist/store/audit-log-schema.js +6 -3
  72. package/dist/store/audit-log-schema.js.map +1 -1
  73. package/dist/store/row-identity-registry.d.ts +42 -6
  74. package/dist/store/row-identity-registry.d.ts.map +1 -1
  75. package/dist/store/row-identity-registry.js +256 -34
  76. package/dist/store/row-identity-registry.js.map +1 -1
  77. package/dist/store/row-identity.d.ts.map +1 -1
  78. package/dist/store/row-identity.js +16 -4
  79. package/dist/store/row-identity.js.map +1 -1
  80. package/dist/store/schema/cleo-global/nexus.d.ts +16 -0
  81. package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
  82. package/dist/store/schema/cleo-global/nexus.js +4 -1
  83. package/dist/store/schema/cleo-global/nexus.js.map +1 -1
  84. package/dist/store/schema/cleo-project/audit.d.ts +48 -0
  85. package/dist/store/schema/cleo-project/audit.d.ts.map +1 -1
  86. package/dist/store/schema/cleo-project/audit.js +15 -1
  87. package/dist/store/schema/cleo-project/audit.js.map +1 -1
  88. package/dist/store/schema/cleo-project/lifecycle.d.ts +112 -0
  89. package/dist/store/schema/cleo-project/lifecycle.d.ts.map +1 -1
  90. package/dist/store/schema/cleo-project/lifecycle.js +36 -4
  91. package/dist/store/schema/cleo-project/lifecycle.js.map +1 -1
  92. package/dist/store/schema/cleo-project/provenance-commits.d.ts +48 -0
  93. package/dist/store/schema/cleo-project/provenance-commits.d.ts.map +1 -1
  94. package/dist/store/schema/cleo-project/provenance-commits.js +10 -1
  95. package/dist/store/schema/cleo-project/provenance-commits.js.map +1 -1
  96. package/dist/store/schema/cleo-project/provenance-rest.d.ts +128 -0
  97. package/dist/store/schema/cleo-project/provenance-rest.d.ts.map +1 -1
  98. package/dist/store/schema/cleo-project/provenance-rest.js +25 -1
  99. package/dist/store/schema/cleo-project/provenance-rest.js.map +1 -1
  100. package/dist/store/schema/cleo-project/tasks-core.d.ts +16 -0
  101. package/dist/store/schema/cleo-project/tasks-core.d.ts.map +1 -1
  102. package/dist/store/schema/cleo-project/tasks-core.js +6 -1
  103. package/dist/store/schema/cleo-project/tasks-core.js.map +1 -1
  104. package/dist/store/session-store.d.ts +5 -4
  105. package/dist/store/session-store.d.ts.map +1 -1
  106. package/dist/store/session-store.js +19 -5
  107. package/dist/store/session-store.js.map +1 -1
  108. package/dist/store/sync/apply/parent-delete.d.ts.map +1 -1
  109. package/dist/store/sync/apply/parent-delete.js +8 -0
  110. package/dist/store/sync/apply/parent-delete.js.map +1 -1
  111. package/dist/store/sync/apply/write-api.d.ts +3 -2
  112. package/dist/store/sync/apply/write-api.d.ts.map +1 -1
  113. package/dist/store/sync/apply/write-api.js +19 -0
  114. package/dist/store/sync/apply/write-api.js.map +1 -1
  115. package/dist/store/sync/capture.d.ts +11 -0
  116. package/dist/store/sync/capture.d.ts.map +1 -1
  117. package/dist/store/sync/capture.js +13 -3
  118. package/dist/store/sync/capture.js.map +1 -1
  119. package/dist/store/sync/flags.d.ts +10 -0
  120. package/dist/store/sync/flags.d.ts.map +1 -1
  121. package/dist/store/sync/flags.js +43 -5
  122. package/dist/store/sync/flags.js.map +1 -1
  123. package/dist/store/sync/timestamp-canon.d.ts.map +1 -1
  124. package/dist/store/sync/timestamp-canon.js +37 -0
  125. package/dist/store/sync/timestamp-canon.js.map +1 -1
  126. package/dist/store/tasks-schema.d.ts +1 -1
  127. package/dist/store/tasks-schema.d.ts.map +1 -1
  128. package/dist/store/tasks-schema.js +5 -1
  129. package/dist/store/tasks-schema.js.map +1 -1
  130. package/dist/store/twin-collapse.d.ts +2 -1
  131. package/dist/store/twin-collapse.d.ts.map +1 -1
  132. package/dist/store/twin-collapse.js +128 -104
  133. package/dist/store/twin-collapse.js.map +1 -1
  134. package/dist/store/validation-schemas.d.ts +390 -38
  135. package/dist/store/validation-schemas.d.ts.map +1 -1
  136. package/dist/store/vault-manifest.d.ts +9 -2
  137. package/dist/store/vault-manifest.d.ts.map +1 -1
  138. package/dist/store/vault-manifest.js +25 -4
  139. package/dist/store/vault-manifest.js.map +1 -1
  140. package/dist/system/health.d.ts.map +1 -1
  141. package/dist/system/health.js +3 -2
  142. package/dist/system/health.js.map +1 -1
  143. package/dist/tasks/affected-packages.d.ts +21 -2
  144. package/dist/tasks/affected-packages.d.ts.map +1 -1
  145. package/dist/tasks/affected-packages.js +96 -8
  146. package/dist/tasks/affected-packages.js.map +1 -1
  147. package/dist/tasks/affected-scope.d.ts +7 -2
  148. package/dist/tasks/affected-scope.d.ts.map +1 -1
  149. package/dist/tasks/affected-scope.js +158 -14
  150. package/dist/tasks/affected-scope.js.map +1 -1
  151. package/dist/tasks/change-set.d.ts +10 -0
  152. package/dist/tasks/change-set.d.ts.map +1 -1
  153. package/dist/tasks/change-set.js +70 -3
  154. package/dist/tasks/change-set.js.map +1 -1
  155. package/dist/tasks/done-plan.d.ts +11 -5
  156. package/dist/tasks/done-plan.d.ts.map +1 -1
  157. package/dist/tasks/done-plan.js +54 -10
  158. package/dist/tasks/done-plan.js.map +1 -1
  159. package/dist/tasks/done-record.d.ts.map +1 -1
  160. package/dist/tasks/done-record.js +25 -0
  161. package/dist/tasks/done-record.js.map +1 -1
  162. package/dist/tasks/evidence.d.ts.map +1 -1
  163. package/dist/tasks/evidence.js +22 -2
  164. package/dist/tasks/evidence.js.map +1 -1
  165. package/dist/tasks/gate-result-cache.d.ts.map +1 -1
  166. package/dist/tasks/gate-result-cache.js +24 -3
  167. package/dist/tasks/gate-result-cache.js.map +1 -1
  168. package/dist/tasks/gate-runner.d.ts +27 -3
  169. package/dist/tasks/gate-runner.d.ts.map +1 -1
  170. package/dist/tasks/gate-runner.js +77 -29
  171. package/dist/tasks/gate-runner.js.map +1 -1
  172. package/dist/tasks/qa-run-binding.d.ts +22 -3
  173. package/dist/tasks/qa-run-binding.d.ts.map +1 -1
  174. package/dist/tasks/qa-run-binding.js +46 -4
  175. package/dist/tasks/qa-run-binding.js.map +1 -1
  176. package/dist/tasks/test-run-binding.d.ts +21 -3
  177. package/dist/tasks/test-run-binding.d.ts.map +1 -1
  178. package/dist/tasks/test-run-binding.js +60 -14
  179. package/dist/tasks/test-run-binding.js.map +1 -1
  180. package/dist/tasks/tool-cache.d.ts.map +1 -1
  181. package/dist/tasks/tool-cache.js +24 -12
  182. package/dist/tasks/tool-cache.js.map +1 -1
  183. package/migrations/drizzle-cleo-global/20261016130000_t13777-nexus-audit-row-uids/migration.sql +18 -0
  184. package/migrations/drizzle-cleo-project/20261015100000_t12914-lifecycle-release-row-uids/migration.sql +88 -0
  185. package/migrations/drizzle-cleo-project/20261016130000_t13777-log-row-uids/migration.sql +42 -0
  186. package/migrations/drizzle-cleo-project/20261016140000_t13777-audit-collapse/migration.sql +31 -0
  187. package/package.json +18 -18
  188. package/templates/CLEO-REFERENCE.md +1 -1
@@ -0,0 +1,88 @@
1
+ -- T12914 (epic T12323) — row uids for the lifecycle, release, PR and commit
2
+ -- tables (project store).
3
+ --
4
+ -- Adds a nullable `uid` column and a unique index on it to each of the 16
5
+ -- tables (the two minted ones, `tasks_lifecycle_evidence` and
6
+ -- `tasks_lifecycle_transitions`, also get `birth_fp`). Without a uid none of
7
+ -- them had capture triggers, so a release, a lifecycle stage or a commit
8
+ -- recorded on one device never reached another, and the typed release merge
9
+ -- rule (release.status.absorbing, T12943) never fired across devices (Stage C
10
+ -- gate, T13549). Spec: `cleo docs fetch t12341-uid-scheme`.
11
+ --
12
+ -- The columns are filled by TypeScript at open (store/row-identity.ts, inside
13
+ -- the cold-open lease), and rows inserted by this build get theirs from the
14
+ -- per-connection TEMP trigger. Nothing here rebuilds a table or touches a row
15
+ -- (only ADD COLUMN and CREATE INDEX), so the T12541 rebuild probe and the
16
+ -- gate 36 DML rules do not apply; a probe-stamped store gets its columns and
17
+ -- indexes from the open's heal.
18
+ --
19
+ -- @task T12914
20
+ -- @epic T12323
21
+
22
+ ALTER TABLE `tasks_lifecycle_pipelines` ADD COLUMN `uid` text;
23
+ --> statement-breakpoint
24
+ ALTER TABLE `tasks_lifecycle_stages` ADD COLUMN `uid` text;
25
+ --> statement-breakpoint
26
+ ALTER TABLE `tasks_lifecycle_gate_results` ADD COLUMN `uid` text;
27
+ --> statement-breakpoint
28
+ ALTER TABLE `tasks_lifecycle_evidence` ADD COLUMN `uid` text;
29
+ --> statement-breakpoint
30
+ ALTER TABLE `tasks_lifecycle_evidence` ADD COLUMN `birth_fp` text;
31
+ --> statement-breakpoint
32
+ ALTER TABLE `tasks_lifecycle_transitions` ADD COLUMN `uid` text;
33
+ --> statement-breakpoint
34
+ ALTER TABLE `tasks_lifecycle_transitions` ADD COLUMN `birth_fp` text;
35
+ --> statement-breakpoint
36
+ ALTER TABLE `tasks_releases` ADD COLUMN `uid` text;
37
+ --> statement-breakpoint
38
+ ALTER TABLE `tasks_release_commits` ADD COLUMN `uid` text;
39
+ --> statement-breakpoint
40
+ ALTER TABLE `tasks_release_changes` ADD COLUMN `uid` text;
41
+ --> statement-breakpoint
42
+ ALTER TABLE `tasks_release_changesets` ADD COLUMN `uid` text;
43
+ --> statement-breakpoint
44
+ ALTER TABLE `tasks_release_artifacts` ADD COLUMN `uid` text;
45
+ --> statement-breakpoint
46
+ ALTER TABLE `tasks_pull_requests` ADD COLUMN `uid` text;
47
+ --> statement-breakpoint
48
+ ALTER TABLE `tasks_pr_commits` ADD COLUMN `uid` text;
49
+ --> statement-breakpoint
50
+ ALTER TABLE `tasks_pr_tasks` ADD COLUMN `uid` text;
51
+ --> statement-breakpoint
52
+ ALTER TABLE `tasks_commits` ADD COLUMN `uid` text;
53
+ --> statement-breakpoint
54
+ ALTER TABLE `tasks_commit_files` ADD COLUMN `uid` text;
55
+ --> statement-breakpoint
56
+ ALTER TABLE `tasks_task_commits` ADD COLUMN `uid` text;
57
+ --> statement-breakpoint
58
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_lifecycle_pipelines_uid` ON `tasks_lifecycle_pipelines` (`uid`);
59
+ --> statement-breakpoint
60
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_lifecycle_stages_uid` ON `tasks_lifecycle_stages` (`uid`);
61
+ --> statement-breakpoint
62
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_lifecycle_gate_results_uid` ON `tasks_lifecycle_gate_results` (`uid`);
63
+ --> statement-breakpoint
64
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_lifecycle_evidence_uid` ON `tasks_lifecycle_evidence` (`uid`);
65
+ --> statement-breakpoint
66
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_lifecycle_transitions_uid` ON `tasks_lifecycle_transitions` (`uid`);
67
+ --> statement-breakpoint
68
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_releases_uid` ON `tasks_releases` (`uid`);
69
+ --> statement-breakpoint
70
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_release_commits_uid` ON `tasks_release_commits` (`uid`);
71
+ --> statement-breakpoint
72
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_release_changes_uid` ON `tasks_release_changes` (`uid`);
73
+ --> statement-breakpoint
74
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_release_changesets_uid` ON `tasks_release_changesets` (`uid`);
75
+ --> statement-breakpoint
76
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_release_artifacts_uid` ON `tasks_release_artifacts` (`uid`);
77
+ --> statement-breakpoint
78
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_pull_requests_uid` ON `tasks_pull_requests` (`uid`);
79
+ --> statement-breakpoint
80
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_pr_commits_uid` ON `tasks_pr_commits` (`uid`);
81
+ --> statement-breakpoint
82
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_pr_tasks_uid` ON `tasks_pr_tasks` (`uid`);
83
+ --> statement-breakpoint
84
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_commits_uid` ON `tasks_commits` (`uid`);
85
+ --> statement-breakpoint
86
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_commit_files_uid` ON `tasks_commit_files` (`uid`);
87
+ --> statement-breakpoint
88
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_task_commits_uid` ON `tasks_task_commits` (`uid`);
@@ -0,0 +1,42 @@
1
+ -- T13777 (epic T12323) — row uids for the logs every command writes (project
2
+ -- store): token usage and the session handoff entries.
3
+ --
4
+ -- Both tables are portable, so every vault snapshot lists them, but neither
5
+ -- had row identity, so the change journal never carried them: a journal
6
+ -- checkpoint could not account for their rows and `cleo cloud push` refused
7
+ -- on every real store (T12999 staging, 2026-10-16). Adds a nullable `uid`
8
+ -- column and a unique index on it to each. Spec: `cleo docs fetch t12341-uid-scheme`.
9
+ --
10
+ -- The write-once guard on the handoff entries was `BEFORE UPDATE` with no
11
+ -- column list, so it aborted the uid fill and the per-connection uid trigger
12
+ -- (journal spec §2.11 §7 note for T12341). It is re-created as `BEFORE UPDATE
13
+ -- OF` the content columns: the handoff stays write-once, and its identity
14
+ -- columns can be filled.
15
+ --
16
+ -- The columns are filled by TypeScript at open (store/row-identity.ts, inside
17
+ -- the cold-open lease), and rows inserted by this build get theirs from the
18
+ -- per-connection TEMP trigger. Nothing here rebuilds a table or touches a row.
19
+ --
20
+ -- @task T13777
21
+ -- @epic T12323
22
+
23
+ ALTER TABLE `tasks_token_usage` ADD COLUMN `uid` text;
24
+ --> statement-breakpoint
25
+ ALTER TABLE `tasks_session_handoff_entries` ADD COLUMN `uid` text;
26
+ --> statement-breakpoint
27
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_token_usage_uid` ON `tasks_token_usage` (`uid`);
28
+ --> statement-breakpoint
29
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_session_handoff_entries_uid` ON `tasks_session_handoff_entries` (`uid`);
30
+ --> statement-breakpoint
31
+ DROP TRIGGER IF EXISTS `trg_tasks_session_handoff_no_update`;
32
+ --> statement-breakpoint
33
+ CREATE TRIGGER `trg_tasks_session_handoff_no_update`
34
+ BEFORE UPDATE OF `handoff_json`, `created_at` ON `tasks_session_handoff_entries`
35
+ FOR EACH ROW
36
+ WHEN NOT EXISTS (SELECT 1 FROM cleo_trigger_suspend WHERE scope IN ('guard', 'all'))
37
+ BEGIN
38
+ SELECT RAISE(
39
+ ABORT,
40
+ 'T1609_HANDOFF_IMMUTABLE: session_handoff_entries rows are write-once. Use persistHandoff() exactly once per session.'
41
+ );
42
+ END;
@@ -0,0 +1,31 @@
1
+ -- T13777 part 2 (epic T12323) — the dispatch audit moves into `tasks_audit_log`,
2
+ -- which gets a row uid and syncs.
3
+ --
4
+ -- Every command writes an audit row. The dispatch audit went to the bare
5
+ -- `audit_log` and the task-mutation audit to `tasks_audit_log`; neither had
6
+ -- row identity, so the change journal carried neither, and a journal
7
+ -- checkpoint could not account for their rows (T12999 staging, 2026-10-16).
8
+ -- This build writes the dispatch audit into the twin, the twin collapse drains
9
+ -- the bare rows into it (store/twin-collapse.ts, lossless), and the twin is
10
+ -- declared natural on `id`.
11
+ --
12
+ -- `dispatch_idempotency_key` holds a dispatch request's idempotency key. One
13
+ -- key may record several rows (a failed attempt, then its retry), which
14
+ -- UNIQUE(project_hash, domain, operation, idempotency_key) on the twin would
15
+ -- refuse, so the key lives outside that constraint; the idempotent replay
16
+ -- reads it through the index below.
17
+ --
18
+ -- The columns are filled by TypeScript at open (store/row-identity.ts, inside
19
+ -- the cold-open lease), and rows inserted by this build get theirs from the
20
+ -- per-connection TEMP trigger. Nothing here rebuilds a table or touches a row.
21
+ --
22
+ -- @task T13777
23
+ -- @epic T12323
24
+
25
+ ALTER TABLE `tasks_audit_log` ADD COLUMN `uid` text;
26
+ --> statement-breakpoint
27
+ ALTER TABLE `tasks_audit_log` ADD COLUMN `dispatch_idempotency_key` text;
28
+ --> statement-breakpoint
29
+ CREATE UNIQUE INDEX IF NOT EXISTS `uq_tasks_audit_log_uid` ON `tasks_audit_log` (`uid`);
30
+ --> statement-breakpoint
31
+ CREATE INDEX IF NOT EXISTS `idx_tasks_audit_log_dispatch_idempotency` ON `tasks_audit_log` (`project_hash`, `domain`, `operation`, `dispatch_idempotency_key`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cleocode/core",
3
- "version": "2026.10.17",
3
+ "version": "2026.10.18-rc.ci.688",
4
4
  "description": "CLEO core business logic kernel — tasks, sessions, memory, orchestration, lifecycle, with bundled SQLite store",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -371,6 +371,11 @@
371
371
  "import": "./dist/tasks/*.js",
372
372
  "require": "./dist/tasks/*.js"
373
373
  },
374
+ "./goal/*.js": {
375
+ "types": "./dist/goal/*.d.ts",
376
+ "import": "./dist/goal/*.js",
377
+ "require": "./dist/goal/*.js"
378
+ },
374
379
  "./verification/*.js": {
375
380
  "types": "./dist/verification/*.d.ts",
376
381
  "import": "./dist/verification/*.js",
@@ -496,16 +501,16 @@
496
501
  "write-file-atomic": "^7.0.1",
497
502
  "yaml": "^2.8.3",
498
503
  "zod": "^4.3.6",
499
- "@cleocode/adapters": "2026.10.17",
500
- "@cleocode/agents": "2026.10.17",
501
- "@cleocode/caamp": "2026.10.17",
502
- "@cleocode/contracts": "2026.10.17",
503
- "@cleocode/git-shim": "2026.10.17",
504
- "@cleocode/lafs": "2026.10.17",
505
- "@cleocode/nexus": "2026.10.17",
506
- "@cleocode/paths": "2026.10.17",
507
- "@cleocode/skills": "2026.10.17",
508
- "@cleocode/worktree": "2026.10.17"
504
+ "@cleocode/adapters": "2026.10.18-rc.ci.688",
505
+ "@cleocode/agents": "2026.10.18-rc.ci.688",
506
+ "@cleocode/caamp": "2026.10.18-rc.ci.688",
507
+ "@cleocode/contracts": "2026.10.18-rc.ci.688",
508
+ "@cleocode/git-shim": "2026.10.18-rc.ci.688",
509
+ "@cleocode/lafs": "2026.10.18-rc.ci.688",
510
+ "@cleocode/nexus": "2026.10.18-rc.ci.688",
511
+ "@cleocode/paths": "2026.10.18-rc.ci.688",
512
+ "@cleocode/skills": "2026.10.18-rc.ci.688",
513
+ "@cleocode/worktree": "2026.10.18-rc.ci.688"
509
514
  },
510
515
  "engines": {
511
516
  "node": ">=24.16.0"
@@ -531,7 +536,7 @@
531
536
  "@types/proper-lockfile": "^4.1.4",
532
537
  "@types/tar": "^6.1.13",
533
538
  "@types/write-file-atomic": "^4.0.3",
534
- "@cleocode/utils": "2026.10.17"
539
+ "@cleocode/utils": "2026.10.18"
535
540
  },
536
541
  "repository": {
537
542
  "type": "git",
@@ -540,12 +545,7 @@
540
545
  },
541
546
  "optionalDependencies": {
542
547
  "llmtxt": "^2026.5.15",
543
- "@cleocode/studio": "^2026.10.17"
544
- },
545
- "cleo": {
546
- "releasedFeatures": [
547
- "hooks-v1"
548
- ]
548
+ "@cleocode/studio": "^2026.10.18-rc.ci.688"
549
549
  },
550
550
  "scripts": {
551
551
  "build": "tsc && node scripts/copy-selfimprove-fixtures.mjs && node scripts/write-build-provenance.mjs",
@@ -301,7 +301,7 @@ All overrides append a line to `.cleo/audit/force-bypass.jsonl`. Use sparingly.
301
301
 
302
302
  ### Test evidence without churn (T12957)
303
303
 
304
- The evidence run is the one run. Start with `cleo done <id> --plan`, which picks affected → ci and shows each tool's cache state; it never plans a whole-suite `tool:test` it would have to run (owner decision 2026-10-12, T13647) and refuses with `test-run-needed` instead, naming the scoped evidence to record. When the PR has merged and the project sets `evidence.ciSatisfies`, record `testsPassed`/`qaPassed` with `ci:<pr>` and run nothing locally. Otherwise, when `testing.affectedCommand` is configured, use `tool:test-affected` (packages the diff touches plus dependents); a full `tool:test` is then only for changes to root config, which affected planning refuses. Without it, use a targeted `test-run:<json>` of the test files you changed, or `tool:test`. After the merge, a scoped run carries to the merge commit only when the change's files are byte-identical; otherwise a targeted `test-run:` recorded on a main HEAD that descends from the merge, on the current tree and covering the change's files, stands in whatever the merge commit's own CI concluded (owner decision 2026-10-13, T13673). The same rule holds for `qaPassed` (T13644): after the merge, `qa-run:` receipts (a typecheck and a lint) carry when the change's files are byte-identical, or stand in when recorded on such a main HEAD, on the current tree, with roots that together cover the change's files. While iterating, run only the failing or changed test files; never run the suite by hand and then again through `tool:test`. On macOS heavy `test`/`build` runs take one machine-wide slot by default (`CLEO_TOOL_CONCURRENCY_TEST=<n>` raises it).
304
+ The evidence run is the one run. Start with `cleo done <id> --plan`, which picks affected → ci and shows each tool's cache state; it never plans a whole-suite `tool:test` it would have to run (owner decision 2026-10-12, T13647) and refuses with `test-run-needed` instead, naming the scoped evidence to record. When the PR has merged and the project sets `evidence.ciSatisfies`, record `testsPassed`/`qaPassed` with `ci:<pr>` and run nothing locally. Otherwise, when `testing.affectedCommand` is configured, use `tool:test-affected` (packages the diff touches plus dependents); a full `tool:test` is then only for changes to root config, which affected planning refuses. Without it, use a targeted `test-run:<json>` of the test files you changed, or `tool:test`. After the merge, a scoped run carries to the merge commit only when the change's files are byte-identical; otherwise a targeted `test-run:` recorded on a main HEAD that descends from the merge, on the current tree and covering the change's files, stands in whatever the merge commit's own CI concluded (owner decision 2026-10-13, T13673). Such a report goes stale only when the change's own files, the test files it ran or their test inputs (root configs and lockfile; the `package.json`, `tsconfig*.json`, runner configs and setup files of the directories above those files) move (T13784): unrelated commits landing on main after the run or after verify leave it standing, and a run followed by a pull of main records `runHeadSha` (HEAD as of the run) so those commits are judged the same way. The same rule holds for `qaPassed` (T13644): after the merge, `qa-run:` receipts (a typecheck and a lint) carry when the change's files are byte-identical, or stand in when recorded on such a main HEAD, on the current tree, with roots that together cover the change's files. A parent whose work was split across its children closes on their PRs (T13785): when several merged PRs cite the parent, those that also cite one of its done children are its own work, each recorded as an `implemented` attempt with the parent's criteria, instead of `pr-ambiguous`. While iterating, run only the failing or changed test files; never run the suite by hand and then again through `tool:test`. On macOS heavy `test`/`build` runs take one machine-wide slot by default (`CLEO_TOOL_CONCURRENCY_TEST=<n>` raises it).
305
305
 
306
306
  ### `pr:<number>` retroactive atom (T9764)
307
307