@stravica-ai/digital-operator-pa 0.1.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 (372) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +170 -0
  3. package/bin/desk +9 -0
  4. package/bin/distill +2 -0
  5. package/bin/estate-sync +2 -0
  6. package/bin/launch +2 -0
  7. package/bin/memory-sync +2 -0
  8. package/bin/migrate-inspect +2 -0
  9. package/bin/pa +2 -0
  10. package/bin/pa-coordinator-hook +2 -0
  11. package/bin/pa-init +2 -0
  12. package/bin/research +2 -0
  13. package/bin/scheduler +2 -0
  14. package/bin/secrets +2 -0
  15. package/bin/slice +2 -0
  16. package/bin/smoke +9 -0
  17. package/bin/sync +2 -0
  18. package/dist/engineering-pa-cli/README.md +205 -0
  19. package/dist/engineering-pa-cli/bin/estate-sync +2 -0
  20. package/dist/engineering-pa-cli/bin/launch +2 -0
  21. package/dist/engineering-pa-cli/bin/pa +2 -0
  22. package/dist/engineering-pa-cli/bin/pa-coordinator-hook +12 -0
  23. package/dist/engineering-pa-cli/bin/research +2 -0
  24. package/dist/engineering-pa-cli/bin/scheduler +2 -0
  25. package/dist/engineering-pa-cli/bin/secrets +2 -0
  26. package/dist/engineering-pa-cli/bin/smoke +9 -0
  27. package/dist/engineering-pa-cli/bin/sync +2 -0
  28. package/dist/engineering-pa-cli/config/coordinator-allowlist.json +118 -0
  29. package/dist/engineering-pa-cli/docs/coordinator-hook.md +211 -0
  30. package/dist/engineering-pa-cli/docs/estate-sync.md +412 -0
  31. package/dist/engineering-pa-cli/docs/gsc.md +175 -0
  32. package/dist/engineering-pa-cli/docs/lint-linkedin.md +139 -0
  33. package/dist/engineering-pa-cli/docs/secrets.md +221 -0
  34. package/dist/engineering-pa-cli/docs/smoke.md +113 -0
  35. package/dist/engineering-pa-cli/docs/staging-alias.md +114 -0
  36. package/dist/engineering-pa-cli/index.mjs +17 -0
  37. package/dist/engineering-pa-cli/package.json +37 -0
  38. package/dist/engineering-pa-cli/src/autonomy/cli.mjs +329 -0
  39. package/dist/engineering-pa-cli/src/autonomy/envelope.mjs +301 -0
  40. package/dist/engineering-pa-cli/src/coordinator-hook/cli.mjs +140 -0
  41. package/dist/engineering-pa-cli/src/coordinator-hook/config.mjs +134 -0
  42. package/dist/engineering-pa-cli/src/coordinator-hook/message.mjs +47 -0
  43. package/dist/engineering-pa-cli/src/coordinator-hook/policy.mjs +211 -0
  44. package/dist/engineering-pa-cli/src/coordinator-hook/repo-root.mjs +44 -0
  45. package/dist/engineering-pa-cli/src/coordinator-hook/self.mjs +30 -0
  46. package/dist/engineering-pa-cli/src/environment/cli.mjs +287 -0
  47. package/dist/engineering-pa-cli/src/environment/probes.mjs +302 -0
  48. package/dist/engineering-pa-cli/src/gsc/auth.mjs +148 -0
  49. package/dist/engineering-pa-cli/src/gsc/cli.mjs +93 -0
  50. package/dist/engineering-pa-cli/src/gsc/cloudflare.mjs +318 -0
  51. package/dist/engineering-pa-cli/src/gsc/commands/add-property.mjs +70 -0
  52. package/dist/engineering-pa-cli/src/gsc/commands/list-properties.mjs +33 -0
  53. package/dist/engineering-pa-cli/src/gsc/commands/pull-analytics.mjs +130 -0
  54. package/dist/engineering-pa-cli/src/gsc/commands/submit-sitemap.mjs +41 -0
  55. package/dist/engineering-pa-cli/src/gsc/commands/verify-via-cf-dns.mjs +189 -0
  56. package/dist/engineering-pa-cli/src/knowledge/call-log.mjs +59 -0
  57. package/dist/engineering-pa-cli/src/knowledge/cli.mjs +242 -0
  58. package/dist/engineering-pa-cli/src/knowledge/eval.mjs +446 -0
  59. package/dist/engineering-pa-cli/src/knowledge/formatters.mjs +331 -0
  60. package/dist/engineering-pa-cli/src/knowledge/graph.mjs +710 -0
  61. package/dist/engineering-pa-cli/src/launch/README.md +214 -0
  62. package/dist/engineering-pa-cli/src/launch/cli.mjs +51 -0
  63. package/dist/engineering-pa-cli/src/launch/commands/launch.mjs +106 -0
  64. package/dist/engineering-pa-cli/src/launch/identity.mjs +43 -0
  65. package/dist/engineering-pa-cli/src/launch/planner.mjs +44 -0
  66. package/dist/engineering-pa-cli/src/launch/repo-root.mjs +53 -0
  67. package/dist/engineering-pa-cli/src/launch/runner.mjs +147 -0
  68. package/dist/engineering-pa-cli/src/launch/task-loader.mjs +85 -0
  69. package/dist/engineering-pa-cli/src/lint/cli.mjs +61 -0
  70. package/dist/engineering-pa-cli/src/lint/commands/linkedin.mjs +133 -0
  71. package/dist/engineering-pa-cli/src/lint/detectors.mjs +90 -0
  72. package/dist/engineering-pa-cli/src/lint/linter.mjs +69 -0
  73. package/dist/engineering-pa-cli/src/lint/reporter.mjs +32 -0
  74. package/dist/engineering-pa-cli/src/lint/rules.mjs +132 -0
  75. package/dist/engineering-pa-cli/src/pa/cli.mjs +369 -0
  76. package/dist/engineering-pa-cli/src/pa/doc-groups.mjs +164 -0
  77. package/dist/engineering-pa-cli/src/pa/io.mjs +80 -0
  78. package/dist/engineering-pa-cli/src/pa/project-cli.mjs +385 -0
  79. package/dist/engineering-pa-cli/src/pa/projects.mjs +352 -0
  80. package/dist/engineering-pa-cli/src/pa/repo-root.mjs +64 -0
  81. package/dist/engineering-pa-cli/src/pa/session.mjs +254 -0
  82. package/dist/engineering-pa-cli/src/pa/work-cli.mjs +164 -0
  83. package/dist/engineering-pa-cli/src/pa/work.mjs +196 -0
  84. package/dist/engineering-pa-cli/src/pa/workstreams.mjs +201 -0
  85. package/dist/engineering-pa-cli/src/research/README.md +360 -0
  86. package/dist/engineering-pa-cli/src/research/briefs/extractor.md +103 -0
  87. package/dist/engineering-pa-cli/src/research/briefs/searcher.md +113 -0
  88. package/dist/engineering-pa-cli/src/research/briefs/synthesizer.md +124 -0
  89. package/dist/engineering-pa-cli/src/research/briefs/verifier.md +86 -0
  90. package/dist/engineering-pa-cli/src/research/cli.mjs +141 -0
  91. package/dist/engineering-pa-cli/src/research/commands/gates.mjs +176 -0
  92. package/dist/engineering-pa-cli/src/research/commands/list.mjs +56 -0
  93. package/dist/engineering-pa-cli/src/research/commands/mark.mjs +97 -0
  94. package/dist/engineering-pa-cli/src/research/commands/paths.mjs +69 -0
  95. package/dist/engineering-pa-cli/src/research/commands/prune.mjs +86 -0
  96. package/dist/engineering-pa-cli/src/research/commands/run.mjs +94 -0
  97. package/dist/engineering-pa-cli/src/research/commands/show.mjs +43 -0
  98. package/dist/engineering-pa-cli/src/research/docs/operator-present-flow.md +120 -0
  99. package/dist/engineering-pa-cli/src/research/format.mjs +59 -0
  100. package/dist/engineering-pa-cli/src/research/promote.mjs +260 -0
  101. package/dist/engineering-pa-cli/src/research/schema/finding.schema.json +55 -0
  102. package/dist/engineering-pa-cli/src/research/schema/gates.schema.json +34 -0
  103. package/dist/engineering-pa-cli/src/research/schema/manifest.schema.json +59 -0
  104. package/dist/engineering-pa-cli/src/research/schema/plan.schema.json +41 -0
  105. package/dist/engineering-pa-cli/src/research/schema/sources.schema.json +31 -0
  106. package/dist/engineering-pa-cli/src/research/store/findings.mjs +61 -0
  107. package/dist/engineering-pa-cli/src/research/store/gates.mjs +73 -0
  108. package/dist/engineering-pa-cli/src/research/store/index.mjs +312 -0
  109. package/dist/engineering-pa-cli/src/research/store/manifest.mjs +56 -0
  110. package/dist/engineering-pa-cli/src/research/store/plan.mjs +59 -0
  111. package/dist/engineering-pa-cli/src/research/store/sources.mjs +44 -0
  112. package/dist/engineering-pa-cli/src/research/store/validate.mjs +92 -0
  113. package/dist/engineering-pa-cli/src/research/workflows/research-normal.js +573 -0
  114. package/dist/engineering-pa-cli/src/scheduler/cli.mjs +197 -0
  115. package/dist/engineering-pa-cli/src/secrets/cli.mjs +254 -0
  116. package/dist/engineering-pa-cli/src/secrets/commands/backup-template.mjs +67 -0
  117. package/dist/engineering-pa-cli/src/secrets/commands/backup.mjs +85 -0
  118. package/dist/engineering-pa-cli/src/secrets/commands/delete.mjs +58 -0
  119. package/dist/engineering-pa-cli/src/secrets/commands/find.mjs +36 -0
  120. package/dist/engineering-pa-cli/src/secrets/commands/get.mjs +49 -0
  121. package/dist/engineering-pa-cli/src/secrets/commands/init.mjs +69 -0
  122. package/dist/engineering-pa-cli/src/secrets/commands/list.mjs +37 -0
  123. package/dist/engineering-pa-cli/src/secrets/commands/rotate.mjs +46 -0
  124. package/dist/engineering-pa-cli/src/secrets/commands/set.mjs +123 -0
  125. package/dist/engineering-pa-cli/src/secrets/commands/status.mjs +146 -0
  126. package/dist/engineering-pa-cli/src/secrets/commands/vaults.mjs +57 -0
  127. package/dist/engineering-pa-cli/src/secrets/commands/verify.mjs +143 -0
  128. package/dist/engineering-pa-cli/src/secrets/vault.mjs +766 -0
  129. package/dist/engineering-pa-cli/src/smoke/checks.mjs +199 -0
  130. package/dist/engineering-pa-cli/src/smoke/cli.mjs +108 -0
  131. package/dist/engineering-pa-cli/src/smoke/commands/run.mjs +237 -0
  132. package/dist/engineering-pa-cli/src/smoke/runner.mjs +191 -0
  133. package/dist/engineering-pa-cli/src/staging-alias/cli.mjs +91 -0
  134. package/dist/engineering-pa-cli/src/staging-alias/cloudflare.mjs +380 -0
  135. package/dist/engineering-pa-cli/src/staging-alias/commands/list.mjs +36 -0
  136. package/dist/engineering-pa-cli/src/staging-alias/commands/set.mjs +188 -0
  137. package/dist/engineering-pa-cli/src/staging-alias/commands/status.mjs +113 -0
  138. package/dist/engineering-pa-cli/src/staging-alias/commands/unset.mjs +95 -0
  139. package/dist/engineering-pa-cli/src/staging-alias/sites.mjs +105 -0
  140. package/dist/engineering-pa-cli/src/sync/cli.mjs +151 -0
  141. package/dist/engineering-pa-cli/src/sync/git.mjs +149 -0
  142. package/dist/engineering-pa-cli/src/sync/lock.mjs +30 -0
  143. package/dist/engineering-pa-cli/src/sync/regenerated-artifacts.mjs +114 -0
  144. package/dist/engineering-pa-cli/src/sync/registry-scope.mjs +260 -0
  145. package/dist/engineering-pa-cli/src/sync/run.mjs +531 -0
  146. package/dist/engineering-pa-cli/src/sync/runner.mjs +62 -0
  147. package/dist/engineering-pa-cli/src/sync/runs-digest.mjs +138 -0
  148. package/dist/engineering-pa-core/README.md +60 -0
  149. package/dist/engineering-pa-core/bin/desk +9 -0
  150. package/dist/engineering-pa-core/bin/distill +2 -0
  151. package/dist/engineering-pa-core/bin/memory-sync +2 -0
  152. package/dist/engineering-pa-core/bin/slice +2 -0
  153. package/dist/engineering-pa-core/docs/autonomy-envelope-tracker.md +111 -0
  154. package/dist/engineering-pa-core/docs/blueprints/README.md +45 -0
  155. package/dist/engineering-pa-core/docs/blueprints/docker-services/blueprint.md +168 -0
  156. package/dist/engineering-pa-core/docs/blueprints/git-identity/blueprint.md +116 -0
  157. package/dist/engineering-pa-core/docs/blueprints/ideas/custom-workspace-views.md +9 -0
  158. package/dist/engineering-pa-core/docs/blueprints/ideas/knowledge-domain-patterns.md +15 -0
  159. package/dist/engineering-pa-core/docs/blueprints/ideas/office-integration.md +11 -0
  160. package/dist/engineering-pa-core/docs/blueprints/ideas/team-scaling.md +9 -0
  161. package/dist/engineering-pa-core/docs/blueprints/ideas/work-personal-separation.md +9 -0
  162. package/dist/engineering-pa-core/docs/blueprints/scheduled-distillation/blueprint.md +129 -0
  163. package/dist/engineering-pa-core/docs/blueprints/tool-integration/blueprint.md +110 -0
  164. package/dist/engineering-pa-core/docs/commands/init.md +159 -0
  165. package/dist/engineering-pa-core/docs/commands/schedule.md +98 -0
  166. package/dist/engineering-pa-core/docs/commands/upgrade.md +67 -0
  167. package/dist/engineering-pa-core/docs/entity-location-map.md +93 -0
  168. package/dist/engineering-pa-core/docs/knowledge-scaffold.md +121 -0
  169. package/dist/engineering-pa-core/docs/lock.md +155 -0
  170. package/dist/engineering-pa-core/docs/memory-sync.md +28 -0
  171. package/dist/engineering-pa-core/docs/pa-operating-model.md +457 -0
  172. package/dist/engineering-pa-core/docs/scheduling.md +35 -0
  173. package/dist/engineering-pa-core/docs/standards/README.md +24 -0
  174. package/dist/engineering-pa-core/docs/standards/briefing-contract.md +161 -0
  175. package/dist/engineering-pa-core/docs/standards/tooling.md +240 -0
  176. package/dist/engineering-pa-core/docs/tools/distill.md +230 -0
  177. package/dist/engineering-pa-core/docs/tools/memory-sync.md +98 -0
  178. package/dist/engineering-pa-core/docs/tools/scheduler.md +243 -0
  179. package/dist/engineering-pa-core/docs/tools/slice.md +150 -0
  180. package/dist/engineering-pa-core/docs/upstream-issue-filing.md +88 -0
  181. package/dist/engineering-pa-core/docs/working-directory.md +29 -0
  182. package/dist/engineering-pa-core/docs/workspace-operations.md +46 -0
  183. package/dist/engineering-pa-core/index.mjs +21 -0
  184. package/dist/engineering-pa-core/knowledge/README.md +53 -0
  185. package/dist/engineering-pa-core/knowledge/canonical/.gitkeep +0 -0
  186. package/dist/engineering-pa-core/knowledge/content-voice/README.md +64 -0
  187. package/dist/engineering-pa-core/knowledge/content-voice/banned-ai-tells-baseline.md +133 -0
  188. package/dist/engineering-pa-core/knowledge/content-voice/banned-ai-tells-shape.md +58 -0
  189. package/dist/engineering-pa-core/knowledge/content-voice/banned-ai-tells-taxonomy.md +33 -0
  190. package/dist/engineering-pa-core/knowledge/content-voice/content-pipeline-routing.md +58 -0
  191. package/dist/engineering-pa-core/knowledge/content-voice/new-tell-capture-procedure.md +40 -0
  192. package/dist/engineering-pa-core/knowledge/content-voice/voice-guide-shape.md +43 -0
  193. package/dist/engineering-pa-core/knowledge/delegation-dispatch/README.md +34 -0
  194. package/dist/engineering-pa-core/knowledge/delegation-dispatch/briefing-contract.md +77 -0
  195. package/dist/engineering-pa-core/knowledge/delegation-dispatch/delegation-modes.md +84 -0
  196. package/dist/engineering-pa-core/knowledge/delegation-dispatch/dispatch-envelope.md +238 -0
  197. package/dist/engineering-pa-core/knowledge/delegation-dispatch/task-groups-and-orchestrators.md +62 -0
  198. package/dist/engineering-pa-core/knowledge/delegation-dispatch/team-improvement-loop.md +48 -0
  199. package/dist/engineering-pa-core/knowledge/delegation-dispatch/tool-development-policy.md +48 -0
  200. package/dist/engineering-pa-core/knowledge/engineering-discipline/README.md +33 -0
  201. package/dist/engineering-pa-core/knowledge/engineering-discipline/blast-radius-and-safety.md +50 -0
  202. package/dist/engineering-pa-core/knowledge/engineering-discipline/investigate-root-causes.md +48 -0
  203. package/dist/engineering-pa-core/knowledge/engineering-discipline/role-ladder.md +57 -0
  204. package/dist/engineering-pa-core/knowledge/engineering-discipline/verify-runtime-behaviour.md +53 -0
  205. package/dist/engineering-pa-core/knowledge/engineering-discipline/worktree-isolation.md +50 -0
  206. package/dist/engineering-pa-core/knowledge/knowledge-memory/README.md +33 -0
  207. package/dist/engineering-pa-core/knowledge/knowledge-memory/claude-md-hygiene.md +47 -0
  208. package/dist/engineering-pa-core/knowledge/knowledge-memory/journal-and-self-improvement.md +53 -0
  209. package/dist/engineering-pa-core/knowledge/knowledge-memory/knowledge-retrieval-discipline.md +62 -0
  210. package/dist/engineering-pa-core/knowledge/knowledge-memory/librarian-synthesis-mandate.md +56 -0
  211. package/dist/engineering-pa-core/knowledge/knowledge-memory/staging-and-observations.md +58 -0
  212. package/dist/engineering-pa-core/knowledge/operator-interface/README.md +32 -0
  213. package/dist/engineering-pa-core/knowledge/operator-interface/communication-style.md +33 -0
  214. package/dist/engineering-pa-core/knowledge/operator-interface/escalation-and-correction.md +45 -0
  215. package/dist/engineering-pa-core/knowledge/operator-interface/push-back-discipline.md +42 -0
  216. package/dist/engineering-pa-core/knowledge/operator-interface/session-boot-and-end.md +56 -0
  217. package/dist/engineering-pa-core/knowledge/platform-tooling/README.md +37 -0
  218. package/dist/engineering-pa-core/knowledge/platform-tooling/desk-cli-reference.md +52 -0
  219. package/dist/engineering-pa-core/knowledge/platform-tooling/environment-awareness.md +91 -0
  220. package/dist/engineering-pa-core/knowledge/platform-tooling/mcp-servers-catalogue.md +52 -0
  221. package/dist/engineering-pa-core/knowledge/platform-tooling/pa-cli-reference.md +55 -0
  222. package/dist/engineering-pa-core/knowledge/platform-tooling/scheduling-and-launchd.md +56 -0
  223. package/dist/engineering-pa-core/knowledge/platform-tooling/tool-discovery-discipline.md +49 -0
  224. package/dist/engineering-pa-core/knowledge/platform-tooling/working-directory-vs-project-root.md +43 -0
  225. package/dist/engineering-pa-core/knowledge/platform-tooling/workspace-server.md +51 -0
  226. package/dist/engineering-pa-core/knowledge/raw/.gitkeep +0 -0
  227. package/dist/engineering-pa-core/knowledge/scaffold/domains.json +5 -0
  228. package/dist/engineering-pa-core/knowledge/schema/.gitkeep +0 -0
  229. package/dist/engineering-pa-core/knowledge/work-management/README.md +33 -0
  230. package/dist/engineering-pa-core/knowledge/work-management/desk-cli.md +84 -0
  231. package/dist/engineering-pa-core/knowledge/work-management/progress-md.md +48 -0
  232. package/dist/engineering-pa-core/knowledge/work-management/projects.md +64 -0
  233. package/dist/engineering-pa-core/knowledge/work-management/spawn-log.md +48 -0
  234. package/dist/engineering-pa-core/knowledge/work-management/work-items.md +67 -0
  235. package/dist/engineering-pa-core/package.json +26 -0
  236. package/dist/engineering-pa-core/roles/agent-ops/definition.md +79 -0
  237. package/dist/engineering-pa-core/roles/dispatch-briefer/definition.md +195 -0
  238. package/dist/engineering-pa-core/roles/librarian/definition.md +176 -0
  239. package/dist/engineering-pa-core/roles/pa/definition.md +93 -0
  240. package/dist/engineering-pa-core/roles/system-admin/definition.md +106 -0
  241. package/dist/engineering-pa-core/roles/tool-developer/definition.md +116 -0
  242. package/dist/engineering-pa-core/roles/writer/definition.md +130 -0
  243. package/dist/engineering-pa-core/schema/autonomy-envelope.schema.json +61 -0
  244. package/dist/engineering-pa-core/schema/project.json +114 -0
  245. package/dist/engineering-pa-core/schema/schedule.json +63 -0
  246. package/dist/engineering-pa-core/schema/work-item.json +92 -0
  247. package/dist/engineering-pa-core/src/config/pa-package-name.mjs +30 -0
  248. package/dist/engineering-pa-core/src/desk/cli.mjs +95 -0
  249. package/dist/engineering-pa-core/src/desk/commands.mjs +398 -0
  250. package/dist/engineering-pa-core/src/desk/format.mjs +84 -0
  251. package/dist/engineering-pa-core/src/desk/repo.mjs +172 -0
  252. package/dist/engineering-pa-core/src/desk/team-scope.mjs +142 -0
  253. package/dist/engineering-pa-core/src/distill/cli.mjs +112 -0
  254. package/dist/engineering-pa-core/src/distill/prereqs.mjs +171 -0
  255. package/dist/engineering-pa-core/src/distill/prompt.mjs +74 -0
  256. package/dist/engineering-pa-core/src/distill/run.mjs +230 -0
  257. package/dist/engineering-pa-core/src/distill/runner.mjs +86 -0
  258. package/dist/engineering-pa-core/src/distill/staging.mjs +59 -0
  259. package/dist/engineering-pa-core/src/knowledge/retrieval/backlink-indexer.mjs +154 -0
  260. package/dist/engineering-pa-core/src/knowledge/retrieval/graph-builder.mjs +186 -0
  261. package/dist/engineering-pa-core/src/knowledge/retrieval/index-builder.mjs +225 -0
  262. package/dist/engineering-pa-core/src/knowledge/retrieval/query.mjs +263 -0
  263. package/dist/engineering-pa-core/src/lock/lock.mjs +202 -0
  264. package/dist/engineering-pa-core/src/memory-sync/cli-support.mjs +12 -0
  265. package/dist/engineering-pa-core/src/memory-sync/cli.mjs +56 -0
  266. package/dist/engineering-pa-core/src/memory-sync/commands/pull.mjs +44 -0
  267. package/dist/engineering-pa-core/src/memory-sync/commands/push.mjs +46 -0
  268. package/dist/engineering-pa-core/src/memory-sync/mirror.mjs +114 -0
  269. package/dist/engineering-pa-core/src/memory-sync/repo.mjs +65 -0
  270. package/dist/engineering-pa-core/src/scheduler/detect.mjs +111 -0
  271. package/dist/engineering-pa-core/src/scheduler/host.mjs +38 -0
  272. package/dist/engineering-pa-core/src/scheduler/index.mjs +13 -0
  273. package/dist/engineering-pa-core/src/scheduler/install.mjs +854 -0
  274. package/dist/engineering-pa-core/src/scheduler/list.mjs +168 -0
  275. package/dist/engineering-pa-core/src/scheduler/remove.mjs +176 -0
  276. package/dist/engineering-pa-core/src/scheduler/verify.mjs +435 -0
  277. package/dist/engineering-pa-core/src/session-boot/autonomy-injection.mjs +84 -0
  278. package/dist/engineering-pa-core/src/slice/cli.mjs +139 -0
  279. package/dist/engineering-pa-core/src/slice/inputs.mjs +174 -0
  280. package/dist/engineering-pa-core/src/slice/prompt.mjs +94 -0
  281. package/dist/engineering-pa-core/src/slice/prompts/dave-boot.md +91 -0
  282. package/dist/engineering-pa-core/src/slice/run.mjs +334 -0
  283. package/dist/engineering-pa-core-extensions-atlassian/README.md +31 -0
  284. package/dist/engineering-pa-core-extensions-atlassian/index.mjs +9 -0
  285. package/dist/engineering-pa-core-extensions-atlassian/package.json +19 -0
  286. package/dist/engineering-pa-core-extensions-n8n/README.md +29 -0
  287. package/dist/engineering-pa-core-extensions-n8n/index.mjs +8 -0
  288. package/dist/engineering-pa-core-extensions-n8n/package.json +19 -0
  289. package/dist/engineering-pa-librarian/README.md +38 -0
  290. package/dist/engineering-pa-librarian/index.mjs +12 -0
  291. package/dist/engineering-pa-librarian/package.json +19 -0
  292. package/dist/engineering-pa-migrate-inspect/README.md +131 -0
  293. package/dist/engineering-pa-migrate-inspect/bin/migrate-inspect +2 -0
  294. package/dist/engineering-pa-migrate-inspect/package.json +21 -0
  295. package/dist/engineering-pa-migrate-inspect/src/age-key-migrate.mjs +83 -0
  296. package/dist/engineering-pa-migrate-inspect/src/cli.mjs +97 -0
  297. package/dist/engineering-pa-migrate-inspect/src/inspector.mjs +237 -0
  298. package/dist/engineering-pa-migrate-inspect/src/platforms/linux.mjs +87 -0
  299. package/dist/engineering-pa-migrate-inspect/src/platforms/macos.mjs +105 -0
  300. package/dist/engineering-pa-migrate-inspect/src/runner.mjs +87 -0
  301. package/dist/engineering-pa-runbook/README.md +103 -0
  302. package/dist/engineering-pa-runbook/package.json +18 -0
  303. package/dist/engineering-pa-runbook/reference/dex-template.runbook.json +66 -0
  304. package/dist/engineering-pa-runbook/reference/hq-dave.runbook.json +69 -0
  305. package/dist/engineering-pa-runbook/reference/smarthome01.runbook.json +92 -0
  306. package/dist/engineering-pa-runbook/schema/inspection.schema.json +113 -0
  307. package/dist/engineering-pa-runbook/schema/runbook.schema.json +67 -0
  308. package/dist/engineering-pa-runbook/src/validator.mjs +167 -0
  309. package/dist/engineering-pa-scaffold/README.md +164 -0
  310. package/dist/engineering-pa-scaffold/bin/pa-init +2 -0
  311. package/dist/engineering-pa-scaffold/index.mjs +42 -0
  312. package/dist/engineering-pa-scaffold/package.json +22 -0
  313. package/dist/engineering-pa-scaffold/src/cli.mjs +115 -0
  314. package/dist/engineering-pa-scaffold/src/commands/init.mjs +169 -0
  315. package/dist/engineering-pa-scaffold/src/generator.mjs +354 -0
  316. package/dist/engineering-pa-scaffold/src/prompts.mjs +125 -0
  317. package/dist/engineering-pa-scaffold/src/runner.mjs +142 -0
  318. package/dist/engineering-pa-scaffold/templates/CLAUDE.md.template +196 -0
  319. package/dist/engineering-pa-scaffold/templates/operator-README.md.template +44 -0
  320. package/dist/engineering-pa-types-engineering/README.md +35 -0
  321. package/dist/engineering-pa-types-engineering/docs/commands/product-build.md +120 -0
  322. package/dist/engineering-pa-types-engineering/index.mjs +9 -0
  323. package/dist/engineering-pa-types-engineering/package.json +19 -0
  324. package/dist/engineering-pa-types-engineering/roles/product-engineer/definition.md +650 -0
  325. package/dist/engineering-pa-types-engineering/roles/product-engineer/templates/build-spec.md +82 -0
  326. package/dist/engineering-pa-types-engineering/roles/product-engineer/templates/preflight-checklist.md +158 -0
  327. package/dist/engineering-pa-types-engineering/roles/product-engineer/templates/worker-brief.md +130 -0
  328. package/dist/engineering-pa-workspace/README.md +197 -0
  329. package/dist/engineering-pa-workspace/app/assets/md.js +187 -0
  330. package/dist/engineering-pa-workspace/app/assets/modal.js +120 -0
  331. package/dist/engineering-pa-workspace/app/assets/theme.css +132 -0
  332. package/dist/engineering-pa-workspace/app/assets/theme.js +159 -0
  333. package/dist/engineering-pa-workspace/app/banner.js +320 -0
  334. package/dist/engineering-pa-workspace/app/delegations.html +345 -0
  335. package/dist/engineering-pa-workspace/app/home.html +1060 -0
  336. package/dist/engineering-pa-workspace/app/index.html +361 -0
  337. package/dist/engineering-pa-workspace/app/knowledge-map.html +163 -0
  338. package/dist/engineering-pa-workspace/app/knowledge.html +304 -0
  339. package/dist/engineering-pa-workspace/app/nav.json +75 -0
  340. package/dist/engineering-pa-workspace/app/notes.html +199 -0
  341. package/dist/engineering-pa-workspace/app/onboarding.html +592 -0
  342. package/dist/engineering-pa-workspace/app/profile.html +243 -0
  343. package/dist/engineering-pa-workspace/app/project-detail.html +432 -0
  344. package/dist/engineering-pa-workspace/app/projects.html +297 -0
  345. package/dist/engineering-pa-workspace/app/repos.html +598 -0
  346. package/dist/engineering-pa-workspace/app/schedules.html +486 -0
  347. package/dist/engineering-pa-workspace/app/secrets.html +164 -0
  348. package/dist/engineering-pa-workspace/app/staging.html +319 -0
  349. package/dist/engineering-pa-workspace/app/tasks.html +465 -0
  350. package/dist/engineering-pa-workspace/app/vendor/chart.umd.min.js +21 -0
  351. package/dist/engineering-pa-workspace/app/viewer.html +116 -0
  352. package/dist/engineering-pa-workspace/docs/DAEMON.md +104 -0
  353. package/dist/engineering-pa-workspace/docs/page-blueprint.md +286 -0
  354. package/dist/engineering-pa-workspace/docs/status-mon.md +168 -0
  355. package/dist/engineering-pa-workspace/index.mjs +12 -0
  356. package/dist/engineering-pa-workspace/nav.json.example +8 -0
  357. package/dist/engineering-pa-workspace/package.json +27 -0
  358. package/dist/engineering-pa-workspace/src/api.mjs +2086 -0
  359. package/dist/engineering-pa-workspace/src/install-daemon.mjs +573 -0
  360. package/dist/engineering-pa-workspace/src/nav.mjs +190 -0
  361. package/dist/engineering-pa-workspace/src/secrets-api.mjs +175 -0
  362. package/dist/engineering-pa-workspace/src/server.mjs +516 -0
  363. package/dist/engineering-pa-workspace/src/status-mon/poll.mjs +220 -0
  364. package/dist/engineering-pa-workspace/src/status-mon/poller.mjs +113 -0
  365. package/dist/engineering-pa-workspace/src/status-mon/run.mjs +133 -0
  366. package/dist/engineering-pa-workspace/src/supervisor.mjs +264 -0
  367. package/dist/engineering-pa-workspace/src/ws.mjs +633 -0
  368. package/index.mjs +60 -0
  369. package/package.json +58 -0
  370. package/templates/banned-ai-tells.md +102 -0
  371. package/templates/purpose.md +105 -0
  372. package/templates/voice-guide.md +98 -0
