@litfamily/litgrok 1.0.20 → 1.0.21

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.
@@ -18,9 +18,9 @@ This original category comes from the 26 real lines in fixtures/pos-real.txt and
18
18
  - ko-standalone-scope-disclaimer and en-standalone-scope-disclaimer — ko/en, block for stock disclaimers. Preserve a user-requested legal, medical or safety notice and place it once where it applies.
19
19
  - ko-status-negation, ko-mi-status, en-epistemic-negation and en-not-performed — warnings. A negative result or unperformed action may be the finding. Write the actor, scope and verb plainly; never turn unknown into false or an estimate into a fact.
20
20
  - ko-status-negation also catches 쓰지, ~지 않습니다 and ~지 않았습니다 endings, with or without bold or underscore emphasis. It stays a warning: a method fact such as "실제 운영 데이터로 검증하지 않았습니다" is often the finding, so keep it once beside the number it bounds.
21
- - ko-negative-pledge — ko, block. A line that tells the reader what the document, table or number is not for: a self-reference (이/본/해당/위/아래 + 자료, 표, 수치 and similar) with a negated use or claim verb; a comparison, ranking or conclusion noun + (으)로 + a negated use verb; or a purpose-용 data noun + 아님. It matches within one line. Move the sentence to the reply, or restate it as a fact about the data. Operating rules (방폭 구역에서 사용하지 않습니다), legal and financial notices (법률 자문을 대체하지 않습니다, 투자 권유가 아닙니다) and negative findings (첨가제 B는 수율을 개선하지 않았다) stay outside it.
22
- - ko-negative-pledge-repeat — ko, block, whole document. Two or more sentences ending in 해석하지/주장하지/대표하지 + 않음 or a claim noun + 이/가 + 아님 turn a document into a list of disclaimers. One such sentence is left to ko-status-negation. Repeated definitions ("완료는 출하를 의미하지 않습니다") and data-processing rules do not count.
23
- - en-negative-pledge — en, block. "This deck/report/figures are not intended or meant as, or must not be read as, a comparison, benchmark or ranking", a table or set of numbers that "does not constitute" one, "makes no claim about", and a sentence-initial "Not to be read as a ranking". The comparison, benchmark or ranking noun is required, so safety labels, advice notices and "is not intended as a substitute for professional advice" stay clean. The guard scans only the text an Edit changes, so a second pledge added to a file by a later Edit is judged on its own.
21
+ - ko-negative-pledge — ko, block. A line that tells the reader what the document, table or number is not for: a self-reference (이/본/해당/위/아래 + 자료, 표, 수치 and similar) with a negated use or claim verb; a comparison, ranking or conclusion noun + (으)로 + a negated use verb; or a purpose-용 data noun + 아님; the same refusal said as 순위처럼 읽지 말아 주세요, 이 문서는 제품을 비교하려는 것이 아닙니다 or 숫자는 서로 비교할 수 없습니다 (as a flat statement, not a conditional method fact). It matches within one line, and it also reads a quote line that opens with a bold label (> **주의:** ...), which is the author's own callout; a plain quote stays skipped. 숫자와 문자열은 서로 비교할 수 없습니다 and 숫자 문자열을 그대로 비교하지 마십시오 are type-system rules and stay outside it. Move the sentence to the reply, or restate it as a fact about the data. Operating rules (방폭 구역에서 사용하지 않습니다), legal and financial notices (법률 자문을 대체하지 않습니다, 투자 권유가 아닙니다) and negative findings (첨가제 B는 수율을 개선하지 않았다) stay outside it.
22
+ - ko-negative-pledge-repeat — ko, block, whole document. Two or more sentences ending in 해석하지/주장하지/대표하지 + 않음 or a claim noun + 이/가 + 아님 turn a document into a list of disclaimers. One such sentence is left to ko-status-negation. Repeated definitions ("완료는 출하를 의미하지 않습니다") and data-processing rules do not count. A bold-label callout quote line counts as one sentence.
23
+ - en-negative-pledge — en, block. "This deck/report/figures are not intended or meant as, or must not be read as, a comparison, benchmark or ranking", a table or set of numbers that "does not constitute" one, "makes no claim about", a sentence-initial "Not to be read as a ranking", and the closing forms "they are not a ranking.", "do not compare these numbers." and "this table is not a ranking.". A bold-label callout quote line (> **Note:** ...) is read too; a plain quote is not. The comparison, benchmark or ranking noun is required, so safety labels, advice notices and "is not intended as a substitute for professional advice" stay clean. The guard scans only the text an Edit changes, so a second pledge added to a file by a later Edit is judged on its own.
24
24
  - ko-plain-meta-label-warn and en-plain-caveat-label — warnings for boundary headings. They may be useful in internal or technical packets.
25
25
  - en-knowledge-cutoff, en-ai-self-disclaimer, en-hope-helps and ko-chatbot-signoff — block. Remove the model wrapper or generic sign-off, then retain the answer.
26
26
  - ko-chatbot-opener and en-chatbot-opener — block stock greetings and praise at the start of a deliverable.
@@ -4,7 +4,8 @@
4
4
  "context_policy": {
5
5
  "fenced_code": "Skip fenced regions while retaining original line numbers.",
6
6
  "quoted_user_text": "Skip Markdown blockquote lines as a conservative proxy; adapters should pass provenance for exact user-quote boundaries.",
7
- "table_figure_caption": "Skip label checks in recognizable table/figure captions, where source attribution is valid."
7
+ "table_figure_caption": "Skip label checks in recognizable table/figure captions, where source attribution is valid.",
8
+ "blockquote_callout": "A quote line that opens with a bold label (> **주의:** ...) is the author's own callout; only rules that list this context read it, as its own segment with the marker blanked. Every other quote line stays skipped."
8
9
  },
