@event4u/agent-config 1.12.0 → 1.14.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 +3 -0
- 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 +5 -1
- 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 +5 -0
- package/.agent-src/commands/chat-history-resume.md +5 -0
- package/.agent-src/commands/chat-history.md +5 -0
- package/.agent-src/commands/check-current-md.md +126 -0
- package/.agent-src/commands/commit-in-chunks.md +98 -0
- package/.agent-src/commands/commit.md +4 -0
- package/.agent-src/commands/compress.md +3 -0
- 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 +3 -0
- 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 +24 -0
- package/.agent-src/commands/optimize-agents.md +4 -0
- package/.agent-src/commands/optimize-augmentignore.md +3 -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 +4 -1
- package/.agent-src/commands/review-changes.md +4 -0
- package/.agent-src/commands/review-routing.md +4 -0
- package/.agent-src/commands/roadmap-create.md +7 -0
- package/.agent-src/commands/roadmap-execute.md +12 -1
- package/.agent-src/commands/rule-compliance-audit.md +4 -0
- package/.agent-src/commands/set-cost-profile.md +3 -0
- package/.agent-src/commands/sync-agent-settings.md +3 -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 +4 -0
- 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 +8 -0
- package/.agent-src/rules/autonomous-execution.md +158 -0
- package/.agent-src/rules/chat-history.md +147 -118
- package/.agent-src/rules/cli-output-handling.md +26 -3
- package/.agent-src/rules/command-suggestion.md +133 -0
- package/.agent-src/rules/commit-policy.md +99 -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 +81 -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 +103 -30
- package/.agent-src/rules/scope-control.md +42 -1
- package/.agent-src/rules/size-enforcement.md +1 -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 +81 -3
- package/.agent-src/scripts/update_roadmap_progress.py +48 -6
- package/.agent-src/skills/blade-ui/SKILL.md +30 -5
- package/.agent-src/skills/command-routing/SKILL.md +32 -0
- package/.agent-src/skills/command-writing/SKILL.md +41 -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 +187 -0
- package/.agent-src/skills/fe-design/SKILL.md +72 -60
- 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 +30 -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 +2 -4
- package/.agent-src/skills/roadmap-management/SKILL.md +10 -3
- package/.agent-src/skills/rule-writing/SKILL.md +23 -1
- package/.agent-src/skills/skill-writing/SKILL.md +1 -3
- package/.agent-src/skills/upstream-contribute/SKILL.md +1 -1
- 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/github-workflows/roadmap-progress-check.yml +63 -0
- package/.agent-src/templates/hooks/pre-commit-roadmap-progress +60 -0
- package/.agent-src/templates/roadmaps.md +8 -2
- 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 +382 -21
- package/.agent-src/templates/scripts/memory_status.py +110 -9
- 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 +592 -0
- package/.agent-src/templates/scripts/{implement_ticket → work_engine}/delivery_state.py +7 -0
- 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 +2 -2
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/memory.py +1 -1
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/plan.py +1 -1
- 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 +36 -4
- 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/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/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 +199 -0
- 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/.claude-plugin/marketplace.json +105 -2
- package/AGENTS.md +36 -8
- package/CHANGELOG.md +558 -0
- package/README.md +146 -4
- package/composer.json +3 -0
- package/config/agent-settings.template.yml +45 -0
- package/config/gitignore-block.txt +4 -0
- package/docs/architecture.md +28 -1
- package/docs/development.md +1 -1
- package/docs/getting-started.md +3 -2
- package/docs/installation.md +86 -0
- package/docs/showcase.md +204 -0
- package/package.json +9 -1
- package/scripts/agent-config +274 -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 +36 -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/memory_lookup.py +143 -7
- package/scripts/memory_status.py +76 -14
- package/scripts/migrate_command_suggestions.py +151 -0
- package/scripts/postinstall.sh +16 -0
- package/scripts/schemas/command.schema.json +41 -0
- package/scripts/skill_linter.py +67 -0
- package/scripts/sync_agent_settings.py +42 -12
- package/templates/consumer-settings/augment-cli-hooks.json +54 -0
- package/templates/consumer-settings/claude-settings.json +55 -1
- 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
- /package/.agent-src/templates/scripts/{implement_ticket → work_engine}/persona_policy.py +0 -0
|
@@ -1,19 +1,35 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: blade-ui
|
|
3
|
-
description: "
|
|
3
|
+
description: "Stack-implementation skill for Laravel Blade — dispatched by `directives/ui/apply.py` (and `review.py` / `polish.py`) when the project's frontend stack is Blade. Covers views, components, partials, layouts, and view logic."
|
|
4
4
|
source: package
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# blade-ui
|
|
8
8
|
|
|
9
|
+
## Positioning — dispatched, not standalone
|
|
10
|
+
|
|
11
|
+
`blade-ui` is the **apply-step executor** for the Blade stack. Invoked by [`directives/ui/apply.py`](../../templates/scripts/work_engine/directives/ui/apply.py) once the design brief is locked, and revisited by `review.py` / `polish.py` during the design-review loop. Does **not** own the flow, drive the audit, or lock the design.
|
|
12
|
+
|
|
13
|
+
| Concern | Owner |
|
|
14
|
+
|---|---|
|
|
15
|
+
| Audit + token inventory (mandatory pre-step) | [`existing-ui-audit`](../existing-ui-audit/SKILL.md) |
|
|
16
|
+
| Design brief (layout / states / microcopy) | [`directives/ui/design.py`](../../templates/scripts/work_engine/directives/ui/design.py) |
|
|
17
|
+
| Universal design heuristics | [`fe-design`](../fe-design/SKILL.md) |
|
|
18
|
+
| Review + polish loop | [`directives/ui/review.py`](../../templates/scripts/work_engine/directives/ui/review.py) + [`polish.py`](../../templates/scripts/work_engine/directives/ui/polish.py) |
|
|
19
|
+
|
|
9
20
|
## When to use
|
|
10
21
|
|
|
11
|
-
|
|
22
|
+
Cite this skill when:
|
|
23
|
+
|
|
24
|
+
- `state.stack.frontend == "blade"` (or the project is clearly Blade-only without Livewire / Flux) and `directives/ui/apply.py` dispatches to this skill
|
|
25
|
+
- Editing or creating Blade views, components, partials, layouts, or forms
|
|
12
26
|
|
|
13
27
|
Do NOT use when:
|
|
28
|
+
|
|
14
29
|
- API-only endpoints (use `api-endpoint` skill)
|
|
15
|
-
- Livewire components (use `livewire` skill)
|
|
30
|
+
- Livewire components (use `livewire` skill — composes Blade views internally)
|
|
16
31
|
- Flux UI components (use `flux` skill)
|
|
32
|
+
- Driving the full UI flow yourself — that is the `directives/ui/` orchestrator
|
|
17
33
|
|
|
18
34
|
## Procedure: Create Blade view or component
|
|
19
35
|
|
|
@@ -23,11 +39,11 @@ Do NOT use when:
|
|
|
23
39
|
2. Inspect existing UI patterns — layouts, partials, component naming, CSS conventions.
|
|
24
40
|
3. Check form handling style — old input, validation errors, session flashes, reusable field partials.
|
|
25
41
|
4. Inspect neighboring templates — match indentation, directives, slot usage, classes.
|
|
26
|
-
5. Determine data flow —
|
|
42
|
+
5. Determine data flow — controller/view model vs. template.
|
|
27
43
|
|
|
28
44
|
### Step 1: Create the template
|
|
29
45
|
|
|
30
|
-
1. Use
|
|
46
|
+
1. Use project's existing layout system.
|
|
31
47
|
2. Keep template presentation-focused — no business logic, no DB queries.
|
|
32
48
|
3. Extract repeated sections into partials or components.
|
|
33
49
|
|
|
@@ -54,6 +70,15 @@ Do NOT use when:
|
|
|
54
70
|
1. Blade view or component file(s) following project conventions
|
|
55
71
|
2. Component class (if applicable) with typed props
|
|
56
72
|
|
|
73
|
+
### Review pass — a11y findings + preview envelope
|
|
74
|
+
|
|
75
|
+
When dispatched by `directives/ui/review.py` (test slot) or `directives/ui/polish.py` (verify slot) — review/polish run, not initial apply — also emits:
|
|
76
|
+
|
|
77
|
+
- `state.ui_review.a11y` — `{violations: [{rule, selector, severity}, ...], severity_floor?, accepted_violations?}`. Use same `(rule, selector)` shape as `state.ui_audit.a11y_baseline` so engine's de-dup matches pre-existing entries on replay. Omit envelope on apply passes; engine's `_apply_a11y_gate` only fires when baseline present.
|
|
78
|
+
- `state.ui_review.preview` — `{render_ok: bool, screenshot_path?, dom_dump_path?, error?, skipped?}`. `render_ok: false` with `error` populated triggers `preview_render_failed` halt; `render_ok: true` with `screenshot_path` threads screenshot into delivery report's `artifacts` list. Browser tooling (Playwright/Cypress/…) is consumer-project dependency — package does not ship one.
|
|
79
|
+
|
|
80
|
+
Polish dispatch: when dispatcher skips `review` because previous review pass returned `SUCCESS`, this skill MUST itself synthesise updated `state.ui_review.findings` (including remaining `a11y_violation` entries) so engine's gate sees current state on next polish round.
|
|
81
|
+
|
|
57
82
|
## Gotcha
|
|
58
83
|
|
|
59
84
|
- `@include` shares parent scope — components don't. Know the difference.
|
|
@@ -40,6 +40,38 @@ Only ask the user if inference fails and the command cannot proceed without the
|
|
|
40
40
|
| `.augment/commands/` | Shared commands (work across projects) |
|
|
41
41
|
| `agents/overrides/commands/` | Project-specific overrides (used instead of original) |
|
|
42
42
|
|
|
43
|
+
## Commands that dispatch to a Python engine
|
|
44
|
+
|
|
45
|
+
Most commands are pure markdown procedures — the agent reads the steps
|
|
46
|
+
and executes them. Two commands delegate to the `work_engine` Python
|
|
47
|
+
module via the `./agent-config` dispatcher; both share the same
|
|
48
|
+
Option-A loop (read state → run engine → handle exit code → repeat),
|
|
49
|
+
they only differ in the input envelope they build:
|
|
50
|
+
|
|
51
|
+
| Command | Subcommand | Envelope | Use when |
|
|
52
|
+
|---|---|---|---|
|
|
53
|
+
| `/implement-ticket` | `./agent-config implement-ticket` | `input.kind="ticket"` | User points at a Jira/Linear ticket or supplies a structured ticket payload |
|
|
54
|
+
| `/work` | `./agent-config work` | `input.kind="prompt"` | User supplies a free-form prompt — no ticket id, no acceptance criteria yet |
|
|
55
|
+
|
|
56
|
+
Route prompt-shaped intents (`"add a CSV export endpoint…"`,
|
|
57
|
+
`"fix the failing login test"`, `"refactor the audit-log controller"`)
|
|
58
|
+
to `/work`. Route ticket-shaped intents
|
|
59
|
+
(`"work on PROJ-123"`, `"start on the ticket on this branch"`) to
|
|
60
|
+
`/implement-ticket`. If the user pastes both a ticket id **and** a
|
|
61
|
+
free-form goal, prefer `/implement-ticket` and let it pull the AC from
|
|
62
|
+
the ticket — `/work` is the fallback when no ticket exists.
|
|
63
|
+
|
|
64
|
+
The actual step logic, halt formats, scoring breakdowns, and delivery
|
|
65
|
+
report are emitted by the engine. Do not paraphrase or reorder engine
|
|
66
|
+
output — surface it as-is. The two flows are mutually exclusive at the
|
|
67
|
+
state-file level: one `.work-state.json` carries one envelope at a
|
|
68
|
+
time, and the engine refuses to switch mid-flight.
|
|
69
|
+
|
|
70
|
+
A sibling subcommand `./agent-config migrate-state` upgrades a legacy
|
|
71
|
+
`.implement-ticket-state.json` file to the v1 `.work-state.json`
|
|
72
|
+
schema. The wrapper invokes it automatically when the legacy file is
|
|
73
|
+
detected; agents should not bypass the dispatcher.
|
|
74
|
+
|
|
43
75
|
## GitHub API: Replying to PR review comments
|
|
44
76
|
|
|
45
77
|
When commands reply to PR review comments (e.g. `/fix-pr-bot-comments`):
|
|
@@ -4,6 +4,8 @@ description: "Use when creating or editing a slash command in .agent-src.uncompr
|
|
|
4
4
|
source: package
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
<!-- cloud_safe: degrade -->
|
|
8
|
+
|
|
7
9
|
# command-writing
|
|
8
10
|
|
|
9
11
|
## When to use
|
|
@@ -58,9 +60,26 @@ name: {command-name} # must match filename without .md
|
|
|
58
60
|
description: "Short human-readable summary of what /{name} does"
|
|
59
61
|
disable-model-invocation: true
|
|
60
62
|
skills: [optional-skill-1] # optional — skills this command delegates to
|
|
63
|
+
suggestion: # required (road-to-context-aware-command-suggestion Phase 2)
|
|
64
|
+
eligible: true # default; set false to opt out of auto-surfacing
|
|
65
|
+
trigger_description: "natural-language pattern, comma-separated examples"
|
|
66
|
+
trigger_context: "concrete signal — branch name, file pattern, recent tool output"
|
|
61
67
|
---
|
|
62
68
|
```
|
|
63
69
|
|
|
70
|
+
Opt-out shape:
|
|
71
|
+
|
|
72
|
+
```yaml
|
|
73
|
+
suggestion:
|
|
74
|
+
eligible: false
|
|
75
|
+
rationale: "one-line reason this command must be invoked deliberately"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Linter enforces ≥10-char triggers when eligible; rationale required when
|
|
79
|
+
ineligible. Optional `confidence_floor` (0.0–1.0) and `cooldown` (e.g. `10m`)
|
|
80
|
+
override the global settings per command. Eligibility decisions live in
|
|
81
|
+
[`agents/contexts/command-suggestion-eligibility.md`](../../../agents/contexts/command-suggestion-eligibility.md).
|
|
82
|
+
|
|
64
83
|
When iterating on the description, delegate to the
|
|
65
84
|
[`description-assist`](../description-assist/SKILL.md) skill — approval-gated,
|
|
66
85
|
no silent edits, max two rounds.
|
|
@@ -105,8 +124,8 @@ multi-paragraph explanation, extract it into a skill and call it.
|
|
|
105
124
|
* Run `bash scripts/compress.sh --sync` → regenerates `.agent-src/commands/{name}.md`.
|
|
106
125
|
* Run `python3 scripts/compress.py --generate-tools` → creates the Claude symlink at
|
|
107
126
|
`.claude/skills/{name}/SKILL.md`.
|
|
108
|
-
* Run the full CI pipeline locally
|
|
109
|
-
except for tolerated warnings.
|
|
127
|
+
* Run the full CI pipeline locally (see `Taskfile.yml` in this repo for
|
|
128
|
+
the script list) — must exit 0 except for tolerated warnings.
|
|
110
129
|
|
|
111
130
|
## Output format
|
|
112
131
|
|
|
@@ -133,6 +152,26 @@ multi-paragraph explanation, extract it into a skill and call it.
|
|
|
133
152
|
* Do NOT edit `.agent-src/`, `.augment/`, or `.claude/` projections
|
|
134
153
|
* Do NOT exceed the hard size limit without a waiver
|
|
135
154
|
|
|
155
|
+
## Cloud Behavior
|
|
156
|
+
|
|
157
|
+
On cloud surfaces (Claude.ai Web, Skills API) the package's
|
|
158
|
+
`scripts/skill_linter.py`, `scripts/compress.py`, and the `task`
|
|
159
|
+
runner are not available. This skill still applies — but with
|
|
160
|
+
prose-only validation:
|
|
161
|
+
|
|
162
|
+
* Emit the full command file as a copyable Markdown block. Do not
|
|
163
|
+
attempt to write it to disk.
|
|
164
|
+
* Self-check the frontmatter against the rules below — `name`,
|
|
165
|
+
`description`, `disable-model-invocation: true` MUST all be
|
|
166
|
+
present.
|
|
167
|
+
* Self-check the body shape: numbered steps, explicit safety gates,
|
|
168
|
+
no inline skill-level detail.
|
|
169
|
+
* Tell the user to save the file under
|
|
170
|
+
`.agent-src.uncompressed/commands/{name}.md` and run
|
|
171
|
+
`task sync && task lint-skills` locally before committing.
|
|
172
|
+
* Skip every reference to running the linter, compressor, or
|
|
173
|
+
generators yourself — they only run on the user's machine.
|
|
174
|
+
|
|
136
175
|
## Examples
|
|
137
176
|
|
|
138
177
|
Good description (trigger-shaped, outcome-focused):
|
|
@@ -4,6 +4,8 @@ description: "Use when polishing a skill/rule/command/guideline frontmatter desc
|
|
|
4
4
|
source: package
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
<!-- cloud_safe: degrade -->
|
|
8
|
+
|
|
7
9
|
# description-assist
|
|
8
10
|
|
|
9
11
|
## When to use
|
|
@@ -155,6 +157,25 @@ and stop. Do not loop further.
|
|
|
155
157
|
* Do NOT run `scripts/skill_trigger_eval.py` from inside this skill — eval
|
|
156
158
|
execution spends API tokens and is a separate user action
|
|
157
159
|
|
|
160
|
+
## Cloud Behavior
|
|
161
|
+
|
|
162
|
+
On cloud surfaces (Claude.ai Web, Skills API) the package's
|
|
163
|
+
`scripts/audit_skill_descriptions.py`, `scripts/skill_linter.py`,
|
|
164
|
+
and `scripts/skill_trigger_eval.py` are not reachable. The skill
|
|
165
|
+
still applies — with prose-only inspection:
|
|
166
|
+
|
|
167
|
+
* Reason from the description text in the conversation. The agent
|
|
168
|
+
acts as the inspector; no separate audit pass runs.
|
|
169
|
+
* Apply the same checklist used by the local audit: length budget,
|
|
170
|
+
trigger prefix ("Use when …"), domain class, symptom class,
|
|
171
|
+
undertrigger tail.
|
|
172
|
+
* Emit verdict + up to 3 numbered variants. The user picks; the
|
|
173
|
+
agent emits the new frontmatter as a copyable block.
|
|
174
|
+
* Skip every reference to running the audit or trigger-eval scripts.
|
|
175
|
+
Recommend the user run the package's local linter after applying.
|
|
176
|
+
* Never claim a description has been "graded" or "scored" by an
|
|
177
|
+
external pass — there isn't one.
|
|
178
|
+
|
|
158
179
|
## Examples
|
|
159
180
|
|
|
160
181
|
Inspection verdict (good — compact):
|
|
@@ -182,5 +182,4 @@ copy-paste instructions if missing.
|
|
|
182
182
|
- [`refine-ticket`](../refine-ticket/SKILL.md) — sibling; refine first if the ticket is vague
|
|
183
183
|
- [`jira-ticket`](../../commands/jira-ticket.md) — ticket loader
|
|
184
184
|
- [`feature-plan`](../../commands/feature-plan.md) — downstream planning
|
|
185
|
-
- [`road-to-ticket-refinement.md`](../../../agents/roadmaps/road-to-ticket-refinement.md) — governing roadmap
|
|
186
185
|
- [`artifact-drafting-protocol`](../../rules/artifact-drafting-protocol.md) — drafting protocol
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: existing-ui-audit
|
|
3
|
+
description: "Use BEFORE writing or editing any non-trivial UI — inventories components, design tokens, shadcn primitives, and reusable patterns into state.ui_audit. Hard gate for the ui directive set."
|
|
4
|
+
source: package
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# existing-ui-audit
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
Use this skill when:
|
|
12
|
+
- The dispatcher has routed work to `directive_set="ui"` (intent `ui-build` or `ui-improve`)
|
|
13
|
+
- A `mixed` flow is about to enter its UI phase
|
|
14
|
+
- The user asks "what UI do we already have for X?"
|
|
15
|
+
|
|
16
|
+
Do NOT use when:
|
|
17
|
+
- `directive_set="ui-trivial"` — the trivial path bypasses audit by precondition (≤1 file, ≤5 lines, no new component, no new state, no new dep)
|
|
18
|
+
- `directive_set="backend"` — no UI surface to inventory
|
|
19
|
+
- The audit findings already exist in `state.ui_audit` for this state-file (cached) — re-run only if `package.json` or `composer.json` mtime changed
|
|
20
|
+
|
|
21
|
+
## Procedure: Audit the existing UI surface
|
|
22
|
+
|
|
23
|
+
### 0. Inspect stack and input
|
|
24
|
+
|
|
25
|
+
1. Read `state.stack.frontend` — set by `scripts/work_engine/stack/detect.py` (one of `blade-livewire-flux`, `react-shadcn`, `vue`, `plain`).
|
|
26
|
+
2. Read `state.input` — the request being processed. The audit must answer: "what already exists that is similar to this request?"
|
|
27
|
+
|
|
28
|
+
### 1. Enumerate components and templates
|
|
29
|
+
|
|
30
|
+
| Stack | Where to look |
|
|
31
|
+
|---|---|
|
|
32
|
+
| `blade-livewire-flux` | `resources/views/components/`, `resources/views/livewire/`, `resources/views/partials/`, `resources/views/layouts/`, `app/View/Components/`, `app/Livewire/` |
|
|
33
|
+
| `react-shadcn` | `components/`, `app/components/`, `src/components/`, `src/app/(routes)/`, plus any `app/**/page.tsx` for Next.js |
|
|
34
|
+
| `vue` | `resources/js/components/`, `src/components/`, `pages/` |
|
|
35
|
+
| `plain` | `resources/views/`, plus any `*.html` under `public/` |
|
|
36
|
+
|
|
37
|
+
Capture each component/template as: `{path, name, kind: page|partial|component|layout, exports?: [props]}`.
|
|
38
|
+
|
|
39
|
+
### 2. Identify the design system
|
|
40
|
+
|
|
41
|
+
Detect markers, in order. **Stop at the first match** — projects rarely run more than one design system.
|
|
42
|
+
|
|
43
|
+
| Marker | Signal | Where |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| Flux | `livewire/flux` in `composer.json`, `<flux:*>` tags in views | `composer.json`, grep `resources/views` |
|
|
46
|
+
| shadcn/ui | `components.json` exists at repo root | `components.json` |
|
|
47
|
+
| Headless UI | `@headlessui/react` or `@headlessui/vue` in `package.json` | `package.json` |
|
|
48
|
+
| Radix | `@radix-ui/*` in `package.json` (without shadcn marker) | `package.json` |
|
|
49
|
+
| Material/Chakra/Mantine/Ant | their package names in `package.json` | `package.json` |
|
|
50
|
+
| Custom / none | none of the above match | — |
|
|
51
|
+
|
|
52
|
+
### 3. Detect design tokens
|
|
53
|
+
|
|
54
|
+
Write into `state.ui_audit.design_tokens` (object, never null — empty object is fine):
|
|
55
|
+
|
|
56
|
+
| Source | What to extract |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `tailwind.config.{js,ts,cjs,mjs}` | `theme.colors`, `theme.spacing`, `theme.fontFamily`, `theme.extend.*` |
|
|
59
|
+
| `:root { --... }` blocks in `resources/css/`, `app/globals.css`, `src/app/globals.css` | every `--token-name: value` pair |
|
|
60
|
+
| `theme.json` / `tokens.json` (any depth) | flat or nested token tree |
|
|
61
|
+
| `app/css/variables.css`, `assets/scss/_tokens.scss` | SCSS `$var: value` and CSS custom properties |
|
|
62
|
+
|
|
63
|
+
Group output by category: `colors`, `spacing`, `radius`, `font`, `shadow`, `breakpoint`, `other`.
|
|
64
|
+
|
|
65
|
+
### 4. Detect shadcn inventory (only when `state.stack.frontend == "react-shadcn"`)
|
|
66
|
+
|
|
67
|
+
Read `components.json` for the registered style + base color, then read `package.json` for `@radix-ui/*` and any locally vendored `components/ui/*.tsx` files. Write into `state.ui_audit.shadcn_inventory`:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
{
|
|
71
|
+
version: <from package.json shadcn registry CLI version, or null>,
|
|
72
|
+
style: "default" | "new-york" | <other>,
|
|
73
|
+
base_color: "slate" | "zinc" | ...,
|
|
74
|
+
primitives: ["Button", "Dialog", "Form", "Table", ...], // names of files in components/ui/
|
|
75
|
+
installed_radix: ["@radix-ui/react-dialog", ...] // raw radix list
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 5. List reusable patterns
|
|
80
|
+
|
|
81
|
+
Categorize what already exists. Empty arrays are valid, never omit the keys.
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
state.ui_audit.patterns = {
|
|
85
|
+
forms: [<component path:str>, ...], // any component with <form>, useForm, <flux:input>, <Input> + <Button type=submit>
|
|
86
|
+
tables: [...], // <table>, <flux:table>, DataTable, headless table primitives
|
|
87
|
+
modals: [...], // <flux:modal>, <Dialog>, AlertDialog, Sheet
|
|
88
|
+
empty_states: [...], // components matching grep "no results"|"empty"|"keine"|"nothing yet"
|
|
89
|
+
navigation: [...], // sidebar, breadcrumb, tabs
|
|
90
|
+
data_display: [...] // cards, lists, stat tiles
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 6. Match candidates for the current input
|
|
95
|
+
|
|
96
|
+
For each item in `state.ui_audit.components`, score similarity to `state.input.data` (fuzzy on filename + props/slots + co-occurring terms). Keep top 5 with `score >= 0.3`. Write into `state.ui_audit.candidates`:
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
[{path, name, score, reason: "matches 'settings' + 'toggle' in props"}, ...]
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
If `candidates` is empty, the user is building net-new. That is normal — record the empty list, do not halt.
|
|
103
|
+
|
|
104
|
+
### 7. Greenfield branch
|
|
105
|
+
|
|
106
|
+
If **all** are true:
|
|
107
|
+
- `state.ui_audit.components` is empty
|
|
108
|
+
- `state.ui_audit.design_system == "custom-or-none"`
|
|
109
|
+
- `state.ui_audit.design_tokens` is empty (no Tailwind config customizations, no `:root`)
|
|
110
|
+
|
|
111
|
+
then set `state.ui_audit.greenfield = true` and emit a halt:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
> No existing UI surface detected — this looks like greenfield.
|
|
115
|
+
>
|
|
116
|
+
> 1. Scaffold a minimal token set + a base component primitive folder
|
|
117
|
+
> before building (recommended for projects with >1 planned screen)
|
|
118
|
+
> 2. Proceed bare with Tailwind defaults (recommended for one-off prototypes)
|
|
119
|
+
> 3. Point me at an external design-system reference (URL or file)
|
|
120
|
+
|
|
121
|
+
**Recommendation: 1 — Scaffold tokens + primitives** — even one extra screen
|
|
122
|
+
benefits from a shared base; the scaffold cost is ~10 min and saves
|
|
123
|
+
re-doing every primitive on screen 2. Caveat: flip to 2 if this is a
|
|
124
|
+
demo or single-page prototype that will not grow.
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Record the user's pick in `state.ui_audit.greenfield_decision` (`scaffold` | `bare` | `external_reference`). Re-running the skill on the same state-file with `greenfield_decision` set is a no-op for the halt (audit findings stay).
|
|
128
|
+
|
|
129
|
+
### 8. (Optional) Capture an a11y baseline
|
|
130
|
+
|
|
131
|
+
R4 visual-review-loop contract reads `state.ui_audit.a11y_baseline` when present; review gate filters incoming `state.ui_review.a11y.violations` against it so pre-existing violations stay informational and only NEW or CHANGED entries block polish loop. Without baseline gate sees every violation as actionable — fine for greenfield, noisy for legacy surfaces.
|
|
132
|
+
|
|
133
|
+
Capture baseline when:
|
|
134
|
+
|
|
135
|
+
- Audit covers components with known a11y debt project does not intend to fix this run (legacy templates, third-party embeds, vendor widgets).
|
|
136
|
+
- User says "don't block on existing a11y issues" or similar.
|
|
137
|
+
|
|
138
|
+
Skip baseline (omit key, leave `state.ui_audit.a11y_baseline` unset) when:
|
|
139
|
+
|
|
140
|
+
- Surface is greenfield — review gate should treat every violation as new.
|
|
141
|
+
- Project's a11y posture is "zero known violations" and any finding is by definition actionable.
|
|
142
|
+
|
|
143
|
+
Shape (each entry MUST carry at least `rule` + `selector`; severity optional but recommended so review gate's severity-floor filter behaves same on replay):
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
state.ui_audit.a11y_baseline = [
|
|
147
|
+
{rule: "color-contrast", selector: ".legacy-tab", severity: "moderate"},
|
|
148
|
+
{rule: "label", selector: "form#search input[type=search]"},
|
|
149
|
+
...
|
|
150
|
+
]
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Producer parity: review skill that writes `state.ui_review.a11y.violations` MUST use same `(rule, selector)` shape, otherwise engine's de-dup will miss matches and pre-existing violations will surface as new findings on every run.
|
|
154
|
+
|
|
155
|
+
### 9. Validate and write findings
|
|
156
|
+
|
|
157
|
+
1. Verify every key in the **Output format** below is present in `state.ui_audit` (empty arrays/objects allowed; `null` only for `shadcn_inventory` outside the react-shadcn stack).
|
|
158
|
+
2. Verify `state.ui_audit.greenfield == true` implies `state.ui_audit.greenfield_decision` is set.
|
|
159
|
+
3. Write the full object back into the state-file. Audit completes with outcome `done` — the dispatcher's audit gate now passes.
|
|
160
|
+
|
|
161
|
+
## Output format
|
|
162
|
+
|
|
163
|
+
1. **`state.ui_audit.components`** — array of component/template descriptors (path, name, kind, exports)
|
|
164
|
+
2. **`state.ui_audit.design_system`** — single string identifying the dominant system or `custom-or-none`
|
|
165
|
+
3. **`state.ui_audit.design_tokens`** — object grouped by category (colors, spacing, radius, font, shadow, breakpoint, other)
|
|
166
|
+
4. **`state.ui_audit.shadcn_inventory`** — object with version, style, base_color, primitives (only when stack is `react-shadcn`; `null` otherwise)
|
|
167
|
+
5. **`state.ui_audit.patterns`** — object with forms, tables, modals, empty_states, navigation, data_display arrays
|
|
168
|
+
6. **`state.ui_audit.candidates`** — top-5 similarity matches for the current input (may be empty)
|
|
169
|
+
7. **`state.ui_audit.greenfield`** — boolean; when true, `greenfield_decision` MUST also be set before the dispatcher advances
|
|
170
|
+
8. **`state.ui_audit.a11y_baseline`** *(optional)* — array of `{rule, selector, severity?}` entries documenting pre-existing a11y violations the review gate should treat as informational. Omit the key entirely when no baseline applies; do not write `[]` for "I checked and there are none" — that disables the gate's filter for every future run.
|
|
171
|
+
|
|
172
|
+
## Gotcha
|
|
173
|
+
|
|
174
|
+
- The model tends to skip the audit and start designing straight from the request — the dispatcher gate at `directives/ui/audit.py` enforces "no design without audit findings". Never treat this skill as optional for non-trivial UI.
|
|
175
|
+
- The model tends to misidentify a single Tailwind utility as a "design token" — tokens come from the config or `:root`, not from class strings in templates.
|
|
176
|
+
- Don't assume a Radix-only `package.json` means shadcn — shadcn requires `components.json` at repo root.
|
|
177
|
+
- `state.ui_audit.shadcn_inventory.version` is often missing; the shadcn CLI does not always pin itself in `package.json`. Record `null` rather than guessing.
|
|
178
|
+
- Greenfield is detected, not assumed — a project with one Blade layout and no components is still greenfield only if tokens AND design system markers AND components are all empty.
|
|
179
|
+
- Re-running the skill on a stale state-file: cache by `(composer.json mtime, package.json mtime)`; if either changed, re-audit and overwrite.
|
|
180
|
+
|
|
181
|
+
## Do NOT
|
|
182
|
+
|
|
183
|
+
- Do NOT advance to `directives/ui/design.py` or `apply.py` if `state.ui_audit` is empty.
|
|
184
|
+
- Do NOT advance to design or apply if `state.ui_audit.greenfield == true` and `state.ui_audit.greenfield_decision` is unset.
|
|
185
|
+
- Do NOT silently skip the greenfield halt because "Tailwind has defaults" — the user picks the path explicitly.
|
|
186
|
+
- Do NOT write paths outside the project root into the inventory.
|
|
187
|
+
- Do NOT rewrite `state.ui_audit` once it is populated unless re-detection is triggered by mtime change — design and apply read from it.
|
|
@@ -1,73 +1,76 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: fe-design
|
|
3
|
-
description: "
|
|
3
|
+
description: "Reference for frontend-design heuristics — component architecture, layout patterns, form/table design, responsive strategy, a11y, UX principles. Stack-agnostic; cited by directives/ui/design.py."
|
|
4
4
|
source: package
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Frontend Design Skill
|
|
7
|
+
# Frontend Design Skill (Reference)
|
|
8
|
+
|
|
9
|
+
## Positioning — reference, not executor
|
|
10
|
+
|
|
11
|
+
`fe-design` is a **universal reference skill**, not an executor. Stack-agnostic heuristics that the UI directive set cites; does **not** own the flow.
|
|
12
|
+
|
|
13
|
+
| Concern | Owner |
|
|
14
|
+
|---|---|
|
|
15
|
+
| Layout / states / microcopy lock | [`directives/ui/design.py`](../../templates/scripts/work_engine/directives/ui/design.py) |
|
|
16
|
+
| Stack-dispatched implementation | [`directives/ui/apply.py`](../../templates/scripts/work_engine/directives/ui/apply.py) → `blade-ui` / `livewire` / `flux` / `react-shadcn-ui` |
|
|
17
|
+
| Existing-component inventory + tokens | [`existing-ui-audit`](../existing-ui-audit/SKILL.md) (mandatory pre-step) |
|
|
18
|
+
| Design-review polish loop | [`directives/ui/review.py`](../../templates/scripts/work_engine/directives/ui/review.py) + [`directives/ui/polish.py`](../../templates/scripts/work_engine/directives/ui/polish.py) |
|
|
8
19
|
|
|
9
20
|
## When to use
|
|
10
21
|
|
|
11
|
-
|
|
22
|
+
Cite this skill when:
|
|
23
|
+
|
|
12
24
|
- Planning a new page or feature UI before implementing
|
|
13
25
|
- Choosing between component patterns (modal vs. inline, table vs. cards)
|
|
14
26
|
- Designing forms with complex validation or multi-step flows
|
|
15
27
|
- Making responsive design decisions
|
|
16
28
|
- Reviewing UI for accessibility and usability
|
|
17
|
-
- Deciding how to structure Livewire components
|
|
18
|
-
|
|
19
|
-
## Procedure: Design a frontend interface
|
|
20
29
|
|
|
21
|
-
|
|
22
|
-
2. **Choose technology** — Pick from the project stack (see table below).
|
|
23
|
-
3. **Design layout** — Mobile-first, component-based, consistent spacing.
|
|
24
|
-
4. **Implement** — Build with Blade components, Livewire for interactivity, Flux for UI primitives.
|
|
25
|
-
5. **Verify** — Check accessibility (labels, focus, contrast), responsive behavior, loading states.
|
|
30
|
+
Do NOT use this skill to:
|
|
26
31
|
|
|
27
|
-
|
|
32
|
+
- Implement components — that is the apply-step's stack-dispatched skill
|
|
33
|
+
- Audit an existing UI — that is `existing-ui-audit`
|
|
34
|
+
- Drive the full UI flow — that is the `directives/ui/` orchestrator
|
|
28
35
|
|
|
29
|
-
|
|
30
|
-
|---|---|---|
|
|
31
|
-
| Templates | Laravel Blade | `blade-ui` |
|
|
32
|
-
| Interactivity | Livewire 3 | `livewire` |
|
|
33
|
-
| Component library | Flux (by Laravel) | `flux` |
|
|
34
|
-
| Styling | Tailwind CSS | `tailwind` |
|
|
35
|
-
| Icons | Heroicons / custom | — |
|
|
36
|
+
## How the directive set cites this skill
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
`directives/ui/design.py` produces the design brief (layout, components, states, microcopy, a11y). Brief picks heuristics from this reference when audit doesn't already pin a project pattern. Stack-specific choices come from the dispatched implementation skill.
|
|
38
39
|
|
|
39
40
|
## Component Architecture
|
|
40
41
|
|
|
41
|
-
### Page structure
|
|
42
|
+
### Page structure (universal shape)
|
|
42
43
|
|
|
43
44
|
```
|
|
44
|
-
Page
|
|
45
|
-
├── Header (
|
|
46
|
-
├── Navigation (
|
|
45
|
+
Page layout
|
|
46
|
+
├── Header (static)
|
|
47
|
+
├── Navigation (interactive — active state)
|
|
47
48
|
├── Content area
|
|
48
|
-
│ ├── Page heading + actions (
|
|
49
|
-
│ ├── Filters (
|
|
50
|
-
│ ├── Data display (
|
|
51
|
-
│ └── Pagination (
|
|
52
|
-
└── Footer (
|
|
49
|
+
│ ├── Page heading + actions (static)
|
|
50
|
+
│ ├── Filters (interactive — reactive)
|
|
51
|
+
│ ├── Data display (interactive — table / cards)
|
|
52
|
+
│ └── Pagination (interactive)
|
|
53
|
+
└── Footer (static)
|
|
53
54
|
```
|
|
54
55
|
|
|
55
|
-
|
|
56
|
+
Stack-specific mapping (Blade partial vs. Livewire component vs. React island vs. Vue SFC) is the apply-step's concern.
|
|
56
57
|
|
|
57
|
-
|
|
58
|
+
### When to use what (kind, not framework)
|
|
59
|
+
|
|
60
|
+
| Kind | When | Example |
|
|
58
61
|
|---|---|---|
|
|
59
|
-
| **
|
|
60
|
-
| **
|
|
61
|
-
| **
|
|
62
|
-
| **
|
|
63
|
-
| **
|
|
62
|
+
| **Static partial** | No interactivity, server-rendered only | Header, footer, static info |
|
|
63
|
+
| **Reusable UI component** | Props-only, no state | Button, badge, card shell |
|
|
64
|
+
| **Stateful component** | Needs server interaction or local state | Forms, tables, filters |
|
|
65
|
+
| **Library primitive** | Standard UI from a design system | Modal, dropdown, input, toast |
|
|
66
|
+
| **Client-only micro-interaction** | No server roundtrip needed | Toggle, accordion, clipboard |
|
|
64
67
|
|
|
65
68
|
### Component granularity
|
|
66
69
|
|
|
67
|
-
- **One
|
|
68
|
-
- **Compose with
|
|
69
|
-
- **Use
|
|
70
|
-
- **Extract when used 3+ times** — DRY applies to UI too
|
|
70
|
+
- **One stateful component per concern** — don't build mega-components.
|
|
71
|
+
- **Compose with reusable UI components** for shared shells, headers, fields.
|
|
72
|
+
- **Use the project's library primitives first** — never rebuild what the design system provides (audit findings tell you which).
|
|
73
|
+
- **Extract when used 3+ times** — DRY applies to UI too.
|
|
71
74
|
|
|
72
75
|
## Form Design
|
|
73
76
|
|
|
@@ -127,11 +130,11 @@ Step indicator (1 — 2 — 3)
|
|
|
127
130
|
- Default: 25 rows per page
|
|
128
131
|
- Show total count: "Showing 1–25 of 142"
|
|
129
132
|
- Allow page size change (10, 25, 50, 100)
|
|
130
|
-
-
|
|
133
|
+
- Prefer server-side pagination — avoid loading the full set client-side
|
|
131
134
|
|
|
132
135
|
## Responsive Strategy
|
|
133
136
|
|
|
134
|
-
### Breakpoints (Tailwind)
|
|
137
|
+
### Breakpoints (Tailwind reference scale)
|
|
135
138
|
|
|
136
139
|
| Prefix | Min width | Target |
|
|
137
140
|
|---|---|---|
|
|
@@ -187,25 +190,40 @@ Step indicator (1 — 2 — 3)
|
|
|
187
190
|
5. **Loading states** — Skeleton screens or spinners, never blank screens
|
|
188
191
|
6. **Error recovery** — Clear error messages with suggested actions
|
|
189
192
|
|
|
190
|
-
##
|
|
193
|
+
## Procedure
|
|
191
194
|
|
|
192
|
-
|
|
193
|
-
- **Skill:** `livewire` — Livewire component implementation
|
|
194
|
-
- **Skill:** `flux` — Flux component library usage
|
|
195
|
-
- **Skill:** `tailwind` — Tailwind CSS utility patterns
|
|
196
|
-
- **Skill:** `dashboard-design` — Monitoring dashboard design (different domain)
|
|
195
|
+
When `directives/ui/design.py` (or any caller) cites this skill:
|
|
197
196
|
|
|
197
|
+
1. **Confirm audit ran first** — `state.ui_audit` from [`existing-ui-audit`](../existing-ui-audit/SKILL.md) is mandatory. Stop and request audit if missing.
|
|
198
|
+
2. **Pick smallest matching section** — Component Architecture, Form Design, Table Design, Responsive Strategy, Accessibility, or UX Principles. Cite by H2/H3 heading, never paste whole skill.
|
|
199
|
+
3. **Defer to audit findings** — when audit pins a project pattern (token, primitive, layout convention), use it. Heuristics here are fallbacks for gaps, not overrides.
|
|
200
|
+
4. **Defer to stack apply skill** — Blade vs. Livewire vs. Flux vs. React-shadcn choices come from dispatched implementation skill, never from this reference.
|
|
201
|
+
5. **Surface conflicts** — if heuristic here contradicts an audit finding or stack convention, name both and let caller decide; do not silently pick.
|
|
198
202
|
|
|
199
203
|
## Output format
|
|
200
204
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
205
|
+
When this skill's content is folded into a design brief or review:
|
|
206
|
+
|
|
207
|
+
1. Quote cited heuristic verbatim, with H2/H3 heading and one-line "why this applies" tie-back to request.
|
|
208
|
+
2. Map each heuristic to a concrete artifact in brief (component, form section, table column, breakpoint rule, a11y check, UX state).
|
|
209
|
+
3. Keep stack-agnostic — never name Blade/Livewire/Flux/React primitives in cited prose; apply step adds those.
|
|
210
|
+
4. Mark anything overridden by audit findings as `[audit override]` and link to audit entry.
|
|
211
|
+
|
|
212
|
+
## Related
|
|
213
|
+
|
|
214
|
+
- **Orchestrator:** [`directives/ui/`](../../templates/scripts/work_engine/directives/ui/) — owns the UI flow
|
|
215
|
+
- **Pre-step (mandatory):** [`existing-ui-audit`](../existing-ui-audit/SKILL.md) — inventory before design
|
|
216
|
+
- **Stack apply skills (dispatched, not standalone):**
|
|
217
|
+
- [`blade-ui`](../blade-ui/SKILL.md) — Blade template implementation
|
|
218
|
+
- [`livewire`](../livewire/SKILL.md) — Livewire component implementation
|
|
219
|
+
- [`flux`](../flux/SKILL.md) — Flux component library usage
|
|
220
|
+
- [`react-shadcn-ui`](../react-shadcn-ui/SKILL.md) — React + shadcn primitives
|
|
221
|
+
- **Adjacent reference:** [`dashboard-design`](../dashboard-design/SKILL.md) — monitoring dashboard design (different domain)
|
|
204
222
|
|
|
205
223
|
## Gotcha
|
|
206
224
|
|
|
207
|
-
- Don't design components without
|
|
208
|
-
-
|
|
225
|
+
- Don't design components without running `existing-ui-audit` first — audit's component/token inventory is canonical for "what already exists in this project". Reinventing is the #1 failure mode.
|
|
226
|
+
- Heuristics in this reference apply across stacks; do not promote them to project rules without checking the audit.
|
|
209
227
|
- Mobile-first is not optional — every layout must work on 320px width.
|
|
210
228
|
|
|
211
229
|
## Do NOT
|
|
@@ -213,11 +231,5 @@ Step indicator (1 — 2 — 3)
|
|
|
213
231
|
- Do NOT skip mobile viewport testing.
|
|
214
232
|
- Do NOT use fixed pixel widths for responsive layouts.
|
|
215
233
|
- Do NOT ignore accessibility requirements.
|
|
234
|
+
- Do NOT use this skill as an executor — it is a reference cited by `directives/ui/design.py`.
|
|
216
235
|
|
|
217
|
-
## Auto-trigger keywords
|
|
218
|
-
|
|
219
|
-
- frontend design
|
|
220
|
-
- component architecture
|
|
221
|
-
- layout
|
|
222
|
-
- form design
|
|
223
|
-
- responsive
|
|
@@ -31,6 +31,10 @@ become a PR. Never destroy work without explicit confirmation.
|
|
|
31
31
|
NO MERGE, NO PR, NO DISCARD WITHOUT VERIFIED TESTS + EXPLICIT CHOICE.
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
+
Skipping verification because "it worked a minute ago" is how broken
|
|
35
|
+
`main` happens. Discarding because "I assumed the user meant it" is
|
|
36
|
+
how work gets lost.
|
|
37
|
+
|
|
34
38
|
## Procedure
|
|
35
39
|
|
|
36
40
|
### 1. Inspect branch state
|