@event4u/agent-config 16.0.0 → 16.2.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 (382) 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 +289 -140
  5. package/CONTRIBUTING.md +9 -0
  6. package/README.md +2 -2
  7. package/dist/agent-src/commands/analyze/inbox.md +26 -0
  8. package/dist/agent-src/commands/analyze/roadmap-repos.md +27 -0
  9. package/dist/agent-src/commands/challenge-me/closure.md +178 -0
  10. package/dist/agent-src/commands/challenge-me.md +9 -2
  11. package/dist/agent-src/commands/council/default.md +25 -5
  12. package/dist/agent-src/commands/feature/plan.md +28 -1
  13. package/dist/agent-src/commands/feature/roadmap.md +28 -1
  14. package/dist/agent-src/commands/implement-ticket.md +27 -0
  15. package/dist/agent-src/commands/jira-ticket.md +27 -0
  16. package/dist/agent-src/commands/pr/create.md +29 -0
  17. package/dist/agent-src/commands/pr/merge.md +60 -9
  18. package/dist/agent-src/commands/roadmap/ai-council.md +7 -1
  19. package/dist/agent-src/commands/roadmap/create.md +74 -27
  20. package/dist/agent-src/commands/roadmap/materialize.md +27 -0
  21. package/dist/agent-src/commands/roadmap/process-full.md +123 -18
  22. package/dist/agent-src/commands/team.md +22 -0
  23. package/dist/agent-src/commands/work.md +4 -0
  24. package/dist/agent-src/contexts/authority/scope-growth-ownership.md +80 -0
  25. package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +47 -0
  26. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +44 -3
  27. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +19 -23
  28. package/dist/agent-src/contexts/execution/decision-closure-execution.md +93 -0
  29. package/dist/agent-src/contexts/execution/fix-loop-ladder.md +108 -0
  30. package/dist/agent-src/contexts/execution/plan-confidence-gate.md +4 -2
  31. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +75 -6
  32. package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +57 -0
  33. package/dist/agent-src/guidelines/agent-infra/evaluator-independence-mechanics.md +102 -0
  34. package/dist/agent-src/guidelines/design-fidelity-routing.md +29 -0
  35. package/dist/agent-src/rules/autonomous-execution.md +15 -8
  36. package/dist/agent-src/rules/delegation-policy.md +23 -45
  37. package/dist/agent-src/rules/design-fidelity.md +32 -37
  38. package/dist/agent-src/rules/evaluator-independence.md +43 -49
  39. package/dist/agent-src/rules/test-first.md +41 -0
  40. package/dist/agent-src/rules/ui-audit-gate.md +1 -2
  41. package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +1 -1
  42. package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +3 -3
  43. package/dist/agent-src/skills/ai-council/SKILL.md +11 -3
  44. package/dist/agent-src/skills/api-design/data/manifest.json +3 -3
  45. package/dist/agent-src/skills/database/data/manifest.json +4 -4
  46. package/dist/agent-src/skills/database/data/query-tuning.csv +3 -3
  47. package/dist/agent-src/skills/design-review/SKILL.md +80 -4
  48. package/dist/agent-src/skills/design-review/references/verification-automation.md +32 -0
  49. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +30 -5
  50. package/dist/agent-src/skills/existing-ui-audit/references/component-taxonomy-detection.md +56 -0
  51. package/dist/agent-src/skills/experiment-loop/SKILL.md +31 -1
  52. package/dist/agent-src/skills/markitdown/SKILL.md +4 -0
  53. package/dist/agent-src/skills/playwright-testing/SKILL.md +30 -6
  54. package/dist/agent-src/skills/roadmap-writing/SKILL.md +1 -1
  55. package/dist/agent-src/skills/storybook-workshop/SKILL.md +42 -3
  56. package/dist/agent-src/skills/threat-modeling/SKILL.md +9 -4
  57. package/dist/agent-src/skills/threat-modeling/data/manifest.json +4 -4
  58. package/dist/agent-src/skills/ui-component-architect/SKILL.md +23 -0
  59. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +37 -3
  60. package/dist/agent-src/templates/agent-settings.md +1 -1
  61. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  62. package/dist/agent-src/templates/roadmaps.md +218 -0
  63. package/dist/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +62 -2
  64. package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +1 -0
  65. package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +1 -0
  66. package/dist/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
  67. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +260 -21
  68. package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
  69. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
  70. package/dist/agent-src/templates/scripts/work_engine/state.ts +57 -7
  71. package/dist/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
  72. package/dist/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
  73. package/dist/cli/python/knowledge_ingest.js +1 -1
  74. package/dist/cli/python/workspace_drive.js +1 -1
  75. package/dist/cli-delegate/check_update_banner.js +40 -2
  76. package/dist/cli-delegate/chunk-4E2W63DA.js +335 -0
  77. package/dist/cli-delegate/{chunk-S3VFXMTM.js → chunk-4XFP2Y3E.js} +1 -1
  78. package/dist/cli-delegate/chunk-5R7HOLAF.js +99 -0
  79. package/dist/cli-delegate/{chunk-IVBPRCQO.js → chunk-6KFEC3G7.js} +1 -1
  80. package/dist/cli-delegate/{chunk-2TAQ2K4V.js → chunk-6KM6ORRY.js} +55 -386
  81. package/dist/cli-delegate/{chunk-AK6HODNQ.js → chunk-7XGBX6ZH.js} +973 -555
  82. package/dist/cli-delegate/{chunk-2XY7ILBT.js → chunk-FC75PGJE.js} +42 -2
  83. package/dist/cli-delegate/{chunk-55ACLDUE.js → chunk-FP36SWJD.js} +587 -141
  84. package/dist/cli-delegate/{chunk-3FKR64R5.js → chunk-IGD6ERX6.js} +62 -7
  85. package/dist/cli-delegate/{chunk-GYC3VRYN.js → chunk-JNMVLWLR.js} +99 -14
  86. package/dist/cli-delegate/{chunk-H32DGUJH.js → chunk-P6ZHP5W2.js} +1 -1
  87. package/dist/cli-delegate/{chunk-57PN4GYJ.js → chunk-RGNIWTEA.js} +1 -1
  88. package/dist/cli-delegate/chunk-ROYYTEZU.js +39 -0
  89. package/dist/cli-delegate/{chunk-2DK2VJWG.js → chunk-WGXTVKCQ.js} +20 -6
  90. package/dist/cli-delegate/chunk-YDPILCOL.js +152 -0
  91. package/dist/cli-delegate/{chunk-QJWAUMJW.js → chunk-YJ72UIAK.js} +730 -15
  92. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  93. package/dist/cli-delegate/cmd_brand_status.js +1 -1
  94. package/dist/cli-delegate/cmd_conformance.js +985 -831
  95. package/dist/cli-delegate/cmd_doctor.js +7 -5
  96. package/dist/cli-delegate/cmd_explain.js +2 -2
  97. package/dist/cli-delegate/cmd_export.js +9 -7
  98. package/dist/cli-delegate/cmd_fleet.js +4 -2
  99. package/dist/cli-delegate/cmd_handoff.js +7 -7
  100. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  101. package/dist/cli-delegate/cmd_memory_get.js +1 -1
  102. package/dist/cli-delegate/cmd_migrate.js +2 -2
  103. package/dist/cli-delegate/cmd_packs_active.js +2 -2
  104. package/dist/cli-delegate/cmd_preflight.js +4 -2
  105. package/dist/cli-delegate/cmd_prune.js +10 -8
  106. package/dist/cli-delegate/cmd_route_audit.js +3 -3
  107. package/dist/cli-delegate/cmd_route_explain.js +1 -1
  108. package/dist/cli-delegate/cmd_session_recycle.js +4 -4
  109. package/dist/cli-delegate/cmd_settings_get.js +28 -2
  110. package/dist/cli-delegate/cmd_settings_migrate.js +9 -7
  111. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  112. package/dist/cli-delegate/cmd_sync.js +10 -8
  113. package/dist/cli-delegate/cmd_uninstall.js +16 -13
  114. package/dist/cli-delegate/cmd_update.js +1 -1
  115. package/dist/cli-delegate/cmd_upgrade.js +1 -1
  116. package/dist/cli-delegate/cmd_validate.js +12 -10
  117. package/dist/cli-delegate/cmd_versions.js +1 -1
  118. package/dist/discovery/deprecation-report.md +1 -1
  119. package/dist/discovery/discovery-manifest.json +90 -43
  120. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  121. package/dist/discovery/discovery-manifest.summary.md +4 -4
  122. package/dist/discovery/dormancy-report.md +1 -1
  123. package/dist/discovery/orphan-report.md +1 -1
  124. package/dist/discovery/packs.json +10 -8
  125. package/dist/discovery/trust-report.md +3 -3
  126. package/dist/discovery/workspaces.json +8 -6
  127. package/dist/hooks/dispatch.js +7682 -2772
  128. package/dist/hooks/dispatch.sha256 +1 -0
  129. package/dist/install/claudeRuleRewrite.js +14 -3
  130. package/dist/install/conflict.js +60 -10
  131. package/dist/install/conflictTracker.js +218 -0
  132. package/dist/install/fsPrimitives.js +54 -0
  133. package/dist/install/install.mjs +2200 -1559
  134. package/dist/install/manifestFiles.js +259 -0
  135. package/dist/install/preflight.js +14 -2
  136. package/dist/install/preserve.js +157 -0
  137. package/dist/install/recordedOwnership.js +132 -0
  138. package/dist/install/txlog.js +11 -2
  139. package/dist/mcp/registry-manifest.json +3 -3
  140. package/dist/mcp/server.json +2 -2
  141. package/dist/mcp/server.mjs +3066 -1470
  142. package/dist/router.json +1 -1
  143. package/dist/scripts/_lib/agent_settings.js +3 -2
  144. package/dist/scripts/_lib/fs_atomic.js +167 -0
  145. package/dist/scripts/_lib/installed_tools.js +460 -0
  146. package/dist/scripts/_lib/lean_projection_mode.js +3 -2
  147. package/dist/scripts/_lib/settings_renamed_keys.js +78 -0
  148. package/dist/server/routes/install.js +8 -0
  149. package/dist/server/routes/wizard.js +9 -3
  150. package/dist/server/schemas/settings.js +40 -5
  151. package/dist/shared/missionExecution.js +97 -0
  152. package/dist/ui/assets/index-Cwq4d0hX.js +23 -0
  153. package/dist/ui/assets/index-Cyjy8bWO.css +1 -0
  154. package/dist/ui/index.html +2 -2
  155. package/docs/MIGRATION.md +103 -0
  156. package/docs/contracts/settings-classes.md +28 -7
  157. package/docs/guidelines/agent-infra/active-remediation-mechanics.md +57 -0
  158. package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +102 -0
  159. package/docs/guidelines/design-fidelity-routing.md +29 -0
  160. package/package.json +4 -4
  161. package/src/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +62 -2
  162. package/src/agent-src/templates/scripts/work_engine/directives/backend/test.ts +1 -0
  163. package/src/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +1 -0
  164. package/src/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
  165. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +260 -21
  166. package/src/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
  167. package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
  168. package/src/agent-src/templates/scripts/work_engine/state.ts +57 -7
  169. package/src/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
  170. package/src/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
  171. package/src/config/agent-settings.template.yml +168 -27
  172. package/src/config/auto-rule-budget.json +16 -0
  173. package/src/config/ci-local-parity.yml +36 -5
  174. package/src/config/continuity-surface.json +23 -2
  175. package/src/config/gate-coverage.yml +377 -13
  176. package/src/config/gate-violation-baselines.json +10 -6
  177. package/src/config/hook-latency-budget.json +21 -0
  178. package/src/config/hook-token-budget.json +4 -2
  179. package/src/config/loop-surfaces.yaml +215 -0
  180. package/src/config/metric-registry.yml +114 -0
  181. package/src/config/placeholder-drift-budget.json +10 -0
  182. package/src/config/platform-anchor.json +3 -2
  183. package/src/config/release-gate-locality.yml +11 -0
  184. package/src/config/routing-coverage-seed.json +33 -5
  185. package/src/config/rule-enforcement-baseline.json +0 -1
  186. package/src/install/claudeRuleRewrite.ts +16 -2
  187. package/src/install/conflict.ts +65 -9
  188. package/src/install/conflictTracker.ts +299 -0
  189. package/src/install/fsPrimitives.ts +54 -0
  190. package/src/install/manifestFiles.ts +312 -0
  191. package/src/install/preflight.ts +16 -2
  192. package/src/install/preserve.ts +205 -0
  193. package/src/install/recordedOwnership.ts +149 -0
  194. package/src/install/txlog.ts +11 -2
  195. package/src/install/types.ts +19 -4
  196. package/src/scripts/_cli/cmd_conformance.ts +88 -15
  197. package/src/scripts/_cli/cmd_doctor.ts +7 -20
  198. package/src/scripts/_cli/cmd_route_explain.ts +9 -2
  199. package/src/scripts/_cli/cmd_settings_get.ts +44 -0
  200. package/src/scripts/_cli/doctor_execution.ts +173 -0
  201. package/src/scripts/_cli/doctor_network_posture.ts +226 -0
  202. package/src/scripts/_lib/activation_payload.ts +247 -0
  203. package/src/scripts/_lib/agent_settings.ts +4 -2
  204. package/src/scripts/_lib/authority_path.ts +102 -0
  205. package/src/scripts/_lib/body_portable.ts +102 -0
  206. package/src/scripts/_lib/cascade_base.ts +94 -0
  207. package/src/scripts/_lib/cc_transcript.ts +132 -1
  208. package/src/scripts/_lib/changelog_eras.ts +7 -2
  209. package/src/scripts/_lib/concern_sla_window.ts +200 -0
  210. package/src/scripts/_lib/continuation_ladder.ts +149 -2
  211. package/src/scripts/_lib/council_transport.ts +129 -0
  212. package/src/scripts/_lib/delivery_ready.ts +112 -0
  213. package/src/scripts/_lib/forge_protection.ts +381 -0
  214. package/src/scripts/_lib/forge_reader.ts +558 -0
  215. package/src/scripts/_lib/hook_platform_keys.ts +27 -0
  216. package/src/scripts/_lib/host_env_write.ts +111 -0
  217. package/src/scripts/_lib/json_python_parity.ts +127 -0
  218. package/src/scripts/_lib/lean_projection_mode.ts +14 -3
  219. package/src/scripts/_lib/llm_proposer_transport.ts +14 -4
  220. package/src/scripts/_lib/loop_surfaces.ts +382 -0
  221. package/src/scripts/_lib/mission_record.ts +190 -0
  222. package/src/scripts/_lib/obligation_frequency.ts +217 -0
  223. package/src/scripts/_lib/obligations.ts +513 -0
  224. package/src/scripts/_lib/orchestration_record.ts +11 -20
  225. package/src/scripts/_lib/probe_inputs.ts +271 -0
  226. package/src/scripts/_lib/read_surface_scan.ts +322 -0
  227. package/src/scripts/_lib/release_highlights.ts +201 -11
  228. package/src/scripts/_lib/release_holds.ts +493 -0
  229. package/src/scripts/_lib/release_migration_gate.ts +184 -0
  230. package/src/scripts/_lib/retrieval_sanitize.ts +77 -16
  231. package/src/scripts/_lib/rides_along.ts +102 -0
  232. package/src/scripts/_lib/settings_renamed_keys.ts +82 -0
  233. package/src/scripts/_lib/shell_write_shapes.ts +108 -0
  234. package/src/scripts/_lib/structural_hiding.ts +622 -0
  235. package/src/scripts/_lib/test_delta.ts +166 -0
  236. package/src/scripts/_lib/test_provenance.ts +171 -0
  237. package/src/scripts/_lib/turn_end_refusals.ts +525 -4
  238. package/src/scripts/_lib/turn_end_transcript.ts +216 -0
  239. package/src/scripts/_lib/typed_op_grant.ts +246 -0
  240. package/src/scripts/_lib/typed_op_watch.ts +185 -0
  241. package/src/scripts/_lib/verification_command.ts +324 -0
  242. package/src/scripts/_lib/verification_evidence.ts +647 -0
  243. package/src/scripts/_lib/verify_clause.ts +280 -0
  244. package/src/scripts/ai_council/config.ts +8 -11
  245. package/src/scripts/ai_council/fallback_config.ts +5 -3
  246. package/src/scripts/ai_council/ownership_classes.ts +118 -0
  247. package/src/scripts/ai_team/team_dispatch.ts +4 -0
  248. package/src/scripts/ask_block_census.ts +285 -15
  249. package/src/scripts/before_complete_hook.ts +340 -23
  250. package/src/scripts/bench_hook_latency.ts +412 -5
  251. package/src/scripts/cache_realization_report.ts +61 -1
  252. package/src/scripts/check_argument_hint.ts +287 -0
  253. package/src/scripts/check_claims.ts +125 -1
  254. package/src/scripts/check_enforcement_coverage.ts +38 -9
  255. package/src/scripts/check_enforcement_matrix.ts +866 -0
  256. package/src/scripts/check_finding_dispositions.ts +22 -3
  257. package/src/scripts/check_gate_reachability.ts +173 -10
  258. package/src/scripts/check_generator_sync.ts +1025 -0
  259. package/src/scripts/check_host_docs_digest.ts +786 -0
  260. package/src/scripts/check_host_format_column.ts +559 -0
  261. package/src/scripts/check_input_references.ts +228 -0
  262. package/src/scripts/check_inputs_parity.ts +235 -0
  263. package/src/scripts/check_kernel_edit_ratified.ts +47 -5
  264. package/src/scripts/check_kill_switch_table.ts +294 -0
  265. package/src/scripts/check_placeholder_drift.ts +221 -0
  266. package/src/scripts/check_preamble_payload_budget.ts +75 -2
  267. package/src/scripts/check_read_surface_coverage.ts +515 -0
  268. package/src/scripts/check_release_highlights.ts +33 -1
  269. package/src/scripts/check_release_holds.ts +568 -0
  270. package/src/scripts/check_routing_coverage.ts +378 -11
  271. package/src/scripts/check_rule_projection_integrity.ts +22 -12
  272. package/src/scripts/check_static_parity.ts +17 -0
  273. package/src/scripts/check_test_delta.ts +294 -0
  274. package/src/scripts/check_test_weakening.ts +299 -0
  275. package/src/scripts/ci_settle.ts +145 -19
  276. package/src/scripts/closure_scan.ts +447 -0
  277. package/src/scripts/compile_hook_manifest.ts +102 -18
  278. package/src/scripts/council_record_shape.ts +209 -0
  279. package/src/scripts/external_sources_denylist.json +29 -4
  280. package/src/scripts/hook_manifest.json +1 -1
  281. package/src/scripts/hook_manifest.yaml +127 -11
  282. package/src/scripts/hooks/block_config_weakening.ts +229 -4
  283. package/src/scripts/hooks/block_kernel_rule_writes.ts +9 -78
  284. package/src/scripts/hooks/block_plumbing_writes.ts +314 -0
  285. package/src/scripts/hooks/bundle_integrity.ts +291 -0
  286. package/src/scripts/hooks/chain_nudge_hook.ts +1 -2
  287. package/src/scripts/hooks/code_graph_context_hook.ts +1 -2
  288. package/src/scripts/hooks/comment_discipline_hook.ts +1 -3
  289. package/src/scripts/hooks/concern_registry.ts +6 -0
  290. package/src/scripts/hooks/concern_timings.ts +94 -0
  291. package/src/scripts/hooks/delegation_nudge_hook.ts +1 -2
  292. package/src/scripts/hooks/design_pass_hook.ts +221 -5
  293. package/src/scripts/hooks/design_slop_hook.ts +1 -2
  294. package/src/scripts/hooks/dispatch_hook.ts +25 -19
  295. package/src/scripts/hooks/edit_shape_hook.ts +1 -2
  296. package/src/scripts/hooks/end_review_nudge_hook.ts +1 -1
  297. package/src/scripts/hooks/evidence_independence.ts +97 -2
  298. package/src/scripts/hooks/exit_codes.ts +128 -0
  299. package/src/scripts/hooks/host_lowering.json +1 -0
  300. package/src/scripts/hooks/host_lowering.ts +128 -3
  301. package/src/scripts/hooks/host_lowering.yaml +262 -46
  302. package/src/scripts/hooks/host_semantics.ts +30 -2
  303. package/src/scripts/hooks/injection_budget.ts +9 -2
  304. package/src/scripts/hooks/interruption_ledger_hook.ts +1 -2
  305. package/src/scripts/hooks/journal_record_hook.ts +1 -2
  306. package/src/scripts/hooks/memory_recall_hook.ts +539 -0
  307. package/src/scripts/hooks/obligation_settle_hook.ts +328 -0
  308. package/src/scripts/hooks/one_question_per_ask_hook.ts +25 -4
  309. package/src/scripts/hooks/orchestration_record_hook.ts +1 -2
  310. package/src/scripts/hooks/permission_gate.ts +1 -2
  311. package/src/scripts/hooks/push_settle_hook.ts +1 -3
  312. package/src/scripts/hooks/replay_hook.ts +2 -1
  313. package/src/scripts/hooks/reread_guard_hook.ts +1 -2
  314. package/src/scripts/hooks/review_baseline_hook.ts +1 -2
  315. package/src/scripts/hooks/rtk_wrap_hook.ts +1 -2
  316. package/src/scripts/hooks/rule_inject_hook.ts +55 -4
  317. package/src/scripts/hooks/run_continuation_hook.ts +30 -35
  318. package/src/scripts/hooks/skill_route_hook.ts +1 -2
  319. package/src/scripts/hooks/source_first_gate_hook.ts +1 -2
  320. package/src/scripts/hooks/spawn_guard_shadow_hook.ts +1 -2
  321. package/src/scripts/hooks/subagent_ledger_hook.ts +1 -2
  322. package/src/scripts/hooks/suggestion_capture_hook.ts +1 -1
  323. package/src/scripts/hooks/table_fingerprint.ts +49 -0
  324. package/src/scripts/hooks/telemetry_flush_hook.ts +1 -2
  325. package/src/scripts/hooks/telemetry_usage_hook.ts +1 -2
  326. package/src/scripts/hooks/tool_result_bytes_hook.ts +93 -9
  327. package/src/scripts/hooks/turn_end_gate_hook.ts +337 -324
  328. package/src/scripts/hooks/ui_route_nudge_hook.ts +1 -2
  329. package/src/scripts/hooks_doctor.ts +85 -0
  330. package/src/scripts/hooks_status.ts +19 -0
  331. package/src/scripts/install.ts +109 -210
  332. package/src/scripts/janitor.ts +7 -0
  333. package/src/scripts/lint_decision_classes.ts +464 -0
  334. package/src/scripts/lint_deny_text.ts +419 -0
  335. package/src/scripts/lint_exit_codes.ts +262 -0
  336. package/src/scripts/lint_hook_manifest.ts +66 -0
  337. package/src/scripts/lint_major_migration_sections.ts +450 -0
  338. package/src/scripts/lint_plan_risk_register.ts +47 -3
  339. package/src/scripts/lint_roadmap_blockers.ts +139 -12
  340. package/src/scripts/lint_roadmap_producers.ts +202 -0
  341. package/src/scripts/lint_skill_descriptions.ts +1 -1
  342. package/src/scripts/lint_skill_scripts_readonly.ts +1 -1
  343. package/src/scripts/mcp_server/prompts.ts +142 -1
  344. package/src/scripts/measure_rule_budget.ts +101 -5
  345. package/src/scripts/measure_skill_ranker_baseline.ts +305 -51
  346. package/src/scripts/measure_turn_end_gate.ts +193 -0
  347. package/src/scripts/memory_lookup.ts +1 -1
  348. package/src/scripts/new_roadmap.ts +37 -0
  349. package/src/scripts/orchestration_record.ts +0 -5
  350. package/src/scripts/prepack-check.mjs +53 -0
  351. package/src/scripts/release.ts +14 -98
  352. package/src/scripts/release_drill.ts +267 -1
  353. package/src/scripts/release_publication.ts +64 -1
  354. package/src/scripts/report_enforcement_drift.ts +566 -0
  355. package/src/scripts/report_host_injection_effect.ts +3 -11
  356. package/src/scripts/report_invocation_surface.ts +383 -0
  357. package/src/scripts/report_obligation_carriers.ts +699 -0
  358. package/src/scripts/report_obligation_writer_split.ts +236 -0
  359. package/src/scripts/report_skill_menu_census.ts +208 -0
  360. package/src/scripts/report_standing_payload_by_host.ts +26 -152
  361. package/src/scripts/roadmap_verify_share.ts +213 -0
  362. package/src/scripts/schemas/agent-settings.schema.json +23 -0
  363. package/src/scripts/schemas/command.schema.json +48 -0
  364. package/src/scripts/schemas/review-findings.schema.json +4 -0
  365. package/src/scripts/schemas/skill.schema.json +44 -0
  366. package/src/scripts/scope_growth.ts +219 -0
  367. package/src/scripts/self_review_gate.ts +359 -10
  368. package/src/scripts/semantic_parity_census.ts +314 -0
  369. package/src/scripts/session_eol_report.ts +54 -1
  370. package/src/scripts/sweep_dead_scan_roots.ts +1 -1
  371. package/src/scripts/trigger_eval_grandfather.json +0 -3
  372. package/src/scripts/trigger_eval_rotation.ts +122 -27
  373. package/src/scripts/ui_conformance_probe.ts +774 -0
  374. package/src/scripts/update_prices.ts +85 -3
  375. package/src/scripts/write_bundle_digest.mjs +74 -0
  376. package/src/server/schemas/settings.ts +62 -7
  377. package/src/shared/missionExecution.ts +126 -0
  378. package/src/templates/consumer-settings/ONBOARDING.md +1 -0
  379. package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
  380. package/dist/ui/assets/index-D0jaCRPM.js +0 -29
  381. package/dist/ui/assets/index-jSfMW8_t.css +0 -1
  382. /package/dist/cli-delegate/{chunk-YUM5KURG.js → chunk-7RQP4UDH.js} +0 -0