9
10
  "rules": [
10
11
  {
@@ -884,14 +885,15 @@
884
885
  "id": "ko-negative-pledge",
885
886
  "lang": "ko",
886
887
  "severity": "block",
887
- "pattern": "(?<![가-힣])(?:이|본|해당|위|아래)\\s+(?:자료|문서|보고서|슬라이드|덱|표|그림|그래프|차트|수치|결과|비교|분석|내용|예시)(?:은|는)\\s[^.!?\\n]{0,40}?(?:(?:해석하|의미하|주장하|대표하)(?:지\\s*(?:[*_]{1,2}\\s*)?(?:않(?:음|는다|습니다)|말\\s*것|마세요|마십시오)|(?:으)?면\\s*(?:[*_]{1,2}\\s*)?안\\s*(?:됨|된다|됩니다))|(?:(?:비교|결론|벤치마크|순위|대표값|일반화)(?:이|가)|목적이|위한\\s*것이)\\s*(?:[*_]{1,2}\\s*)?(?:아님|아니다|아닙니다)(?![가-힣]))|(?:비교|결론|벤치마크|순위|대표값|일반화)(?:으로|로)\\s*(?:[*_]{1,2}\\s*)?(?:쓰|사용하|해석하|읽|간주하|인용하)(?:지\\s*(?:[*_]{1,2}\\s*)?(?:않(?:음|는다|습니다)|말\\s*것|마세요|마십시오)|(?:으)?면\\s*(?:[*_]{1,2}\\s*)?안\\s*(?:됨|된다|됩니다))|(?:공개|배포|대외|외부|홍보|발표|보고|비교|인용|공식)용\\s*(?:자료|문서|수치|표|그래프)(?:이|가)\\s*(?:[*_]{1,2}\\s*)?(?:아님|아니다|아닙니다)(?![가-힣])",
888
+ "pattern": "(?<![가-힣])(?:이|본|해당|위|아래)\\s+(?:자료|문서|보고서|슬라이드|덱|표|그림|그래프|차트|수치|결과|비교|분석|내용|예시)(?:은|는)\\s[^.!?\\n]{0,40}?(?:(?:해석하|의미하|주장하|대표하)(?:지\\s*(?:[*_]{1,2}\\s*)?(?:않(?:음|는다|습니다)|말\\s*것|마세요|마십시오|말아\\s*주(?:세요|십시오))|(?:으)?면\\s*(?:[*_]{1,2}\\s*)?안\\s*(?:됨|된다|됩니다)(?![가-힣]))|(?:(?:비교|결론|벤치마크|순위|대표값|일반화)(?:이|가)|목적이|(?:위한|려는)\\s*것이)\\s*(?:[*_]{1,2}\\s*)?(?:아님|아니다|아닙니다)(?![가-힣])|순위표(?:이|가)\\s*(?:[*_]{1,2}\\s*)?(?:아님|아니다|아닙니다|아니고)(?![가-힣]))|(?:비교|결론|벤치마크|순위|대표값|일반화)(?:처럼|으로|로)\\s*(?:[*_]{1,2}\\s*)?(?:쓰|사용하|해석하|읽|간주하|인용하)(?:지\\s*(?:[*_]{1,2}\\s*)?(?:않(?:음|는다|습니다)|말\\s*것|마세요|마십시오|말아\\s*주(?:세요|십시오))|(?:으)?면\\s*(?:[*_]{1,2}\\s*)?안\\s*(?:됨|된다|됩니다)(?![가-힣]))|(?:공개|배포|대외|외부|홍보|발표|보고|비교|인용|공식)용\\s*(?:자료|문서|수치|표|그래프)(?:이|가)\\s*(?:[*_]{1,2}\\s*)?(?:아님|아니다|아닙니다)(?![가-힣])|(?<![가-힣])(?:숫자|수치)(?:들)?(?:은|는|이|가|을|를|끼리|도)(?![가-힣])(?:(?!면\\s)[^.!?\\n]){0,40}?(?<![와과]\\s)(?<![와과])비교할\\s*수\\s*(?:는\\s*)?없(?:다|습니다|음|나)(?![가-힣])|(?<![가-힣])(?:숫자|수치)(?:들)?끼리\\s*(?:서로\\s*|직접\\s*)?비교(?:해서|하여|해)\\s[^.!?\\n]{0,30}?[\"”’']\\s*(?:는|라는)\\s*결론[^.!?\\n]{0,8}?(?:수\\s*없(?:다|습니다)(?![가-힣])|(?:으)?면\\s*(?:[*_]{1,2}\\s*)?안\\s*(?:됨|된다|됩니다)(?![가-힣]))|(?:(?<![가-힣])(?:숫자|수치)(?:들)?|(?<![가-힣])(?:이|위|아래|본)\\s+(?:표|값|자료|그래프|차트))[^.!?\\n]{0,40}?(?:빠르|느리)다고\\s*판단하(?:지\\s*(?:[*_]{1,2}\\s*)?(?:말\\s*것|마세요|마십시오|말아\\s*주(?:세요|십시오))|(?:으)?면\\s*(?:[*_]{1,2}\\s*)?안\\s*(?:됨|된다|됩니다)(?![가-힣]))|(?:빠르|느리)다[\"”’']?\\s*(?:는|라는)\\s*식으로\\s*읽(?:지\\s*(?:[*_]{1,2}\\s*)?(?:말\\s*것|마세요|마십시오|말아\\s*주(?:세요|십시오))|(?:으)?면\\s*(?:[*_]{1,2}\\s*)?안\\s*(?:됨|된다|됩니다)(?![가-힣]))|만으로\\s[^.!?\\n]{0,40}?(?<![가-힣])순위를\\s*정하[^.!?\\n]{0,25}?(?:수\\s*없(?:다|습니다|음)(?![가-힣])|(?:해|하)서는\\s*안\\s*(?:됨|된다|됩니다)(?![가-힣]))|(?<![가-힣])순위[^.!?\\n]{0,20}?근거로\\s*(?:[*_]{1,2}\\s*)?사용할\\s*수\\s*(?:는\\s*)?없(?:다|습니다|음)(?![가-힣])|할\\s*수\\s*없는\\s*것\\s{0,3}:\\s{0,3}(?:[*_]{1,2}\\s{0,3})?[^.!?\\n]{0,30}?(?<![가-힣])순위를?\\s*매기거나|(?<![가-힣])표의\\s+(?:나열\\s+)?순서(?:는|가)\\s[^.!?\\n]{0,20}?(?<![가-힣])순위(?:(?:를|을)\\s*뜻하지\\s*(?:[*_]{1,2}\\s*)?않(?:음|는다|습니다)|(?:가|이)\\s*(?:[*_]{1,2}\\s*)?(?:아님|아니다|아닙니다)(?![가-힣]))",
888
889
  "flags": "m",
889
890
  "scope": "line",
890
891
  "context": [
891
892
  "fenced_code",
892
- "quoted_user_text"
893
+ "quoted_user_text",
894
+ "blockquote_callout"
893
895
  ],
894
- "rationale": "A sentence that tells the reader what the document, table or number is not for belongs in the reply or becomes a data fact. Three shapes: a self-reference topic (이/본/해당/위/아래 + document noun + 은/는) with a negated claim verb or a claim noun + 아님 within one bullet; a comparison or ranking noun + (으)로 + a negated use verb; a purpose-용 data noun (공개용 수치) + 아님. Use verbs after a self-reference, 근거/평가/증거/추천, and legal or financial notices (대체하, 보장하, 권유) stay outside the pattern because operating rules, method lines and standard notices use them.",
896
+ "rationale": "A sentence that tells the reader what the document, table or number is not for belongs in the reply or becomes a data fact. Shapes: a self-reference topic (이/본/해당/위/아래 + document noun + 은/는) with a negated claim verb, a claim noun + 아님 (순위표 also + 아니고), or 위한/-려는 것이 아님, within one bullet; a comparison or ranking noun + (으)로/처럼 + a negated use or reading verb, including the polite 말아 주세요 forms; a purpose-용 data noun (공개용 수치) + 아님; 숫자/수치 said to be incomparable, or compared among themselves toward a quoted verdict; a speed judgment forbidden for these numbers; ranking refused for this data; and a table's row order said not to be a ranking. Use verbs after a self-reference, 근거/평가/증거/추천, inference limits, operating rules, conditional method facts, type-system rules, reported speech and explainers, order notices without a table anchor, and legal or financial notices stay outside the pattern because operating rules, method lines, manuals and standard notices use them. The rule also reads a bold-label callout quote line.",
895
897
  "fixture_ids": [
896
898
  "ko-negative-pledge:positive",
897
899
  "ko-negative-pledge:negative"
@@ -906,9 +908,10 @@
906
908
  "scope": "document",
907
909
  "context": [
908
910
  "fenced_code",
909
- "quoted_user_text"
911
+ "quoted_user_text",
912
+ "blockquote_callout"
910
913
  ],
911
- "rationale": "Two or more sentences that end in 해석하지/주장하지/대표하지 않음 or a claim noun + 이/가 + 아님 turn a document into a list of disclaimers. 의미하, 간주하, 인용하 and the use verbs are left out because repeated definitions, data-processing rules, method lines and operating rules end that way; a single such sentence stays with the warn-only ko-status-negation.",
914
+ "rationale": "Two or more sentences that end in 해석하지/주장하지/대표하지 않음 or a claim noun + 이/가 + 아님 turn a document into a list of disclaimers. 의미하, 간주하, 인용하 and the use verbs are left out because repeated definitions, data-processing rules, method lines and operating rules end that way; a single such sentence stays with the warn-only ko-status-negation. A bold-label callout quote line counts as its own sentence here.",
912
915
  "fixture_ids": [
913
916
  "ko-negative-pledge-repeat:positive",
914
917
  "ko-negative-pledge-repeat:negative"
@@ -918,14 +921,15 @@
918
921
  "id": "en-negative-pledge",
919
922
  "lang": "en",
920
923
  "severity": "block",
921
- "pattern": "\\b(?:this|these)\\s+(?:deck|report|document|analysis|table|chart|figure|figures|numbers|results|slide|comparison)\\s+(?:(?:is|are)\\s+not\\s+(?:intended|meant|to\\s+be\\s+(?:read|used|taken|interpreted))(?:\\s+to\\s+be\\s+(?:read|used|taken|interpreted))?\\s+as\\b(?!\\s*(?:a\\s+substitute|a\\s+replacement|(?:legal|investment|medical|professional)\\s+advice))\\s+(?:an?\\s+|the\\s+)?(?:[A-Za-z0-9-]+\\s+){0,4}?(?:comparison|benchmark|ranking)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)|(?:should|must)\\s+not\\s+be\\s+(?:read|used|taken|interpreted)\\s+as\\s+(?:an?\\s+|the\\s+)?(?:[A-Za-z0-9-]+\\s+){0,4}?(?:comparison|benchmark|ranking)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)|makes?\\s+no\\s+claims?\\s+(?:about|that|regarding|as\\s+to)\\b)|\\b(?:this|these)\\s+(?:is|are)\\s+not\\s+(?:intended|meant)\\s+as\\b(?!\\s*(?:a\\s+substitute|a\\s+replacement|(?:legal|investment|medical|professional)\\s+advice))\\s+(?:an?\\s+|the\\s+)?(?:[A-Za-z0-9-]+\\s+){0,4}?(?:comparison|benchmark|ranking)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)|\\bthe\\s+(?:deck|report|document|analysis)\\s+makes?\\s+no\\s+claims?\\s+(?:about|that|regarding|as\\s+to)\\b|(?:^|\\s[-*]\\s)\\s*(?:[-*]\\s+|\\d+\\.\\s+)?(?:[*_]{1,2})?not\\s+(?:intended|meant|to\\s+be\\s+read|to\\s+be\\s+used)\\s+as\\b(?!\\s*(?:a\\s+substitute|a\\s+replacement|(?:legal|investment|medical|professional)\\s+advice))\\s+(?:an?\\s+|the\\s+)?(?:[A-Za-z0-9-]+\\s+){0,4}?(?:comparison|benchmark|ranking)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)|\\b(?:this|these)\\s+(?:table|chart|figure|figures|numbers|results|comparison|analysis)\\s+(?:does|do)\\s+not\\s+constitute\\s+(?:an?\\s+)?[^.!?]{0,60}?\\b(?:comparison|benchmark|ranking)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)",
924
+ "pattern": "\\b(?:this|these)\\s+(?:deck|report|document|analysis|table|chart|figure|figures|numbers|results|slide|comparison)\\s+(?:(?:is|are)\\s+not\\s+(?:intended|meant|to\\s+be\\s+(?:read|used|taken|interpreted))(?:\\s+to\\s+be\\s+(?:read|used|taken|interpreted))?\\s+as\\b(?!\\s*(?:a\\s+substitute|a\\s+replacement|(?:legal|investment|medical|professional)\\s+advice))\\s+(?:an?\\s+|the\\s+)?(?:[A-Za-z0-9-]+\\s+){0,4}?(?:comparison|benchmark|ranking)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)|(?:should|must)\\s+not\\s+be\\s+(?:read|used|taken|interpreted)\\s+as\\s+(?:an?\\s+|the\\s+)?(?:[A-Za-z0-9-]+\\s+){0,4}?(?:comparison|benchmark|ranking)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)|makes?\\s+no\\s+claims?\\s+(?:about|that|regarding|as\\s+to)\\b)|\\b(?:this|these)\\s+(?:is|are)\\s+not\\s+(?:intended|meant)\\s+as\\b(?!\\s*(?:a\\s+substitute|a\\s+replacement|(?:legal|investment|medical|professional)\\s+advice))\\s+(?:an?\\s+|the\\s+)?(?:[A-Za-z0-9-]+\\s+){0,4}?(?:comparison|benchmark|ranking)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)|\\bthe\\s+(?:deck|report|document|analysis)\\s+makes?\\s+no\\s+claims?\\s+(?:about|that|regarding|as\\s+to)\\b|(?:^|\\s[-*]\\s)\\s*(?:[-*]\\s+|\\d+\\.\\s+)?(?:[*_]{1,2})?not\\s+(?:intended|meant|to\\s+be\\s+read|to\\s+be\\s+used)\\s+as\\b(?!\\s*(?:a\\s+substitute|a\\s+replacement|(?:legal|investment|medical|professional)\\s+advice))\\s+(?:an?\\s+|the\\s+)?(?:[A-Za-z0-9-]+\\s+){0,4}?(?:comparison|benchmark|ranking)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)|\\b(?:this|these)\\s+(?:table|chart|figure|figures|numbers|results|comparison|analysis)\\s+(?:does|do)\\s+not\\s+constitute\\s+(?:an?\\s+)?[^.!?]{0,60}?\\b(?:comparison|benchmark|ranking)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)|\\bthey\\s+are\\s+not\\s+(?:an?\\s+)?(?:comparison|benchmark|ranking)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)(?=\\s*(?:[.!?*_]|$))|\\b(?:do\\s+not|don[’']t)\\s+compare\\s+(?:these|those)\\s+(?:numbers|figures|results|values|scores|latencies)(?:\\s+(?:with|to)\\s+(?:each\\s+other|one\\s+another)\\b|(?=\\s*(?:[.!?*_]|$)))|\\b(?:these|those|the)\\s+(?:numbers|figures)\\s+are\\s+not\\s+comparable(?:\\s+(?:with|to)\\s+(?:each\\s+other|one\\s+another)\\b|(?=\\s*(?:[.!?*_]|$)))|\\b(?:this|the|these|our)\\s+(?:table|chart|figure|graph|list|report|document|deck|slide|page|summary|overview|analysis)s?\\s+(?:is|are)\\s+not\\s+(?:(?:meant|intended)\\s+)?(?:(?:to\\s+be\\s+)?(?:an?\\s+)?(?:ranking|benchmark|comparison|leaderboard|endorsement)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)(?=\\s*(?:[.!?*_]|$))|to\\s+(?:rank|compare|benchmark)\\b)|\\b(?:do\\s+not|don[’']t)\\s+read\\s+(?:this|the|these|our)\\s+(?:table|chart|figure|graph|list|report|document|deck|slide|page|summary|overview|analysis)s?\\s+as\\s+(?:an?\\s+)?(?:comparison|benchmark|ranking)s?\\b(?!-)(?!\\s+(?:arm|arms|group|groups|standard|standards|class|baseline)\\b)",
922
925
  "flags": "i",
923
926
  "scope": "sentence",
924
927
  "context": [
925
928
  "fenced_code",
926
- "quoted_user_text"
929
+ "quoted_user_text",
930
+ "blockquote_callout"
927
931
  ],
928
- "rationale": "A sentence that says the deck, report or numbers are not intended, meant or to be read as a comparison, benchmark or ranking, or make no claim about something belongs in the reply, and so does a table, chart or set of numbers that does not constitute one. Requiring one of those nouns keeps safety labels and advice, offer or diagnosis notices clean; \"does not constitute\" for a report or document stays a notice form, and \"the\" is not a subject except with \"makes no claim\".",
932
+ "rationale": "A sentence that says the deck, report or numbers are not intended, meant or to be read as a comparison, benchmark or ranking, or make no claim about something belongs in the reply, and so does a table, chart or set of numbers that does not constitute one. Closing forms such as \"they are not a ranking.\", \"do not compare these numbers (with each other).\" and \"the numbers are not comparable.\" are the same refusal, as is a deliverable subject (this table, the report, our deck) that is not a ranking, benchmark, comparison, leaderboard or endorsement or is not meant to rank or compare. Requiring one of those nouns keeps safety labels and advice, offer or diagnosis notices clean; a refusal that continues into a description or an instruction stays clean, a bare \"this\" is not a subject, and \"the\" is a subject only with \"makes no claim\" or \"numbers are not comparable\". The rule also reads a bold-label callout quote line.",
929
933
  "fixture_ids": [
930
934
  "en-negative-pledge:positive",
931
935
  "en-negative-pledge:negative"
@@ -82,7 +82,12 @@ function sourceRows(text) {
82
82
  if (/^\s{0,3}>\s?/.test(line)) {
83
83
  captionPending = 0;
84
84
  figureActive = false;
85
- return { line, number: index + 1, candidate: '', skipped: true, caption: false, captionAttribution: false };
85
+ // A quote that opens with a bold label (> **주의:** ...) is the author's own callout rather than
86
+ // quoted user text. Only rules whose context names blockquote_callout read it, marker blanked.
87
+ const callout = /^\s{0,3}>\s?(?:\*\*|__)[^*_\n]{1,24}(?:\*\*|__)/.test(line)
88
+ ? inlineCodeAsSpaces(line.replace(/^\s{0,3}>\s?/, (prefix) => ' '.repeat(prefix.length)))
89
+ : '';
90
+ return { line, number: index + 1, candidate: '', callout, skipped: true, caption: false, captionAttribution: false };
86
91
  }
87
92
  const candidate = inlineCodeAsSpaces(line);
88
93
  const caption = isCaption(line);
@@ -149,7 +154,8 @@ function splitSentences(span) {
149
154
  }
150
155
 
151
156
  function ruleSegments(rows, rule, cache) {
152
- const cacheKey = `${rule.scope}/${rule.context.includes('table_figure_caption')}`;
157
+ const readCallouts = rule.context.includes('blockquote_callout');
158
+ const cacheKey = `${rule.scope}/${rule.context.includes('table_figure_caption')}/${readCallouts}`;
153
159
  if (cache.has(cacheKey)) return cache.get(cacheKey);
154
160
  const skipCaptions = rule.context.includes('table_figure_caption');
155
161
  const segments = [];
@@ -163,6 +169,11 @@ function ruleSegments(rows, rule, cache) {
163
169
 
164
170
  for (const row of rows) {
165
171
  const captionExempt = skipCaptions && (row.caption || row.captionAttribution);
172
+ if (readCallouts && row.callout) {
173
+ flush();
174
+ segments.push({ text: row.callout, line: row.number });
175
+ continue;
176
+ }
166
177
  if (row.skipped || captionExempt || (rule.scope === 'sentence' && !row.candidate.trim())) {
167
178
  flush();
168
179
  continue;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "litgrok",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "description": "Grok Build skills, project rules, and bounded lifecycle hooks for evidence-first lit work.",
5
5
  "author": {
6
6
  "name": "LitGrok contributors"
package/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.0.21 — 2026-10-16
6
+
7
+ - The deliverable guard now refuses more of the lines that tell a reader what a document is not for, such as `This table is not a ranking.` or `이 문서는 제품을 비교하려는 것이 아닙니다.` These forms came from real sessions. Bold-label callouts such as `> **주의:** ...` are now read too, while ordinary quoted text is still skipped. Lines from manuals and lab reports that only look similar stay allowed.
8
+
5
9
  ## 1.0.20 — 2026-10-15
6
10
 
7
11
  - Reports and decks no longer fill up with lines that tell the reader what the document is not for, such as `이 수치는 동일 조건의 독립 성능 비교로 쓰지 않음.` When the model writes one into a file, the `PreToolUse` hook denies the write and the model rewrites the line. Three new rules cover Korean self-referencing pledges, repeated disclaimers and the English forms. Legal and financial notices, safety warnings and real negative findings are left alone, and the rules finish in milliseconds even on very long runs of spaces.
package/README.md CHANGED
@@ -1,18 +1,18 @@
1
- <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/cover-motion-still.webp" /><source media="(prefers-reduced-motion: no-preference)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/cover-motion.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/cover-motion.webp" width="100%" alt="LitFamily motion cover: five armored robots power on one by one, the LitGrok robot wakes with glowing eyes and a lit frame, then LITFAMILY and KEEP THE WORK LIT. light up." /></picture></p>
1
+ <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/cover-motion-still.webp" /><source media="(prefers-reduced-motion: no-preference)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/cover-motion.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/cover-motion.webp" width="100%" alt="LitFamily motion cover: five armored robots power on one by one, the LitGrok robot wakes with glowing eyes and a lit frame, then LITFAMILY and KEEP THE WORK LIT. light up." /></picture></p>
2
2
 
3
3
  <h1 align="center">LitGrok</h1>
4
4
  <p align="center"><strong>Keep the work lit.</strong></p>
5
5
 
6
6
  Skills, a project rule and hooks for xAI's Grok Build that help every session plan the change, build it, check it, and leave a handoff the next session can pick up.
7
7
 
8
- **[Full README on GitHub](https://github.com/wjgoarxiv/litgrok#readme)** · [Guide](https://github.com/wjgoarxiv/litgrok/blob/main/docs/guide.md) · [All skills](https://github.com/wjgoarxiv/litgrok/blob/main/docs/skills.md) · [한국어](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md) · [Install](#install-in-30-seconds) · [Reference](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/reference.md)
8
+ **[Full README on GitHub](https://github.com/wjgoarxiv/litgrok#readme)** · [Guide](https://github.com/wjgoarxiv/litgrok/blob/main/docs/guide.md) · [All skills](https://github.com/wjgoarxiv/litgrok/blob/main/docs/skills.md) · [한국어](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md) · [Install](#install-in-30-seconds) · [Reference](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/reference.md)
9
9
 
10
10
  <p align="center">
11
- <a href="#install-in-30-seconds"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/readme/badge-version.svg" alt="1.0.20" /></a>
12
- <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
11
+ <a href="#install-in-30-seconds"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/readme/badge-version.svg" alt="1.0.21" /></a>
12
+ <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
13
13
  </p>
14
14
 
15
- <p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/reference.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/readme/lucide-book-open.svg" width="16" alt="" /> Docs</a> &nbsp; <a href="#install-in-30-seconds">Install</a> &nbsp; <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/cover-motion.webp"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/readme/lucide-play.svg" width="16" alt="" /> Cover motion</a> &nbsp; <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/readme/lucide-shield-check.svg" width="16" alt="" /> MIT</a></p>
15
+ <p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/reference.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/readme/lucide-book-open.svg" width="16" alt="" /> Docs</a> &nbsp; <a href="#install-in-30-seconds">Install</a> &nbsp; <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/cover-motion.webp"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/readme/lucide-play.svg" width="16" alt="" /> Cover motion</a> &nbsp; <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/readme/lucide-shield-check.svg" width="16" alt="" /> MIT</a></p>
16
16
 
17
17
  Long Grok Build sessions get compacted, a new session starts without what the last one knew, and "done" often means the model said so. LitGrok gives each session a routine to follow: a written plan before the first edit, checks against that plan, and a handoff file the next session can read. It ships 38 skills, 11 agents, one project rule, and eleven hook registrations. Grok Build still runs the session and chooses the model.
18
18
 
@@ -24,7 +24,7 @@ You need Node.js and Grok Build. In an interactive terminal, from the project yo
24
24
  npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
25
25
  ```
26
26
 
27
- The files land in `<project>/.grok/`. Add `--user` to install under `~/.grok/` instead, or use `--package @litfamily/litgrok@1.0.20` to pin this release. Add `--dry-run` to see every destination before anything is written.
27
+ The files land in `<project>/.grok/`. Add `--user` to install under `~/.grok/` instead, or use `--package @litfamily/litgrok@1.0.21` to pin this release. Add `--dry-run` to see every destination before anything is written.
28
28
 
29
29
  Trying a local package instead? Put its real absolute path in a variable, then run these two lines separately:
30
30
 
@@ -72,7 +72,7 @@ Beyond code, `lit-pptx` makes slide decks and `lit-docx` makes reports and Word
72
72
 
73
73
  ## What changes after install
74
74
 
75
- The installer copies the skills, agents, project rule, and hooks into `.grok/`. The eleven hook registrations in [`hooks/hooks.json`](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/hooks/hooks.json) run only in a trusted Git root, and they log the order of events in `.grok/litgrok/session-ledger/`. Everything runs inside your Grok session, and nothing runs in the background; when the session ends, the work waits for the next one.
75
+ The installer copies the skills, agents, project rule, and hooks into `.grok/`. The eleven hook registrations in [`hooks/hooks.json`](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/hooks/hooks.json) run only in a trusted Git root, and they log the order of events in `.grok/litgrok/session-ledger/`. Everything runs inside your Grok session, and nothing runs in the background; when the session ends, the work waits for the next one.
76
76
 
77
77
  If you'd like a status row showing the active LitGrok skill, the model and how much context is used, add it with `install --user --status-line`. It writes `[ui.status_line]` into `~/.grok/config.toml` and backs up an existing file first. Once a prompt starts a workflow skill, the row also shows the workflow stage, the tool running now and the last test result. Add `--notify` for Grok's terminal notification when a turn finishes.
78
78
 
@@ -109,6 +109,6 @@ The installer never runs `git init`, trusts hooks, signs in or picks a model for
109
109
 
110
110
  If LitGrok saves you some re-explaining, a [star on GitHub](https://github.com/wjgoarxiv/litgrok) helps other Grok Build users find it.
111
111
 
112
- [Reference](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/reference.md) · [Changelog](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/CHANGELOG.md) · [Privacy](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/privacy.md) · [MIT license](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/LICENSE)
112
+ [Reference](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/reference.md) · [Changelog](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/CHANGELOG.md) · [Privacy](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/privacy.md) · [MIT license](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/LICENSE)
113
113
 
114
114
  The cover is brand motion made with the LitFamily motion skill: animated artwork, with no Grok session recorded in it.
package/README_ko-KR.md CHANGED
@@ -1,18 +1,18 @@
1
- <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/cover-motion-still.webp" /><source media="(prefers-reduced-motion: no-preference)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/cover-motion.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/cover-motion.webp" width="100%" alt="LitFamily 모션 커버: 다섯 로봇 패널이 차례로 켜지고, LitGrok 로봇의 눈과 테두리가 빛난 뒤 LITFAMILY와 KEEP THE WORK LIT. 문구가 밝아지는 영상" /></picture></p>
1
+ <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/cover-motion-still.webp" /><source media="(prefers-reduced-motion: no-preference)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/cover-motion.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/cover-motion.webp" width="100%" alt="LitFamily 모션 커버: 다섯 로봇 패널이 차례로 켜지고, LitGrok 로봇의 눈과 테두리가 빛난 뒤 LITFAMILY와 KEEP THE WORK LIT. 문구가 밝아지는 영상" /></picture></p>
2
2
 
3
3
  <h1 align="center">LitGrok</h1>
4
4
  <p align="center"><strong>Keep the work lit.</strong></p>
5
5
 
6
6
  xAI Grok Build에 스킬, 프로젝트 규칙, 훅을 더해 세션마다 계획하고, 만들고, 확인하고, 다음 세션이 이어받을 인수인계 문서를 남기게 합니다.
7
7
 
8
- **[GitHub에서 README 전체 보기](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md)** · [안내서](https://github.com/wjgoarxiv/litgrok/blob/main/docs/guide_ko-KR.md) · [전체 스킬](https://github.com/wjgoarxiv/litgrok/blob/main/docs/skills_ko-KR.md) · [English](https://github.com/wjgoarxiv/litgrok#readme) · [설치](#30초-설치) · [상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/reference_ko-KR.md)
8
+ **[GitHub에서 README 전체 보기](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md)** · [안내서](https://github.com/wjgoarxiv/litgrok/blob/main/docs/guide_ko-KR.md) · [전체 스킬](https://github.com/wjgoarxiv/litgrok/blob/main/docs/skills_ko-KR.md) · [English](https://github.com/wjgoarxiv/litgrok#readme) · [설치](#30초-설치) · [상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/reference_ko-KR.md)
9
9
 
10
10
  <p align="center">
11
- <a href="#30초-설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/readme/badge-version.svg" alt="1.0.20" /></a>
12
- <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/readme/badge-license.svg" alt="MIT 라이선스" /></a>
11
+ <a href="#30초-설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/readme/badge-version.svg" alt="1.0.21" /></a>
12
+ <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/readme/badge-license.svg" alt="MIT 라이선스" /></a>
13
13
  </p>
14
14
 
15
- <p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/reference_ko-KR.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/readme/lucide-book-open.svg" width="16" alt="" /> 상세 안내</a> &nbsp; <a href="#30초-설치">설치</a> &nbsp; <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/cover-motion.webp"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/readme/lucide-play.svg" width="16" alt="" /> 커버 모션</a> &nbsp; <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/assets/readme/lucide-shield-check.svg" width="16" alt="" /> MIT</a></p>
15
+ <p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/reference_ko-KR.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/readme/lucide-book-open.svg" width="16" alt="" /> 상세 안내</a> &nbsp; <a href="#30초-설치">설치</a> &nbsp; <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/cover-motion.webp"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/readme/lucide-play.svg" width="16" alt="" /> 커버 모션</a> &nbsp; <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/assets/readme/lucide-shield-check.svg" width="16" alt="" /> MIT</a></p>
16
16
 
17
17
  Grok Build 세션이 길어지면 대화가 압축되고, 새 세션은 앞 세션이 알던 내용을 모른 채 시작하며, "다 됐다"는 말도 모델이 그렇게 말했다는 뜻일 때가 많습니다. LitGrok은 세션마다 따라갈 순서를 줍니다. 첫 수정 전에 계획을 글로 남기고, 그 계획에 비추어 확인하고, 다음 세션이 읽을 인수인계 문서를 남깁니다. 스킬 38개, 에이전트 11개, 프로젝트 규칙 하나, 훅 등록 열한 개가 들어 있고, 세션 실행과 모델 선택은 계속 Grok Build가 맡습니다.
18
18
 
@@ -24,7 +24,7 @@ Node.js와 Grok Build가 있으면 됩니다. 써 보고 싶은 프로젝트에
24
24
  npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
25
25
  ```
26
26
 
27
- 파일은 `<project>/.grok/`에 들어갑니다. `~/.grok/`에 설치하려면 `--user`를, 이 릴리스로 고정하려면 `--package @litfamily/litgrok@1.0.20`을 쓰세요. `--dry-run`을 붙이면 파일을 쓰기 전에 들어갈 경로를 모두 보여 줍니다.
27
+ 파일은 `<project>/.grok/`에 들어갑니다. `~/.grok/`에 설치하려면 `--user`를, 이 릴리스로 고정하려면 `--package @litfamily/litgrok@1.0.21`을 쓰세요. `--dry-run`을 붙이면 파일을 쓰기 전에 들어갈 경로를 모두 보여 줍니다.
28
28
 
29
29
  로컬 패키지로 써 보려면 실제 절대 경로를 변수에 넣고 두 줄을 따로 실행하세요.
30
30
 
@@ -72,7 +72,7 @@ npm exec --yes --package "$LITGROK_PACK" -- litgrok install
72
72
 
73
73
  ## 설치하면 달라지는 것
74
74
 
75
- 설치 프로그램이 스킬, 에이전트, 프로젝트 규칙, 훅을 `.grok/`에 복사합니다. [`hooks/hooks.json`](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/hooks/hooks.json)에 있는 훅 등록 열한 개는 신뢰한 Git 루트에서만 동작하고, `.grok/litgrok/session-ledger/`에 이벤트 순서를 남깁니다. 모든 작업은 Grok 세션 안에서 돌고 백그라운드 작업은 없습니다. 세션이 끝나면 다음 세션이 이어받을 때까지 그 자리에 멈춰 있습니다.
75
+ 설치 프로그램이 스킬, 에이전트, 프로젝트 규칙, 훅을 `.grok/`에 복사합니다. [`hooks/hooks.json`](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/hooks/hooks.json)에 있는 훅 등록 열한 개는 신뢰한 Git 루트에서만 동작하고, `.grok/litgrok/session-ledger/`에 이벤트 순서를 남깁니다. 모든 작업은 Grok 세션 안에서 돌고 백그라운드 작업은 없습니다. 세션이 끝나면 다음 세션이 이어받을 때까지 그 자리에 멈춰 있습니다.
76
76
 
77
77
  지금 어떤 LitGrok 스킬이 동작 중인지, 어떤 모델을 쓰는지, 컨텍스트를 얼마나 썼는지 보고 싶으면 `install --user --status-line`으로 상태 행을 켜세요. `~/.grok/config.toml`에 `[ui.status_line]`을 넣고, 파일이 이미 있으면 먼저 백업합니다. 프롬프트가 작업 흐름 스킬을 시작하면 지금 단계, 돌고 있는 도구, 마지막 테스트 결과도 함께 보입니다. 턴이 끝날 때 Grok의 터미널 알림을 받으려면 `--notify`를 붙이세요.
78
78
 
@@ -109,6 +109,6 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok uninstall --user
109
109
 
110
110
  LitGrok 덕분에 같은 설명을 덜 반복하게 됐다면, [GitHub 스타](https://github.com/wjgoarxiv/litgrok) 하나가 다른 Grok Build 사용자에게 이 프로젝트를 알리는 데 도움이 됩니다.
111
111
 
112
- [상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/reference_ko-KR.md) · [변경 이력](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/CHANGELOG.md) · [개인정보](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/docs/privacy.md) · [MIT 라이선스](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.20/LICENSE)
112
+ [상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/reference_ko-KR.md) · [변경 이력](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/CHANGELOG.md) · [개인정보](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/docs/privacy.md) · [MIT 라이선스](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.21/LICENSE)
113
113
 
114
114
  커버의 모션은 LitFamily 모션 스킬로 만든 브랜드 연출입니다. 그려서 움직인 그림이라 실제 Grok 세션을 녹화한 장면은 들어 있지 않습니다.
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="local: 1.0.20"><title>local: 1.0.20</title><g shape-rendering="crispEdges"><rect width="49" height="20" fill="#080d14"/><rect x="49" width="97" height="20" fill="#ff6337"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text x="255" y="140" textLength="290" transform="scale(.1)">local</text><text x="965" y="140" textLength="870" transform="scale(.1)" fill="#080D14">1.0.20</text></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="local: 1.0.21"><title>local: 1.0.21</title><g shape-rendering="crispEdges"><rect width="49" height="20" fill="#080d14"/><rect x="49" width="97" height="20" fill="#ff6337"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text x="255" y="140" textLength="290" transform="scale(.1)">local</text><text x="965" y="140" textLength="870" transform="scale(.1)" fill="#080D14">1.0.21</text></g></svg>
package/docs/reference.md CHANGED
@@ -77,7 +77,7 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
77
77
  Pin a version when you need a reproducible install:
78
78
 
79
79
  ```bash
80
- npm exec --yes --package @litfamily/litgrok@1.0.20 -- litgrok install
80
+ npm exec --yes --package @litfamily/litgrok@1.0.21 -- litgrok install
81
81
  ```
82
82
 
83
83
  Preview without writing files:
@@ -77,7 +77,7 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
77
77
  재현 가능한 설치는 버전을 고정합니다.
78
78
 
79
79
  ```bash
80
- npm exec --yes --package @litfamily/litgrok@1.0.20 -- litgrok install
80
+ npm exec --yes --package @litfamily/litgrok@1.0.21 -- litgrok install
81
81
  ```
82
82
 
83
83
  파일을 쓰지 않고 미리보기:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@litfamily/litgrok",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "description": "Installer for LitGrok: skills, a project rule and hooks that help xAI Grok Build sessions plan, build, check and hand off their work.",
5
5
  "keywords": [
6
6
  "grok",
package/plugin.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "litgrok",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "description": "Grok Build skills, project rules, and bounded lifecycle hooks for evidence-first lit work.",
5
5
  "author": {
6
6
  "name": "LitGrok contributors"