@stigmer/server 3.15.3-dev.20260914121148 → 3.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (680) hide show
  1. package/README.md +3 -3
  2. package/dist/archive/content-store.d.ts +35 -0
  3. package/dist/archive/content-store.d.ts.map +1 -0
  4. package/dist/archive/content-store.js +98 -0
  5. package/dist/archive/content-store.js.map +1 -0
  6. package/dist/archive/inflate.d.ts +22 -0
  7. package/dist/archive/inflate.d.ts.map +1 -0
  8. package/dist/archive/inflate.js +75 -0
  9. package/dist/archive/inflate.js.map +1 -0
  10. package/dist/archive/limits.d.ts +33 -0
  11. package/dist/archive/limits.d.ts.map +1 -0
  12. package/dist/archive/limits.js +31 -0
  13. package/dist/archive/limits.js.map +1 -0
  14. package/dist/archive/open.d.ts +24 -0
  15. package/dist/archive/open.d.ts.map +1 -0
  16. package/dist/archive/open.js +93 -0
  17. package/dist/archive/open.js.map +1 -0
  18. package/dist/{domain/skill/storage → archive}/prefilter.d.ts +5 -0
  19. package/dist/archive/prefilter.d.ts.map +1 -0
  20. package/dist/archive/prefilter.js.map +1 -0
  21. package/dist/archive/write.d.ts +8 -0
  22. package/dist/archive/write.d.ts.map +1 -0
  23. package/dist/archive/write.js +44 -0
  24. package/dist/archive/write.js.map +1 -0
  25. package/dist/authorization/authorizer.d.ts +98 -0
  26. package/dist/authorization/authorizer.d.ts.map +1 -0
  27. package/dist/authorization/authorizer.js +156 -0
  28. package/dist/authorization/authorizer.js.map +1 -0
  29. package/dist/authorization/derived-tuples.d.ts +42 -0
  30. package/dist/authorization/derived-tuples.d.ts.map +1 -0
  31. package/dist/authorization/derived-tuples.js +240 -0
  32. package/dist/authorization/derived-tuples.js.map +1 -0
  33. package/dist/authorization/evaluator.d.ts +66 -0
  34. package/dist/authorization/evaluator.d.ts.map +1 -0
  35. package/dist/authorization/evaluator.js +153 -0
  36. package/dist/authorization/evaluator.js.map +1 -0
  37. package/dist/authorization/facts.d.ts +29 -0
  38. package/dist/authorization/facts.d.ts.map +1 -0
  39. package/dist/authorization/facts.js +17 -0
  40. package/dist/authorization/facts.js.map +1 -0
  41. package/dist/authorization/lane-admission.d.ts +50 -0
  42. package/dist/authorization/lane-admission.d.ts.map +1 -0
  43. package/dist/authorization/lane-admission.js +13 -0
  44. package/dist/authorization/lane-admission.js.map +1 -0
  45. package/dist/authorization/list-read-scope.d.ts +18 -0
  46. package/dist/authorization/list-read-scope.d.ts.map +1 -0
  47. package/dist/authorization/list-read-scope.js +155 -0
  48. package/dist/authorization/list-read-scope.js.map +1 -0
  49. package/dist/authorization/model/agent.d.ts +2 -0
  50. package/dist/authorization/model/agent.d.ts.map +1 -0
  51. package/dist/authorization/model/agent.js +42 -0
  52. package/dist/authorization/model/agent.js.map +1 -0
  53. package/dist/authorization/model/agent_channel.d.ts +2 -0
  54. package/dist/authorization/model/agent_channel.d.ts.map +1 -0
  55. package/dist/authorization/model/agent_channel.js +38 -0
  56. package/dist/authorization/model/agent_channel.js.map +1 -0
  57. package/dist/authorization/model/agent_execution.d.ts +2 -0
  58. package/dist/authorization/model/agent_execution.d.ts.map +1 -0
  59. package/dist/authorization/model/agent_execution.js +25 -0
  60. package/dist/authorization/model/agent_execution.js.map +1 -0
  61. package/dist/authorization/model/agent_instance.d.ts +2 -0
  62. package/dist/authorization/model/agent_instance.d.ts.map +1 -0
  63. package/dist/authorization/model/agent_instance.js +47 -0
  64. package/dist/authorization/model/agent_instance.js.map +1 -0
  65. package/dist/authorization/model/agent_share.d.ts +2 -0
  66. package/dist/authorization/model/agent_share.d.ts.map +1 -0
  67. package/dist/authorization/model/agent_share.js +29 -0
  68. package/dist/authorization/model/agent_share.js.map +1 -0
  69. package/dist/authorization/model/api_key.d.ts +2 -0
  70. package/dist/authorization/model/api_key.d.ts.map +1 -0
  71. package/dist/authorization/model/api_key.js +27 -0
  72. package/dist/authorization/model/api_key.js.map +1 -0
  73. package/dist/authorization/model/artifact.d.ts +2 -0
  74. package/dist/authorization/model/artifact.d.ts.map +1 -0
  75. package/dist/authorization/model/artifact.js +27 -0
  76. package/dist/authorization/model/artifact.js.map +1 -0
  77. package/dist/authorization/model/channel_app.d.ts +2 -0
  78. package/dist/authorization/model/channel_app.d.ts.map +1 -0
  79. package/dist/authorization/model/channel_app.js +28 -0
  80. package/dist/authorization/model/channel_app.js.map +1 -0
  81. package/dist/authorization/model/default-of.d.ts +38 -0
  82. package/dist/authorization/model/default-of.d.ts.map +1 -0
  83. package/dist/authorization/model/default-of.js +39 -0
  84. package/dist/authorization/model/default-of.js.map +1 -0
  85. package/dist/authorization/model/environment.d.ts +2 -0
  86. package/dist/authorization/model/environment.d.ts.map +1 -0
  87. package/dist/authorization/model/environment.js +33 -0
  88. package/dist/authorization/model/environment.js.map +1 -0
  89. package/dist/authorization/model/execution_context.d.ts +2 -0
  90. package/dist/authorization/model/execution_context.d.ts.map +1 -0
  91. package/dist/authorization/model/execution_context.js +19 -0
  92. package/dist/authorization/model/execution_context.js.map +1 -0
  93. package/dist/authorization/model/iam_policy.d.ts +2 -0
  94. package/dist/authorization/model/iam_policy.d.ts.map +1 -0
  95. package/dist/authorization/model/iam_policy.js +31 -0
  96. package/dist/authorization/model/iam_policy.js.map +1 -0
  97. package/dist/authorization/model/identity_account.d.ts +2 -0
  98. package/dist/authorization/model/identity_account.d.ts.map +1 -0
  99. package/dist/authorization/model/identity_account.js +25 -0
  100. package/dist/authorization/model/identity_account.js.map +1 -0
  101. package/dist/authorization/model/index.d.ts +36 -0
  102. package/dist/authorization/model/index.d.ts.map +1 -0
  103. package/dist/authorization/model/index.js +72 -0
  104. package/dist/authorization/model/index.js.map +1 -0
  105. package/dist/authorization/model/mcp_server.d.ts +2 -0
  106. package/dist/authorization/model/mcp_server.d.ts.map +1 -0
  107. package/dist/authorization/model/mcp_server.js +37 -0
  108. package/dist/authorization/model/mcp_server.js.map +1 -0
  109. package/dist/authorization/model/memory.d.ts +2 -0
  110. package/dist/authorization/model/memory.d.ts.map +1 -0
  111. package/dist/authorization/model/memory.js +26 -0
  112. package/dist/authorization/model/memory.js.map +1 -0
  113. package/dist/authorization/model/oauth_app.d.ts +2 -0
  114. package/dist/authorization/model/oauth_app.d.ts.map +1 -0
  115. package/dist/authorization/model/oauth_app.js +30 -0
  116. package/dist/authorization/model/oauth_app.js.map +1 -0
  117. package/dist/authorization/model/organization.d.ts +2 -0
  118. package/dist/authorization/model/organization.d.ts.map +1 -0
  119. package/dist/authorization/model/organization.js +54 -0
  120. package/dist/authorization/model/organization.js.map +1 -0
  121. package/dist/authorization/model/plugin.d.ts +2 -0
  122. package/dist/authorization/model/plugin.d.ts.map +1 -0
  123. package/dist/authorization/model/plugin.js +44 -0
  124. package/dist/authorization/model/plugin.js.map +1 -0
  125. package/dist/authorization/model/project.d.ts +2 -0
  126. package/dist/authorization/model/project.d.ts.map +1 -0
  127. package/dist/authorization/model/project.js +32 -0
  128. package/dist/authorization/model/project.js.map +1 -0
  129. package/dist/authorization/model/rewrite.d.ts +127 -0
  130. package/dist/authorization/model/rewrite.d.ts.map +1 -0
  131. package/dist/authorization/model/rewrite.js +82 -0
  132. package/dist/authorization/model/rewrite.js.map +1 -0
  133. package/dist/authorization/model/schedule.d.ts +2 -0
  134. package/dist/authorization/model/schedule.d.ts.map +1 -0
  135. package/dist/authorization/model/schedule.js +29 -0
  136. package/dist/authorization/model/schedule.js.map +1 -0
  137. package/dist/authorization/model/session.d.ts +2 -0
  138. package/dist/authorization/model/session.d.ts.map +1 -0
  139. package/dist/authorization/model/session.js +38 -0
  140. package/dist/authorization/model/session.js.map +1 -0
  141. package/dist/authorization/model/skill.d.ts +2 -0
  142. package/dist/authorization/model/skill.d.ts.map +1 -0
  143. package/dist/authorization/model/skill.js +38 -0
  144. package/dist/authorization/model/skill.js.map +1 -0
  145. package/dist/authorization/model/workflow.d.ts +2 -0
  146. package/dist/authorization/model/workflow.d.ts.map +1 -0
  147. package/dist/authorization/model/workflow.js +38 -0
  148. package/dist/authorization/model/workflow.js.map +1 -0
  149. package/dist/authorization/model/workflow_execution.d.ts +2 -0
  150. package/dist/authorization/model/workflow_execution.d.ts.map +1 -0
  151. package/dist/authorization/model/workflow_execution.js +32 -0
  152. package/dist/authorization/model/workflow_execution.js.map +1 -0
  153. package/dist/authorization/model/workflow_instance.d.ts +2 -0
  154. package/dist/authorization/model/workflow_instance.d.ts.map +1 -0
  155. package/dist/authorization/model/workflow_instance.js +92 -0
  156. package/dist/authorization/model/workflow_instance.js.map +1 -0
  157. package/dist/authorization/organization-directory.d.ts +13 -0
  158. package/dist/authorization/organization-directory.d.ts.map +1 -0
  159. package/dist/authorization/organization-directory.js +83 -0
  160. package/dist/authorization/organization-directory.js.map +1 -0
  161. package/dist/authorization/person.d.ts +42 -0
  162. package/dist/authorization/person.d.ts.map +1 -0
  163. package/dist/authorization/person.js +19 -0
  164. package/dist/authorization/person.js.map +1 -0
  165. package/dist/authorization/posture.d.ts +38 -0
  166. package/dist/authorization/posture.d.ts.map +1 -0
  167. package/dist/authorization/posture.js +7 -0
  168. package/dist/authorization/posture.js.map +1 -0
  169. package/dist/authorization/schedule-fire-caller.d.ts +12 -0
  170. package/dist/authorization/schedule-fire-caller.d.ts.map +1 -0
  171. package/dist/authorization/schedule-fire-caller.js +67 -0
  172. package/dist/authorization/schedule-fire-caller.js.map +1 -0
  173. package/dist/authorization/store-test-kit.d.ts +68 -0
  174. package/dist/authorization/store-test-kit.d.ts.map +1 -0
  175. package/dist/authorization/store-test-kit.js +311 -0
  176. package/dist/authorization/store-test-kit.js.map +1 -0
  177. package/dist/authorization/tuples.d.ts +115 -0
  178. package/dist/authorization/tuples.d.ts.map +1 -0
  179. package/dist/authorization/tuples.js +83 -0
  180. package/dist/authorization/tuples.js.map +1 -0
  181. package/dist/boot/compose.d.ts.map +1 -1
  182. package/dist/boot/compose.js +220 -43
  183. package/dist/boot/compose.js.map +1 -1
  184. package/dist/boot/inprocess.d.ts +12 -0
  185. package/dist/boot/inprocess.d.ts.map +1 -1
  186. package/dist/boot/inprocess.js +68 -21
  187. package/dist/boot/inprocess.js.map +1 -1
  188. package/dist/domain/agent/controller.d.ts.map +1 -1
  189. package/dist/domain/agent/controller.js +9 -0
  190. package/dist/domain/agent/controller.js.map +1 -1
  191. package/dist/domain/executioncontext/resolve-values-for-caller.d.ts +33 -14
  192. package/dist/domain/executioncontext/resolve-values-for-caller.d.ts.map +1 -1
  193. package/dist/domain/executioncontext/resolve-values-for-caller.js +32 -8
  194. package/dist/domain/executioncontext/resolve-values-for-caller.js.map +1 -1
  195. package/dist/domain/iampolicy/constants.d.ts +11 -0
  196. package/dist/domain/iampolicy/constants.d.ts.map +1 -1
  197. package/dist/domain/iampolicy/constants.js +11 -0
  198. package/dist/domain/iampolicy/constants.js.map +1 -1
  199. package/dist/domain/iampolicy/membership.d.ts +72 -1
  200. package/dist/domain/iampolicy/membership.d.ts.map +1 -1
  201. package/dist/domain/iampolicy/membership.js +141 -56
  202. package/dist/domain/iampolicy/membership.js.map +1 -1
  203. package/dist/domain/identityaccount/actor.d.ts +41 -0
  204. package/dist/domain/identityaccount/actor.d.ts.map +1 -0
  205. package/dist/domain/identityaccount/actor.js +34 -0
  206. package/dist/domain/identityaccount/actor.js.map +1 -0
  207. package/dist/domain/identityaccount/resolve.d.ts +19 -0
  208. package/dist/domain/identityaccount/resolve.d.ts.map +1 -1
  209. package/dist/domain/identityaccount/resolve.js +12 -0
  210. package/dist/domain/identityaccount/resolve.js.map +1 -1
  211. package/dist/domain/mcpserver/connect-execution-id.d.ts +5 -0
  212. package/dist/domain/mcpserver/connect-execution-id.d.ts.map +1 -0
  213. package/dist/domain/mcpserver/connect-execution-id.js +32 -0
  214. package/dist/domain/mcpserver/connect-execution-id.js.map +1 -0
  215. package/dist/domain/mcpserver/connect.d.ts +28 -2
  216. package/dist/domain/mcpserver/connect.d.ts.map +1 -1
  217. package/dist/domain/mcpserver/connect.js +27 -7
  218. package/dist/domain/mcpserver/connect.js.map +1 -1
  219. package/dist/domain/mcpserver/controller.d.ts.map +1 -1
  220. package/dist/domain/mcpserver/controller.js +9 -0
  221. package/dist/domain/mcpserver/controller.js.map +1 -1
  222. package/dist/domain/mcpserver/engine.d.ts +9 -3
  223. package/dist/domain/mcpserver/engine.d.ts.map +1 -1
  224. package/dist/domain/mcpserver/engine.js.map +1 -1
  225. package/dist/domain/mcpserver/start-connect.js +1 -1
  226. package/dist/domain/mcpserver/start-connect.js.map +1 -1
  227. package/dist/domain/platform/controller.d.ts +24 -11
  228. package/dist/domain/platform/controller.d.ts.map +1 -1
  229. package/dist/domain/platform/controller.js.map +1 -1
  230. package/dist/domain/plugin/archive.d.ts +37 -0
  231. package/dist/domain/plugin/archive.d.ts.map +1 -0
  232. package/dist/domain/plugin/archive.js +50 -0
  233. package/dist/domain/plugin/archive.js.map +1 -0
  234. package/dist/domain/plugin/constants.d.ts +38 -0
  235. package/dist/domain/plugin/constants.d.ts.map +1 -0
  236. package/dist/domain/plugin/constants.js +46 -0
  237. package/dist/domain/plugin/constants.js.map +1 -0
  238. package/dist/domain/plugin/controller.d.ts +25 -0
  239. package/dist/domain/plugin/controller.d.ts.map +1 -0
  240. package/dist/domain/plugin/controller.js +493 -0
  241. package/dist/domain/plugin/controller.js.map +1 -0
  242. package/dist/domain/plugin/materialize/agent.d.ts +13 -0
  243. package/dist/domain/plugin/materialize/agent.d.ts.map +1 -0
  244. package/dist/domain/plugin/materialize/agent.js +128 -0
  245. package/dist/domain/plugin/materialize/agent.js.map +1 -0
  246. package/dist/domain/plugin/materialize/default-agent-instructions.d.ts +22 -0
  247. package/dist/domain/plugin/materialize/default-agent-instructions.d.ts.map +1 -0
  248. package/dist/domain/plugin/materialize/default-agent-instructions.js +31 -0
  249. package/dist/domain/plugin/materialize/default-agent-instructions.js.map +1 -0
  250. package/dist/domain/plugin/materialize/identity.d.ts +28 -0
  251. package/dist/domain/plugin/materialize/identity.d.ts.map +1 -0
  252. package/dist/domain/plugin/materialize/identity.js +40 -0
  253. package/dist/domain/plugin/materialize/identity.js.map +1 -0
  254. package/dist/domain/plugin/materialize/mcp-servers.d.ts +15 -0
  255. package/dist/domain/plugin/materialize/mcp-servers.d.ts.map +1 -0
  256. package/dist/domain/plugin/materialize/mcp-servers.js +131 -0
  257. package/dist/domain/plugin/materialize/mcp-servers.js.map +1 -0
  258. package/dist/domain/plugin/materialize/plan.d.ts +24 -0
  259. package/dist/domain/plugin/materialize/plan.d.ts.map +1 -0
  260. package/dist/domain/plugin/materialize/plan.js +77 -0
  261. package/dist/domain/plugin/materialize/plan.js.map +1 -0
  262. package/dist/domain/plugin/materialize/ports.d.ts +42 -0
  263. package/dist/domain/plugin/materialize/ports.d.ts.map +1 -0
  264. package/dist/domain/plugin/materialize/ports.js +2 -0
  265. package/dist/domain/plugin/materialize/ports.js.map +1 -0
  266. package/dist/domain/plugin/materialize/skills.d.ts +12 -0
  267. package/dist/domain/plugin/materialize/skills.d.ts.map +1 -0
  268. package/dist/domain/plugin/materialize/skills.js +44 -0
  269. package/dist/domain/plugin/materialize/skills.js.map +1 -0
  270. package/dist/domain/plugin/materialize/workflows.d.ts +15 -0
  271. package/dist/domain/plugin/materialize/workflows.d.ts.map +1 -0
  272. package/dist/domain/plugin/materialize/workflows.js +31 -0
  273. package/dist/domain/plugin/materialize/workflows.js.map +1 -0
  274. package/dist/domain/plugin/members.d.ts +42 -0
  275. package/dist/domain/plugin/members.d.ts.map +1 -0
  276. package/dist/domain/plugin/members.js +97 -0
  277. package/dist/domain/plugin/members.js.map +1 -0
  278. package/dist/domain/plugin/overlay/documents.d.ts +31 -0
  279. package/dist/domain/plugin/overlay/documents.d.ts.map +1 -0
  280. package/dist/domain/plugin/overlay/documents.js +38 -0
  281. package/dist/domain/plugin/overlay/documents.js.map +1 -0
  282. package/dist/domain/plugin/overlay/parse.d.ts +16 -0
  283. package/dist/domain/plugin/overlay/parse.d.ts.map +1 -0
  284. package/dist/domain/plugin/overlay/parse.js +79 -0
  285. package/dist/domain/plugin/overlay/parse.js.map +1 -0
  286. package/dist/domain/plugin/overlay/sanitize.d.ts +10 -0
  287. package/dist/domain/plugin/overlay/sanitize.d.ts.map +1 -0
  288. package/dist/domain/plugin/overlay/sanitize.js +103 -0
  289. package/dist/domain/plugin/overlay/sanitize.js.map +1 -0
  290. package/dist/domain/plugin/push.d.ts +133 -0
  291. package/dist/domain/plugin/push.d.ts.map +1 -0
  292. package/dist/domain/plugin/push.js +800 -0
  293. package/dist/domain/plugin/push.js.map +1 -0
  294. package/dist/domain/plugin/search-extractor.d.ts +3 -0
  295. package/dist/domain/plugin/search-extractor.d.ts.map +1 -0
  296. package/dist/domain/plugin/search-extractor.js +41 -0
  297. package/dist/domain/plugin/search-extractor.js.map +1 -0
  298. package/dist/domain/skill/constants.d.ts +6 -11
  299. package/dist/domain/skill/constants.d.ts.map +1 -1
  300. package/dist/domain/skill/constants.js +6 -11
  301. package/dist/domain/skill/constants.js.map +1 -1
  302. package/dist/domain/skill/controller.d.ts.map +1 -1
  303. package/dist/domain/skill/controller.js +33 -30
  304. package/dist/domain/skill/controller.js.map +1 -1
  305. package/dist/domain/skill/push.d.ts +9 -10
  306. package/dist/domain/skill/push.d.ts.map +1 -1
  307. package/dist/domain/skill/push.js +53 -122
  308. package/dist/domain/skill/push.js.map +1 -1
  309. package/dist/domain/skill/search-extractor.d.ts.map +1 -1
  310. package/dist/domain/skill/search-extractor.js.map +1 -1
  311. package/dist/domain/skill/storage/artifact-storage.d.ts +26 -29
  312. package/dist/domain/skill/storage/artifact-storage.d.ts.map +1 -1
  313. package/dist/domain/skill/storage/artifact-storage.js +6 -103
  314. package/dist/domain/skill/storage/artifact-storage.js.map +1 -1
  315. package/dist/domain/skill/storage/zip-gate.d.ts +1 -2
  316. package/dist/domain/skill/storage/zip-gate.d.ts.map +1 -1
  317. package/dist/domain/skill/storage/zip-gate.js +56 -126
  318. package/dist/domain/skill/storage/zip-gate.js.map +1 -1
  319. package/dist/domain/skill/version-resolution.d.ts +5 -5
  320. package/dist/domain/skill/version-resolution.d.ts.map +1 -1
  321. package/dist/domain/skill/version-resolution.js +34 -216
  322. package/dist/domain/skill/version-resolution.js.map +1 -1
  323. package/dist/domain/workflow/controller.d.ts.map +1 -1
  324. package/dist/domain/workflow/controller.js +30 -3
  325. package/dist/domain/workflow/controller.js.map +1 -1
  326. package/dist/domain/workflow/registry/data/task-kind-registry.json +1 -0
  327. package/dist/domain/workflowexecution/phases.d.ts +21 -0
  328. package/dist/domain/workflowexecution/phases.d.ts.map +1 -0
  329. package/dist/domain/workflowexecution/phases.js +31 -0
  330. package/dist/domain/workflowexecution/phases.js.map +1 -0
  331. package/dist/extensions/authorizer.d.ts +10 -5
  332. package/dist/extensions/authorizer.d.ts.map +1 -1
  333. package/dist/extensions/drivers.d.ts +4 -1
  334. package/dist/extensions/drivers.d.ts.map +1 -1
  335. package/dist/extensions/list-read-scope.d.ts +47 -20
  336. package/dist/extensions/list-read-scope.d.ts.map +1 -1
  337. package/dist/extensions/list-read-scope.js +20 -24
  338. package/dist/extensions/list-read-scope.js.map +1 -1
  339. package/dist/extensions/organization-directory.d.ts +13 -9
  340. package/dist/extensions/organization-directory.d.ts.map +1 -1
  341. package/dist/extensions/organization-directory.js.map +1 -1
  342. package/dist/extensions/resource-authorization.d.ts +33 -0
  343. package/dist/extensions/resource-authorization.d.ts.map +1 -1
  344. package/dist/extensions/schedule-fire-caller.d.ts +45 -18
  345. package/dist/extensions/schedule-fire-caller.d.ts.map +1 -1
  346. package/dist/extensions/schedule-fire-caller.js +12 -1
  347. package/dist/extensions/schedule-fire-caller.js.map +1 -1
  348. package/dist/identity/oidc-verifier.js +8 -1
  349. package/dist/identity/oidc-verifier.js.map +1 -1
  350. package/dist/index.d.ts +10 -0
  351. package/dist/index.d.ts.map +1 -1
  352. package/dist/index.js +8 -0
  353. package/dist/index.js.map +1 -1
  354. package/dist/pipeline/apiresource-labels.d.ts +23 -3
  355. package/dist/pipeline/apiresource-labels.d.ts.map +1 -1
  356. package/dist/pipeline/apiresource-labels.js +20 -0
  357. package/dist/pipeline/apiresource-labels.js.map +1 -1
  358. package/dist/pipeline/apiresource-meta.d.ts +15 -0
  359. package/dist/pipeline/apiresource-meta.d.ts.map +1 -1
  360. package/dist/pipeline/apiresource-meta.js +34 -0
  361. package/dist/pipeline/apiresource-meta.js.map +1 -1
  362. package/dist/pipeline/errors.d.ts.map +1 -1
  363. package/dist/pipeline/errors.js.map +1 -1
  364. package/dist/pipeline/steps/authorization-facts.d.ts +12 -0
  365. package/dist/pipeline/steps/authorization-facts.d.ts.map +1 -0
  366. package/dist/pipeline/steps/authorization-facts.js +100 -0
  367. package/dist/pipeline/steps/authorization-facts.js.map +1 -0
  368. package/dist/pipeline/steps/delete.d.ts.map +1 -1
  369. package/dist/pipeline/steps/delete.js +1 -1
  370. package/dist/pipeline/steps/delete.js.map +1 -1
  371. package/dist/pipeline/steps/duplicate.d.ts.map +1 -1
  372. package/dist/pipeline/steps/duplicate.js.map +1 -1
  373. package/dist/pipeline/steps/guard-memory-capture.d.ts.map +1 -1
  374. package/dist/pipeline/steps/guard-memory-capture.js +5 -3
  375. package/dist/pipeline/steps/guard-memory-capture.js.map +1 -1
  376. package/dist/pipeline/steps/guard-plugin-managed.d.ts +12 -0
  377. package/dist/pipeline/steps/guard-plugin-managed.d.ts.map +1 -0
  378. package/dist/pipeline/steps/guard-plugin-managed.js +96 -0
  379. package/dist/pipeline/steps/guard-plugin-managed.js.map +1 -0
  380. package/dist/pipeline/steps/guard-reserved-labels.d.ts +16 -2
  381. package/dist/pipeline/steps/guard-reserved-labels.d.ts.map +1 -1
  382. package/dist/pipeline/steps/guard-reserved-labels.js +11 -7
  383. package/dist/pipeline/steps/guard-reserved-labels.js.map +1 -1
  384. package/dist/pipeline/steps/helpers.d.ts.map +1 -1
  385. package/dist/pipeline/steps/helpers.js.map +1 -1
  386. package/dist/pipeline/steps/index-search.d.ts.map +1 -1
  387. package/dist/pipeline/steps/index-search.js.map +1 -1
  388. package/dist/pipeline/steps/load-existing.d.ts.map +1 -1
  389. package/dist/pipeline/steps/load-existing.js +1 -1
  390. package/dist/pipeline/steps/load-existing.js.map +1 -1
  391. package/dist/pipeline/steps/references.d.ts +16 -0
  392. package/dist/pipeline/steps/references.d.ts.map +1 -1
  393. package/dist/pipeline/steps/references.js +18 -0
  394. package/dist/pipeline/steps/references.js.map +1 -1
  395. package/dist/pipeline/steps/resolve-artifact-source.d.ts +35 -0
  396. package/dist/pipeline/steps/resolve-artifact-source.d.ts.map +1 -0
  397. package/dist/pipeline/steps/resolve-artifact-source.js +27 -0
  398. package/dist/pipeline/steps/resolve-artifact-source.js.map +1 -0
  399. package/dist/pipeline/steps/server-stamped-reserved-labels.d.ts.map +1 -1
  400. package/dist/pipeline/steps/server-stamped-reserved-labels.js.map +1 -1
  401. package/dist/pipeline/steps/slug.d.ts.map +1 -1
  402. package/dist/pipeline/steps/slug.js.map +1 -1
  403. package/dist/pipeline/steps/validate-visibility.d.ts +9 -0
  404. package/dist/pipeline/steps/validate-visibility.d.ts.map +1 -1
  405. package/dist/pipeline/steps/validate-visibility.js +6 -1
  406. package/dist/pipeline/steps/validate-visibility.js.map +1 -1
  407. package/dist/pipeline/steps/validation.d.ts.map +1 -1
  408. package/dist/pipeline/steps/validation.js.map +1 -1
  409. package/dist/pipeline/steps/version-archive.d.ts +63 -0
  410. package/dist/pipeline/steps/version-archive.d.ts.map +1 -0
  411. package/dist/pipeline/steps/version-archive.js +129 -0
  412. package/dist/pipeline/steps/version-archive.js.map +1 -0
  413. package/dist/pipeline/steps/version-history.d.ts +49 -0
  414. package/dist/pipeline/steps/version-history.d.ts.map +1 -0
  415. package/dist/pipeline/steps/version-history.js +229 -0
  416. package/dist/pipeline/steps/version-history.js.map +1 -0
  417. package/dist/pipeline/steps/visibility-gates.d.ts +8 -0
  418. package/dist/pipeline/steps/visibility-gates.d.ts.map +1 -1
  419. package/dist/pipeline/steps/visibility-gates.js +7 -2
  420. package/dist/pipeline/steps/visibility-gates.js.map +1 -1
  421. package/dist/query/search/registry.d.ts.map +1 -1
  422. package/dist/query/search/registry.js +2 -0
  423. package/dist/query/search/registry.js.map +1 -1
  424. package/dist/runnerauth/bound-execution.d.ts +27 -0
  425. package/dist/runnerauth/bound-execution.d.ts.map +1 -0
  426. package/dist/runnerauth/bound-execution.js +137 -0
  427. package/dist/runnerauth/bound-execution.js.map +1 -0
  428. package/dist/runnerauth/built-in-runner-credential-provider.d.ts +28 -0
  429. package/dist/runnerauth/built-in-runner-credential-provider.d.ts.map +1 -0
  430. package/dist/runnerauth/built-in-runner-credential-provider.js +217 -0
  431. package/dist/runnerauth/built-in-runner-credential-provider.js.map +1 -0
  432. package/dist/runnerauth/constants.d.ts +63 -0
  433. package/dist/runnerauth/constants.d.ts.map +1 -0
  434. package/dist/runnerauth/constants.js +63 -0
  435. package/dist/runnerauth/constants.js.map +1 -0
  436. package/dist/runnerauth/dispatch-credential.d.ts +38 -0
  437. package/dist/runnerauth/dispatch-credential.d.ts.map +1 -0
  438. package/dist/runnerauth/dispatch-credential.js +17 -0
  439. package/dist/runnerauth/dispatch-credential.js.map +1 -0
  440. package/dist/runnerauth/runner-credential-provider.d.ts +49 -11
  441. package/dist/runnerauth/runner-credential-provider.d.ts.map +1 -1
  442. package/dist/runnerauth/runner-credential-provider.js +16 -4
  443. package/dist/runnerauth/runner-credential-provider.js.map +1 -1
  444. package/dist/runnerauth/runner-subject-verifier.d.ts +14 -0
  445. package/dist/runnerauth/runner-subject-verifier.d.ts.map +1 -0
  446. package/dist/runnerauth/runner-subject-verifier.js +115 -0
  447. package/dist/runnerauth/runner-subject-verifier.js.map +1 -0
  448. package/dist/runnerauth/runnerauth.d.ts +33 -4
  449. package/dist/runnerauth/runnerauth.d.ts.map +1 -1
  450. package/dist/runnerauth/runnerauth.js +131 -35
  451. package/dist/runnerauth/runnerauth.js.map +1 -1
  452. package/dist/temporal/agentexecution/engine-client.d.ts +13 -0
  453. package/dist/temporal/agentexecution/engine-client.d.ts.map +1 -1
  454. package/dist/temporal/agentexecution/engine-client.js +10 -2
  455. package/dist/temporal/agentexecution/engine-client.js.map +1 -1
  456. package/dist/temporal/agentexecution/workflow-input.d.ts +13 -0
  457. package/dist/temporal/agentexecution/workflow-input.d.ts.map +1 -1
  458. package/dist/temporal/agentexecution/workflows/invoke-agent-execution.d.ts.map +1 -1
  459. package/dist/temporal/agentexecution/workflows/invoke-agent-execution.js +35 -31
  460. package/dist/temporal/agentexecution/workflows/invoke-agent-execution.js.map +1 -1
  461. package/dist/temporal/schedule/run-starter.d.ts +1 -1
  462. package/dist/temporal/schedule/run-starter.d.ts.map +1 -1
  463. package/dist/temporal/schedule/run-starter.js +14 -1
  464. package/dist/temporal/schedule/run-starter.js.map +1 -1
  465. package/dist/temporal/workflowexecution/engine-client.d.ts +24 -0
  466. package/dist/temporal/workflowexecution/engine-client.d.ts.map +1 -1
  467. package/dist/temporal/workflowexecution/engine-client.js +26 -19
  468. package/dist/temporal/workflowexecution/engine-client.js.map +1 -1
  469. package/dist/temporal/workflowexecution/workflow-input.d.ts +14 -0
  470. package/dist/temporal/workflowexecution/workflow-input.d.ts.map +1 -1
  471. package/package.json +5 -4
  472. package/src/archive/__tests__/archive.test.ts +233 -0
  473. package/src/{domain/skill → archive}/__tests__/prefilter.test.ts +1 -1
  474. package/src/archive/content-store.ts +132 -0
  475. package/src/archive/inflate.ts +107 -0
  476. package/src/archive/limits.ts +42 -0
  477. package/src/archive/open.ts +131 -0
  478. package/src/{domain/skill/storage → archive}/prefilter.ts +5 -0
  479. package/src/archive/write.ts +54 -0
  480. package/src/authorization/README.md +124 -0
  481. package/src/authorization/__tests__/authorizer.test.ts +719 -0
  482. package/src/authorization/__tests__/derived-tuples.test.ts +802 -0
  483. package/src/authorization/__tests__/drivers.ts +70 -0
  484. package/src/authorization/__tests__/evaluator.test.ts +359 -0
  485. package/src/authorization/__tests__/facts.test.ts +155 -0
  486. package/src/authorization/__tests__/fixtures/fga/agent-channel-owner.fga.yaml +112 -0
  487. package/src/authorization/__tests__/fixtures/fga/agent-share-owner.fga.yaml +109 -0
  488. package/src/authorization/__tests__/fixtures/fga/artifact-org-and-owner.fga.yaml +128 -0
  489. package/src/authorization/__tests__/fixtures/fga/blueprint-private-visibility.fga.yaml +410 -0
  490. package/src/authorization/__tests__/fixtures/fga/channel-app-owner.fga.yaml +125 -0
  491. package/src/authorization/__tests__/fixtures/fga/channel-participation.fga.yaml +201 -0
  492. package/src/authorization/__tests__/fixtures/fga/channel-session-visibility.fga.yaml +187 -0
  493. package/src/authorization/__tests__/fixtures/fga/cross-org-share-creation.fga.yaml +98 -0
  494. package/src/authorization/__tests__/fixtures/fga/default-instance-inheritance.fga.yaml +271 -0
  495. package/src/authorization/__tests__/fixtures/fga/memory-subject-only.fga.yaml +72 -0
  496. package/src/authorization/__tests__/fixtures/fga/org-admin-owner-inheritance.fga.yaml +328 -0
  497. package/src/authorization/__tests__/fixtures/fga/org-shared-environment.fga.yaml +144 -0
  498. package/src/authorization/__tests__/fixtures/fga/platform-visibility.fga.yaml +223 -0
  499. package/src/authorization/__tests__/fixtures/fga/provider-standing-viewer.fga.yaml +40 -0
  500. package/src/authorization/__tests__/fixtures/fga/public-visibility-setter.fga.yaml +52 -0
  501. package/src/authorization/__tests__/fixtures/fga/reserved-label-writer.fga.yaml +41 -0
  502. package/src/authorization/__tests__/fixtures/fga/schedule-owner.fga.yaml +113 -0
  503. package/src/authorization/__tests__/fixtures/fga/schedule-session-visibility.fga.yaml +214 -0
  504. package/src/authorization/__tests__/fixtures/fga/session-personal-resource.fga.yaml +117 -0
  505. package/src/authorization/__tests__/fixtures/fga/workflow-execution-sharing.fga.yaml +192 -0
  506. package/src/authorization/__tests__/lane-admission.test.ts +115 -0
  507. package/src/authorization/__tests__/list-read-scope.measure.test.ts +317 -0
  508. package/src/authorization/__tests__/list-read-scope.test.ts +796 -0
  509. package/src/authorization/__tests__/organization-directory.test.ts +236 -0
  510. package/src/authorization/__tests__/person.test.ts +114 -0
  511. package/src/authorization/__tests__/posture.test.ts +25 -0
  512. package/src/authorization/__tests__/schedule-fire-caller.test.ts +134 -0
  513. package/src/authorization/__tests__/store-tests.test.ts +306 -0
  514. package/src/authorization/__tests__/support.ts +101 -0
  515. package/src/authorization/__tests__/tuples.test.ts +62 -0
  516. package/src/authorization/__tests__/wire-permissions.test.ts +154 -0
  517. package/src/authorization/authorizer.ts +208 -0
  518. package/src/authorization/derived-tuples.ts +384 -0
  519. package/src/authorization/evaluator.ts +283 -0
  520. package/src/authorization/facts.ts +47 -0
  521. package/src/authorization/lane-admission.ts +73 -0
  522. package/src/authorization/list-read-scope.ts +216 -0
  523. package/src/authorization/model/__tests__/registry.test.ts +317 -0
  524. package/src/authorization/model/agent.ts +64 -0
  525. package/src/authorization/model/agent_channel.ts +49 -0
  526. package/src/authorization/model/agent_execution.ts +33 -0
  527. package/src/authorization/model/agent_instance.ts +66 -0
  528. package/src/authorization/model/agent_share.ts +40 -0
  529. package/src/authorization/model/api_key.ts +28 -0
  530. package/src/authorization/model/artifact.ts +38 -0
  531. package/src/authorization/model/channel_app.ts +39 -0
  532. package/src/authorization/model/default-of.ts +99 -0
  533. package/src/authorization/model/environment.ts +48 -0
  534. package/src/authorization/model/execution_context.ts +20 -0
  535. package/src/authorization/model/iam_policy.ts +42 -0
  536. package/src/authorization/model/identity_account.ts +26 -0
  537. package/src/authorization/model/index.ts +108 -0
  538. package/src/authorization/model/mcp_server.ts +59 -0
  539. package/src/authorization/model/memory.ts +27 -0
  540. package/src/authorization/model/oauth_app.ts +42 -0
  541. package/src/authorization/model/organization.ts +55 -0
  542. package/src/authorization/model/plugin.ts +66 -0
  543. package/src/authorization/model/project.ts +47 -0
  544. package/src/authorization/model/rewrite.ts +213 -0
  545. package/src/authorization/model/schedule.ts +40 -0
  546. package/src/authorization/model/session.ts +50 -0
  547. package/src/authorization/model/skill.ts +60 -0
  548. package/src/authorization/model/workflow.ts +60 -0
  549. package/src/authorization/model/workflow_execution.ts +44 -0
  550. package/src/authorization/model/workflow_instance.ts +122 -0
  551. package/src/authorization/organization-directory.ts +114 -0
  552. package/src/authorization/person.ts +68 -0
  553. package/src/authorization/posture.ts +49 -0
  554. package/src/authorization/schedule-fire-caller.ts +87 -0
  555. package/src/authorization/store-test-kit.ts +454 -0
  556. package/src/authorization/tuples.ts +190 -0
  557. package/src/boot/compose.ts +246 -52
  558. package/src/boot/inprocess.ts +115 -31
  559. package/src/domain/agent/controller.ts +11 -0
  560. package/src/domain/executioncontext/__tests__/executioncontext.test.ts +104 -0
  561. package/src/domain/executioncontext/__tests__/resolve-values-capability.test.ts +33 -4
  562. package/src/domain/executioncontext/resolve-values-for-caller.ts +79 -22
  563. package/src/domain/iampolicy/__tests__/membership.test.ts +357 -3
  564. package/src/domain/iampolicy/constants.ts +12 -0
  565. package/src/domain/iampolicy/membership.ts +221 -66
  566. package/src/domain/identityaccount/__tests__/account-for-stamp.test.ts +111 -0
  567. package/src/domain/identityaccount/actor.ts +84 -0
  568. package/src/domain/identityaccount/resolve.ts +31 -0
  569. package/src/domain/mcpserver/__tests__/connect.test.ts +17 -2
  570. package/src/domain/mcpserver/connect-execution-id.ts +34 -0
  571. package/src/domain/mcpserver/connect.ts +38 -3
  572. package/src/domain/mcpserver/controller.ts +11 -0
  573. package/src/domain/mcpserver/engine.ts +9 -3
  574. package/src/domain/mcpserver/start-connect.ts +1 -1
  575. package/src/domain/platform/controller.ts +24 -11
  576. package/src/domain/plugin/__tests__/materialize.test.ts +303 -0
  577. package/src/domain/plugin/__tests__/overlay-parse.test.ts +85 -0
  578. package/src/domain/plugin/__tests__/plugin.test.ts +796 -0
  579. package/src/domain/plugin/__tests__/sanitize.test.ts +174 -0
  580. package/src/domain/plugin/archive.ts +89 -0
  581. package/src/domain/plugin/constants.ts +53 -0
  582. package/src/domain/plugin/controller.ts +913 -0
  583. package/src/domain/plugin/materialize/agent.ts +186 -0
  584. package/src/domain/plugin/materialize/default-agent-instructions.ts +59 -0
  585. package/src/domain/plugin/materialize/identity.ts +67 -0
  586. package/src/domain/plugin/materialize/mcp-servers.ts +175 -0
  587. package/src/domain/plugin/materialize/plan.ts +124 -0
  588. package/src/domain/plugin/materialize/ports.ts +53 -0
  589. package/src/domain/plugin/materialize/skills.ts +68 -0
  590. package/src/domain/plugin/materialize/workflows.ts +51 -0
  591. package/src/domain/plugin/members.ts +180 -0
  592. package/src/domain/plugin/overlay/documents.ts +78 -0
  593. package/src/domain/plugin/overlay/parse.ts +115 -0
  594. package/src/domain/plugin/overlay/sanitize.ts +151 -0
  595. package/src/domain/plugin/push.ts +1062 -0
  596. package/src/domain/plugin/search-extractor.ts +60 -0
  597. package/src/domain/skill/constants.ts +11 -14
  598. package/src/domain/skill/controller.ts +44 -36
  599. package/src/domain/skill/push.ts +61 -156
  600. package/src/domain/skill/search-extractor.ts +3 -1
  601. package/src/domain/skill/storage/artifact-storage.ts +23 -124
  602. package/src/domain/skill/storage/zip-gate.ts +58 -154
  603. package/src/domain/skill/version-resolution.ts +67 -269
  604. package/src/domain/workflow/controller.ts +38 -4
  605. package/src/domain/workflow/registry/data/task-kind-registry.json +1 -0
  606. package/src/domain/workflowexecution/__tests__/phases.test.ts +58 -0
  607. package/src/domain/workflowexecution/phases.ts +33 -0
  608. package/src/extensions/__tests__/built-in-authorization-composed.test.ts +835 -0
  609. package/src/extensions/__tests__/composed-support.ts +32 -1
  610. package/src/extensions/__tests__/extension-composition.test.ts +42 -1
  611. package/src/extensions/__tests__/list-read-scope.test.ts +137 -33
  612. package/src/extensions/__tests__/role-reconciliation-composed.test.ts +209 -0
  613. package/src/extensions/__tests__/tier-truthfulness.test.ts +6 -14
  614. package/src/extensions/authorizer.ts +10 -5
  615. package/src/extensions/drivers.ts +4 -1
  616. package/src/extensions/list-read-scope.ts +67 -45
  617. package/src/extensions/organization-directory.ts +13 -9
  618. package/src/extensions/resource-authorization.ts +34 -0
  619. package/src/extensions/schedule-fire-caller.ts +49 -18
  620. package/src/identity/__tests__/oidc-verifier.test.ts +22 -0
  621. package/src/identity/oidc-verifier.ts +8 -1
  622. package/src/index.ts +51 -1
  623. package/src/pipeline/__tests__/kind-by-id-prefix.test.ts +75 -0
  624. package/src/pipeline/__tests__/router-transport.test.ts +1 -3
  625. package/src/pipeline/apiresource-labels.ts +31 -3
  626. package/src/pipeline/apiresource-meta.ts +41 -0
  627. package/src/pipeline/errors.ts +5 -5
  628. package/src/pipeline/steps/__tests__/authorize-annotation-completeness.test.ts +1 -20
  629. package/src/pipeline/steps/__tests__/guard-memory-capture.test.ts +58 -44
  630. package/src/pipeline/steps/__tests__/guard-plugin-managed.test.ts +151 -0
  631. package/src/pipeline/steps/__tests__/guard-reserved-labels.test.ts +83 -8
  632. package/src/pipeline/steps/authorization-facts.ts +131 -0
  633. package/src/pipeline/steps/delete.ts +11 -3
  634. package/src/pipeline/steps/duplicate.ts +8 -2
  635. package/src/pipeline/steps/guard-memory-capture.ts +5 -3
  636. package/src/pipeline/steps/guard-plugin-managed.ts +133 -0
  637. package/src/pipeline/steps/guard-reserved-labels.ts +29 -8
  638. package/src/pipeline/steps/helpers.ts +4 -1
  639. package/src/pipeline/steps/index-search.ts +28 -15
  640. package/src/pipeline/steps/load-existing.ts +12 -3
  641. package/src/pipeline/steps/references.ts +36 -2
  642. package/src/pipeline/steps/resolve-artifact-source.ts +66 -0
  643. package/src/pipeline/steps/server-stamped-reserved-labels.ts +2 -1
  644. package/src/pipeline/steps/slug.ts +7 -2
  645. package/src/pipeline/steps/validate-visibility.ts +9 -2
  646. package/src/pipeline/steps/validation.ts +3 -1
  647. package/src/pipeline/steps/version-archive.ts +225 -0
  648. package/src/pipeline/steps/version-history.ts +362 -0
  649. package/src/pipeline/steps/visibility-gates.ts +12 -9
  650. package/src/query/README.md +1 -1
  651. package/src/query/search/__tests__/criteria.test.ts +6 -7
  652. package/src/query/search/__tests__/query-store.test.ts +9 -2
  653. package/src/query/search/__tests__/registry.test.ts +6 -4
  654. package/src/query/search/registry.ts +6 -1
  655. package/src/runnerauth/__tests__/bound-execution.test.ts +334 -0
  656. package/src/runnerauth/__tests__/built-in-runner-credential-provider.test.ts +516 -0
  657. package/src/runnerauth/__tests__/dispatch-credential.test.ts +94 -0
  658. package/src/runnerauth/__tests__/runner-credential-provider.test.ts +27 -0
  659. package/src/runnerauth/__tests__/runner-subject-composed.test.ts +497 -0
  660. package/src/runnerauth/__tests__/runner-subject-verifier.test.ts +541 -0
  661. package/src/runnerauth/bound-execution.ts +270 -0
  662. package/src/runnerauth/built-in-runner-credential-provider.ts +300 -0
  663. package/src/runnerauth/constants.ts +74 -0
  664. package/src/runnerauth/dispatch-credential.ts +63 -0
  665. package/src/runnerauth/runner-credential-provider.ts +60 -11
  666. package/src/runnerauth/runner-subject-verifier.ts +152 -0
  667. package/src/runnerauth/runnerauth.ts +148 -38
  668. package/src/temporal/agentexecution/__tests__/engine-client.test.ts +107 -38
  669. package/src/temporal/agentexecution/__tests__/invoke-workflow.test.ts +105 -2
  670. package/src/temporal/agentexecution/engine-client.ts +27 -2
  671. package/src/temporal/agentexecution/workflow-input.ts +13 -0
  672. package/src/temporal/agentexecution/workflows/invoke-agent-execution.ts +90 -44
  673. package/src/temporal/schedule/__tests__/run-starter.test.ts +86 -24
  674. package/src/temporal/schedule/run-starter.ts +31 -8
  675. package/src/temporal/workflowexecution/__tests__/engine-client.test.ts +139 -33
  676. package/src/temporal/workflowexecution/engine-client.ts +48 -21
  677. package/src/temporal/workflowexecution/workflow-input.ts +14 -0
  678. package/dist/domain/skill/storage/prefilter.d.ts.map +0 -1
  679. package/dist/domain/skill/storage/prefilter.js.map +0 -1
  680. /package/dist/{domain/skill/storage → archive}/prefilter.js +0 -0
