@openrig/cli 0.6.7 → 0.6.9

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 (261) hide show
  1. package/README.md +6 -4
  2. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +41 -2
  3. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +18 -4
  4. package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +218 -7
  5. package/daemon/context-packs/help/manifest.yaml +1 -1
  6. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  7. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +40 -13
  8. package/daemon/context-packs/reference/getting-started.md +2 -2
  9. package/daemon/context-packs/reference/instance-layout.md +5 -0
  10. package/daemon/context-packs/reference/manifest.yaml +1 -1
  11. package/daemon/context-packs/reference/rig-spec.md +12 -9
  12. package/daemon/context-packs/reference/whats-new.md +71 -114
  13. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  14. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  15. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  16. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  17. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  18. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  19. package/daemon/context-packs/skills/core/cross-host-rig-commands/SKILL.md +1 -0
  20. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  21. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  22. package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +18 -4
  23. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  24. package/daemon/context-packs/skills/core/openrig-architect/SKILL.md +3 -0
  25. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  27. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  28. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  29. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/core/openrig-software-factory/references/worked-example.md +15 -14
  31. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  63. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  64. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  65. package/daemon/context-packs/skills/refocusing/scripts/trace-to-root.py +218 -7
  66. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  67. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  68. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  69. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  70. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  71. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  72. package/daemon/dist/build-info.js +3 -3
  73. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  74. package/daemon/dist/db/all-migrations.js +2 -0
  75. package/daemon/dist/db/all-migrations.js.map +1 -1
  76. package/daemon/dist/db/migrations/098_queue_transitions_qitem_id_order.d.ts +3 -0
  77. package/daemon/dist/db/migrations/098_queue_transitions_qitem_id_order.d.ts.map +1 -0
  78. package/daemon/dist/db/migrations/098_queue_transitions_qitem_id_order.js +12 -0
  79. package/daemon/dist/db/migrations/098_queue_transitions_qitem_id_order.js.map +1 -0
  80. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +23 -2
  81. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  82. package/daemon/dist/domain/claude-compaction-enforcer.js +153 -94
  83. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  84. package/daemon/dist/domain/context-monitor.d.ts +5 -0
  85. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  86. package/daemon/dist/domain/context-monitor.js +21 -6
  87. package/daemon/dist/domain/context-monitor.js.map +1 -1
  88. package/daemon/dist/domain/current-work.d.ts +74 -0
  89. package/daemon/dist/domain/current-work.d.ts.map +1 -1
  90. package/daemon/dist/domain/current-work.js +165 -0
  91. package/daemon/dist/domain/current-work.js.map +1 -1
  92. package/daemon/dist/domain/gateway/connections-projection.d.ts +2 -0
  93. package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -1
  94. package/daemon/dist/domain/gateway/connections-projection.js +3 -1
  95. package/daemon/dist/domain/gateway/connections-projection.js.map +1 -1
  96. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +3 -1
  97. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -1
  98. package/daemon/dist/domain/gateway/gateway-subsystem.js +3 -1
  99. package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -1
  100. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  101. package/daemon/dist/domain/gateway/slack/inbound.js +1 -0
  102. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  103. package/daemon/dist/domain/gateway/slack/queue-access.d.ts +5 -0
  104. package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
  105. package/daemon/dist/domain/gateway/slack/queue-access.js +6 -1
  106. package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
  107. package/daemon/dist/domain/gateway/slack/slack-api.d.ts +7 -2
  108. package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -1
  109. package/daemon/dist/domain/gateway/slack/slack-api.js +35 -3
  110. package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -1
  111. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +4 -0
  112. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  113. package/daemon/dist/domain/gateway/slack/slack-delivery.js +16 -1
  114. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  115. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +17 -0
  116. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  117. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +92 -34
  118. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  119. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +37 -0
  120. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -1
  121. package/daemon/dist/domain/gateway/slack/socket-inbound.js +281 -38
  122. package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -1
  123. package/daemon/dist/domain/gateway/slack/state-store.d.ts +14 -1
  124. package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
  125. package/daemon/dist/domain/gateway/slack/state-store.js +16 -0
  126. package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
  127. package/daemon/dist/domain/human-questions.d.ts +12 -3
  128. package/daemon/dist/domain/human-questions.d.ts.map +1 -1
  129. package/daemon/dist/domain/human-questions.js +10 -5
  130. package/daemon/dist/domain/human-questions.js.map +1 -1
  131. package/daemon/dist/domain/kernel-boot-tracker.d.ts +20 -1
  132. package/daemon/dist/domain/kernel-boot-tracker.d.ts.map +1 -1
  133. package/daemon/dist/domain/kernel-boot-tracker.js +66 -14
  134. package/daemon/dist/domain/kernel-boot-tracker.js.map +1 -1
  135. package/daemon/dist/domain/kernel-boot.d.ts +4 -0
  136. package/daemon/dist/domain/kernel-boot.d.ts.map +1 -1
  137. package/daemon/dist/domain/kernel-boot.js +26 -1
  138. package/daemon/dist/domain/kernel-boot.js.map +1 -1
  139. package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
  140. package/daemon/dist/domain/native-process-lineage.js +44 -9
  141. package/daemon/dist/domain/native-process-lineage.js.map +1 -1
  142. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  143. package/daemon/dist/domain/profile-resolver.js +54 -15
  144. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  145. package/daemon/dist/domain/queue-nudge-text.d.ts +4 -0
  146. package/daemon/dist/domain/queue-nudge-text.d.ts.map +1 -0
  147. package/daemon/dist/domain/queue-nudge-text.js +35 -0
  148. package/daemon/dist/domain/queue-nudge-text.js.map +1 -0
  149. package/daemon/dist/domain/queue-repository.d.ts +17 -0
  150. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  151. package/daemon/dist/domain/queue-repository.js +58 -7
  152. package/daemon/dist/domain/queue-repository.js.map +1 -1
  153. package/daemon/dist/domain/queue-transition-log.d.ts +12 -4
  154. package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
  155. package/daemon/dist/domain/queue-transition-log.js +24 -0
  156. package/daemon/dist/domain/queue-transition-log.js.map +1 -1
  157. package/daemon/dist/domain/restore-orchestrator.d.ts +1 -0
  158. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  159. package/daemon/dist/domain/restore-orchestrator.js +17 -11
  160. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  161. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  162. package/daemon/dist/domain/rig-teardown.js +6 -0
  163. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  164. package/daemon/dist/domain/scope/scope-approve.d.ts +21 -0
  165. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  166. package/daemon/dist/domain/scope/scope-approve.js +48 -4
  167. package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  168. package/daemon/dist/domain/session-transport.d.ts +12 -1
  169. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  170. package/daemon/dist/domain/session-transport.js +33 -7
  171. package/daemon/dist/domain/session-transport.js.map +1 -1
  172. package/daemon/dist/domain/skill-catalog.d.ts +11 -0
  173. package/daemon/dist/domain/skill-catalog.d.ts.map +1 -1
  174. package/daemon/dist/domain/skill-catalog.js +136 -12
  175. package/daemon/dist/domain/skill-catalog.js.map +1 -1
  176. package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
  177. package/daemon/dist/domain/workflow-validator.js +22 -1
  178. package/daemon/dist/domain/workflow-validator.js.map +1 -1
  179. package/daemon/dist/routes/gateway.d.ts.map +1 -1
  180. package/daemon/dist/routes/gateway.js +2 -0
  181. package/daemon/dist/routes/gateway.js.map +1 -1
  182. package/daemon/dist/routes/kernel-status.js +3 -1
  183. package/daemon/dist/routes/kernel-status.js.map +1 -1
  184. package/daemon/dist/routes/queue.d.ts.map +1 -1
  185. package/daemon/dist/routes/queue.js +17 -2
  186. package/daemon/dist/routes/queue.js.map +1 -1
  187. package/daemon/dist/routes/scope-approve.d.ts.map +1 -1
  188. package/daemon/dist/routes/scope-approve.js +3 -0
  189. package/daemon/dist/routes/scope-approve.js.map +1 -1
  190. package/daemon/dist/routes/sessions.js +1 -1
  191. package/daemon/dist/routes/sessions.js.map +1 -1
  192. package/daemon/docs/reference/agent-startup-guide.md +1 -1
  193. package/daemon/docs/reference/bundle-formats.md +1 -1
  194. package/daemon/docs/reference/getting-started.md +2 -2
  195. package/daemon/docs/reference/instance-layout.md +5 -0
  196. package/daemon/docs/reference/publishing-a-rig-bundle.md +4 -2
  197. package/daemon/docs/reference/refocus-channel.md +33 -0
  198. package/daemon/docs/reference/rig-spec.md +12 -9
  199. package/daemon/docs/reference/slack-app-setup.md +18 -1
  200. package/daemon/docs/reference/topology-naming.md +74 -0
  201. package/daemon/docs/reference/whats-new.md +71 -114
  202. package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +1 -0
  203. package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +18 -4
  204. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +3 -0
  205. package/daemon/specs/agents/shared/skills/core/openrig-software-factory/references/worked-example.md +15 -14
  206. package/dist/build-info.js +3 -3
  207. package/dist/commands/chatroom.d.ts.map +1 -1
  208. package/dist/commands/chatroom.js +25 -5
  209. package/dist/commands/chatroom.js.map +1 -1
  210. package/dist/commands/context.d.ts.map +1 -1
  211. package/dist/commands/context.js +8 -0
  212. package/dist/commands/context.js.map +1 -1
  213. package/dist/commands/launch.d.ts.map +1 -1
  214. package/dist/commands/launch.js +114 -8
  215. package/dist/commands/launch.js.map +1 -1
  216. package/dist/commands/proof.js +1 -1
  217. package/dist/commands/proof.js.map +1 -1
  218. package/dist/commands/queue.d.ts.map +1 -1
  219. package/dist/commands/queue.js +3 -0
  220. package/dist/commands/queue.js.map +1 -1
  221. package/dist/commands/scope.d.ts.map +1 -1
  222. package/dist/commands/scope.js +11 -2
  223. package/dist/commands/scope.js.map +1 -1
  224. package/dist/commands/send.d.ts.map +1 -1
  225. package/dist/commands/send.js +23 -5
  226. package/dist/commands/send.js.map +1 -1
  227. package/dist/commands/skill.d.ts.map +1 -1
  228. package/dist/commands/skill.js +6 -0
  229. package/dist/commands/skill.js.map +1 -1
  230. package/dist/commands/slack.d.ts +17 -0
  231. package/dist/commands/slack.d.ts.map +1 -1
  232. package/dist/commands/slack.js +41 -0
  233. package/dist/commands/slack.js.map +1 -1
  234. package/dist/commands/status.d.ts.map +1 -1
  235. package/dist/commands/status.js +5 -0
  236. package/dist/commands/status.js.map +1 -1
  237. package/dist/cross-host-types.d.ts +1 -1
  238. package/dist/cross-host-types.d.ts.map +1 -1
  239. package/dist/launch-plan-guard.d.ts +27 -0
  240. package/dist/launch-plan-guard.d.ts.map +1 -0
  241. package/dist/launch-plan-guard.js +73 -0
  242. package/dist/launch-plan-guard.js.map +1 -0
  243. package/dist/lib/scope/scope-fs.d.ts +13 -0
  244. package/dist/lib/scope/scope-fs.d.ts.map +1 -1
  245. package/dist/lib/scope/scope-fs.js +28 -4
  246. package/dist/lib/scope/scope-fs.js.map +1 -1
  247. package/dist/remote-host-ops.d.ts +4 -0
  248. package/dist/remote-host-ops.d.ts.map +1 -1
  249. package/dist/remote-host-ops.js +20 -2
  250. package/dist/remote-host-ops.js.map +1 -1
  251. package/package.json +2 -2
  252. package/tui/dist/commands/registry.js +1 -1
  253. package/tui/dist/connections/connections-model.d.ts +5 -0
  254. package/tui/dist/connections/connections-model.d.ts.map +1 -1
  255. package/tui/dist/connections/connections-model.js +16 -1
  256. package/tui/dist/connections/connections-model.js.map +1 -1
  257. package/tui/dist/main.js +16 -4
  258. package/tui/dist/main.js.map +1 -1
  259. package/tui/dist/render.js +1 -1
  260. package/tui/dist/scopes/scopes-model.js +4 -4
  261. package/tui/dist/types.d.ts +1 -1
