sqlew 3.2.5 → 3.6.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 (291) hide show
  1. package/CHANGELOG.md +288 -1011
  2. package/README.md +80 -263
  3. package/assets/config.example.toml +97 -0
  4. package/assets/schema.sql +6 -1
  5. package/dist/adapters/index.d.ts +11 -0
  6. package/dist/adapters/index.d.ts.map +1 -0
  7. package/dist/adapters/index.js +21 -0
  8. package/dist/adapters/index.js.map +1 -0
  9. package/dist/adapters/mysql-adapter.d.ts +31 -0
  10. package/dist/adapters/mysql-adapter.d.ts.map +1 -0
  11. package/dist/adapters/mysql-adapter.js +63 -0
  12. package/dist/adapters/mysql-adapter.js.map +1 -0
  13. package/dist/adapters/postgresql-adapter.d.ts +31 -0
  14. package/dist/adapters/postgresql-adapter.d.ts.map +1 -0
  15. package/dist/adapters/postgresql-adapter.js +63 -0
  16. package/dist/adapters/postgresql-adapter.js.map +1 -0
  17. package/dist/adapters/sqlite-adapter.d.ts +37 -0
  18. package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
  19. package/dist/adapters/sqlite-adapter.js +129 -0
  20. package/dist/adapters/sqlite-adapter.js.map +1 -0
  21. package/dist/adapters/types.d.ts +33 -0
  22. package/dist/adapters/types.d.ts.map +1 -0
  23. package/dist/adapters/types.js +2 -0
  24. package/dist/adapters/types.js.map +1 -0
  25. package/dist/cli.js +55 -54
  26. package/dist/cli.js.map +1 -1
  27. package/dist/config/example-generator.d.ts +11 -0
  28. package/dist/config/example-generator.d.ts.map +1 -0
  29. package/dist/config/example-generator.js +48 -0
  30. package/dist/config/example-generator.js.map +1 -0
  31. package/dist/config/loader.d.ts +46 -0
  32. package/dist/config/loader.d.ts.map +1 -0
  33. package/dist/config/loader.js +155 -0
  34. package/dist/config/loader.js.map +1 -0
  35. package/dist/config/types.d.ts +86 -0
  36. package/dist/config/types.d.ts.map +1 -0
  37. package/dist/config/types.js +28 -0
  38. package/dist/config/types.js.map +1 -0
  39. package/dist/constants.d.ts +9 -0
  40. package/dist/constants.d.ts.map +1 -1
  41. package/dist/constants.js +10 -0
  42. package/dist/constants.js.map +1 -1
  43. package/dist/database.d.ts +44 -122
  44. package/dist/database.d.ts.map +1 -1
  45. package/dist/database.js +145 -349
  46. package/dist/database.js.map +1 -1
  47. package/dist/index.js +223 -175
  48. package/dist/index.js.map +1 -1
  49. package/dist/knexfile.d.ts +6 -0
  50. package/dist/knexfile.d.ts.map +1 -0
  51. package/dist/knexfile.js +85 -0
  52. package/dist/knexfile.js.map +1 -0
  53. package/dist/migrations/add-help-system-tables.d.ts +35 -0
  54. package/dist/migrations/add-help-system-tables.d.ts.map +1 -0
  55. package/dist/migrations/add-help-system-tables.js +206 -0
  56. package/dist/migrations/add-help-system-tables.js.map +1 -0
  57. package/dist/migrations/add-token-tracking.d.ts +28 -0
  58. package/dist/migrations/add-token-tracking.d.ts.map +1 -0
  59. package/dist/migrations/add-token-tracking.js +108 -0
  60. package/dist/migrations/add-token-tracking.js.map +1 -0
  61. package/dist/migrations/add-v3.5.0-pruned-files.d.ts +26 -0
  62. package/dist/migrations/add-v3.5.0-pruned-files.d.ts.map +1 -0
  63. package/dist/migrations/add-v3.5.0-pruned-files.js +107 -0
  64. package/dist/migrations/add-v3.5.0-pruned-files.js.map +1 -0
  65. package/dist/migrations/index.d.ts +26 -12
  66. package/dist/migrations/index.d.ts.map +1 -1
  67. package/dist/migrations/index.js +162 -20
  68. package/dist/migrations/index.js.map +1 -1
  69. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts +4 -0
  70. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +1 -0
  71. package/dist/migrations/knex/20251025020452_create_master_tables.js +65 -0
  72. package/dist/migrations/knex/20251025020452_create_master_tables.js.map +1 -0
  73. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts +4 -0
  74. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +1 -0
  75. package/dist/migrations/knex/20251025021152_create_transaction_tables.js +235 -0
  76. package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +1 -0
  77. package/dist/migrations/knex/20251025021351_create_indexes.d.ts +4 -0
  78. package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +1 -0
  79. package/dist/migrations/knex/20251025021351_create_indexes.js +62 -0
  80. package/dist/migrations/knex/20251025021351_create_indexes.js.map +1 -0
  81. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts +4 -0
  82. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +1 -0
  83. package/dist/migrations/knex/20251025021416_seed_master_data.js +58 -0
  84. package/dist/migrations/knex/20251025021416_seed_master_data.js.map +1 -0
  85. package/dist/migrations/knex/20251025070349_create_views.d.ts +4 -0
  86. package/dist/migrations/knex/20251025070349_create_views.d.ts.map +1 -0
  87. package/dist/migrations/knex/20251025070349_create_views.js +143 -0
  88. package/dist/migrations/knex/20251025070349_create_views.js.map +1 -0
  89. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts +4 -0
  90. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
  91. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js +15 -0
  92. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
  93. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts +8 -0
  94. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
  95. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js +12 -0
  96. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +1 -0
  97. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts +19 -0
  98. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +1 -0
  99. package/dist/migrations/knex/20251025090000_create_help_system_tables.js +115 -0
  100. package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +1 -0
  101. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts +13 -0
  102. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
  103. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js +377 -0
  104. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
  105. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts +15 -0
  106. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +1 -0
  107. package/dist/migrations/knex/20251025100000_seed_help_metadata.js +253 -0
  108. package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +1 -0
  109. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts +16 -0
  110. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
  111. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js +276 -0
  112. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +1 -0
  113. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts +8 -0
  114. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
  115. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js +64 -0
  116. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
  117. package/dist/migrations/seed-help-data.d.ts +48 -0
  118. package/dist/migrations/seed-help-data.d.ts.map +1 -0
  119. package/dist/migrations/seed-help-data.js +1466 -0
  120. package/dist/migrations/seed-help-data.js.map +1 -0
  121. package/dist/migrations/seed-tool-metadata.d.ts +24 -0
  122. package/dist/migrations/seed-tool-metadata.d.ts.map +1 -0
  123. package/dist/migrations/seed-tool-metadata.js +392 -0
  124. package/dist/migrations/seed-tool-metadata.js.map +1 -0
  125. package/dist/migrations/v3.6.0-help-system-refactor.d.ts +46 -0
  126. package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +1 -0
  127. package/dist/migrations/v3.6.0-help-system-refactor.js +223 -0
  128. package/dist/migrations/v3.6.0-help-system-refactor.js.map +1 -0
  129. package/dist/schema.d.ts.map +1 -1
  130. package/dist/schema.js +2 -0
  131. package/dist/schema.js.map +1 -1
  132. package/dist/tests/git-aware-completion.test.d.ts +6 -0
  133. package/dist/tests/git-aware-completion.test.d.ts.map +1 -0
  134. package/dist/tests/git-aware-completion.test.js +160 -0
  135. package/dist/tests/git-aware-completion.test.js.map +1 -0
  136. package/dist/tests/help-system.test.d.ts +23 -0
  137. package/dist/tests/help-system.test.d.ts.map +1 -0
  138. package/dist/tests/help-system.test.js +374 -0
  139. package/dist/tests/help-system.test.js.map +1 -0
  140. package/dist/tests/tasks.auto-pruning-decision-link.test.d.ts +6 -0
  141. package/dist/tests/tasks.auto-pruning-decision-link.test.d.ts.map +1 -0
  142. package/dist/tests/tasks.auto-pruning-decision-link.test.js +264 -0
  143. package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -0
  144. package/dist/tests/tasks.auto-pruning-partial.test.d.ts +6 -0
  145. package/dist/tests/tasks.auto-pruning-partial.test.d.ts.map +1 -0
  146. package/dist/tests/tasks.auto-pruning-partial.test.js +285 -0
  147. package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -0
  148. package/dist/tests/tasks.auto-pruning-persistence.test.d.ts +6 -0
  149. package/dist/tests/tasks.auto-pruning-persistence.test.d.ts.map +1 -0
  150. package/dist/tests/tasks.auto-pruning-persistence.test.js +250 -0
  151. package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -0
  152. package/dist/tests/tasks.auto-pruning-safety.test.d.ts +12 -0
  153. package/dist/tests/tasks.auto-pruning-safety.test.d.ts.map +1 -0
  154. package/dist/tests/tasks.auto-pruning-safety.test.js +217 -0
  155. package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -0
  156. package/dist/tests/tasks.dependencies.test.js +338 -307
  157. package/dist/tests/tasks.dependencies.test.js.map +1 -1
  158. package/dist/tests/tasks.link-file-backward-compat.test.d.ts +6 -0
  159. package/dist/tests/tasks.link-file-backward-compat.test.d.ts.map +1 -0
  160. package/dist/tests/tasks.link-file-backward-compat.test.js +247 -0
  161. package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -0
  162. package/dist/tests/tasks.watch-files-action.test.d.ts +6 -0
  163. package/dist/tests/tasks.watch-files-action.test.d.ts.map +1 -0
  164. package/dist/tests/tasks.watch-files-action.test.js +372 -0
  165. package/dist/tests/tasks.watch-files-action.test.js.map +1 -0
  166. package/dist/tests/tasks.watch-files-parameter.test.d.ts +6 -0
  167. package/dist/tests/tasks.watch-files-parameter.test.d.ts.map +1 -0
  168. package/dist/tests/tasks.watch-files-parameter.test.js +260 -0
  169. package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -0
  170. package/dist/tests/two-step-git-completion.test.d.ts +6 -0
  171. package/dist/tests/two-step-git-completion.test.d.ts.map +1 -0
  172. package/dist/tests/two-step-git-completion.test.js +326 -0
  173. package/dist/tests/two-step-git-completion.test.js.map +1 -0
  174. package/dist/tests/vcs-staging.test.d.ts +6 -0
  175. package/dist/tests/vcs-staging.test.d.ts.map +1 -0
  176. package/dist/tests/vcs-staging.test.js +137 -0
  177. package/dist/tests/vcs-staging.test.js.map +1 -0
  178. package/dist/tools/config.d.ts +9 -4
  179. package/dist/tools/config.d.ts.map +1 -1
  180. package/dist/tools/config.js +16 -12
  181. package/dist/tools/config.js.map +1 -1
  182. package/dist/tools/constraints.d.ts +9 -3
  183. package/dist/tools/constraints.d.ts.map +1 -1
  184. package/dist/tools/constraints.js +66 -45
  185. package/dist/tools/constraints.js.map +1 -1
  186. package/dist/tools/context.d.ts +35 -16
  187. package/dist/tools/context.d.ts.map +1 -1
  188. package/dist/tools/context.js +374 -314
  189. package/dist/tools/context.js.map +1 -1
  190. package/dist/tools/files.d.ts +11 -4
  191. package/dist/tools/files.d.ts.map +1 -1
  192. package/dist/tools/files.js +173 -91
  193. package/dist/tools/files.js.map +1 -1
  194. package/dist/tools/help-queries.d.ts +130 -0
  195. package/dist/tools/help-queries.d.ts.map +1 -0
  196. package/dist/tools/help-queries.js +393 -0
  197. package/dist/tools/help-queries.js.map +1 -0
  198. package/dist/tools/messaging.d.ts +13 -6
  199. package/dist/tools/messaging.d.ts.map +1 -1
  200. package/dist/tools/messaging.js +217 -129
  201. package/dist/tools/messaging.js.map +1 -1
  202. package/dist/tools/tasks.d.ts +42 -12
  203. package/dist/tools/tasks.d.ts.map +1 -1
  204. package/dist/tools/tasks.js +809 -347
  205. package/dist/tools/tasks.js.map +1 -1
  206. package/dist/tools/utils.d.ts +13 -5
  207. package/dist/tools/utils.d.ts.map +1 -1
  208. package/dist/tools/utils.js +92 -115
  209. package/dist/tools/utils.js.map +1 -1
  210. package/dist/types.d.ts +4 -0
  211. package/dist/types.d.ts.map +1 -1
  212. package/dist/utils/activity-logging.d.ts +114 -0
  213. package/dist/utils/activity-logging.d.ts.map +1 -0
  214. package/dist/utils/activity-logging.js +162 -0
  215. package/dist/utils/activity-logging.js.map +1 -0
  216. package/dist/utils/batch.d.ts +2 -2
  217. package/dist/utils/batch.d.ts.map +1 -1
  218. package/dist/utils/batch.js +8 -8
  219. package/dist/utils/batch.js.map +1 -1
  220. package/dist/utils/cleanup.d.ts +21 -13
  221. package/dist/utils/cleanup.d.ts.map +1 -1
  222. package/dist/utils/cleanup.js +31 -24
  223. package/dist/utils/cleanup.js.map +1 -1
  224. package/dist/utils/debug-logger.d.ts +44 -0
  225. package/dist/utils/debug-logger.d.ts.map +1 -0
  226. package/dist/utils/debug-logger.js +116 -0
  227. package/dist/utils/debug-logger.js.map +1 -0
  228. package/dist/utils/file-pruning.d.ts +69 -0
  229. package/dist/utils/file-pruning.d.ts.map +1 -0
  230. package/dist/utils/file-pruning.js +185 -0
  231. package/dist/utils/file-pruning.js.map +1 -0
  232. package/dist/utils/help-tracking.d.ts +55 -0
  233. package/dist/utils/help-tracking.d.ts.map +1 -0
  234. package/dist/utils/help-tracking.js +88 -0
  235. package/dist/utils/help-tracking.js.map +1 -0
  236. package/dist/utils/quality-checks.d.ts +60 -0
  237. package/dist/utils/quality-checks.d.ts.map +1 -0
  238. package/dist/utils/quality-checks.js +228 -0
  239. package/dist/utils/quality-checks.js.map +1 -0
  240. package/dist/utils/retention.d.ts +13 -5
  241. package/dist/utils/retention.d.ts.map +1 -1
  242. package/dist/utils/retention.js +20 -8
  243. package/dist/utils/retention.js.map +1 -1
  244. package/dist/utils/task-stale-detection.d.ts +77 -7
  245. package/dist/utils/task-stale-detection.d.ts.map +1 -1
  246. package/dist/utils/task-stale-detection.js +309 -34
  247. package/dist/utils/task-stale-detection.js.map +1 -1
  248. package/dist/utils/token-estimation.d.ts +72 -0
  249. package/dist/utils/token-estimation.d.ts.map +1 -0
  250. package/dist/utils/token-estimation.js +71 -0
  251. package/dist/utils/token-estimation.js.map +1 -0
  252. package/dist/utils/token-logging.d.ts +48 -0
  253. package/dist/utils/token-logging.d.ts.map +1 -0
  254. package/dist/utils/token-logging.js +112 -0
  255. package/dist/utils/token-logging.js.map +1 -0
  256. package/dist/utils/vcs-adapter.d.ts +68 -0
  257. package/dist/utils/vcs-adapter.d.ts.map +1 -0
  258. package/dist/utils/vcs-adapter.js +187 -0
  259. package/dist/utils/vcs-adapter.js.map +1 -0
  260. package/dist/utils/view-queries.d.ts +34 -0
  261. package/dist/utils/view-queries.d.ts.map +1 -0
  262. package/dist/utils/view-queries.js +192 -0
  263. package/dist/utils/view-queries.js.map +1 -0
  264. package/dist/watcher/file-watcher.d.ts +54 -4
  265. package/dist/watcher/file-watcher.d.ts.map +1 -1
  266. package/dist/watcher/file-watcher.js +329 -33
  267. package/dist/watcher/file-watcher.js.map +1 -1
  268. package/dist/watcher/gitignore-parser.d.ts +70 -0
  269. package/dist/watcher/gitignore-parser.d.ts.map +1 -0
  270. package/dist/watcher/gitignore-parser.js +191 -0
  271. package/dist/watcher/gitignore-parser.js.map +1 -0
  272. package/dist/watcher/index.d.ts +1 -0
  273. package/dist/watcher/index.d.ts.map +1 -1
  274. package/dist/watcher/index.js +1 -0
  275. package/dist/watcher/index.js.map +1 -1
  276. package/docs/AI_AGENT_GUIDE.md +1 -1
  277. package/docs/ARCHITECTURE.md +12 -0
  278. package/docs/AUTO_FILE_TRACKING.md +486 -82
  279. package/docs/BEST_PRACTICES.md +56 -448
  280. package/docs/CONFIGURATION.md +908 -0
  281. package/docs/GIT_AWARE_AUTO_COMPLETE.md +645 -0
  282. package/docs/MIGRATION_v3.3.md +602 -0
  283. package/docs/MIGRATION_v3.6.0.md +170 -0
  284. package/docs/SHARED_CONCEPTS.md +65 -209
  285. package/docs/TASK_ACTIONS.md +12 -0
  286. package/docs/TASK_OVERVIEW.md +125 -24
  287. package/docs/TASK_PRUNING.md +589 -0
  288. package/docs/TASK_SYSTEM.md +83 -13
  289. package/docs/TOOL_REFERENCE.md +94 -6
  290. package/docs/TOOL_SELECTION.md +41 -248
  291. package/package.json +21 -7
