@event4u/agent-config 7.5.0 → 8.1.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/.claude-plugin/marketplace.json +8 -1
- package/AGENTS.md +9 -9
- package/CHANGELOG.md +317 -260
- package/README.md +35 -5
- package/dist/agent-src/commands/analytics/prune.md +1 -1
- package/dist/agent-src/commands/analytics/show.md +1 -1
- package/dist/agent-src/commands/analyze/decision.md +2 -2
- package/dist/agent-src/commands/analyze/incident.md +2 -2
- package/dist/agent-src/commands/analyze/near-miss.md +2 -2
- package/dist/agent-src/commands/analyze/postmortem.md +2 -2
- package/dist/agent-src/commands/analyze/premortem.md +2 -2
- package/dist/agent-src/commands/cost-report.md +25 -0
- package/dist/agent-src/commands/evals/analyze.json +30 -0
- package/dist/agent-src/commands/evals/mission-upgrade.json +30 -0
- package/dist/agent-src/commands/implement-ticket.md +1 -1
- package/dist/agent-src/commands/knowledge/forget.md +1 -1
- package/dist/agent-src/commands/knowledge/ingest.md +1 -1
- package/dist/agent-src/commands/knowledge/list.md +1 -1
- package/dist/agent-src/commands/memory/load.md +12 -11
- package/dist/agent-src/commands/memory/promote.md +30 -0
- package/dist/agent-src/commands/memory/propose.md +16 -2
- package/dist/agent-src/commands/mission/upgrade.md +1 -1
- package/dist/agent-src/commands/module/explore.md +11 -7
- package/dist/agent-src/commands/optimize-project.md +243 -0
- package/dist/agent-src/commands/optimize.md +5 -0
- package/dist/agent-src/commands/pr/create.md +37 -8
- package/dist/agent-src/commands/prediction-pool.md +2 -2
- package/dist/agent-src/commands/profile/activate.md +3 -3
- package/dist/agent-src/commands/profile/deactivate.md +2 -2
- package/dist/agent-src/commands/profile/show.md +3 -3
- package/dist/agent-src/commands/research/deep.md +5 -0
- package/dist/agent-src/commands/research/report.md +2 -1
- package/dist/agent-src/commands/roadmap/create.md +88 -10
- package/dist/agent-src/commands/roadmap/materialize.md +1 -1
- package/dist/agent-src/commands/roadmap/process-full.md +15 -2
- package/dist/agent-src/commands/roadmap/process-phase.md +18 -6
- package/dist/agent-src/commands/roadmap/process-step.md +4 -0
- package/dist/agent-src/commands/roadmap.md +1 -1
- package/dist/agent-src/commands/security-audit-config.md +1 -1
- package/dist/agent-src/commands/sync-agent-settings.md +1 -1
- package/dist/agent-src/commands/sync-gitignore/fix.md +42 -6
- package/dist/agent-src/commands/team-knowledge/bootstrap.md +106 -0
- package/dist/agent-src/commands/team-knowledge/consolidate.md +105 -0
- package/dist/agent-src/commands/team-knowledge.md +64 -0
- package/dist/agent-src/contexts/authority/commit-mechanics.md +8 -0
- package/dist/agent-src/contexts/authority/destructive-mechanics.md +11 -0
- package/dist/agent-src/contexts/authority/scope-mechanics.md +25 -0
- package/dist/agent-src/contexts/communication/rules-auto/reply-close-mechanics.md +43 -0
- package/dist/agent-src/contexts/contracts/agents-md-anatomy.md +1 -1
- package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +2 -2
- package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +14 -4
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +11 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +32 -8
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +107 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +71 -15
- package/dist/agent-src/contexts/execution/subagent-steering.md +41 -1
- package/dist/agent-src/contexts/override-system.md +1 -1
- package/dist/agent-src/personas/brand-strategist.md +0 -1
- package/dist/agent-src/personas/data-integrity.md +66 -0
- package/dist/agent-src/personas/design-director.md +0 -1
- package/dist/agent-src/personas/performance-engineer.md +66 -0
- package/dist/agent-src/personas/production-validator.md +73 -0
- package/dist/agent-src/rules/agent-authority.md +3 -4
- package/dist/agent-src/rules/analysis-skill-routing.md +3 -5
- package/dist/agent-src/rules/architecture.md +2 -4
- package/dist/agent-src/rules/artifact-drafting-protocol.md +35 -6
- package/dist/agent-src/rules/artifact-engagement-recording.md +2 -4
- package/dist/agent-src/rules/ask-when-uncertain.md +10 -14
- package/dist/agent-src/rules/augment-edit-discipline.md +3 -5
- package/dist/agent-src/rules/autonomous-execution.md +3 -5
- package/dist/agent-src/rules/brand-consistency.md +3 -5
- package/dist/agent-src/rules/brand-source-of-truth.md +3 -5
- package/dist/agent-src/rules/cli-output-handling.md +4 -6
- package/dist/agent-src/rules/command-suggestion-policy.md +3 -5
- package/dist/agent-src/rules/commit-conventions.md +3 -5
- package/dist/agent-src/rules/commit-policy.md +18 -10
- package/dist/agent-src/rules/content-quoting-floor.md +88 -0
- package/dist/agent-src/rules/context-hygiene.md +3 -5
- package/dist/agent-src/rules/copilot-routing.md +4 -6
- package/dist/agent-src/rules/decision-revisit-gate.md +120 -0
- package/dist/agent-src/rules/delegation-policy.md +10 -6
- package/dist/agent-src/rules/design-fidelity.md +3 -5
- package/dist/agent-src/rules/devcontainer-routing.md +4 -6
- package/dist/agent-src/rules/direct-answers.md +13 -17
- package/dist/agent-src/rules/docker-commands.md +3 -5
- package/dist/agent-src/rules/domain-adoption-policy.md +3 -5
- package/dist/agent-src/rules/domain-safety-disclaimer.md +3 -5
- package/dist/agent-src/rules/domain-safety-pii.md +3 -5
- package/dist/agent-src/rules/domain-safety-retention.md +3 -5
- package/dist/agent-src/rules/downstream-changes.md +3 -4
- package/dist/agent-src/rules/engineering-safety-floor.md +3 -5
- package/dist/agent-src/rules/external-reference-deep-dive.md +3 -5
- package/dist/agent-src/rules/fast-path-marker-visibility.md +3 -5
- package/dist/agent-src/rules/finance-safety-floor.md +3 -6
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +3 -5
- package/dist/agent-src/rules/git-history-discipline.md +3 -5
- package/dist/agent-src/rules/guidelines.md +2 -4
- package/dist/agent-src/rules/icon-consistency.md +3 -5
- package/dist/agent-src/rules/image-likeness-and-rights.md +3 -5
- package/dist/agent-src/rules/improve-before-implement.md +5 -5
- package/dist/agent-src/rules/invite-challenge.md +3 -5
- package/dist/agent-src/rules/language-and-tone.md +13 -15
- package/dist/agent-src/rules/laravel-routing.md +3 -5
- package/dist/agent-src/rules/laravel-translations.md +3 -5
- package/dist/agent-src/rules/legal-safety-floor.md +3 -5
- package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -5
- package/dist/agent-src/rules/linked-projects-onboarding-gate.md +4 -7
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +3 -5
- package/dist/agent-src/rules/markdown-safe-codeblocks.md +2 -4
- package/dist/agent-src/rules/media-governance-routing.md +3 -5
- package/dist/agent-src/rules/media-sync-ground-truth.md +3 -5
- package/dist/agent-src/rules/minimal-safe-diff.md +5 -5
- package/dist/agent-src/rules/missing-tool-handling.md +3 -5
- package/dist/agent-src/rules/model-recommendation.md +4 -6
- package/dist/agent-src/rules/no-attribution-footers.md +3 -5
- package/dist/agent-src/rules/no-cheap-questions.md +5 -8
- package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +3 -6
- package/dist/agent-src/rules/no-pr-progress-comments.md +3 -6
- package/dist/agent-src/rules/no-roadmap-references.md +3 -5
- package/dist/agent-src/rules/non-destructive-by-default.md +11 -13
- package/dist/agent-src/rules/notes-first-reasoning.md +3 -5
- package/dist/agent-src/rules/onboarding-gate.md +4 -6
- package/dist/agent-src/rules/output-discipline.md +3 -5
- package/dist/agent-src/rules/package-ci-checks.md +3 -5
- package/dist/agent-src/rules/persona-governance.md +2 -4
- package/dist/agent-src/rules/php-coding.md +3 -5
- package/dist/agent-src/rules/preservation-guard.md +2 -4
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -5
- package/dist/agent-src/rules/reviewer-awareness.md +5 -6
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +3 -5
- package/dist/agent-src/rules/roadmap-progress-sync.md +5 -5
- package/dist/agent-src/rules/role-mode-adherence.md +2 -4
- package/dist/agent-src/rules/rule-type-governance.md +3 -5
- package/dist/agent-src/rules/runtime-safety.md +2 -4
- package/dist/agent-src/rules/scope-control.md +10 -11
- package/dist/agent-src/rules/security-sensitive-stop.md +4 -5
- package/dist/agent-src/rules/size-enforcement.md +2 -4
- package/dist/agent-src/rules/skill-improvement-trigger.md +3 -5
- package/dist/agent-src/rules/skill-quality.md +3 -5
- package/dist/agent-src/rules/slash-command-routing-policy.md +3 -5
- package/dist/agent-src/rules/source-confidentiality.md +3 -5
- package/dist/agent-src/rules/source-discovery-gate.md +3 -5
- package/dist/agent-src/rules/source-of-truth.md +3 -5
- package/dist/agent-src/rules/strategy-safety-floor.md +3 -5
- package/dist/agent-src/rules/symfony-routing.md +4 -6
- package/dist/agent-src/rules/telegraph-speak.md +4 -5
- package/dist/agent-src/rules/think-before-action.md +7 -4
- package/dist/agent-src/rules/token-budget-discipline.md +29 -5
- package/dist/agent-src/rules/token-efficiency.md +3 -5
- package/dist/agent-src/rules/token-optimizer-maintenance.md +3 -5
- package/dist/agent-src/rules/tool-safety.md +2 -4
- package/dist/agent-src/rules/ui-audit-gate.md +3 -6
- package/dist/agent-src/rules/untrusted-input-defense.md +3 -5
- package/dist/agent-src/rules/upstream-proposal.md +4 -6
- package/dist/agent-src/rules/user-interaction.md +7 -5
- package/dist/agent-src/rules/user-interrupt-priority.md +17 -8
- package/dist/agent-src/rules/verify-before-complete.md +12 -22
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +3 -3
- package/dist/agent-src/scripts/update_roadmap_progress.ts +197 -7
- package/dist/agent-src/skills/adr-create/SKILL.md +48 -42
- package/dist/agent-src/skills/agent-docs-writing/SKILL.md +18 -0
- package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
- package/dist/agent-src/skills/ai-council/SKILL.md +14 -1
- package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +0 -3
- package/dist/agent-src/skills/brand/SKILL.md +1 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +3 -3
- package/dist/agent-src/skills/brand-strategy/SKILL.md +1 -1
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -3
- package/dist/agent-src/skills/canvas-design/SKILL.md +6 -0
- package/dist/agent-src/skills/check-refs/SKILL.md +7 -4
- package/dist/agent-src/skills/code-review/SKILL.md +1 -0
- package/dist/agent-src/skills/complexity-first-planning/SKILL.md +6 -5
- package/dist/agent-src/skills/condense-memory/SKILL.md +11 -11
- package/dist/agent-src/skills/context-document/SKILL.md +17 -0
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -3
- package/dist/agent-src/skills/decision-record/SKILL.md +6 -0
- package/dist/agent-src/skills/decision-review/SKILL.md +5 -3
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +6 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +5 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-tokens/SKILL.md +10 -4
- package/dist/agent-src/skills/design-variations/SKILL.md +127 -0
- package/dist/agent-src/skills/design-variations/evals/triggers.json +17 -0
- package/dist/agent-src/skills/emit-tickets/SKILL.md +4 -4
- package/dist/agent-src/skills/fe-design/SKILL.md +20 -0
- package/dist/agent-src/skills/html-deck/SKILL.md +123 -0
- package/dist/agent-src/skills/html-deck/evals/triggers.json +17 -0
- package/dist/agent-src/skills/html-deck/templates/deck-shell.html +77 -0
- package/dist/agent-src/skills/judge-code-quality/SKILL.md +1 -0
- package/dist/agent-src/skills/laravel/SKILL.md +0 -1
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +46 -0
- package/dist/agent-src/skills/lint-skills/SKILL.md +6 -6
- package/dist/agent-src/skills/md-language-check/SKILL.md +3 -3
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +66 -1
- package/dist/agent-src/skills/migration-architect/SKILL.md +1 -0
- package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +2 -2
- package/dist/agent-src/skills/performance-analysis/SKILL.md +2 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +4 -4
- package/dist/agent-src/skills/premortem/SKILL.md +0 -3
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +16 -0
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +3 -1
- package/dist/agent-src/skills/release-comms/SKILL.md +46 -45
- package/dist/agent-src/skills/roadmap-management/SKILL.md +21 -0
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +32 -2
- package/dist/agent-src/skills/root-cause-frameworks/SKILL.md +0 -3
- package/dist/agent-src/skills/security-audit/SKILL.md +1 -0
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +4 -0
- package/dist/agent-src/skills/source-discovery/SKILL.md +22 -3
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +33 -14
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +11 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +8 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +29 -0
- package/dist/agent-src/skills/threat-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
- package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -0
- package/dist/agent-src/skills/wireframe/SKILL.md +118 -0
- package/dist/agent-src/skills/wireframe/evals/triggers.json +17 -0
- package/dist/agent-src/templates/agent-settings.md +22 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/command.md +2 -2
- package/dist/agent-src/templates/contexts/knowledge-pages.md +116 -0
- package/dist/agent-src/templates/hooks/pre-commit-frontmatter +1 -1
- package/dist/agent-src/templates/roadmaps.md +70 -2
- package/dist/agent-src/templates/rule.md +1 -1
- package/dist/agent-src/templates/scripts/README.md +3 -3
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +109 -0
- package/dist/agent-src/templates/tickets.md +8 -8
- package/dist/cli/commands/recordTriggerEval.test.js +1 -1
- package/dist/cli/commands/recordTriggerEval.test.js.map +1 -1
- package/dist/cli/initRouting.js +4 -2
- package/dist/cli/initRouting.js.map +1 -1
- package/dist/cli/registry.js +1 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +718 -240
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +8 -8
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +43 -28
- package/dist/discovery/trust-report.md +12 -11
- package/dist/discovery/workspaces.json +29 -18
- package/dist/install/preflight.js +173 -0
- package/dist/install/preflight.js.map +1 -0
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +1 -1
- package/dist/server/routes/settings.js +4 -0
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/schemas/settings.js +3 -1
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +108 -0
- package/docs/MIGRATION.md +3 -3
- package/docs/architecture.md +5 -5
- package/docs/archive/CHANGELOG-pre-8.0.0.md +301 -0
- package/docs/benchmark.md +133 -2
- package/docs/benchmark.pinned.yml +31 -0
- package/docs/capability-matrix.md +1 -0
- package/docs/catalog.md +70 -60
- package/docs/command-flows.md +15 -3
- package/docs/comparison.yaml +35 -0
- package/docs/contracts/agents-layout.md +148 -0
- package/docs/contracts/brand-token-consumption.md +5 -0
- package/docs/contracts/capability-boundary.md +5 -0
- package/docs/contracts/command-category-governance.md +5 -0
- package/docs/contracts/command-clusters.md +1 -0
- package/docs/contracts/command-surface-tiers.md +1 -1
- package/docs/contracts/conformance.md +84 -0
- package/docs/contracts/creative-pack-boundary.md +5 -0
- package/docs/contracts/discovery-manifest.schema.json +5 -4
- package/docs/contracts/file-ownership-matrix.json +4605 -985
- package/docs/contracts/governance-enforcement-projection.md +5 -0
- package/docs/contracts/gui-wizard.md +1 -1
- package/docs/contracts/hook-architecture-v1.md +2 -2
- package/docs/contracts/implement-ticket-flow.md +1 -1
- package/docs/contracts/kernel-membership.md +13 -0
- package/docs/contracts/mcp-tool-inventory.md +23 -23
- package/docs/contracts/no-runtime-boundary.md +6 -1
- package/docs/contracts/review-lens-schema.md +5 -0
- package/docs/contracts/rule-router.md +102 -8
- package/docs/contracts/skill-bundled-assets.md +1 -1
- package/docs/contracts/skill-dry-run.md +1 -1
- package/docs/contracts/subagent-boundary.md +5 -0
- package/docs/contracts/ticket-bundle-format.md +9 -4
- package/docs/contracts/tier-3-contrib-plugin.md +2 -2
- package/docs/contracts/write-engine.md +3 -0
- package/docs/customization.md +87 -15
- package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +1 -1
- package/docs/decisions/ADR-109-subagent-v1-contract.md +246 -0
- package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +105 -0
- package/docs/decisions/INDEX.md +2 -0
- package/docs/distribution/awesome-list-submission.md +46 -0
- package/docs/distribution/launch-story-draft.md +58 -0
- package/docs/end-to-end-walkthroughs.md +2 -2
- package/docs/getting-started.md +2 -2
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +24 -0
- package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +1 -1
- package/docs/guidelines/agent-infra/linked-projects-onboarding-gate.md +2 -2
- package/docs/guidelines/agent-infra/missing-tool-handling.md +3 -3
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
- package/docs/guidelines/augment-portability-patterns.md +1 -1
- package/docs/guidelines/code-clarity.md +19 -0
- package/docs/guidelines/design-antipatterns-triggers.json +2 -1
- package/docs/guidelines/design-antipatterns.md +10 -1
- package/docs/guidelines/design-modes.md +6 -0
- package/docs/guidelines/php/general.md +9 -1
- package/docs/guidelines/php/php-coding-patterns.md +7 -0
- package/docs/guides/cross-repo-retrieval.md +1 -1
- package/docs/guides/frontend-design-corpus-refresh.md +2 -2
- package/docs/guides/local-analytics.md +4 -4
- package/docs/guides/skill-discovery.md +1 -1
- package/docs/guides/skill-preview.md +1 -1
- package/docs/hook-payload-capture.md +6 -6
- package/docs/install-friction-report.md +66 -0
- package/docs/installation.md +1 -1
- package/docs/maintainers/optional-media-deps.md +50 -0
- package/docs/mcp-server.md +11 -12
- package/docs/media/proof-demo.cast +14 -0
- package/docs/media/proof-demo.gif +0 -0
- package/docs/migration/consumer-template-consumption-model.md +1 -1
- package/docs/migration/divergences/bench-stats-float-precision.md +1 -1
- package/docs/migration/node-floor.md +1 -1
- package/docs/migration/yaml-roundtrip-spike.md +1 -1
- package/docs/personas.md +16 -5
- package/docs/positioning-evidence.md +86 -0
- package/docs/proof.md +86 -0
- package/docs/skills-catalog.md +1 -1
- package/docs/troubleshooting.md +8 -8
- package/docs/wedge/production-validator/README.md +57 -0
- package/docs/wedge/production-validator/production-validator.md +56 -0
- package/docs/wizard.md +2 -2
- package/package.json +1 -1
- package/src/config/agent-settings.template.yml +59 -4
- package/src/config/agents-paths.yml +254 -0
- package/src/config/budgets.yml +16 -0
- package/src/config/discovery/packs.yml +1 -0
- package/src/config/discovery/unassigned-artefacts.yml +2 -0
- package/src/config/gitignore-block.txt +25 -0
- package/src/config/host-capabilities.yml +31 -0
- package/src/config/profiles/balanced.ini +4 -0
- package/src/config/profiles/full.ini +4 -0
- package/src/config/profiles/minimal.ini +4 -0
- package/src/scripts/_cli/cmd_conformance.ts +716 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -2
- package/src/scripts/_cli/cmd_fleet.ts +401 -0
- package/src/scripts/_cli/cmd_preflight.ts +159 -0
- package/src/scripts/_dispatch.bash +10 -0
- package/src/scripts/_lib/knowledge_events.ts +193 -0
- package/src/scripts/_lib/subagent_steering.ts +115 -3
- package/src/scripts/_lib/text_similarity.ts +75 -0
- package/src/scripts/ai-video/test-pipeline.sh +1 -1
- package/src/scripts/ai_council/clients.ts +19 -3
- package/src/scripts/append_contested.ts +112 -0
- package/src/scripts/audit_auto_rules.ts +11 -1
- package/src/scripts/audit_mcp_tools.ts +25 -11
- package/src/scripts/bench_ab_v2_run.ts +527 -40
- package/src/scripts/bench_ab_v2_stats.ts +6 -0
- package/src/scripts/bench_matrix.ts +266 -0
- package/src/scripts/bootstrap_knowledge.ts +267 -0
- package/src/scripts/build_discovery_manifest.ts +42 -2
- package/src/scripts/build_proof.ts +214 -0
- package/src/scripts/check_always_budget.ts +3 -0
- package/src/scripts/check_augment_description_cap.ts +2 -2
- package/src/scripts/check_claims.ts +270 -0
- package/src/scripts/check_comparison.ts +79 -0
- package/src/scripts/check_generated_artefact_headers.ts +109 -0
- package/src/scripts/check_generator_output_coverage.ts +142 -0
- package/src/scripts/check_gitignore_freshness.ts +127 -0
- package/src/scripts/check_knowledge_pages.ts +210 -0
- package/src/scripts/check_knowledge_sharing.ts +162 -0
- package/src/scripts/check_media_deps.ts +91 -0
- package/src/scripts/check_memory_contradiction.ts +280 -0
- package/src/scripts/check_memory_similarity.ts +134 -0
- package/src/scripts/check_quality_regression.ts +56 -10
- package/src/scripts/check_references.ts +3 -1
- package/src/scripts/check_release_pr_shape.ts +4 -0
- package/src/scripts/check_site_links.ts +135 -0
- package/src/scripts/check_skill_gaps.ts +99 -0
- package/src/scripts/check_token_quality_golden.ts +197 -11
- package/src/scripts/check_tracked_but_ignored.ts +67 -0
- package/src/scripts/cluster_near_miss_patterns.ts +0 -0
- package/src/scripts/compile_router.ts +30 -3
- package/src/scripts/condense.ts +350 -14
- package/src/scripts/consolidate_knowledge_events.ts +192 -0
- package/src/scripts/degrade_to_pointer.ts +136 -0
- package/src/scripts/design_slop_rules.test.ts +15 -0
- package/src/scripts/design_slop_rules.ts +28 -0
- package/src/scripts/emit_knowledge_event.ts +158 -0
- package/src/scripts/export_replay_corpus.ts +187 -0
- package/src/scripts/external_sources_denylist.json +7 -2
- package/src/scripts/fold_intake.ts +281 -0
- package/src/scripts/generate_capability_matrix.ts +9 -1
- package/src/scripts/generate_knowledge_index.ts +222 -0
- package/src/scripts/hook_manifest.yaml +26 -14
- package/src/scripts/hooks/dispatch_hook.ts +18 -0
- package/src/scripts/hot_context_hook.ts +372 -0
- package/src/scripts/install +47 -0
- package/src/scripts/install-hooks.sh +17 -0
- package/src/scripts/inventory_meta_layers.ts +11 -0
- package/src/scripts/janitor.ts +258 -0
- package/src/scripts/lint_agents_layout.ts +74 -15
- package/src/scripts/lint_bench_ab.ts +4 -1
- package/src/scripts/lint_featured_skills.ts +0 -0
- package/src/scripts/lint_framework_leakage_allowlist.json +26 -3
- package/src/scripts/lint_knowledge_scale.ts +250 -0
- package/src/scripts/lint_legal_pack.ts +67 -0
- package/src/scripts/lint_persona_governance.ts +8 -3
- package/src/scripts/lint_regression.ts +15 -0
- package/src/scripts/lint_roadmap_blockers.ts +202 -0
- package/src/scripts/lint_roadmap_complexity.ts +81 -2
- package/src/scripts/lint_subagent_determinism.ts +125 -0
- package/src/scripts/measure_augment_budget.ts +46 -6
- package/src/scripts/measure_patterns.ts +4 -3
- package/src/scripts/measure_skill_reduction.ts +6 -6
- package/src/scripts/migration_status.ts +6 -2
- package/src/scripts/mine_missing_guardrails.ts +189 -0
- package/src/scripts/parity/phase_gate.ts +1 -1
- package/src/scripts/parity/replay.ts +21 -0
- package/src/scripts/project_thin_rules.ts +120 -16
- package/src/scripts/release.ts +39 -1
- package/src/scripts/render_benchmark_composite.ts +378 -0
- package/src/scripts/roadmap_progress_hook.ts +101 -43
- package/src/scripts/schemas/skill.schema.json +27 -0
- package/src/scripts/schemas/subagent.schema.json +106 -0
- package/src/scripts/skill_linter.ts +1 -0
- package/src/scripts/smoke/kernel.sh +5 -4
- package/src/scripts/surface-tiers.yml +1 -0
- package/src/scripts/sync_gitignore.ts +4 -0
- package/src/scripts/update_skill_candidates.ts +172 -0
- package/src/scripts/validate_frontmatter.ts +1 -0
|
@@ -16,6 +16,23 @@
|
|
|
16
16
|
* ./scripts-run src/scripts/check_token_quality_golden
|
|
17
17
|
* ./scripts-run src/scripts/check_token_quality_golden --json
|
|
18
18
|
* ./scripts-run src/scripts/check_token_quality_golden --require-complete
|
|
19
|
+
* ./scripts-run src/scripts/check_token_quality_golden --scope consumer
|
|
20
|
+
*
|
|
21
|
+
* Scope-aware coverage (road-to-golden-set-coverage Phase 0): `--scope
|
|
22
|
+
* consumer|maintainer|all` filters the coverage universe by the router's v2
|
|
23
|
+
* `workspaces:` fields — consumer = kernel + every rule NOT exclusively
|
|
24
|
+
* `agent-config-maintainer`; maintainer = the exclusively-maintainer rest;
|
|
25
|
+
* `all` (default) = today's behaviour. The consumer thin/scoped flips gate on
|
|
26
|
+
* `--require-complete --scope consumer`; a maintainer-side flip would gate on
|
|
27
|
+
* `--scope all`.
|
|
28
|
+
*
|
|
29
|
+
* Prompt↔trigger falsifiability (Phase 3): every tagged rule must have ≥1
|
|
30
|
+
* router trigger the task actually exercises — keyword/phrase = substring of
|
|
31
|
+
* the prompt; intent = every alpha word (>2 chars) present (trigger_coverage
|
|
32
|
+
* semantics); path_prefix/file_pattern/command are satisfiable via the
|
|
33
|
+
* optional per-task `context_files:` / `command:` fields. Kernel rules always
|
|
34
|
+
* fire. "Covered" therefore means FIRES, not mentioned. Structural check —
|
|
35
|
+
* always on.
|
|
19
36
|
*
|
|
20
37
|
* Exit codes: 0 valid (scaffold or complete) · 1 file error · 2 invalid / incomplete-when-required.
|
|
21
38
|
*/
|
|
@@ -37,6 +54,8 @@ const LABEL_STATUS = ['stub', 'labelled'];
|
|
|
37
54
|
|
|
38
55
|
type Json = Record<string, unknown>;
|
|
39
56
|
|
|
57
|
+
export type Scope = 'consumer' | 'maintainer' | 'all';
|
|
58
|
+
|
|
40
59
|
/** Collect every rule id from the router (kernel strings + tier_* objects). */
|
|
41
60
|
export function router_rule_ids(router: Json): Set<string> {
|
|
42
61
|
const ids = new Set<string>();
|
|
@@ -53,6 +72,102 @@ export function router_rule_ids(router: Json): Set<string> {
|
|
|
53
72
|
return ids;
|
|
54
73
|
}
|
|
55
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Rule universe for a scope, from the router's v2 `workspaces:` fields.
|
|
77
|
+
* Kernel is always consumer-facing (it ships unconditionally). A non-kernel
|
|
78
|
+
* rule is maintainer-scope iff its workspaces are exactly
|
|
79
|
+
* ['agent-config-maintainer']; missing/empty workspaces count as consumer
|
|
80
|
+
* (fail-safe, mirrors the projection filter).
|
|
81
|
+
*/
|
|
82
|
+
export function scoped_rule_ids(router: Json, scope: Scope): Set<string> {
|
|
83
|
+
const all = router_rule_ids(router);
|
|
84
|
+
if (scope === 'all') return all;
|
|
85
|
+
const kernel = new Set(Array.isArray(router.kernel) ? (router.kernel as string[]) : []);
|
|
86
|
+
const out = new Set<string>();
|
|
87
|
+
for (const key of ['tier_1', 'tier_2']) {
|
|
88
|
+
const arr = router[key];
|
|
89
|
+
if (!Array.isArray(arr)) continue;
|
|
90
|
+
for (const entry of arr) {
|
|
91
|
+
const obj = entry as Json;
|
|
92
|
+
const id = obj.id as string;
|
|
93
|
+
const ws = Array.isArray(obj.workspaces) ? (obj.workspaces as string[]) : [];
|
|
94
|
+
const maintainerOnly = ws.length === 1 && ws[0] === 'agent-config-maintainer';
|
|
95
|
+
if (scope === 'consumer' ? !maintainerOnly : maintainerOnly) out.add(id);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (scope === 'consumer') for (const k of kernel) out.add(k);
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Router entries (non-kernel) as id → triggers, for the fires-check. */
|
|
103
|
+
export function router_triggers(router: Json): Map<string, Array<Record<string, string>>> {
|
|
104
|
+
const map = new Map<string, Array<Record<string, string>>>();
|
|
105
|
+
for (const key of ['tier_1', 'tier_2']) {
|
|
106
|
+
const arr = router[key];
|
|
107
|
+
if (!Array.isArray(arr)) continue;
|
|
108
|
+
for (const entry of arr) {
|
|
109
|
+
const obj = entry as Json;
|
|
110
|
+
map.set(obj.id as string, Array.isArray(obj.triggers) ? (obj.triggers as Array<Record<string, string>>) : []);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return map;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// trigger_coverage.ts word semantics: lowercase alpha-led tokens, len > 2.
|
|
117
|
+
const _WORD = /[a-z][a-z0-9_]+/g;
|
|
118
|
+
|
|
119
|
+
function _tokens(text: string): Set<string> {
|
|
120
|
+
const out = new Set<string>();
|
|
121
|
+
const low = text.toLowerCase();
|
|
122
|
+
_WORD.lastIndex = 0;
|
|
123
|
+
let m: RegExpExecArray | null;
|
|
124
|
+
while ((m = _WORD.exec(low)) !== null) {
|
|
125
|
+
if (m[0].length > 2) out.add(m[0]);
|
|
126
|
+
}
|
|
127
|
+
return out;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Whether a task exercises ≥1 trigger of the rule (prompt↔trigger
|
|
132
|
+
* falsifiability, Phase 3). Kernel rules always fire.
|
|
133
|
+
*/
|
|
134
|
+
export function task_fires_rule(
|
|
135
|
+
task: { prompt: string; context_files?: string[]; command?: string },
|
|
136
|
+
ruleId: string,
|
|
137
|
+
router: Json,
|
|
138
|
+
): boolean {
|
|
139
|
+
const kernel = new Set(Array.isArray(router.kernel) ? (router.kernel as string[]) : []);
|
|
140
|
+
if (kernel.has(ruleId)) return true;
|
|
141
|
+
const triggers = router_triggers(router).get(ruleId) ?? [];
|
|
142
|
+
const low = task.prompt.toLowerCase();
|
|
143
|
+
const toks = _tokens(task.prompt);
|
|
144
|
+
const files = Array.isArray(task.context_files) ? task.context_files : [];
|
|
145
|
+
const cmd = typeof task.command === 'string' ? task.command : '';
|
|
146
|
+
for (const trig of triggers) {
|
|
147
|
+
if ('keyword' in trig || 'phrase' in trig) {
|
|
148
|
+
const needle = String(trig.keyword ?? trig.phrase).toLowerCase();
|
|
149
|
+
if (needle && low.includes(needle)) return true;
|
|
150
|
+
} else if ('intent' in trig) {
|
|
151
|
+
const words = _tokens(String(trig.intent));
|
|
152
|
+
if (words.size > 0 && [...words].every((w) => toks.has(w))) return true;
|
|
153
|
+
} else if ('path_prefix' in trig) {
|
|
154
|
+
const prefix = String(trig.path_prefix);
|
|
155
|
+
if (files.some((f) => f.startsWith(prefix))) return true;
|
|
156
|
+
} else if ('file_pattern' in trig) {
|
|
157
|
+
const pat = String(trig.file_pattern);
|
|
158
|
+
// Glob-lite: '*' matches any run; anchor on basename like Cursor does.
|
|
159
|
+
const re = new RegExp('^' + pat.split('*').map((s) => s.replace(/[.+?^${}()|[\]\\]/g, '\\$&')).join('.*') + '$');
|
|
160
|
+
if (files.some((f) => re.test(f) || re.test(path.basename(f)))) return true;
|
|
161
|
+
} else if ('command' in trig) {
|
|
162
|
+
const c = String(trig.command);
|
|
163
|
+
if (cmd && (cmd === c || cmd === `/${c.replace(/^\//, '')}` || cmd.replace(/^\//, '') === c.replace(/^\//, ''))) {
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
|
|
56
171
|
export interface GoldenReport {
|
|
57
172
|
ok: boolean;
|
|
58
173
|
errors: string[];
|
|
@@ -60,6 +175,7 @@ export interface GoldenReport {
|
|
|
60
175
|
labelled: number;
|
|
61
176
|
stubs: number;
|
|
62
177
|
covered: number;
|
|
178
|
+
covered_ids: string[];
|
|
63
179
|
uncovered: string[];
|
|
64
180
|
scenarios: Record<string, number>;
|
|
65
181
|
missing_scenarios: string[];
|
|
@@ -73,8 +189,13 @@ function _isTodoRubric(rubric: unknown): boolean {
|
|
|
73
189
|
);
|
|
74
190
|
}
|
|
75
191
|
|
|
76
|
-
/**
|
|
77
|
-
|
|
192
|
+
/**
|
|
193
|
+
* Pure validation + coverage. `ruleIds` is the authoritative rule universe
|
|
194
|
+
* (scope-filtered by the caller). When `router` is provided, the
|
|
195
|
+
* prompt↔trigger falsifiability check runs: a tagged rule whose triggers the
|
|
196
|
+
* task provably does NOT exercise is a structural error.
|
|
197
|
+
*/
|
|
198
|
+
export function validate(corpus: Json, ruleIds: Set<string>, router: Json | null = null): GoldenReport {
|
|
78
199
|
const errors: string[] = [];
|
|
79
200
|
const tasks = Array.isArray(corpus.tasks) ? (corpus.tasks as Json[]) : null;
|
|
80
201
|
if (corpus.corpus_id !== 'token-quality-golden') {
|
|
@@ -89,6 +210,7 @@ export function validate(corpus: Json, ruleIds: Set<string>): GoldenReport {
|
|
|
89
210
|
labelled: 0,
|
|
90
211
|
stubs: 0,
|
|
91
212
|
covered: 0,
|
|
213
|
+
covered_ids: [],
|
|
92
214
|
uncovered: [...ruleIds].sort(),
|
|
93
215
|
scenarios: {},
|
|
94
216
|
missing_scenarios: [...REQUIRED_SCENARIOS],
|
|
@@ -116,8 +238,33 @@ export function validate(corpus: Json, ruleIds: Set<string>): GoldenReport {
|
|
|
116
238
|
for (const r of rules) {
|
|
117
239
|
if (typeof r !== 'string' || !ruleIds.has(r)) {
|
|
118
240
|
errors.push(`${where}: unknown rule id ${JSON.stringify(r)}`);
|
|
119
|
-
|
|
120
|
-
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
covered.add(r);
|
|
244
|
+
// Prompt↔trigger falsifiability — "covered" must mean FIRES.
|
|
245
|
+
// `no_fire: true` inverts the check for corner-case tasks that
|
|
246
|
+
// deliberately test NON-activation (the rule must NOT fire).
|
|
247
|
+
if (router !== null && typeof task.prompt === 'string') {
|
|
248
|
+
const fires = task_fires_rule(
|
|
249
|
+
task as { prompt: string; context_files?: string[]; command?: string },
|
|
250
|
+
r,
|
|
251
|
+
router,
|
|
252
|
+
);
|
|
253
|
+
const noFire = task.no_fire === true;
|
|
254
|
+
const kernel = new Set(Array.isArray(router.kernel) ? (router.kernel as string[]) : []);
|
|
255
|
+
if (noFire && kernel.has(r)) {
|
|
256
|
+
errors.push(`${where}: no_fire is invalid for kernel rule \`${r}\` (kernel always fires)`);
|
|
257
|
+
} else if (noFire && fires) {
|
|
258
|
+
errors.push(
|
|
259
|
+
`${where}: no_fire task, but rule \`${r}\` DOES fire on the prompt — ` +
|
|
260
|
+
'the non-activation corner-case is broken',
|
|
261
|
+
);
|
|
262
|
+
} else if (!noFire && !fires) {
|
|
263
|
+
errors.push(
|
|
264
|
+
`${where}: tagged rule \`${r}\` has no router trigger the prompt exercises ` +
|
|
265
|
+
'(add a matching keyword/phrase to the prompt, or context_files:/command:, or re-tag)',
|
|
266
|
+
);
|
|
267
|
+
}
|
|
121
268
|
}
|
|
122
269
|
}
|
|
123
270
|
|
|
@@ -163,6 +310,7 @@ export function validate(corpus: Json, ruleIds: Set<string>): GoldenReport {
|
|
|
163
310
|
labelled,
|
|
164
311
|
stubs,
|
|
165
312
|
covered: covered.size,
|
|
313
|
+
covered_ids: [...covered].sort(),
|
|
166
314
|
uncovered,
|
|
167
315
|
scenarios,
|
|
168
316
|
missing_scenarios,
|
|
@@ -180,13 +328,26 @@ function _readJson(file: string): Json | null {
|
|
|
180
328
|
function main(argv: string[]): number {
|
|
181
329
|
const asJson = argv.includes('--json');
|
|
182
330
|
const requireComplete = argv.includes('--require-complete');
|
|
183
|
-
|
|
331
|
+
let scope: Scope = 'all';
|
|
332
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
333
|
+
const a = argv[i] as string;
|
|
334
|
+
if (a === '--scope') {
|
|
335
|
+
const v = argv[(i += 1)];
|
|
336
|
+
if (v !== 'consumer' && v !== 'maintainer' && v !== 'all') {
|
|
337
|
+
process.stderr.write('error: --scope must be consumer | maintainer | all\n');
|
|
338
|
+
return 1;
|
|
339
|
+
}
|
|
340
|
+
scope = v;
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
184
343
|
if (!['--json', '--require-complete', '-h', '--help'].includes(a)) {
|
|
185
344
|
process.stderr.write(`error: unknown argument: ${a}\n`);
|
|
186
345
|
return 1;
|
|
187
346
|
}
|
|
188
347
|
if (a === '-h' || a === '--help') {
|
|
189
|
-
process.stdout.write(
|
|
348
|
+
process.stdout.write(
|
|
349
|
+
'usage: check_token_quality_golden [--json] [--require-complete] [--scope consumer|maintainer|all]\n',
|
|
350
|
+
);
|
|
190
351
|
return 0;
|
|
191
352
|
}
|
|
192
353
|
}
|
|
@@ -204,21 +365,46 @@ function main(argv: string[]): number {
|
|
|
204
365
|
return 1;
|
|
205
366
|
}
|
|
206
367
|
const ruleIds = router_rule_ids(router);
|
|
207
|
-
|
|
368
|
+
// Structure (incl. the fires-check) always validates against the FULL
|
|
369
|
+
// universe — a maintainer-rule tag is not "unknown" under consumer scope.
|
|
370
|
+
const report = validate(corpus, ruleIds, router);
|
|
208
371
|
|
|
372
|
+
// Coverage accounting runs against the SCOPED universe: which flip is
|
|
373
|
+
// being gated decides what "complete" means.
|
|
374
|
+
const scopedIds = scoped_rule_ids(router, scope);
|
|
375
|
+
const coveredScoped = report.covered_ids.filter((r) => scopedIds.has(r));
|
|
376
|
+
const uncoveredScoped = [...scopedIds].filter((r) => !report.covered_ids.includes(r)).sort();
|
|
377
|
+
// Stubs only block completion when they tag in-scope rules.
|
|
209
378
|
const incomplete =
|
|
210
|
-
report.stubs > 0 ||
|
|
379
|
+
report.stubs > 0 || uncoveredScoped.length > 0 || report.missing_scenarios.length > 0;
|
|
211
380
|
|
|
212
381
|
if (asJson) {
|
|
213
|
-
process.stdout.write(
|
|
382
|
+
process.stdout.write(
|
|
383
|
+
JSON.stringify(
|
|
384
|
+
{
|
|
385
|
+
...report,
|
|
386
|
+
scope,
|
|
387
|
+
scope_universe: scopedIds.size,
|
|
388
|
+
scope_covered: coveredScoped.length,
|
|
389
|
+
scope_uncovered: uncoveredScoped,
|
|
390
|
+
require_complete: requireComplete,
|
|
391
|
+
incomplete,
|
|
392
|
+
},
|
|
393
|
+
null,
|
|
394
|
+
2,
|
|
395
|
+
) + '\n',
|
|
396
|
+
);
|
|
214
397
|
} else {
|
|
215
398
|
for (const e of report.errors) process.stdout.write(`❌ ${e}\n`);
|
|
216
399
|
process.stdout.write(
|
|
217
400
|
`golden set: ${report.task_count} task(s) · ${report.labelled} labelled · ${report.stubs} stub · ` +
|
|
218
401
|
`coverage ${report.covered}/${ruleIds.size} rules\n`,
|
|
219
402
|
);
|
|
220
|
-
|
|
221
|
-
|
|
403
|
+
process.stdout.write(
|
|
404
|
+
`scope ${scope}: coverage ${coveredScoped.length}/${scopedIds.size} rules\n`,
|
|
405
|
+
);
|
|
406
|
+
if (uncoveredScoped.length > 0) {
|
|
407
|
+
process.stdout.write(`⚠️ ${uncoveredScoped.length} in-scope rule(s) uncovered (operator to add tasks)\n`);
|
|
222
408
|
}
|
|
223
409
|
if (report.missing_scenarios.length > 0) {
|
|
224
410
|
process.stdout.write(`⚠️ missing required scenario(s): ${report.missing_scenarios.join(', ')}\n`);
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* Phase 5.2 — Detect files that are tracked by git but now ignored
|
|
4
|
+
* (the class of drift where an ignore pattern was added AFTER the file
|
|
5
|
+
* was committed, so the file stays in the index even though git would
|
|
6
|
+
* no longer add it fresh).
|
|
7
|
+
*
|
|
8
|
+
* Reports the exact `git rm --cached <path>` commands to fix the issue.
|
|
9
|
+
* NEVER executes them automatically — git ops are user-owned per the
|
|
10
|
+
* git-ops permission gates (scope-control rule).
|
|
11
|
+
*
|
|
12
|
+
* Exit codes:
|
|
13
|
+
* 0 — no tracked-but-ignored files found
|
|
14
|
+
* 1 — one or more tracked-but-ignored files found
|
|
15
|
+
* 2 — git command failed or not in a git repo
|
|
16
|
+
*/
|
|
17
|
+
import { execSync } from 'node:child_process';
|
|
18
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
19
|
+
import * as path from 'node:path';
|
|
20
|
+
|
|
21
|
+
const _HERE = fileURLToPath(import.meta.url);
|
|
22
|
+
|
|
23
|
+
function main(argv?: readonly string[]): number {
|
|
24
|
+
const args = argv ?? process.argv.slice(2);
|
|
25
|
+
const quiet = args.includes('--quiet');
|
|
26
|
+
|
|
27
|
+
let output: string;
|
|
28
|
+
try {
|
|
29
|
+
output = execSync('git ls-files -ci --exclude-standard', {
|
|
30
|
+
encoding: 'utf-8',
|
|
31
|
+
cwd: process.cwd(),
|
|
32
|
+
}).trim();
|
|
33
|
+
} catch {
|
|
34
|
+
process.stdout.write(`❌ git ls-files failed — not in a git repo or git not available\n`);
|
|
35
|
+
return 2;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (!output) {
|
|
39
|
+
if (!quiet) {
|
|
40
|
+
process.stdout.write(`✅ No tracked-but-ignored files found.\n`);
|
|
41
|
+
}
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const files = output.split('\n').filter(Boolean);
|
|
46
|
+
process.stdout.write(
|
|
47
|
+
`❌ ${files.length} file${files.length === 1 ? '' : 's'} are tracked by git but now ignored:\n\n`,
|
|
48
|
+
);
|
|
49
|
+
for (const f of files) {
|
|
50
|
+
process.stdout.write(` ${f}\n`);
|
|
51
|
+
}
|
|
52
|
+
process.stdout.write(
|
|
53
|
+
`\nTo fix, run:\n\n git rm --cached \\\n ` +
|
|
54
|
+
files.join(' \\\n ') +
|
|
55
|
+
`\n\nThen commit the result. The files stay on disk (only removed from the index).\n`,
|
|
56
|
+
);
|
|
57
|
+
return 1;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const _isCliEntry =
|
|
61
|
+
process.argv[1] !== undefined &&
|
|
62
|
+
import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
|
|
63
|
+
if (_isCliEntry || process.argv[1] === _HERE) {
|
|
64
|
+
process.exit(main());
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export { main };
|
|
Binary file
|
|
@@ -42,7 +42,13 @@ export const ROOT = path.resolve(path.dirname(_HERE), '..', '..');
|
|
|
42
42
|
export const RULES_DIR = path.join(ROOT, '.agent-src.uncondensed', 'rules');
|
|
43
43
|
export const OUT_PATH = path.join(ROOT, 'dist', 'router.json');
|
|
44
44
|
const SETTINGS_PATH = project_settings_path(ROOT);
|
|
45
|
-
|
|
45
|
+
// v2 (2026-07-07, road-to-request-scoped-rule-load Phase 0): every non-kernel
|
|
46
|
+
// entry additionally carries `workspaces:` and `packs:` copied verbatim from
|
|
47
|
+
// rule frontmatter, so projection/install-time consumer scoping can filter
|
|
48
|
+
// rule pointers by installation. Additive only — v1 readers ignore unknown
|
|
49
|
+
// keys. Kernel entries stay bare id strings: the kernel is unconditional and
|
|
50
|
+
// workspace-independent by definition.
|
|
51
|
+
export const SCHEMA_VERSION = 2;
|
|
46
52
|
|
|
47
53
|
// Compile-time rule toggles. Maps rule-id → settings predicate.
|
|
48
54
|
// Rule omitted from router.json when predicate returns False.
|
|
@@ -223,7 +229,16 @@ function _collect(): JsonObject {
|
|
|
223
229
|
const routes_to = ((fm['routes_to'] as Json[] | null | undefined) ?? [])
|
|
224
230
|
.map((x) => String(x))
|
|
225
231
|
.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
226
|
-
|
|
232
|
+
// v2: scoping fields, verbatim from frontmatter (sorted for
|
|
233
|
+
// determinism). `lint_artefact_frontmatter` guarantees both keys are
|
|
234
|
+
// non-empty lists of known ids on every rule source file.
|
|
235
|
+
const workspaces = ((fm['workspaces'] as Json[] | null | undefined) ?? [])
|
|
236
|
+
.map((x) => String(x))
|
|
237
|
+
.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
238
|
+
const packs = ((fm['packs'] as Json[] | null | undefined) ?? [])
|
|
239
|
+
.map((x) => String(x))
|
|
240
|
+
.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
241
|
+
const entry: JsonObject = { id: rule_id, triggers, routes_to, workspaces, packs };
|
|
227
242
|
(tiered[tier] as JsonObject[]).push(entry);
|
|
228
243
|
}
|
|
229
244
|
for (const k of Object.keys(tiered)) {
|
|
@@ -245,9 +260,21 @@ export function build(): JsonObject {
|
|
|
245
260
|
kernel: collected['kernel'],
|
|
246
261
|
tier_1: collected['tier_1'],
|
|
247
262
|
tier_2: collected['tier_2'],
|
|
263
|
+
// Profiles name the ALWAYS-HONOURED rule surface per discipline tier
|
|
264
|
+
// (ADR-110). Trigger routing of tier_1/tier_2 stays active under every
|
|
265
|
+
// profile — configuration-independent per ADR-040. Entries without the
|
|
266
|
+
// `__` wrapper are individual rule ids.
|
|
267
|
+
//
|
|
268
|
+
// `balanced` (kernel + tier_1 by SIZE) was RETIRED 2026-07-07: it
|
|
269
|
+
// measured a NULL discipline lift (p=0.81, docs/benchmark.md
|
|
270
|
+
// § Cost-factor sweep) because the size cut missed the lift-carrying
|
|
271
|
+
// `downstream-changes`. Its successor `essential` is cut by measured
|
|
272
|
+
// content (council: weak-host-lift-tiering-verdict). Legacy
|
|
273
|
+
// `rule_loading_tier: balanced` settings map to `essential` via
|
|
274
|
+
// resolve_discipline_profile().
|
|
248
275
|
profiles: {
|
|
249
276
|
minimal: ['__kernel__'],
|
|
250
|
-
|
|
277
|
+
essential: ['__kernel__', 'downstream-changes'],
|
|
251
278
|
full: ['__kernel__', '__tier_1__', '__tier_2__'],
|
|
252
279
|
},
|
|
253
280
|
};
|