@tailor-platform/erp-kit 0.6.0 → 0.7.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 (290) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +10 -10
  3. package/dist/cli.mjs +407 -69
  4. package/package.json +1 -1
  5. package/skills/erp-kit-app-1-requirements/SKILL.md +33 -17
  6. package/skills/erp-kit-app-2-requirements-review/SKILL.md +12 -0
  7. package/skills/erp-kit-app-3-plan/SKILL.md +18 -4
  8. package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +1 -1
  9. package/skills/erp-kit-app-3-plan/references/screen-extraction.md +1 -1
  10. package/skills/erp-kit-app-4-plan-review/SKILL.md +12 -0
  11. package/skills/erp-kit-app-5-impl-backend/SKILL.md +12 -0
  12. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +12 -0
  13. package/skills/erp-kit-app-7-impl-review/SKILL.md +13 -1
  14. package/skills/erp-kit-app-shared/references/progress-protocol.md +77 -0
  15. package/skills/erp-kit-mock-scenario/SKILL.md +1 -1
  16. package/skills/erp-kit-module-1-requirements/SKILL.md +1 -1
  17. package/skills/erp-kit-module-3-plan/SKILL.md +3 -3
  18. package/skills/erp-kit-module-3-update-plan/SKILL.md +3 -3
  19. package/skills/erp-kit-module-5-impl/SKILL.md +1 -1
  20. package/src/commands/app/index.ts +2 -0
  21. package/src/commands/app/progress/git-context.ts +16 -0
  22. package/src/commands/app/progress/index.ts +45 -0
  23. package/src/commands/app/progress/log.ts +49 -0
  24. package/src/commands/app/progress/progress.test.ts +128 -0
  25. package/src/commands/app/progress/schema-cmd.ts +10 -0
  26. package/src/commands/check.test.ts +4 -4
  27. package/src/commands/lib/discovery.test.ts +5 -7
  28. package/src/commands/lib/discovery.ts +8 -8
  29. package/src/commands/lib/sync-check-source.test.ts +1 -1
  30. package/src/commands/lib/sync-check-source.ts +6 -1
  31. package/src/commands/lib/sync-check-tests.test.ts +43 -0
  32. package/src/commands/lib/sync-check-tests.ts +20 -2
  33. package/src/commands/sync-check.ts +3 -0
  34. package/src/generator/generate-app-code.test.ts +0 -6
  35. package/src/generator/generate-app-code.ts +3 -13
  36. package/src/generator/generate-code.test.ts +10 -40
  37. package/src/generator/generate-code.ts +6 -12
  38. package/src/generator/stub-templates.test.ts +0 -7
  39. package/src/generator/stub-templates.ts +0 -14
  40. package/src/modules/finance-ledger/README.md +50 -0
  41. package/src/modules/finance-ledger/command/.gitkeep +0 -0
  42. package/src/modules/finance-ledger/command/addJournalLine.generated.ts +6 -0
  43. package/src/modules/finance-ledger/command/addJournalLine.test.ts +438 -0
  44. package/src/modules/finance-ledger/command/addJournalLine.ts +122 -0
  45. package/src/modules/finance-ledger/command/approveAndLockPeriod.generated.ts +6 -0
  46. package/src/modules/finance-ledger/command/approveAndLockPeriod.test.ts +107 -0
  47. package/src/modules/finance-ledger/command/approveAndLockPeriod.ts +72 -0
  48. package/src/modules/finance-ledger/command/beginClose.generated.ts +6 -0
  49. package/src/modules/finance-ledger/command/beginClose.test.ts +106 -0
  50. package/src/modules/finance-ledger/command/beginClose.ts +58 -0
  51. package/src/modules/finance-ledger/command/closePeriod.generated.ts +6 -0
  52. package/src/modules/finance-ledger/command/closePeriod.test.ts +87 -0
  53. package/src/modules/finance-ledger/command/closePeriod.ts +44 -0
  54. package/src/modules/finance-ledger/command/createAccountingPeriod.generated.ts +6 -0
  55. package/src/modules/finance-ledger/command/createAccountingPeriod.test.ts +425 -0
  56. package/src/modules/finance-ledger/command/createAccountingPeriod.ts +133 -0
  57. package/src/modules/finance-ledger/command/createFiscalYear.generated.ts +6 -0
  58. package/src/modules/finance-ledger/command/createFiscalYear.test.ts +197 -0
  59. package/src/modules/finance-ledger/command/createFiscalYear.ts +70 -0
  60. package/src/modules/finance-ledger/command/createJournalEntry.generated.ts +6 -0
  61. package/src/modules/finance-ledger/command/createJournalEntry.test.ts +261 -0
  62. package/src/modules/finance-ledger/command/createJournalEntry.ts +121 -0
  63. package/src/modules/finance-ledger/command/deleteAccountingPeriod.generated.ts +6 -0
  64. package/src/modules/finance-ledger/command/deleteAccountingPeriod.test.ts +71 -0
  65. package/src/modules/finance-ledger/command/deleteAccountingPeriod.ts +55 -0
  66. package/src/modules/finance-ledger/command/deleteFiscalYear.generated.ts +6 -0
  67. package/src/modules/finance-ledger/command/deleteFiscalYear.test.ts +38 -0
  68. package/src/modules/finance-ledger/command/deleteFiscalYear.ts +34 -0
  69. package/src/modules/finance-ledger/command/deleteJournalEntry.generated.ts +6 -0
  70. package/src/modules/finance-ledger/command/deleteJournalEntry.test.ts +58 -0
  71. package/src/modules/finance-ledger/command/deleteJournalEntry.ts +43 -0
  72. package/src/modules/finance-ledger/command/executeYearEndClose.generated.ts +6 -0
  73. package/src/modules/finance-ledger/command/executeYearEndClose.test.ts +239 -0
  74. package/src/modules/finance-ledger/command/executeYearEndClose.ts +415 -0
  75. package/src/modules/finance-ledger/command/finalCloseAndLockPeriod.generated.ts +6 -0
  76. package/src/modules/finance-ledger/command/finalCloseAndLockPeriod.test.ts +102 -0
  77. package/src/modules/finance-ledger/command/finalCloseAndLockPeriod.ts +76 -0
  78. package/src/modules/finance-ledger/command/finalizeFinancialStatement.generated.ts +6 -0
  79. package/src/modules/finance-ledger/command/finalizeFinancialStatement.test.ts +73 -0
  80. package/src/modules/finance-ledger/command/finalizeFinancialStatement.ts +73 -0
  81. package/src/modules/finance-ledger/command/generateFinancialStatement.generated.ts +6 -0
  82. package/src/modules/finance-ledger/command/generateFinancialStatement.test.ts +311 -0
  83. package/src/modules/finance-ledger/command/generateFinancialStatement.ts +275 -0
  84. package/src/modules/finance-ledger/command/generatePreliminaryStatements.generated.ts +6 -0
  85. package/src/modules/finance-ledger/command/generatePreliminaryStatements.test.ts +152 -0
  86. package/src/modules/finance-ledger/command/generatePreliminaryStatements.ts +140 -0
  87. package/src/modules/finance-ledger/command/generateTrialBalance.generated.ts +6 -0
  88. package/src/modules/finance-ledger/command/generateTrialBalance.test.ts +439 -0
  89. package/src/modules/finance-ledger/command/generateTrialBalance.ts +268 -0
  90. package/src/modules/finance-ledger/command/initiatePeriodClose.generated.ts +6 -0
  91. package/src/modules/finance-ledger/command/initiatePeriodClose.test.ts +153 -0
  92. package/src/modules/finance-ledger/command/initiatePeriodClose.ts +84 -0
  93. package/src/modules/finance-ledger/command/openForAdvanceEntry.generated.ts +6 -0
  94. package/src/modules/finance-ledger/command/openForAdvanceEntry.test.ts +87 -0
  95. package/src/modules/finance-ledger/command/openForAdvanceEntry.ts +44 -0
  96. package/src/modules/finance-ledger/command/openPeriod.generated.ts +6 -0
  97. package/src/modules/finance-ledger/command/openPeriod.test.ts +90 -0
  98. package/src/modules/finance-ledger/command/openPeriod.ts +44 -0
  99. package/src/modules/finance-ledger/command/permanentlyClosePeriod.generated.ts +6 -0
  100. package/src/modules/finance-ledger/command/permanentlyClosePeriod.test.ts +87 -0
  101. package/src/modules/finance-ledger/command/permanentlyClosePeriod.ts +48 -0
  102. package/src/modules/finance-ledger/command/postAdjustingEntries.generated.ts +6 -0
  103. package/src/modules/finance-ledger/command/postAdjustingEntries.test.ts +392 -0
  104. package/src/modules/finance-ledger/command/postAdjustingEntries.ts +156 -0
  105. package/src/modules/finance-ledger/command/postJournalEntry.generated.ts +6 -0
  106. package/src/modules/finance-ledger/command/postJournalEntry.test.ts +346 -0
  107. package/src/modules/finance-ledger/command/postJournalEntry.ts +160 -0
  108. package/src/modules/finance-ledger/command/processInventoryHandoff.generated.ts +6 -0
  109. package/src/modules/finance-ledger/command/processInventoryHandoff.test.ts +211 -0
  110. package/src/modules/finance-ledger/command/processInventoryHandoff.ts +133 -0
  111. package/src/modules/finance-ledger/command/processManufacturingHandoff.generated.ts +6 -0
  112. package/src/modules/finance-ledger/command/processManufacturingHandoff.test.ts +221 -0
  113. package/src/modules/finance-ledger/command/processManufacturingHandoff.ts +133 -0
  114. package/src/modules/finance-ledger/command/processPurchaseHandoff.generated.ts +6 -0
  115. package/src/modules/finance-ledger/command/processPurchaseHandoff.test.ts +222 -0
  116. package/src/modules/finance-ledger/command/processPurchaseHandoff.ts +133 -0
  117. package/src/modules/finance-ledger/command/processSalesHandoff.generated.ts +6 -0
  118. package/src/modules/finance-ledger/command/processSalesHandoff.test.ts +257 -0
  119. package/src/modules/finance-ledger/command/processSalesHandoff.ts +135 -0
  120. package/src/modules/finance-ledger/command/regenerateFinancialStatement.generated.ts +6 -0
  121. package/src/modules/finance-ledger/command/regenerateFinancialStatement.test.ts +129 -0
  122. package/src/modules/finance-ledger/command/regenerateFinancialStatement.ts +186 -0
  123. package/src/modules/finance-ledger/command/removeJournalLine.generated.ts +6 -0
  124. package/src/modules/finance-ledger/command/removeJournalLine.test.ts +65 -0
  125. package/src/modules/finance-ledger/command/removeJournalLine.ts +39 -0
  126. package/src/modules/finance-ledger/command/reopenPeriod.generated.ts +6 -0
  127. package/src/modules/finance-ledger/command/reopenPeriod.test.ts +87 -0
  128. package/src/modules/finance-ledger/command/reopenPeriod.ts +44 -0
  129. package/src/modules/finance-ledger/command/reverseJournalEntry.generated.ts +6 -0
  130. package/src/modules/finance-ledger/command/reverseJournalEntry.test.ts +337 -0
  131. package/src/modules/finance-ledger/command/reverseJournalEntry.ts +140 -0
  132. package/src/modules/finance-ledger/command/revertSoftLock.generated.ts +6 -0
  133. package/src/modules/finance-ledger/command/revertSoftLock.test.ts +96 -0
  134. package/src/modules/finance-ledger/command/revertSoftLock.ts +67 -0
  135. package/src/modules/finance-ledger/command/updateFiscalYear.generated.ts +6 -0
  136. package/src/modules/finance-ledger/command/updateFiscalYear.test.ts +138 -0
  137. package/src/modules/finance-ledger/command/updateFiscalYear.ts +85 -0
  138. package/src/modules/finance-ledger/command/updateJournalEntry.generated.ts +6 -0
  139. package/src/modules/finance-ledger/command/updateJournalEntry.test.ts +195 -0
  140. package/src/modules/finance-ledger/command/updateJournalEntry.ts +86 -0
  141. package/src/modules/finance-ledger/command/updateJournalLine.generated.ts +6 -0
  142. package/src/modules/finance-ledger/command/updateJournalLine.test.ts +385 -0
  143. package/src/modules/finance-ledger/command/updateJournalLine.ts +155 -0
  144. package/src/modules/finance-ledger/command/verifySubledgerTransfers.generated.ts +6 -0
  145. package/src/modules/finance-ledger/command/verifySubledgerTransfers.test.ts +201 -0
  146. package/src/modules/finance-ledger/command/verifySubledgerTransfers.ts +113 -0
  147. package/src/modules/finance-ledger/command/verifyTrialBalance.generated.ts +6 -0
  148. package/src/modules/finance-ledger/command/verifyTrialBalance.test.ts +136 -0
  149. package/src/modules/finance-ledger/command/verifyTrialBalance.ts +97 -0
  150. package/src/modules/finance-ledger/db/.gitkeep +0 -0
  151. package/src/modules/finance-ledger/db/accountingPeriod.ts +58 -0
  152. package/src/modules/finance-ledger/db/financialStatement.ts +92 -0
  153. package/src/modules/finance-ledger/db/financialStatementLineItem.ts +76 -0
  154. package/src/modules/finance-ledger/db/fiscalYear.ts +41 -0
  155. package/src/modules/finance-ledger/db/journalEntry.ts +101 -0
  156. package/src/modules/finance-ledger/db/journalLine.ts +64 -0
  157. package/src/modules/finance-ledger/db/periodClose.ts +97 -0
  158. package/src/modules/finance-ledger/db/trialBalance.ts +63 -0
  159. package/src/modules/finance-ledger/db/trialBalanceLine.ts +63 -0
  160. package/src/modules/finance-ledger/docs/commands/AddJournalLine.md +74 -0
  161. package/src/modules/finance-ledger/docs/commands/ApproveAndLockPeriod.md +53 -0
  162. package/src/modules/finance-ledger/docs/commands/BeginClose.md +47 -0
  163. package/src/modules/finance-ledger/docs/commands/ClosePeriod.md +45 -0
  164. package/src/modules/finance-ledger/docs/commands/CreateAccountingPeriod.md +69 -0
  165. package/src/modules/finance-ledger/docs/commands/CreateFiscalYear.md +56 -0
  166. package/src/modules/finance-ledger/docs/commands/CreateJournalEntry.md +63 -0
  167. package/src/modules/finance-ledger/docs/commands/DeleteAccountingPeriod.md +46 -0
  168. package/src/modules/finance-ledger/docs/commands/DeleteFiscalYear.md +40 -0
  169. package/src/modules/finance-ledger/docs/commands/DeleteJournalEntry.md +44 -0
  170. package/src/modules/finance-ledger/docs/commands/ExecuteYearEndClose.md +81 -0
  171. package/src/modules/finance-ledger/docs/commands/FinalCloseAndLockPeriod.md +49 -0
  172. package/src/modules/finance-ledger/docs/commands/FinalizeFinancialStatement.md +43 -0
  173. package/src/modules/finance-ledger/docs/commands/GenerateFinancialStatement.md +86 -0
  174. package/src/modules/finance-ledger/docs/commands/GeneratePreliminaryStatements.md +53 -0
  175. package/src/modules/finance-ledger/docs/commands/GenerateTrialBalance.md +75 -0
  176. package/src/modules/finance-ledger/docs/commands/InitiatePeriodClose.md +58 -0
  177. package/src/modules/finance-ledger/docs/commands/OpenForAdvanceEntry.md +44 -0
  178. package/src/modules/finance-ledger/docs/commands/OpenPeriod.md +45 -0
  179. package/src/modules/finance-ledger/docs/commands/PermanentlyClosePeriod.md +45 -0
  180. package/src/modules/finance-ledger/docs/commands/PostAdjustingEntries.md +61 -0
  181. package/src/modules/finance-ledger/docs/commands/PostJournalEntry.md +81 -0
  182. package/src/modules/finance-ledger/docs/commands/ProcessInventoryHandoff.md +72 -0
  183. package/src/modules/finance-ledger/docs/commands/ProcessManufacturingHandoff.md +68 -0
  184. package/src/modules/finance-ledger/docs/commands/ProcessPurchaseHandoff.md +68 -0
  185. package/src/modules/finance-ledger/docs/commands/ProcessSalesHandoff.md +71 -0
  186. package/src/modules/finance-ledger/docs/commands/RegenerateFinancialStatement.md +60 -0
  187. package/src/modules/finance-ledger/docs/commands/RemoveJournalLine.md +42 -0
  188. package/src/modules/finance-ledger/docs/commands/ReopenPeriod.md +45 -0
  189. package/src/modules/finance-ledger/docs/commands/ReverseJournalEntry.md +62 -0
  190. package/src/modules/finance-ledger/docs/commands/RevertSoftLock.md +49 -0
  191. package/src/modules/finance-ledger/docs/commands/UpdateFiscalYear.md +60 -0
  192. package/src/modules/finance-ledger/docs/commands/UpdateJournalEntry.md +50 -0
  193. package/src/modules/finance-ledger/docs/commands/UpdateJournalLine.md +61 -0
  194. package/src/modules/finance-ledger/docs/commands/VerifySubledgerTransfers.md +59 -0
  195. package/src/modules/finance-ledger/docs/commands/VerifyTrialBalance.md +53 -0
  196. package/src/modules/finance-ledger/docs/features/accounting-period-management.md +110 -0
  197. package/src/modules/finance-ledger/docs/features/financial-statement-generation.md +115 -0
  198. package/src/modules/finance-ledger/docs/features/journal-entry-management.md +138 -0
  199. package/src/modules/finance-ledger/docs/features/period-end-close.md +102 -0
  200. package/src/modules/finance-ledger/docs/features/subledger-integration.md +141 -0
  201. package/src/modules/finance-ledger/docs/features/trial-balance.md +99 -0
  202. package/src/modules/finance-ledger/docs/features/year-end-close.md +84 -0
  203. package/src/modules/finance-ledger/docs/models/AccountingPeriod.md +71 -0
  204. package/src/modules/finance-ledger/docs/models/FinancialStatement.md +76 -0
  205. package/src/modules/finance-ledger/docs/models/FinancialStatementLineItem.md +41 -0
  206. package/src/modules/finance-ledger/docs/models/FiscalYear.md +41 -0
  207. package/src/modules/finance-ledger/docs/models/JournalEntry.md +80 -0
  208. package/src/modules/finance-ledger/docs/models/JournalLine.md +47 -0
  209. package/src/modules/finance-ledger/docs/models/PeriodClose.md +83 -0
  210. package/src/modules/finance-ledger/docs/models/TrialBalance.md +56 -0
  211. package/src/modules/finance-ledger/docs/models/TrialBalanceLine.md +37 -0
  212. package/src/modules/finance-ledger/docs/queries/GetAccountingPeriod.md +35 -0
  213. package/src/modules/finance-ledger/docs/queries/GetFinancialStatement.md +38 -0
  214. package/src/modules/finance-ledger/docs/queries/GetFiscalYear.md +35 -0
  215. package/src/modules/finance-ledger/docs/queries/GetJournalEntry.md +37 -0
  216. package/src/modules/finance-ledger/docs/queries/GetPeriodByDate.md +38 -0
  217. package/src/modules/finance-ledger/docs/queries/GetPeriodClose.md +36 -0
  218. package/src/modules/finance-ledger/docs/queries/GetSubledgerTransferStatus.md +45 -0
  219. package/src/modules/finance-ledger/docs/queries/GetTrialBalance.md +38 -0
  220. package/src/modules/finance-ledger/docs/queries/ListAccountingPeriods.md +46 -0
  221. package/src/modules/finance-ledger/docs/queries/ListFinancialStatements.md +46 -0
  222. package/src/modules/finance-ledger/docs/queries/ListFiscalYears.md +42 -0
  223. package/src/modules/finance-ledger/docs/queries/ListJournalEntries.md +48 -0
  224. package/src/modules/finance-ledger/docs/queries/ListPeriodCloses.md +46 -0
  225. package/src/modules/finance-ledger/docs/queries/ListTrialBalances.md +51 -0
  226. package/src/modules/finance-ledger/executor/.gitkeep +0 -0
  227. package/src/modules/finance-ledger/generated/enums.ts +109 -0
  228. package/src/modules/finance-ledger/generated/kysely-tailordb.ts +202 -0
  229. package/src/modules/finance-ledger/index.ts +2 -0
  230. package/src/modules/finance-ledger/lib/_db_deps.ts +56 -0
  231. package/src/modules/finance-ledger/lib/errors.generated.ts +332 -0
  232. package/src/modules/finance-ledger/lib/permissions.generated.ts +41 -0
  233. package/src/modules/finance-ledger/lib/types.ts +66 -0
  234. package/src/modules/finance-ledger/module.ts +262 -0
  235. package/src/modules/finance-ledger/package.json +26 -0
  236. package/src/modules/finance-ledger/permissions.ts +3 -0
  237. package/src/modules/finance-ledger/query/.gitkeep +0 -0
  238. package/src/modules/finance-ledger/query/getAccountingPeriod.generated.ts +5 -0
  239. package/src/modules/finance-ledger/query/getAccountingPeriod.test.ts +31 -0
  240. package/src/modules/finance-ledger/query/getAccountingPeriod.ts +21 -0
  241. package/src/modules/finance-ledger/query/getFinancialStatement.generated.ts +5 -0
  242. package/src/modules/finance-ledger/query/getFinancialStatement.test.ts +35 -0
  243. package/src/modules/finance-ledger/query/getFinancialStatement.ts +29 -0
  244. package/src/modules/finance-ledger/query/getFiscalYear.generated.ts +5 -0
  245. package/src/modules/finance-ledger/query/getFiscalYear.test.ts +31 -0
  246. package/src/modules/finance-ledger/query/getFiscalYear.ts +21 -0
  247. package/src/modules/finance-ledger/query/getJournalEntry.generated.ts +5 -0
  248. package/src/modules/finance-ledger/query/getJournalEntry.test.ts +35 -0
  249. package/src/modules/finance-ledger/query/getJournalEntry.ts +29 -0
  250. package/src/modules/finance-ledger/query/getPeriodByDate.generated.ts +5 -0
  251. package/src/modules/finance-ledger/query/getPeriodByDate.test.ts +53 -0
  252. package/src/modules/finance-ledger/query/getPeriodByDate.ts +27 -0
  253. package/src/modules/finance-ledger/query/getPeriodClose.generated.ts +5 -0
  254. package/src/modules/finance-ledger/query/getPeriodClose.test.ts +31 -0
  255. package/src/modules/finance-ledger/query/getPeriodClose.ts +21 -0
  256. package/src/modules/finance-ledger/query/getSubledgerTransferStatus.generated.ts +5 -0
  257. package/src/modules/finance-ledger/query/getSubledgerTransferStatus.test.ts +101 -0
  258. package/src/modules/finance-ledger/query/getSubledgerTransferStatus.ts +68 -0
  259. package/src/modules/finance-ledger/query/getTrialBalance.generated.ts +5 -0
  260. package/src/modules/finance-ledger/query/getTrialBalance.test.ts +33 -0
  261. package/src/modules/finance-ledger/query/getTrialBalance.ts +30 -0
  262. package/src/modules/finance-ledger/query/listAccountingPeriods.generated.ts +5 -0
  263. package/src/modules/finance-ledger/query/listAccountingPeriods.test.ts +81 -0
  264. package/src/modules/finance-ledger/query/listAccountingPeriods.ts +61 -0
  265. package/src/modules/finance-ledger/query/listFinancialStatements.generated.ts +5 -0
  266. package/src/modules/finance-ledger/query/listFinancialStatements.test.ts +76 -0
  267. package/src/modules/finance-ledger/query/listFinancialStatements.ts +62 -0
  268. package/src/modules/finance-ledger/query/listFiscalYears.generated.ts +5 -0
  269. package/src/modules/finance-ledger/query/listFiscalYears.test.ts +63 -0
  270. package/src/modules/finance-ledger/query/listFiscalYears.ts +45 -0
  271. package/src/modules/finance-ledger/query/listJournalEntries.generated.ts +5 -0
  272. package/src/modules/finance-ledger/query/listJournalEntries.test.ts +91 -0
  273. package/src/modules/finance-ledger/query/listJournalEntries.ts +64 -0
  274. package/src/modules/finance-ledger/query/listPeriodCloses.generated.ts +5 -0
  275. package/src/modules/finance-ledger/query/listPeriodCloses.test.ts +63 -0
  276. package/src/modules/finance-ledger/query/listPeriodCloses.ts +64 -0
  277. package/src/modules/finance-ledger/query/listTrialBalances.generated.ts +5 -0
  278. package/src/modules/finance-ledger/query/listTrialBalances.test.ts +78 -0
  279. package/src/modules/finance-ledger/query/listTrialBalances.ts +56 -0
  280. package/src/modules/finance-ledger/seed/index.ts +19 -0
  281. package/src/modules/finance-ledger/tailor.config.ts +13 -0
  282. package/src/modules/finance-ledger/tailor.d.ts +13 -0
  283. package/src/modules/finance-ledger/testing/commandTestUtils.ts +35 -0
  284. package/src/modules/finance-ledger/testing/fixtures.ts +382 -0
  285. package/src/modules/finance-ledger/tsconfig.json +16 -0
  286. package/src/progress/schema.test.ts +161 -0
  287. package/src/progress/schema.ts +316 -0
  288. package/templates/scaffold/app/backend/package.json +1 -3
  289. package/templates/scaffold/app/backend/vitest.config.ts +4 -21
  290. package/src/generator/generate-stubs.ts +0 -35
