@uzysjung/agent-harness 26.155.0 → 26.157.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.
@@ -17,7 +17,7 @@ import {
17
17
  init_esm_shims,
18
18
  residentCost,
19
19
  resolveBundleRoot
20
- } from "./chunk-SC6ORMHV.js";
20
+ } from "./chunk-HHCNPPGS.js";
21
21
 
22
22
  // src/trust-tier-drift.ts
23
23
  init_esm_shims();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uzysjung/agent-harness",
3
- "version": "26.155.0",
3
+ "version": "26.157.0",
4
4
  "description": "Curate vetted AI-coding skills & plugins by your tech stack — install only what you need, across Claude Code, Codex, OpenCode & Antigravity",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -6,6 +6,16 @@ belongs to the Delivery rule.
6
6
  - An ordinary change gets the repository's baseline CI and regression across the affected scope;
7
7
  independent verification only where the Delivery rule requires it. A high-risk one widens that in
8
8
  proportion to what it touches and what its failure would cost.
9
+ - Preserve required outcomes with the least burdensome reliable protection.
10
+ Prefer fixing the cause and reusing or improving existing mechanisms within scope;
11
+ no new guard is needed when those suffice. Judge safeguards by credible risk,
12
+ the assurance they add, and total effort, not request emphasis, incident counts,
13
+ or the number or subject of checks. Tests of safeguards follow the same standard.
14
+ Reuse valid evidence and recheck affected claims when relevant conditions change.
15
+ Within project policy, adapt methods to demonstrated model and tool capabilities
16
+ while preserving acceptance criteria, required gates, and authority boundaries.
17
+ Finish optional verification when required outcomes have sufficient evidence
18
+ and residual risk is within the project's accepted limits.
9
19
  - High-risk includes at least authentication, authorization, payments and settlement, personal
10
20
  data, data integrity, concurrency, state transitions, and migrations.
11
21
  - Full regression, full E2E, full mutation, and periodic security scanning belong to the CI/CD
@@ -16,5 +26,7 @@ belongs to the Delivery rule.
16
26
  the result. Otherwise, use explicit test doubles or contract tests.
17
27
  - Never use unauthorized production personal data, credentials, or secrets in tests.
18
28
  - Do not hide failures by weakening assertions, deleting or skipping tests, excluding coverage, or
19
- adding indiscriminate retries. Change tests only when the intended behavior has changed.
29
+ adding indiscriminate retries. Correct or consolidate tests when their expectations are
30
+ wrong, obsolete, or redundant; preserve coverage of the accepted contract and follow project
31
+ policy for changes to mandatory gates.
20
32
  - If the affected scope cannot be established confidently, broaden the validation.
@@ -107,6 +107,24 @@ for consequential context gaps supported by repeated questions, repository evide
107
107
  or a concrete blocked task. Supplement only the actionable information needed to
108
108
  resolve the gap, using established references where possible.
109
109
 
110
+ Look for guard proliferation where checks duplicate assurance, constrain incidental
111
+ wording or implementation details, or repeatedly confirm another safeguard's
112
+ existence without protecting a consequential outcome. A check's subject, nesting
113
+ depth, or lack of recorded incidents is a review signal, not a removal rule.
114
+
115
+ For a candidate, identify the required outcome or constraint and the meaningful
116
+ coverage, independence, diagnosis, or recovery value it adds beyond existing
117
+ protection. Consider fixing the cause, repairing or consolidating existing checks,
118
+ replacing a mechanism, narrowing its scope, or retiring it rather than following
119
+ an escalation or downgrade ladder.
120
+
121
+ Compare the retained quality and credible risk with setup, execution, context,
122
+ false-alarm, review, and maintenance effort. Use qualitative judgment when it
123
+ settles the choice; measure or propose a bounded trial only for uncertainty that
124
+ could change the decision. State unsupported assumptions rather than inventing
125
+ incident probabilities or cost estimates. For consolidation or retirement,
126
+ explain how still-required protection remains covered, or why it is no longer needed.
127
+
110
128
  Choose **keep / rewrite / narrow / supplement / merge / relocate / retire / defer**.
111
129
  A useful tool can remain while its wrapper or routing changes. Equivalent content
112
130
  under the same scope can establish duplication without an incident or benchmark.
@@ -52,6 +52,21 @@ its assertions and conditions actually support each. Separate targets do not by
52
52
  themselves require separate runs or separate reviewers. Add checks for evidence gaps,
53
53
  credible risk, or applicable policy; required review independence is a separate issue.
54
54
 
55
+ For a new or materially changed executable safeguard, use proportionate evidence
56
+ that it accepts valid operation and detects the relevant violation. Existing tests,
57
+ controlled counterexamples, or another reliable method may suffice. A failing run
58
+ supports the claim only if it fails for the intended reason.
59
+
60
+ When a check can pass without exercising its intended scope, distinguish that
61
+ condition from a meaningful pass where the contract requires coverage. A known
62
+ violation can exercise detection without proving real-target discovery or required
63
+ execution.
64
+
65
+ Prefer existing test and execution mechanisms to a new supervisory layer.
66
+ Retain tests of safeguards when they close a meaningful evidence gap; adding a
67
+ check alone creates no need for another. Apply the evidence-reuse, invalidation,
68
+ and stopping guidance below.
69
+
55
70
  Identify binding tests and independent-review gates from their policy / CI source.
