@event4u/agent-config 1.33.0 → 1.35.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/review-changes.md +13 -8
- package/.agent-src/commands/roadmap/process-full.md +17 -15
- package/.agent-src/contexts/execution/roadmap-process-loop.md +11 -10
- package/.agent-src/personas/README.md +12 -21
- package/.agent-src/personas/_template-specialist/persona.md +89 -0
- package/.agent-src/personas/backend-architect.md +96 -0
- package/.agent-src/personas/discovery-lead.md +99 -0
- package/.agent-src/personas/eloquent-tamer.md +96 -0
- package/.agent-src/personas/frontend-engineer.md +100 -0
- package/.agent-src/personas/product-owner.md +71 -52
- package/.agent-src/personas/qa.md +27 -2
- package/.agent-src/personas/revops-maintainer.md +100 -0
- package/.agent-src/personas/security-engineer.md +100 -0
- package/.agent-src/personas/tech-writer.md +99 -0
- package/.agent-src/skills/accessibility-auditor/SKILL.md +132 -0
- package/.agent-src/skills/adr-create/SKILL.md +1 -0
- package/.agent-src/skills/adversarial-review/SKILL.md +1 -0
- package/.agent-src/skills/agent-docs-writing/SKILL.md +1 -0
- package/.agent-src/skills/agents-md-thin-root/SKILL.md +1 -0
- package/.agent-src/skills/ai-council/SKILL.md +1 -0
- package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -0
- package/.agent-src/skills/analysis-skill-router/SKILL.md +1 -0
- package/.agent-src/skills/api-design/SKILL.md +3 -0
- package/.agent-src/skills/api-endpoint/SKILL.md +1 -0
- package/.agent-src/skills/api-testing/SKILL.md +1 -0
- package/.agent-src/skills/architecture-review-lens/SKILL.md +137 -0
- package/.agent-src/skills/artisan-commands/SKILL.md +1 -0
- package/.agent-src/skills/async-python-patterns/SKILL.md +1 -0
- package/.agent-src/skills/authz-review/SKILL.md +4 -0
- package/.agent-src/skills/aws-infrastructure/SKILL.md +1 -0
- package/.agent-src/skills/blade-ui/SKILL.md +1 -0
- package/.agent-src/skills/blast-radius-analyzer/SKILL.md +3 -0
- package/.agent-src/skills/bug-analyzer/SKILL.md +1 -0
- package/.agent-src/skills/check-refs/SKILL.md +1 -0
- package/.agent-src/skills/code-refactoring/SKILL.md +1 -0
- package/.agent-src/skills/code-review/SKILL.md +1 -0
- package/.agent-src/skills/command-routing/SKILL.md +1 -0
- package/.agent-src/skills/command-writing/SKILL.md +1 -0
- package/.agent-src/skills/competitive-positioning/SKILL.md +152 -0
- package/.agent-src/skills/composer-packages/SKILL.md +1 -0
- package/.agent-src/skills/context-authoring/SKILL.md +1 -0
- package/.agent-src/skills/context-document/SKILL.md +1 -0
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +1 -0
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +1 -0
- package/.agent-src/skills/copilot-config/SKILL.md +1 -0
- package/.agent-src/skills/customer-research/SKILL.md +116 -0
- package/.agent-src/skills/dashboard-design/SKILL.md +1 -0
- package/.agent-src/skills/data-flow-mapper/SKILL.md +1 -0
- package/.agent-src/skills/database/SKILL.md +3 -0
- package/.agent-src/skills/dcf-modeling/SKILL.md +1 -0
- package/.agent-src/skills/decision-record/SKILL.md +218 -0
- package/.agent-src/skills/deep-reading-analyst/SKILL.md +1 -0
- package/.agent-src/skills/defense-in-depth/SKILL.md +1 -0
- package/.agent-src/skills/dependency-upgrade/SKILL.md +1 -0
- package/.agent-src/skills/description-assist/SKILL.md +1 -0
- package/.agent-src/skills/design-review/SKILL.md +1 -0
- package/.agent-src/skills/devcontainer/SKILL.md +1 -0
- package/.agent-src/skills/developer-like-execution/SKILL.md +1 -0
- package/.agent-src/skills/discovery-interview/SKILL.md +152 -0
- package/.agent-src/skills/docker/SKILL.md +1 -0
- package/.agent-src/skills/dto-creator/SKILL.md +1 -0
- package/.agent-src/skills/eloquent/SKILL.md +3 -0
- package/.agent-src/skills/error-handling-patterns/SKILL.md +1 -0
- package/.agent-src/skills/estimate-ticket/SKILL.md +1 -0
- package/.agent-src/skills/existing-ui-audit/SKILL.md +3 -0
- package/.agent-src/skills/fe-design/SKILL.md +4 -1
- package/.agent-src/skills/feature-planning/SKILL.md +1 -0
- package/.agent-src/skills/file-editor/SKILL.md +1 -0
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +1 -0
- package/.agent-src/skills/flux/SKILL.md +1 -0
- package/.agent-src/skills/form-handler/SKILL.md +145 -0
- package/.agent-src/skills/funnel-analysis/SKILL.md +1 -0
- package/.agent-src/skills/git-workflow/SKILL.md +1 -0
- package/.agent-src/skills/github-ci/SKILL.md +1 -0
- package/.agent-src/skills/grafana/SKILL.md +1 -0
- package/.agent-src/skills/guideline-writing/SKILL.md +1 -0
- package/.agent-src/skills/incident-commander/SKILL.md +140 -0
- package/.agent-src/skills/jira-integration/SKILL.md +1 -0
- package/.agent-src/skills/jobs-events/SKILL.md +1 -0
- package/.agent-src/skills/judge-bug-hunter/SKILL.md +1 -0
- package/.agent-src/skills/judge-code-quality/SKILL.md +1 -0
- package/.agent-src/skills/judge-security-auditor/SKILL.md +3 -0
- package/.agent-src/skills/judge-test-coverage/SKILL.md +1 -0
- package/.agent-src/skills/laravel/SKILL.md +1 -0
- package/.agent-src/skills/laravel-horizon/SKILL.md +1 -0
- package/.agent-src/skills/laravel-mail/SKILL.md +1 -0
- package/.agent-src/skills/laravel-middleware/SKILL.md +1 -0
- package/.agent-src/skills/laravel-notifications/SKILL.md +1 -0
- package/.agent-src/skills/laravel-pennant/SKILL.md +1 -0
- package/.agent-src/skills/laravel-pulse/SKILL.md +1 -0
- package/.agent-src/skills/laravel-reverb/SKILL.md +1 -0
- package/.agent-src/skills/laravel-scheduling/SKILL.md +1 -0
- package/.agent-src/skills/laravel-validation/SKILL.md +1 -0
- package/.agent-src/skills/launch-readiness/SKILL.md +156 -0
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +1 -0
- package/.agent-src/skills/lint-skills/SKILL.md +1 -0
- package/.agent-src/skills/livewire/SKILL.md +1 -0
- package/.agent-src/skills/livewire-architect/SKILL.md +158 -0
- package/.agent-src/skills/logging-monitoring/SKILL.md +1 -0
- package/.agent-src/skills/markitdown/SKILL.md +1 -0
- package/.agent-src/skills/mcp/SKILL.md +1 -0
- package/.agent-src/skills/mcp-builder/SKILL.md +1 -0
- package/.agent-src/skills/md-language-check/SKILL.md +1 -0
- package/.agent-src/skills/merge-conflicts/SKILL.md +1 -0
- package/.agent-src/skills/migration-architect/SKILL.md +119 -0
- package/.agent-src/skills/migration-creator/SKILL.md +1 -0
- package/.agent-src/skills/mobile-e2e-strategy/SKILL.md +2 -1
- package/.agent-src/skills/module-management/SKILL.md +1 -0
- package/.agent-src/skills/multi-tenancy/SKILL.md +1 -0
- package/.agent-src/skills/okr-tree-modeling/SKILL.md +1 -0
- package/.agent-src/skills/openapi/SKILL.md +1 -0
- package/.agent-src/skills/override-management/SKILL.md +1 -0
- package/.agent-src/skills/performance/SKILL.md +1 -0
- package/.agent-src/skills/performance-analysis/SKILL.md +1 -0
- package/.agent-src/skills/persona-writing/SKILL.md +1 -0
- package/.agent-src/skills/pest-testing/SKILL.md +1 -0
- package/.agent-src/skills/php-coder/SKILL.md +1 -0
- package/.agent-src/skills/php-debugging/SKILL.md +1 -0
- package/.agent-src/skills/php-service/SKILL.md +1 -0
- package/.agent-src/skills/playwright-architect/SKILL.md +141 -0
- package/.agent-src/skills/playwright-testing/SKILL.md +1 -0
- package/.agent-src/skills/po-discovery/SKILL.md +127 -0
- package/.agent-src/skills/project-analysis-core/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-laravel/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-nextjs/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-node-express/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-react/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-symfony/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +1 -0
- package/.agent-src/skills/project-analyzer/SKILL.md +1 -0
- package/.agent-src/skills/project-docs/SKILL.md +1 -0
- package/.agent-src/skills/prompt-engineering-patterns/SKILL.md +1 -0
- package/.agent-src/skills/prompt-optimizer/SKILL.md +1 -0
- package/.agent-src/skills/quality-tools/SKILL.md +1 -0
- package/.agent-src/skills/react-native-setup/SKILL.md +1 -0
- package/.agent-src/skills/react-shadcn-ui/SKILL.md +1 -0
- package/.agent-src/skills/readme-reviewer/SKILL.md +1 -0
- package/.agent-src/skills/readme-writing/SKILL.md +1 -0
- package/.agent-src/skills/readme-writing-package/SKILL.md +1 -0
- package/.agent-src/skills/receiving-code-review/SKILL.md +1 -0
- package/.agent-src/skills/refine-prompt/SKILL.md +1 -0
- package/.agent-src/skills/refine-ticket/SKILL.md +1 -0
- package/.agent-src/skills/release-comms/SKILL.md +123 -0
- package/.agent-src/skills/repomix-packer/SKILL.md +1 -0
- package/.agent-src/skills/requesting-code-review/SKILL.md +1 -0
- package/.agent-src/skills/review-routing/SKILL.md +1 -0
- package/.agent-src/skills/rice-prioritization/SKILL.md +1 -0
- package/.agent-src/skills/risk-officer/SKILL.md +141 -0
- package/.agent-src/skills/roadmap-management/SKILL.md +1 -0
- package/.agent-src/skills/roadmap-writing/SKILL.md +2 -1
- package/.agent-src/skills/rtk-output-filtering/SKILL.md +1 -0
- package/.agent-src/skills/rule-writing/SKILL.md +1 -0
- package/.agent-src/skills/script-writing/SKILL.md +1 -0
- package/.agent-src/skills/secrets-management/SKILL.md +1 -0
- package/.agent-src/skills/security/SKILL.md +1 -0
- package/.agent-src/skills/security-audit/SKILL.md +1 -0
- package/.agent-src/skills/sentry-integration/SKILL.md +1 -0
- package/.agent-src/skills/sequential-thinking/SKILL.md +1 -0
- package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -0
- package/.agent-src/skills/skill-management/SKILL.md +1 -0
- package/.agent-src/skills/skill-reviewer/SKILL.md +1 -0
- package/.agent-src/skills/skill-writing/SKILL.md +1 -0
- package/.agent-src/skills/sql-writing/SKILL.md +1 -0
- package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +237 -0
- package/.agent-src/skills/subagent-orchestration/SKILL.md +13 -0
- package/.agent-src/skills/systematic-debugging/SKILL.md +1 -0
- package/.agent-src/skills/tailwind-engineer/SKILL.md +130 -0
- package/.agent-src/skills/tech-debt-tracker/SKILL.md +152 -0
- package/.agent-src/skills/technical-specification/SKILL.md +1 -0
- package/.agent-src/skills/terraform/SKILL.md +1 -0
- package/.agent-src/skills/terragrunt/SKILL.md +1 -0
- package/.agent-src/skills/test-driven-development/SKILL.md +1 -0
- package/.agent-src/skills/test-performance/SKILL.md +1 -0
- package/.agent-src/skills/testing-anti-patterns/SKILL.md +1 -0
- package/.agent-src/skills/threat-modeling/SKILL.md +3 -0
- package/.agent-src/skills/token-optimizer/SKILL.md +1 -0
- package/.agent-src/skills/traefik/SKILL.md +1 -0
- package/.agent-src/skills/ui-component-architect/SKILL.md +153 -0
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +1 -0
- package/.agent-src/skills/universal-project-analysis/SKILL.md +1 -0
- package/.agent-src/skills/upstream-contribute/SKILL.md +1 -0
- package/.agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/.agent-src/skills/validate-feature-fit/SKILL.md +1 -0
- package/.agent-src/skills/verify-completion-evidence/SKILL.md +1 -0
- package/.agent-src/skills/voc-extract/SKILL.md +164 -0
- package/.agent-src/skills/websocket/SKILL.md +1 -0
- package/.agent-src/templates/roadmaps.md +9 -0
- package/.claude-plugin/marketplace.json +21 -1
- package/AGENTS.md +1 -0
- package/CHANGELOG.md +75 -0
- package/README.md +2 -2
- package/docs/architecture.md +2 -2
- package/docs/catalog.md +21 -4
- package/docs/contracts/context-spine.md +133 -0
- package/docs/contracts/file-ownership-matrix.json +616 -0
- package/docs/contracts/mental-models.md +336 -0
- package/docs/contracts/persona-schema.md +136 -0
- package/docs/contracts/skill-domains.md +143 -0
- package/docs/decisions/ADR-005-subagent-worktrees.md +120 -0
- package/docs/decisions/ADR-006-skill-tools-python-pilot.md +114 -0
- package/docs/decisions/INDEX.md +3 -0
- package/docs/guidelines/cross-role-handoff.md +127 -0
- package/docs/personas.md +115 -0
- package/package.json +1 -1
- package/scripts/_backfill_skill_domains.py +140 -0
- package/scripts/_emit_domain_table.py +35 -0
- package/scripts/install-hooks.sh +21 -4
- package/scripts/lint_context_spine_usage.py +133 -0
- package/scripts/lint_roadmap_complexity.py +37 -0
- package/scripts/lint_skill_tools.py +168 -0
- package/scripts/schemas/skill.schema.json +15 -1
- package/scripts/skill_linter.py +19 -4
- package/scripts/skill_tools/__init__.py +22 -0
- package/scripts/skill_tools/audit_persona_coverage.py +147 -0
- package/scripts/skill_tools/run_block_d_eval.py +129 -0
- package/scripts/skill_tools/score_skill_relevance.py +169 -0
- package/scripts/skill_tools/suggest_skill_for_task.py +113 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
adr: 005
|
|
3
|
+
status: accepted
|
|
4
|
+
date: 2026-05-09
|
|
5
|
+
decision: subagent-worktrees-no-auto-merge
|
|
6
|
+
supersedes: —
|
|
7
|
+
superseded_by: —
|
|
8
|
+
phase: road-to-better-skills-and-profiles · A7
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# ADR-005 — `do-in-worktrees` Mode: No Auto-Merge, Ranked Candidates
|
|
12
|
+
|
|
13
|
+
## Status
|
|
14
|
+
|
|
15
|
+
**Accepted** · 2026-05-09.
|
|
16
|
+
|
|
17
|
+
## Context
|
|
18
|
+
|
|
19
|
+
`road-to-better-skills-and-profiles` Block A introduces formal personas
|
|
20
|
+
and specialist review lenses. Step A7 derives from council iter-1
|
|
21
|
+
verdict **CC-OQ1 (a)** — adopt the AgentHub pattern from
|
|
22
|
+
`claude-skills` (per-candidate git-worktree isolation) into the
|
|
23
|
+
existing `subagent-orchestration` skill **without** weakening the
|
|
24
|
+
[`non-destructive-by-default`](../../.agent-src.uncompressed/rules/non-destructive-by-default.md)
|
|
25
|
+
Hard Floor.
|
|
26
|
+
|
|
27
|
+
The AgentHub pattern in its native form is appealing: spawn N
|
|
28
|
+
implementer subagents into N worktrees, let a judge rank, **auto-merge
|
|
29
|
+
the winner**. The auto-merge step is where the Hard Floor objects:
|
|
30
|
+
|
|
31
|
+
- A merge into a tracked branch is a destructive operation in the
|
|
32
|
+
agent-authority sense — it rewrites the working copy on a branch
|
|
33
|
+
that the user will later push.
|
|
34
|
+
- "Standing autonomy" never lifts the Hard Floor. CC-OQ1 (a) is the
|
|
35
|
+
only variant that survives the floor.
|
|
36
|
+
|
|
37
|
+
Mode 7 (`do-in-worktrees`) already covered the **chained handoff**
|
|
38
|
+
pattern (cross-wing skill chain, each step in its own worktree).
|
|
39
|
+
ADR-005 extends mode 7 with a **competitive variant** for parallel
|
|
40
|
+
candidate isolation, with three guardrails that make the pattern
|
|
41
|
+
Hard-Floor-safe.
|
|
42
|
+
|
|
43
|
+
## Decision
|
|
44
|
+
|
|
45
|
+
Augment `subagent-orchestration` mode 7 with the **competitive
|
|
46
|
+
variant** under three Hard-Floor-derived rules:
|
|
47
|
+
|
|
48
|
+
1. **No auto-merge.** The orchestrator never merges a candidate
|
|
49
|
+
branch into the integration branch. The user invokes the merge
|
|
50
|
+
explicitly (e.g. `/finishing-a-development-branch`), or the
|
|
51
|
+
orchestrator hands back with a numbered-options block per
|
|
52
|
+
[`user-interaction`](../../.agent-src.uncompressed/rules/user-interaction.md).
|
|
53
|
+
2. **Ranked presentation.** Judge ranks candidates 1..N with a
|
|
54
|
+
one-line justification per rank. The judge does **not** apply
|
|
55
|
+
anything; ranking is the only output.
|
|
56
|
+
3. **Loser worktrees stay.** The orchestrator does not delete
|
|
57
|
+
losing worktrees automatically. Cleanup happens via
|
|
58
|
+
[`finishing-a-development-branch`](../../.agent-src.uncompressed/skills/finishing-a-development-branch/SKILL.md)
|
|
59
|
+
on user request, after harvesting any salvageable partial idea.
|
|
60
|
+
|
|
61
|
+
Mode 7's chained-handoff variant is unchanged. The two variants
|
|
62
|
+
share the worktree-isolation primitive but differ in topology
|
|
63
|
+
(sequential vs parallel) and selection (linear chain vs ranked).
|
|
64
|
+
|
|
65
|
+
## Consequences
|
|
66
|
+
|
|
67
|
+
### Accepted
|
|
68
|
+
|
|
69
|
+
- The Hard Floor stands. No new override surface; no "auto-merge
|
|
70
|
+
under standing autonomy" branch.
|
|
71
|
+
- AgentHub's exploratory benefit is preserved — N candidates run in
|
|
72
|
+
isolation, judge picks a winner, user can compare diffs.
|
|
73
|
+
- `using-git-worktrees` remains the mechanics layer; mode 7 is the
|
|
74
|
+
dispatch layer. No duplication.
|
|
75
|
+
|
|
76
|
+
### Trade-offs
|
|
77
|
+
|
|
78
|
+
- **Higher final-step cost.** User-driven merge adds one round-trip
|
|
79
|
+
per `do-competitively`-in-worktrees run vs the AgentHub auto-merge
|
|
80
|
+
variant. This is the cost of preserving the Hard Floor.
|
|
81
|
+
- **Disk usage.** Loser worktrees persist until the user cleans up.
|
|
82
|
+
The `finishing-a-development-branch` skill carries an explicit
|
|
83
|
+
worktree-prune step to bound this.
|
|
84
|
+
|
|
85
|
+
## Alternatives considered
|
|
86
|
+
|
|
87
|
+
- **Variant (b) — auto-merge winner under standing autonomy flag.**
|
|
88
|
+
Rejected. The Hard Floor is non-negotiable and the cost of a
|
|
89
|
+
user round-trip is small compared to the cost of merging the
|
|
90
|
+
wrong candidate. Standing autonomy narrows other rules; it does
|
|
91
|
+
not lift the Hard Floor (per `non-destructive-by-default` § Hard
|
|
92
|
+
Floor catalog).
|
|
93
|
+
- **Variant (c) — keep AgentHub as a separate skill, do not touch
|
|
94
|
+
mode 7.** Rejected. The skill would duplicate the worktree
|
|
95
|
+
primitives in `using-git-worktrees` and the dispatch logic in
|
|
96
|
+
`subagent-orchestration`. Mode 7 already exists; extending it is
|
|
97
|
+
cheaper than spawning a parallel skill. Council CC-OQ1 (a)
|
|
98
|
+
agreed: *"adopts AgentHub pattern from claude-skills, respecting
|
|
99
|
+
Hard Floor"*.
|
|
100
|
+
|
|
101
|
+
## Re-evaluation trigger
|
|
102
|
+
|
|
103
|
+
Revisit this ADR when:
|
|
104
|
+
|
|
105
|
+
- A surface-level user-research signal indicates the manual-merge
|
|
106
|
+
round-trip is the bottleneck (≥3 distinct user reports), AND
|
|
107
|
+
- A reviewable proposal exists for narrowing the Hard Floor
|
|
108
|
+
(additional gates, audit trail, etc.) that does not weaken the
|
|
109
|
+
prod-data and prod-deploy floors.
|
|
110
|
+
|
|
111
|
+
Both conditions must hold. Either alone is insufficient.
|
|
112
|
+
|
|
113
|
+
## References
|
|
114
|
+
|
|
115
|
+
- `agents/roadmaps/road-to-better-skills-and-profiles.md` § A7
|
|
116
|
+
(council iter-1 CC-OQ1 verdict (a))
|
|
117
|
+
- `.agent-src.uncompressed/skills/subagent-orchestration/SKILL.md` § Mode 7
|
|
118
|
+
- `.agent-src.uncompressed/skills/using-git-worktrees/SKILL.md` (mechanics layer)
|
|
119
|
+
- `.agent-src.uncompressed/rules/non-destructive-by-default.md` § Hard Floor catalog
|
|
120
|
+
- `.agent-src.uncompressed/skills/finishing-a-development-branch/SKILL.md` (cleanup path)
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
adr: 006
|
|
3
|
+
status: accepted
|
|
4
|
+
date: 2026-05-09
|
|
5
|
+
decision: skill-tools-python-pilot-pass
|
|
6
|
+
supersedes: —
|
|
7
|
+
superseded_by: —
|
|
8
|
+
phase: road-to-better-skills-and-profiles · Block D (D1–D5)
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# ADR-006 — Skill-Tools Python Pilot: Outcome and Decision
|
|
12
|
+
|
|
13
|
+
## Status
|
|
14
|
+
|
|
15
|
+
**Accepted** · 2026-05-09 · pilot **PASSED** · tools kept under
|
|
16
|
+
`scripts/skill_tools/`.
|
|
17
|
+
|
|
18
|
+
## Context
|
|
19
|
+
|
|
20
|
+
`road-to-better-skills-and-profiles` **Block D** introduced four
|
|
21
|
+
Python tools for skill / persona corpus maintenance:
|
|
22
|
+
|
|
23
|
+
| ID | Tool | Purpose |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| D1 | `lint_skill_tools.py` | Pilot-invariant gate (stdlib-only, ≤ 200 LOC, `--json`/`--help`, `_SAMPLE`) |
|
|
26
|
+
| D2 | `score_skill_relevance.py` | Rank skills for a task by keyword overlap + persona match |
|
|
27
|
+
| D3 | `audit_persona_coverage.py` | Tier-aware persona-citation matrix (specialist < 3, core < 5 → flag) |
|
|
28
|
+
| D4 | `suggest_skill_for_task.py` | Top-N skill + persona combos with one-line justification (wraps D2 + D3) |
|
|
29
|
+
|
|
30
|
+
The pilot was gated by **iter-1 AI-Council verdict** (members:
|
|
31
|
+
claude-sonnet-4-5 + gpt-4o · 2 rounds · 2026-05-01) <!-- council-ref-allowed: ADR decision trace -->
|
|
32
|
+
([`block-d-python-tools-pilot-verdict`](../../agents/council-responses/block-d-python-tools-pilot-verdict.md)) <!-- council-ref-allowed: ADR decision trace -->
|
|
33
|
+
under strict invariants: stdlib-only (internal package imports
|
|
34
|
+
allowed), ≤ 200 LOC per tool, machine-readable output (`--json`),
|
|
35
|
+
embedded `_SAMPLE`, blind-labelled eval corpora, and a kill-switch if
|
|
36
|
+
< 2 / 3 functional tools pass.
|
|
37
|
+
|
|
38
|
+
## Eval Outcome (D5)
|
|
39
|
+
|
|
40
|
+
Corpora at `agents/eval-corpora/block-d/`. Runner:
|
|
41
|
+
`scripts/skill_tools/run_block_d_eval.py`. Report:
|
|
42
|
+
[`agents/eval-corpora/block-d/report.json`](../../agents/eval-corpora/block-d/report.json).
|
|
43
|
+
|
|
44
|
+
| Tool | Target | Result | Verdict |
|
|
45
|
+
|---|---|---|---|
|
|
46
|
+
| **D2** (relevance scorer) | ≥ 85 % top-3 hit on 10 blind tasks | **10 / 10 (100 %)** | ✅ pass |
|
|
47
|
+
| **D3** (persona audit) | ≥ 2 under-cited personas surfaced | **5** (`ai-agent`, `developer`, `eloquent-tamer`, `qa`, `stakeholder`) | ✅ pass |
|
|
48
|
+
| **D4** (skill suggester) | ≥ 3 / 5 top-1 hits on blind corpus | **3 / 5 (60 %)** | ✅ pass (at floor) |
|
|
49
|
+
| **Pilot** | ≥ 2 / 3 functional tools pass | **3 / 3** | ✅ **PASS** |
|
|
50
|
+
|
|
51
|
+
D4 misses are honest: B01 ranks `livewire` over the more specific
|
|
52
|
+
`livewire-architect` (close cousins; both legitimate top-1 picks);
|
|
53
|
+
B03 (`description-assist` for "review trigger quality") is partial
|
|
54
|
+
overlap. Both surface as `confirm-with-reviewer`-grade suggestions,
|
|
55
|
+
which matches the tool's design contract.
|
|
56
|
+
|
|
57
|
+
## Decision
|
|
58
|
+
|
|
59
|
+
1. **Keep** the four tools under `scripts/skill_tools/` and the meta
|
|
60
|
+
linter at `scripts/lint_skill_tools.py`.
|
|
61
|
+
2. **Keep** `lint-skill-tools` in the CI pipeline (`task ci` →
|
|
62
|
+
`taskfiles/ci-fast.yml`).
|
|
63
|
+
3. **Keep** the eval corpora and the runner at
|
|
64
|
+
`scripts/skill_tools/run_block_d_eval.py` for regression.
|
|
65
|
+
4. **Defer** the v2 refinements (anthropic round-2):
|
|
66
|
+
- `--ratio-mode` flag for D3 (absolute thresholds proved adequate
|
|
67
|
+
on first run; no false alarms on real corpus).
|
|
68
|
+
- Token-frequency reweighting for D2 (100 % top-3 hit rate leaves
|
|
69
|
+
no signal to reweight against).
|
|
70
|
+
- Council `do-competitively` mode for skill-suggester (out of
|
|
71
|
+
scope; orthogonal to the pilot).
|
|
72
|
+
5. **No** promotion to a `task` subcommand or kernel-rule citation.
|
|
73
|
+
Tools stay advisory; no agent rule references them yet.
|
|
74
|
+
|
|
75
|
+
## Consequences
|
|
76
|
+
|
|
77
|
+
**Positive:**
|
|
78
|
+
- 4 advisory tools available for future skill / persona corpus work
|
|
79
|
+
without third-party dependencies.
|
|
80
|
+
- Tier-aware persona thresholds are now mechanically enforced
|
|
81
|
+
(advisory, not gated).
|
|
82
|
+
- Eval corpora become the regression baseline — any future heuristic
|
|
83
|
+
edit must keep ≥ 2 / 3 tools passing.
|
|
84
|
+
|
|
85
|
+
**Neutral:**
|
|
86
|
+
- Tools are advisory only; no rule cites them, so they cannot
|
|
87
|
+
silently drift into a Hard-Floor or auto-execution role.
|
|
88
|
+
- `task ci` gains one cheap meta-lint step (~ 50 ms).
|
|
89
|
+
|
|
90
|
+
**Negative:**
|
|
91
|
+
- Four new files to maintain. Mitigation: pilot-invariants linter
|
|
92
|
+
gates structural drift; tests gate semantic drift.
|
|
93
|
+
- D4's 3 / 5 floor result is not a comfortable margin. If a future
|
|
94
|
+
edit drops it below 3 / 5, kill-switch fires per the council
|
|
95
|
+
verdict and the tool is removed without further debate.
|
|
96
|
+
|
|
97
|
+
## Reversibility
|
|
98
|
+
|
|
99
|
+
**Trigger:** any single `run_block_d_eval.py` execution that returns
|
|
100
|
+
< 2 / 3 tools passing on `main` for two consecutive commits.
|
|
101
|
+
**Action:** delete `scripts/skill_tools/`,
|
|
102
|
+
`scripts/lint_skill_tools.py`, `tests/test_*_skill*.py`, the corpora
|
|
103
|
+
dir, and the `lint-skill-tools` task entry. Mark this ADR
|
|
104
|
+
`superseded_by`. ~ 30 min mechanical revert.
|
|
105
|
+
|
|
106
|
+
## References
|
|
107
|
+
|
|
108
|
+
- Roadmap: [`road-to-better-skills-and-profiles`](../../agents/roadmaps/archive/road-to-better-skills-and-profiles.md) Block D.
|
|
109
|
+
- Council: [`block-d-python-tools-pilot-verdict`](../../agents/council-responses/block-d-python-tools-pilot-verdict.md). <!-- council-ref-allowed: ADR decision trace -->
|
|
110
|
+
|
|
111
|
+
- Tools: [`scripts/skill_tools/`](../../scripts/skill_tools/).
|
|
112
|
+
- Linter: [`scripts/lint_skill_tools.py`](../../scripts/lint_skill_tools.py).
|
|
113
|
+
- Corpora + report: [`agents/eval-corpora/block-d/`](../../agents/eval-corpora/block-d/).
|
|
114
|
+
- Tests: `tests/test_lint_skill_tools.py`, `tests/test_score_skill_relevance.py`, `tests/test_audit_persona_coverage.py`, `tests/test_suggest_skill_for_task.py`.
|
package/docs/decisions/INDEX.md
CHANGED
|
@@ -7,6 +7,9 @@ _Auto-generated by `scripts/adr/regenerate_index.py`. Do not edit._
|
|
|
7
7
|
| [ADR-001](ADR-001-kernel-swap-deferred.md) | Kernel Swap Deferred | accepted | 2026-05-06 | — |
|
|
8
8
|
| [ADR-002](ADR-002-kernel-bucket-overrides.md) | Kernel Bucket Overrides | — | — | — |
|
|
9
9
|
| [ADR-003](ADR-003-flat-cluster-subs-and-colon-syntax.md) | Flat Cluster Subs And Colon Syntax | — | — | — |
|
|
10
|
+
| [ADR-004](ADR-004-rule-governance-pruning.md) | Rule Governance Pruning | accepted | 2026-05-08 | — |
|
|
11
|
+
| [ADR-005](ADR-005-subagent-worktrees.md) | Subagent Worktrees No Auto Merge | accepted | 2026-05-09 | — |
|
|
12
|
+
| [ADR-006](ADR-006-skill-tools-python-pilot.md) | Skill Tools Python Pilot Pass | accepted | 2026-05-09 | — |
|
|
10
13
|
|
|
11
14
|
## Unnumbered (legacy)
|
|
12
15
|
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Cross-Role Handoff
|
|
2
|
+
|
|
3
|
+
Wing-specific prose for senior-tier skills handing off across role
|
|
4
|
+
boundaries. The mechanical contract — initiator → delegated(input) →
|
|
5
|
+
output, lint rules, worktree boundary — lives in
|
|
6
|
+
[`docs/contracts/cross-wing-handoff.md`](../contracts/cross-wing-handoff.md).
|
|
7
|
+
This guideline covers **when a role hands off to another role**,
|
|
8
|
+
**how to phrase the routing**, and the **L4 / C8 boundary**.
|
|
9
|
+
|
|
10
|
+
## Wings at a glance
|
|
11
|
+
|
|
12
|
+
The senior catalog spans four wings. Each wing owns a cognition
|
|
13
|
+
cluster and emits artifacts the other wings can consume.
|
|
14
|
+
|
|
15
|
+
| Wing | Cluster | Senior skills (anchor examples) |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| **1. Engineering** | Code, architecture, debugging, review | `architecture-review-lens`, `bug-analyzer`, `judge-bug-hunter`, `blast-radius-analyzer` |
|
|
18
|
+
| **2. Product + Foundation** | Discovery, refinement, decisions | `po-discovery`, `refine-ticket`, `decision-record`, `rice-prioritization` |
|
|
19
|
+
| **3. GTM + Growth** | Customers, comms, funnel, channels | `customer-research` (L1), `release-comms` (L2), `funnel-analysis` |
|
|
20
|
+
| **4. Money + Strategy + Ops** | Unit economics, OKRs, capacity, risk | `unit-economics-modeling`, `okr-tree-modeling`, `dcf-modeling`, `risk-officer` |
|
|
21
|
+
|
|
22
|
+
A handoff is **cross-role** when the initiator and the delegate live
|
|
23
|
+
in different wings (or in different cognition clusters within the
|
|
24
|
+
same wing). Same-cluster delegation is normal composition and does
|
|
25
|
+
not need this guideline.
|
|
26
|
+
|
|
27
|
+
## When to hand off
|
|
28
|
+
|
|
29
|
+
A senior skill SHOULD hand off — not absorb — when any of the four
|
|
30
|
+
fires:
|
|
31
|
+
|
|
32
|
+
1. **Different cognition cluster.** The downstream step needs a
|
|
33
|
+
different mode of thinking (numbers vs. narrative; user vs.
|
|
34
|
+
system; risk vs. design). Absorbing it dilutes the skill.
|
|
35
|
+
2. **Different artifact owner.** The output naturally lives under a
|
|
36
|
+
different role's catalog (e.g. `forecast-band.json` belongs to
|
|
37
|
+
Wing-4, not Wing-2).
|
|
38
|
+
3. **Tier-mismatch risk.** Inlining the step would require
|
|
39
|
+
downgrading to a non-senior delegate; the cross-wing-handoff
|
|
40
|
+
linter blocks tier mismatches.
|
|
41
|
+
4. **Re-use evidence.** The step is already cited by ≥ 2 other
|
|
42
|
+
senior skills; absorbing it duplicates cognition.
|
|
43
|
+
|
|
44
|
+
If none fire, keep the step inline. Cross-role plumbing is not free.
|
|
45
|
+
|
|
46
|
+
## How to phrase the handoff
|
|
47
|
+
|
|
48
|
+
Two surfaces in the senior-skill template carry routing:
|
|
49
|
+
|
|
50
|
+
- **`## Related Skills` § *WHEN NOT to use this*** — the routing
|
|
51
|
+
list. One bullet per peer that owns the cognition the user might
|
|
52
|
+
expect from this skill but is wrong to ask here. Format:
|
|
53
|
+
*"X is the actual question — route to [`<peer>`](../<peer>/SKILL.md)"*.
|
|
54
|
+
- **`## Procedure` Composes line** — when the skill **does** call
|
|
55
|
+
another skill mid-procedure, declare it on a line beginning with
|
|
56
|
+
`Composes [`<peer>`](...)` so the linter can match the call site
|
|
57
|
+
to the delegate's `## Input` block.
|
|
58
|
+
|
|
59
|
+
The delegated skill's `## Input` block names the fields the initiator
|
|
60
|
+
must pass. Drift between the two is the failure the contract catches.
|
|
61
|
+
|
|
62
|
+
## Decision tree
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
Need a downstream cognition step?
|
|
66
|
+
├── Same wing + same cluster? → keep inline (normal composition).
|
|
67
|
+
├── Different cluster, but no shipped senior peer?
|
|
68
|
+
│ └── Implement inline; flag for next plate's audit (the cluster
|
|
69
|
+
│ might need its own senior).
|
|
70
|
+
├── Different cluster + shipped senior peer + ≥ 2 reuse citations?
|
|
71
|
+
│ └── HAND OFF: declare in WHEN NOT block + Composes line.
|
|
72
|
+
└── Cross-wing chain (≥ 3 senior steps, ≥ 30 min each)?
|
|
73
|
+
└── Use `subagent-orchestration` mode 6 (worktrees) per
|
|
74
|
+
cross-wing-handoff.md § 3.
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## L4 / C8 composition boundary
|
|
78
|
+
|
|
79
|
+
Council Q3 (2026-05-05) locks the disambiguation between L4
|
|
80
|
+
`stakeholder-tradeoff` and the sibling C8 `code-review-multi-lens`:
|
|
81
|
+
|
|
82
|
+
- **L4 fires** when a request crosses two stakeholder lenses
|
|
83
|
+
(engineering ↔ PO, PO ↔ ops, ops ↔ infra) and the trade-off is
|
|
84
|
+
**not yet code**. Output is a trade-off matrix + recommendation +
|
|
85
|
+
dissent log; the artifact is consumable by a roadmap or PR
|
|
86
|
+
description, not by a diff.
|
|
87
|
+
- **C8 fires** when the request **is already code** — PR open, draft
|
|
88
|
+
branch under review, or a diff supplied as input. Output is a
|
|
89
|
+
multi-lens code review (security · architecture · tests · quality)
|
|
90
|
+
bound to file:line spans.
|
|
91
|
+
- **C8 → L4 escalation.** A C8 verdict that surfaces a stakeholder
|
|
92
|
+
conflict — e.g. test-coverage judge fails but PO insists on
|
|
93
|
+
shipping — becomes **input to L4**. The escalation is one-way:
|
|
94
|
+
L4 produces the dissent log that decides whether C8's verdict
|
|
95
|
+
is overridden, with the override recorded in
|
|
96
|
+
[`decision-record`](../../.agent-src.uncompressed/skills/decision-record/SKILL.md).
|
|
97
|
+
|
|
98
|
+
The boundary keeps the two skills sharp — neither absorbs the other —
|
|
99
|
+
and gives the agent a deterministic rule for which one to load when
|
|
100
|
+
both look applicable.
|
|
101
|
+
|
|
102
|
+
## Worked example
|
|
103
|
+
|
|
104
|
+
A PO refining a ticket (Wing-2) hits a sentence like *"the cheapest
|
|
105
|
+
acquisition channel is paid search, but only if CAC payback < 6 months"*:
|
|
106
|
+
|
|
107
|
+
1. Wing-2 is the initiator (`refine-ticket`).
|
|
108
|
+
2. The CAC question is Wing-4 cognition — `unit-economics-modeling`.
|
|
109
|
+
3. `refine-ticket` hands off via:
|
|
110
|
+
- WHEN NOT entry: *"CAC / payback questions — route to
|
|
111
|
+
[`unit-economics-modeling`](../unit-economics-modeling/SKILL.md)"*.
|
|
112
|
+
- Composes line in the procedure step that needs the answer.
|
|
113
|
+
4. The delegate's `## Input` block lists the fields (channel,
|
|
114
|
+
cohort, time horizon); `refine-ticket` passes them.
|
|
115
|
+
5. The output (`payback-band.md`) feeds the AC of the original ticket.
|
|
116
|
+
|
|
117
|
+
No cluster collision, no tier mismatch, no untyped drift.
|
|
118
|
+
|
|
119
|
+
## See also
|
|
120
|
+
|
|
121
|
+
- [`docs/contracts/cross-wing-handoff.md`](../contracts/cross-wing-handoff.md)
|
|
122
|
+
— the mechanical contract this guideline cites.
|
|
123
|
+
- [`docs/contracts/context-spine.md`](../contracts/context-spine.md)
|
|
124
|
+
— orthogonal context-slot mechanism, often used together with a
|
|
125
|
+
handoff (e.g. delegate reads `team` slot the initiator opted in to).
|
|
126
|
+
- `.agent-src.uncompressed/skills/subagent-orchestration/SKILL.md` § mode 6
|
|
127
|
+
— when the chain runs in fresh worktrees.
|
package/docs/personas.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Personas
|
|
2
|
+
|
|
3
|
+
Personas are **review lenses** the host agent adopts when running a
|
|
4
|
+
skill — not sub-agents, not execution modes. Each persona shapes
|
|
5
|
+
*what* the agent looks for in a diff, plan, or artifact; the host
|
|
6
|
+
identity, tools, and workflow stay the same.
|
|
7
|
+
|
|
8
|
+
This page catalogs the 11 personas shipped with `event4u/agent-config`
|
|
9
|
+
and explains how `personas:` (lens axis) interacts with `/mode`
|
|
10
|
+
(role-mode axis).
|
|
11
|
+
|
|
12
|
+
## Catalog
|
|
13
|
+
|
|
14
|
+
| ID | Role | Tier | Lens summary |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| `developer` | Developer | core | Pragmatic implementer voice — what's the smallest correct change? |
|
|
17
|
+
| `senior-engineer` | Senior Engineer | core | Long-horizon impact — what does this look like in 6 months? |
|
|
18
|
+
| `product-owner` | Product Owner | core | Outcome over output — does this move the user metric? |
|
|
19
|
+
| `stakeholder` | Stakeholder | core | Risk and politics — who owns the rollback if this fails? |
|
|
20
|
+
| `critical-challenger` | Critical Challenger | core | Devil's-advocate voice — what assumption is load-bearing here? |
|
|
21
|
+
| `ai-agent` | AI Agent | core | Tool-economy voice — token cost, prompt clarity, automation seam. |
|
|
22
|
+
| `qa` | QA | specialist | Test coverage and regression gates. |
|
|
23
|
+
| `backend-architect` | Backend Architect | specialist | Service-layer boundaries, transaction scope, contract changes. |
|
|
24
|
+
| `eloquent-tamer` | Eloquent Tamer | specialist | N+1, query shape, ORM idioms that melt the database. |
|
|
25
|
+
| `security-engineer` | Security Engineer | specialist | OWASP-shaped failure modes, secret leakage, trust boundaries. |
|
|
26
|
+
| `frontend-engineer` | Frontend Engineer | specialist | Component lifecycle, reactive state, hydration boundaries. |
|
|
27
|
+
|
|
28
|
+
Tier rules:
|
|
29
|
+
|
|
30
|
+
- **Core (6)** — always-loaded cast. 5 sections (Focus · Mindset · Unique Questions · Output Expectations · Anti-Patterns), ≤ 120 lines.
|
|
31
|
+
- **Specialist (5)** — opt-in lenses. 7 sections (Core-5 + Critical Rules + Workflows), ≤ 100 lines.
|
|
32
|
+
|
|
33
|
+
Schema contract: [`docs/contracts/persona-schema.md`](contracts/persona-schema.md).
|
|
34
|
+
|
|
35
|
+
## When to invoke a persona
|
|
36
|
+
|
|
37
|
+
- **A skill cites it.** Skills declare `personas:` in frontmatter; the
|
|
38
|
+
agent adopts the listed personas while running the skill. No user
|
|
39
|
+
action needed. Example: `judge-security-auditor` cites
|
|
40
|
+
`security-engineer` — invoking the skill applies the lens.
|
|
41
|
+
- **You want a second pass on existing work.** Pick the specialist
|
|
42
|
+
whose checklist matches the diff: `eloquent-tamer` for ORM heavy
|
|
43
|
+
changes, `frontend-engineer` for component changes,
|
|
44
|
+
`backend-architect` for service-seam changes.
|
|
45
|
+
- **Adversarial review.** `critical-challenger` for the devil's-advocate
|
|
46
|
+
voice; `security-engineer` for abuse-case framing.
|
|
47
|
+
|
|
48
|
+
Invocation example (when supported by the host tool):
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
--personas=backend-architect,security-engineer
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The host agent reads the persona's `Critical Rules` and `Workflows`
|
|
55
|
+
sections (specialist tier) or `Mindset` and `Unique Questions` (core
|
|
56
|
+
tier) and merges them into its review pass.
|
|
57
|
+
|
|
58
|
+
## `personas:` vs `/mode` — two different axes
|
|
59
|
+
|
|
60
|
+
| Axis | What it controls | Example |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| `/mode` (role-mode) | Which **contract** the agent operates under for a turn — what outputs are mandatory, what work is refused | `/mode reviewer` refuses to write production code |
|
|
63
|
+
| `personas:` (lens) | Which **review checklists** the agent overlays on a skill's procedure | `personas: [security-engineer]` adds OWASP-shaped checks to whatever skill is running |
|
|
64
|
+
|
|
65
|
+
The two compose. `/mode reviewer` + `personas: [security-engineer,
|
|
66
|
+
backend-architect]` = a review-only turn that applies both the
|
|
67
|
+
security-abuse-case lens and the service-seam lens on top of the
|
|
68
|
+
review contract.
|
|
69
|
+
|
|
70
|
+
Personas are **not** a replacement for `/mode`. A persona cannot
|
|
71
|
+
refuse work or change output contracts; that is `/mode`'s job.
|
|
72
|
+
|
|
73
|
+
## Skill citations
|
|
74
|
+
|
|
75
|
+
Specialist personas need at least one skill citation to earn their
|
|
76
|
+
slot. Current cite map:
|
|
77
|
+
|
|
78
|
+
| Persona | Cited by |
|
|
79
|
+
|---|---|
|
|
80
|
+
| `qa` | `judge-test-coverage` |
|
|
81
|
+
| `critical-challenger` | `adversarial-review`, `requesting-code-review`, `receiving-code-review` |
|
|
82
|
+
| `developer` · `senior-engineer` · `product-owner` · `ai-agent` | `refine-ticket`, `refine-prompt`, `estimate-ticket` |
|
|
83
|
+
| `backend-architect` | `authz-review`, `api-design`, `blast-radius-analyzer` |
|
|
84
|
+
| `eloquent-tamer` | `eloquent`, `database` |
|
|
85
|
+
| `security-engineer` | `judge-security-auditor`, `threat-modeling`, `authz-review` |
|
|
86
|
+
| `frontend-engineer` | `existing-ui-audit`, `fe-design` |
|
|
87
|
+
|
|
88
|
+
Add a citation by appending `personas: [<id>]` to the skill's
|
|
89
|
+
frontmatter — never overwrite an existing list, append.
|
|
90
|
+
|
|
91
|
+
## Override pattern
|
|
92
|
+
|
|
93
|
+
Consumers can override any package-shipped persona via the standard
|
|
94
|
+
override mechanism:
|
|
95
|
+
|
|
96
|
+
- **Frontmatter override** — change `tier`, `mode`, `description`
|
|
97
|
+
while keeping the package body. Frontmatter wins.
|
|
98
|
+
- **Body override** — full replace. Drop a same-named file under
|
|
99
|
+
`agents/personas/<id>.md`; the package version is shadowed.
|
|
100
|
+
|
|
101
|
+
See [`override-management`](../.agent-src/skills/override-management/SKILL.md)
|
|
102
|
+
for the mechanics.
|
|
103
|
+
|
|
104
|
+
## Anti-patterns
|
|
105
|
+
|
|
106
|
+
- **Personas as agents.** Personas are lenses, not sub-agents. They do
|
|
107
|
+
not spawn processes or run tools independently.
|
|
108
|
+
- **Personas as modes.** They do not change the host's contract or
|
|
109
|
+
refuse work. Use `/mode` for that.
|
|
110
|
+
- **Specialist sprawl.** Cap is "≤ 4 specialists per plate" by the
|
|
111
|
+
council A-OQ2 verdict. New specialists need ≥ 1 skill citation
|
|
112
|
+
before merging.
|
|
113
|
+
- **Core-tier mutation.** Core personas are versioned (`version` in
|
|
114
|
+
frontmatter); breaking changes need a new ID, not an in-place
|
|
115
|
+
rewrite.
|
package/package.json
CHANGED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""One-shot back-fill: inject `domain:` frontmatter into every SKILL.md.
|
|
3
|
+
|
|
4
|
+
Removed after B3 lands. Source-of-truth = SKILL_DOMAIN_MAP below.
|
|
5
|
+
Fails loudly if the map and on-disk skill set diverge.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
import re
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
SKILL_DOMAIN_MAP: dict[str, str] = {
|
|
13
|
+
"adr-create": "process", "adversarial-review": "quality",
|
|
14
|
+
"agent-docs-writing": "process", "agents-md-thin-root": "process",
|
|
15
|
+
"ai-council": "process", "analysis-autonomous-mode": "discovery",
|
|
16
|
+
"analysis-skill-router": "discovery", "api-design": "engineering",
|
|
17
|
+
"api-endpoint": "engineering", "api-testing": "quality",
|
|
18
|
+
"artisan-commands": "engineering", "async-python-patterns": "engineering",
|
|
19
|
+
"authz-review": "quality", "aws-infrastructure": "devops",
|
|
20
|
+
"blade-ui": "engineering", "blast-radius-analyzer": "discovery",
|
|
21
|
+
"bug-analyzer": "discovery", "check-refs": "process",
|
|
22
|
+
"code-refactoring": "engineering", "code-review": "quality",
|
|
23
|
+
"command-routing": "process", "command-writing": "process",
|
|
24
|
+
"composer-packages": "engineering", "context-authoring": "process",
|
|
25
|
+
"context-document": "process", "conventional-commits-writing": "process",
|
|
26
|
+
"copilot-agents-optimization": "process", "copilot-config": "process",
|
|
27
|
+
"dashboard-design": "devops", "data-flow-mapper": "discovery",
|
|
28
|
+
"database": "engineering", "dcf-modeling": "product",
|
|
29
|
+
"deep-reading-analyst": "discovery", "defense-in-depth": "quality",
|
|
30
|
+
"dependency-upgrade": "engineering", "description-assist": "process",
|
|
31
|
+
"design-review": "quality", "devcontainer": "devops",
|
|
32
|
+
"developer-like-execution": "process", "docker": "devops",
|
|
33
|
+
"dto-creator": "engineering", "eloquent": "engineering",
|
|
34
|
+
"error-handling-patterns": "engineering", "estimate-ticket": "product",
|
|
35
|
+
"existing-ui-audit": "discovery", "fe-design": "engineering",
|
|
36
|
+
"feature-planning": "product", "file-editor": "process",
|
|
37
|
+
"finishing-a-development-branch": "process", "flux": "engineering",
|
|
38
|
+
"funnel-analysis": "product", "git-workflow": "process",
|
|
39
|
+
"github-ci": "devops", "grafana": "devops",
|
|
40
|
+
"guideline-writing": "process", "jira-integration": "process",
|
|
41
|
+
"jobs-events": "engineering", "judge-bug-hunter": "quality",
|
|
42
|
+
"judge-code-quality": "quality", "judge-security-auditor": "quality",
|
|
43
|
+
"judge-test-coverage": "quality", "laravel": "engineering",
|
|
44
|
+
"laravel-horizon": "engineering", "laravel-mail": "engineering",
|
|
45
|
+
"laravel-middleware": "engineering", "laravel-notifications": "engineering",
|
|
46
|
+
"laravel-pennant": "engineering", "laravel-pulse": "engineering",
|
|
47
|
+
"laravel-reverb": "engineering", "laravel-scheduling": "engineering",
|
|
48
|
+
"laravel-validation": "engineering", "learning-to-rule-or-skill": "process",
|
|
49
|
+
"lint-skills": "process", "livewire": "engineering",
|
|
50
|
+
"logging-monitoring": "devops", "markitdown": "process",
|
|
51
|
+
"mcp": "process", "mcp-builder": "process",
|
|
52
|
+
"md-language-check": "process", "merge-conflicts": "process",
|
|
53
|
+
"migration-creator": "engineering", "mobile-e2e-strategy": "quality",
|
|
54
|
+
"module-management": "process", "multi-tenancy": "engineering",
|
|
55
|
+
"okr-tree-modeling": "product", "openapi": "engineering",
|
|
56
|
+
"override-management": "process", "performance": "engineering",
|
|
57
|
+
"performance-analysis": "discovery", "persona-writing": "process",
|
|
58
|
+
"pest-testing": "quality", "php-coder": "engineering",
|
|
59
|
+
"php-debugging": "engineering", "php-service": "engineering",
|
|
60
|
+
"playwright-testing": "quality", "project-analysis-core": "discovery",
|
|
61
|
+
"project-analysis-hypothesis-driven": "discovery",
|
|
62
|
+
"project-analysis-laravel": "discovery", "project-analysis-nextjs": "discovery",
|
|
63
|
+
"project-analysis-node-express": "discovery",
|
|
64
|
+
"project-analysis-react": "discovery", "project-analysis-symfony": "discovery",
|
|
65
|
+
"project-analysis-zend-laminas": "discovery", "project-analyzer": "discovery",
|
|
66
|
+
"project-docs": "process", "prompt-engineering-patterns": "product",
|
|
67
|
+
"prompt-optimizer": "product", "quality-tools": "quality",
|
|
68
|
+
"react-native-setup": "devops", "react-shadcn-ui": "engineering",
|
|
69
|
+
"readme-reviewer": "quality", "readme-writing": "process",
|
|
70
|
+
"readme-writing-package": "process", "receiving-code-review": "process",
|
|
71
|
+
"refine-prompt": "product", "refine-ticket": "product",
|
|
72
|
+
"repomix-packer": "process", "requesting-code-review": "process",
|
|
73
|
+
"review-routing": "quality", "rice-prioritization": "product",
|
|
74
|
+
"roadmap-management": "process", "roadmap-writing": "process",
|
|
75
|
+
"rtk-output-filtering": "process", "rule-writing": "process",
|
|
76
|
+
"script-writing": "process", "secrets-management": "devops",
|
|
77
|
+
"security": "quality", "security-audit": "quality",
|
|
78
|
+
"sentry-integration": "devops", "sequential-thinking": "process",
|
|
79
|
+
"skill-improvement-pipeline": "process", "skill-management": "process",
|
|
80
|
+
"skill-reviewer": "quality", "skill-writing": "process",
|
|
81
|
+
"sql-writing": "engineering", "subagent-orchestration": "process",
|
|
82
|
+
"systematic-debugging": "discovery", "technical-specification": "product",
|
|
83
|
+
"terraform": "devops", "terragrunt": "devops",
|
|
84
|
+
"test-driven-development": "quality", "test-performance": "quality",
|
|
85
|
+
"testing-anti-patterns": "quality", "threat-modeling": "quality",
|
|
86
|
+
"token-optimizer": "process", "traefik": "devops",
|
|
87
|
+
"unit-economics-modeling": "product", "universal-project-analysis": "discovery",
|
|
88
|
+
"upstream-contribute": "process", "using-git-worktrees": "process",
|
|
89
|
+
"validate-feature-fit": "quality", "verify-completion-evidence": "quality",
|
|
90
|
+
"websocket": "engineering",
|
|
91
|
+
}
|
|
92
|
+
VALID_DOMAINS = {"engineering", "product", "quality", "devops", "process", "discovery"}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def main() -> int:
|
|
96
|
+
# Default: source-of-truth tree. Pass --target=compressed to mirror into .agent-src/.
|
|
97
|
+
target = ".agent-src.uncompressed/skills"
|
|
98
|
+
for arg in sys.argv[1:]:
|
|
99
|
+
if arg == "--target=compressed":
|
|
100
|
+
target = ".agent-src/skills"
|
|
101
|
+
skills_root = Path(target)
|
|
102
|
+
on_disk = sorted(p.name for p in skills_root.iterdir() if p.is_dir())
|
|
103
|
+
in_map = sorted(SKILL_DOMAIN_MAP.keys())
|
|
104
|
+
missing = set(on_disk) - set(in_map)
|
|
105
|
+
extra = set(in_map) - set(on_disk)
|
|
106
|
+
if missing or extra:
|
|
107
|
+
print(f"DRIFT: missing={sorted(missing)} extra={sorted(extra)}", file=sys.stderr)
|
|
108
|
+
return 2
|
|
109
|
+
bad = {k: v for k, v in SKILL_DOMAIN_MAP.items() if v not in VALID_DOMAINS}
|
|
110
|
+
if bad:
|
|
111
|
+
print(f"INVALID DOMAIN VALUES: {bad}", file=sys.stderr)
|
|
112
|
+
return 2
|
|
113
|
+
|
|
114
|
+
fm_pat = re.compile(r"^(---\n)(.*?)(\n---\n)", re.DOTALL)
|
|
115
|
+
domain_line_pat = re.compile(r"^domain:[ \t]*[A-Za-z]+[ \t]*$", re.MULTILINE)
|
|
116
|
+
source_line_pat = re.compile(r"^(source:[ \t]*\S+)$", re.MULTILINE)
|
|
117
|
+
edited = 0
|
|
118
|
+
for slug, domain in SKILL_DOMAIN_MAP.items():
|
|
119
|
+
skill_md = skills_root / slug / "SKILL.md"
|
|
120
|
+
text = skill_md.read_text()
|
|
121
|
+
m = fm_pat.match(text)
|
|
122
|
+
if not m:
|
|
123
|
+
print(f"NO FRONTMATTER: {skill_md}", file=sys.stderr)
|
|
124
|
+
return 2
|
|
125
|
+
fm_body = m.group(2)
|
|
126
|
+
if domain_line_pat.search(fm_body):
|
|
127
|
+
new_fm = domain_line_pat.sub(f"domain: {domain}", fm_body)
|
|
128
|
+
elif source_line_pat.search(fm_body):
|
|
129
|
+
new_fm = source_line_pat.sub(rf"\1\ndomain: {domain}", fm_body)
|
|
130
|
+
else:
|
|
131
|
+
new_fm = fm_body.rstrip("\n") + f"\ndomain: {domain}"
|
|
132
|
+
if new_fm != fm_body:
|
|
133
|
+
skill_md.write_text(m.group(1) + new_fm + m.group(3) + text[m.end():])
|
|
134
|
+
edited += 1
|
|
135
|
+
print(f"Back-filled {edited}/{len(SKILL_DOMAIN_MAP)} skills")
|
|
136
|
+
return 0
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
if __name__ == "__main__":
|
|
140
|
+
sys.exit(main())
|