@event4u/agent-config 1.35.0 → 1.36.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.
@@ -41,6 +41,41 @@ in the entry count and the signal-to-noise degrades fast on large types.
41
41
  > 6. ownership
42
42
  ```
43
43
 
44
+ ### 1b. Surface the Tier-0 critical slice
45
+
46
+ Before loading the requested type, emit every active entry with
47
+ `priority: critical` across **all** memory types as a Tier-0 banner.
48
+ The contract for `priority: critical` is *always-surface regardless of
49
+ query*; this step honours it.
50
+
51
+ ```bash
52
+ ./agent-config memory:lookup --priority critical --status active --format yaml
53
+ ```
54
+
55
+ Render the slice in a fenced block titled `Tier-0 (critical)`, ordered
56
+ by `(type, id)`. If the slice is empty, skip the banner silently — do
57
+ not announce absence.
58
+
59
+ If the lookup helper does not yet support `--priority`, fall back to a
60
+ file-only sweep:
61
+
62
+ ```bash
63
+ python3 - <<'PY'
64
+ import pathlib, yaml
65
+ for f in sorted(pathlib.Path("agents/memory").rglob("*.yml")):
66
+ data = yaml.safe_load(f.read_text(encoding="utf-8")) or {}
67
+ for e in data.get("entries", []) or []:
68
+ if e.get("priority") == "critical" and e.get("status") == "active":
69
+ print(f"--- {f.parent.name}/{e.get('id')}")
70
+ print(yaml.safe_dump(e, sort_keys=False), end="")
71
+ PY
72
+ ```
73
+
74
+ The Tier-0 slice is surfaced once per `/memory:load` invocation, even
75
+ when the user picks a type with no critical entries — the slice spans
76
+ types deliberately. Token cost is bounded by the soft cap of 10
77
+ critical entries per type (warned by `scripts/check_memory.py`).
78
+
44
79
  ### 2. Warn about volume
45
80
 
46
81
  Before loading, count the entries:
@@ -84,6 +119,40 @@ with its declared `confidence` — see
84
119
  [`memory-access`](../../docs/guidelines/agent-infra/memory-access.md) for
85
120
  how entries modulate edits.
86
121
 
122
+ ### 5. Inline-review hook (intake backlog)
123
+
124
+ After step 4, count unreviewed intake entries for the same type:
125
+
126
+ ```bash
127
+ ./agent-config memory:lookup --types <type> --intake-only --format json | \
128
+ python3 -c "import sys, json; print(len(json.load(sys.stdin)))"
129
+ ```
130
+
131
+ Read `memory.review_threshold` from `.agent-settings.yml` (default 10).
132
+ If the count is **0** or **≤ threshold**, skip this step silently. If
133
+ **> threshold**, surface a numbered preview of the top-3 highest-
134
+ confidence intake signals (see
135
+ [`memory-consolidation`](../../skills/memory-consolidation/SKILL.md)
136
+ § Phase 3 for the consolidation contract):
137
+
138
+ ```
139
+ > ⚠️ {N} unreviewed intake signals for `{type}` (threshold {T}).
140
+ > Top 3 by confidence:
141
+ >
142
+ > 1. [conf=high] {sig-id} — {one-line observation}
143
+ > 2. [conf=med ] {sig-id} — {one-line observation}
144
+ > 3. [conf=med ] {sig-id} — {one-line observation}
145
+ >
146
+ > Review now?
147
+ > 1. Promote — run /memory promote on a signal id
148
+ > 2. Mine more — run /memory mine-session for fresh signals
149
+ > s. Skip (default) — proceed with the loaded entries
150
+ ```
151
+
152
+ Default action is **skip** — the load completes regardless. This is a
153
+ nudge, not a gate. If `memory.review_threshold` is `0`, skip this
154
+ step entirely (feature off). Never auto-promote.
155
+
87
156
  ## When to reject
88
157
 
89
158
  - User is mid-implementation and asks for the full load as a shortcut
@@ -0,0 +1,151 @@
1
+ ---
2
+ name: memory:mine-session
3
+ cluster: memory
4
+ sub: mine-session
5
+ description: Mine the active session transcript for memory signals (corrections, preferences, decisions, recurring patterns) — preview-by-default, opt-in transcript access, host-agnostic via TranscriptAdapter.
6
+ skills: [memory-consolidation, file-editor]
7
+ disable-model-invocation: true
8
+ suggestion:
9
+ eligible: false
10
+ rationale: "Reads transcript files — opt-in, per-invocation confirmation required."
11
+ ---
12
+
13
+ # /memory mine-session
14
+
15
+ Runs the **GATHER SIGNAL** phase of the [`memory-consolidation`](../../skills/memory-consolidation/SKILL.md)
16
+ loop against the current host's transcripts and surfaces normalised
17
+ project-scoped facts as a preview. No file is written without
18
+ `--commit-intake`. No transcript is read without
19
+ `--confirm-transcript-access`.
20
+
21
+ ## When to use
22
+
23
+ - After a multi-day implementation, before the conversation history
24
+ rotates out of context.
25
+ - The user says "mine my recent sessions" or "consolidate what we've
26
+ decided".
27
+ - The `/memory load` inline-review block flagged > 10 unreviewed signals
28
+ and the user wants to add fresh ones from the live transcript before
29
+ promoting.
30
+
31
+ Do NOT use as an automatic post-session hook. Mining is per-invocation
32
+ and confirmed.
33
+
34
+ ## Flags
35
+
36
+ | Flag | Default | Purpose |
37
+ |---|---|---|
38
+ | `--since <ISO-date>` | 14 days ago | Only mine turns at or after this date. Re-anchors relative phrases like "yesterday" with `YYYY-MM-DD`. |
39
+ | `--confirm-transcript-access` | off | Opt-in gate. Without it, the miner reads zero turns and prints the opt-in hint. Per-invocation, not persistent. |
40
+ | `--preview` | on | Render normalised facts to stdout. No file write. Default behaviour. |
41
+ | `--commit-intake` | off | Mutually exclusive with `--preview`. Append normalised facts to `agents/memory/intake/<primary-tag>.jsonl`. |
42
+ | `--host <claude-code\|cursor\|augment>` | auto-detect | Force the `TranscriptAdapter`. Phase 1 ships `claude-code` only; others print `not-supported-on-this-host` and exit. |
43
+
44
+ ## Steps
45
+
46
+ ### 1. Verify opt-in
47
+
48
+ If `--confirm-transcript-access` is absent, print:
49
+
50
+ ```
51
+ > Mining reads your session transcript files. Re-run with
52
+ > --confirm-transcript-access to proceed. The flag is per-invocation
53
+ > and not persisted.
54
+ ```
55
+
56
+ Then exit with code 0. **Do not read any file.**
57
+
58
+ ### 2. Resolve TranscriptAdapter
59
+
60
+ Auto-detect the host (Claude Code → `~/.claude/projects/<repo>/sessions/*.jsonl`).
61
+ If auto-detect fails or `--host` names an unimplemented adapter, print:
62
+
63
+ ```
64
+ > No TranscriptAdapter for host=<name>. Phase 1 supports: claude-code.
65
+ > Use /memory propose to record signals manually.
66
+ ```
67
+
68
+ Then exit with code 0.
69
+
70
+ ### 3. Stream + extract
71
+
72
+ Iterate transcript turns within the `--since` window through the four
73
+ signal regex families documented in
74
+ [`memory-consolidation`](../../skills/memory-consolidation/SKILL.md)
75
+ § Phase 2. For each match, normalise the fact (strip pronouns, IDE
76
+ chrome, timestamps, turn-id) and assign a primary tag from the
77
+ schema-routing table.
78
+
79
+ If the normalised count exceeds 5, **stop after the 5th** and print:
80
+
81
+ ```
82
+ > ⚠️ Miner produced > 5 facts. Tighten patterns or narrow --since.
83
+ > Showing the first 5; the rest are dropped.
84
+ ```
85
+
86
+ This is the strict-gate exit per the skill's exit criteria.
87
+
88
+ ### 4. Render preview
89
+
90
+ Print one Markdown block to stdout:
91
+
92
+ ```
93
+ ## Mining preview — <project> · <window> · host=<name>
94
+
95
+ | # | Tag | Key | Observation | Source turn |
96
+ |---|---|---|---|---|
97
+ | 1 | convention | <symbol> | <one-line fact> | <ts> |
98
+ | 2 | gotcha | <path> | <one-line fact> | <ts> |
99
+
100
+ Schemas touched: conventions, operational-gotchas
101
+ Stale curated entries (last_validated > 90d, not seen in 30d): <list or "none">
102
+ ```
103
+
104
+ If `--preview` (default), stop here.
105
+
106
+ ### 5. Commit (only with `--commit-intake`)
107
+
108
+ Append each fact as one JSONL line to
109
+ `agents/memory/intake/<primary-tag>.jsonl` with the contract fields:
110
+ `ts`, `type`, `key`, `observation`, `source: agent`,
111
+ `session_id`, plus the optional `tags: [<one>, <two>]` field.
112
+
113
+ Confirm:
114
+
115
+ ```
116
+ ✅ Appended <N> intake lines across <M> files.
117
+ Next: /memory promote to lift validated lines into curated YAML.
118
+ ```
119
+
120
+ ## Safety
121
+
122
+ - **Never** writes outside `agents/memory/intake/`.
123
+ - **Never** reads transcripts without `--confirm-transcript-access`.
124
+ - **Never** synthesizes facts. The miner is a strict gate against
125
+ the four regex families; if zero matches → prints "no signals".
126
+ - **Never** auto-promotes. `/memory promote` is a separate, validated
127
+ step.
128
+
129
+ ## Gotcha
130
+
131
+ - `--commit-intake` and `--preview` are mutually exclusive. Passing
132
+ both → exit with usage error.
133
+ - The `TranscriptAdapter` strips IDE chrome (tool-call boilerplate,
134
+ reasoning blocks, system reminders) before pattern matching. If the
135
+ miner under-counts, audit the adapter's redact list, not the regex.
136
+ - Date-discipline: relative phrases (`yesterday`, `last week`) in the
137
+ observation field are rejected by `scripts/check_memory.py` unless
138
+ re-anchored with `YYYY-MM-DD` within ±20 chars. The miner re-anchors
139
+ automatically using the turn's `ts`; verify before commit.
140
+
141
+ ## See also
142
+
143
+ - [`memory-consolidation`](../../skills/memory-consolidation/SKILL.md) — the
144
+ four-phase loop (ORIENT → GATHER → CONSOLIDATE → PRUNE) this command
145
+ implements GATHER SIGNAL for.
146
+ - [`memory:propose`](propose.md) — manual fallback when no
147
+ `TranscriptAdapter` matches the current host.
148
+ - [`memory:promote`](promote.md) — lifts validated intake lines into
149
+ curated YAML.
150
+ - [`agent-memory-contract`](../../../docs/contracts/agent-memory-contract.md) —
151
+ intake JSONL schema, including the `tags` field.
@@ -70,8 +70,43 @@ hydrate the full frontmatter:
70
70
  and well-validated — then `high`).
71
71
  - `source:` — at minimum the intake jsonl file + line number.
72
72
  - `owner:`, `last_validated: <today>`, `review_after_days:`.
73
+ - `priority:` — optional (`critical` | `normal` | `low`); defaults to
74
+ `normal` when omitted. Pass through from the intake signal if it
75
+ carries one. Mark `critical` only when the entry is meant to surface
76
+ on every `/memory:load` regardless of query — e.g. a tenant-isolation
77
+ invariant or a payment-flow rule. The validator warns when a type
78
+ accumulates more than 10 active critical entries; raise the bar
79
+ deliberately. See [`engineering-memory-data-format`](../../docs/guidelines/agent-infra/engineering-memory-data-format.md)
80
+ § Priority semantics for the full contract.
81
+ - `ts_week:` — optional ISO-week stamp `YYYY-Www` (e.g. `2026-W17`).
82
+ **Convention, not enforced.** Stamp the curated entry with the week
83
+ it was promoted, never the day or hour. ISO-week granularity prevents
84
+ intra-week timing inference (e.g. "this rule was added Tuesday 3pm
85
+ → that's when the incident hit") while keeping useful long-term
86
+ ordering. Write it via:
87
+ ```bash
88
+ date -u +'%G-W%V' # POSIX ISO week-numbering year + ISO week
89
+ ```
90
+ See [`engineering-memory-data-format`](../../docs/guidelines/agent-infra/engineering-memory-data-format.md)
91
+ § Temporal jitter for rationale.
73
92
  - Type-specific fields (`rule`, `symptom`, `path`, …).
74
93
 
94
+ If the intake signal carries `tags: [<one>, <two>]`, **resolve via tag
95
+ intersection** (do not pick by file extension):
96
+
97
+ | Tags on signal | Curated target |
98
+ |---|---|
99
+ | `[convention]` | `agents/memory/conventions.yml` |
100
+ | `[invariant]` | `agents/memory/domain-invariants.yml` |
101
+ | `[gotcha]` | `agents/memory/operational-gotchas.yml` |
102
+ | `[pattern]` | `agents/memory/recurring-patterns.yml` |
103
+ | `[gotcha, invariant]` | `domain-invariants` (invariant wins — structural beats operational) |
104
+ | `[pattern, gotcha]` | `recurring-patterns` (pattern wins — repetition beats one-off) |
105
+ | `[convention, invariant]` | `domain-invariants` (invariant wins) |
106
+
107
+ If the user disagrees with the tag-intersection result, ask which
108
+ schema to write to and record the override in the `source:` block.
109
+
75
110
  Show the YAML draft and ask for confirmation before writing.
76
111
 
77
112
  ### 4. Write the curated entry (content-addressed)
@@ -62,6 +62,11 @@ Ask once, numbered. If the user picks `skip`, proceed without them:
62
62
  - `owner` (ownership)
63
63
  - `rule` (domain-invariants, product-rules)
64
64
  - `severity` — `low` · `medium` · `high`
65
+ - `tags` — zero or more from `{convention, invariant, gotcha, pattern}`.
66
+ See [`memory-consolidation`](../../skills/memory-consolidation/SKILL.md)
67
+ § Phase 3 for the schema-routing table. Two tags are allowed; the
68
+ primary tag picks the intake JSONL file, the promoter resolves the
69
+ curated target via tag intersection.
65
70
 
66
71
  ### 4. Emit via the shared helper
67
72
 
@@ -71,9 +76,13 @@ Ask once, numbered. If the user picks `skip`, proceed without them:
71
76
  --path "<path>" \
72
77
  --body "<body>" \
73
78
  --origin "propose-memory" \
74
- --extra '{"symptom":"...","severity":"medium"}'
79
+ --extra '{"symptom":"...","severity":"medium","tags":["convention"]}'
75
80
  ```
76
81
 
82
+ The `tags` array is optional (default `[]`). When present, downstream
83
+ consumers (`/memory promote`, `/memory load` inline review) use the
84
+ schema-routing table to pick the curated target.
85
+
77
86
  The helper deduplicates identical `(type, path, body)` within 7 days
78
87
  automatically — re-running the command on the same finding will
79
88
  silently skip the write. Add `--force` only when deliberate duplication
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: memory
3
- description: Memory orchestrator — routes to add, load, promote, propose
3
+ description: Memory orchestrator — routes to add, load, mine-session, promote, propose
4
4
  cluster: memory
5
5
  disable-model-invocation: true
6
6
  suggestion:
@@ -20,6 +20,7 @@ commands with a single entry point + sub-command dispatch.
20
20
  |---|---|---|
21
21
  | `/memory add` | `commands/memory/add.md` | Interactively add a validated entry to a memory file |
22
22
  | `/memory load` | `commands/memory/load.md` | Load ALL curated entries of a given memory type into context |
23
+ | `/memory mine-session` | `commands/memory/mine-session.md` | Mine the active session transcript for memory signals (preview-by-default) |
23
24
  | `/memory promote` | `commands/memory/promote.md` | Promote an intake signal to a curated memory entry |
24
25
  | `/memory propose` | `commands/memory/propose.md` | Append a provisional signal to the intake stream |
25
26
 
@@ -36,8 +37,9 @@ Sub-command names match the locked contract in
36
37
 
37
38
  > 1. add — write a curated entry interactively
38
39
  > 2. load — load ALL entries of a type for deep analysis
39
- > 3. promotepromote an intake signal to a curated entry
40
- > 4. proposedrop a provisional signal into the intake stream
40
+ > 3. mine-sessionpreview signals from the active session transcript
41
+ > 4. promotepromote an intake signal to a curated entry
42
+ > 5. propose — drop a provisional signal into the intake stream
41
43
 
42
44
  ## Rules
43
45
 
@@ -56,9 +56,12 @@ ignores them by construction. If the user wants narrower execution they
56
56
  invoke `/roadmap:process-phase` (scope = single phase) or
57
57
  `/roadmap:process-step` (scope = single step) instead.
58
58
 
59
- Time-boxed plate / horizon framing is forbidden in roadmaps by template
60
- rule 16 (`templates/roadmaps.md`). If a legacy roadmap still carries
61
- such phrasing, treat it as ordinary prose never as a gate.
59
+ Time-boxed plate / horizon framing is opt-in via
60
+ `roadmap.horizon_weeks` in `.agent-settings.yml` (default `0` =
61
+ forbidden, per template rule 16 in `templates/roadmaps.md`). If a
62
+ roadmap carries such phrasing — whether by legacy or by an opt-in
63
+ setting — treat it as ordinary prose during execution, never as a
64
+ gate. Phase ordering and explicit dependency gates govern the loop.
62
65
 
63
66
  ## Iron Law — Real-time dashboard
64
67
 
@@ -5,8 +5,9 @@ detail behind the Hard Floor restatement, the brief-before-asking
5
5
  flow for separate-branch proposals, and the failure modes / bypass
6
6
  rules around fenced steps.
7
7
 
8
- **Size budget:** ≤ 4,000 chars. Tracked under Phase 6 of
9
- `road-to-pr-34-followups`.
8
+ **Size budget:** soft cap 8,000 chars (context layer, on-demand
9
+ loaded). The mechanics file absorbs growth so `scope-control` stays
10
+ under the 4,000-char kernel ceiling.
10
11
 
11
12
  ## Production, infrastructure, bulk-destructive — Hard Floor
12
13
 
@@ -40,6 +41,23 @@ permission is per-operation, this-turn. Standing autonomy directives
40
41
  narrow other rules but never grant permission for items in this Hard
41
42
  Floor subset.
42
43
 
44
+ ## Roadmap shape — no release language
45
+
46
+ Forbidden in roadmaps / plans / tickets / any planning artifact:
47
+ version numbers (`v2.0`, `1.4.x`), target releases (`Q4 release`,
48
+ `Sprint 23`), deprecation dates tied to release calendars,
49
+ release-tied milestones (`launch milestone`, `GA`), and git tags
50
+ (`tag v1.2.0`).
51
+
52
+ Roadmaps plan **work**. Releases / tags / version pins are a
53
+ **separate decision** the user pins explicitly on the artifact that
54
+ owns release shape — changelog, release PR, tag annotation — not
55
+ buried inside a planning document. Authoring verbs (`create / draft /
56
+ write the roadmap`) authorize the planning artifact, not version
57
+ pinning inside it. If the user names a version in a planning
58
+ request, ask whether the artifact tracks the work or the release;
59
+ default to work.
60
+
43
61
  ## Brief-before-asking — separate branch / PR / worktree
44
62
 
45
63
  If a task seems to need a separate branch or PR (spike, hotfix,
@@ -105,3 +123,39 @@ benefits from a spike branch). If in doubt, do not ask.
105
123
  A clear *"go ahead"*, *"start now"*, *"mach weiter"*, or an explicit
106
124
  *"approved, implement E1.1"* on a later turn lifts the fence. Until
107
125
  then: silence on execution.
126
+
127
+
128
+ ## Authoring vs. implementation — verb discipline
129
+
130
+ Restated detail for [`scope-control § Authoring vs.
131
+ implementation`](../../rules/scope-control.md). The Iron Law is in
132
+ the kernel; this is the worked-out catalogue.
133
+
134
+ **Authoring verbs** (artifact-only, never execution): `create`,
135
+ `draft`, `write`, `author`, `prepare`, `outline`, `entwirf`,
136
+ `erstelle`, `schreibe`, `vorbereite`. Deliverable: a roadmap file,
137
+ plan, ADR, ticket, design doc, or brief. Stop after it lands; let
138
+ the user pick the next move.
139
+
140
+ **Execution verbs** (then the executing rules apply): `implement`,
141
+ `build`, `ship`, `setze um`, `baue`, `arbeite ab`, `arbeite die
142
+ roadmap ab`.
143
+
144
+ **Worked examples**
145
+
146
+ - *"Create the roadmap for X"* / *"Erstelle die Roadmap für X"* →
147
+ write the roadmap file, stop, hand back. Do **not** start
148
+ implementing the steps it contains; do **not** create a feature
149
+ branch for the work the roadmap describes.
150
+ - *"Draft an ADR for the auth refactor"* → ADR lands; auth refactor
151
+ is a separate decision.
152
+ - *"Write the migration plan, then start with phase 1"* → mixed
153
+ verbs. Default to authoring-only, ask which scope wins.
154
+
155
+ **Task-scoped autonomy carry-over**
156
+
157
+ A previous turn's standing autonomy for a *different task* does NOT
158
+ carry over. Concretely: *"arbeite eigenständig"* given for
159
+ "Roadmap A" is consumed when Roadmap A's deliverable lands. A new
160
+ named task (Roadmap B, ticket Y, "next slice") needs fresh
161
+ authorization. See [`autonomous-execution § task-scope`](../../rules/autonomous-execution.md#task-scope--autonomy-is-bound-to-the-named-task).
@@ -12,15 +12,15 @@ when the user expresses **"stop asking on trivial steps, just work"**.
12
12
  The LLM recognizes the **intent**, not a literal substring, and
13
13
  understands the semantic equivalent in either language.
14
14
 
15
- ## Litmus test — standing permission vs single-decision delegation
15
+ ## Litmus test — three shapes, only one flips standing mode
16
16
 
17
- | Question | Outcome |
18
- |---|---|
19
- | Would a reasonable reader interpret the message as **standing permission to skip trivial workflow questions**? | Yes flip. |
20
- | Is it a **single-decision delegation** ("you decide for this step", "for this one let me know what you'd pick")? | Handle that step autonomously, do **not** flip standing mode. |
17
+ | Question | Shape | Outcome |
18
+ |---|---|---|
19
+ | Standing permission to skip trivial workflow questions, **no deliverable named**? ("stop asking", "just work") | conversation-wide | Flip standing mode. Sticky for the rest of the conversation. |
20
+ | Autonomous execution **bound to a named deliverable** ("arbeite Roadmap X ab", "work end-to-end on PROJ-123", "build feature Y autonomously")? | task-scoped | Execute that deliverable without per-step asks. Do **not** flip standing mode. Scope ends with the deliverable. New task → fresh confirmation, per [`autonomous-execution § task-scope`](../../rules/autonomous-execution.md#task-scope--autonomy-is-bound-to-the-named-task). |
21
+ | Single-decision delegation ("you decide for this step", "for this one let me know what you'd pick")? | one-shot | Handle that step autonomously. Do **not** flip standing mode. |
21
22
 
22
- The flip is sticky for the rest of the conversation; single-decision
23
- delegation is one-shot.
23
+ Only the first shape is sticky for the conversation. The second is sticky only for the named task. The third is one-shot.
24
24
 
25
25
  ## Speech-act check — meta-instruction or content?
26
26
 
@@ -120,8 +120,13 @@ The following are **authoring annotations**, never halt conditions. Do
120
120
  configured boundary anyway. `process-full` processes every open step
121
121
  regardless of these annotations — see
122
122
  [`/roadmap:process-full § Iron Law`](../../commands/roadmap/process-full.md#iron-law--full-is-full).
123
- Time-boxed plate / horizon framing is forbidden in roadmaps by template
124
- rule 16; if encountered in legacy text, treat as ordinary prose.
123
+ Time-boxed plate / horizon framing is opt-in via
124
+ `roadmap.horizon_weeks` in `.agent-settings.yml` (default `0` =
125
+ forbidden, per template rule 16). When `0` and encountered in legacy
126
+ text, treat as ordinary prose; never use it to gate execution. When
127
+ `> 0`, plate framing is allowed in authoring but is still **not** a
128
+ halt condition — phase ordering and explicit dependency gates govern
129
+ execution either way.
125
130
 
126
131
  ## 6. Final report and archival
127
132
 
@@ -32,6 +32,31 @@ In `auto` mode, flip to `on` for the rest of the conversation when the user expr
32
32
 
33
33
  Algorithm and speech-act heuristic: [`contexts/execution/autonomy-detection.md`](../contexts/execution/autonomy-detection.md). Anchor phrases (DE+EN), no-flip patterns, counter-examples, trivial-vs-blocking taxonomy, commit-policy summary, and named failure modes: [`contexts/execution/autonomy-mechanics.md`](../contexts/execution/autonomy-mechanics.md) + [`contexts/execution/autonomy-examples.md`](../contexts/execution/autonomy-examples.md).
34
34
 
35
+ ## Task-scope — autonomy is bound to the named task
36
+
37
+ ```
38
+ A STANDING AUTONOMY DIRECTIVE TIED TO A NAMED DELIVERABLE
39
+ DOES NOT CARRY OVER TO A DIFFERENT, LATER DELIVERABLE.
40
+ NEW TASK → FRESH CONFIRMATION.
41
+ ```
42
+
43
+ Two distinct autonomy shapes — keep them apart:
44
+
45
+ | Shape | Trigger | Scope |
46
+ |---|---|---|
47
+ | **Conversation-wide trivial-question suppression** | "stop asking on trivial steps, just work" — no deliverable named. | Sticky for the rest of the conversation. Suppresses trivial workflow questions only; never lifts blocking, Hard Floor, or [`scope-control`](scope-control.md) gates. |
48
+ | **Task-scoped autonomous execution** | "work autonomously on X", "arbeite die Roadmap Y komplett ab", "do PROJ-123 end-to-end" — a deliverable / artifact / ticket is named. | Bound to **that** task. Ends when the task ends. Does **not** authorize starting a new, distinct task autonomously. |
49
+
50
+ Litmus test: does the directive name (or unambiguously point to) a single concrete deliverable? Yes → task-scoped, scope ends with the deliverable. No → conversation-wide, trivial-question suppression only.
51
+
52
+ When the user later issues a **new** request — different ticket, different roadmap, different artifact, different feature — treat it as a fresh task. Re-confirm autonomy for the new scope before:
53
+
54
+ - creating a branch / worktree / PR / tag for the new work,
55
+ - implementing a roadmap whose **authoring** was the prior turn's deliverable (per [`scope-control § authoring vs implementation`](scope-control.md#authoring-vs-implementation--verb-discipline)),
56
+ - expanding scope beyond the new task's literal ask.
57
+
58
+ In doubt whether the new request inherits or needs fresh confirmation → fresh confirmation. The Hard Floor and [`scope-control`](scope-control.md) gates apply to every task regardless.
59
+
35
60
  ## See also
36
61
 
37
62
  - [`non-destructive-by-default`](non-destructive-by-default.md) — universal safety floor; never overridden by autonomy
@@ -28,19 +28,28 @@ The user decides the git shape. Never improvise. Commit specifics: canonical [`c
28
28
  - NEVER create / switch / delete a branch without explicit permission — includes spike, scratch, throwaway, worktree branches.
29
29
  - NEVER create, close, reopen, or change the target of a pull request without permission.
30
30
  - NEVER push a tag or create a release without permission.
31
- - NEVER include version numbers, target releases, deprecation dates, release-tied milestones, or git tags in roadmaps, plans, tickets, or any planning artifact. Roadmaps plan **work**; releases / tags are a separate decision. User pins by saying so explicitly.
31
+ - NEVER pin versions, release targets, deprecation dates, or git tags in roadmaps / plans / tickets they plan **work**, not releases. Detail: [`scope-mechanics § Roadmap shape`](../contexts/authority/scope-mechanics.md).
32
32
  - Task seems to need a separate branch / PR → STOP and **brief before asking** ([`scope-mechanics § Brief-before-asking`](../contexts/authority/scope-mechanics.md)).
33
33
  - BEFORE the first commit on related work, **inventory** existing branches and open PRs. Plausible base beyond the current branch → STOP and ask with numbered options — never improvise. Commands + 4-option template + diverging-stack failure mode: [`scope-mechanics § Branch-base inventory`](../contexts/authority/scope-mechanics.md).
34
34
 
35
35
  "Explicit permission" = user said so **this turn or in a standing instruction not yet revoked**. Earlier permission for a different operation does not carry over.
36
36
 
37
+ ## Authoring vs. implementation
38
+
39
+ ```
40
+ "CREATE / DRAFT" AUTHORIZES THE ARTIFACT, NOT ITS EXECUTION.
41
+ NEW TASK NEVER INHERITS PRIOR AUTONOMY.
42
+ ```
43
+
44
+ `create / draft / write / erstelle …` → artifact only. Execution verbs flip scope; mixed → ask. Detail: [`scope-mechanics`](../contexts/authority/scope-mechanics.md).
45
+
37
46
  ## Production, infrastructure, bulk-destructive — Hard Floor
38
47
 
39
48
  A subset is **never** autonomous, regardless of standing autonomy. Canonical: [`non-destructive-by-default`](non-destructive-by-default.md). Triggers (prod-branch merges, deploys, prod data / infra, bulk-destructive) + this-turn-only clarification: [`scope-mechanics § Production, infrastructure, bulk-destructive`](../contexts/authority/scope-mechanics.md).
40
49
 
41
50
  ## Kernel-rule edits — slow-rollout guarantee
42
51
 
43
- Each kernel-rule edit ships in **its own PR**, ≥ 24 h between merges. Autonomous mandate does NOT lift this — soak guarantee, not preference. CI fails > 1 kernel rule per PR unless labeled `bundled-always-rules-acknowledged`. Trigger / scope: [`kernel-rule-edits`](../contexts/authority/kernel-rule-edits.md).
52
+ Own PR, ≥ 24 h between merges. Autonomous mandate does not lift — soak guarantee. CI / labels / scope: [`kernel-rule-edits`](../contexts/authority/kernel-rule-edits.md).
44
53
 
45
54
  ## Decline = silence — no re-asking on the same task
46
55
 
@@ -48,13 +57,9 @@ After the user **declines** a proposal (branch switch, PR creation, tag/release,
48
57
 
49
58
  ## Fenced step — user-set review gates
50
59
 
51
- User explicitly fences off the next step (*"plan only"*, *"review first"*, *"don't implement yet"*, German equivalents) — reply is **deliverable + handoff**, never deliverable + *"shall we start?"*.
52
-
53
60
  ```
54
61
  USER FENCED OFF EXECUTION → DELIVER + HAND BACK.
55
- NO NUMBERED OPTION OFFERING TO BEGIN WORK.
56
- NO "READY TO IMPLEMENT?" RE-ASK.
57
- NO "STARTEN WIR MIT PHASE 1?" PIVOT.
62
+ NO "READY TO IMPLEMENT?" / "PHASE 1?" RE-ASK.
58
63
  ```
59
64
 
60
- Fence stands until reopened (like `Decline = silence`). Follow-ups cover **the deliverable** (scope, wording, sections), never its execution. Failure modes + bypass phrases: [`scope-mechanics § Fenced step`](../contexts/authority/scope-mechanics.md).
65
+ Fence (*"plan only"*, *"review first"*, German equivalents) stands until reopened like `Decline = silence`. Follow-ups cover the deliverable, not its execution. Failure modes + bypass: [`scope-mechanics § Fenced step`](../contexts/authority/scope-mechanics.md).