Решение ППП говорило: агент называется doc-wording, а не task-wording, потому что правила языка относятся ко всем проектным текстам, а не к одним задачам. Утверждение верно и сегодня — оно и есть причина, по которой правила уехали в shared/. Но из общности правила не следует общность прохода: docs и tasks расходятся самодостаточными плагинами, а самодостаточный плагин не может зависеть от агента соседа. ППП отменено, и отменено не по своей оси. Проходов теперь два, и разведены они по охвату — впервые в этом репозитории. И task-form против вычитки, и doc-consistency против doc-code-drift разведены по глубине; здесь глубина одна, а входы разные. doc-wording читает документы канона, конвенции, ADR, записки разведки и CLAUDE.md; task-wording — items/ и строки индексов, а документы проекта открывает только как словарь, чтобы отличить неизвестный термин от известного. Разрез по охвату дублирует устав, и потому весь общий текст стал домом. Оба судят по одним и тем же девяти правилам; отличаются входом, соседями по границе, машинной проверкой, о которой молчат (docs.py против tasks.py), и способом подстановки — команда edit у задач, редактор у документов. Копий в каждом уставе 151 строка, своего непустого текста 61 и 75. Домом стал и формат доклада — блок вычитка-доклад: форма находки, границы покрытия, пустой доклад. Это контракт прохода, а не правило языка, но лежит он в shared/language.md отдельным разделом: заводить под пятнадцать строк отдельный файл дороже, чем назвать раздел честно. Признак дома здесь не тема, а число потребителей больше одного при обязательной дословности — разойдись два прохода формой доклада, зовущий скилл разбирал бы два формата вместо одного. Ссылки разведены в семи местах: tasks/SKILL.md (таблица двух проходов), task-form (описание и обе границы), doc-code-drift, canon.md (сравнение разрезов), canon/SKILL.md, README дважды. doc-consistency и таблицы канона оставлены на doc-wording — они про документы. Гейт зелёный: копии 13 при 7 домах, фронтматтеров 24, диаграммы. Решение — 50. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
21 KiB
Язык проектных текстов
Это дом. Файл не входит ни в один плагин: язык общий для документов канона и
для задач, и хранить его внутри одного из них значило бы отдать общее правило во
владение половине. Плагины везут копии, помеченные разметкой copies.py, и
расхождение ловит гейт коммита, а не внимание.
Правится здесь. Копия, поправленная у себя, — расхождение, а не правка.
Три блока, и делятся они по потребителю, а не по теме:
| Блок | Что в нём | Кто копирует |
|---|---|---|
язык-доктрина |
зачем стиль нужен, что взято сверх устава, что отброшено | справочник языка в плагине |
язык-правила |
девять правил, по которым судят текст | справочник и уставы вычитки |
порог-правки |
когда находка не заводится | справочник, уставы вычитки, task-form |
порог-правки вынесен из правил намеренно: он нужен и тому, кто правил языка не
проверяет вовсе, — а вложенных блоков разметка не знает, и внутри язык-правила
его было бы не забрать отдельно.
Правила — для всего, что пишется словами: задачи и цели, документы канона, решения ADR, записки разведки, сообщения коммитов. Не для кода и не для сообщений программы пользователю — там свои конвенции проекта.
Основа — информационный стиль Максима Ильяхова (учебник бюро, книга «Пиши, сокращай»). Он написан для рекламы, статей и писем, поэтому взят не целиком.
Зачем он здесь
Проектный текст читают в двух положениях, и оба неудобные: выбирают, брать ли задачу, глядя в строку индекса и один экран тела; и возвращаются через квартал, не помня контекста. Оба положения наказывают одно и то же — слова, не несущие сведений. Информационный стиль ровно про это, и его польза здесь не эстетическая: текст, из которого нельзя достать факт, заставляет открывать код, а это и есть цена, которой мы избегаем.
Что взято сверх правил вычитки
Эти три требования судит человек, а не проход вычитки: находка по ним требует увидеть текст целиком, а не фразу.
Полезное действие. У каждого текста есть вопрос, на который он отвечает, и читатель, который этот вопрос задаёт. Не отвечает — не пишется. У задачи это «зачем она нужна» и «что станет наблюдаемо иначе»; у документа канона — его собственный вопрос («что это за система», «как сложено», «почему так решили»). Текст, который не отвечает ни на чей вопрос, сокращается до нуля — это законный исход правки.
Параллельность. Однородное пишется одинаково: пункты списка — одной грамматической формой, разделы одного вида — одним порядком, заголовки одного уровня — одним типом фразы. Разнобой читатель принимает за разницу по существу и ищет её.
Заголовок работает. Заголовок называет содержание раздела, а не тему
вообще: «Что проверяет check», а не «О проверках». Заголовков ставится
столько, чтобы длинный текст можно было просматривать, а не только читать
подряд.
Что отброшено намеренно
Инфостиль написан для текстов, где читателя надо удержать. Проектный текст читают потому, что надо, и держать его нечем. Отсюда три расхождения:
- Парцелляция и рубленые фразы — нет. Приём «Коротко. Ещё короче. Вот так» ломает причинную связь, а в решении и в задаче ценность именно в ней: «поэтому», «иначе», «раз так» несут смысл и остаются.
- Не всякое вводное — мусор. «Если», «иначе», «при таком-то условии», «в отличие от» — это условия и противопоставления, то есть сведения. Режутся вводные, которые не меняют смысл предложения.
- Скобки и точка с запятой остаются. В технической записи скобки несут уточнение — имя команды, единицы, слаг, — и запрет на них удлинил бы текст, а не сократил. Запрет на многоточие принимаем: в проектном тексте оно значит «дописать позже», и такой текст лучше не публиковать.
И общее: инфостиль призывает «снять корону с себя и надеть на читателя». Здесь читатель — ты сам через квартал и тот, кто возьмёт задачу. Писать для них значит называть состояние и остаток, а не пересказывать, как было интересно разбираться.
Правила
У каждого правила названа причина: она же говорит, где правило не применяется.
-
Глагол вместо отглагольного существительного, активный залог. «Обработчик не проверяет владельца», а не «проверка владельца не осуществляется»; «скрипт переписывает индекс», а не «индекс переписывается скриптом». Отглагольное существительное прячет того, кто действует, — а в техническом тексте важен именно он. Страдательный залог остаётся, когда деятель неизвестен или неважен: «файл удаляется» верно, если удаляет любая из трёх команд.
-
Факт вместо оценки. «Время ответа доходит до 800 мс», а не «работает медленно»; «тело 40 МиБ держит блокировку 5 секунд», а не «большие тела тормозят». Оценка допустима, когда факт стоит рядом, в той же фразе. Без факта это настроение, а не сведение, — и находка тем ценнее, что оценку потом не проверить.
-
Стоп-слова. Канцелярит (является, осуществляется, в целях, в рамках, данный, вышеуказанный), вводные-паразиты (в общем, как известно, стоит отметить), усилители (очень, крайне, достаточно, абсолютно, максимально), синонимы одного качества («понятный и простой»), неопределённое (соответствующий, определённый, некоторый).
Проверка одна: вычеркни слово — смысл изменился, оставляй. И осторожно с вводными: «если», «иначе», «при таком-то условии», «в отличие от» несут условие и противопоставление, то есть сведения, — их не трогают.
-
Одна мысль — одно предложение. Предложение с двумя независимыми утверждениями делится. Причинную связь не режут: «поэтому», «иначе», «раз так» — смысл, а не длина; рубленые фразы ради краткости тут вредят.
Поля меты не делятся. «Зачем» в мете задачи по формату — одно предложение: оно повторяется строкой индекса, и второму там не поместиться. Тесно — сокращают, но не делят. То же с любым полем вида
- **Имя:** …. -
Англицизм, у которого есть живое русское слово, заменяется.
Калька Русский аналог флоу поток, процесс, сценарий фикс, зафиксить исправление, исправить, починить чекать проверять апрув, заапрувить согласование, согласовать best-effort по возможности кейс случай, сценарий перформанс производительность матчинг, смэтчить сопоставление, сопоставить зарелизить выпустить, выложить отрефакторить переписать, разделить, убрать второй путь Насильно не переводится то, что является именем вещи: термины технологий и протоколов (
SQL,API,CSV,N+1,IDOR), имена классов, методов, полей, таблиц и команд, слаг, а также термин, у которого нет точного русского эквивалента и который в команде уже прижился.Цель — простой и точный текст, а не пуризм. Русский аналог звучит коряво или искажает смысл — остаётся термин.
-
Слово из своего словаря не трогается — список закрыт. Оговорка «термин прижился» без списка проверяема на глаз и потому не проверяема: прижившимся выглядит любое слово, встреченное трижды.
Термин Что называет интейк заведение записи с фильтром и дедупом: «заведение» называет создание файла, слить их — смешать две операции триаж стадия конвейера, сводящая находки в решение провенанс обязательное свойство числа: чем и при каких условиях получено. «Источник» рядом называет саму запись, а не свойство дедуп, дедупликация сверка нового против уже лежащего чек-лист перечень, по которому идут сверху вниз, называя исход каждой строки дифф, --baseразница между состояниями в git промпт текст, которым зовут модель change, capability, spec сущности OpenSpec, имена вещей чужого инструмента generative, applicative роды проходов ревью, вводятся определением по месту Список закрыт. Слово не отсюда и не из таблицы имён вещей выше — находка, а не «принятый стиль»: у него либо есть живой русский аналог, либо оно требует ввода одной строкой при первом употреблении.
Отсюда же читается снятое. Эти слова из текстов убраны, и возвращать их не надо: конфляция (смешение), декорреляция (разведённость, разведён с кем-то), непоймание (почему не поймали), эвал-сет (проверочный набор), гайд (руководство). Каждое было латинизмом или калькой при живом русском слове, и каждое к моменту снятия жило в трёх-шести файлах разом — то есть выглядело словарём, не будучи им.
-
Жаргон и метафоры заменяются прямым называнием. Автору образ понятен, читателю — нет.
Метафора-жаргон Прямо рычаг (кэша, отбора) условие отбора, параметр навешен не на тот счётчик завязан не на тот счётчик переширокий матчинг по имени слишком грубое сопоставление по имени, слишком много слабых совпадений костыль временное решение, обходной путь — и в чём именно просело, отвалилось стало медленнее на столько-то, перестало отвечать Проверка: фраза требует, чтобы читатель додумал образ, — заменяется буквальным описанием того, что происходит.
-
Термин, которого нет в документах проекта, вводится одной строкой или не употребляется. Термин, не встречающийся ни в паспорте, ни в архитектуре, ни в конвенциях, — свой словарь у отдельной записи, а это самый дешёвый способ сделать беклог нечитаемым для того, кто вернётся к нему через квартал. Заменять незнакомый термин догадкой нельзя: догадка о предметной области дороже непонятного слова, потому что выглядит понятной.
Слово, занятое в другом смысле, — то же нарушение. Термин, который в одном документе проекта значит одно, а здесь другое, ломает оба.
-
Имя файла — английское слово по сути, а не транслит.
queue-as-table, а неochered-tablicej;move-parse-strict, а неrazbor-hoda. Транслит нечитаем тому, кто ищет по смыслу, и не сокращается, а имя стоит в ссылках, коммитах и путях, которые набирают руками. Переименование — перенос ссылок одним проходом, а не правка одного файла.
Порог правки
Правка без нарушенного правила не делается. Текст, переписанный «чтобы звучало лучше», обесценивает список замечаний: когда половина из них вкусовая, перестают читать весь список, и вместе с ним пропадают настоящие находки. Сомневаешься — не правь. Формулировка, которая просто не твоя, — не находка.
Систематичность нарушения — не довод в его пользу. Одна и та же ошибка в пяти файлах не становится «принятым стилем»: чаще это значит, что правило не применялось вовсе, — и находка тем важнее. «Так сделано везде» годится как основание для одной находки на весь набор («правило N нарушено в пяти записях, перечень: …»), но не как основание промолчать. Принятым считается только то, что назвал зовущий или что записано в конвенциях проекта.
И обратное: язык правится по ходу той операции, которая записи касается. Беклог не переписывают ради языка.
Доклад вычитки
Не правило языка, а контракт прохода: форма, в которой находка приходит к человеку. Живёт здесь потому, что проходов вычитки несколько — по одному на плагин, — и разойтись формой они не должны.
Находки по одной, в порядке важности: залог и оценки → жаргон и англицизмы → стоп-слова. Первые меняют, что читатель понимает; последние — только сколько он на это тратит.
<файл>
правило: <номер и короткое имя>
сейчас: <как написано>
предложение: <готовая формулировка, подставляемая как есть>
почему: <одна фраза>
В конце — границы покрытия: сколько файлов просмотрено из скольких, какие не смотрел и почему, и по чему проверялись термины (документы проекта названы или нет). Отчёт без этой строки читается как «всё вычитано», не сообщая, какая часть осталась нетронутой. Туда же — строка «замечено не по моей части»; машинно проверяемое в неё не идёт.
Ничего не нашёл — так и скажи одной строкой. Пустой доклад с границами покрытия полезнее выдуманной находки.