@event4u/agent-config 5.1.0 → 5.3.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/commands/agent-handoff.md +0 -9
- package/.agent-src/commands/agent-status.md +0 -9
- package/.agent-src/commands/agents/audit.md +0 -9
- package/.agent-src/commands/agents/init.md +0 -9
- package/.agent-src/commands/agents/optimize.md +0 -9
- package/.agent-src/commands/agents/user/accept.md +0 -9
- package/.agent-src/commands/agents/user/init.md +0 -9
- package/.agent-src/commands/agents/user/review.md +0 -9
- package/.agent-src/commands/agents/user/show.md +0 -9
- package/.agent-src/commands/agents/user/update.md +0 -9
- package/.agent-src/commands/agents/user.md +0 -9
- package/.agent-src/commands/agents.md +0 -9
- package/.agent-src/commands/analytics/prune.md +0 -9
- package/.agent-src/commands/analytics/show.md +0 -9
- package/.agent-src/commands/analytics.md +0 -9
- package/.agent-src/commands/analyze-reference-repo.md +0 -9
- package/.agent-src/commands/bug-fix.md +0 -9
- package/.agent-src/commands/bug-investigate.md +0 -9
- package/.agent-src/commands/challenge-me/vision.md +0 -9
- package/.agent-src/commands/challenge-me/with-docs.md +0 -9
- package/.agent-src/commands/challenge-me.md +0 -9
- package/.agent-src/commands/chat-history/import.md +0 -9
- package/.agent-src/commands/chat-history/learn.md +0 -9
- package/.agent-src/commands/chat-history/show.md +0 -9
- package/.agent-src/commands/chat-history.md +0 -9
- package/.agent-src/commands/check-current-md.md +0 -9
- package/.agent-src/commands/commit/in-chunks.md +0 -9
- package/.agent-src/commands/commit.md +0 -9
- package/.agent-src/commands/condense.md +0 -9
- package/.agent-src/commands/context/create.md +0 -9
- package/.agent-src/commands/context/refactor.md +0 -9
- package/.agent-src/commands/context.md +0 -9
- package/.agent-src/commands/cost-report.md +0 -9
- package/.agent-src/commands/council/analysis.md +0 -9
- package/.agent-src/commands/council/debate.md +0 -9
- package/.agent-src/commands/council/default.md +0 -9
- package/.agent-src/commands/council/design.md +0 -9
- package/.agent-src/commands/council/optimize.md +0 -9
- package/.agent-src/commands/council/pr.md +0 -9
- package/.agent-src/commands/council.md +0 -9
- package/.agent-src/commands/create-pr/description-only.md +0 -9
- package/.agent-src/commands/create-pr.md +0 -9
- package/.agent-src/commands/e2e-heal.md +0 -9
- package/.agent-src/commands/e2e-plan.md +0 -9
- package/.agent-src/commands/estimate-ticket.md +0 -9
- package/.agent-src/commands/feature/dev.md +0 -9
- package/.agent-src/commands/feature/explore.md +0 -9
- package/.agent-src/commands/feature/plan.md +0 -9
- package/.agent-src/commands/feature/refactor.md +0 -9
- package/.agent-src/commands/feature/roadmap.md +0 -9
- package/.agent-src/commands/feature.md +0 -9
- package/.agent-src/commands/fix/ci.md +0 -9
- package/.agent-src/commands/fix/portability.md +0 -9
- package/.agent-src/commands/fix/pr-bot-comments.md +0 -9
- package/.agent-src/commands/fix/pr-comments.md +0 -9
- package/.agent-src/commands/fix/pr-developer-comments.md +0 -9
- package/.agent-src/commands/fix/refs.md +0 -9
- package/.agent-src/commands/fix/seeder.md +0 -9
- package/.agent-src/commands/fix.md +0 -9
- package/.agent-src/commands/ghostwriter/delete.md +0 -9
- package/.agent-src/commands/ghostwriter/fetch.md +0 -9
- package/.agent-src/commands/ghostwriter/list.md +0 -9
- package/.agent-src/commands/ghostwriter/show.md +0 -9
- package/.agent-src/commands/ghostwriter/write.md +0 -9
- package/.agent-src/commands/ghostwriter.md +0 -9
- package/.agent-src/commands/grill-me.md +0 -9
- package/.agent-src/commands/implement-ticket.md +0 -9
- package/.agent-src/commands/jira-ticket.md +0 -9
- package/.agent-src/commands/judge/on-diff.md +0 -9
- package/.agent-src/commands/judge/solo.md +0 -9
- package/.agent-src/commands/judge/steps.md +0 -9
- package/.agent-src/commands/judge.md +0 -9
- package/.agent-src/commands/knowledge/forget.md +0 -9
- package/.agent-src/commands/knowledge/ingest.md +0 -9
- package/.agent-src/commands/knowledge/list.md +0 -9
- package/.agent-src/commands/knowledge.md +0 -9
- package/.agent-src/commands/memory/add.md +0 -9
- package/.agent-src/commands/memory/learn-low-impact.md +0 -9
- package/.agent-src/commands/memory/load.md +0 -9
- package/.agent-src/commands/memory/mine-session.md +0 -9
- package/.agent-src/commands/memory/promote.md +0 -9
- package/.agent-src/commands/memory/propose.md +0 -9
- package/.agent-src/commands/memory.md +0 -9
- package/.agent-src/commands/mode.md +0 -9
- package/.agent-src/commands/module/create.md +0 -9
- package/.agent-src/commands/module/explore.md +0 -9
- package/.agent-src/commands/module.md +0 -9
- package/.agent-src/commands/optimize/agents-dir.md +0 -9
- package/.agent-src/commands/optimize/augmentignore.md +0 -9
- package/.agent-src/commands/optimize/rtk.md +0 -9
- package/.agent-src/commands/optimize/skills.md +0 -9
- package/.agent-src/commands/optimize-prompt.md +0 -9
- package/.agent-src/commands/optimize.md +0 -9
- package/.agent-src/commands/orchestrate.md +0 -9
- package/.agent-src/commands/override/create.md +0 -9
- package/.agent-src/commands/override/manage.md +0 -9
- package/.agent-src/commands/override.md +0 -9
- package/.agent-src/commands/package-reset.md +0 -9
- package/.agent-src/commands/package-test.md +0 -9
- package/.agent-src/commands/post-as/ghostwriter.md +0 -9
- package/.agent-src/commands/post-as/me.md +0 -9
- package/.agent-src/commands/post-as.md +0 -9
- package/.agent-src/commands/prepare-for-review.md +0 -9
- package/.agent-src/commands/project-analyze.md +0 -9
- package/.agent-src/commands/project-health.md +0 -9
- package/.agent-src/commands/quality-fix.md +0 -9
- package/.agent-src/commands/refine-ticket.md +0 -9
- package/.agent-src/commands/research/deep.md +0 -9
- package/.agent-src/commands/research/report.md +0 -9
- package/.agent-src/commands/research.md +0 -9
- package/.agent-src/commands/review-changes.md +0 -9
- package/.agent-src/commands/review-routing.md +0 -9
- package/.agent-src/commands/roadmap/ai-council.md +0 -9
- package/.agent-src/commands/roadmap/create.md +0 -9
- package/.agent-src/commands/roadmap/process-full.md +0 -9
- package/.agent-src/commands/roadmap/process-phase.md +0 -9
- package/.agent-src/commands/roadmap/process-step.md +0 -9
- package/.agent-src/commands/roadmap.md +0 -9
- package/.agent-src/commands/rule-compliance-audit.md +0 -9
- package/.agent-src/commands/set-cost-profile.md +0 -9
- package/.agent-src/commands/sync-agent-settings.md +0 -9
- package/.agent-src/commands/sync-gitignore/fix.md +0 -9
- package/.agent-src/commands/sync-gitignore.md +0 -9
- package/.agent-src/commands/tests/create.md +0 -9
- package/.agent-src/commands/tests/execute.md +0 -9
- package/.agent-src/commands/tests.md +0 -9
- package/.agent-src/commands/threat-model.md +0 -9
- package/.agent-src/commands/update-form-request-messages.md +0 -9
- package/.agent-src/commands/upstream-contribute.md +0 -9
- package/.agent-src/commands/video/from-script.md +0 -9
- package/.agent-src/commands/video/scene.md +0 -9
- package/.agent-src/commands/video/stitch.md +0 -9
- package/.agent-src/commands/video/storyboard.md +0 -9
- package/.agent-src/commands/video.md +0 -9
- package/.agent-src/commands/work.md +0 -9
- package/.agent-src/personas/ai-agent.md +0 -2
- package/.agent-src/personas/ai-video-technical-director.md +0 -2
- package/.agent-src/personas/backend-architect.md +0 -2
- package/.agent-src/personas/cmo.md +0 -2
- package/.agent-src/personas/critical-challenger.md +0 -2
- package/.agent-src/personas/customer-success-lead.md +0 -2
- package/.agent-src/personas/developer.md +0 -2
- package/.agent-src/personas/discovery-lead.md +0 -2
- package/.agent-src/personas/eloquent-tamer.md +0 -2
- package/.agent-src/personas/engineering-manager.md +0 -2
- package/.agent-src/personas/finance-partner.md +0 -2
- package/.agent-src/personas/frontend-engineer.md +0 -2
- package/.agent-src/personas/growth-pm.md +0 -2
- package/.agent-src/personas/hollywood-director.md +0 -2
- package/.agent-src/personas/people-strategist.md +0 -2
- package/.agent-src/personas/product-owner.md +0 -1
- package/.agent-src/personas/qa.md +0 -2
- package/.agent-src/personas/revops-maintainer.md +0 -2
- package/.agent-src/personas/revops.md +0 -2
- package/.agent-src/personas/security-engineer.md +0 -2
- package/.agent-src/personas/senior-engineer.md +0 -2
- package/.agent-src/personas/stakeholder.md +0 -2
- package/.agent-src/personas/strategist.md +0 -2
- package/.agent-src/personas/tech-writer.md +0 -2
- package/.agent-src/rules/agent-authority.md +0 -9
- package/.agent-src/rules/analysis-skill-routing.md +0 -9
- package/.agent-src/rules/architecture.md +0 -9
- package/.agent-src/rules/artifact-drafting-protocol.md +0 -9
- package/.agent-src/rules/artifact-engagement-recording.md +0 -9
- package/.agent-src/rules/ask-when-uncertain.md +0 -9
- package/.agent-src/rules/augment-edit-discipline.md +0 -9
- package/.agent-src/rules/augment-source-of-truth.md +0 -9
- package/.agent-src/rules/autonomous-execution.md +0 -9
- package/.agent-src/rules/cli-output-handling.md +0 -9
- package/.agent-src/rules/command-suggestion-policy.md +0 -9
- package/.agent-src/rules/commit-conventions.md +0 -9
- package/.agent-src/rules/commit-policy.md +0 -9
- package/.agent-src/rules/context-hygiene.md +0 -9
- package/.agent-src/rules/copilot-routing.md +0 -9
- package/.agent-src/rules/devcontainer-routing.md +0 -9
- package/.agent-src/rules/direct-answers.md +0 -9
- package/.agent-src/rules/docker-commands.md +0 -9
- package/.agent-src/rules/domain-adoption-policy.md +0 -9
- package/.agent-src/rules/domain-safety-disclaimer.md +0 -9
- package/.agent-src/rules/domain-safety-pii.md +0 -9
- package/.agent-src/rules/domain-safety-retention.md +0 -9
- package/.agent-src/rules/downstream-changes.md +0 -9
- package/.agent-src/rules/engineering-safety-floor.md +0 -9
- package/.agent-src/rules/external-reference-deep-dive.md +0 -9
- package/.agent-src/rules/fast-path-marker-visibility.md +0 -9
- package/.agent-src/rules/finance-safety-floor.md +0 -6
- package/.agent-src/rules/framework-neutrality-in-generic-skills.md +0 -9
- package/.agent-src/rules/git-history-discipline.md +0 -9
- package/.agent-src/rules/guidelines.md +0 -9
- package/.agent-src/rules/improve-before-implement.md +0 -9
- package/.agent-src/rules/invite-challenge.md +0 -9
- package/.agent-src/rules/language-and-tone.md +0 -9
- package/.agent-src/rules/laravel-routing.md +0 -4
- package/.agent-src/rules/laravel-translations.md +0 -4
- package/.agent-src/rules/linked-projects-onboarding-gate.md +0 -3
- package/.agent-src/rules/low-impact-corpus-privacy-floor.md +0 -9
- package/.agent-src/rules/markdown-safe-codeblocks.md +0 -9
- package/.agent-src/rules/media-governance-routing.md +0 -9
- package/.agent-src/rules/minimal-safe-diff.md +0 -9
- package/.agent-src/rules/missing-tool-handling.md +0 -9
- package/.agent-src/rules/model-recommendation.md +0 -9
- package/.agent-src/rules/no-attribution-footers.md +0 -9
- package/.agent-src/rules/no-cheap-questions.md +0 -9
- package/.agent-src/rules/no-decorative-emojis-in-git-surfaces.md +0 -9
- package/.agent-src/rules/no-pr-progress-comments.md +0 -9
- package/.agent-src/rules/no-roadmap-references.md +0 -9
- package/.agent-src/rules/non-destructive-by-default.md +0 -9
- package/.agent-src/rules/onboarding-gate.md +0 -9
- package/.agent-src/rules/package-ci-checks.md +0 -9
- package/.agent-src/rules/persona-governance.md +0 -9
- package/.agent-src/rules/php-coding.md +0 -4
- package/.agent-src/rules/preservation-guard.md +0 -9
- package/.agent-src/rules/provider-lifecycle-discipline.md +0 -9
- package/.agent-src/rules/reviewer-awareness.md +0 -9
- package/.agent-src/rules/roadmap-ci-steps-policy.md +0 -9
- package/.agent-src/rules/roadmap-progress-sync.md +0 -9
- package/.agent-src/rules/role-mode-adherence.md +0 -9
- package/.agent-src/rules/rule-type-governance.md +0 -9
- package/.agent-src/rules/runtime-safety.md +0 -9
- package/.agent-src/rules/scope-control.md +0 -9
- package/.agent-src/rules/security-sensitive-stop.md +0 -9
- package/.agent-src/rules/size-enforcement.md +0 -9
- package/.agent-src/rules/skill-improvement-trigger.md +0 -9
- package/.agent-src/rules/skill-quality.md +0 -9
- package/.agent-src/rules/slash-command-routing-policy.md +0 -9
- package/.agent-src/rules/strategy-safety-floor.md +0 -6
- package/.agent-src/rules/symfony-routing.md +0 -4
- package/.agent-src/rules/telegraph-speak.md +0 -9
- package/.agent-src/rules/think-before-action.md +0 -9
- package/.agent-src/rules/token-efficiency.md +0 -9
- package/.agent-src/rules/token-optimizer-maintenance.md +0 -9
- package/.agent-src/rules/tool-safety.md +0 -9
- package/.agent-src/rules/ui-audit-gate.md +0 -9
- package/.agent-src/rules/upstream-proposal.md +0 -9
- package/.agent-src/rules/user-interaction.md +0 -9
- package/.agent-src/rules/user-interrupt-priority.md +0 -9
- package/.agent-src/rules/verify-before-complete.md +0 -9
- package/.agent-src/skills/accessibility-auditor/SKILL.md +0 -9
- package/.agent-src/skills/activation-design/SKILL.md +0 -4
- package/.agent-src/skills/adr-create/SKILL.md +0 -9
- package/.agent-src/skills/adversarial-review/SKILL.md +0 -9
- package/.agent-src/skills/agent-docs-writing/SKILL.md +0 -9
- package/.agent-src/skills/agents-md-thin-root/SKILL.md +0 -9
- package/.agent-src/skills/ai-council/SKILL.md +0 -9
- package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +0 -9
- package/.agent-src/skills/analysis-skill-router/SKILL.md +0 -9
- package/.agent-src/skills/api-design/SKILL.md +0 -9
- package/.agent-src/skills/api-endpoint/SKILL.md +0 -9
- package/.agent-src/skills/api-testing/SKILL.md +0 -9
- package/.agent-src/skills/architecture-review-lens/SKILL.md +0 -9
- package/.agent-src/skills/artisan-commands/SKILL.md +0 -4
- package/.agent-src/skills/async-python-patterns/SKILL.md +0 -3
- package/.agent-src/skills/authz-review/SKILL.md +0 -9
- package/.agent-src/skills/aws-infrastructure/SKILL.md +0 -9
- package/.agent-src/skills/blade-ui/SKILL.md +0 -4
- package/.agent-src/skills/blast-radius-analyzer/SKILL.md +0 -9
- package/.agent-src/skills/bug-analyzer/SKILL.md +0 -9
- package/.agent-src/skills/build-buy-partner/SKILL.md +0 -7
- package/.agent-src/skills/canvas-design/SKILL.md +0 -3
- package/.agent-src/skills/character-consistency/SKILL.md +0 -3
- package/.agent-src/skills/check-refs/SKILL.md +0 -9
- package/.agent-src/skills/churn-prevention/SKILL.md +0 -5
- package/.agent-src/skills/code-refactoring/SKILL.md +0 -9
- package/.agent-src/skills/code-review/SKILL.md +0 -9
- package/.agent-src/skills/command-routing/SKILL.md +0 -9
- package/.agent-src/skills/command-writing/SKILL.md +0 -9
- package/.agent-src/skills/comp-banding/SKILL.md +0 -5
- package/.agent-src/skills/competitive-moat-analysis/SKILL.md +0 -7
- package/.agent-src/skills/competitive-positioning/SKILL.md +0 -5
- package/.agent-src/skills/composer-packages/SKILL.md +0 -4
- package/.agent-src/skills/condense-memory/SKILL.md +0 -9
- package/.agent-src/skills/content-funnel-design/SKILL.md +0 -5
- package/.agent-src/skills/context-authoring/SKILL.md +0 -9
- package/.agent-src/skills/context-document/SKILL.md +0 -9
- package/.agent-src/skills/contracts-cognition/SKILL.md +0 -5
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +0 -9
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +0 -9
- package/.agent-src/skills/copilot-config/SKILL.md +0 -9
- package/.agent-src/skills/customer-research/SKILL.md +0 -4
- package/.agent-src/skills/dashboard-design/SKILL.md +0 -9
- package/.agent-src/skills/data-flow-mapper/SKILL.md +0 -9
- package/.agent-src/skills/data-handling-judgment/SKILL.md +0 -9
- package/.agent-src/skills/database/SKILL.md +0 -9
- package/.agent-src/skills/dcf-modeling/SKILL.md +0 -6
- package/.agent-src/skills/deal-qualification-meddic/SKILL.md +0 -5
- package/.agent-src/skills/decision-record/SKILL.md +0 -9
- package/.agent-src/skills/deep-reading-analyst/SKILL.md +0 -9
- package/.agent-src/skills/defense-in-depth/SKILL.md +0 -9
- package/.agent-src/skills/dependency-upgrade/SKILL.md +0 -9
- package/.agent-src/skills/description-assist/SKILL.md +0 -9
- package/.agent-src/skills/design-review/SKILL.md +0 -9
- package/.agent-src/skills/devcontainer/SKILL.md +0 -9
- package/.agent-src/skills/developer-like-execution/SKILL.md +0 -9
- package/.agent-src/skills/discovery-interview/SKILL.md +0 -4
- package/.agent-src/skills/doc-coauthoring/SKILL.md +0 -9
- package/.agent-src/skills/docker/SKILL.md +0 -9
- package/.agent-src/skills/editorial-calendar/SKILL.md +0 -5
- package/.agent-src/skills/eloquent/SKILL.md +0 -4
- package/.agent-src/skills/error-handling-patterns/SKILL.md +0 -9
- package/.agent-src/skills/estimate-ticket/SKILL.md +0 -5
- package/.agent-src/skills/existing-ui-audit/SKILL.md +0 -9
- package/.agent-src/skills/expansion-playbook/SKILL.md +0 -5
- package/.agent-src/skills/fe-design/SKILL.md +0 -9
- package/.agent-src/skills/feature-planning/SKILL.md +0 -5
- package/.agent-src/skills/file-editor/SKILL.md +0 -9
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +0 -9
- package/.agent-src/skills/flux/SKILL.md +0 -4
- package/.agent-src/skills/forecast-accuracy/SKILL.md +0 -5
- package/.agent-src/skills/forecasting/SKILL.md +0 -5
- package/.agent-src/skills/form-handler/SKILL.md +0 -9
- package/.agent-src/skills/fundraising-narrative/SKILL.md +0 -7
- package/.agent-src/skills/funnel-analysis/SKILL.md +0 -5
- package/.agent-src/skills/git-workflow/SKILL.md +0 -9
- package/.agent-src/skills/github-ci/SKILL.md +0 -9
- package/.agent-src/skills/grafana/SKILL.md +0 -9
- package/.agent-src/skills/gtm-launch/SKILL.md +0 -5
- package/.agent-src/skills/guideline-writing/SKILL.md +0 -9
- package/.agent-src/skills/hiring-loop-design/SKILL.md +0 -5
- package/.agent-src/skills/incident-commander/SKILL.md +0 -9
- package/.agent-src/skills/jira-integration/SKILL.md +0 -9
- package/.agent-src/skills/jobs-events/SKILL.md +0 -4
- package/.agent-src/skills/judge-bug-hunter/SKILL.md +0 -9
- package/.agent-src/skills/judge-code-quality/SKILL.md +0 -9
- package/.agent-src/skills/judge-security-auditor/SKILL.md +0 -9
- package/.agent-src/skills/judge-test-coverage/SKILL.md +0 -9
- package/.agent-src/skills/laravel/SKILL.md +0 -4
- package/.agent-src/skills/laravel-api-endpoint/SKILL.md +0 -4
- package/.agent-src/skills/laravel-dto/SKILL.md +0 -4
- package/.agent-src/skills/laravel-horizon/SKILL.md +0 -4
- package/.agent-src/skills/laravel-mail/SKILL.md +0 -4
- package/.agent-src/skills/laravel-middleware/SKILL.md +0 -4
- package/.agent-src/skills/laravel-migration/SKILL.md +0 -4
- package/.agent-src/skills/laravel-notifications/SKILL.md +0 -4
- package/.agent-src/skills/laravel-pennant/SKILL.md +0 -4
- package/.agent-src/skills/laravel-pulse/SKILL.md +0 -4
- package/.agent-src/skills/laravel-reverb/SKILL.md +0 -4
- package/.agent-src/skills/laravel-scheduling/SKILL.md +0 -4
- package/.agent-src/skills/laravel-validation/SKILL.md +0 -4
- package/.agent-src/skills/laravel-websocket/SKILL.md +0 -4
- package/.agent-src/skills/launch-readiness/SKILL.md +0 -7
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +0 -8
- package/.agent-src/skills/lint-skills/SKILL.md +0 -9
- package/.agent-src/skills/livewire/SKILL.md +0 -4
- package/.agent-src/skills/livewire-architect/SKILL.md +0 -4
- package/.agent-src/skills/logging-monitoring/SKILL.md +0 -9
- package/.agent-src/skills/market-entry-analysis/SKILL.md +0 -7
- package/.agent-src/skills/markitdown/SKILL.md +0 -9
- package/.agent-src/skills/mcp/SKILL.md +0 -9
- package/.agent-src/skills/mcp-builder/SKILL.md +0 -9
- package/.agent-src/skills/md-language-check/SKILL.md +0 -9
- package/.agent-src/skills/memory-consolidation/SKILL.md +0 -9
- package/.agent-src/skills/merge-conflicts/SKILL.md +0 -9
- package/.agent-src/skills/messaging-architecture/SKILL.md +0 -5
- package/.agent-src/skills/migration-architect/SKILL.md +0 -9
- package/.agent-src/skills/mobile-e2e-strategy/SKILL.md +0 -9
- package/.agent-src/skills/module-detect-on-the-fly/SKILL.md +0 -9
- package/.agent-src/skills/module-management/SKILL.md +0 -9
- package/.agent-src/skills/motion-choreographer/SKILL.md +0 -3
- package/.agent-src/skills/multi-tenancy/SKILL.md +0 -9
- package/.agent-src/skills/nextjs-patterns/SKILL.md +0 -4
- package/.agent-src/skills/okr-tree-modeling/SKILL.md +0 -7
- package/.agent-src/skills/onboarding-design/SKILL.md +0 -5
- package/.agent-src/skills/onboarding-program/SKILL.md +0 -5
- package/.agent-src/skills/one-on-one-cadence/SKILL.md +0 -5
- package/.agent-src/skills/openapi/SKILL.md +0 -9
- package/.agent-src/skills/org-design/SKILL.md +0 -5
- package/.agent-src/skills/override-management/SKILL.md +0 -9
- package/.agent-src/skills/perf-feedback-craft/SKILL.md +0 -5
- package/.agent-src/skills/performance/SKILL.md +0 -9
- package/.agent-src/skills/performance-analysis/SKILL.md +0 -9
- package/.agent-src/skills/persona-writing/SKILL.md +0 -9
- package/.agent-src/skills/pest-testing/SKILL.md +0 -4
- package/.agent-src/skills/php-coder/SKILL.md +0 -4
- package/.agent-src/skills/php-debugging/SKILL.md +0 -4
- package/.agent-src/skills/php-service/SKILL.md +0 -4
- package/.agent-src/skills/pipeline-strategy/SKILL.md +0 -5
- package/.agent-src/skills/pixar-storyteller/SKILL.md +0 -3
- package/.agent-src/skills/playwright-architect/SKILL.md +0 -9
- package/.agent-src/skills/playwright-testing/SKILL.md +0 -9
- package/.agent-src/skills/po-discovery/SKILL.md +0 -5
- package/.agent-src/skills/positioning-strategy/SKILL.md +0 -5
- package/.agent-src/skills/privacy-review/SKILL.md +0 -9
- package/.agent-src/skills/project-analysis-core/SKILL.md +0 -9
- package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +0 -9
- package/.agent-src/skills/project-analysis-laravel/SKILL.md +0 -4
- package/.agent-src/skills/project-analysis-nextjs/SKILL.md +0 -4
- package/.agent-src/skills/project-analysis-node-express/SKILL.md +0 -3
- package/.agent-src/skills/project-analysis-react/SKILL.md +0 -4
- package/.agent-src/skills/project-analysis-symfony/SKILL.md +0 -4
- package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +0 -4
- package/.agent-src/skills/project-analyzer/SKILL.md +0 -9
- package/.agent-src/skills/project-docs/SKILL.md +0 -9
- package/.agent-src/skills/prompt-engineering-patterns/SKILL.md +0 -9
- package/.agent-src/skills/prompt-optimizer/SKILL.md +0 -9
- package/.agent-src/skills/quality-tools/SKILL.md +0 -9
- package/.agent-src/skills/react-native-setup/SKILL.md +0 -4
- package/.agent-src/skills/react-shadcn-ui/SKILL.md +0 -4
- package/.agent-src/skills/readme-reviewer/SKILL.md +0 -9
- package/.agent-src/skills/readme-writing/SKILL.md +0 -9
- package/.agent-src/skills/readme-writing-package/SKILL.md +0 -9
- package/.agent-src/skills/receiving-code-review/SKILL.md +0 -9
- package/.agent-src/skills/refine-prompt/SKILL.md +0 -9
- package/.agent-src/skills/refine-ticket/SKILL.md +0 -5
- package/.agent-src/skills/release-comms/SKILL.md +0 -5
- package/.agent-src/skills/repomix-packer/SKILL.md +0 -9
- package/.agent-src/skills/requesting-code-review/SKILL.md +0 -9
- package/.agent-src/skills/retention-loops/SKILL.md +0 -5
- package/.agent-src/skills/review-routing/SKILL.md +0 -9
- package/.agent-src/skills/rice-prioritization/SKILL.md +0 -5
- package/.agent-src/skills/risk-officer/SKILL.md +0 -9
- package/.agent-src/skills/roadmap-management/SKILL.md +0 -9
- package/.agent-src/skills/roadmap-writing/SKILL.md +0 -9
- package/.agent-src/skills/rtk-output-filtering/SKILL.md +0 -9
- package/.agent-src/skills/rule-refactor/SKILL.md +0 -9
- package/.agent-src/skills/rule-writing/SKILL.md +0 -9
- package/.agent-src/skills/runway-cognition/SKILL.md +0 -5
- package/.agent-src/skills/scenario-modeling/SKILL.md +0 -6
- package/.agent-src/skills/scene-expander/SKILL.md +0 -3
- package/.agent-src/skills/script-writing/SKILL.md +0 -9
- package/.agent-src/skills/secrets-management/SKILL.md +0 -9
- package/.agent-src/skills/security/SKILL.md +0 -9
- package/.agent-src/skills/security-audit/SKILL.md +0 -9
- package/.agent-src/skills/sentry-integration/SKILL.md +0 -9
- package/.agent-src/skills/sequential-thinking/SKILL.md +0 -9
- package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +0 -9
- package/.agent-src/skills/skill-management/SKILL.md +0 -8
- package/.agent-src/skills/skill-reviewer/SKILL.md +0 -9
- package/.agent-src/skills/skill-writing/SKILL.md +0 -8
- package/.agent-src/skills/sql-writing/SKILL.md +0 -9
- package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +0 -5
- package/.agent-src/skills/subagent-orchestration/SKILL.md +0 -9
- package/.agent-src/skills/symfony-workflow/SKILL.md +0 -4
- package/.agent-src/skills/systematic-debugging/SKILL.md +0 -9
- package/.agent-src/skills/tailwind-engineer/SKILL.md +0 -9
- package/.agent-src/skills/tech-debt-tracker/SKILL.md +0 -9
- package/.agent-src/skills/technical-specification/SKILL.md +0 -5
- package/.agent-src/skills/terraform/SKILL.md +0 -9
- package/.agent-src/skills/terragrunt/SKILL.md +0 -9
- package/.agent-src/skills/test-driven-development/SKILL.md +0 -9
- package/.agent-src/skills/test-performance/SKILL.md +0 -9
- package/.agent-src/skills/testing-anti-patterns/SKILL.md +0 -9
- package/.agent-src/skills/threat-modeling/SKILL.md +0 -9
- package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +0 -5
- package/.agent-src/skills/token-optimizer/SKILL.md +0 -9
- package/.agent-src/skills/traefik/SKILL.md +0 -9
- package/.agent-src/skills/ui-component-architect/SKILL.md +0 -9
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +0 -5
- package/.agent-src/skills/universal-project-analysis/SKILL.md +0 -9
- package/.agent-src/skills/upstream-contribute/SKILL.md +0 -9
- package/.agent-src/skills/using-git-worktrees/SKILL.md +0 -9
- package/.agent-src/skills/validate-feature-fit/SKILL.md +0 -9
- package/.agent-src/skills/verify-completion-evidence/SKILL.md +0 -9
- package/.agent-src/skills/video-director/SKILL.md +0 -3
- package/.agent-src/skills/vision-articulation/SKILL.md +0 -7
- package/.agent-src/skills/voc-extract/SKILL.md +0 -4
- package/.agent-src/skills/voice-and-tone-design/SKILL.md +0 -5
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +48 -0
- package/README.md +5 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +3 -3
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +2 -2
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +3 -3
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +3 -3
- package/dist/mcp/registry-manifest.json +3 -3
- package/docs/decisions/ADR-033-distribution-identity-npm-primary.md +81 -0
- package/docs/decisions/INDEX.md +1 -0
- package/docs/distribution/registries.md +29 -0
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +25 -0
- package/package.json +1 -1
- package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
- package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
- package/scripts/build_discovery_manifest.py +20 -3
- package/scripts/check_artefact_checksums.py +11 -4
- package/scripts/condense.py +6 -1
- package/scripts/lint_commit_subjects.py +139 -0
- package/scripts/lint_framework_leakage_allowlist.json +106 -76
- package/scripts/lint_frontmatter_boilerplate.py +77 -0
- package/scripts/migrate_frontmatter_defaults.py +245 -0
- package/scripts/schemas/command.schema.json +7 -5
- package/scripts/schemas/persona.schema.json +4 -2
- package/scripts/schemas/rule.schema.json +8 -6
- package/scripts/schemas/skill.schema.json +8 -6
- package/scripts/skill_linter.py +21 -9
- package/scripts/smoke/skills.sh +4 -1
- package/scripts/validate_frontmatter.py +74 -0
package/docs/decisions/INDEX.md
CHANGED
|
@@ -36,6 +36,7 @@ _Auto-generated by `scripts/adr/regenerate_index.py`. Do not edit._
|
|
|
36
36
|
| [ADR-030](ADR-030-claude-code-command-projection.md) | Claude Code Command Projection | accepted | 2026-05-28 | — |
|
|
37
37
|
| [ADR-031](ADR-031-validation-severity-tiers-and-projection-roundtrip.md) | Validation Severity Tiers And Projection Roundtrip | accepted | 2026-05-29 | — |
|
|
38
38
|
| [ADR-032](ADR-032-linked-projects-scope.md) | Linked Projects Scope Go Option A | accepted | 2026-05-29 | — |
|
|
39
|
+
| [ADR-033](ADR-033-distribution-identity-npm-primary.md) | Distribution Identity Npm Primary | accepted | 2026-05-29 | — |
|
|
39
40
|
|
|
40
41
|
## Unnumbered (legacy)
|
|
41
42
|
|
|
@@ -4,6 +4,35 @@ Track third-party registries / directories we want this package to surface in. S
|
|
|
4
4
|
|
|
5
5
|
> **Authority** — Phase 2 of [`road-to-product-adoption.md`](../../agents/roadmaps/road-to-product-adoption.md). The autonomous roadmap pass cannot open PRs in third-party repos; this file is the handoff.
|
|
6
6
|
|
|
7
|
+
## Distribution channels — npm-primary
|
|
8
|
+
|
|
9
|
+
Per [`ADR-033`](../decisions/ADR-033-distribution-identity-npm-primary.md), the package is **npm-primary, Packagist deprecated-in-place**. Both lenses of the council deliberation (strategic / operational) converged on a single-channel posture: this is the canonical record of which registries we publish to vs. which we treat as legacy.
|
|
10
|
+
|
|
11
|
+
| Channel | Status | Canonical install | Notes |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| npm — `@event4u/agent-config` | **Primary** | `npm install @event4u/agent-config` or `npx @event4u/agent-config install` | The release pipeline (`scripts/release.py`) runs `npm publish` exclusively; `package.json` is the source of truth for the published version. |
|
|
14
|
+
| Packagist — `event4u/agent-config` | **Deprecated-in-place** | (do not install — see ADR-033) | The 1.0.4 listing is a legacy artefact from the pre-3.x repo namespace. No `composer.json` ships from this repo. Maintainer-side claim/archive action required (see below). |
|
|
15
|
+
|
|
16
|
+
### Packagist deprecation — human-owner item
|
|
17
|
+
|
|
18
|
+
The Packagist `event4u/agent-config` listing pins at 1.0.4 from a repository state that no longer exists. The autonomous pipeline cannot retire that listing — it requires a maintainer login at `packagist.org/packages/event4u/agent-config`. Two paths exist; either is acceptable per ADR-033.
|
|
19
|
+
|
|
20
|
+
- [ ] **Claim + abandoned-flag the package.** Log in at packagist.org, claim the `event4u/agent-config` namespace, set the package to `abandoned` with the replacement pointer `event4u/agent-config` on npm (or the npm package URL as a body note where Packagist's abandoned-replacement field expects a Composer-namespace value, fall back to a `description` field redirect).
|
|
21
|
+
- [ ] **OR: leave the listing as legacy + add a description-field redirect.** If claim is blocked or out of scope, edit the listing description to add a one-line `> Deprecated — install via npm: \`@event4u/agent-config\`` so any consumer who lands there sees the correct path.
|
|
22
|
+
|
|
23
|
+
This item is **owner-owned**, not autonomous; the roadmap explicitly captures it as such (`road-to-distribution-identity.md` Phase 2 Step 1). Mark the chosen path with `[x]` once executed.
|
|
24
|
+
|
|
25
|
+
### Breaking-change communication
|
|
26
|
+
|
|
27
|
+
Major-version bumps are policy-correct per [`CONTRIBUTING.md § Versioning policy`](../../CONTRIBUTING.md) (semver — installer-layout changes are major). The auto-generated `CHANGELOG.md § Breaking` section is the **single source of truth** for breaking changes; [`ADR-027`](../decisions/ADR-027-changelog-machine-vs-manual.md) locks the machine-generated path.
|
|
28
|
+
|
|
29
|
+
Consumers who see a major-version bump should follow:
|
|
30
|
+
|
|
31
|
+
1. [`CHANGELOG.md § Breaking`](../../CHANGELOG.md#breaking) — the diff between the prior and the new major. Every breaking change carries a Conventional-Commits subject prefixed `feat!:` or with a `BREAKING CHANGE:` footer.
|
|
32
|
+
2. The release-line link in the GitHub release entry for the new version (links the auto-generated changelog section).
|
|
33
|
+
|
|
34
|
+
No bespoke `BREAKING_CHANGES.md` is maintained — the changelog is the authoritative surface.
|
|
35
|
+
|
|
7
36
|
## Submission status
|
|
8
37
|
|
|
9
38
|
| # | Registry | URL | Submission shape | Status | PR link |
|
|
@@ -27,6 +27,31 @@ Every skill's YAML frontmatter MUST validate against `scripts/schemas/skill.sche
|
|
|
27
27
|
Violations are reported by `scripts/skill_linter.py` as `schema_<rule>` errors
|
|
28
28
|
and fail `python3 scripts/validate_frontmatter.py` and the full CI pipeline.
|
|
29
29
|
|
|
30
|
+
### Omit fields equal to their schema default
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
NEVER write a frontmatter field whose value equals its schema `default`.
|
|
34
|
+
OMIT IT — the loader injects the default at read time.
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
A field that carries the schema `default` (e.g. `trust.level: core`,
|
|
38
|
+
`install.default: true`, `lifecycle: active`, `source: package`,
|
|
39
|
+
`command.disable-model-invocation: true`) is redundant:
|
|
40
|
+
`validate_frontmatter.apply_schema_defaults` injects it transparently for
|
|
41
|
+
every consumer (validator, discovery manifest, drift checksum). Writing it
|
|
42
|
+
anyway is boilerplate that `scripts/lint_frontmatter_boilerplate.py` rejects
|
|
43
|
+
(wired into `task ci-fast`). To strip it across the tree, run
|
|
44
|
+
`python3 scripts/migrate_frontmatter_defaults.py`. Background:
|
|
45
|
+
`road-to-abstraction-reduction.md` +
|
|
46
|
+
`agents/evidence/analysis/abstraction-reduction-preflight.md`.
|
|
47
|
+
|
|
48
|
+
> **Changing a default is a breaking change.** The schema `default` is a
|
|
49
|
+
> contract: artefacts that omit the field inherit whatever the default *is at
|
|
50
|
+
> read time*. Flipping a default value (e.g. `lifecycle: active → deprecated`)
|
|
51
|
+
> silently re-defaults every artefact that omits the field — so a default
|
|
52
|
+
> change must pair with a re-run of `migrate_frontmatter_defaults.py` and an
|
|
53
|
+
> explicit review of the affected artefacts.
|
|
54
|
+
|
|
30
55
|
## Description Triggering
|
|
31
56
|
|
|
32
57
|
Claude routes skills by their frontmatter `description`. Pushy,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@event4u/agent-config",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.0",
|
|
4
4
|
"description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -25,7 +25,12 @@ from typing import Any, Iterable
|
|
|
25
25
|
import yaml
|
|
26
26
|
|
|
27
27
|
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
|
28
|
-
from validate_frontmatter import
|
|
28
|
+
from validate_frontmatter import ( # noqa: E402
|
|
29
|
+
_FRONTMATTER_RE,
|
|
30
|
+
apply_schema_defaults,
|
|
31
|
+
load_schema,
|
|
32
|
+
parse_frontmatter,
|
|
33
|
+
)
|
|
29
34
|
from _lib.agent_src import artefact_roots, logical_relpath, resolve_logical, strip_source_prefix # noqa: E402
|
|
30
35
|
|
|
31
36
|
ROOT = Path(__file__).resolve().parents[1]
|
|
@@ -146,11 +151,23 @@ def _trusted(path: Path) -> bool:
|
|
|
146
151
|
return any(rel.startswith(r + "/") for r in TRUST_ROOTS)
|
|
147
152
|
|
|
148
153
|
|
|
149
|
-
|
|
154
|
+
# Discovery category → frontmatter schema name. `template` has no schema and
|
|
155
|
+
# carries none of the defaulted fields, so it is left raw.
|
|
156
|
+
_CATEGORY_SCHEMA = {"skill": "skill", "rule": "rule", "command": "command"}
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def _parse(path: Path, category: str | None = None) -> dict[str, Any] | None:
|
|
150
160
|
text = path.read_text(encoding="utf-8", errors="replace")
|
|
151
161
|
fm, _ = parse_frontmatter(text)
|
|
152
162
|
if not isinstance(fm, dict):
|
|
153
163
|
return None
|
|
164
|
+
# Inject schema defaults so an artefact that omits a field equal to its
|
|
165
|
+
# default (post abstraction-reduction migration) still presents the field
|
|
166
|
+
# to the required-key checks AND the drift checksum — keeping the checksum
|
|
167
|
+
# byte-stable across the migration (preflight Decision B).
|
|
168
|
+
schema_name = _CATEGORY_SCHEMA.get(category or "")
|
|
169
|
+
if schema_name is not None:
|
|
170
|
+
apply_schema_defaults(fm, load_schema(schema_name))
|
|
154
171
|
return fm
|
|
155
172
|
|
|
156
173
|
|
|
@@ -252,7 +269,7 @@ def _build(strict: bool) -> tuple[dict[str, Any], list[dict[str, Any]]]:
|
|
|
252
269
|
if rel in overrides:
|
|
253
270
|
documented_unassigned.append({"path": rel, "category": category, "reason": overrides[rel]})
|
|
254
271
|
continue
|
|
255
|
-
fm = _parse(path)
|
|
272
|
+
fm = _parse(path, category)
|
|
256
273
|
payload, reason = _classify(fm, ws_ids, pack_ids)
|
|
257
274
|
if reason is not None:
|
|
258
275
|
unassigned.append({"path": rel, "category": category, "reason": reason})
|
|
@@ -32,15 +32,22 @@ DEFAULT_MANIFEST = ROOT / "dist" / "discovery" / "discovery-manifest.json"
|
|
|
32
32
|
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
|
33
33
|
# Import the same hashing primitive the builder uses so normalisation
|
|
34
34
|
# stays in lockstep with the generator. (ADR-015 §Phase 6.)
|
|
35
|
-
from build_discovery_manifest import _artefact_checksum # noqa: E402
|
|
36
|
-
from validate_frontmatter import parse_frontmatter # noqa: E402
|
|
35
|
+
from build_discovery_manifest import _CATEGORY_SCHEMA, _artefact_checksum # noqa: E402
|
|
36
|
+
from validate_frontmatter import apply_schema_defaults, load_schema, parse_frontmatter # noqa: E402
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
def _frontmatter(path: Path) -> dict | None:
|
|
39
|
+
def _frontmatter(path: Path, category: str | None = None) -> dict | None:
|
|
40
40
|
if not path.exists():
|
|
41
41
|
return None
|
|
42
42
|
text = path.read_text(encoding="utf-8", errors="replace")
|
|
43
43
|
fm, _ = parse_frontmatter(text)
|
|
44
|
+
# Inject the same schema defaults the builder injects, so the recomputed
|
|
45
|
+
# checksum matches the committed manifest byte-for-byte even when the
|
|
46
|
+
# artefact omits a defaulted field (preflight Decision B).
|
|
47
|
+
if isinstance(fm, dict):
|
|
48
|
+
schema_name = _CATEGORY_SCHEMA.get(category or "")
|
|
49
|
+
if schema_name is not None:
|
|
50
|
+
apply_schema_defaults(fm, load_schema(schema_name))
|
|
44
51
|
return fm
|
|
45
52
|
|
|
46
53
|
|
|
@@ -64,7 +71,7 @@ def _check(manifest_path: Path) -> tuple[int, list[str]]:
|
|
|
64
71
|
if not src.exists():
|
|
65
72
|
errors.append(f"{rel}: source file missing")
|
|
66
73
|
continue
|
|
67
|
-
actual = _artefact_checksum(src, _frontmatter(src))
|
|
74
|
+
actual = _artefact_checksum(src, _frontmatter(src, art.get("category")))
|
|
68
75
|
if actual != recorded:
|
|
69
76
|
errors.append(
|
|
70
77
|
f"{rel}: checksum drift "
|
package/scripts/condense.py
CHANGED
|
@@ -574,7 +574,12 @@ def _parse_trust_and_owner(fm_lines):
|
|
|
574
574
|
prefix (`finance-basic` → `finance`), then the first workspace,
|
|
575
575
|
then `unknown`.
|
|
576
576
|
"""
|
|
577
|
-
|
|
577
|
+
# Default to the schema default `core` so the HUMAN REVIEW banner still
|
|
578
|
+
# renders if a future artefact sets `human_review_required: true` while
|
|
579
|
+
# omitting the (defaulted) `trust.level` line (abstraction-reduction
|
|
580
|
+
# preflight Decision D). The banner only fires when `hrr` is true, so this
|
|
581
|
+
# never affects artefacts that omit the whole trust block.
|
|
582
|
+
level = "core"
|
|
578
583
|
hrr = False
|
|
579
584
|
packs: list[str] = []
|
|
580
585
|
workspaces: list[str] = []
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Reject commit subjects that would leak into the auto-generated changelog.
|
|
3
|
+
|
|
4
|
+
`scripts/release.py` reads commit subjects verbatim from
|
|
5
|
+
`<prev-tag>..HEAD` and writes them into `CHANGELOG.md` sections (notably
|
|
6
|
+
`### Breaking`). A sloppy subject — `wip`, `commit leftovers`, `fixup`,
|
|
7
|
+
short typos — becomes a sloppy public changelog line. Per
|
|
8
|
+
[ADR-033](../docs/decisions/ADR-033-distribution-identity-npm-primary.md)
|
|
9
|
+
and Phase 3 of `road-to-distribution-identity.md` this lint is the
|
|
10
|
+
CI-enforced gate that closes that surface.
|
|
11
|
+
|
|
12
|
+
Rules (PRO commit, range `<base>..<head>`):
|
|
13
|
+
|
|
14
|
+
- Subject length **after** stripping the Conventional-Commits type-prefix
|
|
15
|
+
(`feat:` / `fix(scope):` / `chore!:` / …) must be ≥ 10 characters.
|
|
16
|
+
- Subject must not contain blocklist words as whole tokens:
|
|
17
|
+
`leftover` / `leftovers` / `wip` / `temp` / `tmp` / `fixup`.
|
|
18
|
+
Case-insensitive; matched on word boundaries so legitimate uses like
|
|
19
|
+
`template` or `temporary` (rare) survive — the linter targets the
|
|
20
|
+
short hand-wave forms reviewers see in feedback rounds.
|
|
21
|
+
|
|
22
|
+
Carve-outs:
|
|
23
|
+
|
|
24
|
+
- Merge commits (`Merge pull request …`, `Merge branch …`) are skipped —
|
|
25
|
+
they are GitHub-generated and not consumer-visible in the changelog.
|
|
26
|
+
- Revert commits (`Revert "…"`) are skipped — they ride the original
|
|
27
|
+
subject's discipline.
|
|
28
|
+
|
|
29
|
+
Local invocation defaults to `origin/main..HEAD` (the "what I am about
|
|
30
|
+
to push" range). CI sets `--base $GITHUB_BASE_REF --head $GITHUB_SHA`.
|
|
31
|
+
|
|
32
|
+
Cap: ≤ 150 LOC, stdlib only. Hooked into `task ci` via
|
|
33
|
+
`task lint-commit-subjects`.
|
|
34
|
+
"""
|
|
35
|
+
from __future__ import annotations
|
|
36
|
+
|
|
37
|
+
import argparse
|
|
38
|
+
import re
|
|
39
|
+
import subprocess
|
|
40
|
+
import sys
|
|
41
|
+
|
|
42
|
+
BLOCKLIST = frozenset({"leftover", "leftovers", "wip", "temp", "tmp", "fixup"})
|
|
43
|
+
MIN_SUBJECT_LEN = 10
|
|
44
|
+
|
|
45
|
+
# Conventional Commits prefix — `type(scope)!?: message`. Matches the
|
|
46
|
+
# heads our `scripts/release.py` and CHANGELOG section logic respect.
|
|
47
|
+
CONVENTIONAL_PREFIX = re.compile(
|
|
48
|
+
r"^(feat|fix|chore|docs|refactor|test|perf|style|build|ci|revert)"
|
|
49
|
+
r"(\([^)]+\))?!?:\s+",
|
|
50
|
+
re.IGNORECASE,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# Skip lines — GitHub-generated merge subjects and revert commits.
|
|
54
|
+
SKIP_PREFIXES = ("Merge pull request", "Merge branch", "Merge remote-tracking",
|
|
55
|
+
'Revert "')
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def fetch_subjects(base: str, head: str) -> list[str]:
|
|
59
|
+
"""Return one commit subject per element. Empty on no-range / no-commits."""
|
|
60
|
+
try:
|
|
61
|
+
result = subprocess.run(
|
|
62
|
+
["git", "log", f"{base}..{head}", "--format=%s", "--no-merges"],
|
|
63
|
+
capture_output=True, text=True, check=True,
|
|
64
|
+
)
|
|
65
|
+
except subprocess.CalledProcessError as exc:
|
|
66
|
+
# CI without a proper base ref (force-push, first commit, weird state).
|
|
67
|
+
# Lint is advisory in that case — never block on git plumbing failures.
|
|
68
|
+
print(f"⚠️ git log {base}..{head} failed: {exc.stderr.strip()}",
|
|
69
|
+
file=sys.stderr)
|
|
70
|
+
return []
|
|
71
|
+
return [line.strip() for line in result.stdout.splitlines() if line.strip()]
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def check_subject(subject: str) -> list[str]:
|
|
75
|
+
"""Return list of issue strings for the subject; empty = clean."""
|
|
76
|
+
if any(subject.startswith(p) for p in SKIP_PREFIXES):
|
|
77
|
+
return []
|
|
78
|
+
issues: list[str] = []
|
|
79
|
+
body = CONVENTIONAL_PREFIX.sub("", subject, count=1)
|
|
80
|
+
if len(body) < MIN_SUBJECT_LEN:
|
|
81
|
+
issues.append(
|
|
82
|
+
f"subject body < {MIN_SUBJECT_LEN} chars after Conventional-Commits "
|
|
83
|
+
f"prefix: {subject!r}"
|
|
84
|
+
)
|
|
85
|
+
tokens = {t.lower() for t in re.findall(r"[A-Za-z]+", body)}
|
|
86
|
+
hits = sorted(tokens & BLOCKLIST)
|
|
87
|
+
if hits:
|
|
88
|
+
issues.append(
|
|
89
|
+
f"blocklist token(s) {hits} in subject: {subject!r}"
|
|
90
|
+
)
|
|
91
|
+
return issues
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def main() -> int:
|
|
95
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
96
|
+
parser.add_argument("--base", default="origin/main",
|
|
97
|
+
help="base ref (default: origin/main)")
|
|
98
|
+
parser.add_argument("--head", default="HEAD",
|
|
99
|
+
help="head ref (default: HEAD)")
|
|
100
|
+
parser.add_argument("--quiet", action="store_true",
|
|
101
|
+
help="suppress the clean-pass success line")
|
|
102
|
+
args = parser.parse_args()
|
|
103
|
+
|
|
104
|
+
subjects = fetch_subjects(args.base, args.head)
|
|
105
|
+
if not subjects:
|
|
106
|
+
if not args.quiet:
|
|
107
|
+
print(f"✅ No commit subjects to check in "
|
|
108
|
+
f"{args.base}..{args.head}.")
|
|
109
|
+
return 0
|
|
110
|
+
|
|
111
|
+
failures: list[tuple[str, str]] = []
|
|
112
|
+
for subj in subjects:
|
|
113
|
+
for issue in check_subject(subj):
|
|
114
|
+
failures.append((subj, issue))
|
|
115
|
+
|
|
116
|
+
if failures:
|
|
117
|
+
print(f"❌ {len(failures)} commit-subject issue(s) in "
|
|
118
|
+
f"{args.base}..{args.head}:", file=sys.stderr)
|
|
119
|
+
for _, issue in failures:
|
|
120
|
+
print(f" - {issue}", file=sys.stderr)
|
|
121
|
+
print(
|
|
122
|
+
"\nThese subjects feed the auto-generated CHANGELOG.md via "
|
|
123
|
+
"scripts/release.py — sloppy subjects become sloppy public "
|
|
124
|
+
"changelog lines. Per ADR-033 + "
|
|
125
|
+
"agents/roadmaps/road-to-distribution-identity.md § Phase 3.\n"
|
|
126
|
+
"Fix: rewrite the offending commits (e.g. `git rebase -i "
|
|
127
|
+
f"{args.base}` and `r`eword) with descriptive subjects, "
|
|
128
|
+
"then re-push.",
|
|
129
|
+
file=sys.stderr,
|
|
130
|
+
)
|
|
131
|
+
return 1
|
|
132
|
+
|
|
133
|
+
if not args.quiet:
|
|
134
|
+
print(f"✅ {len(subjects)} commit subject(s) clean.")
|
|
135
|
+
return 0
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
if __name__ == "__main__":
|
|
139
|
+
raise SystemExit(main())
|