@@ -13,10 +13,22 @@
13
13
  * on every other token, so the OSS lanes composed ahead of it keep their
14
14
  * claims. Lifted from identity-account-composed.test.ts (20260911.11 slice
15
15
  * 3) when a second composed proof needed the same shape (20260913.01 S1).
16
+ *
17
+ * `servedServices` reads what a composed server ROUTES without binding a
18
+ * port: compose.ts hands one `routes` closure to both transports, and
19
+ * replaying it into a recording router yields the served service
20
+ * descriptors — the enumeration the tier-truthfulness, annotation and
21
+ * wire-permission invariants all stand on, kept here so each does not
22
+ * carry its own recorder.
16
23
  */
17
24
  import path from "node:path";
18
25
 
19
- import type { Interceptor, Transport } from "@connectrpc/connect";
26
+ import type { DescService } from "@bufbuild/protobuf";
27
+ import type {
28
+ ConnectRouter,
29
+ Interceptor,
30
+ Transport,
31
+ } from "@connectrpc/connect";
20
32
  import { createGrpcTransport } from "@connectrpc/connect-node";
21
33
 
22
34
  import { createLogger } from "../../boot/logger.js";
@@ -78,6 +90,25 @@ export function bearer(token: string): Interceptor {
78
90
  };
79
91
  }