@@ -16,26 +16,58 @@
16
16
  * Codepoint classes are shared with `lint_hidden_unicode` (one source of truth
17
17
  * for what counts as a hidden-instruction vector).
18
18
  *
19
- * WHERE IT ACTUALLY RUNS — measured end-to-end, not asserted. Keep this list
20
- * honest: an earlier version of this header named surfaces by intent, and the
21
- * legacy-envelope gap below went unnoticed for exactly that reason. Every
22
- * claim here is backed by a probe row in
23
- * `agents/evidence/reports/sanitize-floor-wiring.md`:
19
+ * WHERE IT ACTUALLY RUNS — read the table, which is GENERATED:
24
20
  *
25
- * - `retrieve_v1()` — yes (`memory_lookup.ts` calls `sanitize_entry`)
26
- * - `memory_get_v1()` — yes (same)
27
- * - MCP `memory_lookup` / `memory_get` tools — inherited from the two above
28
- * - `retrieve()` / `retrieve_with_meta()` — yes, since the S0.0 wiring fix;
29
- * before it they emitted every vector intact, and so did the CLI default
30
- * (`--envelope legacy`), which is the path the rules document
31
- * - inter-agent channels (`ai_team` / `ai_council` model replies) — the
32
- * inbound parse choke point only; the subagent boundary itself is a HOST
33
- * primitive this package cannot reach (see the report, § S0.0b)
21
+ * docs/contracts/retrieval-read-surfaces.md
34
22
  *
