litclaude-ai 0.3.28 → 0.3.30

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 (54) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +40 -8
  3. package/README_ko-KR.md +41 -10
  4. package/RELEASE_CHECKLIST.md +52 -9
  5. package/bin/litclaude-ai.js +64 -5
  6. package/docs/hooks.md +23 -2
  7. package/docs/workflow-compatibility-audit.md +4 -0
  8. package/package.json +1 -1
  9. package/plugins/litclaude/.claude-plugin/plugin.json +1 -1
  10. package/plugins/litclaude/bin/litclaude-hook.js +55 -2
  11. package/plugins/litclaude/bin/litclaude-mcp.js +3 -5
  12. package/plugins/litclaude/bin/litclaude-scientific-visualization-doctor.js +135 -0
  13. package/plugins/litclaude/commands/lit-handoff.md +69 -0
  14. package/plugins/litclaude/commands/lit-scientific-visualization.md +65 -0
  15. package/plugins/litclaude/commands/litresearch.md +24 -1
  16. package/plugins/litclaude/lib/bundled-skills-integrity.mjs +105 -0
  17. package/plugins/litclaude/lib/public-source-reader/barrier-detection.mjs +35 -0
  18. package/plugins/litclaude/lib/public-source-reader/content-proof.mjs +94 -0
  19. package/plugins/litclaude/lib/public-source-reader/guard.mjs +84 -2
  20. package/plugins/litclaude/lib/public-source-reader/pinned-request.mjs +56 -0
  21. package/plugins/litclaude/lib/public-source-reader/reader.mjs +71 -132
  22. package/plugins/litclaude/lib/public-source-reader/receipts.mjs +126 -0
  23. package/plugins/litclaude/lib/public-source-reader/routes.mjs +49 -14
  24. package/plugins/litclaude/lib/public-source-reader/secret-redaction.mjs +84 -0
  25. package/plugins/litclaude/lib/public-source-reader/validator.mjs +31 -5
  26. package/plugins/litclaude/skills/lit-handoff/SKILL.md +75 -0
  27. package/plugins/litclaude/skills/lit-scientific-visualization/SKILL.md +80 -0
  28. package/plugins/litclaude/skills/litresearch/SKILL.md +87 -7
  29. package/plugins/litclaude/vendor/022_handoff/SKILL.md +199 -0
  30. package/plugins/litclaude/vendor/022_handoff/evals/evals.json +154 -0
  31. package/plugins/litclaude/vendor/022_handoff/examples/HANDOFF-example-generic-auth-refactor.md +97 -0
  32. package/plugins/litclaude/vendor/022_handoff/templates/HANDOFF.md +121 -0
  33. package/plugins/litclaude/vendor/045_scientific-visualization/SKILL.md +283 -0
  34. package/plugins/litclaude/vendor/045_scientific-visualization/assets/color_palettes.py +197 -0
  35. package/plugins/litclaude/vendor/045_scientific-visualization/assets/nature.mplstyle +75 -0
  36. package/plugins/litclaude/vendor/045_scientific-visualization/assets/presentation.mplstyle +74 -0
  37. package/plugins/litclaude/vendor/045_scientific-visualization/assets/publication.mplstyle +78 -0
  38. package/plugins/litclaude/vendor/045_scientific-visualization/evals/evals.json +158 -0
  39. package/plugins/litclaude/vendor/045_scientific-visualization/references/color_palettes.md +380 -0
  40. package/plugins/litclaude/vendor/045_scientific-visualization/references/journal_requirements.md +359 -0
  41. package/plugins/litclaude/vendor/045_scientific-visualization/references/matplotlib_examples.md +608 -0
  42. package/plugins/litclaude/vendor/045_scientific-visualization/references/mdanalysis_martini_visualization.md +85 -0
  43. package/plugins/litclaude/vendor/045_scientific-visualization/references/publication_guidelines.md +217 -0
  44. package/plugins/litclaude/vendor/045_scientific-visualization/references/seaborn_for_publications.md +293 -0
  45. package/plugins/litclaude/vendor/045_scientific-visualization/scripts/figure_export.py +238 -0
  46. package/plugins/litclaude/vendor/045_scientific-visualization/scripts/style_presets.py +467 -0
  47. package/plugins/litclaude/vendor/045_scientific-visualization/tests/test_figure_export.py +51 -0
  48. package/plugins/litclaude/vendor/045_scientific-visualization/tests/test_style_presets.py +114 -0
  49. package/plugins/litclaude/vendor/NOTICE.md +8 -0
  50. package/plugins/litclaude/vendor/licenses/022_handoff-MIT.txt +21 -0
  51. package/plugins/litclaude/vendor/licenses/045_scientific-visualization-MIT.txt +21 -0
  52. package/plugins/litclaude/vendor/provenance/022_handoff.md +16 -0
  53. package/plugins/litclaude/vendor/provenance/045_scientific-visualization.md +34 -0
  54. package/scripts/doctor.mjs +18 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.30 - 2026-07-19 — LitResearch scientific records and public-reader hardening
4
+
5
+ - Added root-owned append-only claim/evidence records, bounded expansion and
6
+ sequential fallback, DOI normalization, PDF byte proof, and separate
7
+ metadata/acquisition/conversion/review states to LitResearch.
8
+ - Hardened public reads with connection-pinned DNS validation at every redirect,
9
+ broader private-address rejection, inert-content receipts, content proof, and
10
+ deep source-secret redaction.
11
+ - Removed installed CLI and MCP environment bypasses for private destinations
12
+ and expanded invocation, package, reader, and security regression coverage.
13
+
14
+ ## 0.3.29 - 2026-07-18 — bundled handoff and scientific visualization
15
+
16
+ - Bundle the approved exact-source `022_handoff` and
17
+ `045_scientific-visualization` corpora with their licenses, provenance,
18
+ scripts, assets, and canonical-source integrity records.
19
+ - Add Claude-native command and exact-bare prompt-hook routes for `handoff` and
20
+ `lit-scientific-visualization`, including visible route-specific
21
+ `🔥 LITBURN IGNITED` banners and inert near-miss handling.
22
+ - Verify installed-package skill discovery, immutable payload checks, script and
23
+ asset path resolution, and honest read-only dependency diagnostics for the
24
+ scientific visualization workflow without silently installing Python packages.
25
+
3
26
  ## 0.3.28 - 2026-07-14 — explicit start-work activation
