@maka/maka-cli 5.122.1 → 5.123.1

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 (366) hide show
  1. package/README.md +64 -64
  2. package/bundle/typescript/package.json +120 -120
  3. package/bundle/typescript/src/README.md +64 -64
  4. package/bundle/typescript/src/commands/aws/aws.command.js +2 -2
  5. package/bundle/typescript/src/commands/aws/ci.sub.cmd.js +5 -5
  6. package/bundle/typescript/src/commands/aws/ckp.sub.cmd.js +12 -12
  7. package/bundle/typescript/src/commands/aws/csg.sub.cmd.js +3 -3
  8. package/bundle/typescript/src/commands/aws/di.sub.cmd.js +8 -8
  9. package/bundle/typescript/src/commands/aws/rkp.sub.cmd.js +5 -5
  10. package/bundle/typescript/src/commands/aws/sth.sub.cmd.js +3 -3
  11. package/bundle/typescript/src/commands/aws/ti.sub.cmd.js +5 -5
  12. package/bundle/typescript/src/commands/build/build.js +16 -16
  13. package/bundle/typescript/src/commands/build/docker.sub.cmd.js +9 -9
  14. package/bundle/typescript/src/commands/create.js +36 -36
  15. package/bundle/typescript/src/commands/debug.js +4 -4
  16. package/bundle/typescript/src/commands/deploy/deploy.command.js +2 -2
  17. package/bundle/typescript/src/commands/deploy/galaxy.sub.cmd.js +2 -2
  18. package/bundle/typescript/src/commands/deploy/github.sub.cmd.js +8 -8
  19. package/bundle/typescript/src/commands/deploy/ubuntu.sub.cmd.js +14 -10
  20. package/bundle/typescript/src/commands/deploy/ubuntu.sub.cmd.js.map +1 -1
  21. package/bundle/typescript/src/commands/env/env.command.js +8 -8
  22. package/bundle/typescript/src/commands/env/set.sub.cmd.js +11 -11
  23. package/bundle/typescript/src/commands/game/sideQuest/adept-powers.d.ts +15 -0
  24. package/bundle/typescript/src/commands/game/sideQuest/adept-powers.js +12 -0
  25. package/bundle/typescript/src/commands/game/sideQuest/adept-powers.js.map +1 -1
  26. package/bundle/typescript/src/commands/game/sideQuest/archetypes.d.ts +10 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +40 -14
  28. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  29. package/bundle/typescript/src/commands/game/sideQuest/augmentations.d.ts +33 -10
  30. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js +155 -72
  31. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js.map +1 -1
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js +15 -6
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js.map +1 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +1 -1
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js.map +1 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +1 -1
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +33 -33
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js +1 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js.map +1 -1
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +2 -2
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/grapple.js +5 -1
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/grapple.js.map +1 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +6 -6
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +4 -4
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -1
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/hop.js +1 -1
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/hop.js.map +1 -1
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.d.ts +20 -0
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js +9 -0
  54. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js.map +1 -1
  55. package/bundle/typescript/src/commands/game/sideQuest/commands/lead.js +7 -3
  56. package/bundle/typescript/src/commands/game/sideQuest/commands/lead.js.map +1 -1
  57. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +3 -3
  58. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
  59. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js +1 -1
  60. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js.map +1 -1
  61. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +3 -3
  62. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -1
  63. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +9 -9
  64. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +10 -10
  65. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
  66. package/bundle/typescript/src/commands/game/sideQuest/commands/source.js +7 -7
  67. package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js +1 -1
  68. package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js.map +1 -1
  69. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.d.ts +24 -0
  70. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js +95 -0
  71. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js.map +1 -1
  72. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +443 -443
  73. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +6 -6
  74. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +45 -1
  75. package/bundle/typescript/src/commands/game/sideQuest/game.js +120 -9
  76. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  77. package/bundle/typescript/src/commands/game/sideQuest/metatypes.d.ts +53 -0
  78. package/bundle/typescript/src/commands/game/sideQuest/metatypes.js +86 -0
  79. package/bundle/typescript/src/commands/game/sideQuest/metatypes.js.map +1 -0
  80. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +214 -208
  81. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  82. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +215 -18
  83. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +548 -117
  84. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  85. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +9 -9
  86. package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +2 -1
  87. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +3 -2
  88. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
  89. package/bundle/typescript/src/commands/game/sideQuest/qualities.d.ts +96 -4
  90. package/bundle/typescript/src/commands/game/sideQuest/qualities.js +290 -11
  91. package/bundle/typescript/src/commands/game/sideQuest/qualities.js.map +1 -1
  92. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +556 -556
  93. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +1447 -1447
  94. package/bundle/typescript/src/commands/game/sideQuest/skill-groups.d.ts +11 -1
  95. package/bundle/typescript/src/commands/game/sideQuest/skill-groups.js +13 -1
  96. package/bundle/typescript/src/commands/game/sideQuest/skill-groups.js.map +1 -1
  97. package/bundle/typescript/src/commands/game/sideQuest/skills.d.ts +17 -0
  98. package/bundle/typescript/src/commands/game/sideQuest/skills.js +23 -0
  99. package/bundle/typescript/src/commands/game/sideQuest/skills.js.map +1 -0
  100. package/bundle/typescript/src/commands/game/sideQuest/spells.d.ts +76 -3
  101. package/bundle/typescript/src/commands/game/sideQuest/spells.js +48 -21
  102. package/bundle/typescript/src/commands/game/sideQuest/spells.js.map +1 -1
  103. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +8 -0
  104. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.d.ts +90 -82
  105. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js +277 -10
  106. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js.map +1 -1
  107. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.d.ts +121 -2
  108. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js +342 -18
  109. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js.map +1 -1
  110. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.d.ts +65 -2
  111. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js +74 -7
  112. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js.map +1 -1
  113. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +1 -1
  114. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  115. package/bundle/typescript/src/commands/game/sideQuest/utilities/effects.d.ts +248 -0
  116. package/bundle/typescript/src/commands/game/sideQuest/utilities/effects.js +38 -0
  117. package/bundle/typescript/src/commands/game/sideQuest/utilities/effects.js.map +1 -0
  118. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js +14 -14
  119. package/bundle/typescript/src/commands/game/sideQuest/utilities/first-aid.js +1 -2
  120. package/bundle/typescript/src/commands/game/sideQuest/utilities/first-aid.js.map +1 -1
  121. package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.js +1 -2
  122. package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.js.map +1 -1
  123. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +5 -0
  124. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  125. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +5 -1
  126. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -1
  127. package/bundle/typescript/src/commands/game/sideQuest/utilities/pregen-worksheet.js +22 -12
  128. package/bundle/typescript/src/commands/game/sideQuest/utilities/pregen-worksheet.js.map +1 -1
  129. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +1 -2
  130. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
  131. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.d.ts +1 -0
  132. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js +20 -0
  133. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js.map +1 -1
  134. package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.js +2 -2
  135. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +33 -2
  136. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  137. package/bundle/typescript/src/commands/generate.js +2 -2
  138. package/bundle/typescript/src/commands/lint.js +10 -10
  139. package/bundle/typescript/src/commands/login.js +19 -1
  140. package/bundle/typescript/src/commands/login.js.map +1 -1
  141. package/bundle/typescript/src/commands/logout.js +16 -1
  142. package/bundle/typescript/src/commands/logout.js.map +1 -1
  143. package/bundle/typescript/src/commands/maka.cmd.js +26 -26
  144. package/bundle/typescript/src/commands/murder.js +14 -14
  145. package/bundle/typescript/src/commands/proxy.js +13 -13
  146. package/bundle/typescript/src/commands/remote/reconfig.sub.cmd.js +6 -6
  147. package/bundle/typescript/src/commands/run/docker.sub.cmd.js +11 -11
  148. package/bundle/typescript/src/commands/run/run.command.js +24 -24
  149. package/bundle/typescript/src/commands/set/global.sub.cmd.js +8 -8
  150. package/bundle/typescript/src/commands/set/local.sub.cmd.js +2 -2
  151. package/bundle/typescript/src/commands/set/set.command.js +3 -3
  152. package/bundle/typescript/src/commands/testCmd/test.command.js +2 -2
  153. package/bundle/typescript/src/exec.js +0 -0
  154. package/bundle/typescript/src/generators/api.js +11 -11
  155. package/bundle/typescript/src/generators/collection.js +6 -6
  156. package/bundle/typescript/src/generators/hook.js +10 -10
  157. package/bundle/typescript/src/generators/kits/auth/auth.generator.js +2 -2
  158. package/bundle/typescript/src/generators/kits/auth/auth0-meteor.auth.gen.js +612 -612
  159. package/bundle/typescript/src/generators/kits/auth/basic-meteor.auth.gen.js +48 -48
  160. package/bundle/typescript/src/generators/kits/auth/provider.auth.gen.js +12 -12
  161. package/bundle/typescript/src/generators/kits/esri/esri.generator.js +3 -3
  162. package/bundle/typescript/src/generators/kits/esri/map.esri.gen.js +7 -7
  163. package/bundle/typescript/src/generators/kits/frames/frames.generator.js +16 -16
  164. package/bundle/typescript/src/generators/kits/mui/auth.mui.gen.js +2 -2
  165. package/bundle/typescript/src/generators/kits/mui/auth0.mui.gen.js +5 -5
  166. package/bundle/typescript/src/generators/kits/mui/frame.mui.gen.js +4 -4
  167. package/bundle/typescript/src/generators/kits/mui/mui.generator.js +22 -22
  168. package/bundle/typescript/src/generators/services/translation.js +5 -5
  169. package/bundle/typescript/src/templates/aws/cloudformation/create-ec2-instance.template +14 -14
  170. package/bundle/typescript/src/templates/meteor/api/api.js +20 -20
  171. package/bundle/typescript/src/templates/meteor/api/api.js.ts +20 -20
  172. package/bundle/typescript/src/templates/meteor/api/apollo-gateway.js +50 -50
  173. package/bundle/typescript/src/templates/meteor/api/apollo-gateway.js.ts +55 -55
  174. package/bundle/typescript/src/templates/meteor/api/graphql-api.js +63 -63
  175. package/bundle/typescript/src/templates/meteor/api/graphql-api.js.ts +69 -69
  176. package/bundle/typescript/src/templates/meteor/api/methods.js +39 -39
  177. package/bundle/typescript/src/templates/meteor/api/methods.js.ts +40 -40
  178. package/bundle/typescript/src/templates/meteor/api/register-api.js +3 -3
  179. package/bundle/typescript/src/templates/meteor/api/register-api.js.ts +3 -3
  180. package/bundle/typescript/src/templates/meteor/api/resolvers.js +9 -9
  181. package/bundle/typescript/src/templates/meteor/api/resolvers.js.ts +9 -9
  182. package/bundle/typescript/src/templates/meteor/api/typeDefs.js +6 -6
  183. package/bundle/typescript/src/templates/meteor/api/typeDefs.js.ts +6 -6
  184. package/bundle/typescript/src/templates/meteor/app/client/body.html +3 -3
  185. package/bundle/typescript/src/templates/meteor/app/client/head.html +12 -12
  186. package/bundle/typescript/src/templates/meteor/app/client/main.js +15 -15
  187. package/bundle/typescript/src/templates/meteor/app/client/main.js.jsx +15 -15
  188. package/bundle/typescript/src/templates/meteor/app/client/main.js.ts +17 -17
  189. package/bundle/typescript/src/templates/meteor/app/client/main.js.tsx +17 -17
  190. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js +20 -20
  191. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.jsx +107 -107
  192. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.ts +20 -20
  193. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.tsx +108 -108
  194. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js +39 -39
  195. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.jsx +33 -33
  196. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.ts +24 -24
  197. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.tsx +33 -33
  198. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js +9 -9
  199. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.jsx +9 -9
  200. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.ts +9 -9
  201. package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.tsx +9 -9
  202. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js +1 -1
  203. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.jsx +20 -20
  204. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.ts +1 -1
  205. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.tsx +20 -20
  206. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/routes.js.jsx +28 -28
  207. package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/routes.js.tsx +28 -28
  208. package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js +1 -1
  209. package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js.jsx +95 -95
  210. package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js.tsx +98 -98
  211. package/bundle/typescript/src/templates/meteor/app/imports/ui/test-helpers.js +24 -24
  212. package/bundle/typescript/src/templates/meteor/app/imports/ui/test-helpers.js.ts +24 -24
  213. package/bundle/typescript/src/templates/meteor/app/lib/main.js +3 -3
  214. package/bundle/typescript/src/templates/meteor/app/lib/main.js.jsx +3 -3
  215. package/bundle/typescript/src/templates/meteor/app/lib/main.js.ts +3 -3
  216. package/bundle/typescript/src/templates/meteor/app/lib/main.js.tsx +3 -3
  217. package/bundle/typescript/src/templates/meteor/app/maka.d.ts +533 -533
  218. package/bundle/typescript/src/templates/meteor/app/meteor.d.ts +181 -181
  219. package/bundle/typescript/src/templates/meteor/app/public/manifest.json +27 -27
  220. package/bundle/typescript/src/templates/meteor/app/public/sw.js +30 -30
  221. package/bundle/typescript/src/templates/meteor/app/public/sw.js.jsx +30 -30
  222. package/bundle/typescript/src/templates/meteor/app/public/sw.js.ts +30 -30
  223. package/bundle/typescript/src/templates/meteor/app/public/sw.js.tsx +30 -30
  224. package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js +179 -179
  225. package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.jsx +179 -179
  226. package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.ts +179 -179
  227. package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.tsx +179 -179
  228. package/bundle/typescript/src/templates/meteor/app/server/main.js +13 -13
  229. package/bundle/typescript/src/templates/meteor/app/server/main.js.jsx +13 -13
  230. package/bundle/typescript/src/templates/meteor/app/server/main.js.ts +14 -14
  231. package/bundle/typescript/src/templates/meteor/app/server/main.js.tsx +14 -14
  232. package/bundle/typescript/src/templates/meteor/app/tsconfig.json +42 -42
  233. package/bundle/typescript/src/templates/meteor/collection/collection.js +51 -51
  234. package/bundle/typescript/src/templates/meteor/collection/collection.js.ts +55 -55
  235. package/bundle/typescript/src/templates/meteor/collection/tests.js +27 -27
  236. package/bundle/typescript/src/templates/meteor/collection/tests.js.ts +27 -27
  237. package/bundle/typescript/src/templates/meteor/config/deploy.sh.template +101 -101
  238. package/bundle/typescript/src/templates/meteor/config/docker-compose.yaml +17 -17
  239. package/bundle/typescript/src/templates/meteor/config/nginx.conf.template +31 -31
  240. package/bundle/typescript/src/templates/meteor/config/pm2.config.js +27 -27
  241. package/bundle/typescript/src/templates/meteor/config/process.env +5 -5
  242. package/bundle/typescript/src/templates/meteor/config/settings.json +11 -11
  243. package/bundle/typescript/src/templates/meteor/config/ssh.json +6 -6
  244. package/bundle/typescript/src/templates/meteor/dbc/config.js +70 -70
  245. package/bundle/typescript/src/templates/meteor/dbc/config.js.ts +70 -70
  246. package/bundle/typescript/src/templates/meteor/dbc/conn.js +37 -37
  247. package/bundle/typescript/src/templates/meteor/dbc/conn.js.ts +37 -37
  248. package/bundle/typescript/src/templates/meteor/dbc/register-dbc.js +3 -3
  249. package/bundle/typescript/src/templates/meteor/dbc/register-dbc.js.ts +3 -3
  250. package/bundle/typescript/src/templates/meteor/github/workflows/deploy.yaml +150 -150
  251. package/bundle/typescript/src/templates/meteor/method/method.js +48 -48
  252. package/bundle/typescript/src/templates/meteor/method/method.js.ts +48 -48
  253. package/bundle/typescript/src/templates/meteor/package/package.js +37 -37
  254. package/bundle/typescript/src/templates/meteor/package/package.js.jsx +37 -37
  255. package/bundle/typescript/src/templates/meteor/package/package.js.ts +36 -36
  256. package/bundle/typescript/src/templates/meteor/package/package.js.tsx +37 -37
  257. package/bundle/typescript/src/templates/meteor/package/tests/client/package.js +5 -5
  258. package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.jsx +5 -5
  259. package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.ts +5 -5
  260. package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.tsx +5 -5
  261. package/bundle/typescript/src/templates/meteor/package/tests/server/package.js +5 -5
  262. package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.jsx +5 -5
  263. package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.ts +5 -5
  264. package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.tsx +5 -5
  265. package/bundle/typescript/src/templates/meteor/project/.maka/config.json +29 -29
  266. package/bundle/typescript/src/templates/meteor/project/README.md +33 -33
  267. package/bundle/typescript/src/templates/meteor/project/build/README +4 -4
  268. package/bundle/typescript/src/templates/meteor/project/gitignore +10 -10
  269. package/bundle/typescript/src/templates/meteor/project/package.json +29 -29
  270. package/bundle/typescript/src/templates/meteor/publish/publish.js +7 -7
  271. package/bundle/typescript/src/templates/meteor/publish/publish.js.ts +7 -7
  272. package/bundle/typescript/src/templates/meteor/service/logger/logger.js +27 -27
  273. package/bundle/typescript/src/templates/meteor/service/logger/logger.js.ts +27 -27
  274. package/bundle/typescript/src/templates/meteor/stylesheet/stylesheet.css +5 -5
  275. package/bundle/typescript/src/templates/meteor/stylesheet/stylesheet.css.less +5 -5
  276. package/bundle/typescript/src/templates/meteor/template/template-tests.js +1 -1
  277. package/bundle/typescript/src/templates/meteor/template/template-tests.js.jsx +55 -55
  278. package/bundle/typescript/src/templates/meteor/template/template-tests.js.ts +1 -1
  279. package/bundle/typescript/src/templates/meteor/template/template-tests.js.tsx +55 -55
  280. package/bundle/typescript/src/templates/meteor/template/template.css +3 -3
  281. package/bundle/typescript/src/templates/meteor/template/template.css.less +3 -3
  282. package/bundle/typescript/src/templates/meteor/template/template.css.scss +3 -3
  283. package/bundle/typescript/src/templates/meteor/template/template.html +5 -5
  284. package/bundle/typescript/src/templates/meteor/template/template.js +20 -20
  285. package/bundle/typescript/src/templates/meteor/template/template.js.jsx +77 -77
  286. package/bundle/typescript/src/templates/meteor/template/template.js.ts +1 -1
  287. package/bundle/typescript/src/templates/meteor/template/template.js.tsx +89 -89
  288. package/bundle/typescript/src/templates/react/component/component.css +6 -6
  289. package/bundle/typescript/src/templates/react/component/component.css.less +6 -6
  290. package/bundle/typescript/src/templates/react/component/component.css.scss +3 -3
  291. package/bundle/typescript/src/templates/react/component/component.js.jsx +59 -59
  292. package/bundle/typescript/src/templates/react/component/component.js.tsx +65 -65
  293. package/bundle/typescript/src/templates/react/hook/hook.css +3 -3
  294. package/bundle/typescript/src/templates/react/hook/hook.css.scss +3 -3
  295. package/bundle/typescript/src/templates/react/hook/hook.js.jsx +19 -19
  296. package/bundle/typescript/src/templates/react/hook/hook.js.tsx +19 -19
  297. package/bundle/typescript/src/templates/react/kit/auth/provider/authentication-provider.js.jsx +306 -306
  298. package/bundle/typescript/src/templates/react/kit/auth/provider/authentication-provider.js.tsx +350 -350
  299. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-client.js.jsx +178 -178
  300. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-client.js.tsx +178 -178
  301. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-config.js.jsx +59 -59
  302. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-config.js.tsx +67 -67
  303. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-methods.js.jsx +273 -273
  304. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-methods.js.tsx +275 -275
  305. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-validator.js.jsx +182 -182
  306. package/bundle/typescript/src/templates/react/kit/auth/service/auth0-validator.js.tsx +199 -199
  307. package/bundle/typescript/src/templates/react/kit/auth/service/meteor-auth-service.js.jsx +138 -138
  308. package/bundle/typescript/src/templates/react/kit/auth/service/meteor-auth-service.js.tsx +153 -153
  309. package/bundle/typescript/src/templates/react/kit/esri/map/basic-map.js.jsx +29 -29
  310. package/bundle/typescript/src/templates/react/kit/esri/map/basic-map.js.tsx +32 -32
  311. package/bundle/typescript/src/templates/react/kit/frames/frames-demo.css +63 -63
  312. package/bundle/typescript/src/templates/react/kit/frames/frames-demo.jsx +153 -153
  313. package/bundle/typescript/src/templates/react/kit/frames/frames-demo.tsx +164 -164
  314. package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.css +105 -105
  315. package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.jsx +158 -158
  316. package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.tsx +166 -166
  317. package/bundle/typescript/src/templates/react/kit/mui/auth/forgot-password/basic-forgot-password-page.js.jsx +34 -34
  318. package/bundle/typescript/src/templates/react/kit/mui/auth/forgot-password/basic-forgot-password-page.js.tsx +33 -33
  319. package/bundle/typescript/src/templates/react/kit/mui/auth/login/basic-login-page.js.jsx +53 -53
  320. package/bundle/typescript/src/templates/react/kit/mui/auth/login/basic-login-page.js.tsx +53 -53
  321. package/bundle/typescript/src/templates/react/kit/mui/auth/logout/basic-logout-page.js.jsx +25 -25
  322. package/bundle/typescript/src/templates/react/kit/mui/auth/logout/basic-logout-page.js.tsx +25 -25
  323. package/bundle/typescript/src/templates/react/kit/mui/auth/password-reset/basic-password-reset-page.js.jsx +41 -41
  324. package/bundle/typescript/src/templates/react/kit/mui/auth/password-reset/basic-password-reset-page.js.tsx +34 -34
  325. package/bundle/typescript/src/templates/react/kit/mui/auth/register/basic-register-page.js.jsx +33 -33
  326. package/bundle/typescript/src/templates/react/kit/mui/auth/register/basic-register-page.js.tsx +33 -33
  327. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth-callback.js.jsx +71 -71
  328. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth-callback.js.tsx +71 -71
  329. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-account-settings.js.jsx +123 -123
  330. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-account-settings.js.tsx +123 -123
  331. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-login-button.js.jsx +56 -56
  332. package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-login-button.js.tsx +74 -74
  333. package/bundle/typescript/src/templates/react/kit/mui/frame/app-bars/basic-app-bar.js.jsx +43 -43
  334. package/bundle/typescript/src/templates/react/kit/mui/frame/app-bars/basic-app-bar.js.tsx +43 -43
  335. package/bundle/typescript/src/templates/react/kit/mui/frame/drawers/basic-drawer.js.jsx +121 -121
  336. package/bundle/typescript/src/templates/react/kit/mui/frame/drawers/basic-drawer.js.tsx +117 -117
  337. package/bundle/typescript/src/templates/react/kit/mui/frame/footers/basic-sticky-footer.js.jsx +41 -41
  338. package/bundle/typescript/src/templates/react/kit/mui/frame/footers/basic-sticky-footer.js.tsx +41 -41
  339. package/bundle/typescript/src/templates/react/route/route.js +8 -8
  340. package/bundle/typescript/src/templates/react/route/route.js.jsx +5 -5
  341. package/bundle/typescript/src/templates/react/route/route.js.ts +8 -8
  342. package/bundle/typescript/src/templates/react/route/route.js.tsx +5 -5
  343. package/bundle/typescript/src/templates/react/test/test.js +1 -1
  344. package/bundle/typescript/src/templates/react/test/test.js.jsx +40 -40
  345. package/bundle/typescript/src/templates/react/test/test.js.ts +1 -1
  346. package/bundle/typescript/src/templates/react/test/test.js.tsx +40 -40
  347. package/bundle/typescript/src/templates/service/docker/Dockerfile +54 -54
  348. package/bundle/typescript/src/templates/service/eslint/babel.config.js +16 -16
  349. package/bundle/typescript/src/templates/service/eslint/config.eslint.js +69 -69
  350. package/bundle/typescript/src/templates/service/i18n/i18n.js +33 -33
  351. package/bundle/typescript/src/templates/service/i18n/i18n.js.ts +33 -33
  352. package/bundle/typescript/src/templates/service/i18n/locales.js +3 -3
  353. package/bundle/typescript/src/templates/service/i18n/locales.js.ts +3 -3
  354. package/bundle/typescript/src/templates/service/openssl/openssl.conf +22 -22
  355. package/bundle/typescript/src/templates/service/test/jest/jest.config.js +24 -24
  356. package/bundle/typescript/src/templates/service/test/jest/jest.setup.js +7 -7
  357. package/bundle/typescript/src/tools/guarded-file/guarded-file.class.d.ts +59 -0
  358. package/bundle/typescript/src/tools/guarded-file/guarded-file.class.js +120 -0
  359. package/bundle/typescript/src/tools/guarded-file/guarded-file.class.js.map +1 -0
  360. package/bundle/typescript/src/tools/mpi/mpi.class.d.ts +16 -0
  361. package/bundle/typescript/src/tools/mpi/mpi.class.js +25 -7
  362. package/bundle/typescript/src/tools/mpi/mpi.class.js.map +1 -1
  363. package/bundle/typescript/src/tools/mpi/sdk-runtime.d.ts +1 -0
  364. package/bundle/typescript/src/tools/mpi/sdk-runtime.js +29 -0
  365. package/bundle/typescript/src/tools/mpi/sdk-runtime.js.map +1 -1
  366. package/package.json +120 -120
