@rubytech/create-maxy-code 0.1.570 → 0.1.571

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 (174) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +6 -0
  3. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +1 -1
  4. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  5. package/payload/platform/services/claude-session-manager/dist/http-server.js +38 -13
  6. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  7. package/payload/platform/services/telegram-channel/dist/notification.d.ts +20 -7
  8. package/payload/platform/services/telegram-channel/dist/notification.d.ts.map +1 -1
  9. package/payload/platform/services/telegram-channel/dist/notification.js +38 -4
  10. package/payload/platform/services/telegram-channel/dist/notification.js.map +1 -1
  11. package/payload/server/public/activity.html +5 -5
  12. package/payload/server/public/agents.html +4 -4
  13. package/payload/server/public/assets/{AdminLoginScreens-5gI137xF.js → AdminLoginScreens-CKyVm5aW.js} +1 -1
  14. package/payload/server/public/assets/AdminLoginScreens-CKyVm5aW.js.br +0 -0
  15. package/payload/server/public/assets/AdminLoginScreens-CKyVm5aW.js.gz +0 -0
  16. package/payload/server/public/assets/{AdminShell-Bfapavlp.js → AdminShell-slZzNEDR.js} +1 -1
  17. package/payload/server/public/assets/AdminShell-slZzNEDR.js.br +0 -0
  18. package/payload/server/public/assets/AdminShell-slZzNEDR.js.gz +0 -0
  19. package/payload/server/public/assets/{activity-DnbsmUgn.js → activity-6DhWjVwg.js} +1 -1
  20. package/payload/server/public/assets/activity-6DhWjVwg.js.br +0 -0
  21. package/payload/server/public/assets/activity-6DhWjVwg.js.gz +0 -0
  22. package/payload/server/public/assets/{admin-BXIv0_oj.js → admin-BB8DoIb_.js} +1 -1
  23. package/payload/server/public/assets/admin-BB8DoIb_.js.br +0 -0
  24. package/payload/server/public/assets/admin-BB8DoIb_.js.gz +0 -0
  25. package/payload/server/public/assets/{agents-Dl2wOcpj.js → agents-D-28pUk7.js} +1 -1
  26. package/payload/server/public/assets/agents-D-28pUk7.js.br +0 -0
  27. package/payload/server/public/assets/agents-D-28pUk7.js.gz +0 -0
  28. package/payload/server/public/assets/{browser-D-Uc9ewO.js → browser-BGJPx931.js} +1 -1
  29. package/payload/server/public/assets/browser-BGJPx931.js.br +0 -0
  30. package/payload/server/public/assets/browser-BGJPx931.js.gz +0 -0
  31. package/payload/server/public/assets/{calendar-Cu3O6Bay.js → calendar-CP7u15G9.js} +1 -1
  32. package/payload/server/public/assets/calendar-CP7u15G9.js.br +0 -0
  33. package/payload/server/public/assets/calendar-CP7u15G9.js.gz +0 -0
  34. package/payload/server/public/assets/chat-C0wgXTz3.js +1 -0
  35. package/payload/server/public/assets/chat-C0wgXTz3.js.br +0 -0
  36. package/payload/server/public/assets/chat-C0wgXTz3.js.gz +0 -0
  37. package/payload/server/public/assets/chevron-left-CKe1u6eC.js +1 -0
  38. package/payload/server/public/assets/chevron-left-CKe1u6eC.js.br +0 -0
  39. package/payload/server/public/assets/clock-D8MegkDy.js +1 -0
  40. package/payload/server/public/assets/clock-D8MegkDy.js.br +0 -0
  41. package/payload/server/public/assets/{copy-DPBVV8KZ.js → copy-Cu819JFC.js} +1 -1
  42. package/payload/server/public/assets/copy-Cu819JFC.js.br +0 -0
  43. package/payload/server/public/assets/copy-Cu819JFC.js.gz +0 -0
  44. package/payload/server/public/assets/data-B7W5Ocvt.js +1 -0
  45. package/payload/server/public/assets/data-B7W5Ocvt.js.br +0 -0
  46. package/payload/server/public/assets/data-B7W5Ocvt.js.gz +0 -0
  47. package/payload/server/public/assets/{file-text-Dn82O6ke.js → file-text-BoiZDy84.js} +1 -1
  48. package/payload/server/public/assets/file-text-BoiZDy84.js.br +0 -0
  49. package/payload/server/public/assets/file-text-BoiZDy84.js.gz +0 -0
  50. package/payload/server/public/assets/{graph-D2J7a7Ll.js → graph-Dr6uIMgA.js} +1 -1
  51. package/payload/server/public/assets/graph-Dr6uIMgA.js.br +0 -0
  52. package/payload/server/public/assets/graph-Dr6uIMgA.js.gz +0 -0
  53. package/payload/server/public/assets/{graph-labels-D3gkY2IH.js → graph-labels-9y5-8Rc_.js} +1 -1
  54. package/payload/server/public/assets/graph-labels-9y5-8Rc_.js.br +0 -0
  55. package/payload/server/public/assets/graph-labels-9y5-8Rc_.js.gz +0 -0
  56. package/payload/server/public/assets/{operator-Bz_yj1im.js → operator-Cn5P5yqu.js} +1 -1
  57. package/payload/server/public/assets/operator-Cn5P5yqu.js.br +0 -0
  58. package/payload/server/public/assets/operator-Cn5P5yqu.js.gz +0 -0
  59. package/payload/server/public/assets/{page-D6u2xYh7.js → page-DqnWu9Aj.js} +1 -1
  60. package/payload/server/public/assets/page-DqnWu9Aj.js.br +0 -0
  61. package/payload/server/public/assets/page-DqnWu9Aj.js.gz +0 -0
  62. package/payload/server/public/assets/{page-mH4nyQ75.js → page-VTcDQ8qS.js} +1 -1
  63. package/payload/server/public/assets/page-VTcDQ8qS.js.br +0 -0
  64. package/payload/server/public/assets/page-VTcDQ8qS.js.gz +0 -0
  65. package/payload/server/public/assets/play-Dp6K3szP.js +1 -0
  66. package/payload/server/public/assets/play-Dp6K3szP.js.br +0 -0
  67. package/payload/server/public/assets/play-Dp6K3szP.js.gz +0 -0
  68. package/payload/server/public/assets/{public-CtoYVjPR.js → public-HlWIQCkl.js} +1 -1
  69. package/payload/server/public/assets/public-HlWIQCkl.js.br +0 -0
  70. package/payload/server/public/assets/public-HlWIQCkl.js.gz +0 -0
  71. package/payload/server/public/assets/{rotate-ccw-BXoIghE3.js → rotate-ccw-kpEqIj4T.js} +1 -1
  72. package/payload/server/public/assets/rotate-ccw-kpEqIj4T.js.br +0 -0
  73. package/payload/server/public/assets/rotate-ccw-kpEqIj4T.js.gz +0 -0
  74. package/payload/server/public/assets/{routines-DXleYpDv.js → routines-CvDzjwtZ.js} +1 -1
  75. package/payload/server/public/assets/routines-CvDzjwtZ.js.br +0 -0
  76. package/payload/server/public/assets/routines-CvDzjwtZ.js.gz +0 -0
  77. package/payload/server/public/assets/{skills-CMl38MKH.js → skills-Bom76JQv.js} +1 -1
  78. package/payload/server/public/assets/skills-Bom76JQv.js.br +0 -0
  79. package/payload/server/public/assets/skills-Bom76JQv.js.gz +0 -0
  80. package/payload/server/public/assets/{tasks-Cshaf0Md.js → tasks-DCiTDQ-r.js} +1 -1
  81. package/payload/server/public/assets/tasks-DCiTDQ-r.js.br +0 -0
  82. package/payload/server/public/assets/tasks-DCiTDQ-r.js.gz +0 -0
  83. package/payload/server/public/assets/{triangle-alert-CS-NXr_9.js → triangle-alert-DBSoNN4T.js} +1 -1
  84. package/payload/server/public/assets/triangle-alert-DBSoNN4T.js.br +0 -0
  85. package/payload/server/public/assets/triangle-alert-DBSoNN4T.js.gz +0 -0
  86. package/payload/server/public/assets/{useCopyFeedback-pKLfQJNG.js → useCopyFeedback-Do4uNxoZ.js} +1 -1
  87. package/payload/server/public/assets/useCopyFeedback-Do4uNxoZ.js.br +0 -0
  88. package/payload/server/public/assets/useCopyFeedback-Do4uNxoZ.js.gz +0 -0
  89. package/payload/server/public/assets/{useMediaQuery-BHFn0-S9.css → useMediaQuery-BbG7Ar0P.css} +1 -1
  90. package/payload/server/public/assets/useMediaQuery-BbG7Ar0P.css.br +0 -0
  91. package/payload/server/public/assets/{useMediaQuery-BHFn0-S9.css.gz → useMediaQuery-BbG7Ar0P.css.gz} +0 -0
  92. package/payload/server/public/assets/useVoiceRecorder-BzezRxgT.js +2 -0
  93. package/payload/server/public/assets/useVoiceRecorder-BzezRxgT.js.br +0 -0
  94. package/payload/server/public/assets/useVoiceRecorder-BzezRxgT.js.gz +0 -0
  95. package/payload/server/public/assets/{wrench-czES9Rdy.js → wrench-BmLFQPJb.js} +1 -1
  96. package/payload/server/public/assets/wrench-BmLFQPJb.js.br +0 -0
  97. package/payload/server/public/assets/wrench-BmLFQPJb.js.gz +0 -0
  98. package/payload/server/public/browser.html +4 -4
  99. package/payload/server/public/calendar.html +7 -7
  100. package/payload/server/public/chat.html +13 -13
  101. package/payload/server/public/data.html +11 -11
  102. package/payload/server/public/graph.html +9 -9
  103. package/payload/server/public/index.html +13 -13
  104. package/payload/server/public/operator.html +14 -14
  105. package/payload/server/public/public.html +13 -13
  106. package/payload/server/public/routines.html +7 -7
  107. package/payload/server/public/skills.html +5 -5
  108. package/payload/server/public/tasks.html +6 -6
  109. package/payload/server/server.js +739 -469
  110. package/payload/server/public/assets/AdminLoginScreens-5gI137xF.js.br +0 -0
  111. package/payload/server/public/assets/AdminLoginScreens-5gI137xF.js.gz +0 -0
  112. package/payload/server/public/assets/AdminShell-Bfapavlp.js.br +0 -0
  113. package/payload/server/public/assets/AdminShell-Bfapavlp.js.gz +0 -0
  114. package/payload/server/public/assets/activity-DnbsmUgn.js.br +0 -0
  115. package/payload/server/public/assets/activity-DnbsmUgn.js.gz +0 -0
  116. package/payload/server/public/assets/admin-BXIv0_oj.js.br +0 -0
  117. package/payload/server/public/assets/admin-BXIv0_oj.js.gz +0 -0
  118. package/payload/server/public/assets/agents-Dl2wOcpj.js.br +0 -0
  119. package/payload/server/public/assets/agents-Dl2wOcpj.js.gz +0 -0
  120. package/payload/server/public/assets/browser-D-Uc9ewO.js.br +0 -0
  121. package/payload/server/public/assets/browser-D-Uc9ewO.js.gz +0 -0
  122. package/payload/server/public/assets/calendar-Cu3O6Bay.js.br +0 -0
  123. package/payload/server/public/assets/calendar-Cu3O6Bay.js.gz +0 -0
  124. package/payload/server/public/assets/chat-Bso94e-f.js +0 -1
  125. package/payload/server/public/assets/chat-Bso94e-f.js.br +0 -0
  126. package/payload/server/public/assets/chat-Bso94e-f.js.gz +0 -0
  127. package/payload/server/public/assets/chevron-left-CDwfR9V-.js +0 -1
  128. package/payload/server/public/assets/chevron-left-CDwfR9V-.js.br +0 -0
  129. package/payload/server/public/assets/clock-DDVrNLt9.js +0 -1
  130. package/payload/server/public/assets/clock-DDVrNLt9.js.br +0 -0
  131. package/payload/server/public/assets/clock-DDVrNLt9.js.gz +0 -0
  132. package/payload/server/public/assets/copy-DPBVV8KZ.js.br +0 -0
  133. package/payload/server/public/assets/copy-DPBVV8KZ.js.gz +0 -0
  134. package/payload/server/public/assets/data-Dei8n2EX.js +0 -1
  135. package/payload/server/public/assets/data-Dei8n2EX.js.br +0 -0
  136. package/payload/server/public/assets/data-Dei8n2EX.js.gz +0 -0
  137. package/payload/server/public/assets/file-text-Dn82O6ke.js.br +0 -0
  138. package/payload/server/public/assets/file-text-Dn82O6ke.js.gz +0 -0
  139. package/payload/server/public/assets/graph-D2J7a7Ll.js.br +0 -0
  140. package/payload/server/public/assets/graph-D2J7a7Ll.js.gz +0 -0
  141. package/payload/server/public/assets/graph-labels-D3gkY2IH.js.br +0 -0
  142. package/payload/server/public/assets/graph-labels-D3gkY2IH.js.gz +0 -0
  143. package/payload/server/public/assets/operator-Bz_yj1im.js.br +0 -0
  144. package/payload/server/public/assets/operator-Bz_yj1im.js.gz +0 -0
  145. package/payload/server/public/assets/page-D6u2xYh7.js.br +0 -0
  146. package/payload/server/public/assets/page-D6u2xYh7.js.gz +0 -0
  147. package/payload/server/public/assets/page-mH4nyQ75.js.br +0 -0
  148. package/payload/server/public/assets/page-mH4nyQ75.js.gz +0 -0
  149. package/payload/server/public/assets/play-ByuChQJJ.js +0 -1
  150. package/payload/server/public/assets/play-ByuChQJJ.js.br +0 -0
  151. package/payload/server/public/assets/play-ByuChQJJ.js.gz +0 -0
  152. package/payload/server/public/assets/public-CtoYVjPR.js.br +0 -0
  153. package/payload/server/public/assets/public-CtoYVjPR.js.gz +0 -0
  154. package/payload/server/public/assets/rotate-ccw-BXoIghE3.js.br +0 -0
  155. package/payload/server/public/assets/rotate-ccw-BXoIghE3.js.gz +0 -0
  156. package/payload/server/public/assets/routines-DXleYpDv.js.br +0 -0
  157. package/payload/server/public/assets/routines-DXleYpDv.js.gz +0 -0
  158. package/payload/server/public/assets/skills-CMl38MKH.js.br +0 -0
  159. package/payload/server/public/assets/skills-CMl38MKH.js.gz +0 -0
  160. package/payload/server/public/assets/tasks-Cshaf0Md.js.br +0 -0
  161. package/payload/server/public/assets/tasks-Cshaf0Md.js.gz +0 -0
  162. package/payload/server/public/assets/triangle-alert-CS-NXr_9.js.br +0 -3
  163. package/payload/server/public/assets/triangle-alert-CS-NXr_9.js.gz +0 -0
  164. package/payload/server/public/assets/useCopyFeedback-pKLfQJNG.js.br +0 -0
  165. package/payload/server/public/assets/useCopyFeedback-pKLfQJNG.js.gz +0 -0
  166. package/payload/server/public/assets/useMediaQuery-BHFn0-S9.css.br +0 -0
  167. package/payload/server/public/assets/useVoiceRecorder-EgO1GmIg.js +0 -2
  168. package/payload/server/public/assets/useVoiceRecorder-EgO1GmIg.js.br +0 -0
  169. package/payload/server/public/assets/useVoiceRecorder-EgO1GmIg.js.gz +0 -0
  170. package/payload/server/public/assets/wrench-czES9Rdy.js.br +0 -0
  171. package/payload/server/public/assets/wrench-czES9Rdy.js.gz +0 -0
  172. /package/payload/server/public/assets/{useMediaQuery-oDCasnxD.js → useMediaQuery-6vKHR1CS.js} +0 -0
  173. /package/payload/server/public/assets/{useMediaQuery-oDCasnxD.js.br → useMediaQuery-6vKHR1CS.js.br} +0 -0
  174. /package/payload/server/public/assets/{useMediaQuery-oDCasnxD.js.gz → useMediaQuery-6vKHR1CS.js.gz} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-maxy-code",