4
27
 
5
28
  - Require the `$start-work` shorthand and natural `lit start work` activation
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  </p>
10
10
  <p align="center">
11
11
  <img src="https://img.shields.io/badge/npm-litclaude--ai-cb3837" />
12
- <img src="https://img.shields.io/badge/version-0.3.28-2ea44f" />
12
+ <img src="https://img.shields.io/badge/version-0.3.30-2ea44f" />
13
13
  <img src="https://img.shields.io/badge/Claude%20Code-plugin-blueviolet" />
14
14
  <img src="https://img.shields.io/badge/license-MIT-blue" />
15
15
  </p>
@@ -22,10 +22,10 @@
22
22
  > `litclaude@litclaude-ai`, so normal `claude` launches can load the
23
23
  > LitClaude skills and hooks without a long `--plugin-dir` command.
24
24
 
25
- This checkout is prepared as `litclaude-ai@0.3.28` for personal install
25
+ This checkout is prepared as `litclaude-ai@0.3.30` for personal install
26
26
  convenience. The repo can remain quiet; preparing npm package metadata here does
27
27
  not imply public repo promotion, marketplace publication, or advertisement.
28
- Future package releases still require explicit user approval. The v0.3.28 release material requires explicit leading start-work invocations so diagnostic or copied mentions remain inert. The v0.3.27 release material adds a structured, animated five-stage installer with a success or failure receipt while preserving deterministic automation output. The v0.3.26 release material adds adaptive objective-achievable planning, draft-plan review, and orchestration readiness hardening. The v0.3.25 release material aligns portable details, public-read, litgoal status JSON, and evidence wording. The v0.3.24 release material aligns auxiliary skill inventories and advisory probes. The v0.3.23
28
+ Future package releases still require explicit user approval. The v0.3.30 release material strengthens LitResearch with root-owned scientific evidence records, DOI/PDF lifecycle receipts, bounded route coverage, and a connection-pinned public-source reader with inert-content and secret-redaction guarantees. The v0.3.29 release material bundles exact-source `lit-handoff` and `lit-scientific-visualization` skills with Claude-native commands, exact-bare hook invocation, visible LITBURN banners, installed-payload integrity checks, and read-only scientific dependency diagnostics. The v0.3.28 release material requires explicit leading start-work invocations so diagnostic or copied mentions remain inert. The v0.3.27 release material adds a structured, animated five-stage installer with a success or failure receipt while preserving deterministic automation output. The v0.3.26 release material adds adaptive objective-achievable planning, draft-plan review, and orchestration readiness hardening. The v0.3.25 release material aligns portable details, public-read, litgoal status JSON, and evidence wording. The v0.3.24 release material aligns auxiliary skill inventories and advisory probes. The v0.3.23
29
29
  release materials inject the bundled skill bodies for bare `hyperplan`,
30
30
  `litresearch`, `lit research`, `init-deep`, and explicit `$start-work` prompt-hook routes while
31
31
  preserving the v0.3.19 adversarial planning skill, the v0.3.18 read-only `lit-recap` session recap surface, the v0.3.17 separate-worker native `/goal` launcher, the v0.3.16
@@ -78,7 +78,13 @@ activation/read-only polish, and installer permission-preference discipline.
78
78
  `korean-ai-slop-remover`, `review-work`, `frontend-ui-ux`,
79
79
  `git-master`, `comment-checker`, `rules`, `lsp`, `lsp-setup`, `litgoal`,
80
80
  `deep-interview`, `hyperplan`, `init-deep`, `litresearch`,
81
- `lit-plan`, `lit-recap`, `lit-loop`, `start-work`, and `visual-qa`
81
+ `lit-plan`, `lit-recap`, `lit-loop`, `start-work`, `lit-handoff`,
82
+ `lit-scientific-visualization`, and `visual-qa`
83
+ - **Bundled owner-authorized skills** - `lit-handoff` reads the complete immutable
84
+ four-file handoff source and supports the exact bare `handoff` prompt;
85
+ `lit-scientific-visualization` reads the complete immutable 16-file authored
86
+ source, resolves packaged scripts and assets, and reports missing Python or
87
+ matplotlib as `DEGRADED` without silently installing dependencies
82
88
  - **Auxiliary Skill-discovery entries** - `frontend-ui-ux`, `git-master`,
83
89
  `lsp-setup`, and `visual-qa` are shipped skill ids discoverable through
84
90
  Claude Code's native Skill discovery; they intentionally do not add extra
@@ -125,7 +131,7 @@ directory, the normal install command works:
125
131
 
126
132
  ```bash
127
133
  cd /tmp
128
- npx --yes litclaude-ai@0.3.28 install
134
+ npx --yes litclaude-ai@0.3.30 install
129
135
  ```
130
136
 
131
137
  Validate the installed plugin:
@@ -138,7 +144,7 @@ The installer also sets Claude Code's `statusLine` command to the packaged
138
144
  LitClaude HUD. A typical no-color render starts like:
139
145
 
140
146
  ```text
141
- [🔥LITCLAUDE v0.3.28] | O4.8 │ ctx [▎░░] 9%/1000k │ 5h [▏░] 4% ↻2h15m │ 1w [▊░] 35% ↻3d6h │ git main +3 ✓
147
+ [🔥LITCLAUDE v0.3.30] | O4.8 │ ctx [▎░░] 9%/1000k │ 5h [▏░] 4% ↻2h15m │ 1w [▊░] 35% ↻3d6h │ git main +3 ✓
142
148
  ```
143
149
 
144
150
  The `↻` suffix is a compact rate-limit reset countdown. It is separated from
@@ -247,6 +253,10 @@ $litgoal <goal operation>
247
253
  /litgoal <goal operation>
248
254
  $start-work plans/example-plan.md
