@event4u/agent-config 1.13.0 → 1.15.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 +4 -1
- package/.agent-src/commands/agent-status.md +3 -0
- package/.agent-src/commands/agents-audit.md +4 -0
- package/.agent-src/commands/agents-cleanup.md +6 -1
- package/.agent-src/commands/agents-prepare.md +3 -0
- package/.agent-src/commands/analyze-reference-repo.md +4 -0
- package/.agent-src/commands/bug-fix.md +7 -3
- package/.agent-src/commands/bug-investigate.md +4 -0
- package/.agent-src/commands/chat-history-checkpoint.md +126 -0
- package/.agent-src/commands/chat-history-clear.md +6 -1
- package/.agent-src/commands/chat-history-resume.md +7 -2
- package/.agent-src/commands/chat-history.md +7 -2
- package/.agent-src/commands/check-current-md.md +137 -0
- package/.agent-src/commands/commit-in-chunks.md +118 -0
- package/.agent-src/commands/commit.md +4 -0
- package/.agent-src/commands/compress.md +37 -2
- package/.agent-src/commands/context-create.md +4 -0
- package/.agent-src/commands/context-refactor.md +4 -0
- package/.agent-src/commands/copilot-agents-init.md +3 -0
- package/.agent-src/commands/copilot-agents-optimize.md +3 -0
- package/.agent-src/commands/create-pr-description.md +4 -0
- package/.agent-src/commands/create-pr.md +4 -0
- package/.agent-src/commands/do-and-judge.md +4 -1
- package/.agent-src/commands/do-in-steps.md +3 -0
- package/.agent-src/commands/e2e-heal.md +4 -0
- package/.agent-src/commands/e2e-plan.md +4 -0
- package/.agent-src/commands/estimate-ticket.md +4 -1
- package/.agent-src/commands/feature-dev.md +4 -0
- package/.agent-src/commands/feature-explore.md +4 -0
- package/.agent-src/commands/feature-plan.md +4 -0
- package/.agent-src/commands/feature-refactor.md +4 -0
- package/.agent-src/commands/feature-roadmap.md +6 -0
- package/.agent-src/commands/fix-ci.md +4 -0
- package/.agent-src/commands/fix-portability.md +5 -2
- package/.agent-src/commands/fix-pr-bot-comments.md +4 -0
- package/.agent-src/commands/fix-pr-comments.md +4 -0
- package/.agent-src/commands/fix-pr-developer-comments.md +4 -0
- package/.agent-src/commands/fix-references.md +3 -0
- package/.agent-src/commands/fix-seeder.md +4 -0
- package/.agent-src/commands/implement-ticket.md +39 -13
- package/.agent-src/commands/jira-ticket.md +4 -0
- package/.agent-src/commands/judge.md +3 -0
- package/.agent-src/commands/memory-add.md +5 -3
- package/.agent-src/commands/memory-full.md +5 -2
- package/.agent-src/commands/memory-promote.md +7 -6
- package/.agent-src/commands/mode.md +3 -0
- package/.agent-src/commands/module-create.md +4 -0
- package/.agent-src/commands/module-explore.md +4 -0
- package/.agent-src/commands/onboard.md +33 -0
- package/.agent-src/commands/optimize-agents.md +4 -0
- package/.agent-src/commands/optimize-augmentignore.md +12 -0
- package/.agent-src/commands/optimize-rtk-filters.md +3 -0
- package/.agent-src/commands/optimize-skills.md +4 -0
- package/.agent-src/commands/override-create.md +4 -0
- package/.agent-src/commands/override-manage.md +4 -0
- package/.agent-src/commands/package-reset.md +3 -0
- package/.agent-src/commands/package-test.md +3 -0
- package/.agent-src/commands/prepare-for-review.md +4 -0
- package/.agent-src/commands/project-analyze.md +4 -0
- package/.agent-src/commands/project-health.md +4 -0
- package/.agent-src/commands/propose-memory.md +6 -8
- package/.agent-src/commands/quality-fix.md +4 -0
- package/.agent-src/commands/refine-ticket.md +12 -7
- package/.agent-src/commands/review-changes.md +39 -8
- package/.agent-src/commands/review-routing.md +4 -0
- package/.agent-src/commands/roadmap-create.md +18 -0
- package/.agent-src/commands/roadmap-execute.md +14 -1
- package/.agent-src/commands/rule-compliance-audit.md +4 -0
- package/.agent-src/commands/set-cost-profile.md +11 -0
- package/.agent-src/commands/sync-agent-settings.md +12 -0
- package/.agent-src/commands/sync-gitignore.md +3 -0
- package/.agent-src/commands/tests-create.md +4 -0
- package/.agent-src/commands/tests-execute.md +6 -3
- package/.agent-src/commands/threat-model.md +4 -0
- package/.agent-src/commands/update-form-request-messages.md +4 -0
- package/.agent-src/commands/upstream-contribute.md +4 -0
- package/.agent-src/commands/work.md +161 -0
- package/.agent-src/guidelines/agent-infra/engineering-memory-data-format.md +2 -6
- package/.agent-src/guidelines/agent-infra/layered-settings.md +0 -1
- package/.agent-src/guidelines/agent-infra/memory-access.md +0 -7
- package/.agent-src/guidelines/agent-infra/role-contracts.md +2 -4
- package/.agent-src/guidelines/agent-infra/self-improvement-pipeline.md +0 -1
- package/.agent-src/guidelines/php/patterns/strategy.md +180 -2
- package/.agent-src/personas/README.md +0 -1
- package/.agent-src/rules/artifact-drafting-protocol.md +7 -2
- package/.agent-src/rules/artifact-engagement-recording.md +133 -0
- package/.agent-src/rules/ask-when-uncertain.md +18 -13
- package/.agent-src/rules/augment-portability.md +64 -37
- package/.agent-src/rules/autonomous-execution.md +158 -0
- 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 +27 -4
- package/.agent-src/rules/command-suggestion.md +134 -0
- package/.agent-src/rules/commit-policy.md +109 -0
- package/.agent-src/rules/direct-answers.md +114 -0
- package/.agent-src/rules/docs-sync.md +36 -0
- package/.agent-src/rules/downstream-changes.md +10 -9
- package/.agent-src/rules/improve-before-implement.md +9 -6
- package/.agent-src/rules/language-and-tone.md +85 -6
- package/.agent-src/rules/non-destructive-by-default.md +117 -0
- package/.agent-src/rules/package-ci-checks.md +4 -0
- package/.agent-src/rules/preservation-guard.md +20 -0
- package/.agent-src/rules/roadmap-progress-sync.md +159 -27
- package/.agent-src/rules/role-mode-adherence.md +1 -1
- package/.agent-src/rules/scope-control.md +42 -1
- package/.agent-src/rules/size-enforcement.md +2 -3
- package/.agent-src/rules/skill-quality.md +3 -8
- package/.agent-src/rules/ui-audit-before-build.md +106 -0
- package/.agent-src/rules/user-interaction.md +107 -51
- package/.agent-src/scripts/update_roadmap_progress.py +73 -9
- package/.agent-src/skills/blade-ui/SKILL.md +47 -3
- package/.agent-src/skills/command-routing/SKILL.md +32 -0
- package/.agent-src/skills/command-writing/SKILL.md +52 -2
- package/.agent-src/skills/description-assist/SKILL.md +21 -0
- package/.agent-src/skills/estimate-ticket/SKILL.md +0 -1
- package/.agent-src/skills/existing-ui-audit/SKILL.md +202 -0
- package/.agent-src/skills/fe-design/SKILL.md +78 -61
- package/.agent-src/skills/file-editor/SKILL.md +9 -0
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +4 -0
- package/.agent-src/skills/flux/SKILL.md +31 -4
- package/.agent-src/skills/guideline-writing/SKILL.md +24 -2
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +51 -9
- package/.agent-src/skills/livewire/SKILL.md +49 -4
- package/.agent-src/skills/md-language-check/SKILL.md +103 -0
- package/.agent-src/skills/php-coder/SKILL.md +24 -0
- package/.agent-src/skills/react-shadcn-ui/SKILL.md +121 -0
- package/.agent-src/skills/refine-prompt/SKILL.md +220 -0
- package/.agent-src/skills/refine-ticket/SKILL.md +32 -28
- package/.agent-src/skills/roadmap-management/SKILL.md +24 -11
- package/.agent-src/skills/rule-writing/SKILL.md +23 -1
- package/.agent-src/skills/skill-writing/SKILL.md +3 -5
- package/.agent-src/skills/upstream-contribute/SKILL.md +3 -3
- package/.agent-src/skills/using-git-worktrees/SKILL.md +3 -1
- package/.agent-src/templates/AGENTS.md +24 -6
- package/.agent-src/templates/agent-settings.md +149 -0
- package/.agent-src/templates/roadmaps.md +11 -4
- package/.agent-src/templates/scripts/implement_ticket/__init__.py +63 -26
- package/.agent-src/templates/scripts/implement_ticket/__main__.py +8 -2
- package/.agent-src/templates/scripts/memory_lookup.py +1 -1
- package/.agent-src/templates/scripts/telemetry/__init__.py +42 -0
- package/.agent-src/templates/scripts/telemetry/aggregator.py +154 -0
- package/.agent-src/templates/scripts/telemetry/boundary.py +171 -0
- package/.agent-src/templates/scripts/telemetry/engagement.py +238 -0
- package/.agent-src/templates/scripts/telemetry/report_renderer.py +170 -0
- package/.agent-src/templates/scripts/telemetry/settings.py +112 -0
- package/.agent-src/templates/scripts/telemetry_record.py +166 -0
- package/.agent-src/templates/scripts/telemetry_report.py +161 -0
- package/.agent-src/templates/scripts/telemetry_status.py +142 -0
- package/.agent-src/templates/scripts/work_engine/__init__.py +58 -0
- package/.agent-src/templates/scripts/work_engine/__main__.py +9 -0
- package/.agent-src/templates/scripts/work_engine/cli.py +195 -0
- package/.agent-src/templates/scripts/work_engine/cli_args.py +116 -0
- package/.agent-src/templates/scripts/{implement_ticket → work_engine}/delivery_state.py +10 -3
- package/.agent-src/templates/scripts/work_engine/directives/__init__.py +33 -0
- package/.agent-src/templates/scripts/work_engine/directives/backend/__init__.py +98 -0
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/analyze.py +1 -1
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/implement.py +3 -3
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/memory.py +2 -2
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/plan.py +2 -2
- package/.agent-src/templates/scripts/work_engine/directives/backend/refine.py +396 -0
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/report.py +37 -5
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/test.py +2 -2
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/verify.py +2 -2
- package/.agent-src/templates/scripts/work_engine/directives/mixed/__init__.py +116 -0
- package/.agent-src/templates/scripts/work_engine/directives/mixed/contract.py +254 -0
- package/.agent-src/templates/scripts/work_engine/directives/mixed/stitch.py +229 -0
- package/.agent-src/templates/scripts/work_engine/directives/mixed/ui.py +231 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/__init__.py +113 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/_passthrough.py +44 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/apply.py +241 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/audit.py +414 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/design.py +335 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/polish.py +510 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/review.py +468 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/__init__.py +119 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/_skipped.py +37 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/apply.py +165 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/refine.py +66 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/report.py +62 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/test.py +115 -0
- package/.agent-src/templates/scripts/work_engine/dispatcher.py +331 -0
- 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/hooks/__init__.py +54 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +32 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.py +103 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.py +44 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.py +42 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_heartbeat.py +50 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_turn_check.py +49 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/directive_set_guard.py +53 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.py +50 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/state_shape_validation.py +52 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/trace.py +84 -0
- package/.agent-src/templates/scripts/work_engine/hooks/context.py +66 -0
- package/.agent-src/templates/scripts/work_engine/hooks/events.py +44 -0
- package/.agent-src/templates/scripts/work_engine/hooks/exceptions.py +79 -0
- package/.agent-src/templates/scripts/work_engine/hooks/registry.py +60 -0
- package/.agent-src/templates/scripts/work_engine/hooks/runner.py +73 -0
- package/.agent-src/templates/scripts/work_engine/hooks/settings.py +141 -0
- package/.agent-src/templates/scripts/work_engine/input_builders.py +163 -0
- package/.agent-src/templates/scripts/work_engine/intent/__init__.py +47 -0
- package/.agent-src/templates/scripts/work_engine/intent/classify.py +280 -0
- package/.agent-src/templates/scripts/work_engine/migration/__init__.py +8 -0
- package/.agent-src/templates/scripts/work_engine/migration/v0_to_v1.py +231 -0
- package/.agent-src/templates/scripts/{implement_ticket → work_engine}/persona_policy.py +1 -1
- package/.agent-src/templates/scripts/work_engine/resolvers/__init__.py +22 -0
- package/.agent-src/templates/scripts/work_engine/resolvers/diff.py +106 -0
- package/.agent-src/templates/scripts/work_engine/resolvers/file.py +113 -0
- package/.agent-src/templates/scripts/work_engine/resolvers/prompt.py +90 -0
- package/.agent-src/templates/scripts/work_engine/scoring/__init__.py +14 -0
- package/.agent-src/templates/scripts/work_engine/scoring/confidence.py +300 -0
- package/.agent-src/templates/scripts/work_engine/stack/__init__.py +31 -0
- package/.agent-src/templates/scripts/work_engine/stack/detect.py +187 -0
- package/.agent-src/templates/scripts/work_engine/state.py +641 -0
- package/.agent-src/templates/scripts/work_engine/state_io.py +202 -0
- package/.claude-plugin/marketplace.json +105 -2
- package/AGENTS.md +38 -8
- package/CHANGELOG.md +609 -0
- package/README.md +136 -14
- package/config/agent-settings.template.yml +45 -0
- package/config/gitignore-block.txt +4 -0
- package/docs/MIGRATION.md +122 -0
- package/docs/architecture.md +111 -35
- package/docs/contracts/STABILITY.md +95 -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/rule-interactions.md +107 -0
- package/docs/contracts/rule-interactions.yml +142 -0
- package/docs/contracts/ui-stack-extension.md +236 -0
- package/docs/contracts/ui-track-flow.md +338 -0
- package/docs/development.md +1 -1
- package/docs/getting-started.md +3 -3
- package/docs/installation.md +124 -2
- package/docs/migrations/commands-1.15.0.md +112 -0
- package/docs/showcase.md +204 -0
- package/docs/ui-track-mental-model.md +121 -0
- package/package.json +1 -1
- package/scripts/agent-config +199 -0
- package/scripts/audit_cloud_compatibility.py +288 -0
- package/scripts/build_cloud_bundle.py +458 -0
- package/scripts/build_linear_digest.py +263 -0
- package/scripts/chat_history.py +796 -7
- package/scripts/check_compression.py +139 -0
- package/scripts/check_iron_law_prominence.py +143 -0
- package/scripts/check_md_language.py +159 -0
- package/scripts/check_portability.py +38 -0
- package/scripts/check_public_links.py +185 -0
- package/scripts/check_references.py +1 -0
- package/scripts/check_reply_consistency.py +140 -0
- package/scripts/command_suggester/__init__.py +51 -0
- package/scripts/command_suggester/cooldown.py +132 -0
- package/scripts/command_suggester/loader.py +70 -0
- package/scripts/command_suggester/match.py +180 -0
- package/scripts/command_suggester/rank.py +120 -0
- package/scripts/command_suggester/render.py +86 -0
- package/scripts/command_suggester/sanitize.py +113 -0
- package/scripts/command_suggester/settings.py +125 -0
- package/scripts/command_suggester/types.py +78 -0
- package/scripts/hooks/augment-chat-history.sh +56 -0
- package/scripts/install-hooks.sh +67 -0
- package/scripts/install.py +150 -33
- package/scripts/lint_marketplace.py +27 -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/migrate_command_suggestions.py +151 -0
- package/scripts/release.py +297 -64
- package/scripts/schemas/command.schema.json +41 -0
- package/scripts/skill_linter.py +81 -0
- package/scripts/sync_agent_settings.py +42 -12
- package/scripts/update_counts.py +10 -0
- package/templates/consumer-settings/augment-cli-hooks.json +54 -0
- package/templates/consumer-settings/claude-settings.json +55 -1
- package/.agent-src/rules/chat-history.md +0 -171
- package/.agent-src/templates/scripts/implement_ticket/cli.py +0 -171
- package/.agent-src/templates/scripts/implement_ticket/dispatcher.py +0 -134
- package/.agent-src/templates/scripts/implement_ticket/steps/__init__.py +0 -49
- package/.agent-src/templates/scripts/implement_ticket/steps/refine.py +0 -140
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "always"
|
|
3
|
+
description: "Agent is never destructive and never endangers production systems — Hard Floor that always asks for production-trunk merges, deploys, pushes, prod data/infra changes, whimsical bulk deletions, and commits containing bulk deletions or infra changes; no autonomy setting, roadmap step, or standing instruction can bypass it"
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
source: package
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Non-Destructive by Default
|
|
9
|
+
|
|
10
|
+
The agent is **never** destructive and **never** endangers user work
|
|
11
|
+
or production systems. This is the universal safety floor — it applies
|
|
12
|
+
in every mode, every conversation, every turn. Autonomy settings, "just
|
|
13
|
+
keep going" directives, roadmap authorizations, and standing
|
|
14
|
+
permissions narrow other rules; **none of them lift this one**.
|
|
15
|
+
|
|
16
|
+
## The Iron Law
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
HARD FLOOR OVERRIDES EVERYTHING.
|
|
20
|
+
NO AUTONOMY SETTING, NO ROADMAP STEP, NO STANDING INSTRUCTION,
|
|
21
|
+
NO "JUST KEEP GOING" CAN BYPASS IT.
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Triggers below require explicit user confirmation **on this turn** —
|
|
25
|
+
not from a previous turn, not from a roadmap, not from a standing
|
|
26
|
+
autonomy directive (see [`autonomous-execution`](autonomous-execution.md#opt-in-detection--match-by-intent-not-exact-string)
|
|
27
|
+
for the anchor list of recognized phrases):
|
|
28
|
+
|
|
29
|
+
| Trigger | Examples |
|
|
30
|
+
|---|---|
|
|
31
|
+
| **Production-branch merge** | merging into `main`, `master`, `prod`, `production`, `release/*`, or any branch the project marks as deployment trunk |
|
|
32
|
+
| **Deploy / release** | `terraform apply` on prod, `kubectl apply` on prod, deploy scripts, release commands, tag pushes that trigger CI deployment |
|
|
33
|
+
| **Push to remote** | any `git push` (also covered by [`scope-control`](scope-control.md), restated so the floor never weakens) |
|
|
34
|
+
| **Production data / infra** | prod DB writes or migrations, prod config, secrets rotation, IAM / role / policy, DNS, anything in a `prod`-scoped path or pipeline |
|
|
35
|
+
| **Whimsical or unscoped bulk deletion** | `rm -rf <dir>`, `git rm -r`, glob deletions, `DROP TABLE`, `TRUNCATE`, `git reset --hard` past unpushed work — when the deletions are **not required by the current task**. Task-aligned bulk deletions are allowed during WIP — see below. |
|
|
36
|
+
| **Commit containing bulk deletions or infra changes** | a commit whose diff removes a directory, deletes ≥5 unrelated files, or touches Terraform / Pulumi / k8s manifests / Ansible / cloud-config — surface the diff and confirm even when [`commit-policy`](commit-policy.md) otherwise authorizes the commit |
|
|
37
|
+
|
|
38
|
+
Standing "just keep going" + next step crosses the floor → STOP,
|
|
39
|
+
surface what's about to happen (one numbered-options block per
|
|
40
|
+
[`user-interaction`](user-interaction.md)), wait. Other rules still
|
|
41
|
+
apply to every other step.
|
|
42
|
+
|
|
43
|
+
## Not in scope — deterministic regeneration
|
|
44
|
+
|
|
45
|
+
Output regenerated from a tracked source (compression, code-gen,
|
|
46
|
+
formatter passes, lock-file rebuilds) is not destructive — the source
|
|
47
|
+
of truth makes it reversible. Lives in
|
|
48
|
+
[`autonomous-execution`](autonomous-execution.md#trivial--just-act-do-not-ask)
|
|
49
|
+
§ Trivial, not here. Per-file diff approval is theater.
|
|
50
|
+
|
|
51
|
+
## Bulk deletions during WIP — allowed if task-connected
|
|
52
|
+
|
|
53
|
+
Deletions inside an **active, user-stated task** are allowed in the
|
|
54
|
+
working tree, **even multiple files or multiple folders**. The floor
|
|
55
|
+
moves to the **commit** (row 6 above), not the in-progress edit.
|
|
56
|
+
|
|
57
|
+
**Allowed during WIP (no floor on the edit):**
|
|
58
|
+
|
|
59
|
+
- A roadmap step or current task explicitly names the files / folders to remove
|
|
60
|
+
- Refactor naturally drops deprecated code the user already agreed is dead
|
|
61
|
+
- Cleanup of generated artifacts — `node_modules/`, `dist/`, `.next/`,
|
|
62
|
+
build caches, `vendor/` reinstall — never source code
|
|
63
|
+
- Single-file edits, single-class refactors, deleting **one** file the
|
|
64
|
+
user just named
|
|
65
|
+
- Renames and moves (technically delete + add)
|
|
66
|
+
|
|
67
|
+
**Floor fires on the edit when the deletion is:**
|
|
68
|
+
|
|
69
|
+
- Whimsical — "while I was in there", drive-by cleanup not part of the task
|
|
70
|
+
- Unnamed scope — "delete all the old tests" without a list, glob
|
|
71
|
+
across unrelated files, "clean up the legacy folder" with no inventory
|
|
72
|
+
- ≥5 unrelated files in one operation, outside the current task scope
|
|
73
|
+
- Content destruction — `DROP TABLE`, `TRUNCATE`, `git reset --hard`
|
|
74
|
+
past unpushed work, database wipes (destroys *content*, not just tree)
|
|
75
|
+
|
|
76
|
+
Ambiguous → floor wins. Ask.
|
|
77
|
+
|
|
78
|
+
**The commit of task-aligned bulk deletions still needs its own ask.**
|
|
79
|
+
A roadmap or task authorizes the *edit*; only the user-this-turn
|
|
80
|
+
authorizes the *commit* (row 6). Surface the diff (paths + counts), get
|
|
81
|
+
confirmation, then commit.
|
|
82
|
+
|
|
83
|
+
## Failure modes
|
|
84
|
+
|
|
85
|
+
- Treating a standing autonomy directive as cover for a Hard-Floor
|
|
86
|
+
action. Standing autonomy never lifts the floor; merging to `main`,
|
|
87
|
+
deploying, pushing, prod-data edits, or whimsical `rm -rf <dir>`
|
|
88
|
+
always ask.
|
|
89
|
+
- Reading a roadmap step that says "deploy to staging" or
|
|
90
|
+
"merge into main" as authorization. The roadmap can sequence the
|
|
91
|
+
work; only the user-this-turn can authorize the floor crossing.
|
|
92
|
+
- Refusing to delete files the user already named because "the floor
|
|
93
|
+
fires on `rm`". It does not — task-aligned WIP deletions are
|
|
94
|
+
allowed, even multi-folder. The floor fires when the deletion is
|
|
95
|
+
whimsical, unscoped, or about to be committed.
|
|
96
|
+
- Committing a diff that removes a directory, deletes ≥5 unrelated
|
|
97
|
+
files, or touches Terraform / k8s manifests / Ansible without
|
|
98
|
+
surfacing the diff first — even when [`commit-policy`](commit-policy.md)
|
|
99
|
+
otherwise authorizes commits (e.g. `/commit-in-chunks`, roadmap
|
|
100
|
+
pre-scan, an explicit "commit this now"). Bulk-deletion / infra
|
|
101
|
+
commits need their own ask, every time.
|
|
102
|
+
- Reading a roadmap step listing files to delete as authorization to
|
|
103
|
+
*commit* the deletion. The step authorizes the *edit*; the commit
|
|
104
|
+
is row 6 of the Hard Floor and needs its own confirmation.
|
|
105
|
+
|
|
106
|
+
## Cloud Behavior
|
|
107
|
+
|
|
108
|
+
The Hard Floor applies on every surface, including Claude.ai Web,
|
|
109
|
+
Skills API, and any cloud agent. There is no "cloud override" — the
|
|
110
|
+
floor predates and outranks any platform-specific autonomy default.
|
|
111
|
+
|
|
112
|
+
## See also
|
|
113
|
+
|
|
114
|
+
- [`autonomous-execution`](autonomous-execution.md) — defers to this rule for the floor; covers trivial-vs-blocking and opt-in detection only
|
|
115
|
+
- [`commit-policy`](commit-policy.md) — four commit-exception paths; row 6 of the floor still applies on top of all four
|
|
116
|
+
- [`scope-control`](scope-control.md) — git-ops permission gate; the floor is the never-overridable subset
|
|
117
|
+
- [`user-interaction`](user-interaction.md) — numbered-options Iron Law for the confirmation prompt
|
|
@@ -9,10 +9,14 @@ source: package
|
|
|
9
9
|
|
|
10
10
|
Before **any** push/PR in agent-config: run ALL CI checks locally.
|
|
11
11
|
|
|
12
|
+
## The Iron Law
|
|
13
|
+
|
|
12
14
|
```
|
|
13
15
|
NEVER push without running ALL CI checks locally first.
|
|
14
16
|
```
|
|
15
17
|
|
|
18
|
+
Every CI pipeline failure is preventable by running these checks before pushing.
|
|
19
|
+
|
|
16
20
|
## Required checks
|
|
17
21
|
|
|
18
22
|
### 1. Sync
|
|
@@ -9,8 +9,25 @@ source: package
|
|
|
9
9
|
|
|
10
10
|
Transformations (merge, refactor, compress, split) must produce output **at least as strong** as input.
|
|
11
11
|
|
|
12
|
+
## Iron Laws — every passage stays, caveman is fine
|
|
13
|
+
|
|
14
|
+
Sections marked **Iron Law** (heading matches `# Iron Law`, `# Iron Laws`,
|
|
15
|
+
`# The Iron Law`, any level, numbered like `Iron Law 1`, `Iron Law 2`)
|
|
16
|
+
are **non-negotiable**, strictest preservation:
|
|
17
|
+
|
|
18
|
+
- [ ] **Heading verbatim** — exact text, exact level. Drop heading → law gone, even if code block survives.
|
|
19
|
+
- [ ] **Fenced code blocks byte-for-byte** — the law itself.
|
|
20
|
+
- [ ] **Negation clauses kept** — `NO X`, `NEVER Y`, `NOT Z` stay. Load-bearing exception denials, not filler.
|
|
21
|
+
- [ ] **Every passage stays** — every paragraph, every list item, every fenced code block from source survives in compressed output, in order. One paragraph → one paragraph; one bullet → one bullet. Dropping whole sentences, merging two paragraphs, skipping a list item is forbidden, even if surviving prose still "makes the point".
|
|
22
|
+
- [ ] **No Iron Law downgrades** — `## Iron Law` MUST NOT become `### Iron Law`, `**Iron Law:**`, or inline prose. Heading level is part of prominence.
|
|
23
|
+
|
|
24
|
+
**Caveman style encouraged for Iron Law bodies** — drop articles ("the", "a"), shorten phrasing, primitive grammar, terse cave-speak. Word count not a budget; structural unit count is. Every paragraph, bullet, code block from source present → compress as hard as you want. Forbidden is **deletion**: rationale paragraph stays, canonical-failure example stays, every "NEVER X" bullet stays.
|
|
25
|
+
|
|
26
|
+
`scripts/check_compression.py` enforces mechanically — any violation is `error`, not warning.
|
|
27
|
+
|
|
12
28
|
## Checklist — verify before completing
|
|
13
29
|
|
|
30
|
+
- [ ] **Iron Law sections** preserved per rules above — heading, body, fenced blocks, rationale
|
|
14
31
|
- [ ] Strongest validation step preserved
|
|
15
32
|
- [ ] Strongest example preserved
|
|
16
33
|
- [ ] Strongest anti-pattern / "Do NOT" preserved
|
|
@@ -21,6 +38,9 @@ Transformations (merge, refactor, compress, split) must produce output **at leas
|
|
|
21
38
|
|
|
22
39
|
## Reject if
|
|
23
40
|
|
|
41
|
+
- Iron Law heading removed or downgraded
|
|
42
|
+
- Paragraph, list item, or fenced code block dropped from Iron Law section
|
|
43
|
+
- Negation clauses or canonical-failure prose stripped from Iron Law
|
|
24
44
|
- Validation, example, or anti-pattern removed without replacement
|
|
25
45
|
- Decision logic weakened
|
|
26
46
|
- Scope broadened by merging unrelated concerns
|
|
@@ -1,28 +1,86 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: "auto"
|
|
3
|
-
description: "
|
|
3
|
+
description: "Any touch to agents/roadmaps/ — creating, renaming, deleting, or moving a roadmap file (including into archive/ or skipped/), editing checkboxes ([x], [~], [-]), or adding/renaming/removing phases — must regenerate the roadmap dashboard in the SAME response; a roadmap that hits 0 open items must also be archived in the SAME response"
|
|
4
4
|
alwaysApply: false
|
|
5
5
|
source: package
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Roadmap Progress Sync
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## Iron Law — dashboard sync
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
```
|
|
13
|
+
ANY ROADMAP TOUCH → REGENERATE THE DASHBOARD, SAME RESPONSE.
|
|
14
|
+
NO EXCEPTIONS. NO "I'LL DO IT AT THE END". NO BATCHING ACROSS TURNS.
|
|
15
|
+
A ROADMAP NOT IN THE DASHBOARD IS A RULE VIOLATION, NOT AN OVERSIGHT.
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Roadmap touch =** create the file, rename it, delete it, move it
|
|
19
|
+
between `roadmaps/` ↔ `archive/` ↔ `skipped/`, add/rename/remove a
|
|
20
|
+
phase, **OR** flip any checkbox (`[ ]` ↔ `[x]` ↔ `[~]` ↔ `[-]`).
|
|
16
21
|
|
|
17
22
|
`agents/roadmaps-progress.md` is the read-only dashboard. Every
|
|
18
|
-
unsynced edit makes it lie to the next reader.
|
|
23
|
+
unsynced edit makes it lie to the next reader. Created a roadmap
|
|
24
|
+
without regenerating? The dashboard claims it does not exist. Marked
|
|
25
|
+
8 steps `[x]` and forgot the regen? The dashboard says 0 done.
|
|
26
|
+
|
|
27
|
+
## Iron Law — every active roadmap is trackable
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
EVERY ACTIVE ROADMAP MUST CONTAIN AT LEAST ONE TRACKABLE CHECKBOX
|
|
31
|
+
(`- [ ]`) PER NON-INTRO PHASE. ROADMAPS WITHOUT EXECUTABLE STEPS
|
|
32
|
+
EITHER GET A CHECKLIST OR THE `status: draft` FLAG.
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Active roadmap =** any file in `agents/roadmaps/` (root, not
|
|
36
|
+
`archive/` or `skipped/`) without `status: draft` frontmatter.
|
|
37
|
+
|
|
38
|
+
**Trackable checkbox =** an actionable `- [ ]` line under a `## Phase N`
|
|
39
|
+
or `### Phase N` heading (numeric `Phase 1`, roman `Phase II`, or
|
|
40
|
+
letter-track `Phase A1` — matched by the dashboard's `PHASE_RE`).
|
|
41
|
+
Tables of decisions, ICE matrices, ADR captures, and "block
|
|
42
|
+
sequencing" tables are valid **rationale**, but they do not satisfy
|
|
43
|
+
this rule on their own — they must be paired with at least one
|
|
44
|
+
`## Phase N` section whose checkboxes execute the decision.
|
|
45
|
+
Headings such as `## Phase steps`, `### Sequencing — Phase 1 …`, or
|
|
46
|
+
`## Block A` do **not** count — only the canonical `Phase <id>`
|
|
47
|
+
form parsed by the dashboard.
|
|
48
|
+
|
|
49
|
+
## Status — binary `ready` (default) vs `draft`
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
---
|
|
53
|
+
status: draft # hidden from the dashboard until flipped
|
|
54
|
+
---
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Two values, no synonyms. Anything else — no frontmatter at all,
|
|
58
|
+
`status: ready`, an unknown value — counts as **ready** and lands
|
|
59
|
+
in the dashboard.
|
|
60
|
+
|
|
61
|
+
- **Ready** is the implicit default. New roadmaps are created
|
|
62
|
+
ready unless the user explicitly says draft. Ready roadmaps are
|
|
63
|
+
listed in the dashboard, count towards open/done totals, and
|
|
64
|
+
trip the "completed but not archived" warning when they close.
|
|
65
|
+
- **Draft** hides the file from the dashboard entirely (not
|
|
66
|
+
counted, not listed). Use it while the roadmap is still being
|
|
67
|
+
authored, while waiting for upstream decisions, or as a
|
|
68
|
+
capture-only synthesis that has not yet been promoted to
|
|
69
|
+
executable phases. Flip to ready (or remove the field) the
|
|
70
|
+
moment the roadmap is ready to track.
|
|
71
|
+
|
|
72
|
+
A `## Decisions` or `## Block sequencing` table is **not** a roadmap
|
|
73
|
+
on its own. Either pair it with a `## Phase N: <name>` section whose
|
|
74
|
+
checkboxes execute the decision, or mark the file `status: draft`
|
|
75
|
+
until the executable phases land.
|
|
19
76
|
|
|
20
77
|
**Completion = archival, same response.** When the edit takes a
|
|
21
78
|
roadmap to `count_open == 0` (every item is `[x]`, `[~]`, or `[-]`),
|
|
22
|
-
`git mv` it into `agents/roadmaps/archive/` (or `skipped/` if no
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
for the archive vs
|
|
79
|
+
`git mv` it into `agents/roadmaps/archive/` (or `skipped/` if no `[x]`
|
|
80
|
+
at all) **before** regenerating the dashboard. A 100%-complete
|
|
81
|
+
roadmap left under `agents/roadmaps/` is a rule violation, not an
|
|
82
|
+
optional cleanup. See `roadmap-management` skill for the archive vs
|
|
83
|
+
skipped decision table.
|
|
26
84
|
|
|
27
85
|
## How to regenerate
|
|
28
86
|
|
|
@@ -31,7 +89,7 @@ for the archive vs skipped decision table.
|
|
|
31
89
|
```
|
|
32
90
|
|
|
33
91
|
The `./agent-config` wrapper is written into the project root by the
|
|
34
|
-
installer and delegates to the master CLI inside
|
|
92
|
+
package installer and delegates to the master CLI inside
|
|
35
93
|
`node_modules/@event4u/agent-config/` or `vendor/event4u/agent-config/`.
|
|
36
94
|
No global tooling required.
|
|
37
95
|
|
|
@@ -39,29 +97,103 @@ No global tooling required.
|
|
|
39
97
|
|
|
40
98
|
| Edit | Must run, same response |
|
|
41
99
|
|---|---|
|
|
100
|
+
| **Create a new roadmap file** | regenerate dashboard |
|
|
101
|
+
| **Rename or delete a roadmap file** | regenerate dashboard |
|
|
42
102
|
| Mark step `[x]`, `[~]`, `[-]`, or unmark back to `[ ]` | regenerate dashboard |
|
|
43
103
|
| Add, rename, or remove a phase | regenerate dashboard |
|
|
44
|
-
| Create a new roadmap file | regenerate dashboard |
|
|
45
104
|
| **Last `[ ]` flips** — roadmap reaches `count_open == 0` | `git mv` → `archive/` (or `skipped/`) **then** regenerate dashboard |
|
|
46
105
|
| Move roadmap between `roadmaps/` ↔ `archive/` ↔ `skipped/` | regenerate dashboard |
|
|
47
106
|
|
|
48
|
-
**Batching:** multiple
|
|
49
|
-
regeneration at the end
|
|
50
|
-
|
|
51
|
-
|
|
107
|
+
**Batching rule:** if you edit multiple checkboxes in one response, a
|
|
108
|
+
**single** regeneration at the end of that response is enough — but
|
|
109
|
+
the response must not end without it. If one of those edits closes a
|
|
110
|
+
roadmap, archive it first, then run the single regen.
|
|
111
|
+
|
|
112
|
+
## Autonomous execution — checkbox cadence
|
|
113
|
+
|
|
114
|
+
When executing a roadmap autonomously (multi-turn, no per-step user
|
|
115
|
+
prompt), the user loses progress visibility unless checkboxes flip
|
|
116
|
+
**as work lands**, not in a batch at the end. Iron Law:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
EVERY DONE STEP FLIPS [ ] → [x] IN NEXT REPLY THAT ACKNOWLEDGES IT.
|
|
120
|
+
NO "I UPDATE ROADMAP AT END OF PHASE."
|
|
121
|
+
NO "FOUR STEPS DONE, ONE COMMIT, ONE REGEN."
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Step counts as completed when:
|
|
125
|
+
|
|
126
|
+
- Code / docs change for that step has been **written and saved** AND
|
|
127
|
+
- Verification cited in the step (project CI command, targeted test, lint) has
|
|
128
|
+
**passed in this response or an earlier one** — fresh output, not memory.
|
|
129
|
+
|
|
130
|
+
Then in the **same reply**: flip the checkbox, regenerate the
|
|
131
|
+
dashboard, commit if commit policy allows.
|
|
132
|
+
|
|
133
|
+
**Forbidden pattern** (canonical failure):
|
|
134
|
+
|
|
135
|
+
> Turn 1: implement Step 1. Turn 2: implement Step 2. Turn 3:
|
|
136
|
+
> implement Step 3. Turn 4: implement Step 4. Turn 5: "all done,
|
|
137
|
+
> let me update the roadmap and commit." → the user spent four turns
|
|
138
|
+
> without dashboard movement.
|
|
139
|
+
|
|
140
|
+
**Required pattern:**
|
|
141
|
+
|
|
142
|
+
> Turn 1: implement Step 1, flip `[x]`, regen, commit.
|
|
143
|
+
> Turn 2: implement Step 2, flip `[x]`, regen, commit. …
|
|
144
|
+
|
|
145
|
+
A reply that lands a verified step without flipping its checkbox
|
|
146
|
+
is a rule violation.
|
|
147
|
+
|
|
148
|
+
**In-progress marker:** when a step takes more than one reply,
|
|
149
|
+
mark it `[~]` the moment work starts on it and regenerate. The
|
|
150
|
+
user sees one row move from `[ ]` to `[~]` to `[x]` instead of
|
|
151
|
+
silent rows. `[~]` is treated as open for `count_open` but moves
|
|
152
|
+
the phase percentage forward in the dashboard.
|
|
153
|
+
|
|
154
|
+
## Pre-send self-check — MANDATORY
|
|
155
|
+
|
|
156
|
+
Before sending any reply that touched `agents/roadmaps/`, run this
|
|
157
|
+
silent gate:
|
|
158
|
+
|
|
159
|
+
1. Did this turn create, rename, delete, or move a roadmap file? → regen MUST be in the reply.
|
|
160
|
+
2. Did this turn flip any checkbox in a roadmap file? → regen MUST be in the reply.
|
|
161
|
+
3. Did the regen output (`✅ Wrote agents/roadmaps-progress.md · …`) actually appear this turn? → if no, run it now before sending.
|
|
162
|
+
4. **Autonomous roadmap execution gate** — did this turn complete a roadmap step (code saved + verification passed) without flipping its checkbox? → flip `[x]` (or `[~]` if multi-turn) and regen before sending.
|
|
163
|
+
5. **Trackable-roadmap gate** — did this turn create or substantially edit a roadmap file? → does it now contain at least one `- [ ]` per non-intro phase, **or** carry `status: draft` in frontmatter? → if neither, add the checklist or the draft flag before sending.
|
|
164
|
+
|
|
165
|
+
Any "yes" + no regen run = rule violation. Rerun before sending.
|
|
52
166
|
|
|
53
|
-
##
|
|
167
|
+
## Failure modes
|
|
54
168
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
169
|
+
- **Created the roadmap, marked Phase 1 done across multiple turns,
|
|
170
|
+
never regenerated** — dashboard silently lies "this roadmap does
|
|
171
|
+
not exist" to the next reader. Canonical failure of this rule;
|
|
172
|
+
the rule was hardened in response to it.
|
|
173
|
+
- **Regenerated yesterday, edited today, "I'll regen at session
|
|
174
|
+
end"** — session ends from a crash, regen never lands.
|
|
175
|
+
- **Closed a roadmap (last `[ ]` → `[x]`) and regenerated before
|
|
176
|
+
`git mv`** — the closed roadmap reappears in "Open roadmaps".
|
|
177
|
+
- **Edited the dashboard by hand to "fix it quickly"** — next regen
|
|
178
|
+
overwrites the manual edit; no audit trail of why.
|
|
179
|
+
- **Autonomous run, four steps shipped across four turns, dashboard
|
|
180
|
+
flat the whole time, single regen at the end** — user lost
|
|
181
|
+
progress visibility for the entire run. Each completed step must
|
|
182
|
+
flip its checkbox in the reply that ships it.
|
|
183
|
+
- **Decision-only roadmap shipped without checkboxes** — the file
|
|
184
|
+
documents synthesized decisions, ICE matrices, or block sequencing
|
|
185
|
+
but contains zero `- [ ]` items. The dashboard regenerates with
|
|
186
|
+
`0/0 steps` for that file or omits it from the open set entirely.
|
|
187
|
+
The reader thinks no work is planned. Either pair the decisions
|
|
188
|
+
with a `## Phase N` / `## Implementation Checklist` section, or
|
|
189
|
+
mark the file `status: draft` so it is hidden until the executable
|
|
190
|
+
phases land.
|
|
59
191
|
|
|
60
192
|
## Do NOT
|
|
61
193
|
|
|
62
194
|
- Do NOT edit `agents/roadmaps-progress.md` by hand — always regenerate.
|
|
63
|
-
- Do NOT defer regen to "next commit" or "before push" — same response.
|
|
64
|
-
- Do NOT rely on CI (`--check` mode) as first line of defence — CI is last-line, not real-time.
|
|
65
|
-
- Do NOT skip regen because "only one checkbox changed" — the dashboard aggregates counts and phase percentages that shift on single edits.
|
|
66
|
-
- Do NOT leave a 100%-complete roadmap in `agents/roadmaps/` "for review" — archive same response, ask the user afterwards if needed, not before.
|
|
67
|
-
- Do NOT regenerate the dashboard before the `git mv` when a roadmap closes — otherwise
|
|
195
|
+
- Do NOT defer the regen to "next commit" or "before push" — same response.
|
|
196
|
+
- Do NOT rely on CI (`--check` mode) as the first line of defence — CI is last-line, not real-time.
|
|
197
|
+
- Do NOT skip the regen because "only one checkbox changed" — the dashboard aggregates counts and phase percentages that shift on single edits.
|
|
198
|
+
- Do NOT leave a 100%-complete roadmap in `agents/roadmaps/` "for review" — archive it in the same response, ask the user afterwards if needed, not before.
|
|
199
|
+
- Do NOT regenerate the dashboard before the `git mv` when a roadmap closes — otherwise the completed roadmap reappears in "Open roadmaps".
|
|
@@ -42,7 +42,7 @@ When active, every closing output MUST:
|
|
|
42
42
|
|
|
43
43
|
## What this rule does NOT do
|
|
44
44
|
|
|
45
|
-
Infer the mode (Phase-3 router does that).
|
|
45
|
+
Infer the mode (Phase-3 router does that). Touch `.agent-settings.yml`
|
|
46
46
|
(only `/mode` writes). Change the contracts (guideline is source of truth).
|
|
47
47
|
|
|
48
48
|
## See also
|
|
@@ -18,7 +18,11 @@ source: package
|
|
|
18
18
|
|
|
19
19
|
## Git operations — permission-gated
|
|
20
20
|
|
|
21
|
-
The user decides the git shape of the work.
|
|
21
|
+
The user decides the git shape of the work. Never improvise.
|
|
22
|
+
|
|
23
|
+
> **Commit specifics:** see [`commit-policy`](commit-policy.md) — narrower
|
|
24
|
+
> than the general "no git ops without permission" below (never-ask
|
|
25
|
+
> default + roadmap-authorized exception).
|
|
22
26
|
|
|
23
27
|
- NEVER commit, push, merge, rebase, or force-push without explicit user permission.
|
|
24
28
|
- NEVER create, switch, or delete a branch without explicit user permission.
|
|
@@ -26,6 +30,12 @@ The user decides the git shape of the work.
|
|
|
26
30
|
- NEVER create, close, reopen, or retarget a pull request without explicit
|
|
27
31
|
user permission.
|
|
28
32
|
- NEVER push a tag or create a release without explicit user permission.
|
|
33
|
+
- NEVER include version numbers, releases, deprecation dates,
|
|
34
|
+
release-tied milestones, or git tags in roadmaps, plans, tickets, or
|
|
35
|
+
any planning artifact. Roadmaps plan **work**; releases are a
|
|
36
|
+
separate user decision. Never surface "which release" as a numbered
|
|
37
|
+
option, ADR field, or roadmap entry. If user wants a release pinned
|
|
38
|
+
to a milestone, they say so explicitly.
|
|
29
39
|
- If a task seems to need a separate branch or PR, STOP and **brief
|
|
30
40
|
first, ask second**. The brief MUST cover, in order:
|
|
31
41
|
1. **Why** — what the new branch solves that the current one cannot.
|
|
@@ -38,3 +48,34 @@ The user decides the git shape of the work.
|
|
|
38
48
|
"Explicit permission" = the user said so this turn or gave a standing
|
|
39
49
|
instruction they have not revoked. Earlier permission for another op
|
|
40
50
|
does not carry over.
|
|
51
|
+
|
|
52
|
+
## Production, infrastructure, bulk-destructive — Hard Floor
|
|
53
|
+
|
|
54
|
+
Subset of the above is **never** autonomous and never auto-permitted
|
|
55
|
+
by a standing autonomy directive. Canonical rule:
|
|
56
|
+
[`non-destructive-by-default`](non-destructive-by-default.md).
|
|
57
|
+
Restated so this file remains the single read for git/scope concerns:
|
|
58
|
+
|
|
59
|
+
- **Production-branch merges** — `main`, `master`, `prod`, `production`, `release/*`, or any deployment-trunk branch. Always ask, even when the roadmap step says "merge".
|
|
60
|
+
- **Deploys / releases** — `terraform apply` / `kubectl apply` on prod, deploy scripts, release commands, tag pushes that trigger CI deployment. Always ask.
|
|
61
|
+
- **Production data / infrastructure** — prod DB writes / migrations, prod config edits, secrets rotation, IAM / role / policy, DNS, anything in a `prod`-scoped path or pipeline. Always ask.
|
|
62
|
+
- **Bulk-destructive ops** — wildcard or directory deletion (`rm -rf <dir>`, `git rm -r`), `DROP TABLE`, `TRUNCATE`, `git reset --hard` past unpushed work, mass class / module / migration deletion. Always ask.
|
|
63
|
+
|
|
64
|
+
A roadmap step or earlier turn does **not** count as authorization for
|
|
65
|
+
these. Authorization is "the user said so on this turn".
|
|
66
|
+
|
|
67
|
+
## Decline = silence — no re-asking on the same task
|
|
68
|
+
|
|
69
|
+
After a declined proposal (branch switch, PR, tag/release entry,
|
|
70
|
+
worktree, version pinning in a roadmap), do **not** raise it again on
|
|
71
|
+
the same task. Decline stands until user reopens it.
|
|
72
|
+
|
|
73
|
+
Right moment to ask — at most **once**, only when genuinely useful —
|
|
74
|
+
is **before** work starts (writing roadmap, opening ticket), not
|
|
75
|
+
mid-execution. During roadmap execution the branch question is
|
|
76
|
+
settled; do not resurface it step by step.
|
|
77
|
+
|
|
78
|
+
A proposal that "might be sensible" is not enough reason to ask.
|
|
79
|
+
Default: stay on current branch, no release language. Only ask with
|
|
80
|
+
concrete evidence-based reason (e.g. risky migration → spike branch).
|
|
81
|
+
If in doubt, do not ask.
|
|
@@ -24,6 +24,5 @@ source: package
|
|
|
24
24
|
|
|
25
25
|
→ Size limits and details: `.augment/guidelines/agent-infra/size-and-scope.md`
|
|
26
26
|
|
|
27
|
-
→ Frontmatter contract
|
|
28
|
-
|
|
29
|
-
Schemas live in `scripts/schemas/` and are enforced by `python3 scripts/validate_frontmatter.py`.
|
|
27
|
+
→ Frontmatter contract: schemas live in `scripts/schemas/` and are enforced by
|
|
28
|
+
`python3 scripts/validate_frontmatter.py`.
|
|
@@ -25,10 +25,8 @@ Every skill MUST have: `When to use`, `Procedure`, `Gotcha`, `Output format`, `D
|
|
|
25
25
|
## Frontmatter Contract
|
|
26
26
|
|
|
27
27
|
Every skill's YAML frontmatter MUST validate against `scripts/schemas/skill.schema.json`.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
reported by `scripts/skill_linter.py` as `schema_<rule>` errors and fail
|
|
31
|
-
`python3 scripts/validate_frontmatter.py` and the full CI pipeline.
|
|
28
|
+
Violations are reported by `scripts/skill_linter.py` as `schema_<rule>` errors
|
|
29
|
+
and fail `python3 scripts/validate_frontmatter.py` and the full CI pipeline.
|
|
32
30
|
|
|
33
31
|
## Description Triggering
|
|
34
32
|
|
|
@@ -47,10 +45,7 @@ Make descriptions "pushy" — explicit about when to fire:
|
|
|
47
45
|
adjectives, drop the second example phrasing, or collapse a list — do
|
|
48
46
|
**not** drop the trigger vocabulary or the `even if ...` tail.
|
|
49
47
|
|
|
50
|
-
Source: [`skills/skill-creator` in `anthropics/skills`](https://github.com/anthropics/skills/blob/main/skills/skill-creator/SKILL.md)
|
|
51
|
-
— description-optimization guidance adopted via
|
|
52
|
-
[`agents/roadmaps/archive/road-to-anthropic-alignment.md`](../../../agents/roadmaps/archive/road-to-anthropic-alignment.md)
|
|
53
|
-
Phase 2.
|
|
48
|
+
Source: [`skills/skill-creator` in `anthropics/skills`](https://github.com/anthropics/skills/blob/main/skills/skill-creator/SKILL.md).
|
|
54
49
|
|
|
55
50
|
**Litmus test:** Read the description cold, without the skill's body. If you
|
|
56
51
|
cannot name at least two phrasings a user would realistically type that should
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "always"
|
|
3
|
+
description: "UI work — never write a component, screen, or partial without existing-ui-audit findings populated in state.ui_audit; the audit is the gate, not a suggestion"
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
source: package
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# UI-Audit Before Build
|
|
9
|
+
|
|
10
|
+
Defense-in-depth twin of the dispatcher gate in
|
|
11
|
+
[`directives/ui/audit.py`](../templates/scripts/work_engine/directives/ui/audit.py).
|
|
12
|
+
The dispatcher refuses to advance past `refine` without
|
|
13
|
+
`state.ui_audit`; this rule refuses the write even when the agent
|
|
14
|
+
acts outside the dispatcher (free-form edit, "add a tile" request,
|
|
15
|
+
side conversation that bypasses [`/work`](../commands/work.md) or
|
|
16
|
+
[`/implement-ticket`](../commands/implement-ticket.md)).
|
|
17
|
+
|
|
18
|
+
## The Iron Law
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
NO NEW COMPONENT, SCREEN, PARTIAL, OR PAGE WITHOUT AUDIT FINDINGS.
|
|
22
|
+
EXISTING-UI-AUDIT RUNS FIRST. ALWAYS.
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Skipping the audit is the single biggest source of duplicated
|
|
26
|
+
components and drift from project tokens. The audit is cheap (60 s
|
|
27
|
+
on a primed cache); the cost of skipping is a refactor.
|
|
28
|
+
|
|
29
|
+
## When this rule activates
|
|
30
|
+
|
|
31
|
+
Before writing or editing any non-trivial UI surface:
|
|
32
|
+
|
|
33
|
+
- New page / screen / route component
|
|
34
|
+
- New Livewire / Flux / Blade / React / Vue / Svelte component or partial
|
|
35
|
+
- Major edit to an existing screen (new section, new state, new layout band)
|
|
36
|
+
|
|
37
|
+
Recognise the trigger from wording even when nobody says "audit":
|
|
38
|
+
"add a dashboard tile", "build a settings panel", "neue Komponente
|
|
39
|
+
für …", "render the orders table", "create the empty state for …".
|
|
40
|
+
|
|
41
|
+
## Allow-list — when to skip
|
|
42
|
+
|
|
43
|
+
Skip only when **all** hold:
|
|
44
|
+
|
|
45
|
+
- `directive_set == "ui-trivial"` (set by Phase 1's intent classifier).
|
|
46
|
+
- The change is provably bounded: ≤ 1 file, ≤ 5 changed lines, no
|
|
47
|
+
new component, no new state, no new dependency.
|
|
48
|
+
|
|
49
|
+
Any precondition fails at edit time → stop, reclassify as
|
|
50
|
+
`ui-improve`, re-enter the gate. Backend-only edits and
|
|
51
|
+
documentation work were never in scope for this rule.
|
|
52
|
+
|
|
53
|
+
## What "audit findings" means
|
|
54
|
+
|
|
55
|
+
`state.ui_audit` is a non-empty dict carrying at least one of:
|
|
56
|
+
|
|
57
|
+
- `components_found` — `{path, name, kind, similarity?}` inventory
|
|
58
|
+
entries from [`existing-ui-audit`](../skills/existing-ui-audit/SKILL.md).
|
|
59
|
+
- `greenfield: true` plus `greenfield_decision` ∈
|
|
60
|
+
`{scaffold, bare, external_reference}`.
|
|
61
|
+
- Legacy `components` alias — back-compat for the same shape.
|
|
62
|
+
|
|
63
|
+
`null`, `{}`, or a dict without those keys is **not** findings;
|
|
64
|
+
emit `@agent-directive: existing-ui-audit` instead of writing code.
|
|
65
|
+
|
|
66
|
+
## What to do when the gate fires
|
|
67
|
+
|
|
68
|
+
1. Stop. Do not open an editor on a component file.
|
|
69
|
+
2. Run [`existing-ui-audit`](../skills/existing-ui-audit/SKILL.md);
|
|
70
|
+
it writes the result to `state.ui_audit`.
|
|
71
|
+
3. On rebound, the dispatcher enters `design` with the audit as
|
|
72
|
+
defaults in the design-brief halt.
|
|
73
|
+
4. Greenfield → present the numbered scaffold / bare /
|
|
74
|
+
external-reference halt **before** code; record the pick in
|
|
75
|
+
`state.ui_audit.greenfield_decision`.
|
|
76
|
+
|
|
77
|
+
## Failure modes
|
|
78
|
+
|
|
79
|
+
- Writing the component first and "thinking about reuse later".
|
|
80
|
+
- Citing a similar-looking component from memory without verifying
|
|
81
|
+
it via the audit.
|
|
82
|
+
- Treating `state.ui_audit = {}` as "audit ran, found nothing" —
|
|
83
|
+
empty dict is rejected on purpose; an audit that finds nothing
|
|
84
|
+
must record either ≥1 `components_found` or the greenfield branch.
|
|
85
|
+
- Bypassing the gate for "just one tile".
|
|
86
|
+
|
|
87
|
+
## Interactions
|
|
88
|
+
|
|
89
|
+
- [`improve-before-implement`](improve-before-implement.md) — runs
|
|
90
|
+
first when the request is ambiguous; this rule is the next gate.
|
|
91
|
+
- [`ask-when-uncertain`](ask-when-uncertain.md) — "just build it"
|
|
92
|
+
does **not** drop the audit; acknowledge, run audit, continue.
|
|
93
|
+
- [`directives/ui/audit.py`](../templates/scripts/work_engine/directives/ui/audit.py)
|
|
94
|
+
— code-layer twin; this rule covers the cases where the engine
|
|
95
|
+
is not in the loop.
|
|
96
|
+
- [`existing-ui-audit`](../skills/existing-ui-audit/SKILL.md) — the
|
|
97
|
+
skill that produces the findings.
|
|
98
|
+
|
|
99
|
+
## Cloud Behavior
|
|
100
|
+
|
|
101
|
+
On cloud surfaces the engine is not shipped, so `state.ui_audit`
|
|
102
|
+
does not exist. The Iron Law still applies: take the visible
|
|
103
|
+
inventory of files in conversation context as the audit, and
|
|
104
|
+
surface a one-line audit summary in the reply before writing the
|
|
105
|
+
component. The gate is satisfied by an explicit summary, not by
|
|
106
|
+
silently skipping.
|