@event4u/agent-config 2.19.0 → 2.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/.agent-src/commands/agent-status.md +29 -0
  2. package/.agent-src/commands/onboard.md +221 -81
  3. package/.agent-src/packs/README.md +49 -0
  4. package/.agent-src/packs/agency-delivery.yml +63 -0
  5. package/.agent-src/packs/content-engine.yml +53 -0
  6. package/.agent-src/packs/founder-mvp.yml +51 -0
  7. package/.agent-src/presets/README.md +26 -0
  8. package/.agent-src/presets/balanced.yml +34 -0
  9. package/.agent-src/presets/fast.yml +31 -0
  10. package/.agent-src/presets/strict.yml +38 -0
  11. package/.agent-src/profiles/README.md +29 -0
  12. package/.agent-src/profiles/agency.yml +27 -0
  13. package/.agent-src/profiles/content_creator.yml +25 -0
  14. package/.agent-src/profiles/developer.yml +26 -0
  15. package/.agent-src/profiles/finance.yml +24 -0
  16. package/.agent-src/profiles/founder.yml +25 -0
  17. package/.agent-src/profiles/ops.yml +25 -0
  18. package/.agent-src/rules/no-cheap-questions.md +25 -17
  19. package/.agent-src/skills/adr-create/SKILL.md +78 -68
  20. package/.agent-src/skills/subagent-orchestration/SKILL.md +33 -0
  21. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  22. package/.agent-src/templates/skill-archive-note.md +101 -0
  23. package/.claude-plugin/marketplace.json +1 -1
  24. package/CHANGELOG.md +52 -30
  25. package/README.md +68 -72
  26. package/config/agent-settings.template.yml +22 -0
  27. package/docs/adrs/caveman/0001-default-off-until-bench.md +93 -0
  28. package/docs/adrs/caveman/README.md +9 -0
  29. package/docs/adrs/cost/0001-hard-stop-hook.md +114 -0
  30. package/docs/adrs/cost/README.md +9 -0
  31. package/docs/adrs/memory/0001-consumer-side-snapshot.md +111 -0
  32. package/docs/adrs/memory/README.md +9 -0
  33. package/docs/adrs/router/0001-three-tier-routing.md +119 -0
  34. package/docs/adrs/router/README.md +9 -0
  35. package/docs/adrs/schema/0001-json-schema-frontmatter.md +102 -0
  36. package/docs/adrs/schema/README.md +9 -0
  37. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +99 -0
  38. package/docs/adrs/smoke/README.md +9 -0
  39. package/docs/architecture/current-onboard-baseline.md +126 -0
  40. package/docs/architecture/current-safety-behavior.md +137 -0
  41. package/docs/archive/CHANGELOG-pre-2.16.0.md +48 -0
  42. package/docs/contracts/adr-layout.md +108 -0
  43. package/docs/contracts/benchmark-corpus-spec.md +97 -0
  44. package/docs/contracts/benchmark-report-schema.md +111 -0
  45. package/docs/contracts/command-clusters.md +1 -0
  46. package/docs/contracts/command-taxonomy.md +137 -0
  47. package/docs/contracts/compression-default-kill-criterion.md +69 -0
  48. package/docs/contracts/config-presets.md +144 -0
  49. package/docs/contracts/cost-dashboard.md +143 -0
  50. package/docs/contracts/cost-enforcement.md +134 -0
  51. package/docs/contracts/file-ownership-matrix.json +0 -7
  52. package/docs/contracts/mcp-tool-inventory.md +53 -0
  53. package/docs/contracts/measurement-baseline.md +102 -0
  54. package/docs/contracts/namespace.md +125 -0
  55. package/docs/contracts/profile-system.md +142 -0
  56. package/docs/contracts/safety-model.md +129 -0
  57. package/docs/contracts/smoke-contracts.md +144 -0
  58. package/docs/contracts/workflow-packs.md +121 -0
  59. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +132 -0
  60. package/docs/decisions/INDEX.md +1 -0
  61. package/docs/featured-commands.md +27 -0
  62. package/docs/parity/bench-ruflo.json +58 -0
  63. package/docs/parity/bench.json +41 -0
  64. package/docs/parity/ruflo.md +46 -0
  65. package/docs/profiles.md +91 -0
  66. package/package.json +1 -1
  67. package/scripts/_cli/cmd_explain.py +250 -0
  68. package/scripts/_lib/bench_cost.py +138 -0
  69. package/scripts/_lib/bench_quality.py +118 -0
  70. package/scripts/_lib/bench_report.py +150 -0
  71. package/scripts/agent-config +13 -0
  72. package/scripts/audit_adr_coverage.py +175 -0
  73. package/scripts/audit_mcp_tools.py +146 -0
  74. package/scripts/bench_baseline_ready.py +108 -0
  75. package/scripts/bench_drift_check.py +151 -0
  76. package/scripts/bench_per_tool.py +216 -0
  77. package/scripts/bench_run.py +155 -0
  78. package/scripts/config/__init__.py +9 -0
  79. package/scripts/config/presets.py +206 -0
  80. package/scripts/config/profiles.py +173 -0
  81. package/scripts/cost/budget.mjs +73 -12
  82. package/scripts/cost/preflight.mjs +89 -0
  83. package/scripts/lint_archived_skills.py +143 -0
  84. package/scripts/lint_bench_corpus.py +161 -0
  85. package/scripts/lint_namespace.py +135 -0
  86. package/scripts/skill_overlap.py +204 -0
  87. package/scripts/skill_usage_collect.py +191 -0
  88. package/scripts/skill_usage_report.py +162 -0
  89. package/scripts/smoke/kernel.sh +101 -0
  90. package/scripts/smoke/router.sh +129 -0
  91. package/scripts/smoke/schema.sh +71 -0
  92. package/scripts/smoke/skills.sh +101 -0