56
71
  Explicit project policy can bind even without CI enforcement. Preserve those gates;
57
72
  route disproportionate mandatory requirements to a separate policy decision. Retain
@@ -3,9 +3,10 @@ name: recurrence-prevention
3
3
  description: >-
4
4
  When the same defect, mistake, or incident happens AGAIN — a recurrence, not a one-off — verify
5
5
  it against prior evidence (memory, rule 근거 links, git/CHANGELOG history), classify it as a
6
- simple slip vs a complex harness problem, then escalate the countermeasure one level up the
7
- ladder: record (1st) → forced rule with linked priors (2nd) → structural gate — test, hook, or
8
- derive — once prose has failed (3rd+). Complex problems get countermeasure candidates designed
6
+ simple slip vs a complex harness problem, then re-evaluate the countermeasure that failed:
7
+ repair or replace it, choosing a record, a one-line criterion, a code fix, or a structural gate
8
+ (test, hook, derive) by evidence — more deterministic when prose has demonstrably failed,
9
+ nothing new when repair suffices. Complex problems get countermeasure candidates designed
9
10
  by a multi-persona panel instead of a quick patch. Use for "재발했어", "같은 실수 또 했네",
10
11
  "이거 저번에도 그랬잖아", "재발방지 대책 등록해줘", "재발방지 룰 만들어", "this happened again",
11
12
  "same bug as last time", "add a recurrence countermeasure", "postmortem this failure". Do NOT use
@@ -18,15 +19,18 @@ description: >-
18
19
  A defect that happens once is a bug. A defect that happens **twice is a countermeasure failure** —
19
20
  whatever was supposed to prevent the second occurrence (a mental note, a memory entry, a rule)
20
21
  demonstrably did not. So on a recurrence, the unit of work is not the fix (you already know the
21
- fix — you applied it last time). The unit of work is the **countermeasure**, and the core move is:
22
- **escalate it one level, because the current level just failed.**
22
+ fix — you applied it last time). The unit of work is the **countermeasure**: re-evaluate the cause
23
+ analysis and whatever was supposed to prevent this, repair or replace it, and reach for a more
24
+ deterministic mechanism only when repairing the existing one cannot suffice. **A recurrence is
25
+ evidence for that re-evaluation, not an order to add a level.**
23
26
 
24
27
  This skill codifies a practice proven in the harness repo that ships it: the no-false-ship rule
25
28
  was created only after the *third* false-ship incident; CHANGELOG drift survived a written
26
29
  convention for seven releases and stopped only when a test gate enforced it; comment warnings
27
30
  against hardcoded-list drift failed twice before "derive to a single source" became mandatory.
28
- The pattern is consistent: **each enforcement level fails in a characteristic way, and the answer
29
- is the next level up — not a louder version of the same level.**
31
+ The pattern is consistent: **each enforcement level fails in a characteristic way, and when one
32
+ has demonstrably failed the answer is usually a more deterministic mechanism — not a louder
33
+ version of the same level, and not a new mechanism when the existing one can be repaired.**
30
34
 
31
35
  ## When to use
32
36
 
@@ -89,7 +93,7 @@ For the capture checklist (what to write down about the failure so the next coun
89
93
  | Correct behavior | Known, agreed, undisputed | Disputed, unclear, or trade-off-laden |
90
94
  | Why it recurred | Wasn't followed: forgot, skipped, overlooked | The countermeasure itself was wrong/insufficient, or cause spans components |
91
95
  | Typical examples | Forgot a checklist step; committed a forbidden file; skipped a verification | A "verified" path that still shipped broken; drift between N surfaces; a gate that passes while the behavior fails |
92
- | Path | **Escalation ladder** (Step 3a) | **Multi-persona countermeasure design** (Step 3b) |
96
+ | Path | **Choose the countermeasure level** (Step 3a) | **Multi-persona countermeasure design** (Step 3b) |
93
97
 
94
98
  Two quick discriminators:
95
99
  - Could you write the corrective rule in one sentence right now, with confidence nobody would
@@ -103,21 +107,22 @@ When the classification itself is unclear, the cause taxonomy in
103
107
  policy · coordination · loop) usually decides it: a `logic`/`state` cause with agreed correct
104
108
  behavior is a slip; a `policy`/`coordination` cause is almost always the complex path.
105
109
 
106
- ## Step 3a — Simple slip: the escalation ladder
110
+ ## Step 3a — Simple slip: choose the countermeasure level
107
111
 