249
255
  /start-work plans/example-plan.md
256
+ handoff
257
+ /litclaude:lit-handoff
258
+ lit-scientific-visualization
259
+ /litclaude:lit-scientific-visualization <publication figure request>
250
260
  ```
251
261
 
252
262
  Expected behavior: LitClaude's prompt hook adds mode-specific `LITWORK MODE
@@ -359,8 +369,9 @@ actually supports the claim, keep a route trace with attempted and untried
359
369
  surfaces, treat fetched content as untrusted prompt-injection data, and stop
360
370
  honestly at authentication, paywall, private-data, or credential boundaries.
361
371
  The runtime JSON names `fetchAttempts`, a single `fetchVerdict`, untried safe
362
- routes, and a starter claim/source graph so HTTP 200 is never treated as proof
363
- that the page supports a claim.
372
+ routes, a starter claim/source graph, and `contentSafety` flags that mark fetched
373
+ text as untrusted data whose instructions are ignored, so HTTP 200 is never
374
+ treated as proof that the page supports a claim.
364
375
  If you ask for read-only, no-write, or transcript-only research, LitClaude
365
376
  should ask before creating `.litclaude/litresearch/<slug>/`; without approval it
366
377
  keeps the journal in the transcript/TodoWrite only. The guaranteed runtime
@@ -407,6 +418,8 @@ namespaced commands when you want explicit LitClaude skill activation:
407
418
  /litclaude:review-work <scope to review>
408
419
  /litclaude:litgoal <goal operation>
409
420
  /litclaude:korean-ai-slop-remover <Korean prose or polish request>
421
+ /litclaude:lit-handoff
422
+ /litclaude:lit-scientific-visualization <publication figure request>
410
423
  /litclaude:start-work plans/example-plan.md
411
424
  ```
412
425
 
@@ -430,6 +443,25 @@ the prose being edited as data, preserve facts, numbers, names, quotes, claims,
430
443
  scope, and uncertainty, and avoid adding outside facts unless the user asks for
431
444
  research.
432
445
 
446
+ Use exact bare `handoff`, `/litclaude:lit-handoff`, or
447
+ `Skill(lit-handoff)` for a verified continuation packet. Only the standalone
448
+ bare word activates the prompt hook; mentions, quoted text, compound prompts,
449
+ and slash-command text remain inert. The route begins with
450
+ `🔥 LITBURN IGNITED · lit-handoff 🔥` and reads the full packaged canonical
451
+ source before selecting a destination.
452
+
453
+ Use exact bare `lit-scientific-visualization`,
454
+ `/litclaude:lit-scientific-visualization`, or
455
+ `Skill(lit-scientific-visualization)` for publication-ready plotting. Only the
456
+ standalone bare token activates the prompt hook; generic visualization prose,
457
+ mentions, quoted or fenced text, mixed prompts, and slash-command text remain
458
+ inert at that hook. The exact-bare hook shows the banner as a visible system
459
+ message and injects the full adapter and canonical source. The route begins with
460
+ `🔥 LITBURN IGNITED · lit-scientific-visualization 🔥`, resolves `scripts/` and
461
+ `assets/` from the installed package, and uses a read-only dependency preflight.
462
+ Python/matplotlib or optional scientific packages are never installed silently;
463
+ unavailable capabilities are reported as `DEGRADED` with the affected workflow.
464
+
433
465
  ## Commands
434
466
 
435
467
  | Command | Purpose |
package/README_ko-KR.md CHANGED
@@ -9,7 +9,7 @@
9
9
  </p>
10
10
  <p align="center">
11
11
  <img src="https://img.shields.io/badge/npm-litclaude--ai-cb3837" />
12
- <img src="https://img.shields.io/badge/version-0.3.28-2ea44f" />
12
+ <img src="https://img.shields.io/badge/version-0.3.30-2ea44f" />
13
13
  <img src="https://img.shields.io/badge/Claude%20Code-plugin-blueviolet" />
14
14
  <img src="https://img.shields.io/badge/license-MIT-blue" />
15
15
  </p>
@@ -26,11 +26,11 @@
26
26
  > 설치되므로, 매번 긴 `--plugin-dir` 없이 일반 `claude` 실행에서
27
27
  > LitClaude skill과 hook을 불러올 수 있습니다.
28
28
 
29
- 현재 checkout은 `litclaude-ai@0.3.28` 배포 준비용으로 정리되어 있습니다. 목적은
29
+ 현재 checkout은 `litclaude-ai@0.3.30` 배포 준비용으로 정리되어 있습니다. 목적은
30
30
  다른 PC에서도 빠르게 설치하기 위한 개인용 package metadata를 갖추는 것입니다.
31
31
  npm package metadata를 준비했다고 해서 홍보, 공개 저장소 운영, Claude
32
32
  marketplace 등록을 의미하지는 않습니다. 새 버전 배포는 항상 별도의 명시적
33
- 승인 후에 진행합니다. v0.3.28 release material은 start-work 호출을 prompt 선두의 명시적 invocation으로 제한해 진단문이나 복사된 언급을 비활성 상태로 유지합니다. v0.3.27 release material은 success/failure receipt와 deterministic automation output을 갖춘 5-stage animated installer를 추가합니다. v0.3.26 release material은 adaptive objective-achievable planning, draft-plan review, orchestration readiness hardening을 추가합니다. v0.3.25 release material은 portable details, public-read, litgoal status JSON, evidence wording을 정렬합니다. v0.3.24 release material은 auxiliary skill inventory와 advisory probe를 정렬합니다. v0.3.23 release material은 bare `hyperplan`,
33
+ 승인 후에 진행합니다. v0.3.30 release material은 root-owned scientific evidence record, DOI/PDF lifecycle receipt, bounded route coverage, connection-pinned public-source reader, inert-content 및 secret-redaction 보장을 포함하는 LitResearch 강화판입니다. v0.3.29 release material은 exact-source `lit-handoff`와 `lit-scientific-visualization` skill, Claude-native command, exact-bare hook invocation, visible LITBURN banner, installed-payload integrity check, read-only scientific dependency diagnostic을 함께 포함합니다. v0.3.28 release material은 start-work 호출을 prompt 선두의 명시적 invocation으로 제한해 진단문이나 복사된 언급을 비활성 상태로 유지합니다. v0.3.27 release material은 success/failure receipt와 deterministic automation output을 갖춘 5-stage animated installer를 추가합니다. v0.3.26 release material은 adaptive objective-achievable planning, draft-plan review, orchestration readiness hardening을 추가합니다. v0.3.25 release material은 portable details, public-read, litgoal status JSON, evidence wording을 정렬합니다. v0.3.24 release material은 auxiliary skill inventory와 advisory probe를 정렬합니다. v0.3.23 release material은 bare `hyperplan`,
34
34
  `litresearch`, `lit research`, `init-deep`, explicit `$start-work` prompt-hook route에
35
35
  bundled skill body를 주입하면서, v0.3.19 adversarial planning
36
36
  skill, v0.3.18 read-only `lit-recap` session recap surface, v0.3.17 별도 worker 기반 native `/goal`
@@ -82,7 +82,12 @@ litresearch activation/read-only polish를 유지합니다.
82
82
  `korean-ai-slop-remover`, `review-work`, `frontend-ui-ux`,
83
83
  `git-master`, `comment-checker`, `rules`, `lsp`, `lsp-setup`, `litgoal`,
84
84
  `deep-interview`, `hyperplan`, `init-deep`, `litresearch`,
85
- `lit-plan`, `lit-recap`, `lit-loop`, `start-work`, `visual-qa`
85
+ `lit-plan`, `lit-recap`, `lit-loop`, `start-work`, `lit-handoff`,
86
+ `lit-scientific-visualization`, `visual-qa`
87
+ - **원본 보존 bundled skills** - `lit-handoff`는 승인된 4개 handoff 원본
88
+ 파일을, `lit-scientific-visualization`은 승인된 authored 원본 16개를
89
+ byte-identical하게 포함합니다. Python 또는 matplotlib이 없으면 자동
90
+ 설치하지 않고 해당 capability를 `DEGRADED`로 보고합니다.
86
91
  - **Auxiliary Skill-discovery entries** - `frontend-ui-ux`, `git-master`,
87
92
  `lsp-setup`, `visual-qa`는 Claude Code native Skill discovery로 찾는
88
93
  shipped skill id입니다. 별도의 slash route나 dollar prompt route를 추가하지
@@ -126,7 +131,7 @@ checkout을 먼저 해석해서 `sh: litclaude-ai: command not found`로 실패
126
131
 
127
132
  ```bash
