@su-record/vibe 4.1.9 → 4.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/README.md +7 -3
  5. package/agents/design-art-director.md +27 -0
  6. package/agents/design-markup-reviewer.md +28 -0
  7. package/agents/en-chief-editor.md +3 -0
  8. package/agents/en-copy-editor.md +3 -0
  9. package/agents/ko-chief-editor.md +6 -0
  10. package/agents/ko-copy-editor.md +7 -0
  11. package/card.md +1 -1
  12. package/dist/cli/common.js +2 -1
  13. package/dist/cli/common.js.map +1 -1
  14. package/dist/cli/work.js +17 -5
  15. package/dist/cli/work.js.map +1 -1
  16. package/dist/cli.js +1 -1
  17. package/dist/cli.js.map +1 -1
  18. package/dist/core/checks/packs.js +27 -0
  19. package/dist/core/checks/packs.js.map +1 -0
  20. package/dist/core/checks/review.js +51 -29
  21. package/dist/core/checks/review.js.map +1 -1
  22. package/dist/core/checks/source.js +51 -0
  23. package/dist/core/checks/source.js.map +1 -0
  24. package/dist/core/config.js +2 -1
  25. package/dist/core/config.js.map +1 -1
  26. package/dist/core/reader.js +98 -0
  27. package/dist/core/reader.js.map +1 -0
  28. package/dist/core/readerSession.js +111 -0
  29. package/dist/core/readerSession.js.map +1 -0
  30. package/dist/core/regress.js +22 -6
  31. package/dist/core/regress.js.map +1 -1
  32. package/dist/core/scenarios.js +3 -0
  33. package/dist/core/scenarios.js.map +1 -1
  34. package/dist/core/view.js +2 -1
  35. package/dist/core/view.js.map +1 -1
  36. package/dist/install/hooks.js +7 -6
  37. package/dist/install/hooks.js.map +1 -1
  38. package/dist/install/plugin.js +19 -13
  39. package/dist/install/plugin.js.map +1 -1
  40. package/dist/install/tree.js +4 -1
  41. package/dist/install/tree.js.map +1 -1
  42. package/hooks/codex-hooks.json +10 -0
  43. package/hooks/hooks.json +10 -0
  44. package/hooks/notify.js +27 -1
  45. package/package.json +1 -1
  46. package/reviewers/design/1-markup-reviewer.md +21 -0
  47. package/reviewers/design/2-art-director.md +20 -0
  48. package/reviewers/en/{copy-editor.md → 1-copy-editor.md} +3 -0
  49. package/reviewers/en/{chief-editor.md → 2-chief-editor.md} +3 -0
  50. package/reviewers/ko/{copy-editor.md → 1-copy-editor.md} +7 -0
  51. package/reviewers/ko/{chief-editor.md → 2-chief-editor.md} +6 -0
  52. package/skills/antislop-design/SKILL.md +231 -0
  53. package/skills/antislop-design/references/catalogue.md +42 -0
  54. package/skills/antislop-design/references/plan.md +131 -0
  55. package/skills/antislop-en/SKILL.md +50 -0
  56. package/skills/antislop-en/references/editorial-review.md +1 -1
  57. package/skills/antislop-ko/SKILL.md +88 -0
  58. package/skills/antislop-ko/references/editorial-review.md +1 -1
  59. package/skills/vibe-build/SKILL.md +1 -0
  60. package/skills/vibe-discover/SKILL.md +1 -0
  61. package/skills/vibe-scope/SKILL.md +2 -1
