@event4u/agent-config 3.3.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 +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 +181 -3
- 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 +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 +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-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 +1 -1
- 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/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 +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/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,149 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Lint guard: ``module-management`` SKILL must stay framework-neutral.
|
|
3
|
+
|
|
4
|
+
Phase C Step 5 of road-to-configurable-modules. Refuses two regressions:
|
|
5
|
+
|
|
6
|
+
1. ``framework:`` frontmatter key is back (locks the skill to one stack
|
|
7
|
+
again).
|
|
8
|
+
2. ``app/Modules/`` literal appears outside the explicitly-labeled
|
|
9
|
+
"Laravel HMVC carve-out" section (drift back to a Laravel-only body).
|
|
10
|
+
|
|
11
|
+
Stack-specific paths inside their own carve-out sections (Laravel HMVC,
|
|
12
|
+
Symfony DDD-lite, Node monorepo, Python src layout, Go internal) are
|
|
13
|
+
allowed by construction \u2014 the section header is the carve-out boundary.
|
|
14
|
+
|
|
15
|
+
Exit codes:
|
|
16
|
+
0 \u2014 file clean
|
|
17
|
+
2 \u2014 lint violation (regression)
|
|
18
|
+
"""
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
import re
|
|
22
|
+
import sys
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
26
|
+
SKILL_PATH = (
|
|
27
|
+
REPO_ROOT
|
|
28
|
+
/ "packages"
|
|
29
|
+
/ "core"
|
|
30
|
+
/ ".agent-src.uncondensed"
|
|
31
|
+
/ "skills"
|
|
32
|
+
/ "module-management"
|
|
33
|
+
/ "SKILL.md"
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
CARVE_OUT_HEADER = "### Laravel HMVC carve-out"
|
|
37
|
+
FRONTMATTER_BANNED_KEYS = ("framework:",)
|
|
38
|
+
BODY_BANNED_PATTERNS = (
|
|
39
|
+
re.compile(r"\bapp/Modules/"),
|
|
40
|
+
re.compile(r"App\\\\Modules\\\\"),
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _split_frontmatter(text: str) -> tuple[str, str]:
|
|
45
|
+
"""Return ``(frontmatter, body)`` \u2014 body starts after closing ``---``."""
|
|
46
|
+
if not text.startswith("---\n"):
|
|
47
|
+
return "", text
|
|
48
|
+
end = text.find("\n---\n", 4)
|
|
49
|
+
if end < 0:
|
|
50
|
+
return "", text
|
|
51
|
+
return text[4:end], text[end + 5:]
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _laravel_carveout_span(body: str) -> tuple[int, int] | None:
|
|
55
|
+
"""Locate ``### Laravel HMVC carve-out`` and return ``(start, end)`` lines.
|
|
56
|
+
|
|
57
|
+
``end`` is exclusive and points at the next ``### `` header (or EOF).
|
|
58
|
+
Returns ``None`` if the carve-out is missing.
|
|
59
|
+
"""
|
|
60
|
+
lines = body.splitlines()
|
|
61
|
+
start: int | None = None
|
|
62
|
+
for idx, line in enumerate(lines):
|
|
63
|
+
if line.strip() == CARVE_OUT_HEADER:
|
|
64
|
+
start = idx
|
|
65
|
+
break
|
|
66
|
+
if start is None:
|
|
67
|
+
return None
|
|
68
|
+
end = len(lines)
|
|
69
|
+
for idx in range(start + 1, len(lines)):
|
|
70
|
+
if lines[idx].startswith("### "):
|
|
71
|
+
end = idx
|
|
72
|
+
break
|
|
73
|
+
return start, end
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _scan_body(body: str) -> list[str]:
|
|
77
|
+
"""Return human-readable violations from the SKILL body."""
|
|
78
|
+
span = _laravel_carveout_span(body)
|
|
79
|
+
if span is None:
|
|
80
|
+
return [
|
|
81
|
+
"Laravel HMVC carve-out section "
|
|
82
|
+
f"({CARVE_OUT_HEADER!r}) missing \u2014 add it back before "
|
|
83
|
+
"moving Laravel-specific prose around."
|
|
84
|
+
]
|
|
85
|
+
carve_start, carve_end = span
|
|
86
|
+
lines = body.splitlines()
|
|
87
|
+
violations: list[str] = []
|
|
88
|
+
for idx, line in enumerate(lines):
|
|
89
|
+
if carve_start <= idx < carve_end:
|
|
90
|
+
continue
|
|
91
|
+
for pattern in BODY_BANNED_PATTERNS:
|
|
92
|
+
if pattern.search(line):
|
|
93
|
+
violations.append(
|
|
94
|
+
f"line {idx + 1}: {pattern.pattern!r} outside the "
|
|
95
|
+
"Laravel HMVC carve-out section "
|
|
96
|
+
f"\u2014 {line.strip()!r}"
|
|
97
|
+
)
|
|
98
|
+
break
|
|
99
|
+
return violations
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def _scan_frontmatter(fm: str) -> list[str]:
|
|
103
|
+
violations: list[str] = []
|
|
104
|
+
for line in fm.splitlines():
|
|
105
|
+
stripped = line.strip()
|
|
106
|
+
for banned in FRONTMATTER_BANNED_KEYS:
|
|
107
|
+
if stripped.startswith(banned):
|
|
108
|
+
violations.append(
|
|
109
|
+
f"frontmatter has banned key {banned!r} \u2014 "
|
|
110
|
+
"module-management is stack-agnostic; "
|
|
111
|
+
"stack hints live in body carve-outs"
|
|
112
|
+
)
|
|
113
|
+
return violations
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def main() -> int:
|
|
117
|
+
if not SKILL_PATH.is_file():
|
|
118
|
+
print(
|
|
119
|
+
f"error: SKILL.md not found at {SKILL_PATH}",
|
|
120
|
+
file=sys.stderr,
|
|
121
|
+
)
|
|
122
|
+
return 2
|
|
123
|
+
text = SKILL_PATH.read_text(encoding="utf-8")
|
|
124
|
+
fm, body = _split_frontmatter(text)
|
|
125
|
+
issues = _scan_frontmatter(fm) + _scan_body(body)
|
|
126
|
+
if not issues:
|
|
127
|
+
print(
|
|
128
|
+
f"\u2705 {SKILL_PATH.relative_to(REPO_ROOT)} "
|
|
129
|
+
"framework-neutral check: clean"
|
|
130
|
+
)
|
|
131
|
+
return 0
|
|
132
|
+
print(
|
|
133
|
+
f"\u274c {SKILL_PATH.relative_to(REPO_ROOT)} "
|
|
134
|
+
"framework-neutral check: FAIL",
|
|
135
|
+
file=sys.stderr,
|
|
136
|
+
)
|
|
137
|
+
for issue in issues:
|
|
138
|
+
print(f" {issue}", file=sys.stderr)
|
|
139
|
+
print(
|
|
140
|
+
" Fix: keep stack-specific prose inside its labeled "
|
|
141
|
+
"carve-out section; do not put `framework:` back into "
|
|
142
|
+
"frontmatter.",
|
|
143
|
+
file=sys.stderr,
|
|
144
|
+
)
|
|
145
|
+
return 2
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
if __name__ == "__main__":
|
|
149
|
+
raise SystemExit(main())
|
|
@@ -10,7 +10,7 @@ Allowed: directory mentions (`agents/roadmaps/`, `agents/roadmaps/archive/`,
|
|
|
10
10
|
`agents/roadmaps/skipped/`). Forbidden: specific `*.md` files inside those
|
|
11
11
|
directories.
|
|
12
12
|
|
|
13
|
-
Contract: .agent-src.
|
|
13
|
+
Contract: .agent-src.uncondensed/rules/no-roadmap-references.md
|
|
14
14
|
|
|
15
15
|
Exit codes: 0 = clean, 1 = violations, 3 = internal error.
|
|
16
16
|
"""
|
|
@@ -28,12 +28,12 @@ ROOT = Path(__file__).resolve().parent.parent
|
|
|
28
28
|
# Stable artefact trees — every `*.md` below MUST be free of roadmap-file
|
|
29
29
|
# citations. Directory mentions stay allowed (the regex below excludes them).
|
|
30
30
|
STABLE_TREES = (
|
|
31
|
-
".agent-src.
|
|
32
|
-
".agent-src.
|
|
33
|
-
".agent-src.
|
|
34
|
-
".agent-src.
|
|
35
|
-
".agent-src.
|
|
36
|
-
".agent-src.
|
|
31
|
+
".agent-src.uncondensed/rules",
|
|
32
|
+
".agent-src.uncondensed/skills",
|
|
33
|
+
".agent-src.uncondensed/commands",
|
|
34
|
+
".agent-src.uncondensed/contexts",
|
|
35
|
+
".agent-src.uncondensed/templates",
|
|
36
|
+
".agent-src.uncondensed/personas",
|
|
37
37
|
"agents/settings/contexts",
|
|
38
38
|
"docs/guidelines",
|
|
39
39
|
"docs/contracts",
|
|
@@ -64,7 +64,7 @@ ROADMAP_FILE_RE = re.compile(
|
|
|
64
64
|
# documentation purposes — the rule itself, the companion CI script docs,
|
|
65
65
|
# and the contract doc that names the rule.
|
|
66
66
|
SELF_DOCUMENTING_ALLOWLIST = frozenset({
|
|
67
|
-
".agent-src.
|
|
67
|
+
".agent-src.uncondensed/rules/no-roadmap-references.md",
|
|
68
68
|
"docs/guidelines/agent-infra/no-roadmap-references.md",
|
|
69
69
|
})
|
|
70
70
|
|
|
@@ -129,7 +129,7 @@ def format_text(violations: list[Violation]) -> str:
|
|
|
129
129
|
lines.append(f" 🔴 {v.file}:{v.line} → {v.match}")
|
|
130
130
|
lines.append(
|
|
131
131
|
"\nPromote the durable conclusion to agents/settings/contexts/ and cite that "
|
|
132
|
-
"instead. See .agent-src.
|
|
132
|
+
"instead. See .agent-src.uncondensed/rules/no-roadmap-references.md."
|
|
133
133
|
)
|
|
134
134
|
return "\n".join(lines)
|
|
135
135
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"""
|
|
3
3
|
Portability checker for agent-config packages.
|
|
4
4
|
|
|
5
|
-
Scans .agent-src/ and .agent-src.
|
|
5
|
+
Scans .agent-src/ and .agent-src.uncondensed/ for project-specific references
|
|
6
6
|
that violate package portability (the package must work in ANY project).
|
|
7
7
|
|
|
8
8
|
Allowed: references to packages/libraries (laravel, pest, phpstan, etc.)
|
|
@@ -162,7 +162,7 @@ ALLOWLIST = [
|
|
|
162
162
|
]
|
|
163
163
|
|
|
164
164
|
# Directories to scan (only package files, not project-specific agents/)
|
|
165
|
-
SCAN_DIRS = [".agent-src", ".agent-src.
|
|
165
|
+
SCAN_DIRS = [".agent-src", ".agent-src.uncondensed"]
|
|
166
166
|
|
|
167
167
|
# Additional root-level files shipped by the package that must also stay
|
|
168
168
|
# portable. These are read by agents working on the package itself and —
|
|
@@ -478,7 +478,7 @@ def scan_all(root: Path) -> tuple[List[Violation], list[str]]:
|
|
|
478
478
|
|
|
479
479
|
Scanning has four layers:
|
|
480
480
|
1. Auto-detected identifiers — applied to `.agent-src/` and
|
|
481
|
-
`.agent-src.
|
|
481
|
+
`.agent-src.uncondensed/` only. The package's own root AGENTS.md and
|
|
482
482
|
copilot-instructions.md are meta docs ABOUT the package, so the
|
|
483
483
|
detector's own hits (e.g. "event4u", "agent-config") are expected.
|
|
484
484
|
2. Optional FORBIDDEN_IDENTIFIERS from AGENT_CONFIG_BLOCKLIST —
|
|
@@ -4,12 +4,12 @@ Public-catalog link checker (regression guard for road-to-pr-34-followups 1.1).
|
|
|
4
4
|
|
|
5
5
|
`docs/catalog.md` is the consumer-facing catalog rendered by
|
|
6
6
|
`scripts/generate_index.py`. Consumers receive the package via npm /
|
|
7
|
-
Composer / archive surfaces — `.agent-src.
|
|
7
|
+
Composer / archive surfaces — `.agent-src.uncondensed/` is **not**
|
|
8
8
|
shipped (see `package.json#files`). Every link in the public catalog
|
|
9
9
|
must therefore resolve to a shipped surface.
|
|
10
10
|
|
|
11
11
|
Checks:
|
|
12
|
-
1. No link href contains `.agent-src.
|
|
12
|
+
1. No link href contains `.agent-src.uncondensed/`.
|
|
13
13
|
2. Every link href resolves on disk.
|
|
14
14
|
3. Every link href starts with a path declared in `package.json#files`
|
|
15
15
|
(or one of the always-shipped root files).
|
|
@@ -34,7 +34,7 @@ CATALOG = ROOT / "docs" / "catalog.md"
|
|
|
34
34
|
PACKAGE_JSON = ROOT / "package.json"
|
|
35
35
|
|
|
36
36
|
LINK_RE = re.compile(r"\]\((?P<href>[^)\s]+)(?:\s+\"[^\"]*\")?\)")
|
|
37
|
-
FORBIDDEN_PREFIX = ".agent-src.
|
|
37
|
+
FORBIDDEN_PREFIX = ".agent-src.uncondensed/"
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
def _shipped_roots() -> tuple[set[str], set[str]]:
|
|
@@ -103,7 +103,7 @@ def main() -> int:
|
|
|
103
103
|
|
|
104
104
|
print(f"❌ docs/catalog.md — {total_violations} violation(s):")
|
|
105
105
|
if forbidden:
|
|
106
|
-
print(f"\n {len(forbidden)} link(s) point at unshipped `.agent-src.
|
|
106
|
+
print(f"\n {len(forbidden)} link(s) point at unshipped `.agent-src.uncondensed/`:")
|
|
107
107
|
for ln, href in forbidden[:10]:
|
|
108
108
|
print(f" line {ln}: {href}")
|
|
109
109
|
if len(forbidden) > 10:
|
|
@@ -39,6 +39,7 @@ SKIP_DIRS = [
|
|
|
39
39
|
"agents/runtime/council/questions", # design Q&A trail — forward-refs to planned artifacts
|
|
40
40
|
"agents/evidence/analysis", # plate-comparison working docs — forward-refs to planned artifacts
|
|
41
41
|
"agents/runtime", # volatile / machine-generated artefacts (gitignored)
|
|
42
|
+
"agents/tmp", # transient working docs (gitignored) — pr-bodies, council questions, manual-step scratchpads
|
|
42
43
|
]
|
|
43
44
|
|
|
44
45
|
# Per-file opt-out marker. When present in the first 10 lines of a .md
|
|
@@ -88,7 +89,7 @@ UNCHECKED_TODO_PATTERN = re.compile(r'^\s*[-*+]\s+\[[ ~]\]\s')
|
|
|
88
89
|
_SKIP_NAMES = {"the", "a", "an", "this", "that", "your", "my", "no", "any", "each", "one",
|
|
89
90
|
"always", "auto", "fail", "vue", "guidelines", "naming",
|
|
90
91
|
"orderBy", "no-commit", "skill-linter", "skill-validator",
|
|
91
|
-
"skill-refactor", "skill-
|
|
92
|
+
"skill-refactor", "skill-telegraph-condensation", "skill-decondensation",
|
|
92
93
|
"broad_scope", "composer"}
|
|
93
94
|
|
|
94
95
|
# Paths that are clearly example/template placeholders (not real references)
|
|
@@ -118,7 +119,7 @@ EXAMPLE_PATH_PATTERNS = [
|
|
|
118
119
|
re.compile(r"skills/[\w-]+\.md"), # short skill refs in examples (not SKILL.md path)
|
|
119
120
|
re.compile(r"skills/[\w-]+/SKILL\.md"), # example skill paths in commands
|
|
120
121
|
re.compile(r"\{"), # template placeholders like {module}
|
|
121
|
-
re.compile(r"\.
|
|
122
|
+
re.compile(r"\.condensation-hashes\.json"), # JSON file, not .md
|
|
122
123
|
re.compile(r"-foo\.(md|json|yml|yaml)$"), # `-foo.<ext>` placeholder examples
|
|
123
124
|
re.compile(r"-bar\.(md|json|yml|yaml)$"), # `-bar.<ext>` placeholder examples
|
|
124
125
|
# Forward references inside in-flight planning docs (road-to-
|
|
@@ -211,7 +212,7 @@ def _extract_personas_frontmatter(text: str) -> list[tuple[int, str]]:
|
|
|
211
212
|
|
|
212
213
|
def _find_suggestion(path: str, root: Path) -> str:
|
|
213
214
|
name = Path(path).name
|
|
214
|
-
for d in [root / ".agent-src", root / ".agent-src.
|
|
215
|
+
for d in [root / ".agent-src", root / ".agent-src.uncondensed", root / "agents"]:
|
|
215
216
|
if d.exists():
|
|
216
217
|
for f in d.rglob(name):
|
|
217
218
|
return str(f.relative_to(root))
|
|
@@ -313,18 +314,18 @@ def check_file(filepath: Path, artifacts: dict[str, set[str]], root: Path) -> Li
|
|
|
313
314
|
else:
|
|
314
315
|
# Strip leading ./ and try with prefixes
|
|
315
316
|
ref = raw_ref.lstrip("./")
|
|
316
|
-
for prefix in [root, root / ".agent-src", root / ".agent-src.
|
|
317
|
+
for prefix in [root, root / ".agent-src", root / ".agent-src.uncondensed"]:
|
|
317
318
|
if (prefix / ref).exists():
|
|
318
319
|
resolved = True
|
|
319
320
|
break
|
|
320
321
|
# `.augment/` is a local projection of `.agent-src/` (gitignored).
|
|
321
322
|
# In CI the projection doesn't exist, so resolve `.augment/X`
|
|
322
323
|
# against the canonical source at `.agent-src/X` (and the
|
|
323
|
-
#
|
|
324
|
+
# uncondensed authoring tree as a fallback). Note: `raw_ref`
|
|
324
325
|
# keeps the leading dot; `ref` above was stripped via lstrip.
|
|
325
326
|
if not resolved and raw_ref.startswith(".augment/"):
|
|
326
327
|
rel = raw_ref[len(".augment/") :]
|
|
327
|
-
for prefix in [root / ".agent-src", root / ".agent-src.
|
|
328
|
+
for prefix in [root / ".agent-src", root / ".agent-src.uncondensed"]:
|
|
328
329
|
if (prefix / rel).exists():
|
|
329
330
|
resolved = True
|
|
330
331
|
break
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Release-PR shape checker — fail-closed gate for `docs/contracts/release-pr-gating.md`.
|
|
3
|
+
|
|
4
|
+
Given a PR number, fetches the file list via `gh pr diff <n> --name-only`
|
|
5
|
+
and asserts every changed file matches the version-bump allowlist:
|
|
6
|
+
|
|
7
|
+
* `package.json`
|
|
8
|
+
* `CHANGELOG.md`
|
|
9
|
+
* `.claude-plugin/marketplace.json`
|
|
10
|
+
* `packages/*/pack.yaml`
|
|
11
|
+
* `packages/*/README.md`
|
|
12
|
+
|
|
13
|
+
Exit codes:
|
|
14
|
+
|
|
15
|
+
0 — every file matches; release-PR is shape-clean and the heavy install /
|
|
16
|
+
test matrices may skip per `release-pr-gating.md`.
|
|
17
|
+
1 — at least one file outside the allowlist OR no files at all. Stdout
|
|
18
|
+
lists each offending entry one per line with an "OUT-OF-SHAPE: " prefix
|
|
19
|
+
so CI logs surface the precise reason.
|
|
20
|
+
2 — usage / environment error (gh missing, invalid PR number, gh non-zero).
|
|
21
|
+
|
|
22
|
+
Design constraints from the roadmap:
|
|
23
|
+
|
|
24
|
+
* stdlib-only — no jsonschema, no requests, no PyYAML
|
|
25
|
+
* ≤ 150 LOC including this docstring
|
|
26
|
+
* deterministic — same diff in, same exit
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
from __future__ import annotations
|
|
30
|
+
|
|
31
|
+
import argparse
|
|
32
|
+
import fnmatch
|
|
33
|
+
import shutil
|
|
34
|
+
import subprocess
|
|
35
|
+
import sys
|
|
36
|
+
|
|
37
|
+
ALLOWLIST_GLOBS = (
|
|
38
|
+
"package.json",
|
|
39
|
+
"CHANGELOG.md",
|
|
40
|
+
".claude-plugin/marketplace.json",
|
|
41
|
+
"packages/*/pack.yaml",
|
|
42
|
+
"packages/*/README.md",
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _matches(path: str) -> bool:
|
|
47
|
+
return any(fnmatch.fnmatch(path, pat) for pat in ALLOWLIST_GLOBS)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _gh_diff_files(pr: str) -> list[str]:
|
|
51
|
+
"""Return the list of files changed in `pr`, via `gh pr diff --name-only`."""
|
|
52
|
+
if shutil.which("gh") is None:
|
|
53
|
+
print("ERROR: gh CLI not on PATH; cannot fetch PR diff.", file=sys.stderr)
|
|
54
|
+
sys.exit(2)
|
|
55
|
+
try:
|
|
56
|
+
out = subprocess.run(
|
|
57
|
+
["gh", "pr", "diff", pr, "--name-only"],
|
|
58
|
+
check=True,
|
|
59
|
+
capture_output=True,
|
|
60
|
+
text=True,
|
|
61
|
+
).stdout
|
|
62
|
+
except subprocess.CalledProcessError as exc:
|
|
63
|
+
stderr = (exc.stderr or "").strip()
|
|
64
|
+
print(f"ERROR: gh pr diff {pr} failed: {stderr}", file=sys.stderr)
|
|
65
|
+
sys.exit(2)
|
|
66
|
+
return [line.strip() for line in out.splitlines() if line.strip()]
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def check(files: list[str]) -> int:
|
|
70
|
+
"""Return exit code; print per-file diff to stdout on failure."""
|
|
71
|
+
if not files:
|
|
72
|
+
print("OUT-OF-SHAPE: empty diff — release PR must touch at least one file.")
|
|
73
|
+
return 1
|
|
74
|
+
bad = [f for f in files if not _matches(f)]
|
|
75
|
+
if bad:
|
|
76
|
+
for f in bad:
|
|
77
|
+
print(f"OUT-OF-SHAPE: {f}")
|
|
78
|
+
return 1
|
|
79
|
+
print(f"SHAPE-CLEAN: {len(files)} file(s) — all within release-PR allowlist.")
|
|
80
|
+
for f in files:
|
|
81
|
+
print(f" ok: {f}")
|
|
82
|
+
return 0
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _read_files_arg(value: str) -> list[str]:
|
|
86
|
+
"""`--files` accepts comma-separated paths or `-` to read stdin (one per line)."""
|
|
87
|
+
if value == "-":
|
|
88
|
+
return [line.strip() for line in sys.stdin.read().splitlines() if line.strip()]
|
|
89
|
+
return [v.strip() for v in value.split(",") if v.strip()]
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def main(argv: list[str] | None = None) -> int:
|
|
93
|
+
parser = argparse.ArgumentParser(
|
|
94
|
+
description="Fail-closed shape checker for release PRs.",
|
|
95
|
+
)
|
|
96
|
+
src = parser.add_mutually_exclusive_group(required=True)
|
|
97
|
+
src.add_argument("--pr", help="GitHub PR number; uses `gh pr diff --name-only`.")
|
|
98
|
+
src.add_argument(
|
|
99
|
+
"--files",
|
|
100
|
+
help=(
|
|
101
|
+
"Comma-separated file list, or '-' to read one path per line from "
|
|
102
|
+
"stdin. Bypasses gh — useful for tests and local previews."
|
|
103
|
+
),
|
|
104
|
+
)
|
|
105
|
+
args = parser.parse_args(argv)
|
|
106
|
+
|
|
107
|
+
files = _gh_diff_files(args.pr) if args.pr else _read_files_arg(args.files)
|
|
108
|
+
return check(files)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
if __name__ == "__main__":
|
|
112
|
+
sys.exit(main())
|
|
@@ -99,11 +99,11 @@ def validate(text: str, strict: bool = False) -> tuple[int, str]:
|
|
|
99
99
|
|
|
100
100
|
|
|
101
101
|
def cmd_scan_dir(root: Path) -> int:
|
|
102
|
-
# If the requested root is the legacy ".agent-src.
|
|
102
|
+
# If the requested root is the legacy ".agent-src.uncondensed" and it
|
|
103
103
|
# no longer exists (post-monorepo-move), fall back to artefact_roots()
|
|
104
|
-
# so every packages/*/.agent-src.
|
|
104
|
+
# so every packages/*/.agent-src.uncondensed/ is scanned.
|
|
105
105
|
if not root.is_dir():
|
|
106
|
-
legacy = ROOT / ".agent-src.
|
|
106
|
+
legacy = ROOT / ".agent-src.uncondensed"
|
|
107
107
|
if root.resolve() == legacy.resolve():
|
|
108
108
|
roots = artefact_roots()
|
|
109
109
|
if not roots:
|
|
@@ -28,7 +28,7 @@ import sys
|
|
|
28
28
|
from pathlib import Path
|
|
29
29
|
|
|
30
30
|
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
31
|
-
RULES_DIR_REL = ".agent-src.
|
|
31
|
+
RULES_DIR_REL = ".agent-src.uncondensed/rules"
|
|
32
32
|
SAFETY_FLOOR = (
|
|
33
33
|
"non-destructive-by-default.md",
|
|
34
34
|
"commit-policy.md",
|
|
@@ -5,8 +5,8 @@ CI guard for P3.3 of road-to-portable-runtime-and-update-check.md.
|
|
|
5
5
|
|
|
6
6
|
A release bump of ``package.json`` must update
|
|
7
7
|
``agent_config_version`` in
|
|
8
|
-
``.agent-src.
|
|
9
|
-
(and its
|
|
8
|
+
``.agent-src.uncondensed/templates/agents/agent-project-settings.example.yml``
|
|
9
|
+
(and its condensed twin under ``.agent-src/``) in lockstep. Otherwise
|
|
10
10
|
a fresh ``init`` on a new project would bootstrap onto a stale pin,
|
|
11
11
|
and the pin-resolver would re-exec back to the older version.
|
|
12
12
|
|
|
@@ -30,8 +30,8 @@ from _lib.agent_src import resolve_logical # noqa: E402
|
|
|
30
30
|
PACKAGE_JSON = REPO_ROOT / "package.json"
|
|
31
31
|
|
|
32
32
|
# Source-of-truth template lives under whichever artefact root owns it
|
|
33
|
-
# (legacy .agent-src.
|
|
34
|
-
# post-ADR-017).
|
|
33
|
+
# (legacy .agent-src.uncondensed/ pre-move, packages/*/.agent-src.uncondensed/
|
|
34
|
+
# post-ADR-017). Condensed twin always lands at the flat .agent-src/ surface.
|
|
35
35
|
_TEMPLATE_LOGICAL = "templates/agents/agent-project-settings.example.yml"
|
|
36
36
|
|
|
37
37
|
|
|
@@ -41,7 +41,7 @@ def _template_files() -> tuple[Path, ...]:
|
|
|
41
41
|
if src is not None:
|
|
42
42
|
files.append(src)
|
|
43
43
|
else:
|
|
44
|
-
files.append(REPO_ROOT / ".agent-src.
|
|
44
|
+
files.append(REPO_ROOT / ".agent-src.uncondensed" / _TEMPLATE_LOGICAL)
|
|
45
45
|
files.append(REPO_ROOT / ".agent-src" / _TEMPLATE_LOGICAL)
|
|
46
46
|
return tuple(files)
|
|
47
47
|
PIN_LINE_RE = re.compile(r"^\s*agent_config_version\s*:\s*\"?([^\"\s#]*)\"?")
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Token-Optimizer freshness validator.
|
|
4
4
|
|
|
5
5
|
Per `road-to-token-optimization.md` P1.3: parses the catalog table inside
|
|
6
|
-
`.agent-src.
|
|
6
|
+
`.agent-src.uncondensed/skills/token-optimizer/SKILL.md`, verifies every
|
|
7
7
|
cited internal asset exists, and `grep`s the trigger keywords against
|
|
8
8
|
each target file. Fails on missing target OR keyword mismatch.
|
|
9
9
|
|
|
@@ -27,7 +27,7 @@ from _lib.agent_src import resolve_logical # noqa: E402
|
|
|
27
27
|
# Post-ADR-017 the source-of-truth lives under whichever package owns
|
|
28
28
|
# the skill; resolve_logical() walks every artefact root.
|
|
29
29
|
SKILL = resolve_logical("skills/token-optimizer/SKILL.md") or (
|
|
30
|
-
REPO_ROOT / ".agent-src.
|
|
30
|
+
REPO_ROOT / ".agent-src.uncondensed" / "skills" / "token-optimizer" / "SKILL.md"
|
|
31
31
|
)
|
|
32
32
|
|
|
33
33
|
from _lib.agent_src import strip_source_prefix # noqa: E402
|
|
@@ -83,7 +83,7 @@ def resolve(path: str) -> Path | None:
|
|
|
83
83
|
return None
|
|
84
84
|
cleaned = path.strip().lstrip("`").rstrip("`")
|
|
85
85
|
cleaned = cleaned.split(")")[0].lstrip("[(")
|
|
86
|
-
# Catalog rows still cite the legacy .agent-src.
|
|
86
|
+
# Catalog rows still cite the legacy .agent-src.uncondensed/ prefix
|
|
87
87
|
# for compactness; resolve those across every packages/* root.
|
|
88
88
|
logical = strip_source_prefix(cleaned)
|
|
89
89
|
if logical is not None:
|