@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,93 @@
1
+ # Entity-Location Map
2
+
3
+ Canonical paths for everything a PA refers to. Paths under "Operator space", "PA run folder", "Work and projects", and "Session" are **relative to the operator repo root** — never hard-code the absolute value. Paths under "Platform package" are inside the installed `@stravica-ai/digital-operator-pa` package and accessed via `node` import resolution rather than absolute paths in the operator repo. See [working-directory.md](./working-directory.md).
4
+
5
+
6
+ ## Operator space
7
+
8
+ | What | Where |
9
+ |---|---|
10
+ | Operator profile | `operator/profile/operator.json` |
11
+ | Operator knowledge | `operator/knowledge/` |
12
+ | Domain catalogue | `operator/knowledge/domains.json` |
13
+ | Operator notes | `operator/notes/` |
14
+ | Config / preferences | `operator/config/preferences.json` |
15
+ | PA memory (canonical) | `operator/memory/` |
16
+ | Operator extensions (roles) | `operator/extensions/roles/` |
17
+ | Operator extensions (tools) | `operator/extensions/tools/` |
18
+ | Operator extensions (blueprints) | `operator/extensions/blueprints/` |
19
+ | Operator extensions (workspace) | `operator/extensions/workspace/` |
20
+ | Extension manifest | `operator/extensions/manifest.json` |
21
+
22
+
23
+ ## PA run folder
24
+
25
+ | What | Where |
26
+ |---|---|
27
+ | PA run folder | `agents/<paName>/` |
28
+ | PA staging | `agents/<paName>/staging/` |
29
+ | PA journal | `agents/<paName>/journal.md` |
30
+ | PA spawn log | `agents/<paName>/spawn-log.json` |
31
+ | PA learned rules | `agents/<paName>/learned-rules.md` — where the estate keeps one; never created when absent (rules are then synthesised into the operator's structured knowledge docs) |
32
+ | Next-session notes | `agents/<paName>/next-session.md` |
33
+ | Handover artefacts | `agents/<paName>/handover/<ts>.json` |
34
+ | PA memory (local cache) | `~/.claude/projects/<sanitised-project-path>/memory/` |
35
+
36
+
37
+ ## Work and projects
38
+
39
+ | What | Where |
40
+ |---|---|
41
+ | Work items | `work/w-YYYY-MM-DD-NNN.json` |
42
+ | Projects | `projects/<id>/project.json` |
43
+ | Project progress trackers | `projects/<id>/progress.md` |
44
+
45
+
46
+ ## Platform package
47
+
48
+ In v2 the platform code lives in `node_modules/@stravica-ai/digital-operator-pa/` (and its workspace-internal packages). Operator code addresses platform resources by package import path, never by an in-repo path.
49
+
50
+ **Resolving symbolic `@stravica-ai/engineering-pa-*` paths.** Platform docs (and the shipped CLAUDE.md template) reference bundled assets by symbolic package path, e.g. `@stravica-ai/engineering-pa-core/docs/…`. The internal packages are `private: true` and are never installed under their own names — the symbolic path resolves inside the wrapper's bundle:
51
+
52
+ ```
53
+ @stravica-ai/engineering-pa-<pkg>/<subpath>
54
+ → node_modules/@stravica-ai/digital-operator-pa/dist/engineering-pa-<pkg>/<subpath>
55
+ ```
56
+
57
+ | What | Resolved via |
58
+ |---|---|
59
+ | Core docs | bundled in `@stravica-ai/engineering-pa-core/docs/` |
60
+ | Core knowledge (bucket scaffolds) | bundled in `@stravica-ai/engineering-pa-core/knowledge/` |
61
+ | Desk CLI | `node_modules/.bin/desk` |
62
+ | Distill CLI | `node_modules/.bin/distill` |
63
+ | Memory-sync CLI | `node_modules/.bin/memory-sync` |
64
+ | Secrets CLI | `node_modules/.bin/secrets` |
65
+ | Sync CLI | `node_modules/.bin/sync` |
66
+ | Scheduler CLI | `node_modules/.bin/scheduler` |
67
+ | PA CLI | `node_modules/.bin/pa` |
68
+ | pa-init scaffolder | `node_modules/.bin/pa-init` |
69
+ | Research CLI | `node_modules/.bin/research` |
70
+ | Knowledge retrieval libs | `import('@stravica-ai/engineering-pa-core/src/knowledge/retrieval/*.mjs')` |
71
+ | Role definitions | bundled in `@stravica-ai/engineering-pa-core/roles/<role>/definition.md` |
72
+ | Standards docs | bundled in `@stravica-ai/engineering-pa-core/docs/standards/` |
73
+ | Schemas | bundled in `@stravica-ai/engineering-pa-core/schema/` |
74
+
75
+
76
+ ## Operational artefacts (gitignored)
77
+
78
+ Per the tooling standard §16, per-host operational files must be in `.gitignore` and never committed:
79
+
80
+ | What | Where |
81
+ |---|---|
82
+ | Vault | `.vault/` (encrypted; key handled by secrets CLI) |
83
+ | Schedule definitions | `schedules/<id>.json` |
84
+ | Distill run logs | `.cache/distill/logs/` |
85
+ | Sync state | `.cache/estate-sync/` |
86
+ | Research sessions | `.cache/research/sessions/<sessionId>/` |
87
+
88
+
89
+ ## Session
90
+
91
+ | What | Where |
92
+ |---|---|
93
+ | Session environment | `.session/environment.json` |
@@ -0,0 +1,121 @@
1
+ # Knowledge System
2
+
3
+ Dave's knowledge system provides structured, queryable storage for everything your PA learns. It is domain-based, supports linking between documents, and maintains indexes for fast retrieval.
4
+
5
+
6
+ ## How it works
7
+
8
+ Knowledge is organised into domains -- logical groupings of related information. Each domain is a directory under `operator/knowledge/` containing markdown files. The domain registry at `operator/knowledge/domains.json` (seeded from `core/knowledge/scaffold/domains.json`) tracks all active domains.
9
+
10
+ ### Domain structure
11
+
12
+ A domain directory contains:
13
+ - Markdown files (`.md`) -- the actual knowledge content
14
+ - An optional `index.json` -- domain-specific metadata and file listing
15
+ - Subdirectories for sub-topics as needed
16
+
17
+ ### Example
18
+
19
+ ```
20
+ operator/knowledge/
21
+ cooking/
22
+ index.json
23
+ basics.md
24
+ recipes.md
25
+ techniques/
26
+ fermentation.md
27
+ finance/
28
+ index.json
29
+ budgeting.md
30
+ investments.md
31
+ ```
32
+
33
+ Each domain entry in `domains.json` looks like:
34
+
35
+ ```json
36
+ {
37
+ "id": "cooking",
38
+ "name": "Cooking",
39
+ "path": "operator/knowledge/cooking",
40
+ "description": "Recipes, techniques, and culinary knowledge",
41
+ "fileCount": 3,
42
+ "lastUpdated": "2026-04-12T10:00:00Z"
43
+ }
44
+ ```
45
+
46
+
47
+ ## Linking conventions
48
+
49
+ Dave supports two linking formats for connecting knowledge across documents:
50
+
51
+ ### Wiki-links
52
+
53
+ Use double-bracket syntax to link to other documents:
54
+
55
+ ```
56
+ See [[fermentation]] for details on lacto-fermentation.
57
+ ```
58
+
59
+ Wiki-links are resolved by searching for a file matching the target name (case-insensitive) across all knowledge domains. If multiple matches exist, the link resolves to the most recently updated one.
60
+
61
+ ### Standard markdown links
62
+
63
+ Use standard markdown links for explicit paths:
64
+
65
+ ```
66
+ See [fermentation](techniques/fermentation.md) for details.
67
+ ```
68
+
69
+
70
+ ## Backlink indexing
71
+
72
+ The retrieval system maintains a backlink index -- for every document, it knows which other documents link to it. This enables:
73
+ - "What references this topic?" queries
74
+ - Adjacency graph traversal
75
+ - Orphan detection (documents with no inbound or outbound links)
76
+
77
+ The backlink index is rebuilt during knowledge reindexing (`npm run reindex`).
78
+
79
+
80
+ ## Adjacency graph
81
+
82
+ The retrieval system builds a graph of document relationships based on links. This graph supports:
83
+ - Finding related documents (neighbours in the graph)
84
+ - Shortest-path queries between topics
85
+ - Cluster detection (groups of tightly linked documents)
86
+
87
+
88
+ ## Querying knowledge
89
+
90
+ The retrieval tools at `core/knowledge/retrieval/` provide:
91
+
92
+ - **index-builder.mjs** -- Rebuilds all indexes (domain registry, backlinks, adjacency graph)
93
+ - **search.mjs** -- Full-text search across all knowledge
94
+ - **graph.mjs** -- Graph queries (neighbours, paths, clusters)
95
+
96
+ Your PA uses these tools automatically when answering questions. You can also trigger a manual reindex:
97
+
98
+ ```bash
99
+ npm run reindex
100
+ ```
101
+
102
+
103
+ ## Adding new knowledge
104
+
105
+ 1. Create a domain directory under `operator/knowledge/` if it does not exist.
106
+ 2. Add markdown files with your content.
107
+ 3. Use wiki-links or markdown links to connect related documents.
108
+ 4. Run `npm run reindex` to update indexes, or let the PA handle it during normal operation.
109
+
110
+ The PA's librarian role can also be delegated to organise and structure knowledge from raw observations.
111
+
112
+
113
+ ## How knowledge flows
114
+
115
+ 1. **Observation** -- Your PA notices something relevant during a conversation and stages it as a timestamped markdown file.
116
+ 2. **Staging** -- Staged observations accumulate in the PA's staging directory.
117
+ 3. **Distillation** -- The librarian role processes staged observations, extracting durable knowledge and updating the operator profile.
118
+ 4. **Knowledge** -- Distilled content is filed into the appropriate domain under `operator/knowledge/`.
119
+ 5. **Indexing** -- The retrieval system rebuilds indexes to include the new content.
120
+
121
+ This cycle runs continuously. Every interaction is a potential source of new knowledge.
@@ -0,0 +1,155 @@
1
+ # lock — shared per-resource process lock
2
+
3
+ `@stravica-ai/engineering-pa-core` › `acquireLock` — the platform-wide primitive
4
+ for "at most one of me at a time". Public core API: consumed default-on by
5
+ `pa launch` for every scheduled-task run, and importable by any direct-run
6
+ tool (anything a cron invokes without going through `pa launch`) that needs
7
+ the same protection.
8
+
9
+ ## Why it exists
10
+
11
+ Two runs of the same scheduled task on the same host must not overlap. The
12
+ motivating incident (2026-07-06): a supervised distillation sweep ran 1288+
13
+ seconds and was still running as the next cron tick approached — without a
14
+ lock, two Claude sweeps would have consumed the same staging areas
15
+ concurrently (duplicate routing, git races). The lock closes that class of
16
+ gap at the root: the second run exits cleanly with a logged skip instead of
17
+ spawning a second session.
18
+
19
+ ## Import
20
+
21
+ ```js
22
+ import { acquireLock, DEFAULT_STALE_AFTER_MS } from '@stravica-ai/engineering-pa-core';
23
+ ```
24
+
25
+ ## API
26
+
27
+ ```js
28
+ const lock = await acquireLock(lockPath, {
29
+ staleAfterMs, // optional — see "Staleness policy"; default 2 h
30
+ now, // optional clock seam (tests)
31
+ pid, // optional owner pid (default process.pid)
32
+ isProcessAlive, // optional liveness seam (tests)
33
+ fs, // optional fs seam: { readFile, writeFile, unlink, stat, mkdir }
34
+ });
35
+ ```
36
+
37
+ Returns one of:
38
+
39
+ ```js
40
+ // Live contention — someone else legitimately holds it. Never thrown.
41
+ { acquired: false,
42
+ holder: { pid, acquiredAt }, // pid/acquiredAt null if lock unreadable
43
+ reason: 'held by pid 1234 since 2026-07-06T11:40:00Z' }
44
+
45
+ // Acquired (possibly after breaking a stale lock).
46
+ { acquired: true,
47
+ record: { pid, acquiredAt }, // what was written to the lock file
48
+ stale: null | { pid, acquiredAt, reason: 'dead-pid' | 'age-exceeded' | 'unreadable' },
49
+ release: async () => {} } // call on every exit path (try/finally)
50
+ ```
51
+
52
+ When `stale` is non-null the caller SHOULD log a warning naming the broken
53
+ lock — the steal is safe but worth an audit trail.
54
+
55
+ ## Lock file
56
+
57
+ One JSON file per protected resource, camelCase properties:
58
+
59
+ ```json
60
+ { "pid": 12345, "acquiredAt": "2026-07-06T12:00:00Z" }
61
+ ```
62
+
63
+ - **Path is caller-chosen.** Convention: one path per resource under the
64
+ operator repo's gitignored `.cache/` area (tooling standard §16 —
65
+ operational artefacts are never git-tracked). `pa launch` uses
66
+ `.cache/launch/<taskId>.lock`.
67
+ - **First run needs no setup.** A missing lock file or missing parent
68
+ directory is the normal empty state — the directory is created on demand.
69
+ - **Release is ownership-checked.** `release()` deletes the file only if it
70
+ still carries this acquisition's pid + timestamp, so a long run whose lock
71
+ was stolen never deletes the successor's lock. Release of an
72
+ already-deleted lock is a no-op.
73
+
74
+ ## Staleness policy
75
+
76
+ Two signals decide whether an existing lock is stale, in order:
77
+
78
+ 1. **Dead pid — primary.** If the recorded process no longer exists
79
+ (`process.kill(pid, 0)` semantics; `EPERM` counts as alive), the lock is
80
+ broken immediately regardless of age. This is what recovers from crashed
81
+ runs — a run killed mid-task cannot wedge the next tick.
82
+ 2. **Age threshold — backstop.** If the recorded process appears alive but
83
+ the lock is older than `staleAfterMs`, it is broken anyway. This covers
84
+ pid reuse (the recorded pid now names an unrelated process, so signal 1
85
+ would report "alive" forever) and unreadable lock files (crash mid-write:
86
+ the pid cannot be checked, so file mtime vs `staleAfterMs` is the only
87
+ signal — fresher than the threshold is treated as held, older is broken).
88
+
89
+ **Default: `DEFAULT_STALE_AFTER_MS` = 2 hours.** Rationale: the motivating
90
+ consumers are scheduled agent sweeps whose legitimate runtimes are routinely
91
+ tens of minutes (observed: 1288+ seconds), so a short window would steal a
92
+ live lock mid-sweep; 2 hours safely clears observed long runs while still
93
+ self-healing a pid-reuse wedge within one-to-two ticks of a typical 4-hourly
94
+ schedule. The threshold is deliberately caller-configurable:
95
+
96
+ - **Fast, well-bounded jobs should tighten it.** The `sync` CLI (seconds-long
97
+ git runs on a 30-minute tick) passes 10 minutes.
98
+ - **Jobs that can legitimately run longer than 2 hours must raise it.**
99
+ - **`pa launch` consumers** set it per task via the optional
100
+ `lockStaleAfterMinutes` field in `schedules/<id>.json` — no code needed.
101
+
102
+ ## Contention semantics for cron consumers
103
+
104
+ `acquireLock` never throws for "someone else holds it" — it reports and
105
+ lets the caller choose exit semantics. The platform convention for scheduled
106
+ consumers is: log a greppable skip line naming the holder, write a
107
+ `noop-locked` audit record (tooling standard §15), and **exit 0** — an
108
+ overlap skip is a healthy no-op, not a failure, and must not generate cron
109
+ mail. `pa launch` and `sync` both follow this. A consumer that needs the
110
+ skip to be visible to a supervisor may exit 2 instead; document the choice.
111
+
112
+ ## Adopting in a direct-run tool
113
+
114
+ ```js
115
+ import { acquireLock } from '@stravica-ai/engineering-pa-core';
116
+
117
+ const lock = await acquireLock(join(repoRoot, '.cache', 'my-tool', 'my-tool.lock'));
118
+ if (!lock.acquired) {
119
+ console.error(`[my-tool] skipped — ${lock.reason}`);
120
+ process.exit(0); // healthy no-op — see contention semantics above
121
+ }
122
+ if (lock.stale) {
123
+ console.error(`[my-tool] warning: broke stale lock (${lock.stale.reason}) — proceeding`);
124
+ }
125
+ try {
126
+ // ... the work ...
127
+ } finally {
128
+ await lock.release();
129
+ }
130
+ ```
131
+
132
+ ## Consumers
133
+
134
+ | Consumer | Lock path | staleAfterMs |
135
+ |---|---|---|
136
+ | `pa launch` (default-on, per task) | `.cache/launch/<taskId>.lock` | 2 h default; per-task `lockStaleAfterMinutes` |
137
+ | `estate-sync` CLI (alias: `sync`) | `.cache/estate-sync/.lock` | 10 min |
138
+
139
+ ## Tests
140
+
141
+ ```
142
+ node --test packages/core/test/lock/lock.test.mjs
143
+ ```
144
+
145
+ Covers: acquire on empty path, first-run mkdir against the real fs, live
146
+ contention, the 1288-second long-sweep no-steal case, dead-pid steal,
147
+ age-exceeded steal, caller-configured thresholds, unreadable-lock-file
148
+ handling, ownership-checked release, release-after-steal, release-idempotence.
149
+
150
+ ## Standards
151
+
152
+ Follows the [tooling standard](./standards/tooling.md): Node stdlib only
153
+ (§3), dependency injection over mocking (§8), camelCase JSON (§11),
154
+ gitignored operational artefacts (§16). Exit-code guidance for consumers
155
+ derives from §6.
@@ -0,0 +1,28 @@
1
+ # Cross-Machine Memory Sync
2
+
3
+ Your Claude Code feedback memories are synced across machines via the repo. The canonical store is `operator/memory/`. The local Claude Code cache at `~/.claude/projects/<sanitised-project-path>/memory/` is a write-through cache, not the source of truth.
4
+
5
+
6
+ ## How it works
7
+
8
+ Sync is handled by `core/tools/memory-sync/`:
9
+
10
+ - `SessionStart` hook runs `memory-sync pull` (repo -> cache) so every session boots with the latest memories.
11
+ - `SessionEnd` hook runs `memory-sync push` (cache -> repo) so any new/edited memories land in git.
12
+ - Hooks live in `.claude/settings.json` at the repo root and travel with the project.
13
+
14
+
15
+ ## How to use it
16
+
17
+ Save new memories the normal way — write to the local cache path. The sync handles propagation.
18
+
19
+ On a fresh machine, `git clone` the repo and start a Claude Code session; the SessionStart hook populates the cache automatically.
20
+
21
+
22
+ ## CLI
23
+
24
+ ```
25
+ node core/tools/memory-sync/bin/memory-sync pull
26
+ node core/tools/memory-sync/bin/memory-sync push
27
+ node core/tools/memory-sync/bin/memory-sync status
28
+ ```