wingfoil 0.2.1 → 0.3.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 (452) hide show
  1. package/README.md +88 -42
  2. package/dist/agent/discovery.d.ts +72 -0
  3. package/dist/agent/discovery.d.ts.map +1 -0
  4. package/dist/agent/discovery.js +210 -0
  5. package/dist/agent/discovery.js.map +1 -0
  6. package/dist/agent/execute.d.ts +206 -0
  7. package/dist/agent/execute.d.ts.map +1 -0
  8. package/dist/agent/execute.js +581 -0
  9. package/dist/agent/execute.js.map +1 -0
  10. package/dist/agent/index.d.ts +23 -0
  11. package/dist/agent/index.d.ts.map +1 -0
  12. package/dist/agent/index.js +85 -0
  13. package/dist/agent/index.js.map +1 -0
  14. package/dist/agent/launch.d.ts +133 -0
  15. package/dist/agent/launch.d.ts.map +1 -0
  16. package/dist/agent/launch.js +380 -0
  17. package/dist/agent/launch.js.map +1 -0
  18. package/dist/agent/manifest.d.ts +30 -0
  19. package/dist/agent/manifest.d.ts.map +1 -0
  20. package/dist/agent/manifest.js +93 -0
  21. package/dist/agent/manifest.js.map +1 -0
  22. package/dist/agent/placeholders.d.ts +49 -0
  23. package/dist/agent/placeholders.d.ts.map +1 -0
  24. package/dist/agent/placeholders.js +177 -0
  25. package/dist/agent/placeholders.js.map +1 -0
  26. package/dist/agent/run-log.d.ts +254 -0
  27. package/dist/agent/run-log.d.ts.map +1 -0
  28. package/dist/agent/run-log.js +612 -0
  29. package/dist/agent/run-log.js.map +1 -0
  30. package/dist/agent/schema.d.ts +100 -0
  31. package/dist/agent/schema.d.ts.map +1 -0
  32. package/dist/agent/schema.js +89 -0
  33. package/dist/agent/schema.js.map +1 -0
  34. package/dist/agent/step.d.ts +41 -0
  35. package/dist/agent/step.d.ts.map +1 -0
  36. package/dist/agent/step.js +95 -0
  37. package/dist/agent/step.js.map +1 -0
  38. package/dist/build-info.json +4 -0
  39. package/dist/cli/error.d.ts +11 -2
  40. package/dist/cli/error.d.ts.map +1 -1
  41. package/dist/cli/error.js +27 -6
  42. package/dist/cli/error.js.map +1 -1
  43. package/dist/cli/exit.d.ts +33 -3
  44. package/dist/cli/exit.d.ts.map +1 -1
  45. package/dist/cli/exit.js +54 -3
  46. package/dist/cli/exit.js.map +1 -1
  47. package/dist/cli/index.d.ts +2 -2
  48. package/dist/cli/index.d.ts.map +1 -1
  49. package/dist/cli/index.js +3 -2
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/cli/init-command.d.ts.map +1 -1
  52. package/dist/cli/init-command.js +6 -3
  53. package/dist/cli/init-command.js.map +1 -1
  54. package/dist/cli/mcp-command.d.ts +13 -4
  55. package/dist/cli/mcp-command.d.ts.map +1 -1
  56. package/dist/cli/mcp-command.js +25 -8
  57. package/dist/cli/mcp-command.js.map +1 -1
  58. package/dist/cli/output.d.ts +12 -4
  59. package/dist/cli/output.d.ts.map +1 -1
  60. package/dist/cli/output.js +15 -4
  61. package/dist/cli/output.js.map +1 -1
  62. package/dist/cli/program.d.ts +1 -1
  63. package/dist/cli/program.d.ts.map +1 -1
  64. package/dist/cli/program.js +270 -60
  65. package/dist/cli/program.js.map +1 -1
  66. package/dist/cli/registrar.d.ts +16 -7
  67. package/dist/cli/registrar.d.ts.map +1 -1
  68. package/dist/cli/registrar.js +71 -6
  69. package/dist/cli/registrar.js.map +1 -1
  70. package/dist/cli/suggest.d.ts +20 -0
  71. package/dist/cli/suggest.d.ts.map +1 -0
  72. package/dist/cli/suggest.js +49 -0
  73. package/dist/cli/suggest.js.map +1 -0
  74. package/dist/cli/warning.d.ts +26 -0
  75. package/dist/cli/warning.d.ts.map +1 -0
  76. package/dist/cli/warning.js +66 -0
  77. package/dist/cli/warning.js.map +1 -0
  78. package/dist/cli.js +11 -2
  79. package/dist/cli.js.map +1 -1
  80. package/dist/core/agent-execute.d.ts +44 -0
  81. package/dist/core/agent-execute.d.ts.map +1 -0
  82. package/dist/core/agent-execute.js +71 -0
  83. package/dist/core/agent-execute.js.map +1 -0
  84. package/dist/core/agent-list.d.ts +95 -0
  85. package/dist/core/agent-list.d.ts.map +1 -0
  86. package/dist/core/agent-list.js +207 -0
  87. package/dist/core/agent-list.js.map +1 -0
  88. package/dist/core/agent-show.d.ts +44 -0
  89. package/dist/core/agent-show.d.ts.map +1 -0
  90. package/dist/core/agent-show.js +188 -0
  91. package/dist/core/agent-show.js.map +1 -0
  92. package/dist/core/approval-authority.d.ts +17 -14
  93. package/dist/core/approval-authority.d.ts.map +1 -1
  94. package/dist/core/approval-authority.js +9 -9
  95. package/dist/core/approval-authority.js.map +1 -1
  96. package/dist/core/builtin-asset.d.ts +18 -15
  97. package/dist/core/builtin-asset.d.ts.map +1 -1
  98. package/dist/core/builtin-asset.js +17 -14
  99. package/dist/core/builtin-asset.js.map +1 -1
  100. package/dist/core/builtin-integrity.d.ts +12 -2
  101. package/dist/core/builtin-integrity.d.ts.map +1 -1
  102. package/dist/core/builtin-integrity.js +85 -9
  103. package/dist/core/builtin-integrity.js.map +1 -1
  104. package/dist/core/confinement.d.ts +3 -1
  105. package/dist/core/confinement.d.ts.map +1 -1
  106. package/dist/core/confinement.js +7 -4
  107. package/dist/core/confinement.js.map +1 -1
  108. package/dist/core/context.d.ts +150 -98
  109. package/dist/core/context.d.ts.map +1 -1
  110. package/dist/core/context.js +602 -66
  111. package/dist/core/context.js.map +1 -1
  112. package/dist/core/directive-assign.d.ts +33 -7
  113. package/dist/core/directive-assign.d.ts.map +1 -1
  114. package/dist/core/directive-assign.js +67 -27
  115. package/dist/core/directive-assign.js.map +1 -1
  116. package/dist/core/directive-scope.d.ts +36 -0
  117. package/dist/core/directive-scope.d.ts.map +1 -0
  118. package/dist/core/directive-scope.js +34 -0
  119. package/dist/core/directive-scope.js.map +1 -0
  120. package/dist/core/directives-list.d.ts +13 -3
  121. package/dist/core/directives-list.d.ts.map +1 -1
  122. package/dist/core/directives-list.js +18 -6
  123. package/dist/core/directives-list.js.map +1 -1
  124. package/dist/core/dry-run.d.ts +33 -0
  125. package/dist/core/dry-run.d.ts.map +1 -0
  126. package/dist/core/dry-run.js +45 -0
  127. package/dist/core/dry-run.js.map +1 -0
  128. package/dist/core/element-ref.d.ts +23 -0
  129. package/dist/core/element-ref.d.ts.map +1 -0
  130. package/dist/core/element-ref.js +24 -0
  131. package/dist/core/element-ref.js.map +1 -0
  132. package/dist/core/error-details.d.ts +20 -0
  133. package/dist/core/error-details.d.ts.map +1 -0
  134. package/dist/core/error-details.js +65 -0
  135. package/dist/core/error-details.js.map +1 -0
  136. package/dist/core/exit-code.js +6 -6
  137. package/dist/core/git-identity.d.ts +46 -11
  138. package/dist/core/git-identity.d.ts.map +1 -1
  139. package/dist/core/git-identity.js +140 -27
  140. package/dist/core/git-identity.js.map +1 -1
  141. package/dist/core/index.d.ts +189 -14
  142. package/dist/core/index.d.ts.map +1 -1
  143. package/dist/core/index.js +1241 -238
  144. package/dist/core/index.js.map +1 -1
  145. package/dist/core/init.d.ts +50 -8
  146. package/dist/core/init.d.ts.map +1 -1
  147. package/dist/core/init.js +139 -27
  148. package/dist/core/init.js.map +1 -1
  149. package/dist/core/loaders.d.ts +170 -14
  150. package/dist/core/loaders.d.ts.map +1 -1
  151. package/dist/core/loaders.js +570 -89
  152. package/dist/core/loaders.js.map +1 -1
  153. package/dist/core/memory-add-link.d.ts +28 -0
  154. package/dist/core/memory-add-link.d.ts.map +1 -0
  155. package/dist/core/memory-add-link.js +67 -0
  156. package/dist/core/memory-add-link.js.map +1 -0
  157. package/dist/core/memory-add-type.d.ts +25 -1
  158. package/dist/core/memory-add-type.d.ts.map +1 -1
  159. package/dist/core/memory-add-type.js +59 -1
  160. package/dist/core/memory-add-type.js.map +1 -1
  161. package/dist/core/memory-amend.d.ts +80 -0
  162. package/dist/core/memory-amend.d.ts.map +1 -0
  163. package/dist/core/memory-amend.js +160 -0
  164. package/dist/core/memory-amend.js.map +1 -0
  165. package/dist/core/memory-supersede.d.ts +28 -0
  166. package/dist/core/memory-supersede.d.ts.map +1 -0
  167. package/dist/core/memory-supersede.js +79 -0
  168. package/dist/core/memory-supersede.js.map +1 -0
  169. package/dist/core/memory-transition.d.ts +190 -30
  170. package/dist/core/memory-transition.d.ts.map +1 -1
  171. package/dist/core/memory-transition.js +480 -59
  172. package/dist/core/memory-transition.js.map +1 -1
  173. package/dist/core/registry.d.ts +147 -23
  174. package/dist/core/registry.d.ts.map +1 -1
  175. package/dist/core/registry.js +50 -0
  176. package/dist/core/registry.js.map +1 -1
  177. package/dist/core/relevance.d.ts +74 -12
  178. package/dist/core/relevance.d.ts.map +1 -1
  179. package/dist/core/relevance.js +45 -27
  180. package/dist/core/relevance.js.map +1 -1
  181. package/dist/core/require-reason.d.ts.map +1 -1
  182. package/dist/core/require-reason.js +6 -5
  183. package/dist/core/require-reason.js.map +1 -1
  184. package/dist/core/required-fields.d.ts +28 -0
  185. package/dist/core/required-fields.d.ts.map +1 -0
  186. package/dist/core/required-fields.js +60 -0
  187. package/dist/core/required-fields.js.map +1 -0
  188. package/dist/core/revision.d.ts +82 -0
  189. package/dist/core/revision.d.ts.map +1 -0
  190. package/dist/core/revision.js +144 -0
  191. package/dist/core/revision.js.map +1 -0
  192. package/dist/core/types.d.ts +28 -2
  193. package/dist/core/types.d.ts.map +1 -1
  194. package/dist/core/types.js +12 -3
  195. package/dist/core/types.js.map +1 -1
  196. package/dist/core/workflow-core-checks.d.ts +34 -0
  197. package/dist/core/workflow-core-checks.d.ts.map +1 -0
  198. package/dist/core/workflow-core-checks.js +403 -0
  199. package/dist/core/workflow-core-checks.js.map +1 -0
  200. package/dist/core/workflow-create-remove.d.ts +65 -0
  201. package/dist/core/workflow-create-remove.d.ts.map +1 -0
  202. package/dist/core/workflow-create-remove.js +277 -0
  203. package/dist/core/workflow-create-remove.js.map +1 -0
  204. package/dist/core/workflow-deduction.d.ts +48 -0
  205. package/dist/core/workflow-deduction.d.ts.map +1 -0
  206. package/dist/core/workflow-deduction.js +523 -0
  207. package/dist/core/workflow-deduction.js.map +1 -0
  208. package/dist/core/workflow-diagnostics.d.ts +83 -0
  209. package/dist/core/workflow-diagnostics.d.ts.map +1 -0
  210. package/dist/core/workflow-diagnostics.js +375 -0
  211. package/dist/core/workflow-diagnostics.js.map +1 -0
  212. package/dist/core/workflow-exit-state.d.ts +125 -0
  213. package/dist/core/workflow-exit-state.d.ts.map +1 -0
  214. package/dist/core/workflow-exit-state.js +243 -0
  215. package/dist/core/workflow-exit-state.js.map +1 -0
  216. package/dist/core/workflow-finalize.d.ts +37 -0
  217. package/dist/core/workflow-finalize.d.ts.map +1 -0
  218. package/dist/core/workflow-finalize.js +153 -0
  219. package/dist/core/workflow-finalize.js.map +1 -0
  220. package/dist/core/workflow-list-show.d.ts +176 -0
  221. package/dist/core/workflow-list-show.d.ts.map +1 -0
  222. package/dist/core/workflow-list-show.js +268 -0
  223. package/dist/core/workflow-list-show.js.map +1 -0
  224. package/dist/core/workflow-next.d.ts +268 -0
  225. package/dist/core/workflow-next.d.ts.map +1 -0
  226. package/dist/core/workflow-next.js +503 -0
  227. package/dist/core/workflow-next.js.map +1 -0
  228. package/dist/core/workflow-registry.d.ts +52 -0
  229. package/dist/core/workflow-registry.d.ts.map +1 -0
  230. package/dist/core/workflow-registry.js +158 -0
  231. package/dist/core/workflow-registry.js.map +1 -0
  232. package/dist/core/workflow-start-end.d.ts +71 -0
  233. package/dist/core/workflow-start-end.d.ts.map +1 -0
  234. package/dist/core/workflow-start-end.js +298 -0
  235. package/dist/core/workflow-start-end.js.map +1 -0
  236. package/dist/core/workflow-status.d.ts +83 -0
  237. package/dist/core/workflow-status.d.ts.map +1 -0
  238. package/dist/core/workflow-status.js +125 -0
  239. package/dist/core/workflow-status.js.map +1 -0
  240. package/dist/core/write-guard.d.ts +51 -8
  241. package/dist/core/write-guard.d.ts.map +1 -1
  242. package/dist/core/write-guard.js +139 -9
  243. package/dist/core/write-guard.js.map +1 -1
  244. package/dist/directives/index.d.ts +3 -2
  245. package/dist/directives/index.d.ts.map +1 -1
  246. package/dist/directives/index.js +5 -3
  247. package/dist/directives/index.js.map +1 -1
  248. package/dist/directives/schema.d.ts +35 -30
  249. package/dist/directives/schema.d.ts.map +1 -1
  250. package/dist/directives/schema.js +36 -30
  251. package/dist/directives/schema.js.map +1 -1
  252. package/dist/directives/version.d.ts +28 -0
  253. package/dist/directives/version.d.ts.map +1 -0
  254. package/dist/directives/version.js +51 -0
  255. package/dist/directives/version.js.map +1 -0
  256. package/dist/dna/edit.d.ts +7 -6
  257. package/dist/dna/edit.d.ts.map +1 -1
  258. package/dist/dna/edit.js +96 -41
  259. package/dist/dna/edit.js.map +1 -1
  260. package/dist/dna/mutate.js +18 -3
  261. package/dist/dna/mutate.js.map +1 -1
  262. package/dist/dna/path.d.ts +2 -2
  263. package/dist/dna/roles.d.ts +1 -1
  264. package/dist/dna/schema.d.ts +61 -3
  265. package/dist/dna/schema.d.ts.map +1 -1
  266. package/dist/dna/schema.js +121 -6
  267. package/dist/dna/schema.js.map +1 -1
  268. package/dist/mcp/dna-resource.d.ts.map +1 -1
  269. package/dist/mcp/dna-resource.js +4 -4
  270. package/dist/mcp/dna-resource.js.map +1 -1
  271. package/dist/mcp/index.d.ts +9 -5
  272. package/dist/mcp/index.d.ts.map +1 -1
  273. package/dist/mcp/index.js +13 -2
  274. package/dist/mcp/index.js.map +1 -1
  275. package/dist/mcp/memory-resource.d.ts.map +1 -1
  276. package/dist/mcp/memory-resource.js +30 -19
  277. package/dist/mcp/memory-resource.js.map +1 -1
  278. package/dist/mcp/prompt.d.ts +61 -24
  279. package/dist/mcp/prompt.d.ts.map +1 -1
  280. package/dist/mcp/prompt.js +176 -47
  281. package/dist/mcp/prompt.js.map +1 -1
  282. package/dist/mcp/read-only.d.ts +39 -0
  283. package/dist/mcp/read-only.d.ts.map +1 -1
  284. package/dist/mcp/read-only.js +61 -0
  285. package/dist/mcp/read-only.js.map +1 -1
  286. package/dist/mcp/registrar.d.ts +10 -0
  287. package/dist/mcp/registrar.d.ts.map +1 -1
  288. package/dist/mcp/registrar.js +48 -12
  289. package/dist/mcp/registrar.js.map +1 -1
  290. package/dist/mcp/server.d.ts +21 -14
  291. package/dist/mcp/server.d.ts.map +1 -1
  292. package/dist/mcp/server.js +41 -15
  293. package/dist/mcp/server.js.map +1 -1
  294. package/dist/mcp/session-resource.d.ts +13 -0
  295. package/dist/mcp/session-resource.d.ts.map +1 -0
  296. package/dist/mcp/session-resource.js +65 -0
  297. package/dist/mcp/session-resource.js.map +1 -0
  298. package/dist/mcp/workflow-resource.d.ts +18 -0
  299. package/dist/mcp/workflow-resource.d.ts.map +1 -1
  300. package/dist/mcp/workflow-resource.js +37 -8
  301. package/dist/mcp/workflow-resource.js.map +1 -1
  302. package/dist/memory/add.d.ts +160 -17
  303. package/dist/memory/add.d.ts.map +1 -1
  304. package/dist/memory/add.js +361 -51
  305. package/dist/memory/add.js.map +1 -1
  306. package/dist/memory/audit.d.ts +165 -32
  307. package/dist/memory/audit.d.ts.map +1 -1
  308. package/dist/memory/audit.js +267 -97
  309. package/dist/memory/audit.js.map +1 -1
  310. package/dist/memory/commit-message.d.ts +60 -38
  311. package/dist/memory/commit-message.d.ts.map +1 -1
  312. package/dist/memory/commit-message.js +167 -21
  313. package/dist/memory/commit-message.js.map +1 -1
  314. package/dist/memory/entry.d.ts.map +1 -1
  315. package/dist/memory/entry.js +1 -2
  316. package/dist/memory/entry.js.map +1 -1
  317. package/dist/memory/frontmatter-edit.d.ts +16 -4
  318. package/dist/memory/frontmatter-edit.d.ts.map +1 -1
  319. package/dist/memory/frontmatter-edit.js +13 -1
  320. package/dist/memory/frontmatter-edit.js.map +1 -1
  321. package/dist/memory/git-log.d.ts +18 -6
  322. package/dist/memory/git-log.d.ts.map +1 -1
  323. package/dist/memory/git-log.js +40 -13
  324. package/dist/memory/git-log.js.map +1 -1
  325. package/dist/memory/history.d.ts +74 -13
  326. package/dist/memory/history.d.ts.map +1 -1
  327. package/dist/memory/history.js +129 -45
  328. package/dist/memory/history.js.map +1 -1
  329. package/dist/memory/index.d.ts +13 -11
  330. package/dist/memory/index.d.ts.map +1 -1
  331. package/dist/memory/index.js +38 -3
  332. package/dist/memory/index.js.map +1 -1
  333. package/dist/memory/query.d.ts +161 -19
  334. package/dist/memory/query.d.ts.map +1 -1
  335. package/dist/memory/query.js +435 -55
  336. package/dist/memory/query.js.map +1 -1
  337. package/dist/memory/schema.d.ts +52 -3
  338. package/dist/memory/schema.d.ts.map +1 -1
  339. package/dist/memory/schema.js +132 -8
  340. package/dist/memory/schema.js.map +1 -1
  341. package/dist/memory/state-machine.d.ts +65 -10
  342. package/dist/memory/state-machine.d.ts.map +1 -1
  343. package/dist/memory/state-machine.js +136 -48
  344. package/dist/memory/state-machine.js.map +1 -1
  345. package/dist/memory/submit.d.ts +52 -3
  346. package/dist/memory/submit.d.ts.map +1 -1
  347. package/dist/memory/submit.js +118 -11
  348. package/dist/memory/submit.js.map +1 -1
  349. package/dist/storage/build-stamp.d.ts +18 -0
  350. package/dist/storage/build-stamp.d.ts.map +1 -0
  351. package/dist/storage/build-stamp.js +68 -0
  352. package/dist/storage/build-stamp.js.map +1 -0
  353. package/dist/storage/builtin-adapters.d.ts +32 -0
  354. package/dist/storage/builtin-adapters.d.ts.map +1 -0
  355. package/dist/storage/builtin-adapters.js +100 -0
  356. package/dist/storage/builtin-adapters.js.map +1 -0
  357. package/dist/storage/builtin-directives.d.ts +0 -29
  358. package/dist/storage/builtin-directives.d.ts.map +1 -1
  359. package/dist/storage/builtin-directives.js +9 -4
  360. package/dist/storage/builtin-directives.js.map +1 -1
  361. package/dist/storage/commit.d.ts +310 -3
  362. package/dist/storage/commit.d.ts.map +1 -1
  363. package/dist/storage/commit.js +807 -33
  364. package/dist/storage/commit.js.map +1 -1
  365. package/dist/storage/document.d.ts +6 -0
  366. package/dist/storage/document.d.ts.map +1 -1
  367. package/dist/storage/document.js +10 -1
  368. package/dist/storage/document.js.map +1 -1
  369. package/dist/storage/dry-run.d.ts +65 -0
  370. package/dist/storage/dry-run.d.ts.map +1 -0
  371. package/dist/storage/dry-run.js +150 -0
  372. package/dist/storage/dry-run.js.map +1 -0
  373. package/dist/storage/errors.d.ts +26 -0
  374. package/dist/storage/errors.d.ts.map +1 -1
  375. package/dist/storage/errors.js +27 -1
  376. package/dist/storage/errors.js.map +1 -1
  377. package/dist/storage/frontmatter.d.ts +1 -1
  378. package/dist/storage/frontmatter.js +1 -1
  379. package/dist/storage/git-read.d.ts +64 -0
  380. package/dist/storage/git-read.d.ts.map +1 -0
  381. package/dist/storage/git-read.js +107 -0
  382. package/dist/storage/git-read.js.map +1 -0
  383. package/dist/storage/index.d.ts +13 -5
  384. package/dist/storage/index.d.ts.map +1 -1
  385. package/dist/storage/index.js +39 -2
  386. package/dist/storage/index.js.map +1 -1
  387. package/dist/storage/layout.d.ts +2 -2
  388. package/dist/storage/layout.d.ts.map +1 -1
  389. package/dist/storage/layout.js +2 -7
  390. package/dist/storage/layout.js.map +1 -1
  391. package/dist/storage/memory-path.d.ts +18 -5
  392. package/dist/storage/memory-path.d.ts.map +1 -1
  393. package/dist/storage/memory-path.js +41 -5
  394. package/dist/storage/memory-path.js.map +1 -1
  395. package/dist/storage/snapshot.js +1 -1
  396. package/dist/storage/templates.d.ts +33 -6
  397. package/dist/storage/templates.d.ts.map +1 -1
  398. package/dist/storage/templates.js +182 -17
  399. package/dist/storage/templates.js.map +1 -1
  400. package/dist/validation/config-version.d.ts +19 -0
  401. package/dist/validation/config-version.d.ts.map +1 -0
  402. package/dist/validation/config-version.js +53 -0
  403. package/dist/validation/config-version.js.map +1 -0
  404. package/dist/validation/diagnostic.d.ts +40 -0
  405. package/dist/validation/diagnostic.d.ts.map +1 -0
  406. package/dist/validation/diagnostic.js +41 -0
  407. package/dist/validation/diagnostic.js.map +1 -0
  408. package/dist/validation/format.d.ts +74 -0
  409. package/dist/validation/format.d.ts.map +1 -0
  410. package/dist/validation/format.js +104 -0
  411. package/dist/validation/format.js.map +1 -0
  412. package/dist/validation/id.d.ts +40 -0
  413. package/dist/validation/id.d.ts.map +1 -1
  414. package/dist/validation/id.js +99 -12
  415. package/dist/validation/id.js.map +1 -1
  416. package/dist/validation/identity.d.ts +40 -0
  417. package/dist/validation/identity.d.ts.map +1 -0
  418. package/dist/validation/identity.js +78 -0
  419. package/dist/validation/identity.js.map +1 -0
  420. package/dist/validation/index.d.ts +9 -3
  421. package/dist/validation/index.d.ts.map +1 -1
  422. package/dist/validation/index.js +33 -1
  423. package/dist/validation/index.js.map +1 -1
  424. package/dist/validation/secret-scan.d.ts +10 -7
  425. package/dist/validation/secret-scan.d.ts.map +1 -1
  426. package/dist/validation/secret-scan.js +39 -16
  427. package/dist/validation/secret-scan.js.map +1 -1
  428. package/dist/validation/warning.d.ts +30 -16
  429. package/dist/validation/warning.d.ts.map +1 -1
  430. package/dist/validation/warning.js +74 -7
  431. package/dist/validation/warning.js.map +1 -1
  432. package/dist/workflow/bindings.d.ts +152 -0
  433. package/dist/workflow/bindings.d.ts.map +1 -0
  434. package/dist/workflow/bindings.js +249 -0
  435. package/dist/workflow/bindings.js.map +1 -0
  436. package/dist/workflow/create.d.ts +13 -0
  437. package/dist/workflow/create.d.ts.map +1 -0
  438. package/dist/workflow/create.js +41 -0
  439. package/dist/workflow/create.js.map +1 -0
  440. package/dist/workflow/deduce.d.ts +400 -0
  441. package/dist/workflow/deduce.d.ts.map +1 -0
  442. package/dist/workflow/deduce.js +1109 -0
  443. package/dist/workflow/deduce.js.map +1 -0
  444. package/dist/workflow/manifest-edit.d.ts +19 -0
  445. package/dist/workflow/manifest-edit.d.ts.map +1 -0
  446. package/dist/workflow/manifest-edit.js +124 -0
  447. package/dist/workflow/manifest-edit.js.map +1 -0
  448. package/dist/workflow/schema.d.ts +158 -19
  449. package/dist/workflow/schema.d.ts.map +1 -1
  450. package/dist/workflow/schema.js +190 -16
  451. package/dist/workflow/schema.js.map +1 -1
  452. package/package.json +37 -13
