@event4u/agent-config 1.14.0 → 1.16.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 +1 -1
- package/.agent-src/commands/bug-fix.md +3 -3
- package/.agent-src/commands/bug-investigate.md +2 -2
- package/.agent-src/commands/chat-history-checkpoint.md +3 -3
- package/.agent-src/commands/chat-history-clear.md +2 -2
- package/.agent-src/commands/chat-history-resume.md +2 -2
- package/.agent-src/commands/chat-history.md +3 -3
- package/.agent-src/commands/check-current-md.md +44 -33
- package/.agent-src/commands/commit-in-chunks.md +43 -23
- package/.agent-src/commands/compress.md +34 -2
- package/.agent-src/commands/council-design.md +96 -0
- package/.agent-src/commands/council-optimize.md +115 -0
- package/.agent-src/commands/council-pr.md +123 -0
- package/.agent-src/commands/council.md +219 -0
- package/.agent-src/commands/create-pr.md +23 -0
- package/.agent-src/commands/do-and-judge.md +3 -3
- package/.agent-src/commands/do-in-steps.md +4 -4
- 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 +8 -0
- package/.agent-src/commands/feature-explore.md +6 -1
- package/.agent-src/commands/feature-plan.md +33 -2
- package/.agent-src/commands/feature-refactor.md +5 -0
- package/.agent-src/commands/feature-roadmap.md +8 -3
- package/.agent-src/commands/feature.md +58 -0
- package/.agent-src/commands/fix-ci.md +5 -0
- package/.agent-src/commands/fix-portability.md +7 -2
- package/.agent-src/commands/fix-pr-bot-comments.md +5 -0
- package/.agent-src/commands/fix-pr-comments.md +5 -0
- package/.agent-src/commands/fix-pr-developer-comments.md +5 -0
- package/.agent-src/commands/fix-references.md +5 -0
- package/.agent-src/commands/fix-seeder.md +5 -0
- package/.agent-src/commands/fix.md +60 -0
- package/.agent-src/commands/jira-ticket.md +1 -1
- package/.agent-src/commands/judge.md +1 -1
- package/.agent-src/commands/memory-add.md +3 -3
- package/.agent-src/commands/memory-full.md +2 -2
- package/.agent-src/commands/memory-promote.md +2 -2
- package/.agent-src/commands/mode.md +5 -5
- package/.agent-src/commands/onboard.md +17 -8
- package/.agent-src/commands/optimize-agents.md +6 -1
- package/.agent-src/commands/optimize-augmentignore.md +14 -0
- package/.agent-src/commands/optimize-rtk-filters.md +5 -0
- package/.agent-src/commands/optimize-skills.md +6 -1
- package/.agent-src/commands/optimize.md +54 -0
- package/.agent-src/commands/propose-memory.md +2 -2
- package/.agent-src/commands/refine-ticket.md +9 -7
- package/.agent-src/commands/review-changes.md +61 -9
- package/.agent-src/commands/review-routing.md +1 -1
- package/.agent-src/commands/roadmap-create.md +42 -4
- package/.agent-src/commands/roadmap-execute.md +9 -7
- package/.agent-src/commands/set-cost-profile.md +11 -3
- package/.agent-src/commands/sync-agent-settings.md +11 -2
- package/.agent-src/commands/tests-create.md +1 -1
- package/.agent-src/commands/tests-execute.md +2 -3
- 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/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/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 +2 -2
- package/.agent-src/rules/ask-when-uncertain.md +1 -1
- package/.agent-src/rules/augment-portability.md +56 -37
- 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 +109 -0
- package/.agent-src/rules/chat-history-ownership.md +123 -0
- package/.agent-src/rules/chat-history-visibility.md +96 -0
- package/.agent-src/rules/cli-output-handling.md +1 -1
- package/.agent-src/rules/{command-suggestion.md → command-suggestion-policy.md} +10 -9
- package/.agent-src/rules/commit-conventions.md +1 -1
- package/.agent-src/rules/commit-policy.md +43 -61
- package/.agent-src/rules/context-hygiene.md +3 -3
- package/.agent-src/rules/direct-answers.md +2 -2
- package/.agent-src/rules/docs-sync.md +1 -1
- 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 +41 -96
- package/.agent-src/rules/minimal-safe-diff.md +3 -3
- package/.agent-src/rules/model-recommendation.md +4 -4
- package/.agent-src/rules/no-cheap-questions.md +89 -0
- package/.agent-src/rules/non-destructive-by-default.md +25 -59
- package/.agent-src/rules/onboarding-gate.md +5 -5
- package/.agent-src/rules/review-routing-awareness.md +9 -9
- package/.agent-src/rules/roadmap-progress-sync.md +132 -80
- package/.agent-src/rules/role-mode-adherence.md +3 -3
- package/.agent-src/rules/scope-control.md +65 -46
- package/.agent-src/rules/security-sensitive-stop.md +2 -2
- package/.agent-src/rules/size-enforcement.md +3 -2
- package/.agent-src/rules/think-before-action.md +5 -5
- package/.agent-src/rules/token-efficiency.md +4 -4
- package/.agent-src/rules/{ui-audit-before-build.md → ui-audit-gate.md} +3 -3
- package/.agent-src/rules/user-interaction.md +31 -7
- package/.agent-src/rules/verify-before-complete.md +12 -67
- package/.agent-src/scripts/update_roadmap_progress.py +65 -8
- package/.agent-src/skills/ai-council/SKILL.md +333 -0
- package/.agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/.agent-src/skills/blade-ui/SKILL.md +30 -11
- 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/command-routing/SKILL.md +1 -1
- package/.agent-src/skills/command-writing/SKILL.md +16 -5
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +1 -1
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
- package/.agent-src/skills/developer-like-execution/SKILL.md +2 -2
- package/.agent-src/skills/existing-ui-audit/SKILL.md +24 -9
- package/.agent-src/skills/fe-design/SKILL.md +20 -15
- package/.agent-src/skills/file-editor/SKILL.md +9 -0
- package/.agent-src/skills/flux/SKILL.md +1 -1
- package/.agent-src/skills/git-workflow/SKILL.md +1 -1
- package/.agent-src/skills/guideline-writing/SKILL.md +11 -11
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +4 -4
- package/.agent-src/skills/livewire/SKILL.md +27 -8
- package/.agent-src/skills/override-management/SKILL.md +2 -2
- package/.agent-src/skills/php-coder/SKILL.md +1 -1
- package/.agent-src/skills/playwright-testing/SKILL.md +2 -2
- package/.agent-src/skills/readme-reviewer/SKILL.md +1 -1
- package/.agent-src/skills/readme-writing/SKILL.md +1 -1
- package/.agent-src/skills/readme-writing-package/SKILL.md +1 -1
- package/.agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/.agent-src/skills/refine-ticket/SKILL.md +30 -24
- package/.agent-src/skills/review-routing/SKILL.md +2 -2
- package/.agent-src/skills/roadmap-management/SKILL.md +22 -16
- package/.agent-src/skills/rule-writing/SKILL.md +1 -1
- package/.agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/.agent-src/skills/skill-writing/SKILL.md +6 -6
- package/.agent-src/skills/subagent-orchestration/SKILL.md +1 -0
- package/.agent-src/skills/systematic-debugging/SKILL.md +1 -1
- package/.agent-src/skills/upstream-contribute/SKILL.md +3 -3
- package/.agent-src/skills/validate-feature-fit/SKILL.md +2 -2
- package/.agent-src/skills/{verify-before-complete → verify-completion-evidence}/SKILL.md +2 -2
- package/.agent-src/templates/agent-settings.md +9 -9
- package/.agent-src/templates/contexts/auth-model.md +1 -1
- package/.agent-src/templates/roadmaps.md +9 -8
- package/.agent-src/templates/scripts/README.md +2 -2
- package/.agent-src/templates/scripts/memory_lookup.py +1 -1
- 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/.agent-src/templates/scripts/work_engine/__init__.py +2 -2
- package/.agent-src/templates/scripts/work_engine/cli.py +64 -461
- package/.agent-src/templates/scripts/work_engine/cli_args.py +116 -0
- package/.agent-src/templates/scripts/work_engine/delivery_state.py +3 -3
- package/.agent-src/templates/scripts/work_engine/directives/backend/__init__.py +1 -1
- package/.agent-src/templates/scripts/work_engine/directives/backend/implement.py +1 -1
- package/.agent-src/templates/scripts/work_engine/directives/backend/memory.py +1 -1
- package/.agent-src/templates/scripts/work_engine/directives/backend/plan.py +1 -1
- package/.agent-src/templates/scripts/work_engine/directives/backend/report.py +1 -1
- package/.agent-src/templates/scripts/work_engine/dispatcher.py +1 -1
- package/.agent-src/templates/scripts/work_engine/emitters.py +43 -0
- package/.agent-src/templates/scripts/work_engine/errors.py +19 -0
- package/.agent-src/templates/scripts/work_engine/hook_bootstrap.py +76 -0
- package/.agent-src/templates/scripts/work_engine/input_builders.py +163 -0
- package/.agent-src/templates/scripts/work_engine/migration/v0_to_v1.py +34 -2
- package/.agent-src/templates/scripts/work_engine/persona_policy.py +1 -1
- package/.agent-src/templates/scripts/work_engine/resolvers/prompt.py +1 -1
- package/.agent-src/templates/scripts/work_engine/state_io.py +202 -0
- package/.claude-plugin/marketplace.json +10 -2
- package/AGENTS.md +16 -12
- package/CHANGELOG.md +206 -9
- package/README.md +51 -52
- package/config/agent-settings.template.yml +58 -1
- package/config/gitignore-block.txt +3 -0
- package/docs/MIGRATION.md +122 -0
- package/docs/architecture.md +83 -34
- package/docs/catalog.md +331 -0
- package/docs/contracts/STABILITY.md +134 -0
- package/docs/contracts/adr-chat-history-split.md +132 -0
- package/docs/contracts/adr-command-suggestion.md +146 -0
- package/docs/contracts/adr-implement-ticket-runtime.md +122 -0
- package/docs/contracts/adr-product-ui-track.md +384 -0
- package/docs/contracts/adr-prompt-driven-execution.md +187 -0
- package/docs/contracts/agent-memory-contract.md +149 -0
- package/docs/contracts/artifact-engagement-flow.md +262 -0
- package/docs/contracts/command-clusters.md +126 -0
- package/docs/contracts/command-suggestion-flow.md +148 -0
- package/docs/contracts/implement-ticket-flow.md +628 -0
- package/docs/contracts/linear-ai-rules-inclusion.md +143 -0
- package/docs/contracts/linear-ai-three-layers.md +131 -0
- package/docs/contracts/load-context-schema.md +186 -0
- package/docs/contracts/rule-interactions.md +107 -0
- package/docs/contracts/rule-interactions.yml +238 -0
- package/docs/contracts/rule-priority-hierarchy.md +87 -0
- package/docs/contracts/ui-stack-extension.md +236 -0
- package/docs/contracts/ui-track-flow.md +338 -0
- package/docs/customization.md +14 -0
- package/docs/end-to-end-walkthroughs.md +165 -0
- package/docs/getting-started.md +27 -9
- package/docs/github-topics.md +12 -3
- 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/installation.md +42 -6
- package/docs/migrations/commands-1.15.0.md +112 -0
- package/docs/showcase.md +9 -4
- package/docs/skills-catalog.md +14 -8
- package/docs/ui-track-mental-model.md +121 -0
- package/llms.txt +13 -7
- package/package.json +1 -1
- package/scripts/agent-config +23 -0
- package/scripts/ai_council/__init__.py +39 -0
- package/scripts/ai_council/_default_prices.py +41 -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/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/build_linear_digest.py +4 -4
- package/scripts/check_always_budget.py +126 -0
- package/scripts/check_augmentignore.py +69 -0
- package/scripts/check_command_count_messaging.py +120 -0
- package/scripts/check_portability.py +57 -0
- package/scripts/check_public_catalog_links.py +122 -0
- package/scripts/check_public_links.py +185 -0
- package/scripts/check_references.py +5 -1
- package/scripts/check_roadmap_trackable.py +111 -0
- package/scripts/command_suggester/cooldown.py +1 -1
- package/scripts/generate_index.py +266 -0
- 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 +179 -0
- package/scripts/lint_rule_interactions.py +149 -0
- package/scripts/memory_lookup.py +1 -1
- package/scripts/release.py +297 -64
- package/scripts/schemas/command.schema.json +20 -0
- package/scripts/schemas/rule.schema.json +10 -0
- package/scripts/skill_linter.py +26 -4
- package/scripts/sync_agent_settings.py +1 -1
- package/scripts/update_counts.py +19 -4
- package/scripts/update_prices.py +124 -0
- package/.agent-src/guidelines/php/git.md +0 -96
- package/.agent-src/rules/chat-history.md +0 -200
- /package/.agent-src/rules/{slash-commands.md → slash-command-routing-policy.md} +0 -0
- /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,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: "auto"
|
|
3
3
|
alwaysApply: false
|
|
4
|
-
description: "Security-sensitive
|
|
4
|
+
description: "Security-sensitive paths — auth, billing, tenant boundaries, secrets, file uploads, external integrations, webhooks, public endpoints — stop and run threat analysis BEFORE editing"
|
|
5
5
|
source: package
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -42,7 +42,7 @@ STOP writing code. Run the matching analysis skill first:
|
|
|
42
42
|
| Wide refactor of security-sensitive code | `blast-radius-analyzer` |
|
|
43
43
|
|
|
44
44
|
**Before the analysis, consult memory for prior incidents** on this
|
|
45
|
-
surface. Via [`memory-access`](
|
|
45
|
+
surface. Via [`memory-access`](../../docs/guidelines/agent-infra/memory-access.md):
|
|
46
46
|
|
|
47
47
|
```python
|
|
48
48
|
from scripts.memory_lookup import retrieve
|
|
@@ -22,6 +22,7 @@ source: package
|
|
|
22
22
|
- Rules and system instructions should stay well below 200 lines
|
|
23
23
|
- Smaller (≈60 lines) is strongly preferred
|
|
24
24
|
|
|
25
|
-
→ Size limits and details:
|
|
25
|
+
→ Size limits and details: `../../docs/guidelines/agent-infra/size-and-scope.md`
|
|
26
26
|
|
|
27
|
-
→ Frontmatter contract: schemas live in `scripts/schemas/` and are enforced by
|
|
27
|
+
→ Frontmatter contract: schemas live in `scripts/schemas/` and are enforced by
|
|
28
|
+
`python3 scripts/validate_frontmatter.py`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
type: "
|
|
3
|
-
description: "
|
|
4
|
-
alwaysApply:
|
|
2
|
+
type: "auto"
|
|
3
|
+
description: "Before coding, modifying, or debugging — analyze first, verify with real tools, never guess or trial-and-error"
|
|
4
|
+
alwaysApply: false
|
|
5
5
|
source: package
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -16,7 +16,7 @@ source: package
|
|
|
16
16
|
- If requirements are unclear, ask a precise clarification question instead of making hidden assumptions
|
|
17
17
|
- Refactors must preserve behavior, validation, examples, and anti-failure guidance unless there is an explicit reason to change them
|
|
18
18
|
- Do NOT modify code you do not fully understand — read it first, trace the flow, then change it
|
|
19
|
-
- Multiple valid frameworks/patterns already in the codebase (Tailwind + Flux, multiple form libs, competing state stores) → do NOT pick one silently, ask. See [`no blind implementation`](
|
|
19
|
+
- Multiple valid frameworks/patterns already in the codebase (Tailwind + Flux, multiple form libs, competing state stores) → do NOT pick one silently, ask. See [`no blind implementation`](../../docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md#2-no-blind-implementation)
|
|
20
20
|
|
|
21
21
|
## The Developer Workflow
|
|
22
22
|
|
|
@@ -33,7 +33,7 @@ Skipping steps 1-3 = #1 cause of wrong implementations and wasted retries.
|
|
|
33
33
|
## Consult memory before editing
|
|
34
34
|
|
|
35
35
|
Before writing code for the touched paths, call
|
|
36
|
-
[`memory-access`](
|
|
36
|
+
[`memory-access`](../../docs/guidelines/agent-infra/memory-access.md):
|
|
37
37
|
|
|
38
38
|
```python
|
|
39
39
|
from scripts.memory_lookup import retrieve
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
type: "
|
|
3
|
-
description: "
|
|
4
|
-
alwaysApply:
|
|
2
|
+
type: "auto"
|
|
3
|
+
description: "When running CLI tools, fetching logs, or producing replies — redirect verbose output, minimize tool calls, keep replies concise"
|
|
4
|
+
alwaysApply: false
|
|
5
5
|
source: package
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -96,4 +96,4 @@ When `personal.minimal_output: true`:
|
|
|
96
96
|
- Debugging: OK to read more context around one error.
|
|
97
97
|
- User explicitly asks for full output: show it.
|
|
98
98
|
|
|
99
|
-
→ Detailed patterns: `guidelines/agent-infra/output-patterns.md`
|
|
99
|
+
→ Detailed patterns: `docs/guidelines/agent-infra/output-patterns.md`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
type: "
|
|
3
|
-
description: "
|
|
4
|
-
alwaysApply:
|
|
2
|
+
type: "auto"
|
|
3
|
+
description: "Writing or editing UI — components, screens, partials, layouts, design tokens — require existing-ui-audit findings in state.ui_audit before non-trivial UI change; gate, not suggestion"
|
|
4
|
+
alwaysApply: false
|
|
5
5
|
source: package
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
type: "
|
|
3
|
-
description: "
|
|
4
|
-
alwaysApply:
|
|
2
|
+
type: "auto"
|
|
3
|
+
description: "Asking the user a question, presenting options, or summarizing progress — numbered-options Iron Law, single-recommendation rule, progress indicators"
|
|
4
|
+
alwaysApply: false
|
|
5
5
|
source: package
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -18,6 +18,7 @@ EXACTLY ONE LINE NAMES THE RECOMMENDED NUMBER. NO INLINE TAG. NO SECOND PROSE NU
|
|
|
18
18
|
THE OPTION BLOCK STAYS NEUTRAL. THE RECOMMENDATION LINE IS THE ONLY SOURCE OF TRUTH.
|
|
19
19
|
DRIFT BETWEEN OPTION-BLOCK AND PROSE IS STRUCTURALLY IMPOSSIBLE WHEN THE TAG DOES NOT EXIST.
|
|
20
20
|
MISSING RECOMMENDATION = RULE VIOLATION, NOT A SLIP.
|
|
21
|
+
POSITION-AGNOSTIC. END-OF-TURN MENUS COUNT. NEXT-STEP LISTS COUNT. NO EXCEPTIONS.
|
|
21
22
|
```
|
|
22
23
|
|
|
23
24
|
The agent has read the code, the contracts, the trade-offs. Refusing
|
|
@@ -25,6 +26,16 @@ to take a position dumps that work back on the user. Take the
|
|
|
25
26
|
position; be wrong out loud if needed. "Egal, was bevorzugst Du?" /
|
|
26
27
|
"no preference" is NEVER acceptable.
|
|
27
28
|
|
|
29
|
+
**Position-agnostic — closes the most common slip:** End-of-turn
|
|
30
|
+
"Wie weiter?" / "What next?" / "How to proceed?" / "How should we
|
|
31
|
+
continue?" blocks with numbered options are **numbered-options
|
|
32
|
+
blocks**. Same Iron Law applies — exactly one `Empfehlung: N` /
|
|
33
|
+
`Recommendation: N` line, every time. There is no "these are just
|
|
34
|
+
follow-up suggestions" exception, no "the user knows better here"
|
|
35
|
+
exception, no "I genuinely don't have a preference" exception. If
|
|
36
|
+
the agent prints `1. … 2. … 3. …` anywhere in the reply, the
|
|
37
|
+
recommendation line is mandatory.
|
|
38
|
+
|
|
28
39
|
**Format — non-negotiable:**
|
|
29
40
|
|
|
30
41
|
- Options block stays NEUTRAL — no `(recommended)`, no `(rec)`, no `←`, no bold, no checkmark.
|
|
@@ -58,16 +69,28 @@ SKIPPING IT IS A RULE VIOLATION, NOT A SLIP.
|
|
|
58
69
|
```
|
|
59
70
|
|
|
60
71
|
Before emitting any reply that contains numbered options, scan the
|
|
61
|
-
drafted
|
|
72
|
+
**entire drafted reply** — top to bottom, including end-of-turn
|
|
73
|
+
"Wie weiter?" / "What next?" continuation menus, follow-up
|
|
74
|
+
suggestion blocks, and any list of `1. … 2. … 3. …` regardless of
|
|
75
|
+
its position or framing:
|
|
62
76
|
|
|
63
77
|
1. Count occurrences of `(recommended)` / `(rec)` / `(empfohlen)` inline next to a numbered option → MUST be **zero**. Found one → rewrite, drop the tag.
|
|
64
|
-
2. Count
|
|
65
|
-
3.
|
|
78
|
+
2. Count `1\.\s` / `2\.\s` / `3\.\s` patterns inside blockquotes or top-level prose → if **any** numbered-option block exists anywhere in the reply, the recommendation line is mandatory.
|
|
79
|
+
3. Count distinct `Recommendation:\s*N` / `Empfehlung:\s*N` lines (case-insensitive) → MUST be **exactly one per options block**. Zero → add one. Two or more distinct numbers → rewrite, pick one.
|
|
80
|
+
4. The number on the recommendation line MUST exist in the option block it follows.
|
|
81
|
+
5. If the reply has multiple options blocks (e.g. a clarification block AND an end-of-turn menu), each block gets its own `Recommendation: N` line directly underneath.
|
|
66
82
|
|
|
67
83
|
Mechanical backstop: `python3 scripts/check_reply_consistency.py --stdin < draft.md`
|
|
68
84
|
(non-zero exit on any rule above). Self-scan is the primary gate; the
|
|
69
85
|
script is the deterministic safety net for ambiguous cases.
|
|
70
86
|
|
|
87
|
+
### Common failure modes — known, named, no excuses
|
|
88
|
+
|
|
89
|
+
- **End-of-turn menu skipped.** Reply answers the question fine, then ends with `> 1. Foo > 2. Bar > 3. Stop` and no `Empfehlung:`. Iron Law 1 was violated — these are numbered options, position is irrelevant.
|
|
90
|
+
- **"Genuinely no preference" hedge.** Pick anyway. The agent has more context than the user on the trade-off; refusing to pick dumps the work back. Pick the safest option, name the flip-condition.
|
|
91
|
+
- **"User knows the project better" hedge.** Same failure mode, different costume. The user asked for an opinion by virtue of accepting the options block; deliver it.
|
|
92
|
+
- **Multi-block reply with one recommendation.** Two options blocks but only one `Empfehlung:` line — the second block is unguarded. Rule 5 above closes this.
|
|
93
|
+
|
|
71
94
|
## Numbered Options — Always
|
|
72
95
|
|
|
73
96
|
When asking the user a question with predefined choices, **always
|
|
@@ -87,9 +110,10 @@ just a number (e.g., `1`) instead of typing a sentence.
|
|
|
87
110
|
### Rules
|
|
88
111
|
|
|
89
112
|
- **Every question with choices** must use numbered options — no exceptions.
|
|
113
|
+
- **Every numbered list with `1. … 2. … 3. …`** is a numbered-options block, regardless of position. End-of-turn "Wie weiter?" / "What next?" / "How to proceed?" menus, mid-reply continuation prompts, and clarification blocks all count.
|
|
90
114
|
- **Keep options short** — one line each, with a brief explanation after the dash.
|
|
91
115
|
- **Always include a "skip" or "no change" option** when applicable.
|
|
92
|
-
- **Always state a recommendation** — Iron Law 1 above.
|
|
116
|
+
- **Always state a recommendation** — Iron Law 1 above. Per options block, every time, position-agnostic.
|
|
93
117
|
- **Use the user's language** for the question and options.
|
|
94
118
|
- **Accept both** the number and a natural language answer (e.g., "1" or "the first one").
|
|
95
119
|
|
|
@@ -3,6 +3,8 @@ type: "always"
|
|
|
3
3
|
description: "Verify before completion — run tests and quality tools before claiming done"
|
|
4
4
|
alwaysApply: true
|
|
5
5
|
source: package
|
|
6
|
+
load_context:
|
|
7
|
+
- .agent-src.uncompressed/contexts/execution/verification-mechanics.md
|
|
6
8
|
---
|
|
7
9
|
|
|
8
10
|
# Verify Before Completion
|
|
@@ -15,25 +17,6 @@ NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE
|
|
|
15
17
|
|
|
16
18
|
If you haven't run the verification command **in this message**, you cannot claim it passes.
|
|
17
19
|
|
|
18
|
-
## When to run what — timing matters
|
|
19
|
-
|
|
20
|
-
**Quality tools (PHPStan, Rector, ECS) run ONCE at the very end** — not after every edit.
|
|
21
|
-
Do NOT run quality checks between tasks if you have more work to do.
|
|
22
|
-
Only run the full quality pipeline when you are about to finish all work in the current conversation.
|
|
23
|
-
|
|
24
|
-
**Tests: as targeted as possible, as little as necessary.**
|
|
25
|
-
- During work: run ONLY the specific test class or test case affected by the change.
|
|
26
|
-
Use `--filter=ClassName` or `--filter=test_name` — NEVER the full suite mid-work.
|
|
27
|
-
- Only run tests when you genuinely need to verify behavior (not "just to be safe").
|
|
28
|
-
- Full test suite: ONCE at the very end, before quality tools.
|
|
29
|
-
|
|
30
|
-
**The sequence at the end:**
|
|
31
|
-
1. All code changes are done
|
|
32
|
-
2. Run tests — targeted first (`--filter`), full suite only if targeted passes
|
|
33
|
-
3. Run quality pipeline (PHPStan → Rector → ECS → PHPStan)
|
|
34
|
-
4. Fix any issues from step 2-3
|
|
35
|
-
5. ONLY THEN claim completion or suggest commit/push/PR
|
|
36
|
-
|
|
37
20
|
## The Gate
|
|
38
21
|
|
|
39
22
|
Before claiming ANY work is complete:
|
|
@@ -67,54 +50,16 @@ Skip any step = the claim is unverified.
|
|
|
67
50
|
For specific commands → see the `quality-tools` skill.
|
|
68
51
|
|
|
69
52
|
For the detailed evidence-gate playbook (claim→command mapping, output
|
|
70
|
-
inspection, end-of-work sequence) → see the `verify-
|
|
53
|
+
inspection, end-of-work sequence) → see the `verify-completion-evidence`
|
|
71
54
|
skill.
|
|
72
55
|
|
|
73
|
-
##
|
|
74
|
-
|
|
75
|
-
| Task | Required evidence |
|
|
76
|
-
|---|---|
|
|
77
|
-
| Code change | Tests + PHPStan |
|
|
78
|
-
| New feature | Tests + PHPStan + smoke test |
|
|
79
|
-
| Bug fix | Regression test + full suite |
|
|
80
|
-
| Refactoring | Full suite + PHPStan + Rector |
|
|
81
|
-
| Config/migration | Relevant tests or command output |
|
|
82
|
-
| API endpoint | curl/HTTP response output |
|
|
83
|
-
| Documentation only | No verification needed |
|
|
84
|
-
|
|
85
|
-
**Never accept** as proof: "should work", "looks correct", "logic is sound".
|
|
86
|
-
No captured output = not verified.
|
|
87
|
-
|
|
88
|
-
## Confidence gating
|
|
89
|
-
|
|
90
|
-
State confidence explicitly before claiming completion on non-trivial work.
|
|
91
|
-
|
|
92
|
-
- **High** — runtime path read end-to-end, relevant tests inspected or run,
|
|
93
|
-
no hidden side-effects (queues/events/observers) unaccounted for.
|
|
94
|
-
- **Medium** — main path verified but one gap remains; list the gap in the
|
|
95
|
-
completion message.
|
|
96
|
-
- **Low** — broad implementation NOT allowed; switch to analysis, narrow
|
|
97
|
-
the scope, or ask the user before proceeding.
|
|
98
|
-
|
|
99
|
-
For high-risk areas (auth, tenancy, migrations, queues, dependencies,
|
|
100
|
-
external APIs, data exposure), "high" requires tests AND a cross-layer
|
|
101
|
-
read — not inference from a single file.
|
|
102
|
-
|
|
103
|
-
## Break-glass reduction
|
|
104
|
-
|
|
105
|
-
During a live production incident the verification gate is **narrowed**,
|
|
106
|
-
never skipped. Break-glass requires explicit user invocation (e.g.
|
|
107
|
-
`break-glass: true`, "this is a hotfix"). Never enter it unilaterally.
|
|
108
|
-
|
|
109
|
-
Minimum evidence:
|
|
110
|
-
|
|
111
|
-
- **Targeted test(s)** covering the exact regression — zero tests is not
|
|
112
|
-
acceptable.
|
|
113
|
-
- **Smoke check** of the fixed path (curl, manual trigger, log tail) with
|
|
114
|
-
output captured in the message.
|
|
115
|
-
- **Explicit list of skipped validations** and a **follow-up commitment**
|
|
116
|
-
(ticket or PR line) to run them within 24h.
|
|
56
|
+
## Mechanics — when to run what, per-task evidence, confidence, break-glass
|
|
117
57
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
58
|
+
The decision logic for **when** to run quality tools vs. tests, the
|
|
59
|
+
per-task-type minimum-evidence table, confidence gating (High /
|
|
60
|
+
Medium / Low), and the break-glass reduction during live incidents
|
|
61
|
+
all live in
|
|
62
|
+
[`verification-mechanics`](../contexts/execution/verification-mechanics.md).
|
|
63
|
+
The Iron Law and the Gate above are the obligation surface; the
|
|
64
|
+
mechanics context is the lookup material the agent pulls when the
|
|
65
|
+
gate fires.
|
|
@@ -16,6 +16,13 @@ Checkbox states:
|
|
|
16
16
|
Percentage = done / (done + open). Deferred and cancelled do not count towards
|
|
17
17
|
"open" (they are explicit decisions).
|
|
18
18
|
|
|
19
|
+
Roadmap visibility is binary:
|
|
20
|
+
|
|
21
|
+
- No `status:` frontmatter (or `status: ready`) → executable, listed.
|
|
22
|
+
- `status: draft` → hidden from the dashboard entirely (not counted,
|
|
23
|
+
not listed). Drafts become visible the moment the frontmatter flag
|
|
24
|
+
is removed or flipped to `ready`.
|
|
25
|
+
|
|
19
26
|
Invocation (from project root):
|
|
20
27
|
python3 .augment/scripts/update_roadmap_progress.py # rewrite
|
|
21
28
|
python3 .augment/scripts/update_roadmap_progress.py --check # CI: exit 1 if stale
|
|
@@ -37,17 +44,21 @@ from pathlib import Path
|
|
|
37
44
|
|
|
38
45
|
CHECKBOX_RE = re.compile(r"^\s*[-*]\s+\[([ xX~\-])\]\s", re.MULTILINE)
|
|
39
46
|
# H2 or H3 heading starting with "Phase <id>"; separator (colon, em-dash,
|
|
40
|
-
# hyphen, or whitespace) and name are optional. The id supports
|
|
47
|
+
# hyphen, or whitespace) and name are optional. The id supports four
|
|
41
48
|
# project-level conventions:
|
|
42
49
|
# - numeric `Phase 0`, `Phase 10`
|
|
50
|
+
# - numeric+sub `Phase 2a`, `Phase 10c` (digit run + single
|
|
51
|
+
# lowercase letter for sub-phases)
|
|
43
52
|
# - roman I..XXXIX `Phase I`, `Phase III`
|
|
44
53
|
# - letter track `Phase A`, `Phase B1` (single uppercase letter,
|
|
45
54
|
# optional trailing digits for sub-track IDs)
|
|
46
55
|
# Roman is capped at [IVX]+ (up to XXXIX) on purpose: the broader
|
|
47
56
|
# [IVXLCDM]+ would also match all-caps words like `Phase LIVE`. Letter
|
|
48
57
|
# is [A-Z] not [A-Za-z] so `## Phase overview` stays a non-phase anchor.
|
|
58
|
+
# The numeric+sub branch keeps the lowercase-letter restriction so
|
|
59
|
+
# `Phase abc` (no digits) still falls through to the rejection branch.
|
|
49
60
|
PHASE_RE = re.compile(
|
|
50
|
-
r"^(#{2,3})\s+Phase\s+(\d
|
|
61
|
+
r"^(#{2,3})\s+Phase\s+(\d+[a-z]?|[IVX]+|[A-Z](?:\d+)?)"
|
|
51
62
|
r"(?:[\s:\u2014\-]+(.*?))?\s*$",
|
|
52
63
|
re.MULTILINE,
|
|
53
64
|
)
|
|
@@ -56,12 +67,20 @@ EXCLUDE_NAMES = {"template.md", "README.md", "progress.md", "roadmaps-progress.m
|
|
|
56
67
|
EXCLUDE_PREFIXES = ("open-questions",)
|
|
57
68
|
EXCLUDE_DIRS = {"archive", "skipped"}
|
|
58
69
|
|
|
70
|
+
# Frontmatter — minimal YAML block at the top of a roadmap. Used to hide
|
|
71
|
+
# drafts (`status: draft`) from the dashboard. Anything else (no
|
|
72
|
+
# frontmatter, `status: ready`, unknown values) counts as a normal
|
|
73
|
+
# executable roadmap.
|
|
74
|
+
FRONTMATTER_RE = re.compile(r"\A---\n(.*?)\n---\s*\n", re.DOTALL)
|
|
75
|
+
DRAFT_VALUES = frozenset({"draft"})
|
|
76
|
+
|
|
59
77
|
|
|
60
78
|
@dataclass
|
|
61
79
|
class PhaseStats:
|
|
62
80
|
# Phase identifier as it appears in the heading: numeric ("0"),
|
|
63
|
-
# roman ("III"), or letter-track ("A", "B1").
|
|
64
|
-
# non-numeric conventions survive round-tripping
|
|
81
|
+
# numeric+sub ("2a"), roman ("III"), or letter-track ("A", "B1").
|
|
82
|
+
# Kept as a string so non-numeric conventions survive round-tripping
|
|
83
|
+
# through render().
|
|
65
84
|
id: str
|
|
66
85
|
name: str
|
|
67
86
|
done: int = 0
|
|
@@ -130,6 +149,37 @@ class RoadmapStats:
|
|
|
130
149
|
return round(self.done * 100 / self.total_active) if self.total_active else 0
|
|
131
150
|
|
|
132
151
|
|
|
152
|
+
def parse_frontmatter(text: str) -> dict[str, str]:
|
|
153
|
+
"""Parse a leading YAML frontmatter block. String scalars only.
|
|
154
|
+
|
|
155
|
+
Returns an empty dict if no frontmatter is present. Handles quoted and
|
|
156
|
+
unquoted values; ignores blank lines and comments. Nested keys, lists,
|
|
157
|
+
and multiline scalars are out of scope — the dashboard only needs flat
|
|
158
|
+
string flags (`status`, `mode`).
|
|
159
|
+
"""
|
|
160
|
+
m = FRONTMATTER_RE.match(text)
|
|
161
|
+
if not m:
|
|
162
|
+
return {}
|
|
163
|
+
fm: dict[str, str] = {}
|
|
164
|
+
for line in m.group(1).splitlines():
|
|
165
|
+
stripped = line.strip()
|
|
166
|
+
if not stripped or stripped.startswith("#") or ":" not in line:
|
|
167
|
+
continue
|
|
168
|
+
key, _, value = line.partition(":")
|
|
169
|
+
fm[key.strip()] = value.strip().strip('"').strip("'")
|
|
170
|
+
return fm
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def is_draft(fm: dict[str, str]) -> bool:
|
|
174
|
+
"""Return True when frontmatter declares the roadmap as draft.
|
|
175
|
+
|
|
176
|
+
`status: draft` is the single supported way to hide a roadmap from
|
|
177
|
+
the dashboard. Everything else (no frontmatter, `status: ready`,
|
|
178
|
+
unknown values) counts as an executable roadmap.
|
|
179
|
+
"""
|
|
180
|
+
return fm.get("status", "").lower() in DRAFT_VALUES
|
|
181
|
+
|
|
182
|
+
|
|
133
183
|
def is_roadmap_candidate(path: Path) -> bool:
|
|
134
184
|
if path.name in EXCLUDE_NAMES:
|
|
135
185
|
return False
|
|
@@ -180,10 +230,14 @@ def bar(pct: int, width: int = 10) -> str:
|
|
|
180
230
|
|
|
181
231
|
|
|
182
232
|
def collect(roadmap_root: Path) -> list[RoadmapStats]:
|
|
233
|
+
"""Collect executable roadmaps. Drafts are excluded."""
|
|
183
234
|
results: list[RoadmapStats] = []
|
|
184
235
|
for path in sorted(roadmap_root.rglob("*.md")):
|
|
185
236
|
if not path.is_file() or not is_roadmap_candidate(path):
|
|
186
237
|
continue
|
|
238
|
+
text = path.read_text(encoding="utf-8")
|
|
239
|
+
if is_draft(parse_frontmatter(text)):
|
|
240
|
+
continue
|
|
187
241
|
stats = parse_roadmap(path, roadmap_root)
|
|
188
242
|
if stats:
|
|
189
243
|
results.append(stats)
|
|
@@ -205,14 +259,17 @@ def render(roadmaps: list[RoadmapStats]) -> str:
|
|
|
205
259
|
overall_pct = round(total_done * 100 / total_active) if total_active else 0
|
|
206
260
|
lines: list[str] = []
|
|
207
261
|
lines.append("# Roadmap Progress\n")
|
|
262
|
+
header_meta = (
|
|
263
|
+
f"> {len(roadmaps)} open roadmap"
|
|
264
|
+
f"{'s' if len(roadmaps) != 1 else ''}"
|
|
265
|
+
" · [roadmaps/](roadmaps/) · [archive/](roadmaps/archive/) · "
|
|
266
|
+
"[skipped/](roadmaps/skipped/)\n"
|
|
267
|
+
)
|
|
208
268
|
lines.append(
|
|
209
269
|
"> Auto-generated by `.augment/scripts/update_roadmap_progress.py`. "
|
|
210
270
|
"Do not edit — regenerated on every roadmap-create, -execute, or "
|
|
211
271
|
"completion change (last-modified timestamp lives in git history).\n>\n"
|
|
212
|
-
|
|
213
|
-
f"{'s' if len(roadmaps) != 1 else ''} · "
|
|
214
|
-
"[roadmaps/](roadmaps/) · [archive/](roadmaps/archive/) · "
|
|
215
|
-
"[skipped/](roadmaps/skipped/)\n"
|
|
272
|
+
+ header_meta
|
|
216
273
|
)
|
|
217
274
|
lines.append("## Overall\n")
|
|
218
275
|
lines.append(f"**{total_done} / {total_active} steps done · {overall_pct}%**\n")
|