128
133
  cd /tmp
129
- npx --yes litclaude-ai@0.3.28 install
134
+ npx --yes litclaude-ai@0.3.30 install
130
135
  ```
131
136
 
132
137
  설치 상태를 확인합니다.
@@ -139,7 +144,7 @@ installer는 Claude Code의 `statusLine` command도 packaged LitClaude HUD로
139
144
  설정합니다. 색상을 제거한 예시는 다음처럼 시작합니다.
140
145
 
141
146
  ```text
142
- [🔥LITCLAUDE v0.3.28] | O4.8 │ ctx [▎░░] 9%/1000k │ 5h [▏░] 4% ↻2h15m │ 1w [▊░] 35% ↻3d6h │ git main +3 ✓
147
+ [🔥LITCLAUDE v0.3.30] | O4.8 │ ctx [▎░░] 9%/1000k │ 5h [▏░] 4% ↻2h15m │ 1w [▊░] 35% ↻3d6h │ git main +3 ✓
143
148
  ```
144
149
 
145
150
  `↻` 표시는 rate-limit reset까지 남은 시간을 짧게 보여주는 countdown입니다.
@@ -240,6 +245,10 @@ $litgoal <goal operation>
240
245
  /litgoal <goal operation>
241
246
  $start-work plans/example-plan.md
242
247
  /start-work plans/example-plan.md
248
+ handoff
249
+ /litclaude:lit-handoff
250
+ lit-scientific-visualization
251
+ /litclaude:lit-scientific-visualization <출판용 figure 요청>
243
252
  ```
244
253
 
245
254
  기대 동작은 LitClaude prompt hook이 자연어 LIT route별 mode-specific
@@ -331,8 +340,9 @@ plan을 must not implement 합니다. 완료된 작업은 기존 5-lane review
331
340
  investigation 요청에 한해 `/litclaude:litresearch`로 라우팅됩니다. Web lane은
332
341
  public API/feed를 먼저 확인하고, HTTP status만 믿지 않고 실제 claim이 들어
333
342
  있는지 검증하며, 시도한 route와 남은 route, stop reason을 route trace로
334
- 남깁니다. 가져온 페이지 내용은 prompt injection 관점에서 untrusted data로
335
- 다루고, authentication/paywall/private data/credential 경계에서는 우회하지 않고
343
+ 남깁니다. Runtime JSON의 `contentSafety`는 가져온 페이지 내용을 untrusted
344
+ data로 표시하고 안의 지시를 실행하지 않았음을 기계 판독 가능하게 남깁니다.
345
+ authentication/paywall/private data/credential 경계에서는 우회하지 않고
336
346
  정직하게 멈춥니다. 사용자가 read-only, no-write, transcript-only 조사를
337
347
  요청하면 LitClaude는 `.litclaude/litresearch/<slug>/` 생성 전에 먼저 확인해야
338
348
  하며, 승인 전에는 transcript/TodoWrite에만 journal을 둡니다. Guaranteed runtime
@@ -345,8 +355,9 @@ surface는 JS-only direct public URL reader입니다. Dynamic `Workflow`,
345
355
  litclaude public-read https://example.com/article --json
