@event4u/agent-config 1.19.0 → 1.21.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 +14 -10
- package/.agent-src/commands/agents.md +1 -1
- package/.agent-src/commands/bug-fix.md +1 -1
- package/.agent-src/commands/bug-investigate.md +2 -2
- package/.agent-src/commands/chat-history/import.md +166 -0
- package/.agent-src/commands/chat-history/learn.md +178 -0
- package/.agent-src/commands/chat-history/show.md +17 -18
- package/.agent-src/commands/chat-history.md +26 -25
- package/.agent-src/commands/compress.md +12 -0
- package/.agent-src/commands/context/create.md +2 -2
- package/.agent-src/commands/context.md +1 -1
- package/.agent-src/commands/copilot-agents.md +1 -1
- package/.agent-src/commands/council/default.md +21 -12
- package/.agent-src/commands/council.md +1 -1
- package/.agent-src/commands/create-pr.md +28 -8
- 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 +3 -3
- package/.agent-src/commands/feature.md +1 -1
- package/.agent-src/commands/fix/seeder.md +2 -2
- package/.agent-src/commands/fix.md +1 -1
- package/.agent-src/commands/jira-ticket.md +1 -1
- package/.agent-src/commands/judge.md +2 -2
- package/.agent-src/commands/memory.md +1 -1
- package/.agent-src/commands/mode.md +5 -5
- package/.agent-src/commands/module.md +1 -1
- package/.agent-src/commands/onboard.md +4 -4
- package/.agent-src/commands/optimize/augmentignore.md +1 -1
- package/.agent-src/commands/optimize-prompt.md +61 -0
- package/.agent-src/commands/optimize.md +1 -1
- package/.agent-src/commands/override.md +1 -1
- package/.agent-src/commands/review-changes.md +1 -1
- package/.agent-src/commands/review-routing.md +1 -1
- package/.agent-src/commands/roadmap.md +1 -1
- package/.agent-src/commands/set-cost-profile.md +3 -3
- package/.agent-src/commands/sync-agent-settings.md +2 -2
- package/.agent-src/commands/sync-gitignore.md +1 -1
- package/.agent-src/commands/tests/create.md +2 -2
- package/.agent-src/commands/tests.md +1 -1
- package/.agent-src/commands/threat-model.md +4 -4
- package/.agent-src/contexts/authority/commit-mechanics.md +14 -1
- package/.agent-src/contexts/authority/destructive-mechanics.md +14 -1
- package/.agent-src/contexts/authority/scope-mechanics.md +5 -0
- package/.agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +76 -0
- package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +76 -0
- package/.agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +4 -4
- package/.agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +98 -0
- package/.agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +93 -0
- package/.agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +125 -9
- package/.agent-src/contexts/execution/autonomy-mechanics.md +44 -0
- package/.agent-src/contexts/model-recommendations.md +2 -2
- package/.agent-src/contexts/override-system.md +1 -1
- package/.agent-src/personas/product-owner.md +2 -2
- package/.agent-src/personas/qa.md +1 -1
- package/.agent-src/rules/agent-authority.md +5 -6
- package/.agent-src/rules/agent-docs.md +11 -53
- package/.agent-src/rules/analysis-skill-routing.md +10 -40
- package/.agent-src/rules/architecture.md +6 -1
- package/.agent-src/rules/artifact-drafting-protocol.md +5 -0
- package/.agent-src/rules/artifact-engagement-recording.md +23 -59
- package/.agent-src/rules/ask-when-uncertain.md +24 -47
- package/.agent-src/rules/augment-portability.md +14 -62
- package/.agent-src/rules/augment-source-of-truth.md +10 -1
- package/.agent-src/rules/autonomous-execution.md +17 -98
- package/.agent-src/rules/capture-learnings.md +9 -80
- package/.agent-src/rules/cli-output-handling.md +12 -42
- package/.agent-src/rules/command-suggestion-policy.md +25 -73
- package/.agent-src/rules/commit-conventions.md +9 -58
- package/.agent-src/rules/commit-policy.md +16 -47
- package/.agent-src/rules/context-hygiene.md +5 -0
- package/.agent-src/rules/direct-answers.md +21 -42
- package/.agent-src/rules/docker-commands.md +11 -45
- package/.agent-src/rules/docs-sync.md +10 -56
- package/.agent-src/rules/downstream-changes.md +5 -0
- package/.agent-src/rules/e2e-testing.md +9 -44
- package/.agent-src/rules/guidelines.md +13 -75
- package/.agent-src/rules/improve-before-implement.md +10 -2
- package/.agent-src/rules/language-and-tone.md +35 -69
- package/.agent-src/rules/laravel-translations.md +11 -40
- package/.agent-src/rules/markdown-safe-codeblocks.md +4 -0
- package/.agent-src/rules/minimal-safe-diff.md +4 -0
- package/.agent-src/rules/missing-tool-handling.md +4 -0
- package/.agent-src/rules/model-recommendation.md +9 -61
- package/.agent-src/rules/no-attribution-footers.md +53 -0
- package/.agent-src/rules/no-cheap-questions.md +11 -27
- package/.agent-src/rules/no-council-references.md +76 -0
- package/.agent-src/rules/no-roadmap-references.md +8 -1
- package/.agent-src/rules/non-destructive-by-default.md +13 -43
- package/.agent-src/rules/onboarding-gate.md +9 -117
- package/.agent-src/rules/package-ci-checks.md +10 -37
- package/.agent-src/rules/php-coding.md +10 -55
- package/.agent-src/rules/preservation-guard.md +9 -0
- package/.agent-src/rules/review-routing-awareness.md +9 -97
- package/.agent-src/rules/reviewer-awareness.md +8 -83
- package/.agent-src/rules/roadmap-progress-sync.md +7 -170
- package/.agent-src/rules/role-mode-adherence.md +6 -2
- package/.agent-src/rules/rule-type-governance.md +8 -66
- package/.agent-src/rules/runtime-safety.md +5 -0
- package/.agent-src/rules/scope-control.md +17 -62
- package/.agent-src/rules/security-sensitive-stop.md +7 -1
- package/.agent-src/rules/size-enforcement.md +6 -1
- package/.agent-src/rules/skill-improvement-trigger.md +9 -49
- package/.agent-src/rules/skill-quality.md +7 -64
- package/.agent-src/rules/slash-command-routing-policy.md +11 -63
- package/.agent-src/rules/think-before-action.md +22 -87
- package/.agent-src/rules/token-efficiency.md +10 -74
- package/.agent-src/rules/token-optimizer-maintenance.md +68 -0
- package/.agent-src/rules/tool-safety.md +4 -0
- package/.agent-src/rules/ui-audit-gate.md +25 -61
- package/.agent-src/rules/upstream-proposal.md +9 -67
- package/.agent-src/rules/user-interaction.md +25 -95
- package/.agent-src/rules/verify-before-complete.md +1 -1
- package/.agent-src/skills/agent-docs-writing/SKILL.md +1 -1
- package/.agent-src/skills/ai-council/SKILL.md +69 -5
- package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
- package/.agent-src/skills/analysis-skill-router/SKILL.md +3 -3
- package/.agent-src/skills/artisan-commands/SKILL.md +2 -2
- package/.agent-src/skills/authz-review/SKILL.md +1 -1
- package/.agent-src/skills/aws-infrastructure/SKILL.md +5 -5
- package/.agent-src/skills/blast-radius-analyzer/SKILL.md +8 -8
- package/.agent-src/skills/bug-analyzer/SKILL.md +5 -5
- package/.agent-src/skills/code-refactoring/SKILL.md +4 -4
- package/.agent-src/skills/code-review/SKILL.md +2 -2
- package/.agent-src/skills/command-writing/SKILL.md +11 -0
- package/.agent-src/skills/composer-packages/SKILL.md +2 -2
- package/.agent-src/skills/context-authoring/SKILL.md +11 -0
- package/.agent-src/skills/context-document/SKILL.md +1 -1
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +23 -0
- package/.agent-src/skills/copilot-config/SKILL.md +1 -1
- package/.agent-src/skills/dcf-modeling/SKILL.md +89 -0
- package/.agent-src/skills/dependency-upgrade/SKILL.md +2 -2
- package/.agent-src/skills/devcontainer/SKILL.md +2 -2
- package/.agent-src/skills/developer-like-execution/SKILL.md +1 -1
- package/.agent-src/skills/docker/SKILL.md +1 -1
- package/.agent-src/skills/dto-creator/SKILL.md +1 -1
- package/.agent-src/skills/estimate-ticket/SKILL.md +2 -2
- package/.agent-src/skills/fe-design/SKILL.md +4 -4
- package/.agent-src/skills/feature-planning/SKILL.md +5 -5
- package/.agent-src/skills/funnel-analysis/SKILL.md +100 -0
- package/.agent-src/skills/laravel/SKILL.md +1 -1
- package/.agent-src/skills/laravel-notifications/SKILL.md +5 -5
- package/.agent-src/skills/laravel-pennant/SKILL.md +1 -1
- package/.agent-src/skills/laravel-pulse/SKILL.md +4 -4
- package/.agent-src/skills/laravel-reverb/SKILL.md +2 -2
- package/.agent-src/skills/laravel-scheduling/SKILL.md +1 -1
- package/.agent-src/skills/md-language-check/SKILL.md +1 -1
- package/.agent-src/skills/migration-creator/SKILL.md +7 -7
- package/.agent-src/skills/multi-tenancy/SKILL.md +8 -8
- package/.agent-src/skills/okr-tree-modeling/SKILL.md +93 -0
- package/.agent-src/skills/performance-analysis/SKILL.md +3 -3
- package/.agent-src/skills/pest-testing/SKILL.md +6 -6
- package/.agent-src/skills/php-service/SKILL.md +2 -2
- package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +3 -3
- package/.agent-src/skills/project-analysis-react/SKILL.md +1 -1
- package/.agent-src/skills/project-analysis-symfony/SKILL.md +1 -1
- package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +2 -2
- package/.agent-src/skills/project-analyzer/SKILL.md +4 -4
- package/.agent-src/skills/prompt-optimizer/SKILL.md +108 -0
- package/.agent-src/skills/readme-reviewer/SKILL.md +1 -1
- package/.agent-src/skills/rice-prioritization/SKILL.md +100 -0
- package/.agent-src/skills/rule-writing/SKILL.md +33 -0
- package/.agent-src/skills/sentry-integration/SKILL.md +1 -1
- package/.agent-src/skills/skill-writing/SKILL.md +14 -0
- package/.agent-src/skills/subagent-orchestration/SKILL.md +34 -2
- package/.agent-src/skills/terraform/SKILL.md +2 -2
- package/.agent-src/skills/terragrunt/SKILL.md +8 -8
- package/.agent-src/skills/test-performance/SKILL.md +5 -5
- package/.agent-src/skills/threat-modeling/SKILL.md +2 -2
- package/.agent-src/skills/token-optimizer/SKILL.md +110 -0
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +104 -0
- package/.agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/.agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/.agent-src/templates/AGENTS.md +1 -1
- package/.agent-src/templates/agent-settings.md +25 -41
- package/.agent-src/templates/contexts/tenant-boundaries.md +2 -2
- package/.agent-src/templates/contexts.md +1 -1
- package/.agent-src/templates/copilot-instructions.md +21 -0
- package/.agent-src/templates/copilot-review-instructions.md +76 -0
- package/.agent-src/templates/features.md +1 -1
- package/.agent-src/templates/rule.md +127 -0
- package/.agent-src/templates/scripts/work_engine/hook_bootstrap.py +7 -5
- package/.agent-src/templates/scripts/work_engine/hooks/__init__.py +0 -4
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +0 -4
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.py +7 -51
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.py +1 -2
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.py +1 -2
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +2 -3
- package/.agent-src/templates/skill.md +30 -1
- package/.claude-plugin/marketplace.json +11 -4
- package/AGENTS.md +71 -3
- package/CHANGELOG.md +180 -3
- package/README.md +24 -23
- package/config/agent-settings.template.yml +63 -23
- package/config/gitignore-block.txt +11 -4
- package/docs/architecture.md +84 -3
- package/docs/catalog.md +23 -11
- package/docs/contracts/adr-chat-history-split.md +10 -1
- package/docs/contracts/agent-memory-contract.md +1 -1
- package/docs/contracts/command-clusters.md +1 -1
- package/docs/contracts/context-paths.md +2 -1
- package/docs/contracts/cross-wing-handoff.md +133 -0
- package/docs/contracts/file-ownership-matrix.json +678 -609
- package/docs/contracts/hook-architecture-v1.md +8 -1
- package/docs/contracts/iron-law-overrides.txt +25 -0
- package/docs/contracts/kernel-membership.md +273 -0
- package/docs/contracts/load-context-schema.md +26 -11
- package/docs/contracts/memory-visibility-v1.md +8 -24
- package/docs/contracts/pilot/agent-authority.md +24 -0
- package/docs/contracts/pilot/direct-answers.md +70 -0
- package/docs/contracts/pilot/language-and-tone.md +63 -0
- package/docs/contracts/rule-classification.md +170 -0
- package/docs/contracts/rule-router.md +153 -0
- package/docs/customization.md +18 -7
- package/docs/decisions/ADR-001-kernel-swap-deferred.md +109 -0
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +124 -0
- package/docs/decisions/ADR-rule-kernel-and-router.md +122 -0
- package/docs/getting-started.md +19 -27
- package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +176 -0
- package/docs/guidelines/agent-infra/rule-type-governance.md +73 -0
- package/docs/guidelines/agent-infra/size-and-scope.md +13 -2
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +119 -0
- package/docs/guidelines/augment-portability-patterns.md +68 -0
- package/docs/guidelines/php/php-coding-patterns.md +62 -0
- package/docs/hook-payload-capture.md +221 -0
- package/docs/migrations/commands-1.15.0.md +17 -12
- package/docs/skills-catalog.md +5 -4
- package/llms.txt +4 -3
- package/package.json +1 -1
- package/scripts/_p43_bodies.py +235 -0
- package/scripts/_p43_compress.py +118 -0
- package/scripts/_p4_migrate.py +199 -0
- package/scripts/_pilot_council_question.py +57 -0
- package/scripts/_pilot_measure.py +53 -0
- package/scripts/agent-config +1 -1
- package/scripts/ai_council/_default_prices.py +4 -4
- package/scripts/ai_council/clients.py +1 -1
- package/scripts/ai_council/modes.py +3 -4
- package/scripts/ai_council/pricing.py +10 -9
- package/scripts/ai_council/session.py +107 -5
- package/scripts/build_linear_digest.py +3 -5
- package/scripts/build_rule_trigger_matrix.py +1 -9
- package/scripts/chat_history.py +952 -596
- package/scripts/check_always_budget.py +39 -6
- package/scripts/check_compressed_paths.py +213 -0
- package/scripts/check_compression.py +15 -0
- package/scripts/check_context_paths.py +1 -0
- package/scripts/check_council_layout.py +105 -0
- package/scripts/check_council_references.py +145 -0
- package/scripts/check_portability.py +2 -0
- package/scripts/check_references.py +14 -2
- package/scripts/check_token_optimizer_freshness.py +131 -0
- package/scripts/compile_router.py +148 -0
- package/scripts/compress.py +219 -11
- package/scripts/council_cli.py +63 -9
- package/scripts/council_prune.py +81 -0
- package/scripts/count_token_optimizer_usage.sh +54 -0
- package/scripts/hook_manifest.yaml +33 -0
- package/scripts/hooks/augment-chat-history.sh +10 -0
- package/scripts/hooks/cowork-dispatcher.sh +98 -0
- package/scripts/hooks/dispatch_hook.py +35 -0
- package/scripts/hooks_status.py +12 -1
- package/scripts/install-hooks.sh +2 -2
- package/scripts/install.sh +81 -2
- package/scripts/iron_law_sha.py +98 -0
- package/scripts/lint_handoffs.py +214 -0
- package/scripts/lint_hook_manifest.py +2 -1
- package/scripts/lint_load_context.py +35 -5
- package/scripts/measure_rule_budget.py +314 -0
- package/scripts/prototype_lint_contradictions.py +150 -0
- package/scripts/redact_hook_capture.py +148 -0
- package/scripts/schemas/rule.schema.json +55 -6
- package/scripts/schemas/skill.schema.json +5 -0
- package/scripts/skill_linter.py +359 -7
- package/scripts/smoke_path_resolution.py +93 -0
- package/scripts/update_prices.py +3 -3
- package/scripts/validate_frontmatter.py +41 -1
- package/.agent-src/commands/chat-history/checkpoint.md +0 -126
- package/.agent-src/commands/chat-history/clear.md +0 -103
- package/.agent-src/commands/chat-history/resume.md +0 -183
- package/.agent-src/contexts/communication/rules-auto/artifact-engagement-recording-mechanics.md +0 -72
- package/.agent-src/contexts/communication/rules-auto/augment-portability-mechanics.md +0 -79
- package/.agent-src/contexts/communication/rules-auto/cli-output-handling-mechanics.md +0 -87
- package/.agent-src/contexts/communication/rules-auto/command-suggestion-policy-mechanics.md +0 -62
- package/.agent-src/contexts/communication/rules-auto/docs-sync-mechanics.md +0 -78
- package/.agent-src/contexts/communication/rules-auto/package-ci-checks-mechanics.md +0 -85
- package/.agent-src/contexts/communication/rules-auto/review-routing-awareness-mechanics.md +0 -65
- package/.agent-src/contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md +0 -78
- package/.agent-src/contexts/communication/rules-auto/ui-audit-gate-mechanics.md +0 -53
- package/.agent-src/rules/chat-history-cadence.md +0 -143
- package/.agent-src/rules/chat-history-ownership.md +0 -124
- package/.agent-src/rules/chat-history-visibility.md +0 -97
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_heartbeat.py +0 -50
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_turn_check.py +0 -49
- package/scripts/check_phase_coupling.py +0 -148
- /package/{docs → .agent-src/contexts}/contracts/artifact-engagement-flow.md +0 -0
- /package/{docs → .agent-src/contexts}/contracts/command-suggestion-flow.md +0 -0
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: "auto"
|
|
3
3
|
tier: "2b"
|
|
4
|
-
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"
|
|
5
4
|
alwaysApply: false
|
|
5
|
+
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"
|
|
6
6
|
source: package
|
|
7
|
-
|
|
8
|
-
-
|
|
7
|
+
triggers:
|
|
8
|
+
- path_prefix: "resources/views/"
|
|
9
|
+
- path_prefix: "resources/js/"
|
|
10
|
+
- keyword: "component"
|
|
11
|
+
- keyword: "design token"
|
|
12
|
+
routes_to:
|
|
13
|
+
- "skill:existing-ui-audit"
|
|
9
14
|
---
|
|
10
15
|
|
|
11
|
-
# UI
|
|
16
|
+
# UI Audit Gate
|
|
12
17
|
|
|
13
18
|
Defense-in-depth twin of the dispatcher gate in
|
|
14
19
|
[`directives/ui/audit.py`](../templates/scripts/work_engine/directives/ui/audit.py).
|
|
15
|
-
The dispatcher refuses to advance past `refine` without
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
The dispatcher refuses to advance past `refine` without `state.ui_audit`;
|
|
21
|
+
this rule refuses the write even when the agent acts outside the dispatcher.
|
|
22
|
+
|
|
23
|
+
Body migrated to [`skill:existing-ui-audit`](../skills/existing-ui-audit/SKILL.md)
|
|
24
|
+
(per P4 of `road-to-kernel-and-router.md`). Trigger-set above activates this
|
|
25
|
+
routing under the `balanced` and `full` profiles.
|
|
20
26
|
|
|
21
27
|
## The Iron Law
|
|
22
28
|
|
|
@@ -25,45 +31,6 @@ NO NEW COMPONENT, SCREEN, PARTIAL, OR PAGE WITHOUT AUDIT FINDINGS.
|
|
|
25
31
|
EXISTING-UI-AUDIT RUNS FIRST. ALWAYS.
|
|
26
32
|
```
|
|
27
33
|
|
|
28
|
-
Skipping the audit is the single biggest source of duplicated
|
|
29
|
-
components and drift from project tokens. The audit is cheap (60 s
|
|
30
|
-
on a primed cache); the cost of skipping is a refactor.
|
|
31
|
-
|
|
32
|
-
## When this rule activates
|
|
33
|
-
|
|
34
|
-
Before writing or editing any non-trivial UI surface:
|
|
35
|
-
|
|
36
|
-
- New page / screen / route component
|
|
37
|
-
- New Livewire / Flux / Blade / React / Vue / Svelte component or partial
|
|
38
|
-
- Major edit to an existing screen (new section, new state, new layout band)
|
|
39
|
-
|
|
40
|
-
Recognise the trigger from wording even when nobody says "audit":
|
|
41
|
-
"add a dashboard tile", "build a settings panel", "neue Komponente
|
|
42
|
-
für …", "render the orders table", "create the empty state for …".
|
|
43
|
-
|
|
44
|
-
## Allow-list — when to skip
|
|
45
|
-
|
|
46
|
-
Skip only when **all** hold:
|
|
47
|
-
|
|
48
|
-
- `directive_set == "ui-trivial"` (set by Phase 1's intent classifier).
|
|
49
|
-
- The change is provably bounded: ≤ 1 file, ≤ 5 changed lines, no
|
|
50
|
-
new component, no new state, no new dependency.
|
|
51
|
-
|
|
52
|
-
Any precondition fails at edit time → stop, reclassify as
|
|
53
|
-
`ui-improve`, re-enter the gate. Backend-only edits and
|
|
54
|
-
documentation work were never in scope for this rule.
|
|
55
|
-
|
|
56
|
-
## What to do when the gate fires
|
|
57
|
-
|
|
58
|
-
1. Stop. Do not open an editor on a component file.
|
|
59
|
-
2. Run [`existing-ui-audit`](../skills/existing-ui-audit/SKILL.md);
|
|
60
|
-
it writes the result to `state.ui_audit`.
|
|
61
|
-
3. On rebound, the dispatcher enters `design` with the audit as
|
|
62
|
-
defaults in the design-brief halt.
|
|
63
|
-
4. Greenfield → present the numbered scaffold / bare /
|
|
64
|
-
external-reference halt **before** code; record the pick in
|
|
65
|
-
`state.ui_audit.greenfield_decision`.
|
|
66
|
-
|
|
67
34
|
## What "audit findings" means
|
|
68
35
|
|
|
69
36
|
`state.ui_audit` is a non-empty dict carrying at least one of:
|
|
@@ -71,23 +38,20 @@ documentation work were never in scope for this rule.
|
|
|
71
38
|
- `components_found` — inventory entries from `existing-ui-audit`.
|
|
72
39
|
- `greenfield: true` plus `greenfield_decision` ∈
|
|
73
40
|
`{scaffold, bare, external_reference}`.
|
|
74
|
-
- Legacy `components` alias — back-compat
|
|
41
|
+
- Legacy `components` alias — back-compat.
|
|
42
|
+
|
|
43
|
+
`null` or `{}` is **not** findings; empty dict is rejected on purpose.
|
|
75
44
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
45
|
+
## Allow-list — `ui-trivial`
|
|
46
|
+
|
|
47
|
+
Skip only when **all** hold:
|
|
48
|
+
|
|
49
|
+
- `directive_set == "ui-trivial"`.
|
|
50
|
+
- ≤ 1 file, ≤ 5 changed lines, no new component, no new state.
|
|
79
51
|
|
|
80
52
|
## Failure modes
|
|
81
53
|
|
|
82
54
|
- Writing the component first and "thinking about reuse later".
|
|
83
|
-
- Citing a similar-looking component from memory without verifying.
|
|
55
|
+
- Citing a similar-looking component from memory without verifying via the audit.
|
|
84
56
|
- Treating `state.ui_audit = {}` as "audit ran, found nothing".
|
|
85
57
|
- Bypassing the gate for "just one tile".
|
|
86
|
-
|
|
87
|
-
## Lookup material — see mechanics
|
|
88
|
-
|
|
89
|
-
The full failure-mode catalog, cross-rule interactions, and the
|
|
90
|
-
cloud-surface adaptation live in
|
|
91
|
-
[`contexts/communication/rules-auto/ui-audit-gate-mechanics.md`](../contexts/communication/rules-auto/ui-audit-gate-mechanics.md).
|
|
92
|
-
Pull it whenever the gate fires or the agent is unsure whether a
|
|
93
|
-
recorded `state.ui_audit` qualifies.
|
|
@@ -2,76 +2,18 @@
|
|
|
2
2
|
type: "auto"
|
|
3
3
|
tier: "2a"
|
|
4
4
|
description: "After creating or significantly improving a skill, rule, guideline, or command — ask if it should be contributed upstream to the shared package"
|
|
5
|
-
alwaysApply: false
|
|
6
5
|
source: package
|
|
6
|
+
triggers:
|
|
7
|
+
- phrase: "after creating"
|
|
8
|
+
- phrase: "after improving"
|
|
9
|
+
- keyword: "upstream"
|
|
10
|
+
routes_to:
|
|
11
|
+
- "skill:upstream-contribute"
|
|
7
12
|
---
|
|
8
13
|
|
|
9
14
|
# Upstream Proposal
|
|
10
15
|
|
|
11
|
-
|
|
16
|
+
**Iron Law.** After creating or significantly improving a skill / rule / guideline / command, ask whether to upstream it.
|
|
12
17
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- Skill (new or major update)
|
|
16
|
-
- Rule (new or major update)
|
|
17
|
-
- Guideline (new or major update)
|
|
18
|
-
- Command (new or major update)
|
|
19
|
-
|
|
20
|
-
**Also activate when:**
|
|
21
|
-
|
|
22
|
-
- A project-specific skill/rule could be **generalized** to benefit all consumers
|
|
23
|
-
- An override was created that improves on the shared version
|
|
24
|
-
- A learning was captured that produced a high-quality new artifact
|
|
25
|
-
|
|
26
|
-
**Do NOT activate when:**
|
|
27
|
-
|
|
28
|
-
- Working inside the agent-config package itself (no self-referential proposals)
|
|
29
|
-
- The change is a trivial fix (typo, formatting)
|
|
30
|
-
- The user already declined upstream for this exact item in this conversation
|
|
31
|
-
|
|
32
|
-
## Consent check
|
|
33
|
-
|
|
34
|
-
**⛔ MANDATORY: Always ask the user. Never skip this step.**
|
|
35
|
-
|
|
36
|
-
After completing the creation/improvement, evaluate:
|
|
37
|
-
|
|
38
|
-
1. **Is this universal?** Could other projects benefit from this?
|
|
39
|
-
2. **Is this generalizable?** Even if project-specific, can it be abstracted?
|
|
40
|
-
3. **Is this high-quality?** Does it pass the promotion gate from `capture-learnings`?
|
|
41
|
-
|
|
42
|
-
If ANY of these is YES → propose to the user:
|
|
43
|
-
|
|
44
|
-
### For universal content (directly applicable):
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
> 🔄 The [skill/rule/guideline] `{name}` you just created could benefit all projects
|
|
48
|
-
> using the shared agent-config package.
|
|
49
|
-
>
|
|
50
|
-
> 1. Yes — contribute upstream via PR
|
|
51
|
-
> 2. No — keep project-local only
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### For project-specific content (needs generalization):
|
|
55
|
-
|
|
56
|
-
```
|
|
57
|
-
> 🔄 The [skill/rule/guideline] `{name}` is project-specific, but I could generalize
|
|
58
|
-
> it for the shared package. [Brief explanation of what would change]
|
|
59
|
-
>
|
|
60
|
-
> 1. Yes — generalize and contribute upstream
|
|
61
|
-
> 2. No — keep project-local only
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## After user response
|
|
65
|
-
|
|
66
|
-
- **User picks 1** → invoke `upstream-contribute` skill (which has its own consent gate for repo access)
|
|
67
|
-
- **User picks 2** → stop. Do NOT ask again for this item.
|
|
68
|
-
- **Max 1 proposal per created artifact** — never nag.
|
|
69
|
-
|
|
70
|
-
## Important
|
|
71
|
-
|
|
72
|
-
- **Consent is non-negotiable** — the user decides, always.
|
|
73
|
-
- **Do NOT batch proposals** — ask for each artifact separately.
|
|
74
|
-
- **Do NOT interrupt flow** — only propose AFTER the creation/improvement is complete.
|
|
75
|
-
- **Do NOT propose for trivial changes** — formatting, typos, comment updates.
|
|
76
|
-
- **Respect "no"** — if the user declines, do not revisit unless they bring it up.
|
|
77
|
-
- **Token efficiency** — this rule costs zero tokens when not triggered (auto type).
|
|
18
|
+
Body migrated to `skill:upstream-contribute` (per P4 of `road-to-kernel-and-router.md`).
|
|
19
|
+
Trigger-set above activates this routing under the `balanced` and `full` profiles.
|
|
@@ -5,14 +5,18 @@ description: "Asking the user a question, presenting options, or summarizing pro
|
|
|
5
5
|
alwaysApply: false
|
|
6
6
|
source: package
|
|
7
7
|
load_context:
|
|
8
|
-
-
|
|
8
|
+
- ../contexts/communication/rules-auto/user-interaction-mechanics.md
|
|
9
|
+
triggers:
|
|
10
|
+
- intent: "ask user a question"
|
|
11
|
+
- intent: "numbered options"
|
|
12
|
+
- intent: "summarizing progress"
|
|
9
13
|
---
|
|
10
14
|
|
|
11
15
|
# User Interaction
|
|
12
16
|
|
|
13
|
-
Two Iron Laws govern every reply that contains numbered options.
|
|
14
|
-
override conversation momentum, brevity, and the urge to defer
|
|
15
|
-
user. **Missing a recommendation is a rule violation, not a slip.**
|
|
17
|
+
Two Iron Laws govern every reply that contains numbered options.
|
|
18
|
+
They override conversation momentum, brevity, and the urge to defer
|
|
19
|
+
to the user. **Missing a recommendation is a rule violation, not a slip.**
|
|
16
20
|
|
|
17
21
|
## Iron Law 1 — Single-Source Recommendation
|
|
18
22
|
|
|
@@ -22,48 +26,11 @@ THE OPTION BLOCK STAYS NEUTRAL. THE RECOMMENDATION LINE IS THE ONLY SOURCE OF TR
|
|
|
22
26
|
DRIFT BETWEEN OPTION-BLOCK AND PROSE IS STRUCTURALLY IMPOSSIBLE WHEN THE TAG DOES NOT EXIST.
|
|
23
27
|
MISSING RECOMMENDATION = RULE VIOLATION, NOT A SLIP.
|
|
24
28
|
POSITION-AGNOSTIC. END-OF-TURN MENUS COUNT. NEXT-STEP LISTS COUNT. NO EXCEPTIONS.
|
|
29
|
+
THE RECOMMENDATION LINE LIVES DIRECTLY UNDER THE OPTIONS BLOCK. NOWHERE ELSE.
|
|
30
|
+
PROSE NAMING A "RECOMMENDED" PATH ABOVE OR BEFORE THE OPTIONS BLOCK = NO RECOMMENDATION.
|
|
31
|
+
WRONG-LANGUAGE LABEL (`Recommendation:` WHEN USER IS GERMAN, OR VICE VERSA) = NO RECOMMENDATION.
|
|
25
32
|
```
|
|
26
33
|
|
|
27
|
-
The agent has read the code, the contracts, the trade-offs. Refusing
|
|
28
|
-
to take a position dumps that work back on the user. Take the
|
|
29
|
-
position; be wrong out loud if needed. "Egal, was bevorzugst Du?" /
|
|
30
|
-
"no preference" is NEVER acceptable.
|
|
31
|
-
|
|
32
|
-
**Position-agnostic — closes the most common slip:** End-of-turn
|
|
33
|
-
"Wie weiter?" / "What next?" / "How to proceed?" / "How should we
|
|
34
|
-
continue?" blocks with numbered options are **numbered-options
|
|
35
|
-
blocks**. Same Iron Law applies — exactly one `Empfehlung: N` /
|
|
36
|
-
`Recommendation: N` line, every time. There is no "these are just
|
|
37
|
-
follow-up suggestions" exception, no "the user knows better here"
|
|
38
|
-
exception, no "I genuinely don't have a preference" exception. If
|
|
39
|
-
the agent prints `1. … 2. … 3. …` anywhere in the reply, the
|
|
40
|
-
recommendation line is mandatory.
|
|
41
|
-
|
|
42
|
-
**Format — non-negotiable:**
|
|
43
|
-
|
|
44
|
-
- Options block stays NEUTRAL — no `(recommended)`, no `(rec)`, no `←`, no bold, no checkmark.
|
|
45
|
-
- Directly after the options block, ONE line, bolded, in the user's language:
|
|
46
|
-
- English: `**Recommendation: N — <option-name>** — <why>. Caveat: <flip-condition>.`
|
|
47
|
-
- German: `**Empfehlung: N — <option-name>** — <warum>. Caveat: <flip-bedingung>.`
|
|
48
|
-
- Other numbers MAY appear later in the prose, but ONLY as caveats
|
|
49
|
-
(`escalate to 3 if …`, `flip to 1 when …`). NEVER as a primary recommendation.
|
|
50
|
-
- If the agent genuinely cannot pick (rare — true 50/50 with missing data),
|
|
51
|
-
say what data would break the tie and ask for that instead.
|
|
52
|
-
|
|
53
|
-
**What does NOT count as a recommendation:**
|
|
54
|
-
|
|
55
|
-
- "Both work" / "either is fine" / "depends on what you prefer"
|
|
56
|
-
- Listing pros and cons without picking a number
|
|
57
|
-
- "I'd lean towards X" without a reason
|
|
58
|
-
- Hiding behind "you know the project better"
|
|
59
|
-
- Inline `(recommended)` tag with no follow-up `Recommendation: N` line
|
|
60
|
-
|
|
61
|
-
**Slip handling — same protocol as [`language-and-tone`](language-and-tone.md#slip-handling).**
|
|
62
|
-
User calls out a missing or wrong recommendation → acknowledge once
|
|
63
|
-
in the user's language, rewrite the reply with a recommendation,
|
|
64
|
-
ship. No "from now on" promises — only the next reply proves
|
|
65
|
-
compliance.
|
|
66
|
-
|
|
67
34
|
## Iron Law 2 — Pre-Send Self-Check
|
|
68
35
|
|
|
69
36
|
```
|
|
@@ -71,57 +38,20 @@ EVERY REPLY WITH NUMBERED OPTIONS RUNS THE SELF-CHECK. NO EXCEPTIONS.
|
|
|
71
38
|
SKIPPING IT IS A RULE VIOLATION, NOT A SLIP.
|
|
72
39
|
```
|
|
73
40
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
its position or framing:
|
|
79
|
-
|
|
80
|
-
1. Count occurrences of `(recommended)` / `(rec)` / `(empfohlen)` inline next to a numbered option → MUST be **zero**. Found one → rewrite, drop the tag.
|
|
81
|
-
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.
|
|
82
|
-
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.
|
|
83
|
-
4. The number on the recommendation line MUST exist in the option block it follows.
|
|
84
|
-
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.
|
|
85
|
-
|
|
86
|
-
Mechanical backstop: `python3 scripts/check_reply_consistency.py --stdin < draft.md`
|
|
87
|
-
(non-zero exit on any rule above). Self-scan is the primary gate; the
|
|
88
|
-
script is the deterministic safety net for ambiguous cases.
|
|
89
|
-
|
|
90
|
-
Common failure modes (end-of-turn menu skipped, "no preference"
|
|
91
|
-
hedges, multi-block reply with one recommendation) and the named
|
|
92
|
-
slip catalog live in
|
|
93
|
-
[`contexts/communication/rules-auto/user-interaction-mechanics.md`](../contexts/communication/rules-auto/user-interaction-mechanics.md)
|
|
94
|
-
§ Common failure modes.
|
|
95
|
-
|
|
96
|
-
## Numbered Options — Always
|
|
97
|
-
|
|
98
|
-
When asking the user a question with predefined choices, **always
|
|
99
|
-
present numbered options**. The user should be able to reply with
|
|
100
|
-
just a number (e.g., `1`) instead of typing a sentence.
|
|
101
|
-
|
|
102
|
-
### Format
|
|
103
|
-
|
|
104
|
-
```
|
|
105
|
-
> 1. First option — brief explanation
|
|
106
|
-
> 2. Second option — brief explanation
|
|
107
|
-
> 3. Third option — brief explanation
|
|
108
|
-
|
|
109
|
-
**Recommendation: 2 — Second option** — <one-sentence reason>. Caveat: <flip-condition>.
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
### Rules
|
|
113
|
-
|
|
114
|
-
- **Every question with choices** must use numbered options — no exceptions.
|
|
115
|
-
- **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.
|
|
116
|
-
- **Keep options short** — one line each, with a brief explanation after the dash.
|
|
117
|
-
- **Always include a "skip" or "no change" option** when applicable.
|
|
118
|
-
- **Always state a recommendation** — Iron Law 1 above. Per options block, every time, position-agnostic.
|
|
119
|
-
- **Use the user's language** for the question and options.
|
|
120
|
-
- **Accept both** the number and a natural language answer (e.g., "1" or "the first one").
|
|
41
|
+
Mechanical backstop:
|
|
42
|
+
`python3 scripts/check_reply_consistency.py --stdin < draft.md`
|
|
43
|
+
(non-zero exit on any rule below). Self-scan is the primary gate;
|
|
44
|
+
the script is the deterministic safety net.
|
|
121
45
|
|
|
122
|
-
|
|
46
|
+
## Mechanics — rationale, failure modes, format details, examples
|
|
123
47
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
48
|
+
The "why take a position", position-agnostic clause, format
|
|
49
|
+
specification (neutral block + bolded recommendation line + caveat),
|
|
50
|
+
no-trailing-open-question rule, "what does NOT count" catalog, full
|
|
51
|
+
five-step pre-send self-check, named failure-mode catalog (end-of-turn
|
|
52
|
+
menu, trailing-question hedge, no-preference hedge, multi-block reply,
|
|
53
|
+
…), slip-handling protocol, numbered-options rules, format examples,
|
|
54
|
+
progress indicators, and summary-table patterns all live in
|
|
127
55
|
[`contexts/communication/rules-auto/user-interaction-mechanics.md`](../contexts/communication/rules-auto/user-interaction-mechanics.md).
|
|
56
|
+
The rule above is the obligation surface; the mechanics file is the
|
|
57
|
+
lookup material.
|
|
@@ -5,7 +5,7 @@ description: "Verify before completion — run tests and quality tools before cl
|
|
|
5
5
|
alwaysApply: true
|
|
6
6
|
source: package
|
|
7
7
|
load_context:
|
|
8
|
-
-
|
|
8
|
+
- ../contexts/execution/verification-mechanics.md
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Verify Before Completion
|
|
@@ -187,7 +187,7 @@ After completing a significant code change, run this mental checklist:
|
|
|
187
187
|
| New API endpoint | OpenAPI annotations, `AGENTS.md` API section |
|
|
188
188
|
| New module created | Create `app/Modules/{Module}/agents/` |
|
|
189
189
|
| Service/repository signature changed | Check if referenced in `agents/docs/services-and-repos.md` |
|
|
190
|
-
| New environment variable | `.env.example`, `AGENTS.md`
|
|
190
|
+
| New environment variable | `.env.example`, `AGENTS.md` env section |
|
|
191
191
|
| Docker/compose change | `agents/docs/docker.md`, `Makefile` documentation |
|
|
192
192
|
| New Artisan command | `AGENTS.md` commands section |
|
|
193
193
|
| New pattern/convention introduced | Relevant guideline in `.augment/guidelines/` |
|
|
@@ -82,12 +82,11 @@ travel changes.
|
|
|
82
82
|
|---|---|---|---|---|
|
|
83
83
|
| `api` | `AnthropicClient` / `OpenAIClient` | yes | provider SDK + key from `~/.config/agent-config/<provider>.key` | shipped |
|
|
84
84
|
| `manual` | `ManualClient` | no | `stdout` (prompt block) + `stdin` (user pastes the web-UI reply, terminated by a line containing only `END`) | shipped (Phase 2b) |
|
|
85
|
-
| `playwright` | `PlaywrightClient` | no | persistent-profile browser at the provider's chat URL via DOM adapter | reserved (Phase 2c — capture-only) |
|
|
86
85
|
|
|
87
86
|
Resolution lives in `scripts/ai_council/modes.py`:
|
|
88
87
|
`resolve_mode(name, invocation_mode, member_settings, global_mode)`
|
|
89
88
|
with precedence **invocation flag > per-member setting > global
|
|
90
|
-
setting > default (`
|
|
89
|
+
setting > default (`manual`)**. Whitespace-and-case insensitive; empty
|
|
91
90
|
strings fall through; unknown values raise `InvalidModeError` with
|
|
92
91
|
the offending settings path (`ai_council.mode`,
|
|
93
92
|
`ai_council.members.<name>.mode`, or `/council mode=`).
|
|
@@ -113,8 +112,8 @@ that member and the orchestrator stops the fan-out.
|
|
|
113
112
|
### Cost-gate bypass for non-billable members
|
|
114
113
|
|
|
115
114
|
`ExternalAIClient.billable` is the contract. Clients with
|
|
116
|
-
`billable=False` (
|
|
117
|
-
|
|
115
|
+
`billable=False` (`ManualClient`) bypass the cost gate entirely —
|
|
116
|
+
the orchestrator skips the
|
|
118
117
|
projection check, the `on_overrun` callback, and the USD-budget
|
|
119
118
|
short-circuit for that member, but still records the response's
|
|
120
119
|
token counts (from the manual-paste length heuristic or the
|
|
@@ -145,6 +144,48 @@ provider's reply, when available) for observability. Mixed runs
|
|
|
145
144
|
into concrete numbered options for the user. The user decides;
|
|
146
145
|
the council advises.
|
|
147
146
|
|
|
147
|
+
## Output path convention
|
|
148
|
+
|
|
149
|
+
Council artefacts (questions, responses, sessions) are **dev-time
|
|
150
|
+
scratch** — gitignored in both the package repo and consumer repos
|
|
151
|
+
and auto-pruned after `ai_council.session_retention_days` (default
|
|
152
|
+
7). They inform a decision; they are not the durable contract. The
|
|
153
|
+
durable contract lives in the roadmap / ADR / skill body that cites
|
|
154
|
+
the council's convergence inline.
|
|
155
|
+
|
|
156
|
+
**Linking to a specific council file is forbidden by
|
|
157
|
+
[`no-council-references`](../../rules/no-council-references.md)** —
|
|
158
|
+
gitignored, not in the cloned repo, gone after the retention window.
|
|
159
|
+
Inline the convergence with date + members instead.
|
|
160
|
+
|
|
161
|
+
Three directories, three modes:
|
|
162
|
+
|
|
163
|
+
| Mode | Path | Format |
|
|
164
|
+
|---|---|---|
|
|
165
|
+
| **Topic-anchored question** (paired with a roadmap or ADR) | `agents/council-questions/<topic-slug>.md` | Markdown |
|
|
166
|
+
| **Topic-anchored response** (paired with the question above) | `agents/council-responses/<topic-slug>.json` | JSON from `council:run --output` |
|
|
167
|
+
| **Ad-hoc session** (no durable artefact yet) | `agents/council-sessions/<UTC-timestamp>.json` | JSON from `council:run --output` |
|
|
168
|
+
|
|
169
|
+
`<topic-slug>` is kebab-case and **must match** the corresponding
|
|
170
|
+
roadmap / ADR slug if one exists (e.g. `path-fixes` mirrors the
|
|
171
|
+
matching `road-to-<topic-slug>` roadmap under `agents/roadmaps/`).
|
|
172
|
+
|
|
173
|
+
### Forbidden
|
|
174
|
+
|
|
175
|
+
- Files at `agents/` root (e.g. `agents/council-question-foo.md`).
|
|
176
|
+
- Dot-prefix scratch (e.g. `agents/.council-question-foo.md`).
|
|
177
|
+
- Any other directory below `agents/` (e.g. `agents/scratch/`,
|
|
178
|
+
`agents/tmp/`).
|
|
179
|
+
- Cross-references from any artefact to specific council files —
|
|
180
|
+
see [`no-council-references`](../../rules/no-council-references.md).
|
|
181
|
+
Inline the convergence summary instead, with date and member list
|
|
182
|
+
for traceability (`Council (claude-sonnet-4-5 + gpt-4o, YYYY-MM-DD)
|
|
183
|
+
reviewed N candidate strategies; converged on …`).
|
|
184
|
+
|
|
185
|
+
`scripts/check_council_layout.py` is the mechanical check for the
|
|
186
|
+
output path convention — wire it into the package's CI pipeline so
|
|
187
|
+
violations break the build.
|
|
188
|
+
|
|
148
189
|
## Output format
|
|
149
190
|
|
|
150
191
|
Every council reply MUST contain, in this order:
|
|
@@ -225,7 +266,7 @@ per-invocation caps from `ai_council.cost_budget`:
|
|
|
225
266
|
if the callback returns False or is absent, tags the member
|
|
226
267
|
`daily_budget_exceeded` instead of `cost_budget_exceeded`.
|
|
227
268
|
|
|
228
|
-
Prices come from
|
|
269
|
+
Prices come from `agents/.agent-prices.md` (gitignored, refreshed weekly).
|
|
229
270
|
The pricing module bootstraps it from `_default_prices.py` on first
|
|
230
271
|
use and flags it stale when older than the most recent Monday 00:00
|
|
231
272
|
UTC.
|
|
@@ -295,8 +336,16 @@ prompt as `<original artefact> + <prior round, anonymised>` so each
|
|
|
295
336
|
member can refine, agree, or push back on the previous critique
|
|
296
337
|
without seeing which provider produced which point.
|
|
297
338
|
|
|
339
|
+
The default round count comes from `ai_council.min_rounds` in
|
|
340
|
+
`.agent-settings.yml` (default `2` so members critique each other
|
|
341
|
+
at least once before convergence). The host agent does **not** ask
|
|
342
|
+
"how many rounds?" when the requested count is `<= min_rounds` —
|
|
343
|
+
the settings owner already made that decision. Ask only when a
|
|
344
|
+
genuinely complex artefact justifies more depth than the default.
|
|
345
|
+
|
|
298
346
|
| Property | Behaviour |
|
|
299
347
|
|---|---|
|
|
348
|
+
| Default count | `ai_council.min_rounds` (default `2`). Override per-invocation with `rounds:N` (or `--rounds N` to the CLI). |
|
|
300
349
|
| Anonymisation | Provider/model identity is stripped. Reviewers are labelled `Reviewer A / B / C…` in input order. |
|
|
301
350
|
| Errored prior responses | Skipped — they reveal nothing useful and can leak provider error formats. |
|
|
302
351
|
| Cost budget | Accumulates across rounds. A round-2 call that breaches the cap fires `on_overrun` exactly like a round-1 breach. |
|
|
@@ -323,6 +372,21 @@ Round 2: artefact + anonymised round 1 critiques
|
|
|
323
372
|
| **total** | | $0.0594 |
|
|
324
373
|
```
|
|
325
374
|
|
|
375
|
+
### Manual-mode parity
|
|
376
|
+
|
|
377
|
+
The orchestrator drives rounds the same way for `api` and `manual`
|
|
378
|
+
transports. One round = one full pass over every enabled member,
|
|
379
|
+
top-to-bottom, then `_augment_for_next_round()` folds the
|
|
380
|
+
anonymised critiques into the round-N+1 user prompt. For manual
|
|
381
|
+
mode this means: emit the round-1 block for member A → user
|
|
382
|
+
pastes A's reply → next member B → user pastes B's reply → host
|
|
383
|
+
agent consolidates round 1 → emit the round-2 block (now carrying
|
|
384
|
+
the anonymised round-1 critiques) for member A → … and so on
|
|
385
|
+
until the configured round count is reached. ManualClient's
|
|
386
|
+
internal "more feedback" follow-up loop (1 / 2 / 3 menu) is
|
|
387
|
+
**inside** a single member's chat thread and is orthogonal to the
|
|
388
|
+
orchestrator-level rounds.
|
|
389
|
+
|
|
326
390
|
## See also
|
|
327
391
|
|
|
328
392
|
- `/council` command — the user-facing entry point.
|
|
@@ -80,7 +80,7 @@ Route to the primary skill. Monitor findings for signals to chain additional ski
|
|
|
80
80
|
|
|
81
81
|
Merge all specialist findings into ONE prioritized output:
|
|
82
82
|
|
|
83
|
-
1. Confirmed root
|
|
83
|
+
1. Confirmed root → (with evidence)
|
|
84
84
|
2. Contributing factors
|
|
85
85
|
3. Risks not yet proven but worth checking
|
|
86
86
|
4. Concrete fixes (ordered by priority)
|
|
@@ -106,18 +106,18 @@ Check:
|
|
|
106
106
|
|
|
107
107
|
**Choose `project-analysis-core` if:** broad discovery needed, framework deep-dive not yet justified.
|
|
108
108
|
|
|
109
|
-
**Choose `project-analysis-hypothesis-driven` if:** problem is concrete, multiple
|
|
109
|
+
**Choose `project-analysis-hypothesis-driven` if:** problem is concrete, multiple → plausible, main job is explanation not discovery.
|
|
110
110
|
|
|
111
111
|
**Choose framework-specific analysis if:** framework is explicit, failure pattern is framework-shaped.
|
|
112
112
|
|
|
113
|
-
**Do NOT route broadly if:** one component or file is enough, fix is obvious and local, task is
|
|
113
|
+
**Do NOT route broadly if:** one component or file is enough, fix is obvious and local, task is impl not investigation.
|
|
114
114
|
|
|
115
115
|
## Examples
|
|
116
116
|
|
|
117
117
|
**"Analyze this whole Laravel project"** → `universal-project-analysis` → chain `project-analysis-laravel`
|
|
118
118
|
**"Hydration mismatch in Next.js"** → `project-analysis-nextjs` (no full-project needed)
|
|
119
119
|
**"Bug could be cache, queue, or version mismatch"** → `project-analysis-hypothesis-driven`
|
|
120
|
-
**"Change one React component"** → no analysis skill, use
|
|
120
|
+
**"Change one React component"** → no analysis skill, use impl skill
|
|
121
121
|
|
|
122
122
|
## Gotcha
|
|
123
123
|
|
|
@@ -41,7 +41,7 @@ Do NOT use when:
|
|
|
41
41
|
- Destructive? → Add `--force` flag + confirmation.
|
|
42
42
|
- Scheduled? → Ensure non-interactive, idempotent, loud failures.
|
|
43
43
|
- Long-running? → Use chunking/cursors, progress bar.
|
|
44
|
-
- Production? → Add
|
|
44
|
+
- Production? → Add env check if needed.
|
|
45
45
|
|
|
46
46
|
### Step 4: Test
|
|
47
47
|
|
|
@@ -62,7 +62,7 @@ Do NOT use when:
|
|
|
62
62
|
|
|
63
63
|
- `$this->info()` is suppressed in quiet mode — use `$this->line()` for critical info.
|
|
64
64
|
- Always add `--force` for destructive commands — never delete data without confirmation.
|
|
65
|
-
- Add
|
|
65
|
+
- Add env checks for production commands.
|
|
66
66
|
|
|
67
67
|
## Do NOT
|
|
68
68
|
|
|
@@ -168,4 +168,4 @@ Runtime confirmation (e.g. *"reproduce the cross-tenant read against staging"*,
|
|
|
168
168
|
[`data-exposure-review`](../data-exposure-review/SKILL.md),
|
|
169
169
|
[`judge-security-auditor`](../judge-security-auditor/SKILL.md),
|
|
170
170
|
[`security`](../security/SKILL.md),
|
|
171
|
-
[`security-audit`](../security-audit/SKILL.md) — sibling review /
|
|
171
|
+
[`security-audit`](../security-audit/SKILL.md) — sibling review / impl skills.
|
|
@@ -16,9 +16,9 @@ Do NOT use when:
|
|
|
16
16
|
|
|
17
17
|
## Procedure: Modify AWS infrastructure
|
|
18
18
|
|
|
19
|
-
1. Read the `.aws/` directory (or equivalent) for
|
|
19
|
+
1. Read the `.aws/` directory (or equivalent) for env configs and templates.
|
|
20
20
|
2. Read CI/CD workflows (e.g., `.github/workflows/`) for the deployment pipeline.
|
|
21
|
-
3. Check the
|
|
21
|
+
3. Check the env-specific vars files.
|
|
22
22
|
4. **Read project-level overrides** — check `agents/overrides/skills/aws-infrastructure.md` for project-specific service names, prefixes, and infrastructure details.
|
|
23
23
|
|
|
24
24
|
## Architecture overview
|
|
@@ -38,7 +38,7 @@ Do NOT use when:
|
|
|
38
38
|
| **ECS Fargate** | Container orchestration (no EC2 instances) |
|
|
39
39
|
| **ECR** | Docker image registry |
|
|
40
40
|
| **EFS** | Shared filesystem (private + public access points) |
|
|
41
|
-
| **Secrets Manager** | `.env` file storage per
|
|
41
|
+
| **Secrets Manager** | `.env` file storage per env |
|
|
42
42
|
| **IAM Roles** | OIDC-based GitHub Actions authentication |
|
|
43
43
|
| **VPC** | Networking (security groups, subnets) |
|
|
44
44
|
|
|
@@ -97,7 +97,7 @@ Template variables:
|
|
|
97
97
|
### Authentication
|
|
98
98
|
|
|
99
99
|
- GitHub Actions uses **OIDC** (no long-lived AWS credentials).
|
|
100
|
-
- Role ARN is per-
|
|
100
|
+
- Role ARN is per-env in the vars file.
|
|
101
101
|
- `aws-actions/configure-aws-credentials` handles the OIDC exchange.
|
|
102
102
|
|
|
103
103
|
### Image tagging
|
|
@@ -139,7 +139,7 @@ See the `terraform` and `terragrunt` skills for general IaC conventions.
|
|
|
139
139
|
|
|
140
140
|
## Gotcha
|
|
141
141
|
|
|
142
|
-
- Never hardcode AWS credentials — always use Secrets Manager or
|
|
142
|
+
- Never hardcode AWS credentials — always use Secrets Manager or env variables.
|
|
143
143
|
- ECS task definitions are immutable — you create new revisions, not edit existing ones.
|
|
144
144
|
- gomplate templates use `{{ }}` which conflicts with other template engines — escape carefully.
|
|
145
145
|
|
|
@@ -56,7 +56,7 @@ Run grep/search for the exact symbol, column, or event name. Enumerate:
|
|
|
56
56
|
| DB references | Foreign keys, indexes, views, triggers on the column |
|
|
57
57
|
| Config / docs | YAML, JSON, Markdown that name the symbol |
|
|
58
58
|
|
|
59
|
-
### 3. Inspect indirect
|
|
59
|
+
### 3. Inspect indirect deps
|
|
60
60
|
|
|
61
61
|
For each direct dependency, identify second-order fan-out:
|
|
62
62
|
|
|
@@ -91,7 +91,7 @@ keys=<changed paths + changed symbol>, limit=5)`. Surface:
|
|
|
91
91
|
the direct grep had no result.
|
|
92
92
|
|
|
93
93
|
Memory entries are supplementary, never authoritative: a grep miss is
|
|
94
|
-
still a grep miss. Do not infer
|
|
94
|
+
still a grep miss. Do not infer deps from memory alone.
|
|
95
95
|
|
|
96
96
|
## Validation
|
|
97
97
|
|
|
@@ -102,8 +102,8 @@ Before finalizing the report, confirm:
|
|
|
102
102
|
3. Second-order fan-out is bounded — any runaway chain is flagged, not expanded
|
|
103
103
|
4. Every `external` reach has at least one named owner hint or an explicit
|
|
104
104
|
"owner unknown — ask"
|
|
105
|
-
5. You have NOT invented
|
|
106
|
-
6. You have NOT merged direct and indirect
|
|
105
|
+
5. You have NOT invented deps that grep did not find
|
|
106
|
+
6. You have NOT merged direct and indirect deps — they are listed separately
|
|
107
107
|
|
|
108
108
|
## Output format
|
|
109
109
|
|
|
@@ -143,10 +143,10 @@ Open questions:
|
|
|
143
143
|
Required fields (ordered):
|
|
144
144
|
|
|
145
145
|
1. **Skill** and **Change** — one-line edit summary
|
|
146
|
-
2. **Direct
|
|
147
|
-
3. **Indirect
|
|
146
|
+
2. **Direct deps** — grouped by class, each with file:line citations and exact counts
|
|
147
|
+
3. **Indirect deps** — 2nd-order only, bounded
|
|
148
148
|
4. **Reach summary** — counts per reach level
|
|
149
|
-
5. **Risk surfaces** —
|
|
149
|
+
5. **Risk surfaces** — deps grouped by risk type
|
|
150
150
|
6. **Open questions** — unresolved items with grep evidence
|
|
151
151
|
|
|
152
152
|
Runtime confirmation (e.g. *"actually run the test suite to see what breaks"*,
|
|
@@ -172,7 +172,7 @@ does not execute code, run tests, or touch the network**.
|
|
|
172
172
|
* NEVER return `safe` out of politeness when external reach exists — mark it clearly
|
|
173
173
|
* NEVER silently fall back to "module-level impact" when grep shows cross-module callers
|
|
174
174
|
* NEVER claim a dependency without a file:line citation from grep output
|
|
175
|
-
* NEVER chase
|
|
175
|
+
* NEVER chase deps past 2nd order without explicit scope approval — flag and stop
|
|
176
176
|
|
|
177
177
|
## References
|
|
178
178
|
|