@ashlr/hub 3.2.7 → 3.3.2

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 (192) hide show
  1. package/CHANGELOG.md +314 -2
  2. package/README.md +54 -38
  3. package/dist/build-identity.json +2 -2
  4. package/dist/cli/audit.js +18 -0
  5. package/dist/cli/audit.js.map +1 -1
  6. package/dist/cli/backlog.d.ts +0 -5
  7. package/dist/cli/backlog.js +18 -0
  8. package/dist/cli/backlog.js.map +1 -1
  9. package/dist/cli/comms.js +20 -0
  10. package/dist/cli/comms.js.map +1 -1
  11. package/dist/cli/completions.d.ts +6 -1
  12. package/dist/cli/completions.js +33 -10
  13. package/dist/cli/completions.js.map +1 -1
  14. package/dist/cli/daemon.js +10 -3
  15. package/dist/cli/daemon.js.map +1 -1
  16. package/dist/cli/dashboard.js +5 -4
  17. package/dist/cli/dashboard.js.map +1 -1
  18. package/dist/cli/demo.d.ts +0 -27
  19. package/dist/cli/demo.js +17 -0
  20. package/dist/cli/demo.js.map +1 -1
  21. package/dist/cli/help.js +22 -9
  22. package/dist/cli/help.js.map +1 -1
  23. package/dist/cli/inbox.d.ts +14 -2
  24. package/dist/cli/inbox.js +137 -23
  25. package/dist/cli/inbox.js.map +1 -1
  26. package/dist/cli/onboard.d.ts +0 -13
  27. package/dist/cli/onboard.js +20 -0
  28. package/dist/cli/onboard.js.map +1 -1
  29. package/dist/cli/resources.js +15 -0
  30. package/dist/cli/resources.js.map +1 -1
  31. package/dist/cli/run.js +1 -1
  32. package/dist/cli/run.js.map +1 -1
  33. package/dist/cli/sandbox.js +43 -0
  34. package/dist/cli/sandbox.js.map +1 -1
  35. package/dist/cli/serve.js +7 -3
  36. package/dist/cli/serve.js.map +1 -1
  37. package/dist/cli/setup.d.ts +5 -3
  38. package/dist/cli/setup.js +14 -7
  39. package/dist/cli/setup.js.map +1 -1
  40. package/dist/cli/tui.d.ts +0 -6
  41. package/dist/cli/tui.js +14 -0
  42. package/dist/cli/tui.js.map +1 -1
  43. package/dist/cli/update.js +3 -1
  44. package/dist/cli/update.js.map +1 -1
  45. package/dist/core/config.js +70 -0
  46. package/dist/core/config.js.map +1 -1
  47. package/dist/core/daemon/loop.js +83 -3
  48. package/dist/core/daemon/loop.js.map +1 -1
  49. package/dist/core/daemon/runtime-activation-resident-start-protocol.d.ts +141 -0
  50. package/dist/core/daemon/runtime-activation-resident-start-protocol.js +462 -0
  51. package/dist/core/daemon/runtime-activation-resident-start-protocol.js.map +1 -0
  52. package/dist/core/daemon/runtime-activation-resident-start-runtime.d.ts +27 -0
  53. package/dist/core/daemon/runtime-activation-resident-start-runtime.js +28 -0
  54. package/dist/core/daemon/runtime-activation-resident-start-runtime.js.map +1 -0
  55. package/dist/core/daemon/runtime-activation-stopped-consumer.d.ts +139 -0
  56. package/dist/core/daemon/runtime-activation-stopped-consumer.js +995 -0
  57. package/dist/core/daemon/runtime-activation-stopped-consumer.js.map +1 -0
  58. package/dist/core/daemon/runtime-activation-stopped-runtime.d.ts +36 -0
  59. package/dist/core/daemon/runtime-activation-stopped-runtime.js +134 -0
  60. package/dist/core/daemon/runtime-activation-stopped-runtime.js.map +1 -0
  61. package/dist/core/daemon/runtime-activation-transaction.d.ts +41 -17
  62. package/dist/core/daemon/runtime-activation-transaction.js +80 -11
  63. package/dist/core/daemon/runtime-activation-transaction.js.map +1 -1
  64. package/dist/core/daemon/runtime-release-dependency-inventory.js +1 -0
  65. package/dist/core/daemon/runtime-release-dependency-inventory.js.map +1 -1
  66. package/dist/core/daemon/service-install-authority.d.ts +1 -1
  67. package/dist/core/daemon/service-install-authority.js +4 -2
  68. package/dist/core/daemon/service-install-authority.js.map +1 -1
  69. package/dist/core/dashboard.d.ts +10 -0
  70. package/dist/core/dashboard.js +103 -28
  71. package/dist/core/dashboard.js.map +1 -1
  72. package/dist/core/effective-config.js +7 -0
  73. package/dist/core/effective-config.js.map +1 -1
  74. package/dist/core/fleet/automerge-pass.js +57 -73
  75. package/dist/core/fleet/automerge-pass.js.map +1 -1
  76. package/dist/core/fleet/decisions-ledger.js +36 -13
  77. package/dist/core/fleet/decisions-ledger.js.map +1 -1
  78. package/dist/core/fleet/external-skill-git-capture.js +9 -1
  79. package/dist/core/fleet/external-skill-git-capture.js.map +1 -1
  80. package/dist/core/fleet/judge-decision-metadata.d.ts +8 -1
  81. package/dist/core/fleet/judge-decision-metadata.js +14 -1
  82. package/dist/core/fleet/judge-decision-metadata.js.map +1 -1
  83. package/dist/core/fleet/judge-trace.js +2 -1
  84. package/dist/core/fleet/judge-trace.js.map +1 -1
  85. package/dist/core/fleet/manager.d.ts +21 -1
  86. package/dist/core/fleet/manager.js +137 -41
  87. package/dist/core/fleet/manager.js.map +1 -1
  88. package/dist/core/fleet/post-merge-credit-label.d.ts +10 -0
  89. package/dist/core/fleet/post-merge-credit-label.js +13 -0
  90. package/dist/core/fleet/post-merge-credit-label.js.map +1 -0
  91. package/dist/core/fleet/post-merge-credit.d.ts +119 -12
  92. package/dist/core/fleet/post-merge-credit.js +353 -14
  93. package/dist/core/fleet/post-merge-credit.js.map +1 -1
  94. package/dist/core/fleet/self-improve.d.ts +38 -5
  95. package/dist/core/fleet/self-improve.js +201 -12
  96. package/dist/core/fleet/self-improve.js.map +1 -1
  97. package/dist/core/fleet/skill-library.d.ts +21 -2
  98. package/dist/core/fleet/skill-library.js +54 -12
  99. package/dist/core/fleet/skill-library.js.map +1 -1
  100. package/dist/core/fleet/worked-ledger.d.ts +22 -0
  101. package/dist/core/fleet/worked-ledger.js +32 -0
  102. package/dist/core/fleet/worked-ledger.js.map +1 -1
  103. package/dist/core/goals/store.js +60 -6
  104. package/dist/core/goals/store.js.map +1 -1
  105. package/dist/core/inbox/apply.js +2 -1
  106. package/dist/core/inbox/apply.js.map +1 -1
  107. package/dist/core/inbox/merge.d.ts +10 -1
  108. package/dist/core/inbox/merge.js +97 -18
  109. package/dist/core/inbox/merge.js.map +1 -1
  110. package/dist/core/integrations/github.d.ts +2 -0
  111. package/dist/core/integrations/github.js +2 -1
  112. package/dist/core/integrations/github.js.map +1 -1
  113. package/dist/core/learn/reflect.d.ts +42 -4
  114. package/dist/core/learn/reflect.js +66 -5
  115. package/dist/core/learn/reflect.js.map +1 -1
  116. package/dist/core/onboard.d.ts +2 -0
  117. package/dist/core/onboard.js +9 -3
  118. package/dist/core/onboard.js.map +1 -1
  119. package/dist/core/run/engines.d.ts +8 -0
  120. package/dist/core/run/engines.js +9 -1
  121. package/dist/core/run/engines.js.map +1 -1
  122. package/dist/core/run/learned-router.js +28 -3
  123. package/dist/core/run/learned-router.js.map +1 -1
  124. package/dist/core/run/orchestrator.d.ts +7 -2
  125. package/dist/core/run/orchestrator.js +88 -60
  126. package/dist/core/run/orchestrator.js.map +1 -1
  127. package/dist/core/swarm/rollback.d.ts +11 -0
  128. package/dist/core/swarm/rollback.js +54 -0
  129. package/dist/core/swarm/rollback.js.map +1 -1
  130. package/dist/core/swarm/runner.js +94 -8
  131. package/dist/core/swarm/runner.js.map +1 -1
  132. package/dist/core/types.d.ts +103 -3
  133. package/dist/core/types.js.map +1 -1
  134. package/dist/core/web/api.d.ts +6 -0
  135. package/dist/core/web/api.js +174 -18
  136. package/dist/core/web/api.js.map +1 -1
  137. package/dist/core/web/control.d.ts +20 -0
  138. package/dist/core/web/control.js +44 -32
  139. package/dist/core/web/control.js.map +1 -1
  140. package/dist/core/web/fleet-status-cache.d.ts +68 -0
  141. package/dist/core/web/fleet-status-cache.js +120 -0
  142. package/dist/core/web/fleet-status-cache.js.map +1 -0
  143. package/dist/core/web/public/app.js +5 -1
  144. package/dist/core/web/public/next/assets/index-CDHQraxS.css +1 -0
  145. package/dist/core/web/public/next/assets/index-zVKD9krw.js +69 -0
  146. package/dist/core/web/public/next/assets/index-zVKD9krw.js.map +1 -0
  147. package/dist/core/web/public/next/index.html +15 -0
  148. package/dist/core/web/read-session-revocations.d.ts +26 -0
  149. package/dist/core/web/read-session-revocations.js +48 -0
  150. package/dist/core/web/read-session-revocations.js.map +1 -0
  151. package/dist/core/web/server.js +73 -27
  152. package/dist/core/web/server.js.map +1 -1
  153. package/dist/core/web/static.d.ts +1 -1
  154. package/dist/core/web/static.js +54 -20
  155. package/dist/core/web/static.js.map +1 -1
  156. package/dist/release-dependency-inventory.json +1 -1
  157. package/docs/RUNTIME_ACTIVATION_AUTHORITY.md +115 -21
  158. package/docs/contracts/CONTRACT-M521.md +102 -0
  159. package/node_modules/fast-uri/index.js +201 -48
  160. package/node_modules/fast-uri/lib/schemes.js +9 -4
  161. package/node_modules/fast-uri/lib/utils.js +388 -91
  162. package/node_modules/fast-uri/package.json +1 -1
  163. package/node_modules/fast-uri/test/component-safe-serialization.test.js +105 -0
  164. package/node_modules/fast-uri/test/equal.test.js +31 -3
  165. package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
  166. package/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
  167. package/node_modules/fast-uri/test/ipv6-validation.test.js +90 -0
  168. package/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
  169. package/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
  170. package/node_modules/fast-uri/test/parse.test.js +7 -3
  171. package/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
  172. package/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
  173. package/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
  174. package/node_modules/fast-uri/test/security-normalization.test.js +101 -0
  175. package/node_modules/fast-uri/test/security.test.js +75 -3
  176. package/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
  177. package/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
  178. package/node_modules/qs/.github/THREAT_MODEL.md +3 -3
  179. package/node_modules/qs/CHANGELOG.md +26 -0
  180. package/node_modules/qs/README.md +19 -1
  181. package/node_modules/qs/dist/qs.js +25 -25
  182. package/node_modules/qs/eslint.config.mjs +1 -1
  183. package/node_modules/qs/lib/parse.js +16 -6
  184. package/node_modules/qs/lib/stringify.js +23 -8
  185. package/node_modules/qs/lib/utils.js +57 -11
  186. package/node_modules/qs/package.json +8 -7
  187. package/node_modules/qs/test/parse.js +419 -0
  188. package/node_modules/qs/test/stringify.js +317 -0
  189. package/node_modules/qs/test/utils.js +206 -0
  190. package/package.json +24 -6
  191. package/schema/config.schema.json +800 -5
  192. package/node_modules/which/CHANGELOG.md +0 -166
