@event4u/agent-config 14.23.0 → 16.0.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 (541) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/CHANGELOG.md +144 -152
  5. package/README.md +1 -1
  6. package/dist/agent-src/commands/agent-handoff.md +8 -7
  7. package/dist/agent-src/commands/agents/init.md +1 -1
  8. package/dist/agent-src/commands/agents/user/accept.md +4 -4
  9. package/dist/agent-src/commands/agents/user/delete.md +2 -2
  10. package/dist/agent-src/commands/agents/user/init.md +3 -3
  11. package/dist/agent-src/commands/agents/user/review.md +3 -3
  12. package/dist/agent-src/commands/agents/user/show.md +3 -3
  13. package/dist/agent-src/commands/agents/user/update.md +2 -2
  14. package/dist/agent-src/commands/agents/user.md +6 -6
  15. package/dist/agent-src/commands/analytics/prune.md +1 -1
  16. package/dist/agent-src/commands/analytics/show.md +2 -2
  17. package/dist/agent-src/commands/analyze/decision.md +2 -2
  18. package/dist/agent-src/commands/analyze/inbox.md +5 -5
  19. package/dist/agent-src/commands/analyze/incident.md +3 -3
  20. package/dist/agent-src/commands/analyze/near-miss.md +3 -3
  21. package/dist/agent-src/commands/analyze/postmortem.md +4 -4
  22. package/dist/agent-src/commands/analyze/premortem.md +2 -2
  23. package/dist/agent-src/commands/analyze.md +2 -2
  24. package/dist/agent-src/commands/bug/fix.md +1 -1
  25. package/dist/agent-src/commands/bug/investigate.md +2 -2
  26. package/dist/agent-src/commands/cost/profile.md +3 -3
  27. package/dist/agent-src/commands/design.md +1 -1
  28. package/dist/agent-src/commands/feature/explore.md +1 -1
  29. package/dist/agent-src/commands/feature/plan.md +2 -2
  30. package/dist/agent-src/commands/feature/roadmap.md +2 -2
  31. package/dist/agent-src/commands/ghostwriter/fetch.md +4 -4
  32. package/dist/agent-src/commands/ghostwriter/list.md +1 -1
  33. package/dist/agent-src/commands/ghostwriter/show.md +1 -1
  34. package/dist/agent-src/commands/ghostwriter/write.md +9 -9
  35. package/dist/agent-src/commands/humanize.md +6 -6
  36. package/dist/agent-src/commands/jira-ticket.md +1 -1
  37. package/dist/agent-src/commands/judge/solo.md +1 -1
  38. package/dist/agent-src/commands/judge.md +1 -1
  39. package/dist/agent-src/commands/knowledge/cross-repo.md +1 -1
  40. package/dist/agent-src/commands/knowledge/forget.md +1 -1
  41. package/dist/agent-src/commands/knowledge/ingest.md +2 -2
  42. package/dist/agent-src/commands/knowledge/list.md +1 -1
  43. package/dist/agent-src/commands/memory/add.md +3 -3
  44. package/dist/agent-src/commands/memory/load.md +4 -4
  45. package/dist/agent-src/commands/memory/mine-session.md +1 -1
  46. package/dist/agent-src/commands/memory/promote.md +4 -4
  47. package/dist/agent-src/commands/memory/propose.md +2 -2
  48. package/dist/agent-src/commands/mode.md +5 -5
  49. package/dist/agent-src/commands/post-as/ghostwriter.md +3 -3
  50. package/dist/agent-src/commands/post-as/me.md +7 -7
  51. package/dist/agent-src/commands/pr/create.md +1 -1
  52. package/dist/agent-src/commands/pr/merge.md +1 -1
  53. package/dist/agent-src/commands/profile/activate.md +1 -1
  54. package/dist/agent-src/commands/profile/show.md +1 -1
  55. package/dist/agent-src/commands/research/deep.md +2 -2
  56. package/dist/agent-src/commands/research/report.md +2 -2
  57. package/dist/agent-src/commands/review/changes.md +1 -1
  58. package/dist/agent-src/commands/review/routing.md +1 -1
  59. package/dist/agent-src/commands/roadmap/create.md +4 -3
  60. package/dist/agent-src/commands/roadmap/materialize.md +2 -2
  61. package/dist/agent-src/commands/roadmap/next.md +1 -1
  62. package/dist/agent-src/commands/roadmap/process-full.md +2 -2
  63. package/dist/agent-src/commands/security-audit-config.md +3 -3
  64. package/dist/agent-src/commands/skill/preview.md +1 -1
  65. package/dist/agent-src/commands/skills/discover.md +1 -1
  66. package/dist/agent-src/commands/sync/agent-settings.md +2 -2
  67. package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
  68. package/dist/agent-src/commands/tests/create.md +1 -1
  69. package/dist/agent-src/commands/tests/e2e-heal.md +1 -1
  70. package/dist/agent-src/commands/tests/e2e-plan.md +1 -1
  71. package/dist/agent-src/contexts/authority/kernel-rule-edits.md +6 -6
  72. package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -2
  73. package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
  74. package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +88 -1
  75. package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +51 -1
  76. package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -1
  77. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +1 -1
  78. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
  79. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +1 -1
  80. package/dist/agent-src/contexts/execution/cheap-question-mechanics.md +1 -1
  81. package/dist/agent-src/contexts/execution/contract-decision-sheet.md +3 -3
  82. package/dist/agent-src/contexts/execution/mandated-lines.md +1 -1
  83. package/dist/agent-src/contexts/execution/non-interactive-contract.md +1 -1
  84. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -1
  85. package/dist/agent-src/contexts/execution/plan-confidence-gate.md +5 -5
  86. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -1
  87. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +1 -1
  88. package/dist/agent-src/contexts/execution/subagent-routing.md +2 -2
  89. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +1 -1
  90. package/dist/agent-src/contexts/execution/user-memory-channels.md +3 -3
  91. package/dist/agent-src/contexts/execution/verification-mechanics.md +1 -1
  92. package/dist/agent-src/contexts/judges/persona-voice-rubric.md +2 -2
  93. package/dist/agent-src/guidelines/abstraction-thresholds.md +88 -0
  94. package/dist/agent-src/guidelines/agent-infra/5w2h-analysis.md +260 -0
  95. package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +99 -0
  96. package/dist/agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +325 -0
  97. package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +177 -0
  98. package/dist/agent-src/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +222 -0
  99. package/dist/agent-src/guidelines/agent-infra/ask-when-uncertain-demos.md +134 -0
  100. package/dist/agent-src/guidelines/agent-infra/asking-and-brevity-examples.md +198 -0
  101. package/dist/agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
  102. package/dist/agent-src/guidelines/agent-infra/carve-out-predicates.md +17 -0
  103. package/dist/agent-src/guidelines/agent-infra/comparison-matrix.md +179 -0
  104. package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +165 -0
  105. package/dist/agent-src/guidelines/agent-infra/corpus-grounding-authoring.md +91 -0
  106. package/dist/agent-src/guidelines/agent-infra/critical-thinking.md +156 -0
  107. package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +109 -0
  108. package/dist/agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
  109. package/dist/agent-src/guidelines/agent-infra/direct-answers-demos.md +142 -0
  110. package/dist/agent-src/guidelines/agent-infra/domain-adoption-gates.md +112 -0
  111. package/dist/agent-src/guidelines/agent-infra/domain-eval-anti-pattern.md +53 -0
  112. package/dist/agent-src/guidelines/agent-infra/domain-pack-architecture.md +56 -0
  113. package/dist/agent-src/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
  114. package/dist/agent-src/guidelines/agent-infra/emphasis-budget.md +45 -0
  115. package/dist/agent-src/guidelines/agent-infra/engineering-memory-data-format.md +210 -0
  116. package/dist/agent-src/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
  117. package/dist/agent-src/guidelines/agent-infra/existence-question-verdicts.md +80 -0
  118. package/dist/agent-src/guidelines/agent-infra/failure-signatures.md +70 -0
  119. package/dist/agent-src/guidelines/agent-infra/false-green.md +233 -0
  120. package/dist/agent-src/guidelines/agent-infra/first-principles.md +192 -0
  121. package/dist/agent-src/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
  122. package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +169 -0
  123. package/dist/agent-src/guidelines/agent-infra/gate-authoring.md +177 -0
  124. package/dist/agent-src/guidelines/agent-infra/guarded-baseline.md +39 -0
  125. package/dist/agent-src/guidelines/agent-infra/installed-tools-manifest.md +142 -0
  126. package/dist/agent-src/guidelines/agent-infra/inversion-thinking.md +388 -0
  127. package/dist/agent-src/guidelines/agent-infra/ios-simulator-guide.md +378 -0
  128. package/dist/agent-src/guidelines/agent-infra/language-and-tone-examples.md +141 -0
  129. package/dist/agent-src/guidelines/agent-infra/layered-settings.md +317 -0
  130. package/dist/agent-src/guidelines/agent-infra/linked-projects-onboarding-gate.md +80 -0
  131. package/dist/agent-src/guidelines/agent-infra/mcp-request-signing.md +197 -0
  132. package/dist/agent-src/guidelines/agent-infra/memory-access.md +149 -0
  133. package/dist/agent-src/guidelines/agent-infra/mental-models.md +314 -0
  134. package/dist/agent-src/guidelines/agent-infra/minimal-safe-diff-mechanics.md +241 -0
  135. package/dist/agent-src/guidelines/agent-infra/missing-tool-handling.md +66 -0
  136. package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +101 -0
  137. package/dist/agent-src/guidelines/agent-infra/naming.md +69 -0
  138. package/dist/agent-src/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
  139. package/dist/agent-src/guidelines/agent-infra/output-patterns.md +117 -0
  140. package/dist/agent-src/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
  141. package/dist/agent-src/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
  142. package/dist/agent-src/guidelines/agent-infra/review-routing-data-format.md +143 -0
  143. package/dist/agent-src/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
  144. package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +274 -0
  145. package/dist/agent-src/guidelines/agent-infra/role-contracts.md +209 -0
  146. package/dist/agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
  147. package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +241 -0
  148. package/dist/agent-src/guidelines/agent-infra/rule-type-governance.md +73 -0
  149. package/dist/agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
  150. package/dist/agent-src/guidelines/agent-infra/scqa-framework.md +526 -0
  151. package/dist/agent-src/guidelines/agent-infra/security-lint-containment.md +121 -0
  152. package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +134 -0
  153. package/dist/agent-src/guidelines/agent-infra/simplicity-and-goal-demos.md +211 -0
  154. package/dist/agent-src/guidelines/agent-infra/six-hats.md +353 -0
  155. package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +229 -0
  156. package/dist/agent-src/guidelines/agent-infra/skill-quality-checklist.md +157 -0
  157. package/dist/agent-src/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
  158. package/dist/agent-src/guidelines/agent-infra/symptom-driven-harvest-loop.md +104 -0
  159. package/dist/agent-src/guidelines/agent-infra/systems-thinking.md +220 -0
  160. package/dist/agent-src/guidelines/agent-infra/tool-description-as-policy.md +35 -0
  161. package/dist/agent-src/guidelines/agent-infra/tool-integration.md +73 -0
  162. package/dist/agent-src/guidelines/agent-infra/traceability-field-mechanics.md +50 -0
  163. package/dist/agent-src/guidelines/agent-infra/untrusted-input-spotlighting.md +166 -0
  164. package/dist/agent-src/guidelines/agent-infra/verify-before-complete-demos.md +128 -0
  165. package/dist/agent-src/guidelines/augment-portability-patterns.md +70 -0
  166. package/dist/agent-src/guidelines/code-clarity.md +350 -0
  167. package/dist/agent-src/guidelines/component-oriented-and-oop-development.md +189 -0
  168. package/dist/agent-src/guidelines/cross-role-handoff.md +127 -0
  169. package/dist/agent-src/guidelines/design-antipatterns-triggers.json +18 -0
  170. package/dist/agent-src/guidelines/design-antipatterns.md +327 -0
  171. package/dist/agent-src/guidelines/design-asset-discipline.md +38 -0
  172. package/dist/agent-src/guidelines/design-canon.md +63 -0
  173. package/dist/agent-src/guidelines/design-fidelity-mechanics.md +293 -0
  174. package/dist/agent-src/guidelines/design-fidelity-routing.md +78 -0
  175. package/dist/agent-src/guidelines/design-handover-extraction.md +117 -0
  176. package/dist/agent-src/guidelines/design-modes.md +143 -0
  177. package/dist/agent-src/guidelines/design-reconciliation.md +172 -0
  178. package/dist/agent-src/guidelines/docs/readme-size-and-splitting.md +209 -0
  179. package/dist/agent-src/guidelines/e2e/playwright.md +363 -0
  180. package/dist/agent-src/guidelines/gtm-handoff.md +114 -0
  181. package/dist/agent-src/guidelines/monorepo-antipatterns.md +141 -0
  182. package/dist/agent-src/guidelines/php/api-design.md +115 -0
  183. package/dist/agent-src/guidelines/php/artisan-commands.md +81 -0
  184. package/dist/agent-src/guidelines/php/blade-ui.md +78 -0
  185. package/dist/agent-src/guidelines/php/controllers.md +90 -0
  186. package/dist/agent-src/guidelines/php/database.md +194 -0
  187. package/dist/agent-src/guidelines/php/eloquent.md +208 -0
  188. package/dist/agent-src/guidelines/php/flux.md +80 -0
  189. package/dist/agent-src/guidelines/php/general.md +207 -0
  190. package/dist/agent-src/guidelines/php/git.md +164 -0
  191. package/dist/agent-src/guidelines/php/jobs.md +111 -0
  192. package/dist/agent-src/guidelines/php/livewire.md +71 -0
  193. package/dist/agent-src/guidelines/php/logging.md +79 -0
  194. package/dist/agent-src/guidelines/php/naming.md +89 -0
  195. package/dist/agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
  196. package/dist/agent-src/guidelines/php/patterns/dtos.md +199 -0
  197. package/dist/agent-src/guidelines/php/patterns/events.md +67 -0
  198. package/dist/agent-src/guidelines/php/patterns/factory.md +53 -0
  199. package/dist/agent-src/guidelines/php/patterns/pipelines.md +66 -0
  200. package/dist/agent-src/guidelines/php/patterns/policies.md +66 -0
  201. package/dist/agent-src/guidelines/php/patterns/repositories.md +122 -0
  202. package/dist/agent-src/guidelines/php/patterns/service-layer.md +64 -0
  203. package/dist/agent-src/guidelines/php/patterns/strategy.md +247 -0
  204. package/dist/agent-src/guidelines/php/patterns.md +28 -0
  205. package/dist/agent-src/guidelines/php/performance.md +92 -0
  206. package/dist/agent-src/guidelines/php/php-coding-patterns.md +80 -0
  207. package/dist/agent-src/guidelines/php/resources.md +100 -0
  208. package/dist/agent-src/guidelines/php/security.md +110 -0
  209. package/dist/agent-src/guidelines/php/sql.md +97 -0
  210. package/dist/agent-src/guidelines/php/validations.md +119 -0
  211. package/dist/agent-src/guidelines/php/websocket.md +100 -0
  212. package/dist/agent-src/guidelines/prompt-templates.md +189 -0
  213. package/dist/agent-src/guidelines/redundancy-taxonomy.md +208 -0
  214. package/dist/agent-src/guidelines/wing4-handoff.md +127 -0
  215. package/dist/agent-src/personas/README.md +1 -1
  216. package/dist/agent-src/personas/_template-specialist/persona.md +1 -1
  217. package/dist/agent-src/personas/product-owner.md +1 -1
  218. package/dist/agent-src/rules/active-remediation.md +1 -1
  219. package/dist/agent-src/rules/architecture.md +2 -2
  220. package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
  221. package/dist/agent-src/rules/ask-when-uncertain.md +2 -2
  222. package/dist/agent-src/rules/brand-source-of-truth.md +9 -7
  223. package/dist/agent-src/rules/code-comment-discipline.md +2 -2
  224. package/dist/agent-src/rules/code-provenance.md +1 -1
  225. package/dist/agent-src/rules/content-quoting-floor.md +1 -1
  226. package/dist/agent-src/rules/context-hygiene.md +5 -5
  227. package/dist/agent-src/rules/cross-source-consistency.md +1 -1
  228. package/dist/agent-src/rules/design-fidelity.md +36 -46
  229. package/dist/agent-src/rules/direct-answers.md +2 -2
  230. package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
  231. package/dist/agent-src/rules/evaluator-independence.md +1 -1
  232. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
  233. package/dist/agent-src/rules/icon-consistency.md +5 -1
  234. package/dist/agent-src/rules/improve-before-implement.md +1 -1
  235. package/dist/agent-src/rules/language-and-tone.md +3 -3
  236. package/dist/agent-src/rules/minimal-safe-diff.md +1 -1
  237. package/dist/agent-src/rules/notes-first-reasoning.md +2 -2
  238. package/dist/agent-src/rules/recurring-criticism.md +1 -1
  239. package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
  240. package/dist/agent-src/rules/role-mode-adherence.md +2 -2
  241. package/dist/agent-src/rules/security-sensitive-stop.md +1 -1
  242. package/dist/agent-src/rules/size-enforcement.md +1 -1
  243. package/dist/agent-src/rules/source-confidentiality.md +2 -2
  244. package/dist/agent-src/rules/think-before-action.md +1 -1
  245. package/dist/agent-src/rules/token-efficiency.md +7 -5
  246. package/dist/agent-src/rules/ui-audit-gate.md +3 -2
  247. package/dist/agent-src/rules/untrusted-input-defense.md +3 -3
  248. package/dist/agent-src/rules/user-interaction.md +31 -30
  249. package/dist/agent-src/skills/activation-design/SKILL.md +2 -2
  250. package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
  251. package/dist/agent-src/skills/ai-council/SKILL.md +1 -1
  252. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +1 -1
  253. package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
  254. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
  255. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +24 -3
  256. package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
  257. package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
  258. package/dist/agent-src/skills/churn-prevention/SKILL.md +2 -2
  259. package/dist/agent-src/skills/code-refactoring/SKILL.md +3 -3
  260. package/dist/agent-src/skills/code-review/SKILL.md +3 -3
  261. package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
  262. package/dist/agent-src/skills/comp-banding/SKILL.md +1 -1
  263. package/dist/agent-src/skills/competitive-moat-analysis/SKILL.md +1 -1
  264. package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
  265. package/dist/agent-src/skills/complexity-first-planning/SKILL.md +1 -1
  266. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  267. package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -2
  268. package/dist/agent-src/skills/contracts-cognition/SKILL.md +1 -1
  269. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
  270. package/dist/agent-src/skills/corpus-grounding/SKILL.md +2 -2
  271. package/dist/agent-src/skills/customer-research/SKILL.md +2 -2
  272. package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
  273. package/dist/agent-src/skills/data-handling-judgment/SKILL.md +1 -1
  274. package/dist/agent-src/skills/deal-qualification-meddic/SKILL.md +2 -2
  275. package/dist/agent-src/skills/decision-record/SKILL.md +3 -3
  276. package/dist/agent-src/skills/decision-review/SKILL.md +8 -8
  277. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +22 -22
  278. package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
  279. package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +2 -2
  280. package/dist/agent-src/skills/design-review/SKILL.md +4 -4
  281. package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -1
  282. package/dist/agent-src/skills/design-tokens/SKILL.md +17 -2
  283. package/dist/agent-src/skills/design-variations/SKILL.md +2 -2
  284. package/dist/agent-src/skills/developer-like-execution/SKILL.md +2 -2
  285. package/dist/agent-src/skills/discovery-interview/SKILL.md +2 -2
  286. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +3 -3
  287. package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -2
  288. package/dist/agent-src/skills/error-handling-patterns/SKILL.md +9 -0
  289. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +44 -1
  290. package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +2 -2
  291. package/dist/agent-src/skills/expansion-playbook/SKILL.md +2 -2
  292. package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
  293. package/dist/agent-src/skills/experiment-loop/references/protocol.md +1 -1
  294. package/dist/agent-src/skills/fe-design/SKILL.md +3 -3
  295. package/dist/agent-src/skills/fe-design/references/design-patterns.md +1 -1
  296. package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +3 -3
  297. package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
  298. package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
  299. package/dist/agent-src/skills/flux/SKILL.md +1 -1
  300. package/dist/agent-src/skills/forecast-accuracy/SKILL.md +2 -2
  301. package/dist/agent-src/skills/forecasting/SKILL.md +2 -2
  302. package/dist/agent-src/skills/fundraising-narrative/SKILL.md +2 -2
  303. package/dist/agent-src/skills/funnel-analysis/SKILL.md +2 -2
  304. package/dist/agent-src/skills/gtm-launch/SKILL.md +2 -2
  305. package/dist/agent-src/skills/hiring-loop-design/SKILL.md +1 -1
  306. package/dist/agent-src/skills/html-deck/SKILL.md +5 -5
  307. package/dist/agent-src/skills/humanizer/SKILL.md +1 -1
  308. package/dist/agent-src/skills/humanizer/data/patterns.md +1 -1
  309. package/dist/agent-src/skills/iconography/SKILL.md +3 -3
  310. package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
  311. package/dist/agent-src/skills/laravel-api-endpoint/SKILL.md +2 -2
  312. package/dist/agent-src/skills/launch-readiness/SKILL.md +3 -3
  313. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +6 -6
  314. package/dist/agent-src/skills/livewire/SKILL.md +1 -1
  315. package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
  316. package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
  317. package/dist/agent-src/skills/memory-consolidation/SKILL.md +3 -3
  318. package/dist/agent-src/skills/messaging-architecture/SKILL.md +2 -2
  319. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
  320. package/dist/agent-src/skills/onboarding-design/SKILL.md +2 -2
  321. package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
  322. package/dist/agent-src/skills/one-on-one-cadence/SKILL.md +1 -1
  323. package/dist/agent-src/skills/org-design/SKILL.md +1 -1
  324. package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +3 -3
  325. package/dist/agent-src/skills/override-management/SKILL.md +1 -1
  326. package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
  327. package/dist/agent-src/skills/persona-writing/SKILL.md +1 -1
  328. package/dist/agent-src/skills/php-coder/SKILL.md +1 -1
  329. package/dist/agent-src/skills/pipeline-strategy/SKILL.md +2 -2
  330. package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -3
  331. package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
  332. package/dist/agent-src/skills/positioning-strategy/SKILL.md +2 -2
  333. package/dist/agent-src/skills/privacy-review/SKILL.md +1 -1
  334. package/dist/agent-src/skills/prompt-optimizer/SKILL.md +3 -3
  335. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
  336. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -2
  337. package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
  338. package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
  339. package/dist/agent-src/skills/release-comms/SKILL.md +2 -2
  340. package/dist/agent-src/skills/retention-loops/SKILL.md +2 -2
  341. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  342. package/dist/agent-src/skills/roadmap-management/SKILL.md +1 -1
  343. package/dist/agent-src/skills/roadmap-management/references/archival.md +1 -1
  344. package/dist/agent-src/skills/roadmap-writing/SKILL.md +5 -5
  345. package/dist/agent-src/skills/rule-writing/SKILL.md +6 -6
  346. package/dist/agent-src/skills/runway-cognition/SKILL.md +2 -2
  347. package/dist/agent-src/skills/scenario-modeling/SKILL.md +2 -2
  348. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  349. package/dist/agent-src/skills/skill-writing/references/procedure.md +1 -1
  350. package/dist/agent-src/skills/skill-writing/references/section-patterns.md +3 -3
  351. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +1 -1
  352. package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -3
  353. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  354. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +1 -1
  355. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  356. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +11 -5
  357. package/dist/agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +1 -1
  358. package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
  359. package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
  360. package/dist/agent-src/skills/ui-component-architect/SKILL.md +28 -8
  361. package/dist/agent-src/skills/unit-economics-modeling/SKILL.md +2 -2
  362. package/dist/agent-src/skills/upstream-contribute/SKILL.md +1 -1
  363. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +2 -2
  364. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
  365. package/dist/agent-src/skills/vision-articulation/SKILL.md +1 -1
  366. package/dist/agent-src/skills/voc-extract/SKILL.md +2 -2
  367. package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +2 -2
  368. package/dist/agent-src/skills/wireframe/SKILL.md +1 -1
  369. package/dist/agent-src/skills/workspace-link/SKILL.md +1 -1
  370. package/dist/agent-src/templates/agent-settings.md +6 -6
  371. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  372. package/dist/agent-src/templates/contexts/knowledge-pages.md +2 -3
  373. package/dist/agent-src/templates/copilot-instructions.md +1 -1
  374. package/dist/agent-src/templates/roadmaps.md +1 -1
  375. package/dist/agent-src/templates/scripts/README.md +2 -2
  376. package/dist/agent-src/user-types/_template/user-type.md +1 -1
  377. package/dist/cli-delegate/check_update_banner.js +12 -1
  378. package/dist/cli-delegate/{chunk-NLP54U3J.js → chunk-2XY7ILBT.js} +13 -1
  379. package/dist/cli-delegate/{chunk-IAI3XL43.js → chunk-3FKR64R5.js} +22 -6
  380. package/dist/cli-delegate/{chunk-J3RFNKG4.js → chunk-55ACLDUE.js} +2 -2
  381. package/dist/cli-delegate/{chunk-PKOBQADP.js → chunk-57PN4GYJ.js} +1 -1
  382. package/dist/cli-delegate/{chunk-KCNTUSPI.js → chunk-AK6HODNQ.js} +4 -4
  383. package/dist/cli-delegate/{chunk-2FTMENJL.js → chunk-GYC3VRYN.js} +1 -1
  384. package/dist/cli-delegate/{chunk-LWTYTX6F.js → chunk-H32DGUJH.js} +15 -84
  385. package/dist/cli-delegate/{chunk-6RJA2F5A.js → chunk-IVBPRCQO.js} +1 -1
  386. package/dist/cli-delegate/chunk-NUHLI2RX.js +80 -0
  387. package/dist/cli-delegate/{chunk-TYSY33MD.js → chunk-QJWAUMJW.js} +12 -2
  388. package/dist/cli-delegate/{chunk-2KKXJW25.js → chunk-S3VFXMTM.js} +1 -1
  389. package/dist/cli-delegate/{chunk-I6RHFQEG.js → chunk-YUM5KURG.js} +17 -1
  390. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  391. package/dist/cli-delegate/cmd_brand_status.js +1 -1
  392. package/dist/cli-delegate/cmd_conformance.js +834 -275
  393. package/dist/cli-delegate/cmd_doctor.js +3 -3
  394. package/dist/cli-delegate/cmd_explain.js +5 -3
  395. package/dist/cli-delegate/cmd_export.js +4 -4
  396. package/dist/cli-delegate/cmd_handoff.js +6 -6
  397. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  398. package/dist/cli-delegate/cmd_memory_get.js +1 -1
  399. package/dist/cli-delegate/cmd_migrate.js +2 -2
  400. package/dist/cli-delegate/cmd_packs_active.js +3 -2
  401. package/dist/cli-delegate/cmd_prune.js +4 -4
  402. package/dist/cli-delegate/cmd_route_audit.js +3 -3
  403. package/dist/cli-delegate/cmd_route_explain.js +1 -1
  404. package/dist/cli-delegate/cmd_session_recycle.js +3 -3
  405. package/dist/cli-delegate/cmd_settings_get.js +15 -9
  406. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  407. package/dist/cli-delegate/cmd_settings_set.js +54 -11
  408. package/dist/cli-delegate/cmd_sync.js +4 -4
  409. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  410. package/dist/cli-delegate/cmd_update.js +1 -1
  411. package/dist/cli-delegate/cmd_upgrade.js +1 -1
  412. package/dist/cli-delegate/cmd_validate.js +4 -4
  413. package/dist/cli-delegate/cmd_versions.js +1 -1
  414. package/dist/discovery/deprecation-report.md +1 -1
  415. package/dist/discovery/discovery-manifest.json +25 -78
  416. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  417. package/dist/discovery/discovery-manifest.summary.md +3 -3
  418. package/dist/discovery/dormancy-report.md +1 -1
  419. package/dist/discovery/orphan-report.md +1 -1
  420. package/dist/discovery/packs.json +5 -7
  421. package/dist/discovery/trust-report.md +2 -2
  422. package/dist/discovery/workspaces.json +4 -6
  423. package/dist/hooks/dispatch.js +9684 -9304
  424. package/dist/install/install.mjs +36 -8
  425. package/dist/mcp/registry-manifest.json +3 -3
  426. package/dist/mcp/server.json +2 -2
  427. package/dist/mcp/server.mjs +2147 -1470
  428. package/dist/router.json +1 -1
  429. package/dist/scripts/_lib/agent_settings.js +73 -0
  430. package/dist/scripts/_lib/agent_src.js +20 -0
  431. package/dist/scripts/_lib/guidelines_lane.js +158 -0
  432. package/dist/scripts/_lib/installed_lock.js +1 -1
  433. package/dist/scripts/condense.js +2 -5
  434. package/dist/server/io/yamlIO.js +175 -17
  435. package/dist/server/schemas/settings.js +18 -4
  436. package/dist/shared/settingsSurface.js +6 -1
  437. package/docs/contracts/settings-classes.md +18 -9
  438. package/docs/guidelines/abstraction-thresholds.md +35 -0
  439. package/docs/guidelines/agent-infra/active-remediation-mechanics.md +3 -3
  440. package/docs/guidelines/agent-infra/false-green.md +2 -2
  441. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
  442. package/docs/guidelines/agent-infra/skill-quality-checklist.md +1 -1
  443. package/docs/guidelines/design-fidelity-mechanics.md +4 -0
  444. package/docs/guidelines/design-fidelity-routing.md +78 -0
  445. package/docs/guidelines/design-reconciliation.md +172 -0
  446. package/docs/guidelines/gtm-handoff.md +2 -2
  447. package/docs/guidelines/wing4-handoff.md +2 -2
  448. package/package.json +7 -3
  449. package/src/config/agent-settings.template.yml +55 -8
  450. package/src/config/ci-local-parity.yml +34 -0
  451. package/src/config/continuity-surface.json +11 -32
  452. package/src/config/gate-coverage.yml +31 -8
  453. package/src/config/gate-reachability-exemptions.json +1 -0
  454. package/src/config/gate-violation-baselines.json +3 -3
  455. package/src/config/hook-token-budget.json +1 -1
  456. package/src/config/host-injection-effect.json +2 -2
  457. package/src/config/pack-size-budget.json +55 -4
  458. package/src/config/platform-anchor.json +47 -0
  459. package/src/config/preamble-payload-budget.json +12 -8
  460. package/src/config/preamble-payload-exceptions.json +28 -0
  461. package/src/config/publish-surface.json +4 -2
  462. package/src/config/ratification-policy.json +7 -0
  463. package/src/config/rule-stub-ceilings.json +16 -9
  464. package/src/scripts/_cli/cmd_settings_get.ts +22 -7
  465. package/src/scripts/_dispatch.bash +3 -1
  466. package/src/scripts/_lib/agent_settings.ts +85 -0
  467. package/src/scripts/_lib/agent_src.ts +21 -0
  468. package/src/scripts/_lib/artifact_maturity.ts +242 -0
  469. package/src/scripts/_lib/base_ref_payload.ts +315 -0
  470. package/src/scripts/_lib/conformance_report.ts +403 -0
  471. package/src/scripts/_lib/continuity_writer.ts +72 -13
  472. package/src/scripts/_lib/design_system_import.ts +20 -0
  473. package/src/scripts/_lib/design_tolerance.ts +281 -0
  474. package/src/scripts/_lib/dropped_decision.ts +142 -0
  475. package/src/scripts/_lib/guidelines_lane.ts +164 -0
  476. package/src/scripts/_lib/installed_lock.ts +1 -1
  477. package/src/scripts/_lib/measured_payload_ceiling.ts +424 -0
  478. package/src/scripts/_lib/obligation_frequency.ts +2 -3
  479. package/src/scripts/_lib/payload_catalogue_completeness.ts +211 -0
  480. package/src/scripts/_lib/platform_anchor.ts +1053 -0
  481. package/src/scripts/_lib/ratification_artifact.ts +278 -0
  482. package/src/scripts/_lib/release_findings_ingest.ts +324 -0
  483. package/src/scripts/_lib/release_tag_dispatch.ts +63 -0
  484. package/src/scripts/_lib/review_baseline.ts +254 -0
  485. package/src/scripts/_lib/review_skipped_record.ts +61 -1
  486. package/src/scripts/_lib/security_lint.ts +23 -2
  487. package/src/scripts/_lib/self_repair.ts +21 -0
  488. package/src/scripts/_lib/session_index_trust.ts +42 -1
  489. package/src/scripts/_lib/standing_bound_ratchet.ts +267 -88
  490. package/src/scripts/_lib/tolerance_shadow.ts +177 -0
  491. package/src/scripts/_lib/turn_end_refusals.ts +51 -4
  492. package/src/scripts/ai_council/redact_low_impact_entry.ts +8 -0
  493. package/src/scripts/autonomy_friction_traffic.ts +379 -0
  494. package/src/scripts/check_beta_review_markers.ts +35 -4
  495. package/src/scripts/check_finding_dispositions.ts +167 -16
  496. package/src/scripts/check_held_object_arrivals.ts +381 -0
  497. package/src/scripts/check_kernel_edit_ratified.ts +462 -0
  498. package/src/scripts/check_loss_class_declared.ts +793 -46
  499. package/src/scripts/check_platform_anchor.ts +390 -0
  500. package/src/scripts/check_preamble_payload_budget.ts +672 -107
  501. package/src/scripts/check_projected_rule_routes.ts +395 -0
  502. package/src/scripts/check_release_published.ts +1 -1
  503. package/src/scripts/check_reply_consistency.ts +86 -17
  504. package/src/scripts/code_graph/cli.ts +6 -0
  505. package/src/scripts/condense.ts +2 -6
  506. package/src/scripts/generate_host_cost_table.ts +354 -0
  507. package/src/scripts/hook_manifest.json +1 -1
  508. package/src/scripts/hook_manifest.yaml +74 -30
  509. package/src/scripts/hooks/block_kernel_rule_writes.ts +12 -2
  510. package/src/scripts/hooks/category_a.ts +1 -1
  511. package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
  512. package/src/scripts/hooks/concern_registry.ts +2 -0
  513. package/src/scripts/hooks/end_review_nudge_hook.ts +101 -21
  514. package/src/scripts/hooks/review_baseline_hook.ts +130 -0
  515. package/src/scripts/hooks/session_eol_hook.ts +68 -154
  516. package/src/scripts/hooks/source_first_gate_hook.ts +12 -0
  517. package/src/scripts/hooks/turn_end_gate_hook.ts +232 -14
  518. package/src/scripts/hooks/ui_route_nudge_hook.ts +52 -15
  519. package/src/scripts/hooks_doctor.ts +4 -1
  520. package/src/scripts/hot_context_hook.ts +41 -401
  521. package/src/scripts/install.ts +1 -1
  522. package/src/scripts/interruption_report.ts +8 -2
  523. package/src/scripts/janitor.ts +8 -1
  524. package/src/scripts/lint_evidence_artifacts.ts +1 -0
  525. package/src/scripts/lint_knowledge_scale.ts +0 -26
  526. package/src/scripts/measure_turn_end_gate.ts +302 -5
  527. package/src/scripts/memory_lookup.ts +9 -9
  528. package/src/scripts/release.ts +52 -64
  529. package/src/scripts/release_drill.ts +193 -14
  530. package/src/scripts/release_env.ts +1 -1
  531. package/src/scripts/release_publication.ts +1 -1
  532. package/src/scripts/report_held_object_arrivals.ts +456 -0
  533. package/src/scripts/report_standing_payload_by_host.ts +7 -7
  534. package/src/scripts/session_memory_index.ts +5 -0
  535. package/src/scripts/sync_agent_settings.ts +394 -12
  536. package/src/server/io/yamlIO.ts +175 -17
  537. package/src/server/schemas/settings.ts +25 -5
  538. package/src/shared/settingsSurface.ts +13 -2
  539. package/src/templates/compact-instructions.md +8 -3
  540. package/dist/agent-src/commands/chat-history/import.md +0 -170
  541. package/dist/agent-src/commands/chat-history.md +0 -63