108
- Enter the ladder at the level matching the count. **Never enter above your count** — a gate for a
109
- first-time slip is gate inflation, and every gate is permanent maintenance + false-positive cost.
110
- (Two exceptions. Downward-honest: a **registered countermeasure that failed** counts that failure
111
- at its own level — a violated Level-1 rule at count 2 legitimately escalates to Level 2. And
112
- cost-driven: the Level 1 pre-flight below sends a count-2 slip straight to Level 2 when the wrong
113
- action is deterministically detectable, because a gate is the *cheaper* artifact, not the stronger
114
- one.)
112
+ The levels below are **options ordered by determinism, not a mandatory sequence**. The count is
113
+ evidence of how far the current countermeasure has failed; it does not select the level by itself.
114
+ Choose the least burdensome option that reliably prevents the cause: repair or replace the failed
115
+ countermeasure first; prefer a gate when prose has demonstrably failed or when the wrong action is
116
+ deterministically detectable (a gate is then the *cheaper* artifact, not the stronger one); and
117
+ let credible risk, not the count, justify protection — a concrete irreversible-damage path earns a
118
+ gate at count 0, while a first-time slip with no credible risk earns none (every gate is permanent
119
+ maintenance + false-positive cost).
115
120
 
116
- | Level | When | Countermeasure | Characteristic failure of this level |
121
+ | Level | Typical evidence (a signal, not a trigger) | Countermeasure | Characteristic failure of this level |
117
122
  |---|---|---|---|
118
123
  | **0 기록** | 1st occurrence | Fix + durable record: memory/lessons entry with **Why** it matters and **How to apply**, or an occurrence link on a related rule's 신설 근거 line if one already exists | Records don't steer — nothing re-reads them at the decision moment |
119
- | **1 룰 강제 등록** | 2nd occurrence (the record failed) | Register a forced rule on the project's **always-loaded steering surface**, using the template below — one-line principle + a one-line "신설 근거" with links to each occurrence. `.claude/rules/<name>.md` (Claude Code) or a rules section in `AGENTS.md` (other CLIs) — and **verify it actually loads**: if the always-loaded context (CLAUDE.md / AGENTS.md) doesn't already pull that location in, reference the rule from it. A rule file nothing loads is still Level 0 with extra steps | Prose can be skimmed, forgotten under context pressure, or rationalized around |
120
- | **2 구조적 게이트** | 3rd+ occurrence, **or** a registered countermeasure failed — bypassed *or* followed as designed yet insufficient | Deterministic enforcement that does not depend on the agent reading anything: a test gate that fails CI, a pre-action hook that blocks the command (where the CLI supports hooks), or **derive-to-single-source** so the drift is structurally impossible | Gates that never demonstrably fire; gates so noisy they get bypassed |
124
+ | **1 룰 강제 등록** | 2nd occurrence (the record failed) | Register a forced rule on the project's **always-loaded steering surface**, using the template below — one-line principle + a one-line "신설 근거" with links to each occurrence. `.claude/rules/<name>.md` (Claude Code) or a rules section in `AGENTS.md` (other CLIs) — and **verify it actually loads**: if the always-loaded context (CLAUDE.md / AGENTS.md) doesn't already pull that location in, reference the rule from it. A rule file nothing loads is still Level 0 with extra steps. **Shape**: the *minimum condition* that prevents the failure — what must be true, not how to do it — stated in positive form; a prohibition only where the damage is irreversible | Prose can be skimmed, forgotten under context pressure, or rationalized around |
125
+ | **2 구조적 게이트** | 3rd+ occurrence, **or** a registered countermeasure failed — bypassed *or* followed as designed yet insufficient | Deterministic enforcement that does not depend on the agent reading anything: a test gate that fails CI, a pre-action hook that blocks the command (where the CLI supports hooks), or **derive-to-single-source** so the drift is structurally impossible. **Shape**: a stronger countermeasure means *more deterministic*, not *more forbidden* — the gate checks a result and leaves the model's judgment where no check can express it | Gates that never demonstrably fire; gates so noisy they get bypassed |
121
126
 
122
127
  Load-bearing principle at Level 2: **comment warnings and doc reminders are not a blocking
123
128
  mechanism.** If the countermeasure's effect depends on someone (human or model) reading prose at
@@ -136,27 +141,33 @@ fifth.
136
141
 
137
142
  **Level 1 pre-flight — a 2nd occurrence does not automatically earn a rule.** Per unit of
138
143
  enforcement a rule is the most expensive artifact on the ladder: it is read **every session, by
139
- every install, forever**, while a gate costs CI time and **zero** standing context. Answer three
144
+ every install, forever**, while a gate costs CI time and **zero** standing context. Answer four
140
145
  questions in order and stop at the first that decides:
141
146
 
142
147
  1. **Can the wrong action be detected deterministically?** — a failing test, a hook that exits