@@ -7,6 +7,18 @@ description: Create Tier 1-2 documentation (requirements, actors, business-flow)
7
7
 
8
8
  Create Tier 1-2 documentation: Requirements, Actors, and Business Flows.
9
9
 
10
+ ## Progress Logging
11
+
12
+ Log to the audit trail at every checkpoint. See [erp-kit-app-shared/references/progress-protocol.md](../erp-kit-app-shared/references/progress-protocol.md) for the full protocol.
13
+
14
+ ```bash
15
+ npx erp-kit app progress log --json '<ProgressInput JSON>'
16
+ ```
17
+
18
+ Required checkpoints: `step.start` (on invocation), `decision` (on user choices), `agent.dispatch`/`agent.result` (on subagent lifecycle), `artifact.create` (on file writes), `validation` (on `erp-kit app check` or build commands), `step.complete` (on finish), `error` (on failures).
19
+
20
+ Bundle all conversation since the last checkpoint into the `conversation` array. Use your session ID as `sessionId`. Use the user's original prompt as `prompt`.
21
+
10
22
  ## Workflow Phases
11
23
 
12
24
  ```
@@ -28,12 +40,12 @@ Focus on "what" the application should do, not "how" it will be implemented.
28
40
 
29
41
  Use AskUserQuestion to clarify undefined requirements. Focus on business-level scope and workflows — not platform capabilities like authentication.
30
42
 
31
- | Category | Example Questions |
32
- | ---------------- | ---------------------------------------------------------------------------- |
33
- | Scope | Which steps are MVP-essential? Any steps that can be deferred? |
34
- | Edge Cases | How far to handle cancellation, rejection, or mid-flow abandonment? |
35
- | Actor Boundaries | Are approver and executor separate? What is each actor's operational scope? |
36
- | Business Rules | Which steps are automated vs manual? What conditional branches exist? |
43
+ | Category | Example Questions |
44
+ | ---------------- | --------------------------------------------------------------------------- |
45
+ | Scope | Which steps are MVP-essential? Any steps that can be deferred? |
46
+ | Edge Cases | How far to handle cancellation, rejection, or mid-flow abandonment? |
47
+ | Actor Boundaries | Are approver and executor separate? What is each actor's operational scope? |
48
+ | Business Rules | Which steps are automated vs manual? What conditional branches exist? |
37
49
 
38
50
  Ask 3-4 questions at a time using multiSelect where appropriate.
39
51
 
@@ -44,13 +56,13 @@ Generate documentation using `erp-kit` CLI. `{APP_ROOT}` is the parent directory
44
56
  ```bash
