@event4u/agent-config 9.2.0 → 9.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +111 -0
- package/CONTRIBUTING.md +14 -0
- package/README.md +12 -4
- package/dist/agent-src/commands/contribution-precheck.md +100 -0
- package/dist/agent-src/commands/fix/route.md +49 -0
- package/dist/agent-src/commands/fix.md +4 -2
- package/dist/agent-src/commands/tdd/green.md +32 -0
- package/dist/agent-src/commands/tdd/red.md +33 -0
- package/dist/agent-src/commands/tdd/refactor.md +31 -0
- package/dist/agent-src/commands/tdd.md +50 -0
- package/dist/agent-src/commands/team.md +4 -0
- package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +81 -2
- package/dist/agent-src/contexts/model-recommendations.md +6 -0
- package/dist/agent-src/rules/architecture.md +7 -0
- package/dist/agent-src/rules/token-efficiency.md +7 -0
- package/dist/agent-src/skills/adversarial-review/SKILL.md +5 -0
- package/dist/agent-src/skills/ai-council/SKILL.md +3 -0
- package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -0
- package/dist/agent-src/skills/decision-record/SKILL.md +35 -1
- package/dist/agent-src/skills/decision-record/evals/triggers.json +82 -12
- package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +119 -0
- package/dist/agent-src/skills/evaluate-llm-feature/SKILL.md +142 -0
- package/dist/agent-src/skills/fe-design/SKILL.md +1 -0
- package/dist/agent-src/skills/judge-code-quality/SKILL.md +1 -0
- package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -0
- package/dist/agent-src/skills/learning-tutor/SKILL.md +215 -0
- package/dist/agent-src/skills/persona-improvement/SKILL.md +81 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +10 -0
- package/dist/agent-src/skills/rice-prioritization/SKILL.md +1 -0
- package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -1
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +14 -24
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +253 -30
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +19 -10
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +15 -6
- package/dist/mcp/registry-manifest.json +3 -3
- package/docs/CLAIMS.md +16 -2
- package/docs/announcements/2026-07-honest-cost-sweep-launch.md +84 -0
- package/docs/anti-reskin-gate.md +60 -0
- package/docs/architecture.md +3 -3
- package/docs/catalog.md +303 -278
- package/docs/command-flows.md +10 -3
- package/docs/comparison.yaml +10 -0
- package/docs/contracts/adoption-signal-floor.md +17 -0
- package/docs/contracts/ai-council-config.md +25 -0
- package/docs/contracts/command-clusters.md +2 -1
- package/docs/contracts/mcp-tool-inventory.md +25 -22
- package/docs/contracts/tier-3-contrib-plugin.md +12 -4
- package/docs/decisions/ADR-122-adversarial-verification-council.md +1 -1
- package/docs/development.md +10 -1
- package/docs/featured-skills.md +2 -2
- package/docs/getting-started-by-role.md +1 -1
- package/docs/getting-started.md +1 -1
- package/docs/governance-advantage.md +1 -1
- package/docs/guidelines/component-oriented-and-oop-development.md +181 -0
- package/docs/proof.md +10 -6
- package/docs/self-review-gate.md +14 -0
- package/docs/setup/per-ide/antigravity.md +8 -3
- package/docs/us-vs-the-category.md +38 -0
- package/docs/wedge/production-validator/README.md +24 -0
- package/docs/wedge/production-validator/first-run-check.sh +42 -0
- package/package.json +3 -2
- package/src/scripts/_lib/catalog_score.ts +64 -0
- package/src/scripts/_lib/shingle_similarity.ts +146 -0
- package/src/scripts/ai_council/clients.ts +50 -1
- package/src/scripts/ai_council/config.ts +28 -3
- package/src/scripts/ai_council/low_impact.ts +16 -0
- package/src/scripts/ai_council/necessity.ts +11 -0
- package/src/scripts/ai_council/orchestrator.ts +78 -26
- package/src/scripts/ai_council/pricing.ts +59 -0
- package/src/scripts/ai_council/prompts.ts +7 -0
- package/src/scripts/ai_council/stance_tally.ts +42 -5
- package/src/scripts/build_catalog_index.ts +188 -0
- package/src/scripts/council_cli.ts +56 -1
- package/src/scripts/generate_index.ts +6 -3
- package/src/scripts/hook_manifest.yaml +17 -6
- package/src/scripts/install-hooks.sh +32 -17
- package/src/scripts/lint_originality.ts +464 -0
- package/src/scripts/mcp_server/catalog_tools.ts +114 -0
- package/src/scripts/mcp_server/consumer_tool_catalog.json +46 -0
- package/src/scripts/pr_url_reminder_hook.ts +177 -0
- package/src/scripts/schemas/flow.schema.json +17 -0
- package/src/scripts/schemas/skill.schema.json +166 -32
- package/src/scripts/self_review_gate.test.ts +48 -0
- package/src/scripts/self_review_gate.ts +73 -5
- package/src/scripts/validate_flow_teams.ts +127 -0
package/docs/command-flows.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
> Every command is classified in `src/flows/surface-map.yaml` (coverage enforced by `scripts/lint_command_flow_coverage.py`). The four user-work flows carry rich definitions in `src/flows/<flow>.yaml`.
|
|
9
9
|
|
|
10
|
-
**
|
|
10
|
+
**190 commands** across **10 surfaces** (4 user-work flows + 6 platform/domain surfaces).
|
|
11
11
|
|
|
12
12
|
## User-work flows
|
|
13
13
|
|
|
@@ -56,6 +56,10 @@ _Build it. The core "make the change" front — drive a prompt, ticket, or featu
|
|
|
56
56
|
- `jira-ticket` — Read Jira ticket from branch name, analyze linked Sentry issues, implement feature or fix bug
|
|
57
57
|
- `mission-upgrade` — Gated Laravel major-version upgrade mission — provisional branch, breaking-change catalog, size-tier surfac…
|
|
58
58
|
- `module-create` — Create a new module from .module-template with interactive setup
|
|
59
|
+
- `tdd` — TDD orchestrator — routes to red (failing test), green (minimum code), refactor (clean while green)
|
|
60
|
+
- `tdd-green` — TDD green phase — write the minimum production code to make the failing test pass; no test edits
|
|
61
|
+
- `tdd-red` — TDD red phase — enumerate cases, write ONE failing test, watch it fail at an assertion (not an import error)
|
|
62
|
+
- `tdd-refactor` — TDD refactor phase — clean up (rename, deduplicate) while keeping the test green
|
|
59
63
|
- `tests` — Tests orchestrator — routes to create, execute, e2e-plan, e2e-heal
|
|
60
64
|
- `tests-create` — Write meaningful tests for the current branch — stack-adaptive (pest / phpunit / vitest / jest / pytest / …)
|
|
61
65
|
- `tests-e2e-heal` — Find, debug, and fix failing Playwright E2E tests
|
|
@@ -79,6 +83,7 @@ _Check it. Self-review, judge, fix/quality, and threat-model a change before it
|
|
|
79
83
|
|
|
80
84
|
- `fix-ci` — Fetch CI errors from GitHub Actions and fix them
|
|
81
85
|
- `fix-quality` — Run quality pipeline (PHP and/or JS/TS) and fix all errors — auto-detects language from changed files
|
|
86
|
+
- `fix-route` — Classify a vaguely-described problem and dispatch to the right fix sub-command (or name the specialist skil…
|
|
82
87
|
- `judge` — Judge orchestrator — routes to solo, steps, on-diff
|
|
83
88
|
- `judge-on-diff` — Run a single change through an implementer→judge loop with a two-revision ceiling, then hand back to the user
|
|
84
89
|
- `judge-solo` — Run a standalone judge on an existing diff or code change — no implementer, no revision loop, verdict only
|
|
@@ -135,11 +140,11 @@ _Deliberately-started features — not daily flow members, never buried as skill
|
|
|
135
140
|
- `roadmap-process-full` — Autonomously process every open step across every phase of a roadmap until the file is fully closed. Larges…
|
|
136
141
|
- `roadmap-process-phase` — Autonomously process every open step in the next or current phase of a roadmap, then stop. Default executio…
|
|
137
142
|
- `roadmap-process-step` — Autonomously process the single next open step of a roadmap and stop. Smallest execution scope of the /road…
|
|
138
|
-
- `team` — Team orchestrator — cross-model
|
|
143
|
+
- `team` — Team orchestrator — governed cross-model access layer (a second strong model reviews the real diff; read-on…
|
|
139
144
|
- `team-adversarial` — Thin wrapper — adversarial cross-model review on a named focus via the official plugin (/codex:adversarial-…
|
|
140
145
|
- `team-delegate` — Thin wrapper — hand a task to the second model as a native worker via the official plugin (/codex:rescue).…
|
|
141
146
|
- `team-review` — Thin wrapper — cross-model review of the current diff via the official plugin (/codex:review). Gated on ai_…
|
|
142
|
-
- `team-status` — Thin wrapper — plugin job status via /codex:status plus a
|
|
147
|
+
- `team-status` — Thin wrapper — plugin job status via /codex:status plus a quota block (shared openai counter vs team + coun…
|
|
143
148
|
|
|
144
149
|
### Platform surface — `agent-admin`
|
|
145
150
|
|
|
@@ -165,9 +170,11 @@ _The system/admin surface (NOT a flow): memory · analytics · governance · con
|
|
|
165
170
|
- `context` — Context orchestrator — routes to create, refactor
|
|
166
171
|
- `context-create` — Analyze a codebase area and create a structured context document
|
|
167
172
|
- `context-refactor` — Analyze, update, and extend an existing context document
|
|
173
|
+
- `contribution-precheck` — Contributor self-service precheck — run the PR-relevant lint subset (skill linter, originality gate, frontm…
|
|
168
174
|
- `cost` — Cost orchestrator — routes to report (session token cost + budget ladder) and profile (change the rule_load…
|
|
169
175
|
- `cost-profile` — Change the rule_loading_tier in .agent-settings.yml — shows each profile's meaning and applies the selection
|
|
170
176
|
- `cost-report` — Capture token cost from the active Claude Code session, append to the local sessions store, and surface the…
|
|
177
|
+
- `explain-run` — Read-only 'why did that happen' run report — resolved rule set, rules fired, artefact engagement, subagent…
|
|
171
178
|
- `knowledge` — Knowledge orchestrator — routes to ingest, list, forget. Local-only file ingestion into the agent memory na…
|
|
172
179
|
- `knowledge-cross-repo` — Targeted, read-only retrieval over opted-in linked-project siblings (ADR-032 Option A). Pulls a shared type…
|
|
173
180
|
- `knowledge-forget` — Drop a knowledge ingest from `agents/memory/knowledge/` by id prefix. Atomic, no partial state. Pinning pro…
|
package/docs/comparison.yaml
CHANGED
|
@@ -33,3 +33,13 @@ rows:
|
|
|
33
33
|
our_evidence: "tests/scripts/witness/check_refs_relative_gap.test.ts"
|
|
34
34
|
their_evidence: "Published known-limitation surfaces backed by reproducing tests are not a standard artifact in this category."
|
|
35
35
|
checkable: true
|
|
36
|
+
|
|
37
|
+
- claim: "A 30-second single-file wedge exists — one read-only subagent, one command, verdict with file:line — and its promise is a scoped, published eval, not a feature list."
|
|
38
|
+
our_evidence: "internal/bench/orchestration/pv-a3-results.md#token_delta_provenance: measured"
|
|
39
|
+
their_evidence: "Category entry points typically install the full platform (profiles, packs, runtime) before the first felt win; single-artifact entries with a published eval behind the promise are not a standard artifact."
|
|
40
|
+
checkable: true
|
|
41
|
+
|
|
42
|
+
- claim: "The persona-identity question was tested and published as an honest null (identity swap ~zero effect, provider choice ~15x larger) instead of being shipped as theater."
|
|
43
|
+
our_evidence: "internal/bench/reports/persona-placebo.json#honest-null"
|
|
44
|
+
their_evidence: "Named-persona prompts are shipped as a feature across the category without a published A/B separating identity from method."
|
|
45
|
+
checkable: true
|
|
@@ -84,6 +84,23 @@ must clear before the code lands:
|
|
|
84
84
|
Until all four gates are written and reviewed, consumer-side
|
|
85
85
|
telemetry is **forbidden** even as a discussion item in roadmaps.
|
|
86
86
|
|
|
87
|
+
## Extraction demand gate — lint_originality standalone probe
|
|
88
|
+
|
|
89
|
+
Added 2026-07-20 (road-to-originality-gate-and-contributor-funnel Phase 3,
|
|
90
|
+
council 2026-07-20: extraction is demand-gated; the floor IS the demand gate,
|
|
91
|
+
applied post-probe). Uses **allowed public signals only** — inbound GitHub
|
|
92
|
+
issues/PRs and their authors; no consumer telemetry, consistent with the Iron
|
|
93
|
+
Law above.
|
|
94
|
+
|
|
95
|
+
| Field | Value |
|
|
96
|
+
|---|---|
|
|
97
|
+
| **Probe surface** | [`docs/anti-reskin-gate.md`](../anti-reskin-gate.md) — run-from-clone recipe + signal instructions |
|
|
98
|
+
| **Signal definition** | A distinct external (non-maintainer) GitHub account opening an issue titled `anti-reskin gate: standalone request`, or referencing `lint_originality` in an inbound issue/PR about their own catalog |
|
|
99
|
+
| **Floor** | ≥ 3 distinct external signals |
|
|
100
|
+
| **Window** | 90 days from the probe page landing on `main` |
|
|
101
|
+
| **Floor met** | Extract `lint_originality` as a standalone zero-config npx package (`--changed` mode, no repo coupling, regression suite included); npm publish remains a maintainer decision (name, scope, moment) |
|
|
102
|
+
| **Floor missed** | Extraction **cancelled** — recorded via decision-record; not relitigated without new evidence |
|
|
103
|
+
|
|
87
104
|
## Re-audit cadence
|
|
88
105
|
|
|
89
106
|
Re-audit on each of:
|
|
@@ -679,6 +679,31 @@ regression breaks `task consistency`, never the live council.
|
|
|
679
679
|
`parse_corpus_strict` (Markdown). It runs **before** `task sync`
|
|
680
680
|
rebuilds the lockfile, so it must read whatever the user just edited.
|
|
681
681
|
|
|
682
|
+
## `model_downgrade` — auto-tiering + the A1↔A3 cache coupling
|
|
683
|
+
|
|
684
|
+
Since the A3 slice of `road-to-api-cost-optimization` (2026-07-20):
|
|
685
|
+
|
|
686
|
+
```yaml
|
|
687
|
+
model_downgrade:
|
|
688
|
+
enabled: true # default; false disables the size-fit gate entirely
|
|
689
|
+
auto_apply: true # DEFAULT since A3 — auto-downgrade is opt-OUT
|
|
690
|
+
model_tier_override: # per-run escape hatch: member -> pinned model id
|
|
691
|
+
anthropic: claude-sonnet-4-5
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
- Small / low-complexity artefacts (per `necessity.classify_size_fit`,
|
|
695
|
+
character-based) auto-downgrade one ladder rung; the `debate` lens never
|
|
696
|
+
downgrades.
|
|
697
|
+
- **Cache coupling:** a downgrade is applied only when the model saving beats
|
|
698
|
+
the forfeited model-scoped prompt-cache reads
|
|
699
|
+
(`pricing.downgrade_coupling`: `downgrade_savings > lost_cache_savings`,
|
|
700
|
+
expected reads = rounds − 1). One-shot paths (the low-impact fast-path)
|
|
701
|
+
have no reads to lose and downgrade to the CHEAPEST ladder rung outright.
|
|
702
|
+
- `model_tier_override` pins a member to a model for the run — classifier and
|
|
703
|
+
coupling both skipped. Set it per artefact when a specific tier is needed.
|
|
704
|
+
- Requires `model_ladder` on the member (smallest → largest, must include the
|
|
705
|
+
active `model`).
|
|
706
|
+
|
|
682
707
|
## `api_key_ref` forms
|
|
683
708
|
|
|
684
709
|
Exactly two forms. Raw keys in the yml are a hard validation error.
|
|
@@ -28,7 +28,7 @@ column 1 of this table.
|
|
|
28
28
|
|
|
29
29
|
| Cluster | Phase | Sub-commands | Replaces |
|
|
30
30
|
|---|:-:|---|---|
|
|
31
|
-
| `fix` | 1 | `ci` · `pr-comments` · `pr-bot-comments` · `pr-developer-comments` · `portability` · `refs` · `seeder` · `comments` · `quality` | `fix-ci` · `fix-pr-comments` · `fix-pr-bot-comments` · `fix-pr-developer-comments` · `fix-portability` · `fix-references` · `fix-seeder`; `comments` added 2026-06-22 — audits the **code comments** in the current branch's diff (simplify / shorten / remove), distinct from the PR-review-thread `pr-comments` sub; `quality` added 2026-07-08 — replaces `quality-fix` (slug reorder, `replaces:` alias) |
|
|
31
|
+
| `fix` | 1 | `ci` · `pr-comments` · `pr-bot-comments` · `pr-developer-comments` · `portability` · `refs` · `seeder` · `comments` · `quality` · `route` | `fix-ci` · `fix-pr-comments` · `fix-pr-bot-comments` · `fix-pr-developer-comments` · `fix-portability` · `fix-references` · `fix-seeder`; `comments` added 2026-06-22 — audits the **code comments** in the current branch's diff (simplify / shorten / remove), distinct from the PR-review-thread `pr-comments` sub; `quality` added 2026-07-08 — replaces `quality-fix` (slug reorder, `replaces:` alias); `route` added 2026-07-15 (ecosystem-harvest ergonomics U1) — the classify-and-dispatch entry (adapted from the source's `/smart-fix`; folded into the `fix` verb family to satisfy the ADR-041 controlled-verb vocabulary without a new verb) |
|
|
32
32
|
| `optimize` | 1 | `agents-dir` · `augmentignore` · `rtk` · `skills` · `project` · `prompt` | `optimize-augmentignore` · `optimize-rtk-filters` · `optimize-skills` · former `/optimize agents` and `/optimize agents-md` moved to the `/agents` file-family cluster 2026-05-09; `/agents prepare/audit/cleanup` collapsed into the single `/optimize agents-dir` (flags or wizard) per the agent-doc consolidation; `project` (slug-neutral nest of `optimize-project`, pack move engineering-base → meta) + `prompt` (slug-neutral nest of `optimize-prompt`) added 2026-07-08 — the head now spans agent-layer / project-wide / prompt scopes with a disambiguating menu |
|
|
33
33
|
| `feature` | 1 | `explore` · `plan` · `refactor` · `roadmap` · `dev` | `feature-explore` · `feature-plan` · `feature-refactor` · `feature-roadmap` · `feature-dev` |
|
|
34
34
|
| `chat-history` | 2 | `show` · `import` · `learn` | `chat-history` (legacy status) — `resume` / `clear` / `checkpoint` removed in `road-to-chat-history-hook-only` (auto-adopt + structural hooks); `import` (verbatim cross-session render) and `learn` (project-improving learning extraction) added in the v4 stateless schema |
|
|
@@ -37,6 +37,7 @@ column 1 of this table.
|
|
|
37
37
|
| `roadmap` | 2 | `create` · `ai-council` · `process-step` · `process-phase` · `process-full` | `roadmap-create` · `roadmap-execute` (replaced — autonomous, no per-step gate; `process-phase` is the default execution scope); `ai-council` added 2026-05-07 — wraps `/council default` with `--input-mode roadmap --depth deep` |
|
|
38
38
|
| `module` | 2 | `create` · `explore` | `module-create` · `module-explore` |
|
|
39
39
|
| `tests` | 2 | `create` · `execute` · `e2e-plan` · `e2e-heal` | `tests-create` · `tests-execute`; `e2e-plan` / `e2e-heal` added 2026-07-08 — replace the flat `e2e-plan` / `e2e-heal` (slug reorders, `replaces:` aliases; composite sub-names per ADR-003 §2) |
|
|
40
|
+
| `tdd` | 2 | `red` · `green` · `refactor` | new cluster 2026-07-15 (ecosystem-harvest ergonomics U2) — thin per-phase ergonomic split over the `test-driven-development` skill; each sub drives one TDD phase, no logic duplication. Internal visibility. Bare `/tdd` shows the menu. |
|
|
40
41
|
| `context` | 2 | `create` · `refactor` | `context-create` · `context-refactor` |
|
|
41
42
|
| `override` | 2 | `create` · `manage` | `override-create` · `override-manage` |
|
|
42
43
|
| `judge` | 2 | `solo` · `on-diff` · `steps` | `judge` (legacy standalone) · `do-and-judge` · `do-in-steps` |
|
|
@@ -14,22 +14,22 @@ keep-beta-until: 2026-08-14
|
|
|
14
14
|
|
|
15
15
|
## Summary
|
|
16
16
|
|
|
17
|
-
- **Total tools:**
|
|
17
|
+
- **Total tools:** 31
|
|
18
18
|
- **By transport:** stdio=19
|
|
19
|
-
- **By side-effect:** fs-write=8, ro=
|
|
20
|
-
- **Discovery-only stubs (no implementation):**
|
|
19
|
+
- **By side-effect:** fs-write=8, ro=20, shell=3
|
|
20
|
+
- **Discovery-only stubs (no implementation):** 12
|
|
21
21
|
|
|
22
22
|
## Tools
|
|
23
23
|
|
|
24
24
|
| Tool | Side-effect | Transports | Catalog | Handler |
|
|
25
25
|
|---|---|---|---|---|
|
|
26
|
-
| `lint_skills` | `ro` | stdio | [`consumer_tool_catalog.json:7`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L7) | [`tools.ts:
|
|
27
|
-
| `chat_history_append` | `fs-write` | stdio | [`consumer_tool_catalog.json:24`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L24) | [`tools.ts:
|
|
28
|
-
| `chat_history_read` | `ro` | stdio | [`consumer_tool_catalog.json:43`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L43) | [`tools.ts:
|
|
29
|
-
| `memory_lookup` | `ro` | stdio | [`consumer_tool_catalog.json:63`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L63) | [`tools.ts:
|
|
30
|
-
| `memory_get` | `ro` | stdio | [`consumer_tool_catalog.json:81`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L81) | [`tools.ts:
|
|
31
|
-
| `memory_signal` | `fs-write` | stdio | [`consumer_tool_catalog.json:95`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L95) | [`tools.ts:
|
|
32
|
-
| `memory_status` | `ro` | stdio | [`consumer_tool_catalog.json:111`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L111) | [`tools.ts:
|
|
26
|
+
| `lint_skills` | `ro` | stdio | [`consumer_tool_catalog.json:7`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L7) | [`tools.ts:1198`](../../src/scripts/mcp_server/tools.ts#L1198) |
|
|
27
|
+
| `chat_history_append` | `fs-write` | stdio | [`consumer_tool_catalog.json:24`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L24) | [`tools.ts:1226`](../../src/scripts/mcp_server/tools.ts#L1226) |
|
|
28
|
+
| `chat_history_read` | `ro` | stdio | [`consumer_tool_catalog.json:43`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L43) | [`tools.ts:1287`](../../src/scripts/mcp_server/tools.ts#L1287) |
|
|
29
|
+
| `memory_lookup` | `ro` | stdio | [`consumer_tool_catalog.json:63`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L63) | [`tools.ts:1363`](../../src/scripts/mcp_server/tools.ts#L1363) |
|
|
30
|
+
| `memory_get` | `ro` | stdio | [`consumer_tool_catalog.json:81`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L81) | [`tools.ts:1430`](../../src/scripts/mcp_server/tools.ts#L1430) |
|
|
31
|
+
| `memory_signal` | `fs-write` | stdio | [`consumer_tool_catalog.json:95`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L95) | [`tools.ts:1539`](../../src/scripts/mcp_server/tools.ts#L1539) |
|
|
32
|
+
| `memory_status` | `ro` | stdio | [`consumer_tool_catalog.json:111`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L111) | [`tools.ts:1454`](../../src/scripts/mcp_server/tools.ts#L1454) |
|
|
33
33
|
| `skill_trigger_eval` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:118`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L118) | _stub-only_ |
|
|
34
34
|
| `suggest_command` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:134`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L134) | _stub-only_ |
|
|
35
35
|
| `suggest_skill_for_task` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:149`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L149) | _stub-only_ |
|
|
@@ -37,20 +37,23 @@ keep-beta-until: 2026-08-14
|
|
|
37
37
|
| `update_form_request_messages` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:178`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L178) | _stub-only_ |
|
|
38
38
|
| `sync_gitignore` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:193`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L193) | _stub-only_ |
|
|
39
39
|
| `sync_agent_settings` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:206`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L206) | _stub-only_ |
|
|
40
|
-
| `run_tests` | `shell` | stdio | [`consumer_tool_catalog.json:220`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L220) | [`tools.ts:
|
|
40
|
+
| `run_tests` | `shell` | stdio | [`consumer_tool_catalog.json:220`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L220) | [`tools.ts:1714`](../../src/scripts/mcp_server/tools.ts#L1714) |
|
|
41
41
|
| `run_quality_checks` | `shell` | _(stub)_ | [`consumer_tool_catalog.json:234`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L234) | _stub-only_ |
|
|
42
|
-
| `list_skills` | `ro` | stdio | [`consumer_tool_catalog.json:247`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L247) | [`tools.ts:
|
|
43
|
-
| `list_commands` | `ro` | stdio | [`consumer_tool_catalog.json:254`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L254) | [`tools.ts:
|
|
44
|
-
| `list_rules` | `ro` | stdio | [`consumer_tool_catalog.json:261`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L261) | [`tools.ts:
|
|
42
|
+
| `list_skills` | `ro` | stdio | [`consumer_tool_catalog.json:247`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L247) | [`tools.ts:1468`](../../src/scripts/mcp_server/tools.ts#L1468) |
|
|
43
|
+
| `list_commands` | `ro` | stdio | [`consumer_tool_catalog.json:254`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L254) | [`tools.ts:1483`](../../src/scripts/mcp_server/tools.ts#L1483) |
|
|
44
|
+
| `list_rules` | `ro` | stdio | [`consumer_tool_catalog.json:261`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L261) | [`tools.ts:1498`](../../src/scripts/mcp_server/tools.ts#L1498) |
|
|
45
45
|
| `compile_router` | `shell` | _(stub)_ | [`consumer_tool_catalog.json:268`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L268) | _stub-only_ |
|
|
46
|
-
| `read_resource_body` | `ro` | stdio | [`consumer_tool_catalog.json:281`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L281) | [`tools.ts:
|
|
47
|
-
| `roadmap_progress` | `fs-write` | stdio | [`consumer_tool_catalog.json:295`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L295) | [`tools.ts:
|
|
48
|
-
| `roadmap_archive` | `fs-write` | stdio | [`consumer_tool_catalog.json:308`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L308) | [`tools.ts:
|
|
49
|
-
| `capabilities_index` | `fs-write` | stdio | [`consumer_tool_catalog.json:315`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L315) | [`tools.ts:
|
|
50
|
-
| `doctor_report` | `ro` | stdio | [`consumer_tool_catalog.json:328`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L328) | [`tools.ts:
|
|
51
|
-
| `conformance_check` | `ro` | stdio | [`consumer_tool_catalog.json:335`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L335) | [`tools.ts:
|
|
52
|
-
| `telemetry_report` | `ro` | stdio | [`consumer_tool_catalog.json:342`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L342) | [`tools.ts:
|
|
53
|
-
| `
|
|
46
|
+
| `read_resource_body` | `ro` | stdio | [`consumer_tool_catalog.json:281`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L281) | [`tools.ts:1514`](../../src/scripts/mcp_server/tools.ts#L1514) |
|
|
47
|
+
| `roadmap_progress` | `fs-write` | stdio | [`consumer_tool_catalog.json:295`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L295) | [`tools.ts:1573`](../../src/scripts/mcp_server/tools.ts#L1573) |
|
|
48
|
+
| `roadmap_archive` | `fs-write` | stdio | [`consumer_tool_catalog.json:308`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L308) | [`tools.ts:1596`](../../src/scripts/mcp_server/tools.ts#L1596) |
|
|
49
|
+
| `capabilities_index` | `fs-write` | stdio | [`consumer_tool_catalog.json:315`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L315) | [`tools.ts:1612`](../../src/scripts/mcp_server/tools.ts#L1612) |
|
|
50
|
+
| `doctor_report` | `ro` | stdio | [`consumer_tool_catalog.json:328`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L328) | [`tools.ts:1635`](../../src/scripts/mcp_server/tools.ts#L1635) |
|
|
51
|
+
| `conformance_check` | `ro` | stdio | [`consumer_tool_catalog.json:335`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L335) | [`tools.ts:1649`](../../src/scripts/mcp_server/tools.ts#L1649) |
|
|
52
|
+
| `telemetry_report` | `ro` | stdio | [`consumer_tool_catalog.json:342`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L342) | [`tools.ts:1663`](../../src/scripts/mcp_server/tools.ts#L1663) |
|
|
53
|
+
| `catalog_search` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:355`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L355) | _stub-only_ |
|
|
54
|
+
| `catalog_inspect` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:372`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L372) | _stub-only_ |
|
|
55
|
+
| `catalog_load` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:387`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L387) | _stub-only_ |
|
|
56
|
+
| `council_estimate` | `ro` | stdio | [`consumer_tool_catalog.json:401`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L401) | [`tools.ts:1685`](../../src/scripts/mcp_server/tools.ts#L1685) |
|
|
54
57
|
|
|
55
58
|
## Glossary
|
|
56
59
|
|
|
@@ -16,7 +16,7 @@ promotion path from Tier-3 → Tier-2, and the non-implementation
|
|
|
16
16
|
guarantee. Does **not** ship code: `agents/manifests/contrib/` is
|
|
17
17
|
unmanifested until a user asks for an entry by name.
|
|
18
18
|
|
|
19
|
-
Last refreshed: 2026-
|
|
19
|
+
Last refreshed: 2026-07-16.
|
|
20
20
|
|
|
21
21
|
## Tier definitions
|
|
22
22
|
|
|
@@ -35,8 +35,16 @@ Tier-3 is the explicit overflow bucket.
|
|
|
35
35
|
The following surfaces are Tier-3 candidates as of 2026-05-12. They
|
|
36
36
|
were surfaced during the
|
|
37
37
|
[`2026-05-12-installer-expansion`](../../agents/runtime/council/sessions/2026-05-12-installer-expansion/synthesis.md)
|
|
38
|
-
council round and
|
|
39
|
-
`USER_SCOPE_PATHS`, `SCOPE_SUPPORT
|
|
38
|
+
council round and had **no entries** in `_VALID_TOOLS`,
|
|
39
|
+
`USER_SCOPE_PATHS`, `SCOPE_SUPPORT` or the bash `VALID_TOOLS` set at
|
|
40
|
+
proposal time.
|
|
41
|
+
|
|
42
|
+
**Status update (2026-07-16):** the candidates below have since been
|
|
43
|
+
promoted to shipped hosts — each now has entries in `_VALID_TOOLS`,
|
|
44
|
+
`USER_SCOPE_PATHS` and `SCOPE_SUPPORT`, deployed as the universal
|
|
45
|
+
global skill bundle. The bullets are kept as the frozen proposal-time
|
|
46
|
+
record; their rationales describe the pre-promotion state and no
|
|
47
|
+
longer reflect current shipping status.
|
|
40
48
|
|
|
41
49
|
- `qoder` — community fork, no public adoption signal
|
|
42
50
|
- `trae` — ByteDance IDE, behind login wall
|
|
@@ -44,7 +52,7 @@ council round and have **no entries** in `_VALID_TOOLS`,
|
|
|
44
52
|
- `codebuddy` — Tencent-internal, no public install path
|
|
45
53
|
- `droid` — proposed CLI agent, alpha
|
|
46
54
|
- `warp` — terminal-with-AI; integration shape unclear (PTY vs file marker)
|
|
47
|
-
- `antigravity` — Google
|
|
55
|
+
- `antigravity` — Google's agentic IDE (public since 2026); shipped as a global bundle host (see status update above)
|
|
48
56
|
|
|
49
57
|
Inclusion in this list is **not** a commitment to ship. Promotion
|
|
50
58
|
requires a real user asking by name (issue, PR, council session, or
|
|
@@ -129,7 +129,7 @@ Each settled decision this roadmap does NOT touch:
|
|
|
129
129
|
|
|
130
130
|
## References
|
|
131
131
|
|
|
132
|
-
- `agents/roadmaps/road-to-adversarial-verification-council.md` — the roadmap.
|
|
132
|
+
- `agents/roadmaps/archive/road-to-adversarial-verification-council.md` — the roadmap.
|
|
133
133
|
- ADR-106 (recursive-verification honest-null), ADR-117 (subagents.auto flip),
|
|
134
134
|
ADR-120 (council chairman mode), ADR-109 (subagent-v1 contract).
|
|
135
135
|
- `docs/CLAIMS.md#adversarial-council-finding-coverage` — the pre-registered claim.
|
package/docs/development.md
CHANGED
|
@@ -112,9 +112,18 @@ task tool-validate # Validate tool declarations
|
|
|
112
112
|
|
|
113
113
|
```bash
|
|
114
114
|
task install -- --target <dir> # Run the installer orchestrator on a target
|
|
115
|
-
task install-hooks # Install git hooks (pre-commit marketplace lint, pre-push
|
|
115
|
+
task install-hooks # Install git hooks (pre-commit marketplace lint, pre-push consistency gate, chat-history bridges)
|
|
116
116
|
```
|
|
117
117
|
|
|
118
|
+
The **pre-push hook runs `task consistency`** — the exact local mirror of the CI
|
|
119
|
+
"Sync + Generate Tools Consistency" gate (sync + hashes + generate-tools +
|
|
120
|
+
router + corpus + `git diff --quiet`). Any derived-output drift (counts, dist,
|
|
121
|
+
generated tool trees) is blocked **before** the push instead of failing remote
|
|
122
|
+
CI; the fix is `task consistency-fix`, stage, re-push. The hook auto-installs on
|
|
123
|
+
`npm install` in a git clone (the `prepare` script); run `task install-hooks`
|
|
124
|
+
manually if you skipped install scripts. Bypass a genuine WIP push with
|
|
125
|
+
`git push --no-verify`.
|
|
126
|
+
|
|
118
127
|
### Local dev install (no release)
|
|
119
128
|
|
|
120
129
|
Use these tasks to run the working tree as if it were a published
|
package/docs/featured-skills.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Featured Skills
|
|
2
2
|
|
|
3
|
-
A curated subset of the
|
|
3
|
+
A curated subset of the 278 skills. Three tiers, one per primary audience. Full catalog lives in [`dist/agent-src/skills/`](../dist/agent-src/skills/); see also [`docs/catalog.md`](catalog.md) for the complete index and [`docs/featured-commands.md`](featured-commands.md) for command-level highlights.
|
|
4
4
|
|
|
5
5
|
> **Eval-gated messaging note.** Until `task bench --corpus non-dev` reports `selection_accuracy >= 0.60` (see `road-to-product-adoption.md` Phase 1), this page is documentation, not marketing. The entries below are the candidates the corpus tests against; their description quality is what the eval validates.
|
|
6
6
|
|
|
@@ -92,4 +92,4 @@ task lint-featured-skills
|
|
|
92
92
|
|
|
93
93
|
CI runs this in `taskfiles/ci-fast.yml`. Stale entries (renamed / removed skill or command) fail the build. See [`scripts/lint_featured_skills.py`](../src/scripts/lint_featured_skills.py) for the matcher.
|
|
94
94
|
|
|
95
|
-
→ Browse all
|
|
95
|
+
→ Browse all 278 skills: [`dist/agent-src/skills/`](../dist/agent-src/skills/) · all 190 commands: [`dist/agent-src/commands/`](../dist/agent-src/commands/)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Pick the entry that matches what you do day-to-day. Each section names the three skills you will reach for first and shows whether MCP (no terminal) or CLI (terminal) is the simpler install path for that role.
|
|
4
4
|
|
|
5
|
-
`agent-config` ships
|
|
5
|
+
`agent-config` ships 278 skills, 105 governed rules, and 190 commands. You do not need all of them. Each role below filters to the slice that pays back in week one; the rest stays available and shows up on demand when a task references it.
|
|
6
6
|
|
|
7
7
|
> **Taglines at a glance →** [`docs/role-experiences.md`](role-experiences.md) — the one-line pitch per role experience, in one table.
|
|
8
8
|
|
package/docs/getting-started.md
CHANGED
|
@@ -174,7 +174,7 @@ Your agent now understands slash commands:
|
|
|
174
174
|
| `/fix quality` | Run and fix all quality checks |
|
|
175
175
|
| `/chat-history import` | Pull a prior session into the current chat (resume) |
|
|
176
176
|
|
|
177
|
-
→ [Browse all
|
|
177
|
+
→ [Browse all 190 active commands](../dist/agent-src/commands/)
|
|
178
178
|
|
|
179
179
|
---
|
|
180
180
|
|
|
@@ -33,7 +33,7 @@ the host lacks (a static host gives it no runtime attention guarantee, but a
|
|
|
33
33
|
runtime-only system gives it nothing at all here). A runtime-only system contributes *nothing* on these hosts.
|
|
34
34
|
|
|
35
35
|
### 2. Intent routing, not a 500-artefact dump
|
|
36
|
-
A prompt does not load all
|
|
36
|
+
A prompt does not load all 278 skills. `dist/router.json` (101 routed rules, intent →
|
|
37
37
|
skill, keyword/phrase/path triggers) carries the right skill on intent. The
|
|
38
38
|
governance value is *selection discipline* — the host gets the relevant rule
|
|
39
39
|
set, not the whole catalogue as context ballast.
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Component-Oriented & Object-Oriented Development
|
|
2
|
+
|
|
3
|
+
> Cross-cutting development standard: **think in reusable units, and — in an
|
|
4
|
+
> object-oriented / class-based codebase — treat object-oriented design as a
|
|
5
|
+
> high-priority default where it reduces complexity.** Split by surface below
|
|
6
|
+
> (frontend / backend), each pointing to the stack-specific carve-outs rather
|
|
7
|
+
> than restating them. Framework-neutral by construction — React / Storybook /
|
|
8
|
+
> Laravel / Symfony specifics live in their own skills, never here.
|
|
9
|
+
|
|
10
|
+
## Paradigm-appropriate first — detect, then apply
|
|
11
|
+
|
|
12
|
+
**Reuse is universal; OOP is paradigm-scoped.** Detect the codebase's paradigm
|
|
13
|
+
before applying the object-oriented half: class-based / OO code (PHP, Java, C#,
|
|
14
|
+
typical TS/React service layers) → this standard's OOP guidance is the
|
|
15
|
+
high-priority default. A **functional / pipeline / actor-model** codebase
|
|
16
|
+
(Elixir/Phoenix, Clojure, Haskell, Go-idiomatic, heavy FP-in-TS) → apply *that*
|
|
17
|
+
paradigm's principles (immutability, pure functions, pattern-matching,
|
|
18
|
+
composition of functions), and read the OOP bullets as "the same rigor, its
|
|
19
|
+
paradigm's shape." **Never impose classes on functional code to satisfy this
|
|
20
|
+
standard** — consistency with the codebase's chosen paradigm wins over OOP
|
|
21
|
+
advocacy, always.
|
|
22
|
+
|
|
23
|
+
## The standard, in one breath
|
|
24
|
+
|
|
25
|
+
- **Reuse before you build** (every paradigm). Compose from units that already
|
|
26
|
+
exist — audit first, reuse the design system / shared abstractions, extract a
|
|
27
|
+
new unit only when the same shape repeats.
|
|
28
|
+
- **Object-oriented where it fits** (in an OO codebase). Encapsulation, single
|
|
29
|
+
responsibility, composition over inheritance, and behavior-rich objects are
|
|
30
|
+
the high-priority default *when they reduce complexity* — not a quota to hit,
|
|
31
|
+
and not imposed on a codebase that has chosen a different paradigm.
|
|
32
|
+
|
|
33
|
+
## The load-bearing caveat — reuse/OOP is a tool, never a mandate to abstract
|
|
34
|
+
|
|
35
|
+
This standard **never** authorizes speculative abstraction. It is bounded by the
|
|
36
|
+
package's restraint posture and defers to it on every conflict:
|
|
37
|
+
|
|
38
|
+
- [`minimal-safe-diff`](../../src/rules/minimal-safe-diff.md) (+ its
|
|
39
|
+
anti-over-engineering mechanics) — smallest change; no premature abstraction,
|
|
40
|
+
no speculative feature, no rewrite for taste.
|
|
41
|
+
- [`senior-engineering-discipline`](../../src/rules/senior-engineering-discipline.md)
|
|
42
|
+
— reuse the *existing* abstraction; generalize, don't overfit; never invent an
|
|
43
|
+
API to look object-oriented.
|
|
44
|
+
- [`improve-before-implement`](../../src/rules/improve-before-implement.md) —
|
|
45
|
+
"does it fit the existing architecture?" before adding structure.
|
|
46
|
+
- **When NOT to use a pattern** ([`php/patterns.md`](php/patterns.md) §) — KISS &
|
|
47
|
+
YAGNI trump pattern purity: no interface for a single implementation, no
|
|
48
|
+
pattern for a five-line function, no class where a function is clearer.
|
|
49
|
+
|
|
50
|
+
Rule of thumb: **two real repetitions (or a genuine second axis of change)
|
|
51
|
+
before you extract.** One occurrence is not a component; one branch is not a
|
|
52
|
+
Strategy. A reviewer should be able to name the concrete duplication or the
|
|
53
|
+
concrete change-axis the abstraction removes.
|
|
54
|
+
|
|
55
|
+
**Precedence (explicit): `minimal-safe-diff` / YAGNI always trump OOP
|
|
56
|
+
advocacy.** When "prefer OO shape" and "smallest change" conflict, the smallest
|
|
57
|
+
change wins — this standard adds a *consideration*, never a competing objective
|
|
58
|
+
that pressures preemptive abstraction. The review lens (below) may flag OO shape
|
|
59
|
+
only where the duplication or the growing branch is **already present in the
|
|
60
|
+
diff**, never as "this could grow later."
|
|
61
|
+
|
|
62
|
+
## Frontend — think in reusable components
|
|
63
|
+
|
|
64
|
+
Component-first is the default mindset, not an afterthought: decompose a screen
|
|
65
|
+
into composable units, reuse the project's primitives, and extract shared shells
|
|
66
|
+
when they repeat. Depth and mechanics already live in dedicated skills — consult
|
|
67
|
+
them, don't duplicate:
|
|
68
|
+
|
|
69
|
+
- [`fe-design`](../../src/skills/fe-design/SKILL.md) § Component Architecture —
|
|
70
|
+
the stack-agnostic "kind, not framework" taxonomy, granularity, extract-on-3+.
|
|
71
|
+
- [`ui-component-architect`](../../src/skills/ui-component-architect/SKILL.md) —
|
|
72
|
+
how to *shape* a reusable component: composition over inheritance, slot
|
|
73
|
+
contracts, prop-API caps, controlled/uncontrolled, the componentization
|
|
74
|
+
threshold (repeat **and** real state).
|
|
75
|
+
- [`existing-ui-audit`](../../src/skills/existing-ui-audit/SKILL.md) — the
|
|
76
|
+
reuse-before-invent gate: inventory existing components/tokens/primitives
|
|
77
|
+
first (enforced by [`ui-audit-gate`](../../src/rules/ui-audit-gate.md)).
|
|
78
|
+
- [`design-tokens`](../../src/skills/design-tokens/SKILL.md) /
|
|
79
|
+
[`design-system-capture`](../../src/skills/design-system-capture/SKILL.md) —
|
|
80
|
+
the shared token/design-system layer components draw from.
|
|
81
|
+
|
|
82
|
+
**Component workshop (Storybook et al.) — when the project is large enough.**
|
|
83
|
+
For a project with a real, growing shared-component library, isolating and
|
|
84
|
+
documenting each reusable component in a component workshop (Storybook or the
|
|
85
|
+
ecosystem equivalent) pays for itself — it makes components discoverable,
|
|
86
|
+
reviewable in isolation, and reused instead of re-invented. It is **not** worth
|
|
87
|
+
the setup for a small surface with a handful of one-off components. The
|
|
88
|
+
framework-specific setup is a carve-out, not a generic mandate — React /
|
|
89
|
+
Storybook specifics: [`react-shadcn-ui`](../../src/skills/react-shadcn-ui/SKILL.md)
|
|
90
|
+
§ Component workshop.
|
|
91
|
+
|
|
92
|
+
Framework carve-outs (never restated here): React →
|
|
93
|
+
[`react-shadcn-ui`](../../src/skills/react-shadcn-ui/SKILL.md); Next.js
|
|
94
|
+
server/client component boundary →
|
|
95
|
+
[`nextjs-patterns`](../../src/skills/nextjs-patterns/SKILL.md); Laravel FE →
|
|
96
|
+
[`blade-ui`](../../src/skills/blade-ui/SKILL.md) /
|
|
97
|
+
[`livewire`](../../src/skills/livewire/SKILL.md) /
|
|
98
|
+
[`flux`](../../src/skills/flux/SKILL.md); styling →
|
|
99
|
+
[`tailwind-engineer`](../../src/skills/tailwind-engineer/SKILL.md).
|
|
100
|
+
|
|
101
|
+
## Backend — object-oriented where it reduces complexity
|
|
102
|
+
|
|
103
|
+
The structural half — thin handlers, business logic in services / use-cases,
|
|
104
|
+
behavior-rich domain models, validation at the boundary — is owned by
|
|
105
|
+
[`architecture`](../../src/rules/architecture.md) and holds across paradigms. In
|
|
106
|
+
an **object-oriented / class-based** service layer, layer the OO principles below
|
|
107
|
+
on top of it, each applied only where it earns its place. In a **functional /
|
|
108
|
+
pipeline** codebase, apply that paradigm's equivalent (pure functions +
|
|
109
|
+
composition instead of behavior-rich objects; a dispatch map / pattern-match
|
|
110
|
+
instead of a Strategy class) — the goal (encapsulate change, one responsibility,
|
|
111
|
+
compose don't duplicate) is paradigm-independent; only its *shape* is OO here:
|
|
112
|
+
|
|
113
|
+
- **Encapsulation** — objects own their data + the behavior over it; no anemic
|
|
114
|
+
bags mutated from the outside.
|
|
115
|
+
- **Single responsibility** — one class, one reason to change; no god services.
|
|
116
|
+
- **Composition over inheritance** — inject collaborators; reach for a base
|
|
117
|
+
class only for genuine is-a substitutability, not code sharing.
|
|
118
|
+
- **Behavior-rich domain objects** — push rules into the model, keep services
|
|
119
|
+
orchestration-thin.
|
|
120
|
+
- **Patterns where they earn their place** — a Strategy when a branch on a
|
|
121
|
+
discriminator will grow (`if-else` chain → polymorphism); a Factory when
|
|
122
|
+
construction is non-trivial; DI on an abstraction when there is a *real*
|
|
123
|
+
second implementation. Not before.
|
|
124
|
+
|
|
125
|
+
Language / framework carve-outs (never restated here): PHP →
|
|
126
|
+
[`php-coding-patterns`](php/php-coding-patterns.md) +
|
|
127
|
+
[`patterns.md`](php/patterns.md) (+ `patterns/strategy.md`,
|
|
128
|
+
`patterns/dependency-injection.md`, `patterns/factory.md`, `patterns/service-layer.md`)
|
|
129
|
+
+ skills [`php-coder`](../../src/skills/php-coder/SKILL.md) /
|
|
130
|
+
[`php-service`](../../src/skills/php-service/SKILL.md); Laravel →
|
|
131
|
+
[`laravel`](../../src/skills/laravel/SKILL.md); Symfony →
|
|
132
|
+
[`symfony-workflow`](../../src/skills/symfony-workflow/SKILL.md); Next.js / TS →
|
|
133
|
+
[`nextjs-patterns`](../../src/skills/nextjs-patterns/SKILL.md); cross-language
|
|
134
|
+
clean-code baseline → [`code-clarity`](code-clarity.md).
|
|
135
|
+
|
|
136
|
+
## Enums over scattered literals
|
|
137
|
+
|
|
138
|
+
A field with two or more non-boolean states is an enum, not a bare string /
|
|
139
|
+
magic number — the small OO move that keeps a codebase greppable and safe to
|
|
140
|
+
change. Full rule + the defer-and-ask flow for pre-existing literals:
|
|
141
|
+
[`prefer-enums-over-literals`](../../src/rules/prefer-enums-over-literals.md).
|
|
142
|
+
|
|
143
|
+
## How this is reviewed
|
|
144
|
+
|
|
145
|
+
"Reuse existing components + object-oriented shape (where it reduces
|
|
146
|
+
complexity)" is a check on the code-quality review lens
|
|
147
|
+
([`judge-code-quality`](../../src/skills/judge-code-quality/SKILL.md)), so it
|
|
148
|
+
reaches `/review-changes`, `/judge`, the subagent judge modes, and team-mode's
|
|
149
|
+
fallback review frame. It fires **only where the duplication or the growing
|
|
150
|
+
branch is already present in the diff** — never "this could grow later" — and
|
|
151
|
+
in the **codebase's own paradigm** (it will not tell a functional service to
|
|
152
|
+
grow a class). It stays a human-judgment call that defers to the codebase's own
|
|
153
|
+
conventions — never a generic SOLID dogma imposed over a project that has chosen
|
|
154
|
+
differently.
|
|
155
|
+
|
|
156
|
+
## Council review (2026-07-15)
|
|
157
|
+
|
|
158
|
+
Deep debate, 3 rounds, cross-vendor (`anthropic/claude-sonnet-4-5` +
|
|
159
|
+
`openai/gpt-4o`), $0.16. Split verdict; the load-bearing (anthropic) critique —
|
|
160
|
+
that an "OOP-supreme default" over-indexes on OOP for a multi-paradigm consumer
|
|
161
|
+
base and can conflict with `minimal-safe-diff` — was applied, bounded by this
|
|
162
|
+
standard's stated purpose (OOP *is* a deliberate high priority for the operator):
|
|
163
|
+
|
|
164
|
+
- **Paradigm-appropriate framing** — OOP is the high-priority default *within an
|
|
165
|
+
OO / class-based codebase*; detect and defer to a functional / pipeline /
|
|
166
|
+
actor paradigm; never impose classes on functional code (§ Paradigm-appropriate).
|
|
167
|
+
- **Explicit precedence** — `minimal-safe-diff` / YAGNI win on conflict; the
|
|
168
|
+
review lens flags only *already-present* duplication / complexity, never
|
|
169
|
+
preemptive (§ caveat, § How this is reviewed).
|
|
170
|
+
|
|
171
|
+
Divergence held: the frontend section stays (an intentional FE / backend
|
|
172
|
+
entry-point + carve-out index, per the operator's explicit "split by FE /
|
|
173
|
+
backend" ask) — against the anthropic "delete as redundant"; it is a cohesive
|
|
174
|
+
index of the existing FE surfaces, not a claim of novel guidance. Trace:
|
|
175
|
+
`agents/runtime/council/responses/component-oop-standard.json/` (gitignored, local-only).
|
|
176
|
+
|
|
177
|
+
## See also
|
|
178
|
+
|
|
179
|
+
- [`architecture`](../../src/rules/architecture.md) — the structural home this layers onto.
|
|
180
|
+
- [`code-clarity`](code-clarity.md) — the cross-language clean-code baseline.
|
|
181
|
+
- [`minimal-safe-diff`](../../src/rules/minimal-safe-diff.md) · [`senior-engineering-discipline`](../../src/rules/senior-engineering-discipline.md) — the restraint anchors this standard is bounded by.
|
package/docs/proof.md
CHANGED
|
@@ -27,7 +27,7 @@ evidence pointer, or `task check-claims` fails the build.
|
|
|
27
27
|
| Claim | Kind | Evidence | Resolves |
|
|
28
28
|
|---|---|---|---|
|
|
29
29
|
| The release process is documented as an inheritable runbook + succession doc, and the project's bus-factor (trailing-90-day distinct human reviewers) is tracked and reported truthfully — currently 1, not implied to be more. | qual | `docs/succession.md#trailing 90 days` | ✅ |
|
|
30
|
-
|
|
|
30
|
+
| 190 commands. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
|
|
31
31
|
| A MEASURED-BUT-NOT-SHIPPED experiment — the thin rule projection reduced eager rule load 78,513 → 13,881 GPT-tokens (whole always-loaded projection 98,529 → 33,897, ~65.6%), but FAILED the quality gate (thin win-rate 36.2% vs required 48%) and does not ship; it un-defers only behind `discipline_profile: essential`. Shipped behavior does NOT include this reduction. Method: `agent-config benchmark` over the pinned token baseline; the baseline is the honest "what the user pays if everything loads eagerly", NOT a synthetic full-corpus strawman (council Q4); quality gate per the Phase-0 paired judge run. | quant | `internal/bench/reports/token-baseline.json#eager_rule_load` | ✅ |
|
|
32
32
|
| The first cross-vendor parity pass (5 orchestration-corpus tasks × 2 vendors × 3 repeats, identical prompts via the council transport, $0.16) measured real per-host finding-count differences — claude-sonnet-4-5 surfaced ~2× the findings of gpt-4o on the multi-file analysis task (median 11 vs 5) while both vendors were identical on the planted hollow-implementation task (2 vs 2) and perfectly silent on the clean-code negative control (0 vs 0, no spurious findings). The per-task `finding_floor` values are calibrated from the cross-host lower envelope and the gate is armed. | quant | `internal/bench/reports/parity-count.json#min over hosts of median` | ✅ |
|
|
33
33
|
| On a weak host (claude-haiku-4-5) the package produces a significant, placebo-controlled discipline lift on scope/downstream traps; on a strong host the same measurement is a published null — the package transplants discipline a weak model lacks, not model intelligence. | quant | `docs/benchmark.md#weak-host-specific` | ✅ |
|
|
@@ -40,15 +40,17 @@ evidence pointer, or `task check-claims` fails the build.
|
|
|
40
40
|
| A hand-rolled, dependency-free BM25 + trigram lexical index resolves the "recalls but does not rank" gap: on the retrieval-precision corpus (9 keyword-overlapping-confuser tasks) it drives the mean top tie-set from 3.333 (the `_score` bucket scorer) to 1.0 — every needed decision uniquely top-ranked — with precision@1 and precision@5 unchanged at 1.0. Method: deterministic, model-free re-ranking of the SAME retrieved entry set; both scorers measured over the identical store via `measure_lexical_ranking.ts`. | quant | `internal/bench/reports/lexical-ranking.json` | ✅ |
|
|
41
41
|
| The whole layer is compiled into host agents with zero runtime daemon. | qual | `docs/contracts/no-runtime-boundary.md#file-first, no-runtime suite` | ✅ |
|
|
42
42
|
| On a 12-fixture option-decision corpus (3 arms × 2 providers, blind rubric judge claude-opus-4-8, pre-registered hypotheses), famous-figure identity framing added nothing beyond the underlying method text (method 5.04 vs figure 4.88, Δ=0.17, sign-test p=0.607), and provider diversity moved judged quality ~15× more than persona identity (provider Δ=2.58 vs identity Δ=0.17); the whole persona layer lifted only +0.08 over bare prompts. Honest null — persona panel-mode stays CUT, evidence-closed. | quant | `internal/bench/reports/persona-placebo.json#honest-null` | ✅ |
|
|
43
|
+
| The only agent layer that publishes the runs where it changed nothing. Deliberately falsifiable — if a reader finds a comparable agent layer publishing its own honest-null benchmark runs, this line updates; that is the point. | comparative | `docs/benchmark.md#honest` | ✅ |
|
|
43
44
|
| On the live end-to-end retrieval benchmark (9 tasks × 3 arms × 3 seeds on claude-haiku, fixture store with keyword-overlapping confusers), the memory retrieval substrate scored precision@5 = 100% (9/9) with 100% poisoned-entry rejection, and the retrieval-on arm passed 27/27 model-scored tasks vs 2/27 with retrieval off and 4/27 with a placebo injection. Known limit stays published: mean tie-set 4.1 means top-k ties break by store order, not relevance (the ADR-116/FTS5 signal). | quant | `internal/bench/reports/second-brain-retrieval.json#retrieval-on` | ✅ |
|
|
44
45
|
| 105 governed rules. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
|
|
45
46
|
| On a deterministic multi-session recall corpus, the memory substrate produces a measured, placebo-controlled recall lift — memory-on 27/27 vs no-memory 10/27 and vs equal-byte placebo 9/27 (claude-haiku-4-5, n=9 tasks x 3 seeds, sign test p=0.031 for BOTH pairings). Scoped honestly: this is the context-value upper bound (perfect retrieval on a one-fact-per-task corpus), not retrieval precision under a large store. | quant | `internal/bench/reports/second-brain-delta.json` | ✅ |
|
|
46
47
|
| Removing the perfect-retrieval assumption, the substrate's REAL keyword retrieval recalls the needed decision into the top-5 under keyword-overlapping confusers (precision@5 9/9) and the model disambiguates it from the co-injected confusers — retrieval-on 27/27 vs no-memory 5/27 and vs equal-count placebo 5/27 (claude-haiku-4-5, 9 tasks x 3 seeds, sign test p=0.008 both). Named limit: retrieval RECALLS but does not RANK (mean tie-set 3.3, ties broken by store order, not relevance) — the discrimination gap that motivates the SQLite-FTS5 activation path (ADR-116) at larger scale. | quant | `internal/bench/reports/second-brain-retrieval.json` | ✅ |
|
|
47
48
|
| Every artifact the package ships — source AND the condensed projection that reaches consumers — is machine-scanned in CI for hidden-Unicode, mixed-script-confusable, and instruction-smuggling payloads (the rules-file-backdoor class); a finding blocks the release before `npm publish`, not just the merge. | qual | `.github/workflows/publish-npm.yml#lint_agent_security` | ✅ |
|
|
48
|
-
|
|
|
49
|
+
| 278 skills. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
|
|
49
50
|
| Removes only its own keys from a shared host config (matched by JSON-pointer + SHA-256), never a neighbour tool's entries. | qual | `docs/contracts/install-layout.md#JSON-pointer` | ✅ |
|
|
51
|
+
| On the A3 orchestration eval (deterministic verify, measured token deltas), the production-validator subagent returned the correct verdict on both fixtures — NOT READY with the exact `file:line` citation on a planted hollow implementation, READY with zero spurious findings on the clean control — while consuming ~45k fewer tokens than the inline-host baseline on each task. Scope: two planted fixtures on a Claude Code host, not a broad hit-rate. | quant | `internal/bench/orchestration/pv-a3-results.md#token_delta_provenance: measured` | ✅ |
|
|
50
52
|
|
|
51
|
-
**
|
|
53
|
+
**23 backed claim(s)** — all evidence pointers resolve in CI.
|
|
52
54
|
|
|
53
55
|
Artefact counts in public prose (skills, commands, governed rules,
|
|
54
56
|
guidelines, personas) are **generated from source and CI-drift-checked**:
|
|
@@ -77,11 +79,11 @@ shipping theater; the full per-cell data is committed at
|
|
|
77
79
|
`internal/bench/reports/persona-placebo.json`.
|
|
78
80
|
|
|
79
81
|
**Behavioural-eval coverage — the honest baseline.** Skill *quality* is only
|
|
80
|
-
as good as its measurement. Today **42 of
|
|
82
|
+
as good as its measurement. Today **42 of 278** skills carry a behavioural
|
|
81
83
|
`evals.json`; the highest-traffic / highest-cost tiers (default-surface +
|
|
82
84
|
`rich` + routers) are **fully covered (35 of 35)**, the long tail
|
|
83
|
-
(7 of
|
|
84
|
-
"
|
|
85
|
+
(7 of 243) is not. We publish that gap rather than imply
|
|
86
|
+
"278 evaluated skills": coverage is measured per tier
|
|
85
87
|
(`./scripts-run src/scripts/skill_eval_coverage`), **CI-ratcheted so it can
|
|
86
88
|
only rise**, and the priority tiers carry a hard **tier floor**: every
|
|
87
89
|
rich / default-surface / router skill MUST have a behavioural eval or an
|
|
@@ -152,6 +154,8 @@ that (`task check-comparison`), so this column can never lie.
|
|
|
152
154
|
| Capability/benchmark results are published — including the runs where the package changed nothing. | [`docs/benchmark.md`](../docs/benchmark.md) | A category headline figure (e.g. an '84.8%' score) appears across marketing surfaces with no reproducible methodology published — so it cannot be verified either way. | ✅ |
|
|
153
155
|
| Every public claim binds to machine-checked evidence. | [`docs/CLAIMS.md`](../docs/CLAIMS.md) | Marketing claims in this category are not bound to a machine-checked ledger a reader can reproduce. | ✅ |
|
|
154
156
|
| Skills publish their own known limits, each with a witness test. | [`tests/scripts/witness/check_refs_relative_gap.test.ts`](../tests/scripts/witness/check_refs_relative_gap.test.ts) | Published known-limitation surfaces backed by reproducing tests are not a standard artifact in this category. | ✅ |
|
|
157
|
+
| A 30-second single-file wedge exists — one read-only subagent, one command, verdict with file:line — and its promise is a scoped, published eval, not a feature list. | [`internal/bench/orchestration/pv-a3-results.md#token_delta_provenance: measured`](../internal/bench/orchestration/pv-a3-results.md) | Category entry points typically install the full platform (profiles, packs, runtime) before the first felt win; single-artifact entries with a published eval behind the promise are not a standard artifact. | ✅ |
|
|
158
|
+
| The persona-identity question was tested and published as an honest null (identity swap ~zero effect, provider choice ~15x larger) instead of being shipped as theater. | [`internal/bench/reports/persona-placebo.json#honest-null`](../internal/bench/reports/persona-placebo.json) | Named-persona prompts are shipped as a feature across the category without a published A/B separating identity from method. | ✅ |
|
|
155
159
|
|
|
156
160
|
## 5. Verify it yourself
|
|
157
161
|
|
package/docs/self-review-gate.md
CHANGED
|
@@ -37,6 +37,20 @@ no-op** (never a failing check) — exactly the `cross-model-canary.yml` pattern
|
|
|
37
37
|
`enforce: false` (advisory always returns `0` and reports the would-block
|
|
38
38
|
set).
|
|
39
39
|
|
|
40
|
+
## Escalation on large / claim-affecting diffs
|
|
41
|
+
|
|
42
|
+
The two in-session lenses are a floor. A **large** diff (≥ 400 changed lines
|
|
43
|
+
across reviewable files) or one that touches a **claim-affecting surface**
|
|
44
|
+
(`docs/CLAIMS.md`, `docs/proof.md`, `docs/comparison.yaml`, or `README.md`)
|
|
45
|
+
warrants the full `ai-council` advisor panel — a spend-bearing multi-model run.
|
|
46
|
+
|
|
47
|
+
Per blocker `self-review-gate-cost`, the paid council stays governed by the
|
|
48
|
+
standing spend-authorization discipline **at run time**. So the gate does not
|
|
49
|
+
fire council calls itself: `escalationReasons(files, changedLines)` (pure,
|
|
50
|
+
unit-tested) DETECTS the condition, the dry-run plan prints it, and the posted
|
|
51
|
+
review RECOMMENDS a maintainer `/council:pr` run. Detection is deterministic
|
|
52
|
+
and zero-spend; the multi-model run is the maintainer's run-time act.
|
|
53
|
+
|
|
40
54
|
## Arming it (maintainer, one flip)
|
|
41
55
|
|
|
42
56
|
1. Add the `ANTHROPIC_API_KEY` repo secret (per-PR budget sign-off) — turns
|