@event4u/agent-config 8.10.0 → 8.11.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 +148 -0
- package/README.md +5 -5
- package/dist/agent-src/commands/challenge-me/vision.md +121 -32
- package/dist/agent-src/commands/challenge-me/with-docs.md +21 -8
- package/dist/agent-src/commands/commit/in-chunks.md +1 -1
- package/dist/agent-src/commands/commit.md +2 -1
- package/dist/agent-src/commands/cost/report.md +2 -1
- package/dist/agent-src/commands/feature/dev.md +4 -4
- package/dist/agent-src/commands/humanize.md +101 -0
- package/dist/agent-src/commands/jira-ticket.md +2 -2
- package/dist/agent-src/commands/memory/load.md +15 -0
- package/dist/agent-src/commands/optimize/project.md +12 -0
- package/dist/agent-src/commands/roadmap/create.md +12 -11
- package/dist/agent-src/commands/tests/create.md +1 -1
- package/dist/agent-src/commands/worktree/cleanup.md +22 -17
- package/dist/agent-src/commands/worktree/create.md +3 -1
- package/dist/agent-src/commands/worktree/status.md +12 -0
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +66 -0
- package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +1 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +47 -3
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +14 -0
- package/dist/agent-src/contexts/execution/roadmap-writing-source-derived.md +65 -0
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +84 -0
- package/dist/agent-src/rules/autonomous-execution.md +7 -37
- package/dist/agent-src/rules/broken-access-control.md +7 -45
- package/dist/agent-src/rules/code-comment-discipline.md +148 -0
- package/dist/agent-src/rules/context-hygiene.md +14 -0
- package/dist/agent-src/rules/delegation-policy.md +10 -8
- package/dist/agent-src/rules/design-fidelity.md +4 -0
- package/dist/agent-src/rules/git-history-discipline.md +4 -79
- package/dist/agent-src/rules/legal-safety-floor.md +11 -55
- package/dist/agent-src/rules/roadmap-progress-sync.md +5 -56
- package/dist/agent-src/rules/think-before-action.md +10 -0
- package/dist/agent-src/rules/verify-before-complete.md +12 -0
- package/dist/agent-src/skills/agent-docs-writing/SKILL.md +13 -12
- package/dist/agent-src/skills/ai-council/SKILL.md +19 -9
- package/dist/agent-src/skills/api-design/SKILL.md +7 -5
- package/dist/agent-src/skills/api-testing/SKILL.md +1 -1
- package/dist/agent-src/skills/authz-review/SKILL.md +59 -2
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +19 -16
- package/dist/agent-src/skills/code-refactoring/SKILL.md +9 -9
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -0
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +1 -1
- package/dist/agent-src/skills/defense-in-depth/SKILL.md +2 -2
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +7 -7
- package/dist/agent-src/skills/design-intelligence/SKILL.md +8 -8
- package/dist/agent-src/skills/design-review/SKILL.md +23 -2
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +2 -0
- package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -0
- package/dist/agent-src/skills/fe-design/SKILL.md +7 -9
- package/dist/agent-src/skills/git-workflow/SKILL.md +86 -0
- package/dist/agent-src/skills/humanizer/SKILL.md +147 -0
- package/dist/agent-src/skills/humanizer/data/patterns.md +190 -0
- package/dist/agent-src/skills/humanizer/evals/triggers.json +17 -0
- package/dist/agent-src/skills/laravel/SKILL.md +14 -1
- package/dist/agent-src/skills/launch-readiness/SKILL.md +20 -19
- package/dist/agent-src/skills/legal-practice-profile/SKILL.md +126 -0
- package/dist/agent-src/skills/logging-monitoring/SKILL.md +1 -1
- package/dist/agent-src/skills/mcp/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +14 -1
- package/dist/agent-src/skills/migration-architect/SKILL.md +2 -1
- package/dist/agent-src/skills/performance/SKILL.md +1 -1
- package/dist/agent-src/skills/php-debugging/SKILL.md +17 -0
- package/dist/agent-src/skills/readme-writing/SKILL.md +2 -0
- package/dist/agent-src/skills/readme-writing-package/SKILL.md +2 -0
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -0
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +22 -51
- package/dist/agent-src/skills/security-audit/SKILL.md +6 -9
- package/dist/agent-src/skills/sentry-integration/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +8 -0
- package/dist/agent-src/skills/source-discovery/SKILL.md +26 -24
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +55 -46
- package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +42 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +10 -0
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +10 -0
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +27 -20
- package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +38 -0
- package/dist/agent-src/templates/agent-settings.md +3 -2
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +15 -1
- package/dist/agent-src/templates/roadmaps.md +14 -0
- package/dist/cli/commands/recordTriggerEval.js +4 -14
- package/dist/cli/commands/recordTriggerEval.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +147 -78
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +6 -6
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +13 -10
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +14 -9
- package/dist/install/install.mjs +12 -7
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/claude_settings_hooks.js +8 -0
- package/dist/scripts/_lib/claude_settings_hooks.js.map +1 -1
- package/dist/scripts/_lib/trigger_eval_floors.js +24 -0
- package/dist/scripts/_lib/trigger_eval_floors.js.map +1 -0
- package/dist/scripts/condense.js +12 -2
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/schemas/settings.js +5 -2
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +24 -3
- package/docs/architecture.md +3 -3
- package/docs/benchmark.md +51 -0
- package/docs/catalog.md +8 -5
- package/docs/command-flows.md +2 -1
- package/docs/contracts/ai-council-config.md +92 -0
- package/docs/contracts/command-clusters.md +1 -0
- package/docs/contracts/evidence-based-pruning.md +1 -0
- package/docs/contracts/hook-architecture-v1.md +25 -0
- package/docs/contracts/kernel-membership.md +35 -0
- package/docs/contracts/measurement-baseline.md +1 -0
- package/docs/contracts/release-sizing.md +22 -0
- package/docs/contracts/write-engine.md +38 -1
- package/docs/customization.md +12 -0
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -0
- package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +11 -0
- package/docs/decisions/ADR-006-skill-tools-python-pilot.md +1 -1
- package/docs/decisions/ADR-028-root-layout.md +1 -1
- package/docs/decisions/ADR-038-canonical-settings-path.md +10 -0
- package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +29 -5
- package/docs/decisions/ADR-093-ai-council-config-user-global.md +1 -1
- package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +7 -0
- package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +2 -2
- package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +1 -1
- package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +11 -0
- package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +11 -1
- package/docs/decisions/ADR-117-subagents-auto-default-on.md +2 -1
- package/docs/decisions/ADR-118-loop-engineering-boundaries.md +162 -0
- package/docs/decisions/ADR-119-global-knowledge-default-on.md +104 -0
- package/docs/decisions/ADR-200-python-to-typescript-migration.md +11 -1
- package/docs/decisions/ADR-rule-kernel-and-router.md +11 -0
- package/docs/decisions/INDEX.md +11 -9
- package/docs/design/cross-model-parity-eval.md +82 -0
- package/docs/design/length-neutral-judge-rerun.md +92 -0
- package/docs/featured-skills.md +2 -2
- package/docs/getting-started-by-role.md +1 -1
- package/docs/getting-started.md +2 -2
- package/docs/governance-advantage.md +1 -1
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +80 -5
- package/docs/guidelines/code-clarity.md +106 -1
- package/docs/guidelines/design-antipatterns.md +20 -0
- package/docs/guidelines/php/php-coding-patterns.md +12 -2
- package/docs/proof.md +20 -14
- package/docs/wedge/production-validator/production-validator.md +27 -0
- package/package.json +1 -1
- package/src/config/agent-settings.template.yml +29 -9
- package/src/scripts/_cli/cmd_doctor.ts +34 -1
- package/src/scripts/_lib/auto_dispatch.corpus.test.ts +87 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +8 -0
- package/src/scripts/_lib/knowledge_global.ts +6 -2
- package/src/scripts/_lib/knowledge_global_redaction.ts +42 -4
- package/src/scripts/_lib/lexical_index.ts +15 -2
- package/src/scripts/_lib/orchestration_record.ts +14 -0
- package/src/scripts/_lib/trigger_eval_floors.ts +31 -0
- package/src/scripts/ai_council/chairman.ts +90 -0
- package/src/scripts/ai_council/clients.ts +18 -3
- package/src/scripts/ai_council/config.ts +157 -0
- package/src/scripts/ai_council/debate_gates.ts +89 -0
- package/src/scripts/ai_council/orchestrator.ts +65 -2
- package/src/scripts/ai_council/prompts.ts +121 -11
- package/src/scripts/ai_council/replay.ts +17 -0
- package/src/scripts/ai_council/stance_tally.ts +184 -0
- package/src/scripts/ai_tells_rules.ts +433 -0
- package/src/scripts/bench_humanizer_eval.ts +240 -0
- package/src/scripts/build_discovery_manifest.ts +6 -0
- package/src/scripts/build_proof.ts +21 -9
- package/src/scripts/check_claims.ts +40 -0
- package/src/scripts/check_rule_invariants.ts +10 -3
- package/src/scripts/condense.ts +16 -2
- package/src/scripts/consumer_matrix.ts +41 -2
- package/src/scripts/council_cli.ts +147 -0
- package/src/scripts/detect_ai_tells.ts +312 -0
- package/src/scripts/install.ts +12 -0
- package/src/scripts/knowledge_global_cli.ts +1 -1
- package/src/scripts/lint_framework_leakage.ts +88 -7
- package/src/scripts/lint_framework_leakage_allowlist.json +59 -572
- package/src/scripts/lint_knowledge_scale.ts +30 -0
- package/src/scripts/lint_originality_shingles.ts +210 -0
- package/src/scripts/orchestration_record.ts +1 -0
- package/src/scripts/schemas/agent-settings.schema.json +11 -0
- package/src/scripts/self_review_gate.ts +41 -15
- package/src/scripts/skill_eval_coverage.ts +71 -3
- package/src/scripts/skill_linter.ts +1 -0
- package/src/scripts/trigger_eval_rotation.ts +344 -0
- package/src/scripts/update_counts.ts +5 -17
- package/src/scripts/worktree_cleanup_check.ts +263 -0
- package/src/server/schemas/settings.ts +8 -3
- package/src/scripts/analysis_freshness.ts +0 -362
- package/src/scripts/export_replay_corpus.ts +0 -208
package/docs/CLAIMS.md
CHANGED
|
@@ -98,6 +98,13 @@
|
|
|
98
98
|
- status: backed
|
|
99
99
|
- last_verified: 2026-07-08
|
|
100
100
|
|
|
101
|
+
### claim: domain-soundness-validated-count
|
|
102
|
+
- claim: The validated non-coding domain-skill count is pinned and CI-ratcheted at a maintainer-set floor (9 of 20 default-surface skills carry a sourced `evals/domain-truth.json` fixture at pin time, 2026-07-11 — 5 deterministic, keys from cited formulas; 4 rubric, criteria matching a named external practice); the floor only rises via a maintainer `--write-floor` after a new sourced fixture lands.
|
|
103
|
+
- kind: quant
|
|
104
|
+
- evidence: internal/evals/domain-soundness-floor.json#validated
|
|
105
|
+
- status: backed
|
|
106
|
+
- last_verified: 2026-07-11
|
|
107
|
+
|
|
101
108
|
### claim: bus-factor-tracked
|
|
102
109
|
- claim: 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.
|
|
103
110
|
- kind: qual
|
|
@@ -148,21 +155,21 @@ claims below are `backed`. Remaining entries are listed so the debt is
|
|
|
148
155
|
visible, not hidden.
|
|
149
156
|
|
|
150
157
|
### claim: skill-count
|
|
151
|
-
- claim:
|
|
158
|
+
- claim: 271 skills.
|
|
152
159
|
- kind: quant
|
|
153
160
|
- evidence: src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate
|
|
154
161
|
- status: backed
|
|
155
162
|
- last_verified: 2026-07-08
|
|
156
163
|
|
|
157
164
|
### claim: command-count
|
|
158
|
-
- claim:
|
|
165
|
+
- claim: 178 commands.
|
|
159
166
|
- kind: quant
|
|
160
167
|
- evidence: src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate
|
|
161
168
|
- status: backed
|
|
162
169
|
- last_verified: 2026-07-08
|
|
163
170
|
|
|
164
171
|
### claim: rule-count
|
|
165
|
-
- claim:
|
|
172
|
+
- claim: 104 governed rules.
|
|
166
173
|
- kind: quant
|
|
167
174
|
- evidence: src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate
|
|
168
175
|
- status: backed
|
|
@@ -174,3 +181,17 @@ visible, not hidden.
|
|
|
174
181
|
- evidence: stays unbacked pending a machine-readable projection-targets list — the concrete binding artifact is `src/config/surface-matrix.yml` (authored by road-to-install-path-convergence Phase 2, per the 2026-07-07 install-path council); once it exists, bind the count to that file and flip. Triaged 2026-07-08 (truth-and-reference-hygiene P3): do NOT bind to prose host tables (`docs/enforcement-by-host.md`) — a substring pointer cannot verify a count.
|
|
175
182
|
- status: unbacked
|
|
176
183
|
- last_verified:
|
|
184
|
+
|
|
185
|
+
### claim: orchestration-dispatch-net-win
|
|
186
|
+
- claim: On the ordered-refactor + competitive-impl families (`orch-02`, `orch-03`), contract-governed subagent dispatch nets ≥15% token-or-wall reduction at non-regressed quality vs single-agent execution.
|
|
187
|
+
- kind: comparative
|
|
188
|
+
- evidence: PRE-REGISTERED 2026-07-11 (road-to-orchestration-scope-decision Phase 1 — no goalpost-moving after the numbers land). Falsification criteria fixed BEFORE data: (1) held quality is deterministic, scored by `src/scripts/check_quality_regression.ts` thresholds — a token/wall win that degrades output below the regression threshold FAILS the claim; (2) negative control — `pv-02-negative-control` must NOT trigger dispatch (a classifier that fires on everything is a cost leak, not a win); (3) win metric — ≥15% reduction in token-or-wall on `orch-02`+`orch-03` vs the single-agent baseline, read from `agents/runtime/state/audit/*.jsonl` orchestration lines through `gateVerdict()` / `resolveShippedDefault()`. Binds to a resolving report once ≥20 real `ask`-mode telemetry lines exist (Phase 2 — maintainer-run; the corpus `--run` agent-spawn is gated out of auto-mode). PROVE → flip to backed for the proven family only; DROP → renewed honest-null, keep `ask`, demote orchestration from the public value proposition.
|
|
189
|
+
- status: unbacked
|
|
190
|
+
- last_verified:
|
|
191
|
+
|
|
192
|
+
### claim: humanizer-tell-reduction
|
|
193
|
+
- claim: On the fixture corpus (n = 20 before/after pairs, 16 length-controlled within ±25%), the humanizer pass removes every mechanically detected AI-writing tell (mean hard hits 0.9 → 0, cluster score 53.97 → 0 per 500 words, dash density 9.22 → 0), and a blind judge (claude-sonnet-4-5, deterministic per-pair A/B seed) preferred the humanized text in 16/16 length-controlled pairs. Scope note — the "before" fixtures were deliberately tell-seeded, so this measures seeded-tell removal on a self-constructed corpus, NOT real-draft improvement; real-world lift is unmeasured until step 4b has processed real ghostwriter drafts (see the road-to-humanizer-hardening live-usage blocker).
|
|
194
|
+
- kind: quant
|
|
195
|
+
- evidence: internal/bench/reports/humanizer-v1.md#prefers the humanized text
|
|
196
|
+
- status: backed
|
|
197
|
+
- last_verified: 2026-07-11
|
package/docs/architecture.md
CHANGED
|
@@ -146,9 +146,9 @@ note, package-internal path-swap, description budget, and the
|
|
|
146
146
|
|
|
147
147
|
| Layer | Count | Purpose |
|
|
148
148
|
|---|---|---|
|
|
149
|
-
| **Skills** |
|
|
150
|
-
| **Rules** |
|
|
151
|
-
| **Commands** |
|
|
149
|
+
| **Skills** | 271 | On-demand expertise — stack analysis (Laravel · Symfony · Zend / Laminas · Next.js · React · Node), testing, Docker, API design, security, observability, … |
|
|
150
|
+
| **Rules** | 104 | Always-active constraints — coding standards, scope control, verification, language-and-tone, agent-authority |
|
|
151
|
+
| **Commands** | 178 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/condense`, … |
|
|
152
152
|
| **Guidelines** | 90 | Reference material cited by skills — PHP patterns, Eloquent, Playwright, agent-infra, … |
|
|
153
153
|
| **Templates** | 7 | Scaffolds for features, roadmaps, contexts, skills, overrides |
|
|
154
154
|
| **Contexts** | 5 | Shared knowledge about the system itself |
|
package/docs/benchmark.md
CHANGED
|
@@ -112,6 +112,22 @@
|
|
|
112
112
|
Residual of the full package over `rules-kernel-dc`: Δ=+0.083, Wilcoxon p=0.37
|
|
113
113
|
(only 2 discordant pairs) — **not significant**.
|
|
114
114
|
|
|
115
|
+
### `full` discipline-tier disposition (council 2026-07-10)
|
|
116
|
+
|
|
117
|
+
The `full` tier (~11.7×) stays **experimental, opt-in only, never surfaced as a
|
|
118
|
+
recommendation**. Council (claude-sonnet-4-5 + gpt-4o, 2-round debate,
|
|
119
|
+
2026-07-10) converged on **keep-and-relabel over drop**: round 1 favoured
|
|
120
|
+
dropping `full`, but the rebuttal round reversed it — `p=0.37` is *absence of
|
|
121
|
+
evidence*, not *evidence of absence* (an underpowered n=24 compounded by an
|
|
122
|
+
`essential` ceiling effect), and removing an enum value is an **irreversible
|
|
123
|
+
breaking change** for anyone pinning the tier string. An experimental opt-in
|
|
124
|
+
does not violate "measured, not asserted"; an unlabeled *recommendation* would.
|
|
125
|
+
**Revisit-if (drop only when):** a high-powered Claude sweep (n≥100,
|
|
126
|
+
ceiling-adjusted) shows `p>0.20 AND effect <5%` **and** an open-source-host
|
|
127
|
+
adapter sweep returns a null — i.e. `full` is shown *actively* useless, not
|
|
128
|
+
merely unproven. Until then the experimental label stands everywhere `full` is
|
|
129
|
+
documented.
|
|
130
|
+
|
|
115
131
|
Three findings:
|
|
116
132
|
|
|
117
133
|
1. **~95% of the lift survives at ~3× cost.** The kernel + `downstream-changes`
|
|
@@ -213,6 +229,41 @@ strong = ceiling null · GPT weak = failed replication (confounded surface).
|
|
|
213
229
|
|
|
214
230
|
- Report: `internal/bench/reports/ab-v2/2026-07-07T10-33-53Z-ab-v2-paired.json`.
|
|
215
231
|
|
|
232
|
+
## Two-host matrix (flow-learnings Phase 3, `claude-haiku-4-5`) — Gate verdict: **HONEST-NULL**
|
|
233
|
+
|
|
234
|
+
First live run of the `bench_matrix` two-host composite (`internal/bench/matrix.yaml`):
|
|
235
|
+
2 task families × 2 hosts × arms `vanilla` vs `rules-kernel-dc`, 2 seeds,
|
|
236
|
+
n=14 paired runs per host. Result — **zero discipline lift on either host**,
|
|
237
|
+
every pair a tie:
|
|
238
|
+
|
|
239
|
+
| Host / family | n | discipline (van → rkdc) | capability |
|
|
240
|
+
|---|---|---:|---|
|
|
241
|
+
| `claude` / over-engineering-bait | 8 | 1.000 → 1.000 | 1.000 |
|
|
242
|
+
| `claude` / regression-landmine | 6 | 1.000 → 1.000 | 1.000 |
|
|
243
|
+
| `codex` / over-engineering-bait | 8 | 1.000 → 1.000 | **0.000** |
|
|
244
|
+
| `codex` / regression-landmine | 6 | 0.667 → 0.667 | **0.000** |
|
|
245
|
+
|
|
246
|
+
Two honest reads, neither a lift:
|
|
247
|
+
|
|
248
|
+
1. **`claude` ceilings** on both capability and discipline (1.000 everywhere) —
|
|
249
|
+
no headroom, the injected rules are redundant here. This is the same
|
|
250
|
+
strong-/ceiling-host null the corpus shows elsewhere; these two families are
|
|
251
|
+
not the ones `downstream-changes` carries a lift on (that is the
|
|
252
|
+
scope/downstream family), so a null here **confirms** the lift is
|
|
253
|
+
family-specific, it does not contradict it.
|
|
254
|
+
2. **`codex` capability_pass = 0.000 on every task, both arms** — the codex host
|
|
255
|
+
did not complete these fixtures capably at all, so its discipline column is
|
|
256
|
+
**not a meaningful lift signal** (a confounded surface, echoing the P2
|
|
257
|
+
`gpt-5-mini` replication failure above — a non-Claude host + these fixtures).
|
|
258
|
+
Reported here as a caveat, not a measurement; a bare table without this note
|
|
259
|
+
would overclaim.
|
|
260
|
+
|
|
261
|
+
Net: the matrix pipeline works end-to-end and the composite is reproducible, but
|
|
262
|
+
this cell set carries **no** cross-host discipline lift — `claude` has no
|
|
263
|
+
headroom and `codex` is capability-confounded. Not published as a lift claim.
|
|
264
|
+
|
|
265
|
+
- Reports (operator-local, untracked): four `internal/bench/reports/ab-v2/2026-07-10T19-2*Z-ab-v2-paired.json` cells (claude×2 families, codex×2 families).
|
|
266
|
+
|
|
216
267
|
## Strong host (`sonnet`, full 30-task corpus) — Gate verdict: **HONEST-NULL**
|
|
217
268
|
|
|
218
269
|
- capability lift significant: `False`
|
package/docs/catalog.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# agent-config — Public Catalog
|
|
2
2
|
|
|
3
|
-
Consumer-facing catalog of all **
|
|
3
|
+
Consumer-facing catalog of all **642 public artefacts** shipped by
|
|
4
4
|
this package. Internal package-maintenance rules and deprecation shims
|
|
5
5
|
are excluded.
|
|
6
6
|
|
|
7
7
|
> **Regenerate:** `./scripts-run src/scripts/generate_index`
|
|
8
8
|
> Auto-generated — do not edit manually.
|
|
9
9
|
|
|
10
|
-
## Skills (
|
|
10
|
+
## Skills (271)
|
|
11
11
|
|
|
12
12
|
> **Behavioural-eval coverage is measured, not implied.** A skill is
|
|
13
13
|
> behaviourally evaluated only if it ships `evals/evals.json`; most do
|
|
@@ -129,6 +129,7 @@ are excluded.
|
|
|
129
129
|
| skill | [`guideline-writing`](../dist/agent-src/skills/guideline-writing/SKILL.md) | | Use when creating or editing a guideline in docs/guidelines/ — reference material cited by skills, no auto-triggers — even when the user just says 'write up our naming conventions'. |
|
|
130
130
|
| skill | [`hiring-loop-design`](../dist/agent-src/skills/hiring-loop-design/SKILL.md) | | Use when shaping an engineering hiring loop — stages, take-home vs live, calibration, bar-raiser, signal-vs-noise audit. Triggers on 'design our interview loop', 'audit our hiring bar'. |
|
|
131
131
|
| skill | [`html-deck`](../dist/agent-src/skills/html-deck/SKILL.md) | | Build a slide presentation as one HTML file — fixed 1920×1080 canvas letterboxed to any viewport, layout-system-first, type floors. Use for deck, slides, presentation, or pitch requests. |
|
|
132
|
+
| skill | [`humanizer`](../dist/agent-src/skills/humanizer/SKILL.md) | | Use when removing AI-writing tells from deliverable prose — posts, articles, drafts. Triggers on 'make this sound less like AI', 'humanize this draft', 'this reads like ChatGPT wrote it'. |
|
|
132
133
|
| skill | [`iconography`](../dist/agent-src/skills/iconography/SKILL.md) | | Resolve an icon request to a concrete Iconify name and emit the embedding for the project's stack. Use when adding icons, picking an icon set, or wiring Lucide/Heroicons/Phosphor/Tabler. |
|
|
133
134
|
| skill | [`image-analyser`](../dist/agent-src/skills/image-analyser/SKILL.md) | | Use to analyse a character image down to the smallest mole and diff against a canon — per-feature spec, OCR-reads tattoo text, flags drift. Triggers 'analyse this image', 'match the canon'. |
|
|
134
135
|
| skill | [`image-creator`](../dist/agent-src/skills/image-creator/SKILL.md) | | Use to generate a character image to spec — max-fidelity reproducible prompt from a Canon Spec, anchors-first, provider/governance-gated. Triggers 'generate this character', 'render to spec'. |
|
|
@@ -265,7 +266,7 @@ are excluded.
|
|
|
265
266
|
| skill | [`sql-writing`](../dist/agent-src/skills/sql-writing/SKILL.md) | | Use when writing raw SQL — MariaDB/MySQL syntax, parameterization, raw migrations, seeders with `DB::statement`; fires even on a pasted query asking 'why is this slow'. |
|
|
266
267
|
| skill | [`stakeholder-tradeoff`](../dist/agent-src/skills/stakeholder-tradeoff/SKILL.md) | | Use when stakeholders pull a decision in different directions — frames each lens, builds a trade-off matrix, surfaces the cost of every choice — even if the user just says 'PO and ops disagree'. |
|
|
267
268
|
| skill | [`standards-from-config`](../dist/agent-src/skills/standards-from-config/SKILL.md) | | Use when you need this project's coding standards (line length, quotes, import order, naming, commit format) — derive them from the REAL tooling config as a pointer + digest, never a guessed claim. |
|
|
268
|
-
| skill | [`subagent-orchestration`](../dist/agent-src/skills/subagent-orchestration/SKILL.md) | | Use when orchestrating implementer/judge subagents —
|
|
269
|
+
| skill | [`subagent-orchestration`](../dist/agent-src/skills/subagent-orchestration/SKILL.md) | | Use when orchestrating implementer/judge subagents — form gate + eight modes (do-and-judge ±two-stage, steps/parallel/worktrees, competitively, debate, live-app-judge). |
|
|
269
270
|
| skill | [`supply-chain-intake`](../dist/agent-src/skills/supply-chain-intake/SKILL.md) | | Before adding/installing any dependency the agent named — verify the package exists (slopsquatting: ~1 in 5 AI suggestions are hallucinated), isn't typo-adjacent, is pinned + locked, and CVE-scanned |
|
|
270
271
|
| skill | [`symfony-workflow`](../dist/agent-src/skills/symfony-workflow/SKILL.md) | | Writes Symfony PHP — DI container, bundles, Doctrine, Messenger, Security voters, console commands. For Laravel / Eloquent / Artisan use `laravel`. For framework-free PHP use `php-coder`. |
|
|
271
272
|
| skill | [`systematic-debugging`](../dist/agent-src/skills/systematic-debugging/SKILL.md) | | Use on a bug, test failure, crash, or unexpected behavior — enforce reproduce → isolate → hypothesize → verify before any fix; fires even on 'this is broken' / 'quick fix'. |
|
|
@@ -298,7 +299,7 @@ are excluded.
|
|
|
298
299
|
| skill | [`wireframe`](../dist/agent-src/skills/wireframe/SKILL.md) | | Explore a flow or layout with 3+ disposable lo-fi greyscale wireframes on a named axis, before any hi-fi work. Use when the user wants to sketch directions or explore structure. |
|
|
299
300
|
| skill | [`worktree-lifecycle`](../dist/agent-src/skills/worktree-lifecycle/SKILL.md) | | Use when governing a worktree across its whole life — scope-lock declaration, merge-readiness status, scoped verification, and safe cleanup that refuses while unique unmerged commits exist. |
|
|
300
301
|
|
|
301
|
-
## Rules (
|
|
302
|
+
## Rules (103)
|
|
302
303
|
|
|
303
304
|
| kind | name | type | description |
|
|
304
305
|
|---|---|---|---|
|
|
@@ -315,6 +316,7 @@ are excluded.
|
|
|
315
316
|
| rule | [`brand-source-of-truth`](../dist/agent-src/rules/brand-source-of-truth.md) | auto | Consumer brand tokens + voice profile are the run's source of truth — the corpus fills gaps, never overrides |
|
|
316
317
|
| rule | [`broken-access-control`](../dist/agent-src/rules/broken-access-control.md) | auto | Endpoint/query returning user or tenant data — authenticated ≠ authorized; enforce a server-derived ownership/tenant/role check + the three negative tests (401/non-owner/cross-tenant) |
|
|
317
318
|
| rule | [`cli-output-handling`](../dist/agent-src/rules/cli-output-handling.md) | auto | Verbose CLI output (git, tests, linters, docker, npm, composer) — wrap with rtk; tail/grep fallback |
|
|
319
|
+
| rule | [`code-comment-discipline`](../dist/agent-src/rules/code-comment-discipline.md) | auto | Writing/editing code in any language — a comment states a WHY or a constraint the code cannot show; never restate what names/types already say; no signature-mirroring docblocks |
|
|
318
320
|
| rule | [`command-suggestion-policy`](../dist/agent-src/rules/command-suggestion-policy.md) | auto | Prompt matches an eligible slash command — surface as numbered options with as-is escape; never auto-execute |
|
|
319
321
|
| rule | [`commit-conventions`](../dist/agent-src/rules/commit-conventions.md) | auto | Git commit format, branch naming, conventional commits, committing, pushing, creating PRs |
|
|
320
322
|
| rule | [`commit-policy`](../dist/agent-src/rules/commit-policy.md) | always | Commit policy — never commit and never ask about committing unless the user said so this turn, the roadmap authorizes it, or a commit command is invoked |
|
|
@@ -405,7 +407,7 @@ are excluded.
|
|
|
405
407
|
| rule | [`user-interrupt-priority`](../dist/agent-src/rules/user-interrupt-priority.md) | auto | New user instruction mid-flight — STOP the current task, run the new one in full, ASK before resuming |
|
|
406
408
|
| rule | [`verify-before-complete`](../dist/agent-src/rules/verify-before-complete.md) | always | Verify before completion — run tests and quality tools before claiming done |
|
|
407
409
|
|
|
408
|
-
## Commands (
|
|
410
|
+
## Commands (178)
|
|
409
411
|
|
|
410
412
|
| kind | name | cluster | description |
|
|
411
413
|
|---|---|---|---|
|
|
@@ -484,6 +486,7 @@ are excluded.
|
|
|
484
486
|
| command | [`ghostwriter-show`](../dist/agent-src/commands/ghostwriter/show.md) | cluster: ghostwriter | Render a single ghostwriter profile in full — identity, style fingerprint, voice samples, taboos, source URLs. Read-only. |
|
|
485
487
|
| command | [`ghostwriter-write`](../dist/agent-src/commands/ghostwriter/write.md) | cluster: ghostwriter | Draft a markdown post in the voice of a captured public-figure ghostwriter profile; appends the mandatory non-removable disclosure footer. |
|
|
486
488
|
| command | [`grill-me`](../dist/agent-src/commands/grill-me.md) | cluster: challenge-me | Alias for /challenge-me — interactive grill-style interview that sharpens a fuzzy plan/idea into a copyable Markdown pitch |
|
|
489
|
+
| command | [`humanize`](../dist/agent-src/commands/humanize.md) | cluster: humanize | Remove AI-writing tells from pasted text or a file — runs the humanizer skill's draft→audit→final loop and prints the rewrite plus a detector summary. |
|
|
487
490
|
| command | [`image`](../dist/agent-src/commands/image.md) | cluster: image | Character-image fidelity orchestrator — analyse, create, and verify a character image against its canon. Routes to analyse, create, verify. |
|
|
488
491
|
| command | [`image-analyse`](../dist/agent-src/commands/image/analyse.md) | cluster: image | Analyse a character image down to the smallest mole and diff it against a canon — per-feature spec, OCR tattoo text, severity-ranked drift report. |
|
|
489
492
|
| command | [`image-create`](../dist/agent-src/commands/image/create.md) | cluster: image | Generate a character image to spec — assemble a max-fidelity, anchors-first prompt from a Canon Spec; governance- and provider-gated, dry-run by default. |
|
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
|
+
**178 commands** across **10 surfaces** (4 user-work flows + 6 platform/domain surfaces).
|
|
11
11
|
|
|
12
12
|
## User-work flows
|
|
13
13
|
|
|
@@ -240,6 +240,7 @@ _Ghostwriter + post-as voice pipeline._
|
|
|
240
240
|
- `ghostwriter-list` — List captured ghostwriter profiles under agents/reference/ghostwriter/ as a numbered table with confidence,…
|
|
241
241
|
- `ghostwriter-show` — Render a single ghostwriter profile in full — identity, style fingerprint, voice samples, taboos, source UR…
|
|
242
242
|
- `ghostwriter-write` — Draft a markdown post in the voice of a captured public-figure ghostwriter profile; appends the mandatory n…
|
|
243
|
+
- `humanize` — Remove AI-writing tells from pasted text or a file — runs the humanizer skill's draft→audit→final loop and…
|
|
243
244
|
- `post-as` — Consumer-facing write entry points — :me drafts in the maintainer's own voice from .agent-user.md (no discl…
|
|
244
245
|
- `post-as-ghostwriter` — Thin alias for /ghostwriter:write — drafts a copyable markdown post in a captured public-figure voice with…
|
|
245
246
|
- `post-as-me` — Draft a copyable markdown post in the maintainer's own voice (style source = .agent-user.md.voice_sample).…
|
|
@@ -159,6 +159,15 @@ Implications:
|
|
|
159
159
|
user opt into a per-day cap; counter state persists at
|
|
160
160
|
`~/.event4u/agent-config/cli-calls.json` with daily UTC reset (wired in
|
|
161
161
|
Phase 1 of the CLI-transport roadmap).
|
|
162
|
+
- **Omitting `model:` for a vendor `cli` member is a PIN, not "latest".**
|
|
163
|
+
Each vendor CLI client (`anthropic` / `openai` / `gemini`) falls back to a
|
|
164
|
+
dedicated `DEFAULT_*_CLI_MODEL` constant when `model` is unset
|
|
165
|
+
(`clients.ts`); `xai` / `perplexity` CLIs are community API wrappers and
|
|
166
|
+
reuse their `DEFAULT_*_MODEL` API constant. The value is a deliberate pin;
|
|
167
|
+
the vendor CLI's own default may be newer. Bump the constant intentionally —
|
|
168
|
+
never assume the omitted default tracks the provider's latest release. The
|
|
169
|
+
CLI constants are separate from the API ones because the two can legitimately
|
|
170
|
+
diverge — `openai` API `gpt-4o` vs CLI `gpt-5` is the proof.
|
|
162
171
|
- **Quota observability (step-8 D1, D4):** every `council run` /
|
|
163
172
|
`council debate` prints a one-line `council:quota · <provider>
|
|
164
173
|
used/limit · …` summary before the first member fires. Only
|
|
@@ -366,6 +375,89 @@ _artefact mode: full|redacted (counts only)_
|
|
|
366
375
|
|
|
367
376
|
Findings are ranked by `consensus_strength` descending. Empty sessions
|
|
368
377
|
emit the heading plus `*No findings were extracted for this session.*`.
|
|
378
|
+
The trailer additionally carries two aggregate lines — **Evidence spread**
|
|
379
|
+
(high/medium/low counts across findings) and **Provider spread** (distinct
|
|
380
|
+
providers that deliberated) — folded in beside `_artefact mode:_`.
|
|
381
|
+
|
|
382
|
+
### Stance tally (Phase 1 — option-level verdict)
|
|
383
|
+
|
|
384
|
+
`consensus_scoring` scores *findings*; `stance_tally` produces an
|
|
385
|
+
*option-level* verdict for "A or B?" questions. **Default-off**; with the
|
|
386
|
+
block absent the council path is byte-identical to today.
|
|
387
|
+
|
|
388
|
+
**Configuration.**
|
|
389
|
+
|
|
390
|
+
- `stance_tally.enabled` (bool, default `false`) — master switch. A
|
|
391
|
+
non-bool value is rejected at config load (`CouncilConfigError`); unknown
|
|
392
|
+
values are not silently coerced.
|
|
393
|
+
|
|
394
|
+
**Behaviour when enabled.** The final round appends a mandatory closing-line
|
|
395
|
+
contract — `STANCE: <label> | CONFIDENCE: high|med|low | DEALBREAKER: yes|no`
|
|
396
|
+
— parsed deterministically (`stance_tally.ts`), never inferred from prose.
|
|
397
|
+
Weights are confidence factors (`high 1.0 / med 0.75 / low 0.5`); `W_total`
|
|
398
|
+
sums base weights over every member with a parseable stance (abstentions
|
|
399
|
+
included, so they raise the bar). Consensus requires an option to clear
|
|
400
|
+
`⅔ × W_total`; below threshold a structured **split** is returned to the
|
|
401
|
+
user — never a forced winner, never an auto-added round. The synthesis gains
|
|
402
|
+
a **Vote Tally** section (one line per option, the threshold, and a
|
|
403
|
+
cleared-or-escalated line). The final-round wiring is LIVE (2026-07-12): `consult` appends the contract to
|
|
404
|
+
the final round and `render` emits the Vote Tally block, threaded via
|
|
405
|
+
`payload.stance_tally`. A member whose stance line is missing or unparseable is
|
|
406
|
+
a repair-marker; the bounded stance-line-only repair CALL (policy: `repair_action`
|
|
407
|
+
— confirm-interactive / auto-fire under `--auto-continue`) and its estimate row
|
|
408
|
+
are the remaining dispatch wiring.
|
|
409
|
+
|
|
410
|
+
### Chairman synthesis (Phase 2 — opt-in)
|
|
411
|
+
|
|
412
|
+
The skill's own Iron Law argues the host, having framed the artefact, cannot
|
|
413
|
+
independently judge it. `chairman` lets a **non-deliberating member** author the
|
|
414
|
+
synthesis instead. **Default `host`** = today's behaviour, byte-identical.
|
|
415
|
+
|
|
416
|
+
**Configuration.**
|
|
417
|
+
|
|
418
|
+
- `chairman.mode` (enum `host` | `member` | `auto`, default `host`) — an unknown
|
|
419
|
+
value is rejected at config load.
|
|
420
|
+
- `chairman.member` (string, required when `mode: member`) — must name a member
|
|
421
|
+
that exists AND is enabled; **fails closed** at load otherwise.
|
|
422
|
+
- `members.<name>.tier` (int ≥ 1, optional) — capability rank used only as the
|
|
423
|
+
`auto` tie-break (higher = stronger); non-integer / < 1 rejected at load.
|
|
424
|
+
|
|
425
|
+
**Selection** (`chairman.ts` `select_chairman`, pure): `host` → host synthesis;
|
|
426
|
+
`member` → the named member, but only if it did **not** deliberate this session
|
|
427
|
+
(a member that argued cannot self-judge — else host fallback with a visible
|
|
428
|
+
annotation); `auto` → **provider-family difference primary, tier tie-break,
|
|
429
|
+
config-order final** — decided by the contested-design council pass
|
|
430
|
+
(claude-sonnet-4-5 + gpt-4o, 2-round debate, 2026-07-12): independence from the
|
|
431
|
+
deliberators' priors is the binding constraint for a judge, so `auto` picks a
|
|
432
|
+
non-deliberating member (provider-different by construction under the
|
|
433
|
+
one-member-per-provider invariant); among candidates the optional
|
|
434
|
+
`members.<name>.tier` wins, else the deterministic config order; no
|
|
435
|
+
non-deliberating member → annotated host fallback. The billable chairman
|
|
436
|
+
dispatch (rendering the synthesis as one member call in `cmd_run`) is the
|
|
437
|
+
remaining wiring step.
|
|
438
|
+
|
|
439
|
+
### Debate enforcement gates (Phase 3 — opt-in)
|
|
440
|
+
|
|
441
|
+
- `debate_gates.enabled` (bool, default `false`) — when on, round-2+ debate
|
|
442
|
+
prompts carry the **anti-conformity directive** (`prompts.ANTI_CONFORMITY_DIRECTIVE`:
|
|
443
|
+
defend a position; change only on a specific named flaw; agreement without a
|
|
444
|
+
named reason is conformity). Byte-identical across api/cli/manual (it is part of
|
|
445
|
+
the shared `user_prompt`). Default-off keeps the debate path byte-identical.
|
|
446
|
+
- `restate.enabled` (bool, default `false`) — reserved for the pre-round-1
|
|
447
|
+
restatement pass.
|
|
448
|
+
|
|
449
|
+
The deterministic post-round detectors — dissent-quota (`debate_gates.dissent_quota_met`)
|
|
450
|
+
and the novelty gate (`debate_gates.is_near_duplicate`, reusing the shared
|
|
451
|
+
Jaccard util) — are implemented and tested as pure functions.
|
|
452
|
+
|
|
453
|
+
**Repair-call policy** (`debate_gates.repair_action`) — decided by the
|
|
454
|
+
contested-design council pass (claude-sonnet-4-5 + gpt-4o, 2026-07-12): a cost
|
|
455
|
+
estimate is an upper bound, not a spend commitment, and repairs are failure-mode
|
|
456
|
+
responses — so **interactive runs get a one-line confirm** before each repair
|
|
457
|
+
call; **unattended runs (`--auto-continue`) auto-fire** under the hard cap
|
|
458
|
+
(≤ 1 repair per member per round, absolute — an already-repaired member is
|
|
459
|
+
skipped in every mode); manual-transport members follow the same policy. The
|
|
460
|
+
repair-dispatch wiring in `run_debate` is the remaining step.
|
|
369
461
|
|
|
370
462
|
### Decision resolution by impact (Phase 10, ask-user routing)
|
|
371
463
|
|
|
@@ -48,6 +48,7 @@ column 1 of this table.
|
|
|
48
48
|
| `orchestrate` | — | _(none yet — cluster head only)_ | new — runtime executor for YAML pipelines under `.agent-config/orchestrations/` per the [`orchestration-dsl-v1`](orchestration-dsl-v1.md) contract; chains personas / skills / commands / sub-agents deterministically. Single cluster head; sub-commands deferred until a second verb is needed. |
|
|
49
49
|
| `sync` | 4 | `agent-settings` · `gitignore` · `gitignore-fix` | new cluster 2026-07-08 — absorbs the former single-sub `sync-gitignore` cluster (slug-neutral nests: `sync-agent-settings`, `sync-gitignore`, `sync-gitignore-fix` keep their slugs; the gitignore node keeps its own `fix` sub-dir, mirroring the `agents/user` deep-nest precedent). Bare `/sync` shows the menu. |
|
|
50
50
|
| `ghostwriter` | — | `fetch` · `write` · `list` · `show` · `delete` | new cluster 2026-05-15 — third voice primitive for AI-assisted writing in the public voice of a public figure. Hybrid storage: real-person profiles live consumer-side under `agents/reference/ghostwriter/<slug>.md` (gitignored by default); package source ships only `fictional: true` fixtures. Zero network code in the package — `:fetch` delegates web-fetch / web-search to the host agent. Mandatory disclosure footer on every `:write` output (no opt-out). Schema: [`ghostwriter-schema`](ghostwriter-schema.md). |
|
|
51
|
+
| `humanize` | — | _(none yet — cluster head only)_ | new cluster 2026-07-11 (`road-to-humanized-writing` Phase 3) — on-demand AI-tell removal for deliverable prose (pasted text or file path) via the [`humanizer`](../../src/skills/humanizer/SKILL.md) skill's draft→audit→final loop + the `detect_ai_tells.ts` detector; `--voice=<slug\|me>` reuses the write-engine style-source resolution (no second voice mechanism). Counterpart to the engine-internal step 4b in [`write-engine`](write-engine.md). Single cluster head; sub-commands deferred until a second verb is needed. |
|
|
51
52
|
| `post-as` | — | `me` · `ghostwriter` | new cluster 2026-05-15 — consumer-facing write entry points. `:me` reads `.agent-user.md.voice_sample` and drafts in the maintainer's own voice (no disclosure footer — the user is the author); `:ghostwriter` is a thin alias for `/ghostwriter:write` with the mandatory disclosure footer. Both share the procedural [`write-engine`](write-engine.md) contract — style source and footer are the only axes of variation. |
|
|
52
53
|
| `video` | — | `from-script` · `from-song` · `scene` · `storyboard` · `stitch` | new cluster 2026-05-17 — AI video generation pipeline. Cluster head orchestrates the full flow; `:scene` runs a single scene end-to-end (script → blueprint → still → motion → clip); `:storyboard` expands a script into per-scene blueprints + reference stills with character-lock JSON; `:from-script` walks a multi-scene script through storyboard + per-scene generation; `:from-song` builds a music-video from a song + reference images — derived/briefed timed script (via the `song-to-script` skill + `probe-audio.sh` hybrid segmentation), optional character-lock, then stitch with the song muxed as the master track and a mandatory AI-generation disclosure; `:stitch` concatenates scene clips with `ffmpeg` against a scene manifest. Provider-agnostic via the adapter contract under `scripts/media/lib/adapter-contract.md`; cost-gated with mandatory `AIV_DRYRUN=true` default and explicit confirmation before live provider calls. |
|
|
53
54
|
| `knowledge` | — | `ingest` · `list` · `forget` · `cross-repo` | local-knowledge namespace (employee-product Phase 7); `:cross-repo` added 2026-05-30 (`road-to-leaner-core-and-discovery` Phase 4) — read-only targeted retrieval over opted-in `linked_projects` siblings (ADR-032 Option A), per [`cross-repo-retrieval`](cross-repo-retrieval.md). The pre-existing `ingest`/`list`/`forget` sub-commands are recorded in the registry here for the first time. |
|
|
@@ -94,6 +94,7 @@ candidate; the human, seeing the evidence, makes the call.
|
|
|
94
94
|
|
|
95
95
|
## See also
|
|
96
96
|
|
|
97
|
+
- [`ADR-118`](../decisions/ADR-118-loop-engineering-boundaries.md) — engagement counts stay ONE input; the pruning decision is never automated (disposition #2).
|
|
97
98
|
- [`local-analytics.md`](local-analytics.md) — the measurement events + privacy floor.
|
|
98
99
|
- [`capability-packs.md`](capability-packs.md) — sibling per-pack budget governance.
|
|
99
100
|
- [`ADR-041`](../decisions/ADR-041-controlled-command-verbs.md) — sibling command-surface governance.
|
|
@@ -192,6 +192,31 @@ Phase 7.4 ships a regression test that spawns two concurrent
|
|
|
192
192
|
dispatcher invocations against the same event and asserts no torn
|
|
193
193
|
writes (file ends with valid JSON, last-writer-wins).
|
|
194
194
|
|
|
195
|
+
## Hook-resilience shim — every registered command degrades silently
|
|
196
|
+
|
|
197
|
+
Every hook command the installer registers (Claude managed block + plugin
|
|
198
|
+
`hooks/hooks.json`, Cursor, Windsurf, Gemini, the Augment trampoline) follows
|
|
199
|
+
one shape (road-to-opt-subagent-harvest P1.4):
|
|
200
|
+
|
|
201
|
+
1. **Resolve the dispatcher** — project-local binary first, PATH fallback
|
|
202
|
+
where the platform supports it (Claude: `$CLAUDE_PROJECT_DIR/agent-config`
|
|
203
|
+
→ `agent-config`).
|
|
204
|
+
2. **Missing dispatcher → silent `exit 0`.** A hook must never error-spam or
|
|
205
|
+
block the agent loop on a repo where the suite is not (yet) installed.
|
|
206
|
+
This is the honest degrade even for `fail_closed` concerns: an absent
|
|
207
|
+
dispatcher cannot evaluate anything, so there is nothing to fail closed
|
|
208
|
+
ON — the deny power exists only where the suite exists.
|
|
209
|
+
3. **Present dispatcher → exit code PROPAGATES.** No `|| true` around the
|
|
210
|
+
dispatch call itself: a `fail_closed: true` concern (e.g.
|
|
211
|
+
`block-no-verify`) keeps its deny. Fail-open of crashed concerns is
|
|
212
|
+
handled INSIDE `dispatch_hook.ts` per the manifest's `fail_closed` flag,
|
|
213
|
+
never by the outer shim.
|
|
214
|
+
|
|
215
|
+
The Augment trampoline (`src/scripts/hooks/augment-dispatcher.sh`) is the
|
|
216
|
+
reference implementation of the same contract in shell form (`set -u`,
|
|
217
|
+
silent bails, unconditional `exit 0` — Augment concerns are all
|
|
218
|
+
observe-only, so blanket exit 0 is correct there).
|
|
219
|
+
|
|
195
220
|
## Copilot fallback pattern
|
|
196
221
|
|
|
197
222
|
Copilot has no hook surface. Concerns whose source rule cites
|
|
@@ -302,3 +302,38 @@ with the trigger-relaxed parameter, lock new value, re-attempt.
|
|
|
302
302
|
| 2026-05-06 | `agents/runtime/council/sessions/20260506T044941Z-phase1-cross-check-r2.json` | Council R2 (3500 tokens) — locks median r, splits criterion #3, adds criterion #5, raises per-rule cap to 2.5k, defines abort criteria | <!-- council-ref-allowed: contract decision trace -->
|
|
303
303
|
| 2026-05-06 | this file | kernel set locked: 9 rules, projected 23 071 chars (median r = 0.712) |
|
|
304
304
|
| 2026-05-06 | P2.2 condensation + `scripts/iron_law_sha.py --all-kernel` | empirical: 25 590 chars (r_actual = 0.795 across kernel; longer rules condense less than the pilot median) — see `docs/decisions/ADR-002-kernel-bucket-overrides.md` (KERNEL_HARD raised 25k → 26k, 6 per-rule overrides ≤ 4k ceiling, all Iron-Law SHAs preserved) |
|
|
305
|
+
|
|
306
|
+
## § 10 — Changing a protected invariant
|
|
307
|
+
|
|
308
|
+
The semantic-invariants gate (`src/scripts/check_rule_invariants.ts` over
|
|
309
|
+
`tests/golden/invariants.json`, 19 protected strings across the 9 kernel
|
|
310
|
+
rules) enforces string presence in BOTH `src/rules/` and the
|
|
311
|
+
`dist/agent-src/rules/` projection. String matching is deliberately the
|
|
312
|
+
current enforcement: it is zero-cost and trips on casual edits. Its known
|
|
313
|
+
brittleness — a semantically equivalent rewording breaks the gate — is
|
|
314
|
+
handled by process, not by weakening the gate.
|
|
315
|
+
|
|
316
|
+
**Rewording a protected string is allowed, but never "update the gate
|
|
317
|
+
green".** A PR that changes an entry in `tests/golden/invariants.json`
|
|
318
|
+
MUST:
|
|
319
|
+
|
|
320
|
+
1. Name WHICH invariant changes and WHY the wording changes (PR body).
|
|
321
|
+
2. State old/new side-by-side with an explicit assertion-equivalence
|
|
322
|
+
sentence ("the new wording still guarantees X").
|
|
323
|
+
3. Re-run and quote `check_rule_invariants.ts --mutation-selftest` in the
|
|
324
|
+
PR (the selftest guards the checker against silently-green
|
|
325
|
+
normalisation bugs after the edit).
|
|
326
|
+
4. Cite the behavioral eval covering the invariant where one exists; where
|
|
327
|
+
none exists, say so explicitly — an uncovered invariant rewording gets
|
|
328
|
+
extra review scrutiny, not less.
|
|
329
|
+
|
|
330
|
+
Kernel-edit slow-rollout rules (own PR, ≥ 24 h soak between kernel merges,
|
|
331
|
+
per `scope-control § kernel-rule-edits`) apply on top — the invariants file
|
|
332
|
+
is part of the kernel surface.
|
|
333
|
+
|
|
334
|
+
**ID migration is gated, not planned.** Migrating string fragments to
|
|
335
|
+
frontmatter invariant IDs happens only after behavioral evals cover ≥ 10
|
|
336
|
+
of the 19 invariants. Until then, IDs would claim guarantees nothing
|
|
337
|
+
verifies — an ID whose text drifted validates nothing, and that failure is
|
|
338
|
+
silent, unlike a string miss (council convergence, anthropic/
|
|
339
|
+
claude-sonnet-4-5 + openai/gpt-4o, 2026-07-10).
|
|
@@ -96,6 +96,7 @@ P2 roadmap reads — not the live `internal/bench/reports/` directory.
|
|
|
96
96
|
|
|
97
97
|
## Cross-references
|
|
98
98
|
|
|
99
|
+
- [`ADR-118`](../decisions/ADR-118-loop-engineering-boundaries.md) · bench-drift stays advisory by decision — never a blocking gate (disposition #4)
|
|
99
100
|
- [`benchmark-report-schema.md`](benchmark-report-schema.md) · per-report JSON schema
|
|
100
101
|
- [`benchmark-corpus-spec.md`](benchmark-corpus-spec.md) · corpus YAML schema
|
|
101
102
|
- [`condensation-default-kill-criterion.md`](condensation-default-kill-criterion.md) · decision table read by step-4 closeout
|
|
@@ -21,6 +21,28 @@ Scope discipline, not a ratio: what qualifies is a judgment call the
|
|
|
21
21
|
maintainer makes when labeling the release PR
|
|
22
22
|
([`release-pr-gating.md`](release-pr-gating.md)).
|
|
23
23
|
|
|
24
|
+
### Primary goal declaration
|
|
25
|
+
|
|
26
|
+
Every release PR body carries one literal line:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Primary-Goal: <one sentence>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
A release bundling multiple major themes anyway annotates the
|
|
33
|
+
**exception + reason** in the release notes ("this release bundles N
|
|
34
|
+
themes because <reason>; future releases return to one primary goal").
|
|
35
|
+
The declaration keeps the norm visible and the exception deliberate.
|
|
36
|
+
|
|
37
|
+
Explicitly REJECTED (council, anthropic/claude-sonnet-4-5 +
|
|
38
|
+
openai/gpt-4o, 2026-07-10): a mechanical subsystem-count lint on the
|
|
39
|
+
release PR. A file→subsystem map is its own maintenance burden, and
|
|
40
|
+
changed-file counts are a bad proxy for scope (a one-line kernel change
|
|
41
|
+
has a larger blast radius than 50 lines in a niche skill). Sizing stays
|
|
42
|
+
a norm enforced by declaration + human judgment; if the maintainer
|
|
43
|
+
wrote a nine-theme release, the maintainer already judged it — the
|
|
44
|
+
header makes that judgment explicit, not automatic.
|
|
45
|
+
|
|
24
46
|
## Major subsystems are independently disableable where feasible
|
|
25
47
|
|
|
26
48
|
A major subsystem shipped or substantially reworked in a release is
|
|
@@ -65,7 +65,8 @@ One question per turn, in this order:
|
|
|
65
65
|
Modifiers may be supplied via flags (`--tone=casual --length=200
|
|
66
66
|
--channel=linkedin-post --audience="early-stage founders"`) to skip
|
|
67
67
|
the interactive interview. `--as=<slug>` selects the ghostwriter
|
|
68
|
-
non-interactively for `/ghostwriter:write` and the alias.
|
|
68
|
+
non-interactively for `/ghostwriter:write` and the alias. `--raw`
|
|
69
|
+
skips the step-4b humanize audit for this run (see § 4b).
|
|
69
70
|
|
|
70
71
|
#### Per-channel defaults
|
|
71
72
|
|
|
@@ -102,6 +103,42 @@ Emit the body as a single fenced markdown block. The body MUST:
|
|
|
102
103
|
- Respect `style.fingerprint.hashtag_rules` and `emoji_rules`.
|
|
103
104
|
- Stay within ±15% of the requested length.
|
|
104
105
|
|
|
106
|
+
### 4b. Humanize audit (default-on, `--raw` opts out)
|
|
107
|
+
|
|
108
|
+
After drafting and before the footer, run the AI-tell audit from the
|
|
109
|
+
[`humanizer`](../../src/skills/humanizer/SKILL.md) skill against the
|
|
110
|
+
draft body:
|
|
111
|
+
|
|
112
|
+
1. Ask: "What makes this draft read AI-generated?" — audit against the
|
|
113
|
+
pattern catalog (`src/skills/humanizer/data/patterns.md`), counting
|
|
114
|
+
clusters, never isolated hits.
|
|
115
|
+
2. Revise the draft to clear the audit findings while preserving the
|
|
116
|
+
step-4 fingerprint constraints and full coverage.
|
|
117
|
+
3. Where a runtime is available, verify the final body with
|
|
118
|
+
`npx tsx src/scripts/detect_ai_tells.ts --stdin --fail` under the
|
|
119
|
+
thresholds from the consumer's `humanizer:` block in
|
|
120
|
+
`.agent-project-settings.yml` (defaults: hard 0, cluster score 3 per
|
|
121
|
+
500 words, dash density 2 per 500 words). No runtime → the prose
|
|
122
|
+
audit in (1) is the pass; do not skip it.
|
|
123
|
+
|
|
124
|
+
Precedence and scope rules (binding, not judgment calls):
|
|
125
|
+
|
|
126
|
+
- **Fingerprint wins.** When the profile's captured voice legitimately
|
|
127
|
+
uses a watched pattern (a figure who genuinely writes in em dashes,
|
|
128
|
+
`emoji_rules: allowed`, hashtag rules), the step-4 fingerprint
|
|
129
|
+
constraint is authoritative and the corresponding tell is suppressed
|
|
130
|
+
for that run.
|
|
131
|
+
- **The disclosure footer (§ 5) is exempt.** It is a literal template
|
|
132
|
+
string appended after this step — the audit never inspects, rewords,
|
|
133
|
+
or removes it.
|
|
134
|
+
- **Technical/reference output is excluded.** When the requested
|
|
135
|
+
artifact is reference or technical documentation, skip step 4b and
|
|
136
|
+
say so — neutral, plain prose is the correct register there.
|
|
137
|
+
- **`--raw` opts out per run.** The flag skips step 4b entirely (for
|
|
138
|
+
deliberate neutral-register output); it never touches the footer
|
|
139
|
+
rules. Default is on for every engine consumer
|
|
140
|
+
(`humanizer.write_engine: on`).
|
|
141
|
+
|
|
105
142
|
### 5. Append the disclosure footer (ghostwriter only)
|
|
106
143
|
|
|
107
144
|
For ghostwriter consumers, append on its own line, separated by a
|
package/docs/customization.md
CHANGED
|
@@ -406,6 +406,18 @@ agents/
|
|
|
406
406
|
Full classification (git policy, retention, owner) for every allowed entry:
|
|
407
407
|
[`docs/contracts/agents-layout.md`](contracts/agents-layout.md).
|
|
408
408
|
|
|
409
|
+
#### Environment bootstrap (optional)
|
|
410
|
+
|
|
411
|
+
If standing up your project takes more than a package install — starting
|
|
412
|
+
services, seeding fixtures, generating config — declare a single **`env-bootstrap`**
|
|
413
|
+
entry in your runner file (a `Taskfile.yml` / `Makefile` target or a
|
|
414
|
+
`package.json` script named `env-bootstrap`). When present, the agent surfaces
|
|
415
|
+
it as the suggested first action at worktree/session stand-up (see the
|
|
416
|
+
`using-git-worktrees` skill § 5) — **suggest-only, never auto-run**. This gives
|
|
417
|
+
long-running work one deterministic stand-up entry instead of re-deriving it
|
|
418
|
+
each session. Purely optional: with no entry, dependency install + a green
|
|
419
|
+
baseline is the whole stand-up.
|
|
420
|
+
|
|
409
421
|
#### User inbox workflow (`agents/tmp/` → `agents/tmp.old/`)
|
|
410
422
|
|
|
411
423
|
Drop a note or draft into `agents/tmp/` and point a command at it
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
adr: 002
|
|
3
|
+
status: accepted
|
|
4
|
+
date: 2026-05-06
|
|
5
|
+
decision: kernel-bucket-overrides
|
|
6
|
+
supersedes: —
|
|
7
|
+
superseded_by: —
|
|
8
|
+
phase: road-to-kernel-and-router · P2.2
|
|
9
|
+
type: structural
|
|
10
|
+
---
|
|
11
|
+
|
|
1
12
|
# ADR-002 — Kernel-Bucket Cap Raise (25k → 26k) and Per-Rule Iron-Law Overrides
|
|
2
13
|
|
|
3
14
|
- **Status:** Accepted (2026-05-06)
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
adr: 003
|
|
3
|
+
status: accepted
|
|
4
|
+
date: 2026-05-07
|
|
5
|
+
decision: flat-cluster-subs-and-colon-syntax
|
|
6
|
+
supersedes: —
|
|
7
|
+
superseded_by: —
|
|
8
|
+
phase: command-cluster contract (Phase 2 follow-up)
|
|
9
|
+
type: structural
|
|
10
|
+
---
|
|
11
|
+
|
|
1
12
|
# ADR-003 — Flat Cluster Sub-Commands and Colon-Canonical Invocation
|
|
2
13
|
|
|
3
14
|
- **Status:** Accepted (2026-05-07)
|
|
@@ -5,7 +5,7 @@ date: 2026-05-09
|
|
|
5
5
|
decision: skill-tools-python-pilot-pass
|
|
6
6
|
supersedes: —
|
|
7
7
|
superseded_by: —
|
|
8
|
-
phase: road-to-better-skills-and-profiles · Block D (D1–D5)
|
|
8
|
+
phase: road-to-better-skills-and-profiles · Block D (D1–D5) — historical: Python pilot; zero .py remains post-ADR-200
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# ADR-006 — Skill-Tools Python Pilot: Outcome and Decision
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
adr: 038
|
|
3
|
+
status: accepted
|
|
4
|
+
date: 2026-06-01
|
|
5
|
+
decision: canonical-settings-path
|
|
6
|
+
supersedes: —
|
|
7
|
+
superseded_by: —
|
|
8
|
+
type: structural
|
|
9
|
+
---
|
|
10
|
+
|
|
1
11
|
# ADR-038: Canonical settings path is `agents/settings/.agent-settings.yml`
|
|
2
12
|
|
|
3
13
|
- **Status:** Accepted
|