@event4u/agent-config 2.19.0 → 2.20.1
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/.agent-src/commands/agent-status.md +29 -0
- package/.agent-src/commands/onboard.md +221 -81
- package/.agent-src/packs/README.md +49 -0
- package/.agent-src/packs/agency-delivery.yml +63 -0
- package/.agent-src/packs/content-engine.yml +53 -0
- package/.agent-src/packs/founder-mvp.yml +51 -0
- package/.agent-src/presets/README.md +26 -0
- package/.agent-src/presets/balanced.yml +34 -0
- package/.agent-src/presets/fast.yml +31 -0
- package/.agent-src/presets/strict.yml +38 -0
- package/.agent-src/profiles/README.md +29 -0
- package/.agent-src/profiles/agency.yml +27 -0
- package/.agent-src/profiles/content_creator.yml +25 -0
- package/.agent-src/profiles/developer.yml +26 -0
- package/.agent-src/profiles/finance.yml +24 -0
- package/.agent-src/profiles/founder.yml +25 -0
- package/.agent-src/profiles/ops.yml +25 -0
- package/.agent-src/rules/no-cheap-questions.md +25 -17
- package/.agent-src/skills/adr-create/SKILL.md +78 -68
- package/.agent-src/skills/subagent-orchestration/SKILL.md +33 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.agent-src/templates/skill-archive-note.md +101 -0
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +73 -70
- package/README.md +68 -72
- package/config/agent-settings.template.yml +22 -0
- package/docs/adrs/caveman/0001-default-off-until-bench.md +93 -0
- package/docs/adrs/caveman/README.md +9 -0
- package/docs/adrs/cost/0001-hard-stop-hook.md +114 -0
- package/docs/adrs/cost/README.md +9 -0
- package/docs/adrs/memory/0001-consumer-side-snapshot.md +111 -0
- package/docs/adrs/memory/README.md +9 -0
- package/docs/adrs/router/0001-three-tier-routing.md +119 -0
- package/docs/adrs/router/README.md +9 -0
- package/docs/adrs/schema/0001-json-schema-frontmatter.md +102 -0
- package/docs/adrs/schema/README.md +9 -0
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +99 -0
- package/docs/adrs/smoke/README.md +9 -0
- package/docs/architecture/current-onboard-baseline.md +126 -0
- package/docs/architecture/current-safety-behavior.md +137 -0
- package/docs/archive/CHANGELOG-pre-2.16.0.md +48 -0
- package/docs/archive/CHANGELOG-pre-2.17.0.md +63 -0
- package/docs/contracts/adr-layout.md +108 -0
- package/docs/contracts/benchmark-corpus-spec.md +97 -0
- package/docs/contracts/benchmark-report-schema.md +111 -0
- package/docs/contracts/command-clusters.md +1 -0
- package/docs/contracts/command-taxonomy.md +137 -0
- package/docs/contracts/compression-default-kill-criterion.md +69 -0
- package/docs/contracts/config-presets.md +144 -0
- package/docs/contracts/cost-dashboard.md +143 -0
- package/docs/contracts/cost-enforcement.md +134 -0
- package/docs/contracts/file-ownership-matrix.json +0 -7
- package/docs/contracts/mcp-tool-inventory.md +53 -0
- package/docs/contracts/measurement-baseline.md +102 -0
- package/docs/contracts/namespace.md +125 -0
- package/docs/contracts/profile-system.md +142 -0
- package/docs/contracts/safety-model.md +129 -0
- package/docs/contracts/smoke-contracts.md +144 -0
- package/docs/contracts/workflow-packs.md +121 -0
- package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +132 -0
- package/docs/decisions/INDEX.md +1 -0
- package/docs/featured-commands.md +27 -0
- package/docs/parity/bench-ruflo.json +58 -0
- package/docs/parity/bench.json +41 -0
- package/docs/parity/ruflo.md +46 -0
- package/docs/profiles.md +91 -0
- package/package.json +1 -1
- package/scripts/_cli/cmd_explain.py +250 -0
- package/scripts/_lib/bench_cost.py +138 -0
- package/scripts/_lib/bench_quality.py +118 -0
- package/scripts/_lib/bench_report.py +150 -0
- package/scripts/agent-config +13 -0
- package/scripts/audit_adr_coverage.py +175 -0
- package/scripts/audit_mcp_tools.py +146 -0
- package/scripts/bench_baseline_ready.py +108 -0
- package/scripts/bench_drift_check.py +151 -0
- package/scripts/bench_per_tool.py +216 -0
- package/scripts/bench_run.py +155 -0
- package/scripts/config/__init__.py +9 -0
- package/scripts/config/presets.py +206 -0
- package/scripts/config/profiles.py +173 -0
- package/scripts/cost/budget.mjs +73 -12
- package/scripts/cost/preflight.mjs +89 -0
- package/scripts/lint_archived_skills.py +143 -0
- package/scripts/lint_bench_corpus.py +161 -0
- package/scripts/lint_namespace.py +135 -0
- package/scripts/lint_roadmap_complexity.py +3 -2
- package/scripts/skill_overlap.py +204 -0
- package/scripts/skill_usage_collect.py +191 -0
- package/scripts/skill_usage_report.py +162 -0
- package/scripts/smoke/kernel.sh +101 -0
- package/scripts/smoke/router.sh +129 -0
- package/scripts/smoke/schema.sh +71 -0
- package/scripts/smoke/skills.sh +101 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Seed pack — founder-mvp
|
|
2
|
+
# Schema: docs/contracts/workflow-packs.md
|
|
3
|
+
pack:
|
|
4
|
+
id: founder-mvp
|
|
5
|
+
audience:
|
|
6
|
+
label: "Solo / early-stage founder shipping the MVP and the pitch deck"
|
|
7
|
+
one_liner: "Ship the MVP and the pitch deck in the same week."
|
|
8
|
+
composition:
|
|
9
|
+
profile_id: founder
|
|
10
|
+
preset_id: fast
|
|
11
|
+
surface:
|
|
12
|
+
commands_allowed:
|
|
13
|
+
- work
|
|
14
|
+
- feature
|
|
15
|
+
- challenge-me
|
|
16
|
+
- council
|
|
17
|
+
- refine-prompt
|
|
18
|
+
- commit
|
|
19
|
+
- create-pr
|
|
20
|
+
skills_allowed:
|
|
21
|
+
- refine-prompt
|
|
22
|
+
- rice-prioritization
|
|
23
|
+
- vision-articulation
|
|
24
|
+
- fundraising-narrative
|
|
25
|
+
- runway-cognition
|
|
26
|
+
- customer-research
|
|
27
|
+
- po-discovery
|
|
28
|
+
- decision-record
|
|
29
|
+
- minimal-safe-diff
|
|
30
|
+
- verify-completion-evidence
|
|
31
|
+
personas:
|
|
32
|
+
- product-strategist
|
|
33
|
+
- reviewer
|
|
34
|
+
- founder-finance
|
|
35
|
+
rationale:
|
|
36
|
+
why_this_profile: |
|
|
37
|
+
Founder profile centres the work loop on framing, prioritization,
|
|
38
|
+
and narrative — the three artefacts a solo founder produces every
|
|
39
|
+
week. Engineering skills are not dropped; they are surfaced one
|
|
40
|
+
level below, accessible via /work but not on the first screen.
|
|
41
|
+
why_this_preset: |
|
|
42
|
+
Fast preset trades evidence-floor strictness for momentum. Confidence
|
|
43
|
+
band lowered to "low"; trivial-question suppression on. Block-on
|
|
44
|
+
list keeps security and prod-data hard floors intact — the speed
|
|
45
|
+
gain is in clarifying questions, not in safety.
|
|
46
|
+
why_these_commands: |
|
|
47
|
+
/work and /feature drive the build loop; /challenge-me grills the
|
|
48
|
+
idea before a week is sunk into it; /council polls external models
|
|
49
|
+
when the founder is the smartest person in their own head. /commit
|
|
50
|
+
and /create-pr close the loop without ceremony — most founders
|
|
51
|
+
ship solo and the PR-as-checkpoint is the only review they get.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Presets
|
|
2
|
+
|
|
3
|
+
Seed presets for the [preset system](../../docs/contracts/config-presets.md).
|
|
4
|
+
Each preset bundles governance knobs (autonomy / confidence / risk /
|
|
5
|
+
council / mcp / cost / notifications) so the user picks a stance, not
|
|
6
|
+
a dozen individual values. Boundary against `profile.id`, `pack.id`,
|
|
7
|
+
and `cost_profile` lives in
|
|
8
|
+
[ADR-010](../../docs/decisions/ADR-010-profile-pack-preset-boundary.md).
|
|
9
|
+
|
|
10
|
+
## Seed set (v2.x — fixed)
|
|
11
|
+
|
|
12
|
+
| `preset.id` | Stance | Typical user |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| `fast` | Lowest friction, widest autonomy | Solo founder, prototype, exploration |
|
|
15
|
+
| `balanced` *(default)* | Moderate friction, per-task autonomy | Day-to-day work |
|
|
16
|
+
| `strict` | Highest friction, ask-by-default | Production paths, regulated work, shared trunks |
|
|
17
|
+
|
|
18
|
+
Adding a fourth seed preset requires an ADR. User-defined project-local
|
|
19
|
+
presets (any `<id>.yml` not in the seed list above) are allowed without
|
|
20
|
+
an ADR but MUST match the schema enforced by `task lint-config-schema`.
|
|
21
|
+
|
|
22
|
+
## See also
|
|
23
|
+
|
|
24
|
+
- [`docs/contracts/config-presets.md`](../../docs/contracts/config-presets.md) — schema, cost enforcement, resolution chain.
|
|
25
|
+
- [`docs/contracts/profile-system.md`](../../docs/contracts/profile-system.md) — profile axis.
|
|
26
|
+
- [`scripts/config/presets.py`](../../scripts/config/presets.py) — loader.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Seed preset — balanced (default)
|
|
2
|
+
# Schema: docs/contracts/config-presets.md
|
|
3
|
+
preset:
|
|
4
|
+
id: balanced
|
|
5
|
+
autonomy:
|
|
6
|
+
default: auto
|
|
7
|
+
trivial_suppress: true
|
|
8
|
+
confidence:
|
|
9
|
+
min_band: medium
|
|
10
|
+
require_evidence: false
|
|
11
|
+
risk:
|
|
12
|
+
block_on:
|
|
13
|
+
- security
|
|
14
|
+
- prod_data
|
|
15
|
+
ask_on:
|
|
16
|
+
- bulk_delete
|
|
17
|
+
- schema_change
|
|
18
|
+
council:
|
|
19
|
+
auto_consult: false
|
|
20
|
+
cap_per_consult_usd: 0.50
|
|
21
|
+
mcp:
|
|
22
|
+
per_call_max_usd: 0.10
|
|
23
|
+
per_session_max_usd: 2.00
|
|
24
|
+
cost:
|
|
25
|
+
daily_max_usd: 10.00
|
|
26
|
+
weekly_max_usd: 50.00
|
|
27
|
+
monthly_max_usd: 150.00
|
|
28
|
+
enforce: hybrid
|
|
29
|
+
notifications:
|
|
30
|
+
threshold_pct:
|
|
31
|
+
- 50
|
|
32
|
+
- 75
|
|
33
|
+
- 90
|
|
34
|
+
- 100
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Seed preset — fast
|
|
2
|
+
# Schema: docs/contracts/config-presets.md
|
|
3
|
+
preset:
|
|
4
|
+
id: fast
|
|
5
|
+
autonomy:
|
|
6
|
+
default: on
|
|
7
|
+
trivial_suppress: true
|
|
8
|
+
confidence:
|
|
9
|
+
min_band: low
|
|
10
|
+
require_evidence: false
|
|
11
|
+
risk:
|
|
12
|
+
block_on:
|
|
13
|
+
- security
|
|
14
|
+
- prod_data
|
|
15
|
+
ask_on:
|
|
16
|
+
- bulk_delete
|
|
17
|
+
council:
|
|
18
|
+
auto_consult: false
|
|
19
|
+
cap_per_consult_usd: 0.25
|
|
20
|
+
mcp:
|
|
21
|
+
per_call_max_usd: 0.25
|
|
22
|
+
per_session_max_usd: 5.00
|
|
23
|
+
cost:
|
|
24
|
+
daily_max_usd: 25.00
|
|
25
|
+
weekly_max_usd: 100.00
|
|
26
|
+
monthly_max_usd: 300.00
|
|
27
|
+
enforce: hybrid
|
|
28
|
+
notifications:
|
|
29
|
+
threshold_pct:
|
|
30
|
+
- 75
|
|
31
|
+
- 100
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Seed preset — strict
|
|
2
|
+
# Schema: docs/contracts/config-presets.md
|
|
3
|
+
preset:
|
|
4
|
+
id: strict
|
|
5
|
+
autonomy:
|
|
6
|
+
default: off
|
|
7
|
+
trivial_suppress: false
|
|
8
|
+
confidence:
|
|
9
|
+
min_band: high
|
|
10
|
+
require_evidence: true
|
|
11
|
+
risk:
|
|
12
|
+
block_on:
|
|
13
|
+
- security
|
|
14
|
+
- prod_data
|
|
15
|
+
- bulk_delete
|
|
16
|
+
- schema_change
|
|
17
|
+
- financial_paths
|
|
18
|
+
ask_on:
|
|
19
|
+
- code_paths
|
|
20
|
+
- infra_change
|
|
21
|
+
council:
|
|
22
|
+
auto_consult: true
|
|
23
|
+
cap_per_consult_usd: 1.00
|
|
24
|
+
mcp:
|
|
25
|
+
per_call_max_usd: 0.05
|
|
26
|
+
per_session_max_usd: 1.00
|
|
27
|
+
cost:
|
|
28
|
+
daily_max_usd: 5.00
|
|
29
|
+
weekly_max_usd: 20.00
|
|
30
|
+
monthly_max_usd: 60.00
|
|
31
|
+
enforce: hybrid
|
|
32
|
+
notifications:
|
|
33
|
+
threshold_pct:
|
|
34
|
+
- 25
|
|
35
|
+
- 50
|
|
36
|
+
- 75
|
|
37
|
+
- 90
|
|
38
|
+
- 100
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Profiles
|
|
2
|
+
|
|
3
|
+
Seed profiles for the [profile system](../../docs/contracts/profile-system.md).
|
|
4
|
+
Each profile answers *who is the user?* — audience identity that
|
|
5
|
+
selects the default skill/command surface, README entry-paragraph,
|
|
6
|
+
and persona pre-selection. Boundary against `preset.id`, `pack.id`,
|
|
7
|
+
and `cost_profile` lives in
|
|
8
|
+
[ADR-010](../../docs/decisions/ADR-010-profile-pack-preset-boundary.md).
|
|
9
|
+
|
|
10
|
+
## Seed set (v2.x — fixed)
|
|
11
|
+
|
|
12
|
+
| `profile.id` | Audience | Default preset |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| `founder` | Solo / early-stage founder | `fast` |
|
|
15
|
+
| `developer` | IC engineer | `balanced` |
|
|
16
|
+
| `content_creator` | Writers, ghostwriters, marketers | `balanced` |
|
|
17
|
+
| `agency` | Multi-client delivery shop | `strict` |
|
|
18
|
+
| `finance` | CFO / fractional finance / FP&A | `strict` |
|
|
19
|
+
| `ops` | RevOps, support, SRE-adjacent | `strict` |
|
|
20
|
+
|
|
21
|
+
Adding a seventh seed profile requires an ADR. User-defined project-local
|
|
22
|
+
profiles (any `<id>.yml` not in the seed list above) are allowed without
|
|
23
|
+
an ADR but MUST match the schema enforced by `task lint-config-schema`.
|
|
24
|
+
|
|
25
|
+
## See also
|
|
26
|
+
|
|
27
|
+
- [`docs/contracts/profile-system.md`](../../docs/contracts/profile-system.md) — schema and loader contract.
|
|
28
|
+
- [`docs/contracts/config-presets.md`](../../docs/contracts/config-presets.md) — preset axis.
|
|
29
|
+
- [`scripts/config/profiles.py`](../../scripts/config/profiles.py) — loader.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Seed profile — agency
|
|
2
|
+
# Schema: docs/contracts/profile-system.md
|
|
3
|
+
profile:
|
|
4
|
+
id: agency
|
|
5
|
+
audience:
|
|
6
|
+
label: "Multi-client delivery shop"
|
|
7
|
+
readme_anchor: "agency"
|
|
8
|
+
defaults:
|
|
9
|
+
preset_id: strict
|
|
10
|
+
personas:
|
|
11
|
+
- reviewer
|
|
12
|
+
- product-strategist
|
|
13
|
+
- editor
|
|
14
|
+
skills_hint:
|
|
15
|
+
- doc-coauthoring
|
|
16
|
+
- decision-record
|
|
17
|
+
- refine-ticket
|
|
18
|
+
- estimate-ticket
|
|
19
|
+
- perf-feedback-craft
|
|
20
|
+
surface:
|
|
21
|
+
commands_hint:
|
|
22
|
+
- work
|
|
23
|
+
- implement-ticket
|
|
24
|
+
- refine-ticket
|
|
25
|
+
- feature
|
|
26
|
+
- roadmap
|
|
27
|
+
docs_first_pointer: "docs/getting-started-by-role.md#agency"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Seed profile — content_creator
|
|
2
|
+
# Schema: docs/contracts/profile-system.md
|
|
3
|
+
profile:
|
|
4
|
+
id: content_creator
|
|
5
|
+
audience:
|
|
6
|
+
label: "Writers, ghostwriters, marketers"
|
|
7
|
+
readme_anchor: "content_creator"
|
|
8
|
+
defaults:
|
|
9
|
+
preset_id: balanced
|
|
10
|
+
personas:
|
|
11
|
+
- editor
|
|
12
|
+
- brand-voice
|
|
13
|
+
skills_hint:
|
|
14
|
+
- voice-and-tone-design
|
|
15
|
+
- messaging-architecture
|
|
16
|
+
- editorial-calendar
|
|
17
|
+
- release-comms
|
|
18
|
+
- prompt-engineering-patterns
|
|
19
|
+
surface:
|
|
20
|
+
commands_hint:
|
|
21
|
+
- work
|
|
22
|
+
- post-as
|
|
23
|
+
- ghostwriter
|
|
24
|
+
- optimize-prompt
|
|
25
|
+
docs_first_pointer: "docs/getting-started-by-role.md#content_creator"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Seed profile — developer
|
|
2
|
+
# Schema: docs/contracts/profile-system.md
|
|
3
|
+
profile:
|
|
4
|
+
id: developer
|
|
5
|
+
audience:
|
|
6
|
+
label: "IC engineer"
|
|
7
|
+
readme_anchor: "developer"
|
|
8
|
+
defaults:
|
|
9
|
+
preset_id: balanced
|
|
10
|
+
personas:
|
|
11
|
+
- reviewer
|
|
12
|
+
- security
|
|
13
|
+
skills_hint:
|
|
14
|
+
- developer-like-execution
|
|
15
|
+
- verify-completion-evidence
|
|
16
|
+
- minimal-safe-diff
|
|
17
|
+
- systematic-debugging
|
|
18
|
+
- test-driven-development
|
|
19
|
+
surface:
|
|
20
|
+
commands_hint:
|
|
21
|
+
- work
|
|
22
|
+
- implement-ticket
|
|
23
|
+
- review-changes
|
|
24
|
+
- fix
|
|
25
|
+
- commit
|
|
26
|
+
docs_first_pointer: "docs/getting-started-by-role.md#developer"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Seed profile — finance
|
|
2
|
+
# Schema: docs/contracts/profile-system.md
|
|
3
|
+
profile:
|
|
4
|
+
id: finance
|
|
5
|
+
audience:
|
|
6
|
+
label: "CFO / fractional finance / FP&A"
|
|
7
|
+
readme_anchor: "finance"
|
|
8
|
+
defaults:
|
|
9
|
+
preset_id: strict
|
|
10
|
+
personas:
|
|
11
|
+
- finance-partner
|
|
12
|
+
- reviewer
|
|
13
|
+
skills_hint:
|
|
14
|
+
- dcf-modeling
|
|
15
|
+
- forecasting
|
|
16
|
+
- scenario-modeling
|
|
17
|
+
- unit-economics-modeling
|
|
18
|
+
- runway-cognition
|
|
19
|
+
surface:
|
|
20
|
+
commands_hint:
|
|
21
|
+
- work
|
|
22
|
+
- council
|
|
23
|
+
- challenge-me
|
|
24
|
+
docs_first_pointer: "docs/getting-started-by-role.md#finance"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Seed profile — founder
|
|
2
|
+
# Schema: docs/contracts/profile-system.md
|
|
3
|
+
profile:
|
|
4
|
+
id: founder
|
|
5
|
+
audience:
|
|
6
|
+
label: "Solo / early-stage founder"
|
|
7
|
+
readme_anchor: "founder"
|
|
8
|
+
defaults:
|
|
9
|
+
preset_id: fast
|
|
10
|
+
personas:
|
|
11
|
+
- product-strategist
|
|
12
|
+
- reviewer
|
|
13
|
+
skills_hint:
|
|
14
|
+
- refine-prompt
|
|
15
|
+
- rice-prioritization
|
|
16
|
+
- vision-articulation
|
|
17
|
+
- fundraising-narrative
|
|
18
|
+
- runway-cognition
|
|
19
|
+
surface:
|
|
20
|
+
commands_hint:
|
|
21
|
+
- work
|
|
22
|
+
- feature
|
|
23
|
+
- challenge-me
|
|
24
|
+
- council
|
|
25
|
+
docs_first_pointer: "docs/getting-started-by-role.md#founder"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Seed profile — ops
|
|
2
|
+
# Schema: docs/contracts/profile-system.md
|
|
3
|
+
profile:
|
|
4
|
+
id: ops
|
|
5
|
+
audience:
|
|
6
|
+
label: "RevOps, support, SRE-adjacent"
|
|
7
|
+
readme_anchor: "ops"
|
|
8
|
+
defaults:
|
|
9
|
+
preset_id: strict
|
|
10
|
+
personas:
|
|
11
|
+
- reviewer
|
|
12
|
+
- security
|
|
13
|
+
skills_hint:
|
|
14
|
+
- incident-commander
|
|
15
|
+
- dashboard-design
|
|
16
|
+
- logging-monitoring
|
|
17
|
+
- threat-modeling
|
|
18
|
+
- launch-readiness
|
|
19
|
+
surface:
|
|
20
|
+
commands_hint:
|
|
21
|
+
- work
|
|
22
|
+
- threat-model
|
|
23
|
+
- review-changes
|
|
24
|
+
- fix
|
|
25
|
+
docs_first_pointer: "docs/getting-started-by-role.md#ops"
|
|
@@ -8,7 +8,7 @@ source: package
|
|
|
8
8
|
|
|
9
9
|
# No Cheap Questions
|
|
10
10
|
|
|
11
|
-
A question is **cheap** when context already answers, an option breaches an Iron Law, choices differ only in sequencing / format, or one option is dominant. Mode-independent
|
|
11
|
+
A question is **cheap** when context already answers it, an option breaches an Iron Law, choices differ only in sequencing / format, or one option is dominant. Mode-independent. Autonomy never lifts the floor.
|
|
12
12
|
|
|
13
13
|
## The Iron Laws
|
|
14
14
|
|
|
@@ -18,9 +18,20 @@ NEVER PRESENT AN OPTION THAT VIOLATES AN IRON LAW.
|
|
|
18
18
|
NEVER OFFER NUMBERED CHOICES WITHOUT A REAL TRADE-OFF.
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## Cheap classes
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Sequencing · format-only · commit asks · CI / test asks · fenced re-ask · Iron-Law option · context-derived · dominant option · re-ask after decline · paternalistic (Iron Law 3) · continuation under mandate (Iron Law 4). Catalog: [`asking-and-brevity-examples`](../docs/guidelines/agent-infra/asking-and-brevity-examples.md#cheap-question-class-catalog--extended-examples).
|
|
24
|
+
|
|
25
|
+
## Iron Law 4 — No Continuation Prompts Under Autonomous Mandate
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
WHEN A STANDING AUTONOMOUS MANDATE IS ACTIVE — /roadmap:process-full,
|
|
29
|
+
/roadmap:process-phase, EXPLICIT "ENTSCHEIDE SELBST / DECIDE AND DON'T
|
|
30
|
+
ASK" — NEVER ASK "WEITER? / NEXT STEP? / SHALL I CONTINUE?".
|
|
31
|
+
A CLEAN EDIT-BATCH IS NOT A HALT CONDITION. THE ONLY HALTS ARE THE
|
|
32
|
+
FIVE NAMED IN THE INVOKING COMMAND (HARD-FLOOR, COUNCIL-OFF +
|
|
33
|
+
AMBIGUITY, SECURITY-SENSITIVE, SCOPE-OUT-OF-ROADMAP, TEST/QUALITY RED).
|
|
34
|
+
```
|
|
24
35
|
|
|
25
36
|
## Iron Law 3 — No Paternalistic State-Assuming Options
|
|
26
37
|
|
|
@@ -30,30 +41,27 @@ NEVER FABRICATE USER STATE TO JUSTIFY AN OPTION.
|
|
|
30
41
|
THE USER DECIDES WHEN TO STOP. THE AGENT DECIDES WHAT TO BUILD NEXT.
|
|
31
42
|
```
|
|
32
43
|
|
|
33
|
-
Every numbered option = technical / scope / sequencing choice with real trade-off, not mood-management nudge. Forbidden patterns + carve-outs: [`asking-and-brevity-examples § iron-law-3`](../docs/guidelines/agent-infra/asking-and-brevity-examples.md#no-cheap-questions--iron-law-3-detail-paternalistic-state-options).
|
|
34
|
-
|
|
35
44
|
## Pre-Send Self-Check — MANDATORY before every question
|
|
36
45
|
|
|
37
|
-
|
|
46
|
+
Silent, before any numbered-options block:
|
|
38
47
|
|
|
39
48
|
1. Answer already in stated context?
|
|
40
|
-
2.
|
|
41
|
-
3.
|
|
49
|
+
2. Option violates `commit-policy`, `scope-control § git-ops`, or `non-destructive-by-default`?
|
|
50
|
+
3. Pure sequencing / format, no trade-off?
|
|
42
51
|
4. One option obviously dominant?
|
|
43
|
-
5. User fenced
|
|
44
|
-
6. User already declined? Re-ask forbidden
|
|
45
|
-
7.
|
|
52
|
+
5. User fenced step (*"plan only"*, *"review first"*) → deliver + handback.
|
|
53
|
+
6. User already declined? Re-ask forbidden.
|
|
54
|
+
7. Option assumes user fatigue / frustration without in-message citation? Iron Law 3 — drop.
|
|
55
|
+
8. Standing autonomous mandate + "weiter? / continue?" — Iron Law 4, drop; pick next item.
|
|
46
56
|
|
|
47
|
-
Any "yes" →
|
|
57
|
+
Any "yes" → don't ask. Pick dominant path, state inline assumption, hand back. Genuine ambiguity → [`ask-when-uncertain`](ask-when-uncertain.md).
|
|
48
58
|
|
|
49
59
|
## When asking IS allowed
|
|
50
60
|
|
|
51
61
|
- Real architectural / scope decision with non-obvious trade-offs.
|
|
52
|
-
- Vague-request trigger
|
|
53
|
-
- Security-sensitive
|
|
54
|
-
- Hard Floor
|
|
62
|
+
- Vague-request trigger ([`ask-when-uncertain`](ask-when-uncertain.md)).
|
|
63
|
+
- Security-sensitive ([`security-sensitive-stop`](security-sensitive-stop.md)).
|
|
64
|
+
- Hard Floor ([`non-destructive-by-default`](non-destructive-by-default.md)).
|
|
55
65
|
- Two genuinely-equivalent paths; user preference is the tiebreaker.
|
|
56
66
|
|
|
57
67
|
In doubt → ask. This rule narrows asking, never widens silence.
|
|
58
|
-
|
|
59
|
-
Cross-rule index: [`frugality-charter § cross-references`](../contexts/contracts/frugality-charter.md#cross-references--frugality-canon-rules).
|
|
@@ -44,42 +44,63 @@ Do NOT use when:
|
|
|
44
44
|
|
|
45
45
|
## Preconditions
|
|
46
46
|
|
|
47
|
-
-
|
|
48
|
-
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
- ADR directory exists. Two layouts coexist (see
|
|
48
|
+
[`docs/contracts/adr-layout.md`](../../../docs/contracts/adr-layout.md)):
|
|
49
|
+
- **Flat** — `docs/decisions/` (or `docs/adr/` alias): cross-cutting
|
|
50
|
+
governance ADRs, 3-digit numbering (`ADR-NNN-<slug>.md`).
|
|
51
|
+
- **Per-area** — `docs/adrs/<area>/`: sub-area ADRs, 4-digit
|
|
52
|
+
numbering (`NNNN-<slug>.md`); `<area>` must match canonical
|
|
53
|
+
inventory in [`scripts/audit_adr_coverage.py`](../../../scripts/audit_adr_coverage.py).
|
|
54
|
+
- Decision **already made** — ADRs record outcomes, not run the
|
|
55
|
+
decision process. For unresolved trade-offs, run council or
|
|
56
|
+
consult `adversarial-review` first.
|
|
52
57
|
|
|
53
58
|
## Procedure
|
|
54
59
|
|
|
55
|
-
### 1. Inspect and
|
|
60
|
+
### 1. Inspect and pick the surface
|
|
56
61
|
|
|
57
|
-
|
|
62
|
+
Ask one question only if both are plausible:
|
|
58
63
|
|
|
59
|
-
1.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
1. **Flat surface** — decision constrains package's contract with
|
|
65
|
+
consumers (kernel composition, rule taxonomy, package-wide
|
|
66
|
+
architecture). Directory: `docs/decisions/` (fallback
|
|
67
|
+
`docs/adr/`). Filename: `ADR-NNN-<slug>.md`.
|
|
68
|
+
2. **Per-area surface** — decision constrains code inside one area
|
|
69
|
+
folder (one runtime module, one contract group, one CLI surface).
|
|
70
|
+
Directory: `docs/adrs/<area>/`. Filename: `NNNN-<slug>.md`
|
|
71
|
+
(4-digit, no `ADR-` prefix).
|
|
72
|
+
3. **Unknown area** — `<area>` not in inventory: refuse with hint
|
|
73
|
+
to add area to `AREAS` in `scripts/audit_adr_coverage.py` in
|
|
74
|
+
same PR. Do not invent.
|
|
75
|
+
4. **In doubt** → per-area (cheaper to surface, easier to relocate).
|
|
63
76
|
|
|
64
77
|
### 2. Pick the next ADR number
|
|
65
78
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
79
|
+
- **Flat surface** — scan `docs/decisions/` (or `docs/adr/`) for
|
|
80
|
+
`ADR-*.md`, parse leading 3-digit number, take `max + 1`
|
|
81
|
+
(zero-padded to 3). Empty directory → start at `001`.
|
|
82
|
+
- **Per-area surface** — scan `docs/adrs/<area>/` for
|
|
83
|
+
`[0-9][0-9][0-9][0-9]-*.md`, parse leading 4-digit number, take
|
|
84
|
+
`max + 1` (zero-padded to 4). Empty area → start at `0001`.
|
|
85
|
+
`README.md` is **not** an ADR — skip it.
|
|
86
|
+
|
|
87
|
+
Reject re-use of existing number — index regeneration treats
|
|
88
|
+
duplicates as hard failure on both surfaces.
|
|
70
89
|
|
|
71
90
|
### 3. Pick a slug
|
|
72
91
|
|
|
73
92
|
Short, hyphen-lowercase, scope-revealing. Match peer ADRs in the
|
|
74
93
|
directory. Examples: `kernel-swap-deferred`, `flat-cluster-subs`,
|
|
75
|
-
`http-bridge-deferred-with-trigger
|
|
94
|
+
`http-bridge-deferred-with-trigger`,
|
|
95
|
+
`per-tier-smoke-scripts`. Reject slugs longer than 60 chars.
|
|
76
96
|
|
|
77
97
|
### 4. Author the ADR
|
|
78
98
|
|
|
79
|
-
Use
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
99
|
+
Use surface-specific template. All sections required; "—" acceptable
|
|
100
|
+
for genuinely empty Alternatives or References blocks but never for
|
|
101
|
+
Status, Context, Decision, or Consequences.
|
|
102
|
+
|
|
103
|
+
**Flat-surface template** (`docs/decisions/ADR-NNN-<slug>.md`):
|
|
83
104
|
|
|
84
105
|
```markdown
|
|
85
106
|
---
|
|
@@ -98,73 +119,62 @@ phase: <roadmap> · <phase-id>
|
|
|
98
119
|
|
|
99
120
|
**<Proposed | Accepted | …>** · YYYY-MM-DD.
|
|
100
121
|
|
|
101
|
-
## Context
|
|
102
|
-
|
|
103
|
-
What problem forced this decision? What constraints applied? What
|
|
104
|
-
alternatives were on the table at decision time?
|
|
105
|
-
|
|
106
|
-
## Decision
|
|
107
|
-
|
|
108
|
-
The chosen variant, in one paragraph. Concrete enough that a reader
|
|
109
|
-
six months later knows what was actually picked.
|
|
110
|
-
|
|
111
|
-
## Consequences
|
|
112
|
-
|
|
113
|
-
### Accepted
|
|
114
|
-
|
|
115
|
-
- Hard guarantees we now make.
|
|
116
|
-
|
|
117
|
-
### Trade-offs
|
|
118
|
-
|
|
119
|
-
- What we gave up. Mitigations, if any.
|
|
122
|
+
## Context / Decision / Consequences / Alternatives / References
|
|
123
|
+
```
|
|
120
124
|
|
|
121
|
-
|
|
125
|
+
**Per-area template** (`docs/adrs/<area>/NNNN-<slug>.md`):
|
|
122
126
|
|
|
123
|
-
|
|
124
|
-
|
|
127
|
+
```markdown
|
|
128
|
+
# ADR NNNN — <Decision Title>
|
|
125
129
|
|
|
126
|
-
|
|
130
|
+
> Area: `<area>` · Status: accepted · Date: YYYY-MM-DD · Type: retrospective | new
|
|
131
|
+
> Roadmap: `agents/roadmaps/<file>.md` <phase-id>
|
|
132
|
+
> Supersedes: —
|
|
127
133
|
|
|
128
|
-
|
|
134
|
+
## Context / Decision / Considered alternatives / Consequences / References
|
|
129
135
|
```
|
|
130
136
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
137
|
+
Per-area ADRs use quote-style header (no YAML frontmatter) so
|
|
138
|
+
`audit_adr_coverage.py`'s permissive parser can index them. Cite
|
|
139
|
+
the area's contract from the README in
|
|
140
|
+
[`docs/adrs/<area>/README.md`](../../../docs/adrs/).
|
|
134
141
|
|
|
135
|
-
|
|
136
|
-
python3 scripts/runtime_dispatcher.py run --skill adr-create
|
|
137
|
-
# or directly:
|
|
138
|
-
python3 scripts/adr/regenerate_index.py --dir docs/adr/
|
|
139
|
-
```
|
|
142
|
+
### 5. Regenerate the index
|
|
140
143
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
+
- **Flat surface** — `python3 scripts/adr/regenerate_index.py
|
|
145
|
+
--dir docs/decisions/` writes `INDEX.md` from `ADR-*.md`.
|
|
146
|
+
- **Per-area surface** — `python3 scripts/audit_adr_coverage.py
|
|
147
|
+
--regen-area-readme <area>` rewrites `docs/adrs/<area>/README.md`.
|
|
148
|
+
Coverage gate: run `python3 scripts/audit_adr_coverage.py` (no
|
|
149
|
+
args) — exit 0 only when every canonical area has ≥ 1 ADR.
|
|
144
150
|
|
|
145
151
|
### 6. Validate
|
|
146
152
|
|
|
147
|
-
- `python3 scripts/adr/regenerate_index.py --check` exits 0
|
|
148
|
-
|
|
149
|
-
-
|
|
153
|
+
- Flat: `python3 scripts/adr/regenerate_index.py --check` exits 0.
|
|
154
|
+
- Per-area: `python3 scripts/audit_adr_coverage.py --check` exits 0.
|
|
155
|
+
- Project's CI / quality pipeline passes locally.
|
|
150
156
|
|
|
151
157
|
## Output format
|
|
152
158
|
|
|
153
|
-
1. Path of the new
|
|
154
|
-
2. Path of the regenerated
|
|
159
|
+
1. Path of the new ADR file.
|
|
160
|
+
2. Path of the regenerated index / README.
|
|
155
161
|
3. One-line summary of the decision.
|
|
156
162
|
4. Linked roadmap or phase, if any.
|
|
157
163
|
|
|
158
164
|
## Gotchas
|
|
159
165
|
|
|
160
|
-
- `docs/
|
|
161
|
-
`docs/
|
|
162
|
-
|
|
163
|
-
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
166
|
+
- **Flat default path** is `docs/decisions/` in this package; some
|
|
167
|
+
projects use `docs/adr/`. Pass `--dir` when running outside default.
|
|
168
|
+
- **Per-area numbering is 4-digit** (`NNNN-<slug>.md`); flat surface
|
|
169
|
+
stays 3-digit (`ADR-NNN-<slug>.md`). Do not mix.
|
|
170
|
+
- **Area inventory closed** — `<area>` must already exist in `AREAS`
|
|
171
|
+
in `scripts/audit_adr_coverage.py`. Adding new area is separate
|
|
172
|
+
PR with explicit reviewer sign-off.
|
|
173
|
+
- Frontmatter `adr:` (flat) is canonical number; filename prefix
|
|
174
|
+
must match. Flat regenerator fails on mismatch.
|
|
175
|
+
- ADRs are append-only history. To revise, write new ADR with
|
|
176
|
+
`supersedes: ADR-MMM` (flat) or `Supersedes:` line in header
|
|
177
|
+
quote-block (per-area) and flip old one's status to `superseded`.
|
|
168
178
|
- Never delete an ADR file — supersede it. Deletion breaks
|
|
169
179
|
historical links and round-trips through git history checks.
|
|
170
180
|
|