@telora/daemon 0.24.29 → 0.24.38

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 (239) hide show
  1. package/build-info.json +5 -3
  2. package/dist/backends/index.js +1 -1
  3. package/dist/ci/gate-job-conclusion.d.ts +88 -0
  4. package/dist/ci/gate-job-conclusion.d.ts.map +1 -0
  5. package/dist/ci/gate-job-conclusion.js +207 -0
  6. package/dist/ci/gate-job-conclusion.js.map +1 -0
  7. package/dist/ci/gate-ref.d.ts +12 -0
  8. package/dist/ci/gate-ref.d.ts.map +1 -1
  9. package/dist/ci/gate-ref.js +2 -0
  10. package/dist/ci/gate-ref.js.map +1 -1
  11. package/dist/completion/completion-event/detector.d.ts.map +1 -1
  12. package/dist/completion/completion-event/detector.js +1 -0
  13. package/dist/completion/completion-event/detector.js.map +1 -1
  14. package/dist/completion/completion-event/event.d.ts +7 -0
  15. package/dist/completion/completion-event/event.d.ts.map +1 -1
  16. package/dist/completion/completion-event/event.js +1 -0
  17. package/dist/completion/completion-event/event.js.map +1 -1
  18. package/dist/completion/team-outcome/apply-turn.d.ts.map +1 -1
  19. package/dist/completion/team-outcome/apply-turn.js +11 -6
  20. package/dist/completion/team-outcome/apply-turn.js.map +1 -1
  21. package/dist/completion/team-outcome/decide-turn-entry-rows.js +1 -1
  22. package/dist/completion/team-outcome/decide-turn-entry-rows.js.map +1 -1
  23. package/dist/completion/team-outcome/exit-pipeline-state.d.ts +6 -0
  24. package/dist/completion/team-outcome/exit-pipeline-state.d.ts.map +1 -1
  25. package/dist/completion/team-outcome/exit-pipeline-state.js.map +1 -1
  26. package/dist/completion/team-outcome/work-facts.d.ts +8 -1
  27. package/dist/completion/team-outcome/work-facts.d.ts.map +1 -1
  28. package/dist/completion/team-outcome/work-facts.js +10 -5
  29. package/dist/completion/team-outcome/work-facts.js.map +1 -1
  30. package/dist/completion/team-progress/team-progress-measure.d.ts.map +1 -1
  31. package/dist/completion/team-progress/team-progress-measure.js +1 -0
  32. package/dist/completion/team-progress/team-progress-measure.js.map +1 -1
  33. package/dist/composition/completion-event-context.d.ts.map +1 -1
  34. package/dist/composition/completion-event-context.js +3 -0
  35. package/dist/composition/completion-event-context.js.map +1 -1
  36. package/dist/composition/execution-spawn-context.d.ts.map +1 -1
  37. package/dist/composition/execution-spawn-context.js +4 -0
  38. package/dist/composition/execution-spawn-context.js.map +1 -1
  39. package/dist/composition/execution-spawn-process-context.js +1 -1
  40. package/dist/composition/execution-spawn-process-context.js.map +1 -1
  41. package/dist/composition/runtime-delivery-advance-context.js +1 -1
  42. package/dist/composition/runtime-delivery-advance-context.js.map +1 -1
  43. package/dist/composition/runtime-spawn-pass-context.d.ts.map +1 -1
  44. package/dist/composition/runtime-spawn-pass-context.js +5 -2
  45. package/dist/composition/runtime-spawn-pass-context.js.map +1 -1
  46. package/dist/composition/tower-escalation-context.d.ts +3 -0
  47. package/dist/composition/tower-escalation-context.d.ts.map +1 -1
  48. package/dist/composition/tower-escalation-context.js +26 -12
  49. package/dist/composition/tower-escalation-context.js.map +1 -1
  50. package/dist/composition/verification-context.d.ts.map +1 -1
  51. package/dist/composition/verification-context.js +13 -2
  52. package/dist/composition/verification-context.js.map +1 -1
  53. package/dist/composition/verify-probe-context.d.ts +15 -1
  54. package/dist/composition/verify-probe-context.d.ts.map +1 -1
  55. package/dist/composition/verify-probe-context.js +45 -4
  56. package/dist/composition/verify-probe-context.js.map +1 -1
  57. package/dist/daemon-state/focus-team-state.js +1 -1
  58. package/dist/delivery/operator-hold.d.ts.map +1 -1
  59. package/dist/delivery/operator-hold.js +5 -3
  60. package/dist/delivery/operator-hold.js.map +1 -1
  61. package/dist/focus/ready-focus-team-work.d.ts +11 -0
  62. package/dist/focus/ready-focus-team-work.d.ts.map +1 -1
  63. package/dist/focus/ready-focus-team-work.js +8 -1
  64. package/dist/focus/ready-focus-team-work.js.map +1 -1
  65. package/dist/prompt/focus-prompt-builder.d.ts +7 -1
  66. package/dist/prompt/focus-prompt-builder.d.ts.map +1 -1
  67. package/dist/prompt/focus-prompt-builder.js +36 -11
  68. package/dist/prompt/focus-prompt-builder.js.map +1 -1
  69. package/dist/prompt-sections/ci-failed-step-section.d.ts +16 -0
  70. package/dist/prompt-sections/ci-failed-step-section.d.ts.map +1 -0
  71. package/dist/prompt-sections/ci-failed-step-section.js +20 -0
  72. package/dist/prompt-sections/ci-failed-step-section.js.map +1 -0
  73. package/dist/prompt-sections/prompt-listing.d.ts +3 -0
  74. package/dist/prompt-sections/prompt-listing.d.ts.map +1 -1
  75. package/dist/prompt-sections/prompt-listing.js +11 -1
  76. package/dist/prompt-sections/prompt-listing.js.map +1 -1
  77. package/dist/prompt-sections/routing-decider-sections.d.ts +7 -0
  78. package/dist/prompt-sections/routing-decider-sections.d.ts.map +1 -1
  79. package/dist/prompt-sections/routing-decider-sections.js +22 -0
  80. package/dist/prompt-sections/routing-decider-sections.js.map +1 -1
  81. package/dist/prompt-sections/session-constraints-section.d.ts.map +1 -1
  82. package/dist/prompt-sections/session-constraints-section.js +12 -2
  83. package/dist/prompt-sections/session-constraints-section.js.map +1 -1
  84. package/dist/queries/api-client/shared.js +1 -1
  85. package/dist/queries/delivery-gate-state/delivery-gate-holds.d.ts.map +1 -1
  86. package/dist/queries/delivery-gate-state/delivery-gate-holds.js +2 -1
  87. package/dist/queries/delivery-gate-state/delivery-gate-holds.js.map +1 -1
  88. package/dist/queries/delivery-gate-state/delivery-gate-state.d.ts +13 -0
  89. package/dist/queries/delivery-gate-state/delivery-gate-state.d.ts.map +1 -1
  90. package/dist/queries/delivery-gate-state/delivery-gate-state.js +3 -1
  91. package/dist/queries/delivery-gate-state/delivery-gate-state.js.map +1 -1
  92. package/dist/queries/escalations/filing-observation.d.ts +24 -1
  93. package/dist/queries/escalations/filing-observation.d.ts.map +1 -1
  94. package/dist/queries/escalations/filing-observation.js +27 -2
  95. package/dist/queries/escalations/filing-observation.js.map +1 -1
  96. package/dist/queries/escalations/tower-escalations.d.ts +21 -0
  97. package/dist/queries/escalations/tower-escalations.d.ts.map +1 -1
  98. package/dist/queries/escalations/tower-escalations.js +24 -0
  99. package/dist/queries/escalations/tower-escalations.js.map +1 -1
  100. package/dist/queries/focus-review/review-criterion-verdicts.d.ts.map +1 -1
  101. package/dist/queries/focus-review/review-criterion-verdicts.js +3 -0
  102. package/dist/queries/focus-review/review-criterion-verdicts.js.map +1 -1
  103. package/dist/queries/focus-review/review-summary-verdicts.d.ts +50 -0
  104. package/dist/queries/focus-review/review-summary-verdicts.d.ts.map +1 -0
  105. package/dist/queries/focus-review/review-summary-verdicts.js +117 -0
  106. package/dist/queries/focus-review/review-summary-verdicts.js.map +1 -0
  107. package/dist/queries/focuses/focuses.d.ts.map +1 -1
  108. package/dist/queries/focuses/focuses.js +2 -0
  109. package/dist/queries/focuses/focuses.js.map +1 -1
  110. package/dist/queries/reality-tree/reality-tree.d.ts.map +1 -1
  111. package/dist/queries/reality-tree/reality-tree.js +1 -0
  112. package/dist/queries/reality-tree/reality-tree.js.map +1 -1
  113. package/dist/queries/reality-tree/shortfall-node-bindings.d.ts +42 -0
  114. package/dist/queries/reality-tree/shortfall-node-bindings.d.ts.map +1 -0
  115. package/dist/queries/reality-tree/shortfall-node-bindings.js +42 -0
  116. package/dist/queries/reality-tree/shortfall-node-bindings.js.map +1 -0
  117. package/dist/queries/tower-decisions/tower-decisions.d.ts +3 -1
  118. package/dist/queries/tower-decisions/tower-decisions.d.ts.map +1 -1
  119. package/dist/queries/tower-decisions/tower-decisions.js +1 -0
  120. package/dist/queries/tower-decisions/tower-decisions.js.map +1 -1
  121. package/dist/spawn/helpers.d.ts.map +1 -1
  122. package/dist/spawn/helpers.js +1 -0
  123. package/dist/spawn/helpers.js.map +1 -1
  124. package/dist/spawn/idle-work-stamp.d.ts +8 -0
  125. package/dist/spawn/idle-work-stamp.d.ts.map +1 -1
  126. package/dist/spawn/idle-work-stamp.js +2 -1
  127. package/dist/spawn/idle-work-stamp.js.map +1 -1
  128. package/dist/spawn/lead-continuation.d.ts +8 -0
  129. package/dist/spawn/lead-continuation.d.ts.map +1 -1
  130. package/dist/spawn/lead-continuation.js +14 -5
  131. package/dist/spawn/lead-continuation.js.map +1 -1
  132. package/dist/supervision/holds.d.ts +78 -15
  133. package/dist/supervision/holds.d.ts.map +1 -1
  134. package/dist/supervision/holds.js +167 -87
  135. package/dist/supervision/holds.js.map +1 -1
  136. package/dist/supervision/operator-held-work.d.ts +48 -0
  137. package/dist/supervision/operator-held-work.d.ts.map +1 -0
  138. package/dist/supervision/operator-held-work.js +33 -0
  139. package/dist/supervision/operator-held-work.js.map +1 -0
  140. package/dist/supervision/stop-rows-delivery.d.ts.map +1 -1
  141. package/dist/supervision/stop-rows-delivery.js +3 -1
  142. package/dist/supervision/stop-rows-delivery.js.map +1 -1
  143. package/dist/supervision/team-work.d.ts +32 -1
  144. package/dist/supervision/team-work.d.ts.map +1 -1
  145. package/dist/supervision/team-work.js +44 -4
  146. package/dist/supervision/team-work.js.map +1 -1
  147. package/dist/templates/agents-md.d.ts.map +1 -1
  148. package/dist/templates/agents-md.js +1 -0
  149. package/dist/templates/agents-md.js.map +1 -1
  150. package/dist/templates/claude-md.d.ts +1 -1
  151. package/dist/templates/claude-md.d.ts.map +1 -1
  152. package/dist/templates/claude-md.js +11 -1
  153. package/dist/templates/claude-md.js.map +1 -1
  154. package/dist/testing/fixtures/api-client.js +1 -1
  155. package/dist/testing/fixtures/completion-event-deps.d.ts.map +1 -1
  156. package/dist/testing/fixtures/completion-event-deps.js +4 -1
  157. package/dist/testing/fixtures/completion-event-deps.js.map +1 -1
  158. package/dist/testing/fixtures/index.js +1 -1
  159. package/dist/testing/fixtures/tower-shortfall-7bac4c82.d.ts +38 -0
  160. package/dist/testing/fixtures/tower-shortfall-7bac4c82.d.ts.map +1 -0
  161. package/dist/testing/fixtures/tower-shortfall-7bac4c82.js +67 -0
  162. package/dist/testing/fixtures/tower-shortfall-7bac4c82.js.map +1 -0
  163. package/dist/testing/fixtures/tower-shortfall-cd32119b.d.ts +79 -0
  164. package/dist/testing/fixtures/tower-shortfall-cd32119b.d.ts.map +1 -0
  165. package/dist/testing/fixtures/tower-shortfall-cd32119b.js +142 -0
  166. package/dist/testing/fixtures/tower-shortfall-cd32119b.js.map +1 -0
  167. package/dist/testing/fixtures/verification-deps.d.ts.map +1 -1
  168. package/dist/testing/fixtures/verification-deps.js +3 -0
  169. package/dist/testing/fixtures/verification-deps.js.map +1 -1
  170. package/dist/testing/fixtures/verification-feedback-deps.js +1 -1
  171. package/dist/tower/tower-escalation-gather.d.ts +24 -0
  172. package/dist/tower/tower-escalation-gather.d.ts.map +1 -1
  173. package/dist/tower/tower-escalation-gather.js +29 -1
  174. package/dist/tower/tower-escalation-gather.js.map +1 -1
  175. package/dist/tower/tower-escalation-prompt.d.ts +26 -1
  176. package/dist/tower/tower-escalation-prompt.d.ts.map +1 -1
  177. package/dist/tower/tower-escalation-prompt.js +76 -8
  178. package/dist/tower/tower-escalation-prompt.js.map +1 -1
  179. package/dist/tower/tower-escalation-routing.d.ts +27 -1
  180. package/dist/tower/tower-escalation-routing.d.ts.map +1 -1
  181. package/dist/tower/tower-escalation-routing.js +32 -3
  182. package/dist/tower/tower-escalation-routing.js.map +1 -1
  183. package/dist/tower/tower-escalation-session.d.ts +29 -6
  184. package/dist/tower/tower-escalation-session.d.ts.map +1 -1
  185. package/dist/tower/tower-escalation-session.js +27 -9
  186. package/dist/tower/tower-escalation-session.js.map +1 -1
  187. package/dist/tower/tower-escalation-shortfall.d.ts +158 -0
  188. package/dist/tower/tower-escalation-shortfall.d.ts.map +1 -0
  189. package/dist/tower/tower-escalation-shortfall.js +452 -0
  190. package/dist/tower/tower-escalation-shortfall.js.map +1 -0
  191. package/dist/tower/tower-supervisor-session.d.ts.map +1 -1
  192. package/dist/tower/tower-supervisor-session.js +1 -0
  193. package/dist/tower/tower-supervisor-session.js.map +1 -1
  194. package/dist/types/index.js +1 -1
  195. package/dist/verify/ci-gate/ci-gate-dispatch.d.ts +41 -0
  196. package/dist/verify/ci-gate/ci-gate-dispatch.d.ts.map +1 -1
  197. package/dist/verify/ci-gate/ci-gate-dispatch.js +148 -7
  198. package/dist/verify/ci-gate/ci-gate-dispatch.js.map +1 -1
  199. package/dist/verify/ci-gate/ci-gate-pin-publish.d.ts +101 -0
  200. package/dist/verify/ci-gate/ci-gate-pin-publish.d.ts.map +1 -0
  201. package/dist/verify/ci-gate/ci-gate-pin-publish.js +238 -0
  202. package/dist/verify/ci-gate/ci-gate-pin-publish.js.map +1 -0
  203. package/dist/verify/deterministic-gate/verification-deterministic.d.ts +3 -1
  204. package/dist/verify/deterministic-gate/verification-deterministic.d.ts.map +1 -1
  205. package/dist/verify/deterministic-gate/verification-deterministic.js.map +1 -1
  206. package/dist/verify/gate-verdicts/commit-verdict-record.d.ts +2 -0
  207. package/dist/verify/gate-verdicts/commit-verdict-record.d.ts.map +1 -1
  208. package/dist/verify/gate-verdicts/commit-verdict-record.js +10 -1
  209. package/dist/verify/gate-verdicts/commit-verdict-record.js.map +1 -1
  210. package/dist/verify/install-probe/in-repo-publish.d.ts +10 -0
  211. package/dist/verify/install-probe/in-repo-publish.d.ts.map +1 -1
  212. package/dist/verify/install-probe/in-repo-publish.js +15 -0
  213. package/dist/verify/install-probe/in-repo-publish.js.map +1 -1
  214. package/dist/verify/install-probe/install-probe-tick.d.ts +7 -0
  215. package/dist/verify/install-probe/install-probe-tick.d.ts.map +1 -1
  216. package/dist/verify/install-probe/install-probe-tick.js +4 -1
  217. package/dist/verify/install-probe/install-probe-tick.js.map +1 -1
  218. package/dist/verify/outcome-routing/verification-feedback.d.ts +5 -1
  219. package/dist/verify/outcome-routing/verification-feedback.d.ts.map +1 -1
  220. package/dist/verify/outcome-routing/verification-feedback.js +7 -1
  221. package/dist/verify/outcome-routing/verification-feedback.js.map +1 -1
  222. package/dist/verify/outcome-routing/verification-rework-messages.d.ts.map +1 -1
  223. package/dist/verify/outcome-routing/verification-rework-messages.js +7 -2
  224. package/dist/verify/outcome-routing/verification-rework-messages.js.map +1 -1
  225. package/dist/verify/shortfalls/shortfall-park-escalation.d.ts +9 -2
  226. package/dist/verify/shortfalls/shortfall-park-escalation.d.ts.map +1 -1
  227. package/dist/verify/shortfalls/shortfall-park-escalation.js +13 -1
  228. package/dist/verify/shortfalls/shortfall-park-escalation.js.map +1 -1
  229. package/dist/verify/shortfalls/shortfall-rulings.d.ts.map +1 -1
  230. package/dist/verify/shortfalls/shortfall-rulings.js +4 -0
  231. package/dist/verify/shortfalls/shortfall-rulings.js.map +1 -1
  232. package/dist/worktree/focus-worktree-state.d.ts.map +1 -1
  233. package/dist/worktree/focus-worktree-state.js +1 -0
  234. package/dist/worktree/focus-worktree-state.js.map +1 -1
  235. package/dist/worktree/verify-hold-facts.d.ts +3 -1
  236. package/dist/worktree/verify-hold-facts.d.ts.map +1 -1
  237. package/dist/worktree/verify-hold-facts.js +1 -0
  238. package/dist/worktree/verify-hold-facts.js.map +1 -1
  239. package/package.json +2 -2
