@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
|
@@ -52,15 +52,43 @@
|
|
|
52
52
|
# of them.
|
|
53
53
|
# canary optional mutation recipe (Phase 7) — see CANARY below
|
|
54
54
|
#
|
|
55
|
-
# COVERAGE — THE HONEST DENOMINATOR (re-measured 2026-
|
|
55
|
+
# COVERAGE — THE HONEST DENOMINATOR (re-measured 2026-10-01)
|
|
56
56
|
# ----------------------------------------------------------
|
|
57
|
-
#
|
|
57
|
+
# 347 `lint_*` / `check_*` / `audit_*` scripts live under `src/scripts/`
|
|
58
58
|
# (the count is computed, not asserted — `check_gate_coverage.count_gate_scripts`,
|
|
59
59
|
# re-run on the tree carrying these rows.)
|
|
60
|
-
# **
|
|
60
|
+
# **109 rows are listed below**, so the manifest covers 109/347 = 31.4 % of the
|
|
61
61
|
# population, and is complete for every gate that can carry a floor. The row
|
|
62
62
|
# count is `grep -c '^ - id:'`, recomputed here rather than incremented.
|
|
63
63
|
#
|
|
64
|
+
# RECOUNTED 2026-09-29 ON A MERGE, and this is the hazard the two blocks below
|
|
65
|
+
# predicted arriving in the form they predicted. Two branches each recounted
|
|
66
|
+
# CORRECTLY for their own tree — 341/103 here, 341/102-then-103 there — and
|
|
67
|
+
# after the merge both rows exist, so NEITHER pair describes the file. Both
|
|
68
|
+
# figures are recomputed on the MERGED tree rather than reconciled or
|
|
69
|
+
# incremented: 345 from `count_gate_scripts`, 107 from `grep -c '^ - id:'`.
|
|
70
|
+
# The same failure `.secret-allow` records for its own line pin, in a second
|
|
71
|
+
# file, for the same structural reason: a figure about an append-heavy manifest
|
|
72
|
+
# drifts per-branch, not only per-commit.
|
|
73
|
+
#
|
|
74
|
+
# RECOUNTED 2026-09-29, on the change that adds `check_read_surface_coverage`.
|
|
75
|
+
# The header said 97 rows against an actual 102 and 330 scripts against an
|
|
76
|
+
# actual 341 — drift of 5 and 11 against the tolerance of 15 in
|
|
77
|
+
# `check_gate_coverage.test.ts` § states an honest denominator, so nothing was
|
|
78
|
+
# red and the 341st arrival would not have redded it either. Corrected on the
|
|
79
|
+
# way past, which the block below says is exactly how this figure keeps ending
|
|
80
|
+
# up a function of who happened to look. Both numbers are computed here, not
|
|
81
|
+
# incremented: 341 from `count_gate_scripts`, 103 from `grep -c '^ - id:'`.
|
|
82
|
+
# RECOUNTED 2026-09-29, on the change that adds `check_host_format_column`, and
|
|
83
|
+
# BOTH figures had already drifted — which is the block below predicting itself.
|
|
84
|
+
# The header read 330 scripts against a measured 341 (drift 11, against the
|
|
85
|
+
# tolerance of 15 in `check_gate_coverage.test.ts` § states an honest
|
|
86
|
+
# denominator) and 97 rows against a measured 102 before this change. Neither
|
|
87
|
+
# was red and neither would have been for another four arrivals. Both are
|
|
88
|
+
# recomputed on this tree rather than incremented, for the reason the 2026-09-13
|
|
89
|
+
# block gives: an incremented figure inherits whatever error it started from,
|
|
90
|
+
# and the drift above is what that inheritance looks like after sixteen days.
|
|
91
|
+
#
|
|
64
92
|
# RECOUNTED 2026-09-13, on a change that adds NO gate script — and that is the
|
|
65
93
|
# point of this block rather than an aside. Every recount below was triggered by
|
|
66
94
|
# someone adding a row and noticing the header was stale on the way past, which
|
|
@@ -1418,6 +1446,14 @@ gates:
|
|
|
1418
1446
|
status: enforced
|
|
1419
1447
|
no_canary_reason: "The gate carries its own `--self-test` (5 cases, 3 rejecting) — so this row is an adopter, not an exemption; the reason field states why a PLANTED canary is additionally unavailable. Beyond the self-test the negative controls are the 30 mechanism tests in tests/scripts/check_claims.test.ts (17) and tests/scripts/check_claims_retired_phrasings.test.ts (13), each building a throwaway tree and running the real script in it. Twenty-one assert a REJECTION, and one publishes the LITERAL historical string (`zero runtime daemon`) that shipped in package.json and .github/about.yml while claim:no-runtime-daemon was already withdrawn. A planted canary here would mean committing a retired phrasing to a real publish surface and removing it again, and a forgotten one is precisely the defect this gate exists to catch."
|
|
1420
1448
|
|
|
1449
|
+
- id: check_kill_switch_table
|
|
1450
|
+
argv: []
|
|
1451
|
+
ci_invocation: .github/workflows/rule-backstops.yml
|
|
1452
|
+
min_scanned: 3
|
|
1453
|
+
corpus: "the three ledger targets this gate resolves — the tree enumeration over `src/scripts/hooks/` and `src/scripts/_lib/` (419 files, 29 switches at registration), the table's row set in `docs/contracts/hook-architecture-v1.md` § Kill switches (29 rows), and the set comparison between them. The FILE count is separately floored by `assertScanned`, which refuses a run that read zero source files, so a moved root fails rather than reporting an empty tree as agreement with an empty table."
|
|
1454
|
+
status: enforced
|
|
1455
|
+
no_canary_reason: "The gate carries its own `--self-test` (6 cases, 4 rejecting), run as its own CI step: a switch with no row, a row with no switch, one-added-plus-one-stale (which a COUNT comparison would pass and a set comparison must not), and a missing section — plus two ACCEPT cases pinning that the two esbuild `--define` identifiers stay excluded, so a gate that started rejecting everything would not pass either. A planted canary would mean committing a fake `AGENT_CONFIG_*` read into a real hook file and removing it again, and a forgotten one is an environment variable in the shipped hook layer that nothing reads — the exact defect this gate exists to catch, left behind by its own canary."
|
|
1456
|
+
|
|
1421
1457
|
- id: check_rule_evidence_declaration
|
|
1422
1458
|
argv: []
|
|
1423
1459
|
min_scanned: 10
|
|
@@ -1460,6 +1496,30 @@ gates:
|
|
|
1460
1496
|
cannot survive a collapse: at that point the gate's own `reportScanned`
|
|
1461
1497
|
fires first. (Set to 50 in the first version, corrected on an R2 finding.)
|
|
1462
1498
|
|
|
1499
|
+
- id: check_verify_expectation_delta
|
|
1500
|
+
argv: []
|
|
1501
|
+
min_scanned: 0
|
|
1502
|
+
corpus: "the `verify:` clauses a change ADDS under agents/roadmaps/ — a set difference against the base ref, not a file set, which is why the floor is 0: a change touching no roadmap legitimately adds none, and a floor above 0 would fail every unrelated pull request. The denominator the gate reports is added clauses, so a change that adds ten to one file scanned ten things."
|
|
1503
|
+
status: enforced
|
|
1504
|
+
no_canary_reason: >
|
|
1505
|
+
A canary cannot express this gate's violation. The violation is a property
|
|
1506
|
+
of the DIFF — a clause that was ADDED without an expectation — so a file
|
|
1507
|
+
planted in the tree is, from the gate's point of view, a clause somebody
|
|
1508
|
+
added, which is either a true positive (and the canary is indistinguishable
|
|
1509
|
+
from the thing it is meant to detect) or, once committed on main, invisible
|
|
1510
|
+
forever. The negative control is the gate's own `--self-test`, run as its
|
|
1511
|
+
own CI step: 10 cases, 4 rejecting — an added bare clause, a bare clause
|
|
1512
|
+
among expectation-carrying siblings, a `cat` command asked for an oracle
|
|
1513
|
+
despite a weak exit status, and an `./path/script.ts` invocation that the
|
|
1514
|
+
pointer carve-out must NOT exempt — plus six ACCEPT cases pinning what must
|
|
1515
|
+
not fire (an expectation in either form, the prose MANUAL form, a backticked
|
|
1516
|
+
file pointer with and without a `:line` suffix, and a bare clause already at
|
|
1517
|
+
base). One limit is stated rather than implied: the already-at-base case
|
|
1518
|
+
does not exercise context-line handling, because under `--unified=0` the
|
|
1519
|
+
unchanged clause does not appear in the patch at all; the unit test
|
|
1520
|
+
`reads ADDED lines only` is what pins that. Same class as
|
|
1521
|
+
check_estate_count's diff-scoped half.
|
|
1522
|
+
|
|
1463
1523
|
- id: check_static_parity
|
|
1464
1524
|
argv: ["--quiet"]
|
|
1465
1525
|
min_scanned: 20
|
|
@@ -2882,6 +2942,146 @@ gates:
|
|
|
2882
2942
|
A projected rule routing to a guideline body the projection does not
|
|
2883
2943
|
contain. The gate must fail on this and pass once it is removed.
|
|
2884
2944
|
|
|
2945
|
+
- id: check_placeholder_drift
|
|
2946
|
+
argv: []
|
|
2947
|
+
ci_invocation: .github/workflows/consistency.yml
|
|
2948
|
+
min_scanned: 400
|
|
2949
|
+
corpus: "every projected command and skill source — 502 at baseline; the ratchet reads their PROSE, per the unit published in report_invocation_surface.ts"
|
|
2950
|
+
status: enforced
|
|
2951
|
+
no_canary_reason: >-
|
|
2952
|
+
a create-only canary CAN plant a skill, and a planted body carrying a
|
|
2953
|
+
foreign placeholder is exactly what this gate rejects — so the plant is
|
|
2954
|
+
not impossible, it is redundant. `--self-test` already runs that plant as
|
|
2955
|
+
one of five cases over a fixture root, and doing it in-tree would drop a
|
|
2956
|
+
stray SKILL.md into a projected directory, reddening unrelated generator
|
|
2957
|
+
and count gates before this one is reached. Discrimination is proven by
|
|
2958
|
+
that self-test (5 cases, 3 rejecting) covering both directions the ratchet
|
|
2959
|
+
has to separate: at the seed and BELOW it, green — it must never fail on
|
|
2960
|
+
the absolute number; one occurrence over a ceiling, and a first occurrence
|
|
2961
|
+
against a zero ceiling, red; and an unreadable budget refusing with exit 2
|
|
2962
|
+
rather than certifying a green it could not compute.
|
|
2963
|
+
|
|
2964
|
+
- id: check_input_references
|
|
2965
|
+
argv: []
|
|
2966
|
+
ci_invocation: .github/workflows/consistency.yml
|
|
2967
|
+
min_scanned: 400
|
|
2968
|
+
corpus: "projected commands and skill sources — 502 at baseline. Only artifacts that DECLARE an inputs block are checked, so the finding population is a subset that grows with adoption"
|
|
2969
|
+
status: enforced
|
|
2970
|
+
no_canary_reason: >-
|
|
2971
|
+
the finding population is empty by construction until artifacts adopt the
|
|
2972
|
+
optional block, so a create-only canary would have to plant a DECLARING
|
|
2973
|
+
artifact carrying an unbacked reference — which is precisely what the
|
|
2974
|
+
self-test plants, over a fixture root instead of into src/skills/.
|
|
2975
|
+
Discrimination is proven there (3 cases, 1 rejecting) across the
|
|
2976
|
+
distinction that actually matters for this gate: a backed reference
|
|
2977
|
+
passes, an unbacked one fails, and an artifact with NO declaration passes
|
|
2978
|
+
however it references — the scope rule that lets the gate ship green.
|
|
2979
|
+
|
|
2980
|
+
- id: check_argument_hint
|
|
2981
|
+
argv: []
|
|
2982
|
+
ci_invocation: .github/workflows/consistency.yml
|
|
2983
|
+
min_scanned: 200
|
|
2984
|
+
corpus: "command sources under src/domains — 203 at baseline. Commands only, because argument-hint is a key of command.schema.json and of no other schema"
|
|
2985
|
+
status: enforced
|
|
2986
|
+
no_canary_reason: >-
|
|
2987
|
+
every violation is a DISAGREEMENT between two fields of one file — a
|
|
2988
|
+
hand-written hint contradicting a declaration, or a declaration with no
|
|
2989
|
+
hint. A created file is a legitimate corpus member unless it carries that
|
|
2990
|
+
disagreement, so the useful plant is a content plant, which the self-test
|
|
2991
|
+
performs over a fixture root (4 cases, 2 rejecting): a matching hint
|
|
2992
|
+
passes, a contradicting one fails, a declaration with no hint fails, and
|
|
2993
|
+
an artifact with no declaration keeps its free-text hint untouched. The
|
|
2994
|
+
conflict case was also reproduced by hand against the real tree on
|
|
2995
|
+
2026-09-29 by planting a wrong hint on a declaring command, which exits 1.
|
|
2996
|
+
|
|
2997
|
+
- id: check_inputs_parity
|
|
2998
|
+
argv: []
|
|
2999
|
+
ci_invocation: .github/workflows/consistency.yml
|
|
3000
|
+
min_scanned: 400
|
|
3001
|
+
corpus: "command sources, skill sources and projected commands — 705 at baseline; only those declaring an inputs block can diverge"
|
|
3002
|
+
status: enforced
|
|
3003
|
+
no_canary_reason: >-
|
|
3004
|
+
a violation is a DIFFERENCE between two readings of one file, so nothing
|
|
3005
|
+
about a file's existence can produce it — only its content can. The
|
|
3006
|
+
self-test plants that content over a fixture root (5 cases, 4 rejecting),
|
|
3007
|
+
one per way the stdlib-only MCP reader and a real YAML parse can part
|
|
3008
|
+
company: the flow form, a nested mapping under an item key, a block
|
|
3009
|
+
scalar, and a dash on its own line. The accepting case is the supported
|
|
3010
|
+
block form, because a suite that only proves failures proves a gate that
|
|
3011
|
+
refuses everything.
|
|
3012
|
+
|
|
3013
|
+
- id: check_read_surface_coverage
|
|
3014
|
+
argv: ["--quiet"]
|
|
3015
|
+
ci_invocation: .github/workflows/consistency.yml
|
|
3016
|
+
min_scanned: 12
|
|
3017
|
+
corpus: >
|
|
3018
|
+
modules under `src/scripts/` that both bring outside bytes in through a
|
|
3019
|
+
recognised inbound shape (`await fetch`, a `node:http(s)` request, a
|
|
3020
|
+
subprocess of curl/wget/gh, a parse of markup on stdin, or a shape the
|
|
3021
|
+
module declares at its own site) and hand a string onward — 24 at
|
|
3022
|
+
baseline. The floor sits at 12 because the shape set is narrow and the
|
|
3023
|
+
corpus moves by ones as a network call is added or removed; a reading
|
|
3024
|
+
below it means a detector stopped matching or the walk lost `src/scripts/`,
|
|
3025
|
+
not that half this repository's network calls were deleted.
|
|
3026
|
+
status: enforced
|
|
3027
|
+
no_canary_reason: >-
|
|
3028
|
+
the canary contract is create-only, and a planted module carrying a fetch
|
|
3029
|
+
would be a legitimate corpus member — the gate would emit a row for it and
|
|
3030
|
+
be right to. Every violation this gate has is a DIFFERENCE between two
|
|
3031
|
+
readings: the committed table against the regenerated one, the floor's
|
|
3032
|
+
header against the table, the detector's text against the no-percentage
|
|
3033
|
+
rule. None of those can be produced by a file's existence, only by its
|
|
3034
|
+
content. Discrimination is proven by `--self-test` instead (7 cases, 6
|
|
3035
|
+
rejecting: a seeded unsanitized fetch-derived emit the table does not
|
|
3036
|
+
carry, a hand-flipped coverage cell, a header restating a module path the
|
|
3037
|
+
table lists, a header with no pointer at all, a recall percentage in the
|
|
3038
|
+
structural detector, and an empty scan root). That last case is the
|
|
3039
|
+
scan-scope collapse `assertScanned` exists for, observed red on
|
|
3040
|
+
2026-09-29 by planting a fixture root with no `src/scripts/` at all: it
|
|
3041
|
+
exits 1 with "scanned 0 read surface(s)" rather than certifying a table it
|
|
3042
|
+
never compared.
|
|
3043
|
+
|
|
3044
|
+
- id: check_hook_bundle_composition
|
|
3045
|
+
argv: []
|
|
3046
|
+
ci_invocation: .github/workflows/consistency.yml
|
|
3047
|
+
min_scanned: 150
|
|
3048
|
+
corpus: >
|
|
3049
|
+
modules esbuild inlines into `dist/hooks/dispatch.js` — 276 at baseline,
|
|
3050
|
+
read from the metafile of a build this gate performs rather than from the
|
|
3051
|
+
untracked bundle on disk. The floor sits at 150 because the dispatcher's
|
|
3052
|
+
concern chain alone accounts for most of that graph and the figure moves by
|
|
3053
|
+
ones as a concern is added or a dependency dropped; a reading below it means
|
|
3054
|
+
the entry point moved or the build produced a stub, not that half the hook
|
|
3055
|
+
layer was deleted. Note the floor is a MODULE count while the gate's own
|
|
3056
|
+
bound is a BYTE count — deliberately two different units, because a bundle
|
|
3057
|
+
can collapse to a stub at constant byte size only by also collapsing its
|
|
3058
|
+
module graph, and neither number alone sees both failures.
|
|
3059
|
+
status: enforced
|
|
3060
|
+
no_canary_reason: >-
|
|
3061
|
+
the canary contract is create-only and this gate's corpus is a BUILD
|
|
3062
|
+
OUTPUT, not a tree. A planted file under `src/` is in scope only if
|
|
3063
|
+
something imports it, and a planted file under `dist/hooks/` is read by
|
|
3064
|
+
nothing here — the gate builds its own bundle to a temporary directory
|
|
3065
|
+
precisely so no on-disk artefact can steer its verdict. Both violations it
|
|
3066
|
+
has are properties of that build: a second YAML package contributing bytes,
|
|
3067
|
+
and a byte count over the committed ceiling. Discrimination is proven by
|
|
3068
|
+
`--self-test` instead (4 cases, 3 rejecting: a second YAML reader, a bundle
|
|
3069
|
+
one byte over the ceiling, and a metafile with no entry-point output — the
|
|
3070
|
+
last being the build-produced-nothing case, which must exit non-zero rather
|
|
3071
|
+
than certify a composition of 0 bytes). Proven additionally against the
|
|
3072
|
+
REAL artefact rather than only against fixtures: run over the metafile of
|
|
3073
|
+
the pre-swap bundle, both findings fire with the measured figures
|
|
3074
|
+
(`js-yaml` 95,846 B beside `yaml` 258,839 B, 1,563,576 bytes against a
|
|
3075
|
+
1,500,000 ceiling), which is the regression this gate was built for seen
|
|
3076
|
+
red on the bytes that actually shipped.
|
|
3077
|
+
note: >
|
|
3078
|
+
road-to-a-hook-bundle-with-one-yaml-reader 1.3 + 2.1. Its two siblings are
|
|
3079
|
+
local-only by construction (`dist/hooks/` is untracked, so CI has no bundle
|
|
3080
|
+
to read); this one is not, because it builds the bundle it measures. What it
|
|
3081
|
+
deliberately does NOT claim is anything about latency — the wall-clock axis
|
|
3082
|
+
is `src/config/hook-latency-budget.json` and no number here is derived from
|
|
3083
|
+
it.
|
|
3084
|
+
|
|
2885
3085
|
- id: check_enforcement_matrix
|
|
2886
3086
|
argv: ["--quiet"]
|
|
2887
3087
|
ci_invocation: .github/workflows/consistency.yml
|
|
@@ -2905,6 +3105,77 @@ gates:
|
|
|
2905
3105
|
and the phantom value wrote through; the backing set now reads the raw
|
|
2906
3106
|
configuration fields and the same sabotage exits 1.
|
|
2907
3107
|
|
|
3108
|
+
- id: check_host_format_column
|
|
3109
|
+
argv: ["--quiet"]
|
|
3110
|
+
ci_invocation: .github/workflows/consistency.yml
|
|
3111
|
+
min_scanned: 8
|
|
3112
|
+
corpus: "rows of the host table in docs/enforcement-by-host.md, found by its exact header line (9 at baseline — the nine hosts the file lists)"
|
|
3113
|
+
status: enforced
|
|
3114
|
+
no_canary_reason: >-
|
|
3115
|
+
the corpus is the one table in ONE document at a fixed path, and the
|
|
3116
|
+
canary contract is create-only. A planted second `enforcement-by-host.md`
|
|
3117
|
+
would have to overwrite the real one to land in scope, and every violation
|
|
3118
|
+
this gate can have is a MODIFICATION — a format cell hand-edited to name a
|
|
3119
|
+
path no emitter writes. Discrimination is proven by `--self-test` instead
|
|
3120
|
+
(5 cases, 4 rejecting: the historical `.cursorrules` defect planted back
|
|
3121
|
+
into the Cursor cell, the near-miss `.cursor/rules.mdc`, an invented
|
|
3122
|
+
surface on a correct neighbouring row, and a document whose table header
|
|
3123
|
+
is gone — which must fail on the scope assertion rather than pass over an
|
|
3124
|
+
empty corpus). The self-test earned that list rather than being written to
|
|
3125
|
+
match: on its first run it reported the near-miss case as NOT behaving,
|
|
3126
|
+
twice and for two different real defects. The first was in the matcher —
|
|
3127
|
+
`USER_SCOPE_PATHS`' bare `~/.cursor/` anchor was being treated as a root
|
|
3128
|
+
anything could refine, so `.cursor/rules.mdc` passed on an anchor no
|
|
3129
|
+
emitter writes into; anchors are exact-match only now. The second was in
|
|
3130
|
+
the fixture — it replaced the token rather than the whole row, and the
|
|
3131
|
+
same token appears in the prose paragraph above the table, which this gate
|
|
3132
|
+
does not scan, so `String.replace` mutated the prose and the case asserted
|
|
3133
|
+
nothing. End to end by hand on 2026-09-29: restoring `.cursorrules` into
|
|
3134
|
+
the committed Cursor row exits 1 naming that row and that token, and the
|
|
3135
|
+
restore exits 0.
|
|
3136
|
+
|
|
3137
|
+
- id: lint_deny_text
|
|
3138
|
+
argv: []
|
|
3139
|
+
ci_invocation: .github/workflows/consistency.yml
|
|
3140
|
+
min_scanned: 5
|
|
3141
|
+
corpus: "the `severity: blocking` concerns in src/scripts/hook_manifest.yaml, read from the manifest rather than listed in the gate (9 at baseline)"
|
|
3142
|
+
status: enforced
|
|
3143
|
+
no_canary_reason: >-
|
|
3144
|
+
the corpus is derived from one manifest at a fixed path and the canary
|
|
3145
|
+
contract is create-only. A planted extra concern file is out of scope
|
|
3146
|
+
unless the manifest also names it, and every violation this gate can have
|
|
3147
|
+
is a MODIFICATION — a refusal message edited to name the switch that
|
|
3148
|
+
turns the guard off. Discrimination is proven by `--self-test` instead
|
|
3149
|
+
(7 cases, 3 rejecting: an env assignment with its value, an `export`
|
|
3150
|
+
line, a settings key in prose, and — the direction that matters for a
|
|
3151
|
+
young pattern gate — a bare settings key used as a LOOKUP, which must
|
|
3152
|
+
pass, because a rule that fired on it would fire on every concern that
|
|
3153
|
+
reads its own configuration). An empty corpus is refused by
|
|
3154
|
+
`assertScanned` before the verdict, so a manifest whose `severity:` key
|
|
3155
|
+
was renamed fails rather than certifying zero concerns clean.
|
|
3156
|
+
|
|
3157
|
+
- id: lint_exit_codes
|
|
3158
|
+
argv: []
|
|
3159
|
+
ci_invocation: .github/workflows/consistency.yml
|
|
3160
|
+
min_scanned: 40
|
|
3161
|
+
corpus: "every `.ts` under src/scripts/hooks/ except `exit_codes.ts` itself, which is where the numerals are defined (59 at baseline)"
|
|
3162
|
+
status: enforced
|
|
3163
|
+
no_canary_reason: >-
|
|
3164
|
+
the canary contract is create-only, and a planted hook file carrying a
|
|
3165
|
+
bare `process.exit(1)` WOULD be a legitimate violation the gate is right
|
|
3166
|
+
to report — so a create-only canary here proves detection, not
|
|
3167
|
+
discrimination, and the interesting direction is the opposite one: an
|
|
3168
|
+
imported name must PASS. Discrimination is proven by `--self-test`
|
|
3169
|
+
instead (6 cases, 4 rejecting: a bare deny numeral, a bare allow numeral
|
|
3170
|
+
— `0` is the one people assume is harmless — a call with whitespace
|
|
3171
|
+
inside it, and an empty corpus; against two accepting cases, an imported
|
|
3172
|
+
name and the table file, whose fixture plants a bare exit into
|
|
3173
|
+
`exit_codes.ts` every run so the one exclusion is exercised rather than
|
|
3174
|
+
asserted). What a green does NOT cover is stated in the gate's header: it
|
|
3175
|
+
accepts an identifier without resolving where the identifier came from, so
|
|
3176
|
+
a local `const EXIT_BLOCK = 1` shadowing the import passes this gate and
|
|
3177
|
+
is caught in review as a duplicate declaration.
|
|
3178
|
+
|
|
2908
3179
|
- id: check_release_holds
|
|
2909
3180
|
argv: ['--lint']
|
|
2910
3181
|
ci_invocation: .github/workflows/release-validation.yml
|
|
@@ -2933,3 +3204,56 @@ gates:
|
|
|
2933
3204
|
inside the gate by `assertScanned` — observed red on 2026-09-19 by
|
|
2934
3205
|
pointing the folder list at a non-existent directory, which exits 1 with
|
|
2935
3206
|
"scanned 0 roadmap file(s)" rather than certifying an empty corpus.
|
|
3207
|
+
- id: check_host_docs_digest
|
|
3208
|
+
argv: []
|
|
3209
|
+
min_scanned: 8
|
|
3210
|
+
corpus: "verified ROWS of src/scripts/hooks/host_lowering.yaml — the (host, surface) pairs carrying a `verified:` block, which are the rows that can cite a page at all. Nine today; the floor is 8 because a host legitimately leaving the table is a one-row move, while a resolver that stopped seeing the table would read zero. Counting rows and not URLs is deliberate: `cowork` carries a verified block with `docs_url: null` and is a real row the watcher must still see and skip, so a URL count would make a correct no-url row look like corpus loss."
|
|
3211
|
+
status: enforced
|
|
3212
|
+
ci_invocation: .github/workflows/host-docs-digest.yml
|
|
3213
|
+
no_canary_reason: >-
|
|
3214
|
+
A planted file cannot express this gate's violation. The corpus is ONE
|
|
3215
|
+
configuration file plus the live bodies of eight vendor pages, so there is
|
|
3216
|
+
no tree a canary could be added to: the only way to make the floor fire is
|
|
3217
|
+
to remove rows from `host_lowering.yaml`, which is the thing the floor
|
|
3218
|
+
exists to notice and not something a canary may do to a plumbing source
|
|
3219
|
+
under `check_kernel_edit_ratified`. Discrimination is proven instead by
|
|
3220
|
+
two things that run. `--self-test` drives the real decision functions over
|
|
3221
|
+
the real table, including both directions of every state — unchanged vs
|
|
3222
|
+
changed, filled vs missed, 404 (`gone`) vs 503 (`unreachable`), and drift
|
|
3223
|
+
write vs no write. And `tests/scripts/host_docs_digest.test.ts` (20 cases)
|
|
3224
|
+
runs the REAL `lint_hook_manifest._check_host_lowering` over the REAL
|
|
3225
|
+
writer's output, so the full drift-to-refusal chain is exercised end to
|
|
3226
|
+
end rather than asserted. Both were seen RED deliberately: neutralising
|
|
3227
|
+
`isDrift` fails 4 of 20, and reverting the `gone` write-skip fails the
|
|
3228
|
+
case that pins it. The `filled`-vs-`missed` direction named above is
|
|
3229
|
+
asserted in BOTH places — it was credited to `--self-test` before it was
|
|
3230
|
+
actually there, which a review caught and which is why the assertion now
|
|
3231
|
+
exists rather than the sentence being softened.
|
|
3232
|
+
- id: lint_workflow_security
|
|
3233
|
+
argv: []
|
|
3234
|
+
min_scanned: 25
|
|
3235
|
+
corpus: "workflow files under .github/workflows/ — `*.yml` then `*.yaml`, the two globs the gate scans in that order (34 today). The floor is 25 because workflows are consolidated and split routinely, so a handful leaving is normal, while a glob that stopped matching or a directory that moved reads far below it. Counting FILES and not findings is the point: this gate legitimately reports zero findings, so a floor over findings would be the false-count shape this file rejects."
|
|
3236
|
+
status: enforced
|
|
3237
|
+
ci_invocation: .github/workflows/consistency.yml
|
|
3238
|
+
no_canary_reason: >-
|
|
3239
|
+
A create-only canary cannot change this gate's verdict. It is warn-only by
|
|
3240
|
+
design — the council-locked severity model (2026-06-13) makes MEDIUM
|
|
3241
|
+
advisory and only `--strict` turns a HIGH into exit 1 — and the CI
|
|
3242
|
+
invocation this row pins carries no `--strict`, so a planted workflow with
|
|
3243
|
+
a `pull_request_target` untrusted checkout would be REPORTED and the gate
|
|
3244
|
+
would still exit 0. A canary run under a different argv would prove
|
|
3245
|
+
something about an invocation CI does not make, which is the drift
|
|
3246
|
+
`ci_invocation` exists to stop. Discrimination is proven by `--self-test`
|
|
3247
|
+
instead (5 cases, 3 rejecting), which drives the two exits the gate really
|
|
3248
|
+
has rather than the one the CI invocation cannot reach: an empty workflows
|
|
3249
|
+
directory exits 2 instead of printing "0 HIGH, 0 MEDIUM" over nothing, a
|
|
3250
|
+
`pull_request_target` checkout of the untrusted ref exits 1 under
|
|
3251
|
+
`--strict`, and an over-cap allowlist exits 2 instead of suppressing
|
|
3252
|
+
silently. The two accepting cases pin the warn-only tier from the other
|
|
3253
|
+
side — a MEDIUM under `--strict` must still PASS, which is the direction a
|
|
3254
|
+
future re-tiering would silently break, and a clean workflow must pass at
|
|
3255
|
+
all. Seen red deliberately on 2026-10-01 by emptying `DANGEROUS_TRIGGERS`:
|
|
3256
|
+
the HIGH case alone fails, 4/5, and restoring it returns 5/5. Promoting the
|
|
3257
|
+
tier so a canary becomes expressible is a separate decision, recorded
|
|
3258
|
+
unresolved in
|
|
3259
|
+
agents/evidence/analysis/workflow-security-net-degraded-decision.md.
|