@@ -132,12 +132,12 @@ export class SceneSynthesizer {
132
132
  // Shared context handed to every ensureAI*() call below, so room
133
133
  // descriptions, NPC appearances, and puzzle riddles all stay
134
134
  // consistent with the same scene tone.
135
- const sceneContext = `
136
- Scene: ${json.name}
137
- Story: ${json.story}
138
- Currency: ${json.currency.type}
139
- Residence Tiers: ${json.residenceTiers.join(', ')}
140
- Key Locations: ${json.rooms.map(r => r.name).join(', ')}
135
+ const sceneContext = `
136
+ Scene: ${json.name}
137
+ Story: ${json.story}
138
+ Currency: ${json.currency.type}
139
+ Residence Tiers: ${json.residenceTiers.join(', ')}
140
+ Key Locations: ${json.rooms.map(r => r.name).join(', ')}
141
141
  `.trim();
142
142
  // Step 2: Create and Register Rooms using RoomFactory
143
143
  logger.write(`Creating Rooms`);
@@ -319,6 +319,9 @@ export default class Game {
319
319
  * touches this map -- the legacy single-contract path above is the
320
320
  * solo behavior, byte for byte. */
321
321
  docwagonByPlayer: Map<string, IDocwagonContract>;
322
+ /** The cloud burn started by close(), awaited briefly so the death
323
+ * screen can show the server-stamped time. */
324
+ private _burnInFlight?;
322
325
  /** Shared-run hook: a player's HTR extraction (stabilized and carried
323
326
  * off the job). The hosting server writes their snapshot back and
324
327
  * marks them 'left'. */
@@ -1234,7 +1237,30 @@ export default class Game {
1234
1237
  * would otherwise re-arm it).
1235
1238
  */
1236
1239
  launchPendingRun(): Promise<string>;
1237
- close(): Promise<void>;
1240
+ /**
1241
+ * `cause` is the engine's own death line ("💀 GAME OVER: ... was gunned
1242
+ * down by ..."). It rides the burn to the server, which makes it the
1243
+ * dossier's headline and the seed of the obituary (maka-cli-com-c3
1244
+ * contract, 2026-09-04). A generic line here would produce a generic
1245
+ * obituary, so the specific one is threaded all the way from the kill.
1246
+ */
1247
+ close(cause?: string): Promise<void>;
1248
+ /**
1249
+ * Waits BRIEFLY for the server to stamp the death and answer with the
1250
+ * memorial. Raced against a timeout on purpose: the burn is already
1251
+ * tombstoned locally and the launcher's sweep finishes it either way,
1252
+ * so a slow or dead network costs the player a moment rather than the
1253
+ * death screen itself.
1254
+ */
1255
+ private deathMemorial;
1256
+ /**
1257
+ * The death screen's offer. The URL is ALWAYS printed, for the same
1258
+ * reason the chargen handoff prints its own: a headless or SSH session
1259
+ * has no browser to open, so a link that exists only behind a keypress
1260
+ * is no link at all. Headless sessions reach close() too (Phase C) and
1261
+ * simply have no screen to bind -- the lines still land in the log.
1262
+ */
1263
+ private offerDossier;
1238
1264
  /**
1239
1265
  * THE CLOCK TICKER (playtest 2026-08-27). The gutter rendered once,
1240
1266
  * whenever the pane happened to paint, and then showed that moment
@@ -1418,6 +1444,24 @@ export default class Game {
1418
1444
  * programs / astral will and reads as Armed. White, not gray, for the
1419
1445
  * same legibility reason as the stance it now sits beside.
1420
1446
  */
1447
+ /**
1448
+ * THE DOCWAGON SLOT (user, 2026-09-04, after a Matrix fight killed Maka:
1449
+ * "let's setup a status for docwagon level, so it's clear to see that I
1450
+ * don't have one").
1451
+ *
1452
+ * NO CONTRACT IS THE STATE WORTH SEEING, so it is the one drawn in red
1453
+ * and never omitted. A missing wristband is the difference between a
1454
+ * bad fight and a dead character, and the panel that could have said so
1455
+ * showed armor and an AR overlay and nothing about whether anyone was
1456
+ * coming. It reads at a glance now, beside the two slots that already
1457
+ * answer "how ready am I".
1458
+ *
1459
+ * The tier's resuscitations are what the band actually buys (p.450), so
1460
+ * a contract with none left says that rather than the tier name alone --
1461
+ * a Gold that has spent its one free resusc is closer to Basic than to
1462
+ * Gold, and "GOLD" on its own would be a comforting lie.
1463
+ */
1464
+ private docwagonSlot;
1421
1465
  private armedLine;
1422
1466
  /**
1423
1467
  * THE LOG WEARS THE PLANE (player request 2026-08-25). Jacking in or
@@ -1,5 +1,8 @@
1
1
  import { agentRatingFromName } from './utilities/programs.js';
2
2
  import { MATRIX_STANCE_ACTION } from './models/player.js';
3
+ import { buildDossierUrl } from './utilities/web-character-generator.js';
4
+ import { makaHost } from '../../../tools/https/maka-host.js';
5
+ import { openBrowser } from '../../../tools/browser/open-browser.js';
3
6
  import blessed from 'blessed';
4
7
  import { hostLabel } from './utilities/grid-names.js';
5
8
  import { marksPlaced, marksOnYou } from './utilities/marks.js';
@@ -18,7 +21,7 @@ import { SAVE_VERSION } from './types/save-file.js';
18
21
  import { serializePlayer, restorePlayer, captureHubOverlay, applyHubOverlay, writeSaveAtomic, deleteSave, restoreItem, readSave, serializeItem, saveSlug, spillPathFor, } from './utilities/persistence.js';
19
22
  import { heartbeatPresence, heartbeatPresenceNow } from './utilities/social.js';
20
23
  import { presenceBeatAllowed } from './utilities/presence-gate.js';
21
- import { pushSave, burnCloudSaveFor, enqueueBoundPush, flushPushQueue, writeSpill, clearSpill, hasPendingPush, } from './utilities/cloud-saves.js';
24
+ import { pushSave, burnCloudSaveFor, enqueueBoundPush, flushPushQueue, writeSpill, takeLastMemorial, authToken, clearSpill, hasPendingPush, } from './utilities/cloud-saves.js';
22
25
  import { DOCWAGON_TIERS, RESUSC_FEE, DEATH_COMP } from './utilities/docwagon.js';
23
26
  import { isFence, LIFESTYLE_TIERS, canonicalLifestyleTier } from './utilities/commerce.js';
24
27
  import { attachBrandMark, attachBrandMarkBottomRight } from './utilities/brand-mark.js';
@@ -86,7 +89,7 @@ import { LeadCommand, RecruitCommand } from './commands/lead.js';
86
89
  import { CrewCommand, HireCommand, DismissCommand, TrainCommand } from './commands/crew.js';
87
90
  import { PalmCommand } from './commands/palm.js';
88
91
  import { CatalogCommand } from './commands/catalog.js';
89
- import { refreshCatalog } from './utilities/catalog.js';
92
+ import { ensureCatalog } from './utilities/catalog.js';
90
93
  import { PerformCommand } from './commands/perform.js';
91
94
  import { EdgeCommand } from './commands/edge.js';
92
95
  import { SheetCommand } from './commands/sheet.js';
@@ -868,6 +871,9 @@ export default class Game {
868
871
  * touches this map -- the legacy single-contract path above is the
869
872
  * solo behavior, byte for byte. */
870
873
  docwagonByPlayer = new Map();
874
+ /** The cloud burn started by close(), awaited briefly so the death
875
+ * screen can show the server-stamped time. */
876
+ _burnInFlight;
871
877
  /** Shared-run hook: a player's HTR extraction (stabilized and carried
872
878
  * off the job). The hosting server writes their snapshot back and
873
879
  * marks them 'left'. */
@@ -2168,7 +2174,7 @@ export default class Game {
2168
2174
  if (client.dead) {
2169
2175
  this.contacts.delete(client.name);
2170
2176
  Logger.getInstance().write(`Client reputation settled: ${client.name} (dead -- no contact).`);
2171
- return `
2177
+ return `
2172
2178
  ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and their friends ask questions.`;
2173
2179
  }
