@event4u/agent-config 8.11.0 → 8.13.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.
Files changed (87) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/AGENTS.md +1 -0
  3. package/CHANGELOG.md +64 -266
  4. package/README.md +2 -2
  5. package/dist/agent-src/commands/pr/create.md +26 -0
  6. package/dist/agent-src/commands/team/adversarial.md +96 -0
  7. package/dist/agent-src/commands/team/delegate.md +109 -0
  8. package/dist/agent-src/commands/team/review.md +84 -0
  9. package/dist/agent-src/commands/team/status.md +92 -0
  10. package/dist/agent-src/commands/team.md +147 -0
  11. package/dist/agent-src/contexts/execution/roadmap-ci-steps-mechanics.md +117 -0
  12. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +106 -94
  13. package/dist/agent-src/rules/architecture.md +6 -51
  14. package/dist/agent-src/rules/code-comment-discipline.md +10 -94
  15. package/dist/agent-src/rules/decision-revisit-gate.md +9 -77
  16. package/dist/agent-src/rules/improve-before-implement.md +8 -65
  17. package/dist/agent-src/rules/no-roadmap-references.md +13 -77
  18. package/dist/agent-src/rules/persona-governance.md +5 -47
  19. package/dist/agent-src/rules/provider-lifecycle-discipline.md +6 -32
  20. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +21 -104
  21. package/dist/agent-src/rules/untrusted-input-defense.md +3 -75
  22. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +83 -0
  23. package/dist/agent-src/skills/decision-review/SKILL.md +86 -0
  24. package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +58 -1
  25. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  26. package/dist/agent-src/templates/contexts/knowledge-card.md +12 -0
  27. package/dist/discovery/deprecation-report.md +1 -1
  28. package/dist/discovery/discovery-manifest.json +159 -21
  29. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  30. package/dist/discovery/discovery-manifest.summary.md +3 -3
  31. package/dist/discovery/orphan-report.md +1 -1
  32. package/dist/discovery/packs.json +11 -6
  33. package/dist/discovery/trust-report.md +2 -2
  34. package/dist/discovery/workspaces.json +10 -5
  35. package/dist/install/install.mjs +38 -0
  36. package/dist/mcp/registry-manifest.json +2 -2
  37. package/dist/router.json +1 -1
  38. package/dist/server/schemas/settings.js +7 -0
  39. package/dist/server/schemas/settings.js.map +1 -1
  40. package/docs/CLAIMS.md +31 -3
  41. package/docs/architecture.md +2 -2
  42. package/docs/archive/CHANGELOG-pre-8.12.0.md +304 -0
  43. package/docs/benchmark.md +39 -0
  44. package/docs/catalog.md +10 -4
  45. package/docs/command-flows.md +6 -1
  46. package/docs/contracts/ai-council-config.md +9 -4
  47. package/docs/contracts/ai-team-config.md +191 -0
  48. package/docs/contracts/command-clusters.md +1 -0
  49. package/docs/contracts/persona-schema.md +49 -0
  50. package/docs/contracts/provider-lifecycle.md +29 -4
  51. package/docs/decisions/ADR-120-council-chairman-mode.md +70 -0
  52. package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +90 -0
  53. package/docs/decisions/INDEX.md +2 -0
  54. package/docs/design/council-vs-solo-baseline.md +92 -0
  55. package/docs/design/utilization-window-criteria.md +51 -0
  56. package/docs/featured-skills.md +1 -1
  57. package/docs/getting-started-by-role.md +3 -1
  58. package/docs/getting-started.md +31 -1
  59. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +68 -0
  60. package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +241 -0
  61. package/docs/guidelines/agent-infra/untrusted-input-spotlighting.md +80 -3
  62. package/docs/guidelines/code-clarity.md +86 -1
  63. package/docs/maintainers/branch-protection.md +105 -0
  64. package/docs/maintainers/system-map.md +85 -0
  65. package/docs/proof.md +15 -4
  66. package/package.json +1 -1
  67. package/src/config/agent-settings.template.yml +49 -0
  68. package/src/scripts/_cli/cmd_doctor.ts +291 -1
  69. package/src/scripts/_lib/claude_plugin.ts +39 -4
  70. package/src/scripts/_lib/knowledge_global.ts +44 -0
  71. package/src/scripts/_lib/knowledge_global_promote.ts +150 -0
  72. package/src/scripts/ai_council/orchestrator.ts +188 -1
  73. package/src/scripts/ai_team/config.ts +162 -0
  74. package/src/scripts/bench_persona_placebo.ts +308 -0
  75. package/src/scripts/bench_quality_rerun.ts +357 -0
  76. package/src/scripts/build_proof.ts +9 -0
  77. package/src/scripts/check_artefact_count_messaging.ts +56 -0
  78. package/src/scripts/check_knowledge_cards.ts +33 -4
  79. package/src/scripts/check_portability.ts +1 -0
  80. package/src/scripts/complexity_report.ts +776 -0
  81. package/src/scripts/consumer_matrix.ts +251 -12
  82. package/src/scripts/council_cli.ts +56 -1
  83. package/src/scripts/explain_run.ts +593 -0
  84. package/src/scripts/install.ts +39 -0
  85. package/src/scripts/knowledge_global_cli.ts +234 -45
  86. package/src/scripts/rule_backlinks.ts +350 -0
  87. package/src/server/schemas/settings.ts +17 -0
