@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
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
import { spawnSync } from 'node:child_process';
|
|
2
|
-
import * as fs from 'node:fs';
|
|
3
|
-
import * as os from 'node:os';
|
|
4
|
-
import * as path from 'node:path';
|
|
5
|
-
|
|
6
|
-
import { afterEach, describe, expect, it } from 'vitest';
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
LARGE_DIFF_LINES,
|
|
10
|
-
buildPlan,
|
|
11
|
-
classifyBlocking,
|
|
12
|
-
detectReleaseVersion,
|
|
13
|
-
escalationReasons,
|
|
14
|
-
gateVerdict,
|
|
15
|
-
isReviewablePath,
|
|
16
|
-
pickPreviousTag,
|
|
17
|
-
renderReview,
|
|
18
|
-
type Finding,
|
|
19
|
-
} from './self_review_gate.js';
|
|
20
|
-
|
|
21
|
-
const f = (severity: Finding['severity'], kind: Finding['kind']): Finding => ({
|
|
22
|
-
severity,
|
|
23
|
-
kind,
|
|
24
|
-
title: `${severity} ${kind}`,
|
|
25
|
-
detail: 'x',
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
describe('classifyBlocking', () => {
|
|
29
|
-
it('blocks security + high and claim + critical', () => {
|
|
30
|
-
expect(classifyBlocking(f('high', 'security'))).toBe(true);
|
|
31
|
-
expect(classifyBlocking(f('critical', 'claim'))).toBe(true);
|
|
32
|
-
});
|
|
33
|
-
it('does not block low/medium security, or any style/correctness', () => {
|
|
34
|
-
expect(classifyBlocking(f('medium', 'security'))).toBe(false);
|
|
35
|
-
expect(classifyBlocking(f('low', 'claim'))).toBe(false);
|
|
36
|
-
expect(classifyBlocking(f('critical', 'style'))).toBe(false);
|
|
37
|
-
expect(classifyBlocking(f('high', 'correctness'))).toBe(false);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
describe('gateVerdict', () => {
|
|
42
|
-
const blocking = [f('high', 'security')];
|
|
43
|
-
it('advisory (default shipped mode) never blocks, even with a blocking finding', () => {
|
|
44
|
-
expect(gateVerdict(blocking, { enforce: false })).toBe(0);
|
|
45
|
-
});
|
|
46
|
-
it('enforce blocks only on a merge-blocking finding', () => {
|
|
47
|
-
expect(gateVerdict(blocking, { enforce: true })).toBe(2);
|
|
48
|
-
expect(gateVerdict([f('critical', 'style')], { enforce: true })).toBe(0);
|
|
49
|
-
expect(gateVerdict([], { enforce: true })).toBe(0);
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
describe('isReviewablePath', () => {
|
|
54
|
-
it('skips generated projections + lockfiles, keeps source', () => {
|
|
55
|
-
expect(isReviewablePath('dist/agent-src/skills/x/SKILL.md')).toBe(false);
|
|
56
|
-
expect(isReviewablePath('.augment/rules/x.md')).toBe(false);
|
|
57
|
-
expect(isReviewablePath('.windsurfrules')).toBe(false);
|
|
58
|
-
expect(isReviewablePath('package-lock.json')).toBe(false);
|
|
59
|
-
expect(isReviewablePath('src/rules/x.md')).toBe(true);
|
|
60
|
-
expect(isReviewablePath('src/scripts/y.ts')).toBe(true);
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
describe('renderReview', () => {
|
|
65
|
-
it('carries the HUMAN REVIEW REQUIRED banner + the floor-not-human-review caveat', () => {
|
|
66
|
-
const out = renderReview([], false);
|
|
67
|
-
expect(out).toContain('HUMAN REVIEW REQUIRED');
|
|
68
|
-
expect(out).toContain('not** independent human review');
|
|
69
|
-
});
|
|
70
|
-
it('advisory phrasing says WOULD block, enforce phrasing says blocking', () => {
|
|
71
|
-
const blocking = [f('high', 'security')];
|
|
72
|
-
expect(renderReview(blocking, false)).toContain('WOULD block');
|
|
73
|
-
expect(renderReview(blocking, true)).toContain('merge-blocking');
|
|
74
|
-
});
|
|
75
|
-
it('labels each row (Blocking)/(Advisory) so a critical-but-non-blocking row never reads as inconsistent with the count', () => {
|
|
76
|
-
const findings = [f('critical', 'correctness'), f('critical', 'security')];
|
|
77
|
-
const out = renderReview(findings, false);
|
|
78
|
-
// critical × correctness is NOT blocking → labelled Advisory
|
|
79
|
-
expect(out).toContain('| critical (Advisory) | correctness |');
|
|
80
|
-
// critical × security IS blocking → labelled Blocking
|
|
81
|
-
expect(out).toContain('| critical (Blocking) | security |');
|
|
82
|
-
// verdict count matches the number of (Blocking) rows (exactly 1)
|
|
83
|
-
expect(out).toContain('1 finding(s) WOULD block');
|
|
84
|
-
expect((out.match(/\(Blocking\)/g) ?? []).length).toBe(1);
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
describe('escalationReasons', () => {
|
|
89
|
-
it('flags a large diff at or above the threshold', () => {
|
|
90
|
-
expect(escalationReasons(['src/a.ts'], LARGE_DIFF_LINES)).toEqual([
|
|
91
|
-
`large diff (${LARGE_DIFF_LINES} changed lines ≥ ${LARGE_DIFF_LINES})`,
|
|
92
|
-
]);
|
|
93
|
-
});
|
|
94
|
-
it('does not flag a small non-claim diff', () => {
|
|
95
|
-
expect(escalationReasons(['src/a.ts'], LARGE_DIFF_LINES - 1)).toEqual([]);
|
|
96
|
-
});
|
|
97
|
-
it('flags a claim-ledger surface regardless of size', () => {
|
|
98
|
-
expect(escalationReasons(['docs/CLAIMS.md'], 1)).toEqual([
|
|
99
|
-
'claim-affecting surface touched (docs/CLAIMS.md)',
|
|
100
|
-
]);
|
|
101
|
-
expect(escalationReasons(['docs/proof.md'], 1)[0]).toContain('docs/proof.md');
|
|
102
|
-
expect(escalationReasons(['docs/comparison.yaml'], 1)[0]).toContain('docs/comparison.yaml');
|
|
103
|
-
expect(escalationReasons(['README.md'], 1)[0]).toContain('README.md');
|
|
104
|
-
});
|
|
105
|
-
it('reports both reasons when a large diff also touches a claim surface', () => {
|
|
106
|
-
const r = escalationReasons(['docs/CLAIMS.md', 'src/big.ts'], LARGE_DIFF_LINES + 50);
|
|
107
|
-
expect(r).toHaveLength(2);
|
|
108
|
-
expect(r[0]).toContain('large diff');
|
|
109
|
-
expect(r[1]).toContain('claim-affecting');
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
describe('renderReview — escalation banner', () => {
|
|
114
|
-
const f = (severity: Finding['severity'], kind: Finding['kind']): Finding => ({
|
|
115
|
-
severity, kind, title: 't', detail: 'd',
|
|
116
|
-
});
|
|
117
|
-
it('appends the escalation recommendation when reasons are present', () => {
|
|
118
|
-
const out = renderReview([], false, ['large diff (500 changed lines ≥ 400)']);
|
|
119
|
-
expect(out).toContain('Escalation warranted');
|
|
120
|
-
expect(out).toContain('/council:pr');
|
|
121
|
-
expect(out).toContain('never');
|
|
122
|
-
});
|
|
123
|
-
it('omits the escalation block when there are no reasons (byte-identical to no-arg)', () => {
|
|
124
|
-
const findings = [f('high', 'security')];
|
|
125
|
-
expect(renderReview(findings, false, [])).toBe(renderReview(findings, false));
|
|
126
|
-
});
|
|
127
|
-
it('recommends escalation even on a clean (no-finding) large diff', () => {
|
|
128
|
-
const out = renderReview([], false, ['large diff (500 changed lines ≥ 400)']);
|
|
129
|
-
expect(out).toContain('no findings');
|
|
130
|
-
expect(out).toContain('Escalation warranted');
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
// ── Release-PR review mode (road-to-feedback-9.2.0-followups Phase 3) ──
|
|
135
|
-
// See docs/design/release-pr-review-mode.md — anchored to the PR #957
|
|
136
|
-
// false-advisory case (release features reading as "not in the diff").
|
|
137
|
-
|
|
138
|
-
describe('detectReleaseVersion', () => {
|
|
139
|
-
const changelogAdd = (v: string) =>
|
|
140
|
-
`+## [${v}](https://github.com/event4u-app/agent-config/compare/9.1.0...${v}) (2026-07-14)`;
|
|
141
|
-
const packageAdd = (v: string) => `+ "version": "${v}",`;
|
|
142
|
-
|
|
143
|
-
it('detects a release PR when the changelog heading and the package.json bump agree', () => {
|
|
144
|
-
const patch = [
|
|
145
|
-
'diff --git a/CHANGELOG.md b/CHANGELOG.md',
|
|
146
|
-
'@@ -14,6 +14,8 @@',
|
|
147
|
-
' ## [Unreleased]',
|
|
148
|
-
'+',
|
|
149
|
-
changelogAdd('9.2.0'),
|
|
150
|
-
'diff --git a/package.json b/package.json',
|
|
151
|
-
'@@ -1,6 +1,6 @@',
|
|
152
|
-
'- "version": "9.1.0",',
|
|
153
|
-
packageAdd('9.2.0'),
|
|
154
|
-
].join('\n');
|
|
155
|
-
expect(detectReleaseVersion(patch)).toBe('9.2.0');
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
it('is NOT a release PR when only the changelog heading changed (no version bump)', () => {
|
|
159
|
-
expect(detectReleaseVersion(changelogAdd('9.2.0'))).toBeNull();
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
it('is NOT a release PR when only package.json bumped (no changelog heading)', () => {
|
|
163
|
-
expect(detectReleaseVersion(packageAdd('9.2.0'))).toBeNull();
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
it('is NOT a release PR on a normal feature-PR patch (neither signal present)', () => {
|
|
167
|
-
const patch = ['+export function foo() {}', '-export function bar() {}'].join('\n');
|
|
168
|
-
expect(detectReleaseVersion(patch)).toBeNull();
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
it('refuses to guess when the changelog and package.json versions disagree', () => {
|
|
172
|
-
const patch = [changelogAdd('9.2.0'), packageAdd('9.3.0')].join('\n');
|
|
173
|
-
expect(detectReleaseVersion(patch)).toBeNull();
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
it('ignores removed lines (the old version) and reads only the added one', () => {
|
|
177
|
-
const patch = ['- "version": "9.1.0",', packageAdd('9.2.0'), changelogAdd('9.2.0')].join('\n');
|
|
178
|
-
expect(detectReleaseVersion(patch)).toBe('9.2.0');
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
describe('pickPreviousTag', () => {
|
|
183
|
-
it('picks the highest tag strictly below the release version', () => {
|
|
184
|
-
expect(pickPreviousTag('9.2.0', ['9.0.0', '9.1.0', '9.2.0'])).toBe('9.1.0');
|
|
185
|
-
});
|
|
186
|
-
it('handles a v-prefixed tag naming convention', () => {
|
|
187
|
-
expect(pickPreviousTag('9.2.0', ['v9.0.0', 'v9.1.0'])).toBe('v9.1.0');
|
|
188
|
-
});
|
|
189
|
-
it('returns null when no tag is strictly below the version', () => {
|
|
190
|
-
expect(pickPreviousTag('9.2.0', ['9.2.0', '9.3.0'])).toBeNull();
|
|
191
|
-
expect(pickPreviousTag('9.2.0', [])).toBeNull();
|
|
192
|
-
});
|
|
193
|
-
it('ignores non-semver tags (branch-backup names etc.) instead of crashing', () => {
|
|
194
|
-
expect(
|
|
195
|
-
pickPreviousTag('9.2.0', [
|
|
196
|
-
'backup/pre-rebase-augment-limit-fit',
|
|
197
|
-
'9.1.0',
|
|
198
|
-
'local-squashed-tip-2026-05-18',
|
|
199
|
-
]),
|
|
200
|
-
).toBe('9.1.0');
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
describe('buildPlan — release-PR shape (PR #957 reproduction)', () => {
|
|
205
|
-
function git(root: string, ...args: string[]) {
|
|
206
|
-
return spawnSync('git', args, {
|
|
207
|
-
cwd: root,
|
|
208
|
-
encoding: 'utf8',
|
|
209
|
-
env: {
|
|
210
|
-
...process.env,
|
|
211
|
-
GIT_AUTHOR_NAME: 'T',
|
|
212
|
-
GIT_AUTHOR_EMAIL: 't@e.test',
|
|
213
|
-
GIT_COMMITTER_NAME: 'T',
|
|
214
|
-
GIT_COMMITTER_EMAIL: 't@e.test',
|
|
215
|
-
},
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
function write(root: string, rel: string, content: string): void {
|
|
219
|
-
const full = path.join(root, rel);
|
|
220
|
-
fs.mkdirSync(path.dirname(full), { recursive: true });
|
|
221
|
-
fs.writeFileSync(full, content, 'utf-8');
|
|
222
|
-
}
|
|
223
|
-
function mkTmp(): string {
|
|
224
|
-
return fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'srg-')));
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
let root: string | undefined;
|
|
228
|
-
afterEach(() => {
|
|
229
|
-
if (root) fs.rmSync(root, { recursive: true, force: true });
|
|
230
|
-
root = undefined;
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
it('release mode sees the pre-cut feature file; the packaging diff alone does not (PR #957 shape)', () => {
|
|
234
|
-
root = mkTmp();
|
|
235
|
-
git(root, 'init', '-q', '-b', 'main');
|
|
236
|
-
write(root, 'package.json', '{\n "name": "x",\n "version": "9.0.0"\n}\n');
|
|
237
|
-
write(root, 'CHANGELOG.md', '# Changelog\n\n## [Unreleased]\n');
|
|
238
|
-
git(root, 'add', '-A');
|
|
239
|
-
git(root, 'commit', '-q', '-m', 'baseline');
|
|
240
|
-
git(root, 'tag', '9.1.0'); // the previous release tag
|
|
241
|
-
|
|
242
|
-
// The feature merges into main BEFORE the release cut — the PR #957 shape.
|
|
243
|
-
write(root, 'feature.txt', 'new cross-source-consistency rule content\n');
|
|
244
|
-
git(root, 'add', '-A');
|
|
245
|
-
git(root, 'commit', '-q', '-m', 'feat: cross-source-consistency');
|
|
246
|
-
|
|
247
|
-
// Release branch cut from main's current tip — no divergence yet, so
|
|
248
|
-
// main...release-branch only shows the release-cut commit below.
|
|
249
|
-
git(root, 'checkout', '-q', '-b', 'release-branch');
|
|
250
|
-
write(
|
|
251
|
-
root,
|
|
252
|
-
'CHANGELOG.md',
|
|
253
|
-
'# Changelog\n\n## [Unreleased]\n\n' +
|
|
254
|
-
'## [9.2.0](https://github.com/event4u-app/agent-config/compare/9.1.0...9.2.0) (2026-07-14)\n',
|
|
255
|
-
);
|
|
256
|
-
write(root, 'package.json', '{\n "name": "x",\n "version": "9.2.0"\n}\n');
|
|
257
|
-
git(root, 'add', '-A');
|
|
258
|
-
git(root, 'commit', '-q', '-m', 'chore(release): 9.2.0');
|
|
259
|
-
|
|
260
|
-
const plan = buildPlan('main', root);
|
|
261
|
-
|
|
262
|
-
expect(plan.release?.version).toBe('9.2.0');
|
|
263
|
-
expect(plan.release?.previousTag).toBe('9.1.0');
|
|
264
|
-
// The packaging diff (main...HEAD) alone does NOT show the pre-cut
|
|
265
|
-
// feature — the exact false-advisory shape PR #957 hit.
|
|
266
|
-
expect(plan.release?.packagingFiles).not.toContain('feature.txt');
|
|
267
|
-
expect(plan.release?.packagingFiles).toEqual(
|
|
268
|
-
expect.arrayContaining(['CHANGELOG.md', 'package.json']),
|
|
269
|
-
);
|
|
270
|
-
// Release mode's actual analysis range (previousTag...HEAD) DOES
|
|
271
|
-
// include it — this is what stops "feature not in diff" recurring.
|
|
272
|
-
expect(plan.files).toContain('feature.txt');
|
|
273
|
-
expect(plan.analysisBase).toBe('9.1.0');
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
it('a normal feature PR (no changelog/version bump) uses the unchanged base', () => {
|
|
277
|
-
root = mkTmp();
|
|
278
|
-
git(root, 'init', '-q', '-b', 'main');
|
|
279
|
-
write(root, 'package.json', '{\n "name": "x",\n "version": "9.1.0"\n}\n');
|
|
280
|
-
write(root, 'CHANGELOG.md', '# Changelog\n\n## [Unreleased]\n');
|
|
281
|
-
git(root, 'add', '-A');
|
|
282
|
-
git(root, 'commit', '-q', '-m', 'baseline');
|
|
283
|
-
git(root, 'tag', '9.1.0');
|
|
284
|
-
|
|
285
|
-
git(root, 'checkout', '-q', '-b', 'feature-branch');
|
|
286
|
-
write(root, 'feature.txt', 'some feature\n');
|
|
287
|
-
git(root, 'add', '-A');
|
|
288
|
-
git(root, 'commit', '-q', '-m', 'feat: add feature');
|
|
289
|
-
|
|
290
|
-
const plan = buildPlan('main', root);
|
|
291
|
-
|
|
292
|
-
expect(plan.release).toBeUndefined();
|
|
293
|
-
expect(plan.analysisBase).toBe('main');
|
|
294
|
-
expect(plan.files).toContain('feature.txt');
|
|
295
|
-
});
|
|
296
|
-
});
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for the host-facing capability advertisement.
|
|
3
|
-
*
|
|
4
|
-
* The `configRoot` and `embed` capabilities must appear in the
|
|
5
|
-
* `--version --json` readout (and, via the same module, `GET /api/v1/ping`)
|
|
6
|
-
* so a spawner can feature-detect support before relying on either.
|
|
7
|
-
*/
|
|
8
|
-
import { describe, expect, it } from 'vitest';
|
|
9
|
-
import { CAPABILITIES, buildVersionReadout } from './capabilities.js';
|
|
10
|
-
|
|
11
|
-
describe('capabilities', () => {
|
|
12
|
-
it('advertises configRoot support', () => {
|
|
13
|
-
expect(CAPABILITIES.configRoot).toBe(true);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it('advertises the embed contract (reciprocal-ecosystem Phase 3)', () => {
|
|
17
|
-
expect(CAPABILITIES.embed).toEqual({
|
|
18
|
-
supported: true,
|
|
19
|
-
version: 1,
|
|
20
|
-
features: ['theme', 'deepLink'],
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('does NOT advertise the accent feature (v2, not v1)', () => {
|
|
25
|
-
expect(CAPABILITIES.embed.features).not.toContain('accent');
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('buildVersionReadout carries the version and the full capability block', () => {
|
|
29
|
-
const readout = buildVersionReadout('9.7.0');
|
|
30
|
-
expect(readout).toEqual({
|
|
31
|
-
version: '9.7.0',
|
|
32
|
-
capabilities: {
|
|
33
|
-
configRoot: true,
|
|
34
|
-
embed: { supported: true, version: 1, features: ['theme', 'deepLink'] },
|
|
35
|
-
},
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it('buildVersionReadout copies capabilities (no shared mutable reference)', () => {
|
|
40
|
-
const readout = buildVersionReadout('1.2.3');
|
|
41
|
-
expect(readout.capabilities).not.toBe(CAPABILITIES);
|
|
42
|
-
});
|
|
43
|
-
});
|