2174
2180
  const existing = this.contacts.get(client.name);
@@ -2740,9 +2746,14 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
2740
2746
  Logger.getInstance().logWithColor(`⚠ Your AI provider refused: "${message.slice(0, 140)}" -- NPC voices and job generation are OFFLINE until the key or credits are fixed. Dice, combat, and coms still work.`, 'yellow');
2741
2747
  this.screenRender?.();
2742
2748
  };
2743
- // The swag catalog warms from maka-cli.com in the background
2749
+ // The catalog warms from maka-cli.com in the background
2744
2750
  // (utilities/catalog.ts): live list > local cache > baked-in floor.
2745
- void refreshCatalog();
2751
+ //
2752
+ // A VERSION CHECK FIRST, not a download every boot. The server is
2753
+ // asked for a number; the ~900KB list follows only if the local
2754
+ // cache is behind it. Signed-out players are served their cache or
2755
+ // the floor and nothing leaves the machine.
2756
+ void ensureCatalog({ token: authToken() });
2746
2757
  // No "Generating Scene... Please wait." box anymore: every path now
2747
2758
  // arrives with REAL prose (hand-authored static seeds, chunk-authored
2748
2759
  // generated scenes), so the old blocking AI-redressing pass -- 30-60
@@ -4286,7 +4297,14 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
4286
4297
  return `The ride never shows and the job address goes dead. ${FIXER_NAME} will not enjoy hearing this -- call him for another.`;
