agentfootprint 9.112.2 → 9.114.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 (282) hide show
  1. package/CHANGELOG.md +338 -0
  2. package/CLAUDE.md +2 -1
  3. package/dist/adapters/observability/audit.js +8 -0
  4. package/dist/adapters/observability/audit.js.map +1 -1
  5. package/dist/adapters/observability/otel.js +44 -2
  6. package/dist/adapters/observability/otel.js.map +1 -1
  7. package/dist/adapters/observability/xray.js +19 -0
  8. package/dist/adapters/observability/xray.js.map +1 -1
  9. package/dist/adapters/types.js.map +1 -1
  10. package/dist/core/Agent.js +11 -1
  11. package/dist/core/Agent.js.map +1 -1
  12. package/dist/core/agent/composeRequest.js +19 -11
  13. package/dist/core/agent/composeRequest.js.map +1 -1
  14. package/dist/core/agent/coverage/absent.js +163 -7
  15. package/dist/core/agent/coverage/absent.js.map +1 -1
  16. package/dist/core/agent/coverage/answer.js +3 -1
  17. package/dist/core/agent/coverage/answer.js.map +1 -1
  18. package/dist/core/agent/coverage/read.js +18 -12
  19. package/dist/core/agent/coverage/read.js.map +1 -1
  20. package/dist/core/agent/findings/ledger.js +27 -5
  21. package/dist/core/agent/findings/ledger.js.map +1 -1
  22. package/dist/core/agent/findings/offer.js +29 -9
  23. package/dist/core/agent/findings/offer.js.map +1 -1
  24. package/dist/core/agent/findings/serve.js +76 -7
  25. package/dist/core/agent/findings/serve.js.map +1 -1
  26. package/dist/core/agent/findings/types.js.map +1 -1
  27. package/dist/core/agent/findings/unsettled.js +283 -0
  28. package/dist/core/agent/findings/unsettled.js.map +1 -0
  29. package/dist/core/agent/stages/callLLM.js +30 -8
  30. package/dist/core/agent/stages/callLLM.js.map +1 -1
  31. package/dist/core/agent/stages/route.js +10 -2
  32. package/dist/core/agent/stages/route.js.map +1 -1
  33. package/dist/core/agent/stages/toolCalls.js +365 -68
  34. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  35. package/dist/core/agent/stages/window.js +5 -2
  36. package/dist/core/agent/stages/window.js.map +1 -1
  37. package/dist/core/agent/toolDispatch.js +4 -1
  38. package/dist/core/agent/toolDispatch.js.map +1 -1
  39. package/dist/core/agent/toolResultCap.js +0 -0
  40. package/dist/core/agent/toolResultCap.js.map +1 -1
  41. package/dist/core/agent/window/ledgerFactPins.js +13 -2
  42. package/dist/core/agent/window/ledgerFactPins.js.map +1 -1
  43. package/dist/core/agent/window/toolNames.js +17 -2
  44. package/dist/core/agent/window/toolNames.js.map +1 -1
  45. package/dist/core/checkin.js +5 -1
  46. package/dist/core/checkin.js.map +1 -1
  47. package/dist/core/inputRequest.js +32 -2
  48. package/dist/core/inputRequest.js.map +1 -1
  49. package/dist/core/pause.js +13 -1
  50. package/dist/core/pause.js.map +1 -1
  51. package/dist/core/runCheckpoint.js +26 -2
  52. package/dist/core/runCheckpoint.js.map +1 -1
  53. package/dist/esm/adapters/observability/audit.d.ts +8 -0
  54. package/dist/esm/adapters/observability/audit.js +8 -0
  55. package/dist/esm/adapters/observability/audit.js.map +1 -1
  56. package/dist/esm/adapters/observability/otel.d.ts +17 -2
  57. package/dist/esm/adapters/observability/otel.js +44 -2
  58. package/dist/esm/adapters/observability/otel.js.map +1 -1
  59. package/dist/esm/adapters/observability/xray.d.ts +8 -0
  60. package/dist/esm/adapters/observability/xray.js +19 -0
  61. package/dist/esm/adapters/observability/xray.js.map +1 -1
  62. package/dist/esm/adapters/types.d.ts +49 -0
  63. package/dist/esm/adapters/types.js.map +1 -1
  64. package/dist/esm/core/Agent.js +11 -1
  65. package/dist/esm/core/Agent.js.map +1 -1
  66. package/dist/esm/core/agent/composeRequest.d.ts +10 -7
  67. package/dist/esm/core/agent/composeRequest.js +19 -11
  68. package/dist/esm/core/agent/composeRequest.js.map +1 -1
  69. package/dist/esm/core/agent/coverage/absent.d.ts +31 -4
  70. package/dist/esm/core/agent/coverage/absent.js +160 -6
  71. package/dist/esm/core/agent/coverage/absent.js.map +1 -1
  72. package/dist/esm/core/agent/coverage/answer.js +3 -1
  73. package/dist/esm/core/agent/coverage/answer.js.map +1 -1
  74. package/dist/esm/core/agent/coverage/index.d.ts +1 -1
  75. package/dist/esm/core/agent/coverage/read.d.ts +12 -2
  76. package/dist/esm/core/agent/coverage/read.js +19 -13
  77. package/dist/esm/core/agent/coverage/read.js.map +1 -1
  78. package/dist/esm/core/agent/coverage/types.d.ts +42 -0
  79. package/dist/esm/core/agent/findings/ledger.d.ts +23 -6
  80. package/dist/esm/core/agent/findings/ledger.js +27 -5
  81. package/dist/esm/core/agent/findings/ledger.js.map +1 -1
  82. package/dist/esm/core/agent/findings/offer.d.ts +23 -6
  83. package/dist/esm/core/agent/findings/offer.js +27 -8
  84. package/dist/esm/core/agent/findings/offer.js.map +1 -1
  85. package/dist/esm/core/agent/findings/serve.d.ts +19 -6
  86. package/dist/esm/core/agent/findings/serve.js +77 -8
  87. package/dist/esm/core/agent/findings/serve.js.map +1 -1
  88. package/dist/esm/core/agent/findings/types.d.ts +81 -1
  89. package/dist/esm/core/agent/findings/types.js.map +1 -1
  90. package/dist/esm/core/agent/findings/unsettled.d.ts +128 -0
  91. package/dist/esm/core/agent/findings/unsettled.js +278 -0
  92. package/dist/esm/core/agent/findings/unsettled.js.map +1 -0
  93. package/dist/esm/core/agent/stages/callLLM.js +30 -8
  94. package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
  95. package/dist/esm/core/agent/stages/route.js +10 -2
  96. package/dist/esm/core/agent/stages/route.js.map +1 -1
  97. package/dist/esm/core/agent/stages/toolCalls.d.ts +90 -2
  98. package/dist/esm/core/agent/stages/toolCalls.js +362 -68
  99. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  100. package/dist/esm/core/agent/stages/window.js +5 -2
  101. package/dist/esm/core/agent/stages/window.js.map +1 -1
  102. package/dist/esm/core/agent/toolDispatch.d.ts +4 -1
  103. package/dist/esm/core/agent/toolDispatch.js +4 -1
  104. package/dist/esm/core/agent/toolDispatch.js.map +1 -1
  105. package/dist/esm/core/agent/toolResultCap.d.ts +4 -1
  106. package/dist/esm/core/agent/toolResultCap.js +0 -0
  107. package/dist/esm/core/agent/toolResultCap.js.map +1 -1
  108. package/dist/esm/core/agent/types.d.ts +5 -0
  109. package/dist/esm/core/agent/window/ledgerFactPins.d.ts +10 -1
  110. package/dist/esm/core/agent/window/ledgerFactPins.js +13 -2
  111. package/dist/esm/core/agent/window/ledgerFactPins.js.map +1 -1
  112. package/dist/esm/core/agent/window/strategy.d.ts +2 -1
  113. package/dist/esm/core/agent/window/toolNames.d.ts +16 -1
  114. package/dist/esm/core/agent/window/toolNames.js +17 -2
  115. package/dist/esm/core/agent/window/toolNames.js.map +1 -1
  116. package/dist/esm/core/checkin.js +5 -1
  117. package/dist/esm/core/checkin.js.map +1 -1
  118. package/dist/esm/core/inputRequest.d.ts +20 -1
  119. package/dist/esm/core/inputRequest.js +32 -2
  120. package/dist/esm/core/inputRequest.js.map +1 -1
  121. package/dist/esm/core/pause.d.ts +13 -1
  122. package/dist/esm/core/pause.js +13 -1
  123. package/dist/esm/core/pause.js.map +1 -1
  124. package/dist/esm/core/runCheckpoint.js +26 -2
  125. package/dist/esm/core/runCheckpoint.js.map +1 -1
  126. package/dist/esm/events/payloads.d.ts +76 -1
  127. package/dist/esm/index.d.ts +2 -2
  128. package/dist/esm/index.js.map +1 -1
  129. package/dist/esm/lib/bug-report/transcript.d.ts +5 -0
  130. package/dist/esm/lib/bug-report/transcript.js +1 -0
  131. package/dist/esm/lib/bug-report/transcript.js.map +1 -1
  132. package/dist/esm/lib/semantics/projection.js +1 -0
  133. package/dist/esm/lib/semantics/projection.js.map +1 -1
  134. package/dist/esm/lib/time-travel/receipt.d.ts +4 -3
  135. package/dist/esm/lib/time-travel/receipt.js +4 -3
  136. package/dist/esm/lib/time-travel/receipt.js.map +1 -1
  137. package/dist/esm/lib/time-travel/servedView.js +13 -9
  138. package/dist/esm/lib/time-travel/servedView.js.map +1 -1
  139. package/dist/esm/lib/trace-toolpack/traceToolpack.js +130 -17
  140. package/dist/esm/lib/trace-toolpack/traceToolpack.js.map +1 -1
  141. package/dist/esm/memory/causal/evidenceRecorder.d.ts +2 -0
  142. package/dist/esm/memory/causal/evidenceRecorder.js +13 -0
  143. package/dist/esm/memory/causal/evidenceRecorder.js.map +1 -1
  144. package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.d.ts +2 -0
  145. package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.js +11 -0
  146. package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.js.map +1 -1
  147. package/dist/esm/recorders/observability/BoundaryRecorder.d.ts +10 -1
  148. package/dist/esm/recorders/observability/BoundaryRecorder.js +9 -1
  149. package/dist/esm/recorders/observability/BoundaryRecorder.js.map +1 -1
  150. package/dist/esm/recorders/observability/FlowchartRecorder.d.ts +4 -1
  151. package/dist/esm/recorders/observability/FlowchartRecorder.js +13 -1
  152. package/dist/esm/recorders/observability/FlowchartRecorder.js.map +1 -1
  153. package/dist/esm/recorders/observability/LiveStateRecorder.d.ts +2 -0
  154. package/dist/esm/recorders/observability/LiveStateRecorder.js +9 -0
  155. package/dist/esm/recorders/observability/LiveStateRecorder.js.map +1 -1
  156. package/dist/esm/recorders/observability/RouteRecorder.js +5 -0
  157. package/dist/esm/recorders/observability/RouteRecorder.js.map +1 -1
  158. package/dist/esm/recorders/observability/StatusRecorder.js +7 -0
  159. package/dist/esm/recorders/observability/StatusRecorder.js.map +1 -1
  160. package/dist/esm/recorders/observability/ToolChoiceRecorder.js +5 -0
  161. package/dist/esm/recorders/observability/ToolChoiceRecorder.js.map +1 -1
  162. package/dist/esm/recorders/observability/commentary/commentaryTemplates.js +18 -2
  163. package/dist/esm/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
  164. package/dist/esm/recorders/observability/status/statusTemplates.js +5 -0
  165. package/dist/esm/recorders/observability/status/statusTemplates.js.map +1 -1
  166. package/dist/esm/security/extractSequence.d.ts +36 -5
  167. package/dist/esm/security/extractSequence.js +99 -26
  168. package/dist/esm/security/extractSequence.js.map +1 -1
  169. package/dist/index.js.map +1 -1
  170. package/dist/lib/bug-report/transcript.js +1 -0
  171. package/dist/lib/bug-report/transcript.js.map +1 -1
  172. package/dist/lib/semantics/projection.js +1 -0
  173. package/dist/lib/semantics/projection.js.map +1 -1
  174. package/dist/lib/time-travel/receipt.js +4 -3
  175. package/dist/lib/time-travel/receipt.js.map +1 -1
  176. package/dist/lib/time-travel/servedView.js +13 -9
  177. package/dist/lib/time-travel/servedView.js.map +1 -1
  178. package/dist/lib/trace-toolpack/traceToolpack.js +130 -17
  179. package/dist/lib/trace-toolpack/traceToolpack.js.map +1 -1
  180. package/dist/memory/causal/evidenceRecorder.js +13 -0
  181. package/dist/memory/causal/evidenceRecorder.js.map +1 -1
  182. package/dist/recorders/observability/AgentThinkingTraceRecorder.js +11 -0
  183. package/dist/recorders/observability/AgentThinkingTraceRecorder.js.map +1 -1
  184. package/dist/recorders/observability/BoundaryRecorder.js +9 -1
  185. package/dist/recorders/observability/BoundaryRecorder.js.map +1 -1
  186. package/dist/recorders/observability/FlowchartRecorder.js +13 -1
  187. package/dist/recorders/observability/FlowchartRecorder.js.map +1 -1
  188. package/dist/recorders/observability/LiveStateRecorder.js +9 -0
  189. package/dist/recorders/observability/LiveStateRecorder.js.map +1 -1
  190. package/dist/recorders/observability/RouteRecorder.js +5 -0
  191. package/dist/recorders/observability/RouteRecorder.js.map +1 -1
  192. package/dist/recorders/observability/StatusRecorder.js +7 -0
  193. package/dist/recorders/observability/StatusRecorder.js.map +1 -1
  194. package/dist/recorders/observability/ToolChoiceRecorder.js +5 -0
  195. package/dist/recorders/observability/ToolChoiceRecorder.js.map +1 -1
  196. package/dist/recorders/observability/commentary/commentaryTemplates.js +18 -2
  197. package/dist/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
  198. package/dist/recorders/observability/status/statusTemplates.js +5 -0
  199. package/dist/recorders/observability/status/statusTemplates.js.map +1 -1
  200. package/dist/security/extractSequence.js +99 -26
  201. package/dist/security/extractSequence.js.map +1 -1
  202. package/dist/types/adapters/observability/audit.d.ts +8 -0
  203. package/dist/types/adapters/observability/audit.d.ts.map +1 -1
  204. package/dist/types/adapters/observability/otel.d.ts +17 -2
  205. package/dist/types/adapters/observability/otel.d.ts.map +1 -1
  206. package/dist/types/adapters/observability/xray.d.ts +8 -0
  207. package/dist/types/adapters/observability/xray.d.ts.map +1 -1
  208. package/dist/types/adapters/types.d.ts +49 -0
  209. package/dist/types/adapters/types.d.ts.map +1 -1
  210. package/dist/types/core/Agent.d.ts.map +1 -1
  211. package/dist/types/core/agent/composeRequest.d.ts +10 -7
  212. package/dist/types/core/agent/composeRequest.d.ts.map +1 -1
  213. package/dist/types/core/agent/coverage/absent.d.ts +31 -4
  214. package/dist/types/core/agent/coverage/absent.d.ts.map +1 -1
  215. package/dist/types/core/agent/coverage/answer.d.ts.map +1 -1
  216. package/dist/types/core/agent/coverage/index.d.ts +1 -1
  217. package/dist/types/core/agent/coverage/index.d.ts.map +1 -1
  218. package/dist/types/core/agent/coverage/read.d.ts +12 -2
  219. package/dist/types/core/agent/coverage/read.d.ts.map +1 -1
  220. package/dist/types/core/agent/coverage/types.d.ts +42 -0
  221. package/dist/types/core/agent/coverage/types.d.ts.map +1 -1
  222. package/dist/types/core/agent/findings/ledger.d.ts +23 -6
  223. package/dist/types/core/agent/findings/ledger.d.ts.map +1 -1
  224. package/dist/types/core/agent/findings/offer.d.ts +23 -6
  225. package/dist/types/core/agent/findings/offer.d.ts.map +1 -1
  226. package/dist/types/core/agent/findings/serve.d.ts +19 -6
  227. package/dist/types/core/agent/findings/serve.d.ts.map +1 -1
  228. package/dist/types/core/agent/findings/types.d.ts +81 -1
  229. package/dist/types/core/agent/findings/types.d.ts.map +1 -1
  230. package/dist/types/core/agent/findings/unsettled.d.ts +129 -0
  231. package/dist/types/core/agent/findings/unsettled.d.ts.map +1 -0
  232. package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
  233. package/dist/types/core/agent/stages/route.d.ts.map +1 -1
  234. package/dist/types/core/agent/stages/toolCalls.d.ts +90 -2
  235. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  236. package/dist/types/core/agent/stages/window.d.ts.map +1 -1
  237. package/dist/types/core/agent/toolDispatch.d.ts +4 -1
  238. package/dist/types/core/agent/toolDispatch.d.ts.map +1 -1
  239. package/dist/types/core/agent/toolResultCap.d.ts +4 -1
  240. package/dist/types/core/agent/toolResultCap.d.ts.map +1 -1
  241. package/dist/types/core/agent/types.d.ts +5 -0
  242. package/dist/types/core/agent/types.d.ts.map +1 -1
  243. package/dist/types/core/agent/window/ledgerFactPins.d.ts +10 -1
  244. package/dist/types/core/agent/window/ledgerFactPins.d.ts.map +1 -1
  245. package/dist/types/core/agent/window/strategy.d.ts +2 -1
  246. package/dist/types/core/agent/window/strategy.d.ts.map +1 -1
  247. package/dist/types/core/agent/window/toolNames.d.ts +16 -1
  248. package/dist/types/core/agent/window/toolNames.d.ts.map +1 -1
  249. package/dist/types/core/checkin.d.ts.map +1 -1
  250. package/dist/types/core/inputRequest.d.ts +20 -1
  251. package/dist/types/core/inputRequest.d.ts.map +1 -1
  252. package/dist/types/core/pause.d.ts +13 -1
  253. package/dist/types/core/pause.d.ts.map +1 -1
  254. package/dist/types/core/runCheckpoint.d.ts.map +1 -1
  255. package/dist/types/events/payloads.d.ts +76 -1
  256. package/dist/types/events/payloads.d.ts.map +1 -1
  257. package/dist/types/index.d.ts +2 -2
  258. package/dist/types/index.d.ts.map +1 -1
  259. package/dist/types/lib/bug-report/transcript.d.ts +5 -0
  260. package/dist/types/lib/bug-report/transcript.d.ts.map +1 -1
  261. package/dist/types/lib/semantics/projection.d.ts.map +1 -1
  262. package/dist/types/lib/time-travel/receipt.d.ts +4 -3
  263. package/dist/types/lib/time-travel/receipt.d.ts.map +1 -1
  264. package/dist/types/lib/time-travel/servedView.d.ts.map +1 -1
  265. package/dist/types/lib/trace-toolpack/traceToolpack.d.ts.map +1 -1
  266. package/dist/types/memory/causal/evidenceRecorder.d.ts +2 -0
  267. package/dist/types/memory/causal/evidenceRecorder.d.ts.map +1 -1
  268. package/dist/types/recorders/observability/AgentThinkingTraceRecorder.d.ts +2 -0
  269. package/dist/types/recorders/observability/AgentThinkingTraceRecorder.d.ts.map +1 -1
  270. package/dist/types/recorders/observability/BoundaryRecorder.d.ts +10 -1
  271. package/dist/types/recorders/observability/BoundaryRecorder.d.ts.map +1 -1
  272. package/dist/types/recorders/observability/FlowchartRecorder.d.ts +4 -1
  273. package/dist/types/recorders/observability/FlowchartRecorder.d.ts.map +1 -1
  274. package/dist/types/recorders/observability/LiveStateRecorder.d.ts +2 -0
  275. package/dist/types/recorders/observability/LiveStateRecorder.d.ts.map +1 -1
  276. package/dist/types/recorders/observability/RouteRecorder.d.ts.map +1 -1
  277. package/dist/types/recorders/observability/ToolChoiceRecorder.d.ts.map +1 -1
  278. package/dist/types/recorders/observability/commentary/commentaryTemplates.d.ts.map +1 -1
  279. package/dist/types/recorders/observability/status/statusTemplates.d.ts.map +1 -1
  280. package/dist/types/security/extractSequence.d.ts +36 -5
  281. package/dist/types/security/extractSequence.d.ts.map +1 -1
  282. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,344 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [9.114.0] - 2026-09-24