143
- non-zero, a derive that deletes the duplicated list. If yes, **write the gate instead, even at
144
- count 2.** This is the one sanctioned way to enter above your count, and it is not gate
145
- inflation: you are not buying stronger enforcement than the count justifies, you are picking
146
- the cheaper artifact for the same enforcement. Code answers what code can answer.
148
+ non-zero, a derive that deletes the duplicated list. If yes, **write the gate instead of a
149
+ rule.** That is not gate inflation: you are not buying stronger enforcement than the risk
150
+ justifies, you are picking the cheaper artifact for the same enforcement. Code answers what
151
+ code can answer.
147
152
  2. **Would the rule change behaviour that would otherwise be wrong?** If the corrective principle
148
153
  is something a competent agent does anyway, or it restates a rule that already exists, it buys
149
154
  nothing and bills every session. Stay at Level 0.
150
155
  3. **Is it general, or is it this project's circumstance?** A project's own incidents belong on
151
156
  that project's steering surface — never in a rule set that strangers install.
152
-
153
- Only what survives all three — **a judgement call no deterministic check can express, that
154
- changes behaviour, and that generalises** — is a rule candidate. That is the bar for "serious
157
+ 4. **Does the rule replace the model's judgment, or feed it?** A rule that fixes a procedure
158
+ ("always run X before Y", "review every edit") replaces a judgment the model could make by
159
+ risk — and stops improving when the model improves. Rewrite it as a one-line criterion (what
160
+ must be true, what evidence counts) and let the model choose the depth. A rule that removes a
161
+ place where the model decides is not a rule candidate in that form.
162
+
163
+ Only what survives all four — **a judgement call no deterministic check can express, that
164
+ changes behaviour, that generalises, and that gives the judgment an input instead of replacing
165
+ it** — is a rule candidate. That is the bar for "serious
155
166
  enough to be worth permanent context".
156
167
 
157
168
  **Confirm before adding standing cost.** Levels 1 and 2 need explicit user confirmation. For a
158
169
  rule the escalation must state, in one block: signature · count with evidence · the proposed text ·
159
- **its standing cost in tokens and the resulting total** · which of the three questions it survived
170
+ **its standing cost in tokens and the resulting total** · **its per-run cost** (seconds, rounds, or questions added to every task — a countermeasure that slows every task to prevent one incident is rejected unless "what actually happens without it" is the answer) · which of the four questions it survived
160
171
  and why the deterministic alternative does not work. **Do not guess the cost — measure the draft**
161
172
  (if the project reports context cost, run that report). Level 0 needs no confirmation — recording
162
173
  a fact is free and always right.
@@ -169,16 +180,18 @@ a fact is free and always right.
169
180
  <One-line principle, stated as an imperative.> **신설 근거: N회 재발** (<date/version> ·
170
181
  <date/version>) — 발생별 기록은 <issue / ADR / postmortem link per occurrence>.
171
182
 
172
- ## 절대 원칙
183
+ ## 지켜야 할 상태
173
184
 
174
- **<The enforced behavior. One sentence if possible.>**
175
- <What is explicitly forbidden, and what to do instead.>
185
+ **<The state that must hold when this rule is followed — positive form, one sentence if possible.>**
186
+ <What breaks it, and what to do instead. A prohibition ("X 금지") belongs here only when X is
187
+ irreversible damage or a protected gate; otherwise state the condition and leave the method to the agent.>
176
188
 
177
189
  ## 위반 발견 시
178
190
 
179
191
  1. 즉시 정정 보고 (무엇이 어떻게 위반이었는지 명시)
180
192
  2. 발생을 이슈·ADR 에 기록하고 durable memory 에 추가한 뒤, 위 근거 줄의 횟수와 링크를 올린다