@@ -0,0 +1,144 @@
1
+ ---
2
+ stability: beta
3
+ keep-beta-until: 2026-08-14
4
+ ---
5
+
6
+ # Smoke Contracts — Phase 3 of step-11-ruflo-parity
7
+
8
+ > **Status:** active · **Owner:** step-11 Phase 3 · **Sibling:**
9
+ > [`measurement-baseline.md`](measurement-baseline.md) (snapshot semantics)
10
+ > · [`cost-enforcement.md`](cost-enforcement.md) (cost ladder)
11
+
12
+ Per-tier smoke scripts validate the system's structural baselines on
13
+ every PR that touches the tier. Each script is **fast** (≤ 30 s wall),
14
+ **deterministic** (same input → same exit), and **measured** (baseline
15
+ numbers come from `task smoke:*` on `main` at lock-in, not from claims).
16
+
17
+ ## § 1 — Runtime budget
18
+
19
+ Every `scripts/smoke/<tier>.sh` honours:
20
+
21
+ | Limit | Value | Rationale |
22
+ |---|---:|---|
23
+ | Wall time | ≤ 30 s | CI matrix slot; local dev iteration |
24
+ | External I/O | none beyond filesystem | no network, no MCP |
25
+ | Output | last line is the **baseline declaration** | parseable by CI summary |
26
+
27
+ A smoke that approaches 30 s should be split into sub-smokes, not
28
+ optimised in place.
29
+
30
+ ## § 2 — Path-trigger globs
31
+
32
+ CI's `.github/workflows/smoke.yml` dispatches the right scripts based on
33
+ the paths touched in the PR:
34
+
35
+ | Tier | Globs that trigger | Script |
36
+ |---|---|---|
37
+ | kernel | `.agent-src.uncompressed/rules/**`, `.agent-src/rules/**`, `router.json`, `scripts/measure_rule_budget.py` | `scripts/smoke/kernel.sh` |
38
+ | router | `router.json`, `.agent-src.uncompressed/rules/**`, `.agent-src.uncompressed/skills/**`, `docs/contracts/**`, `docs/guidelines/**` | `scripts/smoke/router.sh` |
39
+ | schema | `.agent-src.uncompressed/skills/**`, `.agent-src.uncompressed/rules/**`, `scripts/schemas/**`, `scripts/skill_linter.py`, `scripts/validate_frontmatter.py` | `scripts/smoke/schema.sh` |
40
+ | skills | `.agent-src.uncompressed/skills/**` | `scripts/smoke/skills.sh` |
41
+
42
+ `task smoke` runs all four locally regardless of paths.
43
+
44
+ ## § 3 — Baseline declarations (locked 2026-05-16)
45
+
46
+ Smoke baselines are **measured today**, not aspirational. They lock
47
+ **regression**: a smoke goes red only if the count drifts the wrong way.
48
+ Drift toward the ideal (fewer breaches, more fences) updates the
49
+ constant in the script body and the row below.
50
+
51
+ ### § 3.1 — Kernel (`scripts/smoke/kernel.sh`)
52
+
53
+ ```
54
+ 9 kernel rules · 8 carry Iron-Law fences · 1 dispatch index · ≤ 2 budget breaches
55
+ ```
56
+
57
+ - **9 kernel rules** — fixed by [`kernel-membership.md`](kernel-membership.md).
58
+ - **8 carry Iron-Law fences** — measured 2026-05-16. `agent-authority`
59
+ is the **dispatch index** (priority table pointing at the other four
60
+ authority rules); it is structurally exempt from the Iron-Law-fence
61
+ requirement and listed in the script's `EXEMPT_FROM_FENCE` set.
62
+ - **≤ 2 budget breaches** — `python3 scripts/measure_rule_budget.py
63
+ --kernel-budget-check` currently reports 2 breaches
64
+ (`kernel-bucket > 26000`, `no-cheap-questions > 4000`). The smoke
65
+ asserts the count does not grow; reductions update `EXPECTED_BREACHES`
66
+ in `scripts/smoke/kernel.sh`. See
67
+ `road-to-kernel-and-router.md`
68
+ for the path back to zero.
69
+
70
+ ### § 3.2 — Router (`scripts/smoke/router.sh`)
71
+
72
+ ```
73
+ 75 router ids · 0 broken rule pointers · 35 routes_to refs · 2 missing contracts
74
+ ```
75
+
76
+ - **75 ids** — 9 kernel + 24 tier_1 + 42 tier_2; every id resolves to
77
+ `.agent-src/rules/<id>.md`.
78
+ - **0 broken rule pointers** — hard assertion; smoke fails on any miss.
79
+ - **35 routes_to refs** across tier_1 + tier_2; resolver honours the
80
+ four prefixes (`skill:`, `command:`, `guideline:`, `contract:`).
81
+ - **2 missing contracts** — measured 2026-05-16:
82
+ `contract:artifact-engagement-flow`,
83
+ `contract:command-suggestion-flow`. Tracked separately under
84
+ ``step-11` Phase 4 (ADR layout)`;
85
+ smoke asserts the count is `≤ EXPECTED_MISSING_CONTRACTS=2`.
86
+
87
+ ### § 3.3 — Schema (`scripts/smoke/schema.sh`)
88
+
89
+ ```
90
+ 438 lintable artefacts · 0 schema FAILs · ≤ 92 warns
91
+ ```
92
+
93
+ - **0 FAILs** — hard assertion. `scripts/skill_linter.py --all` returns
94
+ exit 0/1 (warns) but never 2 (fail).
95
+ - **≤ 92 warns** — measured 2026-05-16; locks regression. Warns
96
+ trending down updates the constant.
97
+ - **v2 schema (step-5) deferred** — when
98
+ `step-5-schema-rigor.md`
99
+ Phase 1 closes, this smoke gains a `model_tier` presence assertion;
100
+ Phase 3 adds `schema_version: "2"`. Until then, v1 schema in
101
+ `scripts/schemas/skill.schema.json` is the contract.
102
+
103
+ ### § 3.4 — Skills (`scripts/smoke/skills.sh`)
104
+
105
+ ```
106
+ 5/5 random skills resolve · frontmatter parses · name matches directory
107
+ ```
108
+
109
+ - **5 random skills** picked deterministically (seed = epoch day) from
110
+ `.agent-src.uncompressed/skills/*/SKILL.md` and re-validated via
111
+ `scripts/validate_frontmatter.py`. `agent-config explain skill` is
112
+ **not** invoked — `explain` only supports `{config,rule,route}` today
113
+ ([`scripts/agent-config/cmd_explain.py`](../../scripts/agent-config/cmd_explain.py));
114
+ filesystem-resolution is the contract.
115
+
116
+ ## § 4 — Local invocation
117
+
118
+ ```bash
119
+ task smoke # all four
120
+ task smoke:kernel # individual tiers
121
+ task smoke:router
122
+ task smoke:schema
123
+ task smoke:skills
124
+ ```
125
+
126
+ Every script honours `SMOKE_QUIET=1` (suppresses table output, keeps
127
+ the final baseline line) for CI summary parsing.
128
+
129
+ ## § 5 — Failure modes
130
+
131
+ | Symptom | Likely cause | Fix |
132
+ |---|---|---|
133
+ | `kernel.sh` reports > 8 missing fences | Kernel rule lost its Iron Law block during edit | Restore the fence; update `EXEMPT_FROM_FENCE` only for new dispatch indexes |
134
+ | `router.sh` reports > 0 broken pointers | `router.json` references an id without a rule file | Add the rule or remove the route — never edit the smoke baseline up |
135
+ | `schema.sh` reports FAILs | A skill / rule lost a required field | Restore via [`scripts/schemas/skill.schema.json`](../../scripts/schemas/skill.schema.json) |
136
+ | `skills.sh` 5/5 random sample fails | Hand-edit broke frontmatter or renamed directory without updating `name:` | Restore filename ↔ slug coupling |
137
+
138
+ ## § 6 — See also
139
+
140
+ - [`measurement-baseline.md`](measurement-baseline.md) — measurement substrate.
141
+ - [`cost-enforcement.md`](cost-enforcement.md) — cost ladder, sibling smoke surface.
142
+ - [`kernel-membership.md`](kernel-membership.md) — the 9-rule kernel set.
143
+ - [`rule-router.md`](rule-router.md) — router contract.
144
+ - `road-to-kernel-and-router.md` — kernel budget reduction path.
@@ -0,0 +1,121 @@
1
+ ---
2
+ stability: beta
3
+ keep-beta-until: 2026-08-12
4
+ ---
5
+
6
+ # Workflow packs
7
+
8
+ > **Status:** beta — first draft 2026-05-16 (Phase 2 Item 7 of
9
+ > `step-15-product-refinement`).
10
+
11
+ A **workflow pack** bundles a `(profile + preset + command-set +
12
+ skill-allowlist)` combination into a single YAML so a user can adopt
13
+ the full opinionated stance for their role without picking five
14
+ independent settings.
15
+
16
+ Packs do **not** introduce new commands, skills, or rules. They are
17
+ a **composition contract** — every reference must resolve to an
18
+ existing artefact that has already passed its own contract / linter
19
+ gates.
20
+
21
+ ## Schema
22
+
23
+ ```yaml
24
+ # .agent-src.uncompressed/packs/<pack-id>.yml
25
+ pack:
26
+ id: <pack-id> # kebab-case, file name without .yml
27
+ audience:
28
+ label: "<human-readable>"
29
+ one_liner: "<= 120 chars, what the pack does for the user>"
30
+ composition:
31
+ profile_id: <profile.id> # MUST exist in profiles/
32
+ preset_id: <preset.id> # MUST exist in presets/
33
+ surface:
34
+ commands_allowed: # ≤ 12 — slash-command names without leading slash
35
+ - <command>
36
+ skills_allowed: # ≤ 15 — skill IDs from skills-catalog
37
+ - <skill>
38
+ personas: # ≤ 4 — persona IDs from personas/
39
+ - <persona>
40
+ rationale: # why this combination, not free-form notes
41
+ why_this_profile: "<one paragraph>"
42
+ why_this_preset: "<one paragraph>"
43
+ why_these_commands: "<one paragraph>"
44
+ ```
45
+
46
+ ### Field semantics
47
+
48
+ | Field | Type | Required | Notes |
49
+ |---|---|:-:|---|
50
+ | `pack.id` | string | yes | Matches file stem. No collision with `profile.id` or `preset.id`. |
51
+ | `composition.profile_id` | string | yes | Override applied to the chain documented in [`profile-system`](profile-system.md). Pack-supplied id wins over `.agent-settings.yml` only when the user explicitly opts in via `/onboard --pack <id>`. |
52
+ | `composition.preset_id` | string | yes | Override applied to the chain documented in [`config-presets`](config-presets.md). Same opt-in semantics. |
53
+ | `surface.commands_allowed` | list[string] | yes | Cap = **12**. Items must appear in [`command-clusters`](command-clusters.md). The pack does **not** disable other commands — the cap is for the wizard's first-screen rendering, not enforcement. |
54
+ | `surface.skills_allowed` | list[string] | yes | Cap = **15**. Items must appear in `docs/skills-catalog.md`. Same render-only semantics. |
55
+ | `surface.personas` | list[string] | yes | Cap = **4**. Items must appear in `.agent-src.uncompressed/personas/`. |
56
+ | `rationale.*` | string | yes | Forces every pack to justify its composition in plain prose; reviewed at PR time, not at runtime. |
57
+
58
+ ## Resolution chain
59
+
60
+ Packs are an **opt-in layer above the profile + preset chain**. The
61
+ loader at `scripts/config/packs.py` (Phase 2 deliverable — not yet
62
+ shipped) reads the pack iff:
63
+
64
+ 1. `--pack <id>` flag passed to `/onboard` or `agent-config init`, **or**
65
+ 2. `pack.id` set in `.agent-settings.yml` (written by `/onboard --pack`).
66
+
67
+ When a pack is active:
68
+
69
+ - `composition.profile_id` is passed to `profiles.load()` as
70
+ `pack_profile_id` (already wired — see `scripts/config/profiles.py`).
71
+ - `composition.preset_id` is passed to `presets.load()` analogously.
72
+ - `surface.*` lists override the rendered command / skill lists in
73
+ `/onboard` and in the README "Six entry paths" surface **for the
74
+ duration of the active pack only**.
75
+
76
+ Removing a pack (`/onboard --pack none`) reverts to the underlying
77
+ profile + preset defaults; **no data is lost**.
78
+
79
+ ## Validation
80
+
81
+ `scripts/lint_packs.py` (Phase 2 deliverable — not yet shipped) fails
82
+ CI on:
83
+
84
+ - Missing required field.
85
+ - `profile_id` / `preset_id` / `commands_allowed` / `skills_allowed`
86
+ / `personas` referencing an artefact that does not exist.
87
+ - Cap violation (commands > 12, skills > 15, personas > 4).
88
+ - `pack.id` collision with another pack, profile, or preset id.
89
+
90
+ Until the linter lands, packs are reviewed by hand at PR time against
91
+ this schema.
92
+
93
+ ## What packs do **not** do
94
+
95
+ - **Do not** declare new commands. Use [`command-clusters`](command-clusters.md).
96
+ - **Do not** modify rules. Use the kernel-rule edit process.
97
+ - **Do not** override safety floors. Domain-safety rules
98
+ (`.agent-src.uncompressed/rules/domain-safety-*.md`) apply
99
+ unconditionally — packs cannot widen the deny-list.
100
+ - **Do not** ship telemetry or usage hints. Packs are pure composition.
101
+
102
+ ## Seed packs
103
+
104
+ Three packs ship at Phase 2 Item 7 close:
105
+
106
+ | Pack id | Profile | Preset | One-liner |
107
+ |---|---|---|---|
108
+ | `founder-mvp` | `founder` | `fast` | Ship the MVP and the pitch deck in the same week. |
109
+ | `content-engine` | `content_creator` | `balanced` | Editorial calendar, brand voice, and ghostwriter on one loop. |
110
+ | `agency-delivery` | `agency` | `strict` | Multi-client refine → estimate → deliver with audit-grade trace. |
111
+
112
+ Each pack lives at `.agent-src.uncompressed/packs/<id>.yml` and is
113
+ covered by the validation rules above.
114
+
115
+ ## See also
116
+
117
+ - [`profile-system`](profile-system.md) — profile axis (audience defaults)
118
+ - [`config-presets`](config-presets.md) — preset axis (risk appetite)
119
+ - [`command-clusters`](command-clusters.md) — verb axis (invocation)
120
+ - [`command-taxonomy`](command-taxonomy.md) — discoverability axis
121
+ - `step-15-product-refinement` § Phase 2 Item 7
@@ -0,0 +1,132 @@
1
+ ---
2
+ adr: 010
3
+ status: proposed
4
+ date: 2026-05-16
5
+ decision: profile-pack-preset-boundary
6
+ supersedes: —
7
+ superseded_by: —
8
+ phase: v2.x · step-15 Phase 1 prerequisite
9
+ ---
10
+
11
+ # ADR-010 — Profile / Pack / Preset Boundary
12
+
13
+ ## Status
14
+
15
+ **Proposed** · 2026-05-16 · pending Phase 1 of
16
+ [`agents/roadmaps/step-15-product-refinement.md`](../../agents/roadmaps/step-15-product-refinement.md).
17
+ Council v3 action #2 (`agents/council-responses/2026-05-16-step-15-product-refinement-v3.json`): <!-- council-ref-allowed: ADR decision-trace to originating council response -->
18
+ **"Profile / Pack / Preset boundary is undefined; Phase 2 will duplicate
19
+ Phase 1 abstractions"**. Promoted from Phase 2 to Phase 1 prerequisite —
20
+ the profile loader (Phase 1 item 1) cannot ship without the boundary.
21
+
22
+ ## Context
23
+
24
+ Step-15 introduces three new configuration concepts:
25
+
26
+ - **Profile** — Phase 1 item 1: `profile.id` ∈ {`founder`, `developer`,
27
+ `content_creator`, `agency`, `finance`, `ops`}.
28
+ - **Preset** — Phase 1 item 4: `preset.id` ∈ {`fast`, `balanced`,
29
+ `strict`} bundling 12+ governance knobs (cost caps, confidence band,
30
+ block-on-risk, …).
31
+ - **Pack** — Phase 2 item 7: workflow bundles (`founder-mvp`,
32
+ `content-engine`, `agency-delivery`) of `(profile + preset +
33
+ command-set + skill-allowlist)`.
34
+
35
+ A pre-existing fourth concept is in play:
36
+
37
+ - **`cost_profile`** — current setting in `.agent-settings.yml`, values
38
+ `minimal` / `balanced` / `full` / `custom`. Owns **rule-tier loading**
39
+ (kernel · kernel + tier-1 · kernel + tier-1 + tier-2). Contract:
40
+ [`docs/contracts/cost-profile-defaults.md`](../contracts/cost-profile-defaults.md).
41
+
42
+ Without a written boundary, three failure modes are predictable:
43
+
44
+ 1. The preset loader re-implements rule-tier gating (overlap with
45
+ `cost_profile`).
46
+ 2. Packs ship duplicate `profile` + `preset` defaults that drift from
47
+ the canonical source.
48
+ 3. Three teams add knobs to three places, and a user picking
49
+ `developer + strict + founder-mvp` discovers contradicting values
50
+ at runtime.
51
+
52
+ ## Decision
53
+
54
+ Four orthogonal axes, four owners, one resolution chain.
55
+
56
+ | Axis | Answers | Owns | Identity key |
57
+ |---|---|---|---|
58
+ | **Profile** | *Who is the user?* (audience taxonomy) | Default skill/command surface; README entry-paragraph; persona pre-selection | `profile.id` |
59
+ | **Preset** | *How cautious is this run?* (risk + cost + autonomy budget) | The 12+ governance knobs (per-call $ ceiling, confidence band, block-on-risk, autonomy default, council escalation, …) | `preset.id` |
60
+ | **Pack** | *What bundle of skills + commands?* (workflow recipe) | A frozen `(profile, preset, allow_skills, allow_commands)` 4-tuple; nothing more | `pack.id` |
61
+ | **Cost Profile** | *How many rules load?* (token budget) | Rule-tier loading at session start (kernel · +tier-1 · +tier-2) | `cost_profile` |
62
+
63
+ ### Resolution chain (read order, last writer wins)
64
+
65
+ ```
66
+ pack → profile → preset → cost_profile → user/env/runtime overrides
67
+ ```
68
+
69
+ - A **pack** declares defaults for `profile`, `preset`, and the
70
+ skill / command allowlists. It cannot set `cost_profile` (that
71
+ axis belongs to the rule-tier loader and is governed separately).
72
+ - A **profile** declares defaults for `preset`, audience-specific
73
+ README pointer, persona pre-selection. It cannot set any preset
74
+ knob directly — only `preset.id`.
75
+ - A **preset** owns the 12+ knobs. No other axis writes them.
76
+ - A **cost_profile** owns rule-tier loading. No other axis writes it.
77
+ - The user's `.agent-settings.yml`, environment variables, and
78
+ runtime CLI flags override every axis above them.
79
+
80
+ ### Non-overlap rules (Iron Law)
81
+
82
+ ```
83
+ A KNOB BELONGS TO EXACTLY ONE AXIS.
84
+ DUPLICATION ACROSS AXES IS A CONTRACT VIOLATION.
85
+ ```
86
+
87
+ - A pack **may not** override a preset knob; it overrides `preset.id`.
88
+ - A profile **may not** override a preset knob; it overrides `preset.id`.
89
+ - A preset **may not** override `cost_profile`; the user does that.
90
+ - The CI `task lint-config-schema` (added in Phase 1) hard-fails on a
91
+ pack/profile YAML that names any preset-owned knob.
92
+
93
+ ## Consequences
94
+
95
+ ### Positive
96
+
97
+ - Phase 1 ships the profile loader against a fixed surface (`profile.id`
98
+ → audience + `preset.id` + persona). No 12-knob inheritance ambiguity.
99
+ - Phase 1 item 4 (Config Presets) owns the knobs alone. The "Cost
100
+ Enforcement" section in [`config-presets.md`](../contracts/config-presets.md)
101
+ has a single home.
102
+ - Phase 2 item 7 (Workflow Packs) is a 4-tuple, not a re-implementation
103
+ of profile + preset. Pack YAML stays under 30 lines.
104
+ - `cost_profile` keeps its single-axis charter; this ADR explicitly
105
+ refuses to fold it into the preset layer.
106
+
107
+ ### Negative
108
+
109
+ - One more concept on the install screen (`profile` + `preset` + `pack`
110
+ + `cost_profile` = four axes). Mitigated by: the wizard (Phase 1 item
111
+ 2) only asks for **profile** + **stack** + **risk appetite** and
112
+ derives the rest. Packs are opt-in; `cost_profile` keeps its
113
+ `balanced` default.
114
+ - A skill-allowlist conflict between a pack and a runtime CLI flag is
115
+ resolved by "runtime wins". Users on a pack who shadow-disable a
116
+ skill will not see it again until the override is removed.
117
+
118
+ ### Neutral
119
+
120
+ - This ADR records the boundary; it does **not** specify the seed
121
+ values for any axis. Profile IDs live in
122
+ [`docs/contracts/profile-system.md`](../contracts/profile-system.md)
123
+ (Phase 1 item 1). Preset knobs live in
124
+ [`docs/contracts/config-presets.md`](../contracts/config-presets.md)
125
+ (Phase 1 item 4). Pack shape lives in `docs/contracts/workflow-packs.md`
126
+ (Phase 2 item 7).
127
+
128
+ ## See also
129
+
130
+ - [`docs/contracts/cost-profile-defaults.md`](../contracts/cost-profile-defaults.md) — the existing `cost_profile` contract this ADR explicitly does **not** touch.
131
+ - [`agents/roadmaps/step-15-product-refinement.md`](../../agents/roadmaps/step-15-product-refinement.md) — Phase 1 items 1, 4 and Phase 2 item 7.
132
+ - [`agents/council-responses/2026-05-16-step-15-product-refinement-v3.json`](../../agents/council-responses/2026-05-16-step-15-product-refinement-v3.json) — Council v3 action #2 (origin). <!-- council-ref-allowed: ADR decision-trace to originating council response -->
@@ -13,6 +13,7 @@ _Auto-generated by `scripts/adr/regenerate_index.py`. Do not edit._
13
13
  | [ADR-007](ADR-007-agent-discovery-scopes.md) | Global Default Install With Export Subcommand | accepted | 2026-05-12 | — |
