@event4u/agent-config 14.9.0 → 14.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +384 -0
- package/README.md +1 -1
- package/dist/agent-src/commands/design.md +88 -0
- package/dist/agent-src/commands/project/analyze.md +47 -0
- package/dist/agent-src/commands/review/changes.md +67 -6
- package/dist/agent-src/commands/roadmap/create.md +49 -0
- package/dist/agent-src/commands/roadmap/next.md +27 -11
- package/dist/agent-src/commands/roadmap/process-full.md +14 -0
- package/dist/agent-src/commands/video/from-script.md +60 -3
- package/dist/agent-src/commands/video/stitch.md +14 -0
- package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +154 -2
- package/dist/agent-src/rules/active-remediation.md +3 -3
- package/dist/agent-src/rules/code-provenance.md +2 -2
- package/dist/agent-src/rules/context-hygiene.md +13 -33
- package/dist/agent-src/rules/council-availability.md +2 -2
- package/dist/agent-src/rules/decision-revisit-gate.md +3 -1
- package/dist/agent-src/rules/design-fidelity.md +18 -0
- package/dist/agent-src/rules/design-review-after-ui-write.md +2 -2
- package/dist/agent-src/rules/evaluator-independence.md +56 -44
- package/dist/agent-src/rules/fix-what-you-see.md +9 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
- package/dist/agent-src/rules/minimal-safe-diff.md +14 -20
- package/dist/agent-src/rules/missing-skill-recovery.md +13 -1
- package/dist/agent-src/rules/playbook-precedence.md +105 -0
- package/dist/agent-src/rules/recurring-criticism.md +3 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +14 -13
- package/dist/agent-src/rules/scale-discipline.md +24 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +2 -2
- package/dist/agent-src/rules/settings-ask-protocol.md +2 -2
- package/dist/agent-src/rules/ui-audit-gate.md +27 -15
- package/dist/agent-src/rules/untrusted-input-defense.md +2 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +19 -0
- package/dist/agent-src/skills/adr-create/SKILL.md +7 -0
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +33 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +17 -3
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +31 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +19 -0
- package/dist/agent-src/skills/alerting-doctrine/SKILL.md +225 -0
- package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +17 -0
- package/dist/agent-src/skills/async-python-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/authz-review/SKILL.md +0 -1
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +32 -0
- package/dist/agent-src/skills/brand/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-audit/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-identity/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-strategy/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -0
- package/dist/agent-src/skills/check-refs/SKILL.md +3 -0
- package/dist/agent-src/skills/code-refactoring/SKILL.md +1 -1
- package/dist/agent-src/skills/code-review/SKILL.md +11 -0
- package/dist/agent-src/skills/command-routing/SKILL.md +6 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +4 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +4 -1
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +10 -0
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -0
- package/dist/agent-src/skills/design-intelligence/SKILL.md +3 -0
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +36 -35
- package/dist/agent-src/skills/design-intelligence/data/stacks/threejs.csv +1 -0
- package/dist/agent-src/skills/design-review/SKILL.md +80 -2
- package/dist/agent-src/skills/design-review/references/verification-automation.md +41 -0
- package/dist/agent-src/skills/design-system-capture/SKILL.md +35 -40
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +50 -0
- package/dist/agent-src/skills/design-tokens/SKILL.md +3 -0
- package/dist/agent-src/skills/design-variations/SKILL.md +3 -0
- package/dist/agent-src/skills/developer-like-execution/SKILL.md +3 -0
- package/dist/agent-src/skills/discovery-interview/SKILL.md +1 -1
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
- package/dist/agent-src/skills/docx-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/editorial-calendar/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +3 -0
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +20 -3
- package/dist/agent-src/skills/fe-design/SKILL.md +74 -41
- package/dist/agent-src/skills/fe-design/evals/triggers.json +65 -53
- package/dist/agent-src/skills/fe-design/references/craft-floor.md +52 -0
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +36 -0
- package/dist/agent-src/skills/file-editor/SKILL.md +5 -0
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/SKILL.md +3 -0
- package/dist/agent-src/skills/github-ci/SKILL.md +1 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +3 -0
- package/dist/agent-src/skills/iconography/SKILL.md +3 -0
- package/dist/agent-src/skills/image-editing/SKILL.md +3 -0
- package/dist/agent-src/skills/image-generation/SKILL.md +3 -0
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +3 -0
- package/dist/agent-src/skills/incident-commander/SKILL.md +10 -0
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +173 -0
- package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +17 -0
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +270 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-injection-defense/SKILL.md +1 -1
- package/dist/agent-src/skills/laravel-migration/SKILL.md +3 -0
- package/dist/agent-src/skills/laravel-validation/SKILL.md +1 -1
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +3 -0
- package/dist/agent-src/skills/legal-intake-triage/SKILL.md +1 -1
- package/dist/agent-src/skills/legal-practice-profile/SKILL.md +1 -1
- package/dist/agent-src/skills/lint-skills/SKILL.md +3 -0
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +3 -0
- package/dist/agent-src/skills/logging-monitoring/SKILL.md +234 -51
- package/dist/agent-src/skills/logo-generation/SKILL.md +3 -0
- package/dist/agent-src/skills/md-language-check/SKILL.md +3 -0
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +1 -1
- package/dist/agent-src/skills/migration-architect/SKILL.md +1 -1
- package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +1 -1
- package/dist/agent-src/skills/module-management/SKILL.md +1 -1
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +149 -0
- package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +17 -0
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +7 -1
- package/dist/agent-src/skills/multi-tenancy/SKILL.md +4 -0
- package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
- package/dist/agent-src/skills/operational-readiness/SKILL.md +184 -0
- package/dist/agent-src/skills/operational-readiness/evals/triggers.json +17 -0
- package/dist/agent-src/skills/override-management/SKILL.md +3 -0
- package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
- package/dist/agent-src/skills/persona-improvement/SKILL.md +3 -0
- package/dist/agent-src/skills/pest-testing/SKILL.md +3 -0
- package/dist/agent-src/skills/playbook-authoring/SKILL.md +162 -0
- package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -0
- package/dist/agent-src/skills/privacy-review/SKILL.md +3 -0
- package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -0
- package/dist/agent-src/skills/prompt-optimizer/SKILL.md +1 -1
- package/dist/agent-src/skills/quality-tools/SKILL.md +5 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +52 -21
- package/dist/agent-src/skills/readme-reviewer/SKILL.md +3 -0
- package/dist/agent-src/skills/readme-writing/SKILL.md +3 -0
- package/dist/agent-src/skills/readme-writing-package/SKILL.md +3 -0
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/refine-prompt/SKILL.md +3 -0
- package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -0
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +23 -41
- package/dist/agent-src/skills/roadmap-writing/references/follow-up-roadmap-shape.md +47 -0
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +22 -6
- package/dist/agent-src/skills/runway-cognition/SKILL.md +3 -0
- package/dist/agent-src/skills/scene-expander/SKILL.md +1 -1
- package/dist/agent-src/skills/scene-expander/scene-blueprint.schema.yaml +26 -0
- package/dist/agent-src/skills/secrets-management/SKILL.md +5 -1
- package/dist/agent-src/skills/server-hardening/SKILL.md +159 -0
- package/dist/agent-src/skills/server-hardening/evals/triggers.json +17 -0
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -0
- package/dist/agent-src/skills/skill-management/SKILL.md +3 -0
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +3 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +6 -0
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +3 -0
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +194 -0
- package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +17 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.ts +134 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +25 -0
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +12 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +1 -1
- package/dist/agent-src/skills/terraform/SKILL.md +3 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +0 -3
- package/dist/agent-src/skills/token-optimizer/SKILL.md +3 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +3 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +9 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -0
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -1
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -0
- package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +3 -0
- package/dist/agent-src/skills/wireframe/references/story-beat-ledger.schema.json +115 -0
- package/dist/agent-src/skills/workspace-link/SKILL.md +131 -0
- package/dist/agent-src/skills/workspace-link/evals/triggers.json +17 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/playbook.md +75 -0
- package/dist/agent-src/templates/roadmaps.md +37 -0
- package/dist/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
- package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
- package/dist/cli/commands/uiAudit.js +221 -0
- package/dist/cli/commands/uiAudit.js.map +1 -0
- package/dist/cli/commands/uiRender.js +206 -0
- package/dist/cli/commands/uiRender.js.map +1 -0
- package/dist/cli/main.js +22 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/mcp/content.js +64 -1
- package/dist/cli/mcp/content.js.map +1 -1
- package/dist/cli/mcp/dispatch.js +175 -10
- package/dist/cli/mcp/dispatch.js.map +1 -1
- package/dist/cli/registry.js +3 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/{chunk-H4VIVD4C.js → chunk-236PNQZK.js} +413 -391
- package/dist/cli-delegate/{chunk-G23AT6GD.js → chunk-DMSZHXZS.js} +57 -1
- package/dist/cli-delegate/{chunk-77GR3VD4.js → chunk-FF7WAFMR.js} +58 -3
- package/dist/cli-delegate/{chunk-PLSG6UL5.js → chunk-K4FFODTS.js} +341 -204
- package/dist/cli-delegate/{chunk-YM4GZDJG.js → chunk-L43NCYPB.js} +5 -0
- package/dist/cli-delegate/{chunk-B2ERU2VA.js → chunk-WOKWX5PL.js} +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +8 -6
- package/dist/cli-delegate/cmd_conformance.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +1 -1
- package/dist/cli-delegate/cmd_preflight.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_session_recycle.js +70 -9
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- package/dist/cli-delegate/cmd_validate.js +4 -4
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +380 -145
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +18 -8
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -6
- package/dist/hooks/dispatch.js +2337 -1436
- package/dist/install/install.mjs +795 -708
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1685 -1250
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/lean_projection_mode.js +40 -0
- package/dist/scripts/_lib/lean_projection_mode.js.map +1 -0
- package/dist/scripts/_lib/scoped_projection.js +84 -0
- package/dist/scripts/_lib/scoped_projection.js.map +1 -1
- package/dist/scripts/_lib/ui_surface.js +89 -0
- package/dist/scripts/_lib/ui_surface.js.map +1 -0
- package/dist/scripts/condense.js +6 -10
- package/dist/scripts/condense.js.map +1 -1
- package/dist/scripts/project_thin_rules.js +40 -2
- package/dist/scripts/project_thin_rules.js.map +1 -1
- package/dist/server/schemas/settings.js +3 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/shared/skillRanking.js +159 -0
- package/dist/shared/skillRanking.js.map +1 -0
- package/docs/contracts/provider-lifecycle.md +47 -18
- package/docs/contracts/settings-classes.md +14 -4
- package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +49 -0
- package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
- package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +45 -1
- package/docs/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
- package/docs/guidelines/design-antipatterns.md +4 -2
- package/docs/guidelines/design-asset-discipline.md +38 -0
- package/docs/guidelines/design-fidelity-mechanics.md +45 -29
- package/docs/guidelines/design-handover-extraction.md +35 -5
- package/docs/guidelines/design-modes.md +41 -1
- package/docs/guidelines/monorepo-antipatterns.md +141 -0
- package/llms.txt +50 -39
- package/package.json +1 -1
- package/src/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
- package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
- package/src/config/agent-settings.template.yml +28 -0
- package/src/config/assurance-capability-registry.json +223 -0
- package/src/config/assurance-threshold-budget.json +65 -0
- package/src/config/ci-local-parity.yml +14 -0
- package/src/config/discovery/unassigned-artefacts.yml +2 -0
- package/src/config/dispatch-economy-metrics.json +4 -2
- package/src/config/evaluator-budgets.json +14 -14
- package/src/config/gate-coverage.yml +227 -8
- package/src/config/gate-violation-baselines.json +76 -72
- package/src/config/hook-latency-budget.json +1 -0
- package/src/config/hook-token-budget.json +137 -125
- package/src/config/pack-size-budget.json +4 -2
- package/src/config/preamble-payload-budget.json +71 -67
- package/src/config/quorum-attendance-budget.json +12 -4
- package/src/config/rule-activation-census.json +7 -3
- package/src/config/rule-enforcement-baseline.json +0 -1
- package/src/config/rule-stub-ceilings.json +112 -91
- package/src/scripts/_cli/cmd_doctor.ts +15 -16
- package/src/scripts/_cli/doctor_install_mode.ts +49 -0
- package/src/scripts/_cli/doctor_overrides.ts +154 -0
- package/src/scripts/_dispatch.bash +17 -0
- package/src/scripts/_lib/as_of.ts +412 -0
- package/src/scripts/_lib/exec_evidence.ts +7 -0
- package/src/scripts/_lib/hook_settings.ts +33 -0
- package/src/scripts/_lib/host_listing_model.ts +192 -0
- package/src/scripts/_lib/lean_projection_mode.ts +44 -0
- package/src/scripts/_lib/mcp_bridge.ts +199 -0
- package/src/scripts/_lib/review_independence.ts +62 -10
- package/src/scripts/_lib/rule_injection.ts +239 -0
- package/src/scripts/_lib/run_checkpoint.ts +54 -1
- package/src/scripts/_lib/scoped_projection.ts +96 -0
- package/src/scripts/_lib/session_register.ts +44 -2
- package/src/scripts/_lib/skill_catalogue.ts +38 -2
- package/src/scripts/_lib/transcript_reads.ts +207 -0
- package/src/scripts/_lib/ui_authority.test.ts +251 -0
- package/src/scripts/_lib/ui_authority.ts +343 -0
- package/src/scripts/ai-video/adapters/fal.sh +8 -3
- package/src/scripts/ai-video/adapters/gemini-veo.sh +10 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +10 -2
- package/src/scripts/ai-video/adapters/kling.sh +10 -0
- package/src/scripts/ai-video/adapters/sora.sh +10 -0
- package/src/scripts/ai-video/lib/calibrate-cost.sh +145 -0
- package/src/scripts/ai-video/lib/model-capabilities/README.md +53 -7
- package/src/scripts/ai-video/lib/model-capabilities/comfyui.json +15 -3
- package/src/scripts/ai-video/lib/model-capabilities/fal.json +36 -6
- package/src/scripts/ai-video/lib/model-capabilities/gemini-veo.json +23 -0
- package/src/scripts/ai-video/lib/model-capabilities/higgsfield.json +23 -0
- package/src/scripts/ai-video/lib/model-capabilities/kling.json +23 -0
- package/src/scripts/ai-video/lib/model-capabilities/musetalk.json +8 -2
- package/src/scripts/ai-video/lib/model-capabilities/replicate.json +36 -6
- package/src/scripts/ai-video/lib/model-capabilities/sora.json +45 -0
- package/src/scripts/ai-video/lib/model-capabilities/syncso.json +8 -2
- package/src/scripts/ai-video/lib/parse-blueprint.sh +52 -5
- package/src/scripts/ai-video/lib/resume-scan.sh +92 -3
- package/src/scripts/ai-video/lib/seam-plan.sh +212 -0
- package/src/scripts/ai-video/smoke-trace.sh +450 -2
- package/src/scripts/ai-video/stitch.sh +191 -10
- package/src/scripts/ai-video/test-pipeline.sh +84 -6
- package/src/scripts/ai_council/cli_agency_bounds.ts +139 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +347 -0
- package/src/scripts/ai_council/clients.ts +3 -2
- package/src/scripts/ai_council/consensus.ts +63 -6
- package/src/scripts/ai_council/events_log.ts +46 -1
- package/src/scripts/ai_council/orchestrator.ts +103 -108
- package/src/scripts/ai_council/orchestrator_results.ts +166 -0
- package/src/scripts/ai_council/prompts.ts +12 -5
- package/src/scripts/ai_council/quorum.ts +82 -1
- package/src/scripts/ai_council/quorum_wiring.ts +82 -5
- package/src/scripts/ai_council/seating.ts +211 -0
- package/src/scripts/ai_council/stance_tally.ts +22 -0
- package/src/scripts/bench_hook_latency.ts +62 -0
- package/src/scripts/build_proof.ts +12 -1
- package/src/scripts/capture_skill_catalogue.ts +21 -0
- package/src/scripts/check_always_budget.ts +2 -1
- package/src/scripts/check_augmentignore.ts +2 -1
- package/src/scripts/check_beta_review_markers.ts +2 -1
- package/src/scripts/check_composite_arming.ts +364 -0
- package/src/scripts/check_corpus_staleness.ts +2 -1
- package/src/scripts/check_council_pin_staleness.ts +3 -1
- package/src/scripts/check_enforcement_coverage.ts +116 -3
- package/src/scripts/check_enforcement_denominator.ts +365 -0
- package/src/scripts/check_gate_coverage.ts +2 -1
- package/src/scripts/check_hook_bundle_freshness.ts +13 -1
- package/src/scripts/check_knowledge_cards.ts +2 -1
- package/src/scripts/check_knowledge_pages.ts +3 -2
- package/src/scripts/check_memory.ts +2 -1
- package/src/scripts/check_no_automerge_key.ts +287 -0
- package/src/scripts/check_pack_conformance_fixture.ts +565 -0
- package/src/scripts/check_pack_passport_reconciliation.ts +274 -0
- package/src/scripts/check_proposal.ts +2 -1
- package/src/scripts/check_reach_staleness.ts +2 -1
- package/src/scripts/check_release_adjacent_health.ts +2 -1
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_review_schema.ts +34 -1
- package/src/scripts/check_roadmap_trackable.ts +48 -3
- package/src/scripts/check_source_size_budget.ts +2 -1
- package/src/scripts/check_standing_payload_delta.ts +505 -0
- package/src/scripts/check_trigger_evals.ts +2 -1
- package/src/scripts/classify_change_risk.ts +281 -0
- package/src/scripts/compute_skill_tiers.ts +186 -0
- package/src/scripts/condense.ts +8 -13
- package/src/scripts/council_attendance_metrics.ts +183 -0
- package/src/scripts/council_cli.ts +10 -8
- package/src/scripts/council_parse_rate.ts +116 -0
- package/src/scripts/derive_playbooks.ts +406 -0
- package/src/scripts/design_slop_rules.test.ts +7 -0
- package/src/scripts/design_slop_rules.ts +56 -2
- package/src/scripts/dispatch_r2_reviewer.ts +16 -0
- package/src/scripts/frontend_corpus_hash.ts +116 -0
- package/src/scripts/generate_pack_manifests.ts +78 -0
- package/src/scripts/grade_target_readiness.ts +478 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +97 -16
- package/src/scripts/hooks/concern_registry.ts +4 -0
- package/src/scripts/hooks/design_pass_hook.ts +356 -0
- package/src/scripts/hooks/rtk_wrap_hook.ts +30 -7
- package/src/scripts/hooks/rule_inject_hook.ts +318 -0
- package/src/scripts/hot_context_hook.ts +74 -7
- package/src/scripts/install.ts +40 -89
- package/src/scripts/lint_adapter_tier.ts +663 -0
- package/src/scripts/lint_archived_skills.ts +93 -0
- package/src/scripts/lint_budget_ownership.ts +2 -1
- package/src/scripts/lint_deterministic_time.ts +470 -0
- package/src/scripts/lint_framework_leakage.ts +5 -0
- package/src/scripts/lint_handoffs.ts +525 -1
- package/src/scripts/lint_judge_prompt_expectation.ts +155 -0
- package/src/scripts/lint_marketplace.ts +88 -0
- package/src/scripts/lint_media_policy_linkage.ts +140 -1
- package/src/scripts/lint_one_off_age.ts +6 -1
- package/src/scripts/lint_override_kernel_guard.ts +87 -5
- package/src/scripts/lint_roadmap_complexity.ts +56 -0
- package/src/scripts/lint_rule_enforcement_declaration.ts +24 -7
- package/src/scripts/lint_rule_norm_pin.ts +321 -0
- package/src/scripts/lint_spawn_payload.ts +42 -5
- package/src/scripts/lint_symptom_intake.ts +2 -1
- package/src/scripts/mcp_parity_smoke.ts +30 -4
- package/src/scripts/mcp_render.ts +66 -1
- package/src/scripts/mcp_tool_fingerprint.ts +241 -0
- package/src/scripts/measure_risk_class_drift.ts +140 -0
- package/src/scripts/measure_skill_ranker_baseline.ts +212 -0
- package/src/scripts/media/lib/adapter-common.sh +211 -1
- package/src/scripts/media/lib/adapter-contract.md +74 -6
- package/src/scripts/model_rule_injection.ts +907 -0
- package/src/scripts/project_thin_rules.ts +45 -2
- package/src/scripts/release.ts +66 -860
- package/src/scripts/release_drill.ts +59 -3
- package/src/scripts/release_env.ts +298 -0
- package/src/scripts/release_publication.ts +720 -0
- package/src/scripts/roadmap_context.ts +778 -0
- package/src/scripts/schemas/fidelity-measurement-sheet.schema.json +169 -0
- package/src/scripts/schemas/pack.schema.json +62 -4
- package/src/scripts/schemas/rule.schema.json +24 -2
- package/src/scripts/schemas/skill.schema.json +41 -2
- package/src/scripts/schemas/ui-authority.schema.json +114 -0
- package/src/scripts/session_register_hook.ts +29 -3
- package/src/scripts/sessions_cli.ts +67 -3
- package/src/scripts/skill_tools/score_skill_relevance.ts +36 -53
- package/src/scripts/tighten_skill_descriptions.ts +264 -0
- package/src/scripts/token_sink_report.ts +239 -0
- package/src/scripts/trigger_coverage.ts +122 -3
- package/src/scripts/update_counts.ts +7 -3
- package/src/scripts/validate_frontmatter.ts +66 -0
- package/src/server/schemas/settings.ts +5 -0
- package/src/shared/skillRanking.ts +183 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Roadmap deferred-item resolution — provenance
|
|
3
|
+
description: Why the preservation test routes a preserving disposition to the council and a dropping one to the owner, what it deliberately does not fix, and the two council decisions behind it.
|
|
4
|
+
type: guideline
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Roadmap deferred-item resolution — provenance
|
|
8
|
+
|
|
9
|
+
Migrated from [`roadmap-progress-sync`](../../../src/rules/roadmap-progress-sync.md)
|
|
10
|
+
§ *Who resolves it — the preservation test* under the P4 pattern
|
|
11
|
+
(`road-to-standing-payload-diet` step 1.3). The rule keeps the Iron Law, the
|
|
12
|
+
route table, the fail-closed clause and the recorded-or-it-did-not-happen
|
|
13
|
+
clause — everything an agent must act on. What moved here is the provenance and
|
|
14
|
+
the argument: read once, not on every session.
|
|
15
|
+
|
|
16
|
+
It lives in its own file rather than in
|
|
17
|
+
[`roadmap-progress-mechanics`](roadmap-progress-mechanics.md), which is the
|
|
18
|
+
topical home, for a mechanical reason worth stating so the next migration does
|
|
19
|
+
not repeat the attempt: that file sits ~134 characters under the 16,000-char
|
|
20
|
+
`check_depth_budget` ceiling, so appending this block — or even a stub pointing
|
|
21
|
+
at it — turns a green ratchet red. The ceiling is a growth ratchet rather than a
|
|
22
|
+
measured quality threshold, and the fix it asks for is a smaller destination,
|
|
23
|
+
not a raised baseline.
|
|
24
|
+
|
|
25
|
+
## The residual hole, stated not papered over
|
|
26
|
+
|
|
27
|
+
Both authoring seats named it in their own strongest counter: a carried
|
|
28
|
+
follow-up can still become an indefinite deferral, so the preservation test
|
|
29
|
+
bounds *who decides*, not *whether the work happens*. Only fix-now discharges
|
|
30
|
+
it. A carried item untouched at the next task boundary is raised again per
|
|
31
|
+
[`active-remediation`](../../../src/rules/active-remediation.md).
|
|
32
|
+
|
|
33
|
+
## Why the routing changed
|
|
34
|
+
|
|
35
|
+
Adopted 2026-08-19, unanimous 2/2 council (blind peer review). The prior text —
|
|
36
|
+
*"Wait for the user"* — handed back a fully analysed choice carrying four costed
|
|
37
|
+
options, which is the low-value interruption
|
|
38
|
+
[`no-cheap-questions`](../../../src/rules/no-cheap-questions.md) forbids. The
|
|
39
|
+
gate exists to protect the item, not the maintainer's attention; routing a
|
|
40
|
+
preserving disposition to the council keeps the protection and drops the
|
|
41
|
+
interruption.
|
|
42
|
+
|
|
43
|
+
## `deferred_policy` provenance
|
|
44
|
+
|
|
45
|
+
The declared-contract branch that removes the options round without moving the
|
|
46
|
+
route is `decision 2026-08-20`, AI council 2/2. It is reversible by
|
|
47
|
+
construction: `wait` is the default, so removing the field restores always-wait.
|
|
48
|
+
A declared field never moves a row from owner to council — it changes only
|
|
49
|
+
*when* the round happens.
|
|
50
|
+
|
|
51
|
+
## See also
|
|
52
|
+
|
|
53
|
+
- [`roadmap-progress-sync`](../../../src/rules/roadmap-progress-sync.md) — the live obligation, Iron Law 3 and the route table.
|
|
54
|
+
- [`roadmap-progress-mechanics`](roadmap-progress-mechanics.md) — glyph semantics, regen cadence, the deferred-resolution menu.
|
|
@@ -107,8 +107,8 @@ Within-project invariants + repetition caps. Override = declare the value in
|
|
|
107
107
|
| T4 | Eyebrow / ALL-CAPS label above every section heading | Overuse collapses the emphasis; maximum is 1 eyebrow per 3 sections (countable: grep tracking classes) | Used for genuine section-type differentiation with meaningful vocabulary (not just "FEATURES", "PRICING") |
|
|
108
108
|
| T5 | Repeated section kickers ("Our mission", "What we offer", "Why choose us") | Filler vocabulary; every AI-generated page has the same three section titles | Every kicker is substantive and uses brand-specific vocabulary, not generic marketing speak |
|
|
109
109
|
| T6 | Crushed letter-spacing on display text (`letter-spacing` < −0.04em) | Below −0.04em glyphs collide optically; reads as "designer-ish effect" with no grounding | Intentional tight display treatment with a documented minimum floor; verify at the actual render size |
|
|
110
|
-
| T7 | Overused fonts without a
|
|
111
|
-
| T8 | Single typeface for everything | Missed typographic contrast opportunity;
|
|
110
|
+
| T7 | Overused fonts without a stated reason: Inter, Roboto, DM Sans, Geist, Space Grotesk, Instrument Serif | These are the default AI-coding-tool font picks; every generated UI uses one of them | **Register-scoped.** In the **brand** register: the brand has explicitly adopted one of these AND there is a documented reason. In the **product** register: a single reliable family is the sanctioned strategy ([`design-modes`](design-modes.md) § The two registers), so one of these is legitimate on a **stated** product-register choice — the register itself is the reason, and it must be stated (DESIGN.md, the surface brief, or `design-slop-disable`). Neither register admits an *undeclared* pick. |
|
|
111
|
+
| T8 | Single typeface for everything | Missed typographic contrast opportunity; in the **brand** register an unexamined single family reads as "I did not think about fonts" | **Register-scoped like T7.** Intentional mono-typeface aesthetic (e.g., terminal-inspired), stated in the brief — *or* the **product** register, where one reliable family is the sanctioned strategy ([`design-modes`](design-modes.md) § The two registers) and contrast is carried by weight and scale rather than by a second family. |
|
|
112
112
|
| T9 | All-caps body paragraphs or field labels | Reduces legibility below WCAG AA for sustained reading; reads as flair over function | Short UI labels (e.g., button text in a brutalist layout); never for body paragraphs |
|
|
113
113
|
| T10 | Wide letter-spacing on body text (`letter-spacing` > 0.05em) | Reduces readability for sustained reading; reserved for display use | Display text (headlines, pull quotes) where intentional tracking is a brand element |
|
|
114
114
|
|
|
@@ -162,6 +162,7 @@ Within-project invariants + repetition caps. Override = declare the value in
|
|
|
162
162
|
| CP3 | Aphoristic manufactured contrast ("We don't do X. We do Y." / "Not just A, but B.") | A generated sentence rhythm that sounds like brand writing but carries no specificity | Aphoristic copy is legitimate when the contrast reveals a genuine product distinction; test by asking whether the Y side says something concrete |
|
|
163
163
|
| CP4 | "Theater" framing — copy that announces what the product does without saying how or why | "The platform for modern teams." communicates nothing; it is content-shaped noise | Every tagline must pass the "so what" test: can a skeptic follow it with "but how?" and get a concrete answer? |
|
|
164
164
|
| CP5 | Emoji-decoration in UI markup — 🚀/✅/🎉 prepending headings, buttons, list items, or CTAs (`🚀 Get Started`) | Performative-enthusiasm coating; the default-startup-template tell. No emoji is better than decorative emoji | Brand/`DESIGN.md` declares a systematic emoji strategy, or the emoji is functional (status indicator, category marker tied to real meaning) |
|
|
165
|
+
| CP6 | Stock render subject named instead of the product's own subject matter — "floating abstract shapes", "gradient mesh", "glowing orb", "particle field", "futuristic HUD" | These name the default thing a render becomes when nobody decided what it is about; same delete-test as CP2, applied to art direction — swap the phrase for what the product actually shows and the brief says more | The subject IS abstract by decision (a generative-art surface, a data-driven field whose data is named), and the brief says which decision and why |
|
|
165
166
|
|
|
166
167
|
---
|
|
167
168
|
|
|
@@ -261,6 +262,7 @@ are listed in § Quality floors.
|
|
|
261
262
|
| CP3 | judgment-only | copy phrase-list; that mechanism is council-rejected |
|
|
262
263
|
| CP4 | judgment-only | copy phrase-list; that mechanism is council-rejected |
|
|
263
264
|
| CP5 | backed | |
|
|
265
|
+
| CP6 | backed | copy-engine phrase list, same mechanism as CP2; a CSS engine cannot see subject matter |
|
|
264
266
|
|
|
265
267
|
---
|
|
266
268
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Design Assets & Imagery — ownership, delivery, honesty
|
|
2
|
+
|
|
3
|
+
> What a visual artifact may ship as an asset, who delivers it, and what counts as fabricated evidence
|
|
4
|
+
|
|
5
|
+
_Split out of [`design-fidelity-mechanics`](design-fidelity-mechanics.md) § Asset & imagery discipline, which carries the obligation surface and routes here. The split is the per-file depth ceiling doing its job, exactly as it was for [`design-handover-extraction`](design-handover-extraction.md): the mechanics file crossed 16k when the artefact-maturity axis was migrated into it, and compressing this material to fit would have cost the ownership sentence ADR-205 rests on and the fixture ids that make each bullet falsifiable._
|
|
6
|
+
|
|
7
|
+
Visual artifacts carry **real assets or honest placeholders — never fabricated
|
|
8
|
+
brand evidence**. The design-surface instance of the no-invented-facts floor.
|
|
9
|
+
|
|
10
|
+
- **Copy owned assets through the project's accepted path.** Reference or copy
|
|
11
|
+
project-owned assets (logos, icons, fonts, images) via the target project's
|
|
12
|
+
asset directory/pipeline — never hotlink a design-system's internal URL, never
|
|
13
|
+
bulk-copy a huge source folder. (fixtures: `daf-missing-asset`, `daf-external-asset-url`.)
|
|
14
|
+
- **Third-party asset delivery is self-hosted by default — this section owns that
|
|
15
|
+
decision.** An asset whose delivery path crosses a third party (a webfont from
|
|
16
|
+
a font CDN, an icon set from a CDN, a hosted stylesheet) transmits the
|
|
17
|
+
**visitor's IP address** to that third party on every page view. Deliver it
|
|
18
|
+
through the target project's own route instead — the framework's font/asset
|
|
19
|
+
primitive, a bundled package, or a locally-served file. A third-party hotlink
|
|
20
|
+
is emitted **only** on an explicit consumer opt-in, and the opt-in is stated
|
|
21
|
+
with what it transmits — never chosen silently because it is the shorter line.
|
|
22
|
+
A discovery URL is not a delivery URL: keeping a font's browse/share link as
|
|
23
|
+
*where to find it* is fine. Ownership: this bullet is the single owner of the
|
|
24
|
+
third-party delivery decision ([`ADR-205`](../decisions/ADR-205-webfont-delivery-ownership.md));
|
|
25
|
+
emitters (`typography-system`, UI-apply directives, brand-asset paths) are
|
|
26
|
+
consumers and point here rather than restating it. (fixture:
|
|
27
|
+
`daf-webfont-delivery`.)
|
|
28
|
+
- **Real imagery where inspection matters.** On visual pages/decks, use actual
|
|
29
|
+
product / place / object / state imagery where the image IS the proof (a
|
|
30
|
+
product screenshot, a real dashboard state). Decorative atmosphere is not proof
|
|
31
|
+
— never pass a stock-like or invented image off as the real product. An
|
|
32
|
+
invented product screenshot is fabricated evidence. (fixture: `daf-invented-screenshot`.)
|
|
33
|
+
- **Icons follow the iconography floor** — no emoji-as-icon in serious UI, no
|
|
34
|
+
hand-rolled icon when a set exists; see the `iconography` skill § Iconography floor.
|
|
35
|
+
- **Ask before adding material — no unrequested filler.** Never generate copy,
|
|
36
|
+
placeholder sections, or decorative blocks the user did not ask for to "complete"
|
|
37
|
+
a design. Brief silent on a region → surface the gap (`ask-when-uncertain`)
|
|
38
|
+
or leave an honest placeholder; never invent filler to fill space.
|
|
@@ -148,35 +148,25 @@ always owed.
|
|
|
148
148
|
Visual artifacts carry **real assets or honest placeholders — never fabricated
|
|
149
149
|
brand evidence**. The design-surface instance of the no-invented-facts floor.
|
|
150
150
|
|
|
151
|
-
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
product / place / object / state imagery where the image IS the proof (a
|
|
171
|
-
product screenshot, a real dashboard state). Decorative atmosphere is not proof
|
|
172
|
-
— never pass a stock-like or invented image off as the real product. An
|
|
173
|
-
invented product screenshot is fabricated evidence. (fixture: `daf-invented-screenshot`.)
|
|
174
|
-
- **Icons follow the iconography floor** — no emoji-as-icon in serious UI, no
|
|
175
|
-
hand-rolled icon when a set exists; see the `iconography` skill § Iconography floor.
|
|
176
|
-
- **Ask before adding material — no unrequested filler.** Never generate copy,
|
|
177
|
-
placeholder sections, or decorative blocks the user did not ask for to "complete"
|
|
178
|
-
a design. Brief silent on a region → surface the gap (`ask-when-uncertain`)
|
|
179
|
-
or leave an honest placeholder; never invent filler to fill space.
|
|
151
|
+
Owned-asset paths, the third-party delivery decision this repository pins to
|
|
152
|
+
self-hosting ([`ADR-205`](../decisions/ADR-205-webfont-delivery-ownership.md)),
|
|
153
|
+
the real-imagery-as-proof floor, the iconography floor and the
|
|
154
|
+
no-unrequested-filler clause — each with its `daf-*` fixture:
|
|
155
|
+
[`design-asset-discipline`](design-asset-discipline.md).
|
|
156
|
+
|
|
157
|
+
## Artefact maturity — the second axis
|
|
158
|
+
|
|
159
|
+
The Iron Law and both discriminator clauses stay in
|
|
160
|
+
[`design-fidelity`](../../src/rules/design-fidelity.md) § Two axes; this is the table.
|
|
161
|
+
|
|
162
|
+
| The artefact declares | The spec is | The spec is NOT |
|
|
163
|
+
|---|---|---|
|
|
164
|
+
| low fidelity — greyscale, box-and-line, placeholder copy | layout · element set · hierarchy · states shown | greys · placeholder text · borders · exact spacing |
|
|
165
|
+
| finished — colour, real copy, real assets | everything visible (the 1:1 floor, unchanged) | — |
|
|
166
|
+
|
|
167
|
+
Grounded in [`wireframe`](../../src/skills/wireframe/SKILL.md) § Gotchas. The near-miss
|
|
168
|
+
class is pinned in `ROUTING_MATRIX`, its rationale beside the assertions in
|
|
169
|
+
`design_fidelity_routing.test.ts`.
|
|
180
170
|
|
|
181
171
|
## Provided-artifact precedence
|
|
182
172
|
|
|
@@ -240,6 +230,32 @@ unmarked finding is treated as actionable, so the default failure direction is
|
|
|
240
230
|
|
|
241
231
|
Regression witness: `daf-slop-vs-provided`.
|
|
242
232
|
|
|
233
|
+
## Value-level provenance — the finer grain beside the flag
|
|
234
|
+
|
|
235
|
+
The block above is finding-level and stays the default: `artifact_covered` is a
|
|
236
|
+
boolean on a **finding**, and every consumer of it — `partition_artifact_covered`
|
|
237
|
+
and the ceiling check it feeds — is unchanged by this section.
|
|
238
|
+
|
|
239
|
+
What a per-finding boolean cannot answer is *"where did this `16px` come from"*.
|
|
240
|
+
The flag says a finding is answered by the artifact; it does not say which value
|
|
241
|
+
carried the expectation, so two rows that disagree about the same element look
|
|
242
|
+
identical to a reviewer.
|
|
243
|
+
|
|
244
|
+
`src/scripts/schemas/fidelity-measurement-sheet.schema.json` adds that grain and
|
|
245
|
+
nothing else: each measurement row carries `expectation_source` — a `kind`
|
|
246
|
+
ordered by authority (`provided_artifact` › `design_token` › `brand_token` ›
|
|
247
|
+
`house_heuristic` › `agent_inference`) plus a `ref` naming the token, `file:line`
|
|
248
|
+
or artefact anchor. `agent_inference` is the row a reviewer filters for.
|
|
249
|
+
|
|
250
|
+
Two boundaries, because this is an addition and not a replacement:
|
|
251
|
+
|
|
252
|
+
- **The coarse flag stays the default channel.** A row's optional
|
|
253
|
+
`expectation_source.artifact_covered` mirrors the flag for one value; it never
|
|
254
|
+
substitutes for setting the flag on the finding, and no gate reads it.
|
|
255
|
+
- **The ordering above is a mirror, not a second source of truth.** Precedence
|
|
256
|
+
is decided in the block above; a `kind` that disagreed with it would be a
|
|
257
|
+
defect in the schema, not a competing chain.
|
|
258
|
+
|
|
243
259
|
## Failure modes
|
|
244
260
|
|
|
245
261
|
- Swapping the prototype's font / typeface because another "reads better".
|
|
@@ -74,11 +74,41 @@ ladder requires you to **name**, not to pass off as a source-based build.
|
|
|
74
74
|
## Coverage — stated honestly
|
|
75
75
|
|
|
76
76
|
No fixture scores this class yet. `daf-source-over-screenshot` scores the rung
|
|
77
|
-
choice on an *attached* artifact, not a URL handover
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
exists
|
|
77
|
+
choice on an *attached* artifact, not a URL handover.
|
|
78
|
+
|
|
79
|
+
**Its blocking reason changed on 2026-08-23 and the new one is narrower.** It was
|
|
80
|
+
SKIPPED since 2026-08-13 "for want of a page-reaching capture primitive". That
|
|
81
|
+
primitive now exists — `agent-config ui:render`, a Class-A headless capture at
|
|
82
|
+
desktop / 375 px / 320 px, executed against a real fixture. So the fixture is no
|
|
83
|
+
longer blocked on a missing capability; it is **unscored**, pending a live eval
|
|
84
|
+
run that puts an agent through an artifact port and judges the rung it chose.
|
|
85
|
+
|
|
86
|
+
The discipline is unchanged and still binds: claiming a regression witness before
|
|
87
|
+
that run would be the fabrication this package's evidence discipline exists to
|
|
88
|
+
prevent. What moved is which sentence is true — "we cannot measure this" became
|
|
89
|
+
"we have not measured this yet", and those are different claims.
|
|
90
|
+
|
|
91
|
+
### The skip register — every fixture gated on the same primitive
|
|
92
|
+
|
|
93
|
+
`daf-source-over-screenshot` is no longer the only one, so the reason string is
|
|
94
|
+
recorded once here rather than restated per fixture. Every row below is
|
|
95
|
+
**SKIPPED** with `b-page-capture-primitive` as its reason, and none is silently
|
|
96
|
+
absent:
|
|
97
|
+
|
|
98
|
+
| Fixture | Registered | Reason |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| `daf-source-over-screenshot` | 2026-08-13 | `b-page-capture-primitive` |
|
|
101
|
+
| `daf-render-absent-scoped` | 2026-08-23 | `b-page-capture-primitive` — its render-dependent assertions only; the static-scope assertions run and pass |
|
|
102
|
+
| `daf-render-absent-control` | 2026-08-23 | `b-page-capture-primitive` — synthesises `render_ok: true` as state rather than rendering, and says so |
|
|
103
|
+
|
|
104
|
+
**Probed, not assumed** (2026-08-23). The `playwright` library resolves in this
|
|
105
|
+
tree, which reads as a capture primitive until you run it: launching chromium
|
|
106
|
+
fails with *"Executable doesn't exist at
|
|
107
|
+
…/chromium_headless_shell-1234/chrome-headless-shell"*. The library is present
|
|
108
|
+
and **no browser binary is installed**, so the primitive is
|
|
109
|
+
`not-available: headless-browser-binary`. Recorded as execution evidence because
|
|
110
|
+
"playwright is in node_modules" is exactly the inference that would have made a
|
|
111
|
+
fabricated witness look justified.
|
|
82
112
|
|
|
83
113
|
## See also
|
|
84
114
|
|
|
@@ -14,7 +14,7 @@ wrong is the root cause of most AI-generated design failures:
|
|
|
14
14
|
| **Primary failure** | Flatness / genericness — looks like every other AI startup | Strangeness without purpose — "clever" choices that obscure the tool |
|
|
15
15
|
| **The user's question** | "How was this made?" (genuine curiosity) | "Where do I click?" (the tool disappears into the task) |
|
|
16
16
|
| **Key skill cluster** | `brand-identity`, `iconography`, `fe-design § Aesthetic direction`, `design-intelligence` | `accessibility-auditor`, `ui-component-architect`, `fe-design § Table/Form Design` |
|
|
17
|
-
| **Typography strategy** | Distinctive pairing — two contrasting families, deliberate tracking | One reliable family — Inter
|
|
17
|
+
| **Typography strategy** | Distinctive pairing — two contrasting families, deliberate tracking | One reliable family — predictable hierarchy. A default AI font pick (Inter, Roboto, DM Sans, Geist, Space Grotesk, Instrument Serif) is a legitimate product-register choice, and [`design-antipatterns` T7](design-antipatterns.md) scopes itself accordingly — but the register is the reason, so state it: an undeclared Inter is still an undeclared font choice. |
|
|
18
18
|
| **Color strategy** | Brand identity — often unexpected; the palette IS the differentiator | Semantic function — primary/danger/success/neutral; predictable meaning |
|
|
19
19
|
| **Motion strategy** | Expressive — motion reinforces the brand's personality | Utilitarian — motion confirms state changes; nothing decorative |
|
|
20
20
|
| **Spacing strategy** | Breathing room; generous whitespace as a brand signal | Dense/efficient; optimize for information density |
|
|
@@ -41,6 +41,46 @@ a product-mode dashboard). The register applies per-surface, not per-product.
|
|
|
41
41
|
When unclear: ask — *"Is the user here to be impressed, or to accomplish a
|
|
42
42
|
task?"*
|
|
43
43
|
|
|
44
|
+
## The second axis — surface job
|
|
45
|
+
|
|
46
|
+
The register answers *how expressive may this be*. It does not answer *what is
|
|
47
|
+
this surface for*, and conflating the two is why a persuade surface inside a
|
|
48
|
+
product repo gets dense, utilitarian defaults. So there are two axes, and they
|
|
49
|
+
are independent.
|
|
50
|
+
|
|
51
|
+
| Surface job | The user's situation | Density | Hierarchy | Expressiveness |
|
|
52
|
+
|---|---|---|---|---|
|
|
53
|
+
| `persuade` | arrived, deciding, will leave in seconds | generous | one dominant claim per viewport | high — this is the job |
|
|
54
|
+
| `operate` | returning, task in mind, wants it done | dense | scannable, predictable, repeated | low — strangeness costs time |
|
|
55
|
+
| `read` | sustained attention on prose or data | measured | typographic, not chrome-led | restrained |
|
|
56
|
+
| `experience` | exploring, no task, willing to be surprised | spacious | narrative, sequential | high, and sequenced |
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
SURFACE JOB IS PER-SURFACE AND LIVES IN THE SURFACE BRIEF.
|
|
60
|
+
IT IS NEVER READ OFF PRODUCT.md, AND A RUN NEVER WRITES IT THERE.
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Why not in PRODUCT.md.** PRODUCT.md describes the product, and a product has
|
|
64
|
+
many surfaces with different jobs — an investor one-pager and an ops console
|
|
65
|
+
belong to the same product and share no defaults. A run that resolves the job
|
|
66
|
+
from PRODUCT.md flattens the persuade surface into the product register, which
|
|
67
|
+
is the `surface-mode-not-product-mode` near-miss in
|
|
68
|
+
`tests/eval/frontend-corpus/near-miss/`.
|
|
69
|
+
|
|
70
|
+
**Register stays.** The two axes compose: a `persuade` surface in the `brand`
|
|
71
|
+
register and a `persuade` surface in the `product` register are both persuade
|
|
72
|
+
surfaces, and the register decides how far the expressiveness may go.
|
|
73
|
+
|
|
74
|
+
**Quality floors do not vary by either axis.** Density, hierarchy and
|
|
75
|
+
expressiveness defaults move; contrast, minimum font size, line length,
|
|
76
|
+
reduced-motion, heading order and focus visibility do not. A floor that moved
|
|
77
|
+
with the surface job would be a preference wearing a floor's name.
|
|
78
|
+
|
|
79
|
+
The machine-readable form is `surface_mode` in
|
|
80
|
+
[`ui-authority`](../contracts/ui-authority.md), which is also the one place the
|
|
81
|
+
precedence between an explicit instruction, the brief and these defaults is
|
|
82
|
+
written down.
|
|
83
|
+
|
|
44
84
|
## Brand-mode failure modes
|
|
45
85
|
|
|
46
86
|
- **Genericness:** Choosing the safe AI-slop palette (cream + brass, purple/violet gradient, three equal cards). The product is invisible in its category. Cross-check with `docs/guidelines/design-antipatterns.md` § Color and Visual.
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Monorepo anti-patterns — the diff-detectable set
|
|
2
|
+
|
|
3
|
+
Task-graph mistakes a reviewer can catch by **reading a diff**, with no build
|
|
4
|
+
run and no repository checked out. That is the whole selection criterion: a
|
|
5
|
+
review judge sees a patch, not a running pipeline, so a rule it cannot evaluate
|
|
6
|
+
from the patch is not a rule it can enforce.
|
|
7
|
+
|
|
8
|
+
> **Own analysis, corroboration outstanding.** The six rows below describe
|
|
9
|
+
> publicly documented behaviour of Turborepo and Nx and are stated from that
|
|
10
|
+
> behaviour, not adopted from a third-party artefact — so no
|
|
11
|
+
> `provenance/borrows.jsonl` entry backs them, and none should be read into
|
|
12
|
+
> them. The roadmap that commissioned this file recorded specific source line
|
|
13
|
+
> numbers in an external MIT-licensed reference; that reference is **not
|
|
14
|
+
> reachable from this checkout** (it was never cloned here, and the consumed
|
|
15
|
+
> inbox copy carrying the real identifiers is gitignored), so those line numbers
|
|
16
|
+
> could not be re-read and are deliberately **not** reproduced as citations. A
|
|
17
|
+
> citation nobody in this tree can follow is worse than an honest own-analysis
|
|
18
|
+
> label. See § Not harvested for what that leaves open.
|
|
19
|
+
|
|
20
|
+
## The six rows
|
|
21
|
+
|
|
22
|
+
### 1. A root script that bypasses the task runner
|
|
23
|
+
|
|
24
|
+
```jsonc
|
|
25
|
+
// root package.json — WRONG
|
|
26
|
+
{ "scripts": { "build": "tsc -b packages/ui && vite build apps/web" } }
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The runner exists to know the graph, cache the results, and parallelise. A root
|
|
30
|
+
script that invokes the underlying tools directly gets none of that, and — worse
|
|
31
|
+
— becomes a second, divergent definition of what "build" means. Route through
|
|
32
|
+
the runner: `"build": "turbo run build"`.
|
|
33
|
+
|
|
34
|
+
**In a diff:** a root `scripts` entry naming a compiler, bundler, or test runner
|
|
35
|
+
directly instead of `turbo run` / `nx run-many`.
|
|
36
|
+
|
|
37
|
+
### 2. `prebuild` that builds a sibling
|
|
38
|
+
|
|
39
|
+
```jsonc
|
|
40
|
+
// packages/ui/package.json — WRONG
|
|
41
|
+
{ "scripts": { "prebuild": "cd ../tokens && npm run build" } }
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
npm lifecycle hooks are invisible to the task runner. The dependency is real but
|
|
45
|
+
undeclared, so the runner may build the two in the wrong order, in parallel, or
|
|
46
|
+
skip the sibling entirely on a cache hit. Express it as a dependency
|
|
47
|
+
(`dependsOn: ["^build"]` plus a real `workspace:` dependency) so the graph
|
|
48
|
+
carries it.
|
|
49
|
+
|
|
50
|
+
**In a diff:** a `pre*` / `post*` script containing `cd ..`, a sibling path, or
|
|
51
|
+
another workspace's name.
|
|
52
|
+
|
|
53
|
+
### 3. `&&`-chained runner tasks
|
|
54
|
+
|
|
55
|
+
```jsonc
|
|
56
|
+
{ "scripts": { "ci": "turbo run lint && turbo run test && turbo run build" } }
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Three sequential invocations, each with its own graph walk, forcing full
|
|
60
|
+
serialisation and discarding the parallelism the runner would have found. It
|
|
61
|
+
also makes the cache less effective, because each invocation is scoped to one
|
|
62
|
+
task. Pass the tasks together: `turbo run lint test build`.
|
|
63
|
+
|
|
64
|
+
**In a diff:** two or more `turbo run` / `nx run-many` invocations joined by
|
|
65
|
+
`&&` in one script.
|
|
66
|
+
|
|
67
|
+
### 4. Shared code inside `apps/`
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
apps/web/src/shared/format-currency.ts ← imported by apps/admin
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
`apps/*` are leaves: deployable things nothing else depends on. The moment a
|
|
74
|
+
second app imports from the first, the two are coupled with no declared edge,
|
|
75
|
+
the affected-set calculation is wrong, and neither app can be built or released
|
|
76
|
+
alone. Shared code belongs in a `packages/*` workspace with a real dependency
|
|
77
|
+
declared ([`workspace-link`](../../src/skills/workspace-link/SKILL.md)).
|
|
78
|
+
|
|
79
|
+
**In a diff:** an import whose specifier reaches into `apps/<other>/`, or a new
|
|
80
|
+
`shared/` `common/` `utils/` directory added under `apps/*`.
|
|
81
|
+
|
|
82
|
+
### 5. `../` traversal in a task's `inputs`
|
|
83
|
+
|
|
84
|
+
```jsonc
|
|
85
|
+
// turbo.json — WRONG
|
|
86
|
+
{ "tasks": { "build": { "inputs": ["src/**", "../tokens/src/**"] } } }
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
`inputs` are scoped to the workspace on purpose: they define that task's cache
|
|
90
|
+
key. Reaching outside it makes the key depend on files the runner does not
|
|
91
|
+
consider part of this task, which produces both false cache hits (the sibling
|
|
92
|
+
changed in a way the key did not capture) and false misses. The sibling's output
|
|
93
|
+
should be an input *because it is a declared dependency*, not because a glob
|
|
94
|
+
walked up the tree.
|
|
95
|
+
|
|
96
|
+
**In a diff:** a `../` segment inside `inputs`, `outputs`, or a task-scoped glob
|
|
97
|
+
in `turbo.json`.
|
|
98
|
+
|
|
99
|
+
### 6. A file-producing task with no `outputs`
|
|
100
|
+
|
|
101
|
+
```jsonc
|
|
102
|
+
{ "tasks": { "build": { "dependsOn": ["^build"] } } } // writes dist/, declares nothing
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
With no `outputs`, the runner caches the task's *logs* and not its artefacts. A
|
|
106
|
+
cache hit then restores nothing, so the next task in the chain runs against a
|
|
107
|
+
missing or stale `dist/` — and the failure is intermittent, because it only
|
|
108
|
+
appears on a hit. Declare what the task writes: `"outputs": ["dist/**"]`.
|
|
109
|
+
|
|
110
|
+
**In a diff:** a task whose command runs a compiler or bundler while its config
|
|
111
|
+
block carries no `outputs` key.
|
|
112
|
+
|
|
113
|
+
## Not harvested
|
|
114
|
+
|
|
115
|
+
The external reference this file was commissioned from carries a substantially
|
|
116
|
+
longer anti-pattern list. The rows above are the ones whose violation is visible
|
|
117
|
+
in a patch; the classes below were deliberately left out, each for a reason that
|
|
118
|
+
is a property of the *check*, not of the advice:
|
|
119
|
+
|
|
120
|
+
| Class not harvested | Why it cannot be a diff rule |
|
|
121
|
+
|---|---|
|
|
122
|
+
| Cache hit-rate and timing regressions | Needs two runs to compare; a diff has no runtime. |
|
|
123
|
+
| Task-graph cycles | Requires resolving the whole graph, not reading one file. |
|
|
124
|
+
| Over-broad `inputs` causing cache misses | "Too broad" is a judgement against observed hit rates. |
|
|
125
|
+
| Remote-cache and CI configuration mistakes | Lives in CI/runner settings, not in the reviewed diff. |
|
|
126
|
+
| Dependency-order races that only appear under `--parallel` | Needs a running build to observe. |
|
|
127
|
+
| Environment-variable declarations missing from the cache key | Detectable only once a build produces a wrong artefact. |
|
|
128
|
+
|
|
129
|
+
**Honest limit on this table:** it enumerates *classes* reasoned about from what
|
|
130
|
+
such a list contains, not a row-by-row disposition of the source — which, per
|
|
131
|
+
the note above, could not be opened here. So it does not establish that every
|
|
132
|
+
source row is accounted for. Closing that needs the reference reachable in a
|
|
133
|
+
checkout; until then this section states what was decided and on what basis,
|
|
134
|
+
rather than implying a completeness it does not have.
|
|
135
|
+
|
|
136
|
+
## See also
|
|
137
|
+
|
|
138
|
+
- [`monorepo-workspace`](../../src/skills/monorepo-workspace/SKILL.md) — read the graph and the task list before judging either.
|
|
139
|
+
- [`workspace-link`](../../src/skills/workspace-link/SKILL.md) — the `workspace:` declaration rows 2 and 4 both come back to.
|
|
140
|
+
- [`blast-radius-analyzer`](../../src/skills/blast-radius-analyzer/SKILL.md) — § Monorepo, for the affected set of an edit.
|
|
141
|
+
- [`design-antipatterns.md`](design-antipatterns.md) — sibling diff-detectable catalog for a different surface.
|