80
92
 
93
+ /** Replays a composed server's `routes` closure into a recorder and returns the services it serves. */
94
+ export function servedServices(
95
+ routes: (router: ConnectRouter) => void,
96
+ ): DescService[] {
97
+ const served: DescService[] = [];
98
+ const recorder = {
99
+ handlers: [],
100
+ service(desc: DescService) {
101
+ served.push(desc);
102
+ return recorder;
103
+ },
104
+ rpc() {
105
+ return recorder;
106
+ },
107
+ };
108
+ routes(recorder as unknown as ConnectRouter);
109
+ return served;
110
+ }
111
+
81
112
  /** A gRPC transport to the composed server on `port`, presenting `token` when given. */
82
113
  export function transportFor(port: number, token?: string): Transport {
83
114
  return createGrpcTransport({
@@ -544,7 +544,13 @@ describe("extension composition (require-authentication posture)", () => {
544
544
  };
545
545
  expect(parsed.posture).toBe("required");
546
546
  expect(parsed.source).toBe("extension 'fake-identity'");
547
- expect(parsed.verifiers).toBe("apikey, fake-verifier");
547
+ // A unit that declares the posture and brings verifiers but NO
548
+ // Authorizer is the BUILT-IN authorization posture: open source
549
+ // composes its Authorizer, and with it the runner-subject verifier
550
+ // between the API-key lane and the unit's own (runnerauth/
551
+ // runner-subject-verifier.ts). A unit with its own Authorizer gets
552
+ // neither (runner-subject-composed.test.ts pins that chain).
553
+ expect(parsed.verifiers).toBe("apikey, runner, fake-verifier");
548
554
  });
549
555
 
550
556
  it("a declared posture whose unit registers no verifier of its own is a boot throw naming the unit — the API-key lane alone cannot bootstrap", async () => {
@@ -573,6 +579,41 @@ describe("extension composition (require-authentication posture)", () => {
573
579
  rmSync(orphanDir, { recursive: true, force: true });
574
580
  }
575
581
  });
582
+
583
+ it("a wider edition under the posture with no Authorizer is a boot throw — the built-in authorizer enforces the open-source kinds only", async () => {
584
+ const enterpriseDir = mkdtempSync(
585
+ path.join(tmpdir(), "require-auth-edition-"),
586
+ );
587
+ try {
588
+ await expect(
589
+ composeServer({
590
+ config: loadConfig({
591
+ STIGMER_MODEL_REGISTRY_REFRESH: "off",
592
+ DB_PATH: path.join(enterpriseDir, "stigmer.db"),
593
+ ARTIFACT_LOCAL_BASE_PATH: path.join(enterpriseDir, "artifacts"),
594
+ }),
595
+ logger: createLogger({
596
+ level: "error",
597
+ pretty: false,
598
+ write: () => {},
599
+ }),
600
+ extensions: [
601
+ {
602
+ ...requiringExtension,
603
+ name: "enterprise-without-authorizer",
604
+ edition: ServerEdition.enterprise,
605
+ },
606
+ ],
607
+ portOverride: 0,
608
+ host: "127.0.0.1",
609
+ }),
610
+ ).rejects.toThrowError(
611
+ /serves edition 'enterprise' under the require-authentication posture but registers no Authorizer/,
612
+ );
613
+ } finally {
614
+ rmSync(enterpriseDir, { recursive: true, force: true });
615
+ }
616
+ });
576
617
  });
577
618
 
578
619
  /**
@@ -13,27 +13,67 @@
13
13
  * offered the org's rows and never the kind's — the same result set,
14
14
  * a fraction of the candidates);
15
15
  * - the candidates carry {id, org, labels} — the driver's guest
16
- * cookie rule keys on labels;
16
+ * cookie rule keys on labels — and the row's AUTHORIZATION FACTS
17
+ * (creator stamp, visibility level, every parent link), read by the
18
+ * one structural resolver the built-in authorizer reads a loaded row
19
+ * through, so a driver that evaluates the model over a candidate
20
+ * needs no second read of the row;
17
21
  * - a kind whose authorization is its parent's (kind_meta PARENT scope
18
22
  * + INHERITED owner; agent_execution → session) carries
19
23
  * `authorizationParent` on every candidate whose spec names it, the
20
- * same ResolvedParentLink the tuple lifecycle wrote; every other kind
21
- * and every parentless row carries none (stigmer-cloud 20260913.04
22
- * T04);
24
+ * same ResolvedParentLink the tuple lifecycle wrote and one of the
25
+ * candidate's own parent links; every other kind and every parentless
26
+ * row carries none (stigmer-cloud 20260913.04 T04);
23
27
  * - a scope failure PROPAGATES — never an empty result (the outage
24
28
  * contract: empty means "authorized to see nothing", outage means
25
29
  * INTERNAL through the caller's sanitized arm).
26
30
  */
31
+ import { create } from "@bufbuild/protobuf";
27
32
  import { describe, expect, it } from "vitest";
28
33
 
29
34
  import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
35
+ import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
36
+ import { ApiResourceAuditSchema } from "@stigmer/protos/ai/stigmer/commons/apiresource/status_pb";
30
37
 
31
38
  import { testCallerIdentity } from "../../pipeline/__tests__/support.js";
32
39
  import type { ListEntryMeta, ListReadScope } from "../list-read-scope.js";
33
40
  import { restrictListByReadScope } from "../list-read-scope.js";
41
+ import type { ResolvedParentLink } from "../resource-authorization.js";
34
42
 
35
43
  const caller = testCallerIdentity();
36
44
 
45
+ function organizationLink(org: string): ResolvedParentLink {
46
+ return {
47
+ relation: "organization",
48
+ parentKind: ApiResourceKind.organization,
49
+ parentId: org,
50
+ };
51
+ }
52
+
53
+ function sessionLink(session: string): ResolvedParentLink {
54
+ return {
55
+ relation: "session",
56
+ parentKind: ApiResourceKind.session,
57
+ parentId: session,
58
+ };
59
+ }
60
+
61
+ /** The candidate a row with no audit and no visibility set becomes. */
62
+ function bareFacts(
63
+ id: string,
64
+ org: string,
65
+ parentLinks: ReadonlyArray<ResolvedParentLink>,
66
+ ): ListEntryMeta {
67
+ return {
68
+ id,
69
+ org,
70
+ labels: {},
71
+ createdBy: "",
72
+ visibility: ApiResourceVisibility.api_resource_visibility_unspecified,
73
+ parentLinks,
74
+ };
75
+ }
76
+
37
77
  function row(id: string, org: string, labels: Record<string, string> = {}) {
38
78
  return { metadata: { id, org, labels } };
39
79
  }
@@ -155,9 +195,76 @@ describe("restrictListByReadScope", () => {
155
195
  id: "ses_a",
156
196
  org: "acme",
157
197
  labels: { "stigmer.ai/guest-cookie-id": "ck_1" },
198
+ createdBy: "",
199
+ visibility: ApiResourceVisibility.api_resource_visibility_unspecified,
200
+ parentLinks: [organizationLink("acme")],
201
+ },
202
+ {
203
+ id: "ses_b",
204
+ org: "acme",
205
+ labels: {},
206
+ createdBy: "",
207
+ visibility: ApiResourceVisibility.api_resource_visibility_unspecified,
208
+ parentLinks: [organizationLink("acme")],
209
+ },
210
+ {
211
+ id: "ses_c",
212
+ org: "rival",
213
+ labels: {},
214
+ createdBy: "",
215
+ visibility: ApiResourceVisibility.api_resource_visibility_unspecified,
216
+ parentLinks: [organizationLink("rival")],
217
+ },
218
+ ]);
219
+ });
220
+
221
+ it("a candidate carries the row's authorization facts — the creator stamp, the visibility level and every parent link — read by the one resolver the point-check driver reads through", async () => {
222
+ let seen: ReadonlyArray<ListEntryMeta> = [];
223
+ const recording: ListReadScope = {
224
+ authorizedResourceIds: () => Promise.resolve(new Set<string>()),
225
+ restrictListEntries: (_caller, _kind, entries) => {
226
+ seen = entries;
227
+ return Promise.resolve(new Set<string>());
228
+ },
229
+ };
230
+ await restrictListByReadScope(
231
+ recording,
232
+ caller,
233
+ ApiResourceKind.agent_instance,
234
+ [
235
+ {
236
+ metadata: {
237
+ id: "ai_1",
238
+ org: "acme",
239
+ labels: {},
240
+ visibility: ApiResourceVisibility.visibility_org,
241
+ },
242
+ spec: { agentId: "agt_1" },
243
+ status: {
244
+ audit: create(ApiResourceAuditSchema, {
245
+ specAudit: { createdBy: { id: "ida_carol" } },
246
+ }),
247
+ },
248
+ },
249
+ ],
250
+ "",
251
+ );
252
+ expect(seen).toEqual([
253
+ {
254
+ id: "ai_1",
255
+ org: "acme",
256
+ labels: {},
257
+ createdBy: "ida_carol",
258
+ visibility: ApiResourceVisibility.visibility_org,
259
+ parentLinks: [
260
+ organizationLink("acme"),
261
+ {
262
+ relation: "agent",
263
+ parentKind: ApiResourceKind.agent,
264
+ parentId: "agt_1",
265
+ },
266
+ ],
158
267
  },
159
- { id: "ses_b", org: "acme", labels: {} },
160
- { id: "ses_c", org: "rival", labels: {} },
161
268
  ]);
162
269
  });