9
+
10
+ ### Added
11
+
12
+ - **`absence` on a `requestInput` declaration
13
+ (`InputRequestDeclaration.absence`)** — a lookup that searched, found
14
+ nothing, and then asks the person about the miss can now say what it looked
15
+ at: pass the envelope `absent()` returns, as in `requestInput({ id,
16
+ question, fields, absence: absent({ what, checked }) })`. Until now a lookup
17
+ that paused left no record of the miss it was asking about — no
18
+ `agentfootprint.tools.absent` event and no `coverageDeclared` row, because
19
+ both are filed when a tool RETURNS its result, and a pause returns nothing.
20
+ The library now files them when the request is raised, before the run
21
+ pauses: the same event payload and the same row, byte for byte, that the
22
+ same `absent(…)` files when a tool returns it; and when the tool declares
23
+ `argumentsFrom` under `noticeEmptyLookups`, the empty-lookup check reads the
24
+ miss too. Nothing that judges a SERVED result applies at the raise, because
25
+ nothing is served for the paused call: not the tool's `resultCeiling`, not
26
+ the column-type contract, not the evidence corpus. The paused call is
27
+ answered by the person, not delivered an `'absent'` status, so an
28
+ `onToolStatus` route keyed on `'absent'` does not fire for it. The rows are
29
+ filed once — nothing on resume reads the field. It is not part of the
30
+ pending question (`awaitingInput`) or of what the model is served for the
31
+ paused call, so the question states the miss only if your `question` says
32
+ so; under `.limitsTravelWithTheAnswer()` the final answer's limits block
33
+ carries it, as it does a returned miss. A value the absence recognizer
34
+ cannot read is refused when `requestInput` is called (`InputRequestError`,
35
+ naming `absent()`), and the call errors instead of pausing; `absence: null`
36
+ is the field omitted. An envelope built by hand whose lists cannot be read
37
+ (such as `checked: [null]`) errors the call at the raise with the same
38
+ message the value would give if returned: the run goes on, nothing pauses
39
+ and nothing is filed. A lookup reached through another tool
40
+ (`ctx.tools.call`, a runbook procedure, a `flowchartAsTool` stage) pauses
41
+ that outer call, so its miss is filed under the outer tool and call id. A
42
+ lookup a person approved before it ran (a `checkIn`, an approved middleware
43
+ `ask`, granted interactive consent) cannot pause at all — its raise is
44
+ refused as an error, as before, and its miss is not filed. A request without
45
+ `absence` records exactly what it did before, and a malformed hand-raised
46
+ one (`pauseHere`/`askHuman`) leaves the committed record it always left,
47
+ whether or not it carries `absence` (its error text can differ where 9.113.0
48
+ stopped first at the then-unknown key).
49
+
50
+ ## [9.113.0] - 2026-09-23
51
+
52
+ ### Added
53
+
54
+ - **`LLMMessage.notDispatched`** — an optional field on a `role: 'tool'`
55
+ message that answers a call which never ran:
56
+ `{ pausedCall: { toolCallId, toolName } }`, the call in the same batch the
57
+ run paused on. The library writes it on the results described under Fixed
58
+ below and removes it before any request is sent, the same way it removes
59
+ `injectedBy`; it is absent on every other message. Read it when your own
60
+ code needs to know whether a call in the history really ran — never the
61
+ sentence beside it.
62
+ - **`notDispatched` on `agentfootprint.stream.tool_start` and
63
+ `agentfootprint.stream.tool_end`** (`Payloads.ToolStartPayload`,
64
+ `Payloads.ToolEndPayload`) — the same fact, the same shape, typed off
65
+ `LLMMessage.notDispatched`, on both halves of the bracket of a call that
66
+ never ran; absent on every other bracket. One definition, one writer, two
67
+ carriers: the history message and its bracket. The settled `tool_end`
68
+ carries no `error`: `error` says a call failed, and this one did not — the
69
+ library decided not to run it, as it does for a call a permission policy
70
+ denies, whose `tool_end` carries no `error` either. So code that counts
71
+ successes or failures from `tool_end` reads `notDispatched` first; a bracket
72
+ that carries it is neither:
73
+ `agent.on('agentfootprint.stream.tool_end', (e) => { if (e.payload.notDispatched) return; … })`.
74
+ - **Commentary key `stream.tool_start.notDispatched`** — "Chatbot did not call
75
+ the `fetch_invoices` tool. The LLM asked for it together with
76
+ `collect_input`, and the run paused at `collect_input` before reaching it."
77
+ A new key, so every override of `stream.tool_start` keeps applying to the
78
+ calls it was written for; the settled call's `tool_end` gets no line.
79
+ - **OpenTelemetry span event `agentfootprint.tool.not_dispatched`** —
80
+ reserved for a settled call: the `otelObservability` adapter records it on
81
+ the active span, with `gen_ai.tool.name`, `gen_ai.tool.call.id`,
82
+ `agentfootprint.tool.paused_call.id` and `agentfootprint.tool.paused_call.name`,
83
+ instead of opening an `execute_tool` span for a call that never ran. No run
84
+ records it yet: the adapter opens a trace on `agent.turn_start`, a resumed
85
+ leg emits none, and a settled call only ever rides a resumed leg. The names
86
+ are fixed now so they do not change on the day resumed legs are traced.
87
+ - **`absent({ tryInsteadTool })` names the tool a suggestion points at, as
88
+ data, beside the `tryInstead` sentence.** A suggestion to try another tool
89
+ used to live only inside prose ("Widen the window, or check
90
+ cluster_inventory for the collected cluster names."), so a reader that
91
+ wanted to know WHICH tool was suggested could only find out by parsing the
92
+ sentence, which this library never does. `tryInsteadTool: { tool, why? }`
93
+ carries the name as data, and the envelope renders it under its OWN key,
94
+ right after the sentence
95
+ (`"try_instead_tool":{"tool":"cluster_inventory","why":"it lists the collected cluster names"}`
96
+ — the author's words; the library composes no sentence for it).
97
+ `try_instead` stays a string: every reader typed against `ToolAbsence`
98
+ keeps reading exactly what it read, and a reader that quotes the suggestion
99
+ as printed keeps the sentence when the tool is named beside it. The two are
100
+ independent — either, both, or neither. `absent()` refuses a malformed tool
101
+ where it is typed (no `tool`, a `why` that says nothing, an unknown key so a
102
+ misspelt `why` cannot vanish, a list) and records the name as declared:
103
+ never looked up (a provider may serve it on a later iteration), and held to
104
+ no charset of its own — which names a provider accepts stays
105
+ `core/tools.ts` · `assertValidToolName`'s question, and `absent()` asks its
106
+ dev-mode warning, as `defineTool` does. One tool per absence, because every
107
+ suggestion on record names at most one other tool. The evidence gate grounds
108
+ `tool` and `why` as it grounds the sentence, and the dataset projection
109
+ guard keeps `try_instead_tool` among the declarations an adapter may not
110
+ change. New type `TryInsteadTool`. The rule and the example live in
111
+ `src/core/agent/coverage/README.md` ("A suggestion to try another tool is
112
+ typed, never parsed out of prose"). Nothing JOINS the name yet: the reader
113
+ that would match it against the run's calls (`source-not-consulted`) is the
114
+ second half of the typed vocabulary; this release carries and renders it.
115
+ - **`agentfootprint.tools.absent` carries the suggestion — `tryInstead` (the
116
+ sentence) and `tryInsteadTool` (the tool), each as declared.** Before this
117
+ release neither was on the event: the suggestion rode only inside the raw
118
+ tool result (`agentfootprint.stream.tool_end`'s `result`, the tool turn in
119
+ history), where a reader had to recognize the envelope again to find it.
120
+ Both keys are additive and default-omitted. `readCoverageResult` lifts them
121
+ onto `CoverageFacts`, read by the rules `absent()` mints by: an envelope
122
+ minted elsewhere whose suggestion those rules refuse is still an absence;
123
+ that suggestion is simply not read. Neither reaches `coverageDeclared` or
124
+ the block `.limitsTravelWithTheAnswer()` appends — a suggestion is advice
125
+ about a call not yet made, not ground the answer stands on.
126
+ - **A ruled-out standing whose only witness is an absence gets a row beside
127
+ it; the model's word is never rewritten** (`.findings()`). "Nothing was
128
+ found" is not "ruled out". When the model declares `ruled-out` on a result
129
+ that the tool returned as an absence AND the model was served as one — an
130
+ `absent()` envelope, bare or bounded by `coverage()`, which the dispatch
131
+ door records (the delivered status `'absent'`, the `tools.absent` event, a
132
+ `coverageDeclared` row) and which reached the model as returned — the
133
+ library files an `unsettled-by-absence` row (`UnsettledByAbsenceRow`,
134
+ exported from the package root) immediately after the model's standing,
135
+ keyed to its `toolCallId`. The row carries what the served envelope said it
136
+ did not check (`notChecked`, `cannotCover`) and its `try_instead` byte for
137
+ byte (`tryInstead`, never parsed) — the sentence only: the typed
138
+ `try_instead_tool` (above) is not copied, because nothing in this release
139
+ reads a typed tool off the row. The model's own row is byte for byte what
140
+ 9.112.2 filed, and it is served exactly as declared. The next call is also
141
+ served a new section, `unsettled by absence (read off the record):`, with
142
+ one head line per current row and one line per part of the envelope. Once
143
+ the ruled-out result is collapsed to a ticket on the wire, that section is
144
+ where the envelope's boundary still reaches the model. The row is stored
145
+ because what it is read from does not last: the door's rows are per run and
146
+ the served result can be evicted from the window. The ledger's fold keeps
147
+ the last row per result while that result's current standing is still
148
+ `ruled-out`; a ruled-out id leaves the offer, so in practice a row is served
149
+ for the rest of the run and on every continued turn. It is filed at both
150
+ moments that file standings (a call's `_findings.previous` and a JSON
151
+ answer's), on both chart shapes, and the checkpoint carries it (its door
152
+ admits the kind on resume). **Nothing is inferred, and nothing the model was
153
+ not served is quoted:** whether the tool returned an absence is the door's
154
+ call alone, so an envelope a tool returned as TEXT (an MCP server's default
155
+ text mode; `mcpClient({ resultMode: 'structured' | 'structured-or-json' })`
156
+ delivers it as an object) files nothing, as do a zero-row array, a bare
157
+ wrapper such as `{ hba_count: 0, hbas: [] }` and prose. The door records a
158
+ return before the after-tool chain, the tool's own ceiling and placement
159
+ act, so a result an after-tool rule denied, a ceiling's refusal, a placed
160
+ ticket and a summary file nothing, and an after-tool scrub is honored: the
161
+ row's words come from the served result alone. An `open`, `noise` or `fact`
162
+ standing files nothing, and neither does a ruling-out on a call the batch
163
+ settlement answered (see Fixed): that call never reached the door, and a
164
+ standing that names it is `unknownId`; a malformed list or item never
165
+ reaches the row and never fails the run; a framework note joined after the
166
+ envelope (a stepped skill's step boundary) hides nothing. **Not built in
167
+ this release:** the design's second witness, a declared-empty result (a
168
+ top-level zero-row array, `readLookupResult`'s one law). No door records
169
+ that reading per call, and reading the served string would count a text
170
+ `'[]'` the law declines; a `.findings()`-gated door record of it is what
171
+ earns it. **Who is affected:** only an agent with `.findings()` whose model
172
+ rules out a result it was served as an absence. No event and no instruction
173
+ line ship with the row (no reader in this release), and the door's key is
174
+ read only for such a ruling-out, so a run whose model rules out no such
175
+ result records the bytes it always did; the 21 byte-identity references are
176
+ unchanged. The committed ledger now also carries a tool's own words on this
177
+ row, so a redaction policy that hides tool output by key must cover
178
+ `findingsLedger`. The piece's stated ceiling,
179
+ `FINDINGS_PIECE_LIMITS.pieceChars`, rises from 98,304 to 114,688 chars for
180
+ the sixth capped section (the every-cap test in `serve.test.ts` measures the
181
+ largest piece against it).
182
+
183
+ ### Changed
184
+
185
+ - **A plain object in `tryInstead` is refused, and pointed at
186
+ `tryInsteadTool`.** It is the typed form `{ tool, why? }` written into the
187
+ sentence's slot; 9.112.2 dropped it without a word, and with it the tool
188
+ the author named. It is the ONE value the sentence slot refuses. Every other
189
+ value that is not a string still reads as no suggestion, as in 9.112.2 —
190
+ `null`, `false` from `tryInstead: cond && '…'`, a number, `NaN`, a list, a
191
+ Date — because `absent()` runs inside a tool's `execute`, where a refusal
192
+ reaches the model as that call's error result instead of the absence. The
193
+ declared type has always been `string`, so a typed caller reaches the
194
+ refusal only through a cast or a value typed `any` (a `JSON.parse` result,
195
+ an untyped row), which is assignable to `string` without one.
196
+ - **Docs site budget re-baselined.** The static export measured 672.17 MB
197
+ across 7,249 files on the release commit, over the 672.00 MB ceiling with
198
+ one file of room; the ceilings rise ~2% over that measurement to 686 MB and
199
+ 7,400 files, with the reason recorded beside the numbers in
200
+ `docs-next/scripts/check-site-budget.mjs · OUTPUT_LIMITS`. The API reference
201
+ is regenerated for this release (two new pages: `TryInsteadTool`,
202
+ `UnsettledByAbsenceRow`).
203
+
204
+ ### Fixed
205
+
206
+ - **When a batch of tool calls pauses, the calls after the pause now get a
207
+ result.** A model can ask for several tools in one turn, and the agent runs
208
+ them in order. When one of them paused the run — a middleware `ask`, a
209
+ tool's `checkIn`, a credential consent, or a tool that called `pauseHere`,
210
+ `askHuman` or `requestInput` — the calls after it in that batch never ran.
211
+ On resume the library answered the paused call and nothing else: the next
212
+ request to the model still carried the later calls, with no result for them
213
+ (a shape providers such as Anthropic reject), no `tool_start` / `tool_end`
214
+ was emitted for them, and the resumed `iteration_end` counted one call.
215
+ **Who is affected:** any agent whose model batches tool calls and that can
216
+ pause part-way through a batch. A pause on the LAST call of a batch, or on a
217
+ batch of one, was never affected and records exactly what 9.112.2 recorded.
218
+ **What happens now:** every resume path settles each call after the paused
219
+ one without running it. Its result is one fixed sentence the library writes
220
+ — "Tool 'fetch_invoices' was not executed on that call: the run paused on
221
+ call 'c2' to 'collect_input', earlier in the same batch, and resumed without
222
+ executing the calls that followed it in that batch." — past tense, about
223
+ that call only, and telling the model nothing about what to do next:
224
+ whether to ask for the call again is the model's decision. Each
225
+ settled call gets its own `tool_start` and `tool_end` (`durationMs: 0` and
226
+ no `error` — it produced no result, and it did not fail), and the resumed
227
+ `iteration_end.toolCallCount` counts every call that leg closed: the paused
228
+ call plus each settled one (a batch of three paused on the middle call
229
+ reports 2; on the first, 3). The next request carries one result for every
230
+ call. Nothing is run on resume, because a resumed call has no way to pause
231
+ again. A settled call never returned, so it is not in `toolResults` or
232
+ `lastToolResult`, and no `on-tool-return` trigger or skill-graph route fires
233
+ on it. It never ran, so its message carries `notDispatched` (see Added), and
234
+ the readers that ask whether a call ran, or whether a message is a tool's
235
+ result, read that marker: the `sequence` a
236
+ `PermissionChecker` is given (and `PolicyHaltError.sequence`) leaves it out,
237
+ so a policy such as "verify the identity before any transfer" is not
238
+ satisfied by a verification that never happened — and it pairs each marker
239
+ with the one call it answers by that call's place in the history, not by id
240
+ alone, so when a later call that really runs reuses the settled call's id
241
+ (the library's own fallback ids are minted per provider instance and start
242
+ again in a new process) the settled call does not come back and the call
243
+ that ran is not dropped; the empty-lookup check (`noticeEmptyLookups`) takes
244
+ no producer text from it, so a value that only the sentence carries files no
245
+ advisory, and a declared ground that was only ever settled reads as
246
+ `unreachable`; a check-in's evidence `trail` does not list it among the
247
+ calls already completed; the window's
248
+ last-tool-result pin, its drop notice and `WindowRecord.droppedObservations`
249
+ do not take the sentence for that tool's result, so the tool's real earlier
250
+ result stays pinned; the dangling-reference check does not count it as a
251
+ re-fetched ground; under `.findings()` it is never offered to the model as a
252
+ result it may judge, never resolved as one (a model that names its id anyway
253
+ is recorded as written, `unknownId: true`), never counted undeclared, never
254
+ collapsed to a ticket, never listed in `WindowRecord.droppedStandings`, and
255
+ never ranked into its turn's standing — a batch whose results the model
256
+ judged all noise still reads as noise to `WindowStrategyInput.standingOf`
257
+ and the window's fact pin; and the trace toolpack's `inspect_tool_call`
258
+ reports the call as not dispatched, with no arguments, duration or inside —
259
+ and when a provider reused the id for a later call that ran, it reads that
260
+ call's step, outcome and duration off its own bracket, never the
261
+ settlement's. Its two brackets carry the same `notDispatched` (see Added),
262
+ and every reader of the event stream in the library reads it rather than taking a 0 ms
263
+ bracket for a call that ran: causal memory files no tool record for it; the
264
+ audit chain keeps the field on both records; the OpenTelemetry and X-Ray
265
+ adapters open no span or subsegment for it — though neither traces a
266
+ resumed leg today (a trace opens on `agent.turn_start`, which a resume does
267
+ not emit), and a settled call only ever rides one, so in practice they see
268
+ none of it; the live status line, the chat-bubble status and the live tool
269
+ tracker never show it as running, returned or failed; the commentary says
270
+ it was not called; a route hop never names it as the tool that drove it;
271
+ the step graph draws no tool step for it, a boundary's `toolCalls` rollup
272
+ does not count it, and the next step shows the last real result; the
273
+ thinking trace adds no beat for it; and the bug-report transcript keeps the
274
+ field on its step. The checkpoint is unchanged — the calls are read from
275
+ the conversation history — so a checkpoint saved by an earlier version
276
+ settles the same way when it is resumed on this one. An agent that set
277
+ `anthropic({ parallelToolCalls: false })` only to avoid this on pause and
278
+ resume no longer needs to.
279
+ **Still open:** a permission `halt` part-way through a batch, and a paused
280
+ turn continued after `abandonPause()`, still leave the later calls without a
281
+ result; and a hosted input request that is cancelled answers them with
282
+ `input_cancelled` rather than this sentence. Five readers of the history
283
+ still treat the settled sentence as a tool's result: the evidence corpus
284
+ (read by the evidence gate and, under `.findings()`, by the contingent rows
285
+ filed at dispatch) and the prior-turn evidence count built from it, the
286
+ heuristic memory extractor (which stores it as a "Tool result" beat), the
287
+ compaction summary's input, and the messages slot's context records, which
288
+ tag it `source: 'tool-result'` without the marker — so `context.injected`
289
+ and the views built on it count it as a tool's result. A viewer that reads
290
+ only a bracket's `error` shows a settled call as a success: the Lens
291
+ (`agentfootprint-lens`) does today, marking its `tool_end` `ok` and
292
+ describing it as returned in 0 ms, until it reads `notDispatched` on both
293
+ halves of the bracket. And under `.findings()`, a settled call's own
294
+ `_findings` is recorded only in part: the standings it declared are filed,
295
+ its basis row is not.
296
+ - **`inspect_tool_call` reads a reused id's outcome and duration off its
297
+ latest call.** A provider may reuse a tool-call id across turns — the
298
+ library's own fallback ids start again in each provider instance. The trace
299
+ toolpack answered with the LATEST call's result for the id but took the
300
+ outcome and the duration from the FIRST `tool_end`, so an id whose first
301
+ call succeeded and whose second failed read `outcome: ok` beside the
302
+ failure's result. Both now come off the LAST `tool_end` for the id — the
303
+ call the result line shows. **Who is affected:** anyone reading
304
+ `inspect_tool_call` on a run whose provider reused an id; a run whose ids
305
+ are unique reads exactly as before. The step line still names the first
306
+ step that ran under the id.
307
+
308
+ ### Unchanged, pinned
309
+
310
+ - The sentence form is byte-identical: the envelope the model reads, both
311
+ requests' messages, the committed tool turn, the `coverageDeclared` rows and
312
+ the appended block all match a reference generated on the 9.112.2 tree
313
+ before any source edit
314
+ (`test/core/agent/fixtures/absent-try-instead-sentence.reference.json`,
315
+ pinned by `test/core/agent/coverage-try-instead.test.ts`). That fixture is
316
+ the pin for absences: the references in `test/core/tools/reference/` are
317
+ unchanged, but none of them contains an absence. The one change a
318
+ sentence-form absence sees is the new `tryInstead` key, last on its
319
+ `tools.absent` event — so a stored recording of a sentence-form absence (a
320
+ lens fixture, a saved event stream) gains that key when it is regenerated
321
+ against 9.113.0. `ToolAbsence.try_instead` stays exactly
322
+ `string | undefined`, pinned at compile time by
323
+ `test/type-regressions/AbsenceSuggestion.assignability.test.ts`.
324
+ - A `tryInstead` that is neither a string nor a plain object (`false`,
325
+ `true`, `0`, `42`, `NaN`, `['a']`, a list of sentences, a Date) runs as it
326
+ did on 9.112.2, byte for byte: status `absent`, one `tools.absent` event, and
327
+ the same envelope the model reads — pinned against a second reference
328
+ generated on the same 9.112.2 tree
329
+ (`test/core/agent/fixtures/absent-try-instead-not-a-sentence.reference.json`).
330
+
331
+ ### Not shipped — waiting for its reader
332
+
333
+ - `notChecked[].kind` and `subject` (the design's
334
+ `notChecked: [{ kind: 'existence' | 'window' | …, subject?, why }]`).
335
+ Nothing in this release branches on them; the reader that would earn them
336
+ — the assessment's `existence-not-checked` join of an EXISTENCE claim to
337
+ `notChecked[].kind === 'existence'` — does not exist yet. The coverage
338
+ README records the shape, why it waits, and what lands with it.
339
+ - **The typed provenance tier waits for its reader.** The integrity assertion
340
+ README records the tier the honest-answer design proposes for assertion
341
+ rows (`claimed | answered | given | observed | checked | judged`, rendered
342
+ by one writer into the `provenance` string as `<tier>:<source>`) and why it
343
+ is not shipped: no code in this release reads a tier. It ships with the
344
+ minimum-strength rule that would read it.
345
+
8
346
  ## [9.112.2] - 2026-09-22
9
347
 
10
348
  ### Fixed
package/CLAUDE.md CHANGED
@@ -71,6 +71,7 @@ not in this table, search `src/index.ts` for the nearest noun before writing cod
71
71
  | a classifier's reading of WHICH TOOL beside every model call — the ranking, the pick and the cost on the record before the call, the model's call and the agreement after it; optionally the served list narrowed to the top-N plus the doors, on the committed record the receipt hashes and the served view rebuilds; a miss recorded and the full wire served next call, never a refusal, never an override | `.toolChoice({ classifier, serve, alwaysServe })` + `ToolChoiceRow` + `ToolChoiceOutcomeRow` + `ToolChoiceErrorRow` + `ALWAYS_SERVED_TOOLS` + `recordToolChoice` + `narrowServed` (events `agentfootprint.tool_choice.*`, bench `npm run bench:tool-choice`) | `src/core/agent/toolChoice/` | 9.105.0 |
72
72
  | a MAP of the domain the model can reason over when a result holds nothing — what each term IS (meaning, unit), how terms RELATE, which SOURCE holds a term (with the author's coverage sentence) and which registered TOOL reads it from there; declared once, validated against the tool registry at build, on the record as one run constant, served as one request-only system piece per call, never a fetch path and never inferred from | `defineOntology` + `.ontology(map)` (`AgentOptions.ontology`) + `AgentState.ontology` + `ontologyPiece` / `ONTOLOGY_INSTRUCTION` (`agentfootprint/ontology`) + `agentfootprint.ontology.served` | `src/ontology/` | 9.106.0 |
73
73
  | a value the model USED — in its answer, or as an argument of a later call — that came ONLY from results it had itself declared open, noise or ruled-out (a theorem tower on a set-aside lemma): declared standings joined to the evidence corpus's carriers, no inference, no judge; one row per value per moment through the one writer; served back under `contingent (read off the record):`; cache reads summed on the record beside the input tokens | `ContingentRow` / `ContingentCarrier` + `agentfootprint.findings.contingent` + `findingsInstructionFor` (`FINDINGS_CONTINGENT_LINE`, registered under BOTH `.findings()` and `.namesAndNumbersFromEvidence()`, never one) + `EvidenceCorpus.carriers` / `EvidenceVerdict.grounded` + `AgentState.totalCacheReadTokens` | `src/core/agent/findings/contingent.ts` | 9.110.0 |
74
+ | a model's ruling-out that rests only on "nothing found" — a `ruled-out` standing on a result the dispatch door recorded as an absence (`absent()`, bare or bounded by `coverage()`: status `'absent'`, a `coverageDeclared` row; never a second reading of a return) AND the model was served as one (a result an after-tool rule denied, a ceiling's refusal, a placed ticket or a summary files nothing) — marked by a row BESIDE the model's own, never a rewrite of it, carrying what the SERVED envelope said it did not check and its `try_instead` byte for byte; served back under `unsettled by absence (read off the record):`; no event, no instruction line | `UnsettledByAbsenceRow` + `agent.findings()` / the checkpoint's `findingsLedger` (the fold's `unsettled` map and the rule — `withUnsettledRows` / `unsettledRowOf` — are internal) | `src/core/agent/findings/unsettled.ts` | 9.113.0 |
74
75
 
75
76
  **One law before you add a mapping.** Any function turning caller data into a KEY,
76
77
  a namespace, a filename or an index entry must be injective, and its collision
@@ -151,7 +152,7 @@ Traps: `src/observability/` holds the finder IMPLEMENTATIONS (canonical home; `d
151
152
  - **Code staging-in (9.26.0)**: `CodeSession.stageInputs?(inputs) → StagedCodeInput[]` — OPTIONAL, feature-detected via `canStageCodeInputs`, and its contract is TWO promises: the payloads are readable at the returned paths, AND every later `execute` exposes the manifest as `STAGED_INPUTS_ENV` (`AF_STAGED_INPUTS`, `name → path`). `CodeInput.name` is the MANIFEST KEY (the wants arg name, so a static description can name it) and `fileName` is the on-disk name — separate fields so the two cannot drift. `codeRunnerTool({ wants })` composes the schema properties + the description clause and refuses BY NAME on a non-staging runner. Implemented by localCodeRunner only.
152
153
  - **Repeated-call nudge (9.26.0)**: `core/agent/repeatedCall.ts` (pure `noteRepeatedCall` + `repeatedCallLedgers()`) + the ONE batch-loop hook in toolCalls. Fingerprints (FNV-1a) of stable-stringified args and the tool's OWN delivered result — never values. **The counters are NOT tracked state**: they live in a bounded run-keyed map held by `buildToolCallsHandler` and keyed by `deps.currentRun().runId`, so a turn that repeats nothing is byte-identical in state, commit log, narrative and recordings (a scope key would have changed all four for every agent that merely upgraded); the repeat itself rides `agentfootprint.tools.repeated_call`, the emit channel per-attempt facts belong on. A resume mints a new runId ⇒ counting restarts. Fires at the SECOND identical landing, once. `AgentOptions.repeatedCallNudge: false` disables (threaded value-conditionally; ON is the default). Deliberately NOT applied on the pause-resume dispatch paths.
153
154
  - **Evidence gate (9.35.0)** — `.namesAndNumbersFromEvidence({ posture, shapes, exempt, minDigits })`: every name/number in the final answer must appear in a `role:'tool'` result. Postures reuse the routing VOCABULARY (`assist`|`guard`|`rails`) as a SEPARATE option — routing authority ≠ evidence discipline, and overloading `skillGraphCascade.strictness` would deny "strict routing, loose evidence". Wiring is the stepNudge blast radius verbatim: `ResolvedEvidenceGate` (builder-resolved, refusals at the CALL SITE) → Agent ctor trailing param → `buildRouteDeciderStage`'s 4th arg (`judgeEvidence` runs LAST of the three judges — schema > steps > evidence — and NOT on a denied or schema-exhausted answer) → `evidenceRecheckStage` branch (`{loopTo}`, mounted only for a revising posture) → `STAGE_IDS.EVIDENCE_RECHECK` + BOUNDARY_LOCAL_IDS + milestoneFor. TWO deps flags, and the second is the one a reader misses: `evidenceRecheckStage` (branch) AND `hasEvidenceGate` (bubbles `systemPromptInjections` out of sf-llm-call in the GROUPED chart — without it the gate flags the app's own prompt). Per-check facts ride `agentfootprint.agent.evidence_checked` (emit channel); only the terminal verdict is committed (`unsupportedValues`), because the boundary raises off it. `UnsupportedValuesError` joins the TERMINAL-typed-error list in `run()`'s catch (a verdict is not a crash — no retry handle for a wall). **Grounded numbers (9.75.0)** rides the SAME dial: `nudge: true` arms the staged-refs nudge — `toolWantsOf` harvests `Tool.wants` beside the `toolGrounding` harvest in `Agent.buildChart` (same ToolProvider blindness), callLLM appends ONE request-only late line when a placed ticket's kind matches a SERVED `wants` tool (judged on `registeredToolSchemas`, so wrap-up's withheld surface arms nothing; history untouched ⇒ never in the exempt corpus), recorded as `agent.grounding_nudged`; and the recheck names the same refs+spender whenever a `wants` tool exists, NOT gated on `nudge`. Since 9.96.0 `evidence/recovery.ts` · `buildEvidenceRecovery` composes request-only system guidance; `evidenceRecoveryPiece` carries it into the next request without synthetic conversation turns. Optional `recoveryInstruction` adds bounded synchronous guidance; `buildEvidenceCorrection` remains a legacy compatibility helper. Token extraction, exemptions and the single-revision budget are unchanged; this is not semantic validation or streaming draft suppression.
154
- - **Coverage primitives (this release)** — `absent()` / `coverage()`, both copied from FIELD USE. THE argument is the direction of the error: a *nothing-found* misread as an *outage* costs an investigation, an *outage* misread as *nothing-found* declares a system healthy that was never checked — so the two must not share a shape. Blast radius, and it is the `resultCeiling` radius verbatim: `readCoverageResult` called by `declareCoverage` at BOTH execute boundaries in toolCalls.ts (batch loop + `resolveCredentialAndExecute`), on the UNWRAPPED content and BEFORE the ceiling. FOUR downstream changes and no more: (1) `ToolResultStatus` gained a SEVENTH word `'absent'` — routable by `onToolStatus`, because folding it into `'failure'` is the confusion itself and into `'success'` leaves nothing to route on; (2) two events (`tools.absent`, `tools.coverage_declared`); (3) tracked `AgentState.coverageDeclared` — a limit is a fact about the ANSWER, not about an attempt, which is why it is state and the repeated-call counters are not; (4) the evidence corpus indexes an absence's COVERAGE ONLY (`coverage/evidence.ts` — a failed lookup is the cheapest laundering machine, and `absent()` would have made it cheaper: this is frames.ts's argument on the tool side). Deliberately UNCHANGED: no `error: true`, no retry, no refusal, no gate flag. Survival into the answer is `.limitsTravelWithTheAnswer()` → `attachCoverageLimits` dep → BOTH builders swap the final branch's first stage for `prepareFinalWithLimitsStage` (same id, same position). It APPENDS rather than judges: a check for "did the model state its limits?" needs a second model to decide what counts, which is what evidence/README.md forbids.
155
+ - **Coverage primitives (this release)** — `absent()` / `coverage()`, both copied from FIELD USE. THE argument is the direction of the error: a *nothing-found* misread as an *outage* costs an investigation, an *outage* misread as *nothing-found* declares a system healthy that was never checked — so the two must not share a shape. Blast radius, and it is the `resultCeiling` radius verbatim: `readCoverageResult` called by `declareCoverage` at BOTH execute boundaries in toolCalls.ts (batch loop + `resolveCredentialAndExecute`), on the UNWRAPPED content and BEFORE the ceiling — and (9.114.0) at the RAISE site, `declareRaisedAbsence`, which files a `requestInput({ absence })` miss before the pause, once, never on resume. FOUR downstream changes and no more: (1) `ToolResultStatus` gained a SEVENTH word `'absent'` — routable by `onToolStatus`, because folding it into `'failure'` is the confusion itself and into `'success'` leaves nothing to route on; (2) two events (`tools.absent`, `tools.coverage_declared`); (3) tracked `AgentState.coverageDeclared` — a limit is a fact about the ANSWER, not about an attempt, which is why it is state and the repeated-call counters are not; (4) the evidence corpus indexes an absence's COVERAGE ONLY (`coverage/evidence.ts` — a failed lookup is the cheapest laundering machine, and `absent()` would have made it cheaper: this is frames.ts's argument on the tool side). Deliberately UNCHANGED: no `error: true`, no retry, no refusal, no gate flag. Survival into the answer is `.limitsTravelWithTheAnswer()` → `attachCoverageLimits` dep → BOTH builders swap the final branch's first stage for `prepareFinalWithLimitsStage` (same id, same position). It APPENDS rather than judges: a check for "did the model state its limits?" needs a second model to decide what counts, which is what evidence/README.md forbids.
155
156
  - **Out-of-budget wrap-up (9.56.0)** — `wrapUpAtMaxIterations` (AgentOptions, default ON, `repeatedCallNudge`'s opt-out grammar): the FOURTH Route branch, and the SchemaRetry mechanism verbatim — `STAGE_IDS.WRAP_UP` + same `{loopTo}`, so the last call is one ordinary turn with its own `iteration_start`/`llm_start`/`cost.tick`. Two things are its own: (1) the tools are WITHHELD at REQUEST ASSEMBLY in callLLM (`scope.wrapUpAsked`, the `schemaTool` seam's mirror — the schema tool still rides, so an output contract survives), which is what makes the call terminal BY CONSTRUCTION rather than by a rule, and is why it is exempt from `maxIterations`; (2) the CONDITIONAL MOUNT is on the agent having a TOOL SURFACE (`registryByName.size > 0 || externalToolProvider`) — a limit only cuts a turn short when tool calls were pending, so a toolless agent's chart must not grow a box that can never run. `decideBranch` treats a spent wrap-up as cut-short for every downstream judge (`toolCalls.length > 0 || scope.wrapUpAsked`), or a step nudge / evidence revision would loop past the limit that fired. `wrapUpAsked` is deliberately NOT seeded — a turn that finishes inside its budget commits the exact key set it always did. The record is FOUR channels: `stoppedEarly` (now with `wrappedUp`, corrected on the pass after so `answerWasEmpty` describes the answer the caller GOT), `cost.limit_hit` (unchanged), the new `agent.budget_exhausted {action: 'wrapped-up'|'cut-short'}`, and an optional `turn_end.stoppedEarly` projection.
156
157
  - **Closed seams**: Agent chart internals (AgentChartDeps not exported — extend via injections/tools/memory/thinking, never by adding a ReAct stage); ContextSlot (3 slots fixed); ProviderKind factory; dormant ports with no consumer (ContextSourceAdapter, EmbeddingProvider, RiskDetector — adapters/types.ts only); reserved tool names under selfExplain — 8.16.0 made the list DERIVED: `TRACE_TOOL_NAMES` (traceToolpack.ts, 11 names since 9.61.0: run_overview/find_context_errors/find_in_trace/trace_node/trace_slice/backtrack/who_wrote/get_value/inspect_tool_call/inspect_tool_run/read_narrative) is what AgentBuilder.ts:~1560 reserves in inline mode (`explain_run` in delegate mode), so a NEW toolpack tool joins ONE list and the reservation follows — but it must ALSO join the lazy template's mounted set (lazyToolpack builds over `{narrative: [], events: []}` so the catalog shape is fixed at build time) and the count assertion in test/lib/trace-toolpack/selfExplainAgent.test.ts. **8.17.0 `inspect_tool_run`** is the descent THROUGH the tool boundary: `flowchartAsTool({ keepRecord: true })` files each invocation's record in a bounded LRU store (lib/trace-toolpack/innerRunRecords.ts) keyed by the executing `ctx.toolCallId`, riding the `Tool` under the `INNER_RUN_RECORDS` registry symbol; `AgentBuilder.build()` → `collectInnerRuns(registry, injections)` → `SelfExplainSource.getInnerRuns` → `TraceToolpackArtifacts.innerRuns`. The inner views are the pack ITSELF re-run over `openRecording(record.recording)` — do not add a second query implementation. Provider-delivered tools are NOT collected (no build-time list); inner runtimeStageIds are a SEPARATE namespace and only `inspect_tool_run` accepts them. **9.61.0 `find_context_errors`** is the Context Integrity read-out: it reads `agentfootprint.integrity.context_error` + `…disposition` off the artifacts' EVENT TAIL (never re-running a check), joins each finding to the step it was filed at, and mounts UNCONDITIONALLY — a tool that vanished with the tail could not say the evidence channel is ABSENT, which is the one sentence this family forbids collapsing into "no errors found".
157
158
 
@@ -28,6 +28,14 @@
28
28
  * the agent identity, and library versions — runs chain back-to-back in
29
29
  * one log, so silently DROPPING a whole run breaks the chain too.
30
30
  *
31
+ * A call a paused batch never dispatched (9.113.0) lands as its two
32
+ * brackets, each carrying `notDispatched: { pausedCall: { toolCallId,
33
+ * toolName } }` and neither carrying `error` — identifiers only, so the field
34
+ * rides VERBATIM in both payload modes (it is not in `BOUND_FIELDS`). The
35
+ * chained record therefore says the call never ran — neither that it
36
+ * succeeded nor that it failed; the bounded `result` (`[type: string]`) never
37
+ * had to say it.
38
+ *
31
39
  * High-volume content deltas (`stream.token`, `stream.thinking_delta`)
32
40
  * are excluded by default (`includeTokenEvents: true` to include).
33
41
  *
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/adapters/observability/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/adapters/observability/audit.ts"],"names":[],"mappings":"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"}
@@ -46,12 +46,27 @@
46
46
  * stream.tool_end ↦ end tool span (ERROR status + `error.type`
47
47
  * if errored). Correlated by toolCallId so
48
48
  * PARALLEL tool calls close the right span.
49
+ * a bracket carrying ↦ NO span: the call never executed (9.113.0).
50
+ * `notDispatched` Its tool_start adds ONE span event
51
+ * `agentfootprint.tool.not_dispatched` to the
52
+ * active span — SYNTHESIZED name — with
53
+ * `gen_ai.tool.name`, `gen_ai.tool.call.id` and
54
+ * the paused call's id and name; its tool_end
55
+ * closes nothing. KNOWN LIMIT: only on a leg
56
+ * this adapter traces, and a trace opens on
57
+ * `agent.turn_start` only. A resumed leg emits
58
+ * none and carries a new `meta.runId`, so none
59
+ * of it is traced today — and a settled bracket
60
+ * only ever rides a resumed leg, so no run
61
+ * records this span event yet
49
62
  * cost.tick ↦ setAttribute on topmost active span
50
63
  * error.fatal ↦ ERROR status on root + defensive unwind
51
64
  * context.evaluated ↦ N span events `agentfootprint.skill.routing`
52
65
  * — SYNTHESIZED name (one per routing entry),
53
- * not a registry-verbatim forward; all other
54
- * span events use the registry name verbatim
66
+ * not a registry-verbatim forward; apart from
67
+ * it and `agentfootprint.tool.not_dispatched`
68
+ * above, span events use the registry name
69
+ * verbatim
55
70
  *
56
71
  * ## Decisions = SPAN EVENTS, not attributes (design decision)
57
72
  *
@@ -631,6 +646,28 @@ function otelObservability(opts) {
631
646
  break;
632
647
  const p = event.payload;
633
648
  const toolName = p.toolName ?? 'tool';
649
+ // A call the batch settlement answered (9.113.0) never executed, so it
650
+ // gets no `execute_tool` span — one would claim an execution that
651
+ // never happened. The fact is a library decision, recorded like every
652
+ // other one here: a span event on the active span (SYNTHESIZED name).
653
+ // Only on a leg this adapter traces — see the header's KNOWN LIMIT.
654
+ if (p.notDispatched !== undefined) {
655
+ const top = topSpan(t);
656
+ if (top) {
657
+ const paused = p.notDispatched.pausedCall;
658
+ recordSpanEvent(top, 'agentfootprint.tool.not_dispatched', {
659
+ 'gen_ai.tool.name': toolName,
660
+ ...(p.toolCallId !== undefined && { 'gen_ai.tool.call.id': p.toolCallId }),
661
+ ...(paused?.toolCallId !== undefined && {
662
+ 'agentfootprint.tool.paused_call.id': paused.toolCallId,
663
+ }),
664
+ ...(paused?.toolName !== undefined && {
665
+ 'agentfootprint.tool.paused_call.name': paused.toolName,
666
+ }),
667
+ });
668
+ }
669
+ break;
670
+ }
634
671
  // Tool-execution span per GenAI semconv (`execute_tool`).
635
672
  // Args: top-level key NAMES only — `gen_ai.tool.call.arguments`
636
673
  // exists in the spec but is opt-in and carries raw values; we
@@ -653,6 +690,11 @@ function otelObservability(opts) {
653
690
  if (!t?.sampled)
654
691
  break;
655
692
  const p = event.payload;
693
+ // A settled call's tool_start opened no span (see tool_start), so its
694
+ // tool_end closes nothing — and must never reach the name-less
695
+ // fallback below, which would pop whatever tool span is on top.
696
+ if (p.notDispatched !== undefined)
697
+ break;
656
698
  const errored = p.error !== undefined && p.error !== false;
657
699
  // Correlate by toolCallId (the only identity ToolEndPayload
658
700
  // carries) — parallel tool calls end out of LIFO order, so name