3
- "version": "0.1.570",
3
+ "version": "0.1.571",
4
4
  "description": "Install Maxy — AI for Productive People",
5
5
  "bin": {
6
6
  "create-maxy-code": "./dist/index.js"
@@ -9,6 +9,12 @@ Invoked by the admin agent directly.
9
9
 
10
10
  This is the platform's release timeline, newest first. Each entry shows the date it shipped and the version it shipped in, so you can tell the operator how current their install is. To compare, read the installed version from `capabilities-here` and match it against the versions below. Keep answers high level and in plain English; this is a summary, not a full commit log.
11
11
 
12
+ ## 2026-08-06 (0.1.571)
13
+
14
+ - Telegram no longer drops inbound messages that are not plain text: voice notes are transcribed into the turn text, and a live location renders as a single track on the map that fits its own viewport.
15
+ - The Telegram media filename now stays inside its own directory, closing the outbound-guard redaction gap.
16
+ - The Public spawn tool lockdown was verified against real evidence and archived, and a stray malformed-edit message is now kept inside its own share.
17
+
12
18
  ## 2026-08-06 (0.1.570)
13
19
 
14
20
  - Reading a PDF now injects the text layer, so values copied from a PDF are not transcribed by eye any more.
@@ -278,7 +278,7 @@ Structured `isLocation` and `locationText` fields are set alongside the body but
278
278
 
279
279
  The wire carries no URL. `LiveLocationMessage` is ten fields, all coordinates and motion data; the tappable map on a handset is that client drawing the coordinates. There is nothing to store or forward but the numbers. The end of a share is not observable either, for the same reason no update is: nothing after the first message reaches a companion seat.
280
280
 
281
- **Operator reader.** `platform/ui/app/whatsapp/location-map.tsx` draws an OpenStreetMap tile block on any bubble whose whole trimmed body parses as a coordinate. Attribution is mandatory and load-bearing, not decoration. Tile policy, the census counters (`op=wa-location-census`) and the alarm conditions live in `.docs/whatsapp-location-map.md` in the source repo. That file is a platform-developer note: it ships to no install and is not reachable through `plugin-read`, which is why the operator-facing facts are stated here rather than linked.
281
+ **Operator reader.** `platform/ui/app/whatsapp/location-map.tsx` draws an OpenStreetMap tile block on any bubble whose whole trimmed body parses as a coordinate. Attribution is mandatory and load-bearing, not decoration. Tile policy, the census alarm (`op=location-census-alarm`) and its conditions live in `.docs/whatsapp-location-map.md` in the source repo. That file is a platform-developer note: it ships to no install and is not reachable through `plugin-read`, which is why the operator-facing facts are stated here rather than linked.
282
282
 
283
283
  **Outbound is absent.** The delivery surface is the turn's own text plus `SendUserFile`; no code path sends a `locationMessage`. Putting a pin into a chat is unbuilt work, not a setting.
284
284
 
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
@@ -1122,11 +1122,12 @@ export function buildHttpApp(deps) {
1122
1122
  const initialMessage = typeof body.initialMessage === 'string' && body.initialMessage.length > 0
1123
1123
  ? body.initialMessage
1124
1124
  : undefined;
1125
- // Task 1483 — a WhatsApp passive account-manager spawn. `passive` selects the
1125
+ // Task 1483 — a WhatsApp passive account-manager spawn selects the
1126
1126
  // work-create-only, no-reply surface; `targetAccountId` (shape-gated like an
1127
- // account dir) scopes the spawn to the sub-account. Both are ignored unless
1128
- // the role is public (passive rides the public restricted path).
1129
- const passive = body.passive === true;
1127
+ // account dir) scopes the spawn to the sub-account. Task 2334 the flag
1128
+ // itself is read once, by `parseSpawnRole` above, and reaches every site in
1129
+ // this handler as `agentRole === 'passive'`. A second read here would be a
1130
+ // second definition of the same invariant.
1130
1131
  const targetAccountId = typeof body.targetAccountId === 'string' && /^[A-Za-z0-9_-]{1,64}$/.test(body.targetAccountId)
1131
1132
  ? body.targetAccountId
1132
1133
  : undefined;
@@ -1225,7 +1226,15 @@ export function buildHttpApp(deps) {
1225
1226
  ? `array(${body.dormantPlugins.length})`
1226
1227
  : body.dormantPlugins == null ? 'absent' : typeof body.dormantPlugins;
1227
1228
  const initialMessageBytes = typeof body.initialMessage === 'string' ? Buffer.byteLength(body.initialMessage, 'utf8') : 0;
1228
- deps.logger(`spawn-request senderId=${senderId || 'missing'} userId=${userId ? userId.slice(0, 8) : 'absent'} role=${role || 'missing'} channel=${channel || 'missing'} permissionMode=${typeof body.permissionMode === 'string' ? body.permissionMode : 'default'} channels=${Array.isArray(body.channels) ? body.channels.length : 0} attachmentDir=${typeof body.attachmentDir === 'string' ? 'set' : 'absent'} aboutOwner=${aboutOwnerShape} dormantPlugins=${dormantPluginsShape} tunnelUrl=${typeof body.tunnelUrl === 'string' ? 'set' : (body.tunnelUrl === null ? 'null' : 'absent')} initialMessageBytes=${initialMessageBytes}`);
1229
+ // Task 2334 `passive` and `specialist` sit beside `role=` because the three
1230
+ // together are what the boundary parse resolves a persona from. Without them
1231
+ // the line could not answer whether a passive-flagged specialist ever arrived,
1232
+ // which is the question this task had to trace through the issuers instead.
1233
+ // `body.passive === true` is the WIRE shape, deliberately not the resolved
1234
+ // role: this line reports what was sent, and `role=` already reports what it
1235
+ // resolved to. `specialist` is the shape-gated value, so a body whose field
1236
+ // failed the slug pattern reports `absent` — what every downstream site sees.
1237
+ deps.logger(`spawn-request senderId=${senderId || 'missing'} userId=${userId ? userId.slice(0, 8) : 'absent'} role=${role || 'missing'} passive=${body.passive === true} specialist=${specialist ?? 'absent'} channel=${channel || 'missing'} permissionMode=${typeof body.permissionMode === 'string' ? body.permissionMode : 'default'} channels=${Array.isArray(body.channels) ? body.channels.length : 0} attachmentDir=${typeof body.attachmentDir === 'string' ? 'set' : 'absent'} aboutOwner=${aboutOwnerShape} dormantPlugins=${dormantPluginsShape} tunnelUrl=${typeof body.tunnelUrl === 'string' ? 'set' : (body.tunnelUrl === null ? 'null' : 'absent')} initialMessageBytes=${initialMessageBytes}`);
1229
1238
  if (!senderId || parsedRole === null || agentRole === null || !CHANNELS.includes(channel)) {
1230
1239
  // Task 2325 — emitted only when the ROLE is what failed. The guard also
1231
1240
  // covers a missing senderId and a bad channel, and naming those
@@ -1264,10 +1273,13 @@ export function buildHttpApp(deps) {
1264
1273
  }
1265
1274
  // Task 1489 — a passive intake spawn rides role:'public' on this path but is
1266
1275
  // a trusted, sub-account-bound account manager, not an anonymous visitor. It
1267
- // is exempt from the anonymous-visitor limiter: `!passive` keeps a manager's
1268
- // requirement burst from being throttled, and keeps that burst from consuming
1269
- // (or being throttled by) the shared per-sender/global anonymous budget.
1270
- if (role === 'public' && !passive) {
1276
+ // is exempt from the anonymous-visitor limiter: keeping a manager's
1277
+ // requirement burst out of the limiter stops it being throttled, and stops it
1278
+ // consuming (or being throttled by) the shared per-sender/global anonymous
1279
+ // budget. Task 2334 — the exemption is expressed as `agentRole === 'public'`,
1280
+ // which is exactly "the wire role was public and the passive resolution did
1281
+ // not fire", rather than re-deriving that from the raw flag.
1282
+ if (agentRole === 'public') {
1271
1283
  const decision = deps.publicSpawnLimiter.admit(senderId, channel);
1272
1284
  if (!decision.admitted) {
1273
1285
  deps.logger(`spawn-rate-limited senderId=${senderId} channel=${channel} scope=${decision.scope} window=${decision.windowMs} cap=${decision.cap}`);
@@ -1328,7 +1340,11 @@ export function buildHttpApp(deps) {
1328
1340
  // assignment so the task always lands on a real admin. Undefined only when the
1329
1341
  // install has no live house admin at all (genuine drift — no edge is written).
1330
1342
  let assignedAdminUserId;
1331
- if (passive && role === 'public' && !specialist && targetAccountId) {
1343
+ // Task 2334 — the three conjuncts this replaced (passive + role:'public' +
1344
+ // no specialist) were the resolution rule restated. `agentRole === 'passive'`
1345
+ // IS that rule, so the transcript scope can no longer diverge from the
1346
+ // work-MCP graph scope, which reads the same resolved role in the spawner.
1347
+ if (agentRole === 'passive' && targetAccountId) {
1332
1348
  const accountsRoot = join(dirname(deps.platformRoot), 'data', 'accounts');
1333
1349
  const accountJsonPath = join(accountsRoot, targetAccountId, 'account.json');
1334
1350
  if (!existsSync(accountJsonPath)) {
@@ -1401,7 +1417,11 @@ export function buildHttpApp(deps) {
1401
1417
  // notify so its work-create is not logged as anonymous `role=public`
1402
1418
  // activity and its exit does not emit a spurious webchat no-record. It
1403
1419
  // gets the one-shot auto-close instead.
1404
- if (!passive) {
1420
+ //
1421
+ // Task 2334 — the resolved role. For a wire role of 'admin' this now
1422
+ // enters the branch where the raw flag skipped it; both callees return
1423
+ // immediately on `role !== 'public'` (:847, :877), so nothing changes.
1424
+ if (agentRole !== 'passive') {
1405
1425
  // Task 2271 — `spawnCwd` here is the re-scoped value, so the audit
1406
1426
  // follows a public-agent session into its own account's slug.
1407
1427
  attachPublicAudit(deps, tracker.sessionId, parsedRole.role, spawnCwd);
@@ -1418,8 +1438,13 @@ export function buildHttpApp(deps) {
1418
1438
  }
1419
1439
  }
1420
1440
  attachSpecialistEndTurnAutoArchive(deps, tracker.sessionId, tracker.specialist);
1421
- attachPassiveEndTurnAutoClose(deps, tracker.sessionId, passive);
1422
- attachPassiveSpawnToolsCensus(deps, spawnCwd, tracker.sessionId, passive, Boolean(assignedAdminUserId));
1441
+ // Task 2334 — the RESOLVED role, not the raw flag. `parseSpawnRole`
1442
+ // already applied the Task 1483 invariant (a passive spawn rides
1443
+ // role:'public' and is never a specialist); reading the raw boolean
1444
+ // here re-derived it, and got it wrong for a passive flag on an admin
1445
+ // spawn, which the invariant says to ignore and this attached anyway.
1446
+ attachPassiveEndTurnAutoClose(deps, tracker.sessionId, agentRole === 'passive');
1447
+ attachPassiveSpawnToolsCensus(deps, spawnCwd, tracker.sessionId, agentRole === 'passive', Boolean(assignedAdminUserId));
1423
1448
  },
1424
1449
  onUrlCaptured: notifyUrlCaptured,
1425
1450
  tunnelUrlOverride,