163
270
 
@@ -198,36 +305,21 @@ describe("restrictListByReadScope", () => {
198
305
  "",
199
306
  );
200
307
  expect(kept.map((r) => r.metadata.id)).toEqual(["aex_1", "aex_3"]);
308
+ // The parent is one of the row's parent links — resolved once, named
309
+ // twice: as the link the derivation reads and as the designation a
310
+ // driver may answer in place of the child.
201
311
  expect(seen[0]).toEqual([
202
312
  {
203
- id: "aex_1",
204
- org: "acme",
205
- labels: {},
206
- authorizationParent: {
207
- relation: "session",
208
- parentKind: ApiResourceKind.session,
209
- parentId: "ses_a",
210
- },
313
+ ...bareFacts("aex_1", "acme", [sessionLink("ses_a")]),
314
+ authorizationParent: sessionLink("ses_a"),
211
315
  },
212
316
  {
213
- id: "aex_2",
214
- org: "acme",
215
- labels: {},
216
- authorizationParent: {
217
- relation: "session",
218
- parentKind: ApiResourceKind.session,
219
- parentId: "ses_a",
220
- },
317
+ ...bareFacts("aex_2", "acme", [sessionLink("ses_a")]),
318
+ authorizationParent: sessionLink("ses_a"),
221
319
  },
222
320
  {
223
- id: "aex_3",
224
- org: "acme",
225
- labels: {},
226
- authorizationParent: {
227
- relation: "session",
228
- parentKind: ApiResourceKind.session,
229
- parentId: "ses_b",
230
- },
321
+ ...bareFacts("aex_3", "acme", [sessionLink("ses_b")]),
322
+ authorizationParent: sessionLink("ses_b"),
231
323
  },
232
324
  ]);
233
325
  });