@@ -21,12 +21,24 @@
21
21
  * a single leading `\n` on each record's first field after the first, and that is stripped; both call
22
22
  * sites put `%H` first, which never legitimately begins with one.
23
23
  *
24
- * Returns `[]` — never throws — both when `root` is not a git repository at all and when none of
25
- * `pathspecs` has any matching history; "not a repo"/"not found" is a caller concern, not this
26
- * primitive's (mirrors `getMemoryHistory`'s original contract). That now holds at EVERY arity: with
27
- * no matching commits git prints nothing, the split yields one piece, and dropping it leaves nothing
28
- * to group. An empty `fields` requests nothing and likewise yields `[]`, rather than looping forever
29
- * over zero-width groups.
24
+ * Returns `[]` when none of `pathspecs` has any matching history — git prints nothing, the split
25
+ * yields one piece, and dropping it leaves nothing to group, at EVERY arity — and when the repository
26
+ * has no commit yet: an unborn `HEAD` makes git exit `128`, and `isUnbornHead` confirms that
27
+ * is the reason. An empty `fields` requests nothing and likewise yields `[]`, rather than looping
28
+ * forever over zero-width groups.
29
+ *
30
+ * `--no-show-signature` is passed so a `log.showSignature` configuration cannot print signature text
31
+ * before a commit's formatted output, where it would land in the record's first field (`task-268`,
32
+ * `bug-291`); and every `%H` field is checked to be a full commit name (`requireCommitName`), so
33
+ * whatever arrives there anyway is refused rather than used.
34
+ *
35
+ * **Every other failure throws** `StorageError` `E_GIT_READ_FAILED` carrying git's own message
36
+ * (`task-142`): a `root` that is not a repository, a tree git cannot read, an output past the read
37
+ * buffer. It used to return `[]` for all of them, so an oversized walk — Node's 1 MiB default buffer,
38
+ * `ENOBUFS` — read as "this document has no history", and an audit over it as a clean pass
39
+ * (`bug-072-oversized-git-log-becomes-empty-history`). git runs through `runGitRead`
40
+ * (`src/storage/git-read.ts`), so its stderr travels inside that error and never reaches the
41
+ * operator's terminal (`bug-093-two-more-git-calls-inherit-the-operator-stderr`).
30
42
  */
