@event4u/agent-config 14.11.0 → 14.12.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 +156 -538
- package/README.md +1 -1
- package/dist/agent-src/contexts/execution/evidence-discipline.md +26 -0
- package/dist/agent-src/skills/code-refactoring/SKILL.md +45 -1
- package/dist/agent-src/skills/code-review/SKILL.md +65 -6
- package/dist/agent-src/skills/command-writing/SKILL.md +35 -0
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +8 -1
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +23 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +29 -12
- package/dist/agent-src/skills/skill-writing/references/procedure.md +24 -2
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +9 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +8 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/cli-delegate/{chunk-L43NCYPB.js → chunk-JCW7ZLHK.js} +5 -0
- package/dist/cli-delegate/{chunk-236PNQZK.js → chunk-JJA2QEWA.js} +1 -1
- package/dist/cli-delegate/cmd_export.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +2 -2
- package/dist/cli-delegate/cmd_settings_migrate.js +2 -2
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +2 -2
- package/dist/cli-delegate/cmd_uninstall.js +2 -2
- package/dist/cli-delegate/cmd_validate.js +2 -2
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +10 -10
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/hooks/dispatch.js +1081 -879
- package/dist/install/install.mjs +5 -0
- package/dist/mcp/registry-manifest.json +2 -2
- package/dist/mcp/server.json +2 -2
- package/dist/server/schemas/settings.js +3 -0
- package/docs/contracts/settings-classes.md +24 -4
- package/docs/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
- package/docs/guidelines/code-clarity.md +21 -0
- package/docs/guidelines/redundancy-taxonomy.md +180 -0
- package/package.json +6 -2
- package/src/config/agent-settings.template.yml +16 -0
- package/src/config/budgets.yml +19 -0
- package/src/config/ci-local-parity.yml +15 -0
- package/src/config/discovery/prompt-patterns.yml +56 -0
- package/src/config/estate-count-budget.json +8 -3
- package/src/config/gate-coverage.yml +191 -6
- package/src/config/gate-violation-baselines.json +3 -3
- package/src/config/pack-size-budget.json +39 -12
- package/src/config/preamble-payload-budget.json +97 -71
- package/src/config/routing-coverage-seed.json +29 -0
- package/src/config/suggestion-capture.json +28 -0
- package/src/config/surface-matrix.yml +21 -2
- package/src/config/web-launch-readiness.json +188 -0
- package/src/scripts/_lib/gate_baseline.ts +150 -1
- package/src/scripts/_lib/skill_estate.ts +115 -0
- package/src/scripts/ai_council/argument_exhaustion.ts +130 -0
- package/src/scripts/check_bundle_path_leakage.ts +162 -7
- package/src/scripts/check_command_examples.ts +557 -0
- package/src/scripts/check_estate_count.ts +122 -3
- package/src/scripts/check_preamble_payload_budget.ts +30 -3
- package/src/scripts/check_routing_coverage.ts +352 -0
- package/src/scripts/check_score_contract.ts +505 -0
- package/src/scripts/check_skill_admissions.ts +514 -0
- package/src/scripts/check_web_launch_readiness.ts +705 -0
- package/src/scripts/description_route_check.ts +494 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +29 -2
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/suggestion_capture_hook.ts +368 -0
- package/src/scripts/lint_budget_ownership.ts +54 -4
- package/src/scripts/lint_skill_trigger_corpus.ts +349 -0
- package/src/scripts/pack_install_smoke.ts +363 -0
- package/src/scripts/pr_conflict_census.ts +187 -0
- package/src/scripts/report_pack_delta.ts +204 -0
- package/src/scripts/select_analysis_mode.ts +112 -0
- package/src/scripts/sync_pr_branch.ts +40 -1
- package/src/server/schemas/settings.ts +5 -0
- package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +0 -15
- package/dist/agent-src/skills/agent-security-review/evals/triggers.json +0 -52
- package/dist/agent-src/skills/ai-code-blindspots/evals/triggers.json +0 -52
- package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +0 -17
- package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +0 -13
- package/dist/agent-src/skills/brand/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-audit/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-identity/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-strategy/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +0 -17
- package/dist/agent-src/skills/bug-analyzer/evals/evals.json +0 -13
- package/dist/agent-src/skills/canvas-design/evals/triggers.json +0 -17
- package/dist/agent-src/skills/character-consistency/evals/evals.json +0 -16
- package/dist/agent-src/skills/code-intelligence/evals/triggers.json +0 -52
- package/dist/agent-src/skills/code-review/evals/evals.json +0 -100
- package/dist/agent-src/skills/command-routing/evals/evals.json +0 -14
- package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +0 -17
- package/dist/agent-src/skills/contract-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +0 -15
- package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +0 -17
- package/dist/agent-src/skills/dashboard-design/evals/evals.json +0 -16
- package/dist/agent-src/skills/dcf-modeling/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/dcf-modeling/evals/evals.json +0 -20
- package/dist/agent-src/skills/decision-record/evals/evals.json +0 -20
- package/dist/agent-src/skills/decision-record/evals/triggers.json +0 -87
- package/dist/agent-src/skills/design-intelligence/evals/evals.json +0 -14
- package/dist/agent-src/skills/design-intelligence/evals/triggers.json +0 -17
- package/dist/agent-src/skills/design-system-capture/evals/evals.json +0 -15
- package/dist/agent-src/skills/design-tokens/evals/triggers.json +0 -17
- package/dist/agent-src/skills/design-variations/evals/triggers.json +0 -17
- package/dist/agent-src/skills/developer-like-execution/evals/evals.json +0 -16
- package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +0 -16
- package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +0 -17
- package/dist/agent-src/skills/docx-authoring/evals/triggers.json +0 -52
- package/dist/agent-src/skills/dpa-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/editorial-calendar/evals/evals.json +0 -16
- package/dist/agent-src/skills/eloquent/evals/triggers.json +0 -17
- package/dist/agent-src/skills/estimate-ticket/evals/evals.json +0 -16
- package/dist/agent-src/skills/estimate-ticket/evals/output-schema.yml +0 -20
- package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +0 -19
- package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +0 -52
- package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +0 -47
- package/dist/agent-src/skills/experiment-loop/evals/output-schema.yml +0 -27
- package/dist/agent-src/skills/experiment-loop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/fe-design/evals/triggers.json +0 -67
- package/dist/agent-src/skills/forecasting/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/forecasting/evals/evals.json +0 -20
- package/dist/agent-src/skills/forensics-report/evals/triggers.json +0 -17
- package/dist/agent-src/skills/frontend-render-security/evals/triggers.json +0 -52
- package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +0 -16
- package/dist/agent-src/skills/gated-reach/evals/triggers.json +0 -72
- package/dist/agent-src/skills/github-ci/evals/evals.json +0 -25
- package/dist/agent-src/skills/history-design/evals/triggers.json +0 -17
- package/dist/agent-src/skills/html-deck/evals/triggers.json +0 -17
- package/dist/agent-src/skills/humanizer/evals/strip_fixtures.json +0 -57
- package/dist/agent-src/skills/humanizer/evals/triggers.json +0 -17
- package/dist/agent-src/skills/iconography/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-analyser/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-creator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-editing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/incident-commander/evals/evals.json +0 -20
- package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-artifact-completeness/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-injection-defense/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-synthesis/evals/triggers.json +0 -17
- package/dist/agent-src/skills/launch-readiness/evals/evals.json +0 -21
- package/dist/agent-src/skills/learning-tutor/evals/triggers.json +0 -52
- package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +0 -17
- package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +0 -17
- package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +0 -52
- package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +0 -52
- package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +0 -52
- package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +0 -20
- package/dist/agent-src/skills/logging-monitoring/evals/evals.json +0 -16
- package/dist/agent-src/skills/logo-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/messaging-architecture/evals/evals.json +0 -16
- package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +0 -17
- package/dist/agent-src/skills/nda-triage/evals/triggers.json +0 -17
- package/dist/agent-src/skills/operational-readiness/evals/triggers.json +0 -17
- package/dist/agent-src/skills/pdf-tools/evals/triggers.json +0 -52
- package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +0 -16
- package/dist/agent-src/skills/persona-improvement/evals/triggers.json +0 -52
- package/dist/agent-src/skills/php-coder/evals/triggers.json +0 -17
- package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +0 -21
- package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +0 -17
- package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +0 -16
- package/dist/agent-src/skills/prompt-validator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/quality-tools/evals/evals.json +0 -15
- package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/refine-prompt/evals/evals.json +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/evals.json +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/output-schema.yml +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/triggers.json +0 -17
- package/dist/agent-src/skills/release-comms/evals/evals.json +0 -16
- package/dist/agent-src/skills/rice-prioritization/evals/evals.json +0 -20
- package/dist/agent-src/skills/runway-cognition/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/runway-cognition/evals/evals.json +0 -20
- package/dist/agent-src/skills/scenario-modeling/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/scenario-modeling/evals/evals.json +0 -20
- package/dist/agent-src/skills/schema-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +0 -52
- package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +0 -52
- package/dist/agent-src/skills/server-hardening/evals/triggers.json +0 -17
- package/dist/agent-src/skills/skill-writing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +0 -47
- package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +0 -60
- package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +0 -52
- package/dist/agent-src/skills/systematic-debugging/evals/evals.json +0 -20
- package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +0 -52
- package/dist/agent-src/skills/test-driven-development/evals/evals.json +0 -16
- package/dist/agent-src/skills/threat-modeling/evals/evals.json +0 -21
- package/dist/agent-src/skills/typography-system/evals/evals.json +0 -14
- package/dist/agent-src/skills/typography-system/evals/triggers.json +0 -17
- package/dist/agent-src/skills/unit-economics-modeling/evals/domain-truth.json +0 -40
- package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +0 -24
- package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +0 -16
- package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +0 -20
- package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/vision-articulation/evals/evals.json +0 -16
- package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +0 -16
- package/dist/agent-src/skills/wireframe/evals/triggers.json +0 -17
- package/dist/agent-src/skills/workspace-link/evals/triggers.json +0 -17
- package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +0 -38
- package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +0 -52
- package/dist/cli/agent-config.js.map +0 -1
- package/dist/cli/bash/runBash.js.map +0 -1
- package/dist/cli/commands/commands.js.map +0 -1
- package/dist/cli/commands/config.js.map +0 -1
- package/dist/cli/commands/doctorShell.js.map +0 -1
- package/dist/cli/commands/mcpServer.js.map +0 -1
- package/dist/cli/commands/packs.js.map +0 -1
- package/dist/cli/commands/profiles.js.map +0 -1
- package/dist/cli/commands/recordTriggerEval.js.map +0 -1
- package/dist/cli/commands/rtkDetect.js.map +0 -1
- package/dist/cli/commands/settings.js.map +0 -1
- package/dist/cli/commands/uiAudit.js.map +0 -1
- package/dist/cli/commands/uiRender.js.map +0 -1
- package/dist/cli/commands/uiServe.js.map +0 -1
- package/dist/cli/commands/versions.js.map +0 -1
- package/dist/cli/commands/workspaces.js.map +0 -1
- package/dist/cli/configRoot.js.map +0 -1
- package/dist/cli/discovery/loadManifest.js.map +0 -1
- package/dist/cli/firstRunNotice.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/initRouting.js.map +0 -1
- package/dist/cli/log/logger.js.map +0 -1
- package/dist/cli/main.js.map +0 -1
- package/dist/cli/mcp/content.js.map +0 -1
- package/dist/cli/mcp/dispatch.js.map +0 -1
- package/dist/cli/mcp/stdio.js.map +0 -1
- package/dist/cli/paths.js.map +0 -1
- package/dist/cli/python/knowledge_ingest.js.map +0 -1
- package/dist/cli/python/workspace_analytics.js.map +0 -1
- package/dist/cli/python/workspace_crypto.js.map +0 -1
- package/dist/cli/python/workspace_documents.js.map +0 -1
- package/dist/cli/python/workspace_drive.js.map +0 -1
- package/dist/cli/python/workspace_drive_health.js.map +0 -1
- package/dist/cli/python/workspace_explain.js.map +0 -1
- package/dist/cli/python/workspace_hosts.js.map +0 -1
- package/dist/cli/python/workspace_inbox.js.map +0 -1
- package/dist/cli/python/workspace_render.js.map +0 -1
- package/dist/cli/python/workspace_roles.js.map +0 -1
- package/dist/cli/python/workspace_secrets.js.map +0 -1
- package/dist/cli/python/workspace_sessions.js.map +0 -1
- package/dist/cli/python/workspace_skills.js.map +0 -1
- package/dist/cli/registry.js.map +0 -1
- package/dist/install/agentSwitchDetection.js.map +0 -1
- package/dist/install/agentSwitchProfile.js.map +0 -1
- package/dist/install/atomic.js.map +0 -1
- package/dist/install/claudePathsPlan.js.map +0 -1
- package/dist/install/conflict.js.map +0 -1
- package/dist/install/detect.js.map +0 -1
- package/dist/install/emit_host_rules_cli.js.map +0 -1
- package/dist/install/globalRuleLayers.js.map +0 -1
- package/dist/install/hostLayerFingerprint.js.map +0 -1
- package/dist/install/partitionEligibility.js.map +0 -1
- package/dist/install/paths.js.map +0 -1
- package/dist/install/plan.js.map +0 -1
- package/dist/install/preflight.js.map +0 -1
- package/dist/install/rtkDetection.js.map +0 -1
- package/dist/install/ruleInScope.js.map +0 -1
- package/dist/install/ruleLayerPartition.js.map +0 -1
- package/dist/install/rule_scope.js.map +0 -1
- package/dist/install/rule_scope_cli.js.map +0 -1
- package/dist/install/selectedTools.js.map +0 -1
- package/dist/install/toolDetection.js.map +0 -1
- package/dist/install/txlog.js.map +0 -1
- package/dist/install/types.js.map +0 -1
- package/dist/install/wizard-plan.js.map +0 -1
- package/dist/install/wizardDismissals.js.map +0 -1
- package/dist/scripts/_lib/agent_settings.js.map +0 -1
- package/dist/scripts/_lib/agent_src.js.map +0 -1
- package/dist/scripts/_lib/claude_builtin_names.js.map +0 -1
- package/dist/scripts/_lib/claude_plugin.js.map +0 -1
- package/dist/scripts/_lib/claude_settings_hooks.js.map +0 -1
- package/dist/scripts/_lib/compile_time_toggles.js.map +0 -1
- package/dist/scripts/_lib/environment_detector.js.map +0 -1
- package/dist/scripts/_lib/host_launch.js.map +0 -1
- package/dist/scripts/_lib/install_layout.js.map +0 -1
- package/dist/scripts/_lib/installed_lock.js.map +0 -1
- package/dist/scripts/_lib/lean_projection_mode.js.map +0 -1
- package/dist/scripts/_lib/model_tier.js.map +0 -1
- package/dist/scripts/_lib/prune_empty_dirs.js.map +0 -1
- package/dist/scripts/_lib/scoped_projection.js.map +0 -1
- package/dist/scripts/_lib/script_output.js.map +0 -1
- package/dist/scripts/_lib/spawn_env.js.map +0 -1
- package/dist/scripts/_lib/surface_tiers.js.map +0 -1
- package/dist/scripts/_lib/token_count.js.map +0 -1
- package/dist/scripts/_lib/trigger_eval_floors.js.map +0 -1
- package/dist/scripts/_lib/ui_surface.js.map +0 -1
- package/dist/scripts/_lib/user_global_paths.js.map +0 -1
- package/dist/scripts/ai_council/modes.js.map +0 -1
- package/dist/scripts/ai_council/transport_resolver.js.map +0 -1
- package/dist/scripts/condense.js.map +0 -1
- package/dist/scripts/project_thin_rules.js.map +0 -1
- package/dist/server/app.js.map +0 -1
- package/dist/server/io/atomicMultiWrite.js.map +0 -1
- package/dist/server/io/atomicWrite.js.map +0 -1
- package/dist/server/io/sharedWriteCheck.js.map +0 -1
- package/dist/server/io/substituteTemplate.js.map +0 -1
- package/dist/server/io/yamlIO.js.map +0 -1
- package/dist/server/nicknameResolver.js.map +0 -1
- package/dist/server/port.js.map +0 -1
- package/dist/server/routes/discovery.js.map +0 -1
- package/dist/server/routes/install.js.map +0 -1
- package/dist/server/routes/ping.js.map +0 -1
- package/dist/server/routes/schema.js.map +0 -1
- package/dist/server/routes/settings.js.map +0 -1
- package/dist/server/routes/settingsChanges.js.map +0 -1
- package/dist/server/routes/userMd.js.map +0 -1
- package/dist/server/routes/wizard.js.map +0 -1
- package/dist/server/routes/workspace.js.map +0 -1
- package/dist/server/schemas/settings.js.map +0 -1
- package/dist/server/serverInfo.js.map +0 -1
- package/dist/server/token.js.map +0 -1
- package/dist/server/writeRoot.js.map +0 -1
- package/dist/shared/capabilities.js.map +0 -1
- package/dist/shared/interactiveContext.js.map +0 -1
- package/dist/shared/nicknamePrefill.js.map +0 -1
- package/dist/shared/settingsAsks.js.map +0 -1
- package/dist/shared/settingsCarveOut.js.map +0 -1
- package/dist/shared/settingsClasses.js.map +0 -1
- package/dist/shared/settingsConsent.js.map +0 -1
- package/dist/shared/settingsSurface.js.map +0 -1
- package/dist/shared/skillRanking.js.map +0 -1
- package/dist/shared/userMd/formAdapter.js.map +0 -1
- package/dist/shared/userMd/schema.js.map +0 -1
- package/dist/shared/userMd/utils.js.map +0 -1
- package/dist/ui/assets/index-Cxgy63kz.js.map +0 -1
- package/src/scripts/_lib/adr_frontmatter.test.ts +0 -365
- package/src/scripts/_lib/adversarial_council_gate.test.ts +0 -112
- package/src/scripts/_lib/adversarial_reconcile.test.ts +0 -197
- package/src/scripts/_lib/auto_dispatch.corpus.test.ts +0 -150
- package/src/scripts/_lib/secret_detector.test.ts +0 -108
- package/src/scripts/_lib/secret_detector_adversarial.test.ts +0 -116
- package/src/scripts/_lib/ui_authority.test.ts +0 -251
- package/src/scripts/_lib/untrusted_content.test.ts +0 -175
- package/src/scripts/check_secret_leak.test.ts +0 -90
- package/src/scripts/design_slop_rules.test.ts +0 -246
- package/src/scripts/self_review_gate.test.ts +0 -296
- package/src/shared/capabilities.test.ts +0 -43
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml) [](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml) [](https://www.npmjs.com/package/@event4u/agent-config) [](https://glama.ai/mcp/servers/event4u-app/agent-config) [](https://mcptoplist.com/server/glama%2Fevent4u-app%2Fagent-config)
|
|
6
6
|
|
|
7
|
-
[](dist/agent-src/skills/) [](dist/agent-src/rules/) [](dist/agent-src/commands/) [](dist/agent-src/skills/) [](dist/agent-src/rules/) [](dist/agent-src/commands/) [](docs/guidelines/) [](dist/agent-src/personas/) [](dist/agent-src/personas/advisors/)
|
|
8
8
|
|
|
9
9
|
**Try it in 30 seconds** — drop one read-only subagent into any repo and watch it gate "done": `@production-validator check this branch is actually done`. No wizard, no lock-in, nothing else installed — the [30-second wedge ↓](#quickstart) is the whole first step. Start at the proof, not the catalog: **[event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/)**.
|
|
10
10
|
|
|
@@ -95,6 +95,32 @@ L0–L4 are human shorthand for how deep a discovery went; they are documentatio
|
|
|
95
95
|
only. The **same** evidence rules apply at every tier — no enforced state
|
|
96
96
|
machine, no per-tier evidence relaxation.
|
|
97
97
|
|
|
98
|
+
## Re-orient when the tree contradicts what you last read
|
|
99
|
+
|
|
100
|
+
External edits invalidate evidence. When the user mentions they changed something
|
|
101
|
+
outside this session, or a read contradicts the last known state of a file, the
|
|
102
|
+
prior observation is **stale, not wrong** — and acting on it overwrites work that
|
|
103
|
+
is not yours.
|
|
104
|
+
|
|
105
|
+
Five steps, in order:
|
|
106
|
+
|
|
107
|
+
1. Treat every prior observation of the affected paths as invalidated.
|
|
108
|
+
2. Re-read the state — `git status`, then the affected files themselves.
|
|
109
|
+
3. Reconstruct the assumption that broke. A file did not vanish; it was renamed,
|
|
110
|
+
a block moved, a symbol was extracted. Find where it went before concluding
|
|
111
|
+
it is gone.
|
|
112
|
+
4. Preserve the external work. Never restore from your own stale copy.
|
|
113
|
+
5. Say what changed if the scope or the conclusion moved, rather than
|
|
114
|
+
continuing as though the earlier reading still held.
|
|
115
|
+
|
|
116
|
+
The failure this prevents is narrower than "be careful": it is re-applying a
|
|
117
|
+
diff computed against a tree that no longer exists, which looks like a clean
|
|
118
|
+
apply and silently reverts somebody's edit.
|
|
119
|
+
|
|
120
|
+
**No gate covers this.** It is a re-read the transcript cannot distinguish from
|
|
121
|
+
a first read, so it is model-carried — the same honesty boundary § Honest
|
|
122
|
+
enforcement reality states for the rest of this file.
|
|
123
|
+
|
|
98
124
|
## Honest enforcement reality
|
|
99
125
|
|
|
100
126
|
```
|
|
@@ -28,8 +28,51 @@ Do NOT use when:
|
|
|
28
28
|
2. **Understand the scope** — what exactly needs to change and why?
|
|
29
29
|
3. **Find ALL references** — use `codebase-retrieval` and `view` with `search_query_regex` to find every
|
|
30
30
|
caller, implementation, test, and configuration that references the code being changed.
|
|
31
|
+
**If the change is to a closed set** — an enum, union, literal type, state
|
|
32
|
+
machine, role or permission set — identifier search is not enough: the
|
|
33
|
+
consumers that break are the ones that never name the type. Search by shape as
|
|
34
|
+
well (`switch` / `match` / if-chains over it, lookup tables keyed by it,
|
|
35
|
+
validators, serializers, schemas, fixtures, translation keys) and classify each
|
|
36
|
+
as exhaustive, deliberate fallback, or missing case. Procedure:
|
|
37
|
+
[`downstream-changes-mechanics`](../../../docs/guidelines/agent-infra/downstream-changes-mechanics.md).
|
|
31
38
|
4. **Map the impact** — create a list of all files that will need changes.
|
|
32
|
-
5. **
|
|
39
|
+
5. **Decide the verdict, if the refactor is a de-duplication** — see the
|
|
40
|
+
safe-abstraction gate below. An extraction with no recorded verdict is a
|
|
41
|
+
guess about whether two things are the same thing.
|
|
42
|
+
6. **Present the plan** — show the user what will be affected before starting.
|
|
43
|
+
|
|
44
|
+
### Safe-abstraction gate — before merging two things into one
|
|
45
|
+
|
|
46
|
+
This skill performs extractions; it is therefore the place that decides
|
|
47
|
+
whether one should happen. A wrong abstraction costs more than the
|
|
48
|
+
duplication it replaced, because the duplication is visible and the wrong
|
|
49
|
+
abstraction grows caller flags until nobody can remove it. Ask, before
|
|
50
|
+
moving any code:
|
|
51
|
+
|
|
52
|
+
1. Is this the same knowledge, or two facts that currently look alike?
|
|
53
|
+
2. Would both copies change for the same reason?
|
|
54
|
+
3. Is there one honest domain name that fits **every** call site?
|
|
55
|
+
4. Can the common core stay free of caller-specific flags and modes?
|
|
56
|
+
5. Are public contracts preserved, and do tests prove behavioural equivalence?
|
|
57
|
+
6. **If the two copies diverged tomorrow, would that be a defect or
|
|
58
|
+
legitimate evolution?**
|
|
59
|
+
|
|
60
|
+
A "legitimate evolution" answer to the last question is decisive: stop, and
|
|
61
|
+
record the verdict `keep-duplicated`. That closes the refactor **successfully**
|
|
62
|
+
— so does `de-abstract`, splitting a shared unit that has grown modes back
|
|
63
|
+
apart. Neither is a failure to act, and neither needs an apology in the
|
|
64
|
+
output. Textual similarity is not evidence of shared knowledge: copies that
|
|
65
|
+
read identically can encode different assumptions, and merging them changes
|
|
66
|
+
behaviour silently.
|
|
67
|
+
|
|
68
|
+
The class names and the full verdict list are in
|
|
69
|
+
[`redundancy-taxonomy`](../../../docs/guidelines/redundancy-taxonomy.md).
|
|
70
|
+
|
|
71
|
+
When the refactor goes the other way and **creates** a new unit, the reuse
|
|
72
|
+
question comes first: does an existing class or component already cover this, and
|
|
73
|
+
what does composing or extending it cost against a new one? Thresholds per
|
|
74
|
+
artifact class:
|
|
75
|
+
[`component-oriented-and-oop-development`](../../../docs/guidelines/component-oriented-and-oop-development.md).
|
|
33
76
|
|
|
34
77
|
## Procedure: Refactor code
|
|
35
78
|
|
|
@@ -140,6 +183,7 @@ After the code changes are verified, update all affected documentation:
|
|
|
140
183
|
1. Find all usages → update all usages → update docs → run the static analyser → run tests.
|
|
141
184
|
|
|
142
185
|
### Extract method / class
|
|
186
|
+
0. Run the safe-abstraction gate above — a `keep-duplicated` verdict ends it here.
|
|
143
187
|
1. Create the new method/class → move logic → update caller → update docs → run the static analyser → run tests.
|
|
144
188
|
|
|
145
189
|
### Move class to different namespace
|
|
@@ -37,11 +37,70 @@ Use this skill when:
|
|
|
37
37
|
2. **Detect the change-type + depth** — route to the right checklist and pick the review depth (below).
|
|
38
38
|
3. **Architecture** — does the approach make sense? Right layer? Right pattern?
|
|
39
39
|
4. **Correctness** — does it actually work? Edge cases? Error handling?
|
|
40
|
-
5. **Quality** — types, naming, readability,
|
|
41
|
-
6. **
|
|
42
|
-
7. **
|
|
43
|
-
8. **
|
|
44
|
-
9. **
|
|
40
|
+
5. **Quality** — types, naming, readability, SOLID?
|
|
41
|
+
6. **Redundancy** — see below; a verdict, not a "this looks duplicated".
|
|
42
|
+
7. **Propagation** — did a changed concept reach every occurrence? see below.
|
|
43
|
+
8. **Security** — input validation, authorization, injection?
|
|
44
|
+
9. **Performance** — N+1 queries, missing indexes, unbounded queries?
|
|
45
|
+
10. **Tests** — are new paths covered? Are existing tests still valid?
|
|
46
|
+
11. **Conventions** — does it follow project standards?
|
|
47
|
+
|
|
48
|
+
## The redundancy dimension
|
|
49
|
+
|
|
50
|
+
`DRY` as a checklist word produced findings nobody could act on: it names a
|
|
51
|
+
principle, not a decision, and it has no answer for the case where two copies
|
|
52
|
+
should stay. Replace it with a verdict.
|
|
53
|
+
|
|
54
|
+
Classify the finding against
|
|
55
|
+
[`redundancy-taxonomy`](../../../docs/guidelines/redundancy-taxonomy.md) —
|
|
56
|
+
implementation, knowledge, or representation — and record one verdict from that
|
|
57
|
+
document's list. `keep-duplicated` and `de-abstract` are successful outcomes; a
|
|
58
|
+
finding with no recorded verdict stays open. Knowledge, policy, contract and
|
|
59
|
+
delivery-authority duplication outrank clone percentage: two copies of a
|
|
60
|
+
*decision* diverge into a bug, two copies of a loop usually do not.
|
|
61
|
+
|
|
62
|
+
**Diff-aware, always.** The finding is duplication this change **introduces**,
|
|
63
|
+
or duplication on a surface it touches. Pre-existing duplication is baseline —
|
|
64
|
+
it is named once if the reviewer thinks it matters and it never fails an
|
|
65
|
+
unrelated change. A review that reds a diff against debt it did not create is a
|
|
66
|
+
review nobody will run twice.
|
|
67
|
+
|
|
68
|
+
For comments, labels, tooltips, placeholders and empty states, run the
|
|
69
|
+
Information Delta Test from the same document rather than judging text volume.
|
|
70
|
+
A reduction that removes an accessibility name is a defect, not a cleanup.
|
|
71
|
+
|
|
72
|
+
Naming is the same dimension pointed the other way: a diff that introduces a
|
|
73
|
+
second term for a concept the tree already names is the finding, and an existing
|
|
74
|
+
split is baseline. The classes and the `canonicalize-term` / `keep-distinct`
|
|
75
|
+
verdicts are in the same document.
|
|
76
|
+
|
|
77
|
+
## The propagation dimension
|
|
78
|
+
|
|
79
|
+
A change is complete when the **concept** changed everywhere, not when the named
|
|
80
|
+
file compiles. Two shapes to check, both of which the file-level review misses:
|
|
81
|
+
|
|
82
|
+
**A closed set gained or lost a member** (enum, union, literal type, state
|
|
83
|
+
machine, role or permission set, schema `enum`, DB check constraint). List the
|
|
84
|
+
consumers and their status — every `switch` / `match` / if-chain over the type,
|
|
85
|
+
every lookup table keyed by it, every validator, serializer, schema, fixture and
|
|
86
|
+
translation key. A `default` branch that silently absorbs the new member is a
|
|
87
|
+
missing case, not a handled one. Procedure:
|
|
88
|
+
[`downstream-changes-mechanics`](../../../docs/guidelines/agent-infra/downstream-changes-mechanics.md).
|
|
89
|
+
|
|
90
|
+
**A shared behaviour moved and its siblings did not.** A defect fixed in one
|
|
91
|
+
place is presumed to recur until searched: name the exact wrong construct, grep
|
|
92
|
+
the tree, and report the count — zero is a real answer and worth stating, because
|
|
93
|
+
it distinguishes "this was unique" from "nobody looked".
|
|
94
|
+
|
|
95
|
+
Diff-aware on the same terms as redundancy: the finding is a concept **this
|
|
96
|
+
change** left half-migrated. Pre-existing incompleteness elsewhere is baseline.
|
|
97
|
+
|
|
98
|
+
When the diff **creates** a class, component, service or hook rather than
|
|
99
|
+
changing one, the question is whether it needed to exist: what was searched,
|
|
100
|
+
what was found, and why composing or extending the incumbent was rejected. An
|
|
101
|
+
answer, not a ceremony — and the thresholds for when repetition actually earns
|
|
102
|
+
an abstraction are in
|
|
103
|
+
[`component-oriented-and-oop-development`](../../../docs/guidelines/component-oriented-and-oop-development.md).
|
|
45
104
|
|
|
46
105
|
## Change-type routing — load only the checklist the diff needs
|
|
47
106
|
|
|
@@ -113,7 +172,7 @@ coverage reads as full coverage.
|
|
|
113
172
|
the package implements it. That is now true for a recorded reason rather than by
|
|
114
173
|
omission: the pre-registered question — does rotating reviewer order change the finding set
|
|
115
174
|
on a frozen corpus, by more than 15 % — **cannot be answered from the corpus that exists**.
|
|
116
|
-
`agents/evidence/reviews/` holds 123 findings
|
|
175
|
+
`agents/evidence/reviews/` holds 123 findings artifacts, and none of them records the file
|
|
117
176
|
order it was produced under, so the counterfactual is not recoverable; re-running reviewers
|
|
118
177
|
produces fresh judgements in which ordering is confounded with run-to-run variance. Full
|
|
119
178
|
null, with its reopening condition: `agents/evidence/review-rotation-prereg-and-null.md`.
|
|
@@ -305,6 +305,41 @@ Bad description (vague, no outcome):
|
|
|
305
305
|
|
|
306
306
|
> "PR command"
|
|
307
307
|
|
|
308
|
+
## The `## Examples` section on a user-facing command
|
|
309
|
+
|
|
310
|
+
Stated once, here — never repeated per command.
|
|
311
|
+
|
|
312
|
+
A command whose `visibility` is `visible` or `advanced` carries an
|
|
313
|
+
`## Examples` section: **1-3 filled invocations** in a fence, then **exactly
|
|
314
|
+
one Why line**. Filled means a real path, a real ticket key, a real flag — a
|
|
315
|
+
placeholder teaches nothing about what to type.
|
|
316
|
+
|
|
317
|
+
The Why line uses one of two literals, `**Why it works:**` or a
|
|
318
|
+
`### Why it works` heading, and cites **exactly one** pattern id from
|
|
319
|
+
[`prompt-patterns.yml`](../../config/discovery/prompt-patterns.yml):
|
|
320
|
+
`outcome-not-steps` · `self-check-loop` · `measurable-target` ·
|
|
321
|
+
`give-the-artifact` · `point-at-reference` · `say-the-format`. One id, because
|
|
322
|
+
the Why line's job is the part that transfers to a command the reader has not
|
|
323
|
+
seen, and a line naming three patterns names none of them.
|
|
324
|
+
|
|
325
|
+
~~~
|
|
326
|
+
## Examples
|
|
327
|
+
|
|
328
|
+
```
|
|
329
|
+
/work fix the failing login test under tests/feature/auth
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
**Why it works:** measurable-target — it names the file instead of the symptom.
|
|
333
|
+
~~~
|
|
334
|
+
|
|
335
|
+
Enforced by `check_command_examples`, forward-only: the 23 in-scope commands as
|
|
336
|
+
of 2026-08-24 are grandfathered in a frozen set inside the gate, and a command
|
|
337
|
+
**added or promoted into `visible`/`advanced`** after that must comply. Two
|
|
338
|
+
things the gate checks that are easy to miss — an invocation must resolve to
|
|
339
|
+
the command's own `name:` (a rename otherwise leaves stale examples behind), and
|
|
340
|
+
a flag used in an example must be documented in the body **outside** the
|
|
341
|
+
section.
|
|
342
|
+
|
|
308
343
|
## Encode usage policy in the description
|
|
309
344
|
|
|
310
345
|
Workflow sequencing, preconditions, ID/output provenance ("copy ids verbatim,
|
|
@@ -100,7 +100,8 @@ Write into `state.ui_audit.design_tokens` (object, never null — empty object i
|
|
|
100
100
|
|
|
101
101
|
| Source | What to extract |
|
|
102
102
|
|---|---|
|
|
103
|
-
| `tailwind.config.{js,ts,cjs,mjs}` | `theme.colors`, `theme.spacing`, `theme.fontFamily`, `theme.extend.*` |
|
|
103
|
+
| **`tailwind-v3`** (`axes.css`) — `tailwind.config.{js,ts,cjs,mjs}` | `theme.colors`, `theme.spacing`, `theme.fontFamily`, `theme.extend.*` |
|
|
104
|
+
| **`tailwind-v4`** (`axes.css`) — the `@theme` block in the entry CSS; **no config file exists**, and `components.json` `"tailwind": {"config": ""}` is the marker | every `--token: value` declared inside `@theme` / `@theme inline` |
|
|
104
105
|
| `:root { --... }` blocks in `resources/css/`, `app/globals.css`, `src/app/globals.css` | every `--token-name: value` pair |
|
|
105
106
|
| `theme.json` / `tokens.json` (any depth) | flat or nested token tree |
|
|
106
107
|
| `app/css/variables.css`, `assets/scss/_tokens.scss` | SCSS `$var: value` and CSS custom properties |
|
|
@@ -109,6 +110,12 @@ Write into `state.ui_audit.design_tokens` (object, never null — empty object i
|
|
|
109
110
|
|
|
110
111
|
Group output by category: `colors`, `spacing`, `radius`, `font`, `shadow`, `breakpoint`, `other`.
|
|
111
112
|
|
|
113
|
+
**Branch on the axis, do not probe for a config file.** `detect_stack()` emits
|
|
114
|
+
`axes.css` as `tailwind-v3` or `tailwind-v4`
|
|
115
|
+
(`work_engine/stack/detect.ts:521-524`); reading it is how this step and
|
|
116
|
+
`react-shadcn-ui` § Gotcha stay on the same key. Absence of
|
|
117
|
+
`tailwind.config.*` is v4's normal state, never a missing file.
|
|
118
|
+
|
|
112
119
|
**Artifact-sourced tokens stay distinguishable from project tokens.** Every
|
|
113
120
|
group carries a `source` — `project` for the first four rows, `artifact` for the
|
|
114
121
|
last two — because the mapping between them is the thing a port has to keep
|
|
@@ -129,6 +129,29 @@ Check:
|
|
|
129
129
|
6. Known uncertainties
|
|
130
130
|
7. Recommended next specialist skill
|
|
131
131
|
|
|
132
|
+
## Improvement mode — check for an existing artefact first
|
|
133
|
+
|
|
134
|
+
Before a full analysis, ask whether this target has already been analysed:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
npx tsx node_modules/@event4u/agent-config/src/scripts/select_analysis_mode.ts "<target>"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`full` → run steps 1-8 as written. `delta` → **read the named artefact first**,
|
|
141
|
+
then analyse only what it does not cover: gaps, sections the tree has moved past,
|
|
142
|
+
patterns that are new since it was written. The output format is unchanged; the
|
|
143
|
+
reading is narrower.
|
|
144
|
+
|
|
145
|
+
This changes **write economics only**. A concept page is a hypothesis cache,
|
|
146
|
+
never truth — the delta path re-verifies every structural claim it carries
|
|
147
|
+
forward against a live source, exactly as a full run would
|
|
148
|
+
([`source-discovery-gate`](../../rules/source-discovery-gate.md) § v1↔v2
|
|
149
|
+
isolation). A cheaper write is not a licence to trust a cached read, and
|
|
150
|
+
"the page already says so" is not evidence.
|
|
151
|
+
|
|
152
|
+
An empty page counts as absent: it carries no conclusions to delta against, so
|
|
153
|
+
the router answers `full`.
|
|
154
|
+
|
|
132
155
|
## Knowledge capture (`convention_detected` events)
|
|
133
156
|
|
|
134
157
|
An architecture map or stack finding that recurs (a naming convention,
|
|
@@ -54,7 +54,14 @@ block above:
|
|
|
54
54
|
|
|
55
55
|
## Compatibility
|
|
56
56
|
|
|
57
|
-
- **Tested against:** `shadcn@
|
|
57
|
+
- **Tested against:** `shadcn@4`, Tailwind CSS `4.x`, React `19`, primitives from
|
|
58
|
+
`@base-ui/react@1`, `components.json` style `base-nova` — every major read out
|
|
59
|
+
of `tests/fixtures/stack/shadcn-current/package.json`, the verbatim output of
|
|
60
|
+
`npx shadcn@latest init -d --template vite` on 2026-08-24. No version on this
|
|
61
|
+
line may be stated from prose; move it only by re-running that scaffold and
|
|
62
|
+
re-committing the fixture.
|
|
63
|
+
- Tailwind `3.x` and Radix primitives stay supported through the **v3 branch**
|
|
64
|
+
under § Gotcha — the CLI moved on, existing projects did not.
|
|
58
65
|
- The audit step (`directives/ui/audit.ts`) reads the line above and
|
|
59
66
|
compares it with `state.ui_audit.shadcn_inventory.version`; a major
|
|
60
67
|
mismatch triggers a soft halt before this skill runs.
|
|
@@ -63,8 +70,8 @@ block above:
|
|
|
63
70
|
|
|
64
71
|
Use when `state.stack.frontend == "react-shadcn"` and `directives/ui/apply.ts`,
|
|
65
72
|
`review.ts`, or `polish.ts` dispatches to this skill, or when a React project
|
|
66
|
-
clearly uses shadcn/ui (presence of `components.json`, `@
|
|
67
|
-
|
|
73
|
+
clearly uses shadcn/ui (presence of `components.json`, a `@base-ui/react` or
|
|
74
|
+
`@radix-ui/*` dependency, a `components/ui/` folder of generated primitives).
|
|
68
75
|
|
|
69
76
|
Do NOT use when:
|
|
70
77
|
- Project is Blade + Livewire + Flux (use `flux` / `livewire` / `blade-ui`).
|
|
@@ -82,13 +89,23 @@ Do NOT use when:
|
|
|
82
89
|
writes `state.ui_audit.shadcn_inventory` with the detected version —
|
|
83
90
|
when it diverges by a major, audit emits a soft halt before this
|
|
84
91
|
skill runs.
|
|
85
|
-
- shadcn/ui composes
|
|
86
|
-
|
|
92
|
+
- shadcn/ui composes a primitive vendor — `@base-ui/react` in a CLI-4 scaffold,
|
|
93
|
+
`@radix-ui/*` in older projects. Accessibility is built in either way, but
|
|
94
|
+
only when the wrapper components are used correctly (`asChild`,
|
|
87
95
|
`<DialogTrigger>` instead of a bare `<button>`).
|
|
88
|
-
- Tailwind tokens
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
96
|
+
- **Tailwind tokens: branch on the `css` axis, never guess.** `detect_stack()`
|
|
97
|
+
emits `axes.css` as `tailwind-v4` or `tailwind-v3`
|
|
98
|
+
(`work_engine/stack/detect.ts:521-524`); `existing-ui-audit` reads tokens on
|
|
99
|
+
the same key.
|
|
100
|
+
- `tailwind-v4` — **no config file exists.** Tokens live in the `@theme` block
|
|
101
|
+
of the entry CSS named by `components.json` → `tailwind.css`, and that file's
|
|
102
|
+
`"tailwind": {"config": ""}` — an empty `config` string — IS the v4 marker.
|
|
103
|
+
Never write `tailwind.config.{js,ts}` in a v4 project.
|
|
104
|
+
- `tailwind-v3` — tokens come from `tailwind.config.{js,ts}`
|
|
105
|
+
(`theme.extend.colors`).
|
|
106
|
+
- Either branch — CSS custom properties on `:root` and `.dark`
|
|
107
|
+
(`--background`, `--foreground`, `--primary`, `--ring`, …). Audit writes them
|
|
108
|
+
into `state.ui_audit.design_tokens`. Use those tokens; never hardcode values.
|
|
92
109
|
- Dark mode is class-based (`<html class="dark">`). Every color must come
|
|
93
110
|
from `bg-background`, `text-foreground`, etc. — never raw `bg-white`.
|
|
94
111
|
- Every interactive primitive must declare a focus-visible state via
|
|
@@ -243,12 +260,12 @@ this over a registry file.
|
|
|
243
260
|
`bg-primary text-primary-foreground`, `text-muted-foreground`. No
|
|
244
261
|
`bg-white` / `text-black` / hardcoded `#fff`.
|
|
245
262
|
2. Spacing / radius from theme tokens (`rounded-lg` mapped to `--radius`
|
|
246
|
-
in `tailwind.config.{js,ts}`
|
|
247
|
-
when a token
|
|
263
|
+
— in the `@theme` block on `tailwind-v4`, in `tailwind.config.{js,ts}` on
|
|
264
|
+
`tailwind-v3`). Polish refactors hardcoded values when a token exists.
|
|
248
265
|
3. Dark mode: never branch on a `dark` prop; rely on the `.dark` class
|
|
249
266
|
on the root and semantic tokens.
|
|
250
267
|
4. Every interactive primitive: keyboard trigger present (Enter/Space
|
|
251
|
-
on buttons, Esc on dialogs —
|
|
268
|
+
on buttons, Esc on dialogs — free from the primitive vendor), focus ring,
|
|
252
269
|
`aria-label` from `state.ui_design.a11y` when icon-only.
|
|
253
270
|
|
|
254
271
|
### Step 3: State coverage
|
|
@@ -22,8 +22,9 @@ rule. Skip only on explicit *"just do it"* bypass or trivial edits
|
|
|
22
22
|
### 0b. Skill-growth gate (new skill only)
|
|
23
23
|
|
|
24
24
|
The skill count keeps climbing; nothing forces *"should this be a new skill at
|
|
25
|
-
all?"*. Before creating a **new** skill, answer these in the
|
|
26
|
-
skill
|
|
25
|
+
all?"*. Before creating a **new** skill, answer these **in the ledger**,
|
|
26
|
+
`agents/decisions/skill-admissions.jsonl` — a new skill that cannot answer them
|
|
27
|
+
is a merge / guideline / no-op in disguise:
|
|
27
28
|
|
|
28
29
|
1. **Family** — which capability family does it join? (engineering, product, …)
|
|
29
30
|
2. **Capability** — what does it do that no existing skill does? Name the gap.
|
|
@@ -31,6 +32,27 @@ skill that cannot answer them is a merge / guideline / no-op in disguise:
|
|
|
31
32
|
4. **Why not a guideline** — is this executable workflow (skill) or reference material (guideline)? Guideline-shaped content does not become a skill.
|
|
32
33
|
5. **Visibility tier** — `core` or `lab`? Which pack?
|
|
33
34
|
|
|
35
|
+
**The answers go in the ledger, not in the PR body.** That used to say PR body,
|
|
36
|
+
and `check_finding_dispositions.ts:11` rejects that exact surface for findings in
|
|
37
|
+
its own words — a comment is *"mutable and unaudited; it is transport, not a
|
|
38
|
+
record"*. The consequence was measurable: **+8 skills landed in one release with
|
|
39
|
+
no visible "no"**, because a refusal kept in a PR body is a refusal nobody can
|
|
40
|
+
grep. One line, appended:
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{"skill":"<name>","decision":"admitted","date":"YYYY-MM-DD","family":"…","capability":"…","why_not_extend":"…","why_not_a_guideline":"…","visibility":"…"}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
`check_skill_admissions` is forward-only: it requires a row only for skills added
|
|
47
|
+
since the base ref, so nothing existing needs backfilling. It rejects an answer
|
|
48
|
+
under 12 characters, because a one-word answer is the boilerplate the gate exists
|
|
49
|
+
to catch rather than an answer.
|
|
50
|
+
|
|
51
|
+
**A refusal is a row too**, and that is the half the PR body lost:
|
|
52
|
+
`{"skill":"…","decision":"rejected","date":"…","instead":"…"}`. A rejected row may
|
|
53
|
+
not name a skill that exists — a record saying a capability was refused while it
|
|
54
|
+
ships is worse than no record.
|
|
55
|
+
|
|
34
56
|
**Surface overlap before deciding** — run `./scripts-run src/scripts/skill_overlap`
|
|
35
57
|
(or `audit_skill_overlap`) and read the nearest matches; a high-overlap hit is a
|
|
36
58
|
merge signal, not a green light. This gate is the authoring-time companion to the
|
|
@@ -131,6 +131,15 @@ that file, which is the one thing a static checker must not start doing.
|
|
|
131
131
|
|
|
132
132
|
## MCP path — opt-in channel, never a dependency
|
|
133
133
|
|
|
134
|
+
**"Opt-in" is about the agent connecting, not about installing.** A 2026-08-24
|
|
135
|
+
`npx storybook@latest init --yes` scaffold ships `@storybook/addon-mcp` *and*
|
|
136
|
+
`@storybook/addon-a11y` in `devDependencies` by default — recorded verbatim in
|
|
137
|
+
`tests/fixtures/stack/storybook-current/`, which is also the only source any
|
|
138
|
+
Storybook major stated here may come from (`storybook@^10.5.10`). So the addon
|
|
139
|
+
usually already exists; what stays optional is whether an agent reaches a
|
|
140
|
+
running instance. The same scaffold prints *"installed but is not entirely set
|
|
141
|
+
up yet"*, so its presence is not evidence the channel works.
|
|
142
|
+
|
|
134
143
|
When the project has `@storybook/addon-mcp` **and** a running Storybook,
|
|
135
144
|
[`existing-ui-audit`](../existing-ui-audit/SKILL.md) prefers the live tools —
|
|
136
145
|
`list-all-documentation`, then `get-documentation` for the components that matter — over the
|
|
@@ -68,6 +68,14 @@ still exists in the tree. Absent or empty → fall through to
|
|
|
68
68
|
|
|
69
69
|
Then review existing components in the codebase for the same
|
|
70
70
|
responsibility — extend rather than rebuild when a match is found.
|
|
71
|
+
|
|
72
|
+
**A new component's workshop is part of its design, on every React lane and not
|
|
73
|
+
only `react-shadcn`.** When the extraction is agreed, the story set comes from
|
|
74
|
+
[`storybook-workshop`](../storybook-workshop/SKILL.md) — one story per concept
|
|
75
|
+
off the state-coverage matrix below, which is what makes the component
|
|
76
|
+
agent-readable and its contrast floor checkable before it reaches a page. That
|
|
77
|
+
skill is stack-agnostic and ships in `engineering-base`, so a plain-`react`
|
|
78
|
+
project receives it exactly as a `react-shadcn` one does.
|
|
71
79
|
If none exists, write the new component's purpose: *"Renders a
|
|
72
80
|
labelled input with inline error and hint."* If the sentence has an
|
|
73
81
|
"and" joining two unrelated jobs, the component is two components.
|
|
@@ -39,7 +39,7 @@ schema_version: 1
|
|
|
39
39
|
# CI guard: a release bump of `package.json` must update this value
|
|
40
40
|
# in lockstep — see scripts/check_template_pin_drift.ts (road-to-
|
|
41
41
|
# portable-runtime-and-update-check P3.3).
|
|
42
|
-
agent_config_version: "14.
|
|
42
|
+
agent_config_version: "14.12.0"
|
|
43
43
|
|
|
44
44
|
# --- Project identity ---
|
|
45
45
|
project:
|
|
@@ -4549,6 +4549,11 @@ var settingsSchema = external_exports.object({
|
|
|
4549
4549
|
enabled: external_exports.boolean().default(false).describe(
|
|
4550
4550
|
"PreToolUse code-graph nudge (ADR-124 Phase 4). Default off. When on AND a native code-graph cache or a consumer-shipped graph.json/SCIP index is present, warns once per session (never blocks) as the agent is about to Grep/Glob or Read a source file \u2014 query the graph first for who-calls/where-used/impact questions (or rebuild if stale, build if absent). Source G\u2019s strict block-first-read mode is deliberately un-ported."
|
|
4551
4551
|
)
|
|
4552
|
+
}).default({}),
|
|
4553
|
+
suggestion_capture: external_exports.object({
|
|
4554
|
+
enabled: external_exports.boolean().default(false).describe(
|
|
4555
|
+
'Suggestion-block capture (road-to-suggestion-block-capture Phase 2). Default off. Two slots: `stop` reads `last_assistant_message` \u2014 a payload field, so no transcript file is read \u2014 and latches that the assistant turn carried a numbered-options block; `user_prompt_submit` CONSUMES that latch and classifies the answering turn as option_n / as_is / other / stale_block. Consume-once is the correctness guard: the latch is deleted on read, so a bare "1" three turns later meets no latch and classifies `other`, and a latch past its TTL or unparseable is `stale_block` rather than a guess. Writes COUNTS ONLY to agents/runtime/state/audit/suggestion-capture.jsonl \u2014 the record type has no field able to hold a prompt, an option label or a command name, and a test asserts the written key set against src/config/suggestion-capture.json. Off by default because this is an INSTRUMENT rather than a feature: it exists so a capture rate can be measured on a maintainer workspace over a fixed soak window, and there is nothing in it for a consumer to gain.'
|
|
4556
|
+
)
|
|
4552
4557
|
}).default({})
|
|
4553
4558
|
// `turn_end_gate` is deliberately ABSENT. The stop-slot turn-end gate is
|
|
4554
4559
|
// always armed (2026-08-12) and has no settings surface: whether it
|
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
KIRO_MARKER,
|
|
10
10
|
ROOCODE_MARKER,
|
|
11
11
|
ZED_MARKER
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-JJA2QEWA.js";
|
|
13
|
+
import "./chunk-JCW7ZLHK.js";
|
|
14
14
|
import "./chunk-6RJA2F5A.js";
|
|
15
15
|
import "./chunk-WOKWX5PL.js";
|
|
16
16
|
import "./chunk-523HCFYO.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
PROJECT_BRIDGE_MARKERS
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-JJA2QEWA.js";
|
|
5
|
+
import "./chunk-JCW7ZLHK.js";
|
|
6
6
|
import "./chunk-6RJA2F5A.js";
|
|
7
7
|
import "./chunk-WOKWX5PL.js";
|
|
8
8
|
import "./chunk-523HCFYO.js";
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
GLOBAL_AGENT_SETTINGS_PATH,
|
|
4
4
|
GLOBAL_USER_SETTINGS_PATH,
|
|
5
5
|
SETTINGS_FILE
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-JJA2QEWA.js";
|
|
7
|
+
import "./chunk-JCW7ZLHK.js";
|
|
8
8
|
import "./chunk-6RJA2F5A.js";
|
|
9
9
|
import "./chunk-WOKWX5PL.js";
|
|
10
10
|
import "./chunk-523HCFYO.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
main
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-JJA2QEWA.js";
|
|
5
|
+
import "./chunk-JCW7ZLHK.js";
|
|
6
6
|
import "./chunk-6RJA2F5A.js";
|
|
7
7
|
import "./chunk-WOKWX5PL.js";
|
|
8
8
|
import "./chunk-523HCFYO.js";
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
PROJECT_BRIDGE_MARKERS,
|
|
4
4
|
USER_SCOPE_PATHS,
|
|
5
5
|
subtract_pointers
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-JJA2QEWA.js";
|
|
7
|
+
import "./chunk-JCW7ZLHK.js";
|
|
8
8
|
import "./chunk-6RJA2F5A.js";
|
|
9
9
|
import "./chunk-WOKWX5PL.js";
|
|
10
10
|
import "./chunk-523HCFYO.js";
|
|
@@ -3,8 +3,8 @@ import { createRequire as __acCreateRequire } from 'node:module'; const require
|
|
|
3
3
|
import {
|
|
4
4
|
PROJECT_BRIDGE_MARKERS,
|
|
5
5
|
USER_SCOPE_PATHS
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-JJA2QEWA.js";
|
|
7
|
+
import "./chunk-JCW7ZLHK.js";
|
|
8
8
|
import "./chunk-6RJA2F5A.js";
|
|
9
9
|
import "./chunk-WOKWX5PL.js";
|
|
10
10
|
import "./chunk-523HCFYO.js";
|