@@ -2,10 +2,12 @@
2
2
  """Render topology and work context by ascending directory paths only."""
3
3
 
4
4
  import argparse
5
+ import datetime
5
6
  import json
6
7
  import os
7
8
  import re
8
9
  import subprocess
10
+ import sys
9
11
  from pathlib import Path
10
12
 
11
13
  SHELVES = {"rigs", "pods", "seats", "missions", "slices"}
@@ -148,7 +150,82 @@ def light_learned(text):
148
150
  return body[:boundary if boundary > 0 else 800].rstrip() + "\n[… use --depth full for the rest]"
149
151
 
150
152
 
151
- def render_topology(start, root, depth, failures):
153
+ # OPR.0.7.0.12 — the refocus packet (--packet). Duties and notes are carried as text by
154
+ # conventional section, with an honest "not found" and a bounded excerpt otherwise; nobody is
155
+ # asked to add headings. Old files are named with their measured age as a cue, not a verdict.
156
+ DUTY_HEADINGS = ("my job here", "standing duties")
157
+ NOTES_STATE_HEADINGS = ("current state",)
158
+ HEADING = re.compile(r"^(#{1,6})\s+(.*?)\s*#*\s*$")
159
+ DEFAULT_NOTES_MAX_AGE_DAYS = 14
160
+
161
+
162
+ def heading_sections(text, wanted):
163
+ """[(title, body)] for each Markdown heading whose title starts with a wanted phrase."""
164
+ lines = re.sub(r"^---\s*\n.*?\n---\s*\n", "", text or "", count=1, flags=re.S).splitlines()
165
+ found = []
166
+ for index, line in enumerate(lines):
167
+ match = HEADING.match(line)
168
+ if not match or not match.group(2).strip().lower().startswith(wanted):
169
+ continue
170
+ level = len(match.group(1))
171
+ body = []
172
+ for later in lines[index + 1:]:
173
+ heading = HEADING.match(later)
174
+ if heading and len(heading.group(1)) <= level:
175
+ break
176
+ body.append(later)
177
+ found.append((match.group(2).strip(), "\n".join(body).strip()))
178
+ return found
179
+
180
+
181
+ def by_section(text, wanted, path):
182
+ found = heading_sections(text, wanted)
183
+ shown = "\n\n".join(f"{title}\n{body}" if body else title for title, body in found)
184
+ missing = [phrase for phrase in wanted if not any(title.lower().startswith(phrase) for title, _ in found)]
185
+ if not missing:
186
+ return shown
187
+ if not found:
188
+ names = " or ".join(f'"{phrase.upper()}"' for phrase in wanted)
189
+ return f"SECTION NOT FOUND — no {names} heading in {path}; bounded excerpt follows\n{light_learned(text)}"
190
+ # Some sections matched: name each one that did not, with the same bounded excerpt, so text
191
+ # kept under another heading is not silently dropped.
192
+ names = ", ".join(f'"{phrase.upper()}"' for phrase in missing)
193
+ return f"{shown}\n\nSECTION NOT FOUND — no {names} heading in {path}; bounded excerpt follows\n{light_learned(text)}"
194
+
195
+
196
+ def notes_max_age_days():
197
+ try:
198
+ value = float(os.environ.get("OPENRIG_REFOCUS_NOTES_MAX_AGE_DAYS", DEFAULT_NOTES_MAX_AGE_DAYS))
199
+ except ValueError:
200
+ return DEFAULT_NOTES_MAX_AGE_DAYS
201
+ return value if value > 0 else DEFAULT_NOTES_MAX_AGE_DAYS
202
+
203
+
204
+ def age_cue(path, text):
205
+ """An OLD NOTES line when the file is past the threshold, measured from `updated:` or mtime."""
206
+ threshold = notes_max_age_days()
207
+ updated, source = None, "mtime"
208
+ match = re.match(r"^---\s*\n(.*?)\n---", text or "", re.S)
209
+ if match:
210
+ found = re.search(r"^updated:\s*[\"']?(\d{4}-\d{2}-\d{2})", match.group(1), re.M)
211
+ if found:
212
+ try:
213
+ updated = datetime.datetime.strptime(found.group(1), "%Y-%m-%d").replace(tzinfo=datetime.timezone.utc)
214
+ source = "updated"
215
+ except ValueError:
216
+ updated = None
217
+ if updated is None:
218
+ try:
219
+ updated = datetime.datetime.fromtimestamp(path.stat().st_mtime, datetime.timezone.utc)
220
+ except OSError:
221
+ return None
222
+ age = (datetime.datetime.now(datetime.timezone.utc) - updated).total_seconds() / 86400
223
+ if age <= threshold:
224
+ return None
225
+ return f"OLD NOTES — {path}, {age:.0f} days old, source {source}, threshold {threshold:g} days"
226
+
227
+
228
+ def render_topology(start, root, depth, failures, packet=False):
152
229
  output = ["## TOPOLOGY TRACE", f"root: {root}", f"start: {start}"]