31
43
  export declare function walkGitLogFields(root: string, fields: readonly string[], pathspecs: readonly string[], extraArgs?: readonly string[]): string[][];
32
44
  //# sourceMappingURL=git-log.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-log.d.ts","sourceRoot":"","sources":["../../src/memory/git-log.ts"],"names":[],"mappings":"AA2CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,SAAS,GAAE,SAAS,MAAM,EAAO,GAChC,MAAM,EAAE,EAAE,CA6BZ"}
1
+ {"version":3,"file":"git-log.d.ts","sourceRoot":"","sources":["../../src/memory/git-log.ts"],"names":[],"mappings":"AAwDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,SAAS,GAAE,SAAS,MAAM,EAAO,GAChC,MAAM,EAAE,EAAE,CA4BZ"}
@@ -8,7 +8,18 @@ exports.walkGitLogFields = walkGitLogFields;
8
8
  * first" plumbing over a different field set/pathspec shape; this is that one shared primitive, so
9
9
  * the record-separator convention lives in exactly one place instead of being copy-pasted twice.
10
10
  */
11
- const child_process_1 = require("child_process");
11
+ const storage_1 = require("../storage");
12
+ /** The exit status git uses for `fatal:` — a broken repository, and an unborn `HEAD` alike. */
13
+ const GIT_FATAL = 128;
14
+ /**
15
+ * Whether `root` is a repository with no commit yet — the one `fatal:` of a `git log` that is an
16
+ * answer ("nothing has been recorded") rather than a failure. `rev-parse --verify --quiet` exits `1`,
17
+ * printing nothing, for a `HEAD` that names no commit; outside a repository it exits `128` like the
18
+ * walk did. Asked only after the walk has failed, so a healthy walk costs no extra process.
19
+ */
20
+ function isUnbornHead(root) {
21
+ return (0, storage_1.runGitRead)(root, ['rev-parse', '--verify', '--quiet', 'HEAD^{commit}'], { accepted: [0, 1, GIT_FATAL] }).status === 1;
22
+ }
12
23
  /**
13
24
  * The `--format` placeholder git expands to a single NUL byte, used to delimit BOTH the fields of a
14
25
  * commit and one commit's record from the next. A literal NUL cannot be written into the format
@@ -64,24 +75,37 @@ const NUL = String.fromCharCode(0);
64
75
  * a single leading `\n` on each record's first field after the first, and that is stripped; both call
65
76
  * sites put `%H` first, which never legitimately begins with one.
66
77
  *
67
- * Returns `[]` — never throws — both when `root` is not a git repository at all and when none of
68
- * `pathspecs` has any matching history; "not a repo"/"not found" is a caller concern, not this
69
- * primitive's (mirrors `getMemoryHistory`'s original contract). That now holds at EVERY arity: with
70
- * no matching commits git prints nothing, the split yields one piece, and dropping it leaves nothing
71
- * to group. An empty `fields` requests nothing and likewise yields `[]`, rather than looping forever
72
- * over zero-width groups.
78
+ * Returns `[]` when none of `pathspecs` has any matching history — git prints nothing, the split
79
+ * yields one piece, and dropping it leaves nothing to group, at EVERY arity — and when the repository
80
+ * has no commit yet: an unborn `HEAD` makes git exit `128`, and `isUnbornHead` confirms that
81
+ * is the reason. An empty `fields` requests nothing and likewise yields `[]`, rather than looping
82
+ * forever over zero-width groups.
83
+ *
84
+ * `--no-show-signature` is passed so a `log.showSignature` configuration cannot print signature text
85
+ * before a commit's formatted output, where it would land in the record's first field (`task-268`,
86
+ * `bug-291`); and every `%H` field is checked to be a full commit name (`requireCommitName`), so
87
+ * whatever arrives there anyway is refused rather than used.
88
+ *
89
+ * **Every other failure throws** `StorageError` `E_GIT_READ_FAILED` carrying git's own message
90
+ * (`task-142`): a `root` that is not a repository, a tree git cannot read, an output past the read
91
+ * buffer. It used to return `[]` for all of them, so an oversized walk — Node's 1 MiB default buffer,
92
+ * `ENOBUFS` — read as "this document has no history", and an audit over it as a clean pass
93
+ * (`bug-072-oversized-git-log-becomes-empty-history`). git runs through `runGitRead`
94
+ * (`src/storage/git-read.ts`), so its stderr travels inside that error and never reaches the
95
+ * operator's terminal (`bug-093-two-more-git-calls-inherit-the-operator-stderr`).
73
96
  */