@@ -10,8 +10,8 @@
10
10
  * policy file.
11
11
  * - FIRE-AND-FORGET: learnFromRejection() never throws, never awaits
12
12
  * anything on the critical path. All I/O is wrapped in try/catch.
13
- * - GATED: every code path checks cfg.foundry?.selfImprove !== false
14
- * (default ON). When the flag is explicitly false the function returns
13
+ * - GATED: every code path checks cfg.foundry?.selfImprove === true
14
+ * (default OFF). Unless the flag is explicitly true the function returns
15
15
  * immediately — byte-identical to having no call at all.
16
16
  * - ADDITIVE: the genome entry is informational grounding for future runs.
17
17
  * It is NOT an execution directive; it does not alter the merge gate,
@@ -23,8 +23,9 @@
23
23
  * - TELEMETRY: a usage counter is appended to the decisions ledger under
24
24
  * action 'self-improve:written' for observability (no PII, no secrets).
25
25
  */
26
- import { appendHubEntry } from '../genome/store.js';
27
- import { recordDecision } from './decisions-ledger.js';
26
+ import fs from 'node:fs';
27
+ import { appendHubEntry, hubStorePath } from '../genome/store.js';
28
+ import { readDecisions, readDecisionsDetailed, recordDecision } from './decisions-ledger.js';
28
29
  // ---------------------------------------------------------------------------