@@ -250,8 +342,8 @@ describe("restrictListByReadScope", () => {
250
342
  "aex_specless",
251
343
  ]);
252
344
  expect(seen[0]).toEqual([
253
- { id: "aex_orphan", org: "acme", labels: {} },
254
- { id: "aex_specless", org: "acme", labels: {} },
345
+ bareFacts("aex_orphan", "acme", []),
346
+ bareFacts("aex_specless", "acme", []),
255
347
  ]);
256
348
  });
257
349
 
@@ -272,7 +364,19 @@ describe("restrictListByReadScope", () => {
272
364
  runs,
273
365
  "",
274
366
  );
275
- expect(seen[0]).toEqual([{ id: "wex_1", org: "acme", labels: {} }]);
367
+ // The instance IS a parent link (the derivation walks
368
+ // `execution_viewer from workflow_instance` through it); it is not
369
+ // the parent the kind's authorization is.
370
+ expect(seen[0]).toEqual([
371
+ bareFacts("wex_1", "acme", [
372
+ organizationLink("acme"),
373
+ {
374
+ relation: "workflow_instance",
375
+ parentKind: ApiResourceKind.workflow_instance,
376
+ parentId: "wfi_1",
377
+ },
378
+ ]),
379
+ ]);
276
380
  });
277
381
 