4287
4298
  }
4288
4299
  }
4289
- async close() {
4300
+ /**
4301
+ * `cause` is the engine's own death line ("💀 GAME OVER: ... was gunned
4302
+ * down by ..."). It rides the burn to the server, which makes it the
4303
+ * dossier's headline and the seed of the obituary (maka-cli-com-c3
4304
+ * contract, 2026-09-04). A generic line here would produce a generic
4305
+ * obituary, so the specific one is threaded all the way from the kill.
4306
+ */
4307
+ async close(cause) {
4290
4308
  // PERMADEATH (player ruling): close() is reachable ONLY via
4291
4309
  // Scene.endGame(), and endGame fires ONLY on real death (combat
4292
4310
  // resolveDeath, street-decides knockout, drain burnout, ward
@@ -4299,7 +4317,7 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
4299
4317
  deleteSave(this._saveFilePath);
4300
4318
  // The cloud copy burns too -- tombstone-first, so an offline death
4301
4319
  // can't be resurrected from the mirror (see cloud-saves.ts).
4302
- burnCloudSaveFor(this._saveFilePath, this.player.name);
4320
+ this._burnInFlight = burnCloudSaveFor(this._saveFilePath, this.player.name, { manner: 'killed', ...(cause ? { cause } : {}) });
4303
4321
  Logger.getInstance().write(`Permadeath: save deleted (${this._saveFilePath}).`);
4304
4322
  }
4305
4323
  this.stopPursuitHeartbeat();
@@ -4310,12 +4328,66 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
4310
4328
  this._inputBox.cancel(); // cancels any active input session
4311
4329
  this._inputBox.detach(); // optionally remove from screen
4312
4330
  }