45
57
  # Tier 1: Requirements + project structure
46
58
  # Creates {APP_ROOT}/{APP_NAME}/README.md
47
- erp-kit app init {APP_NAME} {APP_ROOT}
59
+ npx erp-kit app init {APP_NAME} {APP_ROOT}
48
60
 
49
61
  # Tier 2: Actors
50
- erp-kit app generate doc actors {ACTOR_NAME} -p {APP_ROOT}/{APP_NAME}
62
+ npx erp-kit app generate doc actors {ACTOR_NAME} -p {APP_ROOT}/{APP_NAME}
51
63
 
52
64
  # Tier 2: Business Flows
53
- erp-kit app generate doc business-flow {FLOW_NAME} -p {APP_ROOT}/{APP_NAME}
65
+ npx erp-kit app generate doc business-flow {FLOW_NAME} -p {APP_ROOT}/{APP_NAME}
54
66
  ```
55
67
 
56
68
  **Directory structure after init + generate:**
@@ -80,6 +92,7 @@ After creating business flows, extract and create story documentation.
80
92
 
81
93
  1. **Collect** all business flow docs: glob `<APP_ROOT>/docs/business-flow/*/README.md`
82
94
  2. **Dispatch story extraction agents** — one Agent per business flow (parallelize if possible). Each agent:
95
+
83
96
  - Reads the prompt template from [references/story-extraction.md](references/story-extraction.md)
84
97
  - Replace `{{APP_NAME}}` with the resolved app name
85
98
  - Replace `{{ACTOR_DOCS}}` with the actor doc file paths
@@ -90,7 +103,7 @@ After creating business flows, extract and create story documentation.
90
103
 
91
104
  ```bash
92
105
  # For each story identified
93
- erp-kit app generate doc story <flow>/<actor>--<story> -p {APP_ROOT}/{APP_NAME}
106
+ npx erp-kit app generate doc story <flow>/<actor>--<story> -p {APP_ROOT}/{APP_NAME}
94
107
  ```
95
108
 
96
109
  4. **Link stories** in business flow READMEs: replace `- TBD` placeholders in each flow's `## Stories` section with actual links:
@@ -102,18 +115,21 @@ erp-kit app generate doc story <flow>/<actor>--<story> -p {APP_ROOT}/{APP_NAME}
102
115
  ### Phase 4: Validate
103
116
 
104
117
  ```bash
105
- erp-kit app check -p {APP_ROOT}
118
+ # NOTE: -p takes {APP_ROOT} (parent directory), NOT {APP_ROOT}/{APP_NAME}.
119
+ # generate doc uses -p {APP_ROOT}/{APP_NAME}, but check uses -p {APP_ROOT}.
120
+ # Example: if app is at apps/user-management, use -p apps
121
+ npx erp-kit app check -p {APP_ROOT}
106
122
  ```
107
123
 
108
- See [schema-constraints.md](../erp-kit-app-shared/references/schema-constraints.md) for notes on expected "No matching files found" output.
124
+ **Expected passing output:** `✓ No violations found` for each doc type that has files. "No matching files found" appears for doc types not yet created (e.g., screens and resolvers at Tier 1-2) — this is normal and not an error.
109
125
 
110
126
  ## Schema Reference
111
127
 
112
- | Schema | Tier | Output Path |
113
- | ------------------- | ---- | ------------------------------------- |
114
- | `requirements.yml` | 1 | `README.md` |
115
- | `actors.yml` | 2 | `docs/actors/<name>.md` |
116
- | `business-flow.yml` | 2 | `docs/business-flow/<flow>/README.md` |
128
+ | Schema | Tier | Output Path |
129
+ | ------------------- | ---- | ---------------------------------------------------- |
130
+ | `requirements.yml` | 1 | `README.md` |
131
+ | `actors.yml` | 2 | `docs/actors/<name>.md` |
132
+ | `business-flow.yml` | 2 | `docs/business-flow/<flow>/README.md` |
117
133
  | `story.yml` | 2 | `docs/business-flow/<flow>/story/<actor>--<name>.md` |
118
134
 
119
135
  ## Next Step
@@ -7,6 +7,18 @@ description: Review requirements quality and documentation consistency for appli
7
7
 
8
8
  Review **requirements quality** and **documentation consistency** for an application's Tier 1-2 documentation.
9
9
 
10
+ ## Progress Logging
11
+
12
+ Log to the audit trail at every checkpoint. See [erp-kit-app-shared/references/progress-protocol.md](../erp-kit-app-shared/references/progress-protocol.md) for the full protocol.
13
+
14
+ ```bash
15
+ npx erp-kit app progress log --json '<ProgressInput JSON>'
16
+ ```
17
+
18
+ Required checkpoints: `step.start` (on invocation), `decision` (on user choices), `agent.dispatch`/`agent.result` (on subagent lifecycle), `artifact.create` (on file writes), `validation` (on `erp-kit app check` or build commands), `step.complete` (on finish), `error` (on failures).
19
+
20
+ Bundle all conversation since the last checkpoint into the `conversation` array. Use your session ID as `sessionId`. Use the user's original prompt as `prompt`.
21
+
10
22
  ## When to Use
11
23
 
12
24
  - After writing application requirements and business flows (step 1)
@@ -7,6 +7,18 @@ description: Create Tier 3-4 documentation (screens, resolvers) by breaking down
7
7
 
8
8
  Convert Tier 2 business flows and stories into Tier 3 (screens) and Tier 4 (resolvers) documentation using parallel extraction agents.
9
9
 
10
+ ## Progress Logging
11
+
12
+ Log to the audit trail at every checkpoint. See [erp-kit-app-shared/references/progress-protocol.md](../erp-kit-app-shared/references/progress-protocol.md) for the full protocol.
13
+
14
+ ```bash
15
+ npx erp-kit app progress log --json '<ProgressInput JSON>'
16
+ ```
17
+
18
+ Required checkpoints: `step.start` (on invocation), `decision` (on user choices), `agent.dispatch`/`agent.result` (on subagent lifecycle), `artifact.create` (on file writes), `validation` (on `erp-kit app check` or build commands), `step.complete` (on finish), `error` (on failures).
19
+
20
+ Bundle all conversation since the last checkpoint into the `conversation` array. Use your session ID as `sessionId`. Use the user's original prompt as `prompt`.
21
+
10
22
  ## When to Use
11
23
 
12
24
  - User has Tier 1-2 documentation and wants to plan Tier 3-4
@@ -40,7 +52,7 @@ Verify at least `STORY_DOCS` is non-empty. If no story docs exist, stop with: "N
40
52
  Collect module overview:
41
53
 
42
54
  ```bash
43
- erp-kit doc modules
55
+ npx erp-kit doc modules
44
56
  ```
45
57
 
46
58
  This returns each module's name, overview, command/query/model counts, and dependencies. Save the full output as `MODULE_OVERVIEW` — both agents receive it.
@@ -100,10 +112,10 @@ Scaffold using `erp-kit` CLI:
100
112
 
101
113
  ```bash
102
114
  # Tier 3: Screens
103
- erp-kit app generate doc screen <screen-name> -p {APP_ROOT}/{APP_NAME}
115
+ npx erp-kit app generate doc screen <screen-name> -p {APP_ROOT}/{APP_NAME}
104
116
 
105
117
  # Tier 4: Resolvers
106
- erp-kit app generate doc resolver <resolver-name> -p {APP_ROOT}/{APP_NAME}
118
+ npx erp-kit app generate doc resolver <resolver-name> -p {APP_ROOT}/{APP_NAME}
107
119
  ```
108
120
 
109
121
  Fill scaffolded docs with details from agent extraction results.
@@ -119,7 +131,9 @@ Read-only stories should have `None` under `## Resolvers`.
119
131
  ## Step 6: Validate
120
132
 
121
133
  ```bash
122
- erp-kit app check -p {APP_ROOT}
134
+ # NOTE: -p takes {APP_ROOT} (parent directory), NOT {APP_ROOT}/{APP_NAME}.
135
+ # generate doc uses -p {APP_ROOT}/{APP_NAME}, but check uses -p {APP_ROOT}.
136
+ npx erp-kit app check -p {APP_ROOT}
123
137
  ```
124
138
 
125
139
  ## Naming Conventions
@@ -16,7 +16,7 @@ The following modules are available in erp-kit. Use this to map resolvers to rea
16
16
  To inspect a specific module's commands in detail, run:
17
17
 
18
18
  ```bash
19
- erp-kit doc module <module-name> command <command-name>
19
+ npx erp-kit doc module <module-name> command <command-name>
20
20
  ```
21
21
 
22
22
  ## Instructions
@@ -16,7 +16,7 @@ The following modules are available in erp-kit. Use this to understand which ent
16
16
  To inspect a specific module's model (domain description, state transitions, invariants, commands), run:
17
17
 
18
18
  ```bash
19
- erp-kit doc module <module-name> model <model-name>
19
+ npx erp-kit doc module <module-name> model <model-name>
20
20
  ```
21
21
 
22
22
  ## Instructions
@@ -7,6 +7,18 @@ description: Review parity between Tier 2 (business flows, actors, stories) and
7
7
 
8
8
  Review **documentation consistency** across Tier 2 (business flows, actors, stories), Tier 3 (screens), and Tier 4 (resolvers) documentation.
9
9
 
10
+ ## Progress Logging
11
+
12
+ Log to the audit trail at every checkpoint. See [erp-kit-app-shared/references/progress-protocol.md](../erp-kit-app-shared/references/progress-protocol.md) for the full protocol.
13
+
14
+ ```bash
15
+ npx erp-kit app progress log --json '<ProgressInput JSON>'
16
+ ```
17
+
18
+ Required checkpoints: `step.start` (on invocation), `decision` (on user choices), `agent.dispatch`/`agent.result` (on subagent lifecycle), `artifact.create` (on file writes), `validation` (on `erp-kit app check` or build commands), `step.complete` (on finish), `error` (on failures).
19
+
20
+ Bundle all conversation since the last checkpoint into the `conversation` array. Use your session ID as `sessionId`. Use the user's original prompt as `prompt`.
21
+
10
22
  ## When to Use
11
23
 
12
24
  - After writing Tier 3-4 documentation, check for gaps
@@ -7,6 +7,18 @@ description: Implement backend code for applications using erp-kit modules. Use
7
7
 
8
8
  Implement backend resolvers and application configuration for an application, driven by Tier 1-4 documentation (actors, business flows, stories, screens, resolvers).
9
9
 
10
+ ## Progress Logging
11
+
12
+ Log to the audit trail at every checkpoint. See [erp-kit-app-shared/references/progress-protocol.md](../erp-kit-app-shared/references/progress-protocol.md) for the full protocol.
13
+
14
+ ```bash
15
+ npx erp-kit app progress log --json '<ProgressInput JSON>'
16
+ ```
17
+
18
+ Required checkpoints: `step.start` (on invocation), `decision` (on user choices), `agent.dispatch`/`agent.result` (on subagent lifecycle), `artifact.create` (on file writes), `validation` (on `erp-kit app check` or build commands), `step.complete` (on finish), `error` (on failures).
19
+
20
+ Bundle all conversation since the last checkpoint into the `conversation` array. Use your session ID as `sessionId`. Use the user's original prompt as `prompt`.
21
+
10
22
  ## When to Use
11
23
 
12
24
  - Implementing backend resolvers from resolver spec docs
@@ -7,6 +7,18 @@ description: Implement frontend code for applications. Use after deploying the b
7
7
 
8
8
  Implement frontend pages for an application, driven by screen spec documentation and a deployed backend.
9
9
 
10
+ ## Progress Logging
11
+
12
+ Log to the audit trail at every checkpoint. See [erp-kit-app-shared/references/progress-protocol.md](../erp-kit-app-shared/references/progress-protocol.md) for the full protocol.
13
+
14
+ ```bash
15
+ npx erp-kit app progress log --json '<ProgressInput JSON>'
16
+ ```
17
+
18
+ Required checkpoints: `step.start` (on invocation), `decision` (on user choices), `agent.dispatch`/`agent.result` (on subagent lifecycle), `artifact.create` (on file writes), `validation` (on `erp-kit app check` or build commands), `step.complete` (on finish), `error` (on failures).
19
+
20
+ Bundle all conversation since the last checkpoint into the `conversation` array. Use your session ID as `sessionId`. Use the user's original prompt as `prompt`.
21
+
10
22
  ## When to Use
11
23
 
12
24
  - Implementing frontend pages from screen spec docs
@@ -7,6 +7,18 @@ description: Review implementation parity between documentation and code for app
7
7
 
8
8
  Review **implementation consistency** between Tier 3-4 documentation and actual backend/frontend code.
9
9
 
10
+ ## Progress Logging
11
+
12
+ Log to the audit trail at every checkpoint. See [erp-kit-app-shared/references/progress-protocol.md](../erp-kit-app-shared/references/progress-protocol.md) for the full protocol.
13
+
14
+ ```bash
15
+ npx erp-kit app progress log --json '<ProgressInput JSON>'
16
+ ```
17
+
18
+ Required checkpoints: `step.start` (on invocation), `decision` (on user choices), `agent.dispatch`/`agent.result` (on subagent lifecycle), `artifact.create` (on file writes), `validation` (on `erp-kit app check` or build commands), `step.complete` (on finish), `error` (on failures).
19
+
20
+ Bundle all conversation since the last checkpoint into the `conversation` array. Use your session ID as `sessionId`. Use the user's original prompt as `prompt`.
21
+
10
22
  ## When to Use
11
23
 
12
24
  - After backend and frontend implementation, verify code matches documentation
@@ -60,7 +72,7 @@ Run build checks and source-doc sync check inline:
60
72
  ```bash
61
73
  cd <APP_ROOT>/backend && pnpm lint && pnpm typecheck
62
74
  cd <APP_ROOT>/frontend && pnpm lint && pnpm typecheck && pnpm build
63
- erp-kit app sync-check -p <APP_ROOT>/..
75
+ npx erp-kit app sync-check -p <APP_ROOT>
64
76
  ```
65
77
 
66
78
  Report pass/fail for each check. `sync-check` detects missing resolver implementations, orphaned docs, and story doc ↔ integration test case mismatches, so groups A-C agents can skip file-existence checks and focus on content parity.
@@ -0,0 +1,77 @@
1
+ # Progress Logging Protocol
2
+
3
+ ## Overview
4
+
5
+ All `erp-kit-app-*` skills log to an append-only audit trail at `.erp-kit/progress.jsonl`. This records conversations, decisions, and agent activity across sessions.
6
+
7
+ The log is NOT the source of truth for progress — the produced docs and code are. The log answers "what happened and why."
8
+
9
+ ## CLI Commands
10
+
11
+ ### Log an event
12
+
13
+ ```bash
14
+ npx erp-kit app progress log --json '<ProgressInput JSON>'
15
+ ```
16
+
17
+ ### Validate without writing
18
+
19
+ ```bash
20
+ npx erp-kit app progress log --dry-run --json '<ProgressInput JSON>'
21
+ ```
22
+
23
+ ### Get the JSON Schema
24
+
25
+ ```bash
26
+ npx erp-kit app progress schema
27
+ ```
28
+
29
+ ## When to Log
30
+
31
+ Log at natural checkpoints — moments where the skill is already pausing to take action. Bundle all conversation since the last checkpoint into the `conversation` array.
32
+
33
+ | Checkpoint | Event type | When |
34
+ |---|---|---|
35
+ | Skill invocation | `step.start` | First thing after skill is invoked |
36
+ | User decision | `decision` | User approves, corrects, or chooses |
37
+ | Subagent launch | `agent.dispatch` | Before dispatching a subagent |
38
+ | Subagent return | `agent.result` | After subagent completes |
39
+ | File write | `artifact.create` | After creating/modifying/deleting a file |
40
+ | Validation | `validation` | After running `erp-kit app check`, build, lint, etc. |
41
+ | Skill completion | `step.complete` | Last thing before skill finishes |
42
+ | Failure | `error` | When something fails |
43
+ | Free-form | `note` | Anything else (e.g., session pause) |
44
+
45
+ ## Entry Format
46
+
47
+ Every entry requires:
48
+
49
+ - `v` — Schema version, always `1`
50
+ - `sessionId` — Your AI session ID
51
+ - `prompt` — The user's original prompt (the request that triggered this skill)
52
+ - `event` — Event type from the table above
53
+ - `data` — Event-specific payload (see schema)
54
+ - `conversation` — Array of `{role, message}` since last checkpoint (optional, defaults to `[]`)
55
+
56
+ The CLI auto-adds `timestamp` and `git` context.
57
+
58
+ ## Example
59
+
60
+ ```bash
61
+ npx erp-kit app progress log --json '{
62
+ "v": 1,
63
+ "sessionId": "claude-abc123",
64
+ "prompt": "Create screens for manufacturing flows",
65
+ "event": "decision",
66
+ "conversation": [
67
+ {"role": "agent", "message": "Flat list or collapsible tree for BOM?"},
68
+ {"role": "user", "message": "Collapsible tree"}
69
+ ],
70
+ "data": {
71
+ "question": "BOM list view style",
72
+ "choice": "Collapsible tree",
73
+ "alternatives": ["Flat list with indent"],
74
+ "rationale": "Better UX for multi-level BOMs"
75
+ }
76
+ }'
77
+ ```
@@ -112,7 +112,7 @@ Create `mocks/{provider}/{scenario}/README.md` with:
112
112
  ### Step 5: Validate
113
113
 
114
114
  ```bash
115
- erp-kit mock validate
115
+ npx erp-kit mock validate
116
116
  ```
117
117
 
118
118
  Fix any failures before finishing.
@@ -70,7 +70,7 @@ The final feature set becomes the union of all `Include` features. Proceed with
70
70
  First, scaffold the module if it doesn't exist:
71
71
 
72
72
  ```bash
73
- erp-kit module init <module-name> <MODULES_ROOT>/<module-name>
73
+ npx erp-kit module init <module-name> <MODULES_ROOT>/<module-name>
74
74
  ```
75
75
 
76
76
  Then, for each `Include` feature, launch an Agent:
@@ -44,9 +44,9 @@ Produce consolidated plan:
44
44
  Scaffold using `erp-kit` CLI. **Names must be PascalCase** (see [naming convention](references/naming.md)):
45
45
 
46
46
  ```bash
47
- erp-kit module generate doc model ModelName -p <MODULES_ROOT>/<module-name>
48
- erp-kit module generate doc command CommandName -p <MODULES_ROOT>/<module-name>
49
- erp-kit module generate doc query QueryName -p <MODULES_ROOT>/<module-name>
47
+ npx erp-kit module generate doc model ModelName -p <MODULES_ROOT>/<module-name>
48
+ npx erp-kit module generate doc command CommandName -p <MODULES_ROOT>/<module-name>
49
+ npx erp-kit module generate doc query QueryName -p <MODULES_ROOT>/<module-name>
50
50
  ```
51
51
 
52
52
  Fill in the scaffolded docs with details from the extraction in Step 2.
@@ -78,9 +78,9 @@ For each item in the fix plan:
78
78
  Scaffold using `erp-kit` CLI. **Names must be PascalCase** (see [naming convention](references/naming.md)):
79
79
 
80
80
  ```bash
81
- erp-kit module generate doc model ModelName -p <MODULES_ROOT>/<module-name>
82
- erp-kit module generate doc command CommandName -p <MODULES_ROOT>/<module-name>
83
- erp-kit module generate doc query QueryName -p <MODULES_ROOT>/<module-name>
81
+ npx erp-kit module generate doc model ModelName -p <MODULES_ROOT>/<module-name>
82
+ npx erp-kit module generate doc command CommandName -p <MODULES_ROOT>/<module-name>
83
+ npx erp-kit module generate doc query QueryName -p <MODULES_ROOT>/<module-name>
84
84
  ```
85
85
 
86
86
  Populate the new docs using the extraction rules from:
@@ -37,7 +37,7 @@ Verify at least one doc type exists. If none, stop with: "No docs found for modu
37
37
  Run generation first to create `.generated.ts` files (error classes, permission definitions, command/query shells) before implementing any code:
38
38
 
39
39
  ```bash
40
- erp-kit module generate code -p <MODULES_ROOT>/<module>
40
+ npx erp-kit module generate code -p <MODULES_ROOT>/<module>
41
41
  ```
42
42
 
43
43
  Never edit these generated files.
@@ -8,6 +8,7 @@ import { runGenerateAppCode } from "../../generator/generate-app-code";
8
8
  import { runGenerateSeed } from "../../generator/generate-seed";
9
9
  import { runInitAppWithReadme } from "../init-module";
10
10
  import { executeCommand, success, silentFailure } from "../lib/command-result";
11
+ import { progressCommand } from "./progress/index";
11
12
 
12
13
  const cwd = process.cwd();
13
14
 
@@ -129,5 +130,6 @@ export const appCommand = defineCommand({
129
130
  "sync-check": syncCheckCommand,
130
131
  init: initCommand,
131
132
  generate: generateCommand,
133
+ progress: progressCommand,
132
134
  },
133
135
  });
@@ -0,0 +1,16 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import type { GitContext } from "../../../progress/schema";
3
+
4
+ export function getGitContext(cwd: string): GitContext {
5
+ const branch = execFileSync("git", ["rev-parse", "--abbrev-ref", "HEAD"], {
6
+ cwd,
7
+ encoding: "utf-8",
8
+ }).trim();
9
+
10
+ const commit = execFileSync("git", ["rev-parse", "--short", "HEAD"], {
11
+ cwd,
12
+ encoding: "utf-8",
13
+ }).trim();
14
+
15
+ return { branch, commit };
16
+ }
@@ -0,0 +1,45 @@
1
+ import { z } from "zod";
2
+ import { defineCommand, arg } from "politty";
3
+ import { executeCommand } from "../../lib/command-result";
4
+ import { runProgressLog } from "./log";
5
+ import { runProgressSchema } from "./schema-cmd";
6
+
7
+ const cwd = process.cwd();
8
+
9
+ const logCommand = defineCommand({
10
+ name: "log",
11
+ description: "Append a validated entry to the progress log",
12
+ args: z.object({
13
+ json: arg(z.string(), {
14
+ description: "JSON payload (ProgressInput schema)",
15
+ }),
16
+ "dry-run": arg(z.boolean().default(false), {
17
+ description: "Validate without writing",
18
+ }),
19
+ }),
20
+ run: (args) => {
21
+ return executeCommand(() => {
22
+ return runProgressLog(args.json, args["dry-run"], cwd);
23
+ });
24
+ },
25
+ });
26
+
27
+ const schemaCommand = defineCommand({
28
+ name: "schema",
29
+ description: "Output JSON Schema for progress log input",
30
+ args: z.object({}),
31
+ run: () => {
32
+ return executeCommand(() => {
33
+ return runProgressSchema();
34
+ });
35
+ },
36
+ });
37
+
38
+ export const progressCommand = defineCommand({
39
+ name: "progress",
40
+ description: "Audit log for app skill sessions",
41
+ subCommands: {
42
+ log: logCommand,
43
+ schema: schemaCommand,
44
+ },
45
+ });
@@ -0,0 +1,49 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { ProgressInput, ProgressEntry } from "../../../progress/schema";
4
+ import { type CommandResult, success, failure } from "../../lib/command-result";
5
+ import { getGitContext } from "./git-context";
6
+
7
+ export function runProgressLog(jsonInput: string, dryRun: boolean, cwd: string): CommandResult {
8
+ let parsed: unknown;
9
+ try {
10
+ parsed = JSON.parse(jsonInput);
11
+ } catch {
12
+ return failure("Invalid JSON input");
13
+ }
14
+
15
+ const inputResult = ProgressInput.safeParse(parsed);
16
+ if (!inputResult.success) {
17
+ const issues = inputResult.error.issues
18
+ .map((i) => `${i.path.join(".")}: ${i.message}`)
19
+ .join(", ");
20
+ return failure(`Invalid progress input: ${issues}`);
21
+ }
22
+
23
+ const enriched = {
24
+ ...inputResult.data,
25
+ timestamp: new Date().toISOString(),
26
+ git: getGitContext(cwd),
27
+ };
28
+
29
+ const entryResult = ProgressEntry.safeParse(enriched);
30
+ if (!entryResult.success) {
31
+ const issues = entryResult.error.issues
32
+ .map((i) => `${i.path.join(".")}: ${i.message}`)
33
+ .join(", ");
34
+ return failure(`Invalid progress entry after enrichment: ${issues}`);
35
+ }
36
+
37
+ const line = JSON.stringify(entryResult.data);
38
+ console.log(line);
39
+
40
+ if (dryRun) {
41
+ return success();
42
+ }
43
+
44
+ const erpKitDir = path.join(cwd, ".erp-kit");
45
+ fs.mkdirSync(erpKitDir, { recursive: true });
46
+ fs.appendFileSync(path.join(erpKitDir, "progress.jsonl"), line + "\n", "utf-8");
47
+
48
+ return success();
49
+ }