@event4u/agent-config 8.12.0 → 9.0.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 +164 -0
- package/README.md +1 -1
- 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/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 +1 -0
- package/dist/agent-src/commands/pr/create.md +28 -0
- 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 +97 -0
- package/dist/agent-src/commands/team/delegate.md +110 -0
- package/dist/agent-src/commands/team/review.md +85 -0
- package/dist/agent-src/commands/team/status.md +123 -0
- package/dist/agent-src/commands/team-knowledge.md +8 -6
- package/dist/agent-src/commands/team.md +152 -0
- 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 +6 -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/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/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/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/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +378 -174
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +16 -8
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +14 -6
- package/dist/install/install.mjs +46 -0
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/router.json +1 -1
- package/dist/scripts/condense.js +5 -0
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/schemas/settings.js +11 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +9 -2
- package/docs/SKILL_CENSUS.md +8 -0
- package/docs/architecture.md +3 -3
- package/docs/benchmark.md +67 -2
- package/docs/catalog.md +10 -4
- package/docs/command-flows.md +6 -1
- package/docs/contracts/ai-council-config.md +9 -2
- package/docs/contracts/ai-team-config.md +224 -0
- package/docs/contracts/command-clusters.md +1 -0
- package/docs/contracts/prelaunch-diagnostics.md +151 -0
- package/docs/contracts/release-pr-gating.md +1 -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 +3 -1
- package/docs/getting-started.md +42 -1
- 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/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/maintainers/branch-protection.md +18 -0
- 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/config/agent-settings.template.yml +71 -7
- package/src/config/prelaunch-areas.yml +36 -0
- package/src/scripts/_cli/cmd_doctor.ts +288 -1
- package/src/scripts/_lib/claude_plugin.ts +114 -4
- package/src/scripts/_lib/orchestration_record.ts +5 -0
- package/src/scripts/_lib/tool_adapter_registry.ts +120 -0
- package/src/scripts/ai_team/config.ts +234 -0
- 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/hook_manifest.yaml +12 -1
- package/src/scripts/install.ts +39 -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/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/rule_backlinks.ts +0 -0
- package/src/scripts/run_skill_evals.ts +70 -4
- 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/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 +25 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Design Fidelity — Mechanics
|
|
2
|
+
|
|
3
|
+
> Surgical-edit discipline, asset & imagery floor, and the failure-mode catalog for the `design-fidelity` rule
|
|
4
|
+
|
|
5
|
+
_Origin: migrated from `src/rules/design-fidelity.md` per the P4 pattern of `road-to-kernel-and-router.md`. The Iron Law, the `design.fidelity_mode` strictness table, and the fire/not-fire scope stay in the rule; this file carries the illustrative depth._
|
|
6
|
+
|
|
7
|
+
## Surgical visual edits
|
|
8
|
+
|
|
9
|
+
A request to change one visual thing — a colour, a label, a single element — is
|
|
10
|
+
a **targeted edit**, not a redesign licence. Apply the same
|
|
11
|
+
`minimal-safe-diff` discipline to design work that backend edits have
|
|
12
|
+
always owed.
|
|
13
|
+
|
|
14
|
+
- **Change only the semantic target.** Preserve the surrounding layout,
|
|
15
|
+
spacing, typography, dimensions, content, animation, and interaction states.
|
|
16
|
+
Do not rewrite the component, reflow the section, or "modernise" neighbours
|
|
17
|
+
while you are in there. (fixtures: `daf-edit-preservation`, `daf-unwanted-variations`.)
|
|
18
|
+
- **A broader redesign needs an explicit trigger.** Only phrases like *"new
|
|
19
|
+
direction"*, *"from scratch"*, *"make it feel premium"*, *"rework the flow"*,
|
|
20
|
+
or *"give me variations / options"* license a from-scratch rework. Absent such
|
|
21
|
+
a phrase, a "fix / change / update the X" request is surgical — when unsure
|
|
22
|
+
which, ask (`ask-when-uncertain`). (fixture: `daf-redesign-trigger`.)
|
|
23
|
+
- **Preserve stable anchors.** Where the host exposes DOM/comment metadata, keep
|
|
24
|
+
comment anchors and screen labels intact so the edit stays locatable. Where
|
|
25
|
+
the host has no such surface, preserve stable semantic anchors already present
|
|
26
|
+
in source comments / `data-*` attributes — never strip them, and do not invent
|
|
27
|
+
new ones.
|
|
28
|
+
|
|
29
|
+
## Asset & imagery discipline
|
|
30
|
+
|
|
31
|
+
Visual artifacts carry **real assets or honest placeholders — never fabricated
|
|
32
|
+
brand evidence**. The design-surface instance of the no-invented-facts floor.
|
|
33
|
+
|
|
34
|
+
- **Copy owned assets through the project's accepted path.** Reference or copy
|
|
35
|
+
project-owned assets (logos, icons, fonts, images) via the target project's
|
|
36
|
+
asset directory/pipeline — never hotlink a design-system's internal URL, never
|
|
37
|
+
bulk-copy a huge source folder. (fixtures: `daf-missing-asset`, `daf-external-asset-url`.)
|
|
38
|
+
- **Real imagery where inspection matters.** On visual pages/decks, use actual
|
|
39
|
+
product / place / object / state imagery where the image IS the proof (a
|
|
40
|
+
product screenshot, a real dashboard state). Decorative atmosphere is not proof
|
|
41
|
+
— never pass a stock-like or invented image off as the real product. An
|
|
42
|
+
invented product screenshot is fabricated evidence. (fixture: `daf-invented-screenshot`.)
|
|
43
|
+
- **Icons follow the iconography floor** — no emoji-as-icon in serious UI, no
|
|
44
|
+
hand-rolled icon when a set exists; see the `iconography` skill § Iconography floor.
|
|
45
|
+
- **Ask before adding material — no unrequested filler.** Never generate copy,
|
|
46
|
+
placeholder sections, or decorative blocks the user did not ask for to "complete"
|
|
47
|
+
a design. Brief silent on a region → surface the gap (`ask-when-uncertain`)
|
|
48
|
+
or leave an honest placeholder; never invent filler to fill space.
|
|
49
|
+
|
|
50
|
+
## Failure modes
|
|
51
|
+
|
|
52
|
+
- Swapping the prototype's font / typeface because another "reads better".
|
|
53
|
+
- Replacing a specified control (slider, stepper, chip) with a different control.
|
|
54
|
+
- Dropping or adding an element the prototype shows ("+", a send→stop toggle, a warning chip).
|
|
55
|
+
- Restructuring layout or moving sections "because the flow is better".
|
|
56
|
+
- Treating an internal "honesty gate" or "stub" concern as licence to redesign the UI.
|
|
57
|
+
- Re-running a redesign after the user already said "match the prototype".
|
|
58
|
+
|
|
59
|
+
## How to surface a deviation — do NOT execute it
|
|
60
|
+
|
|
61
|
+
Name what the spec shows, what you would change, and why — as a numbered option
|
|
62
|
+
per `user-interaction`. The user picks. Honesty about **behaviour** (a control
|
|
63
|
+
not yet wired) never licenses changing the **design**: a faithful visual plus a
|
|
64
|
+
labelled "not wired yet" note beats an invented redesign.
|
|
65
|
+
|
|
66
|
+
## Fixtures
|
|
67
|
+
|
|
68
|
+
Behavioral baseline: the `daf-*` fixtures named above (edit preservation,
|
|
69
|
+
unwanted variations, redesign trigger, missing asset, external asset URL,
|
|
70
|
+
invented screenshot).
|
|
71
|
+
|
|
72
|
+
## See also
|
|
73
|
+
|
|
74
|
+
- `design-fidelity` (rule) — Iron Law + `design.fidelity_mode` strictness table.
|
|
75
|
+
- `brand-source-of-truth` / `brand-consistency` — same precedence shape, for registered brand tokens.
|
|
76
|
+
- [`design-modes.md`](design-modes.md) — brand vs product register discriminator.
|
|
@@ -71,6 +71,24 @@ second-writer race to protect against; flip to `true` when there are
|
|
|
71
71
|
concurrent mergers. `required_pull_request_reviews: null` per the
|
|
72
72
|
bus-factor reality above.
|
|
73
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
|
+
|
|
74
92
|
## Rollback
|
|
75
93
|
|
|
76
94
|
```bash
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Command frontmatter — per-host projection parity
|
|
2
|
+
|
|
3
|
+
> Which command frontmatter fields each host bridge actually consumes, and the
|
|
4
|
+
> deliberate divergences from the official command-authoring field standard.
|
|
5
|
+
> Source of truth for command definitions: `src/domains/<pack>/<name>/command.md`
|
|
6
|
+
> (projected verbatim to `dist/agent-src/commands/` by the condensation
|
|
7
|
+
> pipeline). Schema: [`command.schema.json`](../../src/scripts/schemas/command.schema.json).
|
|
8
|
+
> Roadmap origin: `road-to-ecosystem-harvest-skill-quality-gates` Phase 4 (Source C).
|
|
9
|
+
|
|
10
|
+
## Projection paths per host
|
|
11
|
+
|
|
12
|
+
| Host | Projection | Frontmatter reaches host? |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| Claude Code | `.claude/skills/<slug>/SKILL.md` — symlink to the command source; rendered copy (with native `model:`) when `model.auto_switch: auto` and a `model_tier` maps | Yes — full frontmatter, verbatim |
|
|
15
|
+
| Cursor | `.cursor/commands/<slug>.md` — symlink to the command source | Yes — file verbatim; Cursor treats unknown frontmatter as inert |
|
|
16
|
+
| Windsurf | `.windsurf/workflows/<slug>.md` — symlink to the command source | Yes — same inert-passthrough as Cursor |
|
|
17
|
+
| Cline / Gemini / Copilot / Roo / Codex / Continue | Text reference via `AGENTS.md` only (no native command surface) | No — invocation is conversational |
|
|
18
|
+
|
|
19
|
+
## Field consumption matrix (official-standard fields)
|
|
20
|
+
|
|
21
|
+
| Field | Claude Code | Cursor / Windsurf | Notes |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| `name` | ✅ load rule: must equal the skill directory slug | inert | Path-derived hyphen slug; enforced by `check_host_loadability` |
|
|
24
|
+
| `description` | ✅ routing + display | inert | ≤ 200 chars per schema |
|
|
25
|
+
| `argument-hint` | ✅ rendered next to the slash command | inert | Added Phase 4; set on every command whose body documents an invocation argument (140/183 at introduction) |
|
|
26
|
+
| `disable-model-invocation` | ✅ honored natively | inert (vacuously true — no model-invocation surface) | Schema pins `enum: [true]` — commands are user-invoked by design |
|
|
27
|
+
| `model` | ✅ (rendered copies only) | inert | Never authored by hand: the generator rewrites `model_tier:` → native `model:` at projection time (ADR-034/035) |
|
|
28
|
+
|
|
29
|
+
All other fields (`tier`, `visibility`, `pack`, `cluster`, `intent`,
|
|
30
|
+
`routes_to`, `replaces`, `suggestion`, `workspaces`, `packs`, `trust`,
|
|
31
|
+
`install`, `model_tier`, …) are **suite governance metadata** — consumed by the
|
|
32
|
+
package's own linters, router, discovery manifest, and docs generators, never
|
|
33
|
+
by a host. Hosts that read the file verbatim ignore them; that is the intended
|
|
34
|
+
contract, not drift.
|
|
35
|
+
|
|
36
|
+
## Deliberate divergences from the official standard
|
|
37
|
+
|
|
38
|
+
1. **No colon names.** The official examples allow `/cluster:sub` invocation;
|
|
39
|
+
this suite forbids colons in `name:` (Agent-Skills-spec compliance for
|
|
40
|
+
strict consumers like Zed). Claude Code's `/cluster:sub` invocation still
|
|
41
|
+
works — it is path-derived from `commands/<cluster>/<sub>.md`, not from the
|
|
42
|
+
`name:` field.
|
|
43
|
+
2. **`disable-model-invocation` is locked to `true`.** The standard allows
|
|
44
|
+
model-invocable commands; this suite's commands are always user-invoked
|
|
45
|
+
(`command-suggestion-policy` owns proactive surfacing instead — suggest,
|
|
46
|
+
never invoke).
|
|
47
|
+
3. **`model` is generated, never authored.** Authors declare the
|
|
48
|
+
vendor-neutral `model_tier:`; the Claude bridge renders a native `model:`
|
|
49
|
+
only when the consumer opted into `model.auto_switch: auto`.
|
|
50
|
+
4. **`argument-hint` is host-passthrough.** Only Claude Code renders it today;
|
|
51
|
+
it stays in the neutral source (harmless elsewhere) rather than being
|
|
52
|
+
projected host-specifically — per the do-NOT-chase-host-fields rule for the
|
|
53
|
+
neutral tree.
|
|
54
|
+
|
|
55
|
+
## Verification
|
|
56
|
+
|
|
57
|
+
- `./scripts-run src/scripts/validate_frontmatter` — every command validates
|
|
58
|
+
against the schema (including `argument-hint` shape, ≤ 120 chars).
|
|
59
|
+
- `./scripts-run src/scripts/check_host_loadability --root .` — generated
|
|
60
|
+
`.claude/skills/` entries parse and satisfy the host load rule.
|
package/docs/proof.md
CHANGED
|
@@ -27,8 +27,9 @@ evidence pointer, or `task check-claims` fails the build.
|
|
|
27
27
|
| Claim | Kind | Evidence | Resolves |
|
|
28
28
|
|---|---|---|---|
|
|
29
29
|
| The release process is documented as an inheritable runbook + succession doc, and the project's bus-factor (trailing-90-day distinct human reviewers) is tracked and reported truthfully — currently 1, not implied to be more. | qual | `docs/succession.md#trailing 90 days` | ✅ |
|
|
30
|
-
|
|
|
30
|
+
| 183 commands. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
|
|
31
31
|
| A MEASURED-BUT-NOT-SHIPPED experiment — the thin rule projection reduced eager rule load 78,513 → 13,881 GPT-tokens (whole always-loaded projection 98,529 → 33,897, ~65.6%), but FAILED the quality gate (thin win-rate 36.2% vs required 48%) and does not ship; it un-defers only behind `discipline_profile: essential`. Shipped behavior does NOT include this reduction. Method: `agent-config benchmark` over the pinned token baseline; the baseline is the honest "what the user pays if everything loads eagerly", NOT a synthetic full-corpus strawman (council Q4); quality gate per the Phase-0 paired judge run. | quant | `internal/bench/reports/token-baseline.json#eager_rule_load` | ✅ |
|
|
32
|
+
| The first cross-vendor parity pass (5 orchestration-corpus tasks × 2 vendors × 3 repeats, identical prompts via the council transport, $0.16) measured real per-host finding-count differences — claude-sonnet-4-5 surfaced ~2× the findings of gpt-4o on the multi-file analysis task (median 11 vs 5) while both vendors were identical on the planted hollow-implementation task (2 vs 2) and perfectly silent on the clean-code negative control (0 vs 0, no spurious findings). The per-task `finding_floor` values are calibrated from the cross-host lower envelope and the gate is armed. | quant | `internal/bench/reports/parity-count.json#min over hosts of median` | ✅ |
|
|
32
33
|
| On a weak host (claude-haiku-4-5) the package produces a significant, placebo-controlled discipline lift on scope/downstream traps; on a strong host the same measurement is a published null — the package transplants discipline a weak model lacks, not model intelligence. | quant | `docs/benchmark.md#weak-host-specific` | ✅ |
|
|
33
34
|
| 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
35
|
| 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` | ✅ |
|
|
@@ -44,10 +45,10 @@ evidence pointer, or `task check-claims` fails the build.
|
|
|
44
45
|
| 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` | ✅ |
|
|
45
46
|
| 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` | ✅ |
|
|
46
47
|
| Every artifact the package ships — source AND the condensed projection that reaches consumers — is machine-scanned in CI for hidden-Unicode, mixed-script-confusable, and instruction-smuggling payloads (the rules-file-backdoor class); a finding blocks the release before `npm publish`, not just the merge. | qual | `.github/workflows/publish-npm.yml#lint_agent_security` | ✅ |
|
|
47
|
-
|
|
|
48
|
+
| 274 skills. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
|
|
48
49
|
| 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` | ✅ |
|
|
49
50
|
|
|
50
|
-
**
|
|
51
|
+
**21 backed claim(s)** — all evidence pointers resolve in CI.
|
|
51
52
|
|
|
52
53
|
Artefact counts in public prose (skills, commands, governed rules,
|
|
53
54
|
guidelines, personas) are **generated from source and CI-drift-checked**:
|
|
@@ -76,11 +77,11 @@ shipping theater; the full per-cell data is committed at
|
|
|
76
77
|
`internal/bench/reports/persona-placebo.json`.
|
|
77
78
|
|
|
78
79
|
**Behavioural-eval coverage — the honest baseline.** Skill *quality* is only
|
|
79
|
-
as good as its measurement. Today **
|
|
80
|
+
as good as its measurement. Today **42 of 274** skills carry a behavioural
|
|
80
81
|
`evals.json`; the highest-traffic / highest-cost tiers (default-surface +
|
|
81
82
|
`rich` + routers) are **fully covered (35 of 35)**, the long tail
|
|
82
|
-
(
|
|
83
|
-
"
|
|
83
|
+
(7 of 239) is not. We publish that gap rather than imply
|
|
84
|
+
"274 evaluated skills": coverage is measured per tier
|
|
84
85
|
(`./scripts-run src/scripts/skill_eval_coverage`), **CI-ratcheted so it can
|
|
85
86
|
only rise**, and the priority tiers carry a hard **tier floor**: every
|
|
86
87
|
rich / default-surface / router skill MUST have a behavioural eval or an
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@event4u/agent-config",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.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,
|
|
Binary file
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
* "boundary_kind": "task" | "phase-step" | "tool-call",
|
|
16
16
|
* "consulted": {"skills": [...], "rules": [...], ...},
|
|
17
17
|
* "applied": {"skills": [...], "rules": [...], ...},
|
|
18
|
+
* "loaded": {"skills": [...], "rules": [...], ...} # optional (U1a):
|
|
19
|
+
* what was AVAILABLE/INJECTED at the boundary — the Fired/Loaded
|
|
20
|
+
* denominator. Superset contract: consulted ⊆ loaded. Ids only
|
|
21
|
+
* (same PII-exclusion-by-construction shape as consulted).
|
|
18
22
|
* "outcomes": ["blocked", "verification_failed", ...] # optional
|
|
19
23
|
* "tokens_estimate": {"consulted_load": <int>} # optional
|
|
20
24
|
* }
|
|
@@ -127,6 +131,7 @@ export interface EngagementEventInit {
|
|
|
127
131
|
boundary_kind: string;
|
|
128
132
|
consulted?: Record<string, string[]>;
|
|
129
133
|
applied?: Record<string, string[]>;
|
|
134
|
+
loaded?: Record<string, string[]> | null;
|
|
130
135
|
outcomes?: string[] | null;
|
|
131
136
|
tokens_estimate?: Record<string, number> | null;
|
|
132
137
|
schema_version?: number;
|
|
@@ -138,6 +143,7 @@ export class EngagementEvent {
|
|
|
138
143
|
boundary_kind: string;
|
|
139
144
|
consulted: Record<string, string[]>;
|
|
140
145
|
applied: Record<string, string[]>;
|
|
146
|
+
loaded: Record<string, string[]> | null;
|
|
141
147
|
outcomes: string[] | null;
|
|
142
148
|
tokens_estimate: Record<string, number> | null;
|
|
143
149
|
schema_version: number;
|
|
@@ -148,6 +154,7 @@ export class EngagementEvent {
|
|
|
148
154
|
this.boundary_kind = init.boundary_kind;
|
|
149
155
|
this.consulted = init.consulted ?? {};
|
|
150
156
|
this.applied = init.applied ?? {};
|
|
157
|
+
this.loaded = init.loaded ?? null;
|
|
151
158
|
this.outcomes = init.outcomes ?? null;
|
|
152
159
|
this.tokens_estimate = init.tokens_estimate ?? null;
|
|
153
160
|
this.schema_version = init.schema_version ?? SCHEMA_VERSION;
|
|
@@ -171,6 +178,20 @@ export class EngagementEvent {
|
|
|
171
178
|
}
|
|
172
179
|
_validate_artefact_dict('consulted', this.consulted);
|
|
173
180
|
_validate_artefact_dict('applied', this.applied);
|
|
181
|
+
if (this.loaded !== null) {
|
|
182
|
+
_validate_artefact_dict('loaded', this.loaded);
|
|
183
|
+
for (const [kind, ids] of Object.entries(this.consulted)) {
|
|
184
|
+
const avail = new Set(this.loaded[kind] ?? []);
|
|
185
|
+
for (const art_id of ids) {
|
|
186
|
+
if (!avail.has(art_id)) {
|
|
187
|
+
throw new EngagementSchemaError(
|
|
188
|
+
`consulted.${kind} id '${art_id}' missing from loaded.${kind}; `
|
|
189
|
+
+ 'superset contract: consulted \u2286 loaded',
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
174
195
|
if (this.outcomes !== null) {
|
|
175
196
|
_validate_outcomes(this.outcomes);
|
|
176
197
|
}
|
|
@@ -206,6 +227,12 @@ export class EngagementEvent {
|
|
|
206
227
|
consulted: _normalise_artefact_dict(this.consulted),
|
|
207
228
|
applied: _normalise_artefact_dict(this.applied),
|
|
208
229
|
};
|
|
230
|
+
if (this.loaded !== null) {
|
|
231
|
+
const norm = _normalise_artefact_dict(this.loaded);
|
|
232
|
+
if (Object.keys(norm).length > 0) {
|
|
233
|
+
out['loaded'] = norm;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
209
236
|
if (this.outcomes && this.outcomes.length > 0) {
|
|
210
237
|
out['outcomes'] = [...this.outcomes];
|
|
211
238
|
}
|
|
@@ -310,6 +337,9 @@ export function parse_event(line: string): EngagementEvent {
|
|
|
310
337
|
boundary_kind: (r['boundary_kind'] as string) ?? '',
|
|
311
338
|
consulted: _orEmptyDict(r['consulted']),
|
|
312
339
|
applied: _orEmptyDict(r['applied']),
|
|
340
|
+
loaded: r['loaded'] === undefined || r['loaded'] === null
|
|
341
|
+
? null
|
|
342
|
+
: _orEmptyDict(r['loaded']),
|
|
313
343
|
outcomes: (r['outcomes'] as string[] | null | undefined) ?? null,
|
|
314
344
|
tokens_estimate: (r['tokens_estimate'] as Record<string, number> | null | undefined) ?? null,
|
|
315
345
|
schema_version: r['schema_version'] === undefined
|
|
@@ -121,15 +121,19 @@ export function render_markdown(aggregate: AggregateResult, opts: RenderOptions
|
|
|
121
121
|
lines.push('');
|
|
122
122
|
continue;
|
|
123
123
|
}
|
|
124
|
-
|
|
125
|
-
lines.push(
|
|
124
|
+
const withLoaded = aggregate.loaded_events > 0;
|
|
125
|
+
lines.push(withLoaded
|
|
126
|
+
? '| kind | id | loaded | consulted | applied | fired/loaded | applied/consulted | last seen |'
|
|
127
|
+
: '| kind | id | consulted | applied | applied/consulted | last seen |');
|
|
128
|
+
lines.push(withLoaded ? '|---|---|---:|---:|---:|---:|---:|---|' : '|---|---|---:|---:|---:|---|');
|
|
126
129
|
for (const entry of rows) {
|
|
127
130
|
const s = entry.stat;
|
|
128
131
|
check_id_redaction(`buckets.${s.kind}.id`, s.artefact_id);
|
|
129
|
-
lines.push(
|
|
130
|
-
`| ${s.kind} | \`${s.artefact_id}\` | ${s.consulted} | ${s.applied} `
|
|
131
|
-
|
|
132
|
-
|
|
132
|
+
lines.push(withLoaded
|
|
133
|
+
? `| ${s.kind} | \`${s.artefact_id}\` | ${s.loaded} | ${s.consulted} | ${s.applied} `
|
|
134
|
+
+ `| ${_pyFixed(s.fired_ratio, 2)} | ${_pyFixed(s.applied_ratio, 2)} | \`${s.last_seen_ts}\` |`
|
|
135
|
+
: `| ${s.kind} | \`${s.artefact_id}\` | ${s.consulted} | ${s.applied} `
|
|
136
|
+
+ `| ${_pyFixed(s.applied_ratio, 2)} | \`${s.last_seen_ts}\` |`);
|
|
133
137
|
}
|
|
134
138
|
lines.push('');
|
|
135
139
|
}
|
|
@@ -147,7 +151,9 @@ export function render_json(aggregate: AggregateResult, opts: RenderOptions = {}
|
|
|
147
151
|
[BUCKET_BOTTOM]: [],
|
|
148
152
|
};
|
|
149
153
|
for (const entry of bucketed) {
|
|
150
|
-
(grouped[entry.bucket] as Array<Record<string, unknown>>).push(
|
|
154
|
+
(grouped[entry.bucket] as Array<Record<string, unknown>>).push(
|
|
155
|
+
_stat_to_dict(entry.stat, aggregate.loaded_events > 0),
|
|
156
|
+
);
|
|
151
157
|
}
|
|
152
158
|
if (top !== null) {
|
|
153
159
|
for (const bucket of Object.keys(grouped)) {
|
|
@@ -179,9 +185,9 @@ export function render_json(aggregate: AggregateResult, opts: RenderOptions = {}
|
|
|
179
185
|
return `${_py_json_dumps_indent2_sorted(payload)}\n`;
|
|
180
186
|
}
|
|
181
187
|
|
|
182
|
-
function _stat_to_dict(stat: ArtefactStat): Record<string, unknown> {
|
|
188
|
+
function _stat_to_dict(stat: ArtefactStat, withLoaded = false): Record<string, unknown> {
|
|
183
189
|
check_id_redaction(`buckets.${stat.kind}.id`, stat.artefact_id);
|
|
184
|
-
|
|
190
|
+
const out: Record<string, unknown> = {
|
|
185
191
|
kind: stat.kind,
|
|
186
192
|
id: stat.artefact_id,
|
|
187
193
|
consulted: stat.consulted,
|
|
@@ -189,6 +195,13 @@ function _stat_to_dict(stat: ArtefactStat): Record<string, unknown> {
|
|
|
189
195
|
applied_ratio: new PyFloat(_pyRound(stat.applied_ratio, 4)),
|
|
190
196
|
last_seen_ts: stat.last_seen_ts,
|
|
191
197
|
};
|
|
198
|
+
// U1a: emitted only when the log carries the loaded denominator, so
|
|
199
|
+
// pre-U1a logs render byte-identically to the frozen parity oracle.
|
|
200
|
+
if (withLoaded) {
|
|
201
|
+
out['loaded'] = stat.loaded;
|
|
202
|
+
out['fired_ratio'] = new PyFloat(_pyRound(stat.fired_ratio, 4));
|
|
203
|
+
}
|
|
204
|
+
return out;
|
|
192
205
|
}
|
|
193
206
|
|
|
194
207
|
// ── Python-parity helpers ───────────────────────────────────────────────
|
|
@@ -63,6 +63,7 @@ interface RecordArgs {
|
|
|
63
63
|
boundary: string;
|
|
64
64
|
consulted: string[] | null;
|
|
65
65
|
applied: string[] | null;
|
|
66
|
+
loaded: string[] | null;
|
|
66
67
|
outcome: string[] | null;
|
|
67
68
|
ts: string;
|
|
68
69
|
payload_file: string | null;
|
|
@@ -78,6 +79,7 @@ function _build_event_from_args(args: RecordArgs): EngagementEvent {
|
|
|
78
79
|
boundary_kind: args.boundary,
|
|
79
80
|
consulted: _parse_kv_list(args.consulted ?? []),
|
|
80
81
|
applied: _parse_kv_list(args.applied ?? []),
|
|
82
|
+
loaded: args.loaded && args.loaded.length > 0 ? _parse_kv_list(args.loaded) : null,
|
|
81
83
|
outcomes: args.outcome && args.outcome.length > 0 ? [...args.outcome] : null,
|
|
82
84
|
});
|
|
83
85
|
}
|
|
@@ -101,6 +103,7 @@ function _build_event_from_payload(raw: string): EngagementEvent {
|
|
|
101
103
|
boundary_kind: (d['boundary_kind'] as string) ?? '',
|
|
102
104
|
consulted: _orEmpty(d['consulted']),
|
|
103
105
|
applied: _orEmpty(d['applied']),
|
|
106
|
+
loaded: d['loaded'] === undefined || d['loaded'] === null ? null : _orEmpty(d['loaded']),
|
|
104
107
|
outcomes: (d['outcomes'] as string[] | null | undefined) ?? null,
|
|
105
108
|
tokens_estimate: (d['tokens_estimate'] as Record<string, number> | null | undefined) ?? null,
|
|
106
109
|
});
|
|
@@ -121,6 +124,7 @@ function _parseArgs(argv: string[]): RecordArgs {
|
|
|
121
124
|
boundary: 'task',
|
|
122
125
|
consulted: null,
|
|
123
126
|
applied: null,
|
|
127
|
+
loaded: null,
|
|
124
128
|
outcome: null,
|
|
125
129
|
ts: '',
|
|
126
130
|
payload_file: null,
|
|
@@ -155,6 +159,7 @@ function _parseArgs(argv: string[]): RecordArgs {
|
|
|
155
159
|
}
|
|
156
160
|
a.boundary = v;
|
|
157
161
|
} else if (tok === '--consulted') (a.consulted ??= []).push(next());
|
|
162
|
+
else if (tok === '--loaded') (a.loaded ??= []).push(next());
|
|
158
163
|
else if (tok === '--applied') (a.applied ??= []).push(next());
|
|
159
164
|
else if (tok === '--outcome') {
|
|
160
165
|
const v = next();
|
|
@@ -62,10 +62,15 @@ projection:
|
|
|
62
62
|
# rules ALWAYS project (unconditional by definition); untagged rules fail
|
|
63
63
|
# safe and ship. Example consumer scope:
|
|
64
64
|
# rule_workspaces: [engineering]
|
|
65
|
-
#
|
|
66
|
-
#
|
|
65
|
+
# DEFAULT FLIPPED 2026-07-13 (the Phase-1 human gate, maintainer-approved,
|
|
66
|
+
# evidence-gated): the default below lists EVERY consumer workspace, so
|
|
67
|
+
# exactly the exclusively-maintainer specification rules drop from consumer
|
|
68
|
+
# installs (the audited 16-rule lever — see
|
|
69
|
+
# agents/settings/contexts/consumer-scoping-audit-2026-07-07.md) while all
|
|
70
|
+
# domain safety floors and domain rules keep shipping. Narrowing further
|
|
71
|
+
# (e.g. [engineering] only) stays a per-install user choice.
|
|
67
72
|
# An EMPTY list is inactive (= legacy-all); only a non-empty list scopes.
|
|
68
|
-
rule_workspaces: []
|
|
73
|
+
rule_workspaces: [engineering, product, finance, founder, gtm, ops, small-business, construction, legal-review-prep]
|
|
69
74
|
#
|
|
70
75
|
# Optional second axis, same semantics per pack ids (packs.yml). When set,
|
|
71
76
|
# a non-kernel rule also needs a `packs:` intersection to project — e.g.
|
|
@@ -622,13 +627,72 @@ worktrees:
|
|
|
622
627
|
|
|
623
628
|
# --- AI Council (external second-opinion network) ---
|
|
624
629
|
#
|
|
625
|
-
#
|
|
626
|
-
#
|
|
627
|
-
#
|
|
628
|
-
#
|
|
630
|
+
# The council config is NOT here and is NOT project-local. It lives ONLY
|
|
631
|
+
# user-global at `~/.event4u/agent-config/settings/.ai-council.yml` — one
|
|
632
|
+
# file, configured once, serving every project / worktree / CWD (ADR-104,
|
|
633
|
+
# superseding ADR-093). The project tree is NEVER searched; a
|
|
634
|
+
# `.ai-council.yml` under any `agents/` tree is ignored. To opt in, copy
|
|
635
|
+
# the shape from `agents/templates/.ai-council.yml.example` to that
|
|
636
|
+
# user-global path and flip `enabled: true` per provider — do NOT drop it
|
|
637
|
+
# into a project's `agents/` tree.
|
|
629
638
|
#
|
|
630
639
|
# See `docs/contracts/ai-council-config.md` for the schema.
|
|
631
640
|
|
|
641
|
+
# --- AI Team (cross-model strong-pair review — /team family) ---
|
|
642
|
+
#
|
|
643
|
+
# Governs the default-off `/team` capability family: one strong external
|
|
644
|
+
# model (via the codex CLI, subscription-authed) reviews inside the repo —
|
|
645
|
+
# the depth complement to the council's breadth. Schema + validation
|
|
646
|
+
# contract: `docs/contracts/ai-team-config.md`. The loader
|
|
647
|
+
# (`src/scripts/ai_team/config.ts`) rejects unknown keys fail-closed.
|
|
648
|
+
ai_team:
|
|
649
|
+
# Master switch. false (default) = /team commands are never suggested
|
|
650
|
+
# and every invocation refuses with an enable pointer; true = the
|
|
651
|
+
# family is live (individual gates below still apply).
|
|
652
|
+
enabled: false
|
|
653
|
+
|
|
654
|
+
# Model handed to the codex CLI. 'auto' (default) = pass NO --model
|
|
655
|
+
# flag, the codex CLI's own default applies — this tracks the
|
|
656
|
+
# subscription's current strongest model instead of pinning a stale
|
|
657
|
+
# ID. Any other value passes through verbatim as `--model <value>`.
|
|
658
|
+
model: auto
|
|
659
|
+
|
|
660
|
+
# Second opt-in for the ONLY wrapper that delegates write access
|
|
661
|
+
# (/team:delegate → the plugin's native-Codex worker). false (default)
|
|
662
|
+
# = delegate refuses with an enable pointer even when ai_team.enabled
|
|
663
|
+
# is true. Both keys must be true before delegation is reachable.
|
|
664
|
+
allow_delegate: false
|
|
665
|
+
|
|
666
|
+
# Per-day cap on team calls. Team calls count into the EXISTING
|
|
667
|
+
# cli_call_budget openai bucket (~/.event4u/agent-config/cli-calls.json,
|
|
668
|
+
# daily UTC reset) — one subscription, one counter, never a parallel
|
|
669
|
+
# count. This key is the team-side ceiling read against that shared
|
|
670
|
+
# bucket. 0 = block all team calls; raise if you review heavily.
|
|
671
|
+
max_calls_per_day: 50
|
|
672
|
+
|
|
673
|
+
# Suppress the one-line wizard/init recommendation to set up the codex
|
|
674
|
+
# plugin on Claude-Code hosts. Cosmetic only — never changes behavior.
|
|
675
|
+
suppress_setup_hint: false
|
|
676
|
+
|
|
677
|
+
# Managed governance of the codex plugin's Stop-hook Review Gate
|
|
678
|
+
# (road-to-team-mode Phase 4). The gate itself stays upstream's; these
|
|
679
|
+
# keys only govern it. Upstream's own warning: "The review gate can
|
|
680
|
+
# create a long-running Claude/Codex loop and may drain usage limits
|
|
681
|
+
# quickly."
|
|
682
|
+
review_gate:
|
|
683
|
+
# false (default) = byte-identical pre-Phase-4 behavior: no counting,
|
|
684
|
+
# no circuit breaker, our Stop path never touches the gate. true =
|
|
685
|
+
# count consecutive BLOCK verdicts per session and trip the circuit
|
|
686
|
+
# breaker at the bound below.
|
|
687
|
+
managed: false
|
|
688
|
+
|
|
689
|
+
# Circuit-breaker bound: after this many CONSECUTIVE BLOCK verdicts
|
|
690
|
+
# in one session, a visible notice is injected exactly once and the
|
|
691
|
+
# managed layer stops re-blocking — the user decides, never an
|
|
692
|
+
# infinite Claude↔Codex loop. An ALLOW verdict resets the counter.
|
|
693
|
+
# Positive integer.
|
|
694
|
+
max_consecutive_blocks: 3
|
|
695
|
+
|
|
632
696
|
# --- Onboarding ---
|
|
633
697
|
#
|
|
634
698
|
# Tracks whether the initial setup flow (/onboard) has been completed
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Pre-launch diagnostic — fixed coverage-area vocabulary
|
|
2
|
+
# (road-to-ecosystem-harvest-prelaunch-diagnostics Phase 1, Source L).
|
|
3
|
+
#
|
|
4
|
+
# The AREA code is the middle segment of the immutable finding-ID grammar
|
|
5
|
+
# `AC-<AREA>-NNN` (docs/contracts/prelaunch-diagnostics.md). Codes are
|
|
6
|
+
# append-only: renaming or re-using a code would re-assign IDs and break
|
|
7
|
+
# every committed baseline. Add new areas at the end; never delete.
|
|
8
|
+
#
|
|
9
|
+
# `launch_gate: true` areas participate in the regression gate's
|
|
10
|
+
# Pass→Finding CI trigger and block a "ready" verdict while Unknown.
|
|
11
|
+
schema_version: prelaunch-areas-v1
|
|
12
|
+
areas:
|
|
13
|
+
auth:
|
|
14
|
+
code: AUTH
|
|
15
|
+
launch_gate: true
|
|
16
|
+
description: Authentication, authorization, tenancy boundaries on the launch surface.
|
|
17
|
+
migrations:
|
|
18
|
+
code: MIG
|
|
19
|
+
launch_gate: true
|
|
20
|
+
description: Schema/data migrations shipped with the launch — reversibility, expand-contract, backfill safety.
|
|
21
|
+
secrets:
|
|
22
|
+
code: SEC
|
|
23
|
+
launch_gate: true
|
|
24
|
+
description: Secrets, tokens, key handling touched by the launch — storage, rotation, exposure paths.
|
|
25
|
+
observability:
|
|
26
|
+
code: OBS
|
|
27
|
+
launch_gate: false
|
|
28
|
+
description: Telemetry proving rollout health — the metric, alert, and pager path for the new surface.
|
|
29
|
+
rollback:
|
|
30
|
+
code: RBK
|
|
31
|
+
launch_gate: true
|
|
32
|
+
description: Rollback contract — trip wires, decision windows, abort paths, named irreversible steps.
|
|
33
|
+
agent-governance:
|
|
34
|
+
code: AGOV
|
|
35
|
+
launch_gate: false
|
|
36
|
+
description: AI/agent surfaces shipped with the launch — tool grants, egress paths, injection exposure.
|