@@ -0,0 +1,131 @@
1
+ # Design Plan Template
2
+
3
+ Fill this out before writing any markup or CSS. Keep it short — a paragraph
4
+ or a few lines per section — and revise it once against the last question
5
+ before building from it. The plan is working ground, not a deliverable; drop
6
+ it from the final output unless the brief asked to see it.
7
+
8
+ ## 1. Brief
9
+
10
+ State in one or two sentences what this is, who asked for it, and what
11
+ "done" looks like. Quote the actual request rather than paraphrasing it into
12
+ something generic.
13
+
14
+ > Example: "A shift roster for a hospital ward, used by charge nurses to
15
+ > check who is on and swap shifts."
16
+
17
+ ## 2. Users and frequency
18
+
19
+ Name who looks at this, and how often and for how long each time. A screen
20
+ checked twenty times a day for a few seconds needs a different design than
21
+ one read once for ten minutes.
22
+
23
+ > Example: "Charge nurses, roughly twenty times per shift, glancing for a
24
+ > few seconds at a time on a desk monitor."
25
+
26
+ ## 3. Task
27
+
28
+ Name the one thing this screen is for. If there is more than one candidate,
29
+ pick the one that happens most often or matters most when it goes wrong.
30
+
31
+ > Example: "See who is on shift right now and who is on call next."
32
+
33
+ ## 4. Density
34
+
35
+ Given the frequency and task above, decide how much shows at once: more
36
+ information with less chrome for a frequent, brief-glance screen; more
37
+ explanation and fewer items for an infrequent, unfamiliar one.
38
+
39
+ > Example: "High density: the full week's roster fits on one screen with no
40
+ > scrolling, at a size legible from arm's length on a desk monitor."
41
+
42
+ ## 5. Hierarchy
43
+
44
+ State what is seen first, second and third, and why that order matches the
45
+ task in section 3 rather than what was easiest to make prominent.
46
+
47
+ > Example: "First: who is on right now, highlighted. Second: who is on call.
48
+ > Third: the rest of the week, in a lower-contrast grid."
49
+
50
+ ## 6. Type
51
+
52
+ Name the typeface(s) and the reason for each — not "looks clean," but a
53
+ reason tied to the content (numeral legibility at a distance, a display face
54
+ that matches an existing brand mark, a monospace for aligned data).
55
+
56
+ > Example: "One typeface, a grotesque with strong numeral distinction, for
57
+ > both headings and body — no display face needed at this density."
58
+
59
+ ## 7. Colour tokens
60
+
61
+ List four to six named tokens with hex values, each tied to a role and a
62
+ source (the brand's existing palette, or the content itself — a status
63
+ colour that already means something to this user).
64
+
65
+ > Example: `bg #0B1220` (screen background), `surface #16202E` (roster
66
+ > cells), `text #E7ECF3`, `accent-on-shift #3FB27F`, `accent-on-call #E0A930`,
67
+ > `danger-gap #E05252` (an uncovered slot).
68
+
69
+ ## 8. Layout sketch
70
+
71
+ Draw the layout in ASCII. This is the step that catches a generic default
72
+ before it becomes code — if the sketch could belong to any dashboard, redo
73
+ it around the actual content.
74
+
75
+ ```
76
+ +----------------------------------------------------+
77
+ | Ward 4B · Wed 10 Sep [ Swap ] [ Print] |
78
+ +----------------------------------------------------+
79
+ | NOW ON SHIFT | ON CALL NEXT |
80
+ | J. Alvarez R. Singh | M. Cho |
81
+ +----------------------------------------------------+
82
+ | Mon Tue Wed Thu Fri Sat Sun |
83
+ | --------------------------------------------- |
84
+ | AM [names in cells, one row per nurse] |
85
+ | PM [ ... ] |
86
+ | Night[ ... ] |
87
+ +----------------------------------------------------+
88
+ ```
89
+
90
+ ## 9. States
91
+
92
+ List what the layout must handle beyond the populated, average-length case:
93
+ empty, loading, error, long text (a long name overflowing a cell), many
94
+ items (more nurses than rows fit), one item (a ward with two nurses total),
95
+ and a narrow viewport.
96
+
97
+ > Example: "Empty slot shows a dashed outline and 'unfilled,' not a blank
98
+ > cell. A name too long to fit truncates with a tooltip, never wraps and
99
+ > breaks row height. Fewer than four nurses still fills the width without
100
+ > stretching cells absurdly wide."
101
+
102
+ ## 10. Motion
103
+
104
+ State what, if anything, animates, and the purpose each animation serves. If
105
+ nothing needs to animate, say so.
106
+
107
+ > Example: "A swapped shift briefly highlights the changed cell for two
108
+ > seconds so the nurse who made the change can confirm it landed. Nothing
109
+ > else animates."
110
+
111
+ ## 11. Copy
112
+
113
+ Note the voice and note that in-design copy follows the antislop pack of its
114
+ language (`antislop-en` or `antislop-ko`) — labels are specific to the
115
+ action, not a generic "Get started."
116
+
117
+ > Example: "Button labels name the action: 'Request swap,' not 'Get
118
+ > started.' No greeting copy; the nurse's name appears only where needed for
119
+ > identification."
120
+
121
+ ## 12. What would make this generic — and the answer
122
+
123
+ Name the part of this plan most likely to be the default anyone would
124
+ produce for a similar brief, and state what makes it specific here instead.
125
+ If nothing survives this question, revise the plan before building.
126
+
127
+ > Example: "The three-column week grid could be any scheduling app. What
128
+ > makes it specific: the NOW/NEXT band above it, sized and coloured for a
129
+ > glance from across the nurses' station, which no generic scheduling
130
+ > template includes because it assumes a mouse and a close read, not a desk
131
+ > monitor checked in passing."
@@ -235,6 +235,56 @@ no real logic or rhythm behind them, not as a list of forbidden words:
235
235
  - Manufactured significance with no named source: "This is a testament to," "This speaks volumes about," "game-changer," "a paradigm shift."