@@ -91,13 +91,17 @@ Every task has:
91
91
  **`in_progress`:**
92
92
  - Active work happening
93
93
  - Should have assignee
94
- - Auto-transitions to `waiting_review` after 2 hours idle
94
+ - Auto-transitions to `waiting_review` via:
95
+ - Smart quality gates (v3.4.1): All files modified, tests pass, TypeScript compiles, 3min idle (default)
96
+ - Time-based stale detection: 18 hours idle (fallback, supports multi-day tasks)
95
97
 
96
98
  **`waiting_review`:**
97
- - Awaiting human/AI feedback
99
+ - Awaiting human/AI feedback or git commit
98
100
  - Code review needed
99
- - Design approval pending
100
- - Auto-transitions to `todo` after 24 hours idle
101
+ - **Auto-transitions to `done` (v3.4.0 Git-aware):** When ALL watched files are committed to Git
102
+ - Git commits = implicit review approval
103
+ - Real-time: Detects commits via `.git/index` file watcher
104
+ - Periodic: Checks on `task.list()` calls
101
105
 
102
106
  **`blocked`:**
103
107
  - Cannot proceed
@@ -119,9 +123,24 @@ Every task has:
119
123
  ### Visual Diagram
120
124
 
121
125
  ```
126
+ v3.4.0 Git-Aware Workflow:
122
127
  todo → in_progress → waiting_review → done → archived
123
- ↓ ↓
124
- blocked ────────┘
128
+ ↓ ↓
129
+ | (Quality gates (Git commits)
130
+ | or 2h idle) ↓
131
+ | ↓ (All watched files
132
+ └──── blocked committed to Git)
133
+
134
+ Real-time: .git/index file watcher detects commits
135
+ Periodic: task.list() checks git log
136
+
137
+ Alternative (with acceptance_criteria):
138
+ todo → in_progress → done → archived
139
+ ↓ ↓
140
+ | (Criteria met,
141
+ | skip review)
142
+ | ↓
143
+ └──── blocked
125
144
  ```