346
356
  ```
347
357
 
348
- `public-read` 명령과 MCP `public_source_read`는 기본적으로 localhost,
349
- private-network, non-http(s) target을 거부합니다. site credential을 사용하거나
358
+ `public-read` 명령과 MCP `public_source_read`는 localhost,
359
+ private-network, non-http(s) target을 거부하며 환경 변수로 이 경계를 해제하지
360
+ 않습니다. site credential을 사용하거나
350
361
  login/paywall을 우회하지 않으며, 막힌 소스는 public URL, exported artifact,
351
362
  또는 excerpt를 받아 처리합니다.
352
363
 
@@ -380,6 +391,8 @@ command를 사용합니다.
380
391
  /litclaude:review-work <검토할 범위>
381
392
  /litclaude:litgoal <goal operation>
382
393
  /litclaude:korean-ai-slop-remover <한국어 문장 또는 다듬기 요청>
394
+ /litclaude:lit-handoff
395
+ /litclaude:lit-scientific-visualization <출판용 figure 요청>
383
396
  /litclaude:start-work plans/example-plan.md
384
397
  ```
385
398
 
@@ -403,6 +416,24 @@ mode에서 바로 다듬고, 길거나 민감하거나 review/redo/fidelity 확
403
416
  범위, 불확실성을 보존하며, 사용자가 research를 요청하지 않으면 외부 사실을
404
417
  추가하지 않습니다.
405
418
 
419
+ 정확히 `handoff` 한 단어만 입력하거나 `/litclaude:lit-handoff`,
420
+ `Skill(lit-handoff)`를 사용하면 검증된 continuation packet 흐름이
421
+ 시작됩니다. 언급, 인용, compound prompt, slash-command 문자열은 hook을
422
+ 활성화하지 않습니다. 첫 줄은 `🔥 LITBURN IGNITED · lit-handoff 🔥`이고,
423
+ 패키지에 포함된 원본을 전부 읽은 뒤 목적지를 결정합니다.
424
+
425
+ 출판용 figure에는 정확한 bare `lit-scientific-visualization`,
426
+ `/litclaude:lit-scientific-visualization`, 또는
427
+ `Skill(lit-scientific-visualization)`을 사용합니다. 바깥 공백을 제외한 전체 prompt가
428
+ 이 bare token과 일치할 때만 prompt hook이 활성화됩니다. 일반적인 visualize,
429
+ plot, chart 표현, 언급, 인용·fence, mixed prompt, slash-command 문자열은
430
+ 비활성 상태를 유지합니다. exact-bare hook은 배너를 visible system message로 표시하고
431
+ 전체 adapter와 canonical source를 주입합니다. 첫 줄은
432
+ `🔥 LITBURN IGNITED · lit-scientific-visualization 🔥`이며 설치된 패키지의
433
+ `scripts/`와 `assets/`를 사용합니다. Python, matplotlib, 선택 scientific
434
+ package는 몰래 설치하지 않고, 없으면 영향받는 workflow를 `DEGRADED`로
435
+ 보고합니다.
436
+
406
437
  ## 명령어
407
438
 
408
439
  | 명령어 | 용도 |
@@ -1,7 +1,13 @@
1
1
  # LitClaude Release Checklist
2
2
 
3
- Status: `litclaude-ai@0.3.28` is the current release candidate — explicit
4
- leading start-work activation guards plus a structured five-stage interactive
3
+ Status: `litclaude-ai@0.3.30` is the current release candidate — root-owned
4
+ scientific evidence records, DOI/PDF lifecycle receipts, bounded route coverage,
5
+ connection-pinned public-source reads, inert-content receipts, and deep secret
6
+ redaction, plus bundled
7
+ exact-source `lit-handoff` and `lit-scientific-visualization` skills with
8
+ Claude-native command routes, exact-bare hook invocation, visible LITBURN
9
+ banners, payload integrity checks, and read-only scientific dependency
10
+ diagnostics, plus explicit leading start-work activation guards and a structured five-stage interactive
5
11
  installer with success/failure receipts and adaptive
6
12
  planning, draft-plan review, and orchestration-safety release on top of the portable
7
13
  details, public-read, litgoal-status, and evidence-wording release and the auxiliary
@@ -17,9 +23,9 @@ side-effect-free, the launcher starts only a separate Claude Code
17
23
  print/background worker, and the release preserves the Korean polishing
18
24
  command, strict multi-agent review pipeline, fidelity guardrails, package
19
25
  hygiene checks, native route gates, and safe start-work handoff behavior.
20
- `package.json` is aligned to `0.3.28`,
21
- `plugins/litclaude/.claude-plugin/plugin.json` is aligned to `0.3.28`, and the
22
- plugin-local MCP server reports `0.3.28`.
26
+ `package.json` is aligned to `0.3.30`,
27
+ `plugins/litclaude/.claude-plugin/plugin.json` is aligned to `0.3.30`, and the
28
+ plugin-local MCP server reports `0.3.30`.
23
29
 
24
30
  This release carries the v0.2.2 Dynamic workflow hardening surfaces:
25
31
  `/dynamic-workflow`, `workflow-check --json`, native `/goal` fallback guidance,
@@ -63,19 +69,56 @@ Use this track when testing from the current checkout:
63
69
 
64
70
  No npm publication is required for this track.
65
71
 
72
+ ## v0.3.30 LitResearch and Public Reader Gates
73
+
74
+ Before requesting publication approval, confirm the installed LitResearch body
75
+ keeps the journal root-owned, preserves stable claim and scientific lifecycle
76
+ receipts, distinguishes access failure from route exhaustion, and documents the
77
+ deliberate non-port boundary. Confirm the public-source reader pins every
78
+ validated DNS answer and redirect connection, rejects private and mapped
79
+ addresses, treats fetched content as inert untrusted data, and redacts source URL
80
+ secrets from every receipt and extracted metadata surface.
81
+
82
+ ## v0.3.29 Bundled Skill Gates
83
+
84
+ Before requesting publication approval, confirm these artifacts from the current
85
+ checkout and from an isolated install of the packed tarball:
86
+
87
+ - `lit-handoff` ships the approved exact four-file canonical corpus plus license
88
+ and provenance metadata, and exact bare `handoff` shows
89
+ `🔥 LITBURN IGNITED · lit-handoff 🔥` while quoted, fenced, mixed, slash, and
90
+ explanatory near misses remain inert.
91
+ - `lit-scientific-visualization` ships the approved exact 16-file canonical
92
+ corpus plus license and provenance metadata, and exact bare
93
+ `lit-scientific-visualization` shows
94
+ `🔥 LITBURN IGNITED · lit-scientific-visualization 🔥` while quoted, fenced,
95
+ mixed, slash, generic-visualization, and explanatory near misses remain inert.
96
+ - The scientific adapter reads the full canonical source, resolves packaged
97
+ `scripts/` and `assets/`, and exposes the shipped style presets, figure export
98
+ helpers, and color palettes from the installed package rather than checkout-only
99
+ paths.
100
+ - Installed-payload integrity checks compare the immutable source records and
101
+ fail closed on missing or changed bundled files.
102
+ - `litclaude-scientific-visualization-doctor.js --json` performs read-only
103
+ dependency checks, never installs Python packages, and reports unsupported
104
+ optional workflows as `DEGRADED` rather than claiming availability.
105
+ - `npm pack --dry-run --json` and an isolated consumer install include both
106
+ command routes, both adapted skills, both canonical-source trees, provenance,
107
+ licenses, scripts, assets, and the scientific dependency doctor.
108
+
66
109
  ## v0.2.2 Dynamic Workflow Hardening Gates