@@ -0,0 +1,84 @@
1
+ <!--
2
+ scaffold: delegation-modes.md
3
+ bucket: delegation-dispatch (Bucket 3)
4
+ what belongs here: how to choose between the three delegation modes.
5
+ - Single subagent (default for well-bounded work).
6
+ - Task group (orchestrator + 2+ workers).
7
+ - Single-threaded (trivial, or context already burned).
8
+ - Topic-differs pollution-prevention: off-topic tasks always dispatch.
9
+ -->
10
+
11
+ # Delegation modes
12
+
13
+ Three modes. Selection is a choice, not a default — each has a distinct trigger shape.
14
+
15
+ ## Mode 1 — Single subagent
16
+
17
+ **Default for any task the operator hands the PA.** Well-bounded work that fits one worker.
18
+
19
+ Pattern: PA hands intent to `dispatch-briefer` → Briefer produces 8-section brief → PA dispatches target worker with the brief → worker returns → PA reviews and reports.
20
+
21
+ Trigger:
22
+ - Work fits one role.
23
+ - The context to load is reasonable but non-trivial (otherwise Mode 3).
24
+ - The output shape is well-defined.
25
+
26
+ Standards: 8-section brief via `dispatch-briefer` (or direct-authored if the exceptions apply — see `briefing-contract.md`).
27
+
28
+ ## Mode 2 — Task group
29
+
30
+ **For read-heavy parallelisable work, work exceeding the PA's context budget, or a multi-role software project.**
31
+
32
+ Pattern: PA dispatches a Project Lead (or orchestrator role appropriate to the domain) as `general-purpose`. The orchestrator plans the group's shape, dispatches role-workers with per-worker briefs, collects returns, integrates.
33
+
34
+ Trigger:
35
+ - 2+ workers needed on the same problem.
36
+ - Work spans multiple roles (writer + code + docs + review).
37
+ - Fan-out reading (10+ files to survey, docs to catalogue, etc.) that would blow the main-thread context.
38
+
39
+ Constraints (from dispatch-envelope findings):
40
+ - Orchestrator MUST be `general-purpose` or `claude` — other types lack the Agent tool.
41
+ - Design for depth-1 or depth-2. Depth-3+ is possible but the observability tax is real.
42
+ - Structured return from orchestrator must enumerate each child's outcome — the parent only sees the orchestrator's final message.
43
+ - MCP shared state (Playwright, OAuth-gated) hazards apply to parallel workers.
44
+
45
+ Standards: task-group pattern with per-worker briefs; see `task-groups-and-orchestrators.md`.
46
+
47
+ ## Mode 3 — Single-threaded (do it yourself)
48
+
49
+ **For trivial work, or when context is already burned and dispatching would cost more than finishing.**
50
+
51
+ Trigger:
52
+ - Genuinely trivial: one-line edit, single file read, status check, quick answer from `pa knowledge`.
53
+ - The context to load is small (already in main thread).
54
+ - Dispatching would cost more than executing.
55
+ - **Topic proximity — the ask sits close enough to what you're already doing that a dispatch would add pollution or confusion without benefit.** Executing inline keeps the thread coherent.
56
+
57
+ ## Topic-differs pollution-prevention
58
+
59
+ Rev 4 Bucket 3 rule 1 addition. Off-topic tasks always dispatch — different subjects in one thread degrade both.
60
+
61
+ **How to tell:** if you'd have to switch mental register (from LI comment drafting to code review, from a scheduling question to a voice-guide edit), the topic differs. If the switch is small (from one sub-question of the same brief to another), the topic is the same.
62
+
63
+ The signal is not size — a trivial off-topic ask still dispatches. A large ask on-topic still executes inline (if context allows). Two axes: size, subject-continuation. Both matter.
64
+
65
+ ## Selection tree (quick reference)
66
+
67
+ ```
68
+ Is the ask trivially small AND on-topic?
69
+ Yes → Mode 3 (single-threaded)
70
+ No ↓
71
+
72
+ Does it need multiple roles OR heavy parallel reads OR context-budget breach?
73
+ Yes → Mode 2 (task group with orchestrator)
74
+ No ↓
75
+
76
+ Default → Mode 1 (single subagent via Briefer)
77
+ ```
78
+
79
+ ## Related
80
+
81
+ - CLAUDE.md.template Bucket 3 rules 1, 4, 5.
82
+ - `briefing-contract.md` — the brief pattern all modes use.
83
+ - `dispatch-envelope.md` — capability and concurrency findings.
84
+ - `task-groups-and-orchestrators.md` — Mode 2 details.
@@ -0,0 +1,238 @@
1
+ # Dispatch Envelope — What Actually Works
2
+
3
+ ## Purpose
4
+
5
+ This document is the canonical reference for what actually works when the PA dispatches subagents through the Claude Code Agent tool: which subagent types can spawn children, how deep nesting goes, what tools children inherit, what isolation is real vs illusory, and what fails silently or loudly. It exists because the PA's operating model — especially the Project Lead orchestrator pattern — makes architectural bets on these mechanics; those bets have now been verified empirically (2026-07-05) rather than assumed.
6
+
7
+ The scope is the dispatch *mechanism*, not the briefing content. For brief-writing standards see `@stravica-ai/engineering-pa-core/docs/standards/briefing-contract.md`; this doc is upstream of that — the constraints below shape what a brief can and cannot ask a worker to do.
8
+
9
+ All findings were gathered by a live diagnostic run on 2026-07-05 in an operator instance codebase. Re-verify if the harness version shifts materially.
10
+
11
+ ---
12
+
13
+ ## Capability Matrix
14
+
15
+ | subagent_type | Dispatchable? | Has Agent tool? | Can spawn children? | Full MCP inventory? | Notes |
16
+ |---|---|---|---|---|---|
17
+ | `general-purpose` | yes | yes | yes | yes | Default choice for orchestrators. Tool inventory `*`. |
18
+ | `claude` | yes | yes | yes | yes | Equivalent to general-purpose for dispatch purposes. Tool inventory `*`. |
19
+ | `Explore` | yes | **no** | **no** | (moot — no Agent) | Read-only search agent. Excludes Agent, Artifact, ExitPlanMode, Edit, Write, NotebookEdit. |
20
+ | `Plan` | yes | **no** | **no** | (moot — no Agent) | Architect/planner. Same exclusions as Explore. |
21
+ | `claude-code-guide` | yes | **no** | **no** | (moot — no Agent) | Tools limited to Bash, Read, WebFetch, WebSearch. |
22
+ | `statusline-setup` | yes | **no** | **no** | (moot — no Agent) | Tools limited to Read, Edit. |
23
+
24
+ **Rule:** any orchestrator that must dispatch its own workers MUST be dispatched as `general-purpose` or `claude`. Dispatching an orchestrator role as any other type is a silent architectural bug — the runtime tool inventory won't include Agent, so the nested dispatch will fail the moment the orchestrator tries to spawn a worker.
25
+
26
+ Source for tool inventories: the harness's own `Available agent types` system reminder, corroborated by nested-dispatch runtime tests.
27
+
28
+ ---
29
+
30
+ ## Depth Findings
31
+
32
+ Nested dispatch works cleanly to at least **depth 4** with no permission prompts, no runtime errors, and modest per-level overhead.
33
+
34
+ **Confirmed chain from root to leaf:**
35
+
36
+ ```
37
+ Parent (root)
38
+ └─ Child (general-purpose) ~1.2s spawn overhead
39
+ └─ Grandchild (general-purpose) returned "DEPTH-3-ECHO"
40
+ └─ Great-grandchild (general-purpose) returned "DEPTH-4-ECHO", ~2.7s
41
+ ```
42
+
43
+ Root parent thread observed:
44
+ - Depth-3 grandchild sentence verbatim, echoed through the child's report.
45
+ - Depth-4 great-grandchild sentence verbatim, echoed through the child's report of the grandchild's report.
46
+
47
+ Per-level cost (zero-tool child, echo only):
48
+ - Depth-2 → depth-3 hop: ~1.2s (`duration_ms: 1184`)
49
+ - Depth-3 → depth-4 hop: ~2.7s (`duration_ms: 2746`)
50
+ - Wrapping orchestrator wall-clock: ~15-30s including its own reasoning
51
+ - The overhead is dominated by the orchestrator's model turn, not the spawn itself
52
+
53
+ No signs of a depth cap up to depth-4. Depth-5+ was not tested and remains open; assume it works but verify before betting on it.
54
+
55
+ **Observability trade-off scales linearly with depth.** Each nesting level is a summarisation checkpoint — the root only sees what the level-1 orchestrator reports, which only saw what the level-2 orchestrator reported, and so on. Depth-4 means the root's view of the leaf is triply summarised. For debugging or high-fidelity output the shallowest possible dispatch shape is preferable.
56
+
57
+ ---
58
+
59
+ ## Foreground vs Background
60
+
61
+ ### Foreground (`run_in_background: false`)
62
+
63
+ - Returns the child's final assistant message as plain text directly in the Agent tool result.
64
+ - Blocks the parent turn until the child completes.
65
+ - Tail of the result includes: `agentId: a...-... (use SendMessage with to: 'a...-...' to continue this agent)` — the agentId is available for resumption even from a foreground call.
66
+ - No streaming, no partial progress visible during execution.
67
+ - **Use for:** short critical-path work where the parent literally cannot proceed without the result (e.g. a design decision, a lookup that gates the next dispatch).
68
+
69
+ ### Background (`run_in_background: true` — the default)
70
+
71
+ - Returns immediately with a metadata blob containing `agentId`, an `output_file` symlink pointing at the child's JSONL transcript, and a warning explicitly forbidding reading it (context-overflow risk).
72
+ - Completion arrives asynchronously as a `<task-notification>` message with `<status>completed</status>` and a `<result>...</result>` block containing the child's final message.
73
+ - Notification includes: `A task-notification fires each time this agent stops with no live background children of its own. The user can send it another message and resume it, so the same task-id may notify more than once.`
74
+ - Multiple background dispatches from a single message run **in parallel** — confirmed with 10 concurrent dispatches completing within a tight 3-second window.
75
+ - Notifications from many parallel completions arrive in bursts of 2-4 rather than one-per-line.
76
+ - **Use for:** anything that isn't gating the very next turn — which is most things.
77
+
78
+ ### SendMessage / resume semantics
79
+
80
+ - SendMessage to an existing agentId resumes it in the background with full transcript context. The response says `resumed from transcript in the background with your message`.
81
+ - The resumed agent is the **same** agent — same agentId, same conversation history, notification fires again on next stop.
82
+ - Recipient MUST be an agentId (format `a...`) or a live teammate name. Referring to a peer by `subagent_type` fails — e.g. `SendMessage({to: "general-purpose"})` returns `"No agent named 'general-purpose' is reachable"`. There is no group addressing by role.
83
+ - SendMessage supersedes dispatching a fresh Agent when continuing prior work is cheaper than briefing a new one. Use it to hand a follow-up task to a child that already has the context loaded.
84
+ - `to: "main"` is available from a background subagent to talk back to the parent — but the parent still receives it as a normal message, not a special channel.
85
+
86
+ ### Return-shape parity across foreground and background
87
+
88
+ | Aspect | Foreground | Background |
89
+ |---|---|---|
90
+ | What returns | child's final assistant message text | metadata + async notification with final message |
91
+ | agentId available | yes (in tail) | yes (up front) |
92
+ | Intermediate tool events visible | no | no |
93
+ | Transcript file on disk | yes | yes (as symlink, do not read) |
94
+ | Resumable via SendMessage | yes | yes |
95
+
96
+ The transcript is always on disk as JSONL under `/private/tmp/claude-<uid>/<session>/tasks/{agentId}.output` (symlink) → `~/.claude/projects/<session>/subagents/agent-{agentId}.jsonl`. The harness warns not to read these directly — they include full tool traces and will blow the parent's context. If per-child transcript inspection matters, do it out-of-band after the session ends, not inline.
97
+
98
+ ---
99
+
100
+ ## MCP Tool Availability
101
+
102
+ **Finding: MCP tools do inherit into subagents.** The parent's full deferred-tool inventory is visible in every child spawned as `general-purpose` or `claude`. Confirmed by direct load-and-call diagnostics from a child agent.
103
+
104
+ Verified in a subagent's tool inventory:
105
+ - `WebFetch` — loads and returns real fetched content
106
+ - `WebSearch` — available
107
+ - `mcp__rcf-tools__rcf_status` — loads and returns valid JSON response
108
+ - `mcp__playwright__browser_navigate` — loads and successfully navigates
109
+ - `mcp__claude_ai_Gmail__authenticate` — listed as available
110
+ - `mcp__claude_ai_Atlassian__authenticate` — listed as available
111
+ - `SendMessage`, `Monitor` — listed as available
112
+ - `ToolSearch` itself — available (subagents must use it to load deferred schemas, same as the parent)
113
+
114
+ **Important shared-state caveat — Playwright browser session is shared with the parent.** When a subagent called `browser_navigate`, the response showed a pre-existing second tab open from a prior parent-thread run. The Playwright MCP browser context is **not** per-subagent; it's session-scoped. Implication:
115
+
116
+ - If the parent has a Playwright session in flight and dispatches a child that also uses Playwright, they share the same browser instance and can step on each other's tabs.
117
+ - OAuth-gated MCP tools (Google Drive, Gmail, Calendar, Atlassian, Canva) also share the parent's auth state — a child does not need to re-authenticate.
118
+ - For MCP tools like Playwright where state matters, only one agent at a time should be driving the browser. Serialise.
119
+
120
+ The subagent-type restrictions apply here too: `Explore`, `Plan`, `claude-code-guide`, and `statusline-setup` have restricted tool inventories that exclude MCP tools by default. Only `general-purpose` and `claude` inherit the full inventory.
121
+
122
+ ---
123
+
124
+ ## Concurrency and Limits
125
+
126
+ - **Documented cap:** none. The Agent tool description mentions parallel dispatch (`When you launch multiple agents for independent work, send them in a single message with multiple tool uses so they run concurrently`) but specifies no numeric ceiling, queue, or throttle.
127
+ - **Observed cap:** none up to N=10. Ten concurrent background subagents launched from a single message all started immediately, ran in parallel, and completed within a tight ~3-second spread. No queuing, no refusal, no throttling.
128
+ - **Untested:** N > 10. If the harness has a hard ceiling it's above 10; do not rely on unbounded parallelism without re-testing.
129
+ - **Notification batching:** completion notifications arrive in bursts of 2-4 messages when many finish close together. This is a UX detail — it doesn't change semantics, and the ordering per-agent is preserved.
130
+
131
+ **Practical guidance:** dispatch as many parallel workers as make sense for the problem. Don't artificially cap at 3 or 5 — the harness accepts real parallelism. But note that each concurrent dispatch is a real token cost against the account, so parallelism is expensive even when it's fast.
132
+
133
+ ---
134
+
135
+ ## Worktree Isolation
136
+
137
+ Passing `isolation: "worktree"` to the Agent tool cuts a git worktree for the child. What that actually isolates:
138
+
139
+ **Isolated (git-only sandbox):**
140
+ - Working tree — each worktree gets its own filesystem view of the repo at `.claude/worktrees/agent-{agentId}/` under the parent repo root.
141
+ - Git branch — auto-named `worktree-agent-{agentId}`, cut from the parent's current HEAD.
142
+ - Repo-relative operations — file edits, staged changes, `git status` are per-worktree.
143
+ - The parent's working tree is untouched by child edits inside the worktree.
144
+
145
+ **NOT isolated (shared with parent and other agents):**
146
+ - `/tmp` — writes visible to parent and to sibling worktree-isolated agents.
147
+ - `$HOME` — shared user config.
148
+ - Network, credentials, MCP session state (see Playwright caveat above).
149
+ - Any absolute path outside the repo root.
150
+ - Environment variables (unless explicitly overridden).
151
+
152
+ **Cleanup:** manual when the child made changes. The Agent tool description states worktrees are auto-cleaned only when the agent made no changes. Both dirty test worktrees persisted at `.claude/worktrees/agent-{agentId}/` after completion. Prior sessions accumulate stale worktrees under `{OPERATOR_REPO_ROOT}/.claude/worktrees/` — worth a periodic `git worktree prune` + directory sweep.
153
+
154
+ **Concurrency safety:** two parallel worktree-isolated agents do not conflict on repo files — each has its own branch and its own working tree. But they DO share `/tmp` and any other absolute paths outside the repo, so treat worktree isolation as "git-safe parallel edits" not "sandboxed process".
155
+
156
+ ---
157
+
158
+ ## Long-Running Health
159
+
160
+ **Signals available to the parent while a child is running:**
161
+
162
+ - Presence of the child's task output file at `/private/tmp/claude-<uid>/<session>/tasks/{agentId}.output` (symlink to the JSONL transcript). The symlink exists as soon as the child starts.
163
+ - Absence of a task-notification for that agentId means "still running (or crashed silently — rare)".
164
+ - No documented API for peeking at partial progress, and the harness explicitly warns not to read the transcript file directly (context overflow risk).
165
+
166
+ **Detecting a stalled vs slow child:**
167
+
168
+ - There is no built-in health signal beyond notification-vs-silence.
169
+ - A child that runs quietly for a long time and never notifies is indistinguishable from a slow child until it finishes.
170
+ - Mitigation for genuinely long dispatches: brief the child to send periodic `SendMessage` updates to `main` at natural checkpoints. This makes progress observable without reading the transcript.
171
+ - For jobs whose duration is genuinely unknown (multi-hour scrapes, model runs), the harness is not the right container — kick them off via `schedule` (cloud routine) or a scheduled task instead.
172
+
173
+ **Concurrency test data point:** a background child running for ~78s wall-clock produced zero partial signals. Only the final `<task-notification>` fired at completion. Assume the same for anything below the notification threshold.
174
+
175
+ ---
176
+
177
+ ## Brief-Writing Implications
178
+
179
+ Rules derived from the findings above. Fold into `briefing-contract.md` when it's next updated.
180
+
181
+ **DO:**
182
+
183
+ 1. **Dispatch orchestrators as `general-purpose` or `claude`.** Any Project Lead, task-group orchestrator, or worker that will itself spawn children MUST be one of these two types. State the subagent_type constraint explicitly in the brief so future refactors don't accidentally downgrade the type.
184
+ 2. **Prefer background dispatch by default.** Foreground blocks the parent turn and is only justified when the result gates the very next action. All fan-out and parallelisable work goes background.
185
+ 3. **Design for depth-1 or depth-2 orchestration whenever possible.** The observability tax on each nesting level (final-message-only rollup) makes depth-3+ progressively harder to reason about. Use nested orchestrators only when the problem genuinely needs a multi-role team.
186
+ 4. **Require structured returns from orchestrators.** Since the parent only sees the orchestrator's final message, the brief must specify the exact return shape covering every child's outcome (name/role, agentId, status, key artefacts). Otherwise child work becomes opaque.
187
+ 5. **Brief periodic SendMessage checkpoints for long-running children.** For any child expected to run >5 minutes, the brief should require it to `SendMessage` progress to `main` at natural checkpoints. Otherwise a stalled child is indistinguishable from a slow child.
188
+ 6. **Explicitly name MCP shared-state hazards.** If a child will use Playwright, Gmail, or any MCP with session state, the brief must acknowledge the shared browser/OAuth session and instruct the child to serialise with any other agent using the same tool.
189
+ 7. **Address SendMessage recipients by agentId, not by type.** Any brief that instructs a child to message a peer must include the peer's agentId. Referring to peers by role or subagent_type will fail at runtime.
190
+
191
+ **DON'T:**
192
+
193
+ 1. **Don't dispatch a Project Lead (or any orchestrator) as `Plan`, `Explore`, `claude-code-guide`, or `statusline-setup`.** Those types lack the Agent tool. The nested dispatch will fail — usually at the worst possible moment.
194
+ 2. **Don't run two Playwright agents in parallel.** Browser session is shared. Serialise, or accept that they will clobber each other's tabs.
195
+ 3. **Don't rely on worktree isolation as a security or sandbox boundary.** It isolates the git tree only. `/tmp`, `$HOME`, network, and everything absolute-path outside the repo are wide open.
196
+ 4. **Don't put critical writes to shared paths (`/tmp`, `~/.claude/`) inside parallel workers.** They'll race. Use per-agent output directories or namespace files by agentId.
197
+ 5. **Don't assume worktrees auto-clean.** If a worker makes changes and doesn't merge or discard them, the worktree persists. Include a cleanup instruction or accept the accumulation.
198
+ 6. **Don't ask children to read each other's transcript files.** The `output_file` symlinks exist but reading them will overflow whoever tries. Route inter-worker communication through SendMessage or through the shared context store (task-group standard).
199
+ 7. **Don't ship a brief that asks a child to "let me know when you're done at each step".** Streaming intermediate events isn't available. The child can `SendMessage("main", ...)` for progress, but that's model-driven and needs to be requested explicitly.
200
+
201
+ ---
202
+
203
+ ## Failure Modes
204
+
205
+ Catalogue of dispatches that will fail. Most of these fail silently or late — the point of listing them here is to catch them at brief-write time.
206
+
207
+ | Failure | Symptom | Root cause |
208
+ |---|---|---|
209
+ | Dispatch a `Plan`/`Explore`/`claude-code-guide`/`statusline-setup` orchestrator that needs to spawn workers | Orchestrator tries to call Agent, tool not in inventory, dispatch fails at runtime | Restricted tool inventories exclude Agent |
210
+ | SendMessage to a peer by subagent_type instead of agentId | Response: `No agent named 'general-purpose' is reachable` | No group addressing by role — must use agentId or teammate name |
211
+ | Two parallel Playwright agents both driving `browser_navigate` | Tabs interleave, screenshots capture the wrong page | Playwright MCP browser session is parent-scoped, not per-subagent |
212
+ | Parallel workers writing to the same `/tmp/foo.txt` or the same file inside a shared parent dir | Last-write-wins race | `/tmp` and any absolute path outside the worktree is shared |
213
+ | Worker reads its own `output_file` (JSONL transcript) to check progress | Context overflow | Transcript is full tool-trace JSONL, forbidden by the tool warning |
214
+ | Parent expects progress signals from a 30-minute background child | Silence until completion | No streaming; only final-message notification |
215
+ | Depth-N orchestrator returns "success" but the leaf actually errored | Root gets a rolled-up "done" without the failure detail | Each nesting level is a summarisation checkpoint; leaves are opaque unless the orchestrator brief requires child-outcome enumeration |
216
+ | Worktree-isolated worker changes `$HOME/.claude/settings.local.json` | Change persists to the parent's config | Only the git tree is isolated |
217
+ | Dispatch depends on unloaded MCP tool without ToolSearch first | `InputValidationError` | Deferred tools need schema loaded before invocation, same rule as the parent |
218
+ | OAuth-gated MCP tool called before auth is completed | Auth flow error | Auth state is inherited from parent — if parent hasn't authenticated, child can't either |
219
+
220
+ ---
221
+
222
+ ## Related
223
+
224
+ - **Project Lead role definition** — operator-side; documents the `subagent_type: "general-purpose"` dispatch constraint that this doc justifies. <!-- OPERATOR: this reference is operator-side; operators substitute their equivalent role path -->
225
+ - **Bucket 3 of the CLAUDE.md always-on rules** — `packages/scaffold/templates/CLAUDE.md.template`. Rule 6 ("Any multi-role project: dispatch a Project Lead") depends on the nested-dispatch capability confirmed here.
226
+ - **Briefing contract standard** — `packages/core/docs/standards/briefing-contract.md`. The Do/Don't rules above should be folded into the briefing template so orchestrator briefs pick up the constraints automatically.
227
+ - **Task group standard** — a task-group standard in operator-side knowledge governs the group shape a Project Lead assembles; the isolation and concurrency findings here govern what a group can safely do in parallel. <!-- OPERATOR: this reference is operator-side; operators substitute their equivalent standard path -->
228
+ - **Agent terminology** — operator-side; "orchestrator", "worker", "task group", and "run folder" as used in this doc. <!-- OPERATOR: this reference is operator-side -->
229
+
230
+ ---
231
+
232
+ ## Verification metadata
233
+
234
+ - **Investigated:** 2026-07-05
235
+ - **Harness:** Claude Code, Opus 4.7, an operator-instance project scope
236
+ - **Method:** live diagnostic dispatches from the main thread; each test topic recorded WHAT was tried, WHAT happened, and the implication. Full details preserved in the parent's transcript for the session.
237
+ - **Confidence:** high for all findings up to depth-4, N=10 concurrent, and the six subagent-type inventories. Untested and open: depth-5+, N>10, remote isolation mode, long-lived (>1 hour) child health signals.
238
+ - **Re-verify when:** Claude Code harness version changes materially, subagent-type registry gains new types, or MCP inventory grows (esp. new session-stateful tools).
@@ -0,0 +1,62 @@
1
+ <!--
2
+ scaffold: task-groups-and-orchestrators.md
3
+ bucket: delegation-dispatch (Bucket 3)
4
+ what belongs here: the task-group pattern and orchestrator role.
5
+ - Orchestrator + 2+ workers pattern.
6
+ - Depth-2 production posture (mechanism supports deeper).
7
+ - Project Lead as the canonical orchestrator role for multi-role projects.
8
+ - Per-worker brief; orchestrator return structure.
9
+ -->
10
+
11
+ # Task groups and orchestrators
12
+
13
+ ## Pattern
14
+
15
+ **Orchestrator + 2+ workers**, all dispatched from the same PA session. The orchestrator plans, dispatches, collects, integrates. The workers execute in isolation.
16
+
17
+ - **Orchestrator role.** For multi-role software projects: Project Lead. For domain-specific groups: the domain's orchestrator role. Both dispatch as `general-purpose` (see dispatch-envelope § Capability Matrix).
18
+ - **Workers.** Role-specific — writer, code implementer, librarian, tool-developer, etc. Each gets an 8-section brief from the orchestrator.
19
+ - **Orchestration accountability.** The orchestrator is responsible for the group's return shape. The PA reads only the orchestrator's final message.
20
+
21
+ ## Depth-2 production posture
22
+
23
+ The dispatch mechanism supports deeper (verified to depth-4). Production posture is **depth-2**: PA → orchestrator → workers. Workers do NOT fan out further.
24
+
25
+ **Why depth-2:**
26
+
27
+ - Observability tax scales linearly with depth. At depth-2 the PA has direct visibility into orchestrator returns; at depth-3 the parent's view of the leaf is doubly summarised.
28
+ - Coordination overhead scales worse. Multi-tier orchestrators mean recovering from a mid-tier failure requires re-briefing at every level.
29
+ - Debugging cost is real. Deep chains mean tracing a failure back to root cause traverses multiple opaque summarisation checkpoints.
30
+
31
+ If a genuinely nested problem shape appears (workers each need their own team), lift the sub-team to a sibling orchestrator at depth-2 rather than nesting.
32
+
33
+ ## Per-worker brief
34
+
35
+ Every worker in the group gets its own 8-section brief authored by the orchestrator (or by `dispatch-briefer` on the orchestrator's behalf). Briefs share Context and Trace fields where the workers are all part of the same integration, but Goal / Boundaries / Done-when / Escalation-rule are per-worker.
36
+
37
+ ## Orchestrator return structure
38
+
39
+ Because the PA only sees the orchestrator's final message, the orchestrator's return MUST enumerate each worker's outcome. Minimum shape:
40
+
41
+ ```
42
+ ### <group-name> — orchestrator return
43
+
44
+ **Group status:** success | partial | escalation
45
+
46
+ **Workers:**
47
+ | Name/role | agentId | Status | Key artefacts |
48
+ |---|---|---|---|
49
+ | writer | a-… | success | PR #123, draft-1.md |
50
+ | librarian | a-… | success | knowledge-graph-updated |
51
+
52
+ **Integration outcome:** <one-paragraph summary of the integrated result>
53
+
54
+ **Escalations (if any):** …
55
+ ```
56
+
57
+ ## Related
58
+
59
+ - CLAUDE.md.template Bucket 3 rules 5, 6.
60
+ - `dispatch-envelope.md` — depth findings, subagent-type constraint, MCP shared state hazards.
61
+ - `delegation-modes.md` — task group as Mode 2.
62
+ - Operator-side project-lead role definition — the canonical multi-role orchestrator. <!-- OPERATOR: this reference is operator-side; operators substitute their equivalent role path -->
@@ -0,0 +1,48 @@
1
+ <!--
2
+ scaffold: team-improvement-loop.md
3
+ bucket: delegation-dispatch (Bucket 3)
4
+ what belongs here: evaluate process AND result on every dispatch return.
5
+ - Worker asked a question you should have anticipated → gap in your brief or Baz-context.
6
+ - Worker misinterpreted → your Trace was thin.
7
+ - Worker lacked capability → update the role spec.
8
+ - Reusable pattern surfaced → capture in the role definition.
9
+ - Decision made under envelope that was wrong → move category to higher zone.
10
+ -->
11
+
12
+ # Team improvement loop
13
+
14
+ Every dispatch return is a test of the operating system, not just a delivery of work. Evaluate BOTH the process AND the result.
15
+
16
+ ## What to evaluate
17
+
18
+ When a dispatch returns, ask:
19
+
20
+ - **Worker asked a question you should have anticipated?** Gap in your briefing or your knowledge of the operator. Fix the source: tighten the brief pattern, extend the operator profile, add a Trace note.
21
+ - **Worker misinterpreted the brief?** Your Trace was thin or your Context assumed too much. Update the brief pattern; if the gap is structural, update the role definition.
22
+ - **Worker lacked a capability the role should include?** Update the role spec. Add tools. Adjust domain access. Reshape the role's activation reads.
23
+ - **Worker performed well in a way that reveals a reusable pattern?** Capture in the role definition so it persists.
24
+ - **Decision made under your envelope that turned out to be wrong?** Move the relevant category to a higher zone. Right under your envelope and surfaced needlessly? Move it down.
25
+
26
+ ## Where the outputs land
27
+
28
+ - **Role definitions** — under `operator/extensions/roles/<role>/definition.md` (operator-side) or `@stravica-ai/engineering-pa-core/roles/<role>/definition.md` (core roles, upstream PR).
29
+ - **Brief patterns** — `briefing-contract.md` (this bucket) or `packages/core/docs/standards/briefing-contract.md`.
30
+ - **Autonomy envelope** — `agents/<paName>/autonomy-envelope.md` via `pa autonomy set`.
31
+ - **Operator profile / preferences** — via staging observations, promoted by the Librarian on distillation.
32
+ - **Roster** — operator-side role/agent roster if you maintain one.
33
+
34
+ ## Cadence
35
+
36
+ This is continuous, not periodic. Every dispatch return is an evaluation opportunity. Don't defer to a "team retrospective" that never happens.
37
+
38
+ ## What NOT to do
39
+
40
+ - Don't blame the worker for a brief that was ambiguous. The brief is your responsibility.
41
+ - Don't update the role definition on the basis of one anomalous run. Two or three data points before you change the spec.
42
+ - Don't let the improvement work accumulate. If you notice a pattern gap and don't fix it, the next dispatch will hit it again.
43
+
44
+ ## Related
45
+
46
+ - CLAUDE.md.template Bucket 3 rule 11.
47
+ - `briefing-contract.md` — the brief pattern is a first-order target for improvement.
48
+ - `packages/core/roles/*/definition.md` — role definitions are the persistent home for improvement outputs.
@@ -0,0 +1,48 @@
1
+ <!--
2
+ scaffold: tool-development-policy.md
3
+ bucket: delegation-dispatch (Bucket 3)
4
+ what belongs here: the tool-development-through-tool-developer policy.
5
+ - Node.js only. Cross-platform breakage rationale.
6
+ - Every CLI or script — dispatch tool-developer with a briefing contract.
7
+ - Never build tools inline.
8
+ -->
9
+
10
+ # Tool development policy
11
+
12
+ ## Rule
13
+
14
+ **All tool development goes through the `tool-developer` role.** Not the PA directly, not any other role — the tool-developer.
15
+
16
+ ## Language
17
+
18
+ **Node.js only.** No shell scripts, no PowerShell, no Python (for the PA's own tool estate — this is the operating platform, not the operator's product).
19
+
20
+ **Cross-platform breakage rationale:** the platform ships to macOS, Linux, and Windows. A `.sh` tool silently breaks on Windows; a `.ps1` tool silently breaks on Unix. Node runs the same on all three. Node stdlib (`node:child_process`, `node:fs`, `node:dns`, `node:http`, `node:path`) covers most of what a shell script would do.
21
+
22
+ ## When to dispatch
23
+
24
+ - Any new CLI, script, or integration — dispatch tool-developer.
25
+ - Any change to an existing tool — dispatch tool-developer.
26
+ - Any diagnostic script that will get re-used — dispatch tool-developer to make it a real tool.
27
+
28
+ ## Brief shape for tool-development dispatches
29
+
30
+ The tool-developer's brief follows the 8-section contract with two additions in the Boundaries section:
31
+
32
+ - Node-only constraint stated explicitly (as a reminder that a briefer might otherwise let a `.sh` slip past).
33
+ - Cross-platform runtime target stated: macOS + Linux + Windows.
34
+
35
+ Full pattern in the tool-developer role definition.
36
+
37
+ ## Existing tool surface
38
+
39
+ The platform ships a set of bins: `pa`, `desk`, `secrets`, `sync`, `scheduler`, `smoke`, `distill`, `memory-sync`, `pa-init`, `slice`, `launch`, `migrate-inspect`. The operator layers additional tools under `operator/extensions/tools/`.
40
+
41
+ Always check the current surface before proposing a new tool — `pa --help`, `desk --help`, `ls operator/extensions/tools/`. Proactive-tool-proposal (Bucket 7 rule 9) applies here too: if a task pattern repeats and there's no tool, propose one.
42
+
43
+ ## Related
44
+
45
+ - CLAUDE.md.template Bucket 3 rule 10.
46
+ - `packages/core/roles/tool-developer/definition.md` — the tool-developer role.
47
+ - `packages/core/docs/standards/tooling.md` — the tooling standard the role follows.
48
+ - CLAUDE.md.template Bucket 7 rule 9 — proactive-tool-proposal.
@@ -0,0 +1,33 @@
1
+ # engineering-discipline — bucket knowledge scaffold
2
+
3
+ **Bucket:** 5 of 7. Referenced from CLAUDE.md.template Bucket 5.
4
+
5
+ ## What this bucket carries
6
+
7
+ Ship correct, safe, reversible changes. Never destroy the operator's work. Role ladder for matching engineering role to work shape, verify discipline, git safety, worktree isolation semantics, blast-radius awareness.
8
+
9
+ ## Scope — core vs operator overlay
10
+
11
+ **In core.** Universal engineering discipline: the base role LADDER (tool-developer → web-developer → product-engineer → rcf-engineer), verify-runtime-behaviour discipline, blast-radius awareness, git safety protocol, worktree-isolation semantics (double-faced rule: parallel-in-own-estate, sequential-writes-in-project-repos), root-cause investigation, secret-scanning heuristics.
12
+
13
+ **In operator overlay** (`operator/knowledge/engineering-discipline/`). The specific role LIST (`site-cloner`, `seo-analyser`, `linkedin-writer`, etc.) beyond the base ladder. Operator-specific engineering conventions (per-project git safety rules, CI-integration patterns, downstream-repo policies).
14
+
15
+ ## Canonical entries in this scaffold
16
+
17
+ | File | Purpose |
18
+ |---|---|
19
+ | `role-ladder.md` | The base role LADDER as the CORE pattern; selection heuristics for when to reach for which tier. |
20
+ | `verify-runtime-behaviour.md` | Tests verify code correctness, not feature correctness. Verify by driving the actual flow. |
21
+ | `blast-radius-and-safety.md` | Local reversible = free; shared/hard-to-reverse = confirm. Git safety protocol. |
22
+ | `worktree-isolation.md` | Double-faced rule — parallel in the PA's own estate, sequential writes in engineering project repos. |
23
+ | `investigate-root-causes.md` | Root cause over patch; don't bypass safety checks as a shortcut. |
24
+
25
+ ## How operators adopt this
26
+
27
+ Copy the shape into `operator/knowledge/engineering-discipline/`. Populate the specific specialised-role LIST and per-project conventions in the marked hooks.
28
+
29
+ ## Related
30
+
31
+ - CLAUDE.md.template Bucket 5 — the rule list that references this deeper doc.
32
+ - `packages/core/docs/standards/tooling.md` — the tooling standard.
33
+ - `dispatch-envelope.md` — dispatch mechanics; worktree isolation semantics from the dispatch side.
@@ -0,0 +1,50 @@
1
+ <!--
2
+ scaffold: blast-radius-and-safety.md
3
+ bucket: engineering-discipline (Bucket 5)
4
+ what belongs here: blast-radius awareness + git safety.
5
+ - Local reversible = free; shared / hard-to-reverse / visible = confirm.
6
+ - Never destructive git ops without ask.
7
+ - Prefer new commits over amending.
8
+ - Never skip hooks or bypass signing.
9
+ - Investigate unexpected state before overwriting.
10
+ - Review what's committed — never commit secrets.
11
+ -->
12
+
13
+ # Blast radius and safety
14
+
15
+ ## Blast-radius awareness
16
+
17
+ Every action has a blast radius. Match confirmation to blast radius.
18
+
19
+ - **Local reversible.** Editing a scratch file, running a query, reading. Free — no confirmation.
20
+ - **Shared or persistent.** Writing to the operator's canonical files, committing, pushing, publishing. Confirmation warranted for anything the operator hasn't already scoped.
21
+ - **Hard to reverse.** Force-push, delete-branch, drop-table, delete-cloud-resource. Confirmation required — and even then, the operator must be the one to fire the destructive action, not you.
22
+ - **Visible to others.** Publishing to LinkedIn, filing an issue on someone else's repo, sending an email. Confirmation required — external audiences don't unwind.
23
+
24
+ Match action scope to what was requested. If the operator asked for a change to file X, don't also change file Y "while I'm here" without checking.
25
+
26
+ ## Git safety protocol
27
+
28
+ **Prefer new commits over amending.** Amend is a git operation on the PREVIOUS commit; a pre-commit hook failure means the current commit didn't happen, so amend would rewrite the wrong commit. New commit is safer.
29
+
30
+ **Never destructive ops without an explicit operator ask.** The banned list:
31
+ - `git reset --hard`
32
+ - `git push --force` (and `--force-with-lease` — treat the same)
33
+ - `git checkout .`
34
+ - `git restore .`
35
+ - `git clean -f`
36
+ - `git branch -D`
37
+
38
+ If a destructive op looks needed, propose it and wait for confirmation.
39
+
40
+ **Never skip hooks or bypass signing.** `--no-verify`, `--no-gpg-sign`, `-c commit.gpgsign=false` — banned unless the operator has explicitly asked for the skip. If a hook fails, fix the underlying issue.
41
+
42
+ **Investigate unexpected state before overwriting.** Unfamiliar files, branches, or config may represent the operator's in-progress work. `git status` before any command that could discard uncommitted changes.
43
+
44
+ **Review what you're committing.** Never commit files that likely contain secrets — `.env`, credentials.json, private keys, `.aws/credentials`, `.ssh/*`. Suspicious filenames get contents-checked before push. Prefer `git add <specific-file>` over `git add -A` or `git add .` — the wildcard forms accidentally stage secrets and large binaries.
45
+
46
+ ## Related
47
+
48
+ - CLAUDE.md.template Bucket 5 rules 3, 5, 6, 8, 9.
49
+ - `investigate-root-causes.md` — investigate before overwriting.
50
+ - `worktree-isolation.md` — how worktrees shift the safety calculus.
@@ -0,0 +1,48 @@
1
+ <!--
2
+ scaffold: investigate-root-causes.md
3
+ bucket: engineering-discipline (Bucket 5)
4
+ what belongs here: investigate root causes; don't bypass safety checks.
5
+ - When a hook fails, understand why before proposing a workaround.
6
+ - When tests fail, understand why before adding an ignore.
7
+ - When a lint fails, understand why before disabling.
8
+ - Patch vs fix — the patch shortcut is what makes a codebase decay.
9
+ -->
10
+
11
+ # Investigate root causes
12
+
13
+ ## The rule
14
+
15
+ When something fails — a hook, a test, a lint, a deploy — investigate the root cause BEFORE proposing a bypass. The bypass is often what someone in the future has to unwind at 10x the cost.
16
+
17
+ ## Common shortcut failures
18
+
19
+ - **`--no-verify` to bypass a pre-commit hook.** The hook exists for a reason. Fix the underlying issue.
20
+ - **`skip: true` on a failing test.** The test caught a real issue. Fix the code the test is asserting about.
21
+ - **`// eslint-disable-next-line` on every failing lint.** The rule was enabled for a reason. Either follow it or (with reasoning) disable it project-wide.
22
+ - **`try { ... } catch { /* ignore */ }`.** The error was raised for a reason. Handle it or let it propagate.
23
+ - **Bumping a dep to work around a bug.** The bug was in your code, not the dep — the bump masked it.
24
+
25
+ ## When bypass is warranted
26
+
27
+ - **The check itself is wrong.** Rare, but real. If the pre-commit hook has a bug and the fix will land in the next commit, bypassing THIS commit is defensible — but propose the bypass to the operator, don't do it silently.
28
+ - **Time-sensitive fix under partial constraint.** A prod outage where a hook fires on unrelated files — bypass the hook, land the fix, come back and address the hook's over-broad match.
29
+
30
+ In both cases the bypass is temporary and the underlying issue is captured. If the bypass becomes durable, the check is de facto disabled and should be either removed or fixed.
31
+
32
+ ## Investigation shape
33
+
34
+ - Reproduce the failure locally.
35
+ - Read the check's actual output. Not the summary — the actual output.
36
+ - Read the code the check is asserting about.
37
+ - Formulate a hypothesis about what's wrong.
38
+ - Confirm the hypothesis before fixing.
39
+
40
+ ## Don't accept "flaky test" as an explanation
41
+
42
+ Tests are either deterministic or they're broken. "Flaky" means "there's a real race / timing / state-leakage issue and no-one has time to fix it." The right response is to fix the flakiness (isolate the state, fix the race, add the retry-with-known-fix pattern), not to add `retry: 3` and hope.
43
+
44
+ ## Related
45
+
46
+ - CLAUDE.md.template Bucket 5 rule 4.
47
+ - `blast-radius-and-safety.md` — the safety context this rule lives in.
48
+ - `verify-runtime-behaviour.md` — verification is how you confirm the root cause was actually fixed.