@event4u/agent-config 1.15.0 → 1.17.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/{agents-audit.md → agents/audit.md} +4 -3
- package/.agent-src/commands/{agents-cleanup.md → agents/cleanup.md} +12 -6
- package/.agent-src/commands/{agents-prepare.md → agents/prepare.md} +4 -3
- package/.agent-src/commands/agents.md +46 -0
- package/.agent-src/commands/bug-fix.md +1 -1
- package/.agent-src/commands/bug-investigate.md +2 -2
- package/.agent-src/commands/{chat-history-checkpoint.md → chat-history/checkpoint.md} +5 -5
- package/.agent-src/commands/{chat-history-clear.md → chat-history/clear.md} +5 -5
- package/.agent-src/commands/{chat-history-resume.md → chat-history/resume.md} +4 -4
- package/.agent-src/commands/chat-history/show.md +107 -0
- package/.agent-src/commands/chat-history.md +33 -89
- package/.agent-src/commands/check-current-md.md +1 -1
- package/.agent-src/commands/{commit-in-chunks.md → commit/in-chunks.md} +15 -13
- package/.agent-src/commands/commit.md +22 -2
- package/.agent-src/commands/{context-create.md → context/create.md} +4 -3
- package/.agent-src/commands/{context-refactor.md → context/refactor.md} +4 -3
- package/.agent-src/commands/context.md +44 -0
- package/.agent-src/commands/{copilot-agents-init.md → copilot-agents/init.md} +4 -3
- package/.agent-src/commands/{copilot-agents-optimize.md → copilot-agents/optimize.md} +4 -3
- package/.agent-src/commands/copilot-agents.md +44 -0
- package/.agent-src/commands/council/default.md +221 -0
- package/.agent-src/commands/council/design.md +97 -0
- package/.agent-src/commands/council/optimize.md +116 -0
- package/.agent-src/commands/council/pr.md +124 -0
- package/.agent-src/commands/council.md +54 -0
- package/.agent-src/commands/{create-pr-description.md → create-pr/description-only.md} +4 -2
- package/.agent-src/commands/create-pr.md +49 -5
- package/.agent-src/commands/e2e-heal.md +1 -1
- package/.agent-src/commands/e2e-plan.md +1 -1
- package/.agent-src/commands/{feature-dev.md → feature/dev.md} +6 -3
- package/.agent-src/commands/{feature-explore.md → feature/explore.md} +5 -4
- package/.agent-src/commands/{feature-plan.md → feature/plan.md} +32 -5
- package/.agent-src/commands/{feature-refactor.md → feature/refactor.md} +4 -3
- package/.agent-src/commands/{feature-roadmap.md → feature/roadmap.md} +7 -6
- package/.agent-src/commands/feature.md +52 -0
- package/.agent-src/commands/{fix-ci.md → fix/ci.md} +4 -3
- package/.agent-src/commands/{fix-portability.md → fix/portability.md} +4 -3
- package/.agent-src/commands/{fix-pr-bot-comments.md → fix/pr-bots.md} +4 -3
- package/.agent-src/commands/{fix-pr-developer-comments.md → fix/pr-developers.md} +4 -3
- package/.agent-src/commands/{fix-pr-comments.md → fix/pr.md} +7 -6
- package/.agent-src/commands/{fix-references.md → fix/refs.md} +4 -3
- package/.agent-src/commands/{fix-seeder.md → fix/seeder.md} +4 -3
- package/.agent-src/commands/fix.md +54 -0
- package/.agent-src/commands/jira-ticket.md +1 -1
- package/.agent-src/commands/{do-and-judge.md → judge/on-diff.md} +7 -6
- package/.agent-src/commands/judge/solo.md +90 -0
- package/.agent-src/commands/{do-in-steps.md → judge/steps.md} +8 -7
- package/.agent-src/commands/judge.md +35 -70
- package/.agent-src/commands/{memory-add.md → memory/add.md} +7 -6
- package/.agent-src/commands/{memory-full.md → memory/load.md} +6 -5
- package/.agent-src/commands/{memory-promote.md → memory/promote.md} +6 -5
- package/.agent-src/commands/{propose-memory.md → memory/propose.md} +6 -5
- package/.agent-src/commands/memory.md +48 -0
- package/.agent-src/commands/mode.md +5 -5
- package/.agent-src/commands/{module-create.md → module/create.md} +4 -3
- package/.agent-src/commands/{module-explore.md → module/explore.md} +4 -3
- package/.agent-src/commands/module.md +44 -0
- package/.agent-src/commands/onboard.md +3 -3
- package/.agent-src/commands/{optimize-agents.md → optimize/agents.md} +5 -4
- package/.agent-src/commands/{optimize-augmentignore.md → optimize/augmentignore.md} +4 -4
- package/.agent-src/commands/{optimize-rtk-filters.md → optimize/rtk.md} +4 -3
- package/.agent-src/commands/{optimize-skills.md → optimize/skills.md} +5 -4
- package/.agent-src/commands/optimize.md +48 -0
- package/.agent-src/commands/{override-create.md → override/create.md} +4 -3
- package/.agent-src/commands/{override-manage.md → override/manage.md} +4 -3
- package/.agent-src/commands/override.md +44 -0
- package/.agent-src/commands/review-changes.md +26 -1
- package/.agent-src/commands/review-routing.md +1 -1
- package/.agent-src/commands/{roadmap-create.md → roadmap/create.md} +33 -5
- package/.agent-src/commands/{roadmap-execute.md → roadmap/execute.md} +4 -3
- package/.agent-src/commands/roadmap.md +44 -0
- package/.agent-src/commands/set-cost-profile.md +3 -3
- package/.agent-src/commands/sync-agent-settings.md +2 -2
- package/.agent-src/commands/{tests-create.md → tests/create.md} +5 -4
- package/.agent-src/commands/{tests-execute.md → tests/execute.md} +4 -3
- package/.agent-src/commands/tests.md +44 -0
- package/.agent-src/commands/upstream-contribute.md +1 -1
- package/.agent-src/contexts/authority/commit-mechanics.md +57 -0
- package/.agent-src/contexts/authority/destructive-mechanics.md +66 -0
- package/.agent-src/contexts/authority/scope-mechanics.md +87 -0
- package/.agent-src/contexts/communication/rules-auto/artifact-engagement-recording-mechanics.md +72 -0
- package/.agent-src/contexts/communication/rules-auto/augment-portability-mechanics.md +79 -0
- package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +98 -0
- package/.agent-src/contexts/communication/rules-auto/cli-output-handling-mechanics.md +87 -0
- package/.agent-src/contexts/communication/rules-auto/command-suggestion-policy-mechanics.md +62 -0
- package/.agent-src/contexts/communication/rules-auto/docs-sync-mechanics.md +78 -0
- package/.agent-src/contexts/communication/rules-auto/package-ci-checks-mechanics.md +85 -0
- package/.agent-src/contexts/communication/rules-auto/review-routing-awareness-mechanics.md +65 -0
- package/.agent-src/contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md +78 -0
- package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +62 -0
- package/.agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +55 -0
- package/.agent-src/contexts/communication/rules-auto/ui-audit-gate-mechanics.md +53 -0
- package/.agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +77 -0
- package/.agent-src/contexts/execution/autonomy-detection.md +54 -0
- package/.agent-src/contexts/execution/autonomy-examples.md +90 -0
- package/.agent-src/contexts/execution/autonomy-mechanics.md +29 -0
- package/.agent-src/contexts/execution/verification-mechanics.md +80 -0
- package/.agent-src/contexts/judges/no-consolidate-rationale.md +102 -0
- package/.agent-src/contexts/judges/persona-voice-rubric.md +140 -0
- package/.agent-src/personas/README.md +1 -1
- package/.agent-src/rules/agent-authority.md +24 -0
- package/.agent-src/rules/architecture.md +1 -1
- package/.agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/.agent-src/rules/artifact-engagement-recording.md +14 -70
- package/.agent-src/rules/ask-when-uncertain.md +28 -43
- package/.agent-src/rules/augment-portability.md +15 -61
- package/.agent-src/rules/augment-source-of-truth.md +27 -93
- package/.agent-src/rules/autonomous-execution.md +78 -114
- package/.agent-src/rules/capture-learnings.md +1 -1
- package/.agent-src/rules/chat-history-cadence.md +3 -3
- package/.agent-src/rules/chat-history-ownership.md +3 -3
- package/.agent-src/rules/chat-history-visibility.md +3 -3
- package/.agent-src/rules/cli-output-handling.md +10 -76
- package/.agent-src/rules/command-suggestion-policy.md +93 -0
- package/.agent-src/rules/commit-conventions.md +17 -14
- package/.agent-src/rules/commit-policy.md +14 -42
- package/.agent-src/rules/context-hygiene.md +3 -3
- package/.agent-src/rules/direct-answers.md +34 -49
- package/.agent-src/rules/docker-commands.md +5 -5
- package/.agent-src/rules/docs-sync.md +16 -70
- package/.agent-src/rules/e2e-testing.md +1 -1
- package/.agent-src/rules/guidelines.md +4 -4
- package/.agent-src/rules/improve-before-implement.md +2 -2
- package/.agent-src/rules/language-and-tone.md +50 -133
- package/.agent-src/rules/minimal-safe-diff.md +3 -3
- package/.agent-src/rules/missing-tool-handling.md +28 -22
- package/.agent-src/rules/model-recommendation.md +4 -4
- package/.agent-src/rules/no-cheap-questions.md +82 -0
- package/.agent-src/rules/no-roadmap-references.md +73 -0
- package/.agent-src/rules/non-destructive-by-default.md +15 -49
- package/.agent-src/rules/onboarding-gate.md +5 -5
- package/.agent-src/rules/package-ci-checks.md +21 -61
- package/.agent-src/rules/preservation-guard.md +64 -29
- package/.agent-src/rules/review-routing-awareness.md +26 -45
- package/.agent-src/rules/roadmap-progress-sync.md +28 -96
- package/.agent-src/rules/role-mode-adherence.md +2 -2
- package/.agent-src/rules/scope-control.md +65 -46
- package/.agent-src/rules/security-sensitive-stop.md +9 -9
- package/.agent-src/rules/size-enforcement.md +1 -1
- package/.agent-src/rules/skill-quality.md +16 -48
- package/.agent-src/rules/{slash-commands.md → slash-command-routing-policy.md} +7 -4
- package/.agent-src/rules/think-before-action.md +55 -45
- package/.agent-src/rules/token-efficiency.md +4 -4
- package/.agent-src/rules/tool-safety.md +19 -16
- package/.agent-src/rules/{ui-audit-before-build.md → ui-audit-gate.md} +27 -41
- package/.agent-src/rules/user-interaction.md +16 -71
- package/.agent-src/rules/verify-before-complete.md +12 -67
- package/.agent-src/scripts/update_roadmap_progress.py +9 -4
- package/.agent-src/skills/ai-council/SKILL.md +335 -0
- package/.agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/.agent-src/skills/api-testing/SKILL.md +1 -1
- package/.agent-src/skills/blade-ui/SKILL.md +1 -1
- package/.agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
- package/.agent-src/skills/bug-analyzer/SKILL.md +1 -1
- package/.agent-src/skills/check-refs/SKILL.md +59 -40
- package/.agent-src/skills/command-routing/SKILL.md +1 -1
- package/.agent-src/skills/command-writing/SKILL.md +1 -1
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +86 -28
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +7 -7
- package/.agent-src/skills/developer-like-execution/SKILL.md +6 -6
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +101 -65
- package/.agent-src/skills/flux/SKILL.md +31 -11
- package/.agent-src/skills/git-workflow/SKILL.md +1 -1
- package/.agent-src/skills/github-ci/SKILL.md +2 -2
- package/.agent-src/skills/guideline-writing/SKILL.md +11 -11
- package/.agent-src/skills/judge-code-quality/SKILL.md +7 -8
- package/.agent-src/skills/judge-security-auditor/SKILL.md +4 -5
- package/.agent-src/skills/judge-test-coverage/SKILL.md +3 -4
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +4 -4
- package/.agent-src/skills/lint-skills/SKILL.md +57 -39
- package/.agent-src/skills/livewire/SKILL.md +1 -1
- package/.agent-src/skills/md-language-check/SKILL.md +61 -39
- package/.agent-src/skills/override-management/SKILL.md +7 -7
- package/.agent-src/skills/php-coder/SKILL.md +1 -1
- package/.agent-src/skills/playwright-testing/SKILL.md +2 -2
- package/.agent-src/skills/quality-tools/SKILL.md +2 -2
- package/.agent-src/skills/react-shadcn-ui/SKILL.md +116 -43
- package/.agent-src/skills/readme-reviewer/SKILL.md +31 -30
- package/.agent-src/skills/readme-writing/SKILL.md +79 -54
- package/.agent-src/skills/readme-writing-package/SKILL.md +51 -48
- package/.agent-src/skills/receiving-code-review/SKILL.md +53 -48
- package/.agent-src/skills/refine-prompt/SKILL.md +0 -1
- package/.agent-src/skills/requesting-code-review/SKILL.md +35 -30
- package/.agent-src/skills/review-routing/SKILL.md +2 -2
- package/.agent-src/skills/rule-writing/SKILL.md +1 -1
- package/.agent-src/skills/security/SKILL.md +7 -2
- package/.agent-src/skills/security-audit/SKILL.md +7 -3
- package/.agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/.agent-src/skills/skill-writing/SKILL.md +3 -3
- package/.agent-src/skills/subagent-orchestration/SKILL.md +1 -0
- package/.agent-src/skills/systematic-debugging/SKILL.md +69 -61
- package/.agent-src/skills/test-driven-development/SKILL.md +59 -57
- package/.agent-src/skills/test-performance/SKILL.md +0 -1
- package/.agent-src/skills/traefik/SKILL.md +4 -4
- package/.agent-src/skills/upstream-contribute/SKILL.md +1 -1
- package/.agent-src/skills/validate-feature-fit/SKILL.md +2 -2
- package/.agent-src/skills/{verify-before-complete → verify-completion-evidence}/SKILL.md +30 -28
- package/.agent-src/templates/agent-settings.md +8 -8
- package/.agent-src/templates/contexts/auth-model.md +1 -1
- package/.agent-src/templates/scripts/README.md +2 -2
- package/.agent-src/templates/scripts/telemetry/aggregator.py +16 -1
- package/.agent-src/templates/scripts/telemetry/engagement.py +59 -0
- package/.agent-src/templates/scripts/telemetry/report_renderer.py +28 -1
- package/.agent-src/templates/scripts/telemetry_record.py +14 -1
- package/.claude-plugin/marketplace.json +31 -12
- package/AGENTS.md +11 -9
- package/CHANGELOG.md +213 -2
- package/README.md +43 -44
- package/config/agent-settings.template.yml +58 -1
- package/config/gitignore-block.txt +3 -0
- package/docs/architecture.md +5 -7
- package/docs/catalog.md +359 -0
- package/docs/contracts/STABILITY.md +46 -1
- package/docs/contracts/adr-chat-history-split.md +1 -3
- package/docs/contracts/adr-command-suggestion.md +3 -5
- package/docs/contracts/adr-implement-ticket-runtime.md +1 -2
- package/docs/contracts/adr-product-ui-track.md +5 -8
- package/docs/contracts/adr-prompt-driven-execution.md +3 -4
- package/docs/contracts/agent-memory-contract.md +8 -13
- package/docs/contracts/artifact-engagement-flow.md +7 -10
- package/docs/contracts/command-clusters.md +56 -46
- package/docs/contracts/command-suggestion-flow.md +4 -6
- package/docs/contracts/context-paths.md +99 -0
- package/docs/contracts/file-ownership-matrix.json +6722 -0
- package/docs/contracts/file-ownership-matrix.md +134 -0
- package/docs/contracts/implement-ticket-flow.md +8 -11
- package/docs/contracts/linear-ai-rules-inclusion.md +1 -2
- package/docs/contracts/linear-ai-three-layers.md +0 -2
- package/docs/contracts/load-context-budget-model.md +178 -0
- package/docs/contracts/load-context-schema.md +184 -0
- package/docs/contracts/rule-interactions.md +0 -1
- package/docs/contracts/rule-interactions.yml +96 -0
- package/docs/contracts/rule-priority-hierarchy.md +87 -0
- package/docs/contracts/ui-track-flow.md +8 -18
- package/docs/customization.md +16 -0
- package/docs/end-to-end-walkthroughs.md +165 -0
- package/docs/getting-started.md +29 -10
- package/docs/github-topics.md +12 -3
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +100 -0
- package/docs/guidelines/agent-infra/language-and-tone-examples.md +79 -0
- package/{.agent-src → docs}/guidelines/docs/readme-size-and-splitting.md +26 -25
- package/docs/guidelines/php/git.md +164 -0
- package/docs/migrations/commands-1.15.0.md +1 -1
- package/docs/showcase.md +9 -4
- package/docs/skills-catalog.md +14 -8
- package/docs/ui-track-mental-model.md +2 -2
- package/llms.txt +13 -7
- package/package.json +1 -1
- package/scripts/_one_off_phase4_dispatch_latency.py +108 -0
- package/scripts/_one_off_phase6_trigger_jaccard.py +92 -0
- package/scripts/_phase2_shim_helper.py +109 -0
- package/scripts/agent-config +33 -0
- package/scripts/ai_council/__init__.py +39 -0
- package/scripts/ai_council/_default_prices.py +41 -0
- package/scripts/ai_council/_one_off_2a4_acceptance.py +208 -0
- package/scripts/ai_council/_one_off_context_layer_v1_estimate.py +67 -0
- package/scripts/ai_council/_one_off_context_layer_v1_review.py +292 -0
- package/scripts/ai_council/_one_off_followups_review.py +259 -0
- package/scripts/ai_council/_one_off_nondestructive_inline_audit.py +209 -0
- package/scripts/ai_council/_one_off_phase_2a_budget_rebalance.py +257 -0
- package/scripts/ai_council/_one_off_phase_2a_post_revert.py +197 -0
- package/scripts/ai_council/_one_off_rebalancing_audit.py +149 -0
- package/scripts/ai_council/_one_off_roundtrip.py +106 -0
- package/scripts/ai_council/_one_off_rule_hardening_v1.py +251 -0
- package/scripts/ai_council/_one_off_structural_open_questions.py +232 -0
- package/scripts/ai_council/_one_off_structural_optimization.py +144 -0
- package/scripts/ai_council/_one_off_structural_v3_gaps.py +252 -0
- package/scripts/ai_council/_one_off_structural_v3_review.py +240 -0
- package/scripts/ai_council/budget_guard.py +172 -0
- package/scripts/ai_council/bundler.py +261 -0
- package/scripts/ai_council/clients.py +381 -0
- package/scripts/ai_council/modes.py +127 -0
- package/scripts/ai_council/orchestrator.py +350 -0
- package/scripts/ai_council/pricing.py +213 -0
- package/scripts/ai_council/project_context.py +159 -0
- package/scripts/ai_council/prompts.py +232 -0
- package/scripts/ai_council/session.py +144 -0
- package/scripts/check_always_budget.py +444 -0
- package/scripts/check_augmentignore.py +69 -0
- package/scripts/check_cluster_patterns.py +159 -0
- package/scripts/check_command_count_messaging.py +127 -0
- package/scripts/check_context_paths.py +201 -0
- package/scripts/check_no_roadmap_refs.py +155 -0
- package/scripts/check_phase_coupling.py +148 -0
- package/scripts/check_portability.py +57 -0
- package/scripts/check_public_catalog_links.py +122 -0
- package/scripts/check_references.py +33 -3
- package/scripts/check_roadmap_trackable.py +111 -0
- package/scripts/check_safety_floor_untouched.py +125 -0
- package/scripts/command_suggester/cooldown.py +1 -1
- package/scripts/command_suggester/loader.py +4 -1
- package/scripts/compress.py +59 -13
- package/scripts/generate_index.py +270 -0
- package/scripts/generate_ownership_matrix.py +323 -0
- package/scripts/hooks/augment-roadmap-progress.sh +57 -0
- package/scripts/install.py +49 -28
- package/scripts/install_anthropic_key.sh +5 -0
- package/scripts/install_openai_key.sh +106 -0
- package/scripts/lint_load_context.py +163 -0
- package/scripts/lint_no_new_atomic_commands.py +12 -11
- package/scripts/requirements-evals.txt +1 -0
- package/scripts/roadmap_progress_hook.py +159 -0
- package/scripts/schemas/command.schema.json +22 -1
- package/scripts/schemas/rule.schema.json +10 -0
- package/scripts/skill_linter.py +13 -4
- package/scripts/sync_agent_settings.py +26 -3
- package/scripts/update_counts.py +16 -4
- package/scripts/update_prices.py +124 -0
- package/.agent-src/guidelines/php/git.md +0 -96
- package/.agent-src/rules/command-suggestion.md +0 -134
- /package/{.agent-src → docs}/guidelines/agent-infra/agent-interaction-and-decision-quality.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/break-glass-usage.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/developer-judgment.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/engineering-memory-data-format.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/layered-settings.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/memory-access.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/naming.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/output-patterns.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/review-routing-data-format.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/role-contracts.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/role-mode-router.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/runtime-layer.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/self-improvement-pipeline.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/size-and-scope.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/tool-integration.md +0 -0
- /package/{.agent-src → docs}/guidelines/e2e/playwright.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/api-design.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/artisan-commands.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/blade-ui.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/controllers.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/database.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/eloquent.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/flux.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/general.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/jobs.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/livewire.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/logging.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/naming.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/dependency-injection.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/dtos.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/events.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/factory.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/pipelines.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/policies.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/repositories.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/service-layer.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/strategy.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/performance.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/resources.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/security.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/sql.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/validations.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/websocket.md +0 -0
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: verify-
|
|
2
|
+
name: verify-completion-evidence
|
|
3
3
|
description: "Use when claiming 'done', suggesting a commit, push, or PR — runs the evidence gate so completion claims come from fresh output in this message, not memory or earlier runs."
|
|
4
4
|
source: package
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# verify-
|
|
7
|
+
# verify-completion-evidence
|
|
8
8
|
|
|
9
9
|
## When to use
|
|
10
10
|
|
|
11
11
|
* Just before claiming a task, feature, fix, or refactor is complete
|
|
12
12
|
* Just before proposing `/commit`, `/create-pr`, or pushing
|
|
13
13
|
* Before answering "is it ready?", "can I merge?", "does it work?"
|
|
14
|
-
* After a sequence of edits, when next step
|
|
15
|
-
* Whenever "should work", "looks good", "probably fine" is
|
|
16
|
-
appear in a reply
|
|
14
|
+
* After a sequence of edits, when next step would be reporting to the user
|
|
15
|
+
* Whenever the wording "should work", "looks good", "probably fine" is
|
|
16
|
+
about to appear in a reply
|
|
17
17
|
|
|
18
18
|
Do NOT use when:
|
|
19
19
|
|
|
@@ -40,11 +40,11 @@ runs are stale the moment another edit lands.
|
|
|
40
40
|
|
|
41
41
|
### 1. Identify the claim you are about to make
|
|
42
42
|
|
|
43
|
-
Examples: *"all tests pass"*, *"ready for PR"*, *"refactor
|
|
44
|
-
*"bug is fixed"*.
|
|
43
|
+
Examples: *"all tests pass"*, *"this is ready for PR"*, *"the refactor
|
|
44
|
+
is done"*, *"the bug is fixed"*.
|
|
45
45
|
|
|
46
|
-
Each claim maps to a specific verification command. Write the
|
|
47
|
-
before running anything:
|
|
46
|
+
Each claim maps to a specific verification command. Write down the
|
|
47
|
+
mapping before running anything:
|
|
48
48
|
|
|
49
49
|
| Claim | Evidence command |
|
|
50
50
|
|---|---|
|
|
@@ -58,11 +58,11 @@ before running anything:
|
|
|
58
58
|
|
|
59
59
|
### 2. Run the command fresh
|
|
60
60
|
|
|
61
|
-
* Run against current working tree, not a cached summary.
|
|
62
|
-
* PHP projects inside Docker: run inside the container (see
|
|
61
|
+
* Run against the current working tree, not a cached summary.
|
|
62
|
+
* For PHP projects inside Docker: run inside the container (see
|
|
63
63
|
[`docker`](../docker/SKILL.md) and [`tests-execute`](../tests-execute/SKILL.md)).
|
|
64
64
|
* Use targeted runs during iteration (`--filter=`, `--testNamePattern`).
|
|
65
|
-
Run full suite only in the final verification pass.
|
|
65
|
+
Run the full suite only in the final verification pass.
|
|
66
66
|
|
|
67
67
|
### 3. Read the full output
|
|
68
68
|
|
|
@@ -87,20 +87,20 @@ errors on `app/Services/`."* — not *"everything looks good"*.
|
|
|
87
87
|
|
|
88
88
|
## The end-of-work sequence (PHP projects)
|
|
89
89
|
|
|
90
|
-
When all code changes are done and ready to report completion:
|
|
90
|
+
When all code changes are done and you are ready to report completion:
|
|
91
91
|
|
|
92
|
-
1. **Targeted tests** — test(s) covering the changed code pass
|
|
92
|
+
1. **Targeted tests** — the test(s) covering the changed code pass
|
|
93
93
|
2. **Full test suite** — only after targeted pass is green
|
|
94
94
|
3. **PHPStan** → **Rector --dry-run** → **ECS** → **PHPStan** (second pass
|
|
95
|
-
catches issues Rector / ECS introduced)
|
|
95
|
+
catches issues Rector / ECS may have introduced)
|
|
96
96
|
4. Fix any output from steps 1–3 and restart the sequence
|
|
97
97
|
5. Only then: claim completion or suggest `/commit`, push, or PR
|
|
98
98
|
|
|
99
|
-
Do not run the full quality pipeline between intermediate edits —
|
|
100
|
-
time and tokens. Use it once, at the end.
|
|
99
|
+
Do not run the full quality pipeline between intermediate edits — it
|
|
100
|
+
burns time and tokens. Use it once, at the end.
|
|
101
101
|
|
|
102
|
-
See [`quality-tools`](../quality-tools/SKILL.md) for exact commands
|
|
103
|
-
tool.
|
|
102
|
+
See [`quality-tools`](../quality-tools/SKILL.md) for the exact commands
|
|
103
|
+
per tool.
|
|
104
104
|
|
|
105
105
|
## Minimum evidence per task type
|
|
106
106
|
|
|
@@ -124,7 +124,7 @@ is sound", "compiles" (unless compilation itself is the contract).
|
|
|
124
124
|
When reporting completion to the user:
|
|
125
125
|
|
|
126
126
|
1. **What was changed** — one line summary per changed file / component
|
|
127
|
-
2. **Verification run** — exact command and its exit code
|
|
127
|
+
2. **Verification run** — the exact command and its exit code
|
|
128
128
|
3. **Result** — numeric breakdown (tests passed/failed/skipped, errors,
|
|
129
129
|
warnings)
|
|
130
130
|
4. **Caveats** — anything the output flagged but you chose to accept
|
|
@@ -132,14 +132,16 @@ When reporting completion to the user:
|
|
|
132
132
|
|
|
133
133
|
## Gotchas
|
|
134
134
|
|
|
135
|
-
* "
|
|
136
|
-
analyzed-file count.
|
|
135
|
+
* A "no output" result from a linter is not proof it ran — check the
|
|
136
|
+
exit code and the analyzed-file count.
|
|
137
137
|
* Silencing a warning with `@phpstan-ignore-next-line` or `// @ts-expect-error`
|
|
138
138
|
without a reason code passes the linter but defers the real problem.
|
|
139
|
-
* Running tests with `--stop-on-failure` then reporting "passed" —
|
|
140
|
-
ran until the first failure; the green streak after is
|
|
139
|
+
* Running tests with `--stop-on-failure` then reporting "passed" — it
|
|
140
|
+
only ran until the first failure; the green streak after it is
|
|
141
|
+
unexamined.
|
|
141
142
|
* Cached static-analysis results (`--cache` directories) can report
|
|
142
|
-
clean after you
|
|
143
|
+
clean after you have broken something; clear the cache when the
|
|
144
|
+
change is large.
|
|
143
145
|
* Running the test suite on the wrong branch (forgot to switch or
|
|
144
146
|
rebase) — verify `git status` and `git log -1` before the final gate.
|
|
145
147
|
* A previously green PHPStan run in the same conversation is stale as
|
|
@@ -165,13 +167,13 @@ When reporting completion to the user:
|
|
|
165
167
|
* Do NOT suppress warnings or skip tests to pass the gate
|
|
166
168
|
* Do NOT report only the last line of output — read the whole thing
|
|
167
169
|
* Do NOT run the full quality pipeline between intermediate edits —
|
|
168
|
-
run once at the end
|
|
170
|
+
run it once at the end
|
|
169
171
|
|
|
170
172
|
## When to hand over to another skill
|
|
171
173
|
|
|
172
174
|
* Exact PHPStan / Rector / ECS commands → [`quality-tools`](../quality-tools/SKILL.md)
|
|
173
175
|
* Running tests inside Docker → [`tests-execute`](../tests-execute/SKILL.md)
|
|
174
|
-
* Writing the regression test the gate requires →
|
|
176
|
+
* Writing the regression test that the gate requires →
|
|
175
177
|
[`test-driven-development`](../test-driven-development/SKILL.md)
|
|
176
178
|
* Diagnosing why the gate failed → [`systematic-debugging`](../systematic-debugging/SKILL.md)
|
|
177
179
|
* Committing once the gate is green → [`git-workflow`](../git-workflow/SKILL.md)
|
|
@@ -180,7 +182,7 @@ When reporting completion to the user:
|
|
|
180
182
|
|
|
181
183
|
Before sending a completion message:
|
|
182
184
|
|
|
183
|
-
* [ ] Every claim maps to a command run in this turn
|
|
185
|
+
* [ ] Every claim in the message maps to a command run in this turn
|
|
184
186
|
* [ ] Exit code of each command is read and matches the claim
|
|
185
187
|
* [ ] Output is quoted with numeric counts, not paraphrased
|
|
186
188
|
* [ ] No warnings or skips are hidden
|
|
@@ -14,7 +14,7 @@ Keep the format regular — 2-space indent, no tabs, no lists, one nesting
|
|
|
14
14
|
level only. The installer's YAML handler is a restricted stdlib parser, not
|
|
15
15
|
a full YAML engine. Ask the agent to normalize after manual edits — it
|
|
16
16
|
follows the merge rules in
|
|
17
|
-
[`layered-settings`](
|
|
17
|
+
[`layered-settings`](../../docs/guidelines/agent-infra/layered-settings.md#section-aware-merge-rules).
|
|
18
18
|
|
|
19
19
|
### Migration from the legacy `.agent-settings` (key=value)
|
|
20
20
|
|
|
@@ -36,7 +36,7 @@ This block defines the personal and project-level settings that
|
|
|
36
36
|
`scripts/install.py` (via `config/agent-settings.template.yml`)
|
|
37
37
|
writes to `.agent-settings.yml` on first install. Subsequent edits are
|
|
38
38
|
made by the user directly or by the agent on request, following the
|
|
39
|
-
[section-aware merge rules](
|
|
39
|
+
[section-aware merge rules](../../docs/guidelines/agent-infra/layered-settings.md#section-aware-merge-rules).
|
|
40
40
|
|
|
41
41
|
```yaml
|
|
42
42
|
# Agent Settings
|
|
@@ -276,7 +276,7 @@ onboarding:
|
|
|
276
276
|
# When the user's free-form prompt matches an eligible slash command,
|
|
277
277
|
# the agent surfaces a numbered-options block with the recommendation
|
|
278
278
|
# plus an always-present "run as-is" option. The suggestion layer
|
|
279
|
-
# never auto-executes — the user picks. See `rules/command-suggestion.md`.
|
|
279
|
+
# never auto-executes — the user picks. See `rules/command-suggestion-policy.md`.
|
|
280
280
|
commands:
|
|
281
281
|
suggestion:
|
|
282
282
|
# Master switch (true, false). `false` = the layer is silent;
|
|
@@ -328,7 +328,7 @@ telemetry:
|
|
|
328
328
|
|
|
329
329
|
Personal and project-level settings (initial file written by
|
|
330
330
|
`scripts/install.py`, edits follow the merge rules in
|
|
331
|
-
[`layered-settings`](
|
|
331
|
+
[`layered-settings`](../../docs/guidelines/agent-infra/layered-settings.md#section-aware-merge-rules)).
|
|
332
332
|
**Key paths use dot-notation** to denote nesting: `personal.user_name`
|
|
333
333
|
lives under `personal:` in YAML.
|
|
334
334
|
|
|
@@ -365,12 +365,12 @@ lives under `personal:` in YAML.
|
|
|
365
365
|
| `subagents.implementer_model` | model alias or empty | _(empty)_ | Model for implementer subagents. Empty = same tier as session model. See [subagent-configuration](../contexts/subagent-configuration.md). |
|
|
366
366
|
| `subagents.judge_model` | model alias or empty | _(empty)_ | Model for judge subagents. Empty = one tier above implementer (opus if sonnet, sonnet if haiku). |
|
|
367
367
|
| `subagents.max_parallel` | integer | `3` | Maximum parallel subagent invocations. `1` serializes. |
|
|
368
|
-
| `roles.default_role` | `""`, `developer`, `reviewer`, `tester`, `po`, `incident`, `planner` | _(empty)_ | Role the agent defaults to at the start of a session. See [`role-contracts`](
|
|
368
|
+
| `roles.default_role` | `""`, `developer`, `reviewer`, `tester`, `po`, `incident`, `planner` | _(empty)_ | Role the agent defaults to at the start of a session. See [`role-contracts`](../../docs/guidelines/agent-infra/role-contracts.md). |
|
|
369
369
|
| `roles.active_role` | same as `default_role` | _(empty)_ | Role currently active; set by `/mode <name>`, cleared by `/mode none`. Enables the `role-mode-adherence` rule. |
|
|
370
|
-
| `personas.override` | list of persona ids | `[]` | Developer-local override of the team default lens cast. Empty = inherit `personas.default` from `.agent-project-settings.yml`. See [`layered-settings`](
|
|
370
|
+
| `personas.override` | list of persona ids | `[]` | Developer-local override of the team default lens cast. Empty = inherit `personas.default` from `.agent-project-settings.yml`. See [`layered-settings`](../../docs/guidelines/agent-infra/layered-settings.md). |
|
|
371
371
|
| `personas.ignore` | list of persona ids | `[]` | Persona ids dropped from the default cast locally. Ignored personas stay invokable via `--personas=<id>`. |
|
|
372
372
|
| `onboarding.onboarded` | `true`, `false` | `false` | Whether `/onboard` has run on this project. The `onboarding-gate` rule prompts for `/onboard` when this is `false`. Missing entirely = legacy project, treated as onboarded. |
|
|
373
|
-
| `commands.suggestion.enabled` | `true`, `false` | `true` | Master switch for the command-suggestion layer. `false` = the layer is silent; explicit `/commands` still work. See `rules/command-suggestion.md`. |
|
|
373
|
+
| `commands.suggestion.enabled` | `true`, `false` | `true` | Master switch for the command-suggestion layer. `false` = the layer is silent; explicit `/commands` still work. See `rules/command-suggestion-policy.md`. |
|
|
374
374
|
| `commands.suggestion.confidence_floor` | `0.0`–`1.0` | `0.6` | Minimum match score before a suggestion surfaces. Per-command frontmatter (`suggestion.confidence_floor`) overrides this global floor. |
|
|
375
375
|
| `commands.suggestion.cooldown_seconds` | integer | `600` | Cooldown between re-suggestions of the same `(command, evidence)` pair. `600` = 10m. |
|
|
376
376
|
| `commands.suggestion.max_options` | integer | `4` | Max number of command suggestions before the always-present "run as-is" option (total rendered = `max_options + 1`). |
|
|
@@ -432,7 +432,7 @@ they ship with a live consumer in code and get documented here, not before.
|
|
|
432
432
|
## Sync rules
|
|
433
433
|
|
|
434
434
|
When new settings are added to this template, the
|
|
435
|
-
[section-aware merge rules](
|
|
435
|
+
[section-aware merge rules](../../docs/guidelines/agent-infra/layered-settings.md#section-aware-merge-rules)
|
|
436
436
|
govern the update:
|
|
437
437
|
|
|
438
438
|
1. Missing keys are added with their **default value** from this template,
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
|
|
56
56
|
- `agents/contexts/tenant-boundaries.md` — tenancy scope, multi-tenant
|
|
57
57
|
rules that sit on top of the role model
|
|
58
|
-
-
|
|
58
|
+
- `../../../docs/guidelines/agent-infra/*` — reviewer skills that read this
|
|
59
59
|
file
|
|
@@ -111,7 +111,7 @@ _Data source: ownership-map.yml + historical-bug-patterns.yml. …_
|
|
|
111
111
|
```
|
|
112
112
|
|
|
113
113
|
Curate `ownership-map.yml` and `historical-bug-patterns.yml` over time —
|
|
114
|
-
see
|
|
114
|
+
see `../../../docs/guidelines/agent-infra/review-routing-data-format.md` for
|
|
115
115
|
the full schema.
|
|
116
116
|
|
|
117
117
|
## Uninstall
|
|
@@ -191,5 +191,5 @@ python3 scripts/check_memory.py --path agents/memory
|
|
|
191
191
|
Exit `0` = clean, `1` = violations (missing required fields, duplicate
|
|
192
192
|
ids, or obvious secrets — staleness alone is informational).
|
|
193
193
|
|
|
194
|
-
Schema reference:
|
|
194
|
+
Schema reference: `../../../docs/guidelines/agent-infra/engineering-memory-data-format.md`.
|
|
195
195
|
Schema examples: `.augment/templates/agents/memory/*.example.yml`.
|
|
@@ -26,7 +26,12 @@ from datetime import datetime, timezone
|
|
|
26
26
|
from pathlib import Path
|
|
27
27
|
from typing import Iterable, Iterator
|
|
28
28
|
|
|
29
|
-
from .engagement import
|
|
29
|
+
from .engagement import (
|
|
30
|
+
ALLOWED_OUTCOMES,
|
|
31
|
+
EngagementEvent,
|
|
32
|
+
EngagementSchemaError,
|
|
33
|
+
parse_event,
|
|
34
|
+
)
|
|
30
35
|
|
|
31
36
|
|
|
32
37
|
@dataclass(frozen=True)
|
|
@@ -53,6 +58,10 @@ class AggregateResult:
|
|
|
53
58
|
earliest_ts: str | None = None
|
|
54
59
|
latest_ts: str | None = None
|
|
55
60
|
artefacts: dict[tuple[str, str], dict[str, object]] = field(default_factory=dict)
|
|
61
|
+
# Event-level outcome counts (boundary outcomes, not per-artefact).
|
|
62
|
+
# Initialised lazily in :func:`aggregate` so empty logs yield an
|
|
63
|
+
# empty dict rather than zeros across all five categories.
|
|
64
|
+
outcomes: dict[str, int] = field(default_factory=dict)
|
|
56
65
|
|
|
57
66
|
def stats(self) -> list[ArtefactStat]:
|
|
58
67
|
"""Materialise the accumulated buckets as immutable stats."""
|
|
@@ -121,6 +130,12 @@ def aggregate(
|
|
|
121
130
|
if result.latest_ts is None or event.ts > result.latest_ts:
|
|
122
131
|
result.latest_ts = event.ts
|
|
123
132
|
_accumulate(result.artefacts, event.consulted, event.applied, event.ts)
|
|
133
|
+
if event.outcomes:
|
|
134
|
+
for label in event.outcomes:
|
|
135
|
+
# Validator already restricted to ALLOWED_OUTCOMES, but
|
|
136
|
+
# the explicit guard documents intent and is cheap.
|
|
137
|
+
if label in ALLOWED_OUTCOMES:
|
|
138
|
+
result.outcomes[label] = result.outcomes.get(label, 0) + 1
|
|
124
139
|
return result
|
|
125
140
|
|
|
126
141
|
|
|
@@ -10,9 +10,24 @@ adds the redaction validator on top. The contract here is:
|
|
|
10
10
|
"boundary_kind": "task" | "phase-step" | "tool-call",
|
|
11
11
|
"consulted": {"skills": [...], "rules": [...], ...},
|
|
12
12
|
"applied": {"skills": [...], "rules": [...], ...},
|
|
13
|
+
"outcomes": ["blocked", "verification_failed", ...] # optional
|
|
13
14
|
"tokens_estimate": {"consulted_load": <int>} # optional
|
|
14
15
|
}
|
|
15
16
|
|
|
17
|
+
Outcomes (optional, additive in schema v1) capture *what happened*
|
|
18
|
+
during the boundary, not which artefacts were consulted. The five
|
|
19
|
+
allowed categories are scoped tightly so reports stay actionable:
|
|
20
|
+
|
|
21
|
+
- ``blocked`` — Hard-Floor / scope-control gate fired, work paused.
|
|
22
|
+
- ``partial`` — boundary closed without finishing the planned scope.
|
|
23
|
+
- ``memory_influenced_decision`` — a memory entry shaped a non-trivial decision.
|
|
24
|
+
- ``verification_failed`` — verify-before-complete gate rejected the result.
|
|
25
|
+
- ``stop_rule_triggered`` — context-hygiene 3-failure / tool-loop stop fired.
|
|
26
|
+
|
|
27
|
+
Outcomes compose: a single boundary may carry multiple. Order is
|
|
28
|
+
preserved as recorded; duplicates are rejected to keep reports
|
|
29
|
+
honest.
|
|
30
|
+
|
|
16
31
|
Design choices:
|
|
17
32
|
|
|
18
33
|
- Dataclass + manual ``validate()`` (no pydantic — keep the engine
|
|
@@ -48,6 +63,18 @@ ALLOWED_BOUNDARY_KINDS: tuple[str, ...] = (
|
|
|
48
63
|
"tool-call",
|
|
49
64
|
)
|
|
50
65
|
|
|
66
|
+
# Outcome categories — see module docstring for semantics. The set is
|
|
67
|
+
# intentionally small; widening requires an explicit follow-up roadmap
|
|
68
|
+
# step. Reports group by these labels, so renaming is breaking.
|
|
69
|
+
ALLOWED_OUTCOMES: tuple[str, ...] = (
|
|
70
|
+
"blocked",
|
|
71
|
+
"partial",
|
|
72
|
+
"memory_influenced_decision",
|
|
73
|
+
"verification_failed",
|
|
74
|
+
"stop_rule_triggered",
|
|
75
|
+
)
|
|
76
|
+
MAX_OUTCOMES_PER_EVENT = len(ALLOWED_OUTCOMES)
|
|
77
|
+
|
|
51
78
|
# Phase 5 redaction validator — keep id fields from leaking paths,
|
|
52
79
|
# free-text, or filenames. Repository-internal artefact ids and
|
|
53
80
|
# task ids never contain these characters.
|
|
@@ -115,6 +142,7 @@ class EngagementEvent:
|
|
|
115
142
|
boundary_kind: str
|
|
116
143
|
consulted: dict[str, list[str]] = field(default_factory=dict)
|
|
117
144
|
applied: dict[str, list[str]] = field(default_factory=dict)
|
|
145
|
+
outcomes: list[str] | None = None
|
|
118
146
|
tokens_estimate: dict[str, int] | None = None
|
|
119
147
|
schema_version: int = SCHEMA_VERSION
|
|
120
148
|
|
|
@@ -134,6 +162,8 @@ class EngagementEvent:
|
|
|
134
162
|
)
|
|
135
163
|
_validate_artefact_dict("consulted", self.consulted)
|
|
136
164
|
_validate_artefact_dict("applied", self.applied)
|
|
165
|
+
if self.outcomes is not None:
|
|
166
|
+
_validate_outcomes(self.outcomes)
|
|
137
167
|
if self.tokens_estimate is not None:
|
|
138
168
|
if not isinstance(self.tokens_estimate, dict):
|
|
139
169
|
raise EngagementSchemaError(
|
|
@@ -160,6 +190,8 @@ class EngagementEvent:
|
|
|
160
190
|
"consulted": _normalise_artefact_dict(self.consulted),
|
|
161
191
|
"applied": _normalise_artefact_dict(self.applied),
|
|
162
192
|
}
|
|
193
|
+
if self.outcomes:
|
|
194
|
+
out["outcomes"] = list(self.outcomes)
|
|
163
195
|
if self.tokens_estimate:
|
|
164
196
|
out["tokens_estimate"] = dict(self.tokens_estimate)
|
|
165
197
|
return out
|
|
@@ -198,6 +230,32 @@ def _normalise_artefact_dict(payload: dict[str, list[str]]) -> dict[str, list[st
|
|
|
198
230
|
return {kind: list(payload[kind]) for kind in ALLOWED_KINDS if payload.get(kind)}
|
|
199
231
|
|
|
200
232
|
|
|
233
|
+
def _validate_outcomes(payload: Any) -> None:
|
|
234
|
+
if not isinstance(payload, list):
|
|
235
|
+
raise EngagementSchemaError(
|
|
236
|
+
"outcomes must be a list of str or None"
|
|
237
|
+
)
|
|
238
|
+
if len(payload) > MAX_OUTCOMES_PER_EVENT:
|
|
239
|
+
raise EngagementSchemaError(
|
|
240
|
+
f"outcomes exceeds {MAX_OUTCOMES_PER_EVENT} entries"
|
|
241
|
+
)
|
|
242
|
+
seen: set[str] = set()
|
|
243
|
+
for label in payload:
|
|
244
|
+
if not isinstance(label, str) or not label:
|
|
245
|
+
raise EngagementSchemaError(
|
|
246
|
+
"outcomes must contain non-empty str labels"
|
|
247
|
+
)
|
|
248
|
+
if label not in ALLOWED_OUTCOMES:
|
|
249
|
+
raise EngagementSchemaError(
|
|
250
|
+
f"outcomes contains {label!r}; allowed: {ALLOWED_OUTCOMES!r}"
|
|
251
|
+
)
|
|
252
|
+
if label in seen:
|
|
253
|
+
raise EngagementSchemaError(
|
|
254
|
+
f"outcomes contains duplicate {label!r}"
|
|
255
|
+
)
|
|
256
|
+
seen.add(label)
|
|
257
|
+
|
|
258
|
+
|
|
201
259
|
def parse_event(line: str) -> EngagementEvent:
|
|
202
260
|
if not isinstance(line, str) or not line.strip():
|
|
203
261
|
raise EngagementSchemaError("line must be a non-empty JSONL record")
|
|
@@ -213,6 +271,7 @@ def parse_event(line: str) -> EngagementEvent:
|
|
|
213
271
|
boundary_kind=raw.get("boundary_kind", ""),
|
|
214
272
|
consulted=raw.get("consulted", {}) or {},
|
|
215
273
|
applied=raw.get("applied", {}) or {},
|
|
274
|
+
outcomes=raw.get("outcomes"),
|
|
216
275
|
tokens_estimate=raw.get("tokens_estimate"),
|
|
217
276
|
schema_version=raw.get("schema_version", SCHEMA_VERSION),
|
|
218
277
|
)
|
|
@@ -20,7 +20,7 @@ from dataclasses import dataclass
|
|
|
20
20
|
from typing import Any, Sequence
|
|
21
21
|
|
|
22
22
|
from .aggregator import AggregateResult, ArtefactStat, rank_artefacts
|
|
23
|
-
from .engagement import check_id_redaction
|
|
23
|
+
from .engagement import ALLOWED_OUTCOMES, check_id_redaction
|
|
24
24
|
|
|
25
25
|
QUARTILE_TOP_RATIO = 0.20
|
|
26
26
|
QUARTILE_BOTTOM_RATIO = 0.20
|
|
@@ -93,6 +93,23 @@ def render_markdown(
|
|
|
93
93
|
lines.append(f"- ts range: `{aggregate.earliest_ts}` → `{aggregate.latest_ts}`")
|
|
94
94
|
lines.append("")
|
|
95
95
|
|
|
96
|
+
# Outcomes summary — one row per category, in declared order, only
|
|
97
|
+
# when the log carries any outcome data. Stable column order so two
|
|
98
|
+
# reports over the same log render byte-identical.
|
|
99
|
+
outcomes_total = sum(aggregate.outcomes.values())
|
|
100
|
+
if outcomes_total:
|
|
101
|
+
lines.append("## Outcomes")
|
|
102
|
+
lines.append("")
|
|
103
|
+
lines.append("| outcome | count | share |")
|
|
104
|
+
lines.append("|---|---:|---:|")
|
|
105
|
+
for label in ALLOWED_OUTCOMES:
|
|
106
|
+
count = aggregate.outcomes.get(label, 0)
|
|
107
|
+
if not count:
|
|
108
|
+
continue
|
|
109
|
+
share = count / outcomes_total
|
|
110
|
+
lines.append(f"| {label} | {count} | {share:.2f} |")
|
|
111
|
+
lines.append("")
|
|
112
|
+
|
|
96
113
|
titles = {
|
|
97
114
|
BUCKET_TOP: "Essential (top 20 %)",
|
|
98
115
|
BUCKET_MID: "Useful (mid 60 %)",
|
|
@@ -136,6 +153,15 @@ def render_json(
|
|
|
136
153
|
if top is not None:
|
|
137
154
|
for bucket in grouped:
|
|
138
155
|
grouped[bucket] = grouped[bucket][:top]
|
|
156
|
+
# Outcomes — declared order, zeros omitted, total at top so callers
|
|
157
|
+
# can short-circuit without iterating the dict. Empty when no event
|
|
158
|
+
# in the window carried outcomes.
|
|
159
|
+
outcomes_total = sum(aggregate.outcomes.values())
|
|
160
|
+
outcomes_payload: dict[str, Any] = {"total": outcomes_total, "by_category": {}}
|
|
161
|
+
for label in ALLOWED_OUTCOMES:
|
|
162
|
+
count = aggregate.outcomes.get(label, 0)
|
|
163
|
+
if count:
|
|
164
|
+
outcomes_payload["by_category"][label] = count
|
|
139
165
|
payload = {
|
|
140
166
|
"schema_version": 1,
|
|
141
167
|
"summary": {
|
|
@@ -146,6 +172,7 @@ def render_json(
|
|
|
146
172
|
"latest_ts": aggregate.latest_ts,
|
|
147
173
|
"since_label": since_label,
|
|
148
174
|
},
|
|
175
|
+
"outcomes": outcomes_payload,
|
|
149
176
|
"buckets": grouped,
|
|
150
177
|
}
|
|
151
178
|
return json.dumps(payload, sort_keys=True, indent=2) + "\n"
|
|
@@ -19,7 +19,8 @@ Usage:
|
|
|
19
19
|
./agent-config telemetry:record \\
|
|
20
20
|
--task-id ticket-PROJ-42 --boundary task \\
|
|
21
21
|
--consulted skills:php-coder --consulted rules:scope-control \\
|
|
22
|
-
--applied skills:php-coder
|
|
22
|
+
--applied skills:php-coder \\
|
|
23
|
+
--outcome verification_failed --outcome stop_rule_triggered
|
|
23
24
|
|
|
24
25
|
Exit codes:
|
|
25
26
|
0 success or disabled (silent)
|
|
@@ -38,6 +39,7 @@ from pathlib import Path
|
|
|
38
39
|
# the script is dispatched from the package or from a consumer copy.
|
|
39
40
|
from telemetry.boundary import record_event
|
|
40
41
|
from telemetry.engagement import (
|
|
42
|
+
ALLOWED_OUTCOMES,
|
|
41
43
|
EngagementEvent,
|
|
42
44
|
EngagementSchemaError,
|
|
43
45
|
now_utc_iso,
|
|
@@ -71,6 +73,7 @@ def _build_event_from_args(args: argparse.Namespace) -> EngagementEvent:
|
|
|
71
73
|
boundary_kind=args.boundary,
|
|
72
74
|
consulted=_parse_kv_list(args.consulted or []),
|
|
73
75
|
applied=_parse_kv_list(args.applied or []),
|
|
76
|
+
outcomes=list(args.outcome) if args.outcome else None,
|
|
74
77
|
)
|
|
75
78
|
|
|
76
79
|
|
|
@@ -87,6 +90,7 @@ def _build_event_from_payload(raw: str) -> EngagementEvent:
|
|
|
87
90
|
boundary_kind=data.get("boundary_kind", ""),
|
|
88
91
|
consulted=data.get("consulted", {}) or {},
|
|
89
92
|
applied=data.get("applied", {}) or {},
|
|
93
|
+
outcomes=data.get("outcomes"),
|
|
90
94
|
tokens_estimate=data.get("tokens_estimate"),
|
|
91
95
|
)
|
|
92
96
|
|
|
@@ -107,6 +111,15 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
107
111
|
)
|
|
108
112
|
parser.add_argument("--consulted", action="append")
|
|
109
113
|
parser.add_argument("--applied", action="append")
|
|
114
|
+
parser.add_argument(
|
|
115
|
+
"--outcome",
|
|
116
|
+
action="append",
|
|
117
|
+
choices=ALLOWED_OUTCOMES,
|
|
118
|
+
help=(
|
|
119
|
+
"Boundary outcome label; repeat for multiple. "
|
|
120
|
+
"Allowed: " + ", ".join(ALLOWED_OUTCOMES) + "."
|
|
121
|
+
),
|
|
122
|
+
)
|
|
110
123
|
parser.add_argument("--ts", default="")
|
|
111
124
|
parser.add_argument("--payload-file", type=Path)
|
|
112
125
|
parser.add_argument("--stdin", action="store_true")
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Shared agent configuration \u2014 skills for AI coding tools (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI).",
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.17.0"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
@@ -19,9 +19,11 @@
|
|
|
19
19
|
"./.claude/skills/agent-docs-writing",
|
|
20
20
|
"./.claude/skills/agent-handoff",
|
|
21
21
|
"./.claude/skills/agent-status",
|
|
22
|
+
"./.claude/skills/agents",
|
|
22
23
|
"./.claude/skills/agents-audit",
|
|
23
24
|
"./.claude/skills/agents-cleanup",
|
|
24
25
|
"./.claude/skills/agents-prepare",
|
|
26
|
+
"./.claude/skills/ai-council",
|
|
25
27
|
"./.claude/skills/analysis-autonomous-mode",
|
|
26
28
|
"./.claude/skills/analysis-skill-router",
|
|
27
29
|
"./.claude/skills/analyze-reference-repo",
|
|
@@ -40,6 +42,7 @@
|
|
|
40
42
|
"./.claude/skills/chat-history-checkpoint",
|
|
41
43
|
"./.claude/skills/chat-history-clear",
|
|
42
44
|
"./.claude/skills/chat-history-resume",
|
|
45
|
+
"./.claude/skills/chat-history-show",
|
|
43
46
|
"./.claude/skills/check-current-md",
|
|
44
47
|
"./.claude/skills/check-refs",
|
|
45
48
|
"./.claude/skills/code-refactoring",
|
|
@@ -50,17 +53,24 @@
|
|
|
50
53
|
"./.claude/skills/commit-in-chunks",
|
|
51
54
|
"./.claude/skills/composer-packages",
|
|
52
55
|
"./.claude/skills/compress",
|
|
56
|
+
"./.claude/skills/context",
|
|
53
57
|
"./.claude/skills/context-authoring",
|
|
54
58
|
"./.claude/skills/context-create",
|
|
55
59
|
"./.claude/skills/context-document",
|
|
56
60
|
"./.claude/skills/context-refactor",
|
|
57
61
|
"./.claude/skills/conventional-commits-writing",
|
|
62
|
+
"./.claude/skills/copilot-agents",
|
|
58
63
|
"./.claude/skills/copilot-agents-init",
|
|
59
64
|
"./.claude/skills/copilot-agents-optimization",
|
|
60
65
|
"./.claude/skills/copilot-agents-optimize",
|
|
61
66
|
"./.claude/skills/copilot-config",
|
|
67
|
+
"./.claude/skills/council",
|
|
68
|
+
"./.claude/skills/council-default",
|
|
69
|
+
"./.claude/skills/council-design",
|
|
70
|
+
"./.claude/skills/council-optimize",
|
|
71
|
+
"./.claude/skills/council-pr",
|
|
62
72
|
"./.claude/skills/create-pr",
|
|
63
|
-
"./.claude/skills/create-pr-description",
|
|
73
|
+
"./.claude/skills/create-pr-description-only",
|
|
64
74
|
"./.claude/skills/dashboard-design",
|
|
65
75
|
"./.claude/skills/data-flow-mapper",
|
|
66
76
|
"./.claude/skills/database",
|
|
@@ -69,8 +79,6 @@
|
|
|
69
79
|
"./.claude/skills/design-review",
|
|
70
80
|
"./.claude/skills/devcontainer",
|
|
71
81
|
"./.claude/skills/developer-like-execution",
|
|
72
|
-
"./.claude/skills/do-and-judge",
|
|
73
|
-
"./.claude/skills/do-in-steps",
|
|
74
82
|
"./.claude/skills/docker",
|
|
75
83
|
"./.claude/skills/dto-creator",
|
|
76
84
|
"./.claude/skills/e2e-heal",
|
|
@@ -79,6 +87,7 @@
|
|
|
79
87
|
"./.claude/skills/estimate-ticket",
|
|
80
88
|
"./.claude/skills/existing-ui-audit",
|
|
81
89
|
"./.claude/skills/fe-design",
|
|
90
|
+
"./.claude/skills/feature",
|
|
82
91
|
"./.claude/skills/feature-dev",
|
|
83
92
|
"./.claude/skills/feature-explore",
|
|
84
93
|
"./.claude/skills/feature-plan",
|
|
@@ -87,12 +96,13 @@
|
|
|
87
96
|
"./.claude/skills/feature-roadmap",
|
|
88
97
|
"./.claude/skills/file-editor",
|
|
89
98
|
"./.claude/skills/finishing-a-development-branch",
|
|
99
|
+
"./.claude/skills/fix",
|
|
90
100
|
"./.claude/skills/fix-ci",
|
|
91
101
|
"./.claude/skills/fix-portability",
|
|
92
|
-
"./.claude/skills/fix-pr
|
|
93
|
-
"./.claude/skills/fix-pr-
|
|
94
|
-
"./.claude/skills/fix-pr-
|
|
95
|
-
"./.claude/skills/fix-
|
|
102
|
+
"./.claude/skills/fix-pr",
|
|
103
|
+
"./.claude/skills/fix-pr-bots",
|
|
104
|
+
"./.claude/skills/fix-pr-developers",
|
|
105
|
+
"./.claude/skills/fix-refs",
|
|
96
106
|
"./.claude/skills/fix-seeder",
|
|
97
107
|
"./.claude/skills/flux",
|
|
98
108
|
"./.claude/skills/git-workflow",
|
|
@@ -106,7 +116,10 @@
|
|
|
106
116
|
"./.claude/skills/judge",
|
|
107
117
|
"./.claude/skills/judge-bug-hunter",
|
|
108
118
|
"./.claude/skills/judge-code-quality",
|
|
119
|
+
"./.claude/skills/judge-on-diff",
|
|
109
120
|
"./.claude/skills/judge-security-auditor",
|
|
121
|
+
"./.claude/skills/judge-solo",
|
|
122
|
+
"./.claude/skills/judge-steps",
|
|
110
123
|
"./.claude/skills/judge-test-coverage",
|
|
111
124
|
"./.claude/skills/laravel",
|
|
112
125
|
"./.claude/skills/laravel-horizon",
|
|
@@ -124,22 +137,27 @@
|
|
|
124
137
|
"./.claude/skills/logging-monitoring",
|
|
125
138
|
"./.claude/skills/mcp",
|
|
126
139
|
"./.claude/skills/md-language-check",
|
|
140
|
+
"./.claude/skills/memory",
|
|
127
141
|
"./.claude/skills/memory-add",
|
|
128
|
-
"./.claude/skills/memory-
|
|
142
|
+
"./.claude/skills/memory-load",
|
|
129
143
|
"./.claude/skills/memory-promote",
|
|
144
|
+
"./.claude/skills/memory-propose",
|
|
130
145
|
"./.claude/skills/merge-conflicts",
|
|
131
146
|
"./.claude/skills/migration-creator",
|
|
132
147
|
"./.claude/skills/mode",
|
|
148
|
+
"./.claude/skills/module",
|
|
133
149
|
"./.claude/skills/module-create",
|
|
134
150
|
"./.claude/skills/module-explore",
|
|
135
151
|
"./.claude/skills/module-management",
|
|
136
152
|
"./.claude/skills/multi-tenancy",
|
|
137
153
|
"./.claude/skills/onboard",
|
|
138
154
|
"./.claude/skills/openapi",
|
|
155
|
+
"./.claude/skills/optimize",
|
|
139
156
|
"./.claude/skills/optimize-agents",
|
|
140
157
|
"./.claude/skills/optimize-augmentignore",
|
|
141
|
-
"./.claude/skills/optimize-rtk
|
|
158
|
+
"./.claude/skills/optimize-rtk",
|
|
142
159
|
"./.claude/skills/optimize-skills",
|
|
160
|
+
"./.claude/skills/override",
|
|
143
161
|
"./.claude/skills/override-create",
|
|
144
162
|
"./.claude/skills/override-manage",
|
|
145
163
|
"./.claude/skills/override-management",
|
|
@@ -165,7 +183,6 @@
|
|
|
165
183
|
"./.claude/skills/project-analyzer",
|
|
166
184
|
"./.claude/skills/project-docs",
|
|
167
185
|
"./.claude/skills/project-health",
|
|
168
|
-
"./.claude/skills/propose-memory",
|
|
169
186
|
"./.claude/skills/quality-fix",
|
|
170
187
|
"./.claude/skills/quality-tools",
|
|
171
188
|
"./.claude/skills/react-shadcn-ui",
|
|
@@ -178,6 +195,7 @@
|
|
|
178
195
|
"./.claude/skills/requesting-code-review",
|
|
179
196
|
"./.claude/skills/review-changes",
|
|
180
197
|
"./.claude/skills/review-routing",
|
|
198
|
+
"./.claude/skills/roadmap",
|
|
181
199
|
"./.claude/skills/roadmap-create",
|
|
182
200
|
"./.claude/skills/roadmap-execute",
|
|
183
201
|
"./.claude/skills/roadmap-management",
|
|
@@ -203,6 +221,7 @@
|
|
|
203
221
|
"./.claude/skills/terragrunt",
|
|
204
222
|
"./.claude/skills/test-driven-development",
|
|
205
223
|
"./.claude/skills/test-performance",
|
|
224
|
+
"./.claude/skills/tests",
|
|
206
225
|
"./.claude/skills/tests-create",
|
|
207
226
|
"./.claude/skills/tests-execute",
|
|
208
227
|
"./.claude/skills/threat-model",
|
|
@@ -213,7 +232,7 @@
|
|
|
213
232
|
"./.claude/skills/upstream-contribute",
|
|
214
233
|
"./.claude/skills/using-git-worktrees",
|
|
215
234
|
"./.claude/skills/validate-feature-fit",
|
|
216
|
-
"./.claude/skills/verify-
|
|
235
|
+
"./.claude/skills/verify-completion-evidence",
|
|
217
236
|
"./.claude/skills/websocket",
|
|
218
237
|
"./.claude/skills/work"
|
|
219
238
|
]
|