126
145
 
127
146
  ### Valid Transitions
@@ -129,10 +148,10 @@ todo → in_progress → waiting_review → done → archived
129
148
  | From Status | To Status(es) | Rationale |
130
149
  |-------------|--------------|-----------|
131
150
  | `todo` | `in_progress`, `blocked` | Start work or discover blocker |
132
- | `in_progress` | `waiting_review`, `blocked`, `done` | Need review, hit blocker, or complete |
151
+ | `in_progress` | `waiting_review`, `blocked`, `done` | Quality gates met (v3.4.1), need review, hit blocker, or complete |
133
152
  | `waiting_review` | `in_progress`, `todo`, `done` | Resume work, reset to backlog, or approve |
134
153
  | `blocked` | `todo`, `in_progress` | Blocker resolved, resume or reset |
135
- | `done` | `archived` | Archive completed work |
154
+ | `done` | `archived` | Archive completed work (auto after 48h in v3.4.1) |
136
155
  | `archived` | *(terminal state)* | No transitions allowed |
137
156
 
138
157
  ### Complete Transition Matrix
@@ -181,29 +200,49 @@ Auto-stale detection automatically transitions idle tasks to prevent them from g
181
200
 
182
201
  ### Detection Rules
183
202
 
184
- 1. **`in_progress` `waiting_review`** (>2 hours idle)
203
+ **v3.4.1+: Smart Quality-Based Detection (Primary)**
204
+
205
+ 1. **`in_progress` → `waiting_review`** (quality gates met)
206
+ - All watched files modified at least once
207
+ - TypeScript compiles without errors (if .ts files)
208
+ - Tests pass (if test files exist)
209
+ - 15 minutes idle (no file modifications)
210
+ - Rationale: Work is complete and ready for review
211
+ - Configuration: See `.sqlew/config.toml` review_* settings
212
+
213
+ **Time-Based Stale Detection (Fallback)**
214
+
215
+ 2. **`in_progress` → `waiting_review`** (>2 hours idle)
185
216
  - Rationale: Likely waiting for review or hit usage limit
