@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
|
@@ -40,15 +40,71 @@
|
|
|
40
40
|
# visible, or it repeats the sin it exists to catch.
|
|
41
41
|
# canary optional mutation recipe (Phase 7) — see CANARY below
|
|
42
42
|
#
|
|
43
|
-
# COVERAGE — THE HONEST DENOMINATOR (re-measured 2026-08-
|
|
43
|
+
# COVERAGE — THE HONEST DENOMINATOR (re-measured 2026-08-25)
|
|
44
44
|
# ----------------------------------------------------------
|
|
45
|
-
#
|
|
45
|
+
# 291 `lint_*` / `check_*` / `audit_*` scripts live under `src/scripts/`
|
|
46
46
|
# (the count is computed, not asserted — `check_gate_coverage.count_gate_scripts`,
|
|
47
|
-
# re-run
|
|
48
|
-
#
|
|
49
|
-
#
|
|
47
|
+
# re-run on the tree carrying these rows, with `check_skill_admissions`,
|
|
48
|
+
# `check_command_examples`, `check_routing_coverage`, `description_route_check`
|
|
49
|
+
# and `lint_skill_trigger_corpus` counted).
|
|
50
|
+
# **63 of them emit the machine-readable `scanned: <N>` line under their
|
|
51
|
+
# CI-identical argv, and 60 of those 63 are listed below.** The manifest is
|
|
50
52
|
# therefore complete with respect to its own contract for every gate that can
|
|
51
|
-
# carry a floor, and covers ~
|
|
53
|
+
# carry a floor, and covers ~21 % of the population.
|
|
54
|
+
#
|
|
55
|
+
# `description_route_check` is counted in the POPULATION and deliberately NOT
|
|
56
|
+
# listed: it is diff-scoped, so its natural reading on most trees is zero cases,
|
|
57
|
+
# and a `min_scanned` floor over a corpus that is legitimately empty would be a
|
|
58
|
+
# floor on the diff rather than on the gate.
|
|
59
|
+
#
|
|
60
|
+
# RECOUNTED on 2026-08-25 while adding `check_routing_coverage`, and this time
|
|
61
|
+
# the prose was NOT stale — 289 was correct for the tree before the row landed,
|
|
62
|
+
# which is the first recount in eight to find that. Derivation, unchanged and
|
|
63
|
+
# still the point: `grep -c '^ - id:' src/config/gate-coverage.yml` returns 59;
|
|
64
|
+
# every listed row is an emitter, because a row that did not emit could carry no
|
|
65
|
+
# floor; the same THREE emitters remain deliberately unlisted
|
|
66
|
+
# (`lint_evidence_artifacts`, `adr_cite_check`, `check_new_adr_evidence`);
|
|
67
|
+
# 59 + 3 = 62. The percentage moved DOWN while a gate was added, which is
|
|
68
|
+
# arithmetic rather than regression: the denominator grew by one too.
|
|
69
|
+
#
|
|
70
|
+
# RECOUNTED ON THE MERGE, 2026-08-24, and the merge is exactly the case the two
|
|
71
|
+
# paragraphs below were each written for and neither could cover. Both branches
|
|
72
|
+
# added a gate row and both recounted correctly for their own tree; after the
|
|
73
|
+
# merge BOTH gates exist, so either side's figure describes a tree that no longer
|
|
74
|
+
# does. Picking one would have been wrong by one on three axes at once — which is
|
|
75
|
+
# the arithmetic-on-prose this section forbids, arriving through a merge rather
|
|
76
|
+
# than through an edit. Recomputed here, not adjusted:
|
|
77
|
+
#
|
|
78
|
+
# ./scripts-run npx tsx -e "import {count_gate_scripts} from './src/scripts/check_gate_coverage.ts'; console.log(count_gate_scripts())"
|
|
79
|
+
# grep -c '^ - id:' src/config/gate-coverage.yml
|
|
80
|
+
#
|
|
81
|
+
# Both paragraphs are kept below rather than collapsed, because each records a
|
|
82
|
+
# real recount of a real tree and the pair is the evidence for this one.
|
|
83
|
+
#
|
|
84
|
+
# RECOUNTED on 2026-08-24 while adding `check_skill_admissions`, and the prose was
|
|
85
|
+
# stale by FOUR on the population axis before the row landed — it said 283 while
|
|
86
|
+
# the function already returned 288 with the new script counted, so three scripts
|
|
87
|
+
# had arrived since the previous recount without touching this text. Seventh
|
|
88
|
+
# consecutive recount to find the figures already wrong, which is the argument for
|
|
89
|
+
# computing them rather than incrementing: 283 + 1 would have written 284 and been
|
|
90
|
+
# wrong by four. Derivation, so the next reader checks rather than trusts:
|
|
91
|
+
# `grep -c '^ - id:' src/config/gate-coverage.yml` returns 57; every listed row is
|
|
92
|
+
# an emitter, because a row that did not emit could carry no floor; the same THREE
|
|
93
|
+
# emitters remain deliberately unlisted (`lint_evidence_artifacts`,
|
|
94
|
+
# `adr_cite_check`, `check_new_adr_evidence`); 57 + 3 = 60.
|
|
95
|
+
# RECOUNTED on 2026-08-24 while adding `check_command_examples`, and the prose
|
|
96
|
+
# was stale by FIVE on the population axis before the row landed — it said 283
|
|
97
|
+
# while the function already returned 288 including the new script, so four
|
|
98
|
+
# scripts had arrived since the previous recount without touching this text.
|
|
99
|
+
# That is the seventh consecutive recount to find the figures already wrong,
|
|
100
|
+
# which is the argument for the derivation below rather than for arithmetic:
|
|
101
|
+
# incrementing 283 by one would have written 284 and been wrong by four.
|
|
102
|
+
# Derivation, so the next reader checks rather than trusts:
|
|
103
|
+
# `grep -c '^ - id:' src/config/gate-coverage.yml` returns 57; every listed row
|
|
104
|
+
# is an emitter, because a row that did not emit could carry no floor; the same
|
|
105
|
+
# THREE emitters remain deliberately unlisted (`lint_evidence_artifacts`,
|
|
106
|
+
# `adr_cite_check`, `check_new_adr_evidence`, each with its reason at the place
|
|
107
|
+
# its row would have sat); 57 + 3 = 60. The population comes from the function.
|
|
52
108
|
#
|
|
53
109
|
# RECOUNTED on 2026-08-23 while adding `lint_deterministic_time` and
|
|
54
110
|
# `check_enforcement_denominator` (two rows, and the figures above are the
|
|
@@ -254,6 +310,79 @@
|
|
|
254
310
|
# contract is `dist == rewrite(src)`; `check_ci_local_parity`, whose corpus is
|
|
255
311
|
# workflow files) carries no recipe and is reported UNPROVEN, never green.
|
|
256
312
|
gates:
|
|
313
|
+
- id: lint_skill_trigger_corpus
|
|
314
|
+
argv: []
|
|
315
|
+
min_scanned: 70
|
|
316
|
+
corpus: "every src/skills/*/evals/triggers.json. The floor sits at 70 because 90 exist in the shipped tree and the count only grows — a reading below it means the scan root moved, not that corpora were deleted, which has its own gate. Two units (brand-asset-generation, estimate-ticket) are grandfathered BY NAME rather than by a numeric baseline, so a third failure cannot hide inside a count."
|
|
317
|
+
status: enforced
|
|
318
|
+
canary:
|
|
319
|
+
class: contract-violation
|
|
320
|
+
path: src/skills/zz-canary-trigger-corpus/evals/triggers.json
|
|
321
|
+
content: |
|
|
322
|
+
{
|
|
323
|
+
"skill": "zz-canary-trigger-corpus",
|
|
324
|
+
"last_eval": "2026-08-25",
|
|
325
|
+
"description": "Canary planted by check_gate_coverage --canary; never ships. One positive and no near-miss, which is the discipline violation this gate must reject.",
|
|
326
|
+
"queries": [
|
|
327
|
+
{ "q": "only one positive", "trigger": true }
|
|
328
|
+
]
|
|
329
|
+
}
|
|
330
|
+
- id: check_routing_coverage
|
|
331
|
+
argv: []
|
|
332
|
+
min_scanned: 300
|
|
333
|
+
corpus: "every routed unit on both surfaces — the tier-1 + tier-2 ids in dist/router.json, plus every src/skills/*/SKILL.md. `scanned` is the sum of the two DENOMINATORS, deliberately, not the covered count: a corpus case going missing must not shrink the scanned figure, or the ratchet's own dead-scope floor would move with the thing it measures. The floor sits at 300 because the skills denominator alone is 299 and cannot fall below the shipped estate without a skill deletion, which has its own gate."
|
|
334
|
+
status: enforced
|
|
335
|
+
canary:
|
|
336
|
+
class: contract-violation
|
|
337
|
+
path: src/skills/zz-canary-routing-coverage/SKILL.md
|
|
338
|
+
content: |
|
|
339
|
+
---
|
|
340
|
+
name: zz-canary-routing-coverage
|
|
341
|
+
description: Canary skill planted by check_gate_coverage --canary; never ships.
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
# zz-canary-routing-coverage
|
|
345
|
+
|
|
346
|
+
A routed unit with no evals/triggers.json. It raises the skills
|
|
347
|
+
denominator by one while the numerator stands still, so the ratio falls
|
|
348
|
+
below seed and the ratchet must red. A gate that stayed green here would
|
|
349
|
+
be a count ratchet wearing a ratio's name.
|
|
350
|
+
- id: check_skill_admissions
|
|
351
|
+
argv: []
|
|
352
|
+
min_scanned: 0
|
|
353
|
+
corpus: "the admission/refusal rows in agents/decisions/skill-admissions.jsonl, plus the skills added since the base ref (a `git diff --diff-filter=A` over src/skills). `min_scanned: 0` with a declared allowEmpty: 0 rows is the SHIPPED state, because the gate is forward-only and the 299 pre-existing skills are grandfathered by the diff scope rather than by rows. The dead-scope risk is covered one layer up instead — readLedger() throws a DeadScopeError when the file is missing or malformed, so `moved` and `empty` are different verdicts."
|
|
354
|
+
status: enforced
|
|
355
|
+
canary:
|
|
356
|
+
class: contract-violation
|
|
357
|
+
path: src/skills/zz-canary-skill-admissions/SKILL.md
|
|
358
|
+
content: |
|
|
359
|
+
---
|
|
360
|
+
name: zz-canary-skill-admissions
|
|
361
|
+
description: Canary skill planted by check_gate_coverage --canary; never ships.
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
# zz-canary-skill-admissions
|
|
365
|
+
|
|
366
|
+
An added skill with no row in the admission ledger — the gate must red.
|
|
367
|
+
- id: check_command_examples
|
|
368
|
+
argv: []
|
|
369
|
+
min_scanned: 18
|
|
370
|
+
corpus: "every `src/domains/**/command.md` whose `visibility` is `visible` or `advanced` — 23 on 2026-08-24 (5 visible + 18 advanced). The floor sits at 18 because a pack going uninstalled cannot shrink this corpus (the walk reads the source tree, not an install), so the only legitimate drop is a demotion to `internal`; a fall to 18 or below means a whole pack's commands stopped being read."
|
|
371
|
+
status: enforced
|
|
372
|
+
canary:
|
|
373
|
+
class: undetected-antipattern
|
|
374
|
+
path: src/domains/meta/zz-canary-command-examples/command.md
|
|
375
|
+
content: |
|
|
376
|
+
---
|
|
377
|
+
name: zz-canary-command-examples
|
|
378
|
+
description: Canary command planted by check_gate_coverage --canary; never ships.
|
|
379
|
+
disable-model-invocation: true
|
|
380
|
+
visibility: visible
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
# zz-canary-command-examples
|
|
384
|
+
|
|
385
|
+
A user-facing command with no `## Examples` section — sub-check (a) must red.
|
|
257
386
|
- id: check_pack_size
|
|
258
387
|
argv: []
|
|
259
388
|
min_scanned: 2000
|
|
@@ -1620,3 +1749,59 @@ gates:
|
|
|
1620
1749
|
express: the generated projection which must stay green, a `docs/decisions/`
|
|
1621
1750
|
ADR whose dated record must not be rewritten, and a bare rule count with no
|
|
1622
1751
|
enforcement sense ("2 rules" in a concepts page) which must not be a finding.
|
|
1752
|
+
|
|
1753
|
+
- id: check_score_contract
|
|
1754
|
+
argv: ["--quiet"]
|
|
1755
|
+
min_scanned: 20
|
|
1756
|
+
corpus: "rows in `agents/evidence/ac-capability-scorecard.yaml` — one per rubric category recoverable from the tracked tree (23 at baseline, 2026-08-24)"
|
|
1757
|
+
status: enforced
|
|
1758
|
+
canary:
|
|
1759
|
+
class: contract-violation
|
|
1760
|
+
path: agents/evidence/ac-capability-scorecard-zz-canary.yaml
|
|
1761
|
+
content: |
|
|
1762
|
+
# zz canary probe: a scorecard awarding `ten` with an empty required
|
|
1763
|
+
# evidence class, which is the one thing this gate exists to refuse.
|
|
1764
|
+
# Create-only, so it is expressible as a canary — unlike the MODIFICATION
|
|
1765
|
+
# shapes (a redeclared `state: complete`, a count edited to match an
|
|
1766
|
+
# added row) that most of this file's ratchets detect.
|
|
1767
|
+
schema_version: 1
|
|
1768
|
+
rubric:
|
|
1769
|
+
state: incomplete
|
|
1770
|
+
authority: unavailable-external-review
|
|
1771
|
+
reported_category_count: 32
|
|
1772
|
+
recovered_category_count: 1
|
|
1773
|
+
missing_category_count: 31
|
|
1774
|
+
manifest_version: baseline_v1
|
|
1775
|
+
recovery_source: agents/roadmaps/road-to-ten-across-the-board.md
|
|
1776
|
+
excluded_from_manifest: []
|
|
1777
|
+
categories:
|
|
1778
|
+
- category: release-integrity
|
|
1779
|
+
baseline: 9.2
|
|
1780
|
+
claim: "canary"
|
|
1781
|
+
closing_path: "canary"
|
|
1782
|
+
mechanism_evidence: ["src/scripts/check_score_contract.ts"]
|
|
1783
|
+
adoption_evidence: ["src/scripts/check_score_contract.ts"]
|
|
1784
|
+
negative_control_evidence: []
|
|
1785
|
+
production_window: src/scripts/check_score_contract.ts
|
|
1786
|
+
outcome_evidence: ["src/scripts/check_score_contract.ts"]
|
|
1787
|
+
non_regression_evidence: ["src/scripts/check_score_contract.ts"]
|
|
1788
|
+
status: ten
|
|
1789
|
+
note: >
|
|
1790
|
+
The floor is 20 against a live corpus of 23, and the gap is deliberately
|
|
1791
|
+
narrow because this corpus does not grow by ordinary work: a row is added
|
|
1792
|
+
only when a rubric category is recovered, and `check_score_contract` itself
|
|
1793
|
+
refuses a row count that disagrees with the declared
|
|
1794
|
+
`recovered_category_count`. So the failure this floor guards is not
|
|
1795
|
+
"someone deleted a few rows" but the migration shape — the scorecard moving
|
|
1796
|
+
and the gate reading an absent file, which `countRows` reports as 0.
|
|
1797
|
+
|
|
1798
|
+
`argv` carries `--quiet` because that is the invocation the preflight task
|
|
1799
|
+
uses. The `scanned:` line is deliberately NOT quiet-gated and is emitted on
|
|
1800
|
+
the RED path too: a gate that publishes its coverage only when it passes
|
|
1801
|
+
cannot be caught going blind at the moment that matters most.
|
|
1802
|
+
|
|
1803
|
+
Six negative-control twins live under
|
|
1804
|
+
`tests/fixtures/score-contract/twins/`, and
|
|
1805
|
+
`tests/scripts/check_score_contract.test.ts` asserts each reds on exactly
|
|
1806
|
+
one finding CODE — not merely on a non-zero exit, which would let a twin
|
|
1807
|
+
keep passing while testing the wrong defect.
|
|
@@ -30,12 +30,12 @@
|
|
|
30
30
|
"check_source_size_budget": {
|
|
31
31
|
"count": 18512,
|
|
32
32
|
"landed": "2026-08-24",
|
|
33
|
-
"note": "Lowered 18,561 -> 18,512 on 2026-08-24 by the same method every prior entry here prescribes
|
|
33
|
+
"note": "Lowered 18,561 -> 18,512 on 2026-08-24 by the same method every prior entry here prescribes \u2014 the merged tree MEASURED, never a side picked. main had reached 18,561; this branch (road-to-skill-delivery-over-mcp) carries its own extractions, and the merged total reads 18,512, a -49 gain that would have been silently given back by keeping main's number. Set to the EXACT live total, because check_source_size_budget.test.ts asserts baseline == tree total; a baseline loose by one line is a red test, and that is how this surfaced. Prior entry: lowered 18,566 -> 18,561 on 2026-08-24 by the method the two prior entries prescribe, for the same reason: independent gains met in a merge, so the merged tree was MEASURED rather than a side picked. main had reached 18,566 via road-to-skill-link-integrity-and-manifest-sync Phase 2; this branch had already paid its own extraction under road-to-trigger-delivered-rule-bodies 1.6 (condense.ts's inline mode literal moved whole to _lib/lean_projection_mode.ts, -5; the new module is 45 lines and therefore free). check_source_size_budget reports 18,561 on the merged tree, exactly 18,566 - 5, so picking either side's number would have given back the other's gain. Set to the EXACT live total: check_source_size_budget.test.ts asserts baseline == tree total, so a baseline loose by one line is a red test \u2014 which is how this lowering surfaced rather than by inspection. `landed` refreshed deliberately, not as bookkeeping: checkRatchet returns `improved` BEFORE it evaluates staleness, so an entry left at the old number while the tree measures lower would never expire at any age. Prior entry: lowered 18,574 -> 18,571 on 2026-08-23, and the -3 is the SUM of two independent lowerings-through-extraction that met in a merge, not a new reduction. main had already reached 18,573 via road-to-override-efficacy-proof (-1: _check_overrides moved whole to _cli/doctor_overrides.ts, -119, and the install-mode detector plus its marker constant to _cli/doctor_install_mode.ts, -14, both names forwarded with `export ... from`; net -1 past zero rather than exactly to it, because the unit that paid is a unit). This branch had reached 18,572 via road-to-council-evidence-integrity Phases 1-2 (-2: the two result bundles PeerReviewResult and ConsensusResult, -98, the two options interfaces, -19, and CouncilQuestion, -11, all PURE MOVES into ai_council/orchestrator_results.ts, with orchestrator.ts re-exporting every name; the options interfaces required a TYPE-ONLY back-import of OnOverrunCallback, legal and runtime-free since both directions are erased). The merge conflict was resolved by MEASURING the merged tree rather than picking a side: check_source_size_budget reports 18571 on it, which is exactly 18,574 - 1 - 2. Picking either branch's number would have silently given back the other branch's gain -- the failure main's own entry names one line above. Set to the EXACT live total: check_source_size_budget.test.ts asserts baseline == tree total, so a baseline left loose by even one line is a red test. Lowered 18,571 -> 18,566 on 2026-08-23 by road-to-skill-link-integrity-and-manifest-sync Phase 2, which had to pay its own way before it could pass: adding set_augment_manifest_version to release.ts charged +35 lines, because release.ts is 564 lines PAST the 1500-line threshold and every line above it counts. The fix was extraction, never a bump. Both manifest-version writers -- the new set_augment_manifest_version and its pre-existing twin set_marketplace_version -- moved whole into release_env.ts, the leaf that already owns both manifest paths AND jsonDumpsIndent, so neither function needed anything it did not already have there. release_env.ts is 298 lines, far under the threshold, so those lines are now free. release.ts re-exports set_marketplace_version so its existing test import keeps resolving; the new function is imported from release_env directly. Net -5 past zero rather than exactly to it, for the same reason main's entry gives: the unit that pays is a unit."
|
|
34
34
|
},
|
|
35
35
|
"ci-parity:local-only": {
|
|
36
36
|
"count": 165,
|
|
37
|
-
"landed": "2026-08-
|
|
38
|
-
"note": "Gates that `task ci` runs and no workflow does \u2014 the direction this manifest's own header calls the one that let real defects merge (16 stale index rows reached the trunk behind a local-only check-index). Revealed, not created, by repairing the checker's extraction: check_ci_local_parity built its CI-side set by regexing RAW workflow text for `task <name>` and expanding each closure, comments included. Several workflow comments contain the literal string `task ci` while stating that no workflow invokes it, so `ci` was read as an invocation and its full 247-gate closure entered the 'runs in CI' set. The count was therefore 0 BY CONSTRUCTION, and the prose documenting the gap was what suppressed it. Measured at the repair: CI-side 273 \u2192 106, undeclared_local_only 0 \u2192 167 of 247 local gates (68%). Baselined rather than hard-failed because 167 findings nobody can clear in the change that reveals them is the gate-that-lands-as-N-instant-blockers failure this repository has refused before; shrink-only keeps the property that matters, namely that a NEW gate registered in `task ci` with no workflow reds immediately. Lowering happens by wiring gates into workflows or declaring them under `local_only:` with a reason. Note the punchline, because it bounds the risk of this entry: check_ci_local_parity ITSELF runs in no workflow, so it is its own finding and this ratchet has no remote reach either \u2014 clearing the backlog is what gives it teeth. DRAINED BY ONE, 2026-08-13: check_ci_local_parity itself was wired into consistency.yml, so it left the set it exists to report. That is the whole shape of a legitimate drain here \u2014 the gate stops being local-only because a workflow now runs it, not because the declaration list grew. The floor in gate-coverage.yml moved in the same change and for the same reason: wiring two gates raised the parsed population 357 -> 360 (109 CI + 251 local). The intermediate 359 was the reading after the CI-side wiring alone and before check_gate_coverage joined the local `ci` chain; it was committed here by mistake and is corrected rather than left as a second number for the same measurement. WALKED DOWN 166 -> 165 on 2026-08-20 (road-to-session-closeout 5.2): check_ci_local_parity reported `ci-parity:local-only: 165 violation(s), baseline 166 - ratchet is loose` and asked for exactly this, so the gain cannot be silently given back. The measurement is the gate's own output on the merged tree, not a branch. What is NOT done here is the classification the same step asks for: 165 gates each need a recorded class (belongs-in-CI / developer-aid / dead), which is per-gate judgement, and migrating them would red the trunk on the landing day - the step forbids it for that reason.",
|
|
37
|
+
"landed": "2026-08-24",
|
|
38
|
+
"note": "Gates that `task ci` runs and no workflow does \u2014 the direction this manifest's own header calls the one that let real defects merge (16 stale index rows reached the trunk behind a local-only check-index). Revealed, not created, by repairing the checker's extraction: check_ci_local_parity built its CI-side set by regexing RAW workflow text for `task <name>` and expanding each closure, comments included. Several workflow comments contain the literal string `task ci` while stating that no workflow invokes it, so `ci` was read as an invocation and its full 247-gate closure entered the 'runs in CI' set. The count was therefore 0 BY CONSTRUCTION, and the prose documenting the gap was what suppressed it. Measured at the repair: CI-side 273 \u2192 106, undeclared_local_only 0 \u2192 167 of 247 local gates (68%). Baselined rather than hard-failed because 167 findings nobody can clear in the change that reveals them is the gate-that-lands-as-N-instant-blockers failure this repository has refused before; shrink-only keeps the property that matters, namely that a NEW gate registered in `task ci` with no workflow reds immediately. Lowering happens by wiring gates into workflows or declaring them under `local_only:` with a reason. Note the punchline, because it bounds the risk of this entry: check_ci_local_parity ITSELF runs in no workflow, so it is its own finding and this ratchet has no remote reach either \u2014 clearing the backlog is what gives it teeth. DRAINED BY ONE, 2026-08-13: check_ci_local_parity itself was wired into consistency.yml, so it left the set it exists to report. That is the whole shape of a legitimate drain here \u2014 the gate stops being local-only because a workflow now runs it, not because the declaration list grew. The floor in gate-coverage.yml moved in the same change and for the same reason: wiring two gates raised the parsed population 357 -> 360 (109 CI + 251 local). The intermediate 359 was the reading after the CI-side wiring alone and before check_gate_coverage joined the local `ci` chain; it was committed here by mistake and is corrected rather than left as a second number for the same measurement. WALKED DOWN 166 -> 165 on 2026-08-20 (road-to-session-closeout 5.2): check_ci_local_parity reported `ci-parity:local-only: 165 violation(s), baseline 166 - ratchet is loose` and asked for exactly this, so the gain cannot be silently given back. The measurement is the gate's own output on the merged tree, not a branch. What is NOT done here is the classification the same step asks for: 165 gates each need a recorded class (belongs-in-CI / developer-aid / dead), which is per-gate judgement, and migrating them would red the trunk on the landing day - the step forbids it for that reason. ATTEMPTED 165 -> 164 on 2026-08-24 and REVERTED in the same change, recorded because the mistake is instructive rather than embarrassing. A local run of check_ci_local_parity reported the ratchet LOOSE at 164 and asked to be lowered; CI then measured 165 and red the gate at '1 new'. The local reading was environment-dependent -- the drain worktree resolves the projection surface differently from a clean checkout, which is the same worktree divergence check_rule_projection_integrity shows on the same tree -- so the number was never real slack. THE RULE THIS CONFIRMS: this baseline is walked down on a reading from the ENFORCING environment, never on a local one, exactly as the 166 -> 165 paragraph above says ('the measurement is the gate's own output on the merged tree, not a branch'). A gate inviting a lowering is not evidence that the lowering is correct.",
|
|
39
39
|
"falsifier": "./scripts-run src/scripts/check_ci_local_parity"
|
|
40
40
|
},
|
|
41
41
|
"gate-self-test:registered-non-adopters": {
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_comment": "Payload budget for the published npm tarball (road-to-zero-ceremony-install Phase 4). MEASURED, NEVER INVENTED
|
|
2
|
+
"_comment": "Payload budget for the published npm tarball (road-to-zero-ceremony-install Phase 4). SURFACE LABEL, added 2026-08-24 (2.3): every packed_size_mb figure in this file and in every baseline_note_* below was measured on the UNBUILT tree under measurement_conditions. The BUILT surface a consumer installs is larger and is recorded separately in built_surface_measurement_2026_08_24 \u2014 do not compare a note's figure against a built one. MEASURED, NEVER INVENTED \u2014 the numbers below come from `npm pack --dry-run --json --ignore-scripts` on the tracked tree at 9.9.0 (2026-07-31). Two metrics, both genuinely ungated before this file: COMPRESSED tarball size, and PER-SKILL share of the skills subtree. The UNPACKED size is deliberately absent, and the reason CHANGED on 2026-08-04 without this sentence being updated \u2014 corrected 2026-08-24. It used to read that unpacked size is 'already owned by src/config/evaluator-budgets.json (unpacked_size_mb)'. That key was REMOVED by maintainer decision at the 9.17.0 release (`evaluator-budgets.json` -> `removed_2026_08_04`): the gate turned every legitimate payload addition into a blocked release (28.22 measured against max 28, all functional gates green) and the maintainer judged tarball size not worth gating. So the built artifact's unpacked size is MEASURED as evidence by `evaluator_umbrella.sh` and is deliberately NOT budget-gated. Reinstating `unpacked_size_mb` reverses a recorded maintainer release decision and requires owner review under `decision-revisit-gate` \u2014 it is not a wiring fix. The original point stands on its own terms: a second number for one lever is how three conflicting figures start circulating.",
|
|
3
3
|
"schema_version": 1,
|
|
4
4
|
"owner": "maintainer",
|
|
5
5
|
"review_by": "2027-07-31",
|
|
6
6
|
"regression_pct": 10,
|
|
7
|
-
"measurement_conditions": "npm pack --dry-run --json --ignore-scripts, run at the repo root on a clean checkout. `--ignore-scripts` means NO build runs, so dist/cli, dist/ui, dist/mcp and dist/hooks are absent and the figure covers only the TRACKED payload (src/scripts/, dist/agent-src/, dist/install/, docs/guidelines/, templates). That is deliberate: this gate is always-on for every PR, and the tracked content tree is exactly the surface that grows by accretion. The built artifact is ~5.4 MB larger and is gated
|
|
7
|
+
"measurement_conditions": "npm pack --dry-run --json --ignore-scripts, run at the repo root on a clean checkout. `--ignore-scripts` means NO build runs, so dist/cli, dist/ui, dist/mcp and dist/hooks are absent and the figure covers only the TRACKED payload (src/scripts/, dist/agent-src/, dist/install/, docs/guidelines/, templates). That is deliberate: this gate is always-on for every PR, and the tracked content tree is exactly the surface that grows by accretion. The built artifact is ~5.4 MB larger and is NOT gated \u2014 corrected 2026-08-24. This sentence named `evaluator-budgets.unpacked_size_mb` as a release-time gate; that key was removed by maintainer decision on 2026-08-04 (see `_comment`). `evaluator_umbrella.sh` still measures and records the figure as evidence, so the number exists and nothing enforces it. That is the honest state and it is deliberate.",
|
|
8
8
|
"budgets": {
|
|
9
9
|
"packed_size_mb": {
|
|
10
|
-
"max": 9.
|
|
11
|
-
"last_measured": 8.
|
|
12
|
-
"baseline_note_2026_08_23": "8.4
|
|
13
|
-
"method": "npm pack --dry-run --json --ignore-scripts
|
|
14
|
-
"baseline_note_2026_08_24": "8.4
|
|
15
|
-
"baseline_note_2026_08_20": "7.8
|
|
16
|
-
"baseline_note_2026_08_10": "6.9
|
|
17
|
-
"baseline_note": "5.903
|
|
10
|
+
"max": 9.1,
|
|
11
|
+
"last_measured": 8.475,
|
|
12
|
+
"baseline_note_2026_08_23": "8.4 \u2192 9.2 re-baselined 2026-08-23. RATCHET RESET, not the config bent around a failing check: the cap was exhausted at TRUNK level before the tripping branch existed. MEASURED on clean clones under the documented conditions \u2014 origin/main at f16c7d9df reads 8.3911, i.e. 8.9 KB under its own cap; PR #1597 reads 8.4083 local / 8.416 CI, +17.2 KB across 4 new pack entries of functional source its roadmap deliberately adds. With 8.9 KB of headroom ANY commit reds this gate, which is the failure the 2026-08-20 note predicted in writing, arriving a second time three days later. Max = 8.4083 \u00d7 1.095, derived from this file's own regression_pct: 10 rather than from the tripping measurement; last_measured records CI's 8.416, the enforcing environment and the higher of the disagreeing pair. GIVEN UP: ~0.79 MB of unpoliced accretion \u2014 this gate catches a step change in payload, which regression_pct still catches at any cap, and it cannot police 17 KB increments. REJECTED, measured rather than argued: payload reduction inside the PR \u2014 the whitelist is already tight (docs/guidelines/ plus three named contracts), tests/ is 6 KB and agents/ 39 KB uncompressed, so excluding both saves ~13 KB compressed and does not clear even this one PR. The structural surface the 2026-08-20 note named (src/scripts/ at 14.9 MB unpacked, src/agent-src/ duplicating dist/agent-src/) is still unexamined and still the open debt this raise defers. Revisit-if: a single PR moves the figure by more than regression_pct, or the drain ends and the cap can ratchet DOWN from a re-measured trunk \u2014 never up again from a fresh trip. DECIDED BY: maintainer, numbered-options option 1, after the alternative above was measured and the exhaustion was reported rather than the cap raised silently.",
|
|
13
|
+
"method": "npm pack --dry-run --json --ignore-scripts \u2192 dist.size / 1e6 (the compressed tarball a consumer actually downloads)",
|
|
14
|
+
"baseline_note_2026_08_24": "8.4 \u2192 9.1 re-baselined 2026-08-24, and this is a RATCHET RESET rather than the config bent around a failing check. The discriminator this file demands, answered with a measurement rather than an argument: THE TRUNK WAS ALREADY AT THE CEILING BEFORE THE CHANGE THAT TRIPPED IT EXISTED. `origin/main` at f16c7d9df measures 8.3911 under the documented conditions \u2014 8.9 KB of headroom against an 8.4 cap, i.e. 0.1 %. An addition of any size crosses it. That is verbatim the failure mode the 2026-08-20 note predicted in writing \u2014 'a cap pinned just above the measurement reds on the next commit and teaches the reader to raise it again' \u2014 arriving on schedule for the SECOND time, which is why the correction here is the headroom and not the payload. TRIP CAUSE: merging `origin/main` into `drain/chained-clip-continuity` (PR #1598). The branch adds ~2,600 net lines inside packed paths \u2014 `src/scripts/lint_adapter_tier.ts` (662 lines; it is the gate that verifies the generated tier table in `docs/contracts/provider-lifecycle.md`, so it must ship), the ai-video adapter / seam-plan / stitch shell libraries, and the `model-capabilities/*.json` files read at runtime \u2014 landing 39 KB over the cap. NEITHER SIDE WAS OVER ALONE; together they cross, which is the shape a merge produces and no per-branch check can see. MEASURED, on two clean detached worktrees with unbuilt `dist/` per `measurement_conditions` (so dist/cli, dist/ui, dist/mcp and dist/hooks absent): main 8.3911 (2,746 entries) \u00b7 branch 8.4305 (2,753 entries) \u00b7 CI 8.439 (Consistency job 97266868959). `last_measured` records CI's 8.439 \u2014 the enforcing environment and the higher of the disagreeing pair, per the rule the 2026-08-10 and 2026-08-20 notes both applied to their own; the ~8 KB CI-over-local gap matches the pattern both recorded. The 10 % regression rule did NOT trip (threshold 8.586 against the prior `last_measured` 7.805); only the absolute cap did. Max set to 9.1, ~7.8 % headroom over 8.439, which is the ~8 % the 5.903/6.4, 7.238/7.8 and 7.805/8.4 pairs all carried: deliberately not a number that merely clears. ALTERNATIVE EXAMINED AND NOT TAKEN, measured rather than argued, and its verdict left HONESTLY OPEN: excluding `src/scripts/ai_council/` \u2014 the tree the 2026-08-20 note names as the one whose consumer need is 'unverified', 0.903 MB as measured here \u2014 saves 270 KB compressed (8.4305 \u2192 8.1607, under the OLD cap with 239 KB to spare). It is not taken here because whether it is SAFE is still undecided, and this note deliberately does not decide it. `src/server/routes/wizard.ts:48` imports `apiOnQuotaView` from `scripts/ai_council/transport_resolver.js`, and `council:status` is a registered verb in `src/cli/registry.ts` \u2014 but the specifier ends in `.js` and therefore cannot settle whether it resolves to the TS source under `src/scripts/` or to built output under `dist/` in a published install. An earlier draft of this note asserted that the exclusion 'breaks the wizard quota view in every consumer install'; that was an over-claim read off the specifier, and it is retracted here rather than quietly dropped. What IS established: `src/cli/python/workspace_hosts.ts:180-191` records a real `ERR_MODULE_NOT_FOUND` in a global install caused by a shipped module importing from a directory absent from `files[]`, and `src/server/routes/wizard.ts:136-137` invokes `bash src/scripts/install_anthropic_key.sh` BY PATH at runtime. So a blanket trim of `src/scripts/` is unsafe, while the ai_council-specific verdict needs a global-install smoke test rather than a reading of an import. THE DEBT IS NOW WRITTEN DOWN, which is the one thing the 2026-08-20 note promised and did not deliver: it said 'this raise buys the time to write one [a roadmap]', and no roadmap was ever written \u2014 a grep of `agents/roadmaps/` (active, `stubs/`, `later/`, `archive/`) finds no payload-reduction plan. `agents/roadmaps/archive/road-to-npm-payload-reduction.md` lands in this same change and carries the measured split: `src/scripts/` is 16.384 MB of the 28.604 MB unpacked payload (57.3 %, 1,158 files) and is the actual growth surface; `dist/agent-src/` is 8.040 MB; `src/agent-src/` is 1.347 MB and partly duplicates it, unmeasured until that roadmap's Phase 1.3. Its Phase 2.3 lowers this cap again, so `max: 9.1` still standing later is the visible signal the plan did not finish. [AMENDED 2026-08-24 by the run that finished it, because that sentence would otherwise mislead in the opposite direction: the plan DID finish, and 9.1 is now its RESULT rather than its deferral signal \u2014 see baseline_note_2026_08_24_lowered. The roadmap path in this sentence was rewritten from agents/roadmaps/ to agents/roadmaps/archive/ by the archival ref-migration, so a dated note now points at a path that did not exist on its own date; the migration is kept because the reference must resolve, and it is flagged here rather than left to read as if the file had always been archived.] A raise that defers the same debt a fourth time with no plan is a formality, so this one carries the plan. DECIDED BY: maintainer, on the PR that tripped it, chosen from numbered options carrying the measurements above rather than applied to make a red go away \u2014 and the write itself was performed by the maintainer, because the block-config-weakening guard refused four agent attempts at this file. That is the standing this file's `owner: maintainer` requires, enforced rather than asserted. MET A SECOND, INDEPENDENT RESET IN A MERGE, 2026-08-24: the drain's council-evidence-integrity branch reached the same diagnosis from the same measurement (main at 8.3911, 8.9 KB of headroom) and set 9.2 instead of 9.1, landing on trunk first. The HIGHER cap prevails and BOTH derivations are kept, because two independent readings converging on one trip cause is the strongest evidence this entry has ever carried \u2014 and dropping one of them would leave the record looking like a single unreviewed judgement. `last_measured` is re-measured on the merged tree rather than taken from either side, per the method every prior entry here prescribes.",
|
|
15
|
+
"baseline_note_2026_08_20": "7.8 \u2192 8.4 re-baselined 2026-08-20, and this is a RATCHET RESET rather than the config bent around a failing check \u2014 the discriminator the 2026-08-10 note demands, answered here. TRIP CAUSE: nothing was added. `origin/main` at cfd8426d9 measures 7.7916 under the documented conditions, and CI reads ~7 KB above the local figure, so trunk itself already stood ~8 KB below a 7.8 cap before the release branch existed; the 14.6.0 CHANGELOG entry (6.3 KB \u2014 a file on the release-PR shape allowlist, i.e. the release's own permitted payload) is what crossed it, at 7.7979 local / 7.805 CI. That is precisely the failure mode the 2026-08-10 note predicted in writing \u2014 'a cap pinned just above the measurement reds on the next commit and teaches the reader to raise it again' \u2014 arriving on schedule, which is why the correction here is the headroom and not the payload. MEASURED, on a clean clone of each tree with the method `measurement_conditions` documents (unbuilt dist/, so dist/cli, dist/ui, dist/mcp and dist/hooks absent): main 7.7916 \u00b7 release/14.6.0 7.7979 \u00b7 CI 7.805 (Consistency job 96239721013). `last_measured` records CI's 7.805 \u2014 the enforcing environment and the higher of the disagreeing pair, per the same rule the 2026-08-10 note applied to its own. Max set to 8.4, ~7.6 % headroom over 7.805, which is the ~8 % both the 5.903/6.4 and 7.238/7.8 pairs carried: deliberately not a number that merely clears. ALTERNATIVE EXAMINED AND REJECTED, measured rather than argued: forcing the CHANGELOG era split early \u2014 the one payload reduction that IS on the release-PR allowlist, so it could have landed without touching main at all \u2014 moves the 144-line 14.5.0 section (7,266 bytes) into `docs/archive/`, which sits outside `files[]`. It saves 1.0 KB compressed (7.7979 \u2192 7.7969). Prose compresses; a ~7 KB deficit cannot be closed by relocating 7 KB of prose. Recorded so it is not re-proposed as the cheap fix it looks like. NOT EXAMINED HERE, and named as the open question this raise defers rather than answers: `src/scripts/` is 14.9 MB of the 26.0 MB unpacked payload and is the actual growth surface, `src/agent-src/` partly duplicates `dist/agent-src/`, and whether a consumer needs the 846 KB `src/scripts/ai_council/` tree at all is unverified. Each is a structural change with its own blast radius, not a release-time edit \u2014 that belongs in a roadmap, and this raise buys the time to write one. A debt this note records, not one it discharges. DECIDED BY: maintainer, on the release that tripped it, in its own PR against main \u2014 `src/config/pack-size-budget.json` is not on the release-PR shape allowlist, so this cannot ride the release branch and is not smuggled into one.",
|
|
16
|
+
"baseline_note_2026_08_10": "6.9 \u2192 7.8 re-baselined 2026-08-10. WHICH OF THE TWO THIS IS, stated because the guard asks: a RATCHET RESET, not the config bent around a failing check \u2014 and the discriminator is that the payload is real and needed rather than that the check was inconvenient. The 44 KB is two source files a shipped instruction depends on, the cheaper alternative was examined and rejected on that ground (below), the new cap carries ~8% headroom over the higher of two disagreeing measurements rather than clearing by a hair, and the raise was put to the maintainer as a decision instead of applied to make a red go away. A reader who disagrees has everything needed to reverse it: the measurement, its method, the trip cause, and the rejected option. Maintainer-decided in the PR that tripped it, surfaced rather than smuggled \u2014 the same standing this file's `owner: maintainer` requires. MEASURED TWICE, and the two do not agree: CI reported 6.907 on this exact commit, a local run under the documented conditions reports 7.238. The 331 KB gap is UNEXPLAINED \u2014 the tree matches the pushed commit and only this file differs \u2014 so the cap is set over the HIGHER figure rather than the convenient one, and the discrepancy is recorded here as an open question instead of resolved by assumption. A third party reproducing this should expect either number and should not treat the lower one as authoritative. Separately, and this part IS understood: `npm pack --dry-run --ignore-scripts` in a worktree that has been BUILT reads 8.45, because the flag assumes dist/cli, dist/ui, dist/mcp and dist/hooks are absent and a built tree has them. That figure is not comparable to this budget and must never be written here \u2014 recorded because it is a trap the documented method invites. Trip cause: road-to-conformance-round5 Phase 3 added src/scripts/hooks/turn_end_gate_hook.ts (32 KB) and src/scripts/measure_turn_end_gate.ts (12 KB) in packed paths plus schema/template/contract growth, landing 7 KB over a 6.9 cap. Max set to 7.8 (~8% headroom over 7.238, and ~13% over CI's 6.907) for the reason the 2026-08-05 note already gives: a cap pinned just above the measurement reds on the next commit and teaches the reader to raise it again. ALTERNATIVE EXAMINED AND REJECTED, so it is not re-proposed: dropping measure_turn_end_gate.ts from the pack would have cleared the cap with room, but the settings description added in the same change instructs CONSUMERS to run that script against their own transcript store before arming the gate \u2014 excluding it would break a shipped instruction.",
|
|
17
|
+
"baseline_note": "5.903 \u2192 6.398 re-baselined 2026-08-05. This is a RE-BASELINE, not a carve-out for the change that tripped it: measured on the tracked tree, `origin/main` alone was already at 6.372 of a 6.4 cap, so 28 KB of headroom remained after months of accretion and the next legitimate addition of any size was going to cross it. The addition here is 26 KB \u2014 docs/contracts/settings-classes.md (the A/B/C fence, read at RUNTIME by the settings writer, so it must ship) plus src/server/io/yamlIO.ts (imported by that writer to preserve the user's comments). CI measures ~4 KB above the local figure because it regenerates dist/agent-src first. Max set to 6.9 rather than to a number that merely clears: a cap pinned 2 KB above the measurement reds on the next commit and teaches the reader to raise it again, which is how a budget becomes a formality. That restores the ~8% headroom the 5.903/6.4 pair originally carried. The `owner: maintainer` on this file stands \u2014 this raise is surfaced in the PR for that decision, not smuggled.",
|
|
18
|
+
"baseline_note_2026_08_24_lowered": "9.2 -> 9.1 LOWERED 2026-08-24 \u2014 the first DOWNWARD move in this file's history, and the reason it is possible is that road-to-npm-payload-reduction measured the lever the previous four raises kept deferring. Method, because the verdicts turn on it: a behavioural global-install harness (src/scripts/pack_install_smoke.ts) packs a real BUILT tarball, installs it into a throwaway prefix, and runs eleven consumer probes including the bash orchestrator FROM the installed tree, which is the only probe that exercises path-reachability rather than imports. Sensitivity was proven by sabotage before any verdict was trusted: excluding src/scripts/_lib/ produces ERR_MODULE_NOT_FOUND on four probes. WHAT THE BISECT FOUND, and it retires a suggestion this file has carried since 2026-08-20: EVERY named subtree SHIPS. src/scripts/ai_council/ \u2014 the 270 KB candidate the 2026-08-24 note left explicitly undecided \u2014 breaks council:status AND hooks:status with ERR_MODULE_NOT_FOUND. So does src/scripts/hooks/ (271.5 KB), src/scripts/_cli/ (204.1 KB), src/agent-src/ (101.8 KB), src/scripts/ai-video/ (95.4 KB, its shell entry point), src/scripts/mcp_server/ (53.1 KB). Two of those first read GREEN and flipped RED when the probe set was widened with mcp:setup and an ai-video shell check \u2014 recorded because it is the exact false-negative shape this file's own Risk 2 names, caught rather than shipped. WHAT IS ACTUALLY REMOVABLE is three FILE PATTERNS, not subtrees, and no prior note looked for them: dist/**/*.map (323.5 KB), dist/agent-src/skills/**/evals/** (56.2 KB), src/**/*.test.ts + *.spec.ts (22.6 KB) \u2014 402.9 KB on the built tarball, all eleven probes green together. MEASURED under this file's own documented conditions (npm pack --dry-run --ignore-scripts, clean unbuilt worktree, which is what check_pack_size reads): 8.5596 -> 8.4667 MB, 2,775 -> 2,609 entries, a 92.9 KB drop. The gap between 402.9 KB and 92.9 KB is not a discrepancy: most of the .map saving lives in dist/cli, dist/ui, dist/mcp and dist/hooks, which --ignore-scripts excludes by design. HEADROOM IS 7.4 %, NOT 8 %, and the number is stated exactly rather than rounded up to match the pattern: 9.1 over the CI-adjusted 8.475 (local 8.4667 plus the ~8 KB CI delta every prior note here records) is 7.37 %. The 5.903/6.4, 7.238/7.8, 7.805/8.4 and 8.439/9.1 pairs carried ~8 %; this one carries slightly less, which is a real if small increase in flake risk and is why the falsifier below names it. STILL OPEN, quantified for the first time: src/agent-src/ is 94.2 % byte-identical to dist/agent-src/ (284 of 297 files, 2,144,870 of 2,276,707 bytes, content-hash diff). Two prior notes called this 'partial'; it is near-total. It is NOT removable by exclusion \u2014 nine shipped scripts under src/scripts/ import through it (build_archive_index, check_estate_count, eval_ui_triviality, explain_run, lint_ui_stack_bundles, skill_usage_report, smoke_quickstart, telemetry_disclosure_hook, utilization_report) while dist/agent-src/ is the tree the installer deploys, so the two copies ship for different reasons. Repointing those imports at dist/ would make source depend on a generated projection, which src/rules/source-of-truth.md exists to prevent. AI council 2026-08-24, 2/2: that needs an ADR covering compiled script entry points and asset resolution, not another files[] experiment. Worth ~102 KB and deliberately not taken here. TRADE-OFF ACCEPTED, named rather than absorbed: excluding dist/**/*.map means published packages carry no source maps, so consumer stack traces show compiled names. GREEN here means 'no regression across the recorded eleven-probe matrix', never 'semantically equivalent'. REVISIT-IF: three clean CI runs measure above 9.1 (the method does not match the gate); or observed run-to-run variance exceeds the 7.4 % margin, making the ratchet noise rather than a floor; or the src/agent-src/ ADR lands and the cap can drop again. NEVER raise it again from a fresh trip without the discriminator the 2026-08-10 note demands. DECIDED BY: AI council 2026-08-24, 2/2 convergent (anthropic/claude-sonnet-4-5 + openai/codex-default, 2 rounds, blind peer review), on a maintainer delegation of owner-reserved blockers for an autonomous drain run. Both seats independently required the 7.4 % to be stated exactly and the GREEN to be scoped to the probe matrix."
|
|
18
19
|
}
|
|
19
20
|
},
|
|
20
21
|
"per_skill_share": {
|
|
@@ -25,9 +26,35 @@
|
|
|
25
26
|
"design-intelligence": {
|
|
26
27
|
"max_pct": 23.5,
|
|
27
28
|
"measured_pct": 22.63,
|
|
28
|
-
"reason": "771 KB of BM25 corpus (27 CSVs + 16 design-language prose specs + manifest.json) consumed at runtime by corpus-grounding's retriever, and referenced by 6 further skills. Moving it behind a lazy fetch would add a network dependency to a skill that works offline today
|
|
29
|
-
"baseline_note_2026_08_13": "23.0
|
|
29
|
+
"reason": "771 KB of BM25 corpus (27 CSVs + 16 design-language prose specs + manifest.json) consumed at runtime by corpus-grounding's retriever, and referenced by 6 further skills. Moving it behind a lazy fetch would add a network dependency to a skill that works offline today \u2014 the same trade-off ADR-061 \u00a78 already REJECTED for a 745 KB font index. The exception is visible debt, not an endorsement: raising max_pct requires a reason in the same commit.",
|
|
30
|
+
"baseline_note_2026_08_13": "23.0 \u2192 23.5 on 2026-08-13, and the reason belongs in this file per the sentence above. WHAT WAS ADOPTED: data/motion.csv, 10.5 KB, 16 rows. WHY IT IS NOT DISCRETIONARY: the roadmap's three design dials were all in its original scope, and two of the three (variance, density) were already portable \u2014 variance's keywords resolve against the local styles.csv (2/3/3 hits) and density is three pure range maps. The motion dial is not: upstream filters its corpus rows by `Intensity Tier == <dial tier>`, and that column exists only in motion.csv, so shipping the dial without the file means shipping a flag that silently does nothing. Two of three dials plus an inert third is a worse surface than three working ones. WHAT WAS DECLINED IN THE SAME PASS, so this is not a ratchet slipping: google-fonts.csv (743 KB \u2014 ADR-061 \u00a78 rejects it by name and by size; the 2026-06-16 amendment authorises a slim top-N slice from a different mirror, not this file), typography.csv (our curated font-pairings-reference.csv is the ADR's working substitution), six desktop-UI stacks outside frontend-design's scope, and eleven content-drifted files nobody has reviewed. The base pin in ATTRIBUTION.md is deliberately NOT bumped for the same reason. HONEST LIMIT ON THE NUMBER: 22.63 is the committed measurement, not a fresh one \u2014 check_pack_size cannot be re-measured from a built worktree (it reads 9.096 against the 7.8 packed cap before any change, the trap the packed_size_mb note above documents), so the post-adoption share is arithmetic (~22.87 %) and the new cap carries ~0.6 pp over it rather than clearing by a hair. DECIDED BY: AI council, 2026-08-13, on a maintainer delegation \u2014 and honestly, by ONE member over two rounds, not by convergence: the second seat returned exit_1 (the codex CLI refuses a git worktree as an untrusted directory). Recorded as a single-member review in agents/evidence/analysis/design-system-blockers-council.md."
|
|
30
31
|
}
|
|
31
32
|
}
|
|
33
|
+
},
|
|
34
|
+
"built_surface_measurement_2026_08_24": {
|
|
35
|
+
"purpose": "road-to-standing-payload-truth 2.2 and 2.3. Every cap raise in this file's baseline_note_* history was measured on the UNBUILT tree, and nothing recorded what the BUILT surface \u2014 the one a consumer installs \u2014 actually is. Two figures for one lever with no label is how the confusion this file warns about starts, so both are recorded here with the command that produced each.",
|
|
36
|
+
"unbuilt": {
|
|
37
|
+
"packed_mb": 8.4953,
|
|
38
|
+
"unpacked_mb": 28.7516,
|
|
39
|
+
"entries": 2614,
|
|
40
|
+
"command": "npm pack --dry-run --json --ignore-scripts # clean detached worktree, dist/ unbuilt",
|
|
41
|
+
"note": "THIS is the surface every packed_size_mb cap in this file was set against, including max 9.1."
|
|
42
|
+
},
|
|
43
|
+
"built": {
|
|
44
|
+
"packed_mb": 10.5525,
|
|
45
|
+
"unpacked_mb": 37.3775,
|
|
46
|
+
"entries": 2808,
|
|
47
|
+
"command": "npm run build && npm pack --dry-run --json # prepack runs the build; this is what publish emits",
|
|
48
|
+
"note": "The surface a consumer downloads and installs. Gated by nothing \u2014 see _comment."
|
|
49
|
+
},
|
|
50
|
+
"delta": {
|
|
51
|
+
"packed_mb": 2.0572,
|
|
52
|
+
"unpacked_mb": 8.6259,
|
|
53
|
+
"entries": 194,
|
|
54
|
+
"correction": "The roadmap and an earlier note in this file put the built artifact at '~5.4 MB larger'. MEASURED it is +8.6259 MB unpacked and +2.0572 MB packed. The 5.4 figure is stale and is corrected here rather than carried; a reader comparing 8.4953 against 28.22 or 37.3775 was comparing three different surfaces."
|
|
55
|
+
},
|
|
56
|
+
"what_this_says_about_the_removed_gate": "unpacked_size_mb was removed on 2026-08-04 with max 28 and a measurement of 28.22 \u2014 0.8 % over. The built unpacked size TODAY is 37.3775 MB, i.e. that cap would now be exceeded by 33.5 %. Reinstating it is therefore not 'add a key with a measured baseline': it is setting a cap a third higher than the one whose 0.8 % breach caused its removal. Recorded because it makes the 2026-08-04 decision look better in hindsight than it did at the time, and because an owner reopening it under decision-revisit-gate should start from 37.4, not from 28.",
|
|
57
|
+
"measured_at": "2026-08-24",
|
|
58
|
+
"measured_on": "One machine, two worktrees of the same commit. CI has historically read ~8 KB above the local packed figure; no CI reading of the BUILT surface exists, so the built numbers here are local-only and are not a CI baseline."
|
|
32
59
|
}
|
|
33
60
|
}
|