153
230
  nodes, error = ascent(start, root)
154
231
  if error:
@@ -161,12 +238,21 @@ def render_topology(start, root, depth, failures):
161
238
  if text is None:
162
239
  output.append(f"\n### {label}\nMISSING LINK — {chain_file}")
163
240
  continue
164
- body = text.strip() if depth == "full" else light_learned(text)
241
+ if depth == "full":
242
+ body = text.strip()
243
+ elif packet and node == nodes[-1]:
244
+ # The seat's own file: its job and standing duties as text.
245
+ body = by_section(text, DUTY_HEADINGS, chain_file)
246
+ else:
247
+ body = light_learned(text)
165
248
  output.append(f"\n### {label} · LEARNED.md\n{body}")
249
+ cue = age_cue(chain_file, text) if packet else None
250
+ if cue:
251
+ output.append(cue)
166
252
  return "\n".join(output)
167
253
 
168
254
 
169
- def render_work(start, root, depth, failures, fallback=None):
255
+ def render_work(start, root, depth, failures, fallback=None, packet=False):
170
256
  output = ["## WORK TRACE", f"root: {root}", f"start: {start}"]
171
257
  if fallback:
172
258
  output.append(f"FALLBACK — {fallback}")
@@ -201,6 +287,19 @@ def render_work(start, root, depth, failures, fallback=None):
201
287
  output.append(f"NOTES RESOLUTION GAP — resolved {notes_name} became unreadable at {notes_path}")