@@ -0,0 +1,105 @@
1
+ # Branch protection for `main` — prepared config (user-applied)
2
+
3
+ > The one reviewer point open since PR #223, repeated in every 8.11 review:
4
+ > "no code needed." Correct — and that is exactly why an agent never applies
5
+ > it: changing repository protection is a repo-admin, outward-facing action
6
+ > that affects every future merge. This page prepares the exact
7
+ > configuration; a human runs it. Blocker `branch-protection-apply` (owner:
8
+ > user) in `road-to-feedback-8.11-2` tracks the application.
9
+
10
+ ## Design decisions (council 2026-07-12)
11
+
12
+ - **PR required, no direct pushes to `main`** — including the maintainer;
13
+ the agent-side rules already treat `main` as a Hard-Floor trunk, this
14
+ makes GitHub enforce the same.
15
+ - **No force-pushes, no branch deletion.**
16
+ - **Required checks = a MINIMAL STABLE CORE, not all ~59 checks.**
17
+ Requiring everything turns every workflow/job rename into a lockout.
18
+ Core = the suites that gate correctness on every PR:
19
+ - `Static Checks (ESLint · typecheck · prepack)`
20
+ - `Node Tests (ubuntu-latest, shard 1/4)` … `shard 4/4`
21
+ - `Golden Tests (ubuntu-latest)`
22
+ - `Install Aux Tests (ubuntu-latest)`
23
+ (macOS twins stay unrequired — same code, second OS; they still run and
24
+ still show red, they just don't lock the merge on a runner outage.)
25
+ - **Enforce for admins: yes** (otherwise the protection is decorative).
26
+ - **Required reviews: 0 for now** — the trailing-90-day distinct-reviewer
27
+ count is 1 (bus-factor reality); requiring a second reviewer would block
28
+ every merge. Revisit when a second maintainer exists
29
+ (`road-to-maintainer-bus-factor`).
30
+
31
+ ## Verify the current check names first (renames happen)
32
+
33
+ ```bash
34
+ gh api repos/event4u-app/agent-config/commits/main/check-runs \
35
+ --jq '.check_runs[].name' | sort -u
36
+ ```
37
+
38
+ Adjust the `contexts` list below to the names that actually exist — this
39
+ doc is a preparation, the live names win.
40
+
41
+ ## The ready-to-run command
42
+
43
+ ```bash
44
+ gh api -X PUT repos/event4u-app/agent-config/branches/main/protection \
45
+ --input - <<'JSON'
46
+ {
47
+ "required_status_checks": {
48
+ "strict": false,
49
+ "contexts": [
50
+ "Static Checks (ESLint · typecheck · prepack)",
51
+ "Node Tests (ubuntu-latest, shard 1/4)",
52
+ "Node Tests (ubuntu-latest, shard 2/4)",
53
+ "Node Tests (ubuntu-latest, shard 3/4)",
54
+ "Node Tests (ubuntu-latest, shard 4/4)",
55
+ "Golden Tests (ubuntu-latest)",
56
+ "Install Aux Tests (ubuntu-latest)"
57
+ ]
58
+ },
59
+ "enforce_admins": true,
60
+ "required_pull_request_reviews": null,
61
+ "restrictions": null,
62
+ "allow_force_pushes": false,
63
+ "allow_deletions": false
64
+ }
65
+ JSON
66
+ ```
67
+
68
+ Notes: `strict: false` deliberately — with a single maintainer,
69
+ require-branches-up-to-date adds a rebase round-trip per merge with no
70
+ second-writer race to protect against; flip to `true` when there are
71
+ concurrent mergers. `required_pull_request_reviews: null` per the
72
+ bus-factor reality above.
73
+
74
+ ## Operating conditions under `strict: false`
75
+
76
+ `strict: false` drops the branches-up-to-date requirement, so three
77
+ conditions become merge-time habits the config cannot enforce:
78
+
79
+ - **The checked commit must not change after green CI.** No post-CI
80
+ amend or force-push on the PR branch — the config already blocks
81
+ force-pushes to `main`; the same discipline applies to the head that
82
+ CI checked: what went green is what merges.
83
+ - **Critical checks must have run on the final head before merge.** A
84
+ human glance at the checks tab on the PR's latest commit — with
85
+ `strict: false` GitHub does not re-run required checks when the base
86
+ moves, so the green you see is only as fresh as the head it ran on.
87
+ - **Auto-merge must not be enabled in a way that merges with pending or
88
+ failed required checks.** Enable auto-merge only once the required
89
+ list is complete and green on the final head — never as a
90
+ fire-and-forget while checks are still queued.
91
+
92
+ ## Rollback
93
+
94
+ ```bash
95
+ gh api -X DELETE repos/event4u-app/agent-config/branches/main/protection
96
+ ```
97
+
98
+ ## After applying
99
+
100
+ - Verify: `gh api repos/event4u-app/agent-config/branches/main/protection --jq '{checks: .required_status_checks.contexts, admins: .enforce_admins.enabled}'`
101
+ - Update the blocker in `road-to-feedback-8.11-2` (resolved-when: this
102
+ command ran, or the user records why not).
103
+ - Any future check rename: update the contexts list in the SAME PR that
104
+ renames the job — a required check that no longer reports blocks every
105
+ merge until an admin edits the list.
@@ -0,0 +1,85 @@
1
+ # System map — how the whole thing fits together
2
+
3
+ > One page, by design. This is a MAP, not a contract — where this page and a
4
+ > linked contract disagree, the contract wins. It exists so a new maintainer
5
+ > (or the same maintainer in six months) can orient without reading 121 ADRs.
6
+ > Requested by both 8.11 external reviews ("a 'how the whole system fits
7
+ > together' document that does not presuppose reading every contract").
8
+
9
+ ## The one chain that explains everything
10
+
11
+ ```
12
+ src/ ← the ONLY thing you edit
13
+ → condensation (condense.sh; hashes in internal/.condensation-hashes.json)
14
+ → dist/agent-src/ (shipped projection — generated, read-only)
15
+ → host projection (task generate-tools → .claude/ .cursor/ .clinerules/ …)
16
+ → installer (npx @event4u/agent-config init → consumer's .augment/ etc.)
17
+ → consumer runtime (host agent runs; hooks fire via the dispatcher)
18
+ ```
19
+
20
+ Everything below either feeds this chain or checks it.
21
+
22
+ ## Subsystems, one paragraph each
23
+
24
+ - **Rules + router** — `src/rules/*.md`, compiled into `dist/router.json`.
25
+ 9 kernel rules load always; the rest route on trigger-sets. Heavy rule
26
+ bodies migrate to skills/guidelines (P4 pattern); inbound routes are
27
+ derivable per target (`internal/reports/rule-backlinks.md`). Contracts:
28
+ `docs/contracts/kernel-membership.md`, `docs/contracts/rule-router.md`.
29
+
30
+ - **Skills / commands / personas** — the capability library
31
+ (`src/skills`, command domains under `src/domains`, personas). Counts are
32
+ generated and drift-gated (`CAPABILITIES.yaml`, count-messaging gate).
33
+ Catalog: `docs/catalog.md`.
34
+
35
+ - **Knowledge + memory** — file-first, no DB. Per-card origin tier AND
36
+ sensitivity class (`prohibited/project/shareable`, ADR-121) gate what may
37
+ reach the global store (`~/.event4u/agent-config/knowledge/`); promotion
38
+ needs a human reason; deletion leaves tombstones. Design:
39
+ `agents/settings/contexts/knowledge-sensitivity.md`.
40
+
41
+ - **Council** — external multi-model deliberation (no repo access),
42
+ debate/stance/chairman machinery complete and default-off; further
43
+ expansion is gated on the pre-registered council-vs-solo baseline
44
+ (`docs/design/council-vs-solo-baseline.md`). Config contract:
45
+ `docs/contracts/ai-council-config.md`.
46
+
47
+ - **Subagents / orchestration** — in-session delegation with a form gate
48
+ before mode selection; implementer/judge separation; telemetry on the
49
+ audit JSONL. Team mode (cross-model builder/reviewer WITH repo access) is
50
+ the depth complement — `agents/roadmaps/road-to-team-mode.md`.
51
+
52
+ - **Telemetry + measurement** — engagement records (id-only,
53
+ PII-excluded-by-construction, default-off; ON in this repo since
54
+ 2026-07-12 with pre-registered decision criteria at
55
+ `docs/design/utilization-window-criteria.md`); orchestration audit lines;
56
+ bench harnesses with spend gates.
57
+
58
+ - **Claims + proof** — every public claim binds to resolvable evidence:
59
+ `docs/CLAIMS.md` (source) → `docs/proof.md` (generated). Honest nulls are
60
+ published; pre-registration before data is the norm. Gate:
61
+ `check_claims`, `build_proof --check`.
62
+
63
+ - **Introspection lenses (all report-only, all with kill criteria)** —
64
+ `complexity_report` (system-complexity soft ratchet vs checked-in
65
+ baseline), `explain_run` (why rules/skills/dispatches happened),
66
+ `rule_backlinks`. None fails a build; each dies if it informs no decision.
67
+
68
+ - **CI gates** — `task ci` locally mirrors remote CI; remote CI is the
69
+ authoritative gate (`quality.local_auto_run: false` BY DESIGN — narrow
70
+ diff-scoped probes still run locally; new gates run once locally). The
71
+ consumer matrix installs the real package and fires real hook lifecycle
72
+ events. Branch protection: `docs/maintainers/branch-protection.md`.
73
+
74
+ ## Where to change what (the 10-second router)
75
+
76
+ | You want to… | Edit… | Never touch… |
77
+ |---|---|---|
78
+ | Change agent behavior | `src/rules` / `src/skills` / `src/domains` | `dist/`, `.claude/`, `.cursor/` (generated) |
79
+ | Change what ships | `src/config/packs.yml`, profiles | consumer trees |
80
+ | Change counts/claims/proof | `docs/CLAIMS.md` + regenerate | `docs/proof.md` directly |
81
+ | Change install/hooks | `src/install`, `src/scripts/_lib/claude_settings_hooks.ts` | consumer settings by hand |
82
+ | Record a decision | `docs/decisions/ADR-*` via adr-create | roadmaps as decision storage |
83
+
84
+ Deeper operating material (release runbook, succession, incident playbooks)
85
+ is owned by `road-to-maintainer-bus-factor` — this page stays the map.
package/docs/proof.md CHANGED
@@ -27,8 +27,8 @@ 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
- | 178 commands. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
31
- | The retrieval economy cuts always-loaded context tokens ~65.6% measured against the FULL always-loaded projection — 98,529 → 33,897 tokens (eager rule load + skill/command descriptions + MCP schemas, thin-flipped). 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). | quant | `internal/bench/reports/token-baseline.json#eager_rule_load` | ✅ |
30
+ | 183 commands. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
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
  | 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` | ✅ |
33
33
  | The non-coding domain skills (finance/founder/ops/content) are forged on TS/PHP and labeled unvalidated until they pass a sourced domain-truth fixture; no public prose implies proven domain correctness, and the validated count is CI-ratcheted. | qual | `src/scripts/domain_soundness_status.ts#checkRatchet` | ✅ |
34
34
  | 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. | quant | `internal/evals/domain-soundness-floor.json#validated` | ✅ |
@@ -38,6 +38,8 @@ evidence pointer, or `task check-claims` fails the build.
38
38
  | 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). | quant | `internal/bench/reports/humanizer-v1.md#prefers the humanized text` | ✅ |