@@ -1,6 +1,8 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
- // Pinned by: packages/daemon/src/tower/tower-escalation-prompt.test.ts
2
+ // Pinned by: packages/daemon/src/tower/tower-escalation-io-cases.test.ts,
3
+ // packages/daemon/src/tower/tower-escalation-prompt.test.ts
3
4
  // PINNED-BY-END
5
+ import { computeShortfallStanding, filingActOf, renderShortfallSection, SHORTFALL_RULING_ACT, } from './tower-escalation-shortfall.js';
4
6
  /** The last line the session prints (informational; the record decides). */
5
7
  export const TOWER_ESCALATION_LINE_PREFIX = 'TOWER DECISION:';
6
8
  function fence(text) {
@@ -49,9 +51,39 @@ function contextSection(ctx) {
49
51
  out.push('## What you were NOT given (a read failed)', '', ...ctx.readErrors.map((e) => `- ${e}`), '');
50
52
  return out;
51
53
  }
54
+ function ruleStep(ids) {
55
+ return [
56
+ `4. **RULE a verify shortfall** with \`telora_agent\` action "${SHORTFALL_RULING_ACT}" (${ids}, rulings`,
57
+ ' [{ nodeId, criterion }] -- the criterion VERBATIM as the record above quotes it --, summary, rationale (at most',
58
+ ' 2000 chars; it is recorded on the ruling), decisionEvidence { gateVerdict, reviewId, evidence }) when ALL hold:',
59
+ ' - the escalation asks for verify shortfall node(s) on this delivery to be ruled met -- or the team reports a',
60
+ ' shortfall verify keeps re-holding on unchanged commits (e.g. "no parseable judgment" loops that no code',
61
+ ' change answers);',
62
+ ' - the judged commit has a PASSING gate verdict;',
63
+ ' - the latest review under the arm judged that node\'s criterion MET with evidence -- by a verdict BOUND to',
64
+ ' the node: a tree verdict on the node itself, this delivery\'s criterion whose text IS the node\'s declared',
65
+ ' future, or a tree verdict on an effect the node is a sufficient cause of. Nothing else binds.',
66
+ ' Rule only the nodes the filing asks for: when it names nodes structurally, a node it does not name is not',
67
+ ' ruled and does not count for or against the ask. The record section above states the last two for you, and',
68
+ ' its standing line says whether they hold and names, per node, the ONE bound criterion to pass -- the server',
69
+ ' refuses any other. That one',
70
+ ' call records the ruling attributed to you, resolves the escalation as answered and records shortfall_ruled on',
71
+ ' the focus; verify then re-judges. It is the whole act: never follow it with an escalation_answer.',
72
+ ` DEFER instead (step 5) -- never call ${SHORTFALL_RULING_ACT} -- when ANY of these holds:`,
73
+ ' - the gate verdict for the judged commit is missing or failing;',
74
+ ' - the review verdict on the node\'s criterion is missing, not_met or excused -- or no review verdict',
75
+ ' identifies the node\'s criterion at all (a met criterion that is not BOUND to the node is not evidence it holds);',
76
+ ' - the ask would EXCUSE a criterion, or offers excusing it as an alternative ("met or excused"): an excuse is',
77
+ ' never a supervisor act;',
78
+ ' - the act is refused by the server: its message names why; defer citing it.',
79
+ ' An escalation that asks for something other than a shortfall ruling is judged by steps 3 and 5 alone.',
80
+ ];
81
+ }
52
82
  function instructionsSection(input) {
53
83
  const { escalation: e, supervisorSessionId: sid } = input;
54
84
  const ids = `escalationId "${e.escalationId}", agentSessionId "${sid}"`;
85
+ const shortfall = input.context.shortfallRecord !== null;
86
+ const deferStep = shortfall ? '5' : '4';
55
87
  return [
56
88
  '## What you do, in order',
57
89
  '',
@@ -68,30 +100,63 @@ function instructionsSection(input) {
68
100
  ' criteria: [the criteria it rests on], standingDecisions: [the entries it cites], alternatives: [what you',
69
101
  ' rejected and why] }. That one call resolves the escalation, records escalation_answered on the focus, and',
70
102
  ' the daemon hands your answer to the team (its live session now, or its next spawn).',
71
- '4. **DEFER it to the operator** with `telora_agent` action "escalation_defer" (' + ids + ', summary,',
103
+ ...(shortfall ? ruleStep(ids) : []),
104
+ `${deferStep}. **DEFER it to the operator** with \`telora_agent\` action "escalation_defer" (` + ids + ', summary,',
72
105
  ' rationale) -- the escalation then stands in the operator\'s inbox -- when any of these holds:',
73
106
  ' - it asks for a MAJOR NEW BUILD: a new capability, product surface or focus beyond what the arm covers;',
74
107
  ' - the intent is genuinely open: the focus and the standing decisions leave two readings that change the',
75
108
  ' outcome, and neither is clearly the team\'s scope;',
76
109
  ' - it needs a human act after all (something irreversible, outward, or a credential no agent reaches);',
110
+ ...(shortfall ? [' - it asks for a shortfall ruling the record does not support (step 4\'s DEFER list);'] : []),
77
111
  ' - you feel a human is needed. When in doubt between answering and deferring, DEFER.',
112
+ ...(shortfall
113
+ ? [' (A shortfall ruling is not decided by doubt: the record decides it, by step 4\'s closed list.)']
114
+ : []),
78
115
  '',
79
116
  ];
80
117
  }
81
- function boundariesSection() {
118
+ function boundariesSection(shortfall) {
119
+ const p = TOWER_ESCALATION_LINE_PREFIX;
82
120
  return [
83
121
  '## What you never do',
84
122
  '',
85
123
  '- You hold NO budget lever. You cannot grant review cycles, extend a budget, re-arm, un-arm or stop the',
86
124
  ' focus; your Telora tools do not offer it. An answer never widens the arm: new intent is the operator\'s.',
87
125
  '- You do not amend a criterion, write code, commit, or file a new escalation for this one: answering or',
88
- ' deferring THIS escalation is the whole act.',
126
+ ` deferring${shortfall ? ' (or ruling)' : ''} THIS escalation is the whole act.`,
89
127
  '- You do not lower the bar to unblock the team: an answer that drops a stamped criterion is a deferral.',
90
- '- You decide exactly once: one escalation_answer OR one escalation_defer.',
91
- '',
92
- `End with one line: \`${TOWER_ESCALATION_LINE_PREFIX} answered\` or \`${TOWER_ESCALATION_LINE_PREFIX} deferred\`.`,
128
+ ...(shortfall
129
+ ? [
130
+ ' A shortfall ruling admitted only on a passing gate verdict at the judged commit and a review that judged',
131
+ ' the node\'s criterion met with evidence does NOT lower the bar -- the record already shows the node met --',
132
+ ' so this line does not forbid it. Excusing a criterion does lower it, and is never yours.',
133
+ `- You decide exactly once: one escalation_answer OR one escalation_defer OR one ${SHORTFALL_RULING_ACT}.`,
134
+ ' The ruling resolves the escalation, so it is never followed by an answer.',
135
+ '',
136
+ `End with one line: \`${p} answered\`, \`${p} deferred\` or \`${p} ruled\`.`,
137
+ ]
138
+ : [
139
+ '- You decide exactly once: one escalation_answer OR one escalation_defer.',
140
+ '',
141
+ `End with one line: \`${p} answered\` or \`${p} deferred\`.`,
142
+ ]),
93
143
  ];
94
144
  }
145
+ /** Pure: the standing of the escalation's shortfall record, or null when it carries none. */
146
+ export function escalationShortfallStanding(input) {
147
+ const record = input.context.shortfallRecord;
148
+ if (record === null)
149
+ return null;
150
+ return computeShortfallStanding(record, {
151
+ helpNeeded: input.escalation.helpNeeded,
152
+ act: filingActOf(input.escalation.metadata),
153
+ });
154
+ }
155
+ function shortfallSection(input) {
156
+ const record = input.context.shortfallRecord;
157
+ const standing = escalationShortfallStanding(input);
158
+ return record === null || standing === null ? [] : renderShortfallSection(record, standing);
159
+ }
95
160
  /** Pure: the whole escalation prompt. */
96
161
  export function buildTowerEscalationPrompt(input) {
97
162
  const { focus } = input;
@@ -109,8 +174,9 @@ export function buildTowerEscalationPrompt(input) {
109
174
  '',
110
175
  ...escalationSection(input),
111
176
  ...contextSection(input.context),
177
+ ...shortfallSection(input),
112
178
  ...instructionsSection(input),
113
- ...boundariesSection(),
179
+ ...boundariesSection(input.context.shortfallRecord !== null),
114
180
  ].join('\n');
115
181
  }
116
182
  /** Pure: the decision the session's last line states, or null. Informational: the record decides. */
@@ -124,6 +190,8 @@ export function parseTowerEscalationLine(stdout) {
124
190
  return 'answered';
125
191
  if (word.startsWith('deferred'))
126
192
  return 'deferred';
193
+ if (word.startsWith('ruled'))
194
+ return 'ruled';
127
195
  }
128
196
  return null;
129
197
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tower-escalation-prompt.js","sourceRoot":"","sources":["../../src/tower/tower-escalation-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tower-escalation-prompt.js","sourceRoot":"","sources":["../../src/tower/tower-escalation-prompt.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,8 @@
7
7
  * -> the OPERATOR, with no supervisor session, when
8
8
  * human_act the filing names a human-only act (metadata.human_act
9
9
  * kind irreversible | outward | unreachable_capability):
10
- * no agent can perform it, so no agent should hold it;
10
+ * no agent can perform it, so no agent should hold it --
11
+ * EXCEPT a shortfall ruling (below);
11
12
  * external_wait the filing waits on a third party: not a judgement call;
12
13
  * unarmed the focus is no longer armed (no assigned agent role):
13
14
  * the supervisor decides within the scope an ARM authorised;
@@ -16,8 +17,25 @@
16
17
  * scope the team is solving for) or defers (a major new build, or it feels
17
18
  * a human is needed) is its judgement, told in tower/tower-escalation-prompt.ts.
18
19
  *
20
+ * THE SHORTFALL-RULING EXCEPTION. A filing whose human act IS a verify
21
+ * shortfall ruling goes to the SUPERVISOR (still subject to unarmed /
22
+ * focus_closed / external_wait), because the supervisor can rule an evidenced
23
+ * shortfall itself (escalation_tower_rule_shortfall) and defers when the record
24
+ * does not support it. It is recognised ONLY by the structured field
25
+ * metadata.human_act.shortfall_ruling.node_ids (mcp telora_agent
26
+ * humanAct.shortfallRuling, persisted by product-api escalation_create; read by
27
+ * shortfallRulingAskOf), never by matching the act prose, and only when:
28
+ * - the act's kind is unreachable_capability (a ruling is an authority act a
29
+ * team cannot reach; an irreversible or outward act carrying the field is
30
+ * still that act, so it goes to the operator), and
31
+ * - it names >= 1 well-formed node id, and
32
+ * - the filing carries a deliveryId (a ruling is recorded ON a delivery).
33
+ * Any other unreachable_capability act (a credential, control-plane state) is
34
+ * unchanged: the operator.
35
+ *
19
36
  * @module tower/tower-escalation-routing
20
37
  */
38
+ import { type ShortfallRulingAsk } from '../queries/escalations/filing-observation.js';
21
39
  /** The human-only act kinds (mcp telora_agent humanAct.kind). */
22
40
  export declare const HUMAN_ACT_KINDS: readonly string[];
23
41
  /** Why an escalation goes straight to the operator. */
@@ -38,12 +56,20 @@ export interface RoutingFacts {
38
56
  focus: {
39
57
  armed: boolean;
40
58
  } | null;
59
+ /** The escalation's delivery anchor. A shortfall ruling needs one; absent reads as none. */
60
+ deliveryId?: string | null;
41
61
  }
42
62
  /** Pure: the human-only act a filing names, or null. */
43
63
  export declare function humanActOf(metadata: Record<string, unknown>): {
44
64
  kind: string;
45
65
  act: string;
46
66
  } | null;
67
+ /**
68
+ * Pure: the structured shortfall ruling a filing asks for -- the well-formed
69
+ * metadata.human_act.shortfall_ruling on an unreachable_capability act -- or null.
70
+ * Reads the structured field only, never the act prose.
71
+ */
72
+ export declare function shortfallRulingAskOf(metadata: Record<string, unknown>): ShortfallRulingAsk | null;
47
73
  /** Pure: route one pending team escalation. */
48
74
  export declare function routeTeamEscalation(facts: RoutingFacts): TowerEscalationRoute;
49
75
  //# sourceMappingURL=tower-escalation-routing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tower-escalation-routing.d.ts","sourceRoot":"","sources":["../../src/tower/tower-escalation-routing.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,iEAAiE;AACjE,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAA0D,CAAC;AAExG,uDAAuD;AACvD,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,GAAG,cAAc,CAAC;AAE7F,yCAAyC;AACzC,MAAM,MAAM,oBAAoB,GAC5B;IAAE,KAAK,EAAE,YAAY,CAAA;CAAE,GACvB;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,kHAAkH;IAClH,KAAK,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CAClC;AAED,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMlG;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,oBAAoB,CAe7E"}
1
+ {"version":3,"file":"tower-escalation-routing.d.ts","sourceRoot":"","sources":["../../src/tower/tower-escalation-routing.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAErG,iEAAiE;AACjE,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAA0D,CAAC;AAExG,uDAAuD;AACvD,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,GAAG,cAAc,CAAC;AAE7F,yCAAyC;AACzC,MAAM,MAAM,oBAAoB,GAC5B;IAAE,KAAK,EAAE,YAAY,CAAA;CAAE,GACvB;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,kHAAkH;IAClH,KAAK,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACjC,4FAA4F;IAC5F,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMlG;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAEjG;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,oBAAoB,CAgB7E"}
@@ -1,5 +1,7 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
- // Pinned by: packages/daemon/src/tower/tower-escalation-prompt.test.ts
2
+ // Pinned by: packages/daemon/src/tower/tower-escalation-io-cases.test.ts,
3
+ // packages/daemon/src/tower/tower-escalation-prompt.test.ts,
4
+ // packages/daemon/src/tower/tower-escalation-routing.test.ts
3
5
  // PINNED-BY-END
4
6
  /**
5
7
  * THE ROUTING TABLE for a team escalation pending on the Tower supervisor: does
@@ -10,7 +12,8 @@
10
12
  * -> the OPERATOR, with no supervisor session, when
11
13
  * human_act the filing names a human-only act (metadata.human_act
12
14
  * kind irreversible | outward | unreachable_capability):
13
- * no agent can perform it, so no agent should hold it;
15
+ * no agent can perform it, so no agent should hold it --
16
+ * EXCEPT a shortfall ruling (below);
14
17
  * external_wait the filing waits on a third party: not a judgement call;
15
18
  * unarmed the focus is no longer armed (no assigned agent role):
16
19
  * the supervisor decides within the scope an ARM authorised;
@@ -19,8 +22,25 @@
19
22
  * scope the team is solving for) or defers (a major new build, or it feels
20
23
  * a human is needed) is its judgement, told in tower/tower-escalation-prompt.ts.
21
24
  *
25
+ * THE SHORTFALL-RULING EXCEPTION. A filing whose human act IS a verify
26
+ * shortfall ruling goes to the SUPERVISOR (still subject to unarmed /
27
+ * focus_closed / external_wait), because the supervisor can rule an evidenced
28
+ * shortfall itself (escalation_tower_rule_shortfall) and defers when the record
29
+ * does not support it. It is recognised ONLY by the structured field
30
+ * metadata.human_act.shortfall_ruling.node_ids (mcp telora_agent
31
+ * humanAct.shortfallRuling, persisted by product-api escalation_create; read by
32
+ * shortfallRulingAskOf), never by matching the act prose, and only when:
33
+ * - the act's kind is unreachable_capability (a ruling is an authority act a
34
+ * team cannot reach; an irreversible or outward act carrying the field is
35
+ * still that act, so it goes to the operator), and
36
+ * - it names >= 1 well-formed node id, and
37
+ * - the filing carries a deliveryId (a ruling is recorded ON a delivery).
38
+ * Any other unreachable_capability act (a credential, control-plane state) is
39
+ * unchanged: the operator.
40
+ *
22
41
  * @module tower/tower-escalation-routing
23
42
  */
43
+ import { readHumanAct } from '../queries/escalations/filing-observation.js';
24
44
  /** The human-only act kinds (mcp telora_agent humanAct.kind). */
25
45
  export const HUMAN_ACT_KINDS = ['irreversible', 'outward', 'unreachable_capability'];
26
46
  /** Pure: the human-only act a filing names, or null. */
@@ -33,10 +53,19 @@ export function humanActOf(metadata) {
33
53
  return null;
34
54
  return { kind, act: typeof act === 'string' ? act : '' };
35
55
  }
56
+ /**
57
+ * Pure: the structured shortfall ruling a filing asks for -- the well-formed
58
+ * metadata.human_act.shortfall_ruling on an unreachable_capability act -- or null.
59
+ * Reads the structured field only, never the act prose.
60
+ */
61
+ export function shortfallRulingAskOf(metadata) {
62
+ return readHumanAct(metadata.human_act)?.shortfall_ruling ?? null;
63
+ }
36
64
  /** Pure: route one pending team escalation. */
37
65
  export function routeTeamEscalation(facts) {
38
66
  const act = humanActOf(facts.metadata);
39
- if (act) {
67
+ const rulingForSupervisor = act !== null && shortfallRulingAskOf(facts.metadata) !== null && !!facts.deliveryId;
68
+ if (act && !rulingForSupervisor) {
40
69
  return { route: 'operator', reason: 'human_act', detail: `it names a human-only act (${act.kind}): ${act.act || '(unstated)'}` };
41
70
  }
42
71
  if (facts.disposition === 'external_wait') {
@@ -1 +1 @@
1
- {"version":3,"file":"tower-escalation-routing.js","sourceRoot":"","sources":["../../src/tower/tower-escalation-routing.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,uEAAuE;AACvE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,eAAe,GAAsB,CAAC,cAAc,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;AAkBxG,wDAAwD;AACxD,MAAM,UAAU,UAAU,CAAC,QAAiC;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC/B,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/E,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAwC,CAAC;IAC/D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3D,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,mBAAmB,CAAC,KAAmB;IACrD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,8BAA8B,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,YAAY,EAAE,EAAE,CAAC;IACnI,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,KAAK,eAAe,EAAE,CAAC;QAC1C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,uDAAuD,EAAE,CAAC;IACzH,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,mDAAmD,EAAE,CAAC;IACpH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,+EAA+E,EAAE,CAAC;IAC3I,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"tower-escalation-routing.js","sourceRoot":"","sources":["../../src/tower/tower-escalation-routing.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,0EAA0E;AAC1E,+DAA+D;AAC/D,+DAA+D;AAC/D,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,YAAY,EAA2B,MAAM,8CAA8C,CAAC;AAErG,iEAAiE;AACjE,MAAM,CAAC,MAAM,eAAe,GAAsB,CAAC,cAAc,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;AAoBxG,wDAAwD;AACxD,MAAM,UAAU,UAAU,CAAC,QAAiC;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC/B,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/E,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAwC,CAAC;IAC/D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAiC;IACpE,OAAO,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,IAAI,IAAI,CAAC;AACpE,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,mBAAmB,CAAC,KAAmB;IACrD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,mBAAmB,GAAG,GAAG,KAAK,IAAI,IAAI,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;IAChH,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,8BAA8B,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,YAAY,EAAE,EAAE,CAAC;IACnI,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,KAAK,eAAe,EAAE,CAAC;QAC1C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,uDAAuD,EAAE,CAAC;IACzH,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,mDAAmD,EAAE,CAAC;IACpH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,+EAA+E,EAAE,CAAC;IAC3I,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACjC,CAAC"}
@@ -24,14 +24,29 @@
24
24
  * supervisor's process, spawn/routing-decider-spawn.ts
25
25
  * spawnOneShotJudgementSession, opus, a governor slot, the scoped
26
26
  * `tower_supervisor` MCP profile) in the background. The session answers it
27
- * (telora_agent escalation_answer) or defers it (escalation_defer); each is
28
- * one attributed edge act that records the decision on the focus.
27
+ * (telora_agent escalation_answer), defers it (escalation_defer), or -- on a
28
+ * delivery's verify shortfall the record already shows met -- RULES it
29
+ * (escalation_rule_shortfall: the nodes ruled met, the escalation resolved
30
+ * as answered, shortfall_ruled recorded); each is one attributed edge act
31
+ * that records the decision on the focus.
32
+ *
33
+ * THE DAEMON ATTESTS EVERY SESSION BEFORE IT SPAWNS IT. The session id is
34
+ * minted here and recorded on the row by daemon_escalation_tower_session_start
35
+ * (queries/escalations/tower-escalations.ts attestTowerEscalationSession)
36
+ * before the process starts: the server refuses the supervisor's shortfall
37
+ * ruling for a session the daemon never attested, so an agent cannot claim to
38
+ * be the supervisor by naming an id. An attestation that fails (the row is no
39
+ * longer pending -- 409 -- or the call failed) spawns nothing and costs no
40
+ * attempt; the next sweep retries.
29
41
  *
30
42
  * AFTER A SESSION the daemon reads the row:
31
43
  * - answered -> the answer reaches the team: injected into its live session now
32
44
  * (spawn/live-answer-delivery.ts), else read back at its next spawn through
33
45
  * the answer re-arm signal the answer wrote; a decision record the edge
34
46
  * failed to write is backstopped here (escalation_answered, by the daemon).
47
+ * A RULED escalation reads back answered too (the ruling act resolves it
48
+ * and writes the same re-arm), and its own shortfall_ruled record counts as
49
+ * the decision -- the backstop never adds an escalation_answered beside it.
35
50
  * - deferred -> it stands in the operator's inbox.
36
51
  * - still pending: a session that CRASHED or timed out -> deferred at once
37
52
  * ("crash -> the operator"); one that exited cleanly without deciding is an
@@ -44,7 +59,7 @@
44
59
  import type { ResourceGovernor } from '@telora/daemon-core';
45
60
  import type { DaemonConfig } from '../types/index.js';
46
61
  import type { TowerDecision, TowerDecisionInput } from '../queries/tower-decisions/tower-decisions.js';
47
- import type { TowerDeferral, TowerEscalationState, TowerPendingEscalation } from '../queries/escalations/tower-escalations.js';
62
+ import type { TowerDeferral, TowerEscalationState, TowerPendingEscalation, TowerSessionAttestation } from '../queries/escalations/tower-escalations.js';
48
63
  import { type TowerEscalationRoute } from './tower-escalation-routing.js';
49
64
  import { type EscalationContext } from './tower-escalation-prompt.js';
50
65
  import type { TowerSupervisorSpawnResult } from './tower-supervisor-session.js';
@@ -56,9 +71,9 @@ export declare const TOWER_ESCALATION_TIMEOUT_MS: number;
56
71
  export declare const TOWER_ESCALATION_GOVERNOR_ENGINE = "tower-supervisor";
57
72
  /**
58
73
  * Tools the escalation session is pre-approved for: reading the worktree, and
59
- * the Telora reads plus the two acts it decides through (telora_agent
60
- * escalation_answer / escalation_defer). Pre-approval only; the scoped MCP
61
- * profile is the bound.
74
+ * the Telora reads plus the three acts it decides through (telora_agent
75
+ * escalation_answer / escalation_defer / escalation_rule_shortfall).
76
+ * Pre-approval only; the scoped MCP profile is the bound.
62
77
  */
63
78
  export declare const TOWER_ESCALATION_MCP_TOOLS: readonly string[];
64
79
  /** A focus as the escalation supervisor reads it. */
@@ -92,11 +107,17 @@ export interface TowerEscalationSupervisorDeps {
92
107
  defer: (deferral: TowerDeferral) => Promise<{
93
108
  towerDecisionId: string | null;
94
109
  }>;
110
+ /** Attest the session about to be spawned for a pending row (daemon_escalation_tower_session_start). Throws when refused. */
111
+ attestSession: (args: {
112
+ escalationId: string;
113
+ supervisorSessionId: string;
114
+ }) => Promise<TowerSessionAttestation>;
95
115
  /** The active focuses of one product this daemon runs. */
96
116
  listFocuses: (productId: string) => Promise<TowerEscalationFocus[]>;
97
117
  focusWorktreePath: (focusId: string) => string | null;
98
118
  gatherContext: (args: {
99
119
  focus: TowerEscalationFocus;
120
+ escalation: TowerPendingEscalation;
100
121
  config: DaemonConfig;
101
122
  repoRoot: string;
102
123
  }) => Promise<EscalationContext>;
@@ -135,6 +156,8 @@ export declare function crashed(result: TowerSupervisorSpawnResult): boolean;
135
156
  export declare function operatorRouteDeferral(route: Extract<TowerEscalationRoute, {
136
157
  route: 'operator';
137
158
  }>): Pick<TowerDeferral, 'summary' | 'rationale' | 'evidence'>;
159
+ /** The decision kinds that record a supervisor's answered escalation: an answer, or a shortfall ruling (which resolves it as answered). */
160
+ export declare const ANSWERED_DECISION_KINDS: readonly string[];
138
161
  /** Pure: whether a pending row belongs to a product this daemon runs. */
139
162
  export declare function ownedByThisDaemon(esc: Pick<TowerPendingEscalation, 'productId' | 'focusId'>, productIds: ReadonlySet<string>, focusIds: ReadonlySet<string>): boolean;
140
163
  /** The escalation half of the Tower supervisor (one per process). */
@@ -1 +1 @@
1
- {"version":3,"file":"tower-escalation-session.d.ts","sourceRoot":"","sources":["../../src/tower/tower-escalation-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tower-escalation-session.d.ts","sourceRoot":"","sources":["../../src/tower/tower-escalation-session.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
- // Pinned by: packages/daemon/src/tower/tower-escalation-session.test.ts
2
+ // Pinned by: packages/daemon/src/tower/tower-escalation-gather.test.ts,
3
+ // packages/daemon/src/tower/tower-escalation-io-cases.test.ts,
4
+ // packages/daemon/src/tower/tower-escalation-session.test.ts
3
5
  // PINNED-BY-END
4
6
  import { createLogger } from '../log/daemon-log.js';
5
7
  import { routeTeamEscalation } from './tower-escalation-routing.js';
@@ -13,9 +15,9 @@ export const TOWER_ESCALATION_TIMEOUT_MS = 20 * 60 * 1000;
13
15
  export const TOWER_ESCALATION_GOVERNOR_ENGINE = 'tower-supervisor';
14
16
  /**
15
17
  * Tools the escalation session is pre-approved for: reading the worktree, and
16
- * the Telora reads plus the two acts it decides through (telora_agent
17
- * escalation_answer / escalation_defer). Pre-approval only; the scoped MCP
18
- * profile is the bound.
18
+ * the Telora reads plus the three acts it decides through (telora_agent
19
+ * escalation_answer / escalation_defer / escalation_rule_shortfall).
20
+ * Pre-approval only; the scoped MCP profile is the bound.
19
21
  */
20
22
  export const TOWER_ESCALATION_MCP_TOOLS = [
21
23
  'Read', 'Grep', 'Glob',
@@ -62,13 +64,15 @@ export function operatorRouteDeferral(route) {
62
64
  evidence: { route: route.reason, detail: route.detail },
63
65
  };
64
66
  }
65
- /** Answered: hand the answer to the live team, and backstop the decision record. */
67
+ /** The decision kinds that record a supervisor's answered escalation: an answer, or a shortfall ruling (which resolves it as answered). */
68
+ export const ANSWERED_DECISION_KINDS = ['escalation_answered', 'shortfall_ruled'];
69
+ /** Answered (or ruled): hand the answer to the live team, and backstop the decision record. */
66
70
  async function onAnswered(st, esc, focusId, now, sessionId) {
67
71
  const delivery = await st.deps.deliverAnswer({ focusId, rearmValues: now.answeredAt ? [now.answeredAt] : [] });
68
72
  log.info(`[tower-escalation] the supervisor answered escalation ${esc.escalationId.slice(0, 8)}; ` +
69
73
  (delivery.delivered ? 'injected into the live team.' : `no live team took it (${delivery.detail ?? 'none'}); it is read back at the next spawn.`));
70
74
  const record = await st.deps.listTowerDecisions(focusId);
71
- if (record.decisions.some((d) => d.kind === 'escalation_answered' && d.escalationId === esc.escalationId))
75
+ if (record.decisions.some((d) => ANSWERED_DECISION_KINDS.includes(d.kind) && d.escalationId === esc.escalationId))
72
76
  return;
73
77
  await st.deps.recordTowerDecision({
74
78
  focusId, kind: 'escalation_answered', decidedByKind: 'daemon', escalationId: esc.escalationId,
@@ -106,7 +110,19 @@ async function settle(st, esc, focus, result, sessionId) {
106
110
  await deferAs(st, esc, `The Tower supervisor ran ${tried} time(s) without deciding; handed to the operator.`, 'No session answered or deferred it; the daemon stops spending sessions on it and the operator decides.', { ...evidence, attempts: tried });
107
111
  }
108
112
  }
109
- /** One session inside a governor slot: gather, prompt, spawn, settle. */
113
+ /** Attest the session before it is spawned; false (logged) when refused or failed -- nothing spawns, no attempt is counted. */
114
+ async function attested(st, esc, supervisorSessionId) {
115
+ try {
116
+ await st.deps.attestSession({ escalationId: esc.escalationId, supervisorSessionId });
117
+ return true;
118
+ }
119
+ catch (err) {
120
+ log.warn(`[tower-escalation] could not attest session ${supervisorSessionId.slice(0, 8)} for escalation ${esc.escalationId.slice(0, 8)}: ` +
121
+ `${err.message}; nothing spawned, the next sweep retries.`);
122
+ return false;
123
+ }
124
+ }
125
+ /** One session inside a governor slot: gather, prompt, attest, spawn, settle. */
110
126
  async function runSession(st, esc, focus, config) {
111
127
  const governor = st.deps.readGovernor();
112
128
  let token = null;
@@ -119,9 +135,11 @@ async function runSession(st, esc, focus, config) {
119
135
  }
120
136
  try {
121
137
  const repoRoot = st.deps.focusWorktreePath(focus.focusId) ?? config.repoPath;
122
- const context = await st.deps.gatherContext({ focus, config, repoRoot });
138
+ const context = await st.deps.gatherContext({ focus, escalation: esc, config, repoRoot });
123
139
  const supervisorSessionId = st.deps.newSessionId();
124
140
  const prompt = buildTowerEscalationPrompt({ focus, escalation: esc, supervisorSessionId, context });
141
+ if (!(await attested(st, esc, supervisorSessionId)))
142
+ return;
125
143
  log.info(`[tower-escalation] deciding escalation ${esc.escalationId.slice(0, 8)} of "${focus.focusName}" (session ${supervisorSessionId.slice(0, 8)}).`);
126
144
  const result = await st.deps.spawn({
127
145
  config, prompt, cwd: repoRoot, focusId: focus.focusId, escalationId: esc.escalationId,
@@ -140,7 +158,7 @@ async function step(st, esc, focuses, config) {
140
158
  return 'in_flight';
141
159
  try {
142
160
  const focus = esc.focusId ? focuses.get(esc.focusId) ?? null : null;
143
- const route = routeTeamEscalation({ disposition: esc.disposition, metadata: esc.metadata, focus });
161
+ const route = routeTeamEscalation({ disposition: esc.disposition, metadata: esc.metadata, focus, deliveryId: esc.deliveryId });
144
162
  if (route.route === 'operator') {
145
163
  const d = operatorRouteDeferral(route);
146
164
  await deferAs(st, esc, d.summary, d.rationale, d.evidence);
@@ -1 +1 @@
1
- {"version":3,"file":"tower-escalation-session.js","sourceRoot":"","sources":["../../src/tower/tower-escalation-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tower-escalation-session.js","sourceRoot":"","sources":["../../src/tower/tower-escalation-session.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,wEAAwE;AACxE,iEAAiE;AACjE,+DAA+D;AAC/D,gBAAgB;AAsEhB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAA6B,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAA0B,MAAM,8BAA8B,CAAC;AAG5H,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAE9C,+FAA+F;AAC/F,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAE/C,yEAAyE;AACzE,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1D,6GAA6G;AAC7G,MAAM,CAAC,MAAM,gCAAgC,GAAG,kBAAkB,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D,MAAM,EAAE,MAAM,EAAE,MAAM;IACtB,oCAAoC;IACpC,4CAA4C;IAC5C,4CAA4C;IAC5C,+CAA+C;IAC/C,4CAA4C;IAC5C,oDAAoD;IACpD,0CAA0C;CAC3C,CAAC;AA+DF,SAAS,WAAW;IAClB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AACzF,CAAC;AAQD,0FAA0F;AAC1F,SAAS,GAAG,CAAC,MAAkC;IAC7C,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,CAAC;AACjE,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,OAAO,CAAC,MAAkC;IACxD,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,WAAW,CAAC,MAAkC;IACrD,IAAI,MAAM,CAAC,gBAAgB;QAAE,OAAO,sBAAsB,MAAM,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC;IAC1F,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,YAAY,IAAI,eAAe,CAAC;IACnE,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,oBAAoB,CAAC;IACjD,MAAM,IAAI,GAAG,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrD,OAAO,UAAU,MAAM,CAAC,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,EAAS,EAAE,GAA2B,EAAE,OAAe,EAAE,SAAiB,EAAE,QAAiC;IAClI,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClH,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACrC,GAAG,CAAC,IAAI,CAAC,wCAAwC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,qBAAqB,OAAO,cAAc,eAAe,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC;AAC3K,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,qBAAqB,CAAC,KAA2D;IAC/F,OAAO;QACL,OAAO,EAAE,wDAAwD,KAAK,CAAC,MAAM,GAAG;QAChF,SAAS,EACP,8GAA8G;YAC9G,yCAAyC,KAAK,CAAC,MAAM,yCAAyC;QAChG,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;KACxD,CAAC;AACJ,CAAC;AAED,2IAA2I;AAC3I,MAAM,CAAC,MAAM,uBAAuB,GAAsB,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;AAErG,+FAA+F;AAC/F,KAAK,UAAU,UAAU,CAAC,EAAS,EAAE,GAA2B,EAAE,OAAe,EAAE,GAAyB,EAAE,SAAiB;IAC7H,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/G,GAAG,CAAC,IAAI,CACN,yDAAyD,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI;QACzF,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,yBAAyB,QAAQ,CAAC,MAAM,IAAI,MAAM,uCAAuC,CAAC,CAClJ,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,GAAG,CAAC,YAAY,CAAC;QAAE,OAAO;IAC1H,MAAM,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAChC,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY;QAC7F,OAAO,EAAE,sFAAsF;QAC/F,SAAS,EAAE,oGAAoG;QAC/G,QAAQ,EAAE,EAAE,mBAAmB,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;KACzE,CAAC,CAAC;AACL,CAAC;AAED,yGAAyG;AACzG,KAAK,UAAU,MAAM,CAAC,EAAS,EAAE,GAA2B,EAAE,KAA2B,EAAE,MAAkC,EAAE,SAAiB;IAC9I,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3D,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAAC,MAAM,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC9I,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACrI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAAC,GAAG,CAAC,IAAI,CAAC,qCAAqC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,iBAAiB,MAAM,4BAA4B,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC7J,MAAM,QAAQ,GAAG,EAAE,mBAAmB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IACxE,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,kDAAkD,MAAM,4BAA4B,EACzG,+GAA+G,EAAE,QAAQ,CAAC,CAAC;QAC7H,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3D,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACzC,GAAG,CAAC,IAAI,CAAC,qCAAqC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,8BAA8B,KAAK,OAAO,6BAA6B,IAAI,CAAC,CAAC;IACjK,IAAI,KAAK,IAAI,6BAA6B,EAAE,CAAC;QAC3C,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,4BAA4B,KAAK,oDAAoD,EAC1G,wGAAwG,EAAE,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAChJ,CAAC;AACH,CAAC;AAED,+HAA+H;AAC/H,KAAK,UAAU,QAAQ,CAAC,EAAS,EAAE,GAA2B,EAAE,mBAA2B;IACzF,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,+CAA+C,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,mBAAmB,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI;YAC/H,GAAI,GAAa,CAAC,OAAO,4CAA4C,CACxE,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,KAAK,UAAU,UAAU,CAAC,EAAS,EAAE,GAA2B,EAAE,KAA2B,EAAE,MAAoB;IACjH,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IACxC,IAAI,KAAK,GAAqB,IAAI,CAAC;IACnC,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,gCAAgC,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,gDAAgD,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,2BAA2B,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;IAC5I,CAAC;IACD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC;QAC7E,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1F,MAAM,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,0BAA0B,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;YAAE,OAAO;QAC5D,GAAG,CAAC,IAAI,CAAC,0CAA0C,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,KAAK,CAAC,SAAS,cAAc,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACzJ,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACjC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY;YACrF,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,2BAA2B,EAAE,YAAY,EAAE,0BAA0B;SACvG,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5D,CAAC;YAAS,CAAC;QACT,IAAI,KAAK,IAAI,QAAQ;YAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAID,yDAAyD;AACzD,KAAK,UAAU,IAAI,CACjB,EAAS,EAAE,GAA2B,EAAE,OAAkD,EAAE,MAAoB;IAEhH,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,OAAO,WAAW,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,MAAM,KAAK,GAAG,mBAAmB,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/H,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC3D,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,6BAA6B,EAAE,CAAC;YAC9E,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,mEAAmE,EACxF,uEAAuE,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC5H,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,MAAM,GAAG,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC;aAC3C,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,qCAAqC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,YAAa,GAAa,CAAC,OAAO,2BAA2B,CAAC,CAAC;aACjK,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QACvD,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,iDAAiD,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAM,GAAa,CAAC,OAAO,2BAA2B,CAAC,CAAC;QAC9I,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,GAA0D,EAAE,UAA+B,EAAE,QAA6B;IAC1J,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjE,OAAO,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAS,EAAE,MAAoB,EAAE,MAAkC;IAC5F,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgC,CAAC;IACxD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,oDAAoD,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAClH,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,sEAAsE;AACtE,KAAK,UAAU,YAAY,CAAC,EAAS;IACnC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IACpC,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAC3B,IAAI,OAAiC,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,2CAA4C,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACxC,qGAAqG;IACrG,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IAC5B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAAE,SAAS;QAC3E,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;QACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;aAC1C,IAAI,OAAO,KAAK,WAAW;YAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;aAClD,IAAI,OAAO,KAAK,UAAU;YAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;aACjD,IAAI,OAAO,KAAK,YAAY;YAAE,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;;YACrD,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,6DAA6D;AAC7D,MAAM,UAAU,+BAA+B,CAAC,IAAmC;IAIjF,MAAM,EAAE,GAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IACrE,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACvE,CAAC;AACJ,CAAC"}