35
- * Anything not on that list is uncovered. Do not widen the list without a
36
- * probe row to back it.
23
+ * This header used to carry that list inline, and the list was wrong in BOTH
24
+ * directions: a path that reaches the outside world and IS sanitized was
25
+ * absent from it, and two paths carrying fetched bytes toward a model-facing
26
+ * surface were neither listed nor covered. An earlier version had already
27
+ * failed the same way — it named surfaces by intent, and the legacy-envelope
28
+ * gap went unnoticed for exactly that reason. Twice is a property of the
29
+ * mechanism, not of the entries, which is why the list is now derived from the
30
+ * import graph by `check_read_surface_coverage` and this header points at it
31
+ * instead of copying it. A divergence between the two FAILS that gate; two
32
+ * copies is how it went stale.
33
+ *
34
+ * Anything absent from the table is uncovered, and a module the generator
35
+ * cannot classify appears there as an `unclassified` ROW rather than being
36
+ * omitted — a missing row would read as no surface at all.
37
+ *
38
+ * One boundary the table cannot move: the subagent boundary itself is a HOST
39
+ * primitive this package cannot reach, so the inter-agent channels are covered
40
+ * at the inbound parse choke point and nowhere else.
41
+ *
42
+ * loss_class: ephemeral-lossy
43
+ *
44
+ * `sanitize_text` drops hidden-instruction codepoints, control-char noise and
45
+ * invisible fillers, and caps the result at MAX_FIELD_CHARS. None of that is
46
+ * reconstructible from the output, and for the dropped vectors the
47
+ * unrecoverability IS the guarantee — a retrieval path that could hand back
48
+ * the vector it stripped would not be a floor. So the class is
49
+ * `ephemeral-lossy` for the module, even though `sanitize_markup` below
50
+ * returns structured removals for the layer it composes: a class names what a
51
+ * caller can recover from the output, and `sanitize_text` returns a string.
52
+ *
53
+ * THE STRUCTURAL LAYER IS A SEPARATE MODULE. Everything below is a CODEPOINT
54
+ * floor. Fetched markup also hides content STRUCTURALLY — an HTML comment, a
55
+ * `<template>` block, a `style="display:none"` span — which no codepoint
56
+ * predicate can see. That class is covered by `_lib/structural_hiding.ts`,
57
+ * composed with this floor by `sanitize_markup` below, and it is covered for
58
+ * fetched MARKUP only: a caller holding plain text needs nothing from it.
59
+ *
60
+ * WHAT THAT LAYER STILL DOES NOT SEE is a register in its own file —
61
+ * `STRUCTURAL_HIDING_GAPS` — and every surface claiming the coverage cites the
62
+ * register alongside the claim, because a detector cited without its gaps is
63
+ * how the claim becomes a false green. No recall or coverage percentage is
64
+ * published for it anywhere; a rate needs a frozen corpus and none exists.
65
+ * `aria-hidden` is deliberately NOT one of its channels
66
+ * (`STRUCTURAL_HIDING_NON_CHANNELS` says why).
37
67
  */
