@event4u/agent-config 9.9.0 → 9.10.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 (384) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +153 -194
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/agent-status.md +12 -11
  5. package/dist/agent-src/commands/agents/user/accept.md +115 -30
  6. package/dist/agent-src/commands/agents/user/delete.md +147 -0
  7. package/dist/agent-src/commands/agents/user/review.md +65 -28
  8. package/dist/agent-src/commands/agents/user/show.md +82 -29
  9. package/dist/agent-src/commands/agents/user/update.md +2 -2
  10. package/dist/agent-src/commands/agents/user.md +16 -3
  11. package/dist/agent-src/commands/check-current-md.md +0 -10
  12. package/dist/agent-src/commands/condense.md +28 -97
  13. package/dist/agent-src/commands/cost/report.md +7 -0
  14. package/dist/agent-src/commands/fix/portability.md +0 -8
  15. package/dist/agent-src/commands/fix/refs.md +0 -8
  16. package/dist/agent-src/commands/humanize.md +2 -2
  17. package/dist/agent-src/commands/jira-ticket.md +1 -1
  18. package/dist/agent-src/commands/memory/load.md +11 -0
  19. package/dist/agent-src/commands/optimize/skills.md +1 -1
  20. package/dist/agent-src/commands/pr/create.md +4 -4
  21. package/dist/agent-src/commands/profile/show.md +3 -3
  22. package/dist/agent-src/commands/rule-compliance-audit.md +5 -4
  23. package/dist/agent-src/commands/security-audit-config.md +1 -1
  24. package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
  25. package/dist/agent-src/commands/tdd.md +21 -0
  26. package/dist/agent-src/commands/team/delegate.md +2 -2
  27. package/dist/agent-src/commands/team-knowledge/bootstrap.md +9 -8
  28. package/dist/agent-src/commands/team-knowledge/consolidate.md +8 -7
  29. package/dist/agent-src/commands/team.md +4 -1
  30. package/dist/agent-src/commands/upstream-contribute.md +0 -1
  31. package/dist/agent-src/contexts/authority/commit-mechanics.md +7 -0
  32. package/dist/agent-src/contexts/authority/destructive-mechanics.md +16 -0
  33. package/dist/agent-src/contexts/authority/scope-mechanics.md +61 -0
  34. package/dist/agent-src/contexts/communication/rules-auto/reply-close-mechanics.md +20 -18
  35. package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
  36. package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -1
  37. package/dist/agent-src/contexts/communication/rules-auto/source-of-truth-mechanics.md +9 -10
  38. package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +1 -1
  39. package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +11 -0
  40. package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +26 -15
  41. package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +3 -0
  42. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +67 -37
  43. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
  44. package/dist/agent-src/contexts/execution/autonomy-examples.md +1 -1
  45. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +7 -6
  46. package/dist/agent-src/contexts/execution/evidence-discipline.md +92 -77
  47. package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +22 -21
  48. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +24 -0
  49. package/dist/agent-src/contexts/execution/project-intelligence.md +122 -103
  50. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +23 -21
  51. package/dist/agent-src/contexts/execution/subagent-response-contract.md +5 -5
  52. package/dist/agent-src/contexts/execution/subagent-routing.md +11 -0
  53. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +13 -13
  54. package/dist/agent-src/contexts/execution/subagent-steering.md +36 -34
  55. package/dist/agent-src/contexts/execution/toolchain-resolver.md +1 -1
  56. package/dist/agent-src/contexts/execution/user-memory-channels.md +189 -0
  57. package/dist/agent-src/contexts/execution/verification-mechanics.md +9 -0
  58. package/dist/agent-src/contexts/model-recommendations.md +3 -2
  59. package/dist/agent-src/contexts/subagent-configuration.md +3 -3
  60. package/dist/agent-src/ghostwriter/README.md +2 -2
  61. package/dist/agent-src/packs/README.md +1 -1
  62. package/dist/agent-src/personas/README.md +5 -5
  63. package/dist/agent-src/personas/_template-specialist/persona.md +3 -3
  64. package/dist/agent-src/personas/backend-architect.md +24 -23
  65. package/dist/agent-src/personas/eloquent-tamer.md +30 -30
  66. package/dist/agent-src/personas/frontend-engineer.md +30 -30
  67. package/dist/agent-src/personas/product-owner.md +41 -38
  68. package/dist/agent-src/personas/qa.md +13 -13
  69. package/dist/agent-src/personas/security-engineer.md +22 -22
  70. package/dist/agent-src/presets/README.md +3 -3
  71. package/dist/agent-src/profiles/README.md +3 -3
  72. package/dist/agent-src/rules/active-remediation.md +2 -2
  73. package/dist/agent-src/rules/artifact-engagement-recording.md +4 -4
  74. package/dist/agent-src/rules/ask-when-uncertain.md +0 -4
  75. package/dist/agent-src/rules/augment-edit-discipline.md +1 -1
  76. package/dist/agent-src/rules/broken-access-control.md +4 -4
  77. package/dist/agent-src/rules/code-comment-discipline.md +1 -1
  78. package/dist/agent-src/rules/code-provenance.md +2 -2
  79. package/dist/agent-src/rules/commit-policy.md +4 -9
  80. package/dist/agent-src/rules/communication-through-line.md +5 -5
  81. package/dist/agent-src/rules/decision-revisit-gate.md +1 -1
  82. package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -1
  83. package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
  84. package/dist/agent-src/rules/domain-safety-pii.md +1 -1
  85. package/dist/agent-src/rules/external-code-graph-interop.md +1 -1
  86. package/dist/agent-src/rules/fast-path-marker-visibility.md +43 -7
  87. package/dist/agent-src/rules/finance-safety-floor.md +1 -1
  88. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +3 -3
  89. package/dist/agent-src/rules/history-discipline.md +1 -1
  90. package/dist/agent-src/rules/legal-safety-floor.md +1 -1
  91. package/dist/agent-src/rules/lethal-trifecta-guard.md +5 -5
  92. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +10 -8
  93. package/dist/agent-src/rules/media-governance-routing.md +13 -13
  94. package/dist/agent-src/rules/media-sync-ground-truth.md +29 -11
  95. package/dist/agent-src/rules/no-cheap-questions.md +7 -7
  96. package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +29 -18
  97. package/dist/agent-src/rules/non-destructive-by-default.md +5 -23
  98. package/dist/agent-src/rules/onboarding-gate.md +14 -4
  99. package/dist/agent-src/rules/persona-governance.md +2 -2
  100. package/dist/agent-src/rules/prefer-enums-over-literals.md +9 -9
  101. package/dist/agent-src/rules/preservation-guard.md +10 -2
  102. package/dist/agent-src/rules/question-not-instruction.md +1 -1
  103. package/dist/agent-src/rules/roadmap-progress-sync.md +6 -6
  104. package/dist/agent-src/rules/rule-type-governance.md +1 -1
  105. package/dist/agent-src/rules/scale-discipline.md +1 -1
  106. package/dist/agent-src/rules/scope-control.md +1 -1
  107. package/dist/agent-src/rules/secret-vcs-guard.md +1 -1
  108. package/dist/agent-src/rules/security-sensitive-stop.md +17 -11
  109. package/dist/agent-src/rules/senior-engineering-discipline.md +17 -17
  110. package/dist/agent-src/rules/session-canary.md +1 -1
  111. package/dist/agent-src/rules/skill-quality.md +1 -1
  112. package/dist/agent-src/rules/source-confidentiality.md +21 -19
  113. package/dist/agent-src/rules/source-of-truth.md +6 -5
  114. package/dist/agent-src/rules/spreadsheet-source-quality.md +2 -2
  115. package/dist/agent-src/rules/strategy-safety-floor.md +1 -1
  116. package/dist/agent-src/rules/think-before-action.md +5 -5
  117. package/dist/agent-src/rules/token-budget-discipline.md +5 -3
  118. package/dist/agent-src/rules/token-efficiency.md +2 -2
  119. package/dist/agent-src/rules/untrusted-input-defense.md +4 -4
  120. package/dist/agent-src/rules/user-interaction.md +12 -0
  121. package/dist/agent-src/rules/verify-before-complete.md +4 -24
  122. package/dist/agent-src/skills/adversarial-review/SKILL.md +2 -2
  123. package/dist/agent-src/skills/agent-security-review/SKILL.md +52 -45
  124. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +2 -2
  125. package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +20 -20
  126. package/dist/agent-src/skills/ai-council/SKILL.md +185 -128
  127. package/dist/agent-src/skills/analysis-skill-router/SKILL.md +3 -3
  128. package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
  129. package/dist/agent-src/skills/artisan-commands/SKILL.md +2 -2
  130. package/dist/agent-src/skills/async-python-patterns/SKILL.md +8 -7
  131. package/dist/agent-src/skills/authz-review/SKILL.md +16 -15
  132. package/dist/agent-src/skills/aws-infrastructure/SKILL.md +5 -5
  133. package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
  134. package/dist/agent-src/skills/bug-analyzer/SKILL.md +30 -12
  135. package/dist/agent-src/skills/code-intelligence/SKILL.md +0 -1
  136. package/dist/agent-src/skills/code-intelligence/evals/triggers.json +52 -0
  137. package/dist/agent-src/skills/code-review/SKILL.md +6 -6
  138. package/dist/agent-src/skills/command-routing/SKILL.md +5 -4
  139. package/dist/agent-src/skills/composer-packages/SKILL.md +2 -2
  140. package/dist/agent-src/skills/condense-memory/SKILL.md +43 -41
  141. package/dist/agent-src/skills/context-document/SKILL.md +23 -21
  142. package/dist/agent-src/skills/copilot-config/SKILL.md +6 -1
  143. package/dist/agent-src/skills/decision-record/SKILL.md +20 -18
  144. package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
  145. package/dist/agent-src/skills/design-review/SKILL.md +15 -14
  146. package/dist/agent-src/skills/design-system-capture/reference/design-system-json.md +28 -25
  147. package/dist/agent-src/skills/devcontainer/SKILL.md +2 -2
  148. package/dist/agent-src/skills/docker/SKILL.md +1 -1
  149. package/dist/agent-src/skills/docx-authoring/evals/triggers.json +52 -0
  150. package/dist/agent-src/skills/emit-tickets/SKILL.md +2 -2
  151. package/dist/agent-src/skills/error-handling-patterns/SKILL.md +1 -1
  152. package/dist/agent-src/skills/estimate-ticket/SKILL.md +2 -2
  153. package/dist/agent-src/skills/evaluate-llm-feature/SKILL.md +0 -1
  154. package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +52 -0
  155. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +6 -5
  156. package/dist/agent-src/skills/feature-planning/SKILL.md +2 -2
  157. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +3 -3
  158. package/dist/agent-src/skills/flux/SKILL.md +1 -1
  159. package/dist/agent-src/skills/frontend-render-security/SKILL.md +13 -13
  160. package/dist/agent-src/skills/git-workflow/SKILL.md +33 -33
  161. package/dist/agent-src/skills/grafana/SKILL.md +5 -0
  162. package/dist/agent-src/skills/humanizer/SKILL.md +83 -66
  163. package/dist/agent-src/skills/humanizer/data/patterns.md +14 -14
  164. package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +4 -4
  165. package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +82 -37
  166. package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +17 -5
  167. package/dist/agent-src/skills/judge-injection-defense/SKILL.md +63 -25
  168. package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -0
  169. package/dist/agent-src/skills/judge-synthesis/SKILL.md +72 -28
  170. package/dist/agent-src/skills/laravel-horizon/SKILL.md +5 -0
  171. package/dist/agent-src/skills/laravel-mail/SKILL.md +5 -4
  172. package/dist/agent-src/skills/laravel-middleware/SKILL.md +5 -4
  173. package/dist/agent-src/skills/laravel-notifications/SKILL.md +10 -9
  174. package/dist/agent-src/skills/laravel-pennant/SKILL.md +1 -1
  175. package/dist/agent-src/skills/laravel-pulse/SKILL.md +9 -8
  176. package/dist/agent-src/skills/laravel-reverb/SKILL.md +6 -5
  177. package/dist/agent-src/skills/laravel-scheduling/SKILL.md +6 -1
  178. package/dist/agent-src/skills/laravel-validation/SKILL.md +12 -0
  179. package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
  180. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +7 -7
  181. package/dist/agent-src/skills/learning-tutor/SKILL.md +44 -43
  182. package/dist/agent-src/skills/learning-tutor/evals/triggers.json +52 -0
  183. package/dist/agent-src/skills/license-compliance-audit/SKILL.md +7 -7
  184. package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +3 -3
  185. package/dist/agent-src/skills/license-compliance-credits/SKILL.md +4 -4
  186. package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +0 -1
  187. package/dist/agent-src/skills/memory-consolidation/SKILL.md +69 -64
  188. package/dist/agent-src/skills/motion-choreographer/SKILL.md +6 -6
  189. package/dist/agent-src/skills/pdf-tools/evals/triggers.json +52 -0
  190. package/dist/agent-src/skills/performance-analysis/SKILL.md +7 -3
  191. package/dist/agent-src/skills/persona-improvement/SKILL.md +0 -2
  192. package/dist/agent-src/skills/persona-improvement/evals/triggers.json +52 -0
  193. package/dist/agent-src/skills/php-coder/SKILL.md +10 -0
  194. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +129 -120
  195. package/dist/agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +36 -35
  196. package/dist/agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +45 -41
  197. package/dist/agent-src/skills/project-analysis-core/SKILL.md +4 -4
  198. package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +3 -3
  199. package/dist/agent-src/skills/project-analysis-react/SKILL.md +1 -1
  200. package/dist/agent-src/skills/project-analysis-symfony/SKILL.md +1 -1
  201. package/dist/agent-src/skills/project-analysis-zend-laminas/SKILL.md +2 -2
  202. package/dist/agent-src/skills/prompt-engineering-patterns/SKILL.md +1 -1
  203. package/dist/agent-src/skills/prompt-validator/SKILL.md +39 -39
  204. package/dist/agent-src/skills/quality-tools/SKILL.md +15 -15
  205. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +55 -19
  206. package/dist/agent-src/skills/react-shadcn-ui/reference/registry.md +29 -27
  207. package/dist/agent-src/skills/readme-writing-package/SKILL.md +2 -2
  208. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +25 -25
  209. package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -5
  210. package/dist/agent-src/skills/refine-prompt/SKILL.md +1 -1
  211. package/dist/agent-src/skills/refine-ticket/SKILL.md +20 -2
  212. package/dist/agent-src/skills/repomix-packer/SKILL.md +1 -1
  213. package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
  214. package/dist/agent-src/skills/roadmap-management/SKILL.md +80 -66
  215. package/dist/agent-src/skills/roadmap-writing/SKILL.md +84 -77
  216. package/dist/agent-src/skills/rule-refactor/SKILL.md +1 -1
  217. package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +52 -0
  218. package/dist/agent-src/skills/security-audit/SKILL.md +26 -9
  219. package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +38 -16
  220. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +14 -11
  221. package/dist/agent-src/skills/skill-writing/SKILL.md +9 -8
  222. package/dist/agent-src/skills/song-to-script/SKILL.md +93 -85
  223. package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
  224. package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +4 -3
  225. package/dist/agent-src/skills/standards-from-config/SKILL.md +61 -43
  226. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +22 -8
  227. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +28 -2
  228. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +13 -13
  229. package/dist/agent-src/skills/systematic-debugging/SKILL.md +22 -21
  230. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
  231. package/dist/agent-src/skills/technical-specification/SKILL.md +5 -0
  232. package/dist/agent-src/skills/terraform/SKILL.md +2 -2
  233. package/dist/agent-src/skills/terragrunt/SKILL.md +8 -8
  234. package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +1 -1
  235. package/dist/agent-src/skills/threat-modeling/SKILL.md +19 -13
  236. package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
  237. package/dist/agent-src/skills/upstream-contribute/SKILL.md +0 -1
  238. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +9 -9
  239. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -1
  240. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +4 -6
  241. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +67 -61
  242. package/dist/agent-src/skills/video-director/SKILL.md +7 -7
  243. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +3 -3
  244. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  245. package/dist/agent-src/templates/contexts/knowledge-pages.md +47 -45
  246. package/dist/agent-src/templates/contexts/lesson-card.md +2 -2
  247. package/dist/agent-src/templates/contexts/tenant-boundaries.md +2 -2
  248. package/dist/agent-src/templates/contexts.md +1 -1
  249. package/dist/agent-src/templates/features.md +1 -1
  250. package/dist/agent-src/templates/roadmaps.md +125 -116
  251. package/dist/agent-src/templates/rule.md +2 -1
  252. package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
  253. package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  254. package/dist/agent-src/templates/scripts/tier_usage_report.ts +2 -2
  255. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -2
  256. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +1 -1
  257. package/dist/agent-src/user-types/README.md +8 -8
  258. package/dist/agent-src/user-types/galabau-field-crew.md +34 -33
  259. package/dist/agent-src/user-types/metalworking-shop.md +35 -34
  260. package/dist/agent-src/user-types/truck-driver.md +22 -20
  261. package/dist/cli/python/workspace_roles.js +2 -2
  262. package/dist/cli/python/workspace_roles.js.map +1 -1
  263. package/dist/discovery/deprecation-report.md +1 -1
  264. package/dist/discovery/discovery-manifest.json +88 -62
  265. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  266. package/dist/discovery/discovery-manifest.summary.md +3 -3
  267. package/dist/discovery/orphan-report.md +1 -1
  268. package/dist/discovery/packs.json +6 -5
  269. package/dist/discovery/trust-report.md +2 -2
  270. package/dist/discovery/workspaces.json +5 -4
  271. package/dist/hooks/dispatch.js +186 -12
  272. package/dist/install/install.mjs +8 -0
  273. package/dist/mcp/registry-manifest.json +3 -3
  274. package/dist/mcp/server.json +2 -2
  275. package/dist/mcp/server.mjs +1199 -857
  276. package/dist/router.json +1 -1
  277. package/dist/scripts/_lib/compile_time_toggles.js +48 -0
  278. package/dist/scripts/_lib/compile_time_toggles.js.map +1 -0
  279. package/dist/scripts/condense.js +234 -217
  280. package/dist/scripts/condense.js.map +1 -1
  281. package/dist/server/schemas/settings.js +4 -0
  282. package/dist/server/schemas/settings.js.map +1 -1
  283. package/dist/shared/userMd/utils.js +30 -0
  284. package/dist/shared/userMd/utils.js.map +1 -1
  285. package/dist/ui/assets/index-BpSQt5vm.js.map +1 -1
  286. package/docs/guidelines/agent-infra/api-cost-levers.md +56 -5
  287. package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +93 -33
  288. package/package.json +1 -1
  289. package/src/agent-src/templates/scripts/pr_risk_review.ts +0 -0
  290. package/src/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  291. package/src/agent-src/templates/scripts/tier_usage_report.ts +2 -2
  292. package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -2
  293. package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +1 -1
  294. package/src/config/agent-settings.template.yml +32 -2
  295. package/src/config/ci-local-parity.yml +142 -0
  296. package/src/config/gate-coverage.yml +127 -0
  297. package/src/config/preamble-payload-budget.json +44 -0
  298. package/src/scripts/_cli/cmd_doctor.ts +78 -2
  299. package/src/scripts/_lib/agent_user_profile.ts +381 -0
  300. package/src/scripts/_lib/agents_overlay.ts +9 -0
  301. package/src/scripts/_lib/anchor_eval.ts +311 -0
  302. package/src/scripts/_lib/cc_transcript.ts +316 -0
  303. package/src/scripts/_lib/compile_time_toggles.ts +79 -0
  304. package/src/scripts/_lib/confusables.ts +101 -0
  305. package/src/scripts/_lib/duplicate_scope_census.ts +77 -0
  306. package/src/scripts/_lib/managed_agents_folder.ts +181 -0
  307. package/src/scripts/_lib/payload_hash_drift.ts +126 -0
  308. package/src/scripts/_lib/preservation_migration.ts +291 -0
  309. package/src/scripts/_lib/retrieval_sanitize.ts +166 -2
  310. package/src/scripts/_lib/scan_scope.ts +115 -0
  311. package/src/scripts/_lib/user_global_memory_audit.ts +187 -0
  312. package/src/scripts/_lib/user_global_observations.ts +830 -0
  313. package/src/scripts/_lib/user_global_revocations.ts +110 -0
  314. package/src/scripts/_lib/user_memory_gate_counters.ts +291 -0
  315. package/src/scripts/ai_council/blind_review.ts +0 -0
  316. package/src/scripts/ai_council/budget_guard.ts +90 -11
  317. package/src/scripts/ai_council/bundler.ts +2 -2
  318. package/src/scripts/ai_council/clients.ts +59 -3
  319. package/src/scripts/ai_council/config.ts +38 -0
  320. package/src/scripts/ai_council/orchestrator.ts +54 -9
  321. package/src/scripts/ai_team/team_dispatch.ts +17 -6
  322. package/src/scripts/anchor_eval_falsify.ts +198 -0
  323. package/src/scripts/anchor_scoring_run.ts +239 -0
  324. package/src/scripts/annotate_discovery.ts +1 -65
  325. package/src/scripts/bench_quality_run.ts +168 -4
  326. package/src/scripts/cache_realization_report.ts +782 -0
  327. package/src/scripts/check_artefact_count_messaging.ts +5 -1
  328. package/src/scripts/check_augment_description_cap.ts +15 -4
  329. package/src/scripts/check_ci_local_parity.ts +317 -0
  330. package/src/scripts/check_condensation.ts +96 -191
  331. package/src/scripts/check_context_paths.ts +38 -9
  332. package/src/scripts/check_gate_coverage.ts +299 -0
  333. package/src/scripts/check_iron_law_prominence.ts +22 -1
  334. package/src/scripts/check_kernel_prefix_stability.ts +0 -0
  335. package/src/scripts/check_no_new_legacy_path.ts +16 -6
  336. package/src/scripts/check_no_roadmap_refs.ts +22 -9
  337. package/src/scripts/check_originality_freshness.ts +167 -0
  338. package/src/scripts/check_preamble_payload_budget.ts +130 -0
  339. package/src/scripts/check_proposal.ts +0 -0
  340. package/src/scripts/check_references.ts +0 -1
  341. package/src/scripts/check_safety_floor_untouched.ts +171 -24
  342. package/src/scripts/check_site_links.ts +62 -3
  343. package/src/scripts/ci_status.ts +0 -0
  344. package/src/scripts/cluster_near_miss_patterns.ts +0 -0
  345. package/src/scripts/code_graph/build.ts +0 -0
  346. package/src/scripts/command_suggester/types.ts +0 -0
  347. package/src/scripts/compile_router.ts +10 -14
  348. package/src/scripts/condense.sh +3 -4
  349. package/src/scripts/condense.ts +247 -228
  350. package/src/scripts/cost/track.mjs +168 -33
  351. package/src/scripts/cost_summary.ts +33 -1
  352. package/src/scripts/council_cli.ts +45 -3
  353. package/src/scripts/discovery_graph.ts +0 -0
  354. package/src/scripts/encoding_corpus.ts +500 -0
  355. package/src/scripts/encoding_corpus_report.ts +216 -0
  356. package/src/scripts/generate_index.ts +19 -2
  357. package/src/scripts/install-hooks.sh +2 -2
  358. package/src/scripts/learning_sidecar.ts +0 -0
  359. package/src/scripts/lint_confusables.ts +10 -72
  360. package/src/scripts/lint_featured_skills.ts +0 -0
  361. package/src/scripts/lint_hidden_unicode.ts +208 -0
  362. package/src/scripts/lint_load_context.ts +17 -5
  363. package/src/scripts/lint_new_skill_gate.ts +9 -3
  364. package/src/scripts/lint_no_python_twin_rationale.ts +17 -2
  365. package/src/scripts/lint_originality.ts +1 -1
  366. package/src/scripts/lint_skill_originality.ts +1 -1
  367. package/src/scripts/lint_ticket_buildable.ts +1 -1
  368. package/src/scripts/mcp_server/tools.ts +4 -4
  369. package/src/scripts/measure_scope_dedup.ts +224 -0
  370. package/src/scripts/memory_lookup.ts +0 -0
  371. package/src/scripts/mine_session.ts +98 -0
  372. package/src/scripts/orchestration_payload_hash_drift.ts +145 -0
  373. package/src/scripts/preamble_byte_census.ts +574 -0
  374. package/src/scripts/probe_skill_registration.ts +2 -2
  375. package/src/scripts/redact_hook_capture.ts +13 -0
  376. package/src/scripts/release.ts +65 -10
  377. package/src/scripts/router_telemetry.ts +1 -1
  378. package/src/scripts/second_brain_retrieval.ts +14 -4
  379. package/src/scripts/skill_linter.ts +5 -0
  380. package/src/scripts/surface-tiers.yml +2 -0
  381. package/src/scripts/validate_pack_yaml.ts +0 -0
  382. package/src/server/schemas/settings.ts +8 -0
  383. package/src/shared/userMd/utils.ts +31 -0
  384. package/dist/agent-src/rules/telegraph-speak.md +0 -87