181
- 3. 재위반이면 구조적 게이트(테스트/훅/derive)로 승격 — 프로즈는 이미 두 번 실패했다
193
+ 3. 재위반이면 원인 분석과 이 룰을 재평가한다 — 룰을 고쳐 충분하면 거기서 끝내고, 프로즈가 실제로
194
+ 실패한 것이면 결정론적 장치(테스트/훅/derive)로 대체한다
182
195
  ```
183
196
 
184
197
  The 근거 line is not decoration — it is the recurrence counter for the *next* occurrence, and it
@@ -201,16 +214,17 @@ for mechanics — run 3-5 personas in parallel, independently, then synthesize):
201
214
  - **The adversary** — "this countermeasure will fail because…" for each candidate.
202
215
 
203
216
  Synthesize into 2-3 concrete countermeasure options with costs, and present them as a decision
204
- (recommendation first, ASIS→TOBE contrast — see `clear-korean-communication` if bundled). The
217
+ (recommendation first, ASIS→TOBE contrast — see `user-centered-explanation` if bundled). The
205
218
  chosen option still lands on the ladder: it becomes a record, a rule, or a gate — the panel decides
206
- *what* the countermeasure is, the ladder decides *how hard* it is enforced. The
207
- never-above-your-count guard governs slips with no failed countermeasure; here, a prior
208
- countermeasure that fired as designed and still failed already justifies landing one level above
209
- it (a failed Level-1 rule → a Level-2 gate is escalation, not inflation).
219
+ *what* the countermeasure is, the evidence decides *how deterministic* it must be. A prior
220
+ countermeasure that fired as designed and still failed is evidence that repairing it is not
221
+ enough, which justifies a more deterministic mechanism (a failed rule → a gate); it is not a
222
+ mandate to add one — replacing the failed mechanism is the default, stacking a new one on top is not.
210
223
 
211
224
  When choosing among the panel's options, compare them on prevention strength, false-positive rate,
212
- standing context cost, maintenance cost, and permission impact — and prefer the *smallest*
213
- mechanism that actually prevents the cause. The mechanism menu is in
225
+ standing context cost, **per-run speed cost** (time, rounds, and questions added to every task),
226
+ **effect on the model's autonomy** (does it feed a judgment or replace one), maintenance cost, and
227
+ permission impact — and prefer the *smallest* mechanism that actually prevents the cause. The mechanism menu is in
214
228
  [references/failure-analysis.md](references/failure-analysis.md).
215
229
 
216
230
  ## Step 4 — Verify the countermeasure fires
@@ -224,7 +238,7 @@ would be a false ship. Before closing:
224
238
  test gate or derive.
225
239
  - **Derive/single-source**: show the duplicated site is gone (grep returns one definition).
226
240
  - **Rule (prose)**: not mechanically verifiable — say so explicitly ("등록됨, 준수는 미검증").
227
- That honesty is what justifies escalating to Level 2 if it recurs anyway.
241
+ That honesty is what justifies replacing it with a deterministic mechanism if it recurs anyway.
228
242
 
229
243
  ## Output format — 재발방지 보고
230
244
 
@@ -235,8 +249,8 @@ would be a false ship. Before closing:
235
249
  - Classification: 단순 실수 | 복잡한 하네스 문제 (+ the discriminator that decided it)
236
250
  - Countermeasure: Level 0 기록 | Level 1 룰 | Level 2 게이트 | 페르소나 설계 → <chosen option>
237
251
  - Artifact: <path of memory entry / rule file / test or hook>
238
- - Standing cost: <rule 이면 측정치 ~N tokens/session + 갱신된 총합 | gate·record 면 0>
239
- - Pre-flight: <Level 1 3질문 통과 근거 — 결정론 불가 사유 · 행동 변화 · 일반성>
252
+ - Standing cost: <rule 이면 측정치 ~N tokens/session + 갱신된 총합 | gate·record 면 0> · per-run: <매 작업에 더해지는 시간·라운드·질문 | 0>
253
+ - Pre-flight: <Level 1 4질문 통과 근거 — 결정론 불가 사유 · 행동 변화 · 일반성 · 판단을 대신하지 않음>
240
254
  - Fires-verified: <RED→GREEN output, hook exit code, grep proof — or "룰 프로즈: 미검증" honestly>
241
255
  - User confirmation: <obtained for Level 1/2 | not needed (Level 0)>
242
256
  ```
@@ -265,15 +279,20 @@ before creating them. Level 0 records need no confirmation.
265
279
  is already on the failing trajectory even if no single rule looks unreasonable.
266
280
  - **Gate theater** — a gate that was never seen to fire may be checking nothing (wrong matcher,
267
281
  wrong path, dead config). Step 4 is mandatory, not optional polish.
282
+ - **Prohibition accumulation** — countermeasures written only as "do not X" pile into a defence
283
+ list: each blocks one path to the bad state and none of the others, and a model reading a wall
284
+ of prohibitions either routes around it or freezes. Write the state that must hold; reserve
285
+ prohibitions for irreversible damage and protected gates.
268
286
  - **Same-level retry** — responding to a recurrence by rewriting the same rule more emphatically
269
- (CAPS, "NEVER", repetition). The level failed, not the wording. Escalate.
287
+ (CAPS, "NEVER", repetition). The level failed, not the wording — repair it if it can be
288
+ repaired, otherwise replace it with a more deterministic mechanism.
270
289
  - **Inflating the count** — when no prior artifact can be found, record this as the first confirmed
271
290
  occurrence rather than borrowing a remembered one to reach count 2.
272
291
 
273
292
  ## Cross-references
274
293
 
275
294
  - `multi-persona-review` — panel mechanics for the complex path (Step 3b).
276
- - `clear-korean-communication` — presenting countermeasure options for user confirmation
295
+ - `user-centered-explanation` — presenting countermeasure options for user confirmation
277
296
  (recommendation first, ASIS→TOBE contrast).
278
297
  - **Periodic audit of accumulated countermeasures** — the natural cleanup loop for what this skill
279
298
  creates (are the rules and gates still TRUE, USED, AFFORDABLE, SAFE?). No bundled skill owns it;
@@ -47,17 +47,18 @@ Before designing anything durable, stop the bleeding without widening the blast
47
47
 
48
48
  ## Countermeasure mechanisms
49
49
 
