@event4u/agent-config 16.1.0 → 16.3.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.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +98 -257
- package/README.md +14 -12
- package/dist/agent-src/commands/analyze/inbox.md +1 -1
- package/dist/agent-src/commands/analyze/roadmap-repos.md +1 -1
- package/dist/agent-src/commands/bug/fix.md +17 -2
- package/dist/agent-src/commands/feature/plan.md +1 -1
- package/dist/agent-src/commands/feature/roadmap.md +1 -1
- package/dist/agent-src/commands/fix/ci.md +1 -1
- package/dist/agent-src/commands/implement-ticket.md +1 -1
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/roadmap/create.md +1 -1
- package/dist/agent-src/commands/roadmap/materialize.md +1 -1
- package/dist/agent-src/commands/roadmap/process-full.md +5 -5
- package/dist/agent-src/commands/roadmap/resolve-blockers.md +361 -0
- package/dist/agent-src/commands/roadmap/triage-parked.md +325 -0
- package/dist/agent-src/commands/roadmap.md +18 -4
- package/dist/agent-src/commands/tests/create.md +17 -3
- package/dist/agent-src/commands/tests/execute.md +22 -5
- package/dist/agent-src/commands/work.md +4 -0
- package/dist/agent-src/contexts/authority/decision-revisit-gate-enforcement.md +43 -0
- package/dist/agent-src/contexts/communication/rules-auto/design-fidelity-enforcement.md +24 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +6 -6
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +4 -8
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +32 -2
- package/dist/agent-src/contexts/execution/session-canary-enforcement-history.md +67 -0
- package/dist/agent-src/contexts/execution/toolchain-resolver.md +101 -7
- package/dist/agent-src/rules/active-remediation.md +1 -1
- package/dist/agent-src/rules/autonomous-execution.md +1 -0
- package/dist/agent-src/rules/broken-access-control.md +1 -0
- package/dist/agent-src/rules/command-suggestion-policy.md +1 -0
- package/dist/agent-src/rules/context-hygiene.md +1 -1
- package/dist/agent-src/rules/decision-revisit-gate.md +16 -33
- package/dist/agent-src/rules/design-fidelity.md +13 -16
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -0
- package/dist/agent-src/rules/domain-safety-disclaimer.md +1 -0
- package/dist/agent-src/rules/domain-safety-pii.md +1 -0
- package/dist/agent-src/rules/domain-safety-retention.md +1 -0
- package/dist/agent-src/rules/engineering-safety-floor.md +1 -0
- package/dist/agent-src/rules/evaluator-independence.md +3 -2
- package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -0
- package/dist/agent-src/rules/finance-safety-floor.md +1 -0
- package/dist/agent-src/rules/git-history-discipline.md +1 -0
- package/dist/agent-src/rules/image-likeness-and-rights.md +1 -0
- package/dist/agent-src/rules/legal-safety-floor.md +3 -2
- package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -0
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -0
- package/dist/agent-src/rules/media-governance-routing.md +14 -17
- package/dist/agent-src/rules/persona-governance.md +2 -2
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +1 -1
- package/dist/agent-src/rules/question-not-instruction.md +1 -0
- package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
- package/dist/agent-src/rules/runtime-safety.md +1 -0
- package/dist/agent-src/rules/secret-vcs-guard.md +1 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +3 -2
- package/dist/agent-src/rules/session-canary.md +8 -62
- package/dist/agent-src/rules/settings-ask-protocol.md +1 -0
- package/dist/agent-src/rules/source-confidentiality.md +1 -0
- package/dist/agent-src/rules/strategy-safety-floor.md +1 -0
- package/dist/agent-src/rules/tool-safety.md +1 -0
- package/dist/agent-src/rules/ui-audit-gate.md +1 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +1 -0
- package/dist/agent-src/rules/user-interrupt-priority.md +1 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
- package/dist/agent-src/scripts/deferral_carry.ts +339 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +4 -1
- package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +1 -1
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +2 -2
- package/dist/agent-src/skills/api-design/data/manifest.json +2 -2
- package/dist/agent-src/skills/api-testing/SKILL.md +17 -0
- package/dist/agent-src/skills/code-intelligence/SKILL.md +14 -2
- package/dist/agent-src/skills/design-review/SKILL.md +30 -4
- package/dist/agent-src/skills/design-review/references/verification-automation.md +32 -0
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +18 -3
- package/dist/agent-src/skills/existing-ui-audit/references/component-taxonomy-detection.md +56 -0
- package/dist/agent-src/skills/fe-design/SKILL.md +1 -1
- package/dist/agent-src/skills/iconography/SKILL.md +1 -1
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +2 -2
- package/dist/agent-src/skills/markitdown/SKILL.md +4 -0
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
- package/dist/agent-src/skills/playwright-testing/SKILL.md +30 -6
- package/dist/agent-src/skills/quality-tools/SKILL.md +11 -1
- package/dist/agent-src/skills/quality-tools/references/go-tools.md +76 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +104 -0
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -1
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +3 -3
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +7 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +17 -0
- package/dist/agent-src/skills/test-performance/SKILL.md +19 -1
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +25 -2
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +30 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +302 -21
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/dist/agent-src/templates/scripts/work_engine/state.ts +57 -7
- package/dist/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
- package/dist/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
- package/dist/cli/python/knowledge_ingest.js +1 -1
- package/dist/cli/python/workspace_drive.js +1 -1
- package/dist/cli/registry.js +1 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +92 -12
- package/dist/cli-delegate/check_update_banner.js +12 -1
- package/dist/cli-delegate/chunk-523HCFYO.js +90 -0
- package/dist/cli-delegate/{chunk-M2DPGFZ4.js → chunk-6V6TA25H.js} +22 -152
- package/dist/cli-delegate/chunk-7IQE3D5S.js +191 -0
- package/dist/cli-delegate/{chunk-6KFEC3G7.js → chunk-CQWX336L.js} +1 -1
- package/dist/cli-delegate/chunk-DEIV7XP7.js +108 -0
- package/dist/cli-delegate/chunk-EEHDXSYD.js +2040 -0
- package/dist/cli-delegate/{chunk-P6ZHP5W2.js → chunk-GKE7ZVFA.js} +4 -4
- package/dist/cli-delegate/chunk-JQOM7TTM.js +1201 -0
- package/dist/cli-delegate/{chunk-UNCRJBT3.js → chunk-JQVYKIZA.js} +41 -0
- package/dist/cli-delegate/{chunk-FC75PGJE.js → chunk-JY2I2DXV.js} +12 -1
- package/dist/cli-delegate/chunk-KB5FZ655.js +208 -0
- package/dist/cli-delegate/{chunk-YUM5KURG.js → chunk-KR6EM23A.js} +235 -1455
- package/dist/cli-delegate/{chunk-LTYVIY76.js → chunk-LIYTLH6O.js} +1 -1
- package/dist/cli-delegate/chunk-NQ7WT43P.js +2729 -0
- package/dist/cli-delegate/chunk-NXEILF2K.js +2160 -0
- package/dist/cli-delegate/{chunk-5R7HOLAF.js → chunk-NYX3L2PZ.js} +1 -1
- package/dist/cli-delegate/{chunk-4E2W63DA.js → chunk-OKJUIAPS.js} +62 -1
- package/dist/cli-delegate/{chunk-QAJS5YWY.js → chunk-PHD7OOLE.js} +2 -1
- package/dist/cli-delegate/{chunk-RGNIWTEA.js → chunk-QLDHIPWR.js} +1 -1
- package/dist/cli-delegate/{chunk-HDVVGPQW.js → chunk-RQNNW7IF.js} +1405 -567
- package/dist/cli-delegate/{chunk-S3VFXMTM.js → chunk-S4UMZNES.js} +1 -1
- package/dist/cli-delegate/{chunk-6KM6ORRY.js → chunk-S4YWNRKO.js} +24 -8
- package/dist/cli-delegate/{chunk-GJCBB2UG.js → chunk-TRI6DQZ6.js} +3054 -325
- package/dist/cli-delegate/chunk-ULQRUR23.js +208 -0
- package/dist/cli-delegate/{chunk-NUHLI2RX.js → chunk-YCU3TIXH.js} +2 -0
- package/dist/cli-delegate/chunk-ZBZV2G5R.js +210 -0
- package/dist/cli-delegate/{chunk-WGXTVKCQ.js → chunk-ZUZKZYCN.js} +5 -3
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +1862 -809
- package/dist/cli-delegate/cmd_doctor.js +13 -6
- package/dist/cli-delegate/cmd_doctor_neighbours.js +23 -0
- package/dist/cli-delegate/cmd_explain.js +5 -5
- package/dist/cli-delegate/cmd_export.js +11 -8
- package/dist/cli-delegate/cmd_fleet.js +3 -3
- package/dist/cli-delegate/cmd_handoff.js +10 -7
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +3 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +3 -3
- package/dist/cli-delegate/cmd_preflight.js +6 -6
- package/dist/cli-delegate/cmd_prune.js +11 -8
- package/dist/cli-delegate/cmd_refresh.js +2 -1
- package/dist/cli-delegate/cmd_route_audit.js +8 -6
- package/dist/cli-delegate/cmd_route_explain.js +4 -4
- package/dist/cli-delegate/cmd_session_recycle.js +4 -3
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +11 -8
- package/dist/cli-delegate/cmd_settings_set.js +4 -4
- package/dist/cli-delegate/cmd_sync.js +11 -8
- package/dist/cli-delegate/cmd_uninstall.js +11 -8
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +3 -2
- package/dist/cli-delegate/cmd_validate.js +11 -8
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/deferral_carry.js +16 -0
- package/dist/cli-delegate/gate_execute.js +2 -2
- package/dist/cli-delegate/roadmap_gates.js +5 -5
- package/dist/cli-delegate/update_roadmap_progress.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +132 -80
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +7 -5
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +6 -4
- package/dist/hooks/dispatch.js +7972 -5186
- package/dist/hooks/dispatch.sha256 +1 -0
- package/dist/install/claudePathsPlan.js +47 -6
- package/dist/install/claudeRuleRewrite.js +7 -0
- package/dist/install/emit_host_rules_cli.js +39 -36
- package/dist/install/globalRuleScope.js +87 -0
- package/dist/install/host_rule_ownership.js +160 -0
- package/dist/install/install.mjs +2226 -1055
- package/dist/install/installThinLayer.js +261 -0
- package/dist/install/installedRuleLinks.js +176 -0
- package/dist/install/wizard-plan.js +24 -0
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +40913 -34865
- package/dist/scripts/_lib/agent_settings.js +11 -0
- package/dist/scripts/_lib/claude_settings_hooks.js +10 -8
- package/dist/scripts/_lib/installed_layer.js +378 -0
- package/dist/scripts/_lib/lean_projection_mode.js +218 -15
- package/dist/scripts/_lib/rule_consequence_class.js +45 -0
- package/dist/scripts/_lib/rule_injection.js +67 -10
- package/dist/scripts/_lib/rule_law_section.js +122 -0
- package/dist/scripts/_lib/thin_rules.js +458 -0
- package/dist/scripts/_lib/windsurf_render.js +60 -0
- package/dist/scripts/condense.js +14 -26
- package/dist/scripts/project_thin_rules.js +14 -294
- package/dist/server/schemas/settings.js +29 -0
- package/dist/shared/skillRanking.js +74 -13
- package/dist/ui/assets/index-Cwq4d0hX.js +23 -0
- package/dist/ui/assets/index-Cyjy8bWO.css +1 -0
- package/dist/ui/index.html +2 -2
- package/docs/contracts/settings-classes.md +10 -6
- package/package.json +4 -4
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
- package/src/agent-src/scripts/deferral_carry.ts +339 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +4 -1
- package/src/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +302 -21
- package/src/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/src/agent-src/templates/scripts/work_engine/state.ts +57 -7
- package/src/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
- package/src/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
- package/src/config/agent-settings.template.yml +91 -22
- package/src/config/ci-local-parity.yml +18 -0
- package/src/config/continuity-surface.json +9 -2
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +327 -3
- package/src/config/gate-violation-baselines.json +21 -9
- package/src/config/hook-bundle-budget.json +25 -0
- package/src/config/hook-latency-budget.json +21 -0
- package/src/config/hook-token-budget.json +8 -3
- package/src/config/host-instruction-limits.json +33 -0
- package/src/config/metric-registry.yml +114 -0
- package/src/config/placeholder-drift-budget.json +10 -0
- package/src/config/routing-coverage-seed.json +38 -3
- package/src/config/rule-activation-census.json +7 -3
- package/src/config/rule-consequence-class.json +161 -0
- package/src/config/rule-law-ceilings.json +99 -0
- package/src/install/claudePathsPlan.ts +46 -4
- package/src/install/claudeRuleRewrite.ts +10 -1
- package/src/install/emit_host_rules_cli.ts +43 -34
- package/src/install/globalRuleScope.ts +109 -0
- package/src/install/host_rule_ownership.ts +170 -0
- package/src/install/installThinLayer.ts +312 -0
- package/src/install/installedRuleLinks.ts +220 -0
- package/src/install/wizard-plan.ts +24 -0
- package/src/scripts/_cli/cmd_doctor.ts +28 -90
- package/src/scripts/_cli/cmd_doctor_neighbours.ts +293 -0
- package/src/scripts/_cli/doctor_execution.ts +100 -17
- package/src/scripts/_cli/doctor_network_posture.ts +226 -0
- package/src/scripts/_dispatch.bash +16 -2
- package/src/scripts/_lib/agent_settings.ts +11 -0
- package/src/scripts/_lib/body_portable.ts +102 -0
- package/src/scripts/_lib/cc_transcript.ts +132 -1
- package/src/scripts/_lib/claude_settings_hooks.ts +10 -8
- package/src/scripts/_lib/concern_sla_window.ts +200 -0
- package/src/scripts/_lib/estate_offsets.ts +241 -0
- package/src/scripts/_lib/exemption_shape.ts +143 -0
- package/src/scripts/_lib/fnv.ts +23 -0
- package/src/scripts/_lib/foreign_scan.ts +106 -0
- package/src/scripts/_lib/forge_protection.ts +114 -0
- package/src/scripts/_lib/forge_reader.ts +558 -0
- package/src/scripts/_lib/gitignore_block.ts +314 -0
- package/src/scripts/_lib/global_deploy_inventory.ts +32 -0
- package/src/scripts/_lib/graph_feeder_record.ts +214 -0
- package/src/scripts/_lib/hook_settings.ts +73 -0
- package/src/scripts/_lib/host_capability.ts +40 -19
- package/src/scripts/_lib/host_env_write.ts +111 -0
- package/src/scripts/_lib/host_hook_merge.ts +165 -0
- package/src/scripts/_lib/installed_layer.ts +538 -0
- package/src/scripts/_lib/json_merge.ts +82 -0
- package/src/scripts/_lib/json_pointers.ts +93 -11
- package/src/scripts/_lib/lean_projection_mode.ts +275 -15
- package/src/scripts/_lib/llm_proposer_transport.ts +14 -4
- package/src/scripts/_lib/machine_wake.ts +16 -3
- package/src/scripts/_lib/neighbour_census.ts +760 -0
- package/src/scripts/_lib/neighbour_scan.ts +122 -0
- package/src/scripts/_lib/neighbour_tool_use.ts +189 -0
- package/src/scripts/_lib/obligations.ts +119 -8
- package/src/scripts/_lib/probe_inputs.ts +271 -0
- package/src/scripts/_lib/prompt_shape.ts +46 -0
- package/src/scripts/_lib/read_surface_scan.ts +322 -0
- package/src/scripts/_lib/release_highlights.ts +2 -1
- package/src/scripts/_lib/release_migration_gate.ts +19 -3
- package/src/scripts/_lib/reserved_name_sweep.ts +73 -0
- package/src/scripts/_lib/retrieval_sanitize.ts +77 -16
- package/src/scripts/_lib/review_coverage.ts +134 -0
- package/src/scripts/_lib/rule_consequence_class.ts +71 -0
- package/src/scripts/_lib/rule_injection.ts +130 -10
- package/src/scripts/_lib/rule_law_section.ts +147 -0
- package/src/scripts/_lib/rule_layer_overlap.ts +58 -0
- package/src/scripts/_lib/shell_write_shapes.ts +108 -0
- package/src/scripts/_lib/skill_origin.ts +254 -0
- package/src/scripts/_lib/structural_hiding.ts +622 -0
- package/src/scripts/_lib/structured_ask.ts +64 -21
- package/src/scripts/_lib/thin_rules.ts +540 -0
- package/src/scripts/_lib/touched_file_quality.ts +434 -0
- package/src/scripts/_lib/turn_end_refusals.ts +600 -4
- package/src/scripts/_lib/turn_end_transcript.ts +216 -0
- package/src/scripts/_lib/verification_command.ts +324 -0
- package/src/scripts/_lib/verification_evidence.ts +647 -0
- package/src/scripts/_lib/verify_clause.ts +280 -0
- package/src/scripts/_lib/windsurf_render.ts +63 -0
- package/src/scripts/ai_council/cli_call_budget.ts +13 -5
- package/src/scripts/ai_council/clients.ts +26 -57
- package/src/scripts/ai_council/config.ts +1 -1
- package/src/scripts/ai_council/vendor_defaults.ts +45 -0
- package/src/scripts/ai_team/team_dispatch.ts +4 -0
- package/src/scripts/audit_skill_overlap.ts +261 -0
- package/src/scripts/before_complete_hook.ts +573 -25
- package/src/scripts/bench_hook_latency.ts +412 -5
- package/src/scripts/bench_touched_file_quality.ts +238 -0
- package/src/scripts/cache_realization_report.ts +61 -1
- package/src/scripts/check_argument_hint.ts +287 -0
- package/src/scripts/check_claims.ts +125 -1
- package/src/scripts/check_enforcement_coverage.ts +38 -9
- package/src/scripts/check_enforcement_matrix.ts +621 -22
- package/src/scripts/check_estate_count.ts +130 -153
- package/src/scripts/check_finding_dispositions.ts +138 -7
- package/src/scripts/check_generator_sync.ts +71 -0
- package/src/scripts/check_hook_bundle_composition.ts +370 -0
- package/src/scripts/check_host_docs_digest.ts +786 -0
- package/src/scripts/check_host_format_column.ts +559 -0
- package/src/scripts/check_input_references.ts +228 -0
- package/src/scripts/check_inputs_parity.ts +235 -0
- package/src/scripts/check_kernel_edit_ratified.ts +89 -9
- package/src/scripts/check_kill_switch_table.ts +294 -0
- package/src/scripts/check_memory.ts +7 -1
- package/src/scripts/check_placeholder_drift.ts +221 -0
- package/src/scripts/check_read_surface_coverage.ts +515 -0
- package/src/scripts/check_release_highlights.ts +10 -0
- package/src/scripts/check_release_holds.ts +2 -1
- package/src/scripts/check_release_pr_shape.ts +38 -15
- package/src/scripts/check_routing_coverage.ts +378 -11
- package/src/scripts/check_standing_rule_delivery.ts +33 -13
- package/src/scripts/check_static_parity.ts +17 -0
- package/src/scripts/check_verify_expectation_delta.ts +521 -0
- package/src/scripts/ci_settle.ts +145 -19
- package/src/scripts/closure_scan.ts +115 -1
- package/src/scripts/code_graph/detect.ts +127 -7
- package/src/scripts/code_graph/foreign.ts +194 -0
- package/src/scripts/code_graph/query.ts +217 -4
- package/src/scripts/code_graph/types.ts +26 -2
- package/src/scripts/code_graph/validate.ts +3 -1
- package/src/scripts/code_graph/verbs.ts +103 -0
- package/src/scripts/compile_hook_manifest.ts +90 -14
- package/src/scripts/condense.ts +14 -27
- package/src/scripts/estate_exemption_shape.ts +202 -0
- package/src/scripts/external_sources_denylist.json +29 -4
- package/src/scripts/generate_host_cost_table.ts +1 -1
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +192 -14
- package/src/scripts/hooks/block_config_weakening.ts +294 -4
- package/src/scripts/hooks/block_kernel_rule_writes.ts +9 -78
- package/src/scripts/hooks/block_plumbing_writes.ts +342 -0
- package/src/scripts/hooks/bundle_integrity.ts +291 -0
- package/src/scripts/hooks/chain_nudge_hook.ts +1 -2
- package/src/scripts/hooks/code_graph_context_hook.ts +253 -25
- package/src/scripts/hooks/comment_discipline_hook.ts +1 -3
- package/src/scripts/hooks/concern_failure_policy.ts +280 -0
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/concern_timings.ts +94 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +1 -2
- package/src/scripts/hooks/design_pass_hook.ts +100 -9
- package/src/scripts/hooks/design_slop_hook.ts +1 -2
- package/src/scripts/hooks/dispatch_hook.ts +77 -71
- package/src/scripts/hooks/edit_shape_hook.ts +1 -2
- package/src/scripts/hooks/end_review_nudge_hook.ts +1 -1
- package/src/scripts/hooks/evidence_independence.ts +1 -2
- package/src/scripts/hooks/exit_codes.ts +129 -0
- package/src/scripts/hooks/host_lowering.json +1 -0
- package/src/scripts/hooks/host_lowering.ts +146 -3
- package/src/scripts/hooks/host_lowering.yaml +262 -46
- package/src/scripts/hooks/host_semantics.ts +30 -2
- package/src/scripts/hooks/injection_budget.ts +9 -2
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -2
- package/src/scripts/hooks/journal_record_hook.ts +1 -2
- package/src/scripts/hooks/memory_recall_hook.ts +1 -2
- package/src/scripts/hooks/obligation_settle_hook.ts +151 -5
- package/src/scripts/hooks/one_question_per_ask_hook.ts +43 -6
- package/src/scripts/hooks/orchestration_record_hook.ts +1 -2
- package/src/scripts/hooks/payload_stub.ts +10 -1
- package/src/scripts/hooks/permission_gate.ts +1 -2
- package/src/scripts/hooks/push_settle_hook.ts +1 -3
- package/src/scripts/hooks/replay_hook.ts +2 -1
- package/src/scripts/hooks/reread_guard_hook.ts +1 -2
- package/src/scripts/hooks/review_baseline_hook.ts +1 -2
- package/src/scripts/hooks/rtk_wrap_hook.ts +1 -2
- package/src/scripts/hooks/rule_inject_hook.ts +765 -68
- package/src/scripts/hooks/run_continuation_hook.ts +13 -15
- package/src/scripts/hooks/skill_route_hook.ts +1 -2
- package/src/scripts/hooks/source_first_gate_hook.ts +1 -2
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +1 -2
- package/src/scripts/hooks/subagent_ledger_hook.ts +1 -2
- package/src/scripts/hooks/suggestion_capture_hook.ts +1 -1
- package/src/scripts/hooks/table_fingerprint.ts +70 -0
- package/src/scripts/hooks/telemetry_flush_hook.ts +1 -2
- package/src/scripts/hooks/telemetry_usage_hook.ts +65 -10
- package/src/scripts/hooks/tool_result_bytes_hook.ts +93 -9
- package/src/scripts/hooks/turn_end_gate_hook.ts +421 -324
- package/src/scripts/hooks/ui_route_nudge_hook.ts +1 -2
- package/src/scripts/hooks_status.ts +112 -0
- package/src/scripts/injection_scan_hook.ts +7 -0
- package/src/scripts/install.ts +75 -189
- package/src/scripts/installed_layer_report.ts +103 -0
- package/src/scripts/language_mirror_hook.ts +15 -6
- package/src/scripts/learning_sidecar.ts +119 -8
- package/src/scripts/lint_deny_text.ts +419 -0
- package/src/scripts/lint_exit_codes.ts +262 -0
- package/src/scripts/lint_hook_manifest.ts +108 -0
- package/src/scripts/lint_major_migration_sections.ts +156 -26
- package/src/scripts/lint_pack_boundaries.ts +63 -5
- package/src/scripts/lint_roadmap_blockers.ts +78 -12
- package/src/scripts/lint_rule_law_section.ts +517 -0
- package/src/scripts/lint_skill_descriptions.ts +1 -1
- package/src/scripts/lint_skill_scripts_readonly.ts +1 -1
- package/src/scripts/lint_workflow_security.ts +161 -5
- package/src/scripts/mcp_server/consumer_tool_catalog.json +53 -0
- package/src/scripts/mcp_server/graph_tools.ts +72 -3
- package/src/scripts/mcp_server/prompts.ts +142 -1
- package/src/scripts/measure_routing_signal.ts +54 -16
- package/src/scripts/measure_skill_ranker_baseline.ts +515 -53
- package/src/scripts/measure_turn_end_gate.ts +193 -0
- package/src/scripts/memory_learn_hook.ts +91 -6
- package/src/scripts/memory_lookup.ts +1 -1
- package/src/scripts/model_rule_injection.ts +52 -5
- package/src/scripts/prepack-check.mjs +53 -0
- package/src/scripts/project_thin_rules.ts +34 -327
- package/src/scripts/release_publication.ts +13 -1
- package/src/scripts/report_evidence_temperature.ts +657 -0
- package/src/scripts/report_installed_rule_links.ts +157 -0
- package/src/scripts/report_invocation_surface.ts +383 -0
- package/src/scripts/report_label_agreement.ts +233 -0
- package/src/scripts/report_obligation_carriers.ts +699 -0
- package/src/scripts/report_obligation_mechanism.ts +230 -0
- package/src/scripts/report_obligation_writer_split.ts +236 -0
- package/src/scripts/report_single_token_triggers.ts +277 -0
- package/src/scripts/report_skill_menu_census.ts +208 -0
- package/src/scripts/report_skill_ranker_confusion.ts +442 -0
- package/src/scripts/report_standing_payload_by_host.ts +188 -15
- package/src/scripts/report_verification_record_coverage.ts +306 -0
- package/src/scripts/roadmap_verify_share.ts +213 -0
- package/src/scripts/rule_activation_census.ts +5 -2
- package/src/scripts/rule_trigger_eval.ts +9 -9
- package/src/scripts/schemas/command.schema.json +44 -0
- package/src/scripts/schemas/review-findings.schema.json +7 -2
- package/src/scripts/schemas/rule.schema.json +5 -0
- package/src/scripts/schemas/skill.schema.json +44 -0
- package/src/scripts/self_review_gate.ts +421 -17
- package/src/scripts/semantic_parity_census.ts +314 -0
- package/src/scripts/session_eol_report.ts +54 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +290 -25
- package/src/scripts/sweep_dead_scan_roots.ts +1 -1
- package/src/scripts/sweep_skill_ranker_signals.ts +129 -0
- package/src/scripts/sync_gitignore.ts +29 -235
- package/src/scripts/trigger_eval_grandfather.json +0 -7
- package/src/scripts/trigger_eval_rotation.ts +122 -27
- package/src/scripts/ui_conformance_probe.ts +156 -4
- package/src/scripts/update_prices.ts +85 -3
- package/src/scripts/write_bundle_digest.mjs +74 -0
- package/src/server/schemas/settings.ts +41 -0
- package/src/shared/skillRanking.ts +117 -11
- package/src/templates/consumer-settings/ONBOARDING.md +1 -0
- package/dist/cli-delegate/chunk-FXYUYU4N.js +0 -4416
- package/dist/cli-delegate/chunk-QJWAUMJW.js +0 -1072
- package/dist/cli-delegate/chunk-YDPILCOL.js +0 -152
- package/dist/ui/assets/index-DH1xc62v.js +0 -29
- package/dist/ui/assets/index-jSfMW8_t.css +0 -1
|
@@ -23,11 +23,21 @@
|
|
|
23
23
|
# - src/scripts/hooks/host_semantics.ts (VERIFIED_PLATFORMS, isBlockCapable, emission shape)
|
|
24
24
|
# - src/scripts/_lib/host_bindings.ts (per-host bridge bindings + the install smoke probe)
|
|
25
25
|
# - src/scripts/lint_hook_manifest.ts (schema + expiry gate)
|
|
26
|
+
# - src/scripts/check_host_docs_digest.ts (docs-drift watcher over `verified.docs_digest`)
|
|
26
27
|
#
|
|
27
28
|
# COLUMNS
|
|
28
29
|
# block_exit exit code this host honours as a refusal on that slot;
|
|
29
30
|
# `null` = this tree has not established that it honours one.
|
|
31
|
+
# answered_at the date the pair above was last answered — REQUIRED on
|
|
32
|
+
# every slot. A `block_exit: null` with no date is
|
|
33
|
+
# indistinguishable from a slot nobody looked at, and that
|
|
34
|
+
# ambiguity is what this column removes. The citation for the
|
|
35
|
+
# answer is the row's `verified.docs_url` unless the slot
|
|
36
|
+
# carries its own `docs_url:`.
|
|
30
37
|
# json_shape structured-output envelope the dispatcher may emit.
|
|
38
|
+
# `none` means this package has no native envelope for the
|
|
39
|
+
# host, so `emitFor` keeps the legacy pass-through even when
|
|
40
|
+
# the row is verified — see host_semantics.usesNativeEmission.
|
|
31
41
|
# entry_shape shape of the bridge entry the installer writes.
|
|
32
42
|
# fail_policy `propagate` = the dispatcher's exit code reaches the host;
|
|
33
43
|
# `discard` = the trampoline exits 0 regardless.
|
|
@@ -35,10 +45,32 @@
|
|
|
35
45
|
# timeout_default host default for that timeout. `null` = not established here.
|
|
36
46
|
# verified provenance of the row, or `null`. `expires` is mandatory
|
|
37
47
|
# when the block is present — see lint_hook_manifest.
|
|
48
|
+
# `docs_digest` is the sha256 of the `docs_url` body as last
|
|
49
|
+
# ESTABLISHED for the row — recorded by a human-run fill,
|
|
50
|
+
# never silently updated. On drift the watcher leaves it
|
|
51
|
+
# alone and moves `expires` instead, so the field keeps
|
|
52
|
+
# naming the body someone actually read. It is NOT paired
|
|
53
|
+
# with `docs_at`, and the committed rows prove why: all nine
|
|
54
|
+
# carry `docs_at: 2026-09-29` while the eight digests were
|
|
55
|
+
# taken 2026-10-01. The two answer different questions —
|
|
56
|
+
# `docs_at` when a human read the page for the row's ANSWERS,
|
|
57
|
+
# `docs_digest` which body the watcher is comparing against.
|
|
58
|
+
# `check_host_docs_digest --fetch` re-reads and flags a
|
|
59
|
+
# difference.
|
|
38
60
|
# slots ORDERED. Bridge entries are written in this order, so the
|
|
39
61
|
# order is part of the generated output and must not be
|
|
40
62
|
# sorted. `native` may be a list where one slot has two
|
|
41
63
|
# native events (cline session_start).
|
|
64
|
+
#
|
|
65
|
+
# THE `expires` POLICY, STATED RATHER THAN IMPLIED. No host this package
|
|
66
|
+
# supports publishes a documentation cadence, so no `expires` here is a vendor
|
|
67
|
+
# commitment — each one is a review-by date this package chose. Rows established
|
|
68
|
+
# by a dated documentation read carry `docs_at` + 1 year. `claude` keeps its
|
|
69
|
+
# committed 2027-09-06 because that value predates this policy and nothing in
|
|
70
|
+
# this change gives a reason to move it. The real drift signal is
|
|
71
|
+
# `docs_digest`: when the watcher sees a changed body it sets `expires` to the
|
|
72
|
+
# day BEFORE the detection date, because `lint_hook_manifest` tests `expires <
|
|
73
|
+
# today` — "valid through yesterday" is how a row stops being current today.
|
|
42
74
|
schema_version: 1
|
|
43
75
|
|
|
44
76
|
hosts:
|
|
@@ -52,24 +84,32 @@ hosts:
|
|
|
52
84
|
timeout_default: null
|
|
53
85
|
# Transcribed from the behaviour host_semantics.ts already implements —
|
|
54
86
|
# this row is a description of the status quo, not a new claim.
|
|
55
|
-
# docs_at/host_version
|
|
56
|
-
# dated
|
|
87
|
+
# `docs_at` / `host_version` were null until 2026-09-29: the original
|
|
88
|
+
# read was never dated, and the absence was the record. Both are filled
|
|
89
|
+
# now from sources this tree already carries — the 2026-09-06 live probe
|
|
90
|
+
# recorded in `host_semantics.ts` (Claude Code 2.1.263) and a fresh
|
|
91
|
+
# documentation read on 2026-09-29. `expires` is deliberately unchanged.
|
|
92
|
+
#
|
|
93
|
+
# The committed `docs_url` was `https://docs.claude.com/en/docs/claude-code/hooks`,
|
|
94
|
+
# which answers 301 and lands on the URL below. Recording the redirect
|
|
95
|
+
# target is what makes a digest reproducible.
|
|
57
96
|
verified:
|
|
58
|
-
docs_at:
|
|
59
|
-
docs_url: https://
|
|
60
|
-
|
|
61
|
-
|
|
97
|
+
docs_at: 2026-09-29
|
|
98
|
+
docs_url: https://code.claude.com/docs/en/hooks.md
|
|
99
|
+
docs_digest: 9dd68316c1111c118e3ddb82861ac6271a8cd164cee0d371b26165efff35fe88
|
|
100
|
+
probe_at: 2026-09-06
|
|
101
|
+
host_version: 2.1.263
|
|
62
102
|
expires: 2027-09-06
|
|
63
103
|
slots:
|
|
64
|
-
session_start: { native: SessionStart, block_exit: null }
|
|
65
|
-
session_end: { native: SessionEnd, block_exit: null }
|
|
66
|
-
stop: { native: Stop, block_exit: 2 }
|
|
67
|
-
user_prompt_submit: { native: UserPromptSubmit, block_exit: 2 }
|
|
68
|
-
pre_tool_use: { native: PreToolUse, block_exit: 2 }
|
|
69
|
-
post_tool_use: { native: PostToolUse, block_exit: null }
|
|
70
|
-
pre_compact: { native: PreCompact, block_exit: null }
|
|
71
|
-
subagent_start: { native: SubagentStart, block_exit: null }
|
|
72
|
-
subagent_stop: { native: SubagentStop, block_exit: null }
|
|
104
|
+
session_start: { native: SessionStart, block_exit: null, answered_at: 2026-09-29 }
|
|
105
|
+
session_end: { native: SessionEnd, block_exit: null, answered_at: 2026-09-29 }
|
|
106
|
+
stop: { native: Stop, block_exit: 2, answered_at: 2026-09-29 }
|
|
107
|
+
user_prompt_submit: { native: UserPromptSubmit, block_exit: 2, answered_at: 2026-09-29 }
|
|
108
|
+
pre_tool_use: { native: PreToolUse, block_exit: 2, answered_at: 2026-09-29 }
|
|
109
|
+
post_tool_use: { native: PostToolUse, block_exit: null, answered_at: 2026-09-29 }
|
|
110
|
+
pre_compact: { native: PreCompact, block_exit: null, answered_at: 2026-09-29 }
|
|
111
|
+
subagent_start: { native: SubagentStart, block_exit: null, answered_at: 2026-09-29 }
|
|
112
|
+
subagent_stop: { native: SubagentStop, block_exit: null, answered_at: 2026-09-29 }
|
|
73
113
|
|
|
74
114
|
augment:
|
|
75
115
|
surfaces:
|
|
@@ -81,13 +121,30 @@ hosts:
|
|
|
81
121
|
fail_policy: discard
|
|
82
122
|
timeout_unit: unknown
|
|
83
123
|
timeout_default: null
|
|
84
|
-
|
|
124
|
+
# Established by a documentation read on 2026-09-29, not by a live
|
|
125
|
+
# probe — `probe_at` stays null and says so.
|
|
126
|
+
verified:
|
|
127
|
+
docs_at: 2026-09-29
|
|
128
|
+
docs_url: https://docs.augmentcode.com/cli/hooks.md
|
|
129
|
+
docs_digest: e500823be8303717020c1823f670e06d100108f6e3ac4b8d12a46d91fd1898fa
|
|
130
|
+
probe_at: null
|
|
131
|
+
host_version: null
|
|
132
|
+
expires: 2027-09-29
|
|
133
|
+
# THE FINDING THIS ROW CARRIES. Augment's own documentation states that
|
|
134
|
+
# `PreToolUse` can block tool execution and shows `exit 2` doing it. The
|
|
135
|
+
# `block_exit: null` below is therefore NOT a claim that the host cannot
|
|
136
|
+
# refuse — this file's header says a row never makes that claim. It is a
|
|
137
|
+
# fact about this package: `augment-dispatcher.sh` exits 0
|
|
138
|
+
# unconditionally (`fail_policy: discard`), so no verdict this package
|
|
139
|
+
# produces can reach the host at all. Arming it means changing the
|
|
140
|
+
# trampoline, which is an enforcement expansion and belongs to its own
|
|
141
|
+
# change with its own ratification — not to a dating pass.
|
|
85
142
|
slots:
|
|
86
|
-
session_start: { native: SessionStart, block_exit: null }
|
|
87
|
-
session_end: { native: SessionEnd, block_exit: null }
|
|
88
|
-
stop: { native: Stop, block_exit: null }
|
|
89
|
-
pre_tool_use: { native: PreToolUse, block_exit: null }
|
|
90
|
-
post_tool_use: { native: PostToolUse, block_exit: null }
|
|
143
|
+
session_start: { native: SessionStart, block_exit: null, answered_at: 2026-09-29 }
|
|
144
|
+
session_end: { native: SessionEnd, block_exit: null, answered_at: 2026-09-29 }
|
|
145
|
+
stop: { native: Stop, block_exit: null, answered_at: 2026-09-29 }
|
|
146
|
+
pre_tool_use: { native: PreToolUse, block_exit: null, answered_at: 2026-09-29 }
|
|
147
|
+
post_tool_use: { native: PostToolUse, block_exit: null, answered_at: 2026-09-29 }
|
|
91
148
|
|
|
92
149
|
cursor:
|
|
93
150
|
surfaces:
|
|
@@ -97,13 +154,19 @@ hosts:
|
|
|
97
154
|
fail_policy: propagate
|
|
98
155
|
timeout_unit: unknown
|
|
99
156
|
timeout_default: null
|
|
100
|
-
verified:
|
|
157
|
+
verified:
|
|
158
|
+
docs_at: 2026-09-29
|
|
159
|
+
docs_url: https://cursor.com/docs/hooks.md
|
|
160
|
+
docs_digest: 7294a2d63b19d79a5283c948afe174cba8b06a7585563d34a2c41b90f5df0d39
|
|
161
|
+
probe_at: null
|
|
162
|
+
host_version: null
|
|
163
|
+
expires: 2027-09-29
|
|
101
164
|
slots:
|
|
102
|
-
session_start: { native: sessionStart, block_exit: null }
|
|
103
|
-
session_end: { native: sessionEnd, block_exit: null }
|
|
104
|
-
stop: { native: stop, block_exit: null }
|
|
105
|
-
user_prompt_submit: { native: beforeSubmitPrompt, block_exit: null }
|
|
106
|
-
post_tool_use: { native: postToolUse, block_exit: null }
|
|
165
|
+
session_start: { native: sessionStart, block_exit: null, answered_at: 2026-09-29 }
|
|
166
|
+
session_end: { native: sessionEnd, block_exit: null, answered_at: 2026-09-29 }
|
|
167
|
+
stop: { native: stop, block_exit: null, answered_at: 2026-09-29 }
|
|
168
|
+
user_prompt_submit: { native: beforeSubmitPrompt, block_exit: null, answered_at: 2026-09-29 }
|
|
169
|
+
post_tool_use: { native: postToolUse, block_exit: null, answered_at: 2026-09-29 }
|
|
107
170
|
|
|
108
171
|
cline:
|
|
109
172
|
surfaces:
|
|
@@ -115,13 +178,27 @@ hosts:
|
|
|
115
178
|
fail_policy: discard
|
|
116
179
|
timeout_unit: unknown
|
|
117
180
|
timeout_default: null
|
|
118
|
-
|
|
181
|
+
# SECOND FINDING FROM THE 2026-09-29 READ. `docs.cline.bot`'s hooks page
|
|
182
|
+
# is now a one-line pointer to its SDK-plugins page and names none of
|
|
183
|
+
# the `TaskStart` / `TaskResume` / `TaskComplete` / `TaskCancel` events
|
|
184
|
+
# the slots below bind. The row is dated against the page that exists,
|
|
185
|
+
# and the digest watcher is what will surface the next move; re-deriving
|
|
186
|
+
# the event names from a page that no longer lists them is a separate
|
|
187
|
+
# piece of work, and inventing a citation for them here would be the
|
|
188
|
+
# defect this file was built to remove.
|
|
189
|
+
verified:
|
|
190
|
+
docs_at: 2026-09-29
|
|
191
|
+
docs_url: https://docs.cline.bot/customization/hooks.md
|
|
192
|
+
docs_digest: ef87561721f4cb80fe6d682b6866d638a4952dd416d36cd5ab398426ce64084b
|
|
193
|
+
probe_at: null
|
|
194
|
+
host_version: null
|
|
195
|
+
expires: 2027-09-29
|
|
119
196
|
slots:
|
|
120
|
-
session_start: { native: [TaskStart, TaskResume], block_exit: null }
|
|
121
|
-
session_end: { native: TaskComplete, block_exit: null }
|
|
122
|
-
stop: { native: TaskCancel, block_exit: null }
|
|
123
|
-
user_prompt_submit: { native: UserPromptSubmit, block_exit: null }
|
|
124
|
-
post_tool_use: { native: PostToolUse, block_exit: null }
|
|
197
|
+
session_start: { native: [TaskStart, TaskResume], block_exit: null, answered_at: 2026-09-29 }
|
|
198
|
+
session_end: { native: TaskComplete, block_exit: null, answered_at: 2026-09-29 }
|
|
199
|
+
stop: { native: TaskCancel, block_exit: null, answered_at: 2026-09-29 }
|
|
200
|
+
user_prompt_submit: { native: UserPromptSubmit, block_exit: null, answered_at: 2026-09-29 }
|
|
201
|
+
post_tool_use: { native: PostToolUse, block_exit: null, answered_at: 2026-09-29 }
|
|
125
202
|
|
|
126
203
|
windsurf:
|
|
127
204
|
surfaces:
|
|
@@ -131,11 +208,20 @@ hosts:
|
|
|
131
208
|
fail_policy: propagate
|
|
132
209
|
timeout_unit: unknown
|
|
133
210
|
timeout_default: null
|
|
134
|
-
|
|
211
|
+
# THIRD FINDING FROM THE 2026-09-29 READ. `docs.windsurf.com` now
|
|
212
|
+
# redirects to `docs.devin.ai`; the redirect target is recorded so the
|
|
213
|
+
# digest is reproducible.
|
|
214
|
+
verified:
|
|
215
|
+
docs_at: 2026-09-29
|
|
216
|
+
docs_url: https://docs.devin.ai/desktop/cascade/hooks.md
|
|
217
|
+
docs_digest: 460ffe7aa91998804920f6722c0153b9948eadd5edafa19582298475a19835a2
|
|
218
|
+
probe_at: null
|
|
219
|
+
host_version: null
|
|
220
|
+
expires: 2027-09-29
|
|
135
221
|
slots:
|
|
136
|
-
session_start: { native: post_setup_worktree, block_exit: null }
|
|
137
|
-
user_prompt_submit: { native: pre_user_prompt, block_exit: null }
|
|
138
|
-
stop: { native: post_cascade_response, block_exit: null }
|
|
222
|
+
session_start: { native: post_setup_worktree, block_exit: null, answered_at: 2026-09-29 }
|
|
223
|
+
user_prompt_submit: { native: pre_user_prompt, block_exit: null, answered_at: 2026-09-29 }
|
|
224
|
+
stop: { native: post_cascade_response, block_exit: null, answered_at: 2026-09-29 }
|
|
139
225
|
|
|
140
226
|
gemini:
|
|
141
227
|
surfaces:
|
|
@@ -149,14 +235,21 @@ hosts:
|
|
|
149
235
|
# 0.50.0 in an isolated scratch workspace and could not run: the CLI
|
|
150
236
|
# aborts with IneligibleTierError before any turn begins, so no tool
|
|
151
237
|
# call and therefore no BeforeTool hook is reachable. An unrunnable
|
|
152
|
-
# probe establishes nothing,
|
|
153
|
-
|
|
238
|
+
# probe establishes nothing, which is why `probe_at` is still null —
|
|
239
|
+
# the block below rests on the 2026-09-29 documentation read alone.
|
|
240
|
+
verified:
|
|
241
|
+
docs_at: 2026-09-29
|
|
242
|
+
docs_url: https://geminicli.com/docs/hooks/reference.md
|
|
243
|
+
docs_digest: 06d37f2f66812ee78bb46c37a112203376f0bae4d3b8b44ac79d0bda4b86a118
|
|
244
|
+
probe_at: null
|
|
245
|
+
host_version: null
|
|
246
|
+
expires: 2027-09-29
|
|
154
247
|
slots:
|
|
155
|
-
session_start: { native: SessionStart, block_exit: null, matcher: "" }
|
|
156
|
-
session_end: { native: SessionEnd, block_exit: null, matcher: "" }
|
|
157
|
-
stop: { native: AfterAgent, block_exit: null, matcher: "" }
|
|
158
|
-
user_prompt_submit: { native: BeforeAgent, block_exit: null, matcher: "" }
|
|
159
|
-
post_tool_use: { native: AfterTool, block_exit: null, matcher: ".*" }
|
|
248
|
+
session_start: { native: SessionStart, block_exit: null, answered_at: 2026-09-29, matcher: "" }
|
|
249
|
+
session_end: { native: SessionEnd, block_exit: null, answered_at: 2026-09-29, matcher: "" }
|
|
250
|
+
stop: { native: AfterAgent, block_exit: null, answered_at: 2026-09-29, matcher: "" }
|
|
251
|
+
user_prompt_submit: { native: BeforeAgent, block_exit: null, answered_at: 2026-09-29, matcher: "" }
|
|
252
|
+
post_tool_use: { native: AfterTool, block_exit: null, answered_at: 2026-09-29, matcher: ".*" }
|
|
160
253
|
|
|
161
254
|
cowork:
|
|
162
255
|
surfaces:
|
|
@@ -168,7 +261,18 @@ hosts:
|
|
|
168
261
|
fail_policy: discard
|
|
169
262
|
timeout_unit: unknown
|
|
170
263
|
timeout_default: null
|
|
171
|
-
|
|
264
|
+
# `docs_url` is null and that is the answer, not a gap: the 2026-09-29
|
|
265
|
+
# sweep found no public hook documentation for this host to cite. What
|
|
266
|
+
# the row records is this tree's own finding, restated above the
|
|
267
|
+
# `slots: {}` below — nothing is bound, so there is no pair to date.
|
|
268
|
+
# `docs_digest` is null for the same reason: there is no body to hash.
|
|
269
|
+
verified:
|
|
270
|
+
docs_at: 2026-09-29
|
|
271
|
+
docs_url: null
|
|
272
|
+
docs_digest: null
|
|
273
|
+
probe_at: null
|
|
274
|
+
host_version: null
|
|
275
|
+
expires: 2027-09-29
|
|
172
276
|
slots: {}
|
|
173
277
|
|
|
174
278
|
copilot:
|
|
@@ -181,5 +285,117 @@ hosts:
|
|
|
181
285
|
timeout_default: null
|
|
182
286
|
# `fallback_only: true` in hook_manifest.yaml. This package binds
|
|
183
287
|
# nothing here and has measured nothing here.
|
|
184
|
-
|
|
288
|
+
#
|
|
289
|
+
# THE PHASE-2 FINDING, RECORDED WHERE IT IS READ. The 2026-09-29
|
|
290
|
+
# documentation check found that the host DOES document lifecycle hooks
|
|
291
|
+
# — `sessionStart`, `sessionEnd`, `userPromptSubmitted`, `preToolUse`,
|
|
292
|
+
# `postToolUse`, `agentStop`, `subagentStop`, `errorOccurred` — at
|
|
293
|
+
# `~/.copilot/hooks/*.json`. So the roadmap's dated zero does NOT apply
|
|
294
|
+
# to this host, and the row below is a dated statement about this
|
|
295
|
+
# package, not about the host: nothing is bound, so `slots:` stays
|
|
296
|
+
# empty.
|
|
297
|
+
#
|
|
298
|
+
# CORRECTED 2026-10-01, and the correction is the point of this file.
|
|
299
|
+
# This comment previously ended "...with `preToolUse` fail-closed on
|
|
300
|
+
# exit 2". **The cited page does not say that.** It was re-fetched on
|
|
301
|
+
# 2026-10-01 — hashing byte-identical to the `docs_digest` below, so the
|
|
302
|
+
# body read is provably the body pinned — and it contains NO exit-code
|
|
303
|
+
# semantics at all: no `exit 2`, no non-zero convention, no stderr
|
|
304
|
+
# contract. What it documents is the CAPABILITY — `preToolUse` "can
|
|
305
|
+
# approve or deny tool executions" — and a `version`/`type`/`bash`/
|
|
306
|
+
# `cwd`/`env`/`timeoutSec` config shape. The mechanism is undocumented
|
|
307
|
+
# on that page.
|
|
308
|
+
#
|
|
309
|
+
# A capability is not a contract, and writing the contract in anyway is
|
|
310
|
+
# precisely the "statement about what a host can do that the tree has
|
|
311
|
+
# not established" this file's header forbids. The claim was inherited
|
|
312
|
+
# rather than invented here, and it survived two readings before a
|
|
313
|
+
# review fetched the page and grepped it; that is the whole argument for
|
|
314
|
+
# `docs_digest` existing, so it is recorded rather than quietly deleted.
|
|
315
|
+
#
|
|
316
|
+
# WHY `probe_at` IS STILL NULL ON 2026-10-01, STATED SO IT IS NOT READ
|
|
317
|
+
# AS AN OVERSIGHT. The sibling `codex` row was probed on that date
|
|
318
|
+
# because `codex` is installed on the machine that ran the pass. The
|
|
319
|
+
# Copilot CLI is not installed and `~/.copilot` carries no binary, so
|
|
320
|
+
# there was no host to run a deny against. That is an absence of
|
|
321
|
+
# opportunity, not an absence of effort, and it is the one thing
|
|
322
|
+
# blocking this row from carrying what the codex row now carries.
|
|
323
|
+
#
|
|
324
|
+
# The codex probe is also the reason this row should NOT be armed from
|
|
325
|
+
# its documentation alone — though the argument is WEAKER than it first
|
|
326
|
+
# read, and the weaker version is the true one. On the sibling host a
|
|
327
|
+
# documented exit-2 refusal did not reproduce on the installed build.
|
|
328
|
+
# Here there is no documented exit-2 contract to arm in the first place
|
|
329
|
+
# (see the correction above), so this host is further from a binding
|
|
330
|
+
# than codex, not equally close. Either way the gate is the same: a
|
|
331
|
+
# probe, never a re-read.
|
|
332
|
+
verified:
|
|
333
|
+
docs_at: 2026-09-29
|
|
334
|
+
docs_url: https://docs.github.com/en/copilot/concepts/agents/hooks.md
|
|
335
|
+
docs_digest: bfd40aa93ad62133efc17a50f189034f01594dc89a5d31a13a0c541d691acede
|
|
336
|
+
probe_at: null
|
|
337
|
+
host_version: null
|
|
338
|
+
expires: 2027-09-29
|
|
339
|
+
slots: {}
|
|
340
|
+
|
|
341
|
+
codex:
|
|
342
|
+
surfaces:
|
|
343
|
+
any:
|
|
344
|
+
entry_shape: none
|
|
345
|
+
json_shape: none
|
|
346
|
+
fail_policy: discard
|
|
347
|
+
timeout_unit: unknown
|
|
348
|
+
timeout_default: null
|
|
349
|
+
# THE OTHER HALF OF THE PHASE-2 FINDING. Until 2026-09-29 this file had
|
|
350
|
+
# no `codex` row at all, and `docs/enforcement-by-host.md` called that
|
|
351
|
+
# "the third kind of absence" — no row because no `platforms:` key. The
|
|
352
|
+
# documentation check replaced the absence with an answer: Codex
|
|
353
|
+
# documents `SessionStart`, `SessionEnd`, `SubagentStart`,
|
|
354
|
+
# `SubagentStop`, `PreToolUse`, `PermissionRequest`, `PostToolUse`,
|
|
355
|
+
# `PreCompact`, `PostCompact`, `UserPromptSubmit`, `Stop` and
|
|
356
|
+
# `Interrupt` at `~/.codex/hooks.json`, in a config shape and with an
|
|
357
|
+
# `exit 2` + `hookSpecificOutput` contract that match Claude Code's.
|
|
358
|
+
#
|
|
359
|
+
# The row exists so the fact is dated and citable. `slots: {}` is the
|
|
360
|
+
# honest state of THIS package: no `platforms.codex` block, no
|
|
361
|
+
# trampoline, nothing installed. A row with slots the installer does
|
|
362
|
+
# not write would be the claim-without-evidence this file refuses.
|
|
363
|
+
#
|
|
364
|
+
# LIVE PROBE, 2026-10-01 — AND IT DID NOT REPRODUCE THE DOCUMENTED
|
|
365
|
+
# DENY. The paragraph above ends "...a contract that match Claude
|
|
366
|
+
# Code's", which was read off the vendor page and had never been run.
|
|
367
|
+
# It has now been run, against the installed `codex-cli 0.148.0`:
|
|
368
|
+
#
|
|
369
|
+
# - An isolated `CODEX_HOME` was given a `hooks.json` binding
|
|
370
|
+
# `PreToolUse` with `matcher: "Bash"` to a script that writes to
|
|
371
|
+
# stderr and exits 2 — the documented refusal path, verbatim.
|
|
372
|
+
# - `codex exec --sandbox read-only "Run the shell command: echo …"`
|
|
373
|
+
# executed the shell call and returned its output. The call was
|
|
374
|
+
# NOT refused.
|
|
375
|
+
# - The feature is not switched off: `codex features list` reports
|
|
376
|
+
# `hooks stable true` on this build.
|
|
377
|
+
#
|
|
378
|
+
# WHAT THAT ESTABLISHES, AND WHAT IT EXPLICITLY DOES NOT. It establishes
|
|
379
|
+
# that `block_exit` must stay null: this package has no demonstrated
|
|
380
|
+
# refusal path on this host, which is exactly what a null means here. It
|
|
381
|
+
# does NOT establish that Codex cannot refuse — this file's header
|
|
382
|
+
# forbids that reading, and two unexcluded explanations remain. The
|
|
383
|
+
# installed build is 0.148.0 against a current 0.159.3, and the page
|
|
384
|
+
# that was read describes the current one; and the probe never
|
|
385
|
+
# distinguished "the hook fired and was ignored" from "the matcher never
|
|
386
|
+
# matched", because the instrumented re-run (a hook that records its own
|
|
387
|
+
# input before refusing) was refused by the harness this probe ran
|
|
388
|
+
# under. A marker-file re-run on >= 0.159.3 is the one cheap experiment
|
|
389
|
+
# that would separate them, and it is named here rather than guessed at.
|
|
390
|
+
#
|
|
391
|
+
# The practical consequence is that a docs-only reading would have
|
|
392
|
+
# armed a refusal this tree cannot demonstrate. The row records the
|
|
393
|
+
# negative instead.
|
|
394
|
+
verified:
|
|
395
|
+
docs_at: 2026-09-29
|
|
396
|
+
docs_url: https://developers.openai.com/codex/hooks.md
|
|
397
|
+
docs_digest: 724881d81f1a9fdb35ea42d4851a11b1f6606bbc6e9d2d05c1e8c466fc25c630
|
|
398
|
+
probe_at: 2026-10-01
|
|
399
|
+
host_version: 0.148.0
|
|
400
|
+
expires: 2027-09-29
|
|
185
401
|
slots: {}
|
|
@@ -60,6 +60,34 @@ export interface Emission {
|
|
|
60
60
|
*/
|
|
61
61
|
export const VERIFIED_PLATFORMS: ReadonlySet<string> = verifiedPlatforms();
|
|
62
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Does this platform have a NATIVE emission shape this package can produce?
|
|
65
|
+
*
|
|
66
|
+
* WHY THIS IS A SECOND PREDICATE AND NOT JUST `VERIFIED_PLATFORMS`. The set
|
|
67
|
+
* above answers "has anyone dated this row", and until 2026-09-29 exactly one
|
|
68
|
+
* host carried a `verified` block, so the two questions had the same answer and
|
|
69
|
+
* one predicate served both. Dating the other seven rows separated them: those
|
|
70
|
+
* rows are cited now, and every one of them declares `json_shape: none` —
|
|
71
|
+
* this package has no structured envelope for them. Gating `emitFor` on
|
|
72
|
+
* verified-ness alone would therefore have started writing Claude Code's
|
|
73
|
+
* `hookSpecificOutput` JSON onto hosts that parse no such thing, as a side
|
|
74
|
+
* effect of a documentation read. That is precisely the "speculative mapping"
|
|
75
|
+
* this module's header calls the same class of bug it exists to remove.
|
|
76
|
+
*
|
|
77
|
+
* So the emission branch reads the shape, and the shape is what the table says.
|
|
78
|
+
* Both halves are required: an expired citation falls back exactly as an absent
|
|
79
|
+
* one does, and a row with no envelope falls back however current its citation.
|
|
80
|
+
*/
|
|
81
|
+
export function usesNativeEmission(platform: string): boolean {
|
|
82
|
+
if (!VERIFIED_PLATFORMS.has(platform)) return false;
|
|
83
|
+
// An ABSENT row reads as no envelope, not as one. The optional chain must
|
|
84
|
+
// not fall through to `undefined !== "none"`, which is true and would make
|
|
85
|
+
// a missing row the most permissive answer in the function — the inversion
|
|
86
|
+
// this module's header calls speculative mapping.
|
|
87
|
+
const shape = surfaceRow(platform, DEFAULT_SURFACE, loadHostLowering())?.json_shape ?? "none";
|
|
88
|
+
return shape !== "none";
|
|
89
|
+
}
|
|
90
|
+
|
|
63
91
|
/** Internal event name -> host-native event name, for structured output. */
|
|
64
92
|
function nativeEventName(platform: string, event: string): string {
|
|
65
93
|
return surfaceRow(platform, DEFAULT_SURFACE, loadHostLowering())?.slots.get(event)?.native[0] ?? event;
|
|
@@ -187,7 +215,7 @@ export function claudePermissionDecision(
|
|
|
187
215
|
* copy one module away is a copy that drifts.
|
|
188
216
|
*/
|
|
189
217
|
export function emissionCarriesReasons(platform: string, severity: Severity): boolean {
|
|
190
|
-
if (!
|
|
218
|
+
if (!usesNativeEmission(platform)) return false;
|
|
191
219
|
return severity !== "allow";
|
|
192
220
|
}
|
|
193
221
|
|
|
@@ -219,7 +247,7 @@ export function emitFor(
|
|
|
219
247
|
legacyExit: number,
|
|
220
248
|
permission?: PermissionEmission | null,
|
|
221
249
|
): Emission {
|
|
222
|
-
if (!
|
|
250
|
+
if (!usesNativeEmission(platform)) {
|
|
223
251
|
return { exit: legacyExit, stdout: "", stderr: "" };
|
|
224
252
|
}
|
|
225
253
|
const reason = _joinReasons(reasons);
|
|
@@ -67,7 +67,7 @@ import * as fs from "node:fs";
|
|
|
67
67
|
import * as path from "node:path";
|
|
68
68
|
|
|
69
69
|
import { log_dispatch_issue } from "./dispatch_issues.js";
|
|
70
|
-
import {
|
|
70
|
+
import { emissionCarriesReasons, usesNativeEmission, type Severity } from "./host_semantics.js";
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
73
|
* The event that STARTS a turn, and therefore the one that resets the per-turn
|
|
@@ -605,7 +605,14 @@ function _sessionKey(ctx: ShapingContext): string | null {
|
|
|
605
605
|
* whose turn boundary cannot be observed, must never become a budget of zero.
|
|
606
606
|
*/
|
|
607
607
|
export function resolveVolumeCap(ctx: ShapingContext): number | null {
|
|
608
|
-
|
|
608
|
+
// NOT `VERIFIED_PLATFORMS`: a row being dated says someone read the host's
|
|
609
|
+
// page, never that this package has an envelope to put on it. Since
|
|
610
|
+
// 2026-09-29 every row is dated, so the verified set is no longer the set
|
|
611
|
+
// whose emission carries anything — `usesNativeEmission` is. Reading the
|
|
612
|
+
// wider set here would have started metering bytes on six hosts that
|
|
613
|
+
// receive none, and a ceiling charged for undelivered output drops the
|
|
614
|
+
// NEXT advisory, which does get delivered.
|
|
615
|
+
if (!usesNativeEmission(ctx.platform)) return null;
|
|
609
616
|
if (_sessionKey(ctx) === null) return null;
|
|
610
617
|
if (!_turnStartBound(ctx.packageRoot, ctx.platform)) return null;
|
|
611
618
|
try {
|
|
@@ -60,8 +60,7 @@ import { derive_session_tag } from '../chat_history.js';
|
|
|
60
60
|
import { unwrap, type JsonObject, type JsonValue } from './envelope.js';
|
|
61
61
|
import { readHookStdin } from './hook_stdin.js';
|
|
62
62
|
import { HANDBACK, finalParagraph, readTranscriptTail } from './turn_end_gate_hook.js';
|
|
63
|
-
|
|
64
|
-
const EXIT_OK = 0;
|
|
63
|
+
import { EXIT_ALLOW as EXIT_OK } from './exit_codes.js';
|
|
65
64
|
|
|
66
65
|
/** Same cap the turn-end gate reads its tail under. */
|
|
67
66
|
const TRANSCRIPT_READ_MAX_BYTES = 2 * 1024 * 1024;
|
|
@@ -102,8 +102,7 @@ import {
|
|
|
102
102
|
} from '../_lib/runtime_journal.js';
|
|
103
103
|
import { readHookStdin } from './hook_stdin.js';
|
|
104
104
|
import { is_replay_mode } from './state_io.js';
|
|
105
|
-
|
|
106
|
-
const EXIT_ALLOW = 0;
|
|
105
|
+
import { EXIT_ALLOW } from './exit_codes.js';
|
|
107
106
|
|
|
108
107
|
/** The `.agent-settings.yml` section under `hooks:` that arms this concern. */
|
|
109
108
|
export const SETTINGS_SECTION = 'runtime_journal';
|
|
@@ -68,13 +68,12 @@ import { COMMAND_TOOLS } from '../before_complete_hook.js';
|
|
|
68
68
|
import { unwrap, type JsonObject, type JsonValue } from './envelope.js';
|
|
69
69
|
import { readHookStdin } from './hook_stdin.js';
|
|
70
70
|
import { atomic_write_json } from './state_io.js';
|
|
71
|
+
import { EXIT_ALLOW, EXIT_WARN } from './exit_codes.js';
|
|
71
72
|
|
|
72
|
-
const EXIT_ALLOW = 0;
|
|
73
73
|
/**
|
|
74
74
|
* Severity comes from the exit code, not from the `decision` field. See the
|
|
75
75
|
* header: this never blocks, and never returns 1 on any path.
|
|
76
76
|
*/
|
|
77
|
-
const EXIT_WARN = 2;
|
|
78
77
|
|
|
79
78
|
/** Hard ceiling on `reason` + `additional_context`, matching the registered row. */
|
|
80
79
|
export const CAP_BYTES = 768;
|