236
236
  - A rhetorical question used as an opener to manufacture urgency: "Have you ever wondered...?"
237
237
  - A stock transition into the body that adds nothing: "Let's dive in," "Without further ado."
238
+ - False range: "from X to Y" where X and Y sit on no real scale, as in "from innovation to cultural transformation." Name the actual items instead of stretching them into a spectrum with nothing in the middle.
239
+ - The "serves as" dodge: "serves as," "stands as," "marks," "represents" standing in for a plain "is." "The gallery serves as LAAA's exhibition space" becomes "The gallery is LAAA's exhibition space."
240
+ - The magic adverb: "quietly," "arguably," "fundamentally" lending an ordinary claim weight the evidence hasn't earned. Cut the adverb; if the claim needs it to be true, the claim itself is weak.
241
+ - "Not X. Not Y. Just Z.": a manufactured countdown that stages the real point instead of stating it. Delete the setup and say Z.
242
+ - The bold-first bullet: every list item opens with a bolded label and colon that only restate the item that follows. Write the list as prose, or drop the bold where the label adds nothing the sentence doesn't already say.
243
+ - The colon reveal: a flat clause, a colon, then a dramatic lowercase payoff, as in "The best part: it learns." State it as one sentence instead: "It learns, which is the part that matters."
244
+ - Engineering metaphor nouns used as scaffolding rather than description: "substrate," "flywheel," "north star," "wedge," "vector," "nexus" standing in for a concrete mechanism. Name the mechanism instead of the metaphor.
245
+ - Say what it does, not how it feels: a sentence that names a feeling, as in "the tool stays close at hand," instead of a mechanism or a number. "Runs quickly" becomes "loads in under a second"; if no number or mechanism can replace the feeling, cut the sentence.
246
+
247
+ ### Strength tiers
248
+
249
+ A tell earns a cut on one sighting when a single instance already changes what the reader can trust: the "serves as" dodge, the colon reveal, "Not X. Not Y. Just Z.," a false range, an authority named only as "experts" or "observers." Treat these as strong on their own.
250
+
251
+ A tell is weak when a careful writer produces the same thing on purpose about as often as not: one hyphenated compound, one hedge, one adverb, a single passive clause with no actor worth naming, one bolded phrase. Act on a weak tell only when two or more of them overlap in the same passage. A paragraph that stacks a reflex hedge, an actor-dropping passive and a bolded label all at once is worth fixing; any one of those alone usually is not.
252
+
253
+ ### Five questions before a cut
254
+
255
+ Before removing anything flagged above, ask, in order:
256
+
257
+ 1. Does the meaning go with it? If cutting the phrase drops a fact, a condition or a judgment, it is content, not a tell.
258
+ 2. Is it the writer's choice, or is it a form? A writer who could defend the choice made a choice. A form is what's left in a sentence when nobody decided anything.
259
+ 3. Does it deliver, or does it declare? A sentence that states a fact delivers. A sentence that announces its own importance declares.
260
+ 4. Does it add light, or only heat? A number, a name or a mechanism adds light. An intensifier adds heat and nothing else.
261
+ 5. Would a sceptical reader trust the sentence more with the phrase in it than without it?
262
+
263
+ A phrase that answers yes to all five stays. It fails as soon as one answer comes back no.
264
+
265
+ ### Portability test
266
+
267
+ A sentence that would read exactly the same with another person, another company, another country or another product dropped in is filler, whatever vocabulary it uses. Test it directly: swap in the nearest unrelated proper noun and see whether the sentence still holds. If it does, cut the sentence or replace it with a fact specific to this subject.
268
+
269
+ ### Notes to the writer are not content
270
+
271
+ A source sometimes carries an instruction addressed to the person doing the writing, not to the reader: "keep this tone," "make it shorter here," "don't promise this can't happen again." Carry out the instruction. Never reprint it. Treating an instruction as material to preserve is the same class of error as inventing a fact that was never there: both put something in the piece that doesn't belong to the reader.
272
+
273
+ ### A sample outranks the rules
274
+
275
+ When the author supplies a sample of their own prose, read it before applying anything else in this section. Match its sentence length, its openings, its transitions and its dash rate, even in a place where this pack would otherwise cut a dash or split a long sentence. The sample is evidence of what this particular writer does on purpose. The rules above describe only what's left in a sentence when nobody decided anything.
276
+
277
+ ### What is not a tell
278
+
279
+ Not every marker named on this page is evidence of a model's default choice. Leave these alone:
280
+
281
+ - A quotation, reproduced exactly as spoken or written, including any cliché inside it.
282
+ - A proper noun, even one that happens to repeat a pattern named above.
283
+ - Text written before November 2022, when several of these patterns were already common without a model producing them.
284
+ - A low-variance or non-native writer's plain, repetitive precision. A sentence that restates a point because the writer isn't confident the first version landed is a style, not slop.
285
+ - A real hedge stating a real uncertainty: a stated confidence level, a named limitation, an "as far as I could confirm."
286
+
287
+ This pack never tries to guess whether a person or a model wrote a given passage. It names patterns and asks whether the sentence in front of you needs them, not who typed it.
238
288
 