67
110
 
68
111
  Before requesting publication approval, confirm these artifacts from the current
69
112
  checkout:
70
113
 
71
- - `package.json` version is `0.3.28`.
72
- - `plugins/litclaude/.claude-plugin/plugin.json` version is `0.3.28`.
73
- - `plugins/litclaude/bin/litclaude-mcp.js` reports server version `0.3.28`.
114
+ - `package.json` version is `0.3.30`.
115
+ - `plugins/litclaude/.claude-plugin/plugin.json` version is `0.3.30`.
116
+ - `plugins/litclaude/bin/litclaude-mcp.js` reports server version `0.3.30`.
74
117
  - Prompt-hook tests cover bundled `SKILL.md` body injection for bare `hyperplan`, `litresearch`, `lit research`, `init-deep`, and explicit leading `$start-work`; diagnostic/copy mentions stay inert while leading natural-language `lit start work` stays BLOCKED.
75
118
  - `lit search` and `lit query` route to `/litclaude:litresearch` without activating on slash mentions, code spans, or non-lit prompts.
76
119
  - Litresearch web lanes require public API/feed preference, validator-first checks, route traces, prompt-injection quarantine, and honest auth/paywall/private-data stop reasons.
77
120
  - `node bin/litclaude-ai.js public-read <public-url> --json` exposes the guarded JS runtime reader.
78
- - MCP `tools/list` exposes `public_source_read`, and `tools/call` returns JSON content with `isError` set on safety stops.
121
+ - MCP `tools/list` exposes `public_source_read`, and `tools/call` returns JSON content with `isError` set on safety stops plus machine-readable `contentSafety` flags.
79
122
  - `plugins/litclaude/commands/dynamic-workflow.md` documents subagent delegation.
80
123
  - `node bin/litclaude-ai.js workflow-check --json` reports `status: pass`.
81
124
  - `node bin/litclaude-ai.js workflow-check --json` reports
@@ -17,6 +17,7 @@ import { createInterface } from "node:readline/promises";
17
17
  import { fileURLToPath } from "node:url";
18
18
  import { HUD_ACCENT_THEMES, normalizeHudAccent, themeForAccent } from "../plugins/litclaude/lib/hud-accent-palette.mjs";
19
19
  import { readPublicSource } from "../plugins/litclaude/lib/public-source-reader/reader.mjs";
20
+ import { verifyBundledSkillsIntegrity } from "../plugins/litclaude/lib/bundled-skills-integrity.mjs";
20
21
  import { runStartWorkContinuationCli } from "../plugins/litclaude/lib/start-work-continuation.mjs";
21
22
  import { runLitgoalCli } from "../plugins/litclaude/lib/litgoal/cli.mjs";
22
23
  import { runWorkflowCheckCli } from "../plugins/litclaude/lib/workflow-check.mjs";
@@ -563,6 +564,17 @@ const escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
563
564
 