186
217
  - Check: `updated_ts` older than 2 hours
187
218
 
188
- 2. **`waiting_review` → `todo`** (>24 hours idle)
219
+ 3. **`waiting_review` → `todo`** (>24 hours idle)
189
220
  - Rationale: Review not happening, reset to backlog
190
221
  - Check: `updated_ts` older than 24 hours
191
222
 
223
+ 4. **`done` → `archived`** (>48 hours idle) - **Auto-Archive (v3.4.1)**
224
+ - Rationale: Completed tasks should be archived automatically
225
+ - Check: `updated_ts` older than 48 hours (2 days)
226
+ - Weekend-aware: Task done Friday → archives Tuesday (skips Sat/Sun)
227
+
192
228
  ### When It Runs
193
229
 
194
230
  Automatically runs before:
195
231
  1. **`list` action** - Ensures stale tasks show correct status
196
232
  2. **`move` action** - Prevents moving already-stale tasks
233
+ 3. **Database startup** - Maintenance on initialization
197
234
 
198
235
  **Response includes:**
199
236
  - `stale_tasks_transitioned`: Count of auto-transitioned tasks
237
+ - `archived_tasks`: Count of auto-archived done tasks (in list action)
200
238
 
201
239
  **Example Response:**
202
240
  ```javascript
203
241
  {
204
242
  tasks: [...],
205
243
  count: 5,
206
- stale_tasks_transitioned: 2 // 2 tasks auto-transitioned
244
+ stale_tasks_transitioned: 2, // 2 tasks auto-transitioned
245
+ archived_tasks: 1 // 1 done task auto-archived
207
246
  }
208
247
  ```