239
289
  Read the relevant section only of
240
290
  [Genre Writing Guide](references/genres.md) when a genre-specific judgment is
@@ -37,7 +37,7 @@ reviewers in sequence.
37
37
  ```
38
38
 
39
39
  - `path` is the full manuscript under review, `contract` is the editorial contract, and `evidence` is the evidence ledger. Both can be omitted, but a manuscript for outside submission should keep both as files. If `lang` is not set, the harness infers it from the manuscript's script.
40
- - The harness runs `reviewers/en/copy-editor.md` first, and only on a pass runs `reviewers/en/chief-editor.md`. A stage passes only when the entire response is exactly one line, `PASS`. Any response that differs from the `REJECT` list format counts as a failure, and the response is kept in evidence's `tail`.
40
+ - The harness runs `reviewers/en/1-copy-editor.md` first, and only on a pass runs `reviewers/en/2-chief-editor.md`. A stage passes only when the entire response is exactly one line, `PASS`. Any response that differs from the `REJECT` list format counts as a failure, and the response is kept in evidence's `tail`.
41
41
  - If the same failure repeats twice, the harness stops at STUCK and asks in the inbox. The writer fixes the `REJECT` items with the smallest possible change and reruns `vibe check`. If an item conflicts with the evidence or only enforces a preference and cannot be fixed, don't discard it — hand it to `vibe ask` along with the conflict.
42
42
 
43
43
  ## Reviewer input bundle
@@ -141,6 +141,20 @@ metadata:
141
141
  - 한 문장에는 중심 판단을 하나 둔다. 예외와 조건은 적용 대상을 알아볼 수 있게 붙인다.
142
142
  - 조사 하나로 관계가 선명해지면 쉼표나 문장 분할보다 조사를 고친다.
143
143
 
144
+ ### 조사·어미 생략
145
+
146
+ 토큰을 줄이려고 조사와 어미를 지우면 명사가 나열될 뿐 누가 누구에게 무엇을 했는지,
147
+ 언제 어떤 조건으로 일어났는지가 사라진다. 없어도 읽히는 문장이 아니라 다르게 읽히는
148
+ 문장이 문제다. 지운 자리에 조사와 어미를 되살려 주체, 시점, 조건, 책임을 다시 밝힌다.
149
+
150
+ - 예산 초과 시 팀장 보고 → 예산이 초과되면 담당자가 팀장에게 보고한다.
151
+ - 지난주 시스템 점검 완료, 결과 이상 없음 → 지난주에 시스템 점검을 마쳤고 결과에서 이상을
152
+ 찾지 못했다.
153
+ - 오류 발생 시 재시도 자동, 3회 초과 알림 → 오류가 발생하면 시스템이 자동으로 재시도하고,
154
+ 세 번을 넘기면 담당자에게 알린다.
155
+ - 참석자 부족으로 회의 연기, 다음 주 재소집 → 참석자가 부족해서 회의를 연기했으니 다음
156
+ 주에 다시 소집한다.
157
+
144
158
  ### 번역투와 명사 중심 표현
145
159
 
146
160
  다음 꼴을 발견하면 자동으로 지우지 말고, 누가 무엇을 하는지 흐리는지 확인한다.
@@ -182,6 +196,9 @@ metadata:
182
196
  - 쉼표는 호흡 표시가 아니라 문장 관계를 밝힐 때 쓴다. 쉼표로 긴 문장을 버티지 않는다.
183
197
  - 큰따옴표·작은따옴표·괄호·가운뎃점은 문서 안에서 한 방식으로 쓴다.
184
198
  - 높임말과 종결 어미는 독자와 상황에 맞춰 정한 뒤 한 글 안에서 까닭 없이 오가지 않는다.
199
+ - 줄표(—)는 두 구절의 관계를 밝히지 않고 뭉뚱그릴 때 쓰기 쉽다. 앞뒤가 원인과 결과, 예시,
200
+ 부연 가운데 무엇인지 스스로 답할 수 없는 줄표는 쌍점이나 접속 표현으로 바꾸거나 문장을
201
+ 둘로 나눈다. 필자가 실제로 즐겨 쓰는 리듬이면 [필자 샘플이 규칙보다 앞선다](#필자-샘플이-규칙보다-앞선다)를 따른다.
185
202
 
186
203
  ### 4. 문단과 구성
187
204
 
@@ -241,6 +258,77 @@ AI 상투문은 특정 낱말이 아니라 **근거 없이 어디에나 붙일
241
258
  - 모든 문단을 같은 길이와 같은 삼단 나열로 맞추는 습관
242
259
  - `또한·한편·결국·핵심은`으로 관계를 설명한 척하는 문장
243
260
  - 앞 내용을 표어로 한 번 더 말하는 결말과 억지 행동 촉구
261
+ - 실제 두 끝을 재지 않은 `A부터 B까지`: `사소한 오타부터 근본적인 설계 결함까지 다양하다`처럼
262
+ 범위감만 주고 실제 항목은 하나도 대지 않는 문장
263
+ - `이다`를 피해 `~로 자리매김한다`, `~역할을 한다`, `~로 기능한다`로 돌려 말하기: `이 문서는
264
+ 팀의 나침반 역할을 한다` 대신 `이 문서는 팀의 기준이다`
265
+ - 근거 없이 무게만 얹는 부사: `조용히 방향을 바꿨다`, `근본적으로 다른 접근이다`처럼 `조용히·
266
+ 분명히·근본적으로`가 판단의 이유 없이 붙는 경우
267
+ - `A도 아니다. B도 아니다. 오직 C다.` 식 셋으로 끊어 말하는 결말
268
+ - 모든 항목이 굵은 핵심어로 시작하는 목록: 정보가 굵은 글씨 자체가 아니라 뒤에 오는 설명에
269
+ 있을 때
270
+ - 쌍점 뒤에 극적으로 답을 얹는 문장: `가장 좋은 점: 배운다는 것이다`
271
+ - 공학 은유 명사의 남용: `플라이휠`, `북극성`, `기반`, `레버리지`를 실제 비유가 필요 없는
272
+ 자리에까지 붙이는 습관
273
+ - 느낌으로 뭉뚱그린 문장: `사용자가 편안함을 느낀다`, `만족스러운 경험을 제공한다` 대신
274
+ 무엇이 어떻게 바뀌었는지 동작과 숫자로 쓴다
275
+
276
+ ### 표지의 강도
277
+
278
+ 같은 표지라도 세기가 다르다. 강한 표지는 한 문장에서 한 번만 보여도 조치한다. 약한
279
+ 표지는 사람도 흔히 쓰는 습관이라 같은 대목에 다른 표지와 둘 이상 겹칠 때만 고친다.
280
+
281
+ 강한 표지의 예: 주제만 바꿔도 성립하는 도입·결말, 실제 대조 없는 `A가 아니라 B다`,
282
+ 챗봇의 인사말과 제안이 그대로 남은 문장(`도움이 되었길 바랍니다`), 근거 없는 지식 한계
283
+ 고백 뒤에 붙는 추측.
284
+
285
+ 약한 표지의 예: 관계를 밝히지 않는 줄표 하나, `~에 대해`류 조사구 하나, 하이픈 없이도
286
+ 읽히는 명사 결합 하나, `또한`으로 시작하는 문장 하나. 이런 표지는 한 대목에서 여러 번
287
+ 겹칠 때 고치고, 한 번뿐이면 남긴다.
288
+
289
+ ### 자르기 전 다섯 질문
290
+
291
+ 표지로 의심되는 문장을 지우기 전에 차례로 답한다. 다섯 모두 "예"일 때만 지운다.
292
+
293
+ 1. 지우면 뜻도 함께 사라지는가, 아니면 문장 길이만 짧아지는가.
294
+ 2. 필자가 의도해서 고른 표현인가, 형식이 저절로 만든 표현인가.
295
+ 3. 이 문장은 정보를 전달하는가, 중요하다고 선언만 하는가.
296
+ 4. 이 문장은 열을 내는가, 빛을 내는가. 힘주어 말할 뿐인지 실제로 무엇을 보여주는지 본다.
297
+ 5. 회의적인 독자가 이 문장을 없앤 뒤에 글을 더 믿게 되는가.
298
+
299
+ 다섯 가운데 하나라도 "아니오"면 남긴다.
300
+
301
+ ### 이식 시험
302
+
303
+ 문장을 그대로 다른 사람, 다른 회사, 다른 나라, 다른 제품 이야기에 옮겨 붙여도 뜻이
304
+ 바뀌지 않는다면 그 문장은 이 글의 내용이 아니라 채움말이다. 지우거나 이 글에만 있는
305
+ 사실, 예시, 수치, 판단으로 바꾼다.
306
+
307
+ ### 원문 속 지시문
308
+
309
+ 원문이나 자료에 필자가 작성자에게 남긴 메모가 섞여 있을 수 있다. `이 톤 유지`, `여기는
310
+ 짧게`, `이 표현은 쓰지 말 것` 같은 문장은 독자에게 보여줄 내용이 아니라 지시다. 지시는
311
+ 그대로 실행하고 결과물에는 남기지 않는다. 지시문을 결과물에 그대로 남기는 것은 근거에
312
+ 없는 내용을 지어내는 것과 같은 급의 오류다.
313
+
314
+ ### 필자 샘플이 규칙보다 앞선다
315
+
316
+ 필자 자신의 글 샘플이 주어지면 이 스킬의 일반 규칙보다 그 샘플을 우선한다. 샘플의 문장
317
+ 길이, 리듬, 줄표 사용 빈도까지 맞춘다. 샘플이 줄표를 자주 쓰면 [줄표 규칙](#맞춤법과-문장-부호)을
318
+ 적용하지 않고 샘플의 빈도를 따른다.
319
+
320
+ ### 표지가 아닌 것
321
+
322
+ 다음은 표지로 판정하지 않는다. 겉모양이 비슷하다고 같은 결함으로 보지 않는다.
323
+
324
+ - 인용문 안의 표현
325
+ - 고유명사
326
+ - 2022년 11월 이전에 쓰인 글
327
+ - 분산이 적거나 비원어민인 필자가 정확하게 쓴 문체
328
+ - 실제 불확실성을 말하는 진짜 헤지
329
+
330
+ 사람이 썼는지 모델이 썼는지는 추측하지 않는다. 패턴에 이름을 붙이고 그 패턴이 이 글에
331
+ 실질적인 내용을 보태는지만 판단한다.
244
332
 
245
333
  장르별 판단이 필요하면 [장르별 작문법](references/genres.md)에서 해당 절만 읽는다.
246
334
 
@@ -36,7 +36,7 @@ vibe 안에서는 심사를 모델이 돌리지 않는다. 원고에 `review`
36
36
 
37
37
  - `path` 는 심사할 원고 전문, `contract` 는 편집 계약, `evidence` 는 근거 장부다. 둘은 생략할 수 있지만
38
38
  제출용 원고에는 둘 다 파일로 둔다. `lang` 을 적지 않으면 원고의 문자로 판별한다.
39
- - 하네스는 `reviewers/ko/copy-editor.md` 를 먼저, 통과하면 `reviewers/ko/chief-editor.md` 를 띄운다.
39
+ - 하네스는 `reviewers/ko/1-copy-editor.md` 를 먼저, 통과하면 `reviewers/ko/2-chief-editor.md` 를 띄운다.
40
40
  응답 전체가 정확히 `PASS` 한 줄일 때만 그 단계가 통과다. `REJECT` 목록과 형식이 다른 응답은 모두
41
41
  실패이고, 응답은 evidence 의 `tail` 에 남는다.
42
42
  - 같은 실패가 두 번 이어지면 하네스가 STUCK 으로 멈추고 인박스에 묻는다. 작성자는 `REJECT` 항목을
@@ -11,6 +11,7 @@ user-invocable: false
11
11
  1. Take scenarios in the order of `remaining` from `vibe state --json` — parents before their `needs` dependents (`vibe state --graph` shows the edges). Put scenarios marked `irreversible` last.
12
12
  - Scenarios with no edge between them may be built by parallel agents, each in its own worktree, merged before `vibe check --all`. Never two agents in one working tree.
13
13
  2. Build only what that scenario needs — code, a script, a document, configuration, whatever. Make sure the check itself (`check.cmd`, `check.path`) can actually run.
14
+ - Orientation reads ("what does this module do", "where is X handled") go through `vibe read <files> --ask "<question>"` — a low-reasoning model reads and answers with line numbers; read the file yourself only to edit or debug it.
14
15
  3. Run `vibe check {id} --json`.
15
16
  - Pass (`code 0`): next scenario.
16
17
  - Fail (`code 1`): read `tail` and fix. If the same failure happens twice the harness marks STUCK and leaves an inbox question — stop and show that question to the user.
@@ -11,6 +11,7 @@ user-invocable: false
11
11
  1. Read what the user attached through the harness, so every client sees the same thing:
12
12
  - table (csv · tsv · jsonl · json · xlsx) → `vibe profile {file} --json` [`--sheet`]: columns, types, missing counts, duplicates, up to three anomalies with numbers
13
13
  - document (xlsx · docx · pptx · pdf · hwp · hwpx · html) → `vibe read {file} --json` [`--sheet` · `--pages`]; it says which reader it used (pdf: `pdftotext` when installed, else built-in)
14
+ - long material that only needs an answer ("what does this contract require", "which sheet holds the totals") → `vibe read {files} --ask "{question}"`; a low-reasoning model reads it and only the answer enters your context
14
15
  - image → your own file reader; vibe does not read images
15
16
  - code or plain text → your file reader, the whole file — never a grep excerpt
16
17
  If there is no sample, ask for one that the success condition can be checked against.
@@ -9,8 +9,9 @@ user-invocable: false
9
9
  ## Procedure
10
10
 
11
11
  1. Turn the discovery result into scenarios. A scenario is stored only if it carries exactly one check type:
12
- - `run` command exit code · `file` exists/regex/contains/schema/sum (a column total equals a reference) · `http` status/schema/maxMs · `eval` count of matching labelled cases (jsonl `{input, expected}` through a runner's stdin/stdout, `expect.pass` is a count) · `review` a language pack's copy editor then chief editor, run by the harness, exact `PASS` only · `human` no verdict (goes to the inbox)
12
+ - `run` command exit code · `file` exists/regex/contains/schema/sum (a column total equals a reference) · `http` status/schema/maxMs · `eval` count of matching labelled cases (jsonl `{input, expected}` through a runner's stdin/stdout, `expect.pass` is a count) · `review` an antislop pack's reviewer stages in order (text: copy editor → chief editor; design: markup reviewer → art director), run by the harness, exact `PASS` only · `human` no verdict (goes to the inbox)
13
13
  - When a success condition is human-read text (blog, column, article, report, script, speech), propose `check: { type: review, path: <file>, contract: <file>, evidence: <file> }` and mark it `⚠ model-judged` in the approval message.
14
+ - When it is something a person looks at (screen, page, component, dashboard, slide, card news, poster), propose `check: { type: review, pack: design, path: <file or directory>, contract: <brief>, screenshot: <png, if an earlier scenario renders one> }`, same mark.
14
15
  - A condition you cannot check gets `human` explicitly. An irreversible action (push, deploy, send, delete, spend) gets `irreversible: <action>`.
15
16
  - A scenario that only makes sense after another one has passed gets `needs: [ids]`. The harness orders and parallelises checks from these edges; keep a connected graph under six scenarios.
16
17
  2. Check for missing scenario kinds yourself: the failure path, rollback, permission boundaries. Add them or say in one line why they are not needed. When the intent writes code, propose a size gate: `check: { type: run, cmd: "vibe size src --max-file 400 --max-function 50" }`.