@event4u/agent-config 3.2.0 → 4.1.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/.agent-src/README.md +2 -2
- package/.agent-src/commands/agent-handoff.md +31 -2
- package/.agent-src/commands/agent-status.md +6 -6
- package/.agent-src/commands/agents/audit.md +8 -8
- package/.agent-src/commands/agents/init.md +25 -1
- package/.agent-src/commands/agents/optimize.md +3 -3
- package/.agent-src/commands/agents/user.md +1 -1
- package/.agent-src/commands/agents.md +1 -1
- package/.agent-src/commands/analyze-reference-repo.md +1 -1
- package/.agent-src/commands/check-current-md.md +8 -8
- package/.agent-src/commands/{compress.md → condense.md} +55 -55
- package/.agent-src/commands/context/create.md +7 -4
- package/.agent-src/commands/context/refactor.md +3 -1
- package/.agent-src/commands/feature/dev.md +1 -1
- package/.agent-src/commands/feature/explore.md +1 -1
- package/.agent-src/commands/feature/plan.md +10 -8
- package/.agent-src/commands/feature/refactor.md +3 -1
- package/.agent-src/commands/feature/roadmap.md +7 -4
- package/.agent-src/commands/fix/portability.md +3 -3
- package/.agent-src/commands/fix/refs.md +4 -4
- package/.agent-src/commands/ghostwriter.md +2 -2
- package/.agent-src/commands/memory/learn-low-impact.md +3 -3
- package/.agent-src/commands/module/explore.md +34 -8
- package/.agent-src/commands/optimize/agents-dir.md +9 -7
- package/.agent-src/commands/optimize/augmentignore.md +2 -2
- package/.agent-src/commands/optimize/skills.md +9 -9
- package/.agent-src/commands/post-as.md +1 -1
- package/.agent-src/commands/project-analyze.md +2 -2
- package/.agent-src/commands/project-health.md +3 -2
- package/.agent-src/commands/research/deep.md +1 -1
- package/.agent-src/commands/research/report.md +1 -1
- package/.agent-src/commands/research.md +1 -1
- package/.agent-src/commands/roadmap/ai-council.md +1 -1
- package/.agent-src/commands/roadmap/create.md +9 -4
- package/.agent-src/commands/rule-compliance-audit.md +1 -1
- package/.agent-src/commands/upstream-contribute.md +14 -14
- package/.agent-src/commands/video/from-script.md +1 -1
- package/.agent-src/commands/video/scene.md +1 -1
- package/.agent-src/commands/video/stitch.md +1 -1
- package/.agent-src/commands/video/storyboard.md +1 -1
- package/.agent-src/commands/video.md +1 -1
- package/.agent-src/contexts/augment-infrastructure.md +1 -1
- package/.agent-src/contexts/authority/commit-mechanics.md +15 -0
- package/.agent-src/contexts/authority/kernel-rule-edits.md +3 -3
- package/.agent-src/contexts/authority/scope-mechanics.md +1 -1
- package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +28 -28
- package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +4 -4
- package/.agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
- package/.agent-src/contexts/contracts/artifact-engagement-flow.md +6 -6
- package/.agent-src/contexts/contracts/command-suggestion-flow.md +3 -3
- package/.agent-src/contexts/contracts/emergency-triage-block.md +4 -4
- package/.agent-src/contexts/contracts/frugality-charter.md +3 -3
- package/.agent-src/contexts/documentation-hierarchy.md +14 -7
- package/.agent-src/contexts/execution/autonomy-examples.md +1 -1
- package/.agent-src/contexts/execution/cheap-question-mechanics.md +39 -2
- package/.agent-src/contexts/execution/roadmap-process-loop.md +28 -5
- package/.agent-src/contexts/override-system.md +5 -5
- package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
- package/.agent-src/personas/advisors/first-principles.md +1 -1
- package/.agent-src/personas/hollywood-director.md +1 -1
- package/.agent-src/rules/architecture.md +5 -1
- package/.agent-src/rules/augment-edit-discipline.md +5 -5
- package/.agent-src/rules/augment-source-of-truth.md +15 -15
- package/.agent-src/rules/commit-conventions.md +1 -1
- package/.agent-src/rules/commit-policy.md +10 -0
- package/.agent-src/rules/domain-adoption-policy.md +3 -3
- package/.agent-src/rules/fast-path-marker-visibility.md +3 -3
- package/.agent-src/rules/finance-safety-floor.md +1 -1
- package/.agent-src/rules/framework-neutrality-in-generic-skills.md +8 -8
- package/.agent-src/rules/git-history-discipline.md +1 -1
- package/.agent-src/rules/improve-before-implement.md +2 -2
- package/.agent-src/rules/language-and-tone.md +2 -2
- package/.agent-src/rules/media-governance-routing.md +5 -5
- package/.agent-src/rules/no-attribution-footers.md +1 -0
- package/.agent-src/rules/no-cheap-questions.md +3 -0
- package/.agent-src/rules/no-decorative-emojis-in-git-surfaces.md +111 -0
- package/.agent-src/rules/no-pr-progress-comments.md +118 -0
- package/.agent-src/rules/no-roadmap-references.md +3 -3
- package/.agent-src/rules/non-destructive-by-default.md +1 -1
- package/.agent-src/rules/persona-governance.md +3 -3
- package/.agent-src/rules/preservation-guard.md +15 -15
- package/.agent-src/rules/roadmap-ci-steps-policy.md +7 -3
- package/.agent-src/rules/rule-type-governance.md +1 -1
- package/.agent-src/rules/skill-quality.md +1 -1
- package/.agent-src/rules/{caveman-speak.md → telegraph-speak.md} +15 -15
- package/.agent-src/rules/token-optimizer-maintenance.md +6 -6
- package/.agent-src/skills/agent-docs-writing/SKILL.md +17 -11
- package/.agent-src/skills/agents-md-thin-root/SKILL.md +9 -9
- package/.agent-src/skills/check-refs/SKILL.md +2 -2
- package/.agent-src/skills/code-refactoring/SKILL.md +2 -2
- package/.agent-src/skills/command-writing/SKILL.md +19 -19
- package/.agent-src/skills/comp-banding/SKILL.md +1 -1
- package/.agent-src/skills/condense-memory/SKILL.md +131 -0
- package/.agent-src/skills/context-authoring/SKILL.md +2 -2
- package/.agent-src/skills/context-document/SKILL.md +5 -3
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +3 -3
- package/.agent-src/skills/description-assist/SKILL.md +2 -2
- package/.agent-src/skills/git-workflow/SKILL.md +1 -1
- package/.agent-src/skills/guideline-writing/SKILL.md +5 -5
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +4 -4
- package/.agent-src/skills/lint-skills/SKILL.md +3 -3
- package/.agent-src/skills/md-language-check/SKILL.md +2 -2
- package/.agent-src/skills/module-detect-on-the-fly/SKILL.md +138 -0
- package/.agent-src/skills/module-management/SKILL.md +166 -94
- package/.agent-src/skills/override-management/SKILL.md +1 -1
- package/.agent-src/skills/persona-writing/SKILL.md +5 -5
- package/.agent-src/skills/positioning-strategy/SKILL.md +1 -1
- package/.agent-src/skills/project-docs/SKILL.md +6 -4
- package/.agent-src/skills/readme-reviewer/SKILL.md +2 -2
- package/.agent-src/skills/roadmap-management/SKILL.md +13 -1
- package/.agent-src/skills/roadmap-writing/SKILL.md +4 -2
- package/.agent-src/skills/rule-refactor/SKILL.md +5 -5
- package/.agent-src/skills/rule-writing/SKILL.md +18 -18
- package/.agent-src/skills/script-writing/SKILL.md +1 -1
- package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +6 -6
- package/.agent-src/skills/skill-management/SKILL.md +21 -21
- package/.agent-src/skills/skill-reviewer/SKILL.md +2 -2
- package/.agent-src/skills/skill-writing/SKILL.md +8 -8
- package/.agent-src/skills/skill-writing/evals/triggers.json +1 -1
- package/.agent-src/skills/token-optimizer/SKILL.md +4 -4
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +1 -1
- package/.agent-src/skills/upstream-contribute/SKILL.md +17 -17
- package/.agent-src/templates/AGENTS.md +1 -0
- package/.agent-src/templates/agent-settings.md +24 -13
- package/.agent-src/templates/agents/agent-project-settings.example.yml +61 -2
- package/.agent-src/templates/command.md +5 -5
- package/.agent-src/templates/contexts.md +1 -1
- package/.agent-src/templates/copilot-instructions.md +8 -8
- package/.agent-src/templates/features.md +1 -1
- package/.agent-src/templates/hooks/pre-commit-frontmatter +2 -2
- package/.agent-src/templates/hooks/pre-commit-roadmap-progress +3 -3
- package/.agent-src/templates/persona.md +2 -2
- package/.agent-src/templates/roadmaps.md +1 -1
- package/.agent-src/templates/rule.md +13 -13
- package/.agent-src/templates/scripts/memory_lookup.py +1 -1
- package/.agent-src/templates/scripts/memory_status.py +2 -2
- package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +195 -1
- package/.agent-src/templates/scripts/work_engine/orchestration.py +1 -1
- package/.agent-src/templates/skill-archive-note.md +5 -5
- package/.agent-src/templates/skill.md +1 -1
- package/.claude-plugin/marketplace.json +4 -4
- package/AGENTS.md +16 -16
- package/CHANGELOG.md +204 -2
- package/CONTRIBUTING.md +31 -12
- package/README.md +18 -10
- package/config/agent-settings.template.yml +22 -2
- package/config/discovery/unassigned-artefacts.yml +24 -24
- package/config/profiles/full.ini +1 -1
- package/dist/cli/agent-config.js +52 -3
- package/dist/cli/agent-config.js.map +1 -1
- package/dist/cli/commands/uiServe.js +9 -0
- package/dist/cli/commands/uiServe.js.map +1 -1
- package/dist/cli/registry.js +2 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +649 -606
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +439 -437
- package/dist/discovery/trust-report.md +5 -5
- package/dist/discovery/workspaces.json +450 -448
- package/dist/install/apply.js +238 -0
- package/dist/install/apply.js.map +1 -0
- package/dist/install/atomic.js +92 -0
- package/dist/install/atomic.js.map +1 -0
- package/dist/install/bridges/augment.js +20 -0
- package/dist/install/bridges/augment.js.map +1 -0
- package/dist/install/bridges/claude.js +44 -0
- package/dist/install/bridges/claude.js.map +1 -0
- package/dist/install/bridges/cline.js +69 -0
- package/dist/install/bridges/cline.js.map +1 -0
- package/dist/install/bridges/copilot.js +28 -0
- package/dist/install/bridges/copilot.js.map +1 -0
- package/dist/install/bridges/cursor.js +34 -0
- package/dist/install/bridges/cursor.js.map +1 -0
- package/dist/install/bridges/gemini.js +39 -0
- package/dist/install/bridges/gemini.js.map +1 -0
- package/dist/install/bridges/index.js +88 -0
- package/dist/install/bridges/index.js.map +1 -0
- package/dist/install/bridges/marker-content.js +153 -0
- package/dist/install/bridges/marker-content.js.map +1 -0
- package/dist/install/bridges/markers.js +42 -0
- package/dist/install/bridges/markers.js.map +1 -0
- package/dist/install/bridges/types.js +31 -0
- package/dist/install/bridges/types.js.map +1 -0
- package/dist/install/bridges/vscode.js +26 -0
- package/dist/install/bridges/vscode.js.map +1 -0
- package/dist/install/bridges/windsurf.js +35 -0
- package/dist/install/bridges/windsurf.js.map +1 -0
- package/dist/install/conflict.js +196 -0
- package/dist/install/conflict.js.map +1 -0
- package/dist/install/detect.js +218 -0
- package/dist/install/detect.js.map +1 -0
- package/dist/install/paths.js +82 -0
- package/dist/install/paths.js.map +1 -0
- package/dist/install/plan.js +157 -0
- package/dist/install/plan.js.map +1 -0
- package/dist/install/txlog.js +140 -0
- package/dist/install/txlog.js.map +1 -0
- package/dist/install/types.js +19 -0
- package/dist/install/types.js.map +1 -0
- package/dist/install/wizard-plan.js +184 -0
- package/dist/install/wizard-plan.js.map +1 -0
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +67 -19
- package/dist/server/app.js +6 -0
- package/dist/server/app.js.map +1 -1
- package/dist/server/routes/install.js +547 -0
- package/dist/server/routes/install.js.map +1 -0
- package/dist/server/routes/wizard.js +301 -6
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/server/routes/workspace.js +396 -0
- package/dist/server/routes/workspace.js.map +1 -0
- package/dist/server/schemas/settings.js +4 -3
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/index-BXZILUxe.css +1 -0
- package/dist/ui/assets/index-DLEuEW1V.js +35 -0
- package/dist/ui/assets/index-DLEuEW1V.js.map +1 -0
- package/dist/ui/index.html +2 -2
- package/docs/MIGRATION.md +1 -1
- package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
- package/docs/adrs/router/0001-three-tier-routing.md +4 -4
- package/docs/adrs/schema/0001-json-schema-frontmatter.md +1 -1
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +4 -4
- package/docs/adrs/{caveman → telegraph}/0001-default-off-until-bench.md +9 -9
- package/docs/adrs/telegraph/README.md +9 -0
- package/docs/architecture/augment-projection.md +4 -4
- package/docs/architecture/claude-bundle.md +1 -1
- package/docs/architecture/current-onboard-baseline.md +3 -3
- package/docs/architecture/multi-tool-projection.md +10 -10
- package/docs/architecture/source-projection.md +27 -27
- package/docs/architecture.md +19 -15
- package/docs/archive/CHANGELOG-pre-2.11.0.md +2 -2
- package/docs/archive/CHANGELOG-pre-2.15.0.md +3 -3
- package/docs/archive/CHANGELOG-pre-2.16.0.md +1 -1
- package/docs/archive/CHANGELOG-pre-2.2.0.md +70 -70
- package/docs/archive/CHANGELOG-pre-2.20.0.md +2 -2
- package/docs/archive/CHANGELOG-pre-2.25.0.md +15 -15
- package/docs/archive/CHANGELOG-pre-3.0.0.md +4 -4
- package/docs/archive/CHANGELOG-pre-3.1.0.md +2 -2
- package/docs/archive/CHANGELOG-pre-3.2.0.md +3 -3
- package/docs/benchmark.md +65 -0
- package/docs/benchmarks.md +18 -18
- package/docs/catalog.md +17 -15
- package/docs/contracts/CHANGELOG-conventions.md +2 -2
- package/docs/contracts/STABILITY.md +2 -2
- package/docs/contracts/adoption-signal-floor.md +110 -0
- package/docs/contracts/adr-chat-history-split.md +4 -4
- package/docs/contracts/adr-command-suggestion.md +4 -4
- package/docs/contracts/adr-gtm-context-spine.md +1 -1
- package/docs/contracts/adr-implement-ticket-runtime.md +4 -4
- package/docs/contracts/adr-install-user-type-axis.md +1 -1
- package/docs/contracts/adr-layout.md +2 -2
- package/docs/contracts/adr-mcp-runtime.md +1 -1
- package/docs/contracts/adr-product-ui-track.md +10 -10
- package/docs/contracts/adr-user-types-axis.md +3 -3
- package/docs/contracts/adr-wing4-context-spine.md +1 -1
- package/docs/contracts/agent-memory-contract.md +3 -3
- package/docs/contracts/agents-md-tech-stack.md +2 -2
- package/docs/contracts/ai-council-config.md +2 -2
- package/docs/contracts/at-rest-encryption.md +4 -0
- package/docs/contracts/audit-log-v1.md +1 -1
- package/docs/contracts/benchmark-ab-contract.md +101 -0
- package/docs/contracts/benchmark-corpus-spec.md +4 -4
- package/docs/contracts/benchmark-report-schema.md +5 -5
- package/docs/contracts/branch-protection-policy.md +98 -0
- package/docs/contracts/ci-cost-budget.md +106 -0
- package/docs/contracts/ci-green-floor.md +141 -0
- package/docs/contracts/command-clusters.md +6 -6
- package/docs/contracts/command-surface-tiers.md +2 -2
- package/docs/contracts/command-taxonomy.md +2 -2
- package/docs/contracts/{compression-default-kill-criterion.md → condensation-default-kill-criterion.md} +29 -29
- package/docs/contracts/config-presets.md +1 -1
- package/docs/contracts/context-paths.md +3 -3
- package/docs/contracts/context-spine.md +1 -1
- package/docs/contracts/cost-enforcement.md +1 -1
- package/docs/contracts/cost-summary-schema.md +12 -12
- package/docs/contracts/cross-wing-handoff.md +4 -4
- package/docs/contracts/daily-workspace.md +4 -0
- package/docs/contracts/decision-trace-v1.md +2 -2
- package/docs/contracts/discovery-manifest.md +4 -4
- package/docs/contracts/explain-modes.md +4 -0
- package/docs/contracts/file-ownership-matrix.json +3493 -3318
- package/docs/contracts/file-ownership-matrix.md +3 -3
- package/docs/contracts/frontmatter-contract.md +4 -4
- package/docs/contracts/ghostwriter-schema.md +3 -3
- package/docs/contracts/gui-wizard.md +1 -1
- package/docs/contracts/harness-expectations.md +123 -0
- package/docs/contracts/host-agent-protocol.md +4 -0
- package/docs/contracts/implement-ticket-flow.md +9 -9
- package/docs/contracts/install-scopes.md +77 -0
- package/docs/contracts/iron-law-overrides.txt +1 -1
- package/docs/contracts/kernel-membership.md +26 -26
- package/docs/contracts/linear-ai-rules-inclusion.md +1 -1
- package/docs/contracts/linter-structural-model.md +2 -2
- package/docs/contracts/load-context-budget-model.md +4 -4
- package/docs/contracts/load-context-schema.md +13 -13
- package/docs/contracts/local-analytics.md +4 -0
- package/docs/contracts/local-knowledge-ingestion.md +1 -1
- package/docs/contracts/mcp-beta-criteria.md +1 -1
- package/docs/contracts/mcp-cloud-scope.md +6 -6
- package/docs/contracts/mcp-phase-1-scope.md +3 -3
- package/docs/contracts/mcp-registry-manifest.schema.json +1 -1
- package/docs/contracts/mcp-tool-inventory.md +1 -1
- package/docs/contracts/mcp-tool-stub-envelope.md +1 -1
- package/docs/contracts/measurement-baseline.md +11 -11
- package/docs/contracts/mental-models.md +30 -30
- package/docs/contracts/multi-tool-projection-fidelity.md +4 -4
- package/docs/contracts/namespace.md +4 -4
- package/docs/contracts/orchestration-dsl-v1.md +7 -7
- package/docs/contracts/package-self-orientation.md +12 -12
- package/docs/contracts/persona-schema.md +6 -6
- package/docs/contracts/pilot/language-and-tone.md +1 -1
- package/docs/contracts/plain-language-surface.md +117 -0
- package/docs/contracts/profile-system.md +3 -3
- package/docs/contracts/release-pr-gating.md +103 -0
- package/docs/contracts/role-experience.md +3 -3
- package/docs/contracts/rule-classification.md +13 -13
- package/docs/contracts/rule-interactions.md +4 -4
- package/docs/contracts/rule-interactions.yml +30 -30
- package/docs/contracts/rule-priority-hierarchy.md +13 -13
- package/docs/contracts/rule-router.md +2 -2
- package/docs/contracts/safety-model.md +1 -1
- package/docs/contracts/skill-distribution-channels.md +61 -0
- package/docs/contracts/skill-domains.md +2 -2
- package/docs/contracts/smoke-contracts.md +5 -5
- package/docs/contracts/telegraph-telemetry.md +83 -0
- package/docs/contracts/trust-and-safety.md +5 -5
- package/docs/contracts/ui-stack-extension.md +7 -7
- package/docs/contracts/ui-track-flow.md +9 -9
- package/docs/contracts/user-type-schema.md +4 -4
- package/docs/contracts/workflow-packs.md +4 -4
- package/docs/contracts/workspace-documents.md +4 -0
- package/docs/customization.md +28 -8
- package/docs/decisions/ADR-001-kernel-swap-deferred.md +6 -6
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -11
- package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +2 -2
- package/docs/decisions/ADR-004-rule-governance-pruning.md +4 -4
- package/docs/decisions/ADR-005-subagent-worktrees.md +7 -7
- package/docs/decisions/ADR-011-domain-pack-readiness.md +6 -6
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +3 -3
- package/docs/decisions/ADR-015-discovery-manifest-contract.md +3 -3
- package/docs/decisions/ADR-017-monorepo-physical-layout.md +10 -10
- package/docs/decisions/ADR-018-trust-and-safety-layer.md +6 -6
- package/docs/decisions/ADR-019-router-json-dist-location.md +2 -2
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +2 -2
- package/docs/decisions/ADR-021-deployment-shape.md +1 -1
- package/docs/decisions/ADR-022-daily-workspace-decomposition.md +1 -1
- package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +129 -0
- package/docs/decisions/ADR-028-root-layout.md +147 -0
- package/docs/decisions/ADR-029-multi-workspace-deferred.md +122 -0
- package/docs/decisions/ADR-rule-kernel-and-router.md +5 -5
- package/docs/decisions/INDEX.md +8 -0
- package/docs/deploy/team-deployment-posture.md +20 -0
- package/docs/development.md +17 -17
- package/docs/distribution/registries.md +32 -0
- package/docs/distribution/registry-submissions.md +85 -0
- package/docs/distribution/telemetry-schema.md +1 -1
- package/docs/getting-started-by-role.md +45 -3
- package/docs/getting-started.md +2 -2
- package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
- package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
- package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
- package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
- package/docs/guidelines/agent-infra/direct-answers-demos.md +1 -1
- package/docs/guidelines/agent-infra/first-principles.md +2 -2
- package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
- package/docs/guidelines/agent-infra/layered-settings.md +56 -2
- package/docs/guidelines/agent-infra/mental-models.md +3 -3
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +2 -2
- package/docs/guidelines/agent-infra/rule-type-governance.md +1 -1
- package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +2 -2
- package/docs/guidelines/agent-infra/six-hats.md +3 -3
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
- package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +1 -1
- package/docs/guidelines/augment-portability-patterns.md +4 -4
- package/docs/guidelines/cross-role-handoff.md +2 -2
- package/docs/guidelines/php/php-coding-patterns.md +1 -1
- package/docs/guidelines/prompt-templates.md +6 -6
- package/docs/maintainers/dev-mode.md +1 -1
- package/docs/mcp-server.md +1 -1
- package/docs/mcp.md +1 -1
- package/docs/parity/bench-ruflo.json +3 -3
- package/docs/parity/bench.json +3 -3
- package/docs/parity/ruflo.md +3 -3
- package/docs/profiles.md +11 -11
- package/docs/quality.md +11 -11
- package/docs/safety.md +3 -3
- package/docs/setup/mcp-client-config.md +2 -2
- package/docs/setup/mcp-cloud-endpoints.md +1 -1
- package/docs/setup/mcp-cloud-setup.md +2 -2
- package/docs/setup/mcp-r2-bootstrap.md +2 -2
- package/docs/setup/mcp-server-docker.md +3 -3
- package/docs/setup/per-ide/windsurf.md +1 -1
- package/docs/skills-catalog.md +8 -7
- package/docs/troubleshooting.md +1 -1
- package/docs/walkthroughs/daily-workspace-a11y.md +87 -0
- package/llms.txt +7 -6
- package/package.json +1 -1
- package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
- package/scripts/_archive/README.md +2 -2
- package/scripts/_archive/_backfill_skill_domains.py +3 -3
- package/scripts/_archive/_bootstrap_tier_frontmatter.py +3 -3
- package/scripts/_archive/_p43_bodies.py +10 -10
- package/scripts/_archive/{_p43_compress.py → _p43_condense.py} +5 -5
- package/scripts/_archive/_p4_migrate.py +7 -7
- package/scripts/_archive/_phase2_shim_helper.py +1 -1
- package/scripts/_archive/_pilot_council_question.py +5 -5
- package/scripts/_cli/explain_last/inputs.py +1 -1
- package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
- package/scripts/_lib/agent_settings.py +195 -1
- package/scripts/_lib/agent_src.py +19 -19
- package/scripts/_lib/bench_ab_cache.py +162 -0
- package/scripts/_lib/bench_ab_scoring.py +209 -0
- package/scripts/_lib/bench_cost.py +2 -2
- package/scripts/_lib/bench_report.py +2 -2
- package/scripts/_lib/{bench_caveman.py → bench_telegraph.py} +21 -21
- package/scripts/_lib/{bench_caveman_report.py → bench_telegraph_report.py} +22 -22
- package/scripts/_lib/claude_desktop_bundler.py +5 -5
- package/scripts/_lib/module_detection.py +223 -0
- package/scripts/_lib/scope_guard.sh +162 -0
- package/scripts/_phase4_bucket.py +3 -3
- package/scripts/_pilot_measure.py +4 -4
- package/scripts/_tmp_scan_framework_leakage.py +1 -1
- package/scripts/adoption_report.py +195 -0
- package/scripts/adoption_snapshot.py +219 -0
- package/scripts/adoption_status.py +166 -0
- package/scripts/ai-video/lib/parse-blueprint.sh +1 -1
- package/scripts/ai_council/advisors.py +5 -5
- package/scripts/ai_council/compile_corpus.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +3 -3
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +2 -2
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +3 -3
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +6 -6
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +6 -6
- package/scripts/annotate_discovery.py +13 -13
- package/scripts/apply_modules_config.py +290 -0
- package/scripts/audit_adr_coverage.py +2 -2
- package/scripts/audit_auto_rules.py +2 -2
- package/scripts/audit_cloud_compatibility.py +3 -3
- package/scripts/audit_command_surface.py +9 -9
- package/scripts/audit_likelihood.py +2 -2
- package/scripts/audit_mcp_tools.py +1 -1
- package/scripts/audit_user_type_axis.py +2 -2
- package/scripts/bench_ab_cache_dispatch.py +68 -0
- package/scripts/bench_ab_clone.py +170 -0
- package/scripts/bench_ab_diff.py +227 -0
- package/scripts/bench_ab_integrity.py +143 -0
- package/scripts/bench_ab_run.py +235 -0
- package/scripts/bench_ab_task_runner.py +369 -0
- package/scripts/bench_ab_tracka_run.py +202 -0
- package/scripts/bench_baseline_ready.py +3 -3
- package/scripts/{bench_compress_memory.py → bench_condense_memory.py} +16 -16
- package/scripts/bench_drift_check.py +2 -2
- package/scripts/bench_per_tool.py +2 -2
- package/scripts/bench_run.py +36 -36
- package/scripts/bench_runner.py +2 -2
- package/scripts/bootstrap.sh +99 -0
- package/scripts/build_cloud_bundle.py +6 -6
- package/scripts/build_discovery_manifest.py +7 -7
- package/scripts/build_linear_digest.py +3 -3
- package/scripts/build_mcp_registry_manifest.py +2 -2
- package/scripts/build_rule_trigger_matrix.py +8 -8
- package/scripts/chat_history.py +5 -5
- package/scripts/check_always_budget.py +11 -5
- package/scripts/check_augment_description_cap.py +3 -3
- package/scripts/check_cluster_patterns.py +2 -2
- package/scripts/check_command_count_messaging.py +3 -3
- package/scripts/{check_compression.py → check_condensation.py} +34 -34
- package/scripts/{check_compressed_paths.py → check_condensed_paths.py} +8 -8
- package/scripts/check_context_paths.py +7 -7
- package/scripts/check_council_layout.py +2 -2
- package/scripts/check_council_references.py +9 -9
- package/scripts/check_iron_law_prominence.py +2 -2
- package/scripts/check_kernel_rule_bundle.py +2 -2
- package/scripts/check_module_management_neutral.py +149 -0
- package/scripts/check_no_roadmap_refs.py +9 -9
- package/scripts/check_portability.py +3 -3
- package/scripts/check_public_catalog_links.py +4 -4
- package/scripts/check_references.py +7 -6
- package/scripts/check_release_pr_shape.py +112 -0
- package/scripts/check_reply_consistency.py +3 -3
- package/scripts/check_safety_floor_untouched.py +1 -1
- package/scripts/check_template_pin_drift.py +5 -5
- package/scripts/check_token_optimizer_freshness.py +3 -3
- package/scripts/ci_status.py +301 -0
- package/scripts/ci_time_ratio.py +1 -1
- package/scripts/cleanup_other_scope.sh +146 -0
- package/scripts/compile_router.py +10 -10
- package/scripts/{compress.py → condense.py} +64 -64
- package/scripts/condense.sh +18 -0
- package/scripts/{compress_memory.py → condense_memory.py} +33 -33
- package/scripts/config/presets.py +2 -2
- package/scripts/config/profiles.py +1 -1
- package/scripts/cost_by_conversation.py +3 -3
- package/scripts/cost_summary.py +7 -7
- package/scripts/count_token_optimizer_usage.sh +1 -1
- package/scripts/gen_discovery_baseline.py +5 -5
- package/scripts/generate_index.py +6 -6
- package/scripts/generate_ownership_matrix.py +10 -10
- package/scripts/generate_pack_manifests.py +1 -1
- package/scripts/ghostwriter_fixture_allowlist.txt +1 -1
- package/scripts/install +3 -3
- package/scripts/install-hooks.sh +6 -6
- package/scripts/install.py +76 -11
- package/scripts/install.sh +187 -1
- package/scripts/inventory_frontmatter.py +2 -2
- package/scripts/iron_law_sha.py +3 -3
- package/scripts/lint_agents_layout.py +14 -7
- package/scripts/lint_agents_md.py +4 -4
- package/scripts/lint_archived_skills.py +3 -3
- package/scripts/lint_artefact_frontmatter.py +2 -2
- package/scripts/lint_bench_ab.py +172 -0
- package/scripts/lint_bench_corpus.py +1 -1
- package/scripts/lint_command_tiers.py +5 -5
- package/scripts/lint_context_spine_usage.py +1 -1
- package/scripts/lint_framework_leakage.py +7 -7
- package/scripts/lint_framework_leakage_allowlist.json +144 -84
- package/scripts/lint_ghostwriter_source.py +3 -3
- package/scripts/lint_handoffs.py +1 -1
- package/scripts/lint_load_context.py +11 -11
- package/scripts/lint_media_policy_linkage.py +5 -5
- package/scripts/lint_namespace.py +1 -1
- package/scripts/lint_no_new_atomic_commands.py +2 -2
- package/scripts/lint_orchestration_dsl.py +1 -1
- package/scripts/lint_pack_boundaries.py +2 -2
- package/scripts/lint_persona_governance.py +4 -4
- package/scripts/lint_role_experiences.py +237 -0
- package/scripts/lint_rule_interactions.py +2 -2
- package/scripts/lint_rule_tiers.py +1 -1
- package/scripts/lint_trust_coherence.py +2 -2
- package/scripts/mcp_registry_submit.sh +187 -0
- package/scripts/mcp_server/__init__.py +1 -1
- package/scripts/mcp_server/catalog.py +1 -1
- package/scripts/mcp_server/consumer_tool_catalog.json +1 -1
- package/scripts/mcp_server/tools.py +2 -2
- package/scripts/measure_frugality_savings.py +10 -10
- package/scripts/measure_patterns.py +1 -1
- package/scripts/measure_projection_bytes.py +5 -5
- package/scripts/measure_rule_budget.py +3 -3
- package/scripts/measure_skill_reduction.py +1 -1
- package/scripts/memory_lookup.py +1 -1
- package/scripts/memory_status.py +2 -2
- package/scripts/migrate_command_suggestions.py +3 -3
- package/scripts/mine_session.py +1 -1
- package/scripts/move_artefact.py +3 -3
- package/scripts/new_skill.py +2 -2
- package/scripts/pack_mcp_content.py +14 -14
- package/scripts/plan_physical_move.py +6 -6
- package/scripts/print_required_checks.py +196 -0
- package/scripts/probe_skill_registration.py +413 -0
- package/scripts/propose_modules_config.py +145 -0
- package/scripts/prototype_lint_contradictions.py +1 -1
- package/scripts/recruit_preflight.sh +152 -0
- package/scripts/refine_ticket_detect.py +3 -3
- package/scripts/release.py +20 -0
- package/scripts/render_benchmark_md.py +308 -0
- package/scripts/roadmap_progress_hook.py +1 -1
- package/scripts/run_skill_evals.py +2 -2
- package/scripts/runtime_registry.py +4 -4
- package/scripts/schemas/command.schema.json +4 -4
- package/scripts/schemas/rule.schema.json +5 -5
- package/scripts/schemas/skill.schema.json +3 -3
- package/scripts/schemas/user-type.schema.json +1 -1
- package/scripts/score_skill_selection.py +1 -1
- package/scripts/skill_collision_clusters.py +2 -2
- package/scripts/skill_linter.py +81 -81
- package/scripts/skill_overlap.py +5 -5
- package/scripts/skill_tools/audit_persona_coverage.py +2 -2
- package/scripts/skill_tools/audit_user_type_coverage.py +2 -2
- package/scripts/skill_tools/run_block_d_eval.py +1 -1
- package/scripts/skill_tools/score_skill_relevance.py +1 -1
- package/scripts/skill_tools/suggest_skill_for_task.py +1 -1
- package/scripts/skill_trigger_eval.py +5 -5
- package/scripts/smoke/kernel.sh +7 -1
- package/scripts/smoke/router.sh +5 -5
- package/scripts/smoke/skills.sh +1 -1
- package/scripts/smoke_quickstart.py +1 -1
- package/scripts/snapshot_agent_outputs.py +3 -3
- package/scripts/spotcheck_thin_root.py +1 -1
- package/scripts/{caveman_stats.py → telegraph_stats.py} +18 -18
- package/scripts/update_counts.py +1 -1
- package/scripts/validate_decision_engine.py +1 -1
- package/scripts/validate_frontmatter.py +1 -1
- package/scripts/validate_safe_paths.py +3 -3
- package/scripts/{validate_caveman_carveouts.py → validate_telegraph_carveouts.py} +7 -7
- package/scripts/verify_roadmap_closure.py +6 -6
- package/templates/consumer-settings/ONBOARDING.md +41 -0
- package/.agent-src/commands/install-via-agent.md +0 -129
- package/.agent-src/skills/compress-memory/SKILL.md +0 -131
- package/dist/ui/assets/index-D-DY1ywI.js +0 -35
- package/dist/ui/assets/index-D-DY1ywI.js.map +0 -1
- package/dist/ui/assets/index-Dqfhmg-d.css +0 -1
- package/docs/adrs/caveman/README.md +0 -9
- package/docs/contracts/caveman-telemetry.md +0 -83
- package/scripts/compress.sh +0 -18
|
@@ -125,9 +125,9 @@ sequence, just across three files.
|
|
|
125
125
|
|
|
126
126
|
## Implementation plan (this PR)
|
|
127
127
|
|
|
128
|
-
1. Create the three new rules under `.agent-src.
|
|
129
|
-
2. Delete `.agent-src.
|
|
130
|
-
3. Run `bash scripts/
|
|
128
|
+
1. Create the three new rules under `.agent-src.uncondensed/rules/`.
|
|
129
|
+
2. Delete `.agent-src.uncondensed/rules/chat-history.md`.
|
|
130
|
+
3. Run `bash scripts/condense.sh --sync` to project the change into
|
|
131
131
|
`.agent-src/`, `.augment/`, `.claude/`, `.cursor/`, `.clinerules/`,
|
|
132
132
|
`.windsurfrules`.
|
|
133
133
|
4. Update every cross-reference (~30 files) — `check-refs` is the
|
|
@@ -136,5 +136,5 @@ sequence, just across three files.
|
|
|
136
136
|
under a new "Rule splits" section.
|
|
137
137
|
6. Regenerate `agents/roadmaps-progress.md`.
|
|
138
138
|
7. Verify: `task ci` (lint-skills, check-refs, check-public-links,
|
|
139
|
-
check-
|
|
139
|
+
check-condensation, counts-check, lint-readme, runtime-e2e,
|
|
140
140
|
roadmap-progress-check, lint-readme).
|
|
@@ -5,7 +5,7 @@ stability: stable
|
|
|
5
5
|
# ADR — Context-Aware Command Suggestion
|
|
6
6
|
|
|
7
7
|
> **Status:** Decided · Phases 1–7 shipped · 2026-04-30
|
|
8
|
-
> **Rule:** [`command-suggestion`](../../.agent-src.
|
|
8
|
+
> **Rule:** [`command-suggestion`](../../.agent-src.uncondensed/rules/command-suggestion-policy.md)
|
|
9
9
|
> **Eligibility table:** [`command-suggestion-eligibility.md`](command-suggestion-eligibility.md)
|
|
10
10
|
> **Engine:** `scripts/command_suggester/`
|
|
11
11
|
> **Orthogonal to:** R1 (`adr-work-engine-rename.md`) — the suggester is a
|
|
@@ -89,7 +89,7 @@ suppression when they signal real intent.
|
|
|
89
89
|
|
|
90
90
|
## Hardening — what suggestion must never do
|
|
91
91
|
|
|
92
|
-
The rule (`.agent-src.
|
|
92
|
+
The rule (`.agent-src.uncondensed/rules/command-suggestion-policy.md`)
|
|
93
93
|
binds the engine to five non-negotiables, mirrored as goldens:
|
|
94
94
|
|
|
95
95
|
1. **No execution without user pick.** `SUGGEST. NEVER INVOKE.` is the
|
|
@@ -138,7 +138,7 @@ retirement candidates without a hard SLA.
|
|
|
138
138
|
|
|
139
139
|
## See also
|
|
140
140
|
|
|
141
|
-
- [`command-suggestion`](../../.agent-src.
|
|
141
|
+
- [`command-suggestion`](../../.agent-src.uncondensed/rules/command-suggestion-policy.md) — runtime rule
|
|
142
142
|
- [`command-suggestion-eligibility.md`](command-suggestion-eligibility.md) — locked eligibility table
|
|
143
143
|
- [`adr-prompt-driven-execution.md`](adr-prompt-driven-execution.md) — `/work` entrypoint that explicit slash invocations route to
|
|
144
|
-
- [`agent-settings`](../../.agent-src.
|
|
144
|
+
- [`agent-settings`](../../.agent-src.uncondensed/templates/agent-settings.md) — `commands.suggestion.*` reference
|
|
@@ -111,6 +111,6 @@ Three signals that this decision is wrong and the ADR needs revisiting:
|
|
|
111
111
|
— `context_spine.items.enum` extended in this ADR.
|
|
112
112
|
- `agents/roadmaps/` § Block G — the authorising roadmap (archived
|
|
113
113
|
after merge; this ADR is the durable record).
|
|
114
|
-
- [`.agent-src.
|
|
114
|
+
- [`.agent-src.uncondensed/rules/skill-quality.md`](../../.agent-src.uncondensed/rules/skill-quality.md)
|
|
115
115
|
§ Senior-Tier Required Structure — the four blocks every senior
|
|
116
116
|
skill ships independently of spine opt-in.
|
|
@@ -13,12 +13,12 @@ stability: stable
|
|
|
13
13
|
The `/implement-ticket` orchestrator ships on **Python 3.10+** (stdlib + `pyyaml`).
|
|
14
14
|
|
|
15
15
|
Bash is rejected as the runtime. It stays only where it already lives —
|
|
16
|
-
the install driver,
|
|
16
|
+
the install driver, condensation helper, and test runner — not the
|
|
17
17
|
delivery flow.
|
|
18
18
|
|
|
19
19
|
## Why this was a real question
|
|
20
20
|
|
|
21
|
-
The repo already ships a Bash install +
|
|
21
|
+
The repo already ships a Bash install + condensation toolchain. A
|
|
22
22
|
shell-native dispatcher would have reused the existing muscle memory and
|
|
23
23
|
avoided adding Python as a delivery-runtime dependency. The spike
|
|
24
24
|
existed to verify whether Bash could still carry the 8-step linear flow
|
|
@@ -85,7 +85,7 @@ Python is 3 files with shared types.
|
|
|
85
85
|
## Tradeoffs we accept
|
|
86
86
|
|
|
87
87
|
- **New hard dependency on Python 3.10+ and `pyyaml`.** Mitigated: Python 3
|
|
88
|
-
is already a build/test dependency of this repo (linters,
|
|
88
|
+
is already a build/test dependency of this repo (linters, condensation,
|
|
89
89
|
`update_counts.py`). `pyyaml` is already pinned in `pyproject.toml` /
|
|
90
90
|
`requirements-*.txt`. Zero new install surface for contributors.
|
|
91
91
|
- **We lose the "just-shell" story.** The install script stays Bash. The
|
|
@@ -100,7 +100,7 @@ Python is 3 files with shared types.
|
|
|
100
100
|
on its own evidence.
|
|
101
101
|
- Does not commit to a specific framework (click, typer, bare argparse);
|
|
102
102
|
that is chosen during Phase 1 and kept minimal.
|
|
103
|
-
- Does not move the
|
|
103
|
+
- Does not move the condensation/install scripts off Bash.
|
|
104
104
|
|
|
105
105
|
## Consequences — unblocks
|
|
106
106
|
|
|
@@ -14,7 +14,7 @@ keep-beta-until: 2026-08-13
|
|
|
14
14
|
## Decision
|
|
15
15
|
|
|
16
16
|
Install-time skill filtering uses a dedicated axis seeded under
|
|
17
|
-
`user-types/` (package root, not `.agent-src.
|
|
17
|
+
`user-types/` (package root, not `.agent-src.uncondensed/`). The
|
|
18
18
|
selection lands in the consumer's `.agent-settings.yml` under
|
|
19
19
|
`personal.user_type: <id>` via `agent-config install --user-type=<id>`.
|
|
20
20
|
Runtime skill discovery intersects each skill's
|
|
@@ -38,7 +38,7 @@ Reserved areas (bootstrap pass — step-11 Phase 4 Step 3):
|
|
|
38
38
|
| Area | Scope | Owner contract |
|
|
39
39
|
|---|---|---|
|
|
40
40
|
| `cost` | Budget ladder, hard-stop hook, cost reporting | [`cost-enforcement.md`](cost-enforcement.md) |
|
|
41
|
-
| `
|
|
41
|
+
| `telegraph` | Telegraph-speak condensation, decondensation, reversibility | [`condensation-default-kill-criterion.md`](condensation-default-kill-criterion.md) |
|
|
42
42
|
| `schema` | Frontmatter schemas, v2 rigor, lint behaviour | [`schema-versioning.md`](schema-versioning.md) (when published) |
|
|
43
43
|
| `router` | `router.json` shape, tier semantics, dispatch precedence | [`rule-router.md`](rule-router.md) |
|
|
44
44
|
| `smoke` | Per-tier smoke contracts, baseline locks | [`smoke-contracts.md`](smoke-contracts.md) |
|
|
@@ -91,7 +91,7 @@ Default mode is **warn** at the consumer surface; **fail** under `task ci`. Rati
|
|
|
91
91
|
|
|
92
92
|
## Relationship to `adr-create` skill
|
|
93
93
|
|
|
94
|
-
[`adr-create`](../../.agent-src.
|
|
94
|
+
[`adr-create`](../../.agent-src.uncondensed/skills/adr-create/SKILL.md) accepts an optional `<area>` argument (added in step-11 Phase 4 Step 4):
|
|
95
95
|
|
|
96
96
|
- No `<area>` → flat surface, `docs/decisions/`.
|
|
97
97
|
- `<area>` matches inventory → per-area surface, `docs/adrs/<area>/`.
|
|
@@ -17,7 +17,7 @@ per [`scripts/mcp_server/requirements.txt`](../../scripts/mcp_server/requirement
|
|
|
17
17
|
**FastMCP** (the higher-level decorator wrapper) and the **MCP TypeScript SDK**
|
|
18
18
|
are explicitly rejected for this surface.
|
|
19
19
|
|
|
20
|
-
The hosted Cloudflare Worker bridge (`workers/mcp/`) is the only place a
|
|
20
|
+
The hosted Cloudflare Worker bridge (`internal/workers/mcp/`) is the only place a
|
|
21
21
|
non-Python runtime is allowed, and it stays bound to the same wire contract
|
|
22
22
|
(see [`mcp-cloud-scope.md`](mcp-cloud-scope.md)).
|
|
23
23
|
|
|
@@ -16,9 +16,9 @@ stability: stable
|
|
|
16
16
|
R3 ships four directive sets — `backend` (R1/R2), **`ui`**, **`ui-trivial`**,
|
|
17
17
|
and **`mixed`** — dispatched at the engine boundary on
|
|
18
18
|
`state.directive_set`. The slot wiring is fixed by
|
|
19
|
-
[`directives/ui/__init__.py`](../../.agent-src.
|
|
20
|
-
[`directives/ui_trivial/__init__.py`](../../.agent-src.
|
|
21
|
-
and [`directives/mixed/__init__.py`](../../.agent-src.
|
|
19
|
+
[`directives/ui/__init__.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/ui/__init__.py),
|
|
20
|
+
[`directives/ui_trivial/__init__.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/ui_trivial/__init__.py),
|
|
21
|
+
and [`directives/mixed/__init__.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/mixed/__init__.py);
|
|
22
22
|
the contract for each lives in [`ui-track-flow.md`](ui-track-flow.md).
|
|
23
23
|
|
|
24
24
|
The UI set drives `audit → design → apply → review → polish → report`
|
|
@@ -26,7 +26,7 @@ with three load-bearing properties:
|
|
|
26
26
|
|
|
27
27
|
1. **Existing-UI-audit is a hard gate.** No `apply` runs without
|
|
28
28
|
`state.ui_audit` populated. The gate lives at directive level **and**
|
|
29
|
-
at always-on rule level ([`ui-audit-gate`](../../.agent-src.
|
|
29
|
+
at always-on rule level ([`ui-audit-gate`](../../.agent-src.uncondensed/rules/ui-audit-gate.md))
|
|
30
30
|
so an agent acting outside the engine cannot bypass it.
|
|
31
31
|
2. **Design brief is locked microcopy.** `apply` consumes the brief
|
|
32
32
|
verbatim — `PLACEHOLDER_PATTERNS` (`<placeholder>`, `lorem`, `todo:`,
|
|
@@ -84,10 +84,10 @@ the gate emits `@agent-directive: existing-ui-audit` and refuses to advance.
|
|
|
84
84
|
Two enforcement layers, deliberately redundant:
|
|
85
85
|
|
|
86
86
|
- **Dispatcher layer** —
|
|
87
|
-
[`directives/ui/audit.py`](../../.agent-src.
|
|
87
|
+
[`directives/ui/audit.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/ui/audit.py)
|
|
88
88
|
refuses to write `outcomes["refine"] = "success"` without a populated
|
|
89
89
|
audit. Purely structural; no LLM, no heuristic.
|
|
90
|
-
- **Agent layer** — [`ui-audit-gate`](../../.agent-src.
|
|
90
|
+
- **Agent layer** — [`ui-audit-gate`](../../.agent-src.uncondensed/rules/ui-audit-gate.md)
|
|
91
91
|
is an always-on rule that fires when the agent is about to write a
|
|
92
92
|
component file outside the engine (free-form edit, side conversation,
|
|
93
93
|
cloud surface). The rule encodes the same Iron Law in prose so cloud
|
|
@@ -102,7 +102,7 @@ the failure modes are different enough to justify it.
|
|
|
102
102
|
### Confidence-path resolution
|
|
103
103
|
|
|
104
104
|
Audit findings carry a confidence label and per-candidate similarity.
|
|
105
|
-
[`directives/ui/audit.py::_decide_path`](../../.agent-src.
|
|
105
|
+
[`directives/ui/audit.py::_decide_path`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/ui/audit.py)
|
|
106
106
|
resolves to one of:
|
|
107
107
|
|
|
108
108
|
- `high_confidence` — confidence `high` + ≥1 match with similarity
|
|
@@ -176,7 +176,7 @@ adjustment), the Phase-1 intent classifier writes
|
|
|
176
176
|
`directive_set = "ui-trivial"`. The slot wiring collapses to
|
|
177
177
|
`refine → ⊘ → ⊘ → ⊘ → apply → test → ⊘ → report` with
|
|
178
178
|
`MAX_FILES = 1` and `MAX_LINES_CHANGED = 5` enforced inside
|
|
179
|
-
[`directives/ui_trivial/apply.py`](../../.agent-src.
|
|
179
|
+
[`directives/ui_trivial/apply.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/ui_trivial/apply.py).
|
|
180
180
|
|
|
181
181
|
**Mandatory reclassification at apply time.** When a trivial edit
|
|
182
182
|
exceeds the preconditions, apply flips
|
|
@@ -193,7 +193,7 @@ preconditions don't hold.
|
|
|
193
193
|
|
|
194
194
|
## Stack detection and dispatch
|
|
195
195
|
|
|
196
|
-
[`scripts/work_engine/stack/detect.py`](../../.agent-src.
|
|
196
|
+
[`scripts/work_engine/stack/detect.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/stack/detect.py)
|
|
197
197
|
reads `composer.json` and `package.json` once, applies a four-rule
|
|
198
198
|
priority table, and writes `state.stack.frontend`:
|
|
199
199
|
|
|
@@ -223,7 +223,7 @@ direct executor. R3 splits the responsibilities:
|
|
|
223
223
|
|
|
224
224
|
- **Reference (kept):** layout patterns, form / table design,
|
|
225
225
|
responsive strategy, a11y heuristics. Cited by
|
|
226
|
-
[`directives/ui/design.py`](../../.agent-src.
|
|
226
|
+
[`directives/ui/design.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/ui/design.py).
|
|
227
227
|
- **Executor (removed):** code-writing responsibilities migrated to
|
|
228
228
|
the stack-specific apply / review / polish skills (`flux`,
|
|
229
229
|
`livewire`, `blade-ui`, `react-shadcn-ui`, `ui-apply-vue`).
|
|
@@ -35,10 +35,10 @@ axes, one orthogonal product.
|
|
|
35
35
|
|
|
36
36
|
## Decision
|
|
37
37
|
|
|
38
|
-
Split into a parallel axis. Add `.agent-src.
|
|
38
|
+
Split into a parallel axis. Add `.agent-src.uncondensed/user-types/`
|
|
39
39
|
as a first-class directory mirroring the persona pipeline:
|
|
40
40
|
|
|
41
|
-
- Source dir: `.agent-src.
|
|
41
|
+
- Source dir: `.agent-src.uncondensed/user-types/`
|
|
42
42
|
- Schema doc: [`user-type-schema`](user-type-schema.md) — 7-section spine, ≤ 120 lines
|
|
43
43
|
- JSON schema: [`scripts/schemas/user-type.schema.json`](../../scripts/schemas/user-type.schema.json)
|
|
44
44
|
- Linter: `scripts/skill_linter.py § lint_usertype`
|
|
@@ -102,7 +102,7 @@ Markdown prose + frontmatter), completely different consumer
|
|
|
102
102
|
(`scripts/install.sh` vs. `refine-ticket`). Co-locating them would
|
|
103
103
|
force a single `kind:` discriminator on a directory whose two halves
|
|
104
104
|
do not share a schema. The separation is in different physical paths
|
|
105
|
-
(`user-types/` root vs. `.agent-src.
|
|
105
|
+
(`user-types/` root vs. `.agent-src.uncondensed/user-types/`) and
|
|
106
106
|
the vocabulary overlap is deliberate per [`adr-install-user-type-axis`](adr-install-user-type-axis.md).
|
|
107
107
|
|
|
108
108
|
**Alt-3 — Defer the axis until end-user lenses prove themselves in
|
|
@@ -121,6 +121,6 @@ re-opens the slot-sprawl risk and needs a separate ADR.
|
|
|
121
121
|
reference ADR this one composes against.
|
|
122
122
|
- [`scripts/schemas/skill.schema.json`](../../scripts/schemas/skill.schema.json)
|
|
123
123
|
— `context_spine.items.enum` extended in this ADR.
|
|
124
|
-
- [`.agent-src.
|
|
124
|
+
- [`.agent-src.uncondensed/rules/skill-quality.md`](../../.agent-src.uncondensed/rules/skill-quality.md)
|
|
125
125
|
§ Senior-Tier Required Structure — the four blocks every senior
|
|
126
126
|
skill ships independently of spine opt-in.
|
|
@@ -136,7 +136,7 @@ call. File-drop is the always-works path.
|
|
|
136
136
|
to pick the curated YAML target when a signal carries two tags
|
|
137
137
|
(e.g. `[gotcha, invariant]` → primary `gotcha` JSONL, promote target
|
|
138
138
|
resolved by the reviewer at promotion time). See
|
|
139
|
-
[`memory-consolidation`](../../.agent-src.
|
|
139
|
+
[`memory-consolidation`](../../.agent-src.uncondensed/skills/memory-consolidation/SKILL.md)
|
|
140
140
|
§ Phase 3 for the schema-routing table.
|
|
141
141
|
- `confidence: low | medium | high` — producer-supplied estimate; the
|
|
142
142
|
inline-review hook in `/memory load` ranks the top-3 by this field.
|
|
@@ -155,5 +155,5 @@ holds:
|
|
|
155
155
|
## See also
|
|
156
156
|
|
|
157
157
|
- [`memory-access guideline`](../../docs/guidelines/agent-infra/memory-access.md)
|
|
158
|
-
- [`scripts/memory_status.py`](../../.agent-src.
|
|
159
|
-
- [`scripts/memory_lookup.py`](../../.agent-src.
|
|
158
|
+
- [`scripts/memory_status.py`](../../.agent-src.uncondensed/templates/scripts/memory_status.py)
|
|
159
|
+
- [`scripts/memory_lookup.py`](../../.agent-src.uncondensed/templates/scripts/memory_lookup.py)
|
|
@@ -51,7 +51,7 @@ Mechanical enforcement: the structural-malice check in
|
|
|
51
51
|
- Shell injection in subprocess calls (string-concat shell commands
|
|
52
52
|
with user-controlled input).
|
|
53
53
|
|
|
54
|
-
See `.agent-src.
|
|
54
|
+
See `.agent-src.uncondensed/rules/skill-quality.md` § Structural
|
|
55
55
|
Malice Floor for the full rule.
|
|
56
56
|
|
|
57
57
|
## Distribution mechanics
|
|
@@ -69,7 +69,7 @@ Malice Floor for the full rule.
|
|
|
69
69
|
- [`AGENTS.md`](../../AGENTS.md) — front-door (kernel orientation only)
|
|
70
70
|
- [`docs/architecture.md`](../../docs/architecture.md) — package
|
|
71
71
|
architecture and cloud-bundle pipeline
|
|
72
|
-
- [`.agent-src.
|
|
72
|
+
- [`.agent-src.uncondensed/rules/skill-quality.md`](../../.agent-src.uncondensed/rules/skill-quality.md)
|
|
73
73
|
— Structural Malice Floor
|
|
74
74
|
- [`.agent-src/skills/markitdown/SKILL.md`](../../.agent-src/skills/markitdown/SKILL.md)
|
|
75
75
|
— markitdown skill entry point
|
|
@@ -166,7 +166,7 @@ Schema v1:
|
|
|
166
166
|
### Advisor block (Phase 6, replace-mode)
|
|
167
167
|
|
|
168
168
|
Five built-in advisor keys ship under
|
|
169
|
-
[`.agent-src.
|
|
169
|
+
[`.agent-src.uncondensed/personas/advisors/`](../../.agent-src.uncondensed/personas/advisors/):
|
|
170
170
|
`contrarian`, `first-principles`, `expansionist`, `outsider`,
|
|
171
171
|
`executor`. Each entry binds one advisor to one enabled provider. When
|
|
172
172
|
`enabled: true`, the orchestrator REPLACES that provider's plain-member
|
|
@@ -446,7 +446,7 @@ Transparency markers on every fast-path attempt:
|
|
|
446
446
|
|
|
447
447
|
The marker is mandatory; the agent never silently substitutes a
|
|
448
448
|
fast-path verdict for its own answer. See
|
|
449
|
-
[`ai-council § Lightweight-QA fast-path`](../../.agent-src.
|
|
449
|
+
[`ai-council § Lightweight-QA fast-path`](../../.agent-src.uncondensed/skills/ai-council/SKILL.md#lightweight-qa-fast-path-phase-11)
|
|
450
450
|
for the orchestration contract and session-artefact format.
|
|
451
451
|
|
|
452
452
|
### Solo-member dispatch (step-9 P8/P9 · U1 · U2 · U3)
|
|
@@ -138,6 +138,6 @@ majors.
|
|
|
138
138
|
- Per-phase JSON the producer reads: [`decision-trace-v1.md`](decision-trace-v1.md).
|
|
139
139
|
- Pattern-extraction consumer: [`extract_audit_patterns.py`](../../scripts/extract_audit_patterns.py).
|
|
140
140
|
- Skill that consumes promoted patterns:
|
|
141
|
-
[`learning-to-rule-or-skill`](../../.agent-src.
|
|
141
|
+
[`learning-to-rule-or-skill`](../../.agent-src.uncondensed/skills/learning-to-rule-or-skill/SKILL.md).
|
|
142
142
|
- Append-only JSONL precedent:
|
|
143
143
|
[`adr-chat-history-split.md`](adr-chat-history-split.md).
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Package-Impact A/B Benchmark — Contract
|
|
2
|
+
|
|
3
|
+
> Lifecycle, cache invalidation, and reader-side semantics for `docs/benchmark.md` and the underlying A/B bench reports. Companion to `docs/contracts/benchmark-report-schema.md` (which owns the per-report JSON shape this contract layers an axis onto).
|
|
4
|
+
|
|
5
|
+
## Scope
|
|
6
|
+
|
|
7
|
+
This contract covers the **variant axis** (`with` vs. `without` agent-config) that the package-impact A/B bench adds on top of the existing version-over-time bench. It does NOT redefine the underlying report schema — see `benchmark-report-schema.md` for the per-report JSON shape.
|
|
8
|
+
|
|
9
|
+
## Producer / consumer surface
|
|
10
|
+
|
|
11
|
+
| Concern | Owner |
|
|
12
|
+
|---|---|
|
|
13
|
+
| Materialising the variant clones | `scripts/bench_ab_clone.py` |
|
|
14
|
+
| Verifying the clones differ only at the agent-config surface | `scripts/bench_ab_integrity.py` |
|
|
15
|
+
| Track A (behavioural) runner | `scripts/bench_ab_tracka_run.py` |
|
|
16
|
+
| Track B (task) runner | `scripts/bench_ab_task_runner.py` |
|
|
17
|
+
| Track B scoring | `scripts/_lib/bench_ab_scoring.py` |
|
|
18
|
+
| Cache key + lookup | `scripts/_lib/bench_ab_cache.py` |
|
|
19
|
+
| Variant diff | `scripts/bench_ab_diff.py` |
|
|
20
|
+
| Rendered report | `scripts/render_benchmark_md.py` → `docs/benchmark.md` |
|
|
21
|
+
| Corpus / doc linter | `scripts/lint_bench_ab.py` |
|
|
22
|
+
| Task orchestration | `taskfiles/bench-ab.yml` (`task bench:ab*`) |
|
|
23
|
+
|
|
24
|
+
## When `docs/benchmark.md` regenerates
|
|
25
|
+
|
|
26
|
+
`docs/benchmark.md` is **derived**. It regenerates from the latest paired reports under `internal/bench/reports/ab/` whenever:
|
|
27
|
+
|
|
28
|
+
1. `task bench:ab` runs (the full pipeline ends with `bench:ab:diff` which calls the renderer).
|
|
29
|
+
2. `task bench:ab:diff` runs alone (no fresh bench, just re-render).
|
|
30
|
+
3. The renderer is invoked directly: `python3 scripts/render_benchmark_md.py`.
|
|
31
|
+
|
|
32
|
+
The renderer is deterministic: same reports → same output. It never runs a bench. If no reports exist, it writes a placeholder document — never errors out.
|
|
33
|
+
|
|
34
|
+
## Cache key + invalidation
|
|
35
|
+
|
|
36
|
+
The Phase 2 cache exists so a daily `task bench:ab` does not re-run the expensive `without` arm when nothing the model would see has changed. The cache key is a tuple:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
(corpus_hash, claude_cli_version, target_shape_hash)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
A cached `without` report is **fresh** when its recorded `cache_key` matches the current key for every component. Otherwise it is **stale** and the `--reuse-cache` path either refreshes (default in interactive mode) or reuses with a stale flag (`--non-interactive`).
|
|
43
|
+
|
|
44
|
+
Invalidation triggers:
|
|
45
|
+
|
|
46
|
+
| Trigger | Component that drifts |
|
|
47
|
+
|---|---|
|
|
48
|
+
| Edit `internal/bench/corpora/ab-tracka.yaml` or `ab-trackb.yaml` | `corpus_hash` |
|
|
49
|
+
| Upgrade the local `claude` CLI | `claude_cli_version` |
|
|
50
|
+
| Add / remove a `WITH_SURFACE` in `scripts/bench_ab_clone.py` | `target_shape_hash` |
|
|
51
|
+
| Edit any file under `internal/bench/ab/fixture/` | `target_shape_hash` |
|
|
52
|
+
|
|
53
|
+
## How a reader interprets the staleness flag
|
|
54
|
+
|
|
55
|
+
`docs/benchmark.md` carries a methodology section naming the cache key for the latest run. A reader who suspects the page is stale should:
|
|
56
|
+
|
|
57
|
+
1. Check the **Last rendered** timestamp at the bottom of the Methodology section.
|
|
58
|
+
2. Inspect `internal/bench/reports/ab/` for newer reports than what the doc reflects.
|
|
59
|
+
3. Re-run `task bench:ab:diff` to re-render from the latest reports (cheap; no bench).
|
|
60
|
+
4. Re-run `task bench:ab` for a full refresh (re-runs the `with` arm, reuses the `without` baseline if the cache is fresh).
|
|
61
|
+
|
|
62
|
+
## Modes — what the reader can trust
|
|
63
|
+
|
|
64
|
+
Track B carries an explicit `mode` in every report header:
|
|
65
|
+
|
|
66
|
+
- `dry-run` — no `claude` CLI invocation; transcripts are stubs. Both variants score 0/N by construction. This is the CI-cheap mode; **do NOT cite Track B numbers in a dry-run report as evidence of package impact**.
|
|
67
|
+
- `live` — real `claude --print` invocation per task. The numbers are real; the cost is real. This is the mode that produces evidence.
|
|
68
|
+
|
|
69
|
+
The renderer surfaces `mode` prominently in the Track B section. A `dry-run` Track B block is a plumbing-health check, not a measurement.
|
|
70
|
+
|
|
71
|
+
## Track A is always cheap, always meaningful
|
|
72
|
+
|
|
73
|
+
Track A measures **surface availability** — does the rule/skill body the prompt would activate exist in the agent's reachable context? This is the precondition for the rule-router to fire. It does not need the `claude` CLI; it is a file-grep over the materialised clone. By construction:
|
|
74
|
+
|
|
75
|
+
- `without` MUST score 0% — no agent-config surface present → no expected_target file exists.
|
|
76
|
+
- `with` should score close to 100% — every expected_target file should exist with the expected_keywords.
|
|
77
|
+
|
|
78
|
+
The integrity check `bench_ab_tracka_run.py::integrity_check` fails the run if `without` ever scores non-zero. That's the safety boundary: if `without` scores anything, the variant axis leaked and the bench is invalid.
|
|
79
|
+
|
|
80
|
+
## Acceptance criteria for a "real" run
|
|
81
|
+
|
|
82
|
+
A bench run counts as a real measurement (rather than a plumbing health check) when:
|
|
83
|
+
|
|
84
|
+
- `python3 scripts/bench_ab_integrity.py` exits 0 (the variant axis is clean).
|
|
85
|
+
- Track A runs in BOTH variants and produces `integrity_ok: true` (with scoring close to 100%, without scoring 0%).
|
|
86
|
+
- Track B runs in BOTH variants in `--mode live` (not dry-run).
|
|
87
|
+
- `python3 scripts/lint_bench_ab.py` passes.
|
|
88
|
+
- The rendered `docs/benchmark.md` carries the Headline + Track A + Track B + Methodology + History sections.
|
|
89
|
+
|
|
90
|
+
## Out of scope for this contract
|
|
91
|
+
|
|
92
|
+
- The per-report JSON schema details — see `docs/contracts/benchmark-report-schema.md`.
|
|
93
|
+
- Statistical significance / sample-size policy — `--samples N` is opt-in per run; the bench default is n=1 (daily-quick-read goal, not a research-grade study).
|
|
94
|
+
- LLM-judge scoring — explicitly deferred to a follow-up roadmap.
|
|
95
|
+
- Cross-model comparison — out of scope; the bench measures one model (whatever the local `claude` CLI points to).
|
|
96
|
+
|
|
97
|
+
## See also
|
|
98
|
+
|
|
99
|
+
- `agents/roadmaps/road-to-package-impact-benchmark.md` — the roadmap that built this surface.
|
|
100
|
+
- `internal/bench/ab/README.md` — the Shape A vs. Shape B decision and the layout.
|
|
101
|
+
- `docs/contracts/benchmark-report-schema.md` — per-report JSON shape (sibling contract).
|
|
@@ -13,12 +13,12 @@ and validation invariants.
|
|
|
13
13
|
## Path decision
|
|
14
14
|
|
|
15
15
|
Roadmap `step-4-measurement-and-benchmark.md`
|
|
16
|
-
Phase 1 Step 2 names `bench/corpus.yaml`. The existing benchmark
|
|
16
|
+
Phase 1 Step 2 names `internal/bench/corpus.yaml`. The existing benchmark
|
|
17
17
|
infrastructure (runner + non-dev corpus + `task bench`) lives under
|
|
18
18
|
`tests/eval/` and `scripts/bench_runner.py` hardcodes that directory.
|
|
19
|
-
**Canonical location:** `tests/eval/corpus-<id>.yaml`. The `bench/`
|
|
19
|
+
**Canonical location:** `tests/eval/corpus-<id>.yaml`. The `internal/bench/`
|
|
20
20
|
directory is reserved for **reports + pricing** (Phase 2 deliverables).
|
|
21
|
-
Migration to `bench/corpus.yaml` is a no-op rename if downstream Phase
|
|
21
|
+
Migration to `internal/bench/corpus.yaml` is a no-op rename if downstream Phase
|
|
22
22
|
2 work proves the consolidation is worth the diff cost.
|
|
23
23
|
|
|
24
24
|
## Composition (25 prompts)
|
|
@@ -93,5 +93,5 @@ without tripping CI.
|
|
|
93
93
|
- Runner — [`scripts/bench_runner.py`](../../scripts/bench_runner.py)
|
|
94
94
|
- Linter — `scripts/lint_bench_corpus.py` (Phase 1 Step 3)
|
|
95
95
|
- Existing non-dev corpus — [`tests/eval/corpus-non-dev.yaml`](../../tests/eval/corpus-non-dev.yaml)
|
|
96
|
-
- Language gate — [`language-and-tone`](../../.agent-src.
|
|
96
|
+
- Language gate — [`language-and-tone`](../../.agent-src.uncondensed/rules/language-and-tone.md)
|
|
97
97
|
- Report schema — `docs/contracts/benchmark-report-schema.md` (Phase 2 Step 4)
|
|
@@ -7,12 +7,12 @@ keep-beta-until: 2026-08-14
|
|
|
7
7
|
|
|
8
8
|
Parser-visible contract for the JSON + Markdown reports emitted by
|
|
9
9
|
[`scripts/bench_run.py`](../../scripts/bench_run.py). Every `task bench`
|
|
10
|
-
run writes one `bench/reports/<ts>-<corpus_id>.json` + matching `.md`.
|
|
10
|
+
run writes one `internal/bench/reports/<ts>-<corpus_id>.json` + matching `.md`.
|
|
11
11
|
|
|
12
12
|
## File layout
|
|
13
13
|
|
|
14
14
|
```
|
|
15
|
-
bench/
|
|
15
|
+
internal/bench/
|
|
16
16
|
├── pricing.yaml # per-1M model rates + sourced_on dates
|
|
17
17
|
└── reports/
|
|
18
18
|
├── 2026-05-16T10-30-00Z-dev.json # machine-readable
|
|
@@ -60,7 +60,7 @@ cost:
|
|
|
60
60
|
per_tier: # haiku / sonnet / opus / unknown
|
|
61
61
|
sonnet: { messages: <int>, cost_usd: <float> }
|
|
62
62
|
...
|
|
63
|
-
pricing_sourced_on: <ISO date from bench/pricing.yaml>
|
|
63
|
+
pricing_sourced_on: <ISO date from internal/bench/pricing.yaml>
|
|
64
64
|
quality:
|
|
65
65
|
source: <path-or-"not_collected">
|
|
66
66
|
prompts_with_assertion: <int>
|
|
@@ -99,7 +99,7 @@ Headers in order:
|
|
|
99
99
|
`quality.source: not_collected` and `verdict.overall: partial`. Score
|
|
100
100
|
stays `0.0`; never inflate by assuming pass.
|
|
101
101
|
- **Pricing dated.** Every cost row reads `sourced_on` from
|
|
102
|
-
`bench/pricing.yaml`. Stale price (> 90 days) → warning line in the
|
|
102
|
+
`internal/bench/pricing.yaml`. Stale price (> 90 days) → warning line in the
|
|
103
103
|
Markdown footer.
|
|
104
104
|
|
|
105
105
|
## Cross-references
|
|
@@ -107,5 +107,5 @@ Headers in order:
|
|
|
107
107
|
- Runner — [`scripts/bench_run.py`](../../scripts/bench_run.py)
|
|
108
108
|
- Baseline collector — [`scripts/bench_runner.py`](../../scripts/bench_runner.py)
|
|
109
109
|
- Corpus contract — [`benchmark-corpus-spec.md`](benchmark-corpus-spec.md)
|
|
110
|
-
- Pricing source — [`bench/pricing.yaml`](../../bench/pricing.yaml)
|
|
110
|
+
- Pricing source — [`internal/bench/pricing.yaml`](../../bench/pricing.yaml)
|
|
111
111
|
- Cost session reader (live sessions) — [`scripts/cost/track.mjs`](../../scripts/cost/track.mjs)
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Branch Protection Policy
|
|
2
|
+
|
|
3
|
+
> **Status:** active · **Owner:** maintainer (GitHub UI ruleset) ·
|
|
4
|
+
> **Opened:** 2026-05-26
|
|
5
|
+
>
|
|
6
|
+
> Codifies the per-PR-shape required-status-check floor. Companion to
|
|
7
|
+
> [`release-pr-gating.md`](release-pr-gating.md) (Phase A) and
|
|
8
|
+
> [`ci-cost-budget.md`](ci-cost-budget.md) (Phase C). Branch protection
|
|
9
|
+
> itself is applied by the maintainer in the GitHub Settings → Rules UI;
|
|
10
|
+
> this doc is the source of truth the UI mirrors.
|
|
11
|
+
|
|
12
|
+
## The floor
|
|
13
|
+
|
|
14
|
+
Every PR proves a floor of CI checks before it can merge. The floor differs
|
|
15
|
+
by **PR shape** — a feature PR proves more (it carries runtime / install
|
|
16
|
+
risk) than a release PR (whose diff is structurally limited to version
|
|
17
|
+
bumps). Shape is detected by the same predicates documented in
|
|
18
|
+
`release-pr-gating.md`; the workflows enforce the cut.
|
|
19
|
+
|
|
20
|
+
The optimisation is **never** subtractive: a PR whose shape can't be proved
|
|
21
|
+
falls back to the full feature-PR floor. The cut is opt-in per push, not
|
|
22
|
+
per branch name.
|
|
23
|
+
|
|
24
|
+
## Per-PR-shape required-check matrix
|
|
25
|
+
|
|
26
|
+
| Required check | Feature PR | Release PR | Docs-only PR |
|
|
27
|
+
|---|:---:|:---:|:---:|
|
|
28
|
+
| `Consistency` | ✅ | ✅ | ✅ |
|
|
29
|
+
| `Smoke Contracts` (smoke.yml) | ✅ | ✅ | ✅ |
|
|
30
|
+
| `Skill Lint` | ✅ | — | — |
|
|
31
|
+
| `Tests / install-tests (ubuntu)` | ✅ | — | — |
|
|
32
|
+
| `Tests / install-tests (macos)` | ✅ | — | — |
|
|
33
|
+
| `Tests / install-aux-tests (ubuntu)` | ✅ | — | — |
|
|
34
|
+
| `Tests / install-aux-tests (macos)` | ✅ | — | — |
|
|
35
|
+
| `Tests / python-tests (ubuntu × 3.10–3.13)` | ✅ | — | — |
|
|
36
|
+
| `Tests / python-tests (macos × 3.12)` | ✅ | — | — |
|
|
37
|
+
| `Tests / node-tests (ubuntu)` | ✅ | — | — |
|
|
38
|
+
| `Tests / node-tests (macos)` | ✅ | — | — |
|
|
39
|
+
| `Tests / windows-lockfile-export` | path-filter only | — | — |
|
|
40
|
+
| `Public Install Smoke / smoke (matrix)` | ✅ | — | — |
|
|
41
|
+
| `Release Validation / release-shape` | — | ✅ | — |
|
|
42
|
+
| `Release Validation / changelog-entry` | — | ✅ | — |
|
|
43
|
+
| `Release Validation / version-consistency` | — | ✅ | — |
|
|
44
|
+
| `Migration Dry-Run` | path-filter only | path-filter only | — |
|
|
45
|
+
| `Release Guard` (tag-trigger) | — | (post-merge tag) | — |
|
|
46
|
+
|
|
47
|
+
**Definitions:**
|
|
48
|
+
|
|
49
|
+
- **Feature PR** — head branch does not match `release/X.Y.Z` (the default).
|
|
50
|
+
- **Release PR** — head branch matches `^release/\d+\.\d+\.\d+$` AND the
|
|
51
|
+
diff stays within the version-bump allowlist (see `release-pr-gating.md`).
|
|
52
|
+
Either condition failing falls the PR back to feature-PR mode.
|
|
53
|
+
- **Docs-only PR** — diff is entirely inside `docs/**` or matches only
|
|
54
|
+
top-level Markdown (`README.md`, `CHANGELOG.md`, `CONTRIBUTING.md`,
|
|
55
|
+
`AGENTS.md`). No code, tests, workflows, or scripts. This shape is
|
|
56
|
+
detected by an opt-in linter (`task ci:required-checks`); branch
|
|
57
|
+
protection still defaults to the feature-PR floor unless the linter
|
|
58
|
+
asserts the docs-only shape.
|
|
59
|
+
|
|
60
|
+
## Failure mode — the cut never silently lifts
|
|
61
|
+
|
|
62
|
+
If a release-PR's diff exits the allowlist mid-stream (e.g. a last-minute
|
|
63
|
+
CHANGELOG fixup that also touches `scripts/release.py`):
|
|
64
|
+
|
|
65
|
+
1. `Release Validation / release-shape` exits non-zero.
|
|
66
|
+
2. The required-check set for the PR effectively flips back to the
|
|
67
|
+
feature-PR floor because:
|
|
68
|
+
- `tests.yml` / `smoke-public-install.yml` jobs carry
|
|
69
|
+
`if: !startsWith(github.head_ref, 'release/')`, so they still skip on
|
|
70
|
+
the branch name — but
|
|
71
|
+
- the maintainer is expected to either narrow the diff (move the
|
|
72
|
+
out-of-shape edit to a separate PR) or close-and-reopen the release
|
|
73
|
+
PR off a freshly-bumped branch so the heavy matrix runs.
|
|
74
|
+
3. Branch protection still blocks the merge because `release-shape` is red.
|
|
75
|
+
|
|
76
|
+
The branch name alone never bypasses the heavy matrix — the diff has to
|
|
77
|
+
prove it can't regress runtime / install paths.
|
|
78
|
+
|
|
79
|
+
## Why path-filter only for some checks
|
|
80
|
+
|
|
81
|
+
`Tests / windows-lockfile-export` and `Migration Dry-Run` are path-filtered
|
|
82
|
+
at the workflow level (not branch-protection level). They run on every PR
|
|
83
|
+
whose diff hits their declared paths and skip on every other PR. Branch
|
|
84
|
+
protection lists them as "must pass if they run" — the GitHub Rules UI
|
|
85
|
+
under "Required status checks" honours this when "Require branches to be
|
|
86
|
+
up to date before merging" is enabled and the check's most recent run
|
|
87
|
+
on the head SHA is green.
|
|
88
|
+
|
|
89
|
+
## See also
|
|
90
|
+
|
|
91
|
+
- [`release-pr-gating.md`](release-pr-gating.md) — shape predicates, cut
|
|
92
|
+
surface, kept surface, fail-closed contract.
|
|
93
|
+
- [`ci-cost-budget.md`](ci-cost-budget.md) — measured baseline durations
|
|
94
|
+
per job + quarterly review cadence (Phase C).
|
|
95
|
+
- `.github/workflows/release-validation.yml` — the three release-PR jobs.
|
|
96
|
+
- `scripts/check_release_pr_shape.py` — the shape detector.
|
|
97
|
+
- `scripts/release.py` — emits release PRs; release cadence stays driven
|
|
98
|
+
by Conventional Commits, not CI cost.
|