@event4u/agent-config 3.3.0 → 4.2.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 +5 -5
- 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 -17
- package/CHANGELOG.md +216 -3
- package/CONTRIBUTING.md +31 -12
- package/README.md +21 -12
- 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/atomic.js +92 -0
- package/dist/install/atomic.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 +358 -0
- package/dist/server/routes/install.js.map +1 -0
- package/dist/server/routes/wizard.js +468 -32
- 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 +5 -3
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/index-BDAhhpDV.js +40 -0
- package/dist/ui/assets/index-BDAhhpDV.js.map +1 -0
- package/dist/ui/assets/index-BXZILUxe.css +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 +16 -16
- package/docs/catalog.md +17 -15
- package/docs/contracts/CHANGELOG-conventions.md +1 -1
- 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-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 +1 -1
- 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-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 +110 -97
- 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-cloud-scope.md +2 -2
- package/docs/contracts/mcp-phase-1-scope.md +3 -3
- package/docs/contracts/measurement-baseline.md +5 -5
- 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 +3 -3
- package/docs/decisions/ADR-022-daily-workspace-decomposition.md +1 -1
- package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +2 -2
- package/docs/decisions/ADR-028-root-layout.md +7 -7
- package/docs/decisions/ADR-029-multi-workspace-deferred.md +2 -2
- package/docs/decisions/ADR-rule-kernel-and-router.md +5 -5
- package/docs/deploy/connector-setup.md +2 -2
- package/docs/deploy/policy-cookbook.md +2 -2
- 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.md +1 -1
- package/docs/parity/bench.json +3 -3
- package/docs/parity/ruflo.md +2 -2
- 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 +1 -1
- package/docs/setup/mcp-r2-bootstrap.md +1 -1
- 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_caveman.py → bench_telegraph.py} +21 -21
- package/scripts/_lib/{bench_caveman_report.py → bench_telegraph_report.py} +21 -21
- 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_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_compress_memory.py → bench_condense_memory.py} +16 -16
- package/scripts/bench_run.py +33 -33
- 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_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 +273 -45
- 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 +152 -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/tools.py +1 -1
- 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 +9 -9
- 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 +3 -3
- 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
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Wrap ``gh run list`` and assert the required-check set is green.
|
|
3
|
+
|
|
4
|
+
Phase A Step 6 of ``road-to-adoption-proof-and-ci-green.md``. Sits
|
|
5
|
+
between the maintainer and the GitHub UI so a one-line
|
|
6
|
+
``task ci:status`` shows whether the required-check floor (as defined
|
|
7
|
+
in ``docs/contracts/branch-protection-policy.md`` § Per-PR-shape
|
|
8
|
+
required-check matrix) is green on the branch passed via ``--branch``.
|
|
9
|
+
|
|
10
|
+
Phantom 0-job runs are filtered before the tally — they are listed
|
|
11
|
+
under "advisory / phantom" in ``docs/contracts/ci-green-floor.md`` and
|
|
12
|
+
must not freeze merges (the ``--strict`` flag honours this).
|
|
13
|
+
|
|
14
|
+
CLI:
|
|
15
|
+
|
|
16
|
+
scripts/ci_status.py [--branch main] [--limit 30] [--strict]
|
|
17
|
+
[--shape feature|release|docs] [--json]
|
|
18
|
+
|
|
19
|
+
Exit codes:
|
|
20
|
+
|
|
21
|
+
0 — every required check on the most recent run is success
|
|
22
|
+
(or the matching workflow simply has not run yet under
|
|
23
|
+
``--strict``; the gate distinguishes "missing" from "red").
|
|
24
|
+
1 — at least one required-check workflow is red or in a
|
|
25
|
+
terminal-non-success state.
|
|
26
|
+
2 — invalid arguments / unreachable gh CLI.
|
|
27
|
+
|
|
28
|
+
The required-check shape vocabulary mirrors
|
|
29
|
+
``branch-protection-policy.md`` exactly so a future ruleset edit in
|
|
30
|
+
one place stays single-sourced.
|
|
31
|
+
"""
|
|
32
|
+
from __future__ import annotations
|
|
33
|
+
|
|
34
|
+
import argparse
|
|
35
|
+
import json
|
|
36
|
+
import shutil
|
|
37
|
+
import subprocess
|
|
38
|
+
import sys
|
|
39
|
+
from dataclasses import dataclass
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# Source-of-truth for the per-shape required-check set. Anchored to
|
|
43
|
+
# the matrix in docs/contracts/branch-protection-policy.md § Per-PR-shape
|
|
44
|
+
# required-check matrix. When that doc changes, this dict changes in
|
|
45
|
+
# lockstep — a CI-side linter cross-checks the two surfaces.
|
|
46
|
+
REQUIRED_CHECKS_BY_SHAPE: dict[str, set[str]] = {
|
|
47
|
+
"feature": {
|
|
48
|
+
"Consistency",
|
|
49
|
+
"Smoke Contracts",
|
|
50
|
+
"Skill Lint",
|
|
51
|
+
"Tests",
|
|
52
|
+
"Python Version Sweep",
|
|
53
|
+
"Public Install Smoke",
|
|
54
|
+
},
|
|
55
|
+
"release": {
|
|
56
|
+
"Consistency",
|
|
57
|
+
"Smoke Contracts",
|
|
58
|
+
"Release Validation",
|
|
59
|
+
},
|
|
60
|
+
"docs": {
|
|
61
|
+
"Consistency",
|
|
62
|
+
"Smoke Contracts",
|
|
63
|
+
},
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@dataclass(frozen=True)
|
|
68
|
+
class Run:
|
|
69
|
+
name: str
|
|
70
|
+
conclusion: str
|
|
71
|
+
status: str
|
|
72
|
+
jobs: int
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def fetch_runs(branch: str, limit: int) -> list[Run]:
|
|
76
|
+
"""Call `gh run list` and return parsed Run records."""
|
|
77
|
+
if shutil.which("gh") is None:
|
|
78
|
+
raise SystemExit("error: gh CLI not found in PATH")
|
|
79
|
+
cmd = [
|
|
80
|
+
"gh",
|
|
81
|
+
"run",
|
|
82
|
+
"list",
|
|
83
|
+
"--branch",
|
|
84
|
+
branch,
|
|
85
|
+
"--limit",
|
|
86
|
+
str(limit),
|
|
87
|
+
"--json",
|
|
88
|
+
"databaseId,name,status,conclusion",
|
|
89
|
+
]
|
|
90
|
+
try:
|
|
91
|
+
proc = subprocess.run(cmd, capture_output=True, text=True, check=True)
|
|
92
|
+
except subprocess.CalledProcessError as exc:
|
|
93
|
+
raise SystemExit(f"error: gh run list failed — {exc.stderr.strip()}")
|
|
94
|
+
raw = json.loads(proc.stdout or "[]")
|
|
95
|
+
runs: list[Run] = []
|
|
96
|
+
for r in raw:
|
|
97
|
+
# `gh run list` does not surface Jobs count — we need a second
|
|
98
|
+
# call per run id to find phantom 0-job runs. Keep that call to
|
|
99
|
+
# the runs that *would* be counted (non-success terminal) so the
|
|
100
|
+
# cost is bounded by the number of red runs, not the full window.
|
|
101
|
+
runs.append(
|
|
102
|
+
Run(
|
|
103
|
+
name=r.get("name", ""),
|
|
104
|
+
conclusion=r.get("conclusion", ""),
|
|
105
|
+
status=r.get("status", ""),
|
|
106
|
+
jobs=-1, # unknown — resolved lazily for non-success runs
|
|
107
|
+
)
|
|
108
|
+
)
|
|
109
|
+
return runs
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def resolve_jobs_count(run_id: int) -> int:
|
|
113
|
+
"""Return the number of jobs for a single run id (for phantom filter)."""
|
|
114
|
+
cmd = [
|
|
115
|
+
"gh",
|
|
116
|
+
"run",
|
|
117
|
+
"view",
|
|
118
|
+
str(run_id),
|
|
119
|
+
"--json",
|
|
120
|
+
"jobs",
|
|
121
|
+
]
|
|
122
|
+
proc = subprocess.run(cmd, capture_output=True, text=True)
|
|
123
|
+
if proc.returncode != 0:
|
|
124
|
+
return -1
|
|
125
|
+
data = json.loads(proc.stdout or "{}")
|
|
126
|
+
return len(data.get("jobs", []))
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def is_phantom(run: Run) -> bool:
|
|
130
|
+
"""True when the run has 0 jobs AND its conclusion is `failure`."""
|
|
131
|
+
if run.conclusion != "failure":
|
|
132
|
+
return False
|
|
133
|
+
if run.jobs == 0:
|
|
134
|
+
return True
|
|
135
|
+
return False
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def latest_per_workflow(runs: list[Run]) -> dict[str, Run]:
|
|
139
|
+
"""Pick the latest run per workflow name (input order is mtime-desc)."""
|
|
140
|
+
out: dict[str, Run] = {}
|
|
141
|
+
for r in runs:
|
|
142
|
+
if r.name in out:
|
|
143
|
+
continue
|
|
144
|
+
if r.status != "completed":
|
|
145
|
+
# In-progress / queued runs are pending; treat as unknown.
|
|
146
|
+
continue
|
|
147
|
+
out[r.name] = r
|
|
148
|
+
return out
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def compute_status(
|
|
152
|
+
runs: list[Run],
|
|
153
|
+
required: set[str],
|
|
154
|
+
resolve_jobs: bool = True,
|
|
155
|
+
) -> tuple[list[tuple[str, Run]], list[str], list[tuple[str, Run]]]:
|
|
156
|
+
"""Return (greens, missing, reds-after-phantom-filter)."""
|
|
157
|
+
by_name = latest_per_workflow(runs)
|
|
158
|
+
greens: list[tuple[str, Run]] = []
|
|
159
|
+
reds: list[tuple[str, Run]] = []
|
|
160
|
+
missing: list[str] = []
|
|
161
|
+
for name in sorted(required):
|
|
162
|
+
run = by_name.get(name)
|
|
163
|
+
if run is None:
|
|
164
|
+
missing.append(name)
|
|
165
|
+
continue
|
|
166
|
+
if run.conclusion == "success":
|
|
167
|
+
greens.append((name, run))
|
|
168
|
+
continue
|
|
169
|
+
# Non-success — check for phantom 0-job.
|
|
170
|
+
if resolve_jobs and run.jobs < 0:
|
|
171
|
+
# Resolve the jobs count for this single run lazily.
|
|
172
|
+
# We don't have the database id in our Run records (the JSON
|
|
173
|
+
# field is `databaseId` and we dropped it for brevity); refetch
|
|
174
|
+
# the latest red run for this workflow by name.
|
|
175
|
+
run_id = _latest_run_id_for_workflow(name, run)
|
|
176
|
+
jobs_count = resolve_jobs_count(run_id) if run_id else -1
|
|
177
|
+
run = Run(
|
|
178
|
+
name=run.name,
|
|
179
|
+
conclusion=run.conclusion,
|
|
180
|
+
status=run.status,
|
|
181
|
+
jobs=jobs_count,
|
|
182
|
+
)
|
|
183
|
+
if is_phantom(run):
|
|
184
|
+
# Phantom — filter out; treat as success-equivalent for gating.
|
|
185
|
+
greens.append((name, run))
|
|
186
|
+
else:
|
|
187
|
+
reds.append((name, run))
|
|
188
|
+
return greens, missing, reds
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
# Cache for the lazy run-id lookup; keyed by workflow name + conclusion.
|
|
192
|
+
_RUN_ID_CACHE: dict[tuple[str, str], int | None] = {}
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def _latest_run_id_for_workflow(name: str, run: Run) -> int | None:
|
|
196
|
+
"""Refetch the latest run id for a workflow whose top-of-list run is non-success."""
|
|
197
|
+
key = (name, run.conclusion)
|
|
198
|
+
if key in _RUN_ID_CACHE:
|
|
199
|
+
return _RUN_ID_CACHE[key]
|
|
200
|
+
cmd = [
|
|
201
|
+
"gh",
|
|
202
|
+
"run",
|
|
203
|
+
"list",
|
|
204
|
+
"--workflow",
|
|
205
|
+
name,
|
|
206
|
+
"--limit",
|
|
207
|
+
"1",
|
|
208
|
+
"--json",
|
|
209
|
+
"databaseId",
|
|
210
|
+
]
|
|
211
|
+
proc = subprocess.run(cmd, capture_output=True, text=True)
|
|
212
|
+
if proc.returncode != 0:
|
|
213
|
+
_RUN_ID_CACHE[key] = None
|
|
214
|
+
return None
|
|
215
|
+
data = json.loads(proc.stdout or "[]")
|
|
216
|
+
if not data:
|
|
217
|
+
_RUN_ID_CACHE[key] = None
|
|
218
|
+
return None
|
|
219
|
+
rid = int(data[0].get("databaseId", 0)) or None
|
|
220
|
+
_RUN_ID_CACHE[key] = rid
|
|
221
|
+
return rid
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
|
|
225
|
+
p = argparse.ArgumentParser(
|
|
226
|
+
prog="ci_status",
|
|
227
|
+
description="Assert the required-check set is green on a branch.",
|
|
228
|
+
)
|
|
229
|
+
p.add_argument(
|
|
230
|
+
"--branch",
|
|
231
|
+
default="main",
|
|
232
|
+
help="Branch to check (default: main).",
|
|
233
|
+
)
|
|
234
|
+
p.add_argument(
|
|
235
|
+
"--limit",
|
|
236
|
+
type=int,
|
|
237
|
+
default=30,
|
|
238
|
+
help="Number of recent runs to scan (default: 30).",
|
|
239
|
+
)
|
|
240
|
+
p.add_argument(
|
|
241
|
+
"--shape",
|
|
242
|
+
choices=["feature", "release", "docs"],
|
|
243
|
+
default="feature",
|
|
244
|
+
help="PR shape (default: feature) — picks the required-check set.",
|
|
245
|
+
)
|
|
246
|
+
p.add_argument(
|
|
247
|
+
"--strict",
|
|
248
|
+
action="store_true",
|
|
249
|
+
help="Exit non-zero if any required check is missing (not just red).",
|
|
250
|
+
)
|
|
251
|
+
p.add_argument(
|
|
252
|
+
"--json",
|
|
253
|
+
action="store_true",
|
|
254
|
+
help="Emit JSON instead of human-readable text.",
|
|
255
|
+
)
|
|
256
|
+
p.add_argument(
|
|
257
|
+
"--no-phantom-resolve",
|
|
258
|
+
action="store_true",
|
|
259
|
+
help="Skip the lazy 0-job lookup (faster but lets phantoms through).",
|
|
260
|
+
)
|
|
261
|
+
return p.parse_args(argv)
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def main(argv: list[str] | None = None) -> int:
|
|
265
|
+
args = parse_args(argv)
|
|
266
|
+
required = REQUIRED_CHECKS_BY_SHAPE[args.shape]
|
|
267
|
+
runs = fetch_runs(args.branch, args.limit)
|
|
268
|
+
greens, missing, reds = compute_status(
|
|
269
|
+
runs,
|
|
270
|
+
required,
|
|
271
|
+
resolve_jobs=not args.no_phantom_resolve,
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
if args.json:
|
|
275
|
+
out = {
|
|
276
|
+
"branch": args.branch,
|
|
277
|
+
"shape": args.shape,
|
|
278
|
+
"required": sorted(required),
|
|
279
|
+
"green": [name for name, _ in greens],
|
|
280
|
+
"missing": missing,
|
|
281
|
+
"red": [{"name": name, "conclusion": run.conclusion} for name, run in reds],
|
|
282
|
+
}
|
|
283
|
+
print(json.dumps(out, indent=2))
|
|
284
|
+
else:
|
|
285
|
+
print(f"branch={args.branch} shape={args.shape} required={len(required)}")
|
|
286
|
+
for name, _ in greens:
|
|
287
|
+
print(f" ✅ {name}")
|
|
288
|
+
for name in missing:
|
|
289
|
+
print(f" ⚠️ {name} — no run found on this branch (last {args.limit})")
|
|
290
|
+
for name, run in reds:
|
|
291
|
+
print(f" ❌ {name} — {run.conclusion}")
|
|
292
|
+
|
|
293
|
+
if reds:
|
|
294
|
+
return 1
|
|
295
|
+
if args.strict and missing:
|
|
296
|
+
return 1
|
|
297
|
+
return 0
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
if __name__ == "__main__":
|
|
301
|
+
sys.exit(main())
|
package/scripts/ci_time_ratio.py
CHANGED
|
@@ -62,7 +62,7 @@ def classify(sha: str) -> str:
|
|
|
62
62
|
if not files:
|
|
63
63
|
return "empty"
|
|
64
64
|
doc = sum(1 for f in files if f.startswith("docs/") or f.endswith(".md"))
|
|
65
|
-
skill = sum(1 for f in files if "/skills/" in f or f.startswith(".agent-src.
|
|
65
|
+
skill = sum(1 for f in files if "/skills/" in f or f.startswith(".agent-src.uncondensed/skills/"))
|
|
66
66
|
test = sum(1 for f in files if f.startswith("tests/") or "/tests/" in f)
|
|
67
67
|
meta = sum(1 for f in files if f.startswith(("Taskfile", "scripts/", ".github/", "pyproject", "package")))
|
|
68
68
|
total = len(files)
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# cleanup_other_scope.sh — remove a stale agent-config install at the OTHER
|
|
3
|
+
# scope (typically ~/.claude/skills/ when working in a project-local install).
|
|
4
|
+
#
|
|
5
|
+
# Roadmap: road-to-clean-skill-distribution-channels.md, Phase B Step 5.
|
|
6
|
+
# Companion to scripts/_lib/scope_guard.sh. Refuses to run without --confirm
|
|
7
|
+
# per `non-destructive-by-default`.
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
# bash scripts/cleanup_other_scope.sh # dry-run, list what would be removed
|
|
11
|
+
# bash scripts/cleanup_other_scope.sh --confirm # actually delete
|
|
12
|
+
# bash scripts/cleanup_other_scope.sh --confirm --user # default — remove user-global tree
|
|
13
|
+
# bash scripts/cleanup_other_scope.sh --confirm --project /path/to/proj
|
|
14
|
+
# # remove from a specific project root
|
|
15
|
+
#
|
|
16
|
+
# What it removes (subject to --tools selection):
|
|
17
|
+
# .claude/skills/ — Claude project-local skill tree
|
|
18
|
+
# .augment/ — Augment substrate
|
|
19
|
+
# .cursor/rules/ — Cursor rules tree
|
|
20
|
+
# .clinerules/ — Cline rules tree
|
|
21
|
+
# .windsurf/rules/ — Windsurf rules tree
|
|
22
|
+
# .github/copilot-instructions.md — Copilot single-file
|
|
23
|
+
#
|
|
24
|
+
# What it NEVER removes without explicit overrides:
|
|
25
|
+
# .agent-settings.yml — settings the operator may have edited
|
|
26
|
+
# agents/ — project-local content authored by the user
|
|
27
|
+
# any path outside the scoped roots
|
|
28
|
+
|
|
29
|
+
set -euo pipefail
|
|
30
|
+
|
|
31
|
+
SCOPE="user"
|
|
32
|
+
SCOPE_ROOT=""
|
|
33
|
+
TOOLS_FILTER="all"
|
|
34
|
+
DRY_RUN=true
|
|
35
|
+
|
|
36
|
+
usage() {
|
|
37
|
+
cat <<'EOF'
|
|
38
|
+
Usage: bash scripts/cleanup_other_scope.sh [--confirm] [--user | --project <dir>] [--tools <list>]
|
|
39
|
+
|
|
40
|
+
Removes a stale agent-config install at the OTHER scope (user-global by default).
|
|
41
|
+
Refuses to delete anything without --confirm.
|
|
42
|
+
|
|
43
|
+
Options:
|
|
44
|
+
--confirm Actually remove files. Default is dry-run (lists only).
|
|
45
|
+
--user Operate on $HOME (user-global scope). Default.
|
|
46
|
+
--project <dir> Operate on a specific project root.
|
|
47
|
+
--tools <list> Comma-separated tool IDs (default: all).
|
|
48
|
+
Choices: claude-code, augment, cursor, cline, windsurf, copilot.
|
|
49
|
+
--help, -h Show this help.
|
|
50
|
+
|
|
51
|
+
Examples:
|
|
52
|
+
bash scripts/cleanup_other_scope.sh # dry-run, user scope
|
|
53
|
+
bash scripts/cleanup_other_scope.sh --confirm # delete user-global tree
|
|
54
|
+
bash scripts/cleanup_other_scope.sh --confirm --tools=claude-code # delete only ~/.claude/skills/
|
|
55
|
+
EOF
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
while [[ $# -gt 0 ]]; do
|
|
59
|
+
case "$1" in
|
|
60
|
+
--confirm) DRY_RUN=false; shift ;;
|
|
61
|
+
--user) SCOPE="user"; shift ;;
|
|
62
|
+
--project)
|
|
63
|
+
if [[ $# -lt 2 ]] || [[ "$2" == --* ]]; then
|
|
64
|
+
echo "❌ --project requires a path argument." >&2
|
|
65
|
+
exit 1
|
|
66
|
+
fi
|
|
67
|
+
SCOPE="project"; SCOPE_ROOT="$2"; shift 2 ;;
|
|
68
|
+
--project=*) SCOPE="project"; SCOPE_ROOT="${1#*=}"; shift ;;
|
|
69
|
+
--tools) TOOLS_FILTER="$2"; shift 2 ;;
|
|
70
|
+
--tools=*) TOOLS_FILTER="${1#*=}"; shift ;;
|
|
71
|
+
--help|-h) usage; exit 0 ;;
|
|
72
|
+
*) echo "Unknown argument: $1" >&2; usage >&2; exit 1 ;;
|
|
73
|
+
esac
|
|
74
|
+
done
|
|
75
|
+
|
|
76
|
+
is_tool() {
|
|
77
|
+
[[ "$TOOLS_FILTER" == "all" ]] && return 0
|
|
78
|
+
case ",$TOOLS_FILTER," in
|
|
79
|
+
*,"$1",*) return 0 ;;
|
|
80
|
+
esac
|
|
81
|
+
return 1
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
# Resolve scope root.
|
|
85
|
+
if [[ "$SCOPE" == "user" ]]; then
|
|
86
|
+
SCOPE_ROOT="${HOME:-/tmp}"
|
|
87
|
+
elif [[ -z "$SCOPE_ROOT" ]]; then
|
|
88
|
+
echo "❌ --project requires a path." >&2
|
|
89
|
+
exit 1
|
|
90
|
+
fi
|
|
91
|
+
if [[ ! -d "$SCOPE_ROOT" ]]; then
|
|
92
|
+
echo "❌ Scope root not found: $SCOPE_ROOT" >&2
|
|
93
|
+
exit 1
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
declare -a targets=()
|
|
97
|
+
is_tool claude-code && {
|
|
98
|
+
targets+=("$SCOPE_ROOT/.claude/skills")
|
|
99
|
+
targets+=("$SCOPE_ROOT/.claude/rules")
|
|
100
|
+
targets+=("$SCOPE_ROOT/.claude-plugin/marketplace.json")
|
|
101
|
+
}
|
|
102
|
+
is_tool augment && {
|
|
103
|
+
targets+=("$SCOPE_ROOT/.augment")
|
|
104
|
+
targets+=("$SCOPE_ROOT/.augment-plugin")
|
|
105
|
+
}
|
|
106
|
+
is_tool cursor && targets+=("$SCOPE_ROOT/.cursor/rules")
|
|
107
|
+
is_tool cline && targets+=("$SCOPE_ROOT/.clinerules")
|
|
108
|
+
is_tool windsurf && {
|
|
109
|
+
targets+=("$SCOPE_ROOT/.windsurf/rules")
|
|
110
|
+
targets+=("$SCOPE_ROOT/.windsurfrules")
|
|
111
|
+
}
|
|
112
|
+
is_tool copilot && targets+=("$SCOPE_ROOT/.github/copilot-instructions.md")
|
|
113
|
+
|
|
114
|
+
if [[ ${#targets[@]} -eq 0 ]]; then
|
|
115
|
+
echo "❌ No tools selected (--tools=$TOOLS_FILTER)." >&2
|
|
116
|
+
exit 1
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
echo "Scope: $SCOPE ($SCOPE_ROOT)"
|
|
120
|
+
echo "Tools: $TOOLS_FILTER"
|
|
121
|
+
echo "Mode: $($DRY_RUN && echo 'DRY RUN (use --confirm to delete)' || echo 'DELETE')"
|
|
122
|
+
echo ""
|
|
123
|
+
|
|
124
|
+
removed=0
|
|
125
|
+
skipped=0
|
|
126
|
+
for t in "${targets[@]}"; do
|
|
127
|
+
if [[ -e "$t" ]] || [[ -L "$t" ]]; then
|
|
128
|
+
if $DRY_RUN; then
|
|
129
|
+
echo " would remove: $t"
|
|
130
|
+
else
|
|
131
|
+
rm -rf "$t"
|
|
132
|
+
echo " removed: $t"
|
|
133
|
+
fi
|
|
134
|
+
((removed++)) || true
|
|
135
|
+
else
|
|
136
|
+
((skipped++)) || true
|
|
137
|
+
fi
|
|
138
|
+
done
|
|
139
|
+
|
|
140
|
+
echo ""
|
|
141
|
+
if $DRY_RUN; then
|
|
142
|
+
echo "✅ Dry-run complete: $removed entries would be removed, $skipped already absent."
|
|
143
|
+
echo " Re-run with --confirm to apply."
|
|
144
|
+
else
|
|
145
|
+
echo "✅ Cleanup complete: $removed entries removed, $skipped already absent."
|
|
146
|
+
fi
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""Compile rule frontmatter into ``router.json``.
|
|
3
3
|
|
|
4
|
-
Reads ``.agent-src.
|
|
4
|
+
Reads ``.agent-src.uncondensed/rules/*.md``; produces deterministic JSON
|
|
5
5
|
mapping kernel + tier-1 + tier-2 rules to their triggers and routed
|
|
6
6
|
artifacts, per ``docs/contracts/rule-router.md``.
|
|
7
7
|
|
|
8
8
|
Stdlib-only, deterministic (sorted keys + sorted lists), idempotent.
|
|
9
|
-
Wired into ``task generate-tools`` after the
|
|
9
|
+
Wired into ``task generate-tools`` after the condense step.
|
|
10
10
|
"""
|
|
11
11
|
from __future__ import annotations
|
|
12
12
|
|
|
@@ -16,20 +16,20 @@ from pathlib import Path
|
|
|
16
16
|
|
|
17
17
|
ROOT = Path(__file__).resolve().parent.parent
|
|
18
18
|
# ADR-017: rules now live across multiple source roots. Legacy
|
|
19
|
-
# .agent-src.
|
|
20
|
-
# pure-
|
|
21
|
-
RULES_DIR = ROOT / ".agent-src.
|
|
19
|
+
# .agent-src.uncondensed/rules/ is kept as a fallback for the
|
|
20
|
+
# pure-condensed consumer projection.
|
|
21
|
+
RULES_DIR = ROOT / ".agent-src.uncondensed" / "rules"
|
|
22
22
|
OUT_PATH = ROOT / "dist" / "router.json"
|
|
23
23
|
SETTINGS_PATH = ROOT / ".agent-settings.yml"
|
|
24
24
|
SCHEMA_VERSION = 1
|
|
25
25
|
|
|
26
26
|
# Compile-time rule toggles. Maps rule-id → settings predicate.
|
|
27
27
|
# Rule omitted from router.json when predicate returns False.
|
|
28
|
-
# Per road-to-token-frugality § Phase 8.2 —
|
|
28
|
+
# Per road-to-token-frugality § Phase 8.2 — telegraph.speak compile-time toggle.
|
|
29
29
|
COMPILE_TIME_TOGGLES = {
|
|
30
|
-
"
|
|
31
|
-
s.get("
|
|
32
|
-
) and bool(s.get("
|
|
30
|
+
"telegraph-speak": lambda s: bool(
|
|
31
|
+
s.get("telegraph", {}).get("enabled", True)
|
|
32
|
+
) and bool(s.get("telegraph", {}).get("speak", True)),
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
# Maps legacy tier values to the router-canonical names. See
|
|
@@ -132,7 +132,7 @@ def _iter_rule_files() -> list[Path]:
|
|
|
132
132
|
seen: dict[str, Path] = {}
|
|
133
133
|
roots = artefact_roots()
|
|
134
134
|
if not roots:
|
|
135
|
-
# Pure-
|
|
135
|
+
# Pure-condensed fallback for consumer projections that vendor
|
|
136
136
|
# the flat .agent-src/ tree without sources.
|
|
137
137
|
if RULES_DIR.exists():
|
|
138
138
|
for path in sorted(RULES_DIR.glob("*.md")):
|