564
565
  const assertCurrentPluginDetails = (detailsOutput) => {
565
566
  const missing = [];
567
+ const inventorySections = new Map();
568
+ let currentInventory;
569
+ for (const rawLine of detailsOutput.replace(/\u001b\[[0-?]*[ -/]*[@-~]/gu, "").split("\n")) {
570
+ const header = rawLine.trim().match(/^([A-Za-z][A-Za-z -]+)\s*\(\d+\)/u);
571
+ if (header) currentInventory = header[1].trim().toLowerCase();
572
+ if (currentInventory) {
573
+ inventorySections.set(currentInventory, `${inventorySections.get(currentInventory) ?? ""}\n${rawLine}`);
574
+ }
575
+ }
576
+ const skillsInventory = inventorySections.get("skills") ?? "";
577
+
566
578
  if (!new RegExp(`\\b${escapeRegex(version)}\\b`, "u").test(detailsOutput)) {
567
579
  missing.push(`expected version ${version}`);
568
580
  }
@@ -572,9 +584,12 @@ const assertCurrentPluginDetails = (detailsOutput) => {
572
584
  missing.push("expected nonzero Agents inventory with prometheus-planner");
573
585
  }
574
586
 
575
- if (!/\blit-loop\b/u.test(detailsOutput) || !/\blit-plan\b/u.test(detailsOutput)) {
587
+ if (!/\blit-loop\b/u.test(skillsInventory) || !/\blit-plan\b/u.test(skillsInventory)) {
576
588
  missing.push("expected lit-loop and lit-plan skills");
577
589
  }
590
+ if (!/\blit-handoff\b/u.test(skillsInventory) || !/\blit-scientific-visualization\b/u.test(skillsInventory)) {
591
+ missing.push("expected lit-handoff and lit-scientific-visualization skills");
592
+ }
578
593
 
579
594
  if (missing.length > 0) {
580
595
  fail(`Claude plugin details did not show current LitClaude agent inventory: ${missing.join("; ")}. Re-run litclaude install in the intended CLAUDE_CONFIG_DIR.`);
@@ -619,11 +634,27 @@ const resetCurrentPointer = (home, target) => {
619
634
  };
620
635
 
621
636
  const verifyInstalledPayload = ({ home, litClaudeHome, targetPlugin }) => {
622
- for (const relativePath of [".claude-plugin/plugin.json", "hooks/hooks.json", "bin/litclaude-hook.js"]) {
637
+ for (const relativePath of [
638
+ ".claude-plugin/plugin.json",
639
+ "hooks/hooks.json",
640
+ "bin/litclaude-hook.js",
641
+ "bin/litclaude-scientific-visualization-doctor.js",
642
+ "skills/lit-handoff/SKILL.md",
643
+ "commands/lit-handoff.md",
644
+ "vendor/022_handoff/SKILL.md",
645
+ "skills/lit-scientific-visualization/SKILL.md",
646
+ "commands/lit-scientific-visualization.md",
647
+ "vendor/045_scientific-visualization/SKILL.md",
648
+ "vendor/045_scientific-visualization/scripts/style_presets.py",
649
+ ]) {
623
650
  if (!existsSync(join(targetPlugin, relativePath))) {
624
651
  throw new Error(`installed plugin is missing ${relativePath}`);
625
652
  }
626
653
  }
654
+ const integrity = verifyBundledSkillsIntegrity(targetPlugin);
655
+ if (integrity.status !== "PASS") {
656
+ throw new Error(`installed bundled-skill integrity verification failed: ${JSON.stringify(integrity)}`);
657
+ }
627
658
  if (!readInstalledPlugins(home).plugins[pluginKey]?.length) {
628
659
  throw new Error(`Claude registry is missing ${pluginKey}`);
629
660
  }
@@ -747,6 +778,7 @@ const doctor = ({ dryRun }) => {
747
778
  process.stdout.write(`Would run: claude plugin validate ${pluginPath}\n`);
748
779
  process.stdout.write(`Would check Claude plugin registry: ${pluginKey}\n`);
749
780
  process.stdout.write(`Would check Claude statusLine HUD: ${hudCommandForPlugin(pluginPath)}\n`);
781
+ process.stdout.write(`Would run: node ${join(pluginPath, "bin", "litclaude-scientific-visualization-doctor.js")}\n`);
750
782
  return;
751
783
  }
752
784
 
@@ -763,6 +795,23 @@ const doctor = ({ dryRun }) => {
763
795
  "bin/litclaude-mcp.js",
764
796
  "skills/lit-loop/SKILL.md",
765
797
  "skills/lit-plan/SKILL.md",
798
+ "skills/lit-handoff/SKILL.md",
799
+ "commands/lit-handoff.md",
800
+ "vendor/022_handoff/SKILL.md",
801
+ "vendor/022_handoff/evals/evals.json",
802
+ "vendor/022_handoff/examples/HANDOFF-example-generic-auth-refactor.md",
803
+ "vendor/022_handoff/templates/HANDOFF.md",
804
+ "skills/lit-scientific-visualization/SKILL.md",
805
+ "commands/lit-scientific-visualization.md",
806
+ "bin/litclaude-scientific-visualization-doctor.js",
807
+ "vendor/045_scientific-visualization/SKILL.md",
808
+ "vendor/045_scientific-visualization/scripts/style_presets.py",
809
+ "vendor/045_scientific-visualization/scripts/figure_export.py",
810
+ "vendor/045_scientific-visualization/assets/color_palettes.py",
811
+ "vendor/provenance/022_handoff.md",
812
+ "vendor/provenance/045_scientific-visualization.md",
813
+ "vendor/licenses/022_handoff-MIT.txt",
814
+ "vendor/licenses/045_scientific-visualization-MIT.txt",
766
815
  ];
767
816
 
768
817
  for (const file of requiredFiles) {
@@ -772,6 +821,18 @@ const doctor = ({ dryRun }) => {
772
821
 
773
822
  printLspDiagnostics(pluginPath, registry);
774
823
 
824
+ const scientificVisualizationDoctor = spawnSync(
825
+ process.execPath,
826
+ [join(pluginPath, "bin", "litclaude-scientific-visualization-doctor.js")],
827
+ { encoding: "utf8" },
828
+ );
829
+ if (scientificVisualizationDoctor.stdout) process.stdout.write(scientificVisualizationDoctor.stdout);
830
+ if (scientificVisualizationDoctor.stderr) process.stderr.write(scientificVisualizationDoctor.stderr);
831
+ if (scientificVisualizationDoctor.status !== 0) {
832
+ fail("LitClaude bundled-skills payload is incomplete or hash-invalid. Run `litclaude install` again.");
833
+ }
834
+ process.stdout.write("BUNDLED_SKILLS_PAYLOAD_PASS\n");
835
+
775
836
  const claude = spawnSync("claude", ["--version"], { encoding: "utf8" });
776
837
  if (claude.error) {
777
838
  process.stdout.write("CLAUDE_WARNING: claude executable not found in PATH\n");
@@ -823,9 +884,7 @@ const runPublicRead = async ({ rest }) => {
823
884
  const input = filtered.join(" ").trim();
824
885
  if (!input) fail("public-read requires a URL or query", 64);
825
886
 
826
- const result = await readPublicSource(input, {
827
- allowPrivateHosts: process.env.LITCLAUDE_PUBLIC_READ_ALLOW_PRIVATE === "1",
828
- });
887
+ const result = await readPublicSource(input);
829
888
 
830
889
  if (json) {
831
890
  process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
package/docs/hooks.md CHANGED
@@ -111,6 +111,8 @@ $dynamic-workflow
111
111
  $review-work
112
112
  $litgoal
113
113
  $start-work
114
+ handoff
115
+ lit-scientific-visualization
114
116
  ```
115
117
 
116
118
  When a LIT trigger is present, the hook returns additional context containing
@@ -125,6 +127,24 @@ switch Claude Code agents. The `$start-work` shorthand and natural start-work
125
127
  phrases activate only when they lead the prompt; diagnostic prose and copied or
126
128
  blockquoted mentions remain inert.
127
129
 
130
+ `handoff` is a separate exact-bare route: only the complete prompt `handoff`
131
+ after outer whitespace activates `Skill(lit-handoff)` and injects the complete
132
+ canonical bundled source. It shows
133
+ `🔥 LITBURN IGNITED · lit-handoff 🔥`. Explanatory mentions, quoted or fenced
134
+ text, compound prompts, `/litclaude:lit-handoff`, and secret-bearing multiline
135
+ content do not activate the hook. The slash command remains a native Claude
136
+ Code command surface.
137
+
138
+ Scientific visualization has one exact-bare UserPromptSubmit route: only the
139
+ complete prompt `lit-scientific-visualization` after outer whitespace activates
140
+ `Skill(lit-scientific-visualization)`, injects the full adapter and canonical
141
+ source, and shows the exact
142
+ `🔥 LITBURN IGNITED · lit-scientific-visualization 🔥` system banner.
143
+ Generic visualization, plot, chart, figure, and scientific visualization prose,
144
+ mentions, quoted or fenced text, mixed prompts, near misses, and
145
+ `/litclaude:lit-scientific-visualization` text do not activate the prompt hook.
146
+ The slash command remains a native Claude Code command surface.
147
+
128
148
  LitClaude follows the LitClaude goal pattern as an honest native-binding attempt,
129
149
  not as slash-command injection. If Claude Code exposes native goal tools, the
130
150
  guidance tells Claude to inspect `get_goal`, call `create_goal` only when no
@@ -225,8 +245,9 @@ no-write, or transcript-only research, ask before creating
225
245
  `.litclaude/litresearch/<slug>/` and otherwise keep the journal in the
226
246
  transcript/TodoWrite. The guaranteed runtime surface is direct public URL reads
227
247
  through `public_source_read` or `litclaude public-read`; its JSON includes
228
- `fetchAttempts`, `fetchVerdict`, untried safe routes, and a starter claim graph
229
- so HTTP 200 is not treated as success without content validation. Dynamic
248
+ `fetchAttempts`, `fetchVerdict`, untried safe routes, a starter claim graph, and
249
+ `contentSafety` flags declaring fetched text untrusted and its instructions
250
+ ignored, so HTTP 200 is not treated as success without content validation. Dynamic
230
251
  `Workflow`, `/deep-research`, browsing, and namespaced subagents are
231
252
  host-dependent and need fallbacks.
232
253
 
@@ -16,6 +16,8 @@ make the missing LitClaude target obvious.
16
16
  | litgoal state/runtime | `commands/litgoal.md`, `skills/litgoal`, `plugins/litclaude/lib/litgoal/`, `.litclaude/litgoal/`, `bin/litclaude-ai.js litgoal ...` commands | Implemented | `litgoal` now has durable state, ledger, checkpoint, steering, quality gate, and review blocker commands through `litclaude litgoal create-goals`, `record-evidence`, `checkpoint`, `steer`, and `record-review-blockers`. |
17
17
  | LIT/start-work discipline | `commands/lit-loop.md`, `commands/lit-plan.md`, `commands/start-work.md`, `skills/lit-loop`, `skills/lit-plan`, `skills/start-work` | Implemented | Existing LIT/start-work surfaces require plan reading, ledger updates, publish boundary checks, verification, manual QA artifacts, cleanup receipts, resume checkpoints, and evidence artifacts. |
18
18
  | hook trigger safety | `hooks/hooks.json`, `bin/litclaude-hook.js`, `test/hooks.test.mjs`, `docs/hooks.md` | Implemented | Hooks use `UserPromptSubmit` trigger detection, exact workflow aliases, near-miss fixtures, prompt injection safe context, and no auto-type behavior for slash commands. |
19
+ | bundled handoff | `skills/lit-handoff`, `commands/lit-handoff.md`, `vendor/022_handoff`, exact-bare hook | Implemented | Four canonical files remain byte-identical; exact bare `handoff` injects the complete source while mentions, compounds, slash text, and secret-bearing prompts remain inert. |
20
+ | bundled scientific visualization | `skills/lit-scientific-visualization`, `commands/lit-scientific-visualization.md`, `vendor/045_scientific-visualization`, exact-bare hook, capability doctor | Implemented | Sixteen authored files remain byte-identical; the exact-bare hook displays the banner and injects the complete adapter/source while mixed and generic prompts stay inert; installed source-root path resolution, dependency DEGRADED status, Python source tests, and real figure export are covered without silent installation. |
19
21
  | agent/command routing | `agents/*.md`, `commands/*.md`, `.claude-plugin/plugin.json`, command discovery tests | Implemented | Agents and commands route planner, executor, verifier, reviewer, librarian, and QA responsibilities into Claude Code surfaces, including review-work and litgoal command files. |
20
22
  | docs/package payload | `README.md`, `README_ko-KR.md`, `docs/*.md`, `package.json`, `.claude-plugin/plugin.json`, `test/workspace-hygiene.test.mjs` | Implemented | Docs, package payload, manifest, install metadata, package file-list, and guarded-token gates are covered by tests; v0.2.0 docs describe local parity without implying publish completion. |
21
23
  | excluded/deferred telemetry | No runtime telemetry package; docs omission note | Omitted | Telemetry is omitted and any network telemetry remains deferred by reason: LitClaude should stay local and quiet unless the user explicitly requests an observable reporting feature. |
@@ -60,6 +62,8 @@ workflow additions:
60
62
  - `litgoal`
61
63
  - `lit-loop`
62
64
  - `lit-plan`
65
+ - `lit-handoff`
66
+ - `lit-scientific-visualization`
63
67
 
64
68
  Auxiliary Skill-discovery entries are part of the public inventory without adding
65
69
  new command routes:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "litclaude-ai",
3
- "version": "0.3.28",
3
+ "version": "0.3.30",
4
4
  "description": "Claude Code-native workflow distribution.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "litclaude",
3
3
  "description": "Claude Code-native workflow plugin.",
4
- "version": "0.3.28",
4
+ "version": "0.3.30",
5
5
  "author": {
6
6
  "name": "LitClaude contributors"
7
7
  },