@@ -23,6 +23,31 @@
23
23
  * classifier), and this script does no per-turn matching between them.
24
24
  * R2 finding 7 removed the per-session min/max arithmetic that used to
25
25
  * report disjoint findings of equal count as full agreement.
26
+ * · DETECTORS C AND F, added 2026-09-11 for ADR-277's named open limit: that
27
+ * record ships detector F with its false-positive rate UNMEASURED and says
28
+ * so. The rate below is the fire rate over a real corpus, which is the
29
+ * upper bound on it — every fire is a turn the shipped gate would have
30
+ * refused, and how many of those were wrong still needs a human read of the
31
+ * turns. An upper bound is not a precision figure and is not reported as
32
+ * one.
33
+ * · The C-SILENT OVERLAP, which is the one number ADR-277 rests an argument
34
+ * on. The record claims detector C does not already cover F's case, and the
35
+ * evidence for it was a single unit test asserting C stays silent on F's
36
+ * input. This counts the same thing over the corpus: of the turns F fires
37
+ * on, how many did C leave alone. A low count would refute the record's own
38
+ * "two different questions deserve two detectors" and is worth finding.
39
+ * · DETECTOR E, which until 2026-09-11 was scored by NO instrument at all.
40
+ * That gap is not cosmetic: it is how a commit came to land under the title
41
+ * "detector E measured" over an evidence file measuring F, with nothing in
42
+ * the tree able to contradict it. E is also the only detector here that
43
+ * reads the turn's assistant TEXTS rather than its last reply, so it needs
44
+ * an accumulation the other four do not — built at the same two boundaries
45
+ * `readTranscriptTail` uses, for the same population-parity reason C and
46
+ * F's tool calls are.
47
+ * · It does NOT score detector D. D reads `ci_last` out of per-session
48
+ * runtime state, which no transcript carries, so a transcript-derived D
49
+ * figure would be a measurement of an absent file rather than of the
50
+ * detector.
26
51
  * · It does NOT compute recall against the 20 promissory occurrences the