29
30
  // Constants
30
31
  // ---------------------------------------------------------------------------
@@ -35,9 +36,80 @@ const STALE_DAYS = 90;
35
36
  export const ANTI_PLAYBOOK_INJECT_CAP = 800;
36
37
  /** Tag prefix for all genome entries written by this module. */
37
38
  const TAG = 'm235:anti-playbook';
39
+ /** Maximum newly appended bytes inspected to acknowledge one lesson write. */
40
+ const APPEND_ACK_MAX_BYTES = 1024 * 1024;
41
+ function hubSizeBeforeAppend() {
42
+ const file = hubStorePath();
43
+ try {
44
+ return fs.statSync(file).size;
45
+ }
46
+ catch {
47
+ return fs.existsSync(file) ? null : 0;
48
+ }
49
+ }
50
+ function appendedBytesContainEntry(entry, offset) {
51
+ const file = hubStorePath();
52
+ let fd;
53
+ try {
54
+ const noFollow = typeof fs.constants.O_NOFOLLOW === 'number' ? fs.constants.O_NOFOLLOW : 0;
55
+ fd = fs.openSync(file, fs.constants.O_RDONLY | noFollow);
56
+ const openedBefore = fs.fstatSync(fd);
57
+ const namedBefore = fs.lstatSync(file);
58
+ if (!openedBefore.isFile() || namedBefore.isSymbolicLink() || !namedBefore.isFile() ||
59
+ openedBefore.dev !== namedBefore.dev || openedBefore.ino !== namedBefore.ino)
60
+ return false;
61
+ const size = openedBefore.size;
62
+ const growth = size - offset;
63
+ if (growth <= 0 || growth > APPEND_ACK_MAX_BYTES)
64
+ return false;
65
+ const bytes = Buffer.alloc(growth);
66
+ if (fs.readSync(fd, bytes, 0, growth, offset) !== growth)
67
+ return false;
68
+ const openedAfter = fs.fstatSync(fd);
69
+ const namedAfter = fs.lstatSync(file);
70
+ if (!openedAfter.isFile() || namedAfter.isSymbolicLink() || !namedAfter.isFile() ||
71
+ openedBefore.dev !== openedAfter.dev || openedBefore.ino !== openedAfter.ino ||
72
+ openedAfter.dev !== namedAfter.dev || openedAfter.ino !== namedAfter.ino ||
73
+ openedBefore.size !== openedAfter.size ||
74
+ openedBefore.mtimeMs !== openedAfter.mtimeMs ||
75
+ openedBefore.ctimeMs !== openedAfter.ctimeMs ||
76
+ openedAfter.size !== namedAfter.size ||
77
+ openedAfter.mtimeMs !== namedAfter.mtimeMs ||
78
+ openedAfter.ctimeMs !== namedAfter.ctimeMs)
79
+ return false;
80
+ return bytes.toString('utf8').split('\n').some((line) => {
81
+ if (!line.trim())
82
+ return false;
83
+ try {
84
+ return JSON.parse(line).id === entry.id;
85
+ }
86
+ catch {
87
+ return false;
88
+ }
89
+ });
90
+ }
91
+ catch {
92
+ return false;
93
+ }
94
+ finally {
95
+ if (fd !== undefined) {
96
+ try {
97
+ fs.closeSync(fd);
98
+ }
99
+ catch { /* best-effort close */ }
100
+ }
101
+ }
102
+ }
38
103
  function isRejection(v) {
39
104
  return v === 'review' || v === 'noise' || v === 'harmful';
40
105
  }