74
97
  function walkGitLogFields(root, fields, pathspecs, extraArgs = []) {
75
98
  if (fields.length === 0)
76
99
  return [];
77
100
  const format = fields.map((field) => `${field}${NUL_PLACEHOLDER}`).join('');
78
- let stdout;
79
- try {
80
- stdout = (0, child_process_1.execFileSync)('git', ['-C', root, 'log', ...extraArgs, `--format=${format}`, '--', ...pathspecs], { encoding: 'utf-8' });
81
- }
82
- catch {
83
- return [];
101
+ const args = ['log', '--no-show-signature', ...extraArgs, `--format=${format}`, '--', ...pathspecs];
102
+ const run = (0, storage_1.runGitRead)(root, args, { accepted: [0, GIT_FATAL] });
103
+ if (run.status === GIT_FATAL) {
104
+ if (isUnbornHead(root))
105
+ return [];
106
+ throw new storage_1.StorageError(storage_1.E_GIT_READ_FAILED, `git ${args.join(' ')} failed in ${root}: ${run.stderr.trim()}`);
84
107
  }
108
+ const stdout = run.stdout;
85
109
  // The stream is `<f1>NUL<f2>NUL…<fn>NUL` per commit, each run terminated by git's own newline, so
86
110
  // the text after the FINAL NUL is never a field — it is that newline, or the empty string when git
87
111
  // printed nothing at all. Drop it before grouping; at `fields.length === 1` it would otherwise be
@@ -89,10 +113,13 @@ function walkGitLogFields(root, fields, pathspecs, extraArgs = []) {
89
113
  // are records thereafter.
90
114
  const pieces = stdout.split(NUL);
91
115
  pieces.pop();
116
+ const commitNameSlots = fields.flatMap((field, index) => (field === '%H' ? [index] : []));
92
117
  const records = [];
93
118
  for (let index = 0; index + fields.length <= pieces.length; index += fields.length) {
94
119
  const record = pieces.slice(index, index + fields.length);
95
120
  record[0] = record[0].replace(/^\n+/, '');
121
+ for (const index of commitNameSlots)
122
+ (0, storage_1.requireCommitName)(record[index], 'git log');
96
123
  records.push(record);
97
124
  }
98
125
  return records.reverse();
@@ -1 +1 @@
1
- {"version":3,"file":"git-log.js","sourceRoot":"","sources":["../../src/memory/git-log.ts"],"names":[],"mappings":";;AAyEA,4CAkCC;AA3GD;;;;;;GAMG;AACH,iDAA6C;AAE7C;;;;;GAKG;AACH,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,SAAgB,gBAAgB,CAC9B,IAAY,EACZ,MAAyB,EACzB,SAA4B,EAC5B,YAA+B,EAAE;IAEjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5E,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,4BAAY,EACnB,KAAK,EACL,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,YAAY,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,EAC3E,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,kGAAkG;IAClG,mGAAmG;IACnG,kGAAkG;IAClG,kGAAkG;IAClG,0BAA0B;IAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,EAAE,CAAC;IACb,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnF,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,CAAC,CAAC,GAAI,MAAM,CAAC,CAAC,CAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"git-log.js","sourceRoot":"","sources":["../../src/memory/git-log.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,29 @@ export interface MemoryHistoryEntry {
20
20
  * (`task-097-memory-history-reads-each-commit-at-its-historical-path`).
21
21
  */
22
22
  readonly path: string;
23
+ /**
24
+ * The root-relative path the document occupied in this commit's **first parent** — where its state
25
+ * before the commit is read (`task-278`, `bug-308`) — or `null` when the commit created it there:
26
+ * an `A` edge, or a `C` edge from the template the element was copied from (which the parent holds,
27
+ * not the element). The source of a rename (`R`), the commit's own path otherwise.
28
+ *
29
+ * Read off the same `--follow --name-status` line as {@link path} ({@link parseParentPaths}), never
30
+ * from the walk's previous entry: the walk is ordered by date, not by ancestry, so on interleaved
31
+ * branches the previous entry is another branch's commit. Set on every entry
32
+ * {@link getMemoryHistory} returns ({@link WalkedHistoryEntry}); optional here only so that the pure
33
+ * helpers' inputs, built before it is known, keep this shape. A commit git printed no diff for
34
+ * (a merge) gets its own {@link path} ({@link attachParentPaths}).
35
+ */
36
+ readonly parentPath?: string | null;
23
37
  }
38
+ /**
39
+ * A {@link MemoryHistoryEntry} as {@link getMemoryHistory} returns it: {@link MemoryHistoryEntry.parentPath}
40
+ * is always set (`task-278`), so a reader never has to guess where the commit's first parent held the
41
+ * document.
42
+ */
43
+ export type WalkedHistoryEntry = MemoryHistoryEntry & {
44
+ readonly parentPath: string | null;
45
+ };
24
46
  /**
25
47
  * The sha of the commit that introduced `relativePath` as a COPY of a file that outlives it — the
26
48
  * element's own creation — or `null` when the followed chain contains no copy edge at all.
@@ -29,13 +51,13 @@ export interface MemoryHistoryEntry {
29
51
  * kinds of edge, and they mean opposite things for an audit trail:
30
52
  *
31
53
  * - **`R` (rename)** — the element continuing under a new name. Keep following. This is not a
32
- * hypothetical requirement: `docs/self/docs/04_memory/planning/v1/*` became `planning/rl-v1/*` in
54
+ * hypothetical requirement: the Memory folder's `planning/v1/*` became `planning/rl-v1/*` in
33
55
  * one commit in this repository, moving five `release` elements at once, because the `release`
34
56
  * type's `path` pattern interpolates the release-line id (`memory.yaml`). For one of them a plain
35
57
  * `git log -- <path>` returns a single commit where the followed walk returns seven, so dropping
36
58
  * `--follow` would delete five sixths of that element's recorded history.
37
59
  * - **`C` (copy)** — the element being born out of a file that still exists. `wingfoil memory add`
38
- * copies the type's template verbatim (CLAUDE.md §5.1), and `wingfoil init` has already committed
60
+ * copies the type's template verbatim (AGENTS.md §5.1), and `wingfoil init` has already committed
39
61
  * that template, so this edge is how every scaffolded element begins. Everything strictly older
40
62
  * than it is the template's history, not the element's.
41
63
  *
@@ -43,10 +65,10 @@ export interface MemoryHistoryEntry {
43
65
  * whatever the source itself was copied from. `git log` prints newest first, so that is the first
44
66
  * line.
45
67
  *
46
- * **Throws** — never returns `null` — when git itself fails. "git could not answer" and "this
68
+ * **Throws** `StorageError` `E_GIT_READ_FAILED` — never returns `null` — when git itself fails,
69
+ * with git's own message in the error (`readOrExplain`). "git could not answer" and "this
47
70
  * element was never copied from anything" are different answers, and collapsing the first into the
48
- * second would silently restore the phantom entry; it is also why this cannot borrow
49
- * `walkGitLogFields`, whose `catch` returns `[]` (`bug-072-oversized-git-log-becomes-empty-history`).
71
+ * second would silently restore the phantom entry.
50
72
  * {@link getMemoryHistory} calls this only once the main walk has already returned commits, so at
51
73
  * that point the repository and the path are both known good and a failure here is genuinely
52
74
  * exceptional.
@@ -74,7 +96,7 @@ export declare function findElementCreationSha(root: string, relativePath: strin
74
96
  * @param creationSha - The element's creation commit, from {@link findElementCreationSha}.
75
97
  * @returns `entries` from the creation commit onward (a new array; `entries` is not mutated).
76
98
  */
77
- export declare function dropPreCreationAncestry(entries: readonly MemoryHistoryEntry[], creationSha: string | null): MemoryHistoryEntry[];
99
+ export declare function dropPreCreationAncestry<Entry extends MemoryHistoryEntry>(entries: readonly Entry[], creationSha: string | null): Entry[];
78
100
  /**
79
101
  * Where `relativePath`'s document lived at each commit of its `--follow` walk, keyed by sha.
80
102
  *
@@ -89,7 +111,8 @@ export declare function dropPreCreationAncestry(entries: readonly MemoryHistoryE
89
111
  * absent from the map; {@link attachHistoricalPaths} decides what to do about that, so the rule is
90
112
  * testable without a repository.
91
113
  *
92
- * **Throws** — never returns an empty map — when git itself fails, for the same reason
114
+ * **Throws** `StorageError` `E_GIT_READ_FAILED` — never returns an empty map — when git itself
115
+ * fails, with git's own message in the error (`readOrExplain`), for the same reason
93
116
  * {@link findElementCreationSha} does: "git could not answer" and "this element was never renamed"
94
117
  * are different answers, and folding the first into the second silently reinstates `bug-080` by
95
118
  * reading every commit at the current path again. {@link getMemoryHistory} calls this only once the
@@ -100,6 +123,28 @@ export declare function dropPreCreationAncestry(entries: readonly MemoryHistoryE
100
123
  * @returns sha → the root-relative path the document occupied at that commit.
101
124
  */
102
125
  export declare function collectHistoricalPaths(root: string, relativePath: string): Map<string, string>;
126
+ /**
127
+ * Parse {@link collectHistoricalPaths}' `git log --follow --name-status --format=%H` output into
128
+ * sha → the path at that commit. Pure: no git. Every line without a tab must be a full commit name and
129
+ * a status line must follow one; anything else is refused with `StorageError` `E_GIT_READ_FAILED`
130
+ * (`requireCommitName`) rather than skipped (`task-268`, `bug-291`).
131
+ *
132
+ * @param stdout - The probe's output.
133
+ * @returns sha → the root-relative path the document occupied at that commit (first status line wins).
134
+ */
135
+ export declare function parseHistoricalPaths(stdout: string): Map<string, string>;
136
+ /**
137
+ * Parse the same probe output into sha → the path the document occupied in that commit's first
138
+ * parent (`task-278`, `bug-308`): the FIRST path of a rename line (`R<score> <old> <new>`), `null` for
139
+ * a creation — `A`, or `C<score> <source> <path>`, whose source is the template the element was copied
140
+ * from and not the element — and the line's single path otherwise (`M`, `D`, `T`). `git log` diffs a
141
+ * non-merge commit against its only parent, so the line describes exactly that edge. Pure: no git;
142
+ * refuses what {@link parseHistoricalPaths} refuses.
143
+ *
144
+ * @param stdout - The probe's output.
145
+ * @returns sha → the first parent's root-relative path, or `null` (first status line wins).
146
+ */
147
+ export declare function parseParentPaths(stdout: string): Map<string, string | null>;
103
148
  /**
104
149
  * Stamp each walked commit with the path the element occupied at it, from
105
150
  * {@link collectHistoricalPaths}' map.
@@ -119,6 +164,20 @@ export declare function collectHistoricalPaths(root: string, relativePath: strin
119
164
  * @returns A new array; `entries` is not mutated.
120
165
  */
121
166
  export declare function attachHistoricalPaths(entries: readonly MemoryHistoryEntry[], pathBySha: ReadonlyMap<string, string>, fallbackPath: string): MemoryHistoryEntry[];
167
+ /**
168
+ * Stamp each walked commit with the path the element occupied in its first parent, from
169
+ * {@link parseParentPaths}' map (`task-278`, `bug-308`). Pure, like {@link attachHistoricalPaths},
170
+ * and with the same fallback for a sha the probe printed no line for — git shows no diff for a merge:
171
+ * the entry's own {@link MemoryHistoryEntry.path}, so a merge is read against its first parent at the
172
+ * path it holds itself. (`git log --follow` lists no merge commit in the shapes this repository
173
+ * produces — `bug-308`'s reproduction walked the three non-merge commits only — so the fallback is
174
+ * the rule for one, not a path the walk is known to take.)
175
+ *
176
+ * @param entries - The walk, oldest first, each already carrying its own path.
177
+ * @param parentPathBySha - sha → the first parent's path or `null`, from {@link parseParentPaths}.
178
+ * @returns A new array; `entries` is not mutated.
179
+ */
180
+ export declare function attachParentPaths(entries: readonly MemoryHistoryEntry[], parentPathBySha: ReadonlyMap<string, string | null>): WalkedHistoryEntry[];
122
181
  /**
123
182
  * Walk every commit that touched `relativePath`, oldest first (P1.10-memory-history.feature: "lists
124
183
  * ... entries in chronological order") — `git log` itself returns newest-first, reversed by
@@ -126,11 +185,13 @@ export declare function attachHistoricalPaths(entries: readonly MemoryHistoryEnt
126
185
  * disk keeps its history, but stops at the element's own creation rather than continuing into the
127
186
  * template it was copied from ({@link findElementCreationSha}).
128
187
  *
129
- * Returns `[]`, rather than throwing, both when `root` has no commits touching the path at all and
130
- * when `root` is not a git repository — "document not found" is a caller/feature-layer concern
131
- * (task-021/026-style CLI error rendering), not this primitive's. That is also why the creation
132
- * probe runs only on a non-empty walk: on an empty one there is nothing to truncate and nothing to
133
- * conclude from git's silence — and the same for the path probe.
188
+ * Returns `[]` when no commit touches the path, or the repository has none yet — "document not
189
+ * found" is a caller/feature-layer concern (task-021/026-style CLI error rendering), not this
190
+ * primitive's. That is also why the creation probe runs only on a non-empty walk: on an empty one
191
+ * there is nothing to truncate and nothing to conclude from git's silence — and the same for the path
192
+ * probe. **A git failure throws** `StorageError` `E_GIT_READ_FAILED` — a `root` that is not a
193
+ * repository included — rather than reading as an empty history (task-142, `bug-072`; see
194
+ * {@link walkGitLogFields}).
134
195
  *
135
196
  * Every returned entry carries the path the element occupied at its own commit
136
197
  * ({@link MemoryHistoryEntry.path}), not the one the caller named. That is what makes this walk the
@@ -138,5 +199,5 @@ export declare function attachHistoricalPaths(entries: readonly MemoryHistoryEnt
138
199
  * commit — `./audit`'s `reconstructMemoryTransitions`, which reads the frontmatter `status:` — must
139
200
  * take the path from here rather than re-using its own argument (`bug-080`).
140
201
  */
141
- export declare function getMemoryHistory(root: string, relativePath: string): MemoryHistoryEntry[];
202
+ export declare function getMemoryHistory(root: string, relativePath: string): WalkedHistoryEntry[];
142
203
  //# sourceMappingURL=history.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/memory/history.ts"],"names":[],"mappings":"AAiCA,sGAAsG;AACtG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAcD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAexF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,kBAAkB,EAAE,CAUtB;AAmBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA+B9F;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,YAAY,EAAE,MAAM,GACnB,kBAAkB,EAAE,CAEtB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA4BzF"}
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/memory/history.ts"],"names":[],"mappings":"AAiCA,sGAAsG;AACtG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAgC7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASxF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,kBAAkB,EACtE,OAAO,EAAE,SAAS,KAAK,EAAE,EACzB,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,KAAK,EAAE,CAUT;AAmBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAE9F;AAoCD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAIxE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAS3E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,YAAY,EAAE,MAAM,GACnB,kBAAkB,EAAE,CAEtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAClD,kBAAkB,EAAE,CAKtB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA8BzF"}
@@ -3,7 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.findElementCreationSha = findElementCreationSha;
4
4
  exports.dropPreCreationAncestry = dropPreCreationAncestry;
5
5
  exports.collectHistoricalPaths = collectHistoricalPaths;
6
+ exports.parseHistoricalPaths = parseHistoricalPaths;
7
+ exports.parseParentPaths = parseParentPaths;
6
8
  exports.attachHistoricalPaths = attachHistoricalPaths;
9
+ exports.attachParentPaths = attachParentPaths;
7
10
  exports.getMemoryHistory = getMemoryHistory;
8
11
  /**
9
12
  * Memory history primitive (task-008-dna-memory-query-latency, REQ-PERF-02) — the git-log walk
@@ -15,7 +18,7 @@ exports.getMemoryHistory = getMemoryHistory;
15
18
  * Scope (see task-008's Execution Notes): this returns *structured commit records* (sha, author
16
19
  * name/email, ISO-8601 author date, subject, body) — the walk itself. Deriving a human-facing
17
20
  * "state change" (e.g. "pending -> backlog") from the commit body's `Approver:`/`Reason:` lines
18
- * (CLAUDE.md §5.1) is not this primitive's concern; the raw `body` field carries that text verbatim
21
+ * (AGENTS.md §5.1) is not this primitive's concern; the raw `body` field carries that text verbatim
19
22
  * for a caller to parse, and `./audit`'s `reconstructMemoryTransitions` is the caller that does — the
20
23
  * `memoryHistory` operation projects that reconstruction rather than re-reading this walk itself.
21
24
  *
@@ -34,9 +37,24 @@ exports.getMemoryHistory = getMemoryHistory;
34
37
  * {@link findElementCreationSha} for the distinction that resolves it and why rename-following is
35
38
  * kept rather than traded away.
36
39
  */
37
- const child_process_1 = require("child_process");
40
+ const storage_1 = require("../storage");
38
41
  const git_log_1 = require("./git-log");
39
42
  const LOG_FIELDS = ['%H', '%an', '%ae', '%aI', '%s', '%b'];
43
+ /**
44
+ * Run one of this module's probes through `runGitRead` (`src/storage/git-read.ts`, task-142) and
45
+ * return its stdout, or throw `StorageError` `E_GIT_READ_FAILED` whose message says what the failure
46
+ * leaves unknown (`what`) and then git's own text. stderr is captured, never inherited: git's `fatal:`
47
+ * reaches the caller inside this error, not the operator's terminal on its own
48
+ * (`bug-093-two-more-git-calls-inherit-the-operator-stderr`, `bug-097`).
49
+ */
50
+ function readOrExplain(root, args, what) {
51
+ try {
52
+ return (0, storage_1.runGitRead)(root, args).stdout;
53
+ }
54
+ catch (error) {
55
+ throw new storage_1.StorageError(storage_1.E_GIT_READ_FAILED, `${what}: ${error.message.replace(/^E_GIT_READ_FAILED: /, '')}`);
56
+ }
57
+ }
40
58
  /**
41
59
  * The same `--follow` walk as {@link getMemoryHistory}, narrowed by git to the commits whose edge for
42
60
  * this path is a **copy**, and printing nothing but the sha. Deliberately a second `git log`
@@ -44,6 +62,9 @@ const LOG_FIELDS = ['%H', '%an', '%ae', '%aI', '%s', '%b'];
44
62
  * records by field arity over a stream of `<field>NUL` groups, so anything git appends outside the
45
63
  * `--format` string — `--name-status` output, for instance — would be read as the next record's
46
64
  * first field (task-086).
65
+ *
66
+ * Like every `git log` reader, it runs with `--no-show-signature` (`task-268`, `bug-291`): under
67
+ * `log.showSignature` git printed "No signature" here as the first line, read as the creation commit.
47
68
  */
48
69
  const CREATION_PROBE_ARGS = ['--follow', '--diff-filter=C', '--format=%H'];
49
70
  /**
@@ -54,13 +75,13 @@ const CREATION_PROBE_ARGS = ['--follow', '--diff-filter=C', '--format=%H'];
54
75
  * kinds of edge, and they mean opposite things for an audit trail:
55
76
  *
56
77
  * - **`R` (rename)** — the element continuing under a new name. Keep following. This is not a
57
- * hypothetical requirement: `docs/self/docs/04_memory/planning/v1/*` became `planning/rl-v1/*` in
78
+ * hypothetical requirement: the Memory folder's `planning/v1/*` became `planning/rl-v1/*` in
58
79
  * one commit in this repository, moving five `release` elements at once, because the `release`
59
80
  * type's `path` pattern interpolates the release-line id (`memory.yaml`). For one of them a plain
60
81
  * `git log -- <path>` returns a single commit where the followed walk returns seven, so dropping
61
82
  * `--follow` would delete five sixths of that element's recorded history.
62
83
  * - **`C` (copy)** — the element being born out of a file that still exists. `wingfoil memory add`
63
- * copies the type's template verbatim (CLAUDE.md §5.1), and `wingfoil init` has already committed
84
+ * copies the type's template verbatim (AGENTS.md §5.1), and `wingfoil init` has already committed
64
85
  * that template, so this edge is how every scaffolded element begins. Everything strictly older
65
86
  * than it is the template's history, not the element's.
66
87
  *
@@ -68,10 +89,10 @@ const CREATION_PROBE_ARGS = ['--follow', '--diff-filter=C', '--format=%H'];
68
89
  * whatever the source itself was copied from. `git log` prints newest first, so that is the first
69
90
  * line.
70
91
  *
71
- * **Throws** — never returns `null` — when git itself fails. "git could not answer" and "this
92
+ * **Throws** `StorageError` `E_GIT_READ_FAILED` — never returns `null` — when git itself fails,
93
+ * with git's own message in the error (`readOrExplain`). "git could not answer" and "this
72
94
  * element was never copied from anything" are different answers, and collapsing the first into the
73
- * second would silently restore the phantom entry; it is also why this cannot borrow
74
- * `walkGitLogFields`, whose `catch` returns `[]` (`bug-072-oversized-git-log-becomes-empty-history`).
95
+ * second would silently restore the phantom entry.
75
96
  * {@link getMemoryHistory} calls this only once the main walk has already returned commits, so at
76
97
  * that point the repository and the path are both known good and a failure here is genuinely
77
98
  * exceptional.
@@ -81,17 +102,9 @@ const CREATION_PROBE_ARGS = ['--follow', '--diff-filter=C', '--format=%H'];
81
102
  * @returns The creation commit's full sha, or `null` when the chain has no copy edge.
82
103
  */
83
104
  function findElementCreationSha(root, relativePath) {
84
- let stdout;
85
- try {
86
- stdout = (0, child_process_1.execFileSync)('git', ['-C', root, 'log', ...CREATION_PROBE_ARGS, '--', relativePath], {
87
- encoding: 'utf-8',
88
- });
89
- }
90
- catch (cause) {
91
- throw new Error(`git log --follow --diff-filter=C failed for ${relativePath}: cannot establish where the element was created`, { cause });
92
- }
105
+ const stdout = readOrExplain(root, ['log', '--no-show-signature', ...CREATION_PROBE_ARGS, '--', relativePath], `git log --follow --diff-filter=C failed for ${relativePath}: cannot establish where the element was created`);
93
106
  const newestCopy = stdout.split('\n').find((line) => line.trim().length > 0);
94
- return newestCopy === undefined ? null : newestCopy.trim();
107
+ return newestCopy === undefined ? null : (0, storage_1.requireCommitName)(newestCopy.trim(), 'git log --follow --diff-filter=C');
95
108
  }
96
109
  /**
97
110
  * Drop the part of an oldest-first walk that precedes the element's creation, keeping the creation
@@ -130,11 +143,12 @@ function dropPreCreationAncestry(entries, creationSha) {
130
143
  * `core.quotePath=false` is set for the invocation (never written to the repository's config) so a
131
144
  * path carrying non-ASCII bytes arrives as its own UTF-8 rather than as git's `"\303\251"` escape
132
145
  * form — the parser would otherwise have to un-escape it to hand `git show` something that resolves.
146
+ * Load-bearing, and pinned: `test/memory/history-rename-path.test.ts` (task-142 AC3, `bug-097`) goes
147
+ * red when the flag is removed. `--no-show-signature`, as on every `git log` reader (`task-268`,
148
+ * `bug-291`), keeps signature text out of the lines parsed as names.
133
149
  */
134
150
  const PATH_PROBE_ARGS = ['-c', 'core.quotePath=false'];
135
151
  const PATH_PROBE_LOG_ARGS = ['--follow', '--name-status', '--format=%H'];
136
- /** A full sha on a line of its own — git's `--format=%H` output, which carries nothing else. */
137
- const SHA_LINE_RE = /^[0-9a-f]{40}$/;
138
152
  /**
139
153
  * Where `relativePath`'s document lived at each commit of its `--follow` walk, keyed by sha.
140
154
  *
@@ -149,7 +163,8 @@ const SHA_LINE_RE = /^[0-9a-f]{40}$/;
149
163
  * absent from the map; {@link attachHistoricalPaths} decides what to do about that, so the rule is
150
164
  * testable without a repository.
151
165
  *
152
- * **Throws** — never returns an empty map — when git itself fails, for the same reason
166
+ * **Throws** `StorageError` `E_GIT_READ_FAILED` — never returns an empty map — when git itself
167
+ * fails, with git's own message in the error (`readOrExplain`), for the same reason
153
168
  * {@link findElementCreationSha} does: "git could not answer" and "this element was never renamed"
154
169
  * are different answers, and folding the first into the second silently reinstates `bug-080` by
155
170
  * reading every commit at the current path again. {@link getMemoryHistory} calls this only once the
@@ -160,32 +175,78 @@ const SHA_LINE_RE = /^[0-9a-f]{40}$/;
160
175
  * @returns sha → the root-relative path the document occupied at that commit.
161
176
  */
162
177
  function collectHistoricalPaths(root, relativePath) {
163
- let stdout;
164
- try {
165
- stdout = (0, child_process_1.execFileSync)('git', ['-C', root, ...PATH_PROBE_ARGS, 'log', ...PATH_PROBE_LOG_ARGS, '--', relativePath],
166
- // Same `stdio` rule as `./audit`'s `readStatusAt`, for the same reason
167
- // (`bug-071-read-status-at-leaks-git-stderr`): the failure is reported by the throw below, so
168
- // git's own `fatal:` must land in a pipe this process owns rather than on the operator's
169
- // terminal. A call added while closing that bug must not reopen it somewhere else.
170
- { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'pipe'] });
171
- }
172
- catch (cause) {
173
- throw new Error(`git log --follow --name-status failed for ${relativePath}: cannot establish where the element lived at each commit`, { cause });
174
- }
175
- const pathBySha = new Map();
178
+ return parseHistoricalPaths(readPathProbe(root, relativePath));
179
+ }
180
+ /** The `--follow --name-status` probe's output, which {@link parseHistoricalPaths} and {@link parseParentPaths} both read. */
181
+ function readPathProbe(root, relativePath) {
182
+ return readOrExplain(root, [...PATH_PROBE_ARGS, 'log', '--no-show-signature', ...PATH_PROBE_LOG_ARGS, '--', relativePath], `git log --follow --name-status failed for ${relativePath}: cannot establish where the element lived at each commit`);
183
+ }
184
+ /**
185
+ * sha → the tab-separated fields of that commit's first status line in the probe's output (`M`,
186
+ * `<path>`, or `R<score>`, `<old>`, `<new>`). Every line without a tab must be a full commit name and
187
+ * a status line must follow one; anything else is refused with `StorageError` `E_GIT_READ_FAILED`
188
+ * (`requireCommitName`) rather than skipped (`task-268`, `bug-291`).
189
+ */
190
+ function parseStatusLines(stdout) {
191
+ const fieldsBySha = new Map();
176
192
  let currentSha = null;
177
193
  for (const line of stdout.split('\n')) {
178
- if (SHA_LINE_RE.test(line)) {
179
- currentSha = line;
194
+ if (line === '')
195
+ continue;
196
+ // A line with no tab is `--format=%H`'s: a commit name, or refused — never skipped (task-268,
197
+ // `bug-291`: signature text printed under `log.showSignature` was skipped here, silently).
198
+ if (!line.includes('\t')) {
199
+ currentSha = (0, storage_1.requireCommitName)(line, 'git log --follow --name-status');
180
200
  continue;
181
201
  }
182
- if (currentSha === null || !line.includes('\t') || pathBySha.has(currentSha))
202
+ // A status line before any name is not what `--format=%H` prints: refused like any other line.
203
+ if (currentSha === null)
204
+ currentSha = (0, storage_1.requireCommitName)(line, 'git log --follow --name-status');
205
+ if (fieldsBySha.has(currentSha))
183
206
  continue;
184
- const fields = line.split('\t');
185
- pathBySha.set(currentSha, fields[fields.length - 1]);
207
+ fieldsBySha.set(currentSha, line.split('\t'));
186
208
  }
209
+ return fieldsBySha;
210
+ }
211
+ /**
212
+ * Parse {@link collectHistoricalPaths}' `git log --follow --name-status --format=%H` output into
213
+ * sha → the path at that commit. Pure: no git. Every line without a tab must be a full commit name and
214
+ * a status line must follow one; anything else is refused with `StorageError` `E_GIT_READ_FAILED`
215
+ * (`requireCommitName`) rather than skipped (`task-268`, `bug-291`).
216
+ *
217
+ * @param stdout - The probe's output.
218
+ * @returns sha → the root-relative path the document occupied at that commit (first status line wins).
219
+ */
220
+ function parseHistoricalPaths(stdout) {
221
+ const pathBySha = new Map();
222
+ for (const [sha, fields] of parseStatusLines(stdout))
223
+ pathBySha.set(sha, fields[fields.length - 1]);
187
224
  return pathBySha;
188
225
  }
226
+ /**
227
+ * Parse the same probe output into sha → the path the document occupied in that commit's first
228
+ * parent (`task-278`, `bug-308`): the FIRST path of a rename line (`R<score> <old> <new>`), `null` for
229
+ * a creation — `A`, or `C<score> <source> <path>`, whose source is the template the element was copied
230
+ * from and not the element — and the line's single path otherwise (`M`, `D`, `T`). `git log` diffs a
231
+ * non-merge commit against its only parent, so the line describes exactly that edge. Pure: no git;
232
+ * refuses what {@link parseHistoricalPaths} refuses.
233
+ *
234
+ * @param stdout - The probe's output.
235
+ * @returns sha → the first parent's root-relative path, or `null` (first status line wins).
236
+ */
237
+ function parseParentPaths(stdout) {
238
+ const parentPathBySha = new Map();
239
+ for (const [sha, fields] of parseStatusLines(stdout)) {
240
+ const status = fields[0];
241
+ if (status.startsWith('A') || status.startsWith('C'))
242
+ parentPathBySha.set(sha, null);
243
+ else if (status.startsWith('R'))
244
+ parentPathBySha.set(sha, fields[1]);
245
+ else
246
+ parentPathBySha.set(sha, fields[fields.length - 1]);
247
+ }
248
+ return parentPathBySha;
249
+ }
189
250
  /**
190
251
  * Stamp each walked commit with the path the element occupied at it, from
191
252
  * {@link collectHistoricalPaths}' map.
@@ -207,6 +268,25 @@ function collectHistoricalPaths(root, relativePath) {
207
268
  function attachHistoricalPaths(entries, pathBySha, fallbackPath) {
208
269
  return entries.map((entry) => ({ ...entry, path: pathBySha.get(entry.sha) ?? fallbackPath }));
209
270
  }
271
+ /**
272
+ * Stamp each walked commit with the path the element occupied in its first parent, from
273
+ * {@link parseParentPaths}' map (`task-278`, `bug-308`). Pure, like {@link attachHistoricalPaths},
274
+ * and with the same fallback for a sha the probe printed no line for — git shows no diff for a merge:
275
+ * the entry's own {@link MemoryHistoryEntry.path}, so a merge is read against its first parent at the
276
+ * path it holds itself. (`git log --follow` lists no merge commit in the shapes this repository
277
+ * produces — `bug-308`'s reproduction walked the three non-merge commits only — so the fallback is
278
+ * the rule for one, not a path the walk is known to take.)
279
+ *
280
+ * @param entries - The walk, oldest first, each already carrying its own path.
281
+ * @param parentPathBySha - sha → the first parent's path or `null`, from {@link parseParentPaths}.
282
+ * @returns A new array; `entries` is not mutated.
283
+ */
284
+ function attachParentPaths(entries, parentPathBySha) {
285
+ return entries.map((entry) => ({
286
+ ...entry,
287
+ parentPath: parentPathBySha.has(entry.sha) ? parentPathBySha.get(entry.sha) : entry.path,
288
+ }));
289
+ }
210
290
  /**
211
291
  * Walk every commit that touched `relativePath`, oldest first (P1.10-memory-history.feature: "lists
212
292
  * ... entries in chronological order") — `git log` itself returns newest-first, reversed by
@@ -214,11 +294,13 @@ function attachHistoricalPaths(entries, pathBySha, fallbackPath) {
214
294
  * disk keeps its history, but stops at the element's own creation rather than continuing into the
215
295
  * template it was copied from ({@link findElementCreationSha}).
216
296
  *
217
- * Returns `[]`, rather than throwing, both when `root` has no commits touching the path at all and
218
- * when `root` is not a git repository — "document not found" is a caller/feature-layer concern
219
- * (task-021/026-style CLI error rendering), not this primitive's. That is also why the creation
220
- * probe runs only on a non-empty walk: on an empty one there is nothing to truncate and nothing to
221
- * conclude from git's silence — and the same for the path probe.
297
+ * Returns `[]` when no commit touches the path, or the repository has none yet — "document not
298
+ * found" is a caller/feature-layer concern (task-021/026-style CLI error rendering), not this
299
+ * primitive's. That is also why the creation probe runs only on a non-empty walk: on an empty one
300
+ * there is nothing to truncate and nothing to conclude from git's silence — and the same for the path
301
+ * probe. **A git failure throws** `StorageError` `E_GIT_READ_FAILED` — a `root` that is not a
302
+ * repository included — rather than reading as an empty history (task-142, `bug-072`; see
303
+ * {@link walkGitLogFields}).
222
304
  *
223
305
  * Every returned entry carries the path the element occupied at its own commit
224
306
  * ({@link MemoryHistoryEntry.path}), not the one the caller named. That is what makes this walk the
@@ -243,8 +325,10 @@ function getMemoryHistory(root, relativePath) {
243
325
  return { sha, authorName, authorEmail, date, subject, body: body.trim(), path: relativePath };
244
326
  });
245
327
  if (entries.length === 0)
246
- return entries;
247
- const located = attachHistoricalPaths(entries, collectHistoricalPaths(root, relativePath), relativePath);
328
+ return [];
329
+ // One probe answers both questions: where the document was at each commit, and in its first parent.
330
+ const probe = readPathProbe(root, relativePath);
331
+ const located = attachParentPaths(attachHistoricalPaths(entries, parseHistoricalPaths(probe), relativePath), parseParentPaths(probe));
248
332
  return dropPreCreationAncestry(located, findElementCreationSha(root, relativePath));
249
333
  }
250
334
  //# sourceMappingURL=history.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/memory/history.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/memory/history.ts"],"names":[],"mappings":"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"}