@event4u/agent-config 16.5.0 → 17.0.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 +2 -2
- package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
- package/CHANGELOG.md +463 -498
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +10 -6
- package/dist/agent-src/commands/agents/init.md +66 -3
- package/dist/agent-src/commands/agents/user/init.md +3 -0
- package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
- package/dist/agent-src/commands/analyze/inbox.md +168 -37
- package/dist/agent-src/commands/analyze/pr.md +144 -0
- package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
- package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
- package/dist/agent-src/commands/analyze.md +28 -12
- package/dist/agent-src/commands/audit.md +115 -0
- package/dist/agent-src/commands/brand/review.md +13 -2
- package/dist/agent-src/commands/brand/tokens.md +3 -3
- package/dist/agent-src/commands/brand/voice.md +8 -5
- package/dist/agent-src/commands/brand.md +2 -2
- package/dist/agent-src/commands/challenge-me/closure.md +25 -0
- package/dist/agent-src/commands/design-system/import.md +8 -3
- package/dist/agent-src/commands/design-system/sync.md +98 -0
- package/dist/agent-src/commands/design-system.md +6 -1
- package/dist/agent-src/commands/evals/analyze.json +44 -0
- package/dist/agent-src/commands/evals/audit.json +12 -0
- package/dist/agent-src/commands/evals/retro.json +12 -0
- package/dist/agent-src/commands/fix/ci.md +10 -8
- package/dist/agent-src/commands/ghostwriter/write.md +22 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
- package/dist/agent-src/commands/memory/propose.md +12 -0
- package/dist/agent-src/commands/memory.md +1 -1
- package/dist/agent-src/commands/optimize.md +4 -3
- package/dist/agent-src/commands/post-as/me.md +18 -0
- package/dist/agent-src/commands/pr/create.md +17 -342
- package/dist/agent-src/commands/pr/merge.md +129 -368
- package/dist/agent-src/commands/retro.md +121 -0
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +4 -1
- package/dist/agent-src/commands/roadmap/process-full.md +46 -333
- package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
- package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
- package/dist/agent-src/commands/team-knowledge.md +1 -1
- package/dist/agent-src/commands/threat-model.md +1 -1
- package/dist/agent-src/commands/upstream-contribute.md +91 -101
- package/dist/agent-src/commands/worktree/cleanup.md +18 -11
- package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
- package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
- package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +6 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
- package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
- package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
- package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
- package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
- package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
- package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
- package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
- package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
- package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
- package/dist/agent-src/contexts/model-recommendations.md +5 -5
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/dist/agent-src/guidelines/design-antipatterns.md +5 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
- package/dist/agent-src/guidelines/php/api-design.md +10 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +0 -1
- package/dist/agent-src/rules/design-fidelity.md +12 -13
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
- package/dist/agent-src/rules/fix-what-you-see.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
- package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
- package/dist/agent-src/rules/neighbour-precedence.md +1 -1
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +1 -1
- package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
- package/dist/agent-src/scripts/roadmap_age.ts +175 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
- package/dist/agent-src/skills/api-design/SKILL.md +2 -2
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
- package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/brand/SKILL.md +7 -3
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
- package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
- package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
- package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
- package/dist/agent-src/skills/canvas-design/SKILL.md +12 -2
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
- package/dist/agent-src/skills/database/SKILL.md +5 -4
- package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
- package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +14 -14
- package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
- package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
- package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
- package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
- package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
- package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
- package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +16 -2
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
- package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
- package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
- package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
- package/dist/agent-src/skills/logo-generation/SKILL.md +9 -3
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
- package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
- package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
- package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
- package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
- package/dist/agent-src/skills/security/SKILL.md +41 -5
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
- package/dist/agent-src/skills/svg-authoring/SKILL.md +7 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
- package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
- package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
- package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
- package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
- package/dist/agent-src/skills/type-design/SKILL.md +196 -0
- package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
- package/dist/agent-src/skills/type-design/references/gates.md +113 -0
- package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
- package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
- package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +1 -1
- package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
- package/dist/agent-src/templates/roadmaps.md +39 -1
- package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/dist/cli/commands/uiRender.js +72 -17
- package/dist/cli/commands/uiRenderAsset.js +10 -2
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +8 -20
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/mcp/dispatch.js +31 -9
- package/dist/cli/python/knowledge_ingest.js +7 -39
- package/dist/cli/python/workspace_secrets.js +4 -177
- package/dist/cli/registry.js +4 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
- package/dist/cli-delegate/check_update_banner.js +635 -266
- package/dist/cli-delegate/{chunk-TMWYUOK4.js → chunk-2CX7NWRB.js} +224 -437
- package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
- package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
- package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
- package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
- package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
- package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
- package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
- package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
- package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
- package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
- package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
- package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
- package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
- package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
- package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
- package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
- package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
- package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
- package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
- package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
- package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
- package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
- package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
- package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
- package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
- package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
- package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/cmd_adr_effective.js +41 -2
- package/dist/cli-delegate/cmd_analyze_session.js +7 -7
- package/dist/cli-delegate/cmd_brand_status.js +1287 -10
- package/dist/cli-delegate/cmd_ci_settle.js +330 -0
- package/dist/cli-delegate/cmd_conformance.js +483 -817
- package/dist/cli-delegate/cmd_doctor.js +26 -16
- package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
- package/dist/cli-delegate/cmd_explain.js +9 -24
- package/dist/cli-delegate/cmd_export.js +14 -11
- package/dist/cli-delegate/cmd_fleet.js +5 -3
- package/dist/cli-delegate/cmd_git_convention.js +8 -4
- package/dist/cli-delegate/cmd_handoff.js +79 -242
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +4 -2
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_preflight.js +7 -5
- package/dist/cli-delegate/cmd_prune.js +16 -13
- package/dist/cli-delegate/cmd_route_audit.js +11 -8
- package/dist/cli-delegate/cmd_route_explain.js +649 -16
- package/dist/cli-delegate/cmd_session_recycle.js +15 -6
- package/dist/cli-delegate/cmd_settings_check.js +2 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +16 -13
- package/dist/cli-delegate/cmd_uninstall.js +185 -31
- package/dist/cli-delegate/cmd_update.js +67 -3
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +16 -13
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/dashboard_mode.js +1 -1
- package/dist/cli-delegate/gate_execute.js +4 -3
- package/dist/cli-delegate/roadmap_age.js +22 -0
- package/dist/cli-delegate/roadmap_gates.js +4 -3
- package/dist/cli-delegate/update_roadmap_progress.js +3 -2
- package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +373 -190
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +21 -16
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -11
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17506 -18692
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/egress_engine.chunk.cjs +915 -0
- package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
- package/dist/hooks/svg_rules.chunk.cjs +281 -49
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -1
- package/dist/install/conflict.js +36 -6
- package/dist/install/conflictTracker.js +81 -7
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3117 -1949
- package/dist/install/installThinLayer.js +1 -1
- package/dist/install/manifestFiles.js +21 -0
- package/dist/install/noGoDenyRows.js +300 -0
- package/dist/install/noGoRules.js +368 -0
- package/dist/install/ownershipLedger.js +133 -0
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +74 -12
- package/dist/install/recordedOwnership.js +88 -5
- package/dist/install/rule_scope.js +20 -3
- package/dist/install/stagedRuntime.js +455 -0
- package/dist/install/toolsArg.js +19 -0
- package/dist/install/userPin.js +47 -0
- package/dist/install/wizard-plan.js +26 -4
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
- package/dist/mcp/registry-manifest.json +6 -5
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +9831 -5546
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +7 -12
- package/dist/scripts/_lib/asset_render_record.js +219 -0
- package/dist/scripts/_lib/claude_builtin_names.js +9 -4
- package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
- package/dist/scripts/_lib/egress_rules.js +766 -0
- package/dist/scripts/_lib/environment_detector.js +24 -33
- package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
- package/dist/scripts/_lib/guidelines_lane.js +10 -1
- package/dist/scripts/_lib/identifier_redaction.js +24 -0
- package/dist/scripts/_lib/installed_layer.js +17 -0
- package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
- package/dist/scripts/_lib/lean_projection_mode.js +34 -152
- package/dist/scripts/_lib/project_tree_form.js +118 -0
- package/dist/scripts/_lib/scoped_projection.js +133 -3
- package/dist/scripts/_lib/settings_removed_keys.js +29 -0
- package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
- package/dist/scripts/_lib/subagent_native_fields.js +35 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_rules.js +2 -0
- package/dist/scripts/_lib/ui_surface.js +19 -0
- package/dist/scripts/_lib/verification_command.js +364 -0
- package/dist/scripts/_lib/workspace_secrets.js +229 -0
- package/dist/scripts/ai_council/seat_policy.js +27 -0
- package/dist/scripts/ai_council/transport_resolver.js +9 -10
- package/dist/scripts/condense.js +25 -29
- package/dist/server/io/substituteTemplate.js +2 -2
- package/dist/server/io/yamlIO.js +2 -2
- package/dist/server/routes/install.js +5 -1
- package/dist/server/routes/settings.js +2 -2
- package/dist/server/routes/wizard.js +1 -1
- package/dist/server/schemas/settings.js +22 -16
- package/dist/server/serverInfo.js +1 -1
- package/dist/shared/brandTokenDocument.js +47 -0
- package/dist/shared/brandTokenPaths.js +43 -0
- package/dist/shared/settingsCarveOut.js +0 -7
- package/dist/shared/skillRanking.js +103 -5
- package/dist/shared/userMd/formAdapter.js +16 -0
- package/dist/shared/userMd/schema.js +17 -0
- package/dist/ui/assets/index-w70Ado09.js +23 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +89 -2
- package/docs/THIRD-PARTY-NOTICES.md +27 -0
- package/docs/contracts/settings-classes.md +27 -9
- package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
- package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/docs/guidelines/design-antipatterns.md +5 -0
- package/docs/guidelines/design-asset-discipline.md +17 -0
- package/docs/guidelines/design-fidelity-routing.md +1 -0
- package/docs/guidelines/php/api-design.md +10 -1
- package/llms.txt +12 -10
- package/package.json +13 -4
- package/src/agent-src/scripts/dashboard_mode.ts +4 -1
- package/src/agent-src/scripts/roadmap_age.ts +175 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/check_memory.ts +2 -2
- package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/src/config/agent-settings.template.yml +120 -57
- package/src/config/agents-paths.yml +13 -7
- package/src/config/ci-local-parity.yml +44 -0
- package/src/config/continuity-surface.json +51 -2
- package/src/config/depth-audit-samples.json +5 -0
- package/src/config/discovery/command-verbs.yml +1 -0
- package/src/config/dispatch-economy-metrics.json +1 -0
- package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
- package/src/config/egress-mutations/credential-token-restores.json +7 -0
- package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
- package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +149 -3
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +26 -22
- package/src/config/gitignore-block.txt +6 -3
- package/src/config/hook-bundle-budget.json +34 -3
- package/src/config/hook-carrier-probes.json +30 -0
- package/src/config/hook-latency-budget.json +4 -2
- package/src/config/host-injection-effect.json +8 -1
- package/src/config/host-skill-frontmatter-keys.json +56 -0
- package/src/config/layer-form-brakes.json +4 -0
- package/src/config/layer-form-comparison-corpus.json +42 -0
- package/src/config/loop-surfaces.yaml +28 -47
- package/src/config/memory-twin-verdicts.yml +9 -1
- package/src/config/metric-registry.yml +40 -3
- package/src/config/pack-size-budget.json +15 -0
- package/src/config/procedure-core-budget.json +21 -0
- package/src/config/profiles/minimal.ini +1 -1
- package/src/config/project-tree-form.json +24 -0
- package/src/config/reach-channels.yml +3 -3
- package/src/config/reach-prescriptions-intake.yml +1 -1
- package/src/config/roadmap-step-size-baseline.json +118 -0
- package/src/config/routing-coverage-seed.json +93 -2
- package/src/config/skill-body-budget.json +686 -0
- package/src/config/skill-fork-pilot.json +17 -0
- package/src/config/skill-lifecycle-probes-codex.json +57 -0
- package/src/config/skill-lifecycle-probes.json +57 -0
- package/src/config/skill-output-shape.json +316 -0
- package/src/config/step-depth-table.json +58 -0
- package/src/config/turnaround-budget.json +90 -0
- package/src/install/conflict.ts +38 -6
- package/src/install/conflictTracker.ts +126 -8
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +6 -1
- package/src/install/manifestFiles.ts +24 -0
- package/src/install/noGoDenyRows.ts +368 -0
- package/src/install/noGoRules.ts +438 -0
- package/src/install/ownershipLedger.ts +180 -0
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +94 -12
- package/src/install/recordedOwnership.ts +121 -3
- package/src/install/rule_scope.ts +20 -3
- package/src/install/stagedRuntime.ts +528 -0
- package/src/install/toolsArg.ts +16 -0
- package/src/install/types.ts +23 -2
- package/src/install/userPin.ts +54 -0
- package/src/install/wizard-plan.ts +25 -4
- package/src/scripts/_cli/_doctor_emit.ts +24 -0
- package/src/scripts/_cli/cmd_brand_status.ts +223 -12
- package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -44
- package/src/scripts/_cli/cmd_route_explain.ts +176 -2
- package/src/scripts/_cli/cmd_uninstall.ts +270 -26
- package/src/scripts/_cli/cmd_update.ts +34 -1
- package/src/scripts/_cli/cmd_upgrade.ts +38 -2
- package/src/scripts/_cli/detection_report.ts +7 -0
- package/src/scripts/_cli/doctor_execution.ts +1 -2
- package/src/scripts/_cli/doctor_install_mode.ts +39 -0
- package/src/scripts/_cli/doctor_network_posture.ts +3 -3
- package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
- package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
- package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
- package/src/scripts/_cli/upgrade_unattended.ts +548 -0
- package/src/scripts/_dispatch.bash +42 -9
- package/src/scripts/_lib/activation_ladder.ts +1 -1
- package/src/scripts/_lib/advisory_inventory.ts +405 -0
- package/src/scripts/_lib/advisory_notice.ts +270 -0
- package/src/scripts/_lib/advisory_sources.ts +752 -0
- package/src/scripts/_lib/advisory_verdicts.ts +363 -0
- package/src/scripts/_lib/agent_artifact_location.ts +177 -0
- package/src/scripts/_lib/agent_settings.ts +7 -12
- package/src/scripts/_lib/arrival_record.ts +217 -0
- package/src/scripts/_lib/asset_render_record.ts +247 -0
- package/src/scripts/_lib/billing_grant.ts +4 -2
- package/src/scripts/_lib/brand_voice_slot.ts +258 -0
- package/src/scripts/_lib/canary_status.ts +24 -0
- package/src/scripts/_lib/cc_transcript.ts +276 -0
- package/src/scripts/_lib/changelog_eras.ts +83 -0
- package/src/scripts/_lib/claim_phrases.ts +71 -0
- package/src/scripts/_lib/classify_update.ts +171 -0
- package/src/scripts/_lib/claude_builtin_names.ts +9 -4
- package/src/scripts/_lib/claude_hook_scope.ts +195 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
- package/src/scripts/_lib/codex_resident_set.ts +460 -0
- package/src/scripts/_lib/codex_skill_finder.ts +225 -0
- package/src/scripts/_lib/confusables.ts +19 -0
- package/src/scripts/_lib/consumer_impact.ts +199 -0
- package/src/scripts/_lib/content_class.ts +127 -0
- package/src/scripts/_lib/counted_probe.ts +68 -1
- package/src/scripts/_lib/credential_deny_rows.ts +151 -0
- package/src/scripts/_lib/credential_files.ts +367 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
- package/src/scripts/_lib/depth_flip.ts +141 -0
- package/src/scripts/_lib/design_lock.ts +117 -0
- package/src/scripts/_lib/design_sync_ledger.ts +142 -0
- package/src/scripts/_lib/design_sync_plan.ts +177 -0
- package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
- package/src/scripts/_lib/design_sync_verify.ts +99 -0
- package/src/scripts/_lib/design_system_claude_design.ts +323 -0
- package/src/scripts/_lib/design_system_import.ts +84 -6
- package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
- package/src/scripts/_lib/egress_credential_env.ts +35 -0
- package/src/scripts/_lib/egress_engine.ts +22 -0
- package/src/scripts/_lib/egress_known_values.ts +223 -0
- package/src/scripts/_lib/egress_normalize.ts +67 -0
- package/src/scripts/_lib/egress_prefixes.ts +42 -0
- package/src/scripts/_lib/egress_rules.ts +896 -0
- package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
- package/src/scripts/_lib/egress_sender_scan.ts +290 -0
- package/src/scripts/_lib/egress_session_table.ts +510 -0
- package/src/scripts/_lib/egress_text.ts +63 -0
- package/src/scripts/_lib/egress_token.ts +252 -0
- package/src/scripts/_lib/empty_cycles.ts +1 -1
- package/src/scripts/_lib/environment_detector.ts +45 -30
- package/src/scripts/_lib/exemption_shape.ts +75 -1
- package/src/scripts/_lib/floor_posture.ts +185 -0
- package/src/scripts/_lib/forge_protection.ts +140 -2
- package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
- package/src/scripts/_lib/guidelines_lane.ts +12 -1
- package/src/scripts/_lib/hand_kinds.ts +65 -0
- package/src/scripts/_lib/headless_invocation.ts +3 -3
- package/src/scripts/_lib/host_capability.ts +34 -2
- package/src/scripts/_lib/host_env_write.ts +39 -18
- package/src/scripts/_lib/host_listing_model.ts +14 -7
- package/src/scripts/_lib/identifier_redaction.ts +26 -0
- package/src/scripts/_lib/impact_bump.ts +70 -0
- package/src/scripts/_lib/install_reach_checks.ts +53 -1
- package/src/scripts/_lib/installed_layer.ts +31 -0
- package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
- package/src/scripts/_lib/layer_form_corpus.ts +165 -0
- package/src/scripts/_lib/layer_form_decision.ts +248 -0
- package/src/scripts/_lib/layer_form_evidence.ts +112 -0
- package/src/scripts/_lib/lean_projection_mode.ts +32 -161
- package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
- package/src/scripts/_lib/loop_guards.ts +8 -120
- package/src/scripts/_lib/major_surface.ts +207 -0
- package/src/scripts/_lib/mcp_bridge.ts +30 -69
- package/src/scripts/_lib/merge_clearance_record.ts +384 -0
- package/src/scripts/_lib/neighbour_census.ts +18 -1
- package/src/scripts/_lib/orchestration_record.ts +61 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
- package/src/scripts/_lib/pin_advice.ts +49 -0
- package/src/scripts/_lib/platform_anchor.ts +222 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/project_tree_form.ts +134 -0
- package/src/scripts/_lib/projection_key_migration.ts +122 -0
- package/src/scripts/_lib/prompt_shape.ts +13 -2
- package/src/scripts/_lib/provenance_verify.ts +272 -0
- package/src/scripts/_lib/quota_parked.ts +27 -1
- package/src/scripts/_lib/ratification_artifact.ts +64 -1
- package/src/scripts/_lib/ratification_subject.ts +508 -46
- package/src/scripts/_lib/release_findings_ingest.ts +52 -5
- package/src/scripts/_lib/release_highlights.ts +72 -2
- package/src/scripts/_lib/release_settings_surface.ts +392 -0
- package/src/scripts/_lib/review_round.ts +134 -0
- package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
- package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
- package/src/scripts/_lib/roadmap_step_size.ts +75 -0
- package/src/scripts/_lib/run_checkpoint.ts +60 -3
- package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
- package/src/scripts/_lib/scope_guard.sh +64 -5
- package/src/scripts/_lib/scoped_projection.ts +136 -3
- package/src/scripts/_lib/secret_detector.ts +24 -103
- package/src/scripts/_lib/security_fix.ts +429 -0
- package/src/scripts/_lib/security_fix_context.ts +133 -0
- package/src/scripts/_lib/self_repair.ts +69 -39
- package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
- package/src/scripts/_lib/self_repair_payload.ts +86 -0
- package/src/scripts/_lib/session_eol.ts +3 -0
- package/src/scripts/_lib/session_pr_watch.ts +207 -0
- package/src/scripts/_lib/session_register.ts +51 -1
- package/src/scripts/_lib/session_tag.ts +51 -0
- package/src/scripts/_lib/settings_removed_keys.ts +30 -0
- package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
- package/src/scripts/_lib/skill_catalogue.ts +66 -25
- package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
- package/src/scripts/_lib/skill_leases.ts +203 -0
- package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
- package/src/scripts/_lib/skill_materialisation.ts +388 -0
- package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
- package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
- package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
- package/src/scripts/_lib/skill_origin.ts +21 -1
- package/src/scripts/_lib/skill_reach.ts +342 -0
- package/src/scripts/_lib/source_shape.ts +7 -2
- package/src/scripts/_lib/sqlite_guard.ts +1 -1
- package/src/scripts/_lib/step_anatomy.ts +330 -0
- package/src/scripts/_lib/subagent_capsule.ts +8 -2
- package/src/scripts/_lib/subagent_native_fields.ts +30 -0
- package/src/scripts/_lib/subagent_spawn.ts +36 -0
- package/src/scripts/_lib/subagent_steering.ts +367 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_rules.ts +2 -0
- package/src/scripts/_lib/test_delta.ts +89 -6
- package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
- package/src/scripts/_lib/tool_result_census.ts +62 -0
- package/src/scripts/_lib/trigger_routers.ts +1 -0
- package/src/scripts/_lib/turnaround_throughput.ts +378 -0
- package/src/scripts/_lib/ui_surface.ts +22 -0
- package/src/scripts/_lib/unattended_gates.ts +100 -0
- package/src/scripts/_lib/undeployed_fixes.ts +34 -0
- package/src/scripts/_lib/update_check.ts +143 -12
- package/src/scripts/_lib/update_invite.ts +116 -0
- package/src/scripts/_lib/update_notice.ts +259 -0
- package/src/scripts/_lib/verify_clause.ts +4 -2
- package/src/scripts/_lib/version_order.ts +146 -0
- package/src/scripts/_lib/worker_reuse.ts +191 -0
- package/src/scripts/_lib/workspace_secrets.ts +273 -0
- package/src/scripts/_lib/worktree_git.ts +67 -0
- package/src/scripts/_lib/worktree_ignored.ts +116 -0
- package/src/scripts/adoption_status.ts +330 -3
- package/src/scripts/adr_cite_check.ts +93 -0
- package/src/scripts/advisories.ts +803 -0
- package/src/scripts/ai-image/adapters/flux.sh +1 -0
- package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
- package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
- package/src/scripts/ai-image/adapters/recraft.sh +1 -0
- package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
- package/src/scripts/ai-video/adapters/fal.sh +1 -0
- package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
- package/src/scripts/ai-video/adapters/kling.sh +1 -0
- package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
- package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
- package/src/scripts/ai-video/adapters/replicate.sh +1 -0
- package/src/scripts/ai-video/adapters/sora.sh +1 -0
- package/src/scripts/ai-video/adapters/syncso.sh +1 -0
- package/src/scripts/ai-video/stitch.sh +115 -2
- package/src/scripts/ai_council/airgap.ts +1 -0
- package/src/scripts/ai_council/api_transport.ts +27 -4
- package/src/scripts/ai_council/budget_guard.ts +300 -11
- package/src/scripts/ai_council/bundler.ts +20 -29
- package/src/scripts/ai_council/chairman.ts +17 -2
- package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
- package/src/scripts/ai_council/cli_launch_env.ts +54 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
- package/src/scripts/ai_council/clients.ts +55 -73
- package/src/scripts/ai_council/config.ts +16 -22
- package/src/scripts/ai_council/council_egress.ts +167 -0
- package/src/scripts/ai_council/exposure_ledger.ts +117 -0
- package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +173 -0
- package/src/scripts/ai_council/free_route_client.ts +95 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +230 -0
- package/src/scripts/ai_council/hand_schemas.ts +123 -0
- package/src/scripts/ai_council/jury_aggregate.ts +155 -1
- package/src/scripts/ai_council/kind_flip.ts +221 -0
- package/src/scripts/ai_council/kind_flip_state.ts +19 -0
- package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
- package/src/scripts/ai_council/modification_review.ts +98 -5
- package/src/scripts/ai_council/necessity.ts +7 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -16
- package/src/scripts/ai_council/pricing.ts +10 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
- package/src/scripts/ai_council/response_render.ts +27 -4
- package/src/scripts/ai_council/round_reservations.ts +119 -0
- package/src/scripts/ai_council/route_chooser.ts +161 -0
- package/src/scripts/ai_council/route_liveness.ts +152 -0
- package/src/scripts/ai_council/route_member.ts +52 -0
- package/src/scripts/ai_council/seat_policy.ts +40 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
- package/src/scripts/ai_council/spend_gate.ts +18 -2
- package/src/scripts/ai_council/status_surface.ts +37 -0
- package/src/scripts/ai_council/transport_resolver.ts +15 -18
- package/src/scripts/analysis_analysts.ts +226 -0
- package/src/scripts/analysis_anchors.ts +140 -0
- package/src/scripts/analysis_and_optimize.ts +44 -0
- package/src/scripts/analysis_emit.ts +150 -0
- package/src/scripts/analysis_exchange.ts +186 -0
- package/src/scripts/analysis_gate.ts +158 -0
- package/src/scripts/analysis_inbox_final.ts +173 -0
- package/src/scripts/analysis_ledger.ts +119 -0
- package/src/scripts/analysis_pr_optimize.ts +219 -0
- package/src/scripts/analysis_pr_review.ts +240 -0
- package/src/scripts/analysis_pr_target.ts +121 -0
- package/src/scripts/analysis_prompts.ts +130 -0
- package/src/scripts/analysis_publish.ts +358 -0
- package/src/scripts/analysis_questions.ts +78 -0
- package/src/scripts/analysis_run.ts +248 -0
- package/src/scripts/analysis_run_record.ts +210 -0
- package/src/scripts/analysis_target.ts +343 -0
- package/src/scripts/analysis_validate.ts +161 -0
- package/src/scripts/anchor_eval_falsify.ts +1 -1
- package/src/scripts/arrival_report.ts +115 -0
- package/src/scripts/ask_transport.ts +284 -35
- package/src/scripts/backfill_model_tier.ts +4 -5
- package/src/scripts/before_complete_hook.ts +48 -2
- package/src/scripts/bench_hook_latency.ts +3 -3
- package/src/scripts/bench_procedure_cursor.ts +440 -0
- package/src/scripts/bootstrap.sh +3 -3
- package/src/scripts/build_exit_code_register.ts +440 -0
- package/src/scripts/build_proof.ts +23 -1
- package/src/scripts/cache_realization_report.ts +155 -14
- package/src/scripts/canary_liveness.ts +117 -0
- package/src/scripts/chat_history.ts +12 -15
- package/src/scripts/check_account_surface.ts +318 -0
- package/src/scripts/check_agent_artifact_location.ts +17 -160
- package/src/scripts/check_bundle_path_leakage.ts +6 -0
- package/src/scripts/check_ci_local_parity.ts +21 -13
- package/src/scripts/check_claims.ts +77 -2
- package/src/scripts/check_completion_review.ts +34 -1
- package/src/scripts/check_concern_admissions.ts +41 -5
- package/src/scripts/check_consumer_scope_flip.ts +1 -1
- package/src/scripts/check_context_paths.ts +2 -0
- package/src/scripts/check_council_layout.ts +9 -0
- package/src/scripts/check_credential_spelling.ts +267 -0
- package/src/scripts/check_egress_mutations.ts +239 -0
- package/src/scripts/check_enforcement_coverage.ts +16 -3
- package/src/scripts/check_estate_count.ts +16 -1
- package/src/scripts/check_finding_dispositions.ts +147 -0
- package/src/scripts/check_gate_coverage.ts +123 -21
- package/src/scripts/check_gate_reachability.ts +16 -2
- package/src/scripts/check_generator_sync.ts +46 -0
- package/src/scripts/check_hook_bundle_composition.ts +139 -1
- package/src/scripts/check_host_docs_digest.ts +142 -5
- package/src/scripts/check_kernel_edit_ratified.ts +301 -76
- package/src/scripts/check_kernel_rule_bundle.ts +14 -10
- package/src/scripts/check_knowledge_cards.ts +83 -3
- package/src/scripts/check_memory.ts +13 -3
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_permission_deny_syntax.ts +247 -0
- package/src/scripts/check_platform_anchor.ts +243 -0
- package/src/scripts/check_proposal.ts +183 -1
- package/src/scripts/check_reach_channels.ts +5 -3
- package/src/scripts/check_references.ts +5 -2
- package/src/scripts/check_release_manifest_content.ts +33 -0
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_rule_invariants.ts +9 -1
- package/src/scripts/check_skill_body_budget.ts +343 -0
- package/src/scripts/check_skill_requires.ts +137 -1
- package/src/scripts/check_step_receipts.ts +246 -0
- package/src/scripts/check_structural_breaking.ts +7 -1
- package/src/scripts/check_suppression_hygiene.ts +8 -0
- package/src/scripts/check_test_weakening.ts +14 -0
- package/src/scripts/check_token_quality_golden.ts +5 -1
- package/src/scripts/check_update_banner.ts +50 -3
- package/src/scripts/check_verify_expectation_delta.ts +2 -1
- package/src/scripts/check_voice_lexicon.ts +531 -0
- package/src/scripts/ci_os_attribution.ts +327 -0
- package/src/scripts/ci_platform_scope.ts +69 -0
- package/src/scripts/ci_settle.ts +4 -1
- package/src/scripts/ci_status.ts +0 -1
- package/src/scripts/ci_time_to_green.ts +748 -0
- package/src/scripts/classify_merge_risk.ts +407 -19
- package/src/scripts/code_graph/sqlite_store.ts +1 -1
- package/src/scripts/compile_trigger_evals.ts +353 -0
- package/src/scripts/condense.ts +25 -31
- package/src/scripts/consumer_matrix.ts +61 -3
- package/src/scripts/council_availability_hook.ts +12 -4
- package/src/scripts/council_cli.ts +48 -38
- package/src/scripts/cross_repo_retrieve.ts +9 -72
- package/src/scripts/design_lock.ts +106 -0
- package/src/scripts/design_slop_rules.ts +30 -0
- package/src/scripts/design_sync.ts +264 -0
- package/src/scripts/design_system_import.ts +30 -13
- package/src/scripts/dispatch_economy_report.ts +46 -1
- package/src/scripts/dispatch_r2_reviewer.ts +41 -5
- package/src/scripts/egress_canary.ts +166 -0
- package/src/scripts/egress_sender_census.ts +101 -0
- package/src/scripts/external_sources_denylist.json +94 -12
- package/src/scripts/generate_catalog.ts +6 -2
- package/src/scripts/generate_owned_digest.ts +163 -0
- package/src/scripts/generate_reference_toc.ts +143 -0
- package/src/scripts/generate_subagent_floor.ts +11 -1
- package/src/scripts/handoff_context_hook.ts +34 -0
- package/src/scripts/hook_carrier_census.ts +263 -0
- package/src/scripts/hook_chunks.d.mts +12 -0
- package/src/scripts/hook_chunks.mjs +114 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +65 -42
- package/src/scripts/hooks/block_config_weakening.ts +127 -3
- package/src/scripts/hooks/block_credential_reads.ts +165 -0
- package/src/scripts/hooks/block_no_verify.ts +47 -23
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +38 -7
- package/src/scripts/hooks/category_a.ts +202 -25
- package/src/scripts/hooks/concern_failure_policy.ts +6 -6
- package/src/scripts/hooks/concern_registry.ts +31 -6
- package/src/scripts/hooks/concern_registry_types.ts +11 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
- package/src/scripts/hooks/design_pass_hook.ts +42 -10
- package/src/scripts/hooks/dispatch_hook.ts +13 -12
- package/src/scripts/hooks/egress_engine_loader.ts +125 -0
- package/src/scripts/hooks/egress_stage.ts +440 -0
- package/src/scripts/hooks/hook_stdin.ts +29 -4
- package/src/scripts/hooks/host_docs_pages.ts +194 -0
- package/src/scripts/hooks/host_docs_pages.yaml +75 -0
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.yaml +22 -21
- package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
- package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
- package/src/scripts/hooks/lazy_concern.ts +148 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
- package/src/scripts/hooks/payload_stub.ts +16 -6
- package/src/scripts/hooks/permission_gate.ts +7 -7
- package/src/scripts/hooks/push_settle_hook.ts +32 -3
- package/src/scripts/hooks/replay_hook.ts +43 -0
- package/src/scripts/hooks/reread_guard_hook.ts +87 -10
- package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +8 -1
- package/src/scripts/hooks/session_eol_hook.ts +48 -1
- package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/svg_obligation.ts +75 -19
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +1 -1
- package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
- package/src/scripts/hooks_doctor.ts +31 -0
- package/src/scripts/hooks_status.ts +58 -3
- package/src/scripts/inbox_source_census.ts +74 -13
- package/src/scripts/install +25 -3
- package/src/scripts/install.ts +60 -91
- package/src/scripts/interruption_report.ts +11 -1
- package/src/scripts/layer_baseline_report.ts +267 -0
- package/src/scripts/learning_sidecar.ts +1 -1
- package/src/scripts/lint_agents_layout.ts +3 -0
- package/src/scripts/lint_blocker_citations.ts +104 -0
- package/src/scripts/lint_breaking_changes_index.ts +40 -7
- package/src/scripts/lint_consolidation_lineage.ts +144 -16
- package/src/scripts/lint_consumer_internal_refs.ts +90 -42
- package/src/scripts/lint_context_spine_usage.ts +21 -0
- package/src/scripts/lint_design_antipattern_parity.ts +39 -7
- package/src/scripts/lint_evidence_artifacts.ts +31 -0
- package/src/scripts/lint_example_fences.ts +11 -2
- package/src/scripts/lint_ghostwriter_source.ts +42 -10
- package/src/scripts/lint_hook_manifest.ts +94 -0
- package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
- package/src/scripts/lint_mcp_config_security.ts +9 -11
- package/src/scripts/lint_plan_risk_register.ts +28 -1
- package/src/scripts/lint_positioning.ts +4 -4
- package/src/scripts/lint_provenance.ts +1 -0
- package/src/scripts/lint_roadmap_blockers.ts +65 -4
- package/src/scripts/lint_roadmap_complexity.ts +98 -0
- package/src/scripts/lint_skill_link_reach.ts +251 -9
- package/src/scripts/lint_skill_procedures.ts +252 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
- package/src/scripts/lint_subagent_determinism.ts +14 -1
- package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
- package/src/scripts/mcp_registry_submit.sh +2 -2
- package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
- package/src/scripts/mcp_server/suggest_skill.ts +89 -4
- package/src/scripts/mcp_server/tools.ts +2 -33
- package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
- package/src/scripts/measure_turn_end_gate.ts +61 -1
- package/src/scripts/merge_clearance.ts +225 -0
- package/src/scripts/migrate_command_suggestions.ts +1 -1
- package/src/scripts/network_sources.ts +236 -0
- package/src/scripts/no_go_deny_rows.ts +225 -0
- package/src/scripts/orchestration_record.ts +15 -2
- package/src/scripts/plan_test_shards.ts +103 -0
- package/src/scripts/pr_url_reminder_hook.ts +10 -0
- package/src/scripts/print_required_checks.ts +5 -5
- package/src/scripts/probe_depth_shadow.ts +406 -0
- package/src/scripts/probe_turnaround.ts +342 -10
- package/src/scripts/ratification_subject.ts +176 -0
- package/src/scripts/rdp_gate_classify.ts +1 -0
- package/src/scripts/rdp_quality_eval.ts +1 -0
- package/src/scripts/release.ts +26 -55
- package/src/scripts/release_drill.ts +52 -23
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -1
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_project_contract.ts +123 -0
- package/src/scripts/report_reducible_classes.ts +342 -0
- package/src/scripts/report_required_checks_drift.ts +5 -3
- package/src/scripts/report_skill_host_census.ts +199 -0
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/retro.ts +758 -0
- package/src/scripts/retro_facts.ts +575 -0
- package/src/scripts/retro_queue.ts +739 -0
- package/src/scripts/retro_session_facts.ts +218 -0
- package/src/scripts/retro_sweep.ts +493 -0
- package/src/scripts/retro_triage.ts +126 -0
- package/src/scripts/roadmap_context.ts +2 -2
- package/src/scripts/roadmap_drain_queue.ts +601 -0
- package/src/scripts/run_supervise.ts +24 -2
- package/src/scripts/schemas/agent-settings.schema.json +0 -16
- package/src/scripts/schemas/command.schema.json +3 -3
- package/src/scripts/schemas/review-findings.schema.json +8 -0
- package/src/scripts/schemas/skill.schema.json +7 -6
- package/src/scripts/schemas/subagent.schema.json +33 -2
- package/src/scripts/score_skill_selection.ts +5 -2
- package/src/scripts/second_brain_retrieval.ts +1 -0
- package/src/scripts/second_brain_run.ts +1 -0
- package/src/scripts/self_repair_cli.ts +563 -87
- package/src/scripts/self_review_gate.ts +59 -4
- package/src/scripts/session_register_hook.ts +91 -4
- package/src/scripts/sessions_cli.ts +100 -5
- package/src/scripts/skill_collision_clusters.ts +1 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
- package/src/scripts/skill_trigger_eval.ts +4 -2
- package/src/scripts/source_adapters.ts +183 -0
- package/src/scripts/step_receipt.ts +100 -0
- package/src/scripts/sync_pr_branch.ts +4 -0
- package/src/scripts/test_council_qualification.ts +1 -1
- package/src/scripts/trigger_eval_grandfather.json +3 -49
- package/src/scripts/trigger_eval_rotation.ts +31 -3
- package/src/scripts/ui_conformance_probe.ts +405 -1
- package/src/scripts/update_counts.ts +230 -11
- package/src/scripts/update_invite_hook.ts +245 -0
- package/src/scripts/update_notice_hook.ts +298 -0
- package/src/scripts/validate_frontmatter.ts +85 -0
- package/src/scripts/worker_reuse_shadow_report.ts +121 -0
- package/src/scripts/worktree_cleanup_check.ts +915 -121
- package/src/server/io/yamlIO.ts +2 -2
- package/src/server/schemas/settings.ts +37 -23
- package/src/shared/brandTokenDocument.ts +46 -0
- package/src/shared/brandTokenPaths.ts +43 -0
- package/src/shared/settingsCarveOut.ts +0 -8
- package/src/shared/skillRanking.ts +106 -5
- package/src/shared/userMd/formAdapter.ts +15 -1
- package/src/shared/userMd/schema.ts +22 -0
- package/src/templates/agent-user.md +4 -0
- package/src/templates/agent-user.yml +4 -0
- package/dist/cli-delegate/chunk-4DBG5K7M.js +0 -1123
- package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
- package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
- package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
- package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
- package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
- package/dist/ui/assets/index-C3djEJah.js +0 -23
- package/src/scripts/_lib/continuation_ladder.ts +0 -335
- package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `svg-structure-filled-counter` — step 3.2 of `road-to-type-with-a-witness`.
|
|
3
|
+
*
|
|
4
|
+
* A letter with a counter (o, e, a, B, 8) or an O-ring mark is one path with an
|
|
5
|
+
* outer and an inner contour. Under `fill-rule="nonzero"`, the default, the
|
|
6
|
+
* counter stays open only when the inner contour winds the OTHER way: a
|
|
7
|
+
* same-direction inner contour adds to the winding number and the counter
|
|
8
|
+
* paints. Measured on the repo's Chromium: two same-direction circles of radius
|
|
9
|
+
* 250 and 160 painted 196,282 px, the ring they should be 115,940.
|
|
10
|
+
*
|
|
11
|
+
* The check flattens each subpath to a polygon, sums the winding signs of the
|
|
12
|
+
* subpaths that contain a subpath's every vertex, and reports the subpath when
|
|
13
|
+
* that sum is nonzero and shares its own sign — it sits in a painted region and
|
|
14
|
+
* deepens it instead of cutting it out. It is advisory (decision A8): `warning`, never `error`, until
|
|
15
|
+
* the false-positive census of step 3.3 says otherwise.
|
|
16
|
+
*
|
|
17
|
+
* Limits, stated rather than guessed around: a transform does not change a
|
|
18
|
+
* winding sign unless it mirrors, and a mirror flips both contours alike, so
|
|
19
|
+
* transforms are ignored; `fill-rule` set from a stylesheet selector is not
|
|
20
|
+
* read — an attribute or inline style, on the path or an ancestor, is.
|
|
21
|
+
*/
|
|
22
|
+
import { tokenisePath } from './svg_geometry.js';
|
|
23
|
+
const CURVE_STEPS = 12;
|
|
24
|
+
const MAX_SUBPATHS = 400;
|
|
25
|
+
function styleProp(el, prop) {
|
|
26
|
+
const direct = el.attrs[prop];
|
|
27
|
+
if (direct !== undefined)
|
|
28
|
+
return direct.trim();
|
|
29
|
+
const m = new RegExp(`(?:^|;)\\s*${prop}\\s*:\\s*([^;]+)`, 'i').exec(el.attrs['style'] ?? '');
|
|
30
|
+
return m?.[1]?.trim();
|
|
31
|
+
}
|
|
32
|
+
function arcPoints(from, args) {
|
|
33
|
+
const [rxIn, ryIn, rotDeg, large, sweep, x, y] = args;
|
|
34
|
+
const [x1, y1] = from;
|
|
35
|
+
let rx = Math.abs(rxIn);
|
|
36
|
+
let ry = Math.abs(ryIn);
|
|
37
|
+
if (rx === 0 || ry === 0 || (x1 === x && y1 === y))
|
|
38
|
+
return [[x, y]];
|
|
39
|
+
const phi = (rotDeg * Math.PI) / 180;
|
|
40
|
+
const cos = Math.cos(phi);
|
|
41
|
+
const sin = Math.sin(phi);
|
|
42
|
+
const dx = (x1 - x) / 2;
|
|
43
|
+
const dy = (y1 - y) / 2;
|
|
44
|
+
const xp = cos * dx + sin * dy;
|
|
45
|
+
const yp = -sin * dx + cos * dy;
|
|
46
|
+
const lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);
|
|
47
|
+
if (lambda > 1) {
|
|
48
|
+
rx *= Math.sqrt(lambda);
|
|
49
|
+
ry *= Math.sqrt(lambda);
|
|
50
|
+
}
|
|
51
|
+
const num = rx * rx * ry * ry - rx * rx * yp * yp - ry * ry * xp * xp;
|
|
52
|
+
const den = rx * rx * yp * yp + ry * ry * xp * xp;
|
|
53
|
+
const coef = (large === sweep ? -1 : 1) * Math.sqrt(Math.max(0, num / den));
|
|
54
|
+
const cxp = (coef * rx * yp) / ry;
|
|
55
|
+
const cyp = (-coef * ry * xp) / rx;
|
|
56
|
+
const cx = cos * cxp - sin * cyp + (x1 + x) / 2;
|
|
57
|
+
const cy = sin * cxp + cos * cyp + (y1 + y) / 2;
|
|
58
|
+
const angle = (ux, uy, vx, vy) => {
|
|
59
|
+
const a = Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);
|
|
60
|
+
return a;
|
|
61
|
+
};
|
|
62
|
+
const t1 = angle(1, 0, (xp - cxp) / rx, (yp - cyp) / ry);
|
|
63
|
+
let dt = angle((xp - cxp) / rx, (yp - cyp) / ry, (-xp - cxp) / rx, (-yp - cyp) / ry);
|
|
64
|
+
if (!sweep && dt > 0)
|
|
65
|
+
dt -= 2 * Math.PI;
|
|
66
|
+
if (sweep && dt < 0)
|
|
67
|
+
dt += 2 * Math.PI;
|
|
68
|
+
const out = [];
|
|
69
|
+
for (let k = 1; k <= CURVE_STEPS; k++) {
|
|
70
|
+
const t = t1 + (dt * k) / CURVE_STEPS;
|
|
71
|
+
const ex = rx * Math.cos(t);
|
|
72
|
+
const ey = ry * Math.sin(t);
|
|
73
|
+
out.push([cos * ex - sin * ey + cx, sin * ex + cos * ey + cy]);
|
|
74
|
+
}
|
|
75
|
+
return out;
|
|
76
|
+
}
|
|
77
|
+
function bezier(p0, p1, p2, p3) {
|
|
78
|
+
const out = [];
|
|
79
|
+
for (let k = 1; k <= CURVE_STEPS; k++) {
|
|
80
|
+
const t = k / CURVE_STEPS;
|
|
81
|
+
const u = 1 - t;
|
|
82
|
+
out.push([
|
|
83
|
+
u * u * u * p0[0] + 3 * u * u * t * p1[0] + 3 * u * t * t * p2[0] + t * t * t * p3[0],
|
|
84
|
+
u * u * u * p0[1] + 3 * u * u * t * p1[1] + 3 * u * t * t * p2[1] + t * t * t * p3[1],
|
|
85
|
+
]);
|
|
86
|
+
}
|
|
87
|
+
return out;
|
|
88
|
+
}
|
|
89
|
+
/** Each subpath of `d` as a flattened polygon, or `null` when `d` does not parse. */
|
|
90
|
+
export function subpathPolygons(d) {
|
|
91
|
+
const tokens = tokenisePath(d);
|
|
92
|
+
if (tokens === null)
|
|
93
|
+
return null;
|
|
94
|
+
const ARGS = { m: 2, l: 2, t: 2, h: 1, v: 1, c: 6, s: 4, q: 4, a: 7, z: 0 };
|
|
95
|
+
const polys = [];
|
|
96
|
+
let poly = [];
|
|
97
|
+
let cur = [0, 0];
|
|
98
|
+
let start = [0, 0];
|
|
99
|
+
let lastCtrl = null;
|
|
100
|
+
let lastQuad = null;
|
|
101
|
+
let i = 0;
|
|
102
|
+
let cmd = '';
|
|
103
|
+
const flush = () => {
|
|
104
|
+
if (poly.length >= 3)
|
|
105
|
+
polys.push(poly);
|
|
106
|
+
poly = [];
|
|
107
|
+
};
|
|
108
|
+
while (i < tokens.length) {
|
|
109
|
+
const tok = tokens[i];
|
|
110
|
+
if (/^[a-zA-Z]$/.test(tok)) {
|
|
111
|
+
cmd = tok;
|
|
112
|
+
i += 1;
|
|
113
|
+
if (cmd.toLowerCase() === 'z') {
|
|
114
|
+
cur = start;
|
|
115
|
+
lastCtrl = lastQuad = null;
|
|
116
|
+
flush();
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (i >= tokens.length)
|
|
120
|
+
break;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const lower = cmd.toLowerCase();
|
|
124
|
+
const n = ARGS[lower];
|
|
125
|
+
if (n === undefined || n === 0)
|
|
126
|
+
return null;
|
|
127
|
+
const a = tokens.slice(i, i + n).map(Number);
|
|
128
|
+
if (a.length < n || a.some((v) => !Number.isFinite(v)))
|
|
129
|
+
return null;
|
|
130
|
+
i += n;
|
|
131
|
+
const rel = cmd !== cmd.toUpperCase();
|
|
132
|
+
const ox = rel ? cur[0] : 0;
|
|
133
|
+
const oy = rel ? cur[1] : 0;
|
|
134
|
+
const at = (k) => [a[k] + ox, a[k + 1] + oy];
|
|
135
|
+
let next = cur;
|
|
136
|
+
let pts = [];
|
|
137
|
+
let ctrl = null;
|
|
138
|
+
let quad = null;
|
|
139
|
+
switch (lower) {
|
|
140
|
+
case 'm':
|
|
141
|
+
flush();
|
|
142
|
+
next = at(0);
|
|
143
|
+
start = next;
|
|
144
|
+
pts = [next];
|
|
145
|
+
// Further pairs after a moveto are implicit linetos.
|
|
146
|
+
cmd = rel ? 'l' : 'L';
|
|
147
|
+
break;
|
|
148
|
+
case 'l':
|
|
149
|
+
next = at(0);
|
|
150
|
+
pts = [next];
|
|
151
|
+
break;
|
|
152
|
+
case 'h':
|
|
153
|
+
next = [a[0] + ox, cur[1]];
|
|
154
|
+
pts = [next];
|
|
155
|
+
break;
|
|
156
|
+
case 'v':
|
|
157
|
+
next = [cur[0], a[0] + oy];
|
|
158
|
+
pts = [next];
|
|
159
|
+
break;
|
|
160
|
+
case 'c':
|
|
161
|
+
ctrl = at(2);
|
|
162
|
+
next = at(4);
|
|
163
|
+
pts = bezier(cur, at(0), ctrl, next);
|
|
164
|
+
break;
|
|
165
|
+
case 's': {
|
|
166
|
+
const c1 = lastCtrl ? [2 * cur[0] - lastCtrl[0], 2 * cur[1] - lastCtrl[1]] : cur;
|
|
167
|
+
ctrl = at(0);
|
|
168
|
+
next = at(2);
|
|
169
|
+
pts = bezier(cur, c1, ctrl, next);
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
case 'q':
|
|
173
|
+
case 't': {
|
|
174
|
+
const q = lower === 'q' ? at(0) : lastQuad ? [2 * cur[0] - lastQuad[0], 2 * cur[1] - lastQuad[1]] : cur;
|
|
175
|
+
next = lower === 'q' ? at(2) : at(0);
|
|
176
|
+
quad = q;
|
|
177
|
+
const c1 = [cur[0] + (2 / 3) * (q[0] - cur[0]), cur[1] + (2 / 3) * (q[1] - cur[1])];
|
|
178
|
+
const c2 = [next[0] + (2 / 3) * (q[0] - next[0]), next[1] + (2 / 3) * (q[1] - next[1])];
|
|
179
|
+
pts = bezier(cur, c1, c2, next);
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
case 'a':
|
|
183
|
+
next = [a[5] + ox, a[6] + oy];
|
|
184
|
+
pts = arcPoints(cur, [a[0], a[1], a[2], a[3], a[4], next[0], next[1]]);
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
poly.push(...pts);
|
|
188
|
+
cur = next;
|
|
189
|
+
lastCtrl = ctrl;
|
|
190
|
+
lastQuad = quad;
|
|
191
|
+
if (polys.length > MAX_SUBPATHS)
|
|
192
|
+
return polys;
|
|
193
|
+
}
|
|
194
|
+
flush();
|
|
195
|
+
return polys;
|
|
196
|
+
}
|
|
197
|
+
function signedArea(poly) {
|
|
198
|
+
let s = 0;
|
|
199
|
+
for (let k = 0; k < poly.length; k++) {
|
|
200
|
+
const [x1, y1] = poly[k];
|
|
201
|
+
const [x2, y2] = poly[(k + 1) % poly.length];
|
|
202
|
+
s += x1 * y2 - x2 * y1;
|
|
203
|
+
}
|
|
204
|
+
return s / 2;
|
|
205
|
+
}
|
|
206
|
+
function inside(pt, poly) {
|
|
207
|
+
let hit = false;
|
|
208
|
+
for (let k = 0, j = poly.length - 1; k < poly.length; j = k++) {
|
|
209
|
+
const [xi, yi] = poly[k];
|
|
210
|
+
const [xj, yj] = poly[j];
|
|
211
|
+
if (yi > pt[1] !== yj > pt[1] && pt[0] < ((xj - xi) * (pt[1] - yi)) / (yj - yi) + xi)
|
|
212
|
+
hit = !hit;
|
|
213
|
+
}
|
|
214
|
+
return hit;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Every `<path>` painted under `nonzero` whose subpath sits in a painted region
|
|
218
|
+
* of the same path and winds with it. One entry per inner subpath; `outer` is
|
|
219
|
+
* the smallest subpath containing it.
|
|
220
|
+
*/
|
|
221
|
+
export function filledCounters(elements) {
|
|
222
|
+
const out = [];
|
|
223
|
+
// The fill rule and fill each element inherits, by an open-element stack.
|
|
224
|
+
const stack = [];
|
|
225
|
+
for (const el of elements) {
|
|
226
|
+
if (el.closing) {
|
|
227
|
+
const at = stack.map((s) => s.name).lastIndexOf(el.name);
|
|
228
|
+
if (at >= 0)
|
|
229
|
+
stack.length = at;
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
const parent = stack[stack.length - 1];
|
|
233
|
+
const rule = styleProp(el, 'fill-rule') ?? parent?.rule;
|
|
234
|
+
const fill = styleProp(el, 'fill') ?? parent?.fill;
|
|
235
|
+
if (!el.selfClosing)
|
|
236
|
+
stack.push({ name: el.name, rule, fill });
|
|
237
|
+
if (el.name !== 'path')
|
|
238
|
+
continue;
|
|
239
|
+
if ((rule ?? 'nonzero').toLowerCase() === 'evenodd' || (fill ?? '').toLowerCase() === 'none')
|
|
240
|
+
continue;
|
|
241
|
+
const polys = subpathPolygons(el.attrs['d'] ?? '');
|
|
242
|
+
if (polys === null || polys.length < 2 || polys.length > MAX_SUBPATHS)
|
|
243
|
+
continue;
|
|
244
|
+
const areas = polys.map(signedArea);
|
|
245
|
+
for (let inner = 0; inner < polys.length; inner++) {
|
|
246
|
+
const ia = areas[inner];
|
|
247
|
+
if (Math.abs(ia) < 1e-9)
|
|
248
|
+
continue;
|
|
249
|
+
// The winding number around the inner contour, from every subpath
|
|
250
|
+
// that contains it — not from one outer, or an island inside a
|
|
251
|
+
// counter reads as a filled counter.
|
|
252
|
+
let around = 0;
|
|
253
|
+
let nearest = -1;
|
|
254
|
+
for (let outer = 0; outer < polys.length; outer++) {
|
|
255
|
+
if (outer === inner)
|
|
256
|
+
continue;
|
|
257
|
+
const oa = areas[outer];
|
|
258
|
+
if (Math.abs(oa) <= Math.abs(ia))
|
|
259
|
+
continue;
|
|
260
|
+
const op = polys[outer];
|
|
261
|
+
if (!polys[inner].every((p) => inside(p, op)))
|
|
262
|
+
continue;
|
|
263
|
+
around += Math.sign(oa);
|
|
264
|
+
if (nearest < 0 || Math.abs(oa) < Math.abs(areas[nearest]))
|
|
265
|
+
nearest = outer;
|
|
266
|
+
}
|
|
267
|
+
if (around !== 0 && Math.sign(around) === Math.sign(ia)) {
|
|
268
|
+
out.push({ element: el, inner: inner + 1, outer: nearest + 1 });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return out;
|
|
273
|
+
}
|
|
274
|
+
/** The rule as `scanSvg` runs it: one advisory finding per filled counter. */
|
|
275
|
+
export function ruleFilledCounter(elements, file) {
|
|
276
|
+
return filledCounters(elements).map((c) => ({
|
|
277
|
+
rule: 'svg-structure-filled-counter',
|
|
278
|
+
file,
|
|
279
|
+
line: c.element.line,
|
|
280
|
+
snippet: `<path> subpath ${c.inner} sits inside subpath ${c.outer} with the same winding under nonzero, so ` +
|
|
281
|
+
'the counter paints — wind the inner contour the other way, or declare fill-rule="evenodd"',
|
|
282
|
+
severity: 'warning',
|
|
283
|
+
}));
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=svg_filled_counter.js.map
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
* every existing import keeps resolving.
|
|
29
29
|
*/
|
|
30
30
|
import { attrsOf, parseDocument, tagEnd } from './svg_dom.js';
|
|
31
|
+
import { ruleFilledCounter } from './svg_filled_counter.js';
|
|
31
32
|
import { cssUnescape, isActiveUrl, localName, rawAttrs, resolvedUrl, svgPrefixes, URL_ATTRS } from './svg_urls.js';
|
|
32
33
|
import { elementExtent, pathDataError, pathExtent, pointsExtent, staticBox, tokenisePath, } from './svg_geometry.js';
|
|
33
34
|
export { elementExtent, pathDataError, pathExtent, pointsExtent, staticBox, tokenisePath };
|
|
@@ -1092,6 +1093,7 @@ export function scanSvg(content, relPath, opts = {}) {
|
|
|
1092
1093
|
...ruleMissingXmlns(elements, relPath),
|
|
1093
1094
|
...ruleOutsideViewBox(elements, relPath),
|
|
1094
1095
|
...ruleUnparseablePath(elements, relPath),
|
|
1096
|
+
...ruleFilledCounter(elements, relPath),
|
|
1095
1097
|
...ruleUnusedDefs(text, elements, relPath),
|
|
1096
1098
|
...ruleDanglingReference(text, elements, relPath),
|
|
1097
1099
|
...ruleActiveContent(text, elements, relPath, mode),
|
|
@@ -86,4 +86,23 @@ export function isUiTreePath(p) {
|
|
|
86
86
|
return false;
|
|
87
87
|
return UI_PATH_FRAGMENTS.some((fragment) => normalized.includes(fragment));
|
|
88
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* The file-shaped triggers of `design-fidelity` — the ONE list every handover
|
|
91
|
+
* carrier reads (`isArtifactRead`, `isHandoverPath`, `HANDOVER_TRIGGERS`).
|
|
92
|
+
* Three hand copies drifted: one lacked `*.dc.html`. `design_pass.test.ts`
|
|
93
|
+
* pins this list to the rule's frontmatter in both directions.
|
|
94
|
+
*/
|
|
95
|
+
export const HANDOVER_SHAPES = [
|
|
96
|
+
{ file_pattern: '*design.html' },
|
|
97
|
+
{ file_pattern: '*.dc.html' },
|
|
98
|
+
{ path_prefix: '.claude/design-system/' },
|
|
99
|
+
{ path_prefix: '.design-sync/' },
|
|
100
|
+
];
|
|
101
|
+
/** True when `file` has a handover shape. Direction-agnostic, case-insensitive. */
|
|
102
|
+
export function isHandoverShape(file) {
|
|
103
|
+
if (!file)
|
|
104
|
+
return false;
|
|
105
|
+
const normalized = file.replace(/\\/g, '/').toLowerCase();
|
|
106
|
+
return HANDOVER_SHAPES.some((s) => 'path_prefix' in s ? normalized.includes(s.path_prefix) : normalized.endsWith(s.file_pattern.slice(1)));
|
|
107
|
+
}
|
|
89
108
|
//# sourceMappingURL=ui_surface.js.map
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The verification-command selector — one predicate, two importers.
|
|
3
|
+
*
|
|
4
|
+
* It first moved here byte-identical out of `hooks/turn_end_gate_hook.ts` so
|
|
5
|
+
* that `_lib/verification_evidence.ts` could read it without importing a hook
|
|
6
|
+
* that imports the evidence module straight back. That cycle resolves at
|
|
7
|
+
* runtime today and breaks the day either side grows a module-level constant
|
|
8
|
+
* reading the other, which is a failure nobody would trace to an import line.
|
|
9
|
+
*
|
|
10
|
+
* The hook re-exports the name, so every existing consumer — including both
|
|
11
|
+
* pinning test files — addresses it at the path it always did.
|
|
12
|
+
*
|
|
13
|
+
* WHY IT STOPPED BEING A REGEX (2026-09-30).
|
|
14
|
+
* The tree carried TWO expressions answering "did this command verify
|
|
15
|
+
* anything", and they disagreed in both directions:
|
|
16
|
+
*
|
|
17
|
+
* - `_VERIFY_RE` here matched a verification token **anywhere on the line**, so
|
|
18
|
+
* `ls tests`, `cat build.log`, `git checkout main`, `mkdir build` and
|
|
19
|
+
* `git commit -m "fix ci"` all cleared detector C — the exact case this
|
|
20
|
+
* header claimed to reject. Measured at the pin: all six returned `true`.
|
|
21
|
+
* - `_VERIFICATION_RE` in `before_complete_hook.ts` was head-anchored to a
|
|
22
|
+
* fixed vendor list and refused `npx vitest run`, `tsc --noEmit` and every
|
|
23
|
+
* `./scripts-run src/scripts/lint_*` — commands this project runs constantly.
|
|
24
|
+
* Measured at the pin: all three returned `false`.
|
|
25
|
+
*
|
|
26
|
+
* Both accepted `npm test || true`, where the shell discards the failure.
|
|
27
|
+
*
|
|
28
|
+
* The audited allowlist passed the whole time the first defect was live,
|
|
29
|
+
* because not one of its seven negatives put a verify token in an ARGUMENT
|
|
30
|
+
* position. A word-boundary regex cannot express "the head of the segment",
|
|
31
|
+
* which is the property that actually distinguishes `npm test` from `ls tests`,
|
|
32
|
+
* so the predicate is now structural: split on shell separators, drop a
|
|
33
|
+
* segment whose failure the shell discards, and classify each remaining
|
|
34
|
+
* segment on its HEAD.
|
|
35
|
+
*
|
|
36
|
+
* THE LISTS ARE STILL DELIBERATELY NARROW.
|
|
37
|
+
* A positive list. The alternative — treating any `Bash` call as verification —
|
|
38
|
+
* was rejected because `ls` would then clear an unverified edit, which is the
|
|
39
|
+
* failure mode `verify-before-complete` names ("relying on partial
|
|
40
|
+
* verification"). The cost of narrowness is a MISSED detection when a project
|
|
41
|
+
* verifies by some command not listed here, and that is the safe direction for
|
|
42
|
+
* a gate that can refuse a turn: a false negative costs one unguarded turn, a
|
|
43
|
+
* false positive teaches the user to switch the gate off.
|
|
44
|
+
*
|
|
45
|
+
* AUDITED 2026-08-17, re-seeded 2026-09-30 from the union of both lists minus
|
|
46
|
+
* every row that only ever matched on an argument. The table of every command
|
|
47
|
+
* with its verdict is `turn_end_verify_allowlist.test.ts`; the two directions
|
|
48
|
+
* of the old disagreement are `verification_command_anchoring.test.ts`.
|
|
49
|
+
*
|
|
50
|
+
* Deliberate NON-additions, kept because Risk 2 of the originating roadmap is
|
|
51
|
+
* that every addition is a way to satisfy the gate without verifying anything:
|
|
52
|
+
*
|
|
53
|
+
* · `npm run prepack` — a lifecycle hook whose content is per-project. Here
|
|
54
|
+
* it validates; elsewhere it copies files.
|
|
55
|
+
* · `task sync` / `task generate-tools` / `agent-config roadmap:progress` —
|
|
56
|
+
* GENERATORS. They rewrite the tree; they check nothing.
|
|
57
|
+
* · `agent-config gates --all` — enumerates gates, runs none.
|
|
58
|
+
* · `rector` — a refactoring tool. Its dry run prints a diff; it asserts
|
|
59
|
+
* nothing. It appears in `_VERIFICATION_RE`'s list and is dropped from the
|
|
60
|
+
* union on the strength of the audited `false` row, which carries a reason
|
|
61
|
+
* where the other list carried only a name.
|
|
62
|
+
* · `./scripts-run src/scripts/rule_activation_census` — a census writes a
|
|
63
|
+
* report; it asserts nothing. This is why the `scripts-run` rule keys on
|
|
64
|
+
* the `check_` / `lint_` prefix rather than on the runner.
|
|
65
|
+
*
|
|
66
|
+
* `psalm` IS carried, unlike the pre-2026-09-30 note here which argued it out
|
|
67
|
+
* for want of a local user: it was in `_VERIFICATION_RE` all along, so the
|
|
68
|
+
* union rule admits it and dropping it would be a narrowing this change did not
|
|
69
|
+
* set out to make.
|
|
70
|
+
*
|
|
71
|
+
* WHAT THIS SELECTOR STILL CANNOT DO: it reads the command TEXT, so
|
|
72
|
+
* `vitest run` matches whether or not it passed. Deciding whether a run proved
|
|
73
|
+
* anything is `verification_evidence.ts`, which reads the exit code and the
|
|
74
|
+
* summary the command printed. This selector decides only what is WORTH
|
|
75
|
+
* recording and classifying.
|
|
76
|
+
*/
|
|
77
|
+
/** Binaries that verify when they are the head of a segment. */
|
|
78
|
+
const VERIFY_BINARIES = new Set([
|
|
79
|
+
'vitest',
|
|
80
|
+
'jest',
|
|
81
|
+
'pytest',
|
|
82
|
+
'phpunit',
|
|
83
|
+
'pest',
|
|
84
|
+
'tsc',
|
|
85
|
+
'eslint',
|
|
86
|
+
'ruff',
|
|
87
|
+
'mypy',
|
|
88
|
+
'pyright',
|
|
89
|
+
'clippy',
|
|
90
|
+
'phpstan',
|
|
91
|
+
'psalm',
|
|
92
|
+
'ecs',
|
|
93
|
+
]);
|
|
94
|
+
/** Prefixes that delegate to the real command; dropped before classifying. */
|
|
95
|
+
const DELEGATING_HEADS = new Set([
|
|
96
|
+
'npx',
|
|
97
|
+
'bunx',
|
|
98
|
+
'sudo',
|
|
99
|
+
'time',
|
|
100
|
+
'command',
|
|
101
|
+
]);
|
|
102
|
+
/** Path prefixes a binary is commonly reached through. */
|
|
103
|
+
const PATH_PREFIXES = [
|
|
104
|
+
'./',
|
|
105
|
+
'vendor/bin/',
|
|
106
|
+
'.venv/bin/',
|
|
107
|
+
'node_modules/.bin/',
|
|
108
|
+
'bin/',
|
|
109
|
+
];
|
|
110
|
+
/** A script or subcommand name that names a check rather than a build step. */
|
|
111
|
+
const VERIFY_WORD = /(^|[-_:])(test|tests|check|checks|lint|typecheck|tsc|qa|preflight|smoke|validate)([-_:]|$)/i;
|
|
112
|
+
/** `npm run build` verifies here; `task build` is not in the audited surface. */
|
|
113
|
+
const NPM_SCRIPT_WORD = /(^|[-_:])(test|tests|check|checks|lint|typecheck|tsc|build)([-_:]|$)/i;
|
|
114
|
+
/** Strip an unquoted trailing `#` comment. */
|
|
115
|
+
function stripComment(command) {
|
|
116
|
+
let inSingle = false;
|
|
117
|
+
let inDouble = false;
|
|
118
|
+
for (let i = 0; i < command.length; i += 1) {
|
|
119
|
+
const ch = command[i];
|
|
120
|
+
if (ch === "'" && !inDouble)
|
|
121
|
+
inSingle = !inSingle;
|
|
122
|
+
else if (ch === '"' && !inSingle)
|
|
123
|
+
inDouble = !inDouble;
|
|
124
|
+
else if (ch === '#' && !inSingle && !inDouble && (i === 0 || /\s/.test(command[i - 1] ?? ''))) {
|
|
125
|
+
return command.slice(0, i);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return command;
|
|
129
|
+
}
|
|
130
|
+
/** Split into segments, remembering the separator that follows each. */
|
|
131
|
+
function splitSegments(command) {
|
|
132
|
+
const raw = [];
|
|
133
|
+
let buf = '';
|
|
134
|
+
let inSingle = false;
|
|
135
|
+
let inDouble = false;
|
|
136
|
+
for (let i = 0; i < command.length; i += 1) {
|
|
137
|
+
const ch = command[i];
|
|
138
|
+
const two = command.slice(i, i + 2);
|
|
139
|
+
if (ch === "'" && !inDouble) {
|
|
140
|
+
inSingle = !inSingle;
|
|
141
|
+
buf += ch;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (ch === '"' && !inSingle) {
|
|
145
|
+
inDouble = !inDouble;
|
|
146
|
+
buf += ch;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (!inSingle && !inDouble) {
|
|
150
|
+
if (two === '&&' || two === '||') {
|
|
151
|
+
raw.push({ text: buf, sep: two });
|
|
152
|
+
buf = '';
|
|
153
|
+
i += 1;
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (ch === ';' || ch === '|') {
|
|
157
|
+
raw.push({ text: buf, sep: ch });
|
|
158
|
+
buf = '';
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
buf += ch;
|
|
163
|
+
}
|
|
164
|
+
raw.push({ text: buf, sep: null });
|
|
165
|
+
return raw.map((entry, idx) => {
|
|
166
|
+
const next = raw[idx + 1];
|
|
167
|
+
const nextWords = next ? words(next.text) : [];
|
|
168
|
+
return {
|
|
169
|
+
words: words(entry.text),
|
|
170
|
+
nextSep: entry.sep,
|
|
171
|
+
nextHead: (nextWords[0] ?? null)?.toLowerCase() ?? null,
|
|
172
|
+
};
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/** Tokenise a segment, dropping leading `VAR=value` assignments. */
|
|
176
|
+
function words(text) {
|
|
177
|
+
const tokens = text.trim().split(/\s+/).filter((w) => w.length > 0);
|
|
178
|
+
let i = 0;
|
|
179
|
+
while (i < tokens.length && /^[A-Za-z_][A-Za-z0-9_]*=/.test(tokens[i]))
|
|
180
|
+
i += 1;
|
|
181
|
+
return tokens.slice(i);
|
|
182
|
+
}
|
|
183
|
+
/** Strip a path prefix from a binary name. */
|
|
184
|
+
function bareName(word) {
|
|
185
|
+
let w = word;
|
|
186
|
+
for (const prefix of PATH_PREFIXES) {
|
|
187
|
+
if (w.startsWith(prefix)) {
|
|
188
|
+
w = w.slice(prefix.length);
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const slash = w.lastIndexOf('/');
|
|
193
|
+
return (slash >= 0 ? w.slice(slash + 1) : w).toLowerCase();
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Does the shell discard this segment's failure?
|
|
197
|
+
*
|
|
198
|
+
* `cmd || true`, `cmd || :` and `cmd ; true` all leave the caller with exit 0
|
|
199
|
+
* whatever `cmd` did, so a verification there proves nothing about the tree.
|
|
200
|
+
* Deliberately narrow: `cmd || exit 1` propagates the failure and still counts.
|
|
201
|
+
*/
|
|
202
|
+
function failureIsDiscarded(seg) {
|
|
203
|
+
if (seg.nextSep === '||')
|
|
204
|
+
return seg.nextHead === 'true' || seg.nextHead === ':';
|
|
205
|
+
if (seg.nextSep === ';')
|
|
206
|
+
return seg.nextHead === 'true' || seg.nextHead === ':';
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
/** Classify one segment on its head. */
|
|
210
|
+
function segmentVerifies(rawWords) {
|
|
211
|
+
const w = rawWords.filter((x) => x.length > 0);
|
|
212
|
+
let idx = 0;
|
|
213
|
+
// Peel delegating prefixes: `npx vitest run`, `sudo make test`.
|
|
214
|
+
while (idx < w.length && DELEGATING_HEADS.has(bareName(w[idx])))
|
|
215
|
+
idx += 1;
|
|
216
|
+
if (idx >= w.length)
|
|
217
|
+
return false;
|
|
218
|
+
const head = bareName(w[idx]);
|
|
219
|
+
const rest = w.slice(idx + 1).map((x) => x.toLowerCase());
|
|
220
|
+
const arg1 = rest[0] ?? '';
|
|
221
|
+
if (VERIFY_BINARIES.has(head))
|
|
222
|
+
return true;
|
|
223
|
+
switch (head) {
|
|
224
|
+
case 'npm':
|
|
225
|
+
case 'pnpm':
|
|
226
|
+
case 'yarn':
|
|
227
|
+
case 'bun': {
|
|
228
|
+
// `pnpm dlx vitest` delegates; `npm run test:ts` names a script.
|
|
229
|
+
if (arg1 === 'dlx' || arg1 === 'exec')
|
|
230
|
+
return segmentVerifies(rest.slice(1));
|
|
231
|
+
const script = arg1 === 'run' ? (rest[1] ?? '') : arg1;
|
|
232
|
+
return NPM_SCRIPT_WORD.test(script);
|
|
233
|
+
}
|
|
234
|
+
case 'task':
|
|
235
|
+
return VERIFY_WORD.test(arg1) || /^ci([-_:]|$)/i.test(arg1);
|
|
236
|
+
case 'cargo':
|
|
237
|
+
return arg1 === 'test' || arg1 === 'check' || arg1 === 'clippy';
|
|
238
|
+
case 'go':
|
|
239
|
+
return arg1 === 'test' || arg1 === 'vet';
|
|
240
|
+
case 'make':
|
|
241
|
+
return VERIFY_WORD.test(arg1) || /^ci([-_:]|$)/i.test(arg1);
|
|
242
|
+
case 'composer':
|
|
243
|
+
return VERIFY_WORD.test(arg1) || arg1 === 'phpstan';
|
|
244
|
+
case 'php':
|
|
245
|
+
return arg1 === 'artisan' && (rest[1] ?? '') === 'test';
|
|
246
|
+
case 'artisan':
|
|
247
|
+
return arg1 === 'test';
|
|
248
|
+
case 'python':
|
|
249
|
+
case 'python3':
|
|
250
|
+
return arg1 === '-m' && VERIFY_BINARIES.has(rest[1] ?? '');
|
|
251
|
+
case 'node':
|
|
252
|
+
case 'deno':
|
|
253
|
+
// `node --test` is a runner selected by a FLAG, not by a
|
|
254
|
+
// subcommand, so head-anchoring alone would refuse it. Caught by
|
|
255
|
+
// `verification_evidence.test.ts` when this predicate narrowed:
|
|
256
|
+
// the old token-anywhere regex accepted it by accident and neither
|
|
257
|
+
// explicit list named it, so the union seeding missed it too.
|
|
258
|
+
return rest.some((a) => a === 'test' || a.startsWith('--test'));
|
|
259
|
+
case 'agent-config':
|
|
260
|
+
// NEITHER `ui:render` NOR `xmllint` verifies here, and the first
|
|
261
|
+
// half of that was true, then false, and is true again.
|
|
262
|
+
//
|
|
263
|
+
// Step 3.5 of `road-to-svg-with-a-witness` taught this predicate
|
|
264
|
+
// `ui:render --profile asset`, reasoning that it is the one
|
|
265
|
+
// subcommand which opens the delivered file in a real engine. Step
|
|
266
|
+
// 2.1(b) of `road-to-svg-review-followups` removed it again on
|
|
267
|
+
// review claim C2, which is narrower than the first argument and
|
|
268
|
+
// refutes it: the turn-end gate's TRANSCRIPT path matches a command
|
|
269
|
+
// and never sees an exit code, so a call that rendered nothing —
|
|
270
|
+
// the ordinary case on a machine with no Playwright, where the
|
|
271
|
+
// command also exited 0 until the same day — discharged the
|
|
272
|
+
// obligation from its text alone.
|
|
273
|
+
//
|
|
274
|
+
// What replaces it reads the RENDER instead of the call:
|
|
275
|
+
// `hooks/svg_obligation.ts` matches a manifest to the file's own
|
|
276
|
+
// digest, and accepts a renderer-absent manifest only together with
|
|
277
|
+
// a clean static witness on those same bytes. `xmllint --noout`
|
|
278
|
+
// stays out for its original reason (S6): a file can parse and
|
|
279
|
+
// still be the wrong picture.
|
|
280
|
+
return false;
|
|
281
|
+
case 'scripts-run': {
|
|
282
|
+
// `./scripts-run src/scripts/lint_x` verifies; `…/rule_activation_census`
|
|
283
|
+
// writes a report and asserts nothing, which is why this keys on the
|
|
284
|
+
// script's own prefix rather than on the runner.
|
|
285
|
+
const script = bareName(arg1);
|
|
286
|
+
return /^(check|lint|verify|validate)[-_]/.test(script);
|
|
287
|
+
}
|
|
288
|
+
default:
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* True when the command runs something that asserts the tree still holds.
|
|
294
|
+
*
|
|
295
|
+
* Classified per shell segment on the segment's HEAD, so a verification token
|
|
296
|
+
* appearing as an argument — `ls tests`, `git commit -m "fix ci"` — never
|
|
297
|
+
* counts, and a chained `task sync && task ci` counts on its second segment.
|
|
298
|
+
*/
|
|
299
|
+
export function isVerificationCommand(command) {
|
|
300
|
+
if (!command)
|
|
301
|
+
return false;
|
|
302
|
+
const segments = splitSegments(stripComment(command));
|
|
303
|
+
return segments.some((seg) => !failureIsDiscarded(seg) && segmentVerifies(seg.words));
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* The RECORDER's net — deliberately wider than the predicate above, and not a
|
|
307
|
+
* leftover of the two-regex era it replaces.
|
|
308
|
+
*
|
|
309
|
+
* The two answer different questions. `isVerificationCommand` answers *did
|
|
310
|
+
* this verify*, and a false positive there clears an unverified edit, so it is
|
|
311
|
+
* head-anchored and narrow. This one answers *is this worth writing down for
|
|
312
|
+
* `classifyRun` to judge*, and there the costly error is the opposite: a
|
|
313
|
+
* recorder that filtered `echo test` out would leave the turn-end gate unable
|
|
314
|
+
* to tell "the turn ran a non-verification command" from "the turn ran
|
|
315
|
+
* nothing at all", and `not_a_verification_command` is a verdict the gate
|
|
316
|
+
* needs to SEE rather than infer from silence.
|
|
317
|
+
*
|
|
318
|
+
* That is why unifying the two call sites into one predicate was tried and
|
|
319
|
+
* rejected on 2026-09-30: it is not two spellings of one idea, it is two
|
|
320
|
+
* questions with opposite error costs. What was wrong before was that each
|
|
321
|
+
* question had its own private regex in its own file and the two also
|
|
322
|
+
* disagreed about the FIRST question. Both now live here, and only this one
|
|
323
|
+
* matches on a token anywhere in the line.
|
|
324
|
+
*/
|
|
325
|
+
const _WIDE_CANDIDATE_RE = /\b(test|tests|vitest|jest|pytest|phpunit|pest|tsc|eslint|ruff|mypy|pyright|clippy|phpstan|typecheck|lint[-_:a-z]*|build|ci|preflight|smoke[-_:a-z]*|check[-_:a-z]*|validate[-_:a-z]*)\b|\b(task|npm|pnpm|yarn|composer|cargo|go|make|php artisan|bun)\s+(run\s+)?\S*(test|check|lint|build|ci|typecheck)/i;
|
|
326
|
+
export function mightBeVerification(command) {
|
|
327
|
+
return _WIDE_CANDIDATE_RE.test(command);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* `agent-config ui:render … --profile asset`, by shape.
|
|
331
|
+
*
|
|
332
|
+
* Moved here from `hooks/svg_obligation.ts` by finding 3 of this change's
|
|
333
|
+
* SECOND completion review: two detectors need it and one of them is in
|
|
334
|
+
* `_lib`, so a hook module was the wrong home. Re-exported there, so no
|
|
335
|
+
* caller moved.
|
|
336
|
+
*/
|
|
337
|
+
export function isAssetRenderCommand(command) {
|
|
338
|
+
return /\bui:render\b/.test(command) && /--profile[= ]\s*asset\b/.test(command);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Did this command ATTEMPT to verify something — as opposed to: did it produce
|
|
342
|
+
* a verdict this gate may read?
|
|
343
|
+
*
|
|
344
|
+
* The distinction is the whole point, and the first review round and the
|
|
345
|
+
* second each saw one half of it. Round one (claim C2) was right that
|
|
346
|
+
* `isVerificationCommand` must NOT learn the asset render: the transcript path
|
|
347
|
+
* never sees an exit code, so the command's TEXT would have discharged the SVG
|
|
348
|
+
* obligation on a machine where the render produced nothing. Round two
|
|
349
|
+
* (finding 3) was right that removing it left detector C — "did any
|
|
350
|
+
* verification command follow the last edit" — unable to see the one command
|
|
351
|
+
* this package PRESCRIBES for an `.svg`, so the prescribed turn was refused.
|
|
352
|
+
*
|
|
353
|
+
* Both hold because they are about different detectors. Detector C asks
|
|
354
|
+
* whether the author tried; it is satisfied by `eslint` and must be satisfied
|
|
355
|
+
* by a render too. The SVG obligation asks what the render FOUND, and still
|
|
356
|
+
* reads the manifest and the file's digest — an attempt that produced nothing
|
|
357
|
+
* discharges nothing there, with a far better reason than detector C's.
|
|
358
|
+
*
|
|
359
|
+
* So: one predicate per question, and `isVerificationCommand` is unchanged.
|
|
360
|
+
*/
|
|
361
|
+
export function isVerificationAttempt(command) {
|
|
362
|
+
return isVerificationCommand(command) || isAssetRenderCommand(command);
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=verification_command.js.map
|