27
52
  * round-5 audit reported. Those came from subagent transcript READING;
28
53
  * `conformance_scan.ts` states in its own header that promissory
@@ -39,15 +64,24 @@
39
64
  * correction and would itself need re-measuring.
40
65
  *
41
66
  * Usage:
42
- * ./scripts-run src/scripts/measure_turn_end_gate --store <dir> [--limit N]
67
+ * ./scripts-run src/scripts/measure_turn_end_gate --store <dir> [--limit N] [--show-fires]
43
68
  */
44
69
  import * as fs from 'node:fs';
45
70
  import * as path from 'node:path';
46
71
  import { fileURLToPath, pathToFileURL } from 'node:url';
47
72
 
48
73
  import { classify, isSyntheticPrompt } from './language_mirror_hook.js';
49
- import { assistantText, scanSession, userText } from './conformance_scan.js';
50
- import { detectLanguage, detectPromissory } from './hooks/turn_end_gate_hook.js';
74
+ import { assistantText, scanSession } from './conformance_scan.js';
75
+ import { entryText, isSidechain } from './_lib/transcript_entry.js';
76
+ import {
77
+ detectDroppedDecision,
78
+ detectLanguage,
79
+ detectPromissory,
80
+ detectUntestedChange,
81
+ detectUnverifiedEdit,
82
+ extractToolCalls,
83
+ type ToolCall,
84
+ } from './hooks/turn_end_gate_hook.js';
51
85
 