14
14
  | [ADR-008](ADR-008-installed-tools-manifest.md) | Committed Installed Tools Manifest Separate From Settings | proposed | 2026-05-12 | — |
15
15
  | [ADR-009](ADR-009-event4u-namespace.md) | Event4U Namespace And Claude Desktop Zip Bundles | accepted | 2026-05-13 | — |
16
+ | [ADR-010](ADR-010-profile-pack-preset-boundary.md) | Profile Pack Preset Boundary | proposed | 2026-05-16 | — |
16
17
 
17
18
  ## Unnumbered (legacy)
18
19
 
@@ -0,0 +1,27 @@
1
+ # Featured Commands
2
+
3
+ A curated subset of the 124 active commands. Full set lives in
4
+ [`.agent-src/commands/`](../.agent-src/commands/) — see also
5
+ [`docs/catalog.md`](catalog.md) for the complete index.
6
+
7
+ ## For developers
8
+
9
+ | Command | What it does |
10
+ |---|---|
11
+ | [`/implement-ticket`](../.agent-src/commands/implement-ticket.md) | Drive a Jira / Linear ticket end-to-end through refine → plan → implement → test → verify |
12
+ | [`/work`](../.agent-src/commands/work.md) | Same end-to-end loop for a free-form prompt — confidence-band gated |
13
+ | [`/fix ci`](../.agent-src/commands/fix.md) | Fetch CI failures from GitHub Actions and fix them |
14
+ | [`/review-changes`](../.agent-src/commands/review-changes.md) | Self-review local changes before creating a PR (five judges) |
15
+ | [`/create-pr`](../.agent-src/commands/create-pr.md) | Create a GitHub PR with Jira-linked description |
16
+
17
+ ## For everyone
18
+
19
+ | Command | What it does |
20
+ |---|---|
21
+ | [`/research`](../.agent-src/commands/research.md) | Survey / benchmark / competitive scan scaffolder — picks objects, defines fields |
22
+ | [`po-discovery`](../.agent-src/skills/po-discovery/SKILL.md) | Shape a fuzzy product ask into a refined backlog item — problem framing, AC tightening |
23
+ | [`/ghostwriter:write`](../.agent-src/commands/ghostwriter/write.md) | Draft in a public-figure voice profile (mandatory disclosure footer) |
24
+ | [`/challenge-me`](../.agent-src/commands/challenge-me.md) | Interactive grill-style interview that sharpens a fuzzy plan into a copyable pitch |
25
+ | [`/fundraising-narrative`](../.agent-src/skills/fundraising-narrative/SKILL.md) | Shape a capital-raise pitch — why-now / why-us / why-this framing |
26
+
27
+ → [Browse all 124 active commands](../.agent-src/commands/)
@@ -0,0 +1,58 @@
1
+ {
2
+ "schema": "parity-bench-ruflo-v1",
3
+ "status": "infrastructure_ready_awaiting_corpus_run",
4
+ "owner_roadmap": "agents/roadmaps/step-11-ruflo-parity.md",
5
+ "parity_doc": "docs/parity/ruflo.md",
6
+ "parent_bench": "docs/parity/bench.json",
7
+ "claim_under_test": {
8
+ "source": "agents/audit-2026-05-14-north-star/external-findings.md § 2",
9
+ "headline": "Average dollar cost per 25-prompt corpus run, separated by model tier (Haiku / Sonnet / Opus) and by token class (input / output / cache-read / cache-write).",
10
+ "comparison_target": "ruflo cost-tracker README (claimed upstream, not yet pulled into this repo)",
11
+ "type": "claimed_upstream_not_verified_in_repo"
12
+ },
13
+ "measurement_protocol": {
14
+ "corpus": "bench/corpus/* (25-prompt corpus owned by step-4-measurement-and-benchmark.md)",
15
+ "tracker": "scripts/cost/track.mjs",
16
+ "pricing": "bench/pricing.yaml",
17
+ "session_source": "~/.claude/projects/*/sessions/*.jsonl (Claude Code-native, no manual tracking)",
18
+ "tokens_to_dollars": "track.mjs multiplies input/output/cache-read/cache-write tokens by per-1M pricing from bench/pricing.yaml, separated by model id",
19
+ "headline_output": "average dollar cost per 25-prompt run, with min / max / p50 / p90 across N reports"
20
+ },
21
+ "current_window": {
22
+ "report_count": 0,
23
+ "verdict": "awaiting_first_corpus_run",
24
+ "notes": "Phase 1-5 of step-11 delivered the cost-tracking and bench infrastructure. Phase 6 Step 2 awaits the first end-to-end 25-prompt corpus run against the live tracker. Until then this file exists as a methodology contract, not a verdict surface."
25
+ },
26
+ "soak_inheritance": {
27
+ "follows": "docs/parity/bench.json",
28
+ "min_days": 60,
29
+ "min_reports": 30,
30
+ "earliest_flip": "2026-07-15",
31
+ "arbiter_command": "task bench:baseline-ready",
32
+ "notes": "bench-ruflo.json flips status to 'baseline_ready' only after the parent bench.json flips. No independent soak window — same corpus, same arbiter."
33
+ },
34
+ "redundancy_verdict": {
35
+ "status": "pending",
36
+ "criterion": "Once bench.json soak completes, this verdict is set by comparing the dollar cost in current_window vs ruflo's published table.",
37
+ "outcome_branches": {
38
+ "redundant": "Our cost-per-25-prompt-run sits within Ruflo's published range (or beats it). G5 redundancy gate row for cost surface flips green.",
39
+ "behind": "Our cost-per-run > Ruflo's. Follow-up issue filed; G5 stays open."
40
+ }
41
+ },
42
+ "fields_pending_first_run": [
43
+ "current_window.avg_cost_per_run_usd",
44
+ "current_window.cost_by_model.haiku_usd",
45
+ "current_window.cost_by_model.sonnet_usd",
46
+ "current_window.cost_by_model.opus_usd",
47
+ "current_window.cost_by_class.input_usd",
48
+ "current_window.cost_by_class.output_usd",
49
+ "current_window.cost_by_class.cache_read_usd",
50
+ "current_window.cost_by_class.cache_write_usd"
51
+ ],
52
+ "decisions_pending": {},
53
+ "_meta": {
54
+ "created": "2026-05-16",
55
+ "created_by": "step-11-ruflo-parity.md Phase 6 Step 2",
56
+ "spec": "scripts/cost/track.mjs --bench-ruflo (planned wiring); for now the file is a methodology contract"
57
+ }
58
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "schema": "parity-bench-v1",
3
+ "status": "soak_in_progress",
4
+ "owner_roadmap": "agents/roadmaps/step-4-measurement-and-benchmark.md",
5
+ "contract": "docs/contracts/measurement-baseline.md",
6
+ "soak": {
7
+ "start_date": "2026-05-16",
8
+ "min_days": 60,
9
+ "min_reports": 30,
10
+ "earliest_flip": "2026-07-15",
11
+ "arbiter_command": "task bench:baseline-ready"
12
+ },
13
+ "current_window": {
14
+ "report_count": 1,
15
+ "days_elapsed": 0,
16
+ "verdict": "warmup",
17
+ "notes": "First infrastructure-shakedown run only. Numbers below are not the baseline."
18
+ },
19
+ "shakedown_run": {
20
+ "report": "bench/reports/2026-05-16T06-13-07Z-dev-projection.md",
21
+ "corpus": "dev",
22
+ "selection_accuracy_augment": 0.5,
23
+ "selection_accuracy_claude": 0.5,
24
+ "projection_fidelity_claude": 1.0,
25
+ "projection_fidelity_cursor": "not_applicable",
26
+ "projection_fidelity_cline": "not_applicable",
27
+ "projection_fidelity_windsurf": "not_applicable"
28
+ },
29
+ "decisions_pending": {
30
+ "compression_default": {
31
+ "kill_criterion": "docs/contracts/compression-default-kill-criterion.md",
32
+ "verdict": "deferred_until_baseline_closes",
33
+ "decision_owner": "step-4 closeout phase"
34
+ }
35
+ },
36
+ "downstream_consumers": [
37
+ "agents/roadmaps/step-99-north-star-restructure.md#G1",
38
+ "agents/roadmaps/step-2-skill-inventory-rationalization.md#G0",
39
+ "docs/contracts/compression-default-kill-criterion.md"
40
+ ]
41
+ }
@@ -0,0 +1,46 @@
1
+ # Parity verdict — Ruflo
2
+
3
+ > Per-row verdict against the eight Ruflo measurement-governance patterns
4
+ > catalogued in
5
+ > [`external-findings.md § 2`](../../agents/audit-2026-05-14-north-star/external-findings.md).
6
+ > Owner roadmap: [`step-11-ruflo-parity.md`](../../agents/roadmaps/step-11-ruflo-parity.md)
7
+ > (Phase 6 Step 1). Cross-index lives at
8
+ > [`step-99-north-star-restructure.md`](../../agents/roadmaps/step-99-north-star-restructure.md)
9
+ > Phase 5 Step 2.
10
+ >
11
+ > **Verdict legend:** `[x] covered by <file:line>` · `[~] superseded by <approach>` · `[!] gap`.
12
+ > **Acceptance:** zero `[!]` rows. Closure flips the corresponding cell in the
13
+ > [composite scorecard](../../agents/audit-2026-05-14-north-star/external-findings.md#5-composite-scorecard--agent-config-vs-the-field)
14
+ > `vs Ruflo` column from `–` to `=` or `+`.
15
+
16
+ **Measured-vs-claimed disclaimer:** Each row cites the **mechanism** that
17
+ covers Ruflo's pattern. Numbers attached to those mechanisms (cost figures,
18
+ smoke baselines, ADR count) are claimed until the 25-prompt bench corpus
19
+ soak in [`bench.json`](bench.json) flips from `warmup` to `baseline_ready`
20
+ (min 60 days, ≥ 30 reports — earliest 2026-07-15).
21
+
22
+ ## Verdict table
23
+
24
+ | # | Ruflo pattern | Verdict | Evidence |
25
+ |---|---|---|---|
26
+ | 1 | **Cost-tracker plugin** — real model pricing, per-1M, separated input/output/cache | `[x] covered by` | [`scripts/cost/track.mjs`](../../scripts/cost/track.mjs) + [`bench/pricing.yaml`](../../bench/pricing.yaml) (Haiku/Sonnet/Opus per-1M, input/output/cache-read/cache-write split). Step-11 Phase 1. |
27
+ | 2 | **Auto-capture from session jsonl** — reads Claude Code log, no manual tracking | `[x] covered by` | [`scripts/cost/track.mjs`](../../scripts/cost/track.mjs) reads `~/.claude/projects/*/sessions/*.jsonl` automatically. Step-11 Phase 1 Step 1. |
28
+ | 3 | **50/75/90/100 % budget ladder with hard stop** | `[x] covered by` | [`scripts/cost/budget.mjs`](../../scripts/cost/budget.mjs) — exit codes 0/1/2/3 per tier; opt-in fail-closed via `cost.enforcement` setting. Fixtures: `tests/fixtures/cost/budget/{under-50,at-100,over-100}/`. Step-11 Phase 2. |
29
+ | 4 | **Measured-vs-claimed disclaimer** — every percentage tagged "claimed upstream" | `[x] covered by` | One-line `**Measured-vs-claimed disclaimer:**` header block on all 9 active roadmaps in `agents/roadmaps/`. Verified 2026-05-16. Step-11 Phase 5 Step 4. |
30
+ | 5 | **Smoke test as contract** — `bash scripts/smoke.sh` with declared baseline | `[x] covered by` | Four per-tier smoke scripts: [`scripts/smoke/kernel.sh`](../../scripts/smoke/kernel.sh), [`router.sh`](../../scripts/smoke/router.sh), [`schema.sh`](../../scripts/smoke/schema.sh), [`skills.sh`](../../scripts/smoke/skills.sh). Declared baselines in [`docs/contracts/smoke-contracts.md`](../contracts/smoke-contracts.md). CI gate: [`.github/workflows/smoke.yml`](../../.github/workflows/smoke.yml). Step-11 Phase 3. |
31
+ | 6 | **Per-plugin ADR directory** — `docs/adrs/0001-*.md` co-located with subsystem | `[x] covered by` | Six bootstrap ADRs under [`docs/adrs/{cost,memory,router,schema,smoke,caveman}/`](../adrs/). Coverage gate: [`scripts/audit_adr_coverage.py`](../../scripts/audit_adr_coverage.py) (`task lint-adr-coverage`). Contract: [`docs/contracts/adr-layout.md`](../contracts/adr-layout.md). Step-11 Phase 4. |
32
+ | 7 | **Namespace contract** — `<stem>-<intent>` kebab-case, reserved-names list | `[x] covered by` | [`scripts/lint_namespace.py`](../../scripts/lint_namespace.py) enforces shape + length floors + reserved-names + skill-dir-matches-name across 430 names · 0 issues. Contract: [`docs/contracts/namespace.md`](../contracts/namespace.md). CI gate: `task lint-namespace`. Step-11 Phase 5 Step 1. |
33
+ | 8 | **Topology choices in swarm** — `hierarchical / mesh / star / adaptive` with anti-drift defaults | `[x] covered by` | [`.agent-src.uncompressed/skills/subagent-orchestration/SKILL.md`](../../.agent-src.uncompressed/skills/subagent-orchestration/SKILL.md) `Topology hints` subsection — 7-row table mapping each mode to topology + Ruflo anti-drift default (`hierarchical, 6–8 agents, raft consensus`). Step-11 Phase 5 Step 2. |
34
+ | 9 | **MCP-tool count + source-line refs** — every tool with `<file>:<line>` citation | `[x] covered by` | [`docs/contracts/mcp-tool-inventory.md`](../contracts/mcp-tool-inventory.md) — 20 tools (9 stdio-implemented · 11 discovery stubs) each with catalog `<file>:<line>` + handler `<file>:<line>`. Generator: [`scripts/audit_mcp_tools.py`](../../scripts/audit_mcp_tools.py). CI drift gate: `task lint-mcp-inventory`. Step-11 Phase 5 Step 3. |
35
+
36
+ ## Open `[!]` rows
37
+
38
+ **Zero.** Every Ruflo pattern is mechanism-covered. Numbers behind those
39
+ mechanisms remain claimed until [`bench.json`](bench.json) soak completes
40
+ (see disclaimer above).
41
+
42
+ ## Cross-references
43
+
44
+ - Composite scorecard refresh: owned by [`step-99-north-star-restructure.md`](../../agents/roadmaps/step-99-north-star-restructure.md) Phase 5 Step 4 (replaces [`external-findings.md § 5`](../../agents/audit-2026-05-14-north-star/external-findings.md)).
45
+ - Bench-ruflo redundancy verdict: [`bench-ruflo.json`](bench-ruflo.json) (step-11 Phase 6 Step 2).
46
+ - G5 redundancy gate cite: step-99 Acceptance Criteria row "G5 — external redundancy (Domination Mandate)".