202
288
  else:
203
289
  output.append(f"\nNOTES · {notes_name}\n{notes_text.strip()}")
290
+ cue = age_cue(notes_path, notes_text) if packet else None
291
+ if cue:
292
+ output.append(cue)
293
+ elif packet:
294
+ notes_text = read(notes_path)
295
+ if notes_text is None:
296
+ failures.append(f"unreadable notes: {notes_path}")
297
+ output.append(f"NOTES RESOLUTION GAP — resolved {notes_name} became unreadable at {notes_path}")
298
+ else:
299
+ output.append(f"\nNOTES · {notes_name}\n{by_section(notes_text, NOTES_STATE_HEADINGS, notes_path)}")
300
+ cue = age_cue(notes_path, notes_text)
301
+ if cue:
302
+ output.append(cue)
204
303
  else:
205
304
  try:
206
305
  size = notes_path.stat().st_size
@@ -211,9 +310,107 @@ def render_work(start, root, depth, failures, fallback=None):
211
310
  output.append(f"NOTES · {notes_name} · {size} bytes · {notes_path}")
212
311
  else:
213
312
  output.append(f"NOTES GAP — no readable mission notes at {node}")
313
+
314
+ # The SDLC convention keeps a node's current delivery state in PROGRESS.md; carry it
315
+ # as text when present. Its absence is not a gap: many nodes have no PROGRESS.md.
316
+ progress_path = node / "PROGRESS.md"
317
+ progress_text = read(progress_path) if packet else None
318
+ if progress_text is not None:
319
+ progress_body = progress_text.strip() if depth == "full" else by_section(progress_text, NOTES_STATE_HEADINGS, progress_path)
320
+ output.append(f"\nPROGRESS · PROGRESS.md\n{progress_body}")
321
+ cue = age_cue(progress_path, progress_text)
322
+ if cue:
323
+ output.append(cue)
324
+ return "\n".join(output)
325
+
326
+
327
+ def candidate_line(candidate):
328
+ name = candidate.get("mission") or "?"
329
+ if candidate.get("slice"):
330
+ name += f" / {candidate['slice']}"
331
+ intent_text = candidate.get("intent") or "no readable intent"
332
+ line = f"- {name} — {intent_text} — source: {candidate.get('source') or 'unknown'}"
333
+ if candidate.get("unresolved"):
334
+ line += f" — UNRESOLVED ON THIS HOST: {candidate['unresolved']}"
335
+ return line
336
+
337
+
338
+ def render_held_and_next(evidence):
339
+ output = []
340
+ held = evidence.get("held") or []
341
+ if held:
342
+ output.append("HELD WORK (blocked; this is not next):")
343
+ for row in held:
344
+ output.append(f"- {row.get('qitemId') or 'a row'} — {row.get('summary') or 'no summary'} — "
345
+ f"blocked on {row.get('blockedOn') or 'unknown'} — "
346
+ f"continuation: {row.get('continuation') or 'none recorded'}")
347
+ following = evidence.get("next") or []
348
+ if following:
349
+ output.append("POSSIBLE NEXT WORK (pending; no order implied):")
350
+ for row in following:
351
+ missions = ", ".join(row.get("missions") or [])
352
+ output.append(f"- {row.get('qitemId') or 'a row'} — {row.get('summary') or 'no summary'}"
353
+ + (f" [mission: {missions}]" if missions else ""))
354
+ if evidence.get("heldAndNextTruncated"):
355
+ output.append("(held and next lists were cut; `rig queue list` has the rest)")
214
356
  return "\n".join(output)