106
+ function isConsideredRejection(entry) {
107
+ const verdict = (entry.verdict ?? '').toLowerCase();
108
+ if (!isRejection(verdict))
109
+ return false;
110
+ const expectedReason = `judge-${verdict}`;
111
+ return entry.judgeReasonCode === expectedReason;
112
+ }
41
113
  // ---------------------------------------------------------------------------
42
114
  // Lesson derivation (pure, deterministic, no LLM)
43
115
  // ---------------------------------------------------------------------------
@@ -66,7 +138,7 @@ export function deriveLesson(verdict, _reasoning, _proposalTitle) {
66
138
  * 2. A decisions-ledger entry for telemetry/observability.
67
139
  *
68
140
  * NEVER THROWS. NEVER BLOCKS (all I/O is synchronous JSONL append behind
69
- * try/catch). Gated on cfg.foundry?.selfImprove !== false.
141
+ * try/catch). Gated on cfg.foundry?.selfImprove === true.
70
142
  *
71
143
  * @param proposalId The proposal id (for ledger correlation).
72
144
  * @param proposalTitle Legacy compatibility input; deliberately discarded.
@@ -75,31 +147,38 @@ export function deriveLesson(verdict, _reasoning, _proposalTitle) {
75
147
  * @param cfg Fleet config.
76
148
  */
77
149
  export function learnFromRejection(proposalId, proposalTitle, verdict, reasoning, cfg) {
78
- // Gate: default ON; explicit false = no-op (byte-identical to no call).
150
+ // Gate: default OFF; only explicit true authorizes durable learning.
79
151
  try {
80
152
  const foundry = cfg.foundry;
81
- if (foundry?.['selfImprove'] === false)
82
- return;
153
+ if (foundry?.['selfImprove'] !== true)
154
+ return false;
83
155
  }
84
156
  catch {
85
- return;
157
+ return false;
86
158
  }
87
159
  // Only act on rejection verdicts.
88
160
  if (!isRejection(verdict))
89
- return;
161
+ return false;
90
162
  // Derive and write the lesson.
91
163
  try {
164
+ const appendOffset = hubSizeBeforeAppend();
165
+ if (appendOffset === null)
166
+ return false;
92
167
  const lesson = deriveLesson(verdict, reasoning, proposalTitle);
93
168
  const title = `Anti-playbook observation: ${verdict}`;
94
- appendHubEntry({
169
+ const entry = appendHubEntry({
95
170
  title,
96
171
  text: lesson,
97
172
  tags: [TAG, `verdict:${verdict}`, `proposal:${proposalId.slice(0, 24)}`],
98
173
  hubOnly: true,
99
174
  });
175
+ if (!appendedBytesContainEntry(entry, appendOffset))
176
+ return false;
100
177
  }
101
178
  catch {
102
- // appendHubEntry never throws by contract; guard defensively.
179
+ // No durable lesson means no success acknowledgment and no idempotency
180
+ // telemetry. The sweep may safely retry on a later pass.
181
+ return false;
103
182
  }
104
183
  // Telemetry: record to decisions ledger (action 'self-improve:written').
105
184
  try {
@@ -116,6 +195,116 @@ export function learnFromRejection(proposalId, proposalTitle, verdict, reasoning
116
195
  catch {
117
196
  // Ledger write is best-effort observability only.
118
197
  }
198
+ return true;
199
+ }
200
+ // ---------------------------------------------------------------------------
201
+ // Public: sweepRejectionLearning — auto-merge-independent reachability
202
+ // ---------------------------------------------------------------------------
203
+ /**
204
+ * Bound on judged-decision candidates inspected per sweep pass.
205
+ */
206
+ const MAX_REJECTION_SWEEP_CANDIDATES = 200;
207
+ /**
208
+ * Sweep the decisions ledger for considered judged rejection verdicts (review
209
+ * | noise | harmful with their matching judgeReasonCode) and call
210
+ * learnFromRejection() for each one that hasn't already produced a lesson.
211
+ *
212
+ * learnFromRejection's ONLY prior caller was automerge-pass.ts, reached
213
+ * exclusively from inside the auto-merge pass (cfg.foundry.autoMerge.enabled
214
+ * === true). With auto-merge off — the default — a judge verdict could still
215
+ * be recorded (manual `ashlr judge`, a shadow/observe-only judge pass, etc.)
216
+ * but the fleet never learned from it. This sweep reads the SAME
217
+ * decisions-ledger 'judged' rows regardless of what produced them, so a
218
+ * rejected or failed run teaches the fleet whether or not auto-merge is on.
219
+ *
220
+ * Idempotent: a proposalId that already has a 'self-improve:written'
221
+ * telemetry row is skipped. Bounded, fail-open-on-nothing-to-do,
222
+ * fail-closed-on-source-degradation (sourceComplete:false signals "retry
223
+ * later", never treated as "nothing to learn"). Never throws.
224
+ */
225
+ export function sweepRejectionLearning(cfg, opts = {}) {
226
+ const result = {
227
+ scanned: 0, written: 0, skipped: 0, sourceComplete: true,
228
+ };
229
+ try {
230
+ const foundry = cfg.foundry;
231
+ if (foundry?.['selfImprove'] !== true)
232
+ return result;
233
+ let decisions;
234
+ if (typeof opts.listDecisions === 'function') {
235
+ try {
236
+ decisions = opts.listDecisions();
237
+ }
238
+ catch {
239
+ result.sourceComplete = false;
240
+ return result;
241
+ }
242
+ }
243
+ else {
244
+ const read = readDecisionsDetailed({
245
+ requireComplete: true,
246
+ ...(opts.sinceMs !== undefined ? { sinceMs: opts.sinceMs } : {}),
247
+ });
248
+ if (!read.complete || read.sourceState === 'degraded') {
249
+ result.sourceComplete = false;
250
+ return result;
251
+ }
252
+ decisions = read.decisions;
253
+ }
254
+ // Newest judged verdict per proposalId — mirrors the isNewerDecision
255
+ // pattern used elsewhere (feedback.ts, quality-metrics.ts). The compare
256
+ // must run over EVERY judged verdict (not just rejection-shaped ones):
257
+ // if a proposal's latest verdict is 'ship', a stale earlier
258
+ // noise/harmful/review verdict must not be taught as a lesson — it was
259
+ // superseded.
260
+ const latestJudged = new Map();
261
+ for (const entry of decisions) {
262
+ if (entry.action !== 'judged')
263
+ continue;
264
+ const existing = latestJudged.get(entry.proposalId);
265
+ if (!existing || Date.parse(entry.ts) > Date.parse(existing.ts)) {
266
+ latestJudged.set(entry.proposalId, entry);
267
+ }
268
+ }
269
+ const latestRejection = new Map();
270
+ for (const [proposalId, entry] of latestJudged) {
271
+ if (isConsideredRejection(entry))
272
+ latestRejection.set(proposalId, entry);
273
+ }
274
+ let inspected = 0;
275
+ for (const [proposalId, entry] of latestRejection) {
276
+ if (inspected >= MAX_REJECTION_SWEEP_CANDIDATES) {
277
+ result.sourceComplete = false;
278
+ break;
279
+ }
280
+ inspected++;
281
+ result.scanned++;
282
+ try {
283
+ const existing = readDecisions({ proposalId, requireComplete: true });
284
+ const existingQuality = existing.sourceQuality;
285
+ if (existingQuality && (existingQuality.sourceState === 'degraded' || existingQuality.complete === false)) {
286
+ result.skipped++;
287
+ result.sourceComplete = false;
288
+ continue;
289
+ }
290
+ if (existing.some((row) => row.action === 'self-improve:written'))
291
+ continue;
292
+ if (learnFromRejection(proposalId, '', entry.verdict ?? 'review', '', cfg)) {
293
+ result.written++;
294
+ }
295
+ else {
296
+ result.skipped++;
297
+ }
298
+ }
299
+ catch {
300
+ result.skipped++;
301
+ }
302
+ }
303
+ return result;
304
+ }
305
+ catch {
306
+ return result;
307
+ }
119
308
  }
120
309
  // ---------------------------------------------------------------------------
121
310
  // Curator: curateAntiPlaybooks
@@ -1 +1 @@
1
- {"version":3,"file":"self-improve.js","sourceRoot":"","sources":["../../../src/core/fleet/self-improve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"self-improve.js","sourceRoot":"","sources":["../../../src/core/fleet/self-improve.ts"],"names":[],"mappings":"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"}
@@ -69,7 +69,26 @@ export declare function distillWorkflow(proposal: Proposal): string;
69
69
  */
70
70
  export declare function learnFromApplied(proposal: Proposal, cfg: AshlrConfig): void;
71
71
  /**
72
- * Skill injection remains disabled until a distinct post-merge release proof
73
- * and verifier exist. Tags and generic genome persistence are not authority.
72
+ * Genome hub entries are unsigned free text — appendHubEntry has no
73
+ * authentication, and (per test/m243.skill-library.test.ts's "release
74
+ * verifier unavailable" suite) a forged entry carrying tags ['m243:skill',
75
+ * 'credit:released-v1'] must not be trusted into future-agent prompts just
76
+ * because it carries the right tag. There is no way to cryptographically
77
+ * verify a GenomeEntry's authenticity — genome rows carry no attestation
78
+ * field at all, unlike SkillCard (contentHash + attestation).
79
+ *
80
+ * Real positive-credit skill recall is NOT this function's job: it already
81
+ * exists, and already works, via skill-retrieval.ts's
82
+ * selectVerifiedSkills()/inspectVerifiedSkillCorpus() — those read the
83
+ * cryptographically-signed SkillCard corpus (skill-records.ts) and verify
84
+ * each card's attestation (verifyAttestedSkillCard) plus
85
+ * hasReleasedPostMergeCredit(card.labelBasis) before ever surfacing it. That
86
+ * pathway is what lights up once evaluatePostMergeCreditRelease() /
87
+ * attestPostMergeCreditSkillCard() start minting real signed cards — no
88
+ * change to this function was needed or safe to make.
89
+ *
90
+ * curateSkills() therefore stays a closed stub, matching curateAntiPlaybooks'
91
+ * signature for API symmetry with self-improve.ts but never promoting
92
+ * unsigned genome text to injected grounding. Pure; never throws.
74
93
  */
75
94
  export declare function curateSkills(_entries: GenomeEntry[]): GenomeEntry[];
@@ -43,9 +43,8 @@ import { loadProposal } from '../inbox/store.js';
43
43
  import { hasRealizedMergeEvidence } from '../inbox/realized-merge.js';
44
44
  import { scrubSecrets } from '../util/scrub.js';
45
45
  import { recordDecision } from './decisions-ledger.js';
46
- import { POST_MERGE_CREDIT_RELEASE_LABEL, hasReleasedPostMergeCredit, } from './post-merge-credit.js';
47
- import { attestSkillCard } from './skill-attestation.js';
48
- import { recordSkillCard, sanitizeSkillCard } from './skill-records.js';
46
+ import { attestPostMergeCreditSkillCard, evaluatePostMergeCreditRelease } from './post-merge-credit.js';
47
+ import { recordSkillCard, readSkillCards, sanitizeSkillCard } from './skill-records.js';
49
48
  // ---------------------------------------------------------------------------
50
49
  // Constants
51
50
  // ---------------------------------------------------------------------------
@@ -146,7 +145,10 @@ function verifiedSkillInput(proposalId) {
146
145
  if (!proposal || proposal.id !== proposalId || proposal.status !== 'applied' ||
147
146
  !hasRealizedMergeEvidence(proposal))
148
147
  return null;
149
- if (!hasReleasedPostMergeCredit(proposal.labelBasis))
148
+ // Eligibility is computed fresh from the authenticated merge witness and
149
+ // the observation ledger — never trusted off a caller-set proposal field.
150
+ const eligibility = evaluatePostMergeCreditRelease(proposal);
151
+ if (!eligibility.eligible || !eligibility.label)
150
152
  return null;
151
153
  if (typeof proposal.diff !== 'string' || proposal.diff.length === 0)
152
154
  return null;
@@ -184,14 +186,14 @@ function verifiedSkillInput(proposalId) {
184
186
  return null;
185
187
  if (routeHasSkillSelection(proposal.routeSnapshot) || routeHasSkillSelection(evidence.routeSnapshot))
186
188
  return null;
187
- return { proposal, evidence, diffHash: currentDiffHash, commandKinds };
189
+ return { proposal, evidence, diffHash: currentDiffHash, commandKinds, labelBasis: eligibility.label };
188
190
  }
189
191
  catch {
190
192
  return null;
191
193
  }
192
194
  }
193
195
  function skillCardFromVerified(input, ts) {
194
- const { proposal, evidence, diffHash, commandKinds } = input;
196
+ const { proposal, evidence, diffHash, commandKinds, labelBasis } = input;
195
197
  const taskClass = deriveTaskClass(boundedMetadataText(proposal.title, 100, 'verified workflow'));
196
198
  const safeTitle = `Verified ${taskClass} workflow`;
197
199
  const safeSummary = boundedMetadataText(`Evidence-bound ${taskClass} workflow verified with ${commandKinds.join(', ')} commands at ${evidence.riskClass} risk.`, 400);
@@ -205,9 +207,14 @@ function skillCardFromVerified(input, ts) {
205
207
  summary: safeSummary,
206
208
  status: 'verified',
207
209
  source: 'verified-proposal',
210
+ // NOTE: SKILL_CREDIT_RELEASE_TAG is deliberately NOT added here.
211
+ // skill-records.ts's recordSkillCard() unconditionally refuses any card
212
+ // carrying that tag (a defense against unauthenticated release claims
213
+ // written before this protocol existed). Real release authority now
214
+ // lives entirely in `labelBasis` (a signed token, verified by
215
+ // hasReleasedPostMergeCredit), which recordSkillCard does not block.
208
216
  tags: [
209
217
  TAG,
210
- SKILL_CREDIT_RELEASE_TAG,
211
218
  `engine:${proposal.engineTier}`,
212
219
  `proposal:${boundedMetadataText(proposal.id, 24, 'unknown')}`,
213
220
  ],
@@ -245,7 +252,7 @@ function skillCardFromVerified(input, ts) {
245
252
  gateCount,
246
253
  },
247
254
  learningSource: 'verified-proposal',
248
- labelBasis: POST_MERGE_CREDIT_RELEASE_LABEL,
255
+ labelBasis,
249
256
  ...(proposal.routerPolicyVersion ?? evidence.routerPolicyVersion
250
257
  ? { routerPolicyVersion: proposal.routerPolicyVersion ?? evidence.routerPolicyVersion }
251
258
  : {}),
@@ -306,6 +313,18 @@ export function learnFromApplied(proposal, cfg) {
306
313
  catch {
307
314
  return;
308
315
  }
316
+ // Idempotency: post-merge credit only becomes eligible well after merge (see
317
+ // MIN_POST_MERGE_OBSERVATION_WINDOW_MS), so this is expected to be called
318
+ // repeatedly (a periodic sweep, not a one-shot at merge time). Never write a
319
+ // second card for a proposal that already has one.
320
+ try {
321
+ const corpus = readSkillCards({ complete: true });
322
+ if (corpus.some((card) => card.proposalId === proposal.id))
323
+ return;
324
+ }
325
+ catch {
326
+ return;
327
+ }
309
328
  // Caller fields (including status, verification, route, and tier) are only a
310
329
  // lookup hint. Every authority-bearing field comes from the persisted state.
311
330
  let verified;
@@ -319,7 +338,11 @@ export function learnFromApplied(proposal, cfg) {
319
338
  return;
320
339
  const authoritative = verified.proposal;
321
340
  const now = new Date().toISOString();
322
- const structuredCard = attestSkillCard(sanitizeSkillCard(skillCardFromVerified(verified, now)));
341
+ // attestPostMergeCreditSkillCard (not the generic attestSkillCard) is the
342
+ // dedicated signing boundary for release-labeled cards — see
343
+ // post-merge-credit.ts's module doc for why the generic attester refuses
344
+ // them.
345
+ const structuredCard = attestPostMergeCreditSkillCard(sanitizeSkillCard(skillCardFromVerified(verified, now)));
323
346
  if (!structuredCard)
324
347
  return;
325
348
  // Preserve the legacy genome note for compatibility.
@@ -356,7 +379,7 @@ export function learnFromApplied(proposal, cfg) {
356
379
  proposalId: authoritative.id,
357
380
  action: 'skill-library:written',
358
381
  detail: `engine=${authoritative.engineTier}`,
359
- labelBasis: POST_MERGE_CREDIT_RELEASE_LABEL,
382
+ labelBasis: structuredCard.labelBasis,
360
383
  repo: authoritative.repo ?? '',
361
384
  engine: authoritative.engineModel ?? '',
362
385
  model: '',
@@ -370,8 +393,27 @@ export function learnFromApplied(proposal, cfg) {
370
393
  // Curator: curateSkills
371
394
  // ---------------------------------------------------------------------------
372
395
  /**
373
- * Skill injection remains disabled until a distinct post-merge release proof
374
- * and verifier exist. Tags and generic genome persistence are not authority.
396
+ * Genome hub entries are unsigned free text — appendHubEntry has no
397
+ * authentication, and (per test/m243.skill-library.test.ts's "release
398
+ * verifier unavailable" suite) a forged entry carrying tags ['m243:skill',
399
+ * 'credit:released-v1'] must not be trusted into future-agent prompts just
400
+ * because it carries the right tag. There is no way to cryptographically
401
+ * verify a GenomeEntry's authenticity — genome rows carry no attestation
402
+ * field at all, unlike SkillCard (contentHash + attestation).
403
+ *
404
+ * Real positive-credit skill recall is NOT this function's job: it already
405
+ * exists, and already works, via skill-retrieval.ts's
406
+ * selectVerifiedSkills()/inspectVerifiedSkillCorpus() — those read the
407
+ * cryptographically-signed SkillCard corpus (skill-records.ts) and verify
408
+ * each card's attestation (verifyAttestedSkillCard) plus
409
+ * hasReleasedPostMergeCredit(card.labelBasis) before ever surfacing it. That
410
+ * pathway is what lights up once evaluatePostMergeCreditRelease() /
411
+ * attestPostMergeCreditSkillCard() start minting real signed cards — no
412
+ * change to this function was needed or safe to make.
413
+ *
414
+ * curateSkills() therefore stays a closed stub, matching curateAntiPlaybooks'
415
+ * signature for API symmetry with self-improve.ts but never promoting
416
+ * unsigned genome text to injected grounding. Pure; never throws.
375
417
  */
376
418
  export function curateSkills(_entries) {
377
419
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"skill-library.js","sourceRoot":"","sources":["../../../src/core/fleet/skill-library.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-library.js","sourceRoot":"","sources":["../../../src/core/fleet/skill-library.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,15 @@ import { type DispatchProductionParentIdentity } from './dispatch-production-led
22
22
  /** Default cooldown window: 6 hours in milliseconds. */
23
23
  export declare const DEFAULT_COOLDOWN_MS: number;
24
24
  export declare const GENERATED_REPAIR_DISPATCH_BLOCKED_COOLDOWN_MS: number;
25
+ /**
26
+ * Cooldown alone only delays a retry — after enough cooldown windows elapse,
27
+ * a persistently-rejected work item comes back forever (backlog dedup only
28
+ * suppresses re-filing while a proposal is PENDING; once rejected it becomes
29
+ * eligible again next cycle). This bounds the total number of times the
30
+ * fleet will keep re-dispatching the same logical item after real judge
31
+ * rejections before parking it. See rejectionAttemptCount / isRejectionWorkedOutcome.
32
+ */
33
+ export declare const DEFAULT_MAX_REJECTION_ATTEMPTS = 3;
25
34
  /**
26
35
  * The outcome of a single item run or judge verdict.
27
36
  *
@@ -119,6 +128,19 @@ export declare function recentlyDeclined(itemId: string, cooldownMs?: number, no
119
128
  export declare function latestWorkedEvent(itemId: string): WorkedEvent | undefined;
120
129
  export declare function latestWorkedEventForKeys(events: readonly WorkedEvent[], itemIds: readonly string[]): WorkedEvent | undefined;
121
130
  export declare function workedEventIsCooling(event: WorkedEvent | undefined, cooldownMs: number, now?: number): boolean;
131
+ /**
132
+ * True for outcomes that represent an actual judge rejection of a proposal —
133
+ * as opposed to 'empty' (no diff produced) or 'dispatch-blocked' (an infra
134
+ * hiccup), neither of which is a considered rejection.
135
+ */
136
+ export declare function isRejectionWorkedOutcome(outcome: WorkedOutcome): boolean;
137
+ /**
138
+ * Count of past judge-rejection outcomes recorded for any of the given
139
+ * identity keys (a WorkItem's cooldown keys). Unlike workedEventIsCooling
140
+ * (which only looks at the MOST RECENT event within a time window), this is
141
+ * a monotonic all-time count used to bound total attempts per logical item.
142
+ */
143
+ export declare function rejectionAttemptCount(events: readonly WorkedEvent[], itemIds: readonly string[]): number;
122
144
  /**
123
145
  * Map a raw judge verdict string to a WorkedOutcome decline class.
124
146
  * Returns undefined when the verdict should NOT suppress the item
@@ -35,6 +35,15 @@ const MAX_WORKED_LEDGER_BYTES = 2 * 1024 * 1024;
35
35
  /** Default cooldown window: 6 hours in milliseconds. */
36
36
  export const DEFAULT_COOLDOWN_MS = 6 * 60 * 60 * 1000;
37
37
  export const GENERATED_REPAIR_DISPATCH_BLOCKED_COOLDOWN_MS = 5 * 60 * 1000;
38
+ /**
39
+ * Cooldown alone only delays a retry — after enough cooldown windows elapse,
40
+ * a persistently-rejected work item comes back forever (backlog dedup only
41
+ * suppresses re-filing while a proposal is PENDING; once rejected it becomes
42
+ * eligible again next cycle). This bounds the total number of times the
43
+ * fleet will keep re-dispatching the same logical item after real judge
44
+ * rejections before parking it. See rejectionAttemptCount / isRejectionWorkedOutcome.
45
+ */
46
+ export const DEFAULT_MAX_REJECTION_ATTEMPTS = 3;
38
47
  let workedLedgerTestHooks;
39
48
  export function _setWorkedLedgerHooksForTest(hooks) {
40
49
  workedLedgerTestHooks = hooks;
@@ -808,6 +817,29 @@ export function workedEventIsCooling(event, cooldownMs, now) {
808
817
  const elapsedMs = (now ?? Date.now()) - eventMs;
809
818
  return elapsedMs >= 0 && elapsedMs < cooldownMs;
810
819
  }
820
+ /**
821
+ * True for outcomes that represent an actual judge rejection of a proposal —
822
+ * as opposed to 'empty' (no diff produced) or 'dispatch-blocked' (an infra
823
+ * hiccup), neither of which is a considered rejection.
824
+ */
825
+ export function isRejectionWorkedOutcome(outcome) {
826
+ return outcome === 'judged-review' || outcome === 'judged-noise' || outcome === 'judged-decline';
827
+ }
828
+ /**
829
+ * Count of past judge-rejection outcomes recorded for any of the given
830
+ * identity keys (a WorkItem's cooldown keys). Unlike workedEventIsCooling
831
+ * (which only looks at the MOST RECENT event within a time window), this is
832
+ * a monotonic all-time count used to bound total attempts per logical item.
833
+ */
834
+ export function rejectionAttemptCount(events, itemIds) {
835
+ const keys = new Set(itemIds);
836
+ let count = 0;
837
+ for (const event of events) {
838
+ if (keys.has(event.itemId) && isRejectionWorkedOutcome(event.outcome))
839
+ count++;
840
+ }
841
+ return count;
842
+ }
811
843
  // ---------------------------------------------------------------------------
812
844
  // M220: Judge-verdict feedback — recordVerdict + sweepJudgedProposals
813
845
  // ---------------------------------------------------------------------------