@event4u/agent-config 9.25.0 → 9.27.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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +58 -143
- package/README.md +1 -1
- package/dist/agent-src/commands/analyze/conformance.md +21 -2
- package/dist/agent-src/commands/review/changes.md +6 -5
- package/dist/agent-src/commands/roadmap/next.md +256 -0
- package/dist/agent-src/commands/roadmap.md +12 -4
- package/dist/agent-src/contexts/execution/subagent-routing.md +4 -1
- package/dist/agent-src/rules/active-remediation.md +2 -0
- package/dist/agent-src/rules/analysis-skill-routing.md +2 -0
- package/dist/agent-src/rules/architecture.md +2 -0
- package/dist/agent-src/rules/artifact-drafting-protocol.md +2 -0
- package/dist/agent-src/rules/artifact-engagement-recording.md +2 -0
- package/dist/agent-src/rules/augment-edit-discipline.md +2 -0
- package/dist/agent-src/rules/autonomous-execution.md +2 -0
- package/dist/agent-src/rules/brand-consistency.md +2 -0
- package/dist/agent-src/rules/brand-source-of-truth.md +2 -0
- package/dist/agent-src/rules/broken-access-control.md +2 -0
- package/dist/agent-src/rules/cli-output-handling.md +2 -0
- package/dist/agent-src/rules/code-comment-discipline.md +2 -0
- package/dist/agent-src/rules/code-provenance.md +2 -0
- package/dist/agent-src/rules/command-suggestion-policy.md +2 -0
- package/dist/agent-src/rules/commit-conventions.md +2 -0
- package/dist/agent-src/rules/communication-through-line.md +2 -0
- package/dist/agent-src/rules/content-quoting-floor.md +2 -0
- package/dist/agent-src/rules/context-hygiene.md +10 -0
- package/dist/agent-src/rules/copilot-routing.md +2 -0
- package/dist/agent-src/rules/cross-source-consistency.md +2 -0
- package/dist/agent-src/rules/decision-revisit-gate.md +2 -0
- package/dist/agent-src/rules/delegation-policy.md +5 -2
- package/dist/agent-src/rules/design-fidelity.md +19 -1
- package/dist/agent-src/rules/design-review-after-ui-write.md +120 -0
- package/dist/agent-src/rules/devcontainer-routing.md +2 -0
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +2 -0
- package/dist/agent-src/rules/docker-commands.md +2 -0
- package/dist/agent-src/rules/domain-adoption-policy.md +2 -0
- package/dist/agent-src/rules/domain-safety-disclaimer.md +2 -0
- package/dist/agent-src/rules/domain-safety-pii.md +2 -0
- package/dist/agent-src/rules/domain-safety-retention.md +2 -0
- package/dist/agent-src/rules/downstream-changes.md +2 -0
- package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
- package/dist/agent-src/rules/evaluator-independence.md +19 -3
- package/dist/agent-src/rules/external-code-graph-interop.md +2 -0
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -0
- package/dist/agent-src/rules/fast-path-marker-visibility.md +2 -0
- package/dist/agent-src/rules/finance-safety-floor.md +2 -0
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +2 -0
- package/dist/agent-src/rules/git-history-discipline.md +3 -1
- package/dist/agent-src/rules/guidelines.md +2 -0
- package/dist/agent-src/rules/history-discipline.md +2 -0
- package/dist/agent-src/rules/icon-consistency.md +2 -0
- package/dist/agent-src/rules/image-likeness-and-rights.md +2 -0
- package/dist/agent-src/rules/improve-before-implement.md +2 -0
- package/dist/agent-src/rules/invite-challenge.md +2 -0
- package/dist/agent-src/rules/laravel-routing.md +2 -0
- package/dist/agent-src/rules/laravel-translations.md +2 -0
- package/dist/agent-src/rules/legal-safety-floor.md +2 -0
- package/dist/agent-src/rules/lethal-trifecta-guard.md +2 -0
- package/dist/agent-src/rules/linked-projects-onboarding-gate.md +2 -0
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +2 -0
- package/dist/agent-src/rules/markdown-safe-codeblocks.md +2 -0
- package/dist/agent-src/rules/media-governance-routing.md +2 -0
- package/dist/agent-src/rules/media-sync-ground-truth.md +2 -0
- package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
- package/dist/agent-src/rules/missing-tool-handling.md +2 -0
- package/dist/agent-src/rules/model-recommendation.md +2 -0
- package/dist/agent-src/rules/no-attribution-footers.md +2 -0
- package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +2 -0
- package/dist/agent-src/rules/no-pr-progress-comments.md +2 -0
- package/dist/agent-src/rules/no-roadmap-references.md +2 -0
- package/dist/agent-src/rules/notes-first-reasoning.md +2 -0
- package/dist/agent-src/rules/onboarding-gate.md +2 -0
- package/dist/agent-src/rules/output-discipline.md +2 -0
- package/dist/agent-src/rules/package-ci-checks.md +2 -0
- package/dist/agent-src/rules/persona-governance.md +2 -0
- package/dist/agent-src/rules/php-coding.md +2 -0
- package/dist/agent-src/rules/prefer-enums-over-literals.md +2 -0
- package/dist/agent-src/rules/preservation-guard.md +2 -0
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +2 -0
- package/dist/agent-src/rules/question-not-instruction.md +2 -0
- package/dist/agent-src/rules/reviewer-awareness.md +2 -0
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +2 -0
- package/dist/agent-src/rules/roadmap-progress-sync.md +2 -0
- package/dist/agent-src/rules/role-mode-adherence.md +2 -0
- package/dist/agent-src/rules/rule-type-governance.md +2 -0
- package/dist/agent-src/rules/runtime-safety.md +2 -0
- package/dist/agent-src/rules/scale-discipline.md +2 -0
- package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +2 -0
- package/dist/agent-src/rules/senior-engineering-discipline.md +2 -0
- package/dist/agent-src/rules/session-canary.md +63 -19
- package/dist/agent-src/rules/settings-ask-protocol.md +180 -0
- package/dist/agent-src/rules/size-enforcement.md +2 -0
- package/dist/agent-src/rules/skill-improvement-trigger.md +2 -0
- package/dist/agent-src/rules/skill-quality.md +2 -0
- package/dist/agent-src/rules/slash-command-routing-policy.md +2 -0
- package/dist/agent-src/rules/source-confidentiality.md +2 -0
- package/dist/agent-src/rules/source-discovery-gate.md +2 -0
- package/dist/agent-src/rules/source-of-truth.md +2 -0
- package/dist/agent-src/rules/spreadsheet-source-quality.md +2 -0
- package/dist/agent-src/rules/strategy-safety-floor.md +2 -0
- package/dist/agent-src/rules/symfony-routing.md +2 -0
- package/dist/agent-src/rules/think-before-action.md +2 -0
- package/dist/agent-src/rules/token-budget-discipline.md +8 -3
- package/dist/agent-src/rules/token-efficiency.md +2 -0
- package/dist/agent-src/rules/token-optimizer-maintenance.md +2 -0
- package/dist/agent-src/rules/tool-safety.md +2 -0
- package/dist/agent-src/rules/ui-audit-gate.md +7 -0
- package/dist/agent-src/rules/untrusted-input-defense.md +2 -0
- package/dist/agent-src/rules/upstream-proposal.md +2 -0
- package/dist/agent-src/rules/user-interaction.md +5 -2
- package/dist/agent-src/rules/user-interrupt-priority.md +2 -0
- package/dist/agent-src/skills/recursive-verification/SKILL.md +13 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/cli/registry.js +2 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/{chunk-SJQMJI7M.js → chunk-3KJIMFTB.js} +1 -1
- package/dist/cli-delegate/{chunk-BSLUHV2F.js → chunk-BCPIOAGV.js} +148 -133
- package/dist/cli-delegate/cmd_conformance.js +1 -1
- package/dist/cli-delegate/cmd_doctor.js +1 -1
- package/dist/cli-delegate/cmd_export.js +1 -1
- package/dist/cli-delegate/cmd_prune.js +1 -1
- package/dist/cli-delegate/cmd_route_audit.js +4 -1
- package/dist/cli-delegate/cmd_route_explain.js +4 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +1 -1
- package/dist/cli-delegate/cmd_uninstall.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +191 -120
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +11 -8
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +9 -6
- package/dist/hooks/dispatch.js +1148 -349
- package/dist/install/install.mjs +1 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +571 -417
- package/dist/router.json +1 -1
- package/dist/scripts/condense.js +33 -2
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/io/yamlIO.js +85 -0
- package/dist/server/io/yamlIO.js.map +1 -1
- package/dist/server/nicknameResolver.js +116 -0
- package/dist/server/nicknameResolver.js.map +1 -0
- package/dist/server/routes/ping.js +29 -11
- package/dist/server/routes/ping.js.map +1 -1
- package/dist/server/routes/settings.js +1 -12
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/routes/wizard.js +52 -2
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/shared/interactiveContext.js +73 -0
- package/dist/shared/interactiveContext.js.map +1 -0
- package/dist/shared/nicknamePrefill.js +59 -0
- package/dist/shared/nicknamePrefill.js.map +1 -0
- package/dist/shared/settingsAsks.js +128 -0
- package/dist/shared/settingsAsks.js.map +1 -0
- package/dist/shared/settingsCarveOut.js +118 -0
- package/dist/shared/settingsCarveOut.js.map +1 -0
- package/dist/shared/settingsConsent.js +93 -0
- package/dist/shared/settingsConsent.js.map +1 -0
- package/dist/shared/settingsSurface.js +7 -1
- package/dist/shared/settingsSurface.js.map +1 -1
- package/dist/ui/assets/index-DmR0mbk4.js.map +1 -1
- package/package.json +1 -1
- package/src/config/agents-paths.yml +15 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +29 -1
- package/src/config/gate-violation-baselines.json +13 -7
- package/src/scripts/_cli/cmd_doctor.ts +6 -21
- package/src/scripts/_cli/cmd_route_audit.ts +4 -1
- package/src/scripts/_cli/cmd_route_explain.ts +9 -1
- package/src/scripts/_dispatch.bash +18 -0
- package/src/scripts/_lib/git_common_dir.ts +128 -0
- package/src/scripts/_lib/obligation_frequency.ts +391 -0
- package/src/scripts/_lib/session_register.ts +361 -0
- package/src/scripts/ai-video/stitch.sh +27 -9
- package/src/scripts/before_complete_hook.ts +23 -4
- package/src/scripts/bench_ab_v2_run.ts +272 -16
- package/src/scripts/bench_ab_v2_stats.ts +156 -3
- package/src/scripts/check_completion_review.ts +80 -3
- package/src/scripts/check_corpus_staleness.ts +692 -0
- package/src/scripts/check_enforcement_coverage.ts +192 -7
- package/src/scripts/check_gate_coverage.ts +67 -0
- package/src/scripts/check_hook_bundle_freshness.ts +183 -0
- package/src/scripts/check_rule_projection_integrity.ts +364 -0
- package/src/scripts/condense.ts +36 -2
- package/src/scripts/conformance_scan.ts +82 -17
- package/src/scripts/dispatch_r2_reviewer.ts +31 -2
- package/src/scripts/generate_settings_reference.ts +232 -0
- package/src/scripts/git_authorization_hook.ts +75 -10
- package/src/scripts/hook_manifest.yaml +87 -27
- package/src/scripts/hooks/block_no_verify.ts +59 -2
- package/src/scripts/hooks/block_unauthorized_git.ts +199 -16
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/design_slop_hook.ts +13 -1
- package/src/scripts/hooks/dispatch_hook.ts +97 -2
- package/src/scripts/hooks/evidence_independence.ts +40 -6
- package/src/scripts/language_mirror_hook.ts +256 -17
- package/src/scripts/lint_abstraction_thresholds.ts +41 -8
- package/src/scripts/lint_agents_layout.ts +2 -0
- package/src/scripts/lint_hook_manifest.ts +29 -0
- package/src/scripts/memory_learn_hook.ts +109 -6
- package/src/scripts/orchestration_backfill.ts +354 -0
- package/src/scripts/pr_url_reminder_hook.ts +17 -2
- package/src/scripts/release.ts +180 -37
- package/src/scripts/schemas/review-findings.schema.json +99 -0
- package/src/scripts/schemas/rule.schema.json +5 -0
- package/src/scripts/session_canary_hook.ts +35 -3
- package/src/scripts/session_register_hook.ts +288 -0
- package/src/scripts/sessions_cli.ts +140 -0
- package/src/scripts/validate_frontmatter.ts +68 -0
- package/src/server/io/yamlIO.ts +87 -0
- package/src/shared/interactiveContext.ts +98 -0
- package/src/shared/nicknamePrefill.ts +96 -0
- package/src/shared/settingsAsks.ts +176 -0
- package/src/shared/settingsCarveOut.ts +143 -0
- package/src/shared/settingsConsent.ts +136 -0
- package/src/shared/settingsSurface.ts +7 -1
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
model_tier: medium
|
|
3
3
|
name: roadmap
|
|
4
4
|
disable-model-invocation: true
|
|
5
|
-
argument-hint: "[create|ai-council|process-step|process-phase|process-full] [args]"
|
|
5
|
+
argument-hint: "[create|ai-council|process-step|process-phase|process-full|next] [args]"
|
|
6
6
|
pack: product-basic
|
|
7
|
-
intent: "Roadmap dispatcher — create, process-step, process-phase, process-full, ai-council"
|
|
8
|
-
routes_to: [roadmap-create, roadmap-ai-council, roadmap-materialize, roadmap-process-step, roadmap-process-phase, roadmap-process-full]
|
|
7
|
+
intent: "Roadmap dispatcher — create, process-step, process-phase, process-full, next, ai-council"
|
|
8
|
+
routes_to: [roadmap-create, roadmap-ai-council, roadmap-materialize, roadmap-process-step, roadmap-process-phase, roadmap-process-full, roadmap-next]
|
|
9
9
|
replaces: []
|
|
10
10
|
tier: 1
|
|
11
11
|
visibility: advanced
|
|
12
|
-
description: Roadmap orchestrator — routes to create (authoring)
|
|
12
|
+
description: Roadmap orchestrator — routes to create (authoring), process-step / process-phase / process-full (autonomous execution), and next (pick a roadmap and ship it).
|
|
13
13
|
cluster: roadmap
|
|
14
14
|
type: orchestrator
|
|
15
15
|
suggestion:
|
|
@@ -40,6 +40,7 @@ paused for confirmation before every step) was removed —
|
|
|
40
40
|
| `/roadmap:process-step` | `commands/roadmap/process-step.md` | Autonomously process the next open step, then stop |
|
|
41
41
|
| `/roadmap:process-phase` (**default execution scope**) | `commands/roadmap/process-phase.md` | Autonomously process every open step in the current phase |
|
|
42
42
|
| `/roadmap:process-full` | `commands/roadmap/process-full.md` | Autonomously process every open step across every phase |
|
|
43
|
+
| `/roadmap:next` | `commands/roadmap/next.md` | Screen for the next executable roadmap, then carry it to a reviewable PR (selection + `process-full` + delivery) |
|
|
43
44
|
|
|
44
45
|
Sub-command names match the locked contract in
|
|
45
46
|
[`docs/contracts/command-clusters.md`](../docs/contracts/command-clusters.md).
|
|
@@ -70,6 +71,7 @@ each only binds a scope delta.
|
|
|
70
71
|
> 3. process-step — process the next open step, then stop
|
|
71
72
|
> 4. process-phase — process the current phase (default)
|
|
72
73
|
> 5. process-full — process every open step across every phase
|
|
74
|
+
> 6. next — pick the next executable roadmap and ship it to a PR
|
|
73
75
|
|
|
74
76
|
## Rules
|
|
75
77
|
|
|
@@ -84,3 +86,9 @@ each only binds a scope delta.
|
|
|
84
86
|
*"finish this phase"*) default to
|
|
85
87
|
[`/roadmap:process-phase`](roadmap/process-phase.md) unless the user
|
|
86
88
|
named a different scope.
|
|
89
|
+
- **Selection intents** (*"take the next sensible roadmap"*, *"nimm dir
|
|
90
|
+
die nächste Roadmap vor"*, *"pick a roadmap and ship it"*) — i.e. the
|
|
91
|
+
user has NOT named a roadmap and wants one chosen — route to
|
|
92
|
+
[`/roadmap:next`](roadmap/next.md), which is the only sub that
|
|
93
|
+
screens and selects. The three `process-*` subs never choose across
|
|
94
|
+
roadmaps.
|
|
@@ -48,7 +48,10 @@ THE SAME MINUS THE QUOTA WIN.
|
|
|
48
48
|
tier <t>`); a 429/quota error trips `tripCooldown` for that tier and
|
|
49
49
|
falls back per the relation — never a retry loop. Under
|
|
50
50
|
`budget_routing: ask`, the FIRST budget-motivated downshift of a session
|
|
51
|
-
is confirmed once
|
|
51
|
+
is confirmed once, in the shape
|
|
52
|
+
[`settings-ask-protocol`](../../rules/settings-ask-protocol.md) fixes and
|
|
53
|
+
without persisting the answer (`subagents.budget_routing` is class C);
|
|
54
|
+
`auto` proceeds silently. Every budget-routed
|
|
52
55
|
dispatch emits one `orchestration_record` line (tier + provenance-tagged
|
|
53
56
|
token delta) so realized savings are measured, not asserted.
|
|
54
57
|
|
|
@@ -13,6 +13,8 @@ triggers:
|
|
|
13
13
|
self_contained: true
|
|
14
14
|
workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
|
|
15
15
|
packs: [meta]
|
|
16
|
+
# obligation: line 4
|
|
17
|
+
obligation_frequency: "per-turn"
|
|
16
18
|
---
|
|
17
19
|
|
|
18
20
|
# Autonomous Execution
|
|
@@ -23,6 +23,8 @@ collision_ok:
|
|
|
23
23
|
"controller": "controllers return user data — the ownership/tenant check floor"
|
|
24
24
|
"endpoint": "every data-returning endpoint needs the three negative tests"
|
|
25
25
|
"tenant": "cross-tenant isolation is this rule's core subject"
|
|
26
|
+
# obligation: line 55
|
|
27
|
+
obligation_frequency: "per-edit"
|
|
26
28
|
---
|
|
27
29
|
|
|
28
30
|
# Broken Access Control
|
|
@@ -35,6 +35,8 @@ collision_ok:
|
|
|
35
35
|
"composer": "composer output is verbose — rtk wrap applies"
|
|
36
36
|
"docker": "docker output is verbose — rtk wrap applies"
|
|
37
37
|
"rector": "rector output is verbose — rtk wrap applies"
|
|
38
|
+
# obligation: line 42
|
|
39
|
+
obligation_frequency: "per-edit"
|
|
38
40
|
---
|
|
39
41
|
|
|
40
42
|
# Cli Output Handling
|
|
@@ -20,6 +20,8 @@ packs: [engineering-base]
|
|
|
20
20
|
collision_ok:
|
|
21
21
|
"refactor": "refactors churn comments — the keep/drop discipline applies"
|
|
22
22
|
"implement": "fresh implementation is where over-commenting lands"
|
|
23
|
+
# obligation: line 5
|
|
24
|
+
obligation_frequency: "per-edit"
|
|
23
25
|
---
|
|
24
26
|
|
|
25
27
|
# Code Comment Discipline
|
|
@@ -11,6 +11,8 @@ load_context:
|
|
|
11
11
|
- "../contexts/contracts/command-suggestion-flow.md"
|
|
12
12
|
workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
|
|
13
13
|
packs: [meta]
|
|
14
|
+
# obligation: line 18
|
|
15
|
+
obligation_frequency: "per-turn"
|
|
14
16
|
---
|
|
15
17
|
|
|
16
18
|
# Command Suggestion Policy
|
|
@@ -9,6 +9,8 @@ triggers:
|
|
|
9
9
|
self_contained: true
|
|
10
10
|
workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
|
|
11
11
|
packs: [meta]
|
|
12
|
+
# obligation: line 19
|
|
13
|
+
obligation_frequency: "per-event"
|
|
12
14
|
---
|
|
13
15
|
|
|
14
16
|
# Content Quoting Floor
|
|
@@ -12,6 +12,8 @@ workspaces: [agent-config-maintainer, construction, engineering, finance, founde
|
|
|
12
12
|
packs: [meta]
|
|
13
13
|
enforced_by:
|
|
14
14
|
- "hook:context-hygiene"
|
|
15
|
+
# obligation: line 67
|
|
16
|
+
obligation_frequency: "per-turn"
|
|
15
17
|
---
|
|
16
18
|
|
|
17
19
|
# Context Hygiene
|
|
@@ -21,6 +23,14 @@ enforced_by:
|
|
|
21
23
|
> `agents/state/context-hygiene.json` (tool-call count, loop signal,
|
|
22
24
|
> freshness milestones at 20/40/60); the prose below is the spec the
|
|
23
25
|
> hook implements and the agent-side fallback.
|
|
26
|
+
>
|
|
27
|
+
> **What the slot cannot reach.** The carrier fires per *tool call*; the
|
|
28
|
+
> read-loop law below is per *turn*. A turn that makes no tool call fires it
|
|
29
|
+
> zero times — and a reply with no tool call is exactly the shape the read-loop
|
|
30
|
+
> counter is trying to notice. So the counters are hook-carried and the
|
|
31
|
+
> every-turn obligation is model-carried, on every host. Named here because the
|
|
32
|
+
> frequency join in `check_enforcement_coverage.ts` reports it, and a rule whose
|
|
33
|
+
> header says "enforced by" without that sentence reads as a guarantee it is not.
|
|
24
34
|
|
|
25
35
|
## Conversation Freshness
|
|
26
36
|
|
|
@@ -26,6 +26,8 @@ packs: [engineering-base, product-basic]
|
|
|
26
26
|
collision_ok:
|
|
27
27
|
"mockup": "a mockup is a second source — discrepancy check against the ticket text"
|
|
28
28
|
"screenshot": "a screenshot is a second source — discrepancy check"
|
|
29
|
+
# obligation: line 71
|
|
30
|
+
obligation_frequency: "per-task"
|
|
29
31
|
---
|
|
30
32
|
|
|
31
33
|
# Cross-Source Consistency
|
|
@@ -16,6 +16,8 @@ workspaces: [agent-config-maintainer, engineering]
|
|
|
16
16
|
packs: [meta]
|
|
17
17
|
collision_ok:
|
|
18
18
|
"honest null": "this rule asks whether a recorded null may be REVISITED; evaluator-independence asks how one was PRODUCED — different decision points on the same artefact"
|
|
19
|
+
# obligation: line 31
|
|
20
|
+
obligation_frequency: "per-task"
|
|
19
21
|
---
|
|
20
22
|
|
|
21
23
|
# Decision Revisit Gate
|
|
@@ -20,6 +20,8 @@ routes_to:
|
|
|
20
20
|
- "skill:subagent-orchestration"
|
|
21
21
|
workspaces: [engineering]
|
|
22
22
|
packs: [engineering-base]
|
|
23
|
+
# obligation: line 35
|
|
24
|
+
obligation_frequency: "per-task"
|
|
23
25
|
---
|
|
24
26
|
|
|
25
27
|
# Delegation Policy
|
|
@@ -50,8 +52,9 @@ clears — all of:
|
|
|
50
52
|
[`auto-dispatch-classification`](../contexts/execution/auto-dispatch-classification.md)
|
|
51
53
|
(≥1 independent, well-specified slice above the size floor).
|
|
52
54
|
|
|
53
|
-
`subagents.auto: ask` → ask once before dispatching
|
|
54
|
-
[`
|
|
55
|
+
`subagents.auto: ask` → ask once before dispatching, in the shape
|
|
56
|
+
[`settings-ask-protocol`](settings-ask-protocol.md) fixes (the answer is not
|
|
57
|
+
persisted — `subagents.auto` is class C); `auto: on` → surface the chosen mode
|
|
55
58
|
+ per-subtask tiers in one line. Any gate failing, or `auto: off`, or no host
|
|
56
59
|
primitive → run in-session (clean no-op).
|
|
57
60
|
|
|
@@ -23,7 +23,9 @@ triggers:
|
|
|
23
23
|
- phrase: "bau das nach"
|
|
24
24
|
- phrase: "1:1 um"
|
|
25
25
|
- phrase: "1:1 nach"
|
|
26
|
+
- phrase: "claude.site/artifacts"
|
|
26
27
|
- file_pattern: "*design.html"
|
|
28
|
+
- path_prefix: ".claude/design-system/"
|
|
27
29
|
applies_to_user_types:
|
|
28
30
|
- "creator"
|
|
29
31
|
- "developer"
|
|
@@ -34,6 +36,8 @@ workspaces: [engineering]
|
|
|
34
36
|
packs: [engineering-base, frontend-design]
|
|
35
37
|
collision_ok:
|
|
36
38
|
"mockup": "a provided mockup is the spec — 1:1 fidelity floor"
|
|
39
|
+
# obligation: line 58
|
|
40
|
+
obligation_frequency: "per-edit"
|
|
37
41
|
---
|
|
38
42
|
|
|
39
43
|
# Design Fidelity
|
|
@@ -96,13 +100,27 @@ artifact is simply attached. The last is covered by `file_pattern: *design.html`
|
|
|
96
100
|
HTML edit in every project and be strictly worse than the gap it closes. A
|
|
97
101
|
handover under some other filename needs one word in the prompt.
|
|
98
102
|
|
|
103
|
+
Two further handover shapes carry the artifact without any of the above:
|
|
104
|
+
|
|
105
|
+
- **A capability URL.** A published artifact is handed over as a link, not a
|
|
106
|
+
file — so `phrase: "claude.site/artifacts"` fires on the *published-artifact
|
|
107
|
+
path*, not on the host. `claude.ai` alone is a chat link and must stay quiet:
|
|
108
|
+
a keyword on the bare domain would fire on "I pasted this from claude.ai",
|
|
109
|
+
which is a conversation reference, not a spec.
|
|
110
|
+
- **A design-system directory.** `path_prefix: ".claude/design-system/"` — the
|
|
111
|
+
conventional location for a handed-over token/component set. The prefix is the
|
|
112
|
+
vendor-scoped directory, never a bare `design-system/`, which is a normal
|
|
113
|
+
source folder in a large fraction of frontend repos.
|
|
114
|
+
|
|
99
115
|
The trigger set is deliberately phrase-heavy on the German side and on
|
|
100
116
|
`artifact`: a bare `artifact` keyword fires on "the CI build artifact is 40 MB".
|
|
101
117
|
`ROUTING_MATRIX` in
|
|
102
118
|
[`design_fidelity_routing.test.ts`](../../tests/scripts/design_fidelity_routing.test.ts)
|
|
103
119
|
pins both halves — every class that must route, and the near-misses that must
|
|
104
120
|
stay silent (fixture `daf-port-trigger-de`). Extending the set without adding a
|
|
105
|
-
near-miss row there is how an over-broad trigger lands
|
|
121
|
+
near-miss row there is how an over-broad trigger lands: each of the two triggers
|
|
122
|
+
above ships with its own near-miss row (`near-claude-ai-chat-link`,
|
|
123
|
+
`near-generic-design-system-dir`).
|
|
106
124
|
|
|
107
125
|
Body migrated to [`guideline:design-fidelity-mechanics`](../docs/guidelines/design-fidelity-mechanics.md) (per P4 of `road-to-kernel-and-router.md`) — surgical visual edits (targeted-edit vs redesign-trigger discipline, stable anchors), asset & imagery discipline (owned-asset path, third-party delivery is self-hosted by default, real-imagery-as-proof, iconography floor, no unrequested filler), deviation-surfacing shape, failure-mode catalog, `daf-*` fixtures.
|
|
108
126
|
Trigger-set above activates this routing on demand, independent of the discipline profile (ADR-110).
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "auto"
|
|
3
|
+
tier: "2b"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
description: "UI written or changed — review it against the design contract before calling it done; the write-side twin of ui-audit-gate"
|
|
6
|
+
triggers:
|
|
7
|
+
- path_prefix: "resources/views/"
|
|
8
|
+
- path_prefix: "resources/js/"
|
|
9
|
+
- keyword: "component"
|
|
10
|
+
- keyword: "design token"
|
|
11
|
+
routes_to:
|
|
12
|
+
- "skill:design-review"
|
|
13
|
+
- "skill:accessibility-auditor"
|
|
14
|
+
workspaces: [agent-config-maintainer, engineering]
|
|
15
|
+
packs: [frontend-design]
|
|
16
|
+
enforced_by:
|
|
17
|
+
- "none"
|
|
18
|
+
collision_ok:
|
|
19
|
+
"component": "a written component is reviewed before it is called done — the write-side half"
|
|
20
|
+
"design token": "same surface, opposite side: ui-audit-gate inventories tokens before the write, this reviews what the write emitted"
|
|
21
|
+
"resources/views/": "both halves of one UI loop fire on the same path — audit before, review after; neither substitutes for the other"
|
|
22
|
+
"resources/js/": "both halves of one UI loop fire on the same path — audit before, review after; neither substitutes for the other"
|
|
23
|
+
# obligation: line 39
|
|
24
|
+
obligation_frequency: "per-edit"
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Design Review After UI Write
|
|
28
|
+
|
|
29
|
+
The UI loop was closed on one side only. [`ui-audit-gate`](ui-audit-gate.md)
|
|
30
|
+
covers the **read** side — inventory what exists before adding a component — and
|
|
31
|
+
routes to `existing-ui-audit`. Nothing covered the **write** side: **zero rules
|
|
32
|
+
routed to `skill:design-review`**, so a component could be written, declared
|
|
33
|
+
done, and never looked at against the contract it was supposed to satisfy.
|
|
34
|
+
|
|
35
|
+
This is that rule's twin, deliberately built to the same shape: same tier, same
|
|
36
|
+
pack, same diff-decidable allow-list, and the same honest scope.
|
|
37
|
+
|
|
38
|
+
## The Iron Law
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
UI WRITTEN OR CHANGED IS NOT DONE UNTIL IT IS REVIEWED.
|
|
42
|
+
NEVER CLAIM A UI CHANGE IS COMPLETE ON "IT LOOKS RIGHT" — THAT IS A VERDICT
|
|
43
|
+
WITHOUT EVIDENCE. NO RENDER CAPABILITY → SCOPE THE VERDICT TO WHAT WAS
|
|
44
|
+
STATICALLY CHECKED AND SAY SO. NEVER "LOOKS GOOD" WITH NOTHING BEHIND IT.
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## What "reviewed" means
|
|
48
|
+
|
|
49
|
+
The verdict is gated on evidence, not on having run a skill:
|
|
50
|
+
|
|
51
|
+
- **Render capability present** (Playwright MCP, Chrome DevTools, or a live
|
|
52
|
+
preview URL) → the [design-artifact verification checklist](../docs/contracts/design-artifact-verification.md#verification-checklist)
|
|
53
|
+
steps 1–5. A UI task does not pass without render evidence.
|
|
54
|
+
- **Render capability absent** → the verdict is **scoped to the static checks
|
|
55
|
+
that actually ran** and says which those were. This is not a downgrade to be
|
|
56
|
+
hidden; `design-review` itself states it ("scope the verdict to what was
|
|
57
|
+
statically checked and say so"). An unscoped "looks good" is the failure.
|
|
58
|
+
- **A provided artifact is the spec** → findings the artifact *covers* are
|
|
59
|
+
informational, not defects, per [`design-fidelity`](design-fidelity.md). The
|
|
60
|
+
review does not "improve" the user's own design.
|
|
61
|
+
|
|
62
|
+
## Allow-list — `ui-trivial`, decidable from the diff alone
|
|
63
|
+
|
|
64
|
+
Skip only when **all** hold:
|
|
65
|
+
|
|
66
|
+
- ≤ 1 file, ≤ 5 changed lines, no new component, no new state, no new dependency.
|
|
67
|
+
- Inside the work engine, `directive_set == "ui-trivial"` — the dispatcher states
|
|
68
|
+
it directly. Outside it, the same conditions are read **off the diff**, which
|
|
69
|
+
is observable without any dispatcher state.
|
|
70
|
+
|
|
71
|
+
The list is deliberately the engine's five conditions, not the four its
|
|
72
|
+
sibling rule's prose carries: `ui_trivial/apply.ts` enforces `new_dependency`
|
|
73
|
+
too, and a twin that copied the shorter prose would inherit a gap the engine
|
|
74
|
+
does not have.
|
|
75
|
+
|
|
76
|
+
## Honest scope — what this rule does NOT enforce
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
THE REVIEW OBLIGATION IS MODEL-CARRIED. NEVER CLAIM THE REVIEW RAN
|
|
80
|
+
AS IF IT WERE VERIFIED.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
There is no artefact a chat session can point at to prove a design review
|
|
84
|
+
happened — "I ran `design-review`" is self-report, and self-report is not
|
|
85
|
+
enforcement. So this rule ships `enforced_by: none`, the same honesty boundary
|
|
86
|
+
`ui-audit-gate`, `security-sensitive-stop`, and `untrusted-input-defense` state
|
|
87
|
+
for their own obligations, rather than pretending a satisfiable-by-assertion
|
|
88
|
+
condition is a gate.
|
|
89
|
+
|
|
90
|
+
What that leaves, and it is the useful part: the write side now has a named
|
|
91
|
+
obligation and a route to the skill that discharges it, where before it had
|
|
92
|
+
neither. Full enforcement needs the work-engine `review`/`polish` gates (which
|
|
93
|
+
already act on `a11y_violation` and `token_violation` findings) or pack-scoped
|
|
94
|
+
rule projection — a maintainer decision, never an automated one.
|
|
95
|
+
|
|
96
|
+
One asymmetry worth stating: `design-review` lives in `engineering-base` while
|
|
97
|
+
this rule is scoped to `frontend-design`. The route still resolves — a rule may
|
|
98
|
+
name a skill from another pack — but a consumer with `frontend-design` and
|
|
99
|
+
without `engineering-base` gets the obligation without the skill. That is why
|
|
100
|
+
`accessibility-auditor` is a second route: it is the part of the review that
|
|
101
|
+
must not depend on the pairing.
|
|
102
|
+
|
|
103
|
+
## Failure modes
|
|
104
|
+
|
|
105
|
+
- Writing the component and calling it done because the tests pass — tests do not
|
|
106
|
+
look at it.
|
|
107
|
+
- "Looks good" as a verdict with no render, no static check named, and no scope.
|
|
108
|
+
- Running the review and acting on findings the provided artifact covers, i.e.
|
|
109
|
+
redesigning the user's spec under the banner of quality.
|
|
110
|
+
- Treating the a11y half as optional because the visual half looked fine.
|
|
111
|
+
- Skipping the review for "just one tile" — the same bypass `ui-audit-gate`
|
|
112
|
+
names on its own side.
|
|
113
|
+
|
|
114
|
+
## See also
|
|
115
|
+
|
|
116
|
+
- [`ui-audit-gate`](ui-audit-gate.md) — the read-side twin; audit before writing.
|
|
117
|
+
- [`design-review`](../skills/design-review/SKILL.md) — the 7-phase review this routes to.
|
|
118
|
+
- [`accessibility-auditor`](../skills/accessibility-auditor/SKILL.md) — the WCAG half.
|
|
119
|
+
- [`design-fidelity`](design-fidelity.md) — a provided artifact is the spec; covered findings are informational.
|
|
120
|
+
- [`verify-before-complete`](verify-before-complete.md) — the general no-claim-without-evidence gate this applies to UI.
|
|
@@ -27,6 +27,8 @@ workspaces: [agent-config-maintainer, construction, engineering, finance, founde
|
|
|
27
27
|
packs: [meta]
|
|
28
28
|
collision_ok:
|
|
29
29
|
"screenshot": "a screenshot shipping into docs is the PII/anonymization gate"
|
|
30
|
+
# obligation: line 49
|
|
31
|
+
obligation_frequency: "per-event"
|
|
30
32
|
---
|
|
31
33
|
|
|
32
34
|
# Doc-Screenshot Hygiene
|
|
@@ -15,6 +15,8 @@ collision_ok:
|
|
|
15
15
|
"artisan": "artisan runs inside the project container, never on the host"
|
|
16
16
|
"composer": "composer runs inside the project container"
|
|
17
17
|
"docker": "its own core subject"
|
|
18
|
+
# obligation: line 22
|
|
19
|
+
obligation_frequency: "per-edit"
|
|
18
20
|
---
|
|
19
21
|
|
|
20
22
|
# Docker Commands
|
|
@@ -42,6 +42,8 @@ workspaces: [agent-config-maintainer, construction, engineering, finance, founde
|
|
|
42
42
|
packs: [meta]
|
|
43
43
|
collision_ok:
|
|
44
44
|
"review this contract": "contract review is advisory-shaped — the not-legal-advice footer floor"
|
|
45
|
+
# obligation: line 52
|
|
46
|
+
obligation_frequency: "per-task"
|
|
45
47
|
---
|
|
46
48
|
|
|
47
49
|
# Domain Safety — Advisory Disclaimer
|
|
@@ -42,6 +42,8 @@ applies_to_user_types:
|
|
|
42
42
|
- "all"
|
|
43
43
|
workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
|
|
44
44
|
packs: [meta]
|
|
45
|
+
# obligation: line 52
|
|
46
|
+
obligation_frequency: "per-task"
|
|
45
47
|
---
|
|
46
48
|
|
|
47
49
|
# Domain Safety — PII Redaction
|
|
@@ -27,6 +27,8 @@ applies_to_user_types:
|
|
|
27
27
|
- "gtm"
|
|
28
28
|
workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
|
|
29
29
|
packs: [meta]
|
|
30
|
+
# obligation: line 47
|
|
31
|
+
obligation_frequency: "per-turn"
|
|
30
32
|
---
|
|
31
33
|
|
|
32
34
|
# Domain Safety — Data Retention
|
|
@@ -28,6 +28,8 @@ workspaces: [engineering]
|
|
|
28
28
|
packs: [engineering-base]
|
|
29
29
|
collision_ok:
|
|
30
30
|
"migration": "a prod migration is a hard-floor evidence surface (rollback path, blast radius)"
|
|
31
|
+
# obligation: line 49
|
|
32
|
+
obligation_frequency: "per-commit"
|
|
31
33
|
---
|
|
32
34
|
|
|
33
35
|
# Engineering Safety Floor
|
|
@@ -20,6 +20,12 @@ enforced_by:
|
|
|
20
20
|
- "hook:evidence-independence"
|
|
21
21
|
collision_ok:
|
|
22
22
|
"honest null": "this rule asks how a recorded null was PRODUCED; decision-revisit-gate asks whether it may be REVISITED — different decision points on the same artefact"
|
|
23
|
+
# obligation: dispatching an evaluator is a tool call, and the guard is a pre_tool_use
|
|
24
|
+
# concern that reads that prompt — src/rules/evaluator-independence.md:81
|
|
25
|
+
obligation_frequency: "per-edit"
|
|
26
|
+
# frequency-override: line 70 states a per-turn clause ("one evaluation per turn"),
|
|
27
|
+
# but the guard counts it AT the dispatch, which is a tool call — a per-edit point
|
|
28
|
+
# carrier sees every dispatch, so it carries the per-turn cap too.
|
|
23
29
|
---
|
|
24
30
|
|
|
25
31
|
# Evaluator Independence
|
|
@@ -81,9 +87,19 @@ was manufactured anyway.
|
|
|
81
87
|
|
|
82
88
|
[`evidence_independence.ts`](../scripts/hooks/evidence_independence.ts) is a
|
|
83
89
|
`pre_tool_use` concern. It **blocks** a dispatch whose prompt carries a
|
|
84
|
-
pre-loaded verdict, and **blocks** a second
|
|
85
|
-
same turn; it **warns** on the first. It reads the prompt the agent is about
|
|
86
|
-
send, so items 1 and 4 above are mechanically enforced.
|
|
90
|
+
pre-loaded verdict, and **blocks** a second *self-scoped* evaluation dispatch in
|
|
91
|
+
the same turn; it **warns** on the first. It reads the prompt the agent is about
|
|
92
|
+
to send, so items 1 and 4 above are mechanically enforced.
|
|
93
|
+
|
|
94
|
+
Three limits, stated because they were measured. The pre-loaded-verdict list is
|
|
95
|
+
a **phrase list**, so a paraphrase evades it — it catches recurrences of known
|
|
96
|
+
steering wording, not steering as such. The turn boundary is the
|
|
97
|
+
authorization ledger's `detected_at` stamp, because the envelope carries no turn
|
|
98
|
+
id; with no ledger yet, the counter falls back to session scope. And the slot
|
|
99
|
+
itself is not universal: `pre_tool_use` exists on **three** hosts — augment,
|
|
100
|
+
claude, cowork. On cursor, cline, windsurf, gemini and copilot this guard has
|
|
101
|
+
nowhere to bind, so items 1 and 4 join 2 and 3 as model-carried there. The
|
|
102
|
+
frequency join in `check_enforcement_coverage.ts` reports exactly that set.
|
|
87
103
|
|
|
88
104
|
Items 2 and 3 — an honestly chosen scope, and recording the prompt with the
|
|
89
105
|
verdict — are **not** enforced by anything. A narrowed scope is not decidable
|
|
@@ -33,6 +33,8 @@ packs: [finance-basic, finance-advanced]
|
|
|
33
33
|
trust:
|
|
34
34
|
level: advisory
|
|
35
35
|
human_review_required: true
|
|
36
|
+
# obligation: line 53
|
|
37
|
+
obligation_frequency: "per-task"
|
|
36
38
|
---
|
|
37
39
|
<!-- agent-config:human-review-banner -->
|
|
38
40
|
> HUMAN REVIEW REQUIRED · trust: advisory · owner: unknown
|