215
357
 
216
358
 
359
+ def render_candidates(evidence, root, depth, failures):
360
+ """The work section from labelled queue evidence. One direct, resolved tag is shown as the
361
+ work with its source; anything less certain lists every candidate and asks the agent."""
362
+ candidates = evidence.get("candidates") or []
363
+ unknown = evidence.get("unknown") or []
364
+ if (len(candidates) == 1 and not unknown and candidates[0].get("kind") == "tag"
365
+ and candidates[0].get("workNodePath") and not candidates[0].get("unresolved")):
366
+ only = candidates[0]
367
+ notes = [f"WORK FROM QUEUE EVIDENCE — {only.get('source')}. If this is stale, say what you are actually doing."]
368
+ if not only.get("slice"):
369
+ notes.append("no slice named")
370
+ traced = render_work(Path(only["workNodePath"]), root, depth, failures, packet=True)
371
+ head, _, rest = traced.partition("\n")
372
+ return "\n".join([head, *notes, rest])
373
+
374
+ missions_root = evidence.get("missionsRoot") or str(root / "missions")
375
+ output = ["## WORK — name it"]
376
+ if not candidates and not unknown:
377
+ output.append("No in-progress queue row names your work. If you are working from messages, "
378
+ "name the mission they belong to; if you have no current work, say so.")
379
+ elif len(candidates) > 1:
380
+ output.append(f"{len(candidates)} candidates are in flight. Say which mission you are actually working on.")
381
+ else:
382
+ output.append("The queue evidence does not settle your work. Confirm a candidate or name your mission.")
383
+ if candidates:
384
+ output.append("Candidates (evidence, not a verdict; none is adopted for you):")
385
+ output.extend(candidate_line(candidate) for candidate in candidates)
386
+ if unknown:
387
+ output.append("In-progress rows the queue cannot place:")
388
+ output.extend(f"- {row.get('qitemId') or 'a row'} — {row.get('summary') or 'no summary'}: {row.get('reason')}"
389
+ for row in unknown)
390
+ if not candidates:
391
+ names = evidence.get("missionsOnHost") or []
392
+ if names:
393
+ listing = ", ".join(names) + (", …" if evidence.get("missionsOnHostTruncated") else "")
394
+ output.append(f"Missions on this host: {listing}")
395
+ output.append("Then read that mission's current intent as text:")
396
+ output.append(f" python3 {Path(__file__).resolve()} --trees work --packet --work-start {missions_root}/<mission>")
397
+ orientation = render_work(root, root, "light", failures, packet=True)
398
+ _, _, rest = orientation.partition("\n")
399
+ output.append("\n## ORIENTATION — the project-level chain, not your work\n" + rest.lstrip("\n"))
400
+ return "\n".join(output)
401
+
402
+
403
+ def read_candidates(source):
404
+ try:
405
+ raw = sys.stdin.read() if source == "-" else Path(source).read_text(encoding="utf8")
406
+ evidence = json.loads(raw)
407
+ except (OSError, json.JSONDecodeError) as error:
408
+ return None, f"work candidates unreadable: {error}"
409
+ if not isinstance(evidence, dict) or not isinstance(evidence.get("candidates", []), list):
410
+ return None, "work candidates have an invalid shape"
411
+ return evidence, None
412
+
413
+
217
414
  def canonical_seat(session):
