Skip to content

refactor: English + structure rewrite wave (#118) - #144

Merged
YoungjaeDev merged 2 commits into
mainfrom
refactor/118-english-structure-rewrite
Jul 14, 2026
Merged

refactor: English + structure rewrite wave (#118)#144
YoungjaeDev merged 2 commits into
mainfrom
refactor/118-english-structure-rewrite

Conversation

@YoungjaeDev

@YoungjaeDev YoungjaeDev commented Jul 14, 2026

Copy link
Copy Markdown
Owner

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

Plugin / area Rewritten to English Held exempt (stays as-is)
project-init CLAUDE.md, commands/new.md, references/{codex-review-discovery,gh-repo-create-flow,new-procedure}.md prose + bash comments assets/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)
slidev 6 reference files: components, 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.md already English
docs-forge DEPLOY_DOC_PATTERNS.md + MOC_PATTERNS.md prose; CLAUDE.md ref-table annotations fenced Korean-default output examples inside those refs (template output); CLAUDE.md example command title
gws-sync CLAUDE.md, SKILL.md instructional prose SKILL description (triggers); user-facing install/fallback message strings; Korean example folder path
tally-form SKILL.md + tally-blocks.md + tally-templates.md mechanics prose + code comments presets (preset-*.md), copy style (form-copy-style.md), example assets, and Korean example form-content values/tokens
anti-slop-design SKILL.md, house-style.md, slop-taxonomy.md copy-rules.md (Korean copy-rules section); SKILL description triggers
mem0-ops CLAUDE.md
notebook edit-notebook/SKILL.md (one instruction line)
trivial sweeps: spec-state, brightdata-guide, ml-toolkit (gradio-cv-app) none — skipped, no bump only exempt content present (description triggers, an example query, Korean i18n dictionary + example strings)

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 always process.exit(0). Wired as a non-blocking step (|| true) into .githooks/pre-commit and .github/workflows/validate-codex.yml.
  • Doc-language policy added to .claude/rules/dual-integration.md (full) with a concise mirror in AGENTS.md (dual-integration area, away from the count section).

Full-tier safety (issue step 3)

  • Every description: touched stays < 1024 chars; the anti-slop and tally-form descriptions containing : remain double-quoted.
  • Smoke: sync-codex-manifests.mjs --check and sync-hermes-manifests.mjs --check parse 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 section
  • project-init/references/new-procedure.md — Phase 6 .gitignore seeding step

Versioning

PATCH bump on the 8 touched plugins; metadata.version2.3.0; Codex + Hermes manifests regenerated.

Plugin Version
notebook 1.0.1 → 1.0.2
mem0-ops 0.1.1 → 0.1.2
gws-sync 0.1.1 → 0.1.2
docs-forge 0.3.0 → 0.3.1
project-init 0.4.3 → 0.4.4
anti-slop-design 0.3.2 → 0.3.3
tally-form 1.2.1 → 1.2.2
slidev 1.2.1 → 1.2.2

Verification gates (all pass)

  1. sync-codex-manifests.mjs --check — up to date
  2. sync-hermes-manifests.mjs --check — up to date
  3. check-doc-consistency.mjs — 24 plugins, Codex-eligible 22, Hermes 7 consistent
  4. check-skill-tool-portability.mjs --check — 2 pilots, 18 baseline, no unaccounted
  5. check-skill-prose.mjs — exit 0 (informational warnings only)
  6. .githooks/pre-commit — passed on commit (incl. cr-fix suite 70/70)

Deviations / judgment calls

Summary by CodeRabbit

  • New Features

    • Added informational checks for skill documentation length and progressive-disclosure guidance.
    • Improved sync, form publishing, project setup, and presentation workflows with clearer safety and approval steps.
  • Documentation

    • Expanded and standardized English guidance across plugins, references, examples, and cross-runtime instructions.
    • Clarified configuration, troubleshooting, formatting, and operational requirements.
  • Chores

    • Updated plugin release versions across the marketplace.
    • Added documentation checks to local and automated validation workflows without changing blocking behavior.

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.
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 13 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: ddd2abd6-be12-41a8-b676-512b0d030119

📥 Commits

Reviewing files that changed from the base of the PR and between 78e58f6 and ed70bbd.

📒 Files selected for processing (4)
  • plugins/project-init/references/new-procedure.md
  • plugins/slidev/skills/create-slide/references/setup-guide.md
  • plugins/tally-form/skills/tally-form/SKILL.md
  • scripts/check-skill-prose.mjs
📝 Walkthrough

Walkthrough

This 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.

Changes

English documentation and validation

Layer / File(s) Summary
Governance, validation wiring, and marketplace versions
.claude-plugin/marketplace.json, .claude/rules/*, .githooks/*, .github/workflows/*, AGENTS.md
Marketplace versions and cross-runtime English-prose guidance are updated; non-blocking skill-prose checks run from pre-commit and CI.
Plugin guidance rewrites
plugins/anti-slop-design/..., plugins/docs-forge/..., plugins/gws-sync/..., plugins/mem0-ops/..., plugins/notebook/...
Plugin manifests and operational documentation are translated or clarified while preserving documented workflows and boundaries.
Project initialization procedure
plugins/project-init/...
Project creation, preflight, detection, repository setup, Codex review seeding, placeholder substitution, and idempotent reruns are documented in English.
Slidev reference set
plugins/slidev/...
Animation, component, layout, setup, glow-background, and syntax references are rewritten in English with updated examples and guidance.
Tally publishing guidance and checker
plugins/tally-form/..., scripts/check-skill-prose.mjs
Tally parsing, block payloads, publishing, authentication, themes, and templates are documented; the new checker reports length and reference-depth warnings while always exiting successfully.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 8 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (8 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately summarizes the English/structure rewrite wave described by the changes.
Linked Issues check ✅ Passed The changes match #118: English documentation rewrites, warning-only prose checks, guidance updates, and plugin version bumps are all present.
Out of Scope Changes check ✅ Passed The script, workflow wiring, manifest bumps, and documentation edits all align with the stated scope; no clear unrelated changes stand out.
Plugin Version Triple-Sync ✅ Passed All eight touched plugin manifests match their marketplace versions, and .claude-plugin/marketplace.json metadata.version is bumped to 2.3.0.
Codex/Hermes Manifest Regeneration ✅ Passed Version bumps are mirrored in per-plugin .codex-plugin JSONs and anti-slop-design plugin.yaml; the stable .agents marketplace and init.py outputs rightly stayed unchanged.
Skill Description Under 1024 Chars ✅ Passed Checked changed SKILL.md descriptions; the longest was 794 chars and all inspected descriptions were under 1024.
Agents.Md Rule-Mirror Presence ✅ Passed The new English-docs/domain-content rule in .claude/rules/dual-integration.md is mirrored in AGENTS.md (line 172) with the same exemption language.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/118-english-structure-rewrite

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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)
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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).
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 win

Update the Slidev component defaults in components.md. AutoFitText.min defaults to 30, and VSwitch.unmount defaults 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 win

Use the documented Slidev transition values here. Add fade-out, and replace none with null for 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.pyfind_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 win

MD038 경고를 수정하세요.

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 win

Line 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 win

Recheck 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, and files.update can still act on that same ID. Abort unless the current object is still the approved direct child, with the same name and trashed=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

📥 Commits

Reviewing files that changed from the base of the PR and between e4a4490 and 78e58f6.

📒 Files selected for processing (47)
  • .claude-plugin/marketplace.json
  • .claude/rules/dual-integration.md
  • .githooks/pre-commit
  • .github/workflows/validate-codex.yml
  • AGENTS.md
  • plugins/anti-slop-design/.claude-plugin/plugin.json
  • plugins/anti-slop-design/.codex-plugin/plugin.json
  • plugins/anti-slop-design/plugin.yaml
  • plugins/anti-slop-design/skills/anti-slop-design/SKILL.md
  • plugins/anti-slop-design/skills/anti-slop-design/references/house-style.md
  • plugins/anti-slop-design/skills/anti-slop-design/references/slop-taxonomy.md
  • plugins/docs-forge/.claude-plugin/plugin.json
  • plugins/docs-forge/.codex-plugin/plugin.json
  • plugins/docs-forge/CLAUDE.md
  • plugins/docs-forge/references/DEPLOY_DOC_PATTERNS.md
  • plugins/docs-forge/references/MOC_PATTERNS.md
  • plugins/gws-sync/.claude-plugin/plugin.json
  • plugins/gws-sync/.codex-plugin/plugin.json
  • plugins/gws-sync/CLAUDE.md
  • plugins/gws-sync/skills/gws-sync/SKILL.md
  • plugins/mem0-ops/.claude-plugin/plugin.json
  • plugins/mem0-ops/.codex-plugin/plugin.json
  • plugins/mem0-ops/CLAUDE.md
  • plugins/notebook/.claude-plugin/plugin.json
  • plugins/notebook/.codex-plugin/plugin.json
  • plugins/notebook/skills/edit-notebook/SKILL.md
  • plugins/project-init/.claude-plugin/plugin.json
  • plugins/project-init/.codex-plugin/plugin.json
  • plugins/project-init/CLAUDE.md
  • plugins/project-init/commands/new.md
  • plugins/project-init/references/codex-review-discovery.md
  • plugins/project-init/references/gh-repo-create-flow.md
  • plugins/project-init/references/new-procedure.md
  • plugins/slidev/.claude-plugin/plugin.json
  • plugins/slidev/.codex-plugin/plugin.json
  • plugins/slidev/skills/create-slide/references/animations.md
  • plugins/slidev/skills/create-slide/references/components.md
  • plugins/slidev/skills/create-slide/references/glow-background.md
  • plugins/slidev/skills/create-slide/references/layouts.md
  • plugins/slidev/skills/create-slide/references/setup-guide.md
  • plugins/slidev/skills/create-slide/references/slidev-syntax.md
  • plugins/tally-form/.claude-plugin/plugin.json
  • plugins/tally-form/.codex-plugin/plugin.json
  • plugins/tally-form/skills/tally-form/SKILL.md
  • plugins/tally-form/skills/tally-form/references/tally-blocks.md
  • plugins/tally-form/skills/tally-form/references/tally-templates.md
  • scripts/check-skill-prose.mjs

Comment on lines +29 to +31
**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 patternwhen using it, state inline that it is a "flat, single, committed accent".

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 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.

Comment on lines +37 to +40
## 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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

도구 사용 가능 여부를 확인하는 capability gate를 추가하세요.

이 문구는 AskUserQuestioninterview 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.

Suggested change
## 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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 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. upload

As 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.

Suggested change
├── 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

Comment on lines +34 to +46
- `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).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 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

Comment on lines +55 to +60
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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ 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" || true

Repository: 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 -S

Repository: 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.

Comment on lines +520 to 556
## 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}!`);
```
````
````

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 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

Comment on lines +184 to +193
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`:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

다크 모드 배경을 투명하게 설정하세요.

설명은 glow가 보이도록 투명하게 만들라고 하지만 CSS는 black을 설정합니다. 같은 파일의 .glow-containerz-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.

Suggested change
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.

Comment on lines +654 to 672
#### 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
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 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.md

Repository: 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:


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.

Comment on lines +28 to +38
`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 createdso 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 unsetresolve 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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 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 -S

Repository: 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}')
PY

Repository: 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

Comment thread scripts/check-skill-prose.mjs
- 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)
@YoungjaeDev
YoungjaeDev merged commit 09f780e into main Jul 14, 2026
3 checks passed
@YoungjaeDev
YoungjaeDev deleted the refactor/118-english-structure-rewrite branch July 14, 2026 13:35

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Refactor] PR-9: English + structure rewrite wave (one pass per file) + warning-only gates

1 participant