4331
+ // ONE LAST THING THEY CAN DO (user, 2026-09-04: "I'd like the player
4332
+ // the option to open it ... as a last command they can do, or quit").
4333
+ // A memorial only comes back for a BOUND runner whose burn reached
4334
+ // the server. An anonymous one dies locally and is offered nothing,
4335
+ // which is right -- there is no dossier to open (user ruling: "an
4336
+ // anonymous runner doesn't need a server stamp, their character is
4337
+ // local").
4338
+ const memorial = await this.deathMemorial();
4313
4339
  if (this._screen) {
4314
4340
  this._screen.render(); // re-render if needed
4315
4341
  this._screen.key(['C-c'], () => {
4316
4342
  process.exit(2);
4317
4343
  });
4318
4344
  }
4345
+ if (memorial)
4346
+ this.offerDossier(memorial);
4347
+ }
4348
+ /**
4349
+ * Waits BRIEFLY for the server to stamp the death and answer with the
4350
+ * memorial. Raced against a timeout on purpose: the burn is already
4351
+ * tombstoned locally and the launcher's sweep finishes it either way,
4352
+ * so a slow or dead network costs the player a moment rather than the
4353
+ * death screen itself.
4354
+ */
4355
+ async deathMemorial() {
4356
+ if (!this._burnInFlight)
4357
+ return undefined;
4358
+ const timeout = new Promise(resolve => { setTimeout(resolve, 4000).unref?.(); });
4359
+ try {
4360
+ await Promise.race([this._burnInFlight, timeout]);
4361
+ }
4362
+ catch { /* a failed burn is still a death; the sweep finishes it */ }
4363
+ return takeLastMemorial();
4364
+ }
4365
+ /**
4366
+ * The death screen's offer. The URL is ALWAYS printed, for the same
4367
+ * reason the chargen handoff prints its own: a headless or SSH session
4368
+ * has no browser to open, so a link that exists only behind a keypress
4369
+ * is no link at all. Headless sessions reach close() too (Phase C) and
4370
+ * simply have no screen to bind -- the lines still land in the log.
4371
+ */
4372
+ offerDossier(memorial) {
4373
+ const token = authToken();
4374
+ const url = token
4375
+ ? buildDossierUrl(token, memorial.dossier)
4376
+ : `${makaHost().origin}${memorial.dossier}`;
4377
+ const died = new Date(memorial.diedAt);
4378
+ const when = Number.isNaN(died.getTime()) ? memorial.diedAt : died.toLocaleString();
4379
+ const log = Logger.getInstance();
4380
+ log.logWithColor(`Time of death, on the record: ${when}`, 'red');
4381
+ log.logWithColor(`Their dossier: ${url}`, 'red');
4382
+ if (!this._screen)
4383
+ return;
4384
+ log.logWithColor(`Press D to open it, or ctrl-c to quit.`, 'red');
4385
+ this._screen.key(['d', 'D'], () => {
4386
+ openBrowser(url);
4387
+ log.logWithColor(`Opening the dossier. Press ctrl-c when you're done.`, 'red');
4388
+ this._screen?.render();
4389
+ });
4390
+ this._screen.render();
4319
4391
  }
