@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
|
@@ -60,6 +60,37 @@
|
|
|
60
60
|
* run now SAYS so. The correspondence problem — getting handles into a handover
|
|
61
61
|
* — is untouched, and nothing here promotes the probe out of shadow.
|
|
62
62
|
*
|
|
63
|
+
* WHAT THAT RUN NOW REPORTS, and it is a smaller thing than the five rows.
|
|
64
|
+
* A reference with no handle carries a `page_signature`: per width, how many
|
|
65
|
+
* rendered leaves of each KIND there are — control, heading, media, text, empty
|
|
66
|
+
* — a multiset of `<child count>:<row|column|mixed>` over containers with two or
|
|
67
|
+
* more rendered children, and whether the page overflows horizontally. Counts
|
|
68
|
+
* and a flag; no aggregate, no coordinate, no size, no tag. It reports a removed
|
|
69
|
+
* element, a lost control, a container that stopped stacking and a page that
|
|
70
|
+
* started overflowing.
|
|
71
|
+
*
|
|
72
|
+
* AND WHAT IT STILL CANNOT. It establishes no correspondence between a
|
|
73
|
+
* reference element and a target one, so it can name no node, cannot be matched
|
|
74
|
+
* against a declared deviation, and is not a finding. Behaviour produces nothing
|
|
75
|
+
* from it: a removed hover colour and a dead click handler change no leaf, no
|
|
76
|
+
* arrangement and no overflow, and remain the business of the `interaction`
|
|
77
|
+
* dimension, which needs handles. A change in size or spacing produces nothing
|
|
78
|
+
* either, by the same construction that keeps it silent on a faithful port. And
|
|
79
|
+
* a second defect behind a removed child is masked, because a container that has
|
|
80
|
+
* lost a child drops out of the multiset entirely. The fixture README registers
|
|
81
|
+
* all of it, with the one place the reading disagrees with the table it was
|
|
82
|
+
* measured against.
|
|
83
|
+
*
|
|
84
|
+
* SO "IT REPORTS A REMOVED ELEMENT" IS TRUE OF A SINGLE CHANGE AND NOT IN
|
|
85
|
+
* GENERAL, and the difference is worth the sentence. These are COUNTS: a
|
|
86
|
+
* removal offset by an addition of the same kind at the same width nets to
|
|
87
|
+
* nothing, and so does a reparenting that leaves the arrangement multiset
|
|
88
|
+
* standing. Content removed from inside a heading or a control is invisible for
|
|
89
|
+
* the same reason the wrapper around one is — the reading does not look in
|
|
90
|
+
* there. Arrangement is decided over consecutive children in DOM order, so a
|
|
91
|
+
* flex or grid reorder that changes only visual order produces nothing, and the
|
|
92
|
+
* overflow flag is horizontal only.
|
|
93
|
+
*
|
|
63
94
|
* THE NOISE CONTROL. Computed-style comparison over every property fires on
|
|
64
95
|
* font fallbacks and token indirection nobody cares about, so the compared set
|
|
65
96
|
* is curated (`COMPARED_PROPERTIES`) to the properties a design token actually
|
|
@@ -146,10 +177,39 @@ export interface NodeObservation {
|
|
|
146
177
|
click_effect: string | null;
|
|
147
178
|
}
|
|
148
179
|
|
|
180
|
+
/**
|
|
181
|
+
* The kinds a leaf is counted as. Four are the roadmap's; `empty` is the
|
|
182
|
+
* residual and is named rather than folded into `text`, because "a wrapper that
|
|
183
|
+
* renders nothing" and "a paragraph" are different things to lose.
|
|
184
|
+
*/
|
|
185
|
+
export const LEAF_KINDS = ['control', 'heading', 'media', 'text', 'empty'] as const;
|
|
186
|
+
export type LeafKind = (typeof LEAF_KINDS)[number];
|
|
187
|
+
|
|
188
|
+
/** One width's reading. Counts and a flag — no coordinate, no size, no tag. */
|
|
189
|
+
export interface WidthSignature {
|
|
190
|
+
/** Every kind is present, including the zeroes: absent would read as 0 anyway. */
|
|
191
|
+
leaves: Record<LeafKind, number>;
|
|
192
|
+
/** A multiset: `<child count>:<row|column|mixed>` to how many containers carry it. */
|
|
193
|
+
arrangement: Record<string, number>;
|
|
194
|
+
overflow: boolean;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** Keyed by viewport width, as a string, because JSON keys are strings. */
|
|
198
|
+
export type PageSignatureReading = Record<string, WidthSignature>;
|
|
199
|
+
|
|
149
200
|
export interface Observation {
|
|
150
201
|
variant: string;
|
|
151
202
|
source: string;
|
|
152
203
|
nodes: NodeObservation[];
|
|
204
|
+
/**
|
|
205
|
+
* OPTIONAL, AND THAT IS THE CONTRACT RATHER THAN A CONVENIENCE. An
|
|
206
|
+
* observation captured before this field existed has no signature, and a
|
|
207
|
+
* reader must say `not_available` for it — never "no change", which is the
|
|
208
|
+
* same fabricated green the five dimensions already refuse. Making the field
|
|
209
|
+
* required would have forced every committed record to be re-captured on a
|
|
210
|
+
* host with a browser before anything could read them at all.
|
|
211
|
+
*/
|
|
212
|
+
signature?: PageSignatureReading;
|
|
153
213
|
}
|
|
154
214
|
|
|
155
215
|
export interface Declaration {
|
|
@@ -180,6 +240,61 @@ export interface DimensionRow {
|
|
|
180
240
|
reason?: string;
|
|
181
241
|
}
|
|
182
242
|
|
|
243
|
+
/** One leaf kind whose count moved between the two sides, at one width. */
|
|
244
|
+
export interface LeafChange {
|
|
245
|
+
kind: LeafKind;
|
|
246
|
+
reference: number;
|
|
247
|
+
target: number;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/** One arrangement key whose multiplicity moved. A key absent on a side is 0. */
|
|
251
|
+
export interface ArrangementChange {
|
|
252
|
+
key: string;
|
|
253
|
+
reference: number;
|
|
254
|
+
target: number;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export interface WidthReading {
|
|
258
|
+
width: string;
|
|
259
|
+
/** Changed kinds only. An empty array means every kind held. */
|
|
260
|
+
leaves: LeafChange[];
|
|
261
|
+
/** Changed keys only. An empty array means the multiset held. */
|
|
262
|
+
arrangement: ArrangementChange[];
|
|
263
|
+
/** A PAIR, never a change flag: both sides are stated at every width. */
|
|
264
|
+
overflow: { reference: boolean; target: boolean };
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* THE FIXED SENTENCE, and it is fixed because the reading is easy to over-read.
|
|
269
|
+
* A reader who takes a changed count for a located defect will go looking for
|
|
270
|
+
* the node it happened to, and there is no such node: this reading never put the
|
|
271
|
+
* two sides' elements into correspondence, which is the entire reason it can be
|
|
272
|
+
* taken on a handover with no handles at all.
|
|
273
|
+
*/
|
|
274
|
+
export const PAGE_SIGNATURE_SCOPE =
|
|
275
|
+
'This reading names kinds of leaf and of container, never nodes. It establishes no ' +
|
|
276
|
+
'correspondence between a reference element and a target one, so it cannot be matched ' +
|
|
277
|
+
'against a declared deviation and it is not a finding.';
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* The handle-free reading as it reaches the artefact.
|
|
281
|
+
*
|
|
282
|
+
* A FIELD, NEVER A SIXTH DIMENSION. The five dimension rows answer "was this
|
|
283
|
+
* node compared, and what diverged"; this answers neither, because it has no
|
|
284
|
+
* node. Giving it a row would make `findings` a count over two different kinds
|
|
285
|
+
* of statement and would break the invariant that no dimension is exercised on
|
|
286
|
+
* zero nodes — which is the one thing the roadmap this comes from was told to
|
|
287
|
+
* keep untouched.
|
|
288
|
+
*/
|
|
289
|
+
export interface PageSignatureField {
|
|
290
|
+
status: 'read' | 'not_available';
|
|
291
|
+
/** Present on `not_available` only, naming which side was missing it. */
|
|
292
|
+
reason?: string;
|
|
293
|
+
scope: typeof PAGE_SIGNATURE_SCOPE;
|
|
294
|
+
/** One entry per viewport width when read; empty when not available. */
|
|
295
|
+
widths: WidthReading[];
|
|
296
|
+
}
|
|
297
|
+
|
|
183
298
|
export interface SuppressedDeviation {
|
|
184
299
|
probe_id: string;
|
|
185
300
|
property: string;
|
|
@@ -213,6 +328,14 @@ export interface ProbeArtefact {
|
|
|
213
328
|
dimensions: DimensionRow[];
|
|
214
329
|
findings: Finding[];
|
|
215
330
|
declared_suppressed: SuppressedDeviation[];
|
|
331
|
+
/**
|
|
332
|
+
* PRESENT ONLY WHERE THE REFERENCE COLLECTED NO HANDLE. With handles there
|
|
333
|
+
* are five dimensions that can answer about located nodes, and a second,
|
|
334
|
+
* weaker reading beside them would be read as corroboration it is not:
|
|
335
|
+
* a kind-level count agreeing with a per-node comparison adds nothing and
|
|
336
|
+
* disagreeing with one says nothing about which is right.
|
|
337
|
+
*/
|
|
338
|
+
page_signature?: PageSignatureField;
|
|
216
339
|
}
|
|
217
340
|
|
|
218
341
|
// ---------------------------------------------------------------- pure core
|
|
@@ -273,6 +396,97 @@ const EMPTY_REFERENCE_REASON =
|
|
|
273
396
|
'compare against. The capture ran and collected zero nodes: this is a property of the ' +
|
|
274
397
|
'handover, not of this machine.';
|
|
275
398
|
|
|
399
|
+
/**
|
|
400
|
+
* The handle-free reading, taken from two captured signatures.
|
|
401
|
+
*
|
|
402
|
+
* ABSENT IS `not_available`, NEVER "NO CHANGE", and that is the same contract
|
|
403
|
+
* `findings: null` carries one level up. An observation captured before the
|
|
404
|
+
* capture learned to sweep widths has no signature at all; reporting it as
|
|
405
|
+
* unchanged would be a comparison that never happened, presented as a clean one.
|
|
406
|
+
* The check runs on BOTH sides, because a reader that only looked at the
|
|
407
|
+
* reference would say "no change" for a target captured by an older probe.
|
|
408
|
+
*/
|
|
409
|
+
/**
|
|
410
|
+
* Is one width's record complete enough to be read?
|
|
411
|
+
*
|
|
412
|
+
* VALIDATED AT THE BOUNDARY, BECAUSE THE INTERFACE DOES NOT REACH IT. An
|
|
413
|
+
* observation arrives through `JSON.parse` and an unchecked cast, so
|
|
414
|
+
* `WidthSignature` is a claim about the file rather than a guarantee. The first
|
|
415
|
+
* version read a missing leaf count as `a.leaves[k] ?? 0`, which turns a
|
|
416
|
+
* structurally incomplete record into a confident "this kind is at zero" and
|
|
417
|
+
* can report a change that is an artefact of the file being short. That is the
|
|
418
|
+
* fabricated-clean reading the rest of this module refuses, arriving through the
|
|
419
|
+
* one door nothing was watching.
|
|
420
|
+
*/
|
|
421
|
+
function widthIsComplete(row: unknown): row is WidthSignature {
|
|
422
|
+
if (!row || typeof row !== 'object') return false;
|
|
423
|
+
const r = row as Partial<WidthSignature>;
|
|
424
|
+
if (typeof r.overflow !== 'boolean') return false;
|
|
425
|
+
if (!r.leaves || typeof r.leaves !== 'object') return false;
|
|
426
|
+
if (!r.arrangement || typeof r.arrangement !== 'object') return false;
|
|
427
|
+
// A COUNT IS AN INTEGER. `Number.isFinite` admitted 3.7, which is not a
|
|
428
|
+
// number of leaves any capture can produce, so a hand-edited or
|
|
429
|
+
// half-written record carrying one would have been read as a reading.
|
|
430
|
+
const countable = (v: unknown): boolean => typeof v === 'number' && Number.isSafeInteger(v) && v >= 0;
|
|
431
|
+
if (!LEAF_KINDS.every((k) => countable((r.leaves as Record<string, unknown>)[k]))) return false;
|
|
432
|
+
return Object.values(r.arrangement as Record<string, unknown>).every(countable);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
export function readPageSignature(reference: Observation, target: Observation): PageSignatureField {
|
|
436
|
+
const missing: string[] = [];
|
|
437
|
+
if (!reference.signature) missing.push('the reference');
|
|
438
|
+
if (!target.signature) missing.push('the target');
|
|
439
|
+
const incomplete =
|
|
440
|
+
!missing.length &&
|
|
441
|
+
VIEWPORTS.some(
|
|
442
|
+
(w) => !widthIsComplete(reference.signature?.[String(w)]) || !widthIsComplete(target.signature?.[String(w)]),
|
|
443
|
+
);
|
|
444
|
+
if (missing.length || incomplete) {
|
|
445
|
+
return {
|
|
446
|
+
status: 'not_available',
|
|
447
|
+
scope: PAGE_SIGNATURE_SCOPE,
|
|
448
|
+
reason: missing.length
|
|
449
|
+
? `${missing.join(' and ')} carries no page signature, so there was nothing to read. ` +
|
|
450
|
+
'An observation captured before the probe swept widths has none; this is not a ' +
|
|
451
|
+
'statement that the two pages agree.'
|
|
452
|
+
: 'a page signature is present but is not complete at every width the probe sweeps — a ' +
|
|
453
|
+
'width is absent, or a leaf count or overflow flag is missing or not a count. A short ' +
|
|
454
|
+
'record read as zeroes would report a change the file never recorded, so the whole ' +
|
|
455
|
+
'reading is withheld. Re-capture rather than read it.',
|
|
456
|
+
widths: [],
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
const widths = VIEWPORTS.map((w) => {
|
|
461
|
+
const key = String(w);
|
|
462
|
+
const a = reference.signature![key]!;
|
|
463
|
+
const b = target.signature![key]!;
|
|
464
|
+
// No `?? 0` here, and the asymmetry with the arrangement block below is
|
|
465
|
+
// the whole point. Every leaf kind is present in a record the validator
|
|
466
|
+
// accepted, so a default would only ever paper over a record it rejected.
|
|
467
|
+
const leaves: LeafChange[] = LEAF_KINDS.filter((k) => a.leaves[k] !== b.leaves[k]).map((k) => ({
|
|
468
|
+
kind: k,
|
|
469
|
+
reference: a.leaves[k],
|
|
470
|
+
target: b.leaves[k],
|
|
471
|
+
}));
|
|
472
|
+
// The union of both sides' keys, so a key that exists only in the target
|
|
473
|
+
// is reported as 0 -> n rather than silently skipped. A multiset read
|
|
474
|
+
// from one side alone is the add-half blindness the structure dimension
|
|
475
|
+
// already had to be taught out of.
|
|
476
|
+
//
|
|
477
|
+
// `?? 0` IS CORRECT HERE and wrong one block up. The multiset is sparse
|
|
478
|
+
// by construction: a key absent on a side means no container on that side
|
|
479
|
+
// had that shape, which is a measured zero, not a short record.
|
|
480
|
+
const arrangementKeys = [...new Set([...Object.keys(a.arrangement), ...Object.keys(b.arrangement)])].sort();
|
|
481
|
+
const arrangement: ArrangementChange[] = arrangementKeys
|
|
482
|
+
.filter((k) => (a.arrangement[k] ?? 0) !== (b.arrangement[k] ?? 0))
|
|
483
|
+
.map((k) => ({ key: k, reference: a.arrangement[k] ?? 0, target: b.arrangement[k] ?? 0 }));
|
|
484
|
+
return { width: key, leaves, arrangement, overflow: { reference: a.overflow, target: b.overflow } };
|
|
485
|
+
});
|
|
486
|
+
|
|
487
|
+
return { status: 'read', scope: PAGE_SIGNATURE_SCOPE, widths };
|
|
488
|
+
}
|
|
489
|
+
|
|
276
490
|
export function evaluate(
|
|
277
491
|
reference: Observation,
|
|
278
492
|
target: Observation,
|
|
@@ -309,6 +523,11 @@ export function evaluate(
|
|
|
309
523
|
})),
|
|
310
524
|
findings: [],
|
|
311
525
|
declared_suppressed: [],
|
|
526
|
+
// The one branch that carries it. Everything above this line is the
|
|
527
|
+
// honest statement that nothing was compared; this is the one thing
|
|
528
|
+
// that could still be said about the pages, and saying it does not
|
|
529
|
+
// move a single row above out of `not_applicable`.
|
|
530
|
+
page_signature: readPageSignature(reference, target),
|
|
312
531
|
};
|
|
313
532
|
}
|
|
314
533
|
|
|
@@ -591,6 +810,173 @@ const READ_STYLES = (el: Element, props: readonly string[]): Record<string, stri
|
|
|
591
810
|
return out;
|
|
592
811
|
};
|
|
593
812
|
|
|
813
|
+
/**
|
|
814
|
+
* The handle-free reading, taken in the page. Serialized into the browser by
|
|
815
|
+
* `page.evaluate`, so it closes over nothing and takes its vocabulary as an
|
|
816
|
+
* argument.
|
|
817
|
+
*
|
|
818
|
+
* WHAT IT DOES NOT LOOK INSIDE, which is the whole design rather than an
|
|
819
|
+
* optimisation. A control, a heading and a media element are counted as one
|
|
820
|
+
* leaf each and never descended into. The literal reading — "an element with no
|
|
821
|
+
* rendered element child" — would make `<button>Save</button>` a control and
|
|
822
|
+
* `<button><span>Save</span></button>` a text leaf inside a container, so
|
|
823
|
+
* wrapping a label in a span, which is the most ordinary thing a component
|
|
824
|
+
* framework does on a faithful port, would read as a lost control. That is the
|
|
825
|
+
* exact false-positive class the census-by-tag prototype was refuted for, and
|
|
826
|
+
* refusing to look inside a semantic atom excludes it by construction instead of
|
|
827
|
+
* by a tolerance. An `<svg>` is the same case from the other side: descending
|
|
828
|
+
* into its paths would make the count a function of how complex the icon is.
|
|
829
|
+
*
|
|
830
|
+
* THE COST, stated rather than discovered later: an `<a>` that wraps a whole
|
|
831
|
+
* card is one control leaf, and everything inside it is invisible to this
|
|
832
|
+
* reading. That is a loss of SENSITIVITY, never a false report, and this
|
|
833
|
+
* reading is built to prefer silence over noise — it is registered as a limit
|
|
834
|
+
* in the fixture README beside the other two.
|
|
835
|
+
*
|
|
836
|
+
* Row, column or mixed is decided from the rendered boxes of consecutive
|
|
837
|
+
* children and then thrown away: nothing a coordinate could be reconstructed
|
|
838
|
+
* from reaches the record.
|
|
839
|
+
*
|
|
840
|
+
* FLAT ON PURPOSE — no inner helper and no recursion, and that is a constraint
|
|
841
|
+
* of the carrier rather than a style. This file is run through a transform that
|
|
842
|
+
* keeps function names, which wraps every named inner function in a `__name`
|
|
843
|
+
* helper that exists in the module and not in the page. `page.evaluate`
|
|
844
|
+
* serializes the function and nothing else, so the first version of this
|
|
845
|
+
* reading threw `ReferenceError: __name is not defined` in the browser on its
|
|
846
|
+
* first run. An explicit stack has no inner function to be named.
|
|
847
|
+
*/
|
|
848
|
+
const READ_SIGNATURE = (kinds: readonly string[]): {
|
|
849
|
+
leaves: Record<string, number>;
|
|
850
|
+
arrangement: Record<string, number>;
|
|
851
|
+
overflow: boolean;
|
|
852
|
+
} => {
|
|
853
|
+
// CURATED, NOT EXHAUSTIVE — the same stance `COMPARED_PROPERTIES` takes one
|
|
854
|
+
// screen up, and stated because the prose around this reads like a semantic
|
|
855
|
+
// classification rather than a selector list. An element carrying a role
|
|
856
|
+
// outside this set is counted by what it contains rather than as a control.
|
|
857
|
+
const CONTROL =
|
|
858
|
+
'a[href],button,input,select,textarea,summary,[role="button"],[role="link"],' +
|
|
859
|
+
'[role="checkbox"],[role="switch"],[role="tab"],[role="menuitem"],[role="radio"],' +
|
|
860
|
+
'[role="slider"],[role="spinbutton"],[role="combobox"],[role="option"],[contenteditable]';
|
|
861
|
+
const HEADING = 'h1,h2,h3,h4,h5,h6,[role="heading"]';
|
|
862
|
+
const MEDIA = 'img,svg,canvas,video,audio,picture,iframe,object,embed,[role="img"]';
|
|
863
|
+
|
|
864
|
+
const leaves: Record<string, number> = {};
|
|
865
|
+
for (const k of kinds) leaves[k] = 0;
|
|
866
|
+
const arrangement: Record<string, number> = {};
|
|
867
|
+
|
|
868
|
+
const stack: Element[] = document.body ? [document.body] : [];
|
|
869
|
+
while (stack.length) {
|
|
870
|
+
const el = stack.pop() as Element;
|
|
871
|
+
|
|
872
|
+
let kind = '';
|
|
873
|
+
if (el.matches(CONTROL)) kind = 'control';
|
|
874
|
+
else if (el.matches(HEADING)) kind = 'heading';
|
|
875
|
+
else if (el.matches(MEDIA)) kind = 'media';
|
|
876
|
+
if (kind) {
|
|
877
|
+
leaves[kind] = (leaves[kind] ?? 0) + 1;
|
|
878
|
+
continue;
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
// A BOXLESS ELEMENT IS TRANSPARENT, NOT ABSENT — the two are opposites
|
|
882
|
+
// and the first version of this conflated them. "A zero box is not
|
|
883
|
+
// rendered" is true of the ELEMENT and says nothing about its children:
|
|
884
|
+
// `display: contents` generates no box at all while rendering its
|
|
885
|
+
// subtree normally, and a zero-height wrapper with overflowing content
|
|
886
|
+
// is the same case from the other side. Dropping such an element
|
|
887
|
+
// together with its subtree made every control inside a
|
|
888
|
+
// `display: contents` wrapper invisible — measured at 0 where the page
|
|
889
|
+
// showed 2 — which is the census reporting a loss that did not happen.
|
|
890
|
+
// So a boxless, non-hidden element is neither a leaf nor a container:
|
|
891
|
+
// its children are lifted into its parent's list, in document order, and
|
|
892
|
+
// it contributes nothing of its own. An element that is boxless AND has
|
|
893
|
+
// no children still contributes nothing, exactly as before.
|
|
894
|
+
const children: Element[] = [];
|
|
895
|
+
let liftedText = '';
|
|
896
|
+
const pending: Element[] = Array.from(el.children);
|
|
897
|
+
while (pending.length) {
|
|
898
|
+
const c = pending.shift() as Element;
|
|
899
|
+
const cs = getComputedStyle(c);
|
|
900
|
+
if (cs.display === 'none' || cs.visibility === 'hidden') continue;
|
|
901
|
+
const r = c.getBoundingClientRect();
|
|
902
|
+
if (r.width > 0 && r.height > 0) {
|
|
903
|
+
children.push(c);
|
|
904
|
+
continue;
|
|
905
|
+
}
|
|
906
|
+
// A TRANSPARENT ELEMENT STILL RENDERS ITS OWN DIRECT TEXT, and the
|
|
907
|
+
// first version of this lift did not see it. `children` is elements
|
|
908
|
+
// only, so `<div style="display: contents">Visible text</div>`
|
|
909
|
+
// beside a rendered sibling lifted nothing, its parent stayed a
|
|
910
|
+
// container rather than becoming a text leaf, and the text was
|
|
911
|
+
// counted nowhere. Measured: `text: 0` on a page that renders it.
|
|
912
|
+
//
|
|
913
|
+
// NARROWED TO `display: contents` ON PURPOSE. That is the one case
|
|
914
|
+
// where the element provably generates no box AND its content is
|
|
915
|
+
// laid out by the parent, so the text certainly renders. Any other
|
|
916
|
+
// zero-box element is ambiguous — a `height: 0; overflow: hidden`
|
|
917
|
+
// wrapper CLIPS its text — and counting there would invent a leaf,
|
|
918
|
+
// which is the one direction this reading must not fail in. Such an
|
|
919
|
+
// element keeps lifting its element children and loses its own text:
|
|
920
|
+
// sensitivity, not a false report.
|
|
921
|
+
if (cs.display === 'contents') {
|
|
922
|
+
for (const n of Array.from(c.childNodes)) {
|
|
923
|
+
if (n.nodeType === 3) liftedText += n.nodeValue ?? '';
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
pending.unshift(...Array.from(c.children));
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
if (children.length === 0) {
|
|
930
|
+
// RENDERED TEXT, NOT TEXT CONTENT. `textContent` includes the text
|
|
931
|
+
// of `display: none` and `visibility: hidden` descendants, so a
|
|
932
|
+
// wrapper whose only content is hidden counted as a text leaf — the
|
|
933
|
+
// census inventing a leaf the page does not show, which is the exact
|
|
934
|
+
// mirror of the defect above. `innerText` is the rendered reading and
|
|
935
|
+
// is the right primitive; `textContent` stays as the fallback for an
|
|
936
|
+
// element that has no `innerText`, such as a non-HTML one.
|
|
937
|
+
//
|
|
938
|
+
// The lifted text is deliberately NOT added on top: `innerText` is
|
|
939
|
+
// this element's whole RENDERED text and already includes whatever a
|
|
940
|
+
// transparent child contributed. Crediting it in both places counted
|
|
941
|
+
// one run twice — measured `text: 2` for a single
|
|
942
|
+
// `<p><span style="display: contents">hello</span></p>`.
|
|
943
|
+
const asHtml = el as Partial<HTMLElement>;
|
|
944
|
+
const shown = typeof asHtml.innerText === 'string' ? asHtml.innerText : (el.textContent ?? '');
|
|
945
|
+
kind = shown.trim().length ? 'text' : 'empty';
|
|
946
|
+
leaves[kind] = (leaves[kind] ?? 0) + 1;
|
|
947
|
+
continue;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
// A CONTAINER IS NOT CLASSIFIED BY ITS TEXT, which is exactly where the
|
|
951
|
+
// lifted text would otherwise be lost: this element has a rendered child,
|
|
952
|
+
// so it never reaches the branch above and its `innerText` is never read.
|
|
953
|
+
// The text a transparent child contributed is credited here, once, and
|
|
954
|
+
// only here. Direct text of a container that sits behind no transparent
|
|
955
|
+
// child stays uncounted — a pre-existing property of counting leaves,
|
|
956
|
+
// registered as a limit rather than quietly changed under a defect fix.
|
|
957
|
+
if (liftedText.trim().length) leaves['text'] = (leaves['text'] ?? 0) + 1;
|
|
958
|
+
|
|
959
|
+
if (children.length > 1) {
|
|
960
|
+
let shape = '';
|
|
961
|
+
for (let i = 1; i < children.length; i += 1) {
|
|
962
|
+
const a = (children[i - 1] as Element).getBoundingClientRect();
|
|
963
|
+
const b = (children[i] as Element).getBoundingClientRect();
|
|
964
|
+
const sharesRows = Math.min(a.bottom, b.bottom) - Math.max(a.top, b.top) > 0;
|
|
965
|
+
const sharesColumns = Math.min(a.right, b.right) - Math.max(a.left, b.left) > 0;
|
|
966
|
+
shape += !sharesRows ? 'c' : sharesColumns ? 'm' : 'r';
|
|
967
|
+
}
|
|
968
|
+
const axis = /^r+$/.test(shape) ? 'row' : /^c+$/.test(shape) ? 'column' : 'mixed';
|
|
969
|
+
const key = `${children.length}:${axis}`;
|
|
970
|
+
arrangement[key] = (arrangement[key] ?? 0) + 1;
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
for (const c of children) stack.push(c);
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
const doc = document.documentElement;
|
|
977
|
+
return { leaves, arrangement, overflow: doc.scrollWidth > doc.clientWidth };
|
|
978
|
+
};
|
|
979
|
+
|
|
594
980
|
export async function captureVariant(indexHtml: string): Promise<Observation> {
|
|
595
981
|
const pw = loadPlaywright();
|
|
596
982
|
if (!pw) throw new Error('captureVariant: @playwright/test is not resolvable on this host');
|
|
@@ -598,6 +984,7 @@ export async function captureVariant(indexHtml: string): Promise<Observation> {
|
|
|
598
984
|
const url = pathToFileURL(indexHtml).href;
|
|
599
985
|
const props = [...COMPARED_PROPERTIES];
|
|
600
986
|
const nodes: NodeObservation[] = [];
|
|
987
|
+
const signature: PageSignatureReading = {};
|
|
601
988
|
|
|
602
989
|
try {
|
|
603
990
|
const page = await browser.newPage({ viewport: { width: VIEWPORTS[0], height: 900 } });
|
|
@@ -606,6 +993,23 @@ export async function captureVariant(indexHtml: string): Promise<Observation> {
|
|
|
606
993
|
els.map((e) => e.getAttribute('data-probe-id') ?? ''),
|
|
607
994
|
);
|
|
608
995
|
|
|
996
|
+
// OUTSIDE THE PER-HANDLE LOOP, which is the one structural thing this
|
|
997
|
+
// change does. Every width sweep this file had lived inside that loop, so
|
|
998
|
+
// a page with no handles was never resized at all and the capture of the
|
|
999
|
+
// commonest input in the tree — a handover carrying no `data-probe-id` —
|
|
1000
|
+
// consisted of opening the page and closing it. Four resizes and one DOM
|
|
1001
|
+
// walk each now happen whether or not a handle is ever found.
|
|
1002
|
+
//
|
|
1003
|
+
// Before the loop rather than after it, so the loop starts from the same
|
|
1004
|
+
// state it always did; the viewport is put back explicitly rather than
|
|
1005
|
+
// left to the loop's own first `setViewportSize`, because relying on that
|
|
1006
|
+
// would couple two things that have no reason to stay coupled.
|
|
1007
|
+
for (const w of VIEWPORTS) {
|
|
1008
|
+
await page.setViewportSize({ width: w, height: 900 });
|
|
1009
|
+
signature[String(w)] = (await page.evaluate(READ_SIGNATURE, [...LEAF_KINDS])) as WidthSignature;
|
|
1010
|
+
}
|
|
1011
|
+
await page.setViewportSize({ width: VIEWPORTS[0], height: 900 });
|
|
1012
|
+
|
|
609
1013
|
for (const id of ids.filter(Boolean).sort()) {
|
|
610
1014
|
const sel = `[data-probe-id="${id}"]`;
|
|
611
1015
|
await page.setViewportSize({ width: VIEWPORTS[0], height: 900 });
|
|
@@ -664,7 +1068,7 @@ export async function captureVariant(indexHtml: string): Promise<Observation> {
|
|
|
664
1068
|
await browser.close();
|
|
665
1069
|
}
|
|
666
1070
|
|
|
667
|
-
return { variant: path.basename(path.dirname(indexHtml)), source: indexHtml, nodes };
|
|
1071
|
+
return { variant: path.basename(path.dirname(indexHtml)), source: indexHtml, nodes, signature };
|
|
668
1072
|
}
|
|
669
1073
|
|
|
670
1074
|
/**
|