@event4u/agent-config 14.11.0 → 14.13.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 +368 -516
- package/CONTRIBUTING.md +38 -0
- package/CREDITS.md +135 -0
- package/NOTICE +13 -0
- package/README.md +8 -6
- package/dist/agent-src/commands/analyze/inbox.md +109 -2
- package/dist/agent-src/commands/feature/dev.md +7 -2
- package/dist/agent-src/commands/ghostwriter/write.md +5 -1
- package/dist/agent-src/commands/implement-ticket.md +1 -1
- package/dist/agent-src/commands/mission/upgrade.md +1 -1
- package/dist/agent-src/commands/orchestrate.md +2 -2
- package/dist/agent-src/commands/post-as/me.md +5 -1
- package/dist/agent-src/commands/pr/merge.md +19 -6
- package/dist/agent-src/commands/roadmap/process-full.md +19 -5
- package/dist/agent-src/commands/tdd/red.md +12 -2
- package/dist/agent-src/commands/work.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +40 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +5 -2
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +21 -0
- package/dist/agent-src/contexts/execution/evidence-discipline.md +26 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -0
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +40 -0
- package/dist/agent-src/contexts/execution/subagent-steering.md +13 -1
- package/dist/agent-src/contexts/execution/terminal-states.md +96 -0
- package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/dist/agent-src/rules/broken-access-control.md +4 -0
- package/dist/agent-src/rules/code-provenance.md +4 -0
- package/dist/agent-src/rules/design-fidelity.md +1 -1
- package/dist/agent-src/rules/domain-safety-pii.md +4 -0
- package/dist/agent-src/rules/domain-safety-retention.md +4 -0
- package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +14 -12
- package/dist/agent-src/rules/improve-before-implement.md +6 -8
- package/dist/agent-src/rules/laravel-routing.md +1 -1
- package/dist/agent-src/rules/lethal-trifecta-guard.md +4 -0
- package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +2 -0
- package/dist/agent-src/rules/source-confidentiality.md +12 -34
- package/dist/agent-src/rules/symfony-routing.md +1 -1
- package/dist/agent-src/rules/token-efficiency.md +14 -0
- package/dist/agent-src/rules/tool-safety.md +4 -0
- package/dist/agent-src/rules/untrusted-input-defense.md +4 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
- package/dist/agent-src/scripts/guarded_baseline.ts +328 -0
- package/dist/agent-src/scripts/roadmap_set_step.ts +253 -0
- package/dist/agent-src/scripts/stub_queue.ts +82 -0
- package/dist/agent-src/scripts/stubs_due.ts +400 -0
- package/dist/agent-src/scripts/ticket_bundles.ts +84 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +8 -4
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +17 -4
- package/dist/agent-src/skills/brand-audit/SKILL.md +33 -0
- package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -0
- package/dist/agent-src/skills/code-refactoring/SKILL.md +45 -1
- package/dist/agent-src/skills/code-review/SKILL.md +65 -6
- package/dist/agent-src/skills/command-writing/SKILL.md +35 -0
- package/dist/agent-src/skills/database/SKILL.md +8 -0
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +27 -0
- package/dist/agent-src/skills/design-review/SKILL.md +1 -1
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +25 -2
- package/dist/agent-src/skills/feature-planning/SKILL.md +9 -2
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +44 -0
- package/dist/agent-src/skills/git-workflow/SKILL.md +1 -1
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +38 -4
- package/dist/agent-src/skills/judge-artifact-completeness/rubrics/ticket-quality-score.json +2 -2
- package/dist/agent-src/skills/laravel/SKILL.md +35 -0
- package/dist/agent-src/skills/laravel-migration/SKILL.md +57 -3
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +26 -0
- package/dist/agent-src/skills/playbook-authoring/SKILL.md +28 -1
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +23 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +30 -13
- package/dist/agent-src/skills/skill-writing/references/procedure.md +29 -7
- package/dist/agent-src/skills/sql-writing/SKILL.md +7 -1
- package/dist/agent-src/skills/standards-from-config/SKILL.md +27 -4
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +9 -0
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +11 -4
- package/dist/agent-src/skills/symfony-workflow/SKILL.md +35 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +85 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +33 -9
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +37 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +53 -2
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +38 -1
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +9 -4
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +97 -3
- package/dist/agent-src/templates/scripts/check_memory.ts +258 -17
- package/dist/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
- package/dist/agent-src/templates/scripts/memory_lookup.ts +86 -0
- package/dist/agent-src/templates/scripts/memory_signal.ts +44 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
- package/dist/cli/commands/uiAudit.js +124 -5
- package/dist/cli/registry.js +2 -0
- package/dist/cli-delegate/{chunk-HYWSRNUX.js → chunk-2DK2VJWG.js} +3 -3
- package/dist/cli-delegate/{chunk-L43NCYPB.js → chunk-4FS4WRXP.js} +10 -0
- package/dist/cli-delegate/{chunk-OMIVVCG2.js → chunk-A4QJ6ENT.js} +24 -0
- package/dist/cli-delegate/{chunk-236PNQZK.js → chunk-AKJGUQNO.js} +466 -285
- package/dist/cli-delegate/{chunk-E46KPN6K.js → chunk-BTWUYDGN.js} +424 -363
- package/dist/cli-delegate/{chunk-K4FFODTS.js → chunk-ILMUPLGW.js} +1227 -316
- package/dist/cli-delegate/{chunk-FF7WAFMR.js → chunk-KPBWFOPZ.js} +5 -1
- package/dist/cli-delegate/cmd_adr_effective.js +102 -0
- package/dist/cli-delegate/cmd_conformance.js +42 -10
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_export.js +3 -2
- package/dist/cli-delegate/cmd_fleet.js +2 -2
- package/dist/cli-delegate/cmd_handoff.js +1 -1
- package/dist/cli-delegate/cmd_preflight.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +3 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +3 -2
- package/dist/cli-delegate/cmd_settings_set.js +2 -2
- package/dist/cli-delegate/cmd_sync.js +3 -2
- package/dist/cli-delegate/cmd_uninstall.js +3 -2
- package/dist/cli-delegate/cmd_validate.js +3 -2
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +62 -62
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/hooks/dispatch.js +2413 -1087
- package/dist/install/claudeRuleRewrite.js +254 -0
- package/dist/install/detect.js +29 -16
- package/dist/install/detect_php_shape.js +159 -0
- package/dist/install/install.mjs +639 -428
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +4818 -2645
- package/dist/server/schemas/settings.js +6 -0
- package/dist/ui/assets/index-D0jaCRPM.js +29 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +1 -1
- package/docs/THIRD-PARTY-NOTICES.md +25 -0
- package/docs/contracts/provider-lifecycle.md +1 -1
- package/docs/contracts/settings-classes.md +30 -4
- package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
- package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +1 -0
- package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +58 -3
- package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +2 -2
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
- package/docs/guidelines/agent-infra/break-glass-usage.md +7 -7
- package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
- package/docs/guidelines/agent-infra/comparison-matrix.md +1 -1
- package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
- package/docs/guidelines/agent-infra/direct-answers-demos.md +2 -2
- package/docs/guidelines/agent-infra/domain-eval-anti-pattern.md +1 -1
- package/docs/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
- package/docs/guidelines/agent-infra/engineering-memory-data-format.md +3 -3
- package/docs/guidelines/agent-infra/existence-question-verdicts.md +80 -0
- package/docs/guidelines/agent-infra/first-principles.md +2 -2
- package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +2 -2
- package/docs/guidelines/agent-infra/guarded-baseline.md +39 -0
- package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
- package/docs/guidelines/agent-infra/language-and-tone-examples.md +1 -1
- package/docs/guidelines/agent-infra/layered-settings.md +10 -10
- package/docs/guidelines/agent-infra/memory-access.md +1 -1
- package/docs/guidelines/agent-infra/mental-models.md +3 -3
- package/docs/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
- package/docs/guidelines/agent-infra/review-routing-data-format.md +7 -7
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +13 -7
- package/docs/guidelines/agent-infra/role-contracts.md +2 -2
- package/docs/guidelines/agent-infra/role-mode-router.md +3 -3
- package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
- package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +6 -6
- package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +2 -2
- package/docs/guidelines/agent-infra/six-hats.md +3 -3
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +6 -6
- package/docs/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
- package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
- package/docs/guidelines/augment-portability-patterns.md +6 -4
- package/docs/guidelines/code-clarity.md +21 -0
- package/docs/guidelines/component-oriented-and-oop-development.md +3 -2
- package/docs/guidelines/cross-role-handoff.md +2 -2
- package/docs/guidelines/design-fidelity-mechanics.md +1 -1
- package/docs/guidelines/docs/readme-size-and-splitting.md +3 -3
- package/docs/guidelines/php/database.md +90 -7
- package/docs/guidelines/prompt-templates.md +7 -7
- package/docs/guidelines/redundancy-taxonomy.md +180 -0
- package/llms.txt +2 -2
- package/package.json +10 -3
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
- package/src/agent-src/scripts/guarded_baseline.ts +328 -0
- package/src/agent-src/scripts/roadmap_set_step.ts +253 -0
- package/src/agent-src/scripts/stub_queue.ts +82 -0
- package/src/agent-src/scripts/stubs_due.ts +400 -0
- package/src/agent-src/scripts/ticket_bundles.ts +84 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +8 -4
- package/src/agent-src/templates/scripts/check_memory.ts +258 -17
- package/src/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
- package/src/agent-src/templates/scripts/memory_lookup.ts +86 -0
- package/src/agent-src/templates/scripts/memory_signal.ts +44 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
- package/src/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
- package/src/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
- package/src/config/agent-settings.template.yml +48 -3
- package/src/config/assurance-capability-registry.json +21 -9
- package/src/config/budgets.yml +19 -0
- package/src/config/canonical-terms.yml +119 -0
- package/src/config/capability-native-outcome-bars.json +81 -0
- package/src/config/ci-local-parity.yml +95 -0
- package/src/config/discovery/prompt-patterns.yml +56 -0
- package/src/config/drafting-channels.yml +43 -0
- package/src/config/estate-count-budget.json +38 -31
- package/src/config/evaluator-budgets.json +14 -14
- package/src/config/gate-coverage.yml +731 -30
- package/src/config/gate-reachability-exemptions.json +21 -0
- package/src/config/gate-violation-baselines.json +38 -20
- package/src/config/harness-evolution-budget.json +25 -0
- package/src/config/lapsed-beta-baseline.json +96 -0
- package/src/config/memory-twin-verdicts.yml +129 -0
- package/src/config/metric-registry.yml +124 -0
- package/src/config/pack-size-budget.json +35 -7
- package/src/config/preamble-payload-budget.json +97 -71
- package/src/config/profiles/balanced.ini +27 -0
- package/src/config/profiles/full.ini +27 -0
- package/src/config/profiles/minimal.ini +27 -0
- package/src/config/publish-surface.json +9 -2
- package/src/config/routing-coverage-seed.json +43 -0
- package/src/config/rule-stub-ceilings.json +126 -112
- package/src/config/suggestion-capture.json +28 -0
- package/src/config/surface-matrix.yml +21 -2
- package/src/config/turnaround-budget.json +66 -0
- package/src/config/web-launch-readiness.json +188 -0
- package/src/install/claudeRuleRewrite.ts +288 -0
- package/src/install/detect.ts +60 -17
- package/src/install/detect_php_shape.ts +191 -0
- package/src/scripts/_cli/cmd_doctor.ts +27 -112
- package/src/scripts/_dispatch.bash +27 -0
- package/src/scripts/_lib/activation_ladder.ts +211 -0
- package/src/scripts/_lib/activation_states.ts +88 -0
- package/src/scripts/_lib/adherence_detectors.ts +143 -0
- package/src/scripts/_lib/arith_claims.ts +181 -0
- package/src/scripts/_lib/arm_ranking.ts +62 -0
- package/src/scripts/_lib/asset_delivery_ledger.ts +303 -0
- package/src/scripts/_lib/audit_field_provenance.ts +54 -0
- package/src/scripts/_lib/auto_dispatch.ts +32 -3
- package/src/scripts/_lib/bench_ab_size_claim.ts +98 -4
- package/src/scripts/_lib/benchmark_cache_fields.ts +158 -0
- package/src/scripts/_lib/candidate_proposer.ts +402 -0
- package/src/scripts/_lib/candidate_record.ts +601 -0
- package/src/scripts/_lib/capture_rate.ts +319 -0
- package/src/scripts/_lib/collector_denominator.ts +771 -0
- package/src/scripts/_lib/collector_record.ts +340 -0
- package/src/scripts/_lib/collector_store.ts +664 -0
- package/src/scripts/_lib/collector_supervision.ts +827 -0
- package/src/scripts/_lib/concern_estate.ts +77 -0
- package/src/scripts/_lib/config_chain.ts +477 -0
- package/src/scripts/_lib/config_cost.ts +209 -0
- package/src/scripts/_lib/council_settings_block.ts +6 -0
- package/src/scripts/_lib/curator_ops.ts +172 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +266 -0
- package/src/scripts/_lib/delivery_criticality.ts +126 -0
- package/src/scripts/_lib/doctor_runtime_checks.ts +70 -0
- package/src/scripts/_lib/empty_cycles.ts +88 -0
- package/src/scripts/_lib/eval_publication.ts +354 -0
- package/src/scripts/_lib/evaluation_vector.ts +283 -0
- package/src/scripts/_lib/evaluator_promotion.ts +225 -0
- package/src/scripts/_lib/evidence_basis.ts +118 -0
- package/src/scripts/_lib/exec_evidence.ts +8 -0
- package/src/scripts/_lib/experience_card.ts +272 -0
- package/src/scripts/_lib/experience_report.ts +151 -0
- package/src/scripts/_lib/experiment_freeze.ts +112 -0
- package/src/scripts/_lib/gate_baseline.ts +150 -1
- package/src/scripts/_lib/generated_by.ts +66 -0
- package/src/scripts/_lib/harness_evolution_guards.ts +229 -0
- package/src/scripts/_lib/hook_effect_probe.ts +141 -0
- package/src/scripts/_lib/host_denominator.ts +687 -0
- package/src/scripts/_lib/host_projection_reach.ts +157 -0
- package/src/scripts/_lib/ignored_blocker.ts +148 -0
- package/src/scripts/_lib/install_reach_checks.ts +495 -0
- package/src/scripts/_lib/json_duplicate_keys.ts +150 -0
- package/src/scripts/_lib/judge_hygiene.ts +228 -0
- package/src/scripts/_lib/legacy_boundary_map.ts +228 -0
- package/src/scripts/_lib/loop_guards.ts +299 -0
- package/src/scripts/_lib/loss_class.ts +129 -0
- package/src/scripts/_lib/machine_wake.ts +51 -0
- package/src/scripts/_lib/md_prose_lines.ts +177 -0
- package/src/scripts/_lib/minimality_tiebreak.ts +168 -0
- package/src/scripts/_lib/one_resolver_invariant.ts +449 -0
- package/src/scripts/_lib/orchestration_record.ts +253 -5
- package/src/scripts/_lib/outcome_envelope.ts +227 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +125 -0
- package/src/scripts/_lib/paired_stats.ts +245 -0
- package/src/scripts/_lib/paired_verdict.ts +226 -0
- package/src/scripts/_lib/prefix_stable_surfaces.ts +123 -0
- package/src/scripts/_lib/privacy_class.ts +47 -0
- package/src/scripts/_lib/regression_neighbourhood.ts +259 -0
- package/src/scripts/_lib/repeated_failure.ts +105 -0
- package/src/scripts/_lib/repo_root.ts +111 -0
- package/src/scripts/_lib/review_skipped_record.ts +37 -0
- package/src/scripts/_lib/role_split.ts +338 -0
- package/src/scripts/_lib/runtime_journal.ts +1499 -0
- package/src/scripts/_lib/runtime_wiring_checks.ts +430 -0
- package/src/scripts/_lib/skill_catalogue.ts +11 -1
- package/src/scripts/_lib/skill_estate.ts +115 -0
- package/src/scripts/_lib/source_digest.ts +200 -0
- package/src/scripts/_lib/source_redact.ts +260 -0
- package/src/scripts/_lib/source_shape.ts +502 -0
- package/src/scripts/_lib/source_snapshot_dedup.ts +199 -0
- package/src/scripts/_lib/strip_comments.d.mts +8 -0
- package/src/scripts/_lib/strip_comments.mjs +65 -0
- package/src/scripts/_lib/test_red_state.ts +154 -0
- package/src/scripts/_lib/trigger_shift.ts +144 -0
- package/src/scripts/_lib/untrusted_content.ts +82 -7
- package/src/scripts/adoption_report.ts +1 -1
- package/src/scripts/adr/evidence_census.ts +1 -1
- package/src/scripts/adr/regenerate_index.ts +26 -2
- package/src/scripts/adr_cite_check.ts +164 -1
- package/src/scripts/ai_council/argument_exhaustion.ts +130 -0
- package/src/scripts/ai_council/blind_review.ts +11 -1
- package/src/scripts/ai_council/clients.ts +4 -0
- package/src/scripts/ai_council/config.ts +3 -0
- package/src/scripts/ai_council/consensus.ts +28 -8
- package/src/scripts/ai_council/consensus_round.ts +226 -0
- package/src/scripts/ai_council/disagreement_signal.ts +338 -0
- package/src/scripts/ai_council/inline_findings.ts +340 -0
- package/src/scripts/ai_council/judge_position_bias.ts +197 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -203
- package/src/scripts/ai_council/orchestrator_results.ts +23 -3
- package/src/scripts/ai_council/pricing.ts +106 -0
- package/src/scripts/ai_council/prompts.ts +74 -7
- package/src/scripts/ai_council/provider_leakage_bench.ts +327 -0
- package/src/scripts/ai_council/py_format.ts +14 -3
- package/src/scripts/ai_council/recouncil_guard.ts +293 -0
- package/src/scripts/ai_council/response_record.ts +50 -0
- package/src/scripts/ai_council/topology_bench_manifest.ts +860 -0
- package/src/scripts/ai_council/topology_vocabulary.ts +175 -0
- package/src/scripts/asset_delivery_ledger.ts +157 -0
- package/src/scripts/attest_artifact.ts +193 -0
- package/src/scripts/audit_auto_rules.ts +2 -1
- package/src/scripts/audit_command_surface.ts +1 -1
- package/src/scripts/audit_mcp_tools.ts +2 -2
- package/src/scripts/audit_skill_overlap_allowlist.json +6 -1
- package/src/scripts/audit_user_type_axis.ts +2 -1
- package/src/scripts/bench_ab_clone.ts +215 -10
- package/src/scripts/bench_ab_integrity.ts +119 -5
- package/src/scripts/bench_ab_v2_stats.ts +40 -213
- package/src/scripts/build_archive_index.ts +1 -1
- package/src/scripts/build_linear_digest.ts +1 -1
- package/src/scripts/build_proof.ts +11 -4
- package/src/scripts/build_rule_trigger_matrix.ts +1 -1
- package/src/scripts/build_source_digests.ts +157 -0
- package/src/scripts/cache_realization_report.ts +103 -0
- package/src/scripts/check_adr_frontmatter.ts +126 -0
- package/src/scripts/check_benchmark_report_fields.ts +207 -0
- package/src/scripts/check_beta_review_markers.ts +235 -6
- package/src/scripts/check_bundle_path_leakage.ts +195 -7
- package/src/scripts/check_claims.ts +576 -6
- package/src/scripts/check_command_examples.ts +557 -0
- package/src/scripts/check_composite_arming.ts +35 -0
- package/src/scripts/check_concern_admissions.ts +365 -0
- package/src/scripts/check_enforcement_coverage.ts +28 -0
- package/src/scripts/check_estate_count.ts +263 -3
- package/src/scripts/check_gate_reachability.ts +383 -0
- package/src/scripts/check_host_loadability.ts +104 -0
- package/src/scripts/check_loss_class_declared.ts +308 -0
- package/src/scripts/check_md_language.ts +15 -98
- package/src/scripts/check_memory_proposal.ts +18 -11
- package/src/scripts/check_no_currency_in_cost_surfaces.ts +225 -0
- package/src/scripts/check_no_external_sources.ts +281 -6
- package/src/scripts/check_pack_conformance_fixture.ts +11 -1
- package/src/scripts/check_pack_size.ts +59 -2
- package/src/scripts/check_preamble_payload_budget.ts +144 -6
- package/src/scripts/check_prefix_stable_mutation.ts +372 -0
- package/src/scripts/check_publish_surface.ts +10 -1
- package/src/scripts/check_references.ts +24 -1
- package/src/scripts/check_routing_coverage.ts +352 -0
- package/src/scripts/check_rule_evidence_declaration.ts +316 -0
- package/src/scripts/check_rule_projection_integrity.ts +14 -4
- package/src/scripts/check_score_contract.ts +528 -0
- package/src/scripts/check_skill_admissions.ts +514 -0
- package/src/scripts/check_static_parity.ts +285 -0
- package/src/scripts/check_supervision_claim_atomicity.ts +498 -0
- package/src/scripts/check_suppression_hygiene.ts +15 -0
- package/src/scripts/check_web_launch_readiness.ts +705 -0
- package/src/scripts/ci_settle.ts +39 -2
- package/src/scripts/code_graph/build.ts +60 -3
- package/src/scripts/code_graph/extract.ts +44 -0
- package/src/scripts/code_graph/types.ts +24 -0
- package/src/scripts/collector_daemon.ts +714 -0
- package/src/scripts/config_cost_report.ts +302 -0
- package/src/scripts/consumer_matrix.ts +74 -1
- package/src/scripts/cost/budget.mjs +10 -3
- package/src/scripts/cost/track.mjs +10 -3
- package/src/scripts/council_cli.ts +37 -54
- package/src/scripts/description_route_check.ts +494 -0
- package/src/scripts/dispatch_r2_reviewer.ts +46 -5
- package/src/scripts/evolution_lab.ts +980 -0
- package/src/scripts/external_sources_denylist.json +5 -18
- package/src/scripts/extract_audit_patterns.ts +21 -0
- package/src/scripts/fold_intake.ts +12 -1
- package/src/scripts/gen_discovery_baseline.ts +1 -1
- package/src/scripts/generate_capabilities_index.ts +12 -5
- package/src/scripts/generate_capability_matrix.ts +3 -3
- package/src/scripts/generate_command_flows.ts +2 -2
- package/src/scripts/generate_cookbook.ts +2 -2
- package/src/scripts/generate_index.ts +8 -1
- package/src/scripts/generate_knowledge_index.ts +2 -1
- package/src/scripts/generate_ownership_matrix.ts +2 -1
- package/src/scripts/generate_pack_manifests.ts +10 -2
- package/src/scripts/generate_role_experiences_catalog.ts +2 -2
- package/src/scripts/generate_settings_reference.ts +1 -1
- package/src/scripts/git_authorization_hook.ts +22 -1
- package/src/scripts/grade_target_readiness.ts +48 -5
- package/src/scripts/hook_effect_doctor.ts +261 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +125 -11
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +271 -0
- package/src/scripts/hooks/block_unauthorized_git.ts +18 -0
- package/src/scripts/hooks/concern_registry.ts +6 -0
- package/src/scripts/hooks/dispatch_hook.ts +32 -0
- package/src/scripts/hooks/journal_record_hook.ts +345 -0
- package/src/scripts/hooks/prepush_metadata_sources.sh +110 -0
- package/src/scripts/hooks/run_continuation_hook.ts +44 -9
- package/src/scripts/hooks/shims/install.sh +61 -0
- package/src/scripts/hooks/shims/php +101 -0
- package/src/scripts/hooks/suggestion_capture_hook.ts +378 -0
- package/src/scripts/hot_context_hook.ts +16 -0
- package/src/scripts/install-hooks.sh +20 -5
- package/src/scripts/install.ts +17 -35
- package/src/scripts/inventory_frontmatter.ts +2 -1
- package/src/scripts/lint_adr_sweep_routing.ts +12 -0
- package/src/scripts/lint_budget_ownership.ts +54 -4
- package/src/scripts/lint_canonical_terms.ts +604 -0
- package/src/scripts/lint_composition_review.ts +619 -0
- package/src/scripts/lint_consolidation_lineage.ts +666 -0
- package/src/scripts/lint_eval_specs.ts +593 -0
- package/src/scripts/lint_hook_manifest.ts +19 -0
- package/src/scripts/lint_host_portability.ts +373 -0
- package/src/scripts/lint_judge_prompt_expectation.ts +27 -1
- package/src/scripts/lint_memory_twin_parity.ts +335 -0
- package/src/scripts/lint_metric_consumers.ts +355 -0
- package/src/scripts/lint_skill_descriptions.ts +18 -1
- package/src/scripts/lint_skill_frontmatter_safety.ts +58 -0
- package/src/scripts/lint_skill_link_reach.ts +252 -0
- package/src/scripts/lint_skill_trigger_corpus.ts +752 -0
- package/src/scripts/lint_ticket_buildable.ts +17 -1
- package/src/scripts/mcp_server/consumer_tool_catalog.json +1 -1
- package/src/scripts/mcp_server/tool_catalog_source.ts +1 -1
- package/src/scripts/measure_docs_dead_links.ts +348 -0
- package/src/scripts/measure_host_capture.ts +461 -0
- package/src/scripts/migration_status.ts +3 -3
- package/src/scripts/model_rule_injection.ts +60 -0
- package/src/scripts/orchestration_record.ts +14 -0
- package/src/scripts/pack_install_smoke.ts +363 -0
- package/src/scripts/pr_conflict_census.ts +187 -0
- package/src/scripts/preamble_byte_census.ts +139 -10
- package/src/scripts/prepack-check.mjs +4 -1
- package/src/scripts/probe_turnaround.ts +384 -0
- package/src/scripts/probe_unblocked_ask.ts +279 -0
- package/src/scripts/render_benchmark_md.ts +1 -1
- package/src/scripts/report_pack_delta.ts +204 -0
- package/src/scripts/rule_activation_census.ts +70 -9
- package/src/scripts/rule_backlinks.ts +1 -1
- package/src/scripts/run_lifecycle_suite.ts +208 -0
- package/src/scripts/run_skill_evals.ts +40 -0
- package/src/scripts/schemas/delivery-manifest.schema.json +43 -0
- package/src/scripts/schemas/drafting-channels.schema.json +43 -0
- package/src/scripts/schemas/evals.schema.json +24 -1
- package/src/scripts/schemas/rule.schema.json +52 -1
- package/src/scripts/schemas/skill.schema.json +17 -2
- package/src/scripts/select_analysis_mode.ts +112 -0
- package/src/scripts/skill_overlap.ts +7 -1
- package/src/scripts/skill_tools/run_block_d_eval.ts +8 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +84 -3
- package/src/scripts/skill_tools/suggest_skill_for_task.ts +8 -1
- package/src/scripts/skill_usage_report.ts +2 -1
- package/src/scripts/stubs_due.ts +211 -0
- package/src/scripts/sweep_source_surfaces.ts +678 -0
- package/src/scripts/sync_pr_branch.ts +40 -1
- package/src/scripts/trigger_eval_grandfather.json +202 -222
- package/src/scripts/utilization_report.ts +22 -2
- package/src/server/schemas/settings.ts +10 -0
- package/src/templates/marketing-copy.yml +1 -1
- package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +0 -15
- package/dist/agent-src/skills/agent-security-review/evals/triggers.json +0 -52
- package/dist/agent-src/skills/ai-code-blindspots/evals/triggers.json +0 -52
- package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +0 -17
- package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +0 -13
- package/dist/agent-src/skills/brand/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-audit/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-identity/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-strategy/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +0 -17
- package/dist/agent-src/skills/bug-analyzer/evals/evals.json +0 -13
- package/dist/agent-src/skills/canvas-design/evals/triggers.json +0 -17
- package/dist/agent-src/skills/character-consistency/evals/evals.json +0 -16
- package/dist/agent-src/skills/code-intelligence/evals/triggers.json +0 -52
- package/dist/agent-src/skills/code-review/evals/evals.json +0 -100
- package/dist/agent-src/skills/command-routing/evals/evals.json +0 -14
- package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +0 -17
- package/dist/agent-src/skills/contract-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +0 -15
- package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +0 -17
- package/dist/agent-src/skills/dashboard-design/evals/evals.json +0 -16
- package/dist/agent-src/skills/dcf-modeling/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/dcf-modeling/evals/evals.json +0 -20
- package/dist/agent-src/skills/decision-record/evals/evals.json +0 -20
- package/dist/agent-src/skills/decision-record/evals/triggers.json +0 -87
- package/dist/agent-src/skills/design-intelligence/evals/evals.json +0 -14
- package/dist/agent-src/skills/design-intelligence/evals/triggers.json +0 -17
- package/dist/agent-src/skills/design-system-capture/evals/evals.json +0 -15
- package/dist/agent-src/skills/design-tokens/evals/triggers.json +0 -17
- package/dist/agent-src/skills/design-variations/evals/triggers.json +0 -17
- package/dist/agent-src/skills/developer-like-execution/evals/evals.json +0 -16
- package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +0 -16
- package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +0 -17
- package/dist/agent-src/skills/docx-authoring/evals/triggers.json +0 -52
- package/dist/agent-src/skills/dpa-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/editorial-calendar/evals/evals.json +0 -16
- package/dist/agent-src/skills/eloquent/evals/triggers.json +0 -17
- package/dist/agent-src/skills/estimate-ticket/evals/evals.json +0 -16
- package/dist/agent-src/skills/estimate-ticket/evals/output-schema.yml +0 -20
- package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +0 -19
- package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +0 -52
- package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +0 -47
- package/dist/agent-src/skills/experiment-loop/evals/output-schema.yml +0 -27
- package/dist/agent-src/skills/experiment-loop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/fe-design/evals/triggers.json +0 -67
- package/dist/agent-src/skills/forecasting/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/forecasting/evals/evals.json +0 -20
- package/dist/agent-src/skills/forensics-report/evals/triggers.json +0 -17
- package/dist/agent-src/skills/frontend-render-security/evals/triggers.json +0 -52
- package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +0 -16
- package/dist/agent-src/skills/gated-reach/evals/triggers.json +0 -72
- package/dist/agent-src/skills/github-ci/evals/evals.json +0 -25
- package/dist/agent-src/skills/history-design/evals/triggers.json +0 -17
- package/dist/agent-src/skills/html-deck/evals/triggers.json +0 -17
- package/dist/agent-src/skills/humanizer/evals/strip_fixtures.json +0 -57
- package/dist/agent-src/skills/humanizer/evals/triggers.json +0 -17
- package/dist/agent-src/skills/iconography/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-analyser/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-creator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-editing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/incident-commander/evals/evals.json +0 -20
- package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-artifact-completeness/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-injection-defense/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-synthesis/evals/triggers.json +0 -17
- package/dist/agent-src/skills/launch-readiness/evals/evals.json +0 -21
- package/dist/agent-src/skills/learning-tutor/evals/triggers.json +0 -52
- package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +0 -17
- package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +0 -17
- package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +0 -52
- package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +0 -52
- package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +0 -52
- package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +0 -20
- package/dist/agent-src/skills/logging-monitoring/evals/evals.json +0 -16
- package/dist/agent-src/skills/logo-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/messaging-architecture/evals/evals.json +0 -16
- package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +0 -17
- package/dist/agent-src/skills/nda-triage/evals/triggers.json +0 -17
- package/dist/agent-src/skills/operational-readiness/evals/triggers.json +0 -17
- package/dist/agent-src/skills/pdf-tools/evals/triggers.json +0 -52
- package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +0 -16
- package/dist/agent-src/skills/persona-improvement/evals/triggers.json +0 -52
- package/dist/agent-src/skills/php-coder/evals/triggers.json +0 -17
- package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +0 -21
- package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +0 -17
- package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +0 -16
- package/dist/agent-src/skills/prompt-validator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/quality-tools/evals/evals.json +0 -15
- package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/refine-prompt/evals/evals.json +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/evals.json +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/output-schema.yml +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/triggers.json +0 -17
- package/dist/agent-src/skills/release-comms/evals/evals.json +0 -16
- package/dist/agent-src/skills/rice-prioritization/evals/evals.json +0 -20
- package/dist/agent-src/skills/runway-cognition/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/runway-cognition/evals/evals.json +0 -20
- package/dist/agent-src/skills/scenario-modeling/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/scenario-modeling/evals/evals.json +0 -20
- package/dist/agent-src/skills/schema-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +0 -52
- package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +0 -52
- package/dist/agent-src/skills/server-hardening/evals/triggers.json +0 -17
- package/dist/agent-src/skills/skill-writing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +0 -47
- package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +0 -60
- package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +0 -52
- package/dist/agent-src/skills/systematic-debugging/evals/evals.json +0 -20
- package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +0 -52
- package/dist/agent-src/skills/test-driven-development/evals/evals.json +0 -16
- package/dist/agent-src/skills/threat-modeling/evals/evals.json +0 -21
- package/dist/agent-src/skills/typography-system/evals/evals.json +0 -14
- package/dist/agent-src/skills/typography-system/evals/triggers.json +0 -17
- package/dist/agent-src/skills/unit-economics-modeling/evals/domain-truth.json +0 -40
- package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +0 -24
- package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +0 -16
- package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +0 -20
- package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/vision-articulation/evals/evals.json +0 -16
- package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +0 -16
- package/dist/agent-src/skills/wireframe/evals/triggers.json +0 -17
- package/dist/agent-src/skills/workspace-link/evals/triggers.json +0 -17
- package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +0 -38
- package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +0 -52
- package/dist/cli/agent-config.js.map +0 -1
- package/dist/cli/bash/runBash.js.map +0 -1
- package/dist/cli/commands/commands.js.map +0 -1
- package/dist/cli/commands/config.js.map +0 -1
- package/dist/cli/commands/doctorShell.js.map +0 -1
- package/dist/cli/commands/mcpServer.js.map +0 -1
- package/dist/cli/commands/packs.js.map +0 -1
- package/dist/cli/commands/profiles.js.map +0 -1
- package/dist/cli/commands/recordTriggerEval.js.map +0 -1
- package/dist/cli/commands/rtkDetect.js.map +0 -1
- package/dist/cli/commands/settings.js.map +0 -1
- package/dist/cli/commands/uiAudit.js.map +0 -1
- package/dist/cli/commands/uiRender.js.map +0 -1
- package/dist/cli/commands/uiServe.js.map +0 -1
- package/dist/cli/commands/versions.js.map +0 -1
- package/dist/cli/commands/workspaces.js.map +0 -1
- package/dist/cli/configRoot.js.map +0 -1
- package/dist/cli/discovery/loadManifest.js.map +0 -1
- package/dist/cli/firstRunNotice.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/initRouting.js.map +0 -1
- package/dist/cli/log/logger.js.map +0 -1
- package/dist/cli/main.js.map +0 -1
- package/dist/cli/mcp/content.js.map +0 -1
- package/dist/cli/mcp/dispatch.js.map +0 -1
- package/dist/cli/mcp/stdio.js.map +0 -1
- package/dist/cli/paths.js.map +0 -1
- package/dist/cli/python/knowledge_ingest.js.map +0 -1
- package/dist/cli/python/workspace_analytics.js.map +0 -1
- package/dist/cli/python/workspace_crypto.js.map +0 -1
- package/dist/cli/python/workspace_documents.js.map +0 -1
- package/dist/cli/python/workspace_drive.js.map +0 -1
- package/dist/cli/python/workspace_drive_health.js.map +0 -1
- package/dist/cli/python/workspace_explain.js.map +0 -1
- package/dist/cli/python/workspace_hosts.js.map +0 -1
- package/dist/cli/python/workspace_inbox.js.map +0 -1
- package/dist/cli/python/workspace_render.js.map +0 -1
- package/dist/cli/python/workspace_roles.js.map +0 -1
- package/dist/cli/python/workspace_secrets.js.map +0 -1
- package/dist/cli/python/workspace_sessions.js.map +0 -1
- package/dist/cli/python/workspace_skills.js.map +0 -1
- package/dist/cli/registry.js.map +0 -1
- package/dist/install/agentSwitchDetection.js.map +0 -1
- package/dist/install/agentSwitchProfile.js.map +0 -1
- package/dist/install/atomic.js.map +0 -1
- package/dist/install/claudePathsPlan.js.map +0 -1
- package/dist/install/conflict.js.map +0 -1
- package/dist/install/detect.js.map +0 -1
- package/dist/install/emit_host_rules_cli.js.map +0 -1
- package/dist/install/globalRuleLayers.js.map +0 -1
- package/dist/install/hostLayerFingerprint.js.map +0 -1
- package/dist/install/partitionEligibility.js.map +0 -1
- package/dist/install/paths.js.map +0 -1
- package/dist/install/plan.js.map +0 -1
- package/dist/install/preflight.js.map +0 -1
- package/dist/install/rtkDetection.js.map +0 -1
- package/dist/install/ruleInScope.js.map +0 -1
- package/dist/install/ruleLayerPartition.js.map +0 -1
- package/dist/install/rule_scope.js.map +0 -1
- package/dist/install/rule_scope_cli.js.map +0 -1
- package/dist/install/selectedTools.js.map +0 -1
- package/dist/install/toolDetection.js.map +0 -1
- package/dist/install/txlog.js.map +0 -1
- package/dist/install/types.js.map +0 -1
- package/dist/install/wizard-plan.js.map +0 -1
- package/dist/install/wizardDismissals.js.map +0 -1
- package/dist/scripts/_lib/agent_settings.js.map +0 -1
- package/dist/scripts/_lib/agent_src.js.map +0 -1
- package/dist/scripts/_lib/claude_builtin_names.js.map +0 -1
- package/dist/scripts/_lib/claude_plugin.js.map +0 -1
- package/dist/scripts/_lib/claude_settings_hooks.js.map +0 -1
- package/dist/scripts/_lib/compile_time_toggles.js.map +0 -1
- package/dist/scripts/_lib/environment_detector.js.map +0 -1
- package/dist/scripts/_lib/host_launch.js.map +0 -1
- package/dist/scripts/_lib/install_layout.js.map +0 -1
- package/dist/scripts/_lib/installed_lock.js.map +0 -1
- package/dist/scripts/_lib/lean_projection_mode.js.map +0 -1
- package/dist/scripts/_lib/model_tier.js.map +0 -1
- package/dist/scripts/_lib/prune_empty_dirs.js.map +0 -1
- package/dist/scripts/_lib/scoped_projection.js.map +0 -1
- package/dist/scripts/_lib/script_output.js.map +0 -1
- package/dist/scripts/_lib/spawn_env.js.map +0 -1
- package/dist/scripts/_lib/surface_tiers.js.map +0 -1
- package/dist/scripts/_lib/token_count.js.map +0 -1
- package/dist/scripts/_lib/trigger_eval_floors.js.map +0 -1
- package/dist/scripts/_lib/ui_surface.js.map +0 -1
- package/dist/scripts/_lib/user_global_paths.js.map +0 -1
- package/dist/scripts/ai_council/modes.js.map +0 -1
- package/dist/scripts/ai_council/transport_resolver.js.map +0 -1
- package/dist/scripts/condense.js.map +0 -1
- package/dist/scripts/project_thin_rules.js.map +0 -1
- package/dist/server/app.js.map +0 -1
- package/dist/server/io/atomicMultiWrite.js.map +0 -1
- package/dist/server/io/atomicWrite.js.map +0 -1
- package/dist/server/io/sharedWriteCheck.js.map +0 -1
- package/dist/server/io/substituteTemplate.js.map +0 -1
- package/dist/server/io/yamlIO.js.map +0 -1
- package/dist/server/nicknameResolver.js.map +0 -1
- package/dist/server/port.js.map +0 -1
- package/dist/server/routes/discovery.js.map +0 -1
- package/dist/server/routes/install.js.map +0 -1
- package/dist/server/routes/ping.js.map +0 -1
- package/dist/server/routes/schema.js.map +0 -1
- package/dist/server/routes/settings.js.map +0 -1
- package/dist/server/routes/settingsChanges.js.map +0 -1
- package/dist/server/routes/userMd.js.map +0 -1
- package/dist/server/routes/wizard.js.map +0 -1
- package/dist/server/routes/workspace.js.map +0 -1
- package/dist/server/schemas/settings.js.map +0 -1
- package/dist/server/serverInfo.js.map +0 -1
- package/dist/server/token.js.map +0 -1
- package/dist/server/writeRoot.js.map +0 -1
- package/dist/shared/capabilities.js.map +0 -1
- package/dist/shared/interactiveContext.js.map +0 -1
- package/dist/shared/nicknamePrefill.js.map +0 -1
- package/dist/shared/settingsAsks.js.map +0 -1
- package/dist/shared/settingsCarveOut.js.map +0 -1
- package/dist/shared/settingsClasses.js.map +0 -1
- package/dist/shared/settingsConsent.js.map +0 -1
- package/dist/shared/settingsSurface.js.map +0 -1
- package/dist/shared/skillRanking.js.map +0 -1
- package/dist/shared/userMd/formAdapter.js.map +0 -1
- package/dist/shared/userMd/schema.js.map +0 -1
- package/dist/shared/userMd/utils.js.map +0 -1
- package/dist/ui/assets/index-Cxgy63kz.js +0 -26
- package/dist/ui/assets/index-Cxgy63kz.js.map +0 -1
- package/src/scripts/_lib/adr_frontmatter.test.ts +0 -365
- package/src/scripts/_lib/adversarial_council_gate.test.ts +0 -112
- package/src/scripts/_lib/adversarial_reconcile.test.ts +0 -197
- package/src/scripts/_lib/auto_dispatch.corpus.test.ts +0 -150
- package/src/scripts/_lib/secret_detector.test.ts +0 -108
- package/src/scripts/_lib/secret_detector_adversarial.test.ts +0 -116
- package/src/scripts/_lib/ui_authority.test.ts +0 -251
- package/src/scripts/_lib/untrusted_content.test.ts +0 -175
- package/src/scripts/check_secret_leak.test.ts +0 -90
- package/src/scripts/design_slop_rules.test.ts +0 -246
- package/src/scripts/self_review_gate.test.ts +0 -296
- package/src/shared/capabilities.test.ts +0 -43
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Site-type axis for the web-launch-readiness skill (road-to-web-launch-readiness 0.2). The design directive this file exists to enforce is CONDITIONAL, NOT FLAT: a check that applies everywhere is a check that gets ignored somewhere. Every entry declares which site types it applies to, so a SaaS app is never asked for opening hours and a docs site is never asked for a cookie banner it does not set. REGISTERED BEFORE ANY SKILL CODE EXISTS, which is the point of Phase 0: the axis is a decision, and deciding it after writing the checks would let the checks pick their own scope. Nothing reads this file yet -- the skill is gated behind b-estate-decision-web-launch.",
|
|
3
|
+
"schema_version": 1,
|
|
4
|
+
"registered_at": "2026-08-25",
|
|
5
|
+
"owner": "maintainer",
|
|
6
|
+
"review_by": "2027-08-25",
|
|
7
|
+
"site_types": {
|
|
8
|
+
"_comment": "The closed enum. A check may not name a type outside it, and a type carries no checks until one lists it -- so adding a type is inert until a check opts in, and removing one is caught by the schema test rather than silently emptying a check's scope.",
|
|
9
|
+
"values": [
|
|
10
|
+
"local-business",
|
|
11
|
+
"marketing-site",
|
|
12
|
+
"saas-app",
|
|
13
|
+
"docs",
|
|
14
|
+
"internal-tool"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"tiers": {
|
|
18
|
+
"_comment": "Report order, and it is the output contract rather than a label: critical first, situational last. A finding's tier is a property of the FINDING, not of the reader's patience -- a staging noindex on a production marketing site is critical whether or not the reader has time for it.",
|
|
19
|
+
"values": [
|
|
20
|
+
"critical",
|
|
21
|
+
"high",
|
|
22
|
+
"medium",
|
|
23
|
+
"situational"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"checks": [
|
|
27
|
+
{
|
|
28
|
+
"id": "staging-noindex-leftover",
|
|
29
|
+
"title": "A staging `noindex` or `robots.txt` disallow survived into production",
|
|
30
|
+
"applies_to": [
|
|
31
|
+
"local-business",
|
|
32
|
+
"marketing-site",
|
|
33
|
+
"saas-app",
|
|
34
|
+
"docs"
|
|
35
|
+
],
|
|
36
|
+
"tier": "critical",
|
|
37
|
+
"why": "The defect class with ZERO coverage in the estate (G0: `robots` 0 files, `noindex` 0 files) and the highest cost: the site ships, works, looks correct, and is invisible to search. Nothing in the tree looks for it today.",
|
|
38
|
+
"remediation": "Remove the `noindex` meta tag and the blanket `Disallow: /` from the production build; keep them behind the staging environment's own config rather than in shared source.",
|
|
39
|
+
"verification": "`curl -sI <prod-url> | grep -i x-robots-tag` returns nothing, `curl -s <prod-url>/robots.txt` carries no blanket disallow, and the rendered HTML has no `noindex` meta."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "https-enforcement",
|
|
43
|
+
"title": "HTTP is redirected to HTTPS and no asset is loaded over plain HTTP",
|
|
44
|
+
"applies_to": [
|
|
45
|
+
"local-business",
|
|
46
|
+
"marketing-site",
|
|
47
|
+
"saas-app",
|
|
48
|
+
"docs"
|
|
49
|
+
],
|
|
50
|
+
"tier": "critical",
|
|
51
|
+
"why": "A mixed-content asset silently breaks the padlock and, on a form page, ships a credential over plaintext. Browsers block some of it and load the rest, so the page LOOKS fine while the guarantee is gone -- which is why this is critical rather than high.",
|
|
52
|
+
"remediation": "Serve every asset over https:// or protocol-relative paths, and redirect http:// at the edge. Never hard-code an http:// origin you control.",
|
|
53
|
+
"verification": "`curl -sI http://<prod-host>/` returns a 301/308 to https, and the browser console shows no mixed-content warning on the heaviest page."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "custom-error-route",
|
|
57
|
+
"title": "A custom 404 route exists and is reachable",
|
|
58
|
+
"applies_to": [
|
|
59
|
+
"local-business",
|
|
60
|
+
"marketing-site",
|
|
61
|
+
"saas-app",
|
|
62
|
+
"docs"
|
|
63
|
+
],
|
|
64
|
+
"tier": "high",
|
|
65
|
+
"why": "A framework default error page leaks stack shape and loses the visitor. `404` matches 19 files in the estate, all HTTP-status tables -- none is a launch check.",
|
|
66
|
+
"remediation": "Add the framework's custom 404 route and give it a link back into the site.",
|
|
67
|
+
"verification": "`curl -s -o /dev/null -w '%{http_code}' <prod-url>/<random-path>` returns 404 and the body is the custom page, not the framework default."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "per-route-metadata",
|
|
71
|
+
"title": "Every indexable route carries a title and a meta description",
|
|
72
|
+
"applies_to": [
|
|
73
|
+
"local-business",
|
|
74
|
+
"marketing-site",
|
|
75
|
+
"docs"
|
|
76
|
+
],
|
|
77
|
+
"tier": "high",
|
|
78
|
+
"why": "`meta description` matches 0 files. Excluded for `saas-app` and `internal-tool` on purpose: an authenticated app's routes are not indexed, so per-route descriptions are work with no consumer.",
|
|
79
|
+
"remediation": "Add title and description to each route's metadata export; a shared default is a fallback, not a per-route value.",
|
|
80
|
+
"verification": "Fetch each route in the sitemap and assert a non-empty, non-duplicated title and description."
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "image-alternative-text",
|
|
84
|
+
"title": "Content images carry alternative text",
|
|
85
|
+
"applies_to": [
|
|
86
|
+
"local-business",
|
|
87
|
+
"marketing-site",
|
|
88
|
+
"saas-app",
|
|
89
|
+
"docs",
|
|
90
|
+
"internal-tool"
|
|
91
|
+
],
|
|
92
|
+
"tier": "high",
|
|
93
|
+
"why": "The one check that applies to every type, including internal tools -- an internal user with a screen reader is still a user. `alt text` matches 7 files, all accessibility prose rather than a launch check.",
|
|
94
|
+
"remediation": "Add `alt` to content images; decorative images take `alt=\"\"` explicitly rather than being left without the attribute.",
|
|
95
|
+
"verification": "Parse the rendered HTML and assert every `<img>` has an `alt` attribute, empty or not."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "document-head-basics",
|
|
99
|
+
"title": "Every page declares lang, charset and viewport",
|
|
100
|
+
"applies_to": [
|
|
101
|
+
"local-business",
|
|
102
|
+
"marketing-site",
|
|
103
|
+
"saas-app",
|
|
104
|
+
"docs",
|
|
105
|
+
"internal-tool"
|
|
106
|
+
],
|
|
107
|
+
"tier": "high",
|
|
108
|
+
"why": "A missing `lang` makes a screen reader guess the pronunciation of the whole page; a missing viewport makes a phone render a desktop layout at 320px. Both are one line, both are invisible on the developer's machine, and both are the kind of default a framework template silently drops when a page is hand-written.",
|
|
109
|
+
"remediation": "`<html lang=\"..\">`, `<meta charset=\"utf-8\">` and `<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">` in the shared layout, not per page.",
|
|
110
|
+
"verification": "View source on two unrelated routes and confirm all three are present on both -- one route proves the layout, two prove it is the layout and not a copy."
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"id": "canonical-and-sitemap-coherence",
|
|
114
|
+
"title": "Canonical URLs, sitemap and robots.txt agree with each other",
|
|
115
|
+
"applies_to": [
|
|
116
|
+
"local-business",
|
|
117
|
+
"marketing-site",
|
|
118
|
+
"docs"
|
|
119
|
+
],
|
|
120
|
+
"tier": "medium",
|
|
121
|
+
"why": "Three sources that can disagree silently: a sitemap listing a route whose canonical points elsewhere, or a robots disallow on a route the sitemap advertises. Note `canonical` matches 115 files in this estate in a completely different sense (\"the canonical rule\"), so its count is NOT coverage evidence.",
|
|
122
|
+
"remediation": "Make the canonical the same URL the sitemap lists; remove sitemap entries that robots.txt disallows.",
|
|
123
|
+
"verification": "For each sitemap URL, fetch it and assert the canonical equals the sitemap entry and robots.txt does not disallow it."
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"id": "required-legal-pages",
|
|
127
|
+
"title": "The legal pages the jurisdiction requires exist and are linked",
|
|
128
|
+
"applies_to": [
|
|
129
|
+
"local-business",
|
|
130
|
+
"marketing-site",
|
|
131
|
+
"saas-app"
|
|
132
|
+
],
|
|
133
|
+
"tier": "situational",
|
|
134
|
+
"why": "SITUATIONAL because the requirement is jurisdictional, not universal: a German commercial site needs an Impressum, a US one does not. The skill reports what is missing for the declared region and does not assert a legal conclusion -- that is the domain-safety-disclaimer boundary, not this file's.",
|
|
135
|
+
"remediation": "Add the pages the declared region requires and link them from the footer of every page.",
|
|
136
|
+
"verification": "Assert each declared-required page returns 200 and is reachable from the home page in one click."
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"id": "analytics-and-consent-wiring",
|
|
140
|
+
"title": "Analytics fires only after consent, where consent is required",
|
|
141
|
+
"applies_to": [
|
|
142
|
+
"local-business",
|
|
143
|
+
"marketing-site",
|
|
144
|
+
"saas-app"
|
|
145
|
+
],
|
|
146
|
+
"tier": "situational",
|
|
147
|
+
"why": "Also jurisdictional, and the failure is asymmetric: analytics that never fires costs data, analytics that fires before consent costs a regulatory exposure.",
|
|
148
|
+
"remediation": "Gate the analytics snippet behind the consent state; do not load it on first paint.",
|
|
149
|
+
"verification": "Load the page with consent declined and assert no request to the analytics origin."
|
|
150
|
+
}
|
|
151
|
+
],
|
|
152
|
+
"not_in_scope": {
|
|
153
|
+
"_comment": "Named so a later contributor does not add them by analogy. Performance budgets and Lighthouse scoring are a different instrument with a different failure mode (a score is a gradient, these checks are binary), and `lighthouse` matching 0 files is NOT an argument for adding it here. Accessibility beyond alt text belongs to accessibility-auditor, which already exists and does it properly.",
|
|
154
|
+
"items": [
|
|
155
|
+
"performance budgets",
|
|
156
|
+
"lighthouse scoring",
|
|
157
|
+
"full WCAG audit",
|
|
158
|
+
"SEO keyword strategy"
|
|
159
|
+
]
|
|
160
|
+
},
|
|
161
|
+
"no_import_decision": {
|
|
162
|
+
"_comment": "Step 0.3, recorded HERE rather than in the skill body, and the relocation is a correction the step needs rather than a liberty taken. 0.3 sits in Phase 0, whose Exit condition reads \"zero skill code written\" -- so its verify line (\"the decision is written in the skill's own body\") names an artefact its own phase forbids. The decision is what the step is about; it is recorded in the earliest durable place that exists, and the skill body restates it at 2.1 when there is a body.",
|
|
163
|
+
"decision": "no-import",
|
|
164
|
+
"decided_at": "2026-08-25",
|
|
165
|
+
"rule": "The external corpus is a STUDY OBJECT and a per-defect harvest source. Its rule set is not imported. Rules enter ONE AT A TIME, each against a named defect, each carrying its own remediation and verification.",
|
|
166
|
+
"why": "An imported rule set arrives with its authors' assumptions about site type, jurisdiction and stack, and none of those is checked on arrival. The failure is silent: the skill grows to N checks, each individually plausible, and the conditional axis this file exists to enforce is the first thing a bulk import flattens. One-at-a-time keeps the axis honest because every entry has to answer `applies_to` before it lands.",
|
|
167
|
+
"ceiling": 50,
|
|
168
|
+
"ceiling_enforced_by": "tests/scripts/web_launch_readiness_config.test.ts asserts checks.length < 50. Currently 7."
|
|
169
|
+
},
|
|
170
|
+
"regions": {
|
|
171
|
+
"_comment": "Region axis (road-to-web-launch-readiness 2.3). Separate from site_types because it answers a different question: site_types decides WHETHER a check applies, regions decides HOW SEVERELY. A DE-targeted site owes Impressum and Datenschutz by law (TMG 5 / DSGVO Art. 13), so `required-legal-pages` is critical there and situational elsewhere -- the same check, a different tier. Modelled as a tier ESCALATION rather than as a second applies_to list, because a legal page is not more or less applicable in Germany, it is more or less optional.",
|
|
172
|
+
"values": [
|
|
173
|
+
"de",
|
|
174
|
+
"eu",
|
|
175
|
+
"us",
|
|
176
|
+
"unspecified"
|
|
177
|
+
],
|
|
178
|
+
"default": "unspecified",
|
|
179
|
+
"escalations": [
|
|
180
|
+
{
|
|
181
|
+
"check": "required-legal-pages",
|
|
182
|
+
"region": "de",
|
|
183
|
+
"to": "critical",
|
|
184
|
+
"why": "TMG 5 obliges an Impressum and DSGVO Art. 13 a Datenschutzerklaerung for a DE-targeted commercial site. Abmahnung risk is real and immediate, which is what separates critical from situational here."
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
}
|
|
188
|
+
}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rewrite installed Claude Code rule files into host form, in place.
|
|
3
|
+
*
|
|
4
|
+
* ## The gap this closes
|
|
5
|
+
*
|
|
6
|
+
* `condense.ts::_emit_claude_rule` shapes a rule for Claude Code — it emits
|
|
7
|
+
* `paths:` and nothing else, because `paths:` is the one activation key the
|
|
8
|
+
* probed contract records this host as reading. It runs on the MAINTAINER
|
|
9
|
+
* projection path only. The installer's deploy loop copies
|
|
10
|
+
* `dist/agent-src/rules/` verbatim into the host anchor
|
|
11
|
+
* (`_copy_dir_dereferencing_symlinks`, `install.ts`), so an installed
|
|
12
|
+
* `~/.claude/rules/` receives the SOURCE form: agent-config's own frontmatter
|
|
13
|
+
* vocabulary (`type`, `tier`, `triggers`, …), none of which this host reads.
|
|
14
|
+
*
|
|
15
|
+
* Measured on a real install, 2026-08-30, before this module existed:
|
|
16
|
+
*
|
|
17
|
+
* ```
|
|
18
|
+
* files 104 · declaring paths: 0
|
|
19
|
+
* ⚠️ diverges from the source verdict (4 scoped)
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* The consequence is not cosmetic. On Claude Code `paths:` is EXCLUSIVE — with
|
|
23
|
+
* it a rule loads on a path match, without it the rule loads unconditionally —
|
|
24
|
+
* so three rules the emitter classifies path-only arrived in every session
|
|
25
|
+
* instead of on file contact.
|
|
26
|
+
*
|
|
27
|
+
* ## Why it lives here and not in `condense.ts`
|
|
28
|
+
*
|
|
29
|
+
* Same reasoning `claudePathsPlan.ts` beside it records: this is
|
|
30
|
+
* host-activation-key logic on the INSTALL side, and `condense.ts` is a
|
|
31
|
+
* multi-thousand-line orchestrator already past the source-size ceiling. Both
|
|
32
|
+
* of this module's inputs are already installer-side — `_claude_paths_plan`
|
|
33
|
+
* from `claudePathsPlan.ts` and `parseFrontmatter` from `ruleInScope.ts` — so
|
|
34
|
+
* nothing here reaches back into the projection graph, and the installer bundle
|
|
35
|
+
* gains no dependency on it.
|
|
36
|
+
*
|
|
37
|
+
* The two emitters are held together by a test rather than by a shared call:
|
|
38
|
+
* `tests/install/claude_rule_rewrite.test.ts` asserts, over every rule in
|
|
39
|
+
* `src/rules/`, that this module's plan is byte-identical to the one
|
|
40
|
+
* `condense.ts` emits. A divergence fails there rather than silently shipping
|
|
41
|
+
* two different activation surfaces to the same host.
|
|
42
|
+
*
|
|
43
|
+
* Side-effect-free apart from the writes it is asked to make. No CLI entry, no
|
|
44
|
+
* `process.exit`.
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
import * as fs from 'node:fs';
|
|
48
|
+
import * as path from 'node:path';
|
|
49
|
+
|
|
50
|
+
import { _claude_paths_plan } from './claudePathsPlan.js';
|
|
51
|
+
import { parseFrontmatter } from './ruleInScope.js';
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Frontmatter keys the rewrite must carry across, and why each one.
|
|
55
|
+
*
|
|
56
|
+
* `_inject_package_tag` (install.ts) writes these during the copy that runs
|
|
57
|
+
* immediately BEFORE this rewrite. `reap_tagged_orphans` then matches on the
|
|
58
|
+
* literal `package:` line — its own docblock calls itself "the only path with
|
|
59
|
+
* ownership proof independent of inventory history" — and doctor's stale-orphan
|
|
60
|
+
* check reads the same tag.
|
|
61
|
+
*
|
|
62
|
+
* A rewrite that rebuilt each file from the activation plan alone therefore
|
|
63
|
+
* DELETED the reaper's only evidence: zero files under the host anchor would
|
|
64
|
+
* carry the tag, the marker-based reaper would be dead for that subtree, and
|
|
65
|
+
* doctor would report `ok` there permanently. Found by the completion review of
|
|
66
|
+
* 2026-08-30, with a fixture: a tagged orphan was reaped before the rewrite and
|
|
67
|
+
* invisible after it.
|
|
68
|
+
*
|
|
69
|
+
* So the host form is activation keys PLUS these, and the two concerns are kept
|
|
70
|
+
* apart on purpose — {@link renderClaudeRule} stays activation-only so it can go
|
|
71
|
+
* on being compared byte-for-byte against the projection emitter, which never
|
|
72
|
+
* sees an install-time tag.
|
|
73
|
+
*/
|
|
74
|
+
export const PRESERVED_KEYS: readonly string[] = ['package', 'source_path'];
|
|
75
|
+
|
|
76
|
+
export interface ClaudeRuleRewriteResult {
|
|
77
|
+
/** Files read and rewritten. */
|
|
78
|
+
rewritten: number;
|
|
79
|
+
/** Basenames (without `.md`) that received a `paths:` block. */
|
|
80
|
+
scoped: string[];
|
|
81
|
+
/**
|
|
82
|
+
* Patterns the plan deliberately dropped, per file — surfaced rather than
|
|
83
|
+
* swallowed, because a dropped pattern silently widens a rule's activation
|
|
84
|
+
* from path-gated to unconditional.
|
|
85
|
+
*/
|
|
86
|
+
dropped: { rule: string; pattern: string; reason: string }[];
|
|
87
|
+
/** Rules the rewrite could not write, with the reason. Never thrown. */
|
|
88
|
+
failed: { rule: string; reason: string }[];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Splice the ownership keys of `original` into the activation-only `rendered`.
|
|
93
|
+
*
|
|
94
|
+
* Raw lines are carried across verbatim rather than re-serialised, so a quoted
|
|
95
|
+
* or unusually-spaced value cannot drift on the way through — the reaper matches
|
|
96
|
+
* a literal.
|
|
97
|
+
*/
|
|
98
|
+
export function _withPreservedKeys(rendered: string, original: string): string {
|
|
99
|
+
const keep: string[] = [];
|
|
100
|
+
if (original.startsWith('---')) {
|
|
101
|
+
const end = original.indexOf('\n---', 3);
|
|
102
|
+
if (end !== -1) {
|
|
103
|
+
for (const line of original.slice(3, end).split('\n')) {
|
|
104
|
+
if (PRESERVED_KEYS.some((k) => line.startsWith(`${k}:`))) keep.push(line);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (keep.length === 0) return rendered;
|
|
109
|
+
if (rendered.startsWith('---\n')) {
|
|
110
|
+
const end = rendered.indexOf('\n---', 3);
|
|
111
|
+
if (end !== -1) {
|
|
112
|
+
return rendered.slice(0, end) + '\n' + keep.join('\n') + rendered.slice(end);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// No activation block: the rule loads unconditionally and still needs its
|
|
116
|
+
// tag, so it gets a frontmatter block holding ONLY the ownership keys.
|
|
117
|
+
return ['---', ...keep, '---', '', rendered].join('\n');
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Rewrite, then render the two operator-facing lines the installer prints.
|
|
122
|
+
*
|
|
123
|
+
* The reporting lives here rather than at the call site for the reason
|
|
124
|
+
* `claudePathsPlan.ts` records for itself: `install.ts` is thousands of lines
|
|
125
|
+
* past `check_source_size_budget`'s ceiling, where every added line counts as a
|
|
126
|
+
* violation, and that gate's convention is that the total moves down through
|
|
127
|
+
* extraction and never up through a baseline raise. So the caller gets one call
|
|
128
|
+
* and a list of strings.
|
|
129
|
+
*/
|
|
130
|
+
export function rewriteAndReport(
|
|
131
|
+
rulesDir: string,
|
|
132
|
+
quiet: boolean,
|
|
133
|
+
info: (m: string) => void,
|
|
134
|
+
warn: (m: string) => void,
|
|
135
|
+
wrappers?: { wrapped: readonly string[]; reserved: readonly string[] },
|
|
136
|
+
): ClaudeRuleRewriteResult {
|
|
137
|
+
const result = rewriteClaudeRules(rulesDir);
|
|
138
|
+
// The flat-command wrapper report rides along rather than sitting at the
|
|
139
|
+
// call site: `install.ts` is thousands of lines past
|
|
140
|
+
// `check_source_size_budget`'s ceiling, and this module is the one place
|
|
141
|
+
// that already owns claude-code post-copy reporting. Moving it here is the
|
|
142
|
+
// reduction that pays for this feature's own lines — that gate's stated
|
|
143
|
+
// convention is that the total falls through extraction and never rises
|
|
144
|
+
// through a baseline edit. Messages are byte-identical to the originals.
|
|
145
|
+
if (wrappers && !quiet) {
|
|
146
|
+
if (wrappers.wrapped.length > 0) {
|
|
147
|
+
info(
|
|
148
|
+
` claude-code: ${wrappers.wrapped.length} visible flat command(s) projected as ` +
|
|
149
|
+
'skill wrappers (Claude Code flat-command discovery workaround)',
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
if (wrappers.reserved.length > 0) {
|
|
153
|
+
info(
|
|
154
|
+
` claude-code: ${wrappers.reserved.length} flat command(s) withheld — name is a ` +
|
|
155
|
+
`Claude Code built-in (${wrappers.reserved.join(', ')}); nested /cluster:sub ` +
|
|
156
|
+
'commands remain available',
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (result.rewritten > 0 && !quiet) {
|
|
161
|
+
info(
|
|
162
|
+
` claude-code: ${result.rewritten} rule(s) rewritten to host form; ` +
|
|
163
|
+
`${result.scoped.length} path-scoped (${result.scoped.join(', ') || 'none'})`,
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
// NOT one line per dropped pattern. Every mixed-trigger rule drops every
|
|
167
|
+
// pattern it has, by design and permanently, so the per-pattern loop emitted
|
|
168
|
+
// 19 stderr lines on every single install — unactionable by any consumer,
|
|
169
|
+
// surviving --quiet because `warn` writes unconditionally. This repository
|
|
170
|
+
// has already recorded its verdict on exactly that pattern elsewhere in the
|
|
171
|
+
// emitter. One counted line under --quiet's own guard; the detail stays in
|
|
172
|
+
// the returned struct for a caller that wants it.
|
|
173
|
+
if (result.dropped.length > 0 && !quiet) {
|
|
174
|
+
const rules = [...new Set(result.dropped.map((d) => d.rule))];
|
|
175
|
+
info(
|
|
176
|
+
` claude-code: ${rules.length} rule(s) keep unconditional activation ` +
|
|
177
|
+
'(mixed path + keyword triggers; `paths:` is exclusive on this host)',
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
for (const f of result.failed) {
|
|
181
|
+
warn(` claude-code: ${f.rule}: could not write host form — ${f.reason}`);
|
|
182
|
+
}
|
|
183
|
+
return result;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/** Python `str.rstrip()` with no args — mirrors `condense.ts::_pyRstrip`. */
|
|
187
|
+
function pyRstrip(s: string): string {
|
|
188
|
+
return s.replace(/\s+$/u, '');
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** Mirrors `condense.ts::_yaml_scalar`. */
|
|
192
|
+
function yamlScalar(value: string): string {
|
|
193
|
+
return JSON.stringify(value);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Render one rule's host form from its source text.
|
|
198
|
+
*
|
|
199
|
+
* Exported for the equivalence test. A rule with no path-shaped trigger gets
|
|
200
|
+
* NO frontmatter at all rather than an empty block the host would ignore —
|
|
201
|
+
* keys that do nothing are bytes in every session's standing context.
|
|
202
|
+
*/
|
|
203
|
+
export function renderClaudeRule(sourceText: string): {
|
|
204
|
+
text: string;
|
|
205
|
+
globs: string[];
|
|
206
|
+
dropped: { pattern: string; reason: string }[];
|
|
207
|
+
} {
|
|
208
|
+
const [meta, body] = parseFrontmatter(sourceText);
|
|
209
|
+
const plan = _claude_paths_plan(meta);
|
|
210
|
+
const lines: string[] = [];
|
|
211
|
+
if (plan.globs.length > 0) {
|
|
212
|
+
lines.push('---', 'paths:');
|
|
213
|
+
for (const g of plan.globs) {
|
|
214
|
+
lines.push(` - ${yamlScalar(g)}`);
|
|
215
|
+
}
|
|
216
|
+
lines.push('---', '');
|
|
217
|
+
}
|
|
218
|
+
lines.push(pyRstrip(body) + '\n');
|
|
219
|
+
return { text: lines.join('\n'), globs: plan.globs, dropped: plan.dropped };
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Rewrite every `*.md` directly under `rulesDir` into Claude host form.
|
|
224
|
+
*
|
|
225
|
+
* Idempotent: a file already in host form parses to `{paths: [...]}`, which
|
|
226
|
+
* carries no `triggers:` key, so `_claude_paths_plan` returns no globs and the
|
|
227
|
+
* rewrite would DROP the block. That is why the already-rewritten case is
|
|
228
|
+
* detected and skipped rather than re-run — re-running is the silent-widening
|
|
229
|
+
* failure this module exists to fix, applied to its own output.
|
|
230
|
+
*
|
|
231
|
+
* Returns counts rather than printing. The caller owns the reporting surface.
|
|
232
|
+
*/
|
|
233
|
+
export function rewriteClaudeRules(rulesDir: string): ClaudeRuleRewriteResult {
|
|
234
|
+
const result: ClaudeRuleRewriteResult = { rewritten: 0, scoped: [], dropped: [], failed: [] };
|
|
235
|
+
let entries: string[];
|
|
236
|
+
try {
|
|
237
|
+
entries = fs.readdirSync(rulesDir);
|
|
238
|
+
} catch {
|
|
239
|
+
return result;
|
|
240
|
+
}
|
|
241
|
+
for (const name of entries.filter((n) => n.endsWith('.md')).sort()) {
|
|
242
|
+
const full = path.join(rulesDir, name);
|
|
243
|
+
let stat: fs.Stats;
|
|
244
|
+
try {
|
|
245
|
+
stat = fs.lstatSync(full);
|
|
246
|
+
} catch {
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
// A symlink here is the legacy raw-md farm, not an installed copy.
|
|
250
|
+
// Rewriting through it would write into the projection source.
|
|
251
|
+
if (!stat.isFile() || stat.isSymbolicLink()) continue;
|
|
252
|
+
|
|
253
|
+
let text: string;
|
|
254
|
+
try {
|
|
255
|
+
text = fs.readFileSync(full, 'utf-8');
|
|
256
|
+
} catch {
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
const [meta] = parseFrontmatter(text);
|
|
260
|
+
// Already host form: `paths:` present and no source vocabulary left.
|
|
261
|
+
if (meta['paths'] !== undefined && meta['triggers'] === undefined) continue;
|
|
262
|
+
|
|
263
|
+
const rendered = renderClaudeRule(text);
|
|
264
|
+
const withOwnership = _withPreservedKeys(rendered.text, text);
|
|
265
|
+
if (withOwnership !== text) {
|
|
266
|
+
try {
|
|
267
|
+
fs.writeFileSync(full, withOwnership, 'utf-8');
|
|
268
|
+
} catch (e) {
|
|
269
|
+
// A single unwritable rule — a root-owned file left by an
|
|
270
|
+
// earlier `sudo` install — must not abort the whole install and
|
|
271
|
+
// skip every remaining tool, the inventory record, the lockfile
|
|
272
|
+
// correction and the fingerprint stamp. Report and continue.
|
|
273
|
+
result.failed.push({
|
|
274
|
+
rule: name.slice(0, -3),
|
|
275
|
+
reason: e instanceof Error ? e.message : String(e),
|
|
276
|
+
});
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
result.rewritten += 1;
|
|
280
|
+
}
|
|
281
|
+
const stem = name.slice(0, -3);
|
|
282
|
+
if (rendered.globs.length > 0) result.scoped.push(stem);
|
|
283
|
+
for (const d of rendered.dropped) {
|
|
284
|
+
result.dropped.push({ rule: stem, pattern: d.pattern, reason: d.reason });
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return result;
|
|
288
|
+
}
|
package/src/install/detect.ts
CHANGED
|
@@ -35,10 +35,16 @@ export const SETTINGS_FILE = '.agent-settings.yml';
|
|
|
35
35
|
/**
|
|
36
36
|
* Manifest files that, when present, count as a project-shape signal.
|
|
37
37
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
38
|
+
* `.git/` is intentionally absent — monorepos, dotfile-git repos, and non-Git
|
|
39
|
+
* workspaces all break it (ADR-007 D2). **That clause is about the `.git/`
|
|
40
|
+
* signal and nothing else.** It used to be cited here for a second property as
|
|
41
|
+
* well — that detection "short-circuits on the first hit" — which ADR-007 D2
|
|
42
|
+
* does not state. The citation was corrected on 2026-08-26
|
|
43
|
+
* (road-to-internal-estate-fit 2.2), and the behaviour it described was
|
|
44
|
+
* corrected with it: `detectProjectShape` now returns EVERY detected manifest
|
|
45
|
+
* (2.1), so the order below is a reporting order rather than a tie-break, and
|
|
46
|
+
* a polyglot repository is described as what it is instead of as its first
|
|
47
|
+
* alphabetically-privileged half.
|
|
42
48
|
*/
|
|
43
49
|
export const SCOPE_DETECT_MANIFESTS: readonly string[] = [
|
|
44
50
|
'package.json',
|
|
@@ -127,10 +133,37 @@ export function scopeToTarget(scope: Scope): InstallTarget | null {
|
|
|
127
133
|
}
|
|
128
134
|
|
|
129
135
|
/** Project shape inferred from manifest presence. */
|
|
136
|
+
export type ProjectKind =
|
|
137
|
+
| 'composer'
|
|
138
|
+
| 'npm'
|
|
139
|
+
| 'cargo'
|
|
140
|
+
| 'pyproject'
|
|
141
|
+
| 'go'
|
|
142
|
+
| 'ruby'
|
|
143
|
+
| 'unknown';
|
|
144
|
+
|
|
130
145
|
export interface ProjectShape {
|
|
131
|
-
|
|
146
|
+
/**
|
|
147
|
+
* The primary kind — the first manifest in {@link SCOPE_DETECT_MANIFESTS}
|
|
148
|
+
* order that is present. Retained unchanged so every existing caller keeps
|
|
149
|
+
* working; a single-manifest repository sees exactly what it saw before.
|
|
150
|
+
*/
|
|
151
|
+
readonly kind: ProjectKind;
|
|
132
152
|
readonly root: string;
|
|
153
|
+
/** The primary manifest, matching {@link ProjectShape.kind}. */
|
|
133
154
|
readonly manifest: string | null;
|
|
155
|
+
/**
|
|
156
|
+
* EVERY detected kind, in {@link SCOPE_DETECT_MANIFESTS} order.
|
|
157
|
+
*
|
|
158
|
+
* Added 2026-08-26 (road-to-internal-estate-fit 2.1). The shape of a
|
|
159
|
+
* repository carrying two manifests is *both*, and the caller can decide
|
|
160
|
+
* what to do with that — a `find()` returning the first one described a
|
|
161
|
+
* polyglot repository as its first half and gave the caller no way to know
|
|
162
|
+
* a second existed. Empty only when `kind` is `'unknown'`.
|
|
163
|
+
*/
|
|
164
|
+
readonly kinds: readonly ProjectKind[];
|
|
165
|
+
/** Every detected manifest filename, parallel to {@link ProjectShape.kinds}. */
|
|
166
|
+
readonly manifests: readonly string[];
|
|
134
167
|
}
|
|
135
168
|
|
|
136
169
|
/**
|
|
@@ -139,20 +172,30 @@ export interface ProjectShape {
|
|
|
139
172
|
* Manifest-to-kind mapping mirrors {@link SCOPE_DETECT_MANIFESTS}:
|
|
140
173
|
* `package.json` → npm, `composer.json` → composer, etc.
|
|
141
174
|
*/
|
|
175
|
+
const MANIFEST_KIND = {
|
|
176
|
+
'package.json': 'npm',
|
|
177
|
+
'composer.json': 'composer',
|
|
178
|
+
'pyproject.toml': 'pyproject',
|
|
179
|
+
'Cargo.toml': 'cargo',
|
|
180
|
+
'go.mod': 'go',
|
|
181
|
+
Gemfile: 'ruby',
|
|
182
|
+
} as const satisfies Record<string, ProjectKind>;
|
|
183
|
+
|
|
142
184
|
export function detectProjectShape(root: string): ProjectShape {
|
|
143
|
-
const
|
|
144
|
-
if (
|
|
145
|
-
return { kind: 'unknown', root, manifest: null };
|
|
185
|
+
const manifests = SCOPE_DETECT_MANIFESTS.filter((m) => existsSync(join(root, m)));
|
|
186
|
+
if (manifests.length === 0) {
|
|
187
|
+
return { kind: 'unknown', root, manifest: null, kinds: [], manifests: [] };
|
|
146
188
|
}
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
189
|
+
const kinds = manifests.map(
|
|
190
|
+
(m) => (MANIFEST_KIND as Record<string, ProjectKind>)[m] ?? 'unknown',
|
|
191
|
+
);
|
|
192
|
+
return {
|
|
193
|
+
kind: kinds[0] as ProjectKind,
|
|
194
|
+
root,
|
|
195
|
+
manifest: manifests[0] as string,
|
|
196
|
+
kinds,
|
|
197
|
+
manifests,
|
|
198
|
+
};
|
|
156
199
|
}
|
|
157
200
|
|
|
158
201
|
/** AI-tool presence flags discovered in a project tree. */
|