52
86
  interface Counts {
53
87
  /**
@@ -64,11 +98,98 @@ interface Counts {
64
98
  assistant_entries: number;
65
99
  promissory_fires: number;
66
100
  language_fires: number;
101
+ /** Detector C — an edit with nothing run after it that could have checked it. */
102
+ unverified_fires: number;
103
+ /** Detector F — production source changed, no test touched, done claimed. */
104
+ untested_fires: number;
105
+ /** Detector E — an ask made earlier in the turn, absent from the closing reply. */
106
+ dropped_fires: number;
107
+ /**
108
+ * Turns carrying two or more assistant texts — E's precondition, and the
109
+ * same thing `turns_with_edit` is for C and F. Without it a low E rate is
110
+ * unreadable: "rarely applicable" and "rarely right" are different verdicts
111
+ * and only this denominator separates them.
112
+ */
113
+ turns_multi_text: number;
114
+ /**
115
+ * E fires inside a turn that also made a tool call. E was designed from a
116
+ * stop-hook nudge producing a second assistant execution mid-turn, which is
117
+ * a tool-bearing shape; a fire OUTSIDE it is the one to read first, because
118
+ * it is the one the detector was not designed from.
119
+ */
120
+ dropped_with_tool: number;
121
+ /**
122
+ * Turns where F fired and C did NOT. ADR-277 argues C cannot stand in for
123
+ * F; this is that argument's denominator-free form. F fires minus this is
124
+ * the set both would have caught.
125
+ */
126
+ untested_c_silent: number;
127
+ /** Turns that edited at least one file — F's and C's shared precondition. */
128
+ turns_with_edit: number;
129
+ /**
130
+ * F's conditions, counted cumulatively, so a zero fire count is readable.
131
+ * A detector that never fires is either narrow-and-right or inert, and the
132
+ * difference is entirely in WHICH condition did the silencing — reporting
133
+ * only the fire count leaves that unanswerable and invites the wrong one of
134
+ * the two conclusions.
135
+ */
136
+ e1_production_source: number;
137
+ /** …and touched no test file anywhere in the turn. */
138
+ e2_no_test_touched: number;
139
+ /**
140
+ * Where F fired — session prefix and turn ordinal only, plus the detector's
141
+ * own evidence span. ADR-277's open limit is a false-POSITIVE rate, and no
142
+ * instrument can decide that: only a human reading the turn can say whether
143
+ * a refusal would have been right. This is the pointer that makes the read
144
+ * possible instead of leaving "measure it" as an instruction nobody can act
145
+ * on. Printed only under `--show-fires`, because the spans carry the
146
+ * consumer's own file paths.
147
+ */
148
+ untested_sites: { session: string; turn: number; evidence: string }[];
149
+ /**
150
+ * Where E fired, same shape and same reason as `untested_sites`: a fire
151
+ * count is an upper bound on the false-positive rate and nothing more, so
152
+ * the pointer that makes a human read possible ships with it.
153
+ */
154
+ dropped_sites: { session: string; turn: number; evidence: string }[];
67
155
  /** The independent scanner's own per-session language total, for context. */
68
156
  scanner_language: number;
69
157
  sessions: number;
70
158
  }