209
248
 
@@ -211,27 +250,53 @@ Automatically runs before:
211
250
 
212
251
  **Default Settings:**
213
252
  - `task_auto_stale_enabled`: '1' (enabled)
214
- - `task_stale_hours_in_progress`: '2' (2 hours)
253
+ - `task_stale_hours_in_progress`: '18' (18 hours - supports multi-day tasks and lunch breaks)
215
254
  - `task_stale_hours_waiting_review`: '24' (24 hours)
255
+ - `auto_archive_done_days`: '2' (2 days / 48 hours)
256
+ - `autodelete_ignore_weekend`: '0' (false) - Shared with messages/files cleanup
257
+
258
+ **Via MCP Tool (config):**
259
+ ```javascript
260
+ // Update auto-archive threshold
261
+ {
262
+ action: "update",
263
+ auto_archive_done_days: "3" // Archive after 3 days instead of 2
264
+ }
265
+
266
+ // Enable weekend-aware mode (affects auto-archive, messages, files)
267
+ {
268
+ action: "update",
269
+ autodelete_ignore_weekend: "1"
270
+ }
271
+ ```
272
+
273
+ **Via .sqlew/config.toml:**
274
+ ```toml
275
+ [tasks]
276
+ auto_archive_done_days = 3 # Archive after 3 days
277
+ stale_hours_in_progress = 4 # in_progress → waiting_review after 4 hours
278
+ stale_hours_waiting_review = 48 # waiting_review → todo after 48 hours
279
+ auto_stale_enabled = true
280
+
281
+ [autodelete]
282
+ ignore_weekend = true # Weekend-aware mode (shared setting)
283
+ ```
216
284
 