278
382
  it("no scope composed = the input unchanged, the parent never resolved", async () => {
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Pins the built-in posture's boot reconciliation END TO END: a database
3
+ * whose people were provisioned before organization roles existed (the
4
+ * 3.15.x self-host with OIDC on) is given, at its first boot under the
5
+ * enforcing posture, exactly the rows those people's first sign-ins would
6
+ * have written — once, and never again.
7
+ *
8
+ * Three boots over ONE data directory, the shape proven by behaviour over
9
+ * real boots:
10
+ * 1. A fresh server: the founder provisions and founds an organization
11
+ * (the owner row, 2b's lifecycle), the member provisions afterwards
12
+ * (the member row, the hook). Then the 3.15.x shape is made
13
+ * literally on the store the server used: every role row deleted and
14
+ * the reconciliation marker deleted. Accounts, organization and
15
+ * blueprint stay.
16
+ * 2. The same directory boots again: the rows are back — the founder
17
+ * `owner`, the member `member` — each written AS the account it names
18
+ * (the audit actor), `findMyOrganizations` answers the organization
19
+ * to both, and the marker is set.
20
+ * 3. The founder revokes everyone, the member first and then themself,
21
+ * and the directory boots once more: NO row returns. The marker, not
22
+ * "zero rows", is what makes the reconciliation one-shot — a revoked
23
+ * founder is not handed the organization back by a reboot.
24
+ *
25
+ * The unit vouches for unsigned JWT-shaped tokens and declares the
26
+ * require-authentication posture with no Authorizer (composed-support.ts;
27
+ * the open-source OIDC self-host's shape, the same recipe
28
+ * built-in-authorization-composed.test.ts boots). The per-arm proofs of
29
+ * the reconciliation (order, the machine account, the fault, the half-run
30
+ * database) are domain/iampolicy/__tests__/membership.test.ts; this file
31
+ * is the upgrade's definition of done at the wire.
32
+ */
33
+ import { mkdtempSync, rmSync } from "node:fs";
34
+ import { tmpdir } from "node:os";
35
+ import path from "node:path";
36
+
37
+ import { fromBinary } from "@bufbuild/protobuf";
38
+ import { createClient } from "@connectrpc/connect";
39
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
40
+
41
+ import { AgentCommandController } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/command_pb";
42
+ import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
43
+ import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
44
+ import { IamPolicySchema } from "@stigmer/protos/ai/stigmer/iam/iampolicy/v1/api_pb";
45
+ import { IamPolicyCommandController } from "@stigmer/protos/ai/stigmer/iam/iampolicy/v1/command_pb";
46
+ import { IdentityAccountCommandController } from "@stigmer/protos/ai/stigmer/iam/identityaccount/v1/command_pb";
47
+ import { OrganizationCommandController } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/command_pb";
48
+ import { OrganizationQueryController } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/query_pb";
49
+
50
+ import { loadConfig } from "../../boot/config.js";
51
+ import { composeServer } from "../../boot/compose.js";
52
+ import type { ComposedServer } from "../../boot/compose.js";
53
+ import { ROLES_RECONCILED_KEY } from "../../domain/iampolicy/constants.js";
54
+ import { accountIdFor } from "../../domain/identityaccount/constants.js";
55
+ import type { Store } from "../../store/interface.js";
56
+ import type { ServerExtension } from "../registry.js";
57
+ import {
58
+ baseConfig,
59
+ fakeJwt,
60
+ fakeVerifier,
61
+ silentLogger,
62
+ transportFor,
63
+ } from "./composed-support.js";
64
+
65
+ const FOUNDER = "fake|founder";
66
+ const MEMBER = "fake|member";
67
+ const ORG = "reconciled-org";
68
+
69
+ /** `relation@organization` per principal, sorted — the whole role state of the store in one readable shape. */
70
+ async function rolesIn(store: Store): Promise<ReadonlyArray<string>> {
71
+ const rows = await store.listResources(ApiResourceKind.iam_policy);
72
+ return rows
73
+ .map((bytes) => fromBinary(IamPolicySchema, bytes))
74
+ .map(
75
+ (row) =>
76
+ `${row.spec?.principal?.id}:${row.spec?.relation}@${row.spec?.resource?.id}` +
77
+ `|by:${row.status?.audit?.specAudit?.createdBy?.id ?? ""}`,
78
+ )
79
+ .sort();
80
+ }
81
+
82
+ describe("role reconciliation (composed server, OIDC with no unit Authorizer, three boots over one directory)", () => {
83
+ let dir: string;
84
+ let server: ComposedServer;
85
+ let port: number;
86
+
87
+ const unit: ServerExtension = {
88
+ name: "fake-oidc-only",
89
+ requireAuthentication: true,
90
+ identityVerifiers: [fakeVerifier],
91
+ };
92
+
93
+ async function boot(): Promise<void> {
94
+ server = await composeServer({
95
+ config: loadConfig(baseConfig(dir)),
96
+ logger: silentLogger,
97
+ extensions: [unit],
98
+ portOverride: 0,
99
+ host: "127.0.0.1",
100
+ });
101
+ port = await server.start();
102
+ }
103
+
104
+ const asFounder = () =>
105
+ transportFor(port, fakeJwt(FOUNDER, "founder@example.com"));
106
+ const asMember = () =>
107
+ transportFor(port, fakeJwt(MEMBER, "member@example.com"));
108
+
109
+ const founderId = accountIdFor(FOUNDER);
110
+ const memberId = accountIdFor(MEMBER);
111
+ const expectedRows = [
112
+ `${founderId}:owner@${ORG}|by:${founderId}`,
113
+ `${memberId}:member@${ORG}|by:${memberId}`,
114
+ ];
115
+
116
+ beforeAll(async () => {
117
+ dir = mkdtempSync(path.join(tmpdir(), "role-reconciliation-"));
118
+ await boot();
119
+ });
120
+
121
+ afterAll(async () => {
122
+ await server.shutdown();
123
+ rmSync(dir, { recursive: true, force: true });
124
+ });
125
+
126
+ it("boot 1: the fresh server writes the rows at sign-in, and the marker is set from the first boot", async () => {
127
+ await createClient(
128
+ IdentityAccountCommandController,
129
+ asFounder(),
130
+ ).provisionMyAccount({});
131
+ await createClient(OrganizationCommandController, asFounder()).create({
132
+ apiVersion: "tenancy.stigmer.ai/v1",
133
+ kind: "Organization",
134
+ metadata: { name: ORG, slug: ORG, org: "" },
135
+ spec: { description: ORG },
136
+ });
137
+ await createClient(AgentCommandController, asFounder()).create({
138
+ apiVersion: "agentic.stigmer.ai/v1",
139
+ kind: "Agent",
140
+ metadata: {
141
+ name: "shared",
142
+ org: ORG,
143
+ visibility: ApiResourceVisibility.visibility_org,
144
+ },
145
+ spec: { instructions: "a conformant instruction body" },
146
+ });
147
+ await createClient(
148
+ IdentityAccountCommandController,
149
+ asMember(),
150
+ ).provisionMyAccount({});
151
+
152
+ expect(await rolesIn(server.store)).toEqual(expectedRows);
153
+ expect(
154
+ await server.store.bootstrapState.get(ROLES_RECONCILED_KEY),
155
+ ).not.toBe("");
156
+ });
157
+
158
+ it("boot 2: over the 3.15.x shape — accounts and no rows, no marker — the rows come back as each person's own, and the marker is set", async () => {
159
+ // The 3.15.x database, made literally on the store the server used.
160
+ await server.store.deleteResourcesByKind(ApiResourceKind.iam_policy);
161
+ await server.store.bootstrapState.delete(ROLES_RECONCILED_KEY);
162
+ expect(await rolesIn(server.store)).toEqual([]);
163
+ await server.shutdown();
164
+
165
+ await boot();
166
+
167
+ expect(await rolesIn(server.store)).toEqual(expectedRows);
168
+ expect(
169
+ await server.store.bootstrapState.get(ROLES_RECONCILED_KEY),
170
+ ).not.toBe("");
171
+ const founderOrgs = await createClient(
172
+ OrganizationQueryController,
173
+ asFounder(),
174
+ ).findMyOrganizations({});
175
+ const memberOrgs = await createClient(
176
+ OrganizationQueryController,
177
+ asMember(),
178
+ ).findMyOrganizations({});
179
+ expect(founderOrgs.entries.map((entry) => entry.metadata?.id)).toEqual([
180
+ ORG,
181
+ ]);
182
+ expect(memberOrgs.entries.map((entry) => entry.metadata?.id)).toEqual([
183
+ ORG,
184
+ ]);
185
+ });
186
+
187
+ it("boot 3: every role revoked after the marker stays revoked — a reboot hands nothing back", async () => {
188
+ const policies = createClient(IamPolicyCommandController, asFounder());
189
+ await policies.revokeOrgAccess({
190
+ identityAccountId: memberId,
191
+ organizationId: ORG,
192
+ });
193
+ await policies.revokeOrgAccess({
194
+ identityAccountId: founderId,
195
+ organizationId: ORG,
196
+ });
197
+ expect(await rolesIn(server.store)).toEqual([]);
198
+ await server.shutdown();
199
+
200
+ await boot();
201
+
202
+ expect(await rolesIn(server.store)).toEqual([]);
203
+ const founderOrgs = await createClient(
204
+ OrganizationQueryController,
205
+ asFounder(),
206
+ ).findMyOrganizations({});
207
+ expect(founderOrgs.entries).toEqual([]);
208
+ });
209
+ });
@@ -35,7 +35,6 @@ import { mkdtempSync, rmSync } from "node:fs";
35
35
  import { tmpdir } from "node:os";
36
36
  import path from "node:path";
37
37
 
38
- import type { DescService } from "@bufbuild/protobuf";
39
38
  import type { ConnectRouter } from "@connectrpc/connect";
40
39
  import { afterAll, beforeAll, describe, expect, it } from "vitest";
41
40
 
@@ -49,6 +48,7 @@ import { composeServer } from "../../boot/compose.js";
49
48
  import type { ComposedServer } from "../../boot/compose.js";
50
49
  import { createLogger } from "../../boot/logger.js";
51
50
  import { getKindMeta } from "../../pipeline/apiresource-meta.js";
51
+ import { servedServices } from "./composed-support.js";
52
52
 
53
53
  /** The registry as the check reads it: every kind with kind_meta, by tier. */
54
54
  interface KindEntry {
@@ -134,23 +134,15 @@ function tierViolations(
134
134
  return violations;
135
135
  }
136
136
 
137
- /** Replays the composed routes into a recorder and returns the served kind segments. */
137
+ /** The kind segments of the services a composed server routes. */
138
138
  function servedKindSegments(
139
139
  routes: (router: ConnectRouter) => void,
140
140
  ): Set<string> {
141
141
  const served = new Set<string>();
142
- const recorder = {
143
- handlers: [],
144
- service(desc: DescService) {
145
- const segment = kindSegmentOf(desc.typeName);
146
- if (segment !== undefined) served.add(segment);
147
- return recorder;
148
- },
149
- rpc() {
150
- return recorder;
151
- },
152
- };
153
- routes(recorder as unknown as ConnectRouter);
142
+ for (const desc of servedServices(routes)) {
143
+ const segment = kindSegmentOf(desc.typeName);
144
+ if (segment !== undefined) served.add(segment);
145
+ }
154
146
  return served;
155
147
  }
156
148
 
@@ -41,7 +41,9 @@ export interface AuthzCheck {
41
41
  * (stigmer#224: a nonexistent id answers NOT_FOUND, never
42
42
  * PERMISSION_DENIED). Only meaningful with a known kind and a non-empty
43
43
  * resource id — anything else is an authorizer contract bug and surfaces
44
- * as INTERNAL. The OSS permissive default never emits it.
44
+ * as INTERNAL. The OSS permissive default never emits it; the built-in
45
+ * authorizer (authorization/authorizer.ts) emits it for a missing target
46
+ * of every kind but the ones the cloud never probes.
45
47
  */
46
48
  export type AuthzDecision =
47
49
  | { readonly kind: "allow" }
@@ -54,10 +56,13 @@ export type AuthzDecision =
54
56
 
55
57
  /**
56
58
  * The pure decision interface. Exactly ONE implementation is composed per
57
- * server (the resolver enforces it): OSS's permissive single-team default
58
- * (O2) or an extension's (the cloud registers OpenFGA). Write concerns —
59
- * tuple seeding on create — are NOT authorization checks; they ride the
60
- * post-persist gate slots (blueprint §5b item 4).
59
+ * server (the resolver enforces it), selected by the authorization posture
60
+ * (authorization/posture.ts): an extension's (the cloud registers OpenFGA);
61
+ * open source's built-in authorizer under an authentication posture (the
62
+ * cloud's model evaluated over tuples derived from the row); or the
63
+ * permissive single-team default on the trusted-local laptop (O2). Write
64
+ * concerns — tuple seeding on create — are NOT authorization checks; they
65
+ * ride the post-persist gate slots (blueprint §5b item 4).
61
66
  */
62
67
  export interface Authorizer {
63
68
  authorize(caller: CallerIdentity, check: AuthzCheck): Promise<AuthzDecision>;
@@ -128,7 +128,10 @@ export interface ExtensionDrivers {
128
128
  * read — the census of docs/authorization-coverage.md — narrows to the
129
129
  * caller's authorized rows: post-scan lanes through
130
130
  * restrictListByReadScope, the search/activity/summary lanes through
131
- * the enumeration verb. When absent, the OSS full scan — byte-identical.
131
+ * the enumeration verb. When absent under the built-in authorization
132
+ * posture, open source composes its own (src/authorization/
133
+ * list-read-scope.ts — the model evaluated per candidate); when absent
134
+ * under trusted-local, the OSS full scan — byte-identical.
132
135
  */
133
136
  readonly listReadScope?: ListReadScope;
134
137
  /**