@@ -7,7 +7,7 @@ visibility: internal
7
7
  cluster: agents
8
8
  sub: user
9
9
  skills: [agents]
10
- description: Apply a buffered observation to .agent-user.md after explicit user confirmation; bumps last_updated and drops the applied observations from the buffer.
10
+ description: Apply a buffered observation to .agent-user.md or the global profile.md after explicit user confirmation; bumps last_updated and drops the applied observations from the buffer.
11
11
  argument-hint: "[field]"
12
12
  suggestion:
13
13
  eligible: false
@@ -20,9 +20,16 @@ packs:
20
20
 
21
21
  # /agents user accept
22
22
 
23
- Apply a buffered observation from
24
- [`.agent-user.observations.jsonl`](../../../../../docs/contracts/agent-user-schema.md#observation-buffer)
25
- to `.agent-user.md` after explicit confirmation.
23
+ Apply a buffered observation from either
24
+ [the project-local or the global observation buffer](../../../../../docs/contracts/agent-user-schema.md#observation-buffer)
25
+ to the matching profile file — `.agent-user.md` for a project-local
26
+ observation, the global `~/.event4u/agent-config/user/profile.md` for a
27
+ global one (ADR-138, road-to-global-user-memory Phase 2) — after
28
+ explicit confirmation.
29
+
30
+ This is the **only** step in the learning channel that writes a profile
31
+ file. Everything upstream (the miner, the buffers, `/agents user review`)
32
+ only ever proposes.
26
33
 
27
34
  Use when:
28
35
 
@@ -40,34 +47,77 @@ ls .agent-user.md 2>/dev/null
40
47
  ls .agent-user.observations.jsonl 2>/dev/null
41
48
  ```
42
49
 
43
- Either missing → print "Run `/agents user init` and accumulate
44
- observations first." and stop.
50
+ Resolve the global buffer/profile paths via
51
+ `user_global_observations.resolveGlobalObservationsPath()` /
52
+ `agent_user_profile.resolveGlobalProfilePath()`.
53
+
54
+ Both the project-local file/buffer AND the global profile/buffer
55
+ missing → print "Run `/agents user init` and accumulate observations
56
+ first." and stop. Otherwise proceed with whichever layer(s) have a
57
+ buffered observation.
45
58
 
46
- ### 2. Resolve target field
59
+ ### 2. Resolve target field + layer
47
60
 
48
- | Invocation | Resolved field |
61
+ | Invocation | Resolved field + layer |
49
62
  |---|---|
50
- | Handed off from `/agents user review` option 1 | The most-frequent field |
51
- | `/agents user accept <field>` | `<field>` (must match the schema enum) |
52
- | `/agents user accept` with no arg | Print the field list, ask which |
63
+ | Handed off from `/agents user review` option 1 | The most-frequent field, with the layer `review` reported it under |
64
+ | Handed off from `/agents user review` option 4 (a promotion candidate) | The candidate's `suggest` text, layer `global` — see § 2b below, skip straight to step 4 with the promotion framing |
65
+ | `/agents user accept <field>` | `<field>` (must match the schema enum); if both layers have an observation for it, ask which layer |
66
+ | `/agents user accept` with no arg | Print the field list (both layers), ask which |
53
67
 
54
68
  Invalid field → print the schema enum and stop.
55
69
 
56
- ### 3. Compute proposed change
70
+ ### 2b. Promotion candidates need a `promotion_reason` (road-to-global-user-memory Phase 3)
71
+
72
+ A candidate handed off from review option 4 has `seen_count ≥ 3` and a
73
+ `seen_in[]` project list — human-confirmed recurrence across that many
74
+ DIFFERENT projects (per
75
+ [`findPromotionCandidates`](../../../../../src/scripts/_lib/user_global_observations.ts)).
76
+ Crossing that threshold is candidacy only; it never auto-promotes
77
+ (mirroring ADR-121's rule that a knowledge card has no auto-`shareable`
78
+ path). Before step 4's confirmation, collect one additional line from the
79
+ user:
80
+
81
+ ```
82
+ This observation recurred in {seen_count} projects: {seen_in joined by ", "}.
83
+
84
+ Why should this generalise to your global profile?
85
+ > {free-text promotion_reason — required, no default}
86
+ ```
57
87
 
58
- For the resolved field:
88
+ An empty answer is not accepted — re-ask once, then fall back to
89
+ "Cancel" if the user still declines to give a reason. The
90
+ `promotion_reason` is shown in step 4's confirmation block (below) but is
91
+ **never written to `profile.md`** — see § 3 write below; it exists to make
92
+ the human's judgment call visible in this transcript, not to persist
93
+ alongside the fact.
59
94
 
60
- 1. Read every matching observation from the buffer.
61
- 2. Pick the **latest** `suggest` value (most recent `ts` wins).
62
- 3. Read the current value from `.agent-user.md`.
95
+ ### 3. Compute proposed change
96
+
97
+ For the resolved field + layer — or, for a promotion candidate (§ 2b),
98
+ the single matched buffer entry:
99
+
100
+ 1. Read every matching observation from that layer's buffer only —
101
+ `.agent-user.observations.jsonl` for `project`,
102
+ `user_global_observations.readGlobalObservations()` for `global`.
103
+ 2. Pick the **latest** `suggest` value (most recent `ts` wins). For a
104
+ promotion candidate, the proposed value is
105
+ [`promotionValueFor(candidate)`](../../../../../src/scripts/_lib/user_global_observations.ts) —
106
+ the fact text ONLY, never the `context` or `seen_in` metadata attached
107
+ to it.
108
+ 3. Read the current value from that layer's profile file
109
+ (`.agent-user.md` or the global `profile.md`) — NOT the merged
110
+ effective value, so the confirmation shows exactly what this layer
111
+ will change.
63
112
  4. If they match, print "No change — current value already matches
64
113
  the latest observation." and skip to step 6.
65
114
 
66
115
  ### 4. Confirm
67
116
 
68
117
  ```
69
- Apply this change to .agent-user.md?
118
+ Apply this change to {.agent-user.md | the global profile}?
70
119
 
120
+ layer : {project | global}
71
121
  field : {field}
72
122
  current : "{current_value}"
73
123
  proposed: "{proposed_value}"
@@ -76,7 +126,15 @@ Apply this change to .agent-user.md?
76
126
 
77
127
  > 1. Apply
78
128
  > 2. Skip — keep current value, drop these observations from the buffer
79
- > 3. Cancel — leave .agent-user.md and buffer untouched
129
+ > 3. Cancel — leave the profile and buffer untouched
130
+ ```
131
+
132
+ For a promotion candidate, append two lines above `> 1. Apply` instead of
133
+ `source`/`evidence`:
134
+
135
+ ```
136
+ seen in : {seen_count} projects ({seen_in joined by ", "})
137
+ reason : "{promotion_reason from § 2b}"
80
138
  ```
81
139
 
82
140
  One question per turn. Wait for the user's number.
@@ -85,24 +143,40 @@ One question per turn. Wait for the user's number.
85
143
 
86
144
  On `1. Apply`:
87
145
 
88
- 1. Rewrite the targeted field in `.agent-user.md` frontmatter.
89
- Preserve every other field byte-for-byte (use a YAML round-trip
90
- loader that keeps formatting).
91
- 2. Bump `last_updated` to today (ISO `YYYY-MM-DD`).
92
- 3. Validate the result: schema present, ≤100 lines, privacy floor
93
- clean. Any violation → roll back and print the error.
94
- 4. Drop **all** applied observations for that field from the buffer
95
- (rewrite the JSONL minus matching lines).
96
-
97
- On `2. Skip`: leave `.agent-user.md` untouched but still drop the
98
- observations for that field from the buffer.
146
+ - **`project` layer:** rewrite the targeted field in `.agent-user.md`
147
+ frontmatter, preserving every other field (a YAML round-trip loader
148
+ that keeps formatting), bump `last_updated` to today (ISO
149
+ `YYYY-MM-DD`), validate ≤100 lines + privacy floor clean — any
150
+ violation rolls back and prints the error.
151
+ - **`global` layer:** call
152
+ [`applyObservationToGlobalProfile(field, value, { today })`](../../../../src/scripts/_lib/agent_user_profile.ts) —
153
+ it round-trips the existing `profile.md` (or starts from empty),
154
+ sets the field, bumps `last_updated`, and throws (never partially
155
+ writes) if the result would exceed the global layer's own 100-line
156
+ cap. A thrown error is the roll-back signal — print it and stop. For a
157
+ promotion candidate, `value` is `promotionValueFor(candidate)` — the
158
+ `promotion_reason` collected in § 2b is shown in step 4's confirmation
159
+ only; it is **never** passed to `applyObservationToGlobalProfile` and
160
+ never appears in `profile.md`, alongside `context`/`seen_in`, which are
161
+ likewise never written. This is the only generalisation path, and it
162
+ leaves the durable profile with zero project references (see
163
+ [`agent-user-schema.md § Project attribution`](../../../../../docs/contracts/agent-user-schema.md#project-attribution-road-to-global-user-memory-phase-3)).
164
+
165
+ Either layer: drop **all** applied observations for that field from
166
+ **that layer's own buffer only** (rewrite the JSONL minus matching
167
+ lines) — never touch the other layer's buffer. For a promoted candidate,
168
+ this drops only the ONE matched buffer entry (identified in § 2b), not
169
+ every `notes`-field entry in the buffer.
170
+
171
+ On `2. Skip`: leave the profile untouched but still drop the
172
+ observations for that field from that layer's buffer.
99
173
 
100
174
  On `3. Cancel`: stop without any write.
101
175
 
102
176
  ### 6. Confirm
103
177
 
104
178
  ```
105
- ✅ .agent-user.md updated ({field}: "{old}" → "{new}", last_updated: YYYY-MM-DD).
179
+ ✅ {layer} profile updated ({field}: "{old}" → "{new}", last_updated: YYYY-MM-DD).
106
180
  Buffer: {n} observations removed, {m} remaining.
107
181
  ```
108
182
 
@@ -115,11 +189,22 @@ Do NOT commit. Do NOT auto-chain to a second field.
115
189
  - Never write without explicit confirmation in step 4.
116
190
  - Never bypass the privacy-floor scan, even if the buffer writer
117
191
  already redacted.
192
+ - Never write to the layer the observation did NOT come from — an
193
+ observation buffered as `global` writes `profile.md`, never
194
+ `.agent-user.md`, and vice versa.
195
+ - Never accept a promotion candidate without a non-empty
196
+ `promotion_reason` (§ 2b) — a `seen_count ≥ 3` tally is candidacy, not
197
+ authorization.
198
+ - Never write `context` or `seen_in` to `profile.md` — a promotion writes
199
+ `promotionValueFor(candidate)`, the fact text only.
118
200
  - Mirror the user's language for prompts per
119
201
  [`language-and-tone`](../../../../dist/agent-src/rules/language-and-tone.md).
120
202
 
121
203
  ## See also
122
204
 
123
205
  - Schema + buffer contract: [`agent-user-schema § Observation buffer`](../../../../../docs/contracts/agent-user-schema.md#observation-buffer).
206
+ - Project attribution + promotion: [`agent-user-schema § Project attribution`](../../../../../docs/contracts/agent-user-schema.md#project-attribution-road-to-global-user-memory-phase-3).
207
+ - Global write primitive: [`agent_user_profile.applyObservationToGlobalProfile`](../../../../src/scripts/_lib/agent_user_profile.ts).
208
+ - Promotion primitives: [`findPromotionCandidates`, `promotionValueFor`](../../../../../src/scripts/_lib/user_global_observations.ts).
124
209
  - Parent: [`/agents user`](../user.md).
125
210
  - Sibling: [`/agents user review`](review.md), [`/agents user update`](update.md).
@@ -0,0 +1,147 @@
1
+ ---
2
+ model_tier: medium
3
+ name: agents-user-delete
4
+ pack: meta
5
+ tier: 2
6
+ visibility: internal
7
+ cluster: agents
8
+ sub: user
9
+ skills: [agents]
10
+ description: Delete one buffered global observation, purge every observation attributed to a project, or revoke a field from the global profile.md — each writes an append-only tombstone before deleting.
11
+ argument-hint: "[observation <id> | project <path> | profile-field <field>]"
12
+ suggestion:
13
+ eligible: false
14
+ rationale: "Mutates the global observation buffer or profile.md — only run from /agents user review, /agents user show --audit, or explicit user invocation."
15
+ workspaces:
16
+ - agent-config-maintainer
17
+ packs:
18
+ - meta
19
+ ---
20
+
21
+ # /agents user delete
22
+
23
+ Delete something the learning channel wrote to the **global** layer —
24
+ road-to-global-user-memory Phase 4, the delete counterpart of
25
+ [`/agents user accept`](accept.md). Every deletion writes an
26
+ append-only tombstone to the revocation ledger BEFORE the underlying
27
+ file is rewritten without it — see
28
+ [`agent-user-schema § Delete, revoke, and audit`](../../../../../docs/contracts/agent-user-schema.md#delete-revoke-and-audit-road-to-global-user-memory-phase-4).
29
+
30
+ Three targets, one per invocation:
31
+
32
+ | Target | Removes | Backing function |
33
+ |---|---|---|
34
+ | `observation <id>` | ONE buffered line from `observations.jsonl` | [`deleteGlobalObservation`](../../../../../src/scripts/_lib/user_global_observations.ts) |
35
+ | `project <path>` | EVERY observation attributed (`context.project_path`) to that project | [`purgeProjectContext`](../../../../../src/scripts/_lib/user_global_observations.ts) |
36
+ | `profile-field <field>` | A field's value from the global `profile.md` | [`revokeGlobalProfileField`](../../../../../src/scripts/_lib/agent_user_profile.ts) |
37
+
38
+ Use when:
39
+
40
+ - [`/agents user show --audit`](show.md) or
41
+ [`/agents user review`](review.md) surfaced something the user wants
42
+ gone.
43
+ - A project was deleted and its buffered facts should not linger
44
+ forever (`project <path>`).
45
+ - A promoted or accepted profile field turned out to be wrong
46
+ (`profile-field <field>`).
47
+
48
+ Never runs autonomously — always asks before writing, exactly like
49
+ `accept`.
50
+
51
+ ## Steps
52
+
53
+ ### 1. Resolve the target
54
+
55
+ | Invocation | Target |
56
+ |---|---|
57
+ | `/agents user delete observation <id>` | The buffered observation whose `observationId` equals `<id>` (shown by `/agents user show --audit` or `/agents user review`) |
58
+ | `/agents user delete project <path>` | Every observation whose `context.project_path` equals `<path>` |
59
+ | `/agents user delete profile-field <field>` | `<field>` in the global `profile.md` (must match the schema enum) |
60
+ | No argument | Print the target-kind table above and ask which; then ask for the id/path/field |
61
+
62
+ Invalid `<field>` → print the schema enum and stop. No observation
63
+ matches `<id>` → print "No buffered observation with that id." and
64
+ stop (no tombstone is written for a no-op — see the backing functions'
65
+ `deleted: false` / `purgedCount: 0` contract).
66
+
67
+ ### 2. Confirm
68
+
69
+ ```
70
+ Delete this from the global user-memory layer?
71
+
72
+ target : {observation <id> | project <path> | profile-field <field>}
73
+ current: {for profile-field — the current value; for observation/project — the suggest text(s) that will be removed}
74
+
75
+ > 1. Delete — write a tombstone, then remove
76
+ > 2. Cancel — leave everything untouched
77
+ ```
78
+
79
+ For `project <path>`, list every matched observation's `suggest` text
80
+ before asking, so the user confirms the actual scope, not just a count.
81
+
82
+ One question per turn. Wait for the user's number.
83
+
84
+ ### 3. Ask for a reason
85
+
86
+ ```
87
+ Why is this being deleted? (one line, becomes the tombstone's `reason`)
88
+ > {free-text reason}
89
+ ```
90
+
91
+ An empty answer is not accepted — re-ask once, then default to `"no
92
+ reason given"` if the user still declines (mirrors
93
+ [`user_global_revocations.appendTombstone`](../../../../../src/scripts/_lib/user_global_revocations.ts)'s
94
+ own fallback, so a user who truly has nothing to say is never blocked).
95
+
96
+ ### 4. Write
97
+
98
+ On `1. Delete`, call the matching function with today's date and the
99
+ step-3 reason:
100
+
101
+ - `observation <id>` →
102
+ [`deleteGlobalObservation(id, reason, { today })`](../../../../../src/scripts/_lib/user_global_observations.ts).
103
+ - `project <path>` →
104
+ [`purgeProjectContext(path, reason, { today })`](../../../../../src/scripts/_lib/user_global_observations.ts).
105
+ - `profile-field <field>` →
106
+ [`revokeGlobalProfileField(field, reason, { today })`](../../../../../src/scripts/_lib/agent_user_profile.ts).
107
+
108
+ Each function writes its tombstone(s) BEFORE the buffer/profile
109
+ rewrite — never call `fs`/the file directly from this command; always
110
+ go through the function so the tombstone-before-delete order holds.
111
+
112
+ On `2. Cancel`: stop without any write, without any tombstone.
113
+
114
+ ### 5. Confirm
115
+
116
+ ```
117
+ ✅ Deleted ({target}). Tombstone recorded: {entity_id}, {revoked_at}.
118
+ ```
119
+
120
+ For `project <path>`, report the count: `✅ Purged {n} observation(s) from {path}. {n} tombstone(s) recorded.`
121
+
122
+ Do NOT commit. Do NOT auto-chain to a second deletion.
123
+
124
+ ## Rules
125
+
126
+ - One target per invocation. Run the command again for the next
127
+ deletion.
128
+ - Never delete without explicit confirmation in step 2 and a reason
129
+ from step 3.
130
+ - Never write to a file directly — every deletion goes through
131
+ `deleteGlobalObservation`, `purgeProjectContext`, or
132
+ `revokeGlobalProfileField` so the tombstone always precedes the
133
+ delete.
134
+ - Never touch project-local `.agent-user.md` or its buffer from this
135
+ command — this leaf covers the global layer only. A project-local
136
+ fact is deleted by editing `.agent-user.md` directly (it never left
137
+ the project) or via [`/agents user review`](review.md)'s existing
138
+ "clear a buffer" option.
139
+ - Mirror the user's language for prompts per
140
+ [`language-and-tone`](../../../../dist/agent-src/rules/language-and-tone.md).
141
+
142
+ ## See also
143
+
144
+ - Schema: [`agent-user-schema § Delete, revoke, and audit`](../../../../../docs/contracts/agent-user-schema.md#delete-revoke-and-audit-road-to-global-user-memory-phase-4) — the write→delete mapping and the ADR-121 reuse this command exposes.
145
+ - Audit source: [`/agents user show --audit`](show.md) — the read surface that surfaces what there is to delete.
146
+ - Parent: [`/agents user`](../user.md).
147
+ - Sibling: [`/agents user review`](review.md), [`/agents user accept`](accept.md) — the write side this command undoes.
@@ -7,7 +7,7 @@ visibility: internal
7
7
  cluster: agents
8
8
  sub: user
9
9
  skills: [agents]
10
- description: List buffered observations from .agent-user.observations.jsonl with numbered options to inspect or accept individually.
10
+ description: List buffered observations from the project-local and global observation buffers with numbered options to inspect or accept individually.
11
11
  suggestion:
12
12
  eligible: false
13
13
  rationale: "Cluster sub-command — reached via its cluster head's routing or its explicit /cluster:sub name; not independently suggested (surface-consolidation)."
@@ -19,14 +19,17 @@ packs:
19
19
 
20
20
  # /agents user review
21
21
 
22
- List the buffered observations in `.agent-user.observations.jsonl`
23
- and let the user choose which to inspect or accept.
22
+ List the buffered observations across BOTH observation buffers —
23
+ project-local `.agent-user.observations.jsonl` and the global
24
+ `~/.event4u/agent-config/user/observations.jsonl` (ADR-138,
25
+ road-to-global-user-memory Phase 2) — and let the user choose which to
26
+ inspect or accept.
24
27
 
25
28
  Use when:
26
29
 
27
30
  - You want to see what the agent has learned about your preferences.
28
- - You suspect `.agent-user.md` is out of date and want a curated
29
- diff before editing.
31
+ - You suspect `.agent-user.md` (or the global `profile.md`) is out of
32
+ date and want a curated diff before editing.
30
33
  - You want to dismiss observations the agent collected.
31
34
 
32
35
  Read-only by itself — actual changes go through
@@ -35,57 +38,90 @@ Read-only by itself — actual changes go through
35
38
 
36
39
  ## Steps
37
40
 
38
- ### 1. Locate buffer
41
+ ### 1. Locate buffers
39
42
 
40
43
  ```bash
41
44
  ls .agent-user.observations.jsonl 2>/dev/null
42
45
  ```
43
46
 
44
- | State | Action |
47
+ Resolve the global buffer's path via `user_global_observations.
48
+ resolveGlobalObservationsPath()` — it honours the config-home override
49
+ env var and the legacy fallback root exactly like every other global
50
+ artefact, so never hard-code either path here.
51
+
52
+ | State (either buffer) | Action |
45
53
  |---|---|
46
- | Missing or empty | Print "No buffered observations. The agent has not learned anything new." and stop |
47
- | Present | Proceed |
54
+ | Both missing or empty | Print "No buffered observations. The agent has not learned anything new." and stop |
55
+ | At least one present | Proceed with whichever buffer(s) exist |
48
56
 
49
57
  ### 2. Parse + group
50
58
 
51
- Read every line as JSON. Drop malformed lines silently (one-line
52
- warning at the end with the count). Group by `field`:
59
+ Read every line as JSON from BOTH buffers via
60
+ [`user_global_observations.readGlobalObservations`](../../../../src/scripts/_lib/user_global_observations.ts)
61
+ for the global one, and the equivalent tolerant parse for the
62
+ project-local file. Drop malformed lines silently (one-line warning at
63
+ the end with the combined count; `readGlobalObservations` already
64
+ reports `droppedMalformed` / `droppedUnknownField`). Group by `field`
65
+ ACROSS both buffers, tagging each observation with its layer:
53
66
 
54
67
  ```
55
- .agent-user.observations.jsonl — {n} observations across {k} fields
68
+ Buffered observations — {n} across {k} fields ({p} project-local, {g} global)
56
69
 
57
70
  1. style.pace ({n}× since {oldest_ts})
58
- latest suggest: "rapid" — evidence: user said 'mach kürzer' 3× this session
71
+ latest suggest: "rapid" [global] — evidence: user said 'mach kürzer' 3× this session
59
72
  2. identity.nickname ({n}× since {oldest_ts})
60
- latest suggest: "Matze" — evidence: user signed last 3 messages "— Matze"
73
+ latest suggest: "Matze" [project] — evidence: user signed last 3 messages "— Matze"
61
74
  3. language ({n}× since {oldest_ts})
62
- latest suggest: "de" — evidence: last 12 messages in German, .agent-user.md says "en"
75
+ latest suggest: "de" [global] — evidence: last 12 messages in German, profile says "en"
76
+ ```
77
+
78
+ Sort by frequency (most observations first, combined across both
79
+ layers), then by recency. When the SAME field has observations in both
80
+ layers, list the most-recent one first and note both counts.
81
+
82
+ ### 2a. Promotion candidates (road-to-global-user-memory Phase 3)
83
+
84
+ Separately from the field grouping above, call
85
+ [`findPromotionCandidates`](../../../../../src/scripts/_lib/user_global_observations.ts)
86
+ over the global buffer's entries. Any observation with `seen_count ≥ 3`
87
+ (`PROMOTION_SEEN_COUNT_THRESHOLD`) is project-attributed, human-confirmed
88
+ recurring evidence across that many DIFFERENT projects — surface it as
89
+ its own block, ahead of the field list:
90
+
91
+ ```
92
+ Promotion candidates — seen in 3+ projects:
93
+
94
+ 1. "always use pnpm instead of npm for installs" — seen in 3 projects (acme-web, acme-api, acme-mobile)
63
95
  ```
64
96
 
65
- Sort by frequency (most observations first), then by recency.
97
+ This is candidacy only, never a promotion — crossing the threshold makes
98
+ `/agents user accept` able to offer promoting it, nothing more (see
99
+ [`agent-user-schema.md § Project attribution`](../../../../../docs/contracts/agent-user-schema.md#project-attribution-road-to-global-user-memory-phase-3)).
66
100
 
67
101
  ### 3. Ask
68
102
 
69
103
  ```
70
- > 1. Accept the most-frequent suggestion ({field} → {value})
104
+ > 1. Accept the most-frequent suggestion ({field} [{layer}] → {value})
71
105
  > 2. Inspect a specific field
72
- > 3. Clear the buffer (discard all)
73
- > 4. Cancel
106
+ > 3. Clear a buffer (project-local, global, or both)
107
+ > 4. Promote a candidate from step 2a (only shown when ≥ 1 exists)
108
+ > 5. Cancel
74
109
  ```
75
110
 
76
111
  | Choice | Action |
77
112
  |---|---|
78
- | 1 | Hand off to [`/agents user accept`](accept.md) with the chosen field |
79
- | 2 | Print every observation for that field with evidence + ts, then re-ask |
80
- | 3 | Truncate `.agent-user.observations.jsonl` to zero bytes; print confirmation |
81
- | 4 | Stop without changes |
113
+ | 1 | Hand off to [`/agents user accept`](accept.md) with the chosen field AND layer |
114
+ | 2 | Print every observation for that field (both layers) with evidence + ts, then re-ask |
115
+ | 3 | Ask which buffer(s) to truncate, then truncate the chosen file(s) to zero bytes; print confirmation |
116
+ | 4 | Hand off to [`/agents user accept`](accept.md) with the chosen promotion candidate — `accept` collects the mandatory `promotion_reason` before writing anything |
117
+ | 5 | Stop without changes |
82
118
 
83
119
  One question per turn. Wait for the user's number.
84
120
 
85
121
  ### 4. Privacy-floor verify
86
122
 
87
123
  Before printing any observation's `evidence` text, scan it for the
88
- [exclusions list](../../../../../../../../docs/contracts/agent-user-schema.md#explicit-exclusions).
124
+ [exclusions list](../../../../../docs/contracts/agent-user-schema.md#explicit-exclusions).
89
125
  Match → replace the offending substring with `[redacted]` in the
90
126
  rendered output.
91
127
 
@@ -100,14 +136,15 @@ turn.
100
136
 
101
137
  ## Rules
102
138
 
103
- - Read-only on `.agent-user.md`. Only `accept` writes to the persona
104
- file.
105
- - Buffer is the only mutable artefact (truncate via option 3).
139
+ - Read-only on `.agent-user.md` AND the global `profile.md`. Only
140
+ `accept` writes to either persona file.
141
+ - Both buffers are the only mutable artefacts (truncate via option 3).
106
142
  - Mirror the user's language for prompts per
107
143
  [`language-and-tone`](../../../../dist/agent-src/rules/language-and-tone.md).
108
144
 
109
145
  ## See also
110
146
 
111
- - Schema + buffer contract: [`agent-user-schema § Observation buffer`](../../../../../../../../docs/contracts/agent-user-schema.md#observation-buffer).
147
+ - Schema + buffer contract: [`agent-user-schema § Observation buffer`](../../../../../docs/contracts/agent-user-schema.md#observation-buffer).
148
+ - Global buffer implementation: [`user_global_observations.ts`](../../../../src/scripts/_lib/user_global_observations.ts).
112
149
  - Parent: [`/agents user`](../user.md).
113
150
  - Sibling: [`/agents user accept`](accept.md), [`/agents user update`](update.md).