217
- **Enable/Disable:**
285
+ **Via SQL (Advanced):**
218
286
  ```sql
287
+ -- Enable/Disable auto-stale
219
288
  UPDATE m_config SET value = '1' WHERE key = 'task_auto_stale_enabled'; -- Enable
220
289
  UPDATE m_config SET value = '0' WHERE key = 'task_auto_stale_enabled'; -- Disable
221
- ```
222
290
 
223
- **Adjust Thresholds:**
224
- ```sql
225
- -- in_progress → waiting_review after 4 hours
226
- UPDATE m_config SET value = '4' WHERE key = 'task_stale_hours_in_progress';
291
+ -- Adjust auto-archive threshold
292
+ UPDATE m_config SET value = '3' WHERE key = 'auto_archive_done_days'; -- 3 days
227
293
 
228
- -- waiting_review todo after 48 hours
294
+ -- Adjust stale detection thresholds
295
+ UPDATE m_config SET value = '4' WHERE key = 'task_stale_hours_in_progress';
229
296
  UPDATE m_config SET value = '48' WHERE key = 'task_stale_hours_waiting_review';
230
- ```
231
297
 
232
- **Check Current Config:**
233
- ```sql
234
- SELECT key, value FROM m_config WHERE key LIKE 'task_%';
298
+ -- Check current config
299
+ SELECT key, value FROM m_config WHERE key LIKE 'task_%' OR key LIKE 'auto_%';
235
300
  ```