39
39
  | 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` | ✅ |
40
40
  | The whole layer is compiled into host agents with zero runtime daemon. | qual | `docs/contracts/no-runtime-boundary.md#file-first, no-runtime suite` | ✅ |
41
+ | 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` | ✅ |
42
+ | 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` | ✅ |
41
43
  | 104 governed rules. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
42
44
  | 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` | ✅ |
43
45
  | 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` | ✅ |
@@ -45,7 +47,7 @@ evidence pointer, or `task check-claims` fails the build.
45
47
  | 271 skills. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
46
48
  | 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` | ✅ |
47
49
 
48
- **18 backed claim(s)** — all evidence pointers resolve in CI.
50
+ **20 backed claim(s)** — all evidence pointers resolve in CI.
49
51
 
50
52
  Artefact counts in public prose (skills, commands, governed rules,
51
53
  guidelines, personas) are **generated from source and CI-drift-checked**:
@@ -53,7 +55,7 @@ guidelines, personas) are **generated from source and CI-drift-checked**:
53
55
  fails the build on any count-shaped prose mention that drifts from the
54
56
  source count — or on two different numbers for the same artefact kind.
55
57
 
56
- We also publish our **debt**: 2 claim(s) are logged as
58
+ We also publish our **debt**: 4 claim(s) are logged as
57
59
  `unbacked` inventory in the ledger — not yet bound, and therefore not
58
60
  allowed to carry a marker in public prose. Hiding them would be the
59
61
  opposite of the point.
@@ -64,6 +66,15 @@ Benchmark results — **including the runs where the package changed nothing**
64
66
  live in [`docs/benchmark.md`](benchmark.md). We do not delete a measured null to
65
67
  make a number look better; the null is the evidence of honesty.
66
68
 
69
+ The freshest example: the **persona-placebo benchmark** <!-- claim:persona-identity-placebo-null -->
70
+ (2026-07-12, 3 arms × 2 providers, blind rubric judge, pre-registered
71
+ hypotheses) measured whether famous-figure persona framing improves decision
72
+ answers over the bare method text it wraps. It does not (Δ=0.17, p=0.607) —
73
+ while provider diversity moved judged quality ~15× more than persona identity.
74
+ The measured null closed a planned feature (persona panel-mode) instead of
75
+ shipping theater; the full per-cell data is committed at
76
+ `internal/bench/reports/persona-placebo.json`.
77
+
67
78
  **Behavioural-eval coverage — the honest baseline.** Skill *quality* is only
68
79
  as good as its measurement. Today **39 of 271** skills carry a behavioural
69
80
  `evals.json`; the highest-traffic / highest-cost tiers (default-surface +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event4u/agent-config",
3
- "version": "8.11.0",
3
+ "version": "8.13.0",
4
4
  "description": "Universal AI Agent OS — audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -473,6 +473,15 @@ quality:
473
473
  # introduces a NEW CI gate, smoke test, or test file, the agent
474
474
  # MUST execute it locally to prove the gate works. Without that
475
475
  # execution the new gate is unverified evidence.
476
+ #
477
+ # Posture note (feedback-8.11-2): `false` is a DELIBERATE, documented
478
+ # design decision, not an omission — remote CI is the single
479
+ # authoritative gate; local full-pipeline runs duplicate it at
480
+ # wall-clock + token cost. It never suppresses (a) narrow diff-scoped
481
+ # probes (type-check/lint/tests over the agent's OWN changed files
482
+ # before pushing — those always run), (b) the new-gate carve-out
483
+ # above, (c) user-invoked runs. Run-end reports must say "quality
484
+ # gates delegated to remote CI", never claim an unrun pipeline passed.
476
485
  local_auto_run: false
477
486
 
478
487
  # Wait for remote CI to finish on the PR / pipeline (true, false)
@@ -620,6 +629,46 @@ worktrees:
620
629
  #
621
630
  # See `docs/contracts/ai-council-config.md` for the schema.
622
631
 
632
+ # --- AI Team (cross-model strong-pair review — /team family) ---
633
+ #
634
+ # Governs the default-off `/team` capability family: one strong external
635
+ # model (via the codex CLI, subscription-authed) reviews inside the repo —
636
+ # the depth complement to the council's breadth. Schema + validation
637
+ # contract: `docs/contracts/ai-team-config.md`. The loader
638
+ # (`src/scripts/ai_team/config.ts`) rejects unknown keys fail-closed.
639
+ ai_team:
640
+ # Master switch. false (default) = /team commands are never suggested
641
+ # and every invocation refuses with an enable pointer; true = the
642
+ # family is live (individual gates below still apply).
643
+ enabled: false
644
+
645
+ # Model handed to the codex CLI. 'auto' (default) = pass NO --model
646
+ # flag, the codex CLI's own default applies — this tracks the
647
+ # subscription's current strongest model instead of pinning a stale
648
+ # ID. Any other value passes through verbatim as `--model <value>`.
649
+ model: auto
650
+
651
+ # Second opt-in for the ONLY wrapper that delegates write access
652
+ # (/team:delegate → the plugin's native-Codex worker). false (default)
653
+ # = delegate refuses with an enable pointer even when ai_team.enabled
654
+ # is true. Both keys must be true before delegation is reachable.
655
+ allow_delegate: false
656
+
657
+ # Per-day cap on team calls. Team calls count into the EXISTING
658
+ # cli_call_budget openai bucket (~/.event4u/agent-config/cli-calls.json,
659
+ # daily UTC reset) — one subscription, one counter, never a parallel
660
+ # count. This key is the team-side ceiling read against that shared
661
+ # bucket. 0 = block all team calls; raise if you review heavily.
662
+ max_calls_per_day: 50
663
+
664
+ # Suppress the one-line wizard/init recommendation to set up the codex
665
+ # plugin on Claude-Code hosts. Cosmetic only — never changes behavior.
666
+ suppress_setup_hint: false
667
+
668
+ # NOTE for future keys: `review_gate` (managed loop-bound governance of
669
+ # the plugin's Stop-hook Review Gate) lands in a later team-mode phase
670
+ # (Phase 4) — do not add it here ahead of that phase.
671
+
623
672
  # --- Onboarding ---
624
673
  #
625
674
  # Tracks whether the initial setup flow (/onboard) has been completed