Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/Desko77/cursor-1c-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/rules/desko77/cursor-1c-skills/code-review-checklist)<a href="https://agentmods.dev/rules/desko77/cursor-1c-skills/code-review-checklist"><img src="https://agentmods.dev/badge/rules/desko77/cursor-1c-skills/code-review-checklist/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/rules/desko77/cursor-1c-skills/code-review-checklist"><img src="https://agentmods.dev/badge/rules/desko77/cursor-1c-skills/code-review-checklist.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00000 | $0.04024 |
| Opus 5.5 | $0.00000 | $0.01610 |
| Sonnet 5.5 | $0.00000 | $0.00805 |
| Haiku 4.5 | $0.00000 | $0.00402 |
Grade A, and why
code-review-checklist scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 21d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 206 lines — stays where its author put it; the contents beside it link to each section on GitHub.
1C Code Review Checklist
Применяется: при ревью кода 1С (*.bsl, *.os).
Классификация находок
Critical - блокировать коммит
- Синтаксические ошибки
- SQL injection (конкатенация строк в запросе вместо параметров)
- Риск порчи данных
- Пробои безопасности (hardcoded пароли, обход RLS)
- Операции >10с без оптимизации
- Нарушения БСП с breaking changes
High - исправить до merge
- Логические ошибки
- Отсутствие обработки ошибок (пустой Исключение)
- N+1 запросы (запрос в цикле)
- Отсутствие индексов на фильтруемых полях
- Недостаточный контроль доступа (нет проверки прав)
- Дублирование кода >50 строк
- Цикломатическая сложность >15 (количество независимых путей выполнения в функции)
Medium - исправить в спринте
- Нарушение конвенций именования
- Отсутствие документации экспортных функций
- Субоптимальные алгоритмы
- Code smells (God-модуль, длинные функции >200 строк)
- Незначительные отклонения от БСП
- Проблемы с тестируемостью
Low - технический долг
- Форматирование
- Стиль комментариев
- Именование переменных
- Мелкие оптимизации
- Возможности для рефакторинга
Каталог дефектов
Секция генерируется tools/gen_catalog_index.py по карточкам каталога скила
1c-code-review; между маркерами не правится. Перевод важности карточек в действия
ревью - skills/1c-code-review/references/severity.md.
| Группа | Идентификатор | Важность | Триггер |
|---|---|---|---|
| CLIENT | CLIENT-01 | Major | Из клиентской процедуры подряд вызывается несколько серверных функций для одной операции |
| CLIENT | CLIENT-02 | Major | Серверная функция модуля формы с директивой НаСервере не обращается к реквизитам формы |
| CLIENT | CLIENT-03 | Major | В цикле клиентской процедуры вызывается серверная функция |
| CLIENT | CLIENT-04 | Major | Для сообщения пользователю вызывается Сообщить() вместо ОбщегоНазначения.СообщитьПользователю |
| CLIENT | CLIENT-05 | Major | В клиентском коде вызван синхронный или модальный метод: Вопрос, Предупреждение, ОткрытьЗначение, семейство Ввести, синхронные методы HTTPСоединения - либо оператор Перейти в клиентском модуле |
| EXT | EXT-01 | Major | Тело заимствованной процедуры расширения изменено напрямую, без перехватчика |
| EXT | EXT-02 | Critical | Перехватчик &Вместо не вызывает ПродолжитьВызов(), и полная замена типового метода не заявлена в шапке как намеренная |
| EXT | EXT-03 | Minor | Процедура расширения названа без префикса расширения |
| EXT | EXT-04 | Major | В Rights.xml роли расширения есть блок прав вида Enum.ИмяПеречисления |
| FORM | FORM-01 | Critical | Локальная переменная объявлена с именем реквизита формы и получает значение |
| FORM | FORM-02 | Major | Правка формы оставила ссылку на удаленное: обработчик события указывает на отсутствующий в модуле метод, элемент не имеет пути к данным после удаления реквизита, код модуля обращается к удаленному элементу через Элементы |
| META | META-01 | Major | У двух объектов метаданных в исходниках один и тот же uuid |
| MODEL | MODEL-01 | Minor | Более четырех уровней вложенности условий и циклов в одной процедуре |
| MODEL | MODEL-02 | Critical | Набор записей с замещающей записью Записать(Истина) получает отбор не по всем ключевым измерениям регистра |
| MODEL | MODEL-03 | Major | Виды характеристик создаются программно или регистры подсистемы свойств пишутся напрямую, минуя ее программный интерфейс |
| MODEL | MODEL-04 | Major | Отказ операции возвращается выходным параметром-флагом или структурой результата, а вызывающий код продолжает работу без его проверки |
| MODEL | MODEL-05 | Minor | Параметр-коллекция (структура, массив, таблица значений) объявлен без Знач, хотя метод ее не изменяет |
| MODEL | MODEL-06 | Minor | Набор функций-помощников, каждая читает из одного и того же ответа одно поле и приводит его к нужному типу |
| MODEL | MODEL-07 | Major | Ячейка табличного документа читается методом Получить(), которого у типа ТабличныйДокумент нет |
| MODEL | MODEL-08 | Major | У объекта ПараметрыЗаписиJSON, созданного без аргументов, значение задается присваиванием свойству |
| MODEL | MODEL-09 | Minor | Выборка запроса в цикле собирается в массив структур с теми же полями, что и список полей запроса |
| MODEL | MODEL-10 | Major | Ключ соответствия строится склейкой нескольких значений в строку через разделитель |
| MODEL | MODEL-11 | Minor | Обращение к реквизиту собственной конфигурации обложено проверкой его наличия через метаданные |
| MODEL | MODEL-12 | Minor | Результат вызова своей функции читается через точку в нескольких местах метода вместо сохранения в переменную |
| MODEL | MODEL-13 | Minor | Во всех точках вызова метод получает одно и то же значение параметра, а умолчания в сигнатуре нет |
| MODEL | MODEL-14 | Major | Цепочка Если-ИначеЕсли из трех и более веток по значению или типу не имеет ветки Иначе |
| MODEL | MODEL-15 | Major | Полю ссылочного типа присваивается примитив: пустая строка, ноль или булево |
| MODEL | MODEL-16 | Critical | Правка удаляет метод модуля, а вызовы его из других процедур того же модуля остаются |
| MODEL | MODEL-17 | Major | В сравнении или арифметике слева и справа стоит одно и то же выражение: Если А = А, Итог - Итог, Сумма / Сумма; в конкатенации два плюса подряд; переменной присваивается она сама |
| MODEL | MODEL-18 | Major | Блок Исключение пуст или завершается без записи в журнал регистрации и без повторного вызова исключения |
| MODEL | MODEL-19 | Major | Тело регламентного задания выполняет записи без защиты от повторного запуска: документы и движения создаются заново при каждом выполнении, нет отбора необработанных данных и проверки уже созданных записей |
| MODEL | MODEL-20 | Major | Обработчик ПриЗаписи, ПередЗаписью или набора записей выполняет побочные действия - заполнение реквизитов, движения, сообщения, вызовы внешних сервисов - без выхода при ОбменДанными.Загрузка |
| MODEL | MODEL-21 | Major | Серверный код датирует бизнес-операцию вызовом ТекущаяДата() без параметров |
| MODEL | MODEL-22 | Major | Внутри цикла Для Каждого по коллекции вызывается удаление элемента этой же коллекции: Строки.Удалить(Строка) |
| PERF | PERF-01 | Critical | В цикле создается Новый Запрос или выполняется Выполнить() на каждой итерации |
| PERF | PERF-02 | Critical | У ссылочной переменной подряд читается несколько реквизитов через точку |
| PERF | PERF-03 | Minor | В цикле вызывается функция с одинаковыми аргументами, результат не сохраняется |
| PERF | PERF-04 | Minor | Два вложенных цикла ищут совпадение ключей между коллекциями |
| PERF | PERF-05 | Minor | Внутри цикла читается константа или разыменовывается предопределенный элемент, хотя значение не зависит от итерации |
| PERF | PERF-06 | Minor | НайтиПоНаименованию или НайтиПоКоду ищет элемент, от которого зависит работа механизма |
| PERF | PERF-07 | Major | Код получает имя временного файла или строит свой путь в каталоге временных файлов, пишет туда и завершает работу без удаления |
| PERF | PERF-08 | Major | Создается соединение с внешним ресурсом - HTTPСоединение, FTPСоединение, WSОпределения, WSПрокси, ИнтернетПочтовыйПрофиль - или вызывается ожидание завершения фонового задания без ограничения времени ожидания |
| PERF | PERF-09 | Major | Интерактивный вызов выполняет обработку, рассчитанную на большой объем данных: серверный метод формы или обработки в одном вызове обходит тысячи записей, строит большие отчеты, читает внешние сервисы - без запуска фонового задания и индикации прогресса |
| PROC | PROC-01 | Major | В отчете заявлено выполнение проверки (проверено, работает, исправлено) без команды прогона и его результата |
| PROC | PROC-02 | Major | Вывод "код компилируется" сделан по загрузке или выгрузке конфигурации, валидатору XML или анализатору, который модули не компилирует |
| PROC | PROC-03 | Major | Правка удаляет из исходного кода проверки редких и граничных случаев, а добавленные операции записи выполняются без чтения результата |
| QUERY | QUERY-01 | Critical | В списке полей SELECT стоит вложенный ВЫБРАТЬ в скобках |
| QUERY | QUERY-02 | Major | Условие на измерение виртуальной таблицы стоит в ГДЕ, а не в параметрах таблицы |
| QUERY | QUERY-03 | Major | Запрос без ПЕРВЫЕ читает таблицу целиком, когда обработка использует часть строк |
| QUERY | QUERY-04 | Major | Через точку читается поле составного типа без ВЫРАЗИТЬ |
| QUERY | QUERY-05 | Minor | Из ссылки в списке полей читается Наименование только ради отображения |
| QUERY | QUERY-06 | Major | В разделе ИЗ соединение выполняется с вложенным ВЫБРАТЬ в скобках |
| QUERY | QUERY-07 | Major | В разделе ИЗ соединение выполняется напрямую с виртуальной таблицей |
| QUERY | QUERY-08 | Major | Условия одной таблицы в ГДЕ соединены через ИЛИ по разным полям |
| QUERY | QUERY-09 | Minor | Пакеты объединены через ОБЪЕДИНИТЬ без слова ВСЕ при отсутствии дубликатов |
| QUERY | QUERY-10 | Major | Условия ГДЕ заданы по полям, пропускающим первые поля индекса таблицы |
| QUERY | QUERY-11 | Minor | Ограничение выборки задано отбором настроек СКД, текст запроса набора без условия |
| QUERY | QUERY-12 | Minor | Из полей правой таблицы ЛЕВОГО СОЕДИНЕНИЯ значения читаются без ЕСТЬNULL |
| QUERY | QUERY-13 | Major | Таблица значений со строковой колонкой без КвалификаторыСтроки передается параметром в запрос и соединяется с таблицей базы |
| QUERY | QUERY-14 | Critical | В разделе ГДЕ стоит вложенный ВЫБРАТЬ, ссылающийся на поле внешнего запроса |
| QUERY | QUERY-15 | Major | Временная таблица помещена без ИНДЕКСИРОВАТЬ ПО и в том же пакете участвует в соединении по этим полям |
| QUERY | QUERY-16 | Critical | Псевдоним поля или таблицы в запросе совпадает со служебным словом языка запросов |
| QUERY | QUERY-17 | Major | Псевдоним источника в запросе совпадает с именем колонки или табличной части, видимыми в том же запросе |
| QUERY | QUERY-18 | Minor | В запросе стоит ПЕРВЫЕ N, а секции УПОРЯДОЧИТЬ ПО нет |
| SEC | SEC-01 | Critical | Значение подставляется в текст запроса сложением строк вместо параметра |
| SEC | SEC-02 | Critical | УстановитьПривилегированныйРежим(Истина) или метод привилегированного общего модуля читает либо изменяет данные, состав которых задан параметрами от пользователя, и результат уходит пользователю или изменение делается от его имени - без явной проверки права до операции |
| SEC | SEC-03 | Critical | В коде встречается пароль, токен или ключ строковым литералом |
| SEC | SEC-04 | Major | Данные из файла, HTTP-сервиса или другой базы используются без проверки структуры и типов |
| SEC | SEC-05 | Major | Строка из внешних данных конкатенацией собирается в HTML-документ или поле HTML формы |
| SEC | SEC-06 | Critical | На сервере выполняется код или программа, не входящая в конфигурацию: Выполнить или Вычислить над строкой, собранной из внешних данных; подключение внешней компоненты; запуск внешнего приложения или команды системы - без безопасного режима и без проверки входных данных |
| TXN | TXN-01 | Major | НачатьТранзакцию() вызывается внутри блока Попытка |
| TXN | TXN-02 | Major | Между НачатьТранзакцию() и Попытка стоят операторы |
| TXN | TXN-03 | Major | После ЗафиксироватьТранзакцию() внутри Попытка стоят еще операторы |
| TXN | TXN-04 | Major | В блоке Исключение до ОтменитьТранзакцию() стоят другие операторы |
| TXN | TXN-05 | Major | Блок Исключение кода с транзакцией завершается без ВызватьИсключение |
| TXN | TXN-06 | Major | Внутри ПередЗаписью, ПриЗаписи или ОбработкаПроведения вызывается НачатьТранзакцию() |
| TXN | TXN-07 | Major | БлокировкаДанных устанавливается после чтения данных, по которым принимается решение |
| TXN | TXN-08 | Minor | Блокировка устанавливается без значений отбора или по всей таблице |
| TXN | TXN-09 | Major | Две операции захватывают одни и те же ресурсы в разном порядке |
| TXN | TXN-10 | Major | Между НачатьТранзакцию() и ЗафиксироватьТранзакцию() выполняются диалоги, обращения к внешним системам или запись в файлы |
| TXN | TXN-11 | Major | Запись документа и его проведение объединены в одну явную транзакцию |
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 21d ago Changed · +94 lines 8dfde08b53c3
- 1mo ago First seen · 112 lines · 0 tokens per session scan A a783d2173e08
code-review-checklist is a cursor rule published in the GitHub repository Desko77/cursor-1c-skills (69 stars, last pushed 12d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 4,024 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other cursor rules, from other repositories
jsdoc
A set of JSDoc rules for documenting JavaScript or TypeScript code, with comments written in Russian.
project-context
Technical context for a VS Code extension that exposes 1C Platform Tools to AI agents through an MCP server. The extension communicates with the standalone server over IPC, while the server registers one agent tool for each available 1C command.
naming-abbreviations
A set of project rules for naming 1C Platform Tools and its MCP tools. It defines allowed short forms and limits the combined server and tool name to 60 characters.
code-style
Project rules for code style, commit messages, comments, interface text, logs, TypeScript, and documentation. They require Russian text in user-facing and code-comment contexts, along with strict TypeScript practices.
ponytail
Ponytail, lazy senior dev mode. Always pick the simplest solution that works.
angular-20
This rule provides comprehensive best practices and coding standards for Angular development, focusing on modern TypeScript, standalone components, signals, and performance optimizations.