236
301
 
237
302
  ### Monitoring
@@ -239,7 +304,7 @@ SELECT key, value FROM m_config WHERE key LIKE 'task_%';
239
304
  Track transitions via `t_activity_log` table:
240
305
 
241
306
  ```sql
242
- -- Recent auto-transitions
307
+ -- Recent auto-transitions (including auto-archive)
243
308
  SELECT * FROM t_activity_log
244
309
  WHERE entity_type = 'task' AND action_type = 'status_change'
245
310
  ORDER BY ts DESC LIMIT 20;
@@ -248,8 +313,44 @@ ORDER BY ts DESC LIMIT 20;
248
313
  SELECT task_id, COUNT(*) as stale_count FROM t_activity_log
249
314
  WHERE entity_type = 'task' AND json_extract(details, '$.new_status') = 3
250
315
  GROUP BY task_id HAVING stale_count > 2;
316
+
317
+ -- Recently auto-archived tasks
318
+ SELECT * FROM t_activity_log
319
+ WHERE entity_type = 'task'
320
+ AND action_type = 'status_change'
321
+ AND json_extract(details, '$.new_status') = 6 -- ARCHIVED status
322
+ ORDER BY ts DESC LIMIT 20;
323
+
324
+ -- Count of archived tasks per day
325
+ SELECT date(ts, 'unixepoch') as day, COUNT(*) as archived_count
326
+ FROM t_activity_log
327
+ WHERE entity_type = 'task'
328
+ AND action_type = 'status_change'
329
+ AND json_extract(details, '$.new_status') = 6
330
+ GROUP BY day
331
+ ORDER BY day DESC;
251
332
  ```
252
333
 
334
+ ### Weekend-Aware Behavior
335
+
336
+ When `autodelete_ignore_weekend` is enabled (via config.toml or MCP tool):
337
+
338
+ **Example 1 - Task Completed on Friday:**
339
+ - Task marked `done`: Friday 5:00 PM
340
+ - Default 48 hours: Would archive Sunday 5:00 PM
341
+ - **Weekend-aware**: Archives Tuesday 5:00 PM (skips Sat/Sun)
342
+
343
+ **Example 2 - Task Completed on Wednesday:**
344
+ - Task marked `done`: Wednesday 2:00 PM
345
+ - Default 48 hours: Would archive Friday 2:00 PM
346
+ - **Weekend-aware**: Archives Friday 2:00 PM (no weekend in between)
347
+
348
+ **Why Weekend-Aware Mode?**
349
+ - Teams/AI agents may not work on weekends
350
+ - Prevents premature archiving during weekend breaks
351
+ - Consistent with message/file retention behavior
352
+ - Configurable: Disable if you work 7 days/week
353
+
253
354
  ## Priority System
254
355
 
255
356
  ### Priority Levels