refactor: English + structure rewrite wave (#118) - #144
Conversation
Rewrite Korean instruction/skill documentation prose to English across project-init, slidev references, docs-forge deploy-doc/MOC patterns, gws-sync, tally-form mechanics, anti-slop-design, mem0-ops, and notebook. Domain content stays in its source language: skill description triggers, form presets and copy, Korean-default template/example output, and functional seeded output (project-init CLAUDE.md stub, Phase 7 summary). Add scripts/check-skill-prose.mjs — a non-blocking progressive-disclosure smell detector (warns on skill docs > ~500 lines and deep bundled refs, always exits 0) wired into .githooks/pre-commit and validate-codex.yml. Add the English-docs / domain-content-exempt policy to dual-integration.md with a concise mirror in AGENTS.md. Bump PATCH on the 8 touched plugins, metadata.version to 2.3.0, and regenerate Codex + Hermes manifests.
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 13 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
📝 WalkthroughWalkthroughThis PR rewrites plugin documentation and reference material in English, strengthens several operational instructions, adds warning-only progressive-disclosure checks to local and CI validation, updates cross-runtime guidance, and bumps marketplace and plugin manifest versions. ChangesEnglish documentation and validation
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 8 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (8 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 78e58f6191
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| - [ ] Set environment variables (if needed) | ||
| - [ ] Confirm HTTPS | ||
| - [ ] Responsive test (mobile/tablet) | ||
| ``` |
There was a problem hiding this comment.
Remove the stray fence from the setup guide
This added trailing ``` leaves setup-guide.md with an odd number of Markdown fences; any Markdown renderer or skill/reference loader that expects balanced fences will treat the file as malformed (or start an unterminated code block at EOF). The previous version had balanced fences, so dropping this line keeps the translated reference valid.
Useful? React with 👍 / 👎.
| - GIF generation (a separate project — image *references* are supported, generation is not), the on-screen thank-you text (unsupported by the create API — `redirect` is the alternative), a respondent confirmation email (Tally Pro). | ||
| - Receiving·aggregating submissions, an all-overlap heatmap (when2meet Lv2+) — outside the 1:1-consultation scope. | ||
| - Custom CSS·fonts (Tally paid). | ||
| ``` |
There was a problem hiding this comment.
Drop the extra fence at the end of the skill body
This extra ``` makes SKILL.md have unbalanced Markdown fences, so consumers that render or parse the skill body can see a malformed final code block. Since the checklist example already closes at line 179 and there is no matching opener here, this line should be removed.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 17
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
🟡 Minor comments (11)
plugins/project-init/references/new-procedure.md-101-104 (1)
101-104: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
${PLUGIN_ROOT}경로를 따옴표로 감싸세요.
bash ${PLUGIN_ROOT}/scripts/idempotent-seed.sh ensure-claude-dirs는 공백이 포함된 경로에서 인자를 분리해 Phase 2가 실패할 수 있습니다.bash "${PLUGIN_ROOT}/scripts/idempotent-seed.sh" ensure-claude-dirs로 바꿔야 합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/project-init/references/new-procedure.md` around lines 101 - 104, Quote the PLUGIN_ROOT-derived script path in the ensure-claude-dirs command so paths containing spaces remain a single argument. Update only the command in the procedure documentation; preserve the existing script and ensure-claude-dirs invocation.plugins/slidev/skills/create-slide/references/components.md-119-121 (1)
119-121: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUpdate the Slidev component defaults in
components.md.AutoFitText.mindefaults to 30, andVSwitch.unmountdefaults to false in the current API; the doc still says 10px and true.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/slidev/skills/create-slide/references/components.md` around lines 119 - 121, Update the AutoFitText `min` default in components.md from 10px to 30px, and correct the VSwitch `unmount` default from true to false. Keep the surrounding prop descriptions and formatting unchanged.plugins/slidev/skills/create-slide/references/animations.md-402-465 (1)
402-465: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUse the documented Slidev transition values here. Add
fade-out, and replacenonewithnullfor the no-transition case.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/slidev/skills/create-slide/references/animations.md` around lines 402 - 465, Update the “Available transitions” examples to use documented Slidev transition values: add the fade-out transition and replace the no-transition value none with null. Keep the existing transition examples unchanged.plugins/slidev/skills/create-slide/references/layouts.md-400-419 (1)
400-419: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win중첩된 코드 펜스가 예제를 깨뜨립니다.
두 예시 모두 바깥
<code>```md</code>펜스 안에<code>```ts</code>또는<code>```python</code>을 사용합니다. 내부 펜스가 바깥 펜스를 먼저 닫으므로 문서 렌더링과 복사 가능한 예제가 손상됩니다. 바깥 펜스를 4개 백틱으로 변경하세요.Also applies to: 520-545
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/slidev/skills/create-slide/references/layouts.md` around lines 400 - 419, Update the outer Markdown fences around the affected examples, including the sections near the “Right-image layout” example and lines 520–545, from three backticks to four backticks so the nested TypeScript or Python fences remain intact and render correctly.plugins/slidev/skills/create-slide/references/setup-guide.md-218-228 (1)
218-228: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
npx slidev infoは削除するか、実際にサポートされているコマンドに置き換えてください。
slidev infoは定義されていないため、「check project info」の例としては不正確です。必要ならnpx slidev --helpなどに差し替えてください。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/slidev/skills/create-slide/references/setup-guide.md` around lines 218 - 228, Remove the unsupported npx slidev info example from the “Other commands” section, or replace it with a supported command such as npx slidev --help and update its description to match.plugins/slidev/skills/create-slide/references/setup-guide.md-674-690 (1)
674-690: 🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win
--bind와 비밀번호 예시로 바꾸세요.--host 0.0.0.0 --remote대신 문서된--bind를 쓰고, 공개 바인딩을 보여줄 때는--remote=<password>또는 LAN 전용 주소를 함께 명시하세요.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/slidev/skills/create-slide/references/setup-guide.md` around lines 674 - 690, Update the “Remote access not working” setup example to use Slidev’s documented --bind option instead of --host 0.0.0.0 --remote, and include a password form such as --remote=<password> or a LAN-only bind address when demonstrating public access.plugins/tally-form/skills/tally-form/SKILL.md-142-142 (1)
142-142: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
.env검색 깊이를 실제 동작과 일치시키세요.문서는 CWD부터 상위 디렉터리를 계속 검색한다고 설명하지만,
build_tally_form.py의find_key()는for _ in range(6)으로 최대 6개 디렉터리만 확인합니다. 더 깊은 작업 디렉터리에서는 유효한 키를 찾지 못해 예상치 않게NO_KEY로 종료할 수 있으므로, 구현의 제한을 제거하거나 문서에 6단계 제한을 명시하세요.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/tally-form/skills/tally-form/SKILL.md` at line 142, Update the `.env` search documentation near the TALLY_API_KEY configuration and the `find_key()` implementation so their behavior matches: either remove the fixed six-directory limit from `find_key()` to search from CWD through all ancestors, or explicitly document the six-level limit. Prefer removing the limit to preserve the documented upward search behavior.plugins/tally-form/skills/tally-form/SKILL.md-63-63 (1)
63-63: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winMD038 경고를 수정하세요.
markdownlint가 두 줄의 inline code span 내부 공백을 보고합니다. 예를 들어
`## `대신 lint-safe한 표현인`##`와 설명 문구를 사용해 의미를 유지하세요.Also applies to: 72-72
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/tally-form/skills/tally-form/SKILL.md` at line 63, MD038 경고를 없애려면 SKILL.md의 문제 문장에서 선행 또는 후행 공백을 포함한 inline code span(`## ` 및 관련 `### ` 등)을 공백 없는 lint-safe한 기호로 바꾸고, 필요한 공백은 코드 span 밖의 설명 문구로 유지하세요. 해당 줄과 동일한 패턴이 적용된 72번째 줄도 함께 수정해 의미와 안내 내용은 보존하세요.Source: Linters/SAST tools
plugins/tally-form/skills/tally-form/SKILL.md-197-197 (1)
197-197: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winLine 197의 unmatched fence를 제거하세요.
정적 분석은 이 fence를 언어가 지정되지 않은 새 코드 블록으로 보고합니다. Checklist 예시는 Line 179에서 이미 닫혔으므로, Line 197의 trailing fence는 문서 렌더링을 깨뜨릴 수 있습니다. 의도된 블록이 아니라면 삭제하세요.
제안 수정
-```🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/tally-form/skills/tally-form/SKILL.md` at line 197, Remove the unmatched trailing code fence at the end of the Checklist example in SKILL.md; the example is already closed earlier, so leave the existing content and formatting unchanged.Source: Linters/SAST tools
scripts/check-skill-prose.mjs-45-51 (1)
45-51: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win끝의 줄바꿈을 추가 줄로 세지 마세요.
Line 49의
split('\n').length는 정상적인 500줄 파일이 trailing newline으로 끝날 때 501줄로 계산합니다. CRLF도 같은 경계 오류를 만들 수 있어 정확히 500줄인 문서에 경고가 발생합니다. 줄바꿈을 정규화하고 마지막 빈 요소를 제외하세요.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@scripts/check-skill-prose.mjs` around lines 45 - 51, Update the line-count calculation in the markdown sweep using the loop around walkFiles so newline styles are normalized and a trailing empty split element is excluded. Ensure documents with exactly lineCeiling content lines, including those ending in LF or CRLF, are not incorrectly warned.plugins/gws-sync/skills/gws-sync/SKILL.md-70-73 (1)
70-73: 🔒 Security & Privacy | 🟡 Minor | ⚡ Quick winRecheck the Drive target state before
files.update. The ID check in step 6 doesn’t catch files that were moved, renamed, or trashed after approval, andfiles.updatecan still act on that same ID. Abort unless the current object is still the approved direct child, with the same name andtrashed=false.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/gws-sync/skills/gws-sync/SKILL.md` around lines 70 - 73, Strengthen the pre-execution validation in step 6 for changed items before invoking files.update: re-fetch the approved target ID and abort the entire run unless it remains the approved direct child of the mapped folder, retains the approved name, and has trashed=false. Preserve the existing abort-and-return-to-§3 behavior for any mismatch, then use only the revalidated ID for files.update.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/anti-slop-design/skills/anti-slop-design/references/house-style.md`:
- Around line 29-31: Update the house-style guidance around the default accent
references to define one explicit, named oklch() token for the committed indigo
color. Reuse that exact token wherever the guidance currently refers to the
committed color, including the fallback section, and state that it is a flat,
single, committed accent rather than a gradient.
In `@plugins/anti-slop-design/skills/anti-slop-design/SKILL.md`:
- Around line 37-40: Update the “1. Clarify” section of the anti-slop-design
flow to add a capability gate before using AskUserQuestion or the interview
skill. Invoke those tools only when available; otherwise request the missing
artifact, audience, brand, and decision-context details directly in the current
channel, while continuing without automatic assumptions or premature
termination.
In `@plugins/gws-sync/CLAUDE.md`:
- Line 32: Update the SKILL.md workflow sequence so Drive tree inspection and
new/changed diff generation occur before the AskUserQuestion-based
upload-location and execution approval; remove the earlier location-approval
step and keep upload only after explicit approval.
In `@plugins/gws-sync/skills/gws-sync/SKILL.md`:
- Around line 62-70: Update the approval manifest and execution validation in
§5b and §6 to bind each item to its file contents, not only size and mtime.
Record a SHA-256 (or equivalent) digest at approval and compare it immediately
before upload, aborting the entire run and returning to §3 for re-diff and
re-approval on any mismatch; alternatively, execute from an approved immutable
snapshot.
- Around line 34-46: Update the existing-mapping path in the location-approval
flow around §2 so `.gws-sync.json` mappings are treated only as
candidates/defaults, not as approval records. Require `AskUserQuestion` to
explicitly approve the target folder before every write, including when a
mapping already exists, while preserving the candidate-folder discovery and
mapping behavior.
- Around line 55-60: Clarify the timestamp comparison in the “Changed” rule and
the §3-2 scan results: convert both local mtime and Drive modifiedTime to the
same UTC epoch representation before comparing, then treat the file as changed
when the normalized local value is greater.
In `@plugins/project-init/commands/new.md`:
- Around line 11-13: The preflight guard must reject every prohibited
non-ignored entry anywhere under the current directory, including content deeper
than five levels and nested .git directories; update the guard in
plugins/project-init/commands/new.md lines 11-31 and
plugins/project-init/skills/new/SKILL.md lines 10-36 accordingly. In
plugins/project-init/CLAUDE.md lines 74-95, revise the description of the
preflight guard so it does not claim POSIX-shell compatibility and accurately
reflects the find implementation and its non-POSIX options.
In `@plugins/project-init/references/gh-repo-create-flow.md`:
- Line 76: Update the LICENSE fallback guidance in the gh repo create flow to
use the Contents API PUT operation rather than POST. Specify that the request
includes a commit message and base64-encoded content, and only includes sha when
updating an existing LICENSE file.
- Around line 13-20: Update the ORGS lookup pipeline to propagate failures from
gh api, either by enabling pipefail for this command or by explicitly checking
gh api’s exit status before assigning ORGS. Ensure a failed organization lookup
does not silently produce an empty candidate list or continue the owner
interview.
- Around line 65-73: Update the gh repo create command in the repository
creation flow to normalize VISIBILITY into the supported private, public, or
internal flag instead of interpolating it or using Bash 4-only lowercase
expansion. Build the optional license argument from LICENSE and omit it entirely
when LICENSE is None; otherwise pass the selected license value.
In `@plugins/project-init/references/new-procedure.md`:
- Around line 245-246: Update the Phase 7 staging command in the procedure so it
does not unconditionally include .gitignore, since fresh directories may not
contain that file. Either add .gitignore during the earlier seeding phases or
stage it conditionally when present, while preserving staging of the other
seeded files.
- Line 138: Update the substitution instruction in new-procedure.md to use only
the documented {{PROJECT_NAME}} and {{ONE_LINER}} placeholders for the Phase 1
answers, and ensure the procedure references the approved {{OWNER}},
{{LICENSE}}, and {{YEAR}} placeholders rather than angle-bracket placeholders.
In `@plugins/slidev/skills/create-slide/references/animations.md`:
- Around line 520-556: Update all four nested Magic Move examples, including the
sections around the referenced ranges, so the outer Markdown fence uses five
backticks while the inner md magic-move fence remains four backticks. Adjust
each corresponding opening and closing fence consistently, preserving the
embedded code examples and preventing premature fence termination.
In `@plugins/slidev/skills/create-slide/references/glow-background.md`:
- Around line 184-193: Update the dark-mode `#slide-content` rule in the glow
background documentation examples to use a transparent background instead of
black, so the z-index:-1 .glow-container remains visible. Apply the correction
consistently to every repeated example in the document.
In `@plugins/slidev/skills/create-slide/references/setup-guide.md`:
- Around line 654-672: Update the “PDF/PNG export failure” Fix section to
install the playwright-chromium development dependency before running playwright
install chromium. Keep the existing browser and system dependency installation
steps, using package-manager-equivalent commands where appropriate.
In `@plugins/tally-form/skills/tally-form/SKILL.md`:
- Around line 28-38: Replace the fallback resolver in the tally-form SKILL.md
execution instructions with a runtime-neutral, capability-aware
PLUGIN_ROOT-based resolver. Remove reliance on Bash process substitution and
external ls/awk/sort/cut/sed/uv path-resolution commands, and ensure the
resolver works consistently across Claude Code, Codex, and Hermes before
invoking the existing build_tally_form.py script.
In `@scripts/check-skill-prose.mjs`:
- Around line 28-35: Update walkFiles and the file-reading logic around the
affected checks to catch filesystem errors from readdirSync and readFileSync,
record each file or directory failure as an informational warning, and continue
processing remaining entries. Add a top-level fallback around the checker
execution so unexpected errors still terminate with exit code 0, preserving the
“ALWAYS exits 0” contract.
---
Minor comments:
In `@plugins/gws-sync/skills/gws-sync/SKILL.md`:
- Around line 70-73: Strengthen the pre-execution validation in step 6 for
changed items before invoking files.update: re-fetch the approved target ID and
abort the entire run unless it remains the approved direct child of the mapped
folder, retains the approved name, and has trashed=false. Preserve the existing
abort-and-return-to-§3 behavior for any mismatch, then use only the revalidated
ID for files.update.
In `@plugins/project-init/references/new-procedure.md`:
- Around line 101-104: Quote the PLUGIN_ROOT-derived script path in the
ensure-claude-dirs command so paths containing spaces remain a single argument.
Update only the command in the procedure documentation; preserve the existing
script and ensure-claude-dirs invocation.
In `@plugins/slidev/skills/create-slide/references/animations.md`:
- Around line 402-465: Update the “Available transitions” examples to use
documented Slidev transition values: add the fade-out transition and replace the
no-transition value none with null. Keep the existing transition examples
unchanged.
In `@plugins/slidev/skills/create-slide/references/components.md`:
- Around line 119-121: Update the AutoFitText `min` default in components.md
from 10px to 30px, and correct the VSwitch `unmount` default from true to false.
Keep the surrounding prop descriptions and formatting unchanged.
In `@plugins/slidev/skills/create-slide/references/layouts.md`:
- Around line 400-419: Update the outer Markdown fences around the affected
examples, including the sections near the “Right-image layout” example and lines
520–545, from three backticks to four backticks so the nested TypeScript or
Python fences remain intact and render correctly.
In `@plugins/slidev/skills/create-slide/references/setup-guide.md`:
- Around line 218-228: Remove the unsupported npx slidev info example from the
“Other commands” section, or replace it with a supported command such as npx
slidev --help and update its description to match.
- Around line 674-690: Update the “Remote access not working” setup example to
use Slidev’s documented --bind option instead of --host 0.0.0.0 --remote, and
include a password form such as --remote=<password> or a LAN-only bind address
when demonstrating public access.
In `@plugins/tally-form/skills/tally-form/SKILL.md`:
- Line 142: Update the `.env` search documentation near the TALLY_API_KEY
configuration and the `find_key()` implementation so their behavior matches:
either remove the fixed six-directory limit from `find_key()` to search from CWD
through all ancestors, or explicitly document the six-level limit. Prefer
removing the limit to preserve the documented upward search behavior.
- Line 63: MD038 경고를 없애려면 SKILL.md의 문제 문장에서 선행 또는 후행 공백을 포함한 inline code
span(`## ` 및 관련 `### ` 등)을 공백 없는 lint-safe한 기호로 바꾸고, 필요한 공백은 코드 span 밖의 설명 문구로
유지하세요. 해당 줄과 동일한 패턴이 적용된 72번째 줄도 함께 수정해 의미와 안내 내용은 보존하세요.
- Line 197: Remove the unmatched trailing code fence at the end of the Checklist
example in SKILL.md; the example is already closed earlier, so leave the
existing content and formatting unchanged.
In `@scripts/check-skill-prose.mjs`:
- Around line 45-51: Update the line-count calculation in the markdown sweep
using the loop around walkFiles so newline styles are normalized and a trailing
empty split element is excluded. Ensure documents with exactly lineCeiling
content lines, including those ending in LF or CRLF, are not incorrectly warned.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 0e92e4f5-2946-4e19-bc75-123d0567728b
📒 Files selected for processing (47)
.claude-plugin/marketplace.json.claude/rules/dual-integration.md.githooks/pre-commit.github/workflows/validate-codex.ymlAGENTS.mdplugins/anti-slop-design/.claude-plugin/plugin.jsonplugins/anti-slop-design/.codex-plugin/plugin.jsonplugins/anti-slop-design/plugin.yamlplugins/anti-slop-design/skills/anti-slop-design/SKILL.mdplugins/anti-slop-design/skills/anti-slop-design/references/house-style.mdplugins/anti-slop-design/skills/anti-slop-design/references/slop-taxonomy.mdplugins/docs-forge/.claude-plugin/plugin.jsonplugins/docs-forge/.codex-plugin/plugin.jsonplugins/docs-forge/CLAUDE.mdplugins/docs-forge/references/DEPLOY_DOC_PATTERNS.mdplugins/docs-forge/references/MOC_PATTERNS.mdplugins/gws-sync/.claude-plugin/plugin.jsonplugins/gws-sync/.codex-plugin/plugin.jsonplugins/gws-sync/CLAUDE.mdplugins/gws-sync/skills/gws-sync/SKILL.mdplugins/mem0-ops/.claude-plugin/plugin.jsonplugins/mem0-ops/.codex-plugin/plugin.jsonplugins/mem0-ops/CLAUDE.mdplugins/notebook/.claude-plugin/plugin.jsonplugins/notebook/.codex-plugin/plugin.jsonplugins/notebook/skills/edit-notebook/SKILL.mdplugins/project-init/.claude-plugin/plugin.jsonplugins/project-init/.codex-plugin/plugin.jsonplugins/project-init/CLAUDE.mdplugins/project-init/commands/new.mdplugins/project-init/references/codex-review-discovery.mdplugins/project-init/references/gh-repo-create-flow.mdplugins/project-init/references/new-procedure.mdplugins/slidev/.claude-plugin/plugin.jsonplugins/slidev/.codex-plugin/plugin.jsonplugins/slidev/skills/create-slide/references/animations.mdplugins/slidev/skills/create-slide/references/components.mdplugins/slidev/skills/create-slide/references/glow-background.mdplugins/slidev/skills/create-slide/references/layouts.mdplugins/slidev/skills/create-slide/references/setup-guide.mdplugins/slidev/skills/create-slide/references/slidev-syntax.mdplugins/tally-form/.claude-plugin/plugin.jsonplugins/tally-form/.codex-plugin/plugin.jsonplugins/tally-form/skills/tally-form/SKILL.mdplugins/tally-form/skills/tally-form/references/tally-blocks.mdplugins/tally-form/skills/tally-form/references/tally-templates.mdscripts/check-skill-prose.mjs
| **Resolution:** slop is the **gradient** and the **thoughtless default indigo**, not a *flat single committed* indigo. | ||
| - house-style pins a specific committed indigo token in `oklch()` and **never turns it into a gradient**. | ||
| - This one spot is the only place house-style comes closest to a banned pattern — when using it, state inline that it is a "flat, single, committed accent". |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
기본 accent의 실제 oklch() 토큰을 정의하세요.
Line 30과 Line 46은 특정 커밋 색상을 사용하라고 하지만 실제 토큰 값이 없습니다. 브랜드 자료가 없을 때 이 파일을 fallback으로 읽는 SKILL.md가 결국 색상을 임의로 선택하게 되어 “Do not invent colors” 규칙과 충돌합니다. 구체적인 토큰 값과 이름을 명시해 주세요.
Also applies to: 43-48
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@plugins/anti-slop-design/skills/anti-slop-design/references/house-style.md`
around lines 29 - 31, Update the house-style guidance around the default accent
references to define one explicit, named oklch() token for the committed indigo
color. Reuse that exact token wherever the guidance currently refers to the
committed color, including the fallback section, and state that it is a flat,
single, committed accent rather than a gradient.
| ## Flow (clarify -> context -> plan -> audit(A) -> run -> audit(B) -> revise) | ||
|
|
||
| ### 1. Clarify | ||
| artifact 종류(web / ppt / dashboard / copy), 청중, 브랜드, 결정맥락을 식별. 모호하면 `AskUserQuestion` 및 'interview skill'을 통해 좁힌다. 자동 가정 금지. | ||
| Identify the artifact type (web / ppt / dashboard / copy), audience, brand, and decision context. If ambiguous, narrow it via `AskUserQuestion` and the 'interview skill'. No automatic assumptions. |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
도구 사용 가능 여부를 확인하는 capability gate를 추가하세요.
이 문구는 AskUserQuestion과 interview skill이 항상 존재한다고 가정합니다. 사용 가능한 경우에만 AskUserQuestion/clarify를 호출하고, 없으면 현재 채널에서 필요한 정보를 직접 요청하는 fallback을 추가해야 Codex/Hermes에서도 자동 가정이나 중단 없이 동작합니다.
As per path instructions: shared skill bodies must use capability-aware interaction gates and must not assume that a specific tool is always available.
제안 수정
-If ambiguous, narrow it via `AskUserQuestion` and the 'interview skill'. No automatic assumptions.
+If ambiguous, use the mapped interaction tool when available; otherwise ask the user directly in the current channel. If the interview skill is unavailable, request the missing context explicitly and do not infer it.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ## Flow (clarify -> context -> plan -> audit(A) -> run -> audit(B) -> revise) | |
| ### 1. Clarify | |
| artifact 종류(web / ppt / dashboard / copy), 청중, 브랜드, 결정맥락을 식별. 모호하면 `AskUserQuestion` 및 'interview skill'을 통해 좁힌다. 자동 가정 금지. | |
| Identify the artifact type (web / ppt / dashboard / copy), audience, brand, and decision context. If ambiguous, narrow it via `AskUserQuestion` and the 'interview skill'. No automatic assumptions. | |
| ## Flow (clarify -> context -> plan -> audit(A) -> run -> audit(B) -> revise) | |
| ### 1. Clarify | |
| Identify the artifact type (web / ppt / dashboard / copy), audience, brand, and decision context. If ambiguous, use the mapped interaction tool when available; otherwise ask the user directly in the current channel. If the interview skill is unavailable, request the missing context explicitly and do not infer it. |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@plugins/anti-slop-design/skills/anti-slop-design/SKILL.md` around lines 37 -
40, Update the “1. Clarify” section of the anti-slop-design flow to add a
capability gate before using AskUserQuestion or the interview skill. Invoke
those tools only when available; otherwise request the missing artifact,
audience, brand, and decision-context details directly in the current channel,
while continuing without automatic assumptions or premature termination.
Source: Path instructions
| ├── CLAUDE.md # this file | ||
| └── skills/gws-sync/ | ||
| ├── SKILL.md # 0.전제 확인 → 1.매핑 설정 → 2.위치 승인 → 3.diff→승인→업로드 | ||
| ├── SKILL.md # 0. prerequisite check → 1. mapping config → 2. location approval → 3. diff → approval → upload |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Diff 보고 후 업로드 위치 승인을 수행해야 합니다.
현재 순서는 location approval → diff → approval → upload이지만, 요구사항은 Drive 트리를 확인하고 신규·변경 diff를 생성한 뒤 AskUserQuestion으로 업로드 위치와 실행을 승인하는 흐름입니다. 사용자가 변경 내역을 보기 전에 위치를 승인하지 않도록 순서를 수정하세요.
제안 수정
- ├── SKILL.md # 0. prerequisite check → 1. mapping config → 2. location approval → 3. diff → approval → upload
+ ├── SKILL.md # 0. prerequisite check → 1. mapping config → 2. Drive tree + diff → 3. upload-location approval → 4. uploadAs per path instructions, gws-sync must produce the diff report and obtain explicit upload-location approval before uploading.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ├── SKILL.md # 0. prerequisite check → 1. mapping config → 2. location approval → 3. diff → approval → upload | |
| ├── SKILL.md # 0. prerequisite check → 1. mapping config → 2. Drive tree + diff → 3. upload-location approval → 4. upload |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@plugins/gws-sync/CLAUDE.md` at line 32, Update the SKILL.md workflow sequence
so Drive tree inspection and new/changed diff generation occur before the
AskUserQuestion-based upload-location and execution approval; remove the earlier
location-approval step and keep upload only after explicit approval.
Source: Path instructions
| - `files` is a local-filename → Drive-file-ID cache. **A cached ID is only a hint, not a basis for trust** — before updating, always re-confirm in §3-4 that the ID sits inside the approved folder, is not trashed, and matches that local filename uniquely (a stale cache can overwrite the wrong Drive file). It is recorded automatically after the first upload. | ||
| - If the config file is absent, create it through the location-approval flow in §2 and store the approved mapping (also confirming whether to "skip the prompt and use this folder from now on"). | ||
|
|
||
| ## 2. 업로드 위치 승인 (MANDATORY — AskUserQuestion) | ||
| ## 2. Upload-location approval (MANDATORY — AskUserQuestion) | ||
|
|
||
| 매핑이 없거나 사용자가 새 대상 폴더를 말한 경우: | ||
| When there is no mapping, or the user names a new target folder: | ||
|
|
||
| 1. **Drive 트리 탐색** — 폴더 후보를 검색한다. Drive 쿼리 문법상 폴더 MIME는 정확한 값 `'application/vnd.google-apps.folder'`로 써야 하고(`mimeType = folder`는 매칭 안 됨), trashed 제외도 명시한다: | ||
| 1. **Walk the Drive tree** — search for candidate folders. Drive query syntax requires the exact folder MIME value `'application/vnd.google-apps.folder'` (`mimeType = folder` does not match), and must exclude trashed items explicitly: | ||
| ```bash | ||
| gws drive files list --params '{"q": "name contains '\''<이름>'\'' and mimeType = '\''application/vnd.google-apps.folder'\'' and trashed = false", "fields": "files(id,name,parents)", "supportsAllDrives": true, "includeItemsFromAllDrives": true}' | ||
| gws drive files list --params '{"q": "name contains '\''<name>'\'' and mimeType = '\''application/vnd.google-apps.folder'\'' and trashed = false", "fields": "files(id,name,parents)", "supportsAllDrives": true, "includeItemsFromAllDrives": true}' | ||
| ``` | ||
| 후보 폴더의 하위 목록을 확인해 맥락을 잡는다. | ||
| 2. **AskUserQuestion으로 위치 제안·승인** — 후보 2~3개(+ "새 폴더 생성" 옵션)를 제시하고 사용자가 고른 위치만 쓴다. **승인 없이 업로드 금지.** 매핑이 이미 있으면 이 단계는 생략(설정이 곧 승인 기록). | ||
| Inspect each candidate folder's children to establish context. | ||
| 2. **Propose and approve the location via AskUserQuestion** — present 2-3 candidates (plus a "create new folder" option) and write only to the location the user chooses. **No upload without approval.** If a mapping already exists, skip this step (the config is itself the approval record). |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
기존 매핑이 위치 승인 단계를 우회하지 않게 하세요.
Line 46은 기존 .gws-sync.json이 있으면 AskUserQuestion을 건너뛰도록 허용합니다. 파일이 수정되었거나 stale 상태라면 다음 쓰기가 사용자 확인 없이 다른 Drive 폴더로 향할 수 있습니다. 저장된 매핑은 후보/default로 사용하되, 쓰기 전 위치 승인을 다시 받도록 하세요.
경로 지침에 따라 모든 쓰기는 AskUserQuestion을 통한 업로드 위치의 명시적 승인을 거쳐야 합니다.
🧰 Tools
🪛 LanguageTool
[style] ~39-~39: It’s more common nowadays to write this noun as one word.
Context: ...tion) When there is no mapping, or the user names a new target folder: 1. **Walk the Dri...
(RECOMMENDED_COMPOUNDS)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@plugins/gws-sync/skills/gws-sync/SKILL.md` around lines 34 - 46, Update the
existing-mapping path in the location-approval flow around §2 so
`.gws-sync.json` mappings are treated only as candidates/defaults, not as
approval records. Require `AskUserQuestion` to explicitly approve the target
folder before every write, including when a mapping already exists, while
preserving the candidate-folder discovery and mapping behavior.
Source: Path instructions
| 3. **diff report** (print as a table): | ||
| - **New**: local-only → an `+upload` target | ||
| - **Changed**: present on both sides and locally different (size differs, or local mtime > Drive modifiedTime) → a content-update target | ||
| - **Identical**: skip | ||
| - **Drive orphan**: Drive-only → **proposal only** ("N files not present locally — please delete them yourself" + the list). Never delete automatically. | ||
| 4. **Re-confirm update-target IDs (MANDATORY)**: for each "changed" file, from the §3-2 scan results pin down the single Drive item that is **inside the approved folder, trashed=false, and matches that local filename exactly once**. If the cached ID disagrees with that result (outside the folder, trashed, name mismatch) or several same-named files exist, **stop the automatic flow and use AskUserQuestion to let the user pick the target ID**. Update the cache only with the confirmed ID. |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
file='plugins/gws-sync/skills/gws-sync/SKILL.md'
echo '--- file outline/size ---'
wc -l "$file"
echo
echo '--- surrounding lines 45-70 ---'
sed -n '45,70p' "$file" | cat -n
echo
echo '--- search for mtime/modifiedTime normalization references ---'
rg -n "mtime|modifiedTime|epoch|UTC|normalize|normalized|timestamp" "$file" || trueRepository: YoungjaeDev/my-claude-plugins
Length of output: 5599
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo '--- locate the skill and related implementation/docs ---'
git ls-files 'plugins/gws-sync/**' | sed -n '1,200p'
echo
echo '--- search for exact diff-report wording and timestamp handling ---'
rg -n "present on both sides and locally different|local mtime|Drive modifiedTime|modifiedTime" plugins/gws-sync -SRepository: YoungjaeDev/my-claude-plugins
Length of output: 988
타임스탬프 비교 기준을 명시하세요. local mtime > Drive modifiedTime는 서로 다른 표현을 직접 비교하는 것으로 읽힐 수 있습니다. 두 값을 같은 UTC epoch 기준으로 변환한 뒤 비교하도록 적어야 변경 파일을 놓치지 않습니다.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@plugins/gws-sync/skills/gws-sync/SKILL.md` around lines 55 - 60, Clarify the
timestamp comparison in the “Changed” rule and the §3-2 scan results: convert
both local mtime and Drive modifiedTime to the same UTC epoch representation
before comparing, then treat the file as changed when the normalized local value
is greater.
| ## 7. Shiki Magic Move - code-change animation | ||
|
|
||
| 코드 블록 간 변화를 부드럽게 애니메이션으로 보여줍니다. | ||
| Smoothly animates the changes between code blocks. | ||
|
|
||
| ### 기본 사용 | ||
| ### Basic usage | ||
|
|
||
| ````md | ||
| # Code Evolution | ||
|
|
||
| ````md magic-move | ||
| ```js | ||
| // Step 1: 기본 함수 | ||
| // Step 1: a basic function | ||
| function greet(name) { | ||
| console.log('Hello ' + name); | ||
| } | ||
| ``` | ||
|
|
||
| ```js | ||
| // Step 2: ES6 템플릿 리터럴 | ||
| // Step 2: an ES6 template literal | ||
| function greet(name) { | ||
| console.log(`Hello ${name}`); | ||
| } | ||
| ``` | ||
|
|
||
| ```js | ||
| // Step 3: 화살표 함수 | ||
| // Step 3: an arrow function | ||
| const greet = (name) => { | ||
| console.log(`Hello ${name}`); | ||
| }; | ||
| ``` | ||
|
|
||
| ```js | ||
| // Step 4: 최종 버전 | ||
| // Step 4: the final version | ||
| const greet = (name) => console.log(`Hello ${name}!`); | ||
| ``` | ||
| ```` | ||
| ```` |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
중첩된 Magic Move 코드 펜스를 수정하세요.
외부 펜스와 내부 ````md magic-move 펜스가 모두 네 개의 backtick을 사용합니다. 이후의 네-backtick 줄이 펜스를 닫고 다시 열어, 문서 후반이 의도와 다르게 코드 블록으로 렌더링됩니다. 이 패턴은 네 개 섹션 모두에서 동일하게 수정해야 합니다.
제안 수정
-````md
+`````md
...
-````
-````
+````
+`````Also applies to: 558-599, 601-629, 631-679
🧰 Tools
🪛 markdownlint-cli2 (0.23.0)
[warning] 556-556: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@plugins/slidev/skills/create-slide/references/animations.md` around lines 520
- 556, Update all four nested Magic Move examples, including the sections around
the referenced ranges, so the outer Markdown fence uses five backticks while the
inner md magic-move fence remains four backticks. Adjust each corresponding
opening and closing fence consistently, preserving the embedded code examples
and preventing premature fence termination.
Source: Linters/SAST tools
| This must be added to the scoped style block of `slides.md` or a separate `style.css`. Without this CSS, the slide's default background hides the glow entirely. | ||
|
|
||
| ```css | ||
| /* Dark mode에서 slide 배경을 투명하게 만들어 glow가 보이도록 */ | ||
| /* In dark mode, make the slide background transparent so the glow shows through */ | ||
| .dark #slide-content { | ||
| background-color: black !important; | ||
| } | ||
| ``` | ||
|
|
||
| `slides.md` 하단에 추가하는 방법: | ||
| How to add it at the bottom of `slides.md`: |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
다크 모드 배경을 투명하게 설정하세요.
설명은 glow가 보이도록 투명하게 만들라고 하지만 CSS는 black을 설정합니다. 같은 파일의 .glow-container가 z-index: -1이므로 불투명한 검은 배경이 glow를 가립니다. 반복된 예제에도 동일한 수정이 필요합니다.
제안 수정
- background-color: black !important;
+ background-color: transparent !important;📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| This must be added to the scoped style block of `slides.md` or a separate `style.css`. Without this CSS, the slide's default background hides the glow entirely. | |
| ```css | |
| /* Dark mode에서 slide 배경을 투명하게 만들어 glow가 보이도록 */ | |
| /* In dark mode, make the slide background transparent so the glow shows through */ | |
| .dark #slide-content { | |
| background-color: black !important; | |
| } | |
| ``` | |
| `slides.md` 하단에 추가하는 방법: | |
| How to add it at the bottom of `slides.md`: | |
| This must be added to the scoped style block of `slides.md` or a separate `style.css`. Without this CSS, the slide's default background hides the glow entirely. | |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@plugins/slidev/skills/create-slide/references/glow-background.md` around
lines 184 - 193, Update the dark-mode `#slide-content` rule in the glow background
documentation examples to use a transparent background instead of black, so the
z-index:-1 .glow-container remains visible. Apply the correction consistently to
every repeated example in the document.
| #### 6. PDF/PNG export failure | ||
|
|
||
| **증상:** | ||
| **Symptom:** | ||
| ``` | ||
| Error: Failed to launch browser | ||
| ``` | ||
|
|
||
| **해결:** | ||
| **Fix:** | ||
|
|
||
| ```bash | ||
| # Playwright 브라우저 설치 | ||
| # install the Playwright browser | ||
| npx playwright install chromium | ||
|
|
||
| # 전체 시스템 의존성 설치 (Linux) | ||
| # install full system dependencies (Linux) | ||
| npx playwright install-deps | ||
|
|
||
| # 권한 문제 (Linux) | ||
| # permission issue (Linux) | ||
| sudo apt-get install -y chromium-browser | ||
| ``` |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/sh
set -eu
rg -n -C2 'playwright|export' plugins/slidev/skills/create-slide/references/setup-guide.mdRepository: YoungjaeDev/my-claude-plugins
Length of output: 1575
🏁 Script executed:
#!/bin/sh
set -eu
printf '\n== relevant section ==\n'
sed -n '654,672p' plugins/slidev/skills/create-slide/references/setup-guide.md
printf '\n== nearby export references ==\n'
rg -n -C2 'playwright|export' plugins/slidev/skills/create-slide/references/setup-guide.md
printf '\n== package files in plugin ==\n'
fd -a 'package.json|pnpm-lock.yaml|package-lock.json|yarn.lock' plugins/slidev -t f
printf '\n== possible slidev guide docs ==\n'
rg -n 'playwright-chromium|playwright install|exporting' plugins/slidev -g '!**/node_modules/**'Repository: YoungjaeDev/my-claude-plugins
Length of output: 2343
🌐 Web query:
Slidev export Playwright chromium dependency install playwright-chromium browser binary docs
💡 Result:
To use the export feature in Slidev, you must install the playwright-chromium package as a development dependency [1][2]. After installing the package, you may also need to explicitly install the required browser binaries for Playwright [3][4][5]. Installation Steps: 1. Install the playwright-chromium package: Use your package manager to add playwright-chromium to your project's development dependencies [1][2]: - npm: npm i -D playwright-chromium - pnpm: pnpm add -D playwright-chromium - yarn: yarn add -D playwright-chromium - bun: bun add -D playwright-chromium 2. Install the browser binary: If you encounter an error stating that the executable does not exist or that Playwright browsers need to be installed, you must run the Playwright installation command to download the necessary browser binaries [4][6][5]: npx playwright install chromium Common Troubleshooting: - Missing Executable Errors: If the CLI reports that the browser executable is missing at a specific path, running npx playwright install chromium is typically the solution to download the missing binary [4]. - CI/CD Environments: In CI/CD pipelines, ensure both the dependency is installed and the npx playwright install chromium command is executed as part of the build process to avoid runtime errors [3][7][5]. - Custom Executable Path: If you have a specific version of Chrome or Edge you wish to use, you can point Slidev to it by using the --executable-path flag [1][2]: slidev export --executable-path [path_to_browser_executable]
Citations:
- 1: https://github.com/slidevjs/slidev/blob/main/docs/guide/exporting.md
- 2: https://sli.dev/guide/exporting.html
- 3: https://github.com/slidevjs/slidev/blob/main/skills/slidev/references/core-exporting.md
- 4: https://dev.to/ahandsel/slidev-tip-npm-run-export-not-working-147m
- 5: Deploying to Netlify intermittently needs Playwright install slidevjs/slidev#2105
- 6: https://playwright.dev/docs/browsers
- 7: https://docs-legacy.sli.dev/guide/exporting
Add the Playwright package dependency before browser install
npx playwright install chromium only downloads the browser binary; add the playwright-chromium dev dependency step first (for example, npm i -D playwright-chromium or the equivalent for your package manager).
🧰 Tools
🪛 markdownlint-cli2 (0.23.0)
[warning] 657-657: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@plugins/slidev/skills/create-slide/references/setup-guide.md` around lines
654 - 672, Update the “PDF/PNG export failure” Fix section to install the
playwright-chromium development dependency before running playwright install
chromium. Keep the existing browser and system dependency installation steps,
using package-manager-equivalent commands where appropriate.
| `uv run <script>` — under Claude Code, `${CLAUDE_PLUGIN_ROOT}/skills/tally-form/scripts/build_tally_form.py` (works from any install/dev cwd). Codex 0.135 does not export `CLAUDE_PLUGIN_ROOT` and loads the plugin from the cache tree (`~/.codex/plugins/cache/<marketplace>/tally-form/<version>/`) — so no separate `~/.agents/skills/tally-form` install is created — so use the resolver block below to find the real script path first, then `uv run "$TALLY_SCRIPT"` (the final run is still `uv run`). Hermes searches plugin/skill-level install paths additively (unverified). Since it is stdlib-only, `uv run` runs it directly in an ephemeral environment. | ||
|
|
||
| ```bash | ||
| # Claude Code — CLAUDE_PLUGIN_ROOT 설정됨, 바로 실행 (cwd 무관) | ||
| uv run "${CLAUDE_PLUGIN_ROOT}/skills/tally-form/scripts/build_tally_form.py" --md <checklist.md> --dry-run # 미리보기(API 호출 없음) | ||
| uv run "${CLAUDE_PLUGIN_ROOT}/skills/tally-form/scripts/build_tally_form.py" --md <checklist.md> # 신규 생성 | ||
| uv run "${CLAUDE_PLUGIN_ROOT}/skills/tally-form/scripts/build_tally_form.py" --md <checklist.md> --update <formId> # 갱신·게시(idempotent) | ||
|
|
||
| # Codex / CLAUDE_PLUGIN_ROOT 미설정 — 실제 플러그인 캐시에서 스크립트 경로 resolve. | ||
| # 각 branch 는 커밋 전 대상 존재를 확인하고, 캐시는 버전 내림차순으로 "완결된" 첫 버전을 고른다. | ||
| # HERMES_HOME 탐색은 additive/unverified. 최종 실행은 uv run 그대로. | ||
| # Claude Code — CLAUDE_PLUGIN_ROOT is set, run directly (cwd-independent) | ||
| uv run "${CLAUDE_PLUGIN_ROOT}/skills/tally-form/scripts/build_tally_form.py" --md <checklist.md> --dry-run # preview (no API call) | ||
| uv run "${CLAUDE_PLUGIN_ROOT}/skills/tally-form/scripts/build_tally_form.py" --md <checklist.md> # create new | ||
| uv run "${CLAUDE_PLUGIN_ROOT}/skills/tally-form/scripts/build_tally_form.py" --md <checklist.md> --update <formId> # update·publish (idempotent) | ||
|
|
||
| # Codex / CLAUDE_PLUGIN_ROOT unset — resolve the real script path from the plugin cache. | ||
| # Each branch confirms the target exists before committing; the cache picks the first "complete" version in descending version order. | ||
| # The HERMES_HOME search is additive/unverified. The final run is still uv run. |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo '--- file slice: plugins/tally-form/skills/tally-form/SKILL.md ---'
nl -ba plugins/tally-form/skills/tally-form/SKILL.md | sed -n '1,120p'
echo
echo '--- search for resolver / capability gating patterns in plugins/tally-form ---'
rg -n "CLAUDE_PLUGIN_ROOT|PLUGIN_ROOT|AskUserQuestion|Bash|uv run|capability|fallback|resolver" plugins/tally-form -SRepository: YoungjaeDev/my-claude-plugins
Length of output: 273
🏁 Script executed:
#!/bin/bash
set -euo pipefail
nl -ba plugins/tally-form/skills/tally-form/SKILL.md | sed -n '1,120p'Repository: YoungjaeDev/my-claude-plugins
Length of output: 207
🏁 Script executed:
python3 - <<'PY'
from pathlib import Path
p = Path('plugins/tally-form/skills/tally-form/SKILL.md')
text = p.read_text(encoding='utf-8')
lines = text.splitlines()
print('--- lines 1-120 ---')
for i, line in enumerate(lines[:120], 1):
print(f'{i:>4} {line}')
print('\n--- keyword hits ---')
for kw in ['CLAUDE_PLUGIN_ROOT', 'PLUGIN_ROOT', 'AskUserQuestion', 'Bash', 'uv run', 'resolver', 'fallback', 'capability']:
hits = [i for i, line in enumerate(lines, 1) if kw in line]
if hits:
print(f'{kw}: {hits}')
PYRepository: YoungjaeDev/my-claude-plugins
Length of output: 10761
런타임 중립 resolver로 바꾸세요 plugins/tally-form/skills/tally-form/SKILL.md:28-52 현재 fallback이 bash 프로세스 치환과 ls/awk/sort/cut/sed/uv에 의존해서 Codex·Hermes에서 경로 해석이나 실행이 깨질 수 있습니다. PLUGIN_ROOT 기반의 capability-aware resolver로 바꿔 세 런타임에서 동일하게 동작하게 하세요.
🧰 Tools
🪛 SkillSpector (2.3.11)
[warning] 190: [E1] External Transmission: Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Remediation: Verify the destination URL is trusted and necessary. Remove or replace with documented APIs. Ensure no secrets, tokens, or PII are transmitted.
(Data Exfiltration (E1))
[warning] 23: [RA2] Session Persistence: Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
Remediation: Remove any persistence mechanisms (cron jobs, startup scripts, state files). Skills should not maintain state across sessions without explicit user consent.
(Rogue Agent (RA2))
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@plugins/tally-form/skills/tally-form/SKILL.md` around lines 28 - 38, Replace
the fallback resolver in the tally-form SKILL.md execution instructions with a
runtime-neutral, capability-aware PLUGIN_ROOT-based resolver. Remove reliance on
Bash process substitution and external ls/awk/sort/cut/sed/uv path-resolution
commands, and ensure the resolver works consistently across Claude Code, Codex,
and Hermes before invoking the existing build_tally_form.py script.
Source: Path instructions
- check-skill-prose.mjs: guard readdir/readFile + top-level try/catch so
the informational gate always exits 0 and never blocks commit/CI (CR Major)
- setup-guide.md, tally-form SKILL.md: drop the stray trailing code fence the
rewrite introduced (Codex P2 + fence-balance now even, matches base)
- new-procedure.md: substitute the documented {{PROJECT_NAME}}/{{ONE_LINER}}
tokens, not the angle-bracket examples (CR Major, path-instruction contract)
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ed70bbddc1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ``` | ||
|
|
||
| placeholder (`<project_name>`, `<one-line description>`) 는 Phase 1 응답으로 치환. | ||
| Substitute the placeholders (`{{PROJECT_NAME}}`, `{{ONE_LINER}}`) with the Phase 1 answers. |
There was a problem hiding this comment.
Use the stub's actual placeholders
When /project-init:new reaches Phase 3, the template immediately above contains <project_name> and <one-line description>, but this new substitution instruction tells the agent to replace {{PROJECT_NAME}} / {{ONE_LINER}} instead. Following it literally leaves the CLAUDE.md title/description uncustomized in newly bootstrapped projects; either change the stub tokens or this substitution line so they match.
Useful? React with 👍 / 👎.
Closes #118
Summary
English + structure rewrite wave (Refactor tier). Rewrites Korean instruction/skill documentation prose to clear English one pass per file, merging the #117 structure-audit worklist file-by-file. Adds a non-blocking prose gate, a doc-language policy line, and the required version bumps.
Domain content stays in its source language per the exempt policy: skill
description:trigger phrases, form presets and copy, illustrative Korean example output, i18n dictionaries, and functional seeded output (translating those would change what a plugin emits, not just its docs).Counsel / triage table
project-initcommands/new.md,references/{codex-review-discovery,gh-repo-create-flow,new-procedure}.mdprose + bash commentsassets/AGENTS.review-guidelines*(out of scope); Phase 3 CLAUDE.md stub + Phase 7 summary (functional seeded output);wiring/SKILL.md(only description triggers + runtime ASK strings)slidevcomponents, glow-background, slidev-syntax, setup-guide, layouts, animations(prose + illustrative demo content)SKILL.md— its 55 Korean lines are the two example decks + Korean user-utterance triggers (illustrative example output);icons/themes/visual-patterns.mdalready Englishdocs-forgeDEPLOY_DOC_PATTERNS.md+MOC_PATTERNS.mdprose; CLAUDE.md ref-table annotationsgws-synctally-formtally-blocks.md+tally-templates.mdmechanics prose + code commentspreset-*.md), copy style (form-copy-style.md), example assets, and Korean example form-content values/tokensanti-slop-designhouse-style.md,slop-taxonomy.mdcopy-rules.md(Korean copy-rules section); SKILL description triggersmem0-opsnotebookedit-notebook/SKILL.md(one instruction line)spec-state,brightdata-guide,ml-toolkit(gradio-cv-app)Infrastructure (issue steps 4-5)
scripts/check-skill-prose.mjs(new) — warning-only progressive-disclosure gate: warns to stderr when a skill/reference doc exceeds ~500 lines or a SKILL.md references a bundled file nested > 1 level, and alwaysprocess.exit(0). Wired as a non-blocking step (|| true) into.githooks/pre-commitand.github/workflows/validate-codex.yml..claude/rules/dual-integration.md(full) with a concise mirror inAGENTS.md(dual-integration area, away from the count section).Full-tier safety (issue step 3)
description:touched stays < 1024 chars; the anti-slop and tally-form descriptions containing:remain double-quoted.sync-codex-manifests.mjs --checkandsync-hermes-manifests.mjs --checkparse all rewritten skill frontmatter successfully; a Skill-load smoke over anti-slop-design / tally-form / gws-sync frontmatter passes.Preserved (from #115) — confirmed intact
project-init/skills/new/SKILL.md— Step 0.5 run-record section (file untouched)gws-sync/skills/gws-sync/SKILL.md— §5b approved-manifest sectionproject-init/references/new-procedure.md— Phase 6.gitignoreseeding stepVersioning
PATCH bump on the 8 touched plugins;
metadata.version→2.3.0; Codex + Hermes manifests regenerated.Verification gates (all pass)
sync-codex-manifests.mjs --check— up to datesync-hermes-manifests.mjs --check— up to datecheck-doc-consistency.mjs— 24 plugins, Codex-eligible 22, Hermes 7 consistentcheck-skill-tool-portability.mjs --check— 2 pilots, 18 baseline, no unaccountedcheck-skill-prose.mjs— exit 0 (informational warnings only).githooks/pre-commit— passed on commit (incl. cr-fix suite 70/70)Deviations / judgment calls
create-slide/SKILL.mdstructure offload deferred. The [Audit] PR-8: content-structure quality audit (measurement-first, audit-only) #117 worklist ([Docs] paper-search-tools: Windows용 Docker volume mount 경로 안내 누락 #6) proposes offloading ~590 lines of inline example decks toreferences/. The SKILL has no Korean prose to translate (all Korean is exempt example decks), and the offload is a high-risk restructure of a working baseline skill; it is intentionally left out of this language wave and remains a separate structural follow-up. The new prose gate now surfaces it as an informational warning.scripts/sync-codex-manifests.mjs,scripts/manifest-eligibility.mjs, or plugin-count strings — only ran the generators.Summary by CodeRabbit
New Features
Documentation
Chores