Repository navigation
check-readme-sync: warn on EN vs translated README bold-link roster drift - #18
sergiobuilds wants to merge 37 commits into
Conversation
a2dce1f to
bec759f
Compare
|
Rebased onto Re-verified after the rebase:
The CLAUDE.md conflict was the Shipping checklist's item 2, which moved on main while this branch sat. Resolved by keeping your current wording and inserting the check-readme-sync sentence ahead of the "Most skills earn only that catalog row" clause, so the curated-sections rule still closes the item. |
- a depth skill (model-invoked) that leaves machine-owned axes to the repository's own formatter, linter or LSP and reads judgment axes only where meaning must be read; a run ends in one of five formal results: no-op, excluded, abstain, retain-and-report, or a ranked config proposal held for human selection - unverifiable author spread lowers a proposal's rank and is stated in it; it never forces abstention by itself - registered across every roster surface after re0
- check-todo-sync.cjs fails when an active TODO entry has no resolving casebook link, a live casebook is owned by no entry, or an entry outgrows 600 bytes without a casebook, and warns when an in-progress entry has no execution row; local-only because everything it reads is gitignored
- the audit records path, mtime, size and sha256 per candidate and the write step re-reads them, stopping and naming the file and delta on any change; mtime gates staleness and never picks the canonical home - snapshot-candidates.mjs prints that table for a file or directory set and ships inside the skill directory so it installs with the skill
- the old main tip stays on archive/<commit-time> with the gitignored rotating ledgers committed once on top, the new tree lands as one orphan v0.1.0 commit and is force-pushed under a lease on the recorded tip; commit and push stay human actions behind STOP lines - scripts/restart-handoff.mjs checks the preconditions, snapshots the ledgers and prints the handoff block; exit 2 names a failed precondition
- the mutation order becomes add, refresh, verify, retire; a host that cannot reload ends with the new name installed and the old one kept, reported as pending - an integrity check against the pinned upstream precedes every remove, update and reinstall; divergent or uncomparable content is never destroyed without per-skill authorization
- the skill that checks the model's read of a request takes the name a stranger half-guesses; the silent-pass contract is unchanged and the deprecations table gains the row
- the last bare re + verb name takes the lifecycle prefix, and the description opens with move items only, reword nothing - AGENTS.md states the prefix as a principle instead of an enumeration
- a breadth skill that makes several filesystem names reach one truth after approval: probe capabilities, audit bytes and contract, re-check path, mtime, size and sha256 before the first write, then hardlink, symlink or junction with identity proven through every name; reversal stages an independent copy before removing a name - scripts/identity.mjs carries probe, digest, compare, link, verify and unlink, so the body states the contract and the script performs the mechanics - AGENTS.md defines the -local suffix
- reads one stated intent and the installed roster and returns the smallest ordered graph, every step carrying one typed authority edge; it runs nothing and writes nothing, and nba consults it as one candidate
- L1 cites the target's Verification, L2 asks for the learner's own account of order, omission and authority, L3 judges the artifact; agent-produced work grades not-completed - attempt records are append-only under .re0/tutorial/ and resume by the recorded version and dependency digest
- climbs a fixed ladder from identity through termination, pause, progress, suspicion and alert to a recovery that ships only as a proposal to a human; a cooldown keeps a noisy log from paging twice, and a host without monitor registration gets advisory/unavailable
- adjudicates already-collected reads into findings classed by cited evidence alone (supported, contested, unsupported, insufficient), never by count or model spread; round-0 originals are preserved verbatim and one optional exchange circulates only disputed citations - AGENTS.md's mesh line reads aggregate by evidence, never by count
- debloat removes the excess class and cites the published tell list, re0 removes the shape class by rewriting and only observes an unsourced claim, dedash runs last, detool sits outside the family, modelchk keeps two dials; AGENTS.md maps the shared ordering rule
- proposes, per open enumeration in Korean prose, a comma span and a connective span with a reason, citing the 국립국어원 rulings; the three sanctioned uses and every protected context stay untouched and nothing is replaced automatically
- scripts/gates/ holds what must be true before a release, scripts/runtime/ what installs onto a host, scripts/tools/ contributor conveniences; ci.yml, release.yml, AGENTS.md and the skills that name a script path follow - check-catalog-sync compares the roster order across catalog.cjs, re0-upgrade, plugin.json and README, and validate-skills parses every script bundled inside a skill
- aim, hate, macrothink, feynman, autobahn, shower, factchk, mandela, sip, re0-git, re0-release, re0-merge, re0-plan, re0-loop, re0-memo, catchup, nba and prism pass detool, debloat, re0, re0-order and dedash; every rule, trigger, boundary and null result survives, checked by a blind cold read of the old and new bodies
- walks not-yet-built requirements through question, remove, simplify, speed the cycle, automate in that order and proposes removals only for inertial items whose source is verified and whose benefit is gone; mandated constraints and unverified sources never become candidates, zero proposals is a formal success, and every run ends at an approval stop - registered after modelchk; AGENTS.md admits an eponym when the method is already known by that name
- `* -text` turns off end-of-line conversion, so a checkout reads the bytes the index holds on every platform instead of the host's autocrlf setting; the shipped markdown and scripts are LF and stay LF
- four proofs that described a skill's own casebook (LilMGenius#2, LilMGenius#3, LilMGenius#5, LilMGenius#7) now tell one thing that happened in the field, LilMGenius#9 takes a shorter case, and every other touched block is trimmed in the same Setup, Result, So shape - the readback and re0-order renames are carried into the two proofs that name them
- a proposal takes its form from the line: a comma or connective in prose, spacing with no separator in a label row whose layout already separates the items
- a late commit is dated by the newest modification time of the files it changes, built on the last commit at or before that time, and followed by the later commits replayed on top - every commit it writes carries one date as author and committer date, and the branch never gains a merge or a backwards committer date - each run reads the documented convention and the recent log before drafting, then checks the draft against the nearest commits of the same type
- the scan takes its file list from git, so a local run reads what ci reads and a gitignored draft that names a planned skill no longer fails it
- AGENTS.md states the subject, body and omission rules this log keeps and names the older forms as history rather than precedent - check-commit-messages.cjs checks the form of each pull request and each fast-forward push in ci
- every skill listing follows the order its quadrant's work runs in: depth's cleanup passes run detool, debloat, re0-order, then dedash and dedot, and coil ends with the two skills about the suite itself - docs/invocation.md names the pipeline skills and states the handoff and skip rules, and AGENTS.md makes a Pipelines row and a Reuses cell part of shipping an orchestrator - re0-merge hands each re0-git and re0-release step to the human - check-catalog-sync reads roster order from the Index alone, so a skill row in another README table does not count as a listing
- a fork's commits get their final messages when re0-merge lands them, so the push check on main reads those instead of failing the contributor's pull request
- both drop disable-model-invocation and gain a model-facing trigger plus a rule to act only inside the artifact, section or diff the human named, or the scope a pipeline the human invoked passes on - docs/invocation.md moves them out of the user-invoked list and keeps the over-compression and churn reasons as the reason for the scope rule
- AGENTS.md pairs macrothink and multithink as the fan-out and fan-in of a plural read, so a human can hand macrothink's reads to multithink, where an uncited read stays unsupported - macrothink keeps each read verbatim under its root, which multithink needs to preserve round-0 originals - multithink records lens spread as coverage, adjudicates reads a caller split by failure mode, and its description drops the comparison to a lens split
- a pointer file can gain lines of its own and drift, while a symlink keeps Claude Code and Codex on one file
- scripts/tools/ held older copies of the upstream link-skills.sh and list-skills.sh that nothing called; linking replaced the installs npx skills manages, and on Windows ln -s copies files, so a git pull no longer reached them
- each skill carries a display name and short description for the Codex picker, and a user-invoked one sets policy.allow_implicit_invocation false, since Codex does not read disable-model-invocation - validate-skills fails a skill without the file or whose two invocation settings disagree
- sip, re0-release, re0-merge, re0-loop and re0-plan tell the agent to call the Skill tool with a named model-invoked skill, one call per skill, and tell the user to run a user-invoked one such as /re0-git or /macrothink
- the ten localized READMEs sit beside the banner and map they already embed, at the same depth, so their relative links hold; the link and skill-reference checks scan assets/
- .agents/invocation.md takes mattpocock/skills' own wording and structure: the two lanes with the Codex policy beside disable-model-invocation, operative steps that call the Skill tool with a model-invoked skill and hand a user-invoked one to the human, and the passive versus active line drawn at re0-memo - each user-invoked skill states its reason in its own body, so the per-skill list and the pipeline section it duplicated are gone, and docs/ with them - validate-skills fails a user-invoked description that keeps a "Use when" trigger list, and the prism and re0-merge descriptions drop theirs
- .agents/install-block.md holds the first-install command and names /re0-upgrade as every install after it, in the upstream canonical-block shape, with what an agent handed only the repository URL does and why the Claude Code plugin load is not the install story - the README, every translation and each release note's Install section copy its command; re0-upgrade keeps its own forms inline, and every npx skills call in the repository is spelled npx skills@latest - the Quickstart stops promising that symlinked skills update on their own: symlinks give every agent one copy, and re0-upgrade is the update - check-install-block.cjs fails ci when a README drops the command or a Markdown file spells the CLI any other way
- AGENTS.md bans the em-dash from this repo's prose and asks for the punctuation each sentence wants, and says so without one - check-em-dashes.cjs fails ci on one in a skill, .agents/, AGENTS.md, scripts/ or .github/; the gate comments and runtime notice text are rewritten to pass, and check-todo-sync matches the TODO separator as \u2014
- Layout maps each top-level folder to its one job, now that .agents/ holds the contracts, assets/ the embedded files and translations, and scripts/ its gates and runtime - the shipping checklist re-reads every skill and doc that names a skill when it is added, renamed, removed or changes lane, so no orchestrator keeps calling a skill that went user-invoked or away - Vendoring names .agents/invocation.md and .agents/install-block.md as upstream substrate whose changes start from upstream's current file, and NOTICE covers material adapted with its wording and structure intact - CLAUDE.md is described as the symlink it is, and the tell-family entry lists re0 before debloat, the order the passes run in
- check-readme-sync.cjs compares every localized README's bold-link skill roster with the English README on set and order, warn-only unless run with --strict, and a temp-repo test covers the matching, missing, reordered and strict cases - ci.yml runs it and the shipping checklist names it beside check-catalog-sync
LilMGenius
left a comment
There was a problem hiding this comment.
Accepting this. Replaying the check over the history since the translations landed, it catches real drift: 17 commits where every translation's Index listed the skills in a different order than English. I'm landing it on top of the in-progress restructure, where the translations live under assets/i18n/ and check-catalog-sync already checks the English Index row order, so the landing folds your check into that gate. I'll explain each change when it ships.
bec759f to
3e11781
Compare
What
~100줄 스크립트 하나(
scripts/check-readme-sync.cjs)로, 루트README.md의 skill 볼드 링크(**[<skill>](path)) 로스터와docs/readme/README.<lang>.md10개 번역본의 로스터를 비교합니다. SET(누락)과 ORDER(공통 부분집합의 순서 일치)를 검증합니다. 기본은 warn-only.Why
CLAUDE.md의 shipping checklist step 2가 이미 "번역본도 함께 갱신한다"고 요구하고 있는데 자동화가 없었습니다. 번역본은
ba9ae6e feat: add localized READMEs이후 콘텐츠 갱신 없이16a98c3에서 스위처 정규화만 받았고, 그동안 EN 쪽은 여러 번 skill이 추가·개명됐습니다. 현재 시점(cdbb4a1b)에는 볼드 링크 로스터가 우연히 정렬돼 있어 이 PR은 예방용입니다.check-catalog-sync는 4개 내부 surface(plugin.json / catalog.cjs / re0-upgrade / EN README)의 SET만 지키고 ORDER는 사람 판단으로 남겨뒀습니다. 그 결정을 존중해서, 이 스크립트는 EN README를 downstream mirror인 번역본에만 적용합니다. 4-surface 사이에는 손대지 않습니다.Scope
--strict로 exit 1 승격.Wiring
.github/workflows/ci.yml에Localized README bold-link roster drift-guard (warn-only)스텝 한 줄 추가.CLAUDE.mdshipping step 2에check-readme-sync를 언급하고, warn-only 기본과--strict승격 옵션을 명시.package.json은 손대지 않았습니다(현재scripts필드가 비어 있고, 다른 check-* 도구도 CI에서 직접 호출하는 스타일이라 그 관습을 따랐습니다).Test
tests/check-readme-sync.test.cjs— temp 디렉토리에 합성 저장소를 만들어 4개 케이스:1 missing (readchk)리포트order mismatch리포트::error::출력로컬 실측: 현재 main(cdbb4a1)에서
node scripts/check-readme-sync.cjs는README sync OK: 28 bold-link skills match across 10 localizations을 반환합니다.Notes
--strict로 승격하거나 CI 스텝을 그대로 fail-mode로 바꾸면 됩니다.