218
415
  """(member, rig) for a canonical session name, else None so the caller asks `rig whoami`.
219
416
 
@@ -279,6 +476,8 @@ def main():
279
476
  parser.add_argument("--work-basis", help="the daemon's reason no current work node was named")
280
477
  parser.add_argument("--work-unknown", help="why the current work node could not be read")
281
478
  parser.add_argument("--check", action="store_true", help="exit nonzero on trace or notes resolution failure; rendered text is unchanged")
479
+ parser.add_argument("--packet", action="store_true", help="carry duties and notes as text by section, with old-notes cues")
480
+ parser.add_argument("--work-candidates", help="labelled work evidence as JSON (a path, or - for stdin), from `rig queue whoami --work-candidates`")
282
481
  args = parser.parse_args()
283
482
 
284
483
  sections = []
@@ -293,7 +492,7 @@ def main():
293
492
  sections.append(gap("## TOPOLOGY TRACE\nTRACE GAP — topology.root is unresolved"))
294
493
  else:
295
494
  start = Path(args.topology_start) if args.topology_start else derive_topology_start(root)
296
- sections.append(render_topology(start, root, args.depth, failures) if start else
495
+ sections.append(render_topology(start, root, args.depth, failures, packet=args.packet) if start else
297
496
  gap("## TOPOLOGY TRACE\nTRACE GAP — current topology node is unresolved; pass --topology-start with a literal absolute path (or configure OPENRIG_REFOCUS_TOPOLOGY_NODE separately)"))
298
497
 
299
498
  if args.trees in {"work", "both"}:
@@ -304,10 +503,19 @@ def main():
304
503
  # Precedence: an explicit start wins; then the hook's daemon answer (basis or unknown);
305
504
  # only a standalone run with neither falls back to inferring from the working directory.
306
505
  explicit = args.work_start or os.environ.get("OPENRIG_REFOCUS_WORK_NODE")
506
+ evidence = None
507
+ if args.work_candidates:
508
+ evidence, error = read_candidates(args.work_candidates)
509
+ if error:
510
+ sections.append(gap(f"## WORK TRACE\nTRACE GAP — {error}"))
307
511
  if explicit:
308
- sections.append(render_work(Path(explicit), root, args.depth, failures))
512
+ sections.append(render_work(Path(explicit), root, args.depth, failures, packet=args.packet))
513
+ elif evidence is not None:
514
+ sections.append(render_candidates(evidence, root, args.depth, failures))
515
+ elif args.work_candidates:
516
+ pass # the unreadable-evidence gap above is the answer; never fall back to the root
309
517
  elif args.work_basis == NO_CURRENT_BATON_BASIS:
310
- sections.append(render_work(root, root, args.depth, failures, fallback=(
518
+ sections.append(render_work(root, root, args.depth, failures, packet=args.packet, fallback=(
311
519
  f"no current typed baton ({args.work_basis}). Showing the project-level chain from the work root: "
312
520
  "a broad orientation, not evidence of a current mission")))
313
521
  elif args.work_basis:
@@ -316,8 +524,11 @@ def main():
316
524
  sections.append(gap(f"## WORK TRACE\nTRACE GAP — current work node UNKNOWN: {args.work_unknown}"))
317
525
  else:
318
526
  start = derive_work_start(root)
319
- sections.append(render_work(start, root, args.depth, failures) if start else
527
+ sections.append(render_work(start, root, args.depth, failures, packet=args.packet) if start else
320
528
  gap("## WORK TRACE\nTRACE GAP — current work node is unresolved; pass --work-start with a literal absolute path (or configure OPENRIG_REFOCUS_WORK_NODE separately)"))
529
+ held_and_next = render_held_and_next(evidence) if evidence else ""
530
+ if held_and_next:
531
+ sections.append(held_and_next)
321
532
 
322
533
  print("\n\n".join(sections))
323
534
  return 1 if args.check and failures else 0
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "retiring-and-inheriting-a-seat"
4
- version: "0.6.7"
4
+ version: "0.6.9"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when you are a sitting agent near your context threshold (~85%) and a PLANNED seat transition is due — retire deliberately and hand your seat to a fresh successor primed from a packet, rather than let compaction degrade you. Covers the handover packet, the append-only lineage ledger (one row per tenure), physical-seat continuity, the do-not-over-inherit framing, the optional warm-handoff window, and wake-v0 (consulting a retired predecessor). NOT for unplanned compaction/crash recovery (sess"
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "seat-continuity-and-handover"
4
- version: "0.6.7"
4
+ version: "0.6.9"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when replacing a seat's occupant (rebuild/handover/swap), reasoning about stable-seat-identity vs fluid-occupant-identity, choosing an old-occupant disposition (retire/advise/shadow), or recording provenance for an occupant change. Two independent outcomes (continuityOutcome + seatBindingOutcome) and the 5 failure modes that prevent silent dishonesty."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "session-compaction-and-restore"
4
- version: "0.6.7"
4
+ version: "0.6.9"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when reasoning about what survives compaction/context-loss/restart/seat-refresh, designing a high-fidelity restore packet, or distinguishing native runtime resume vs fork vs artifact-backed mental-model rebuild. Covers the 4 failure modes that prevent honest restore (compacted seat drops hot potato; restore packet preserves details but loses product intent; runtime resume mistaken for handover or fork; rebuilt seat starts with stale instructions)."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "software-for-agents"
4
- version: "0.6.7"
4
+ version: "0.6.9"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when older OpenRig instructions name software-for-agents or describe agent-in-the-middle or studio software under the former skill name."
7
7
  files:
@@ -1,5 +1,5 @@
1
1
  name: world-example
2
- version: "0.6.7"
2
+ version: "0.6.9"
3
3
  taxonomy: world
4
4
  purpose: "A fill-in template showing the anatomy of an OpenRig world pack."
5
5
  files:
@@ -1,5 +1,5 @@
1
1
  name: world-public
2
- version: "0.6.7"
2
+ version: "0.6.9"
3
3
  taxonomy: world
4
4
  purpose: "A portable operating-world primer that derives volatile facts and teaches agents to author their own world."
5
5
  files:
@@ -1,9 +1,9 @@
1
1
  // GENERATED by scripts/build-package.sh — the packaged build-identity stamp.
2
2
  export const BUILD_INFO = {
3
- semver: "0.6.7",
4
- commit: "b3c3c8575f2a646c07ecc49bbf07927473effc9d",
3
+ semver: "0.6.9",
4
+ commit: "4b48ca21a9bd072aa05a08b3da6d9c0708e093c5",
5
5
  dirty: false,
6
- builtAt: "2026-10-08T11:56:22Z",
6
+ builtAt: "2026-10-09T08:59:39Z",
7
7
  };
8
8
  export function stampFields(info = BUILD_INFO) {
9
9
  if (!info.commit) return {};
@@ -1 +1 @@
1
- {"version":3,"file":"all-migrations.d.ts","sourceRoot":"","sources":["../../src/db/all-migrations.ts"],"names":[],"mappings":"AAkGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAM9C,0EAA0E;AAE1E,eAAO,MAAM,cAAc,EAAE,SAAS,EAiGrC,CAAC"}
1
+ {"version":3,"file":"all-migrations.d.ts","sourceRoot":"","sources":["../../src/db/all-migrations.ts"],"names":[],"mappings":"AAkGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,0EAA0E;AAE1E,eAAO,MAAM,cAAc,EAAE,SAAS,EAkGrC,CAAC"}
@@ -98,6 +98,7 @@ import { usageSamplesLatestIndexesSchema } from "./migrations/094_usage_samples_
98
98
  import { rigNonInterruptiveSchema } from "./migrations/095_rig_non_interruptive.js";
99
99
  import { rigInstallRootSchema } from "./migrations/096_rig_install_root.js";
100
100
  import { threadPartMapSchema } from "./migrations/097_thread_part_map.js";
101
+ import { queueTransitionsQitemIdOrderSchema } from "./migrations/098_queue_transitions_qitem_id_order.js";
101
102
  /** Ordered migrations; numbers may be reserved by independent changes. */
102
103
  export const ALL_MIGRATIONS = [
103
104
  coreSchema,
@@ -196,5 +197,6 @@ export const ALL_MIGRATIONS = [
196
197
  rigNonInterruptiveSchema,
197
198
  rigInstallRootSchema,
198
199
  threadPartMapSchema,
200
+ queueTransitionsQitemIdOrderSchema,
199
201
  ];
200
202
  //# sourceMappingURL=all-migrations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"all-migrations.js","sourceRoot":"","sources":["../../src/db/all-migrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"all-migrations.js","sourceRoot":"","sources":["../../src/db/all-migrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Migration } from "../migrate.js";
2
+ export declare const queueTransitionsQitemIdOrderSchema: Migration;
3
+ //# sourceMappingURL=098_queue_transitions_qitem_id_order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"098_queue_transitions_qitem_id_order.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/098_queue_transitions_qitem_id_order.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAM/C,eAAO,MAAM,kCAAkC,EAAE,SAMhD,CAAC"}
@@ -0,0 +1,12 @@
1
+ // A row's latest transitions are read in insertion (transition_id) order, which the wall-clock
2
+ // ts cannot stand in for when the clock moves backwards. idx_queue_transitions_qitem
3
+ // (qitem_id, ts) orders by ts, so a newest-first read by transition_id sorted the row's whole
4
+ // history. This index makes it a bounded reverse seek (OPR.0.7.0.12, the held row's park).
5
+ export const queueTransitionsQitemIdOrderSchema = {
6
+ name: "098_queue_transitions_qitem_id_order.sql",
7
+ sql: `
8
+ CREATE INDEX IF NOT EXISTS idx_queue_transitions_qitem_id_order
9
+ ON queue_transitions(qitem_id, transition_id);
10
+ `,
11
+ };
12
+ //# sourceMappingURL=098_queue_transitions_qitem_id_order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"098_queue_transitions_qitem_id_order.js","sourceRoot":"","sources":["../../../src/db/migrations/098_queue_transitions_qitem_id_order.ts"],"names":[],"mappings":"AAEA,+FAA+F;AAC/F,qFAAqF;AACrF,8FAA8F;AAC9F,2FAA2F;AAC3F,MAAM,CAAC,MAAM,kCAAkC,GAAc;IAC3D,IAAI,EAAE,0CAA0C;IAChD,GAAG,EAAE;;;GAGJ;CACF,CAAC"}
@@ -33,7 +33,9 @@ import type { SettingsStore } from "./user-settings/settings-store.js";
33
33
  * atomic publication of that completed artifact, within the preparation deadline.
34
34
  * - Post-compact restore: after a successful auto-compact, the enforcer
35
35
  * first sends a turn-boundary handshake once context usage drops below
36
- * threshold, then sends the restore prompt on a later polling tick.
36
+ * threshold, or when the latest sample is stale or unknown (a seat that
37
+ * takes no turn after /compact never refreshes its sample), then sends the
38
+ * restore prompt on a later polling tick.
37
39
  * This is intentionally active because Claude hooks can provide
38
40
  * context, but they do not create a new assistant turn by themselves.
39
41
  */
@@ -83,7 +85,7 @@ export type ManualCompactionOutcome = {
83
85
  reason: string;
84
86
  preparation?: Pick<PreparationState, "attemptId" | "mapPath" | "delivery">;
85
87
  };
86
- export type EnforcerSkipReason = "typing_guard_enabled" | "guard_target_unknown" | "guard_target_changed" | "runtime_filter" | "no_usage_data" | "disabled" | "below_threshold" | "already_triggered_above_threshold" | "dedup_window" | "post_restore_cooldown" | "send_failed" | "invalid_policy" | "stale_generation" | "preparation_pending" | "preparation_incomplete" | "preparation_stopped" | "occupant_generation_unavailable";
88
+ export type EnforcerSkipReason = "typing_guard_enabled" | "guard_target_unknown" | "guard_target_changed" | "runtime_filter" | "no_usage_data" | "disabled" | "below_threshold" | "already_triggered_above_threshold" | "dedup_window" | "post_restore_cooldown" | "send_failed" | "invalid_policy" | "stale_generation" | "preparation_pending" | "preparation_incomplete" | "preparation_stopped" | "occupant_generation_unavailable" | "no_pending_stage";
87
89
  export declare function buildCompactCommand(compactInstruction: string): string;
88
90
  export declare function buildPostCompactRestorePrompt(input: {
89
91
  sessionName: string;
@@ -147,6 +149,25 @@ export declare class ClaudeCompactionEnforcer {
147
149
  * with a skip reason and never touch SessionTransport.
148
150
  */
149
151
  maybeAutoCompact(input: EnforcerInput): Promise<EnforcerOutcome>;
152
+ /** True while a post-compact stage (turn boundary, restore or audit) is still owed to this seat. */
153
+ hasPendingPostCompactStage(sessionName: string): boolean;
154
+ /**
155
+ * Drain a post-compact stage that is already pending, without a usage sample. ContextMonitor
156
+ * calls this when the latest sample is stale or unknown. Such a sample never starts a
157
+ * compaction, but a seat that takes no turn after /compact never refreshes its sample, so
158
+ * waiting for a fresh one can leave it unrestored. The same gates and the same
159
+ * one-stage-per-tick progression apply as on the sampled path. Each send waits for the pane
160
+ * itself to read idle: the newest hook can be the Stop from before /compact, so no hook counts
161
+ * as proof that compaction finished. No width receipt is recorded, because no current usage is
162
+ * known.
163
+ */
164
+ drainPendingPostCompactStage(input: Omit<EnforcerInput, "usedPercentage">): Promise<EnforcerOutcome>;
165
+ private withDeliveryGuard;
166
+ /**
167
+ * Gate and send the pending post-compact stage, one stage per call. Returns null when no stage
168
+ * is pending, so the sampled path can run its below-threshold bookkeeping.
169
+ */
170
+ private drainPendingStage;
150
171
  private maybeAutoCompactUnchecked;
151
172
  /**
152
173
  * OPR.0.4.3.14 — MANUAL, operator-initiated compaction for ONE Claude seat.
@@ -1 +1 @@
1
- {"version":3,"file":"claude-compaction-enforcer.d.ts","sourceRoot":"","sources":["../../src/domain/claude-compaction-enforcer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-compaction-enforcer.d.ts","sourceRoot":"","sources":["../../src/domain/claude-compaction-enforcer.ts"],"names":[],"mappings":"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"}