71
159
 
160
+ /**
161
+ * The gate's own edit-tool set, duplicated here for ONE purpose: the
162
+ * `turns_with_edit` context line. It is deliberately not re-exported from the
163
+ * hook — nothing in the measurement depends on it, so a drift between the two
164
+ * changes a printed denominator and never a scored rate.
165
+ */
166
+ const _EDIT_TOOL_NAMES = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit']);
167
+
168
+ /**
169
+ * The path shapes detector F reads, restated here for the CUMULATIVE-CONDITION
170
+ * breakdown only — never for a scored rate, which always goes through
171
+ * `detectUntestedChange` itself.
172
+ *
173
+ * Restating them is the lesser of two bad options. The alternative is exporting
174
+ * two more internals from the hook purely so a diagnostic line can be printed,
175
+ * which widens the gate's public surface for a number that is context. If these
176
+ * drift from the hook's own, the breakdown stops adding to F's fire count and
177
+ * the discrepancy is visible in the same output.
178
+ */
179
+ const _SOURCE_EXT_RE =
180
+ /\.(?:ts|tsx|js|jsx|mjs|cjs|vue|svelte|php|py|rb|go|rs|java|kt|swift|cs|scala|ex|exs)$/i;
181
+ const _TEST_DIR_RE = /(?:^|\/)(?:tests?|specs?|__tests__|__specs__|e2e|cypress|playwright|features)\//i;
182
+ const _TEST_FILE_RE =
183
+ /(?:\.(?:test|spec)\.[a-z]+$)|(?:_test\.[a-z]+$)|(?:(?:^|\/)test_[^/]+$)|(?:Test\.php$)|(?:Spec\.php$)|(?:\.feature$)/i;
184
+
185
+ function _looksTestPath(p: string): boolean {
186
+ return _TEST_DIR_RE.test(p) || _TEST_FILE_RE.test(p);
187
+ }
188
+
189
+ function _looksProductionSource(p: string): boolean {
190
+ return _SOURCE_EXT_RE.test(p) && !_looksTestPath(p);
191
+ }
192
+
72
193
  function sessionFiles(store: string, limit: number): string[] {
73
194
  let entries: string[];
74
195
  try {
@@ -96,6 +217,17 @@ export function measure(store: string, limit: number): Counts {
96
217
  assistant_entries: 0,
97
218
  promissory_fires: 0,
98
219
  language_fires: 0,
220
+ unverified_fires: 0,
221
+ untested_fires: 0,
222
+ dropped_fires: 0,
223
+ turns_multi_text: 0,
224
+ dropped_with_tool: 0,
225
+ untested_c_silent: 0,
226
+ turns_with_edit: 0,
227
+ e1_production_source: 0,
228
+ e2_no_test_touched: 0,
229
+ untested_sites: [],
230
+ dropped_sites: [],
99
231
  scanner_language: 0,
100
232
  sessions: 0,
101
233
  };
@@ -132,12 +264,76 @@ export function measure(store: string, limit: number): Counts {
132
264
  // measurement wearing the same label (R2 finding 1).
133
265
  let pendingReply: string | null = null;
134
266
  let pendingPin: 'de' | 'en' | 'und' = 'und';
267
+ // The turn's tool calls, rebuilt with the gate's OWN extractor and reset
268
+ // at every genuine user prompt — the same two rules `readTranscriptTail`
269
+ // applies. Detectors C and F read nothing else, so any divergence here
270
+ // would move the measurement off the shipped gate's population.
271
+ let pendingCalls: ToolCall[] = [];
272
+ // Detector E's whole input: the turn's assistant texts in order, reset
273
+ // on the same line the tool calls are. `readTranscriptTail` resets both
274
+ // there for one reason — a genuine user prompt ends the turn, so an ask
275
+ // it followed was answered rather than dropped — and splitting the two
276
+ // resets would measure a detector nobody ships.
277
+ //
278
+ // ONE KNOWN DIVERGENCE, stated rather than discovered later: the gate
279
+ // pushes `_messageText`'s result whenever a `text` block exists, so a
280
+ // whitespace-only reply becomes an element there and is dropped here by
281
+ // `assistantText`'s trim. It changes nothing while such a reply sits
282
+ // mid-turn — it carries no options block either way — but a
283
+ // whitespace-only CLOSING reply is E's `closing` in the gate and not
284
+ // here. Keeping one extractor for `pendingReply` and this array is the
285
+ // trade taken: the closing reply the two instruments score stays
286
+ // identical, which is the property the rest of this script rests on.
287
+ let pendingTexts: string[] = [];
288
+ // Per-SESSION, because that is the only ordinal a reader can use to find
289
+ // the turn again. `c.turns` is the corpus-wide running total, and
290
+ // labelling it "turn" in a per-session pointer sends the reader to the
291
+ // wrong turn of the right file — caught by reading the first fire this
292
+ // script reported and finding it at a different ordinal.
293
+ let sessionTurn = 0;
135
294
 
136
295
  const scoreTurn = (): void => {
137
296
  if (pendingReply === null) return;
138
297
  c.turns += 1;
298
+ sessionTurn += 1;
139
299
  if (detectPromissory(pendingReply) !== null) c.promissory_fires += 1;
140
300
  if (detectLanguage(pendingReply, pendingPin) !== null) c.language_fires += 1;
301
+ const cFired = detectUnverifiedEdit(pendingCalls) !== null;
302
+ // Named for the detector it holds. It was `eFinding` until
303
+ // 2026-09-11, holding F's finding in a file that also names a
304
+ // detector E — the same mislabel that reached a commit title.
305
+ const fFinding = detectUntestedChange(pendingReply, pendingCalls);
306
+ if (cFired) c.unverified_fires += 1;
307
+ if (fFinding !== null) {
308
+ c.untested_fires += 1;
309
+ if (!cFired) c.untested_c_silent += 1;
310
+ c.untested_sites.push({
311
+ session: sessionId,
312
+ turn: sessionTurn,
313
+ evidence: fFinding.evidence,
314
+ });
315
+ }
316
+ if (pendingTexts.length >= 2) c.turns_multi_text += 1;
317
+ const eFinding = detectDroppedDecision(pendingTexts);
318
+ if (eFinding !== null) {
319
+ c.dropped_fires += 1;
320
+ if (pendingCalls.length > 0) c.dropped_with_tool += 1;
321
+ c.dropped_sites.push({
322
+ session: sessionId,
323
+ turn: sessionTurn,
324
+ evidence: eFinding.evidence,
325
+ });
326
+ }
327
+ if (pendingCalls.some((call) => _EDIT_TOOL_NAMES.has(call.name))) {
328
+ c.turns_with_edit += 1;
329
+ }
330
+ const editedPaths = pendingCalls
331
+ .filter((call) => _EDIT_TOOL_NAMES.has(call.name) && call.path !== undefined)
332
+ .map((call) => call.path as string);
333
+ if (editedPaths.some(_looksProductionSource)) {
334
+ c.e1_production_source += 1;
335
+ if (!editedPaths.some(_looksTestPath)) c.e2_no_test_touched += 1;
336
+ }
141
337
  pendingReply = null;
142
338
  };
143
339
 
@@ -149,7 +345,7 @@ export function measure(store: string, limit: number): Counts {
149
345
  continue;
150
346
  }
151
347
 
152
- const u = userText(entry);
348
+ const u = _userTurnText(entry);
153
349
  if (u !== null) {
154
350
  // `isSyntheticPrompt`, the SAME filter the gate uses for the
155
351
  // ordinal — not `isInjectedBody`. R2 round 2, finding 10: the
@@ -159,17 +355,35 @@ export function measure(store: string, limit: number): Counts {
159
355
  // correction, so the filter has to be the same one.
160
356
  if (!isSyntheticPrompt(u)) {
161
357
  scoreTurn(); // the previous turn ends here
358
+ pendingCalls = [];
359
+ pendingTexts = [];
162
360
  const verdict = classify(u);
163
361
  if (verdict.language !== 'und') pinned = verdict.language;
164
362
  }
165
363
  continue;
166
364
  }
167
365
 
366
+ // Tool calls are collected BEFORE the text guard, exactly as the gate
367
+ // does it: an assistant entry carrying only a `tool_use` block has no
368
+ // text, so a `continue` above this line would drop precisely the
369
+ // entries detectors C and F exist to read.
370
+ if (entry['type'] === 'assistant' && !isSidechain(entry)) {
371
+ const msg = entry['message'];
372
+ if (typeof msg === 'object' && msg !== null && !Array.isArray(msg)) {
373
+ pendingCalls.push(
374
+ ...extractToolCalls((msg as Record<string, unknown>)['content']),
375
+ );
376
+ }
377
+ }
378
+
168
379
  const a = assistantText(entry);
169
380
  if (a === null || a.trim() === '') continue;
170
381
  c.assistant_entries += 1;
171
- // Overwrite: only the last one in the turn is the gate's input.
382
+ // Overwrite: only the last one in the turn is the gate's input —
383
+ // for every detector except E, which is why the append below is not
384
+ // the same statement written twice.
172
385
  pendingReply = a;
386
+ pendingTexts.push(a);
173
387
  pendingPin = pinned;
174
388
  }
175
389
  scoreTurn(); // the transcript's final turn
@@ -178,6 +392,46 @@ export function measure(store: string, limit: number): Counts {
178
392
  return c;
179
393
  }
180
394
 
395
+ /**
396
+ * The text of a user-role entry, read the way `readTranscriptTail` reads it.
397
+ *
398
+ * Deliberately NOT `conformance_scan.userText`, and the difference is the whole
399
+ * point: that reader also returns null when the text CONTAINS
400
+ * `<system-reminder>` anywhere, while the gate nulls only on a missing text
401
+ * block and then filters with `isSyntheticPrompt`, which matches the marker at
402
+ * the START. An ordinary Claude Code prompt carries an appended reminder block,
403
+ * so the two disagree on the most common user entry there is — and an entry
404
+ * this instrument skips is one where the turn never resets, merging consecutive
405
+ * genuine turns into one. That made detector E fire on asks the user had
406
+ * answered and deflated the turn denominator at the same time, which is the
407
+ * exact class of divergence the header promises parity on (R2 round 3,
408
+ * finding 1).
409
+ */
410
+ function _userTurnText(entry: Record<string, unknown>): string | null {
411
+ if (entry['type'] !== 'user' || isSidechain(entry)) return null;
412
+ const text = entryText(entry);
413
+ return text.trim() === '' ? null : text;
414
+ }
415
+
416
+ export function renderFires(c: Counts): string {
417
+ if (c.untested_sites.length === 0) return ' detector F fired on no turn in this corpus.';
418
+ return c.untested_sites
419
+ .map((site) => ` ${site.session} turn ${String(site.turn)} — ${site.evidence}`)
420
+ .join('\n');
421
+ }
422
+
423
+ /**
424
+ * E's fires, as a separate function rather than a widened `renderFires`: the
425
+ * two lists answer different questions and a caller printing one must not
426
+ * silently start printing the other.
427
+ */
428
+ export function renderDroppedFires(c: Counts): string {
429
+ if (c.dropped_sites.length === 0) return ' detector E fired on no turn in this corpus.';
430
+ return c.dropped_sites
431
+ .map((site) => ` ${site.session} turn ${String(site.turn)} — ${site.evidence}`)
432
+ .join('\n');
433
+ }
434
+
181
435
  export function render(c: Counts): string {
182
436
  const pct = (n: number): string => (c.turns === 0 ? '0.0' : ((100 * n) / c.turns).toFixed(1));
183
437
  return [
@@ -185,6 +439,42 @@ export function render(c: Counts): string {
185
439
  '',
186
440
  ` detector A (promissory) fires on ${c.promissory_fires} turns (${pct(c.promissory_fires)}%)`,
187
441
  ` detector B (language) fires on ${c.language_fires} turns (${pct(c.language_fires)}%)`,
442
+ ` detector C (unverified) fires on ${c.unverified_fires} turns (${pct(c.unverified_fires)}%)`,
443
+ ` detector E (dropped) fires on ${c.dropped_fires} turns (${pct(c.dropped_fires)}%)`,
444
+ ` detector F (untested) fires on ${c.untested_fires} turns (${pct(c.untested_fires)}%)`,
445
+ '',
446
+ ` Turns that edited a file at all: ${c.turns_with_edit} — C's and F's shared`,
447
+ ' precondition, printed so a low F rate can be read as "rarely applicable"',
448
+ ' rather than as "rarely right".',
449
+ '',
450
+ " F's three conditions, cumulative — where the silence comes from:",
451
+ ` 1. edited production source ${c.e1_production_source} turns`,
452
+ ` 2. …and touched no test file ${c.e2_no_test_touched} turns`,
453
+ ` 3. …and claimed done (= F fires) ${c.untested_fires} turns`,
454
+ ' A large drop at step 2 means the corpus writes its tests; a large drop at',
455
+ ' step 3 means the turns that did not are also not claiming to be finished.',
456
+ ' Only the first reading says the detector is narrow-and-right.',
457
+ '',
458
+ ` Turns carrying two or more assistant texts: ${c.turns_multi_text} — E's precondition,`,
459
+ ' and the same reading `turns_with_edit` supports for C and F: a turn with one',
460
+ ' reply cannot drop a question an earlier reply asked.',
461
+ ` Of E's ${c.dropped_fires} fires, ${c.dropped_with_tool} sit in a turn that also made a tool call.`,
462
+ ' That is the shape E was designed from — a stop-hook nudge or a reviewer',
463
+ ' return producing a second assistant execution inside one user turn. A fire',
464
+ ' outside it is the one to read first, being the one nothing predicted.',
465
+ '',
466
+ ` Of F's ${c.untested_fires} fires, detector C was SILENT on ${c.untested_c_silent}.`,
467
+ ' That is the number ADR-277 rests its "two different questions deserve two',
468
+ ' detectors" argument on, measured here over the corpus rather than over the',
469
+ ' one unit test that asserted it. A count at or near zero refutes the record.',
470
+ '',
471
+ ' These are FIRE RATES, never precision. Every fire is a turn the shipped gate',
472
+ ' would have refused; how many of those refusals were WRONG needs a human read',
473
+ " of the turns, and this script does not claim to have done one. ADR-277's",
474
+ ' open limit is the false-positive rate, and an upper bound is not it.',
475
+ '',
476
+ ' Detector D is absent by construction: it reads `ci_last` from per-session',
477
+ ' runtime state, which no transcript carries.',
188
478
  '',
189
479
  ' Rates are per TURN, over the last assistant text of each turn — the same',
190
480
  ' population the shipped gate inspects. The entry count is printed beside',
@@ -208,10 +498,13 @@ export function render(c: Counts): string {
208
498
  export function main(argv: string[] = process.argv.slice(2)): number {
209
499
  let store = '';
210
500
  let limit = 30;
501
+ let showFires = false;
211
502
  for (let i = 0; i < argv.length; i += 1) {
212
503
  if (argv[i] === '--store' && argv[i + 1] !== undefined) {
213
504
  store = argv[i + 1]!;
214
505
  i += 1;
506
+ } else if (argv[i] === '--show-fires') {
507
+ showFires = true;
215
508
  } else if (argv[i] === '--limit' && argv[i + 1] !== undefined) {
216
509
  // R2 finding 15: an unvalidated parseInt made `--limit abc` yield
217
510
  // NaN, `slice(0, NaN)` return nothing, and the script exit 2 with
@@ -240,6 +533,10 @@ export function main(argv: string[] = process.argv.slice(2)): number {
240
533
  return 2;
241
534
  }
242
535
  process.stdout.write(`${render(counts)}\n`);
536
+ if (showFires) {
537
+ process.stdout.write(`\n detector F fired here — read these turns before\n calling any of them a false positive:\n${renderFires(counts)}\n`);
538
+ process.stdout.write(`\n detector E fired here — same reading, same reason:\n${renderDroppedFires(counts)}\n`);
539
+ }
243
540
  return 0;
244
541
  }
245
542
 
@@ -3,12 +3,11 @@
3
3
  * File-first memory retrieval.
4
4
  *
5
5
  * Ported from the retired Python `src/scripts/memory_lookup.py` (ADR-200). The public
6
- * API and CLI contract mirror the retired Python implementation EXACTLY — same exported
7
- * names (snake_case kept deliberately, especially `retrieve(...)` whose
8
- * signature/return shape is cited by rules), same exit codes, stdout/stderr
9
- * split, byte-identical messages, same memory-file scan + ranking + JSON
10
- * output. No behaviour changes — latent Python bugs are replicated and
11
- * flagged as divergence candidates.
6
+ * API and CLI contract mirror it EXACTLY — same exported names (snake_case kept
7
+ * deliberately, especially `retrieve(...)`, whose signature and return shape are cited
8
+ * by rules), same exit codes, stdout/stderr split, byte-identical messages, same
9
+ * memory-file scan, ranking and JSON output. No behaviour changes; latent Python bugs
10
+ * are replicated and flagged as divergence candidates.
12
11
  *
13
12
  * Implements the shared `retrieve(types, keys, limit)` abstraction used
14
13
  * by skills. Reads YAML under `agents/memory/<type>/` (curated, hand-
@@ -16,9 +15,8 @@
16
15
  * append-only, supersede-chain aware), plus user-ingested `knowledge`
17
16
  * chunks and opted-in `cross-repo` matches.
18
17
  *
19
- * Retrieval is entirely repo-side and file-backed — there is no external
20
- * backend. (The former optional `@event4u/agent-memory` package routing
21
- * was removed; see `docs/decisions/` for the agent-memory removal ADR.)
18
+ * Retrieval is entirely repo-side and file-backed — no external backend. (The former
19
+ * optional `@event4u/agent-memory` routing was removed; see `docs/decisions/`.)
22
20
  *
23
21
  * Usage:
24
22
  * memory_lookup --types domain-invariants,ownership --key "app/Http/Controllers/Foo" --limit 5
@@ -26,6 +24,8 @@
26
24
  *
27
25
  * import { retrieve } from './memory_lookup.js';
28
26
  * const hits = retrieve(['ownership'], ['app/Http'], 3);
27
+ * loss_class: recoverable-lossy
28
+ * loss_recovery: the envelope's `truncation.omitted` plus its next-path hint under `agents/memory/`.
29
29
  */
30
30
 
31
31
  import * as fs from 'node:fs';