50
- Prefer the smallest mechanism that prevents the *cause*, not the symptom:
51
-
52
- | Cause shape | Mechanism |
53
- |---|---|
54
- | Incorrect behavior | Fix the code or the contract |
55
- | A stable behavioral boundary regressed | Regression test |
56
- | The same truth is written in two places | Derive from one source (delete the copy) |
57
- | A deterministic lifecycle event is violated | Hook, or a verification gate |
58
- | A judgment recurs at decision time and no check can express it | A concise Rule (Level 1) |
59
- | Completion is claimed without evidence | Verification gate that requires the evidence |
60
- | Human or external coordination gap | Operating procedure / checklist |
50
+ Prefer the smallest mechanism that prevents the *cause*, not the symptom — and count, for each
51
+ candidate, what it costs on every run and what judgment it takes away from the model:
52
+
53
+ | Cause shape | Mechanism | Per-run cost | Autonomy impact |
54
+ |---|---|---|---|
55
+ | Incorrect behavior | Fix the code or the contract | none | none |
56
+ | A stable behavioral boundary regressed | Regression test | CI time | none — checks a result, not a method |
57
+ | The same truth is written in two places | Derive from one source (delete the copy) | none (removes work) | none |
58
+ | A deterministic lifecycle event is violated | Hook, or a verification gate | every matching action; a blocking hook adds a round each time it misfires | low if it checks a result; high if it fixes a procedure |
59
+ | A judgment recurs at decision time and no check can express it | A concise Rule (Level 1) | every session (standing context) | feeds the judgment when it states a criterion; replaces it when it fixes a procedure — write the criterion |
60
+ | Completion is claimed without evidence | Verification gate that requires the evidence | per completion claim | none — asks for evidence, not a method |
61
+ | Human or external coordination gap | Operating procedure / checklist | every run of the procedure | high — use only where coordination, not judgment, is the gap |
61
62
 
62
63
  Verify a mechanical mechanism on **both** the bad case and the corrected case — a gate seen green
63
64
  only has never been shown to bite. Record prose-only safeguards as unverified enforcement; that
