수정 2026-09-29
v1.36.288
2026-09-29
핵심 변경
Add UI copy guidance for the agent that builds screens. init installs .leerness/ui-copy-boundary.md and a ui-copy-boundary skill for Claude Code (.claude/skills/) and Codex (.agents/skills/) in the project language: for each visible string, ask whether it speaks to the user or to the builder, and keep specifications, criteria, implementation narration, notes, placeholder copy and raw values off the screen. The files are managed (re-install refreshes them and keeps a section the team appended); init --minimal leaves them out. In a blind A/B (four screens, one generation each, labelled by a separate Codex run), 33 of 366 strings were builder-facing without the guide, 0 of 272 with its draft wording and 0 of 263 with the final wording; about half of the 33 were preview framing invited by the experiment's own instruction. In a project installed this way, Codex opened the skill for a UI task and not for a backend task (one run each); Claude Code was not observed.
UI boundary scanner v2 (leerness.ui-boundary-scanner/v2): rules match through full-width characters, non-breaking or wide spaces and zero-width characters while findings keep the supplied bytes; new signals for bilingual developer-note labels, placeholder and maintenance copy, Korean debug labels, exception text after a label, camelCase metadata keys, [object Object], unresolved {{x}}/${x}/%s, missing values, raw i18n keys and JSON dumps. On an independent 324-surface corpus detection rose from 5/180 to 25/180 and false alerts from 6/144 to 32/144, most of them in template editors and other tooling text the corpus includes on purpose; requirement, criteria and narration wording stays unmatched. Evidence digests include the scanner version, so v1-bound reviews are stale for v2 results.
An independent Codex review found six defects, all reproduced and fixed: invalid YAML in the English skill description, is/는 connectives excusing [object Object], any "variable"/"template" word excusing an unresolved placeholder, JSON parsed from the normalised view or refused after a line break, a shorter domain list than documented, and a 129 ms note-label backtrack (now 2.5 ms).