4320
4392
  /**
4321
4393
  * THE CLOCK TICKER (playtest 2026-08-27). The gutter rendered once,
@@ -4948,6 +5020,38 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
4948
5020
  * programs / astral will and reads as Armed. White, not gray, for the
4949
5021
  * same legibility reason as the stance it now sits beside.
4950
5022
  */
5023
+ /**
5024
+ * THE DOCWAGON SLOT (user, 2026-09-04, after a Matrix fight killed Maka:
5025
+ * "let's setup a status for docwagon level, so it's clear to see that I
5026
+ * don't have one").
5027
+ *
5028
+ * NO CONTRACT IS THE STATE WORTH SEEING, so it is the one drawn in red
5029
+ * and never omitted. A missing wristband is the difference between a
5030
+ * bad fight and a dead character, and the panel that could have said so
5031
+ * showed armor and an AR overlay and nothing about whether anyone was
5032
+ * coming. It reads at a glance now, beside the two slots that already
5033
+ * answer "how ready am I".
5034
+ *
5035
+ * The tier's resuscitations are what the band actually buys (p.450), so
5036
+ * a contract with none left says that rather than the tier name alone --
5037
+ * a Gold that has spent its one free resusc is closer to Basic than to
5038
+ * Gold, and "GOLD" on its own would be a comforting lie.
5039
+ */
5040
+ docwagonSlot(contract) {
5041
+ if (!contract)
5042
+ return `{red-fg}✚ NO DOCWAGON{/red-fg}`;
5043
+ const tier = contract.tier.replace('-', ' ').toUpperCase();
5044
+ const { freeResuscs } = DOCWAGON_TIERS[contract.tier];
5045
+ // A band with paid-up resuscs is the reassuring case; one that has
5046
+ // spent them still summons a team, it just bills for the table.
5047
+ const resuscs = freeResuscs === 0
5048
+ ? ` (billed)`
5049
+ : contract.resuscsLeft > 0
5050
+ ? ` (${contract.resuscsLeft} resusc)`
5051
+ : ` (spent -- billed)`;
5052
+ const color = contract.resuscsLeft > 0 ? CALL_COLOR : 'yellow';
5053
+ return `{${color}-fg}✚ ${tier}${resuscs}{/${color}-fg}`;
5054
+ }
4951
5055
  armedLine(player) {
4952
5056
  const weapon = player.getWeaponProfile();
4953
5057
  const weaponItem = player.getCarriedWeapon();
@@ -5085,7 +5189,14 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
5085
5189
  // The clock LEFT this line for the gutter beside the prompt. It was
5086
5190
  // the last field here, so it was the first thing clipped whenever
5087
5191
  // the pane got tight -- the reason the player could not find it.
5088
- lines.push(`${armorNote}${arSlot} | ${link}`);
5192
+ // The band reads for whichever player this HUD belongs to: a shared
5193
+ // run keeps contracts per player, solo keeps one on the Game.
5194
+ // Optional chaining because the HUD builder runs against partially
5195
+ // constructed Games in fixtures (threads-on-hud.test.ts builds a stub
5196
+ // with no contract map) -- a status line must never be the thing that
5197
+ // throws, least of all on the panel a dying player is reading.
5198
+ const docwagon = this.docwagonSlot(this.docwagonByPlayer?.get(player.name) ?? (player === this.player ? this.docwagon : undefined));
5199
+ lines.push(`${armorNote}${arSlot} | ${link} | ${docwagon}`);
5089
5200
  // Lines 4+: transient states, present only while active. Future
5090
5201
  // contexts (astral projection, VR hot-sim) join here the same way.
5091
5202
  if (player.sustainedArmor > 0) {
@@ -5331,7 +5442,7 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
5331
5442
  const mapInner = mapWidth ?? 15;
5332
5443
  const mapView = Math.max(7, mapInner % 2 === 0 ? mapInner - 1 : mapInner);
5333
5444
  const mapLines = renderMapViewport(this.scene.getRooms(), here, (r, d) => this.scene.barrierSealing(r, d), {
5334
- visited: this.player.hasCapability('no-fog') ? undefined /* Mapsoft (p.442): the district drawn and named -- its row's capability (catalog v13) */ : this.player.visitedRooms,
5445
+ visited: this.player.can('no-fog') ? undefined /* Mapsoft (p.442): the district drawn and named -- its row's capability (catalog v13) */ : this.player.visitedRooms,
5335
5446
  arEyes: this.player.hasMatrixEyes(),
5336
5447
  }, mapView, tallestRoomRows());
5337
5448
  // The captions the HUD used to carry: where you are under the