@event4u/agent-config 8.13.0 → 9.1.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 +183 -0
- package/MIGRATION.md +14 -0
- package/README.md +2 -2
- package/dist/agent-src/commands/agent-handoff.md +35 -0
- package/dist/agent-src/commands/agents/init.md +1 -0
- package/dist/agent-src/commands/agents/optimize.md +1 -0
- package/dist/agent-src/commands/agents/user/accept.md +3 -2
- package/dist/agent-src/commands/agents/user/init.md +5 -4
- package/dist/agent-src/commands/agents/user/update.md +3 -2
- package/dist/agent-src/commands/agents/user.md +1 -0
- package/dist/agent-src/commands/agents.md +1 -0
- package/dist/agent-src/commands/analytics/show.md +1 -0
- package/dist/agent-src/commands/analytics.md +1 -0
- package/dist/agent-src/commands/analyze/decision.md +1 -0
- package/dist/agent-src/commands/analyze/incident.md +1 -0
- package/dist/agent-src/commands/analyze/near-miss.md +1 -0
- package/dist/agent-src/commands/analyze/postmortem.md +1 -0
- package/dist/agent-src/commands/analyze/premortem.md +1 -0
- package/dist/agent-src/commands/analyze/reference-repo.md +1 -0
- package/dist/agent-src/commands/analyze.md +3 -2
- package/dist/agent-src/commands/brand/identity.md +6 -5
- package/dist/agent-src/commands/brand/review.md +6 -5
- package/dist/agent-src/commands/brand/strategy.md +6 -4
- package/dist/agent-src/commands/brand/tokens.md +7 -6
- package/dist/agent-src/commands/brand/voice.md +5 -4
- package/dist/agent-src/commands/brand.md +9 -7
- package/dist/agent-src/commands/bug/fix.md +1 -0
- package/dist/agent-src/commands/bug/investigate.md +1 -0
- package/dist/agent-src/commands/bug.md +2 -1
- package/dist/agent-src/commands/challenge-me/vision.md +1 -0
- package/dist/agent-src/commands/challenge-me/with-docs.md +1 -0
- package/dist/agent-src/commands/challenge-me.md +28 -6
- package/dist/agent-src/commands/chat-history.md +1 -0
- package/dist/agent-src/commands/check-current-md.md +1 -0
- package/dist/agent-src/commands/commit.md +1 -0
- package/dist/agent-src/commands/context/create.md +3 -2
- package/dist/agent-src/commands/context.md +1 -0
- package/dist/agent-src/commands/cost/profile.md +1 -0
- package/dist/agent-src/commands/cost.md +2 -1
- package/dist/agent-src/commands/council/analysis.md +1 -0
- package/dist/agent-src/commands/council/debate.md +1 -0
- package/dist/agent-src/commands/council/default.md +21 -20
- package/dist/agent-src/commands/council/design.md +1 -0
- package/dist/agent-src/commands/council/optimize.md +1 -0
- package/dist/agent-src/commands/council/pr.md +1 -0
- package/dist/agent-src/commands/council.md +1 -0
- package/dist/agent-src/commands/estimate-ticket.md +1 -0
- package/dist/agent-src/commands/explain-run.md +88 -0
- package/dist/agent-src/commands/feature/dev.md +1 -0
- package/dist/agent-src/commands/feature/explore.md +1 -0
- package/dist/agent-src/commands/feature/plan.md +1 -0
- package/dist/agent-src/commands/feature/refactor.md +1 -0
- package/dist/agent-src/commands/feature/roadmap.md +1 -0
- package/dist/agent-src/commands/feature.md +2 -1
- package/dist/agent-src/commands/fix/pr-comments.md +19 -0
- package/dist/agent-src/commands/fix.md +2 -1
- package/dist/agent-src/commands/ghostwriter/delete.md +1 -0
- package/dist/agent-src/commands/ghostwriter/fetch.md +1 -0
- package/dist/agent-src/commands/ghostwriter/show.md +1 -0
- package/dist/agent-src/commands/ghostwriter/write.md +1 -0
- package/dist/agent-src/commands/ghostwriter.md +1 -0
- package/dist/agent-src/commands/grill-me.md +17 -12
- package/dist/agent-src/commands/humanize.md +1 -0
- package/dist/agent-src/commands/image/analyse.md +2 -1
- package/dist/agent-src/commands/image/create.md +1 -0
- package/dist/agent-src/commands/image/verify.md +1 -0
- package/dist/agent-src/commands/image.md +16 -12
- package/dist/agent-src/commands/implement-ticket.md +1 -0
- package/dist/agent-src/commands/judge/on-diff.md +1 -0
- package/dist/agent-src/commands/judge/solo.md +1 -0
- package/dist/agent-src/commands/judge/steps.md +1 -0
- package/dist/agent-src/commands/judge.md +1 -0
- package/dist/agent-src/commands/knowledge/cross-repo.md +1 -0
- package/dist/agent-src/commands/knowledge/forget.md +1 -0
- package/dist/agent-src/commands/knowledge/ingest.md +1 -0
- package/dist/agent-src/commands/knowledge/list.md +10 -0
- package/dist/agent-src/commands/knowledge.md +1 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +1 -0
- package/dist/agent-src/commands/memory/mine-session.md +1 -0
- package/dist/agent-src/commands/memory/promote.md +3 -2
- package/dist/agent-src/commands/memory.md +1 -0
- package/dist/agent-src/commands/mission/upgrade.md +45 -24
- package/dist/agent-src/commands/mode.md +1 -0
- package/dist/agent-src/commands/module/create.md +1 -0
- package/dist/agent-src/commands/module/explore.md +1 -0
- package/dist/agent-src/commands/module.md +1 -0
- package/dist/agent-src/commands/optimize/agents-dir.md +1 -0
- package/dist/agent-src/commands/optimize/project.md +1 -0
- package/dist/agent-src/commands/optimize/prompt.md +1 -0
- package/dist/agent-src/commands/optimize.md +2 -1
- package/dist/agent-src/commands/orchestrate.md +1 -0
- package/dist/agent-src/commands/override.md +1 -0
- package/dist/agent-src/commands/package.md +2 -1
- package/dist/agent-src/commands/post-as/ghostwriter.md +1 -0
- package/dist/agent-src/commands/post-as/me.md +1 -0
- package/dist/agent-src/commands/post-as.md +1 -0
- package/dist/agent-src/commands/pr/create/description-only.md +139 -8
- package/dist/agent-src/commands/pr/create.md +35 -22
- package/dist/agent-src/commands/prediction-pool.md +7 -6
- package/dist/agent-src/commands/prepare-for-review.md +1 -0
- package/dist/agent-src/commands/profile/activate.md +1 -0
- package/dist/agent-src/commands/profile/deactivate.md +1 -0
- package/dist/agent-src/commands/profile.md +1 -0
- package/dist/agent-src/commands/project.md +2 -1
- package/dist/agent-src/commands/refine-ticket.md +7 -0
- package/dist/agent-src/commands/research/deep.md +1 -0
- package/dist/agent-src/commands/research.md +1 -0
- package/dist/agent-src/commands/review/routing.md +1 -0
- package/dist/agent-src/commands/review.md +2 -1
- package/dist/agent-src/commands/roadmap/ai-council.md +1 -0
- package/dist/agent-src/commands/roadmap/materialize.md +1 -0
- package/dist/agent-src/commands/roadmap/process-full.md +1 -0
- package/dist/agent-src/commands/roadmap/process-phase.md +1 -0
- package/dist/agent-src/commands/roadmap/process-step.md +1 -0
- package/dist/agent-src/commands/roadmap.md +1 -0
- package/dist/agent-src/commands/security-audit-config.md +2 -1
- package/dist/agent-src/commands/skill/preview.md +1 -0
- package/dist/agent-src/commands/skill.md +1 -0
- package/dist/agent-src/commands/skills/discover.md +1 -0
- package/dist/agent-src/commands/skills.md +1 -0
- package/dist/agent-src/commands/sync/agent-settings.md +1 -0
- package/dist/agent-src/commands/sync.md +2 -1
- package/dist/agent-src/commands/team/adversarial.md +3 -2
- package/dist/agent-src/commands/team/delegate.md +3 -2
- package/dist/agent-src/commands/team/review.md +3 -2
- package/dist/agent-src/commands/team/status.md +49 -18
- package/dist/agent-src/commands/team-knowledge.md +8 -6
- package/dist/agent-src/commands/team.md +21 -16
- package/dist/agent-src/commands/tests/e2e-heal.md +1 -0
- package/dist/agent-src/commands/tests/e2e-plan.md +1 -0
- package/dist/agent-src/commands/tests/execute.md +1 -0
- package/dist/agent-src/commands/tests.md +2 -1
- package/dist/agent-src/commands/update-form-request-messages.md +1 -0
- package/dist/agent-src/commands/upstream-contribute.md +1 -0
- package/dist/agent-src/commands/video/from-script.md +3 -2
- package/dist/agent-src/commands/video/from-song.md +22 -21
- package/dist/agent-src/commands/video/scene.md +1 -0
- package/dist/agent-src/commands/video/stitch.md +2 -1
- package/dist/agent-src/commands/video/storyboard.md +1 -0
- package/dist/agent-src/commands/video.md +1 -0
- package/dist/agent-src/commands/work.md +1 -0
- package/dist/agent-src/commands/worktree/cleanup.md +8 -7
- package/dist/agent-src/commands/worktree/create.md +1 -0
- package/dist/agent-src/commands/worktree/verify.md +1 -0
- package/dist/agent-src/commands/worktree.md +1 -0
- package/dist/agent-src/rules/active-remediation.md +12 -36
- package/dist/agent-src/rules/artifact-drafting-protocol.md +7 -64
- package/dist/agent-src/rules/context-hygiene.md +19 -113
- package/dist/agent-src/rules/design-fidelity.md +4 -60
- package/dist/agent-src/rules/domain-adoption-policy.md +10 -106
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +12 -60
- package/dist/agent-src/rules/improve-before-implement.md +4 -0
- package/dist/agent-src/rules/minimal-safe-diff.md +6 -86
- package/dist/agent-src/rules/size-enforcement.md +10 -0
- package/dist/agent-src/rules/tool-safety.md +17 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +12 -1
- package/dist/agent-src/skills/ai-council/SKILL.md +11 -0
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +24 -2
- package/dist/agent-src/skills/code-review/SKILL.md +105 -93
- package/dist/agent-src/skills/code-review/checklists/backend.md +50 -0
- package/dist/agent-src/skills/code-review/checklists/database.md +19 -0
- package/dist/agent-src/skills/code-review/checklists/dependency.md +18 -0
- package/dist/agent-src/skills/code-review/checklists/docs.md +14 -0
- package/dist/agent-src/skills/code-review/checklists/frontend.md +19 -0
- package/dist/agent-src/skills/code-review/checklists/infra.md +17 -0
- package/dist/agent-src/skills/code-review/checklists/producing-the-review.md +62 -0
- package/dist/agent-src/skills/code-review/checklists/test-only.md +13 -0
- package/dist/agent-src/skills/code-review/evals/evals.json +53 -15
- package/dist/agent-src/skills/condense-memory/SKILL.md +3 -2
- package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +15 -0
- package/dist/agent-src/skills/docker/SKILL.md +10 -0
- package/dist/agent-src/skills/docx-authoring/SKILL.md +102 -0
- package/dist/agent-src/skills/github-ci/evals/evals.json +25 -0
- package/dist/agent-src/skills/humanizer/SKILL.md +79 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +112 -0
- package/dist/agent-src/skills/humanizer/references/fixtures.md +70 -0
- package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +7 -1
- package/dist/agent-src/skills/laravel/SKILL.md +10 -0
- package/dist/agent-src/skills/launch-readiness/SKILL.md +35 -0
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +146 -0
- package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +20 -0
- package/dist/agent-src/skills/merge-conflicts/SKILL.md +30 -0
- package/dist/agent-src/skills/pdf-tools/SKILL.md +101 -0
- package/dist/agent-src/skills/quality-tools/evals/evals.json +15 -0
- package/dist/agent-src/skills/security-audit/SKILL.md +29 -0
- package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +90 -0
- package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +52 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +79 -0
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +11 -3
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +11 -0
- package/dist/agent-src/skills/subagent-orchestration/schemas/team-review-status.json +103 -0
- package/dist/agent-src/skills/terraform/SKILL.md +10 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +31 -0
- package/dist/agent-src/skills/threat-modeling/SKILL.md +15 -0
- package/dist/agent-src/skills/token-optimizer/SKILL.md +10 -4
- package/dist/agent-src/templates/agent-settings.md +28 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
- package/dist/agent-src/templates/scripts/telemetry/engagement.ts +30 -0
- package/dist/agent-src/templates/scripts/telemetry/report_renderer.ts +22 -9
- package/dist/agent-src/templates/scripts/telemetry_record.ts +5 -0
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +4 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +314 -194
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +23 -18
- package/dist/discovery/trust-report.md +8 -8
- package/dist/discovery/workspaces.json +18 -13
- package/dist/install/install.mjs +48 -33
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +4 -1
- package/dist/scripts/_lib/agent_settings.js.map +1 -1
- package/dist/scripts/condense.js +5 -0
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/schemas/settings.js +10 -1
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +9 -2
- package/docs/MIGRATION.md +20 -0
- package/docs/SKILL_CENSUS.md +8 -0
- package/docs/architecture.md +3 -3
- package/docs/benchmark.md +67 -2
- package/docs/catalog.md +2 -2
- package/docs/command-flows.md +1 -1
- package/docs/contracts/agents-layout.md +1 -1
- package/docs/contracts/ai-council-config.md +9 -2
- package/docs/contracts/ai-team-config.md +37 -4
- package/docs/contracts/consumer-bridge.md +55 -63
- package/docs/contracts/install-layout.md +1 -1
- package/docs/contracts/migrate-command.md +1 -1
- package/docs/contracts/prelaunch-diagnostics.md +151 -0
- package/docs/contracts/release-pr-gating.md +1 -0
- package/docs/customization.md +22 -1
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +34 -0
- package/docs/decisions/ADR-049-configuration-trust-boundary.md +9 -1
- package/docs/featured-skills.md +2 -2
- package/docs/getting-started-by-role.md +1 -1
- package/docs/getting-started.md +17 -6
- package/docs/governance-advantage.md +1 -1
- package/docs/guidelines/agent-infra/active-remediation-mechanics.md +45 -0
- package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +28 -0
- package/docs/guidelines/agent-infra/api-cost-levers.md +126 -0
- package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +76 -0
- package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +90 -0
- package/docs/guidelines/agent-infra/domain-adoption-gates.md +112 -0
- package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
- package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +99 -0
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +13 -0
- package/docs/guidelines/design-fidelity-mechanics.md +76 -0
- package/docs/installation.md +2 -1
- package/docs/maintainers/dev-mode.md +3 -2
- package/docs/parity/command-frontmatter.md +60 -0
- package/docs/proof.md +7 -6
- package/package.json +1 -1
- package/src/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
- package/src/agent-src/templates/scripts/telemetry/engagement.ts +30 -0
- package/src/agent-src/templates/scripts/telemetry/report_renderer.ts +22 -9
- package/src/agent-src/templates/scripts/telemetry_record.ts +5 -0
- package/src/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +4 -1
- package/src/config/agent-settings.template.yml +73 -10
- package/src/config/gitignore-block.txt +16 -6
- package/src/config/prelaunch-areas.yml +36 -0
- package/src/scripts/_cli/cmd_conformance.ts +2 -2
- package/src/scripts/_cli/cmd_doctor.ts +280 -39
- package/src/scripts/_cli/cmd_refresh.ts +35 -118
- package/src/scripts/_lib/agent_settings.ts +4 -1
- package/src/scripts/_lib/claude_plugin.ts +77 -2
- package/src/scripts/_lib/orchestration_record.ts +5 -0
- package/src/scripts/_lib/tool_adapter_registry.ts +120 -0
- package/src/scripts/ai_council/clients.ts +68 -6
- package/src/scripts/ai_council/pricing.ts +62 -0
- package/src/scripts/ai_team/config.ts +73 -1
- package/src/scripts/ai_team/review_gate.ts +636 -0
- package/src/scripts/ai_team/team_dispatch.ts +612 -0
- package/src/scripts/bench_ab_task_runner.ts +11 -1
- package/src/scripts/bench_parity_count.ts +279 -0
- package/src/scripts/build_linear_digest.ts +3 -1
- package/src/scripts/check_bridge_derivation.ts +172 -0
- package/src/scripts/check_consumer_scope_flip.ts +179 -0
- package/src/scripts/check_council_config_location.ts +115 -15
- package/src/scripts/check_host_loadability.ts +81 -0
- package/src/scripts/condense.ts +5 -0
- package/src/scripts/council_cli.ts +19 -3
- package/src/scripts/hook_manifest.yaml +12 -1
- package/src/scripts/install.ts +44 -45
- package/src/scripts/lint_agents_layout.ts +10 -4
- package/src/scripts/lint_breaking_changes_index.ts +303 -0
- package/src/scripts/lint_handoffs.ts +42 -0
- package/src/scripts/lint_skill_descriptions.ts +228 -0
- package/src/scripts/lint_skill_descriptions_allowlist.json +1 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +145 -0
- package/src/scripts/lint_skill_scripts_readonly_allowlist.json +8 -0
- package/src/scripts/lint_supported_tools_matrix.ts +35 -0
- package/src/scripts/mcp_server/tools.ts +1 -3
- package/src/scripts/optimize_skill_description.ts +144 -0
- package/src/scripts/orchestration_record.ts +2 -1
- package/src/scripts/prelaunch_diagnostics.ts +248 -0
- package/src/scripts/run_skill_evals.ts +70 -4
- package/src/scripts/schemas/agent-settings.schema.json +17 -0
- package/src/scripts/schemas/command.schema.json +7 -0
- package/src/scripts/schemas/evals.schema.json +105 -14
- package/src/scripts/schemas/prelaunch-report.schema.json +107 -0
- package/src/scripts/schemas/skill.schema.json +18 -1
- package/src/scripts/schemas/subagent.schema.json +6 -0
- package/src/scripts/self_review_gate.test.ts +11 -0
- package/src/scripts/self_review_gate.ts +7 -1
- package/src/scripts/skill_eval_coverage.ts +4 -1
- package/src/scripts/skill_linter.ts +43 -3
- package/src/scripts/smoke_host_loadability.sh +73 -0
- package/src/scripts/team_review_gate_hook.ts +115 -0
- package/src/scripts/trigger_eval_grandfather.json +1 -2
- package/src/scripts/utilization_report.ts +225 -0
- package/src/server/schemas/settings.ts +24 -1
package/docs/benchmark.md
CHANGED
|
@@ -453,7 +453,7 @@ covers only 14/89 rules (operator hand-labelling), a separate gap.
|
|
|
453
453
|
- Runner: `src/scripts/bench_quality_run.ts` (`--dry-run` free / live is
|
|
454
454
|
API-gated); gate: `src/scripts/check_quality_regression.ts` (inert until a
|
|
455
455
|
`quality-run.json` — gitignored — exists locally).
|
|
456
|
-
- Roadmap: `agents/roadmaps/road-to-token-saving.md` Phase 0.
|
|
456
|
+
- Roadmap: `agents/roadmaps/later/road-to-token-saving.md` Phase 0.
|
|
457
457
|
|
|
458
458
|
## Length-neutral judge RERUN (2026-07-12) — SECOND INCONCLUSIVE, gate CLOSED-BY-DIAGNOSIS
|
|
459
459
|
|
|
@@ -492,4 +492,69 @@ anchor-scoring against `must_include`/`must_not`, not pairwise LLM judging).
|
|
|
492
492
|
|
|
493
493
|
- Runner: `src/scripts/bench_quality_rerun.ts` (design-pinned constants:
|
|
494
494
|
band ±15%, κ floor 0.60, ρ flag 0.3, effect floor 10pp; `--max-usd` guard).
|
|
495
|
-
- Roadmap: `agents/roadmaps/road-to-opt-measurement-unblock.md` Phase 1.
|
|
495
|
+
- Roadmap: `agents/roadmaps/archive/road-to-opt-measurement-unblock.md` Phase 1.
|
|
496
|
+
|
|
497
|
+
## Cross-model parity count (2026-07-12) — PASS, `finding_floor` armed
|
|
498
|
+
|
|
499
|
+
The most-deferred portfolio item (cross-model parity eval, deferred across 4+
|
|
500
|
+
roadmaps) landed in its re-scoped form: council-transport execution instead of
|
|
501
|
+
an in-host subagent harness (`docs/design/cross-model-parity-eval.md`). Each
|
|
502
|
+
orchestration-corpus task is rendered self-contained (fixture files inlined)
|
|
503
|
+
and dispatched identically to two vendors; the output contract forces a
|
|
504
|
+
numbered findings list (or `NO FINDINGS`), counted with the **same**
|
|
505
|
+
`_count_findings` the `finding_floor` eval gate uses.
|
|
506
|
+
|
|
507
|
+
| Task | sonnet median | gpt-4o median | Calibrated floor |
|
|
508
|
+
|---|---|---|---|
|
|
509
|
+
| orch-01 multi-file analysis | 11 | 5 | 5 |
|
|
510
|
+
| orch-02 ordered refactor | 5 | 3 | 3 |
|
|
511
|
+
| orch-03 competitive impl | 3 | 0 | 1 (clamp) |
|
|
512
|
+
| pv-01 hollow detection | 2 | 2 | 2 |
|
|
513
|
+
| pv-02 negative control | 0 | 0 | — (control, excluded) |
|
|
514
|
+
|
|
515
|
+
Signal, honestly stated:
|
|
516
|
+
|
|
517
|
+
- **Real cross-vendor gap** — sonnet surfaces ~2× gpt-4o's findings on the
|
|
518
|
+
multi-file analysis task. A floor calibrated on sonnet alone would
|
|
519
|
+
systematically fail gpt-4o; the cross-host lower envelope
|
|
520
|
+
(`max(1, min over hosts of median)`) is the correct floor shape.
|
|
521
|
+
- **Planted defect is vendor-stable** — both vendors cite the hollow
|
|
522
|
+
`charge.ts` (2 findings each, zero variance across repeats).
|
|
523
|
+
- **Negative control perfect** — 0 findings from both vendors on clean code
|
|
524
|
+
across all repeats; the counting contract does not reward spurious findings.
|
|
525
|
+
|
|
526
|
+
Cost: $0.16 actual (30 calls; ceiling $8 authorized). `finding_floor` is now an
|
|
527
|
+
**enforcing** gate (comment flipped in `run_skill_evals.ts`); calibration data
|
|
528
|
+
in `internal/bench/reports/parity-count.json`.
|
|
529
|
+
|
|
530
|
+
- Runner: `src/scripts/bench_parity_count.ts` (pre-registered: 3 repeats,
|
|
531
|
+
2 vendors, envelope floor rule, controls excluded, `--max-usd` abort).
|
|
532
|
+
- Roadmap: `agents/roadmaps/archive/road-to-opt-measurement-unblock.md` Phase 3.
|
|
533
|
+
|
|
534
|
+
## Non-Claude lift replication, second vendor host (2026-07-12) — HONEST NULL
|
|
535
|
+
|
|
536
|
+
The `discipline_profile: auto` flip gate required a replicated lift on a
|
|
537
|
+
non-Claude host. Executed per the parked design (paired vanilla vs
|
|
538
|
+
`rules-kernel-dc` = the essential cut, 30 tasks × 3 seeds) on the codex CLI
|
|
539
|
+
host with `gpt-5.5` (ChatGPT account).
|
|
540
|
+
|
|
541
|
+
- **Capability:** 92% → 89% (McNemar p = 1.0) — no effect.
|
|
542
|
+
- **Discipline:** 1.000 → 0.892 (Δ = −0.108, Wilcoxon p = 0.0225 on 7
|
|
543
|
+
non-zero pairs) — no lift; directionally **negative** on this host.
|
|
544
|
+
- **Verdict:** NO replicated lift. `discipline_profile` keeps its
|
|
545
|
+
vendor-granular default (`unknown_defaults`, no `auto` flip) — consistent
|
|
546
|
+
with the 2026-07-10 two-host precedent (claude strong-host ceilings) and
|
|
547
|
+
the earlier gpt-5-mini replication failure on the same injection surface.
|
|
548
|
+
|
|
549
|
+
Limitations, published: the ChatGPT-account usage limit rejected 100 of 180
|
|
550
|
+
runs mid-corpus (plus 2 timeouts), leaving n = 37 valid pairs — the
|
|
551
|
+
truncation is **balanced across arms** (50/52), so it weakens power but does
|
|
552
|
+
not bias the comparison. An earlier same-day fire misfired entirely (model
|
|
553
|
+
pin omitted → all runs API-rejected, $0) and is excluded as a harness error,
|
|
554
|
+
not evidence. Raw report is local-only by design
|
|
555
|
+
(`internal/bench/reports/ab-v2/` is gitignored); this section + the roadmap
|
|
556
|
+
notes are the durable record. Re-open path: a full uncapped 180-run
|
|
557
|
+
replication on a per-token-billed key.
|
|
558
|
+
|
|
559
|
+
- Runner: `src/scripts/bench_ab_v2_run.ts --host codex` (checkpoint-resumable).
|
|
560
|
+
- Roadmap: `agents/roadmaps/archive/road-to-opt-measurement-unblock.md` Phase 2.
|
package/docs/catalog.md
CHANGED
|
@@ -569,11 +569,11 @@ are excluded.
|
|
|
569
569
|
| command | [`team-knowledge`](../dist/agent-src/commands/team-knowledge.md) | cluster: team-knowledge | Team-knowledge orchestrator — routes to consolidate and bootstrap |
|
|
570
570
|
| command | [`team-knowledge-bootstrap`](../dist/agent-src/commands/team-knowledge/bootstrap.md) | cluster: team-knowledge | One-shot deterministic seed for a fresh project's knowledge layer — stages template pages from real config/directory detection, never LLM-invented claims. Review-then-commit. |
|
|
571
571
|
| command | [`team-knowledge-consolidate`](../dist/agent-src/commands/team-knowledge/consolidate.md) | cluster: team-knowledge | Review pending typed knowledge-observation events and file them into agents/knowledge/ pages as a human-reviewed batch — never writes without approval. |
|
|
572
|
-
| command | [`team`](../dist/agent-src/commands/team.md) | cluster: team | Team orchestrator — cross-model
|
|
572
|
+
| command | [`team`](../dist/agent-src/commands/team.md) | cluster: team | Team orchestrator — governed cross-model access layer (a second strong model reviews the real diff; read-only multi-host fallback); routes to review, adversarial, delegate, status |
|
|
573
573
|
| command | [`team-adversarial`](../dist/agent-src/commands/team/adversarial.md) | cluster: team | Thin wrapper — adversarial cross-model review on a named focus via the official plugin (/codex:adversarial-review). Escalation rung above the single-model adversarial-review skill. |
|
|
574
574
|
| command | [`team-delegate`](../dist/agent-src/commands/team/delegate.md) | cluster: team | Thin wrapper — hand a task to the second model as a native worker via the official plugin (/codex:rescue). The only write-access wrapper; double-gated behind ai_team.allow_delegate. |
|
|
575
575
|
| command | [`team-review`](../dist/agent-src/commands/team/review.md) | cluster: team | Thin wrapper — cross-model review of the current diff via the official plugin (/codex:review). Gated on ai_team.enabled; fails closed when the plugin is absent. |
|
|
576
|
-
| command | [`team-status`](../dist/agent-src/commands/team/status.md) | cluster: team | Thin wrapper — plugin job status via /codex:status plus a
|
|
576
|
+
| command | [`team-status`](../dist/agent-src/commands/team/status.md) | cluster: team | Thin wrapper — plugin job status via /codex:status plus a quota block showing the shared openai counter against both ceilings (team + council). Gated on ai_team.enabled; fails closed when the plugin… |
|
|
577
577
|
| command | [`tests`](../dist/agent-src/commands/tests.md) | cluster: tests | Tests orchestrator — routes to create, execute, e2e-plan, e2e-heal |
|
|
578
578
|
| command | [`tests-create`](../dist/agent-src/commands/tests/create.md) | cluster: tests | Write meaningful tests for the current branch — stack-adaptive (pest / phpunit / vitest / jest / pytest / …) |
|
|
579
579
|
| command | [`tests-e2e-heal`](../dist/agent-src/commands/tests/e2e-heal.md) | cluster: tests | Find, debug, and fix failing Playwright E2E tests |
|
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
|
+
**184 commands** across **10 surfaces** (4 user-work flows + 6 platform/domain surfaces).
|
|
11
11
|
|
|
12
12
|
## User-work flows
|
|
13
13
|
|
|
@@ -100,7 +100,7 @@ After `agent-config migrate`, a consumer project's `agents/` contains only:
|
|
|
100
100
|
| Entry | Rationale |
|
|
101
101
|
|---|---|
|
|
102
102
|
| `overrides/` | Per-project skill/rule customisation |
|
|
103
|
-
| `.event4u-bridge.yml` | ADR-020
|
|
103
|
+
| `.event4u-bridge.yml` | Retired (ADR-020 amendment 2026-07-13); global root resolves from `~/.event4u/agent-config`. Legacy leftover only — deleted by installer / `refresh --project`. |
|
|
104
104
|
| `.gitkeep` | Keeps `agents/` in the tree |
|
|
105
105
|
| `knowledge/` | Optional: curated project-specific knowledge pages |
|
|
106
106
|
| `memory/` | Optional: promotion pipeline (intake gitignored, curated YAML committed) |
|
|
@@ -787,11 +787,18 @@ error) when any of these hold:
|
|
|
787
787
|
|
|
788
788
|
## Migration footprint (Phase 0)
|
|
789
789
|
|
|
790
|
+
> Historical record of the Step-2 consolidation. **The project-local file
|
|
791
|
+
> described below is no longer read** — ADR-104 (superseding ADR-093) moved
|
|
792
|
+
> the council config to the user-global location documented at the top of
|
|
793
|
+
> this contract. A `.ai-council.yml` under any project `agents/` tree is
|
|
794
|
+
> ignored. Read this section for provenance only, not for placement.
|
|
795
|
+
|
|
790
796
|
- `.agent-settings.yml` → 14-key inventory under `ai_council:` removed
|
|
791
797
|
after a one-line breadcrumb comment is in place pointing at this
|
|
792
798
|
contract.
|
|
793
799
|
- `.agent-settings.template.yml` → same removal.
|
|
794
|
-
- New file `agents/settings/.ai-council.yml` checked in with two enabled
|
|
800
|
+
- New file `agents/settings/.ai-council.yml` checked in with two enabled <!-- council-config-allowed -->
|
|
795
801
|
providers (anthropic + openai) and three disabled
|
|
796
802
|
(gemini + xai + perplexity). Models pre-filled from the Phase 0
|
|
797
|
-
default set; comments mirror this contract.
|
|
803
|
+
default set; comments mirror this contract. *(This project-tracked file
|
|
804
|
+
was later removed; per ADR-104 the config is user-global only.)*
|
|
@@ -47,6 +47,9 @@ ai_team:
|
|
|
47
47
|
allow_delegate: <bool> # second opt-in for the write path, default false
|
|
48
48
|
max_calls_per_day: <int >= 0> # default 50; counts into the shared openai bucket
|
|
49
49
|
suppress_setup_hint: <bool> # default false; cosmetic wizard-hint suppression
|
|
50
|
+
review_gate: # managed governance of the plugin's Stop-hook Review Gate
|
|
51
|
+
managed: <bool> # default false = byte-identical pre-Phase-4 behavior
|
|
52
|
+
max_consecutive_blocks: <int >= 1> # default 3; circuit-breaker loop bound
|
|
50
53
|
```
|
|
51
54
|
|
|
52
55
|
| Key | Type | Default | Semantics |
|
|
@@ -56,6 +59,8 @@ ai_team:
|
|
|
56
59
|
| `allow_delegate` | bool | `false` | Second opt-in for the **only** wrapper that delegates write access (`/team:delegate`). Refuses with an enable pointer until BOTH `enabled` and `allow_delegate` are `true`. |
|
|
57
60
|
| `max_calls_per_day` | int ≥ 0 | `50` | Per-day ceiling on team calls, read against the **shared** `cli_call_budget` openai bucket (see § Quota). `0` blocks all team calls. |
|
|
58
61
|
| `suppress_setup_hint` | bool | `false` | Suppress the one-line wizard/init recommendation to install the codex plugin on Claude-Code hosts. Cosmetic only. |
|
|
62
|
+
| `review_gate.managed` | bool | `false` | Managed governance of the codex plugin's Stop-hook Review Gate (Phase 4). `false` = no counting, no circuit breaker — the Stop path is byte-identical to pre-Phase-4 dispatch. `true` = consecutive BLOCK verdicts are counted per session (first-line `ALLOW:`/`BLOCK:` contract of the gate transcript; anything else is honestly `UNKNOWN` and never counted) and the circuit breaker trips at the bound. |
|
|
63
|
+
| `review_gate.max_consecutive_blocks` | int ≥ 1 | `3` | Circuit-breaker bound. At this many CONSECUTIVE BLOCKs in one session a visible notice is injected **exactly once** and the managed layer stops re-blocking — the user decides, never an infinite Claude↔Codex loop. An ALLOW verdict resets the counter. Unknown keys inside `review_gate` are rejected fail-closed, same as the parent block. |
|
|
59
64
|
|
|
60
65
|
### Why `model: 'auto'` instead of a pinned ID
|
|
61
66
|
|
|
@@ -68,10 +73,14 @@ default, and only the codex CLI knows what that currently is. `'auto'`
|
|
|
68
73
|
therefore delegates the choice to the CLI; a set value is a user pin and
|
|
69
74
|
passes through verbatim — the loader never rewrites or "corrects" it.
|
|
70
75
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
**`review_gate` (Phase 4, shipped):** the loop-bound governance block is
|
|
77
|
+
live — module `src/scripts/ai_team/review_gate.ts` (counter state under
|
|
78
|
+
`agents/runtime/state/team-review-gate.json`, ledger under
|
|
79
|
+
`agents/runtime/team/events.log`, one `team.gate: BLOCK 2/3` /
|
|
80
|
+
`ALLOW reset` line per gate verdict). The gate itself stays upstream's;
|
|
81
|
+
upstream's own warning applies while it is enabled unmanaged: "The
|
|
82
|
+
review gate can create a long-running Claude/Codex loop and may drain
|
|
83
|
+
usage limits quickly." Any other key stays rejected fail-closed.
|
|
75
84
|
|
|
76
85
|
## Role semantics — the council-verdict design constraint
|
|
77
86
|
|
|
@@ -141,6 +150,30 @@ same *counter*: whichever path a call takes, it increments the one shared
|
|
|
141
150
|
bucket, and each surface enforces its own configured cap against that
|
|
142
151
|
shared count.
|
|
143
152
|
|
|
153
|
+
**Worked example — two ceilings, one counter.** Council ceiling
|
|
154
|
+
`cli_call_budget.max_calls_per_day.openai: 100`, team ceiling
|
|
155
|
+
`ai_team.max_calls_per_day: 50`, shared counter at 45 openai calls today:
|
|
156
|
+
both paths are open. Five team calls later the counter reads 50 — team
|
|
157
|
+
calls are now blocked (50 >= 50) while council CLI calls continue until
|
|
158
|
+
the counter reaches 100. Whichever path fires a call, the same counter
|
|
159
|
+
moves; each surface only decides where *its* ceiling sits on that shared
|
|
160
|
+
count. `/team status` renders exactly this state: the live counter, both
|
|
161
|
+
ceilings, and which path (if any) is currently blocked.
|
|
162
|
+
|
|
163
|
+
### Team-review envelope
|
|
164
|
+
|
|
165
|
+
Every `/team:review` return — plugin path and multi-host fallback alike — is emitted in the
|
|
166
|
+
team-review status envelope (`src/skills/subagent-orchestration/schemas/team-review-status.json`),
|
|
167
|
+
which extends the `subagent-status.json` frame: `status` (`DONE | DONE_WITH_CONCERNS |
|
|
168
|
+
NEEDS_CONTEXT | BLOCKED`), `findings[]` (`severity`/`evidence`/`suggested_fix`/`location?`),
|
|
169
|
+
`reviewed_ref` (HEAD sha of the bundle), `model` (`'auto'` = codex CLI default), and
|
|
170
|
+
`quota` (`{used, ceiling}` on the shared `cli_call_budget` openai bucket); unparseable model
|
|
171
|
+
output is preserved verbatim in `raw` with status `DONE_WITH_CONCERNS` — never silently dropped.
|
|
172
|
+
Plugin text is summarized INTO the envelope and preserved verbatim beneath — never rewritten.
|
|
173
|
+
<!-- PLACEHOLDER: the team-review-envelope subsection (review-gate ledger
|
|
174
|
+
line format `team.gate: BLOCK n/N` read by /team status) is inserted
|
|
175
|
+
here by the orchestrator in a later step. Do not remove this marker. -->
|
|
176
|
+
|
|
144
177
|
## Validation rules (fail-closed)
|
|
145
178
|
|
|
146
179
|
`load_ai_team_config` / `build_ai_team_config`
|
|
@@ -1,81 +1,73 @@
|
|
|
1
1
|
---
|
|
2
|
-
stability:
|
|
3
|
-
keep-beta-until: 2026-08-21
|
|
2
|
+
stability: stable
|
|
4
3
|
---
|
|
5
4
|
|
|
6
|
-
# Consumer Bridge Marker
|
|
5
|
+
# Consumer Bridge Marker (retired)
|
|
7
6
|
|
|
8
|
-
**Status:**
|
|
7
|
+
**Status:** Retired — [`ADR-020 § Amendment 2026-07-13`](../decisions/ADR-020-global-only-consumer-scope.md#amendment--2026-07-13--bridge-marker-retired).
|
|
9
8
|
**Pairs with:** [`ADR-020 — global-only consumer scope`](../decisions/ADR-020-global-only-consumer-scope.md), [`ADR-007 § Amendment 2026-05-13`](../decisions/ADR-007-agent-discovery-scopes.md#amendment-2026-05-13--augment-global-only).
|
|
10
9
|
|
|
11
|
-
##
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
10
|
+
## Why it was retired
|
|
11
|
+
|
|
12
|
+
The bridge marker `agents/.event4u-bridge.yml` was a per-project file that
|
|
13
|
+
pointed at the global install. It carried **no project-specific data**:
|
|
14
|
+
`global_root` is always the well-known `~/.event4u/agent-config` (one global
|
|
15
|
+
install per machine), and nothing in the codebase ever read the field — the
|
|
16
|
+
loader, doctor, and conformance checks all derive the global root independently
|
|
17
|
+
via `user_global_paths.event4u_root()`. Yet the marker was **committed** to the
|
|
18
|
+
shared project tree and rewrote its volatile `installed_at` / `installer_version`
|
|
19
|
+
fields on every install, so each developer's install produced a diff and
|
|
20
|
+
overwrote every other developer's committed copy. A file whose scope (global)
|
|
21
|
+
did not match its location (per-project, committed) — pure churn.
|
|
22
|
+
|
|
23
|
+
It is retired: the global root is resolved directly from the well-known path.
|
|
24
|
+
|
|
25
|
+
## What replaced it
|
|
26
|
+
|
|
27
|
+
- **Global-root resolution** — `user_global_paths.event4u_root()` returns
|
|
28
|
+
`~/.event4u/agent-config` (overridable via `EVENT4U_CONFIG_HOME`). Readers fail
|
|
29
|
+
closed when that path is missing on disk. No per-project pointer is consulted.
|
|
30
|
+
- **Migration-idempotency sentinel** — moved to
|
|
31
|
+
`agents/.agent-state/install-mode.txt` (written on every full / minimal
|
|
32
|
+
install), which the installer's legacy-detection and the doctor's
|
|
33
|
+
"global-only consumer" branch key on. `agents/overrides/` is an equivalent
|
|
34
|
+
signal.
|
|
35
|
+
- **Project anchor** — a bare consumer `agents/` directory is anchored on
|
|
36
|
+
`agents/overrides/` (the guaranteed minimal-consumer surface), not the marker.
|
|
37
|
+
- **Cleanup** — the installer and `agent-config refresh --project` delete any
|
|
38
|
+
legacy `agents/.event4u-bridge.yml` a prior install committed; the managed
|
|
39
|
+
`.gitignore` block also ignores it so a stale copy is never re-committed.
|
|
40
|
+
|
|
41
|
+
## Per-tool anchor strategy (still active)
|
|
42
|
+
|
|
43
|
+
Some AI tools only load rules when an anchor file is **inside** the workspace
|
|
44
|
+
(Windsurf, Cline, Gemini-CLI). For those IDs the installer plants a thin pointer
|
|
45
|
+
file under the tool's per-project directory:
|
|
28
46
|
|
|
29
47
|
```yaml
|
|
30
48
|
schema: event4u-bridge/v1
|
|
49
|
+
tool: windsurf
|
|
31
50
|
global_root: ~/.event4u/agent-config
|
|
32
|
-
installed_at: 2026-
|
|
33
|
-
installer_version: 2.4.0
|
|
51
|
+
installed_at: 2026-07-13T00:00:00Z
|
|
34
52
|
```
|
|
35
53
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
Unknown fields are ignored by `v1` readers (forward-compat).
|
|
46
|
-
|
|
47
|
-
## Reader contract
|
|
48
|
-
|
|
49
|
-
Per-tool adapters MUST:
|
|
50
|
-
|
|
51
|
-
1. Read `agents/.event4u-bridge.yml` from the project root. <!-- ref-ignore -->
|
|
52
|
-
2. Reject `schema != event4u-bridge/v1` with a clear error pointing at this contract.
|
|
53
|
-
3. Expand `~` in `global_root` against the **current process's** `$HOME` (not the writer's).
|
|
54
|
-
4. Fail closed if `global_root` is missing on disk — never silently fall back to project-local lookup.
|
|
55
|
-
5. Treat the marker as **read-only data**. Adapters MUST NOT write back through it.
|
|
56
|
-
|
|
57
|
-
## Writer contract
|
|
58
|
-
|
|
59
|
-
`scripts/install.py` MUST:
|
|
60
|
-
|
|
61
|
-
1. Write the marker atomically (temp file + rename) so a crash never leaves a half-formed pointer.
|
|
62
|
-
2. Refresh `installed_at` + `installer_version` on every consumer-scope install.
|
|
63
|
-
3. Use `0644` permissions (world-readable, owner-writable). The marker contains no secrets.
|
|
64
|
-
4. Skip the write under `AGENT_CONFIG_DEV_MODE=1` — maintainer dev installs never lay the bridge into the source repo (this repo's `agents/` directory is the project surface, not a consumer surface).
|
|
65
|
-
|
|
66
|
-
The marker is (re-)written by the consumer install, by the wizard's apply step, and by `agent-config refresh --project` — which also scaffolds `agents/overrides/` and syncs the managed `agents/` block in `.gitignore` (the full minimal project surface, no wizard). `refresh --project` no-ops inside an agent-config checkout (same source-repo guard as rule 4).
|
|
67
|
-
|
|
68
|
-
## Per-tool anchor strategy
|
|
69
|
-
|
|
70
|
-
Some AI tools only load rules when an anchor file is **inside** the workspace (Windsurf, Cline, Gemini-CLI). For those IDs, Phase 4.3 plants a thin pointer file under the tool's per-project directory whose body resolves to the bridge marker. Tools that load purely from user-scope (Claude Code, Cursor, Augment) read the marker once and need no per-tool file.
|
|
54
|
+
- Files: `.windsurf/agent-config.bridge.yml`, `.clinerules/agent-config.bridge.yml`,
|
|
55
|
+
`.gemini/agent-config.bridge.yml`.
|
|
56
|
+
- `global_root` is the well-known path (readers expand `~` against the current
|
|
57
|
+
`$HOME`, never the writer's). There is no `bridge:` back-pointer — the retired
|
|
58
|
+
marker no longer exists to point at.
|
|
59
|
+
- These anchors are **gitignored**: each developer regenerates them on install,
|
|
60
|
+
so they never churn in version control. Tools that load purely from user scope
|
|
61
|
+
(Claude Code, Cursor, Augment) need no per-tool file.
|
|
71
62
|
|
|
72
|
-
##
|
|
63
|
+
## Legacy reader note
|
|
73
64
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
65
|
+
A `v1` marker left in an un-migrated consumer repo still parses as before
|
|
66
|
+
(`schema: event4u-bridge/v1`, `~`-expanded `global_root`). Do not add new readers
|
|
67
|
+
of it — resolve the global root from the well-known path instead. The next
|
|
68
|
+
install removes it.
|
|
77
69
|
|
|
78
70
|
## References
|
|
79
71
|
|
|
80
|
-
- [`ADR-020`](../decisions/ADR-020-global-only-consumer-scope.md) — global-only consumer scope
|
|
72
|
+
- [`ADR-020`](../decisions/ADR-020-global-only-consumer-scope.md) — global-only consumer scope + the 2026-07-13 retirement amendment.
|
|
81
73
|
- [`ADR-007`](../decisions/ADR-007-agent-discovery-scopes.md) — scope precedence and the global-default amendment.
|
|
@@ -72,7 +72,7 @@ run writes only the subset for the selected scope + tools.
|
|
|
72
72
|
|---|---|---|
|
|
73
73
|
| `<root>/agents/settings/.agent-settings.yml` | deployed | canonical YAML settings (ADR-038) |
|
|
74
74
|
| `<root>/.agent-settings.yml` | deployed | legacy fallback; migrated then removed on first run |
|
|
75
|
-
| `<root>/agents/.event4u-bridge.yml` |
|
|
75
|
+
| `<root>/agents/.event4u-bridge.yml` | retired | Retired (ADR-020 amendment 2026-07-13); no longer written. Global root resolves from `~/.event4u/agent-config`; installer / `refresh --project` delete any legacy leftover. |
|
|
76
76
|
| `<root>/agents/.agent-state/install-mode.txt` | marker | `minimal\n` or `full\n` |
|
|
77
77
|
|
|
78
78
|
Minimal-install scaffold (override layer): `agents/overrides/{rules,skills,commands}/.gitkeep`,
|
|
@@ -178,7 +178,7 @@ intentionally **outside** the unified `migrate` command:
|
|
|
178
178
|
| Write a fresh `.agent-settings.yml` | wizard (`agent-config setup`) | Same as above — the wizard is the source of truth for new project config. |
|
|
179
179
|
| Run the perms gate (`lint_global_paths.py`) | `agent-config doctor` | Migration deletes project-local state; the perms audit is a separate diagnostic on the global tree. |
|
|
180
180
|
| `.legacy-pre-global-only/<stamp>/` snapshot | (removed) | Snapshot-and-rollback was a `migrate-to-global` semantic. The deletion path needs no snapshot — git history is the rollback surface. |
|
|
181
|
-
| `agents/.event4u-bridge.yml`
|
|
181
|
+
| `agents/.event4u-bridge.yml` legacy marker removal | `install.py` | Marker is retired (ADR-020 amendment 2026-07-13); install now deletes any legacy leftover instead of writing it. Global root resolves from `~/.event4u/agent-config`. |
|
|
182
182
|
| `settings:migrate` (read-only copy of project YAML into global) | (removed; superseded by wizard) | The read-only copy was a stepping stone for the destructive move. With the deletion policy, neither step survives. |
|
|
183
183
|
|
|
184
184
|
## Exit codes
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Pre-Launch Diagnostics — finding IDs, epistemics, regression gate
|
|
2
|
+
|
|
3
|
+
> Contract for the consumer-facing launch diagnostic
|
|
4
|
+
> (road-to-ecosystem-harvest-prelaunch-diagnostics, Source L — a
|
|
5
|
+
> production-readiness diagnostic skill; provenance in the harvest index).
|
|
6
|
+
> The consumer-side sibling of the suite's own claims-ledger: a "ready"
|
|
7
|
+
> verdict cannot be reached by assertion.
|
|
8
|
+
>
|
|
9
|
+
> Schema: [`prelaunch-report.schema.json`](../../src/scripts/schemas/prelaunch-report.schema.json) ·
|
|
10
|
+
> Area vocabulary: [`prelaunch-areas.yml`](../../src/config/prelaunch-areas.yml) ·
|
|
11
|
+
> Tooling: [`prelaunch_diagnostics.ts`](../../src/scripts/prelaunch_diagnostics.ts) ·
|
|
12
|
+
> Skill surface: [`launch-readiness`](../../src/skills/launch-readiness/SKILL.md).
|
|
13
|
+
|
|
14
|
+
## 1 — Finding-ID grammar (immutable, diff-stable)
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
AC-<AREA>-NNN e.g. AC-AUTH-003, AC-RBK-001
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
- `<AREA>` — the uppercase code of a coverage area from
|
|
21
|
+
[`prelaunch-areas.yml`](../../src/config/prelaunch-areas.yml). The vocabulary
|
|
22
|
+
is **append-only**: codes are never renamed or re-used.
|
|
23
|
+
- `NNN` — zero-padded, monotonically assigned per area, **never re-assigned**.
|
|
24
|
+
A finding that is retitled, re-scoped, or resolved keeps its ID forever; a
|
|
25
|
+
genuinely new problem gets the next number. Resolved findings stay in the
|
|
26
|
+
report with a flipped `status` — the entry never disappears, so baselines
|
|
27
|
+
diff cleanly across months.
|
|
28
|
+
- The **ID is the diff key**. Titles, evidence, and severity are mutable
|
|
29
|
+
metadata; two runs are compared by ID set + per-ID state, never by prose.
|
|
30
|
+
|
|
31
|
+
## 2 — Epistemics (Pass needs evidence; Unknown ≠ Pass)
|
|
32
|
+
|
|
33
|
+
Every coverage area carries exactly one state:
|
|
34
|
+
|
|
35
|
+
| State | Meaning | Requirement |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| `pass` | Diagnosed clean | **Cited evidence required** — file:line, command output, run URL. A pass without evidence fails validation: that is assertion, not diagnosis. |
|
|
38
|
+
| `finding` | At least one open finding | The finding IDs live in `findings[]`. |
|
|
39
|
+
| `unknown` | Not diagnosed | The honest default. **Absence of findings is `unknown`, never an automatic `pass`.** An area missing from the report entirely is `unknown` by definition. |
|
|
40
|
+
| `not-applicable` | Does not exist on this surface | **Reason required** ("no DB → no migrations"). |
|
|
41
|
+
|
|
42
|
+
Verdict rule (the launch gate):
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
ANY OPEN P0 FINDING → NOT READY, REGARDLESS OF EVERY OTHER AREA.
|
|
46
|
+
ANY OPEN P1, OR A launch_gate AREA NOT AT pass/not-applicable → NOT READY.
|
|
47
|
+
READY IS THE RESIDUAL STATE, NEVER THE DEFAULT.
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
`launch_gate: true` areas (auth, migrations, secrets, rollback) block the
|
|
51
|
+
verdict while `unknown`; non-gate areas (observability, agent-governance)
|
|
52
|
+
surface as unknowns + questions but do not block alone.
|
|
53
|
+
|
|
54
|
+
## 3 — Coverage backbone
|
|
55
|
+
|
|
56
|
+
The area vocabulary is deliberately pruned to the stacks this suite targets:
|
|
57
|
+
**auth · migrations · secrets · observability · rollback · agent-governance**.
|
|
58
|
+
It is not a generic compliance matrix — new areas enter by appending to
|
|
59
|
+
`prelaunch-areas.yml` with a maintainer-reviewed `launch_gate` decision.
|
|
60
|
+
|
|
61
|
+
Every report may carry a `questions` list — **questions that would change the
|
|
62
|
+
diagnosis** ("is the admin panel exposed on the same origin?"). Questions are
|
|
63
|
+
the actionable rendering of unknowns; the next run should convert them into
|
|
64
|
+
evidence or findings.
|
|
65
|
+
|
|
66
|
+
## 4 — Regression gate (findings diff)
|
|
67
|
+
|
|
68
|
+
`prelaunch_diagnostics.ts diff <baseline.json> <current.json>` compares two
|
|
69
|
+
reports **by ID**:
|
|
70
|
+
|
|
71
|
+
- **new** — ID in current, not in baseline.
|
|
72
|
+
- **resolved** — open in baseline, `fixed` in current.
|
|
73
|
+
- **regressed** — a `launch_gate` area that was `pass` in the baseline and is
|
|
74
|
+
`finding`/`unknown` in current (Pass→Finding flip).
|
|
75
|
+
- **retitled findings do not appear in the diff** — the ID survives the
|
|
76
|
+
rename (acceptance-tested).
|
|
77
|
+
|
|
78
|
+
`--ci` mode exits non-zero when the diff contains a **new open P0/P1** or a
|
|
79
|
+
**Pass→Finding flip in a launch-gate area** — the consumer-side sibling of the
|
|
80
|
+
suite's claims-ledger CI. Everything else (new P2/P3, resolved findings,
|
|
81
|
+
question churn) reports informationally and exits 0.
|
|
82
|
+
|
|
83
|
+
## 5 — Suppression (evidence-backed, never silent)
|
|
84
|
+
|
|
85
|
+
A consumer may suppress a finding via the project-local suppression file
|
|
86
|
+
`agents/settings/prelaunch-suppressions.yml`:
|
|
87
|
+
|
|
88
|
+
```yaml
|
|
89
|
+
schema_version: prelaunch-suppressions-v1
|
|
90
|
+
suppressions:
|
|
91
|
+
- id: AC-OBS-002
|
|
92
|
+
reason: "Dashboards land with the Q3 observability epic; alerting for the launch path exists."
|
|
93
|
+
evidence: "agents/evidence/prelaunch/obs-alerting.png"
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
- A finding with `status: suppressed-with-evidence` MUST have a matching
|
|
97
|
+
suppression entry carrying **both** `reason` and `evidence` — validation
|
|
98
|
+
fails otherwise.
|
|
99
|
+
- Suppressed findings are excluded from the `--ci` triggers but **render in a
|
|
100
|
+
collapsible "suppressed" section** of the report output — the same
|
|
101
|
+
transparency contract as the review cluster's dropped-false-positives list.
|
|
102
|
+
Suppression hides nothing; it moves the item behind a fold with its receipt.
|
|
103
|
+
- Suppressing a P0 does not restore a ready verdict — P0 caps the verdict
|
|
104
|
+
regardless (§ 2).
|
|
105
|
+
|
|
106
|
+
## 6 — Consumer recipe (opt-in CI gating)
|
|
107
|
+
|
|
108
|
+
1. Run the diagnostic (via `launch-readiness` § epistemics) and save the
|
|
109
|
+
report to `agents/evidence/prelaunch/baseline.json`. Commit it.
|
|
110
|
+
2. Before a launch, produce a fresh `current.json` and run
|
|
111
|
+
`prelaunch_diagnostics.ts diff baseline.json current.json --ci` in the
|
|
112
|
+
pipeline — red on a new P0/P1 or a launch-gate Pass→Finding flip.
|
|
113
|
+
3. After the launch settles, promote `current.json` to the new committed
|
|
114
|
+
baseline (a reviewed diff, like any lockfile bump).
|
|
115
|
+
|
|
116
|
+
## 7 — Fix-loop discipline (Phase 3)
|
|
117
|
+
|
|
118
|
+
- Rank open findings by severity, then by launch-gate membership.
|
|
119
|
+
- Propose the **safest first approval batch** — explicitly the first *safe*
|
|
120
|
+
batch (reversible, small blast radius), not the full backlog. Approval is
|
|
121
|
+
the user's; the diagnostic never self-authorizes fixes
|
|
122
|
+
([`autonomous-execution`](../../src/rules/autonomous-execution.md) and the
|
|
123
|
+
reversibility floor govern, unrestated).
|
|
124
|
+
- Per-finding status vocabulary (schema-enforced): `open · fixed ·
|
|
125
|
+
accepted-risk · deferred-with-reason · suppressed-with-evidence ·
|
|
126
|
+
not-applicable` — everything except open/fixed carries a `reason`.
|
|
127
|
+
- **Rescore whenever evidence changes** — a fix, a new probe, or an answered
|
|
128
|
+
question re-runs the affected area, never the memory of it.
|
|
129
|
+
|
|
130
|
+
## 8 — Read-only guarantee
|
|
131
|
+
|
|
132
|
+
The diagnostic **never mutates a consumer project**: the tooling reads
|
|
133
|
+
reports and writes nothing outside its own output. Fixes flow through the
|
|
134
|
+
normal approval-gated engines, not through this contract.
|
|
135
|
+
|
|
136
|
+
## 9 — Score: council-locked (do not add)
|
|
137
|
+
|
|
138
|
+
The pass-1 council **dropped the 0–100 readiness score** (gameable false
|
|
139
|
+
precision). A severity-capped, never-published internal-ordering variant is
|
|
140
|
+
**surfaced for council re-evaluation in the roadmap's revisit note — not
|
|
141
|
+
adopted**. Until that revisit resolves: no numeric score field in the schema,
|
|
142
|
+
no score in any rendered output, no score in CI messages. The ID scheme,
|
|
143
|
+
epistemics, diff gate, and suppression above stand on their own.
|
|
144
|
+
|
|
145
|
+
## See also
|
|
146
|
+
|
|
147
|
+
- [`launch-readiness`](../../src/skills/launch-readiness/SKILL.md) — the skill
|
|
148
|
+
surface that produces the report.
|
|
149
|
+
- [`docs/proof.md`](../proof.md) — the suite-side claims-ledger this mirrors.
|
|
150
|
+
- `road-to-ecosystem-harvest-reliability-measurement` (archived) — measures the
|
|
151
|
+
*suite itself*; this contract measures the *consumer's launch surface*.
|
|
@@ -81,6 +81,7 @@ the feature-PR floor by adding:
|
|
|
81
81
|
| `release-validation.yml` (Phase B) | `changelog-entry` | CHANGELOG carries an entry matching the head-branch version |
|
|
82
82
|
| `release-validation.yml` (Phase B) | `version-consistency` | `package.json` / `marketplace.json` / pack manifests agree on the version |
|
|
83
83
|
| `consumer-matrix.yml` | `consumer-matrix` · `publish-dry-run` · `mcp-worker-dry-run` · `plugin-bootstrap` | pack-based consumer E2E + pre-tag dry-runs of the release-adjacent workflows — see the exemption note below |
|
|
84
|
+
| (maintainer-local) | `task smoke-host-loadability REQUIRE=1` | real-host loadability — `claude plugin validate` + temp-home plugin install + metadata cross-consistency (marketplace ↔ plugin dirs ↔ docs). Optional in CI (runners lack the claude CLI, the step self-skips); **required before a release is cut** — `REQUIRE=1` turns a missing CLI into a failure |
|
|
84
85
|
|
|
85
86
|
## Consumer-matrix exemption — the tarball window
|
|
86
87
|
|
package/docs/customization.md
CHANGED
|
@@ -332,6 +332,28 @@ Per-invocation overrides (no settings change required):
|
|
|
332
332
|
existing carve-out — `verbosity.offer_council_in_delivery` does not
|
|
333
333
|
re-enable it. Use `/council diff:<base>..<head>` separately.
|
|
334
334
|
|
|
335
|
+
#### PR description content — tier + enrichments
|
|
336
|
+
|
|
337
|
+
The `commands.create_pr.*` block controls how much the generated PR
|
|
338
|
+
**description body** carries. Defaults are tuned for token frugality: the
|
|
339
|
+
description defaults to `min`, and the two enrichments are additive and
|
|
340
|
+
self-limiting (grounded / capability-gated), so `min` stays genuinely
|
|
341
|
+
minimal without ever dropping a critical callout.
|
|
342
|
+
|
|
343
|
+
| Setting | Values | Default | Description |
|
|
344
|
+
|---|---|---|---|
|
|
345
|
+
| `commands.create_pr.detail_level` | `min`, `med`, `max` | `min` | Verbosity tier of the Description section. `min` = title + 2-3 sentence what/why/impact + linked ticket; `med` = `min` + grouped changes + tests note; `max` = `med` + how-to-test + edge cases + reviewer guidance. Critical info (breaking changes, migrations, security, rollback) is included at **every** tier — the tier governs explanatory depth, never whether a critical callout appears. |
|
|
346
|
+
| `commands.create_pr.api_examples` | `true`, `false` | `true` | Add a fenced JSON request/response example for API-endpoint changes. `true` = include **only** when grounded in a real source (DTO/resource, OpenAPI, test fixture, or an actual probe); otherwise a one-line pointer, never an invented example. `false` = never. |
|
|
347
|
+
| `commands.create_pr.screenshots` | `true`, `false` | `false` | Capture frontend screenshots for UI changes. `false` = never. `true` = attempt when the host has browser/preview tooling and the diff touches a frontend surface; capability-gated (emits a one-line note and leaves the placeholder when tooling is absent, never fails or blocks the PR). Before/after + region-highlighting is best-effort; byte-embedding into the PR body is not possible via the GitHub API (host image-upload or manual attach). |
|
|
348
|
+
| `commands.create_pr.ui_paths` | glob list | `[]` | Optional globs that make frontend detection explicit (e.g. `["resources/views/**", "src/pages/**"]`). Empty = a light path/extension heuristic that fails open. |
|
|
349
|
+
| `commands.create_pr.api_paths` | glob list | `[]` | Optional globs that make API-endpoint detection explicit (e.g. `["app/Http/Controllers/Api/**", "src/pages/api/**"]`). Empty = a light heuristic that fails open. |
|
|
350
|
+
|
|
351
|
+
These flags are read once at the top of the `/create-pr` run and cached; the
|
|
352
|
+
content flags feed `/create-pr:description-only` generation. `min` is the
|
|
353
|
+
default precisely because a shorter description costs fewer output tokens on
|
|
354
|
+
every PR — turn it up per-project (or per-invocation via the settings file)
|
|
355
|
+
when reviewers want the richer context.
|
|
356
|
+
|
|
335
357
|
#### Script-output level — env-var overrides
|
|
336
358
|
|
|
337
359
|
`verbosity.script_output` is read by `scripts/_lib/script_output.py`.
|
|
@@ -395,7 +417,6 @@ Consumer projects can maintain their own agent documentation:
|
|
|
395
417
|
```
|
|
396
418
|
agents/
|
|
397
419
|
├── overrides/ ← Skill/rule/command overrides (required after migrate)
|
|
398
|
-
├── .event4u-bridge.yml ← Global-only bridge marker (ADR-020)
|
|
399
420
|
├── knowledge/ ← Optional: curated project-specific knowledge pages
|
|
400
421
|
├── memory/ ← Optional: memory promotion pipeline
|
|
401
422
|
├── roadmaps/ ← Optional: project-local roadmaps
|
|
@@ -126,6 +126,40 @@ This amendment narrows ADR-020's wording; the global-only **consumer install**
|
|
|
126
126
|
decision (distributed content writes only to `~/.event4u/agent-config/`) is
|
|
127
127
|
unchanged.
|
|
128
128
|
|
|
129
|
+
## Amendment — 2026-07-13 · bridge marker retired
|
|
130
|
+
|
|
131
|
+
The 2026-05-30 amendment restated `agents/.event4u-bridge.yml` as a mandated
|
|
132
|
+
consumer metadata artefact. Field use showed the marker was a design mistake:
|
|
133
|
+
it was **committed** to the shared project tree yet carried **no
|
|
134
|
+
project-specific data**. `global_root` is always the well-known
|
|
135
|
+
`~/.event4u/agent-config` (one global install per machine), and no code ever
|
|
136
|
+
read the field — the loader, doctor, and conformance checks resolve the global
|
|
137
|
+
root independently via `user_global_paths.event4u_root()`. Its only volatile
|
|
138
|
+
content (`installed_at`, `installer_version`) meant every developer's install
|
|
139
|
+
produced a diff and overwrote every other developer's committed copy. Scope
|
|
140
|
+
(global) did not match location (per-project, committed).
|
|
141
|
+
|
|
142
|
+
AI-council-converged (anthropic/claude-sonnet-4-5 + openai/gpt-4o, 2026-07-13,
|
|
143
|
+
2-round debate): **Option B — eliminate the project marker; resolve the global
|
|
144
|
+
root from the well-known path.** Changes:
|
|
145
|
+
|
|
146
|
+
- The installer and `agent-config refresh --project` no longer write
|
|
147
|
+
`agents/.event4u-bridge.yml`; they **delete** any legacy committed copy. The
|
|
148
|
+
managed `.gitignore` block ignores it so a stale copy is never re-committed.
|
|
149
|
+
- The global root is resolved from `~/.event4u/agent-config`
|
|
150
|
+
(`EVENT4U_CONFIG_HOME`-overridable), failing closed when absent.
|
|
151
|
+
- Migration idempotency moved from the marker's presence to
|
|
152
|
+
`agents/.agent-state/install-mode.txt` (written on every install);
|
|
153
|
+
project-anchor detection keys on `agents/overrides/`.
|
|
154
|
+
- The Windsurf / Cline / Gemini-CLI per-tool anchors stay (those tools cannot
|
|
155
|
+
read user scope) but now resolve the well-known path directly (no `bridge:`
|
|
156
|
+
back-pointer) and are **gitignored** — regenerated per-install, never shared.
|
|
157
|
+
|
|
158
|
+
The single project-local agent surface is now **`agents/overrides/`** alone.
|
|
159
|
+
This narrows the 2026-05-30 amendment; the global-only **consumer install**
|
|
160
|
+
decision is unchanged. See [`consumer-bridge`](../contracts/consumer-bridge.md)
|
|
161
|
+
(retired) for the reader/writer detail.
|
|
162
|
+
|
|
129
163
|
## Alternatives considered
|
|
130
164
|
|
|
131
165
|
- **Status quo (project default + global opt-in).** Keeps the drift
|