@event4u/agent-config 1.16.0 → 1.17.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/.agent-src/commands/{agents-audit.md → agents/audit.md} +4 -3
- package/.agent-src/commands/{agents-cleanup.md → agents/cleanup.md} +12 -6
- package/.agent-src/commands/{agents-prepare.md → agents/prepare.md} +4 -3
- package/.agent-src/commands/agents.md +46 -0
- package/.agent-src/commands/{chat-history-checkpoint.md → chat-history/checkpoint.md} +4 -4
- package/.agent-src/commands/{chat-history-clear.md → chat-history/clear.md} +4 -4
- package/.agent-src/commands/{chat-history-resume.md → chat-history/resume.md} +4 -4
- package/.agent-src/commands/chat-history/show.md +107 -0
- package/.agent-src/commands/chat-history.md +33 -89
- package/.agent-src/commands/{commit-in-chunks.md → commit/in-chunks.md} +15 -13
- package/.agent-src/commands/commit.md +22 -2
- package/.agent-src/commands/{context-create.md → context/create.md} +4 -3
- package/.agent-src/commands/{context-refactor.md → context/refactor.md} +4 -3
- package/.agent-src/commands/context.md +44 -0
- package/.agent-src/commands/{copilot-agents-init.md → copilot-agents/init.md} +4 -3
- package/.agent-src/commands/{copilot-agents-optimize.md → copilot-agents/optimize.md} +4 -3
- package/.agent-src/commands/copilot-agents.md +44 -0
- package/.agent-src/commands/council/default.md +221 -0
- package/.agent-src/commands/{council-design.md → council/design.md} +6 -5
- package/.agent-src/commands/{council-optimize.md → council/optimize.md} +7 -6
- package/.agent-src/commands/{council-pr.md → council/pr.md} +6 -5
- package/.agent-src/commands/council.md +47 -212
- package/.agent-src/commands/{create-pr-description.md → create-pr/description-only.md} +4 -2
- package/.agent-src/commands/create-pr.md +26 -5
- package/.agent-src/commands/{feature-dev.md → feature/dev.md} +5 -10
- package/.agent-src/commands/{feature-explore.md → feature/explore.md} +4 -8
- package/.agent-src/commands/{feature-plan.md → feature/plan.md} +4 -8
- package/.agent-src/commands/{feature-refactor.md → feature/refactor.md} +4 -8
- package/.agent-src/commands/{feature-roadmap.md → feature/roadmap.md} +6 -10
- package/.agent-src/commands/feature.md +6 -12
- package/.agent-src/commands/{fix-ci.md → fix/ci.md} +4 -8
- package/.agent-src/commands/{fix-portability.md → fix/portability.md} +4 -8
- package/.agent-src/commands/{fix-pr-bot-comments.md → fix/pr-bots.md} +4 -8
- package/.agent-src/commands/{fix-pr-developer-comments.md → fix/pr-developers.md} +4 -8
- package/.agent-src/commands/{fix-pr-comments.md → fix/pr.md} +7 -11
- package/.agent-src/commands/{fix-references.md → fix/refs.md} +4 -8
- package/.agent-src/commands/{fix-seeder.md → fix/seeder.md} +4 -8
- package/.agent-src/commands/fix.md +7 -13
- package/.agent-src/commands/{do-and-judge.md → judge/on-diff.md} +4 -3
- package/.agent-src/commands/judge/solo.md +90 -0
- package/.agent-src/commands/{do-in-steps.md → judge/steps.md} +4 -3
- package/.agent-src/commands/judge.md +35 -70
- package/.agent-src/commands/{memory-add.md → memory/add.md} +4 -3
- package/.agent-src/commands/{memory-full.md → memory/load.md} +4 -3
- package/.agent-src/commands/{memory-promote.md → memory/promote.md} +4 -3
- package/.agent-src/commands/{propose-memory.md → memory/propose.md} +4 -3
- package/.agent-src/commands/memory.md +48 -0
- package/.agent-src/commands/{module-create.md → module/create.md} +4 -3
- package/.agent-src/commands/{module-explore.md → module/explore.md} +4 -3
- package/.agent-src/commands/module.md +44 -0
- package/.agent-src/commands/{optimize-agents.md → optimize/agents.md} +4 -8
- package/.agent-src/commands/{optimize-augmentignore.md → optimize/augmentignore.md} +4 -9
- package/.agent-src/commands/{optimize-rtk-filters.md → optimize/rtk.md} +4 -8
- package/.agent-src/commands/{optimize-skills.md → optimize/skills.md} +4 -8
- package/.agent-src/commands/optimize.md +4 -10
- package/.agent-src/commands/{override-create.md → override/create.md} +4 -3
- package/.agent-src/commands/{override-manage.md → override/manage.md} +4 -3
- package/.agent-src/commands/override.md +44 -0
- package/.agent-src/commands/{roadmap-create.md → roadmap/create.md} +4 -3
- package/.agent-src/commands/{roadmap-execute.md → roadmap/execute.md} +4 -3
- package/.agent-src/commands/roadmap.md +44 -0
- package/.agent-src/commands/{tests-create.md → tests/create.md} +4 -3
- package/.agent-src/commands/{tests-execute.md → tests/execute.md} +4 -3
- package/.agent-src/commands/tests.md +44 -0
- package/.agent-src/contexts/communication/rules-auto/artifact-engagement-recording-mechanics.md +72 -0
- package/.agent-src/contexts/communication/rules-auto/augment-portability-mechanics.md +79 -0
- package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +98 -0
- package/.agent-src/contexts/communication/rules-auto/cli-output-handling-mechanics.md +87 -0
- package/.agent-src/contexts/communication/rules-auto/command-suggestion-policy-mechanics.md +62 -0
- package/.agent-src/contexts/communication/rules-auto/docs-sync-mechanics.md +78 -0
- package/.agent-src/contexts/communication/rules-auto/package-ci-checks-mechanics.md +85 -0
- package/.agent-src/contexts/communication/rules-auto/review-routing-awareness-mechanics.md +65 -0
- package/.agent-src/contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md +78 -0
- package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +62 -0
- package/.agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +55 -0
- package/.agent-src/contexts/communication/rules-auto/ui-audit-gate-mechanics.md +53 -0
- package/.agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +77 -0
- package/.agent-src/contexts/judges/no-consolidate-rationale.md +102 -0
- package/.agent-src/contexts/judges/persona-voice-rubric.md +140 -0
- package/.agent-src/rules/artifact-engagement-recording.md +13 -69
- package/.agent-src/rules/ask-when-uncertain.md +27 -42
- package/.agent-src/rules/augment-portability.md +15 -61
- package/.agent-src/rules/augment-source-of-truth.md +27 -93
- package/.agent-src/rules/cli-output-handling.md +10 -76
- package/.agent-src/rules/command-suggestion-policy.md +18 -59
- package/.agent-src/rules/commit-conventions.md +17 -14
- package/.agent-src/rules/direct-answers.md +34 -49
- package/.agent-src/rules/docker-commands.md +5 -5
- package/.agent-src/rules/docs-sync.md +15 -69
- package/.agent-src/rules/language-and-tone.md +48 -72
- package/.agent-src/rules/missing-tool-handling.md +28 -22
- package/.agent-src/rules/no-cheap-questions.md +45 -52
- package/.agent-src/rules/no-roadmap-references.md +73 -0
- package/.agent-src/rules/package-ci-checks.md +21 -61
- package/.agent-src/rules/preservation-guard.md +64 -29
- package/.agent-src/rules/review-routing-awareness.md +24 -43
- package/.agent-src/rules/roadmap-progress-sync.md +10 -71
- package/.agent-src/rules/security-sensitive-stop.md +8 -8
- package/.agent-src/rules/skill-quality.md +16 -48
- package/.agent-src/rules/slash-command-routing-policy.md +7 -4
- package/.agent-src/rules/think-before-action.md +52 -42
- package/.agent-src/rules/tool-safety.md +19 -16
- package/.agent-src/rules/ui-audit-gate.md +24 -38
- package/.agent-src/rules/user-interaction.md +13 -68
- package/.agent-src/skills/ai-council/SKILL.md +2 -0
- package/.agent-src/skills/api-testing/SKILL.md +1 -1
- package/.agent-src/skills/check-refs/SKILL.md +59 -40
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +86 -28
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +5 -5
- package/.agent-src/skills/developer-like-execution/SKILL.md +4 -4
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +101 -65
- package/.agent-src/skills/flux/SKILL.md +30 -10
- package/.agent-src/skills/github-ci/SKILL.md +2 -2
- package/.agent-src/skills/judge-code-quality/SKILL.md +7 -8
- package/.agent-src/skills/judge-security-auditor/SKILL.md +4 -5
- package/.agent-src/skills/judge-test-coverage/SKILL.md +3 -4
- package/.agent-src/skills/lint-skills/SKILL.md +57 -39
- package/.agent-src/skills/md-language-check/SKILL.md +61 -39
- package/.agent-src/skills/override-management/SKILL.md +5 -5
- package/.agent-src/skills/quality-tools/SKILL.md +2 -2
- package/.agent-src/skills/react-shadcn-ui/SKILL.md +116 -43
- package/.agent-src/skills/readme-reviewer/SKILL.md +30 -29
- package/.agent-src/skills/readme-writing/SKILL.md +78 -53
- package/.agent-src/skills/readme-writing-package/SKILL.md +50 -47
- package/.agent-src/skills/receiving-code-review/SKILL.md +52 -47
- package/.agent-src/skills/refine-prompt/SKILL.md +0 -1
- package/.agent-src/skills/requesting-code-review/SKILL.md +35 -30
- package/.agent-src/skills/security/SKILL.md +7 -2
- package/.agent-src/skills/security-audit/SKILL.md +7 -3
- package/.agent-src/skills/systematic-debugging/SKILL.md +68 -60
- package/.agent-src/skills/test-driven-development/SKILL.md +59 -57
- package/.agent-src/skills/test-performance/SKILL.md +0 -1
- package/.agent-src/skills/traefik/SKILL.md +4 -4
- package/.agent-src/skills/verify-completion-evidence/SKILL.md +28 -26
- package/.claude-plugin/marketplace.json +22 -11
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +90 -1
- package/README.md +18 -17
- package/docs/architecture.md +4 -6
- package/docs/catalog.md +67 -39
- package/docs/contracts/STABILITY.md +13 -7
- package/docs/contracts/adr-chat-history-split.md +1 -3
- package/docs/contracts/adr-command-suggestion.md +0 -2
- package/docs/contracts/adr-implement-ticket-runtime.md +1 -2
- package/docs/contracts/adr-product-ui-track.md +3 -6
- package/docs/contracts/adr-prompt-driven-execution.md +3 -4
- package/docs/contracts/agent-memory-contract.md +6 -11
- package/docs/contracts/artifact-engagement-flow.md +6 -9
- package/docs/contracts/command-clusters.md +56 -46
- package/docs/contracts/command-suggestion-flow.md +1 -3
- package/docs/contracts/context-paths.md +99 -0
- package/docs/contracts/file-ownership-matrix.json +6722 -0
- package/docs/contracts/file-ownership-matrix.md +134 -0
- package/docs/contracts/implement-ticket-flow.md +6 -9
- package/docs/contracts/linear-ai-rules-inclusion.md +0 -1
- package/docs/contracts/linear-ai-three-layers.md +0 -2
- package/docs/contracts/load-context-budget-model.md +178 -0
- package/docs/contracts/load-context-schema.md +1 -3
- package/docs/contracts/rule-interactions.md +0 -1
- package/docs/contracts/rule-priority-hierarchy.md +1 -1
- package/docs/contracts/ui-track-flow.md +7 -17
- package/docs/customization.md +2 -0
- package/docs/getting-started.md +5 -4
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +100 -0
- package/package.json +1 -1
- package/scripts/_one_off_phase4_dispatch_latency.py +108 -0
- package/scripts/_one_off_phase6_trigger_jaccard.py +92 -0
- package/scripts/_phase2_shim_helper.py +109 -0
- package/scripts/agent-config +10 -0
- package/scripts/ai_council/_one_off_2a4_acceptance.py +208 -0
- package/scripts/ai_council/_one_off_context_layer_v1_estimate.py +67 -0
- package/scripts/ai_council/_one_off_context_layer_v1_review.py +292 -0
- package/scripts/ai_council/_one_off_followups_review.py +259 -0
- package/scripts/ai_council/_one_off_nondestructive_inline_audit.py +209 -0
- package/scripts/ai_council/_one_off_phase_2a_budget_rebalance.py +257 -0
- package/scripts/ai_council/_one_off_phase_2a_post_revert.py +197 -0
- package/scripts/ai_council/_one_off_rule_hardening_v1.py +251 -0
- package/scripts/ai_council/_one_off_structural_open_questions.py +232 -0
- package/scripts/ai_council/_one_off_structural_optimization.py +144 -0
- package/scripts/ai_council/_one_off_structural_v3_gaps.py +252 -0
- package/scripts/ai_council/_one_off_structural_v3_review.py +240 -0
- package/scripts/check_always_budget.py +363 -45
- package/scripts/check_cluster_patterns.py +159 -0
- package/scripts/check_command_count_messaging.py +14 -7
- package/scripts/check_context_paths.py +201 -0
- package/scripts/check_no_roadmap_refs.py +155 -0
- package/scripts/check_phase_coupling.py +148 -0
- package/scripts/check_portability.py +2 -0
- package/scripts/check_references.py +29 -2
- package/scripts/check_safety_floor_untouched.py +125 -0
- package/scripts/command_suggester/loader.py +4 -1
- package/scripts/compress.py +59 -13
- package/scripts/generate_index.py +6 -2
- package/scripts/generate_ownership_matrix.py +323 -0
- package/scripts/hooks/augment-roadmap-progress.sh +57 -0
- package/scripts/install.py +49 -28
- package/scripts/lint_no_new_atomic_commands.py +12 -11
- package/scripts/requirements-evals.txt +1 -0
- package/scripts/roadmap_progress_hook.py +159 -0
- package/scripts/schemas/command.schema.json +4 -3
- package/scripts/skill_linter.py +1 -0
- package/scripts/sync_agent_settings.py +25 -2
- package/scripts/update_counts.py +7 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
stability: beta
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# File-ownership matrix
|
|
6
|
+
|
|
7
|
+
> **Audience:** roadmap authors, phase reviewers, and CI gate writers
|
|
8
|
+
> who need to know which artefact reads which, and whether two phases
|
|
9
|
+
> can run concurrently without colliding.
|
|
10
|
+
> **Generator:** `scripts/generate_ownership_matrix.py`
|
|
11
|
+
> (run via `task generate-ownership-matrix`).
|
|
12
|
+
> **Validator:** `task check-ownership-matrix` (fails if the JSON drifts
|
|
13
|
+
> from a fresh regeneration).
|
|
14
|
+
> **Companion contracts:** [`load-context-schema.md`](load-context-schema.md),
|
|
15
|
+
> [`context-paths.md`](context-paths.md).
|
|
16
|
+
|
|
17
|
+
This contract defines the **schema** of the file-ownership matrix: the
|
|
18
|
+
machine-readable JSON at `docs/contracts/file-ownership-matrix.json` and
|
|
19
|
+
the human-readable mirror at
|
|
20
|
+
`agents/contexts/structural/file-ownership-matrix.md`. Both are
|
|
21
|
+
regenerated from `.agent-src.uncompressed/` by the generator and locked
|
|
22
|
+
by CI.
|
|
23
|
+
|
|
24
|
+
**Status:** internal-locked (`stability: beta`). Schema bumps require a
|
|
25
|
+
contract version increment plus a roadmap revision (per
|
|
26
|
+
`road-to-structural-optimization.md` § 0.1).
|
|
27
|
+
|
|
28
|
+
## Why the matrix exists
|
|
29
|
+
|
|
30
|
+
`road-to-structural-optimization` Phase 0.1 (CRITICAL) is the DAG
|
|
31
|
+
successor of Phase 0.6 (path conventions). Subsequent phases (1, 2A,
|
|
32
|
+
2B, 3, 6) extract material into context files, slim rules, and reorder
|
|
33
|
+
command surface. The matrix is the substrate that lets later phases
|
|
34
|
+
ask three questions deterministically:
|
|
35
|
+
|
|
36
|
+
1. **Which files does my edit reach transitively?** Answered by the
|
|
37
|
+
`READ_ONLY` edges plus their depth-2 closure.
|
|
38
|
+
2. **Can Phase X and Phase Y land in either order?** Answered by
|
|
39
|
+
intersecting per-phase `WRITE` sets — empty intersection = safe.
|
|
40
|
+
3. **Has the matrix drifted since the last green CI run?** Answered by
|
|
41
|
+
the `check-ownership-matrix` consistency gate.
|
|
42
|
+
|
|
43
|
+
## Schema (v1)
|
|
44
|
+
|
|
45
|
+
The JSON document is a single object:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"version": 1,
|
|
50
|
+
"generated_by": "scripts/generate_ownership_matrix.py",
|
|
51
|
+
"source_of_truth": ".agent-src.uncompressed/",
|
|
52
|
+
"files": {
|
|
53
|
+
"<repo-root-relative path>": {
|
|
54
|
+
"kind": "rule | skill | command | context | persona",
|
|
55
|
+
"rule_type": "always | auto | manual | null",
|
|
56
|
+
"load_context": ["<path>", ...],
|
|
57
|
+
"load_context_eager": ["<path>", ...]
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"edges": [
|
|
61
|
+
{
|
|
62
|
+
"source": "<path>",
|
|
63
|
+
"target": "<path>",
|
|
64
|
+
"type": "READ_ONLY | WRITE | BLOCKS_IF_CONCURRENT",
|
|
65
|
+
"via": "load_context | load_context_eager | load_context_transitive | body_link",
|
|
66
|
+
"depth": 1
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Edge types**
|
|
73
|
+
|
|
74
|
+
| Type | Meaning | Populated in v1 |
|
|
75
|
+
|---|---|:-:|
|
|
76
|
+
| `READ_ONLY` | Source file reads target (frontmatter declaration or body markdown link). | ✅ |
|
|
77
|
+
| `WRITE` | Source file owns target. Self-edge for every file (`source == target`). | ✅ |
|
|
78
|
+
| `BLOCKS_IF_CONCURRENT` | Two phases would write the same file. Derived later from a phase manifest; reserved in v1. | ⏳ |
|
|
79
|
+
|
|
80
|
+
**Edge `via` values**
|
|
81
|
+
|
|
82
|
+
- `load_context` — frontmatter `load_context:` entry (lazy).
|
|
83
|
+
- `load_context_eager` — frontmatter `load_context_eager:` entry.
|
|
84
|
+
- `load_context_transitive` — depth-2 hop reached by following a target's own
|
|
85
|
+
`load_context*` declarations one level deeper.
|
|
86
|
+
- `body_link` — markdown link in body to a path inside one of the
|
|
87
|
+
scanned roots.
|
|
88
|
+
|
|
89
|
+
## Depth invariant (G2 — v3.1)
|
|
90
|
+
|
|
91
|
+
The generator computes the transitive closure of `load_context` /
|
|
92
|
+
`load_context_eager` edges **up to depth 2**. Any chain
|
|
93
|
+
`R → A → B → C` where every hop is a `load_context*` edge **fails the
|
|
94
|
+
build** with exit code 2. This duplicates the same nesting cap that
|
|
95
|
+
Phase 0.2.4 will enforce in `scripts/check_always_budget.py` — two
|
|
96
|
+
enforcement points, one invariant.
|
|
97
|
+
|
|
98
|
+
## Regeneration policy
|
|
99
|
+
|
|
100
|
+
| Trigger | What runs | What fails |
|
|
101
|
+
|---|---|---|
|
|
102
|
+
| `task generate-ownership-matrix` | Regenerates JSON + MD in place. | Depth-3 chain → exit 2. |
|
|
103
|
+
| `task check-ownership-matrix` (CI) | Regenerates to memory, diffs against committed JSON. | Diff non-empty → exit 1. Depth-3 → exit 2. |
|
|
104
|
+
| Pre-commit hook (Phase 2A — A1 fix) | Future: regenerate and diff on commits that touch contexts. | Same as `check-ownership-matrix`. |
|
|
105
|
+
|
|
106
|
+
Any commit that adds, moves, or modifies a context, rule, skill, or
|
|
107
|
+
command MUST regenerate the matrix in the same commit. CI is the
|
|
108
|
+
backstop; the consistency gate fails if regeneration drifts.
|
|
109
|
+
|
|
110
|
+
## Scope notes (v1)
|
|
111
|
+
|
|
112
|
+
- **Greppable surface:** `rules/`, `skills/`, `commands/`, `contexts/`,
|
|
113
|
+
`personas/` under `.agent-src.uncompressed/`. Generated tool
|
|
114
|
+
projections (`.augment/`, `.claude/`, `.cursor/`, …) are intentionally
|
|
115
|
+
ignored — they are downstream of the source of truth.
|
|
116
|
+
- **`skill:` frontmatter in rules** (named in roadmap 0.1.2) is reserved.
|
|
117
|
+
No rules currently declare it; the generator scans for it but emits
|
|
118
|
+
zero edges of that kind in v1.
|
|
119
|
+
- **Body link parser** is conservative: it only recognises markdown
|
|
120
|
+
link targets ending in `.md` whose path resolves under one of the
|
|
121
|
+
scanned roots. Bare backtick-name references (e.g., `` `skill-quality` ``)
|
|
122
|
+
are **not** edges in v1; they are too ambiguous to attribute.
|
|
123
|
+
- **Cycles** are not the matrix's concern — the existing
|
|
124
|
+
`lint_load_context.py` rejects them. The matrix generator follows
|
|
125
|
+
edges with a visited-set so a cycle, if one slipped through, cannot
|
|
126
|
+
loop forever; it would surface as a depth-3 abort.
|
|
127
|
+
|
|
128
|
+
## Versioning
|
|
129
|
+
|
|
130
|
+
`version: 1` is the initial lock. Schema-breaking changes (renaming a
|
|
131
|
+
field, removing an edge type, changing semantics of an existing
|
|
132
|
+
`via`) require a version bump and a roadmap revision. Additive changes
|
|
133
|
+
(new `via` values, new optional file fields) MAY land at the current
|
|
134
|
+
version with a `CHANGELOG.md` entry under `### Beta`.
|
|
@@ -4,10 +4,9 @@ stability: beta
|
|
|
4
4
|
|
|
5
5
|
# `/implement-ticket` — Flow Contract
|
|
6
6
|
|
|
7
|
-
> Technical contracts for the delivery orchestrator
|
|
8
|
-
>
|
|
9
|
-
>
|
|
10
|
-
> delivery.
|
|
7
|
+
> Technical contracts for the `/implement-ticket` delivery orchestrator.
|
|
8
|
+
> This document is the stable reference for engine boundaries, state
|
|
9
|
+
> schema, and replay protocol.
|
|
11
10
|
>
|
|
12
11
|
> - **Created:** 2026-04-22
|
|
13
12
|
> - **Status:** Phase 1 shipped 2026-04-23 — `DeliveryState` +
|
|
@@ -133,9 +132,9 @@ against actual engine output rather than synthetic fixtures.
|
|
|
133
132
|
Prompt envelopes (`input.kind="prompt"`) carry a free-form goal
|
|
134
133
|
instead of a refined ticket. The `refine` step routes on shape
|
|
135
134
|
(presence of `raw` key) and on the first pass emits an
|
|
136
|
-
`@agent-directive: refine-prompt` halt — the agent
|
|
137
|
-
matching skill, which reconstructs
|
|
138
|
-
`assumptions`. On the rebound, `scoring/confidence.py` produces a
|
|
135
|
+
`@agent-directive: refine-prompt` halt — the host agent is
|
|
136
|
+
instructed to run the matching skill, which reconstructs
|
|
137
|
+
`acceptance_criteria` + `assumptions`. On the rebound, `scoring/confidence.py` produces a
|
|
139
138
|
frozen `ConfidenceScore(band, score, dimensions, reasons,
|
|
140
139
|
ui_intent)` and the dispatcher branches on `band`:
|
|
141
140
|
|
|
@@ -616,8 +615,6 @@ are blocked by `freeze-guard.yml::manifest-integrity` at PR time.
|
|
|
616
615
|
|
|
617
616
|
## See also
|
|
618
617
|
|
|
619
|
-
- [`agents/roadmaps/road-to-implement-ticket.md`](../../agents/roadmaps/road-to-implement-ticket.md)
|
|
620
|
-
- [`agents/roadmaps/road-to-universal-execution-engine.md`](../../agents/roadmaps/road-to-universal-execution-engine.md)
|
|
621
618
|
- `tests/golden/` — capture sandbox, recipes, and Capture Packs
|
|
622
619
|
- [`../../tests/golden/harness.py`](../../tests/golden/harness.py) — Strict-Verb replay harness
|
|
623
620
|
- [`../../.github/workflows/freeze-guard.yml`](../../.github/workflows/freeze-guard.yml) — manifest-integrity + live-replay gates
|
|
@@ -4,7 +4,6 @@ stability: beta
|
|
|
4
4
|
|
|
5
5
|
# Linear AI — rules inclusion list
|
|
6
6
|
|
|
7
|
-
> Phase 3 Step 1 deliverable for [`road-to-universal-distribution.md`](../../agents/roadmaps/road-to-universal-distribution.md).
|
|
8
7
|
> Per-rule decision for the Linear AI rules digest. The digest is a
|
|
9
8
|
> Markdown blob the user pastes into Linear's `Settings → Agents →
|
|
10
9
|
> Additional guidance` (workspace / team / personal). The third-party
|
|
@@ -4,7 +4,6 @@ stability: beta
|
|
|
4
4
|
|
|
5
5
|
# Linear AI — three-layer split rationale
|
|
6
6
|
|
|
7
|
-
> Phase 3 Step 3 deliverable for [`road-to-universal-distribution.md`](../../agents/roadmaps/road-to-universal-distribution.md).
|
|
8
7
|
> Per-rule routing is in [`linear-ai-rules-inclusion.md`](linear-ai-rules-inclusion.md);
|
|
9
8
|
> this file documents *why* the split is workspace / team / personal and
|
|
10
9
|
> what belongs in each.
|
|
@@ -128,4 +127,3 @@ does not maintain `event4u/agent-config`.
|
|
|
128
127
|
- Per-rule decision: [`linear-ai-rules-inclusion.md`](linear-ai-rules-inclusion.md)
|
|
129
128
|
- Builder script: [`scripts/build_linear_digest.py`](../../scripts/build_linear_digest.py)
|
|
130
129
|
- Generated digests: `dist/linear/{workspace,team,personal}.md` (gitignored)
|
|
131
|
-
- Roadmap: [`road-to-universal-distribution.md`](../../agents/roadmaps/road-to-universal-distribution.md) Phase 3
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
---
|
|
2
|
+
stability: beta
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# `load_context:` Budget Accounting Model
|
|
6
|
+
|
|
7
|
+
> **Audience:** maintainers of `type: "always"` rules and the budget
|
|
8
|
+
> linter who need a single, deterministic answer to "how many chars
|
|
9
|
+
> does this rule cost the always-budget?".
|
|
10
|
+
> **Linter:** `scripts/check_always_budget.py`
|
|
11
|
+
> (run via `task check-always-budget`).
|
|
12
|
+
> **Companion:** [`load-context-schema.md`](load-context-schema.md) —
|
|
13
|
+
> frontmatter contract for citing a context from a rule.
|
|
14
|
+
> [`STABILITY.md § Budget contracts`](STABILITY.md#budget-contracts) —
|
|
15
|
+
> the numeric caps this model enforces.
|
|
16
|
+
|
|
17
|
+
This contract locks the **accounting model** by which a `type: "always"`
|
|
18
|
+
rule's `load_context:` declarations contribute to the always-rule
|
|
19
|
+
budget. It resolves the "is the rule its file size or its file size
|
|
20
|
+
plus everything it loads?" ambiguity surfaced by Round-2 council on
|
|
21
|
+
`road-to-structural-optimization` (Finding 7, CRITICAL).
|
|
22
|
+
|
|
23
|
+
**Status:** internal-locked. Changes require a contract version bump
|
|
24
|
+
and a roadmap revision (per
|
|
25
|
+
`road-to-structural-optimization.md` § Definitions). The 2 % tolerance
|
|
26
|
+
band on the retroactive test (G3 in v3.1) is the only legal way to
|
|
27
|
+
adjust the model parameters without a roadmap revision; an overshoot
|
|
28
|
+
above the band rejects the model and escalates to the council.
|
|
29
|
+
|
|
30
|
+
## The locked model — Model (b) literal
|
|
31
|
+
|
|
32
|
+
For any rule with frontmatter `type: "always"`:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
EffectiveSize(rule) = RawSize(rule)
|
|
36
|
+
+ Σ RawSize(c) for every c in transitive_closure(rule.load_context*)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Where:
|
|
40
|
+
|
|
41
|
+
- `load_context*` is the union of `load_context:` (lazy) **and**
|
|
42
|
+
`load_context_eager:` entries declared in frontmatter
|
|
43
|
+
(per [`load-context-schema.md`](load-context-schema.md)).
|
|
44
|
+
- `transitive_closure` walks `load_context:` declarations on
|
|
45
|
+
context files **up to depth 2** — see § Nesting cap below.
|
|
46
|
+
- `RawSize` is the byte size of the compressed file
|
|
47
|
+
(`.agent-src/...`), measured by `os.path.getsize()`. The
|
|
48
|
+
uncompressed source paths in frontmatter are mapped to their
|
|
49
|
+
compressed counterparts before sizing.
|
|
50
|
+
- A context loaded by N always-rules counts **N times** (once per
|
|
51
|
+
loading rule). Rationale: the always-budget protects context-window
|
|
52
|
+
utilization at activation time; if rule A and rule B both fire on
|
|
53
|
+
the same turn, the agent pays both costs.
|
|
54
|
+
|
|
55
|
+
### Why model (b) and not (a) or (c)
|
|
56
|
+
|
|
57
|
+
| Model | Definition | Why rejected |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| (a) rule chars only | `EffectiveSize = RawSize(rule)` | Ignores the cost of declared contexts. Phase-2A obligation extraction would *appear* free, allowing unbounded context bloat. |
|
|
60
|
+
| (b) literal *(this contract)* | `EffectiveSize = RawSize(rule) + Σ contexts` | Simplest invariant. Aligns with how the agent actually pays the cost when both rule and context fire on a turn. |
|
|
61
|
+
| (c) shared-divisor | `EffectiveSize = RawSize(rule) + Σ (RawSize(c) / N_loaders)` | Tempting for shared `commit-mechanics`-style contexts but breaks the "what does each rule cost in isolation" question. Reserved as the **first refinement step** if the 2 % tolerance band is exceeded. |
|
|
62
|
+
|
|
63
|
+
Council Round 3 converged A/A/A on the **separate-skills + shared-context**
|
|
64
|
+
extraction pattern (Q1) and the **one-rule + three-contexts** consolidation
|
|
65
|
+
(Q2); model (b) literal is the accounting that makes both patterns
|
|
66
|
+
honest about their cost.
|
|
67
|
+
|
|
68
|
+
## Nesting cap — depth 2
|
|
69
|
+
|
|
70
|
+
A rule's `load_context:` may cite a context (depth 1). A context may
|
|
71
|
+
cite further contexts in its own frontmatter (depth 2). A depth-2
|
|
72
|
+
context citing a third context (depth 3) **aborts the build**.
|
|
73
|
+
|
|
74
|
+
Rationale: bounded recursion makes the linter terminate in O(N) and
|
|
75
|
+
prevents accidental cycles. Council Round-2 finding 9 (HIGH).
|
|
76
|
+
|
|
77
|
+
The check is enforced by `scripts/check_always_budget.py` as a
|
|
78
|
+
separate exit-code-1 condition (independent of the budget caps), so
|
|
79
|
+
that a depth violation surfaces with the violating chain, not as a
|
|
80
|
+
budget-cap breach.
|
|
81
|
+
|
|
82
|
+
## Known-breach allowlist (transitional)
|
|
83
|
+
|
|
84
|
+
Phase 2A targets `non-destructive-by-default` and `scope-control`
|
|
85
|
+
for slimming. Both rules currently exceed the **6,000-char per-rule
|
|
86
|
+
cap** under model (b) literal — this is expected and intentional:
|
|
87
|
+
Phase 0.2 lands the model and its measurement; Phase 2A brings the
|
|
88
|
+
breaches under the cap.
|
|
89
|
+
|
|
90
|
+
To keep CI green during the transition, the linter and the test
|
|
91
|
+
suite carry an explicit `KNOWN_PER_RULE_BREACHES` allowlist with the
|
|
92
|
+
**measured ceiling** for each entry. Each entry must:
|
|
93
|
+
|
|
94
|
+
- Be referenced by the Phase 2A roadmap step that will retire it.
|
|
95
|
+
- Have a documented expected-removal date or roadmap milestone.
|
|
96
|
+
- Fail the build the moment the breach **grows** above the recorded
|
|
97
|
+
ceiling (regression guard).
|
|
98
|
+
|
|
99
|
+
Phase 2A's success criterion (`budget delta ≥ −5 %`) is the trigger
|
|
100
|
+
to remove entries from the allowlist. The allowlist must be **empty**
|
|
101
|
+
before Phase 2A is marked complete.
|
|
102
|
+
|
|
103
|
+
## Retroactive test result (Phase 0.2.3)
|
|
104
|
+
|
|
105
|
+
PR #34's `autonomous-execution` split moved mechanics into three
|
|
106
|
+
contexts under `contexts/execution/`. Re-measuring under model (b)
|
|
107
|
+
literal:
|
|
108
|
+
|
|
109
|
+
| Metric | Value | Cap | Utilization |
|
|
110
|
+
|---|---:|---:|---:|
|
|
111
|
+
| Total extended budget | 49,311 chars | 49,000 | **100.6 %** |
|
|
112
|
+
| Top-3 extended | 22,248 chars | 24,500 | 90.8 % |
|
|
113
|
+
| Per-rule breaches | 2 of 9 | 0 | `non-destructive-by-default` (7,887), `scope-control` (8,529) |
|
|
114
|
+
|
|
115
|
+
The total sits **0.6 % over** the cap — within the 2 % tolerance band
|
|
116
|
+
(G3) which permits parameter refinement before model rejection. Per
|
|
117
|
+
the contract, the model is **accepted**; the per-rule breaches are
|
|
118
|
+
recorded in the transitional allowlist for Phase 2A.
|
|
119
|
+
|
|
120
|
+
`autonomous-execution` itself is `type: "auto"` and does not enter
|
|
121
|
+
the always-budget. Its own extended size (rule 5,196 + three contexts
|
|
122
|
+
8,453) = 13,649 chars is reported by the linter for Phase 2B
|
|
123
|
+
diagnostics but does not gate the always-budget cap.
|
|
124
|
+
|
|
125
|
+
## Linter contract
|
|
126
|
+
|
|
127
|
+
`scripts/check_always_budget.py` enforces:
|
|
128
|
+
|
|
129
|
+
1. `EffectiveSize` per always-rule against the per-rule cap (with
|
|
130
|
+
the transitional allowlist).
|
|
131
|
+
2. Sum of `EffectiveSize` across all always-rules against the total
|
|
132
|
+
cap (warn at 80 %, fail at ≥ 90 % — unchanged from PR #34).
|
|
133
|
+
3. Top-3 sum against the top-3 cap.
|
|
134
|
+
4. Depth ≤ 2 on every `load_context:` chain reachable from an
|
|
135
|
+
always-rule.
|
|
136
|
+
|
|
137
|
+
### Recovery band (Phase 2A → Phase 5 transitional)
|
|
138
|
+
|
|
139
|
+
Locked by AI Council session `2026-05-03T12-02-42Z` (verdict A1)
|
|
140
|
+
after Phase 2A was attempted and reverted: the 1:1 rule-to-context
|
|
141
|
+
split was uneconomical under Model (b) literal because the
|
|
142
|
+
frontmatter and citation-line tax on the new context file outweighed
|
|
143
|
+
the chars removed from the rule. Reverting Phase 2A left the budget
|
|
144
|
+
at 96.8 % — strictly better than the `main` baseline at 100.6 % but
|
|
145
|
+
inside the 90–100 % gap zone the linter rejects.
|
|
146
|
+
|
|
147
|
+
While `RECOVERY_BAND_ENABLED = True`, the linter accepts a branch in
|
|
148
|
+
the gap zone iff:
|
|
149
|
+
|
|
150
|
+
- `total_ext < baseline` (read from `.github/budget-baseline.txt`,
|
|
151
|
+
the chars at last-green `main`), AND
|
|
152
|
+
- every per-rule cap holds (allowlisted entries unchanged), AND
|
|
153
|
+
- top-3 cap holds, AND
|
|
154
|
+
- depth-2 cap holds.
|
|
155
|
+
|
|
156
|
+
A branch passing only the recovery band reports
|
|
157
|
+
`⚠️ WARN (recovery band, baseline N)`. The band is a one-way ratchet:
|
|
158
|
+
once a smaller branch lands on `main`, the baseline file must be
|
|
159
|
+
updated to the new total in the same commit. Phase 5 of
|
|
160
|
+
`road-to-structural-optimization` flips `RECOVERY_BAND_ENABLED` to
|
|
161
|
+
`False` and removes both the band and the G3 tolerance — the gate
|
|
162
|
+
collapses to `total < TOTAL_CAP` strict.
|
|
163
|
+
|
|
164
|
+
Exit codes: 0 = pass (or warn, including recovery band), 1 = any cap
|
|
165
|
+
breach or depth violation, 3 = internal error.
|
|
166
|
+
|
|
167
|
+
## What this contract intentionally does **not** promise
|
|
168
|
+
|
|
169
|
+
- **No claim about runtime cost.** The model treats every context
|
|
170
|
+
as if it were active when its rule fires. The agent may cache or
|
|
171
|
+
short-circuit lazy loads at runtime; the budget is the **upper
|
|
172
|
+
bound**, not the realised cost.
|
|
173
|
+
- **No claim about `type: "auto"` rules.** Auto rules enter the
|
|
174
|
+
agent's context only when their description matches; they have
|
|
175
|
+
their own per-rule LOC targets in Phase 2B (not a global budget).
|
|
176
|
+
- **No claim about commands or skills.** Commands and skills load
|
|
177
|
+
on user invocation. Their token cost is accounted by the
|
|
178
|
+
command-cluster and skill-family contracts, not here.
|
|
@@ -93,9 +93,7 @@ directly under `contexts/` (see `contexts/model-recommendations.md`,
|
|
|
93
93
|
chars(rule.md) + sum(chars(eager_target.md) for each entry) ≤ rule_cap
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
-
`rule_cap` is the per-rule budget
|
|
97
|
-
[`road-to-rebalancing.md`](../../agents/roadmaps/road-to-rebalancing.md)
|
|
98
|
-
§ Target architecture:
|
|
96
|
+
`rule_cap` is the per-rule budget:
|
|
99
97
|
|
|
100
98
|
- Always rule: 2,500
|
|
101
99
|
- Auto rule: 4,000
|
|
@@ -104,4 +104,3 @@ junior (yields). For `complements`, ordering is documentary only.
|
|
|
104
104
|
|
|
105
105
|
- [`docs/contracts/STABILITY.md`](STABILITY.md) — public-surface stability tiers.
|
|
106
106
|
- [`docs/contracts/adr-chat-history-split.md`](adr-chat-history-split.md) — ADR pattern for major rule structural changes.
|
|
107
|
-
- [`agents/roadmaps/archive/road-to-post-pr29-optimize.md`](../../agents/roadmaps/archive/road-to-post-pr29-optimize.md) § P2.2 — anchor for this matrix.
|
|
@@ -64,7 +64,7 @@ which one's Iron Law gets the final say.
|
|
|
64
64
|
| Situation | Bands that fire | Winner | Why |
|
|
65
65
|
|---|---|---|---|
|
|
66
66
|
| Standing autonomy + roadmap step says "merge to `main`" | 1, 7 | **1** | Hard Floor predates and outranks autonomy; surface the merge, ask. |
|
|
67
|
-
| `/commit
|
|
67
|
+
| `/commit:in-chunks` on a diff that removes a directory | 1, 5 | **1** | Commit exception authorizes *commits*, not *bulk deletions*. Confirm diff this turn. |
|
|
68
68
|
| User asks "improve this" with no metric named | 4, 7 | **4** | Vague-request trigger fires before any autonomy decision; ask the one clarifying question. |
|
|
69
69
|
| Editing `app/Auth/PasswordReset.php` mid-feature | 2, 7 | **2** | Security-sensitive surface stops the edit until threat-model is recorded. |
|
|
70
70
|
| Agent about to claim "ready to merge" with no fresh test output | 5, 6 | **6** | Verification gate fires before the commit/push question is even valid. |
|
|
@@ -4,8 +4,7 @@ stability: beta
|
|
|
4
4
|
|
|
5
5
|
# UI Track — Flow Contract
|
|
6
6
|
|
|
7
|
-
> Technical contracts for the UI directive sets
|
|
8
|
-
> [`road-to-product-ui-track.md`](../../agents/roadmaps/road-to-product-ui-track.md).
|
|
7
|
+
> Technical contracts for the UI directive sets.
|
|
9
8
|
> Sibling of [`implement-ticket-flow.md`](implement-ticket-flow.md) — that
|
|
10
9
|
> doc covers `backend`; this one covers `ui`, `ui-trivial`, and the
|
|
11
10
|
> `mixed` set that stitches both.
|
|
@@ -14,11 +13,10 @@ stability: beta
|
|
|
14
13
|
> - **Status:** Phase 1–6 shipped — audit / design / apply / review /
|
|
15
14
|
> polish handlers live under
|
|
16
15
|
> [`.agent-src.uncompressed/templates/scripts/work_engine/directives/ui/`](../../.agent-src.uncompressed/templates/scripts/work_engine/directives/ui/).
|
|
17
|
-
> Mixed
|
|
18
|
-
>
|
|
16
|
+
> Mixed under `directives/mixed/`. `ui-trivial` under
|
|
17
|
+
> `directives/ui_trivial/`. R4 (Visual Review Loop) added the
|
|
19
18
|
> a11y gate, the preview envelope, and a polish-termination rewrite
|
|
20
|
-
> that splits subjective ceilings from objective a11y blocks
|
|
21
|
-
> [`road-to-visual-review-loop.md`](../../agents/roadmaps/road-to-visual-review-loop.md).
|
|
19
|
+
> that splits subjective ceilings from objective a11y blocks.
|
|
22
20
|
> Golden Transcripts GT-U1..U4, U7, U8, U9..U12 plus GT-U5 (mixed
|
|
23
21
|
> flow), GT-U6A/B (stack dispatch), and R4's GT-U13..U15 (a11y polish,
|
|
24
22
|
> a11y ceiling, preview render failure) pin happy-path, ambiguity,
|
|
@@ -42,8 +40,6 @@ sentinels that release each gate.
|
|
|
42
40
|
`SKILL.md` files.
|
|
43
41
|
- A migration guide for the schema — see
|
|
44
42
|
[`implement-ticket-flow.md`](implement-ticket-flow.md#state-schema-v1).
|
|
45
|
-
- A roadmap — phased delivery lives in
|
|
46
|
-
[`road-to-product-ui-track.md`](../../agents/roadmaps/road-to-product-ui-track.md).
|
|
47
43
|
|
|
48
44
|
## The four directive sets
|
|
49
45
|
|
|
@@ -323,15 +319,9 @@ suite asserts every `BLOCKED` path has a matching declaration.
|
|
|
323
319
|
- [`implement-ticket-flow.md`](implement-ticket-flow.md) — sibling
|
|
324
320
|
contract for the `backend` set; covers `DeliveryState`, schema v1,
|
|
325
321
|
hooks, persona policies, replay protocol.
|
|
326
|
-
- [`
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
— pinned GT-U5 (mixed flow), GT-U6A/B (stack dispatch), GT-U7
|
|
330
|
-
(trivial happy path), GT-U8 (trivial reclassification).
|
|
331
|
-
- [`road-to-visual-review-loop.md`](../../agents/roadmaps/road-to-visual-review-loop.md)
|
|
332
|
-
— R4 contract: a11y gate, preview envelope, polish-termination
|
|
333
|
-
rewrite. Pinned by GT-U13 (a11y polish), GT-U14 (a11y ceiling),
|
|
334
|
-
GT-U15 (preview render failure).
|
|
322
|
+
- [`adr-product-ui-track.md`](adr-product-ui-track.md) — locked
|
|
323
|
+
decisions for the UI track (R3) and the visual-review-loop
|
|
324
|
+
amendment (R4: a11y gate, preview envelope, polish-termination).
|
|
335
325
|
- [`existing-ui-audit` SKILL](../../.agent-src.uncompressed/skills/existing-ui-audit/SKILL.md)
|
|
336
326
|
— producer of `state.ui_audit`.
|
|
337
327
|
- [`ui-audit-gate` rule](../../.agent-src.uncompressed/rules/ui-audit-gate.md)
|
package/docs/customization.md
CHANGED
|
@@ -67,6 +67,8 @@ those sections.
|
|
|
67
67
|
| `ai_council.cost_budget.max_total_usd` | `0.0` | Per-invocation USD ceiling. `0` disables (token caps still apply). |
|
|
68
68
|
| `ai_council.cost_budget.daily_limit_usd` | `0.0` | Rolling 24h USD ceiling across all `/council` calls. `0` disables. Ledger lives at `~/.config/agent-config/council-spend.jsonl` (mode 0600). |
|
|
69
69
|
|
|
70
|
+
> **Experimental.** AI Council is not yet validated by external users. API costs apply per consultation.
|
|
71
|
+
|
|
70
72
|
Council API tokens are installed via `./agent-config keys:install-anthropic`
|
|
71
73
|
and `./agent-config keys:install-openai` — they prompt on `/dev/tty`, write to
|
|
72
74
|
`~/.config/agent-config/<provider>.key` with mode `0600`, and never accept env
|
package/docs/getting-started.md
CHANGED
|
@@ -115,7 +115,7 @@ Your agent is now:
|
|
|
115
115
|
- **Respecting your codebase** — no conflicting patterns
|
|
116
116
|
- **Following standards** — consistent code quality
|
|
117
117
|
|
|
118
|
-
This is enforced automatically by
|
|
118
|
+
This is enforced automatically by 58 rules. No configuration needed.
|
|
119
119
|
|
|
120
120
|
---
|
|
121
121
|
|
|
@@ -155,7 +155,7 @@ Your agent now understands slash commands:
|
|
|
155
155
|
| `/chat-history-resume` | Recover context after a crashed or switched session |
|
|
156
156
|
| `/chat-history-clear` | Wipe the chat-history log (with confirmation) |
|
|
157
157
|
|
|
158
|
-
→ [Browse all
|
|
158
|
+
→ [Browse all 95 active commands](../.agent-src/commands/)
|
|
159
159
|
|
|
160
160
|
---
|
|
161
161
|
|
|
@@ -167,8 +167,9 @@ for every profile), the agent keeps a JSONL log of your conversation in
|
|
|
167
167
|
rotates at the size configured in the profile (`128 KB` on `minimal`,
|
|
168
168
|
`256 KB` on `balanced`, `512 KB` on `full`).
|
|
169
169
|
|
|
170
|
-
When a chat opens and finds an existing log, the agent
|
|
171
|
-
4-state ownership check and
|
|
170
|
+
When a chat opens and finds an existing log, the host agent is
|
|
171
|
+
instructed to run a 4-state ownership check and choose the right
|
|
172
|
+
flow:
|
|
172
173
|
|
|
173
174
|
- **match** — this chat already owns the file. Append silently.
|
|
174
175
|
- **foreign** — a different session's file. You get 3 options:
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# asking-and-brevity-examples
|
|
2
|
+
|
|
3
|
+
Companion examples for three always-rules:
|
|
4
|
+
[`ask-when-uncertain`](../../../.agent-src.uncompressed/rules/ask-when-uncertain.md),
|
|
5
|
+
[`no-cheap-questions`](../../../.agent-src.uncompressed/rules/no-cheap-questions.md),
|
|
6
|
+
[`direct-answers`](../../../.agent-src.uncompressed/rules/direct-answers.md).
|
|
7
|
+
|
|
8
|
+
The rules carry the Iron Laws and the obligation surface. This file
|
|
9
|
+
carries the illustrative material (example questions, rationale
|
|
10
|
+
tables, failure-mode catalogs) that does not need to live in the
|
|
11
|
+
always-loaded rule body — extracted to fit the always-rule budget.
|
|
12
|
+
|
|
13
|
+
## Vague-request triggers — example questions
|
|
14
|
+
|
|
15
|
+
Companion to `ask-when-uncertain` § Vague-request triggers. The rule
|
|
16
|
+
lists the trigger patterns and the "missing info" columns; this file
|
|
17
|
+
adds the example question to ask back at the user.
|
|
18
|
+
|
|
19
|
+
| Pattern | Example clarifying question |
|
|
20
|
+
|---|---|
|
|
21
|
+
| "improve / optimize this" | "Optimize for what — execution speed or readability?" |
|
|
22
|
+
| "add caching" | "Which cache driver, and what invalidates it?" |
|
|
23
|
+
| "make it better / cleaner" | "What specifically feels wrong in the current code?" |
|
|
24
|
+
| "clean up this file" | "Remove unused code, reformat, or restructure?" |
|
|
25
|
+
| "fix this" (without specifying) | "What output/behavior is wrong right now?" |
|
|
26
|
+
| "refactor X" | "Refactor toward what — smaller methods, extract class, or something else?" |
|
|
27
|
+
| "use best practices" | "Best practices for what specifically — testing, naming, structure?" |
|
|
28
|
+
| "handle errors properly" | "For which failure modes, and what should happen on error?" |
|
|
29
|
+
| "add a UI / component / tile / page" when the repo mixes frameworks | "This repo uses {A} and {B} for UI — which one for this?" |
|
|
30
|
+
|
|
31
|
+
## One-question-per-turn — why serial always wins
|
|
32
|
+
|
|
33
|
+
Companion to `ask-when-uncertain` § How to ask. The rule states the
|
|
34
|
+
Iron Law and the self-check; this file expands the rationale.
|
|
35
|
+
|
|
36
|
+
| Situation | Why serial always wins |
|
|
37
|
+
|---|---|
|
|
38
|
+
| Design / architecture decisions | Answer to Q1 reframes Q2 |
|
|
39
|
+
| Naming / command-syntax / API shape | Later choices depend on it |
|
|
40
|
+
| Scope / PR boundaries | Changes what the other questions even mean |
|
|
41
|
+
| Tool / library selection | Downstream choices branch from it |
|
|
42
|
+
| "Which approach: A vs B vs C" | Each answer opens a different follow-up |
|
|
43
|
+
| Even "independent" yes/no pairs | User still has to parse two contexts |
|
|
44
|
+
| Any question the user has to **think** about, not just pick | Thinking load compounds when stacked |
|
|
45
|
+
|
|
46
|
+
The shorthand: if the user has to *think* about an answer, that
|
|
47
|
+
answer almost always reframes whatever question would have come
|
|
48
|
+
next. Serial preserves the framing; parallel destroys it.
|
|
49
|
+
|
|
50
|
+
## Cheap-question class catalog — extended examples
|
|
51
|
+
|
|
52
|
+
Companion to `no-cheap-questions` § What counts as cheap. The rule
|
|
53
|
+
lists the classes; this file adds longer-form examples per class.
|
|
54
|
+
|
|
55
|
+
| Class | Pattern · why cheap | Concrete example |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| **Sequencing** | "Step 2 or 3 next?" when roadmap orders them — answer is in the roadmap | Roadmap says "2.1 then 2.2" → don't ask "should I do 2.2 next?" |
|
|
58
|
+
| **Format-only** | "Table or paragraph?" — no semantic trade-off | User asked for a summary; format is a non-decision |
|
|
59
|
+
| **Commit asks** | "Commit now?" — `commit-policy`: never ask | The commit-policy Iron Law forbids the question |
|
|
60
|
+
| **CI / test asks** | "Run tests now?" — `verify-before-complete` decides | Verification is mandatory before completion claims; not a choice |
|
|
61
|
+
| **Fenced-step re-asks** | "Start Phase 1?" after "plan only" — `scope-control § fenced step` | The fence stands until the user explicitly lifts it |
|
|
62
|
+
| **Iron-Law option** | Option breaches `commit-policy`, `scope-control § git-ops`, or `non-destructive-by-default` — does not exist | Don't surface "force-push to main?" as Option 2 |
|
|
63
|
+
| **Context-derived** | Answer follows from prior turn / standing instruction / roadmap — act, state assumption inline | "Use the same branch?" after user said "stay on this branch" |
|
|
64
|
+
| **Dominant option** | One choice obviously correct; alternatives carry no upside — pick it | "Run the linter or skip it?" when the linter is part of CI |
|
|
65
|
+
| **Re-ask after decline** | Same path after user said no — `scope-control § decline = silence` | User declined a separate branch → don't propose it again on the same task |
|
|
66
|
+
|
|
67
|
+
## Direct-answers — severity-tiered claim examples
|
|
68
|
+
|
|
69
|
+
Companion to `direct-answers` § Iron Law 2 (no invented facts). The
|
|
70
|
+
rule lists the severity table; this file adds concrete examples and
|
|
71
|
+
hedge-language patterns.
|
|
72
|
+
|
|
73
|
+
| Severity | Examples | Verification action |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| **High — load-bearing** | "Method `X::y()` exists at `path/to/file.php:142`", "version 12.4.1 added the API", "this test passes" | MUST verify with `view`, `grep`, `codebase-retrieval`, or fresh command output **before** claiming. Too expensive → ask. |
|
|
76
|
+
| **Medium — project-shape** | "This project uses Pest for testing", "controllers live under `app/Http/Controllers`" | Verify if one tool call reaches it; otherwise hedge: *"I'd guess X — not checked"*. |
|
|
77
|
+
| **Low — well-known idioms** | "PHP `array_map` returns a new array", "git tags are immutable", "JS arrays are zero-indexed" | Inference acceptable. Mark as inference if not 100% sure. |
|
|
78
|
+
|
|
79
|
+
Hedge-language patterns:
|
|
80
|
+
|
|
81
|
+
- ✅ "haven't verified X — likely from {known-similar-codebase}"
|
|
82
|
+
- ✅ "guess, not checked — `path/to/file.php:142` is my best read"
|
|
83
|
+
- ❌ "probably" alone — name what's unverified
|
|
84
|
+
- ❌ "vermutlich" without hedge target
|
|
85
|
+
|
|
86
|
+
## Direct-answers — failure modes the user will call out
|
|
87
|
+
|
|
88
|
+
Companion to `direct-answers` § Failure modes. The rule lists the
|
|
89
|
+
modes; this file adds the trigger phrases and the in-language
|
|
90
|
+
correction pattern.
|
|
91
|
+
|
|
92
|
+
| Failure | User's typical callout | Correct response |
|
|
93
|
+
|---|---|---|
|
|
94
|
+
| Iron Law 1 violation | "skip the flattery", "ohne smalltalk" | drop the opener; deliver substance |
|
|
95
|
+
| Iron Law 2 violation | "have you actually checked?", "wo steht das?" | re-verify with a tool call; correct or retract the claim |
|
|
96
|
+
| Iron Law 3 violation | "kürzer", "less prose", "tldr" | trim to one sentence + the answer |
|
|
97
|
+
| Emoji blacklist hit | "ohne emojis", "no decoration" | re-render plain |
|
|
98
|
+
|
|
99
|
+
Acknowledge once, in the user's language, switch behavior, no
|
|
100
|
+
excuses (mirrors `language-and-tone` § slip handling).
|
package/package.json
CHANGED