38
68
  import { _classify } from '../lint_hidden_unicode.js';
69
+ import { strip_structural_hiding } from './structural_hiding.js';
70
+ import type { StructuralRemoval } from './structural_hiding.js';
39
71
  import { TOKEN_RE, classifyToken } from './confusables.js';
40
72
 
41
73
  /** Hard per-field length cap — bounds a runaway/adversarial body. */
@@ -85,6 +117,35 @@ export function sanitize_text(s: string): string {
85
117
  return out.length > MAX_FIELD_CHARS ? out.slice(0, MAX_FIELD_CHARS) : out;
86
118
  }
87
119
 
120
+ /**
121
+ * The fetched-markup floor: structural pre-pass, then the codepoint floor.
122
+ *
123
+ * ORDER IS LOAD-BEARING. The structural pass runs FIRST, because a codepoint
124
+ * floor applied first would sanitize text that is about to be discarded and,
125
+ * worse, would leave a hidden subtree looking clean. Running it second means
126
+ * every byte that survives the structural pass still clears the codepoint
127
+ * floor — including the text that was only reachable once markup was removed.
128
+ *
129
+ * Use this for fetched MARKUP. For plain text `sanitize_text` is the whole
130
+ * floor and this adds nothing but a parse.
131
+ *
132
+ * The removals are RETURNED, not logged and not swallowed: a caller debugging
133
+ * a corrupted result needs to know what went and where it was. See the removal
134
+ * policy in `structural_hiding.ts`.
135
+ */
136
+ export function sanitize_markup(markup: string): {
137
+ text: string;
138
+ removals: readonly StructuralRemoval[];
139
+ truncated: boolean;
140
+ } {
141
+ const stripped = strip_structural_hiding(markup);
142
+ return {
143
+ text: sanitize_text(stripped.text),
144
+ removals: stripped.removals,
145
+ truncated: stripped.truncated,
146
+ };
147
+ }
148
+
88
149
  /**
89
150
  * Report the INVISIBLE layer without removing it.
90
151
  *
@@ -0,0 +1,102 @@
1
+ /**
2
+ * What rides along during a mission — `road-to-adversarial-verification-and-long-runs`
3
+ * 6.1.
4
+ *
5
+ * `active-remediation`'s ladder is fix-now / note+ask / follow-up PR, and its
6
+ * middle rung is unavailable inside an autonomous mission: there is nobody to
7
+ * ask. Without a replacement the rung collapses in one of two bad directions —
8
+ * every spotted issue becomes a fix (scope creep, which `minimal-safe-diff`
9
+ * exists to stop) or every one becomes silence (which `active-remediation`
10
+ * exists to stop). So under a mission the middle rung becomes **emit a follow-up
11
+ * artefact**, and this module decides which rung a candidate lands on.
12
+ *
13
+ * **Six criteria, ALL of which must hold.** They are `AND`-ed rather than scored
14
+ * because a scored version lets a large change buy its way in with four cheap
15
+ * yeses, which is the shape that turns a boy-scout rule into a refactor licence.
16
+ *
17
+ * Pure: the caller characterises the change, this decides. The characterisation
18
+ * is a judgement and stays the agent's; the DECISION is mechanical so it is the
19
+ * same for the same inputs.
20
+ */
21
+
22
+ /** What the agent observed about a candidate improvement. */
23
+ export interface Candidate {
24
+ /** What it is. Used only in the rendered line. */
25
+ readonly what: string;
26
+ /** In the same request path / module the mission is already touching. */
27
+ readonly local: boolean;
28
+ /** Small: roughly a handful of lines in one production file. */
29
+ readonly small: boolean;
30
+ /** Low blast radius — nothing outside this module observes the change. */
31
+ readonly lowBlastRadius: boolean;
32
+ /** Clearly correct: a reviewer would not need to be persuaded. */
33
+ readonly clearlyCorrect: boolean;
34
+ /** Testable, and the test ships in the same commit. */
35
+ readonly testable: boolean;
36
+ /** Carries NO new product decision — nothing about what the thing should do. */
37
+ readonly noProductDecision: boolean;
38
+ }
39
+
40
+ /** The kinds of improvement a mission may take at all. */
41
+ export const RIDE_ALONG_KINDS: readonly string[] = [
42
+ 'characterization-test',
43
+ 'regression-test',
44
+ 'small-adjacent-bug',
45
+ 'naming',
46
+ 'types',
47
+ 'robustness',
48
+ 'local-dead-code',
49
+ 'simplify-touched-code',
50
+ 'testability',
51
+ ] as const;
52
+
53
+ export type Disposition = 'ride-along' | 'follow-up-artefact';
54
+
55
+ export interface Verdict {
56
+ readonly disposition: Disposition;
57
+ /** Every criterion that failed, in declaration order. Empty on ride-along. */
58
+ readonly failed: readonly string[];
59
+ }
60
+
61
+ const CRITERIA: readonly (readonly [keyof Candidate, string])[] = [
62
+ ['local', 'not local to the path this mission is already touching'],
63
+ ['small', 'not small — more than a handful of lines in one file'],
64
+ ['lowBlastRadius', 'blast radius reaches beyond this module'],
65
+ ['clearlyCorrect', 'not clearly correct — a reviewer would need persuading'],
66
+ ['testable', 'not testable in the same commit'],
67
+ ['noProductDecision', 'carries a new product decision'],
68
+ ];
69
+
70
+ /**
71
+ * Which rung this candidate lands on.
72
+ *
73
+ * Returns EVERY failed criterion rather than the first, because the follow-up
74
+ * artefact has to say why the change was deferred, and "it failed one of six"
75
+ * is not a reason a later reader can act on.
76
+ */
77
+ export function disposition(c: Candidate): Verdict {
78
+ const failed = CRITERIA.filter(([k]) => c[k] !== true).map(([, why]) => why);
79
+ return {
80
+ disposition: failed.length === 0 ? 'ride-along' : 'follow-up-artefact',
81
+ failed,
82
+ };
83
+ }
84
+
85
+ /**
86
+ * The follow-up artefact's body — what was seen, and why it did not ride along.
87
+ *
88
+ * A deferral with no reason is the note-and-forget `active-remediation` already
89
+ * forbids, one layer out: the artefact exists so the issue is still owed, and an
90
+ * artefact that does not say why it was deferred cannot be triaged later.
91
+ */
92
+ export function followUpBody(c: Candidate, v: Verdict): string {
93
+ if (v.disposition === 'ride-along') return '';
94
+ return [
95
+ `Deferred adjacent improvement: ${c.what}`,
96
+ '',
97
+ 'Did not ride along because:',
98
+ ...v.failed.map((f) => ` - ${f}`),
99
+ '',
100
+ 'Spotted during a mission; the code was left alone deliberately.',
101
+ ].join('\n');
102
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Settings keys this package has RENAMED, old path -> new path.
3
+ *
4
+ * Distinct from `REMOVED_KEYS` in the one way that matters to a user: a
5
+ * removed key's value is DISCARDED, and a renamed key's value is CARRIED.
6
+ * Putting a rename in the removed map would silently return an installed
7
+ * `false` to the shipped default, which is the opposite of accepting the old
8
+ * key — so the two maps stay separate even though both warn once.
9
+ *
10
+ * An entry is dropped one minor after it lands. The new key always wins when
11
+ * one layer carries both: a reader who has already migrated is not overridden
12
+ * by a stale line they forgot to delete.
13
+ *
14
+ * Its own module rather than more lines in `agent_settings.ts`, which sits
15
+ * three lines under the 1500-line source ceiling — a sixty-line addition there
16
+ * is sixty units of ratchet, and here it is none.
17
+ */
18
+
19
+ export type SettingsLayer = Record<string, unknown>;
20
+
21
+ export const RENAMED_KEYS: ReadonlyMap<string, string> = new Map([
22
+ ['planning.challenge_on_create', 'planning.closure_pass'],
23
+ ]);
24
+
25
+ /** Keys already warned about in THIS process — the "once per run" dedupe. */
26
+ const _warned = new Set<string>();
27
+
28
+ /** Read a dotted path out of a settings tree. `undefined` when absent. */
29
+ function _read(tree: SettingsLayer, dotted: string): unknown {
30
+ let cur: unknown = tree;
31
+ for (const part of dotted.split('.')) {
32
+ if (cur === null || typeof cur !== 'object' || Array.isArray(cur)) return undefined;
33
+ cur = (cur as SettingsLayer)[part];
34
+ }
35
+ return cur;
36
+ }
37
+
38
+ /** Write a dotted path into a settings tree, creating the intermediate maps. */
39
+ function _write(tree: SettingsLayer, dotted: string, value: unknown): void {
40
+ const parts = dotted.split('.');
41
+ let cur: SettingsLayer = tree;
42
+ for (const part of parts.slice(0, -1)) {
43
+ const next = cur[part];
44
+ if (next === null || typeof next !== 'object' || Array.isArray(next)) cur[part] = {};
45
+ cur = cur[part] as SettingsLayer;
46
+ }
47
+ cur[parts[parts.length - 1] as string] = value;
48
+ }
49
+
50
+ /**
51
+ * Carry every renamed key's value onto its new path within ONE layer, and
52
+ * return that layer.
53
+ *
54
+ * Per LAYER, before the merge, and that ordering is the whole contract: the
55
+ * shipped template already carries the new key, so a rename applied to the
56
+ * MERGED tree would always find the target "already set" and drop the user's
57
+ * value on the floor. Applied per layer, the old key becomes the new key
58
+ * inside the layer that wrote it, and ordinary precedence does the rest.
59
+ *
60
+ * Mutates and returns `layer` so it can wrap an existing merge call without
61
+ * adding a statement. Never throws: a layer that cannot be walked is a layer
62
+ * with nothing to migrate.
63
+ */
64
+ export function applyRenamedKeys<T extends SettingsLayer>(layer: T): T {
65
+ for (const [oldKey, newKey] of RENAMED_KEYS) {
66
+ const oldValue = _read(layer, oldKey);
67
+ if (oldValue === undefined) continue;
68
+ if (_read(layer, newKey) === undefined) _write(layer, newKey, oldValue);
69
+ if (_warned.has(oldKey)) continue;
70
+ _warned.add(oldKey);
71
+ process.stderr.write(
72
+ `⚠️ settings: \`${oldKey}\` was renamed to \`${newKey}\`. The old key still ` +
73
+ `works for one minor; rename it in your .agent-settings.yml.\n`,
74
+ );
75
+ }
76
+ return layer;
77
+ }
78
+
79
+ /** Test seam — the once-per-process warning dedupe is process state. */
80
+ export function _resetRenameWarnings(): void {
81
+ _warned.clear();
82
+ }
@@ -0,0 +1,108 @@
1
+ /**
2
+ * The shell shapes that mean "this path is being WRITTEN", shared by the
3
+ * PreToolUse guards that refuse a write to a governed file.
4
+ *
5
+ * WHY IT IS SHARED. `block_kernel_rule_writes.ts` grew this parser after the
6
+ * S0.2 spike measured a real gap: a guard keyed on the TOOL NAME let
7
+ * `Bash sed -i … src/rules/commit-policy.md` reach the outcome the Write
8
+ * branch refuses, and a two-step `Write` → `Bash mv` sequence did the same with
9
+ * every individual step allowed. `block_plumbing_writes.ts`
10
+ * (road-to-a-kernel-that-guards-its-plumbing 1.2) refuses a different file set
11
+ * against the same shapes. Two copies of a shell-shape parser is two places a
12
+ * verb can be added to one and forgotten in the other, and the guard that
13
+ * silently stopped recognising `tee` would look exactly like the guard that
14
+ * never had to.
15
+ *
16
+ * DELIBERATELY NARROW (council 2026-08-02 cut, option ii, recorded on the
17
+ * kernel guard and inherited here unchanged): only redirection into the path,
18
+ * an in-place `sed`, a `tee`/`truncate`/`rm`/`shred` naming it, or a
19
+ * `mv`/`cp`/`install`/`rsync` whose DESTINATION it is. Reads stay allowed —
20
+ * `cat`, `grep`, `head`, `diff`, `git show` carry none of these shapes — and no
21
+ * attempt is made to understand arbitrary shell. Recognising every conceivable
22
+ * write verb would make this a shell sandbox, which is the failure mode the
23
+ * council named.
24
+ *
25
+ * KNOWN-OPEN, stated rather than implied: a write routed through an
26
+ * interpreter (`python -c`, a heredoc fed to `sh`) carries none of these
27
+ * shapes and is not detected. This is a guard, not write mediation.
28
+ */
29
+ import * as path from 'node:path';
30
+
31
+ /** In-place mutators that name their target as a plain argument. */
32
+ const MUTATOR_VERBS: ReadonlySet<string> = new Set(['sed', 'tee', 'truncate', 'rm', 'shred']);
33
+
34
+ /** Verbs whose LAST positional argument is the destination. */
35
+ const DEST_LAST_VERBS: ReadonlySet<string> = new Set(['mv', 'cp', 'install', 'rsync']);
36
+
37
+ /**
38
+ * The first governed target a command WRITES, or `null`.
39
+ *
40
+ * @param command the raw shell string off the tool envelope
41
+ * @param match classifies one token: a non-null return names the governed
42
+ * target that token resolves to, and is what this returns
43
+ */
44
+ export function shellWriteTarget<T>(command: string, match: (token: string) => T | null): T | null {
45
+ const tokens = command.split(/\s+/).filter((t) => t.length > 0);
46
+ const stripped = tokens.map((t) => t.replace(/^['"]|['"]$/g, ''));
47
+
48
+ // Cheap reject first: no governed path in the string at all.
49
+ if (!stripped.some((t) => match(t) !== null)) {
50
+ return null;
51
+ }
52
+
53
+ // 1. Redirection into the path: `> p`, `>> p`, `>p`, `>>p`.
54
+ for (let i = 0; i < stripped.length; i += 1) {
55
+ const tok = stripped[i] as string;
56
+ const inline = /^>{1,2}(.+)$/.exec(tok);
57
+ if (inline) {
58
+ const r = match(inline[1] as string);
59
+ if (r !== null) {
60
+ return r;
61
+ }
62
+ }
63
+ if (tok === '>' || tok === '>>') {
64
+ const next = stripped[i + 1];
65
+ if (typeof next === 'string') {
66
+ const r = match(next);
67
+ if (r !== null) {
68
+ return r;
69
+ }
70
+ }
71
+ }
72
+ }
73
+
74
+ // 2. A mutator verb anywhere in the pipeline, with the path as an argument.
75
+ // `sed` only counts in its in-place form — `sed 's/x/y/' file` prints.
76
+ const verbs = new Set<string>();
77
+ let prevWasSeparator = true;
78
+ for (const tok of stripped) {
79
+ if (['&&', '||', ';', '|'].includes(tok)) {
80
+ prevWasSeparator = true;
81
+ continue;
82
+ }
83
+ if (prevWasSeparator && !tok.startsWith('-')) {
84
+ verbs.add(path.basename(tok));
85
+ prevWasSeparator = false;
86
+ }
87
+ }
88
+ const sedInPlace = verbs.has('sed') && stripped.some((t) => /^-i/.test(t));
89
+ for (const verb of verbs) {
90
+ if (verb === 'sed' && !sedInPlace) {
91
+ continue;
92
+ }
93
+ if (MUTATOR_VERBS.has(verb)) {
94
+ const hit = stripped.map(match).find((r) => r !== null);
95
+ if (hit !== undefined && hit !== null) {
96
+ return hit;
97
+ }
98
+ }
99
+ if (DEST_LAST_VERBS.has(verb)) {
100
+ const last = stripped[stripped.length - 1] as string;
101
+ const r = match(last);
102
+ if (r !== null) {
103
+ return r;
104
+ }
105
+ }
106
+ }
107
+ return null;
108
+ }