@@ -0,0 +1,148 @@
1
+ ---
2
+ name: user-centered-explanation
3
+ description: >-
4
+ 개발 중 문제·변경안·선택지를 사용자 행동과 결과의 관점에서, 사용자의 언어로 설명한다.
5
+ 맥락·원인·대안·추천 이유를 연결하고,
6
+ UI/UX 변경은 필요한 화면·문구·동작의 전후 차이를 보여준다.
7
+ 사용자가 "뭔 소리야", "쉽게 설명해줘", "왜 문제야",
8
+ "사용자에게 뭐가 달라져?", "화면으로 보여줘", "선택지와 추천을 정리해줘"라고 하거나
9
+ 중요한 선택·승인의 차이와 근거를 설명할 때 사용한다.
10
+ 이 스킬만 호출하면 현재 대화의 미해결 문제나 직전 선택 요청을 사용자 관점으로 재정리한다.
11
+ ---
12
+
13
+ # User-Centered Explanation
14
+
15
+ 개발 중 문제와 변경안을 사용자 행동·결과·선택의 관점으로 바꾸어 설명한다.
16
+ 사용자가 앞선 대화나 코드를 다시 읽지 않아도 다음을 판단할 수 있게 한다.
17
+
18
+ **무슨 상황인지 → 무엇이 왜 문제인지 → 어떤 선택지가 있고 무엇이 달라지는지 → 무엇을 추천하며 왜 그런지**
19
+
20
+ 아래 순서·표·예시는 설명을 돕는 기본값이지 고정된 사고·작업 절차가 아니다. 사용자의 목적과 선호 형식을 존중하면서, 설명 깊이·비교 기준·표현 방식은 이해와 판단에 필요한 정보, 읽는 부담, 작업 비용을 고려해 선택한다.
21
+
22
+ 설명과 의사결정을 돕는 스킬이며 작업 범위나 승인 정책 자체를 변경하지 않는다. 답변 언어는 사용자가 쓰는 언어를 따른다.
23
+
24
+ ## 적용
25
+
26
+ 직접 호출되면 현재 대화에서 다음 순서로 대상을 찾는다.
27
+
28
+ **사용자가 지정한 주제 → 미해결 문제·직전 선택 요청 → 직전 설명**
29
+
30
+ 대화에서 대상을 알 수 있으면 다시 묻지 않는다. 설명할 대상 자체가 없을 때만 원문이나 주제를 요청한다.
31
+
32
+ 직접 호출하거나 중요한 선택·승인을 설명할 때는 아래 기본 표를 우선 사용한다. 기존 형식이 충분히 명확하면 유지한다. 짧은 설명이나 도식이 더 명확하면 판단에 필요한 내용을 유지하면서 항목을 합치거나 표현을 바꿀 수 있다.
33
+
34
+ 직접 호출하지 않은 단순 정보 전달이나 완료 보고는 같은 설명 관점을 유지하되 필요한 내용만 짧게 전달한다.
35
+
36
+ 사용자가 별도 형식을 지정하면 그 형식을 따른다. 어떤 형식이든 **맥락·원인·대안·추천 이유** 중 현재 판단에 필요한 내용이 드러나게 한다.
37
+
38
+ ## 설명 원칙
39
+
40
+ ### 1. 사용자 관점에서 설명한다
41
+
42
+ 파일·함수·오류명보다 먼저 다음을 연결한다.
43
+
44
+ **사용자가 하려는 일 → 현재 상태 → 문제 또는 제약 → 발생 원인 → 실제 영향**
45
+
46
+ 버그가 아니라 설계 선택, 요구사항 충돌, 환경 제약이라면 그대로 설명한다. 신규 기능은 달성할 목표를, 내부 개선은 직접적인 사용자 변화 여부와 유지보수·운영상의 이유를 설명한다.
47
+
48
+ 설명을 듣는 사람과 실제 영향을 받는 서비스 이용자·관리자·운영자가 다르면 구분한다. 같은 이름이 서로 다른 대상·위치·단계를 가리키면 먼저 구분하고, 실제 영향을 받는 사람의 과업을 기준으로 설명한다.
49
+
50
+ 기술 용어를 쉬운 단어로 바꾸는 데 그치지 않고, 어떤 상황에서 사용자가 무엇을 보거나 할 수 있는지 설명한다.
51
+
52
+ 예: “캐시 무효화를 수정한다”보다 “이름을 바꿔도 목록에는 예전 이름이 남습니다. 저장 후 목록도 최신 이름으로 갱신하도록 고칩니다.”라고 설명한다.
53
+
54
+ 기술 정보는 판단에 필요한 만큼만 사용하고, 낯선 용어는 해당 맥락에서 이해할 수 있게 풀어 쓴다. 정확한 기술명·관련 위치·제약은 필요한 경우 뒤에 덧붙이며, 쉽게 설명하기 위해 의미나 위험을 생략하지 않는다.
55
+
56
+ ### 2. 사실·가설·판단을 구분한다
57
+
58
+ 확인된 사실과 원인, 아직 확인되지 않은 가설, 추천 판단을 섞지 않는다.
59
+
60
+ 이미 확보한 근거가 현재 설명에도 유효하면 재사용한다. 추가 확인은 설명의 정확성이나 선택을 바꿀 수 있는 미확인 사항에 집중하고, 조사·검증의 깊이는 영향과 요청 범위에 맞춘다.
61
+
62
+ 원인이 확인되지 않았다면 원인을 단정하지 말고 다음을 구분한다.
63
+
64
+ - 확인된 현상과 영향
65
+ - 가능한 원인 또는 가설
66
+ - 방향을 결정하기 위해 추가로 확인할 사항
67
+
68
+ 수치·비용·일정·효과는 근거가 있을 때만 사용한다. 추정치는 가정을 밝히고, 표를 채우기 위해 수치나 대안을 만들지 않는다.
69
+
70
+ 제안·구현·검증·배포 상태를 구분한다. 코드 수정이나 개념 도식만으로 실제 동작·사용성·배포까지 확인된 것처럼 표현하지 않는다.
71
+
72
+ ### 3. 실제 선택 차이를 설명한다
73
+
74
+ 선택지는 개수를 맞추지 말고 실제 선택할 가치가 있는 것만 제시한다. 현상 유지나 보류도 의미 있는 선택이면 포함한다.
75
+
76
+ 각 방안은 다음 차이가 드러나게 설명한다.
77
+
78
+ **무엇을 하는가 → 왜 해결되는가 → 무엇이 달라지는가 → 어떤 부담이나 위험이 있는가**
79
+
80
+ 비용, 일정, 품질, 사용성, 안전성, 운영 부담 등 실제 결정을 바꾸는 기준에 집중한다.
81
+
82
+ ### 4. 추천은 명확하게 한다
83
+
84
+ 선택이나 조치가 필요할 때는 사용자의 목적과 현재 제약을 기준으로 가장 적합한 방안을 추천한다.
85
+
86
+ 추천에는 다음 중 실제 판단에 영향을 주는 내용을 포함한다.
87
+
88
+ - 추천하는 이유
89
+ - 다른 방안보다 적합한 이유
90
+ - 감수해야 할 주요 단점
91
+ - 추천을 바꿀 수 있는 중요한 미확인 조건
92
+
93
+ 추천은 판단이지 확인된 사실처럼 표현하지 않는다.
94
+
95
+ ## 기본 출력
96
+
97
+ 핵심 문제 또는 지금 필요한 판단을 먼저 짧게 밝히고, 다음 표를 기본으로 정리한다.
98
+
99
+ | 항목 | 내용 |
100
+ |---|---|
101
+ | **맥락** | 사용자가 하려는 일, 기대 결과, 현재 상태와 이 문제가 나온 배경 |
102
+ | **문제점** | 확인된 문제·제약, 원인 또는 미확인 사항, 누구에게 어떤 영향이 있는지 |
103
+ | **해결방안** | 실제 가능한 방안과 해결 원리, 변경 후 행동·결과, 장점·부담 |
104
+ | **추천방안** | 추천안과 이유, 주요 단점, 필요한 다음 행동 |
105
+
106
+ 설계 선택이나 목표를 설명하는 경우에는 필요에 따라 **문제점**을 **검토사항**으로 바꾼다. 문제가 없거나 조치가 필요 없다면 억지로 해결책을 만들지 말고 그 사실과 이유를 설명한다.
107
+
108
+ 선택지 비교가 복잡하면 **해결방안을 별도 비교표로 분리**할 수 있다.
109
+
110
+ 직접 호출하지 않은 완료 보고는 **무엇이 달라졌는지 → 무엇을 실제로 확인했는지 → 남은 제한이나 필요한 행동**을 중심으로 전달한다. 해당하지 않는 항목은 생략한다.
111
+
112
+ ### 화면·동작의 전후 비교
113
+
114
+ UI/UX 변경에서 배치·문구·동작의 차이를 말만으로 판단하기 어렵거나 사용자가 시각적인 비교를 요청하면, 변경 전후를 보여준다.
115
+
116
+ 텍스트 환경에서 화면 배치·컴포넌트 구성은 코드 블록 안의 ASCII/Unicode 선으로 **AS-IS → TO-BE** 와이어프레임을 보여주는 것을 기본으로 한다. 문구만 바뀌면 문구를 비교하고, 화면 이동이나 작업 절차가 바뀌면 전후 사용 흐름을 보여준다.
117
+
118
+ 이미 있는 화면·도식이나 다른 표현이 더 명확하면 활용한다. 도구 사용이나 새 산출물 제작은 요청 범위와 권한 안에서, 설명과 판단에 주는 이점이 추가 부담보다 클 때 선택한다.
119
+
120
+ 같은 사용자 과업·데이터·상황을 기준으로 비교하고, 변경을 이해하는 데 필요한 영역만 표현한다. 실제 또는 제안하는 버튼명·필드명·안내 문구를 넣어 사용자가 보게 될 내용을 알 수 있게 한다.
121
+
122
+ 상호작용이 있으면 행동 후 결과를 함께 보여준다. 처리 중·실패·복구·권한 제한 상태가 판단에 영향을 주면 필요한 범위만 포함한다. 문구가 약속하는 동작과 제안하는 기능이 일치하도록 한다.
123
+
124
+ 이미 확인한 화면·코드·사용자 설명을 활용하고, 확인된 현재 상태와 가정·제안을 구분한다. 현재 화면을 확인하지 못했다면 사용자 설명을 바탕으로 재구성했다고 밝히거나, AS-IS 미확인으로 표시하고 TO-BE만 보여준다. 신규 화면은 억지로 AS-IS를 만들지 않고 현재 사용 흐름이나 제안 화면을 보여준다.
125
+
126
+ 텍스트 도식은 읽기 쉽도록 **표 밖의 코드 블록**에 둔다. 표를 함께 사용하면 **해결방안**에는 변경의 요지와 이유를 적고, 실제 전후 차이는 도식이 설명하게 한다. 다른 항목도 도식에서 충분히 전달되었다면 요지만 남기거나 합쳐 반복을 줄인다.
127
+
128
+ ## 질문과 승인
129
+
130
+ 질문·승인 여부는 기존 프로젝트 정책과 사용자 위임 범위를 따른다. 그 안에서 사용자 결정이 필요한 미해결 사항만 질문한다.
131
+
132
+ 이미 위임받은 판단은 합리적인 방안을 선택해 처리하고 이유를 설명한다.
133
+
134
+ 질문이 필요하다면 단순히 "어떻게 할까요?"라고 묻지 말고 다음이 드러나게 한다.
135
+
136
+ **무엇을 결정해야 하는지, 선택지의 차이가 무엇인지, 무엇을 추천하는지**
137
+
138
+ 설명이나 재정리 요청에 `진행할까요?` 같은 불필요한 실행 승인을 덧붙이지 않는다.
139
+
140
+ ## 품질 기준
141
+
142
+ 최종 답변만 읽어도 사용자가 현재 판단에 필요한 범위에서 다음 연결을 이해할 수 있어야 한다.
143
+
144
+ **맥락 → 문제 또는 검토사항과 원인 → 선택지와 전후 차이 → 추천 이유와 필요한 행동**
145
+
146
+ 화면이나 동작을 바꾸는 설명은 사용자가 무엇을 보고, 무엇을 하면 어떤 결과가 나오는지 예상할 수 있어야 한다. 제안·미확인 사항이 이미 구현되거나 검증된 사실로 읽히지 않는지 확인한다.
147
+
148
+ 형식의 충족보다 사용자가 상황과 변경 결과를 이해하고 판단할 수 있는지로 완성도를 평가한다. 이해와 판단에 충분하면 설명을 마치고, 같은 내용을 도입·표·도식·결론에서 반복하지 않는다.