{
"id": "ShariXKnowledgeOpenDevelopmentHumanAIHandoff",
"page": "sharixopen:knowledge:development:human_ai_handoff",
"area": "open",
"type": "policy",
"title": "Как подготовить изменение и инструкцию для оператора",
"status": "review",
"schema_version": 1,
"relations": {
"related_to": [
"ShariXKnowledgeMethodsStart",
"ShariXKnowledgeVerification",
"ShariXKnowledgeOpenOperationsDeploy"
],
"applies_to": [
"ShariXKnowledgeOpenKnowledgeDevelopmentPractice"
]
},
"extensions": {
"taxonomy": {
"domain": "standards",
"lifecycle": "not_applicable",
"parents": [
"ShariXKnowledgeMethodsStart"
],
"terms": [
"audience_developer",
"audience_operator",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"product_shared",
"material_policy",
"topic_development_delivery",
"topic_development_verification"
],
"component": "ShariX Open"
},
"source_evidence": [
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "CODING_POLICY.md",
"sha256": "65136bd597db88bfd4935d18d7eef7c733495169ece42f9de6a53c8008f56e3f"
},
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "bin/repositories.sh",
"sha256": "b763fdd351c71c6c6518253fba871efc7beb6f929badc54d863132fe7acea86e"
},
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "bin/install.sh",
"sha256": "8ac242e26175677742c5c4fdb01780ba8a313e619dd35ea7a03ffc775ffa3b7c"
},
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "bin/utils/install_modes.sh",
"sha256": "e791aa06abfe8ed7ad9264bfeed713f232651bb5ab378d1645cd9db7090eb5a2"
},
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "bin/check_acceptance.sh",
"sha256": "1ae9ac7dbdff2f45b6645ea34d081965d72f4968325c448121f514cf15359610"
},
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "sharix_admin/views/order.py",
"sha256": "fbcea84695251502a6f44e92966d59840db1c43f50a15e33a5adecc5deb420df"
},
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "core/urls.py",
"sha256": "5997b9600b4ef8be878201d83923edc961e881cac2c0245c7486f64d4e35e7e1"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "models/orders.py",
"sha256": "4a5dbbec8a62ed3ca933ae5494032ba2a8a4369c7c1ece4011c98755df23faf2"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/open_order_api.py",
"sha256": "8950a4169a352db3d250c9e08f6de7a4fa2a31985a247541411e20bd224ca2b6"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/ticket_gen.py",
"sha256": "7bdf92007916aec7e968a45f142e5f98fffb5dfe9b61ee7fcae3c65c826dfbde"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/order_actions.py",
"sha256": "27ce243408a46f1b700d94bf78a25c68ef21d51078bb03627174e4a424d82ef0"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/order_permissions.py",
"sha256": "9c1636daa80c4da68c3ae5cf347e279127d142eeff91e969559e8bd54ca3d81d"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/mobile_order_events.py",
"sha256": "818b21d471b629dcae3d96ee089e0f83406a41d03ad36a6c4ddabdf8857f2e68"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/integration_ports.py",
"sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "apiviews/open_api.py",
"sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "urls.py",
"sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"
},
{
"repository": "sharix-open-webservice-running",
"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019",
"path": "models/__init__.py",
"sha256": "32072140482e8edc880432e2537f22d9d00537e318f972b709f221250ef931cf"
},
{
"repository": "sharix-open-webservice-running",
"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019",
"path": "models/local_examples.py",
"sha256": "07ac086d9eb18e0a1d473ed316184d1d924858c966d1722654638034a8bdb36c"
},
{
"repository": "sharix-open-webservice-running",
"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019",
"path": "models/webservice_running.py",
"sha256": "799e5bfe8e0313b60ed5fd515fa7d8381ea12fe6e42ad403b7a5b33e315781c6"
},
{
"repository": "sharix-open-webservice-running",
"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019",
"path": "apiviews/orders_local.py",
"sha256": "b27440115f894f66920abded9d2e5bfb94b630bed16a1c201e422cbc689ee54f"
},
{
"repository": "sharix-open-webservice-running",
"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019",
"path": "serializer/orders_local.py",
"sha256": "7eeac936a02718e0be57328c36991b132fab92511e8a5d140dd50ac8042f37df"
},
{
"repository": "sharix-open-webapp-design-template",
"commit": "8f96190d24c9031125cea5042492be49c4d1bf3a",
"path": "README.md",
"sha256": "2e2f2dc29e03dc33074c9bf674b0ffcc8c2c236d4000dc61127a3dfa4859202b"
},
{
"repository": "sharix-open-webapp-design-template",
"commit": "8f96190d24c9031125cea5042492be49c4d1bf3a",
"path": "docs/component-library.md",
"sha256": "e477c21db25163637cbdbfd09f600a93528bef04121f9fb2c68fc6eb84d5259f"
},
{
"repository": "sharix-open-webapp-design-template",
"commit": "8f96190d24c9031125cea5042492be49c4d1bf3a",
"path": "component_library/catalog.json",
"sha256": "9e34b73b6eaec1f572939879c59b0f6bebe0c95ea2d568104287dffff34c36cf"
},
{
"repository": "sharix-open-webapp-design-template",
"commit": "8f96190d24c9031125cea5042492be49c4d1bf3a",
"path": "forms.py",
"sha256": "ef4984f9f288b1ebaef4b8c9e825b5384ef4b2e6480b3d54ae6beaef0570be8e"
},
{
"repository": "sharix-open-webapp-design-template",
"commit": "8f96190d24c9031125cea5042492be49c4d1bf3a",
"path": "templates/design_template/components/form_field.html",
"sha256": "521f0c9ebbb4f091f45c99b8e1d8ff9841df8cb20434088ae756703937251631"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "models/ticket.py",
"sha256": "4768d9ef47b61bf3ae98bf2749ed142adc477978b44de29177363ba9664baa43"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "signals.py",
"sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "ticket_blockly_codegen.py",
"sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "tools/check_canonical_ticket_codegen.py",
"sha256": "6df939d8d1fa9c2a54a124773d652b46a0e8545159d19da66879a4194a616757"
}
],
"reviewed_on": "2026-10-29",
"editorial_review": {
"date": "2026-10-31",
"scope": "boundary_correction",
"public_boundary": "Публичная Wiki: ShariX Open и передача shared-изменения ответственному Platform. Внутренние действия Platform — intrawiki."
},
"editorial_source_check": {
"date": "2026-10-30",
"repository": "sharix-open-webapp-base",
"commit": "c19e6651449483d898f5ae33548f97c0ef7e1cd2",
"path": "bin/repositories.sh",
"sha256": "b763fdd351c71c6c6518253fba871efc7beb6f929badc54d863132fe7acea86e",
"finding": "update-* допускаются только при ASSEMBLY_KIND=open"
},
"license_boundary_review": {
"date": "2026-10-31",
"scope": "shared не является лицензией; публичная документация не раскрывает реализацию закрытых модулей",
"closed_modules_license_code": "sharix-proprietary-v1"
},
"list_format_review": {
"date": "2026-10-31",
"scope": "Перечисления полей, результатов и проверок оформлены списками; исходники, команды, таблицы, схемы и лицензионные границы сохранены."
},
"classification": {
"schema": "sharix.knowledge.classification.v1",
"products": [
"sharix_open",
"shared"
],
"audiences": [
"developer",
"operator",
"reviewer",
"ai"
],
"material": "policy",
"topics": [
"development/delivery",
"development/verification"
],
"tag_terms": [
"audience_developer",
"audience_operator",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"product_shared",
"material_policy",
"topic_development_delivery",
"topic_development_verification"
],
"registry_document": "ShariXKnowledgeClassification",
"state_meaning": "lifecycle относится к описываемому коду, а status к редакции документа; implemented не означает успешный runtime тест"
},
"classification_review": {
"date": "2026-10-31",
"source": "Содержание текущей страницы и проверенный словарь классификации",
"body_scope": "classification_and_navigation_only"
},
"owner_clarification": {
"date": "2026-11-01",
"basis": "explicit owner instruction",
"scope": "disabled optional modules and immediate subject-documentation updates",
"runtime_claim": false
}
},
"content_sha256": "62ca90aaf5770d9b02fdf475582b0170744d91fda469864fee1996c74badabee",
"schema": 1
}
====== Как подготовить изменение и инструкцию для оператора ======
~~NOCACHE~~
**Назначение:** [[sharixopen:knowledge:classification:materials#politika_i_pravila|Политика и правила]]. **Продукт:** [[sharixopen:knowledge:classification:products#sharix_open|ShariX Open]] · [[sharixopen:knowledge:classification:products#obschij_komponent|Общий компонент]].
**Для кого:** [[sharixopen:knowledge:classification:audiences#razrabotchik|Разработчик]] · [[sharixopen:knowledge:classification:audiences#operator_razvjortyvanija|Оператор развёртывания]] · [[sharixopen:knowledge:classification:audiences#recenzent_i_prijomschik|Рецензент и приёмщик]] · [[sharixopen:knowledge:classification:audiences#nejroset|Нейросеть]].
**Темы:** [[sharixopen:knowledge:classification:topics#peredacha_izmenenij|Разработка → Передача изменений]] · [[sharixopen:knowledge:classification:topics#proverka|Разработка → Проверка]].
Человек, получающий исправление, должен понимать, какой файл взять, к какой версии он подходит, где выполнить команды и как определить результат. Подготовка патча заканчивается цельной поставкой:
* сам патч;
* полный сценарий применения;
* сведения о выполненных проверках.
Эта страница задаёт порядок передачи. Конкретная поставка должна содержать команды для своей базы и фактических каталогов. Установка приложения описана в [[sharixopen:knowledge:operations:deploy|отдельной процедуре]].
===== Что выяснить перед подготовкой =====
* Какая часть ShariX Open меняется: корневое приложение, отдельный модуль или общий (shared) компонент.
* Какие репозитории содержат изменение, их ветки и исходные commits.
* Какие предыдущие патчи уже применены и опубликованы. Не готовить повторное применение того же изменения.
* Какая установка будет обновляться, где она находится, какие данные и модули затрагиваются.
* Какие права нужны человеку для применения и какие действия выполнит администратор.
Старую карточку и расшифровку сверяют с текущим кодом. Если нужного checkout нет, проверка похожего продукта не заменяет его. Сначала читают актуальные README, CODING_POLICY, AGENTS и инструкции Wiki относящихся к работе репозиториев.
===== Что можно включать в публичную поставку =====
Проверить LICENSE каждого репозитория и отметить отдельно:
* открыт ли код;
* является ли модуль общим;
* где он используется.
Эти признаки не заменяют друг друга. Конструктор сервиса и другие отдельно лицензируемые закрытые компоненты не являются открытым ядром только потому, что установлены рядом с ним.
В публичную Wiki, открытый патч, архив исходников, граф и иллюстрацию не включают закрытый код или непубличные детали. Внутренняя поставка закрытого компонента требует разрешённого доступа и выполняется по его собственным инструкциям в intrawiki. Публичный сценарий заканчивается обозначением границы и передачей вопроса ответственным Platform.
Проверять нужно фактическое содержимое файлов, а не только названия и .gitignore. Ссылка на закрытый элемент в общем UI-каталоге также не делает его реализацию публичной. Перечень — [[sharixopen:knowledge:architecture:model_ownership|закрытые компоненты и их границы]].
===== Какие файлы передать =====
Патч ShariX Open содержит пути относительно корня установки и перечисляет затронутые репозитории. В публичную поставку включается только разрешённый к открытому распространению общий код, который публикуется в своём репозитории. Для закрытого общего модуля действует отдельный внутренний порядок. После публикации shared-изменения нужно оповестить ответственного Platform для проверки, тестирования и принятия по intrawiki. Инструкция ShariX Open не включает команды, пути и собственные патчи другого продукта. Независимый компонент, например Moodle-плагин, получает отдельную поставку при соответствующем задании.
В архив вместе с патчем включают полный сценарий применения. На сценарий дают отдельную ссылку. В нём должны быть следующие сведения:
^ Раздел сценария ^ Что указать ^
| База и состав | Исходные commits каждого репозитория, список файлов, зависимость от предыдущих этапов и совместимость с ними. |
| Подготовка | Нужные доступы, резервные копии, состояние репозиториев и способ переноса файлов. |
| Проверка до изменения | Точные каталоги и команды проверки применимости патча к этой базе, включая затронутые вложенные репозитории. |
| Применение | Команды записи, необходимые миграции, переводы, статика и синхронизация конфигурации именно для этого изменения. |
| Публикация и передача | Какие репозитории и commits публикуются; какие сведения после публикации передать ответственному Platform, если изменён shared-модуль. |
| Запуск и приёмка | Кто выполняет действия, какая служба затрагивается, ожидаемый результат и способ его проверки. |
| Остановка и восстановление | При каких ошибках прекратить выполнение, что сохранить и как вернуться к согласованному состоянию. |
Распаковка исходников поверх работающего checkout и новый самодельный установщик не заменяют штатный порядок. Оператор переносит патчи в ''/tmp'', поэтому в его командах указывают ''/tmp/ИМЯ.patch''. Автор отдельно сообщает, что файлы подготовлены локально, а перенос на сервер выполняет оператор. Изображения после серверного обновления загружает агент через согласованный API; оператору не поручают установку иллюстраций или запуск клиентского CLI для неё.
===== Как сделать инструкцию связной =====
В начале назвать фактический каталог и пользователя. Для ShariX Open подтверждён ''/opt/sharix-open-webapp-base''; другой путь нужно выяснить у владельца этой установки. Имена SSH-хостов, служб, веток и БД берут из действующей конфигурации. Если значение неизвестно, указать, где его получить, а не придумывать пример как готовую команду.
Каждый следующий шаг использует результат предыдущего. Если нужно ввести параметр, объяснить его назначение и последующее использование. Все упомянутые файлы должны входить в поставку или иметь точный способ получения. Рядом с действием указывается, под кем его выполнить: deploy и root выполняют разные части процедуры.
В конце выделить три группы:
* **Выполнено автором.**
* **Выполняет оператор.**
* **Не проверено.**
Указать наблюдаемое изменение для пользователя и ожидаемые сообщения оператора. Наличие diff или успешного импорта Python не заменяет эти сведения.
===== Порядок применения подготовленного патча =====
- Сохранить необходимые резервные копии и согласовать окно работы, если меняются схема или данные. Проверить затронутые репозитории и отсутствие незавершённых Git-операций.
- Оператор размещает файлы в ''/tmp'' и под назначенным deploy login переходит в фактический каталог установки.
- Выполняет проверки применимости из сценария. Для патча нескольких репозиториев одной проверки корневого Git недостаточно. При несовпадении фрагмента или появлении ''.rej'' останавливается и передаёт состояние автору поставки.
- Применяет изменение, проверяет результат и публикует согласованный набор репозиториев штатным ''repositories.sh''. Если в ShariX Open используются отдельные ветки развёртывания — следует порядку ''update-start → update-publish → update-finish''. Подробнее: [[sharixopen:knowledge:development:repository_flow|передача общего кода]].
- После публикации shared-изменения автор оповещает ответственного Platform и передаёт commits, результаты проверок и условия совместимости. Ответственный выполняет проверку, тестирование и принятие в общий код по intrawiki; эти действия не продолжают публичный сценарий ShariX Open.
Для уже подготовленных исходников обычные фазы под deploy login выглядят так:
./bin/install.sh deploy --strict --use-current-checkouts --permissions=check --deps=auto --no-restart &&
./bin/install.sh restart &&
./venv/bin/python manage.py check &&
./bin/check_acceptance.sh --with-runtime-audit
Блок выполняется из фактического корня установки. Назначение команд и параметров:
* ''deploy'' — готовит зависимости, конфигурацию, схему и данные согласно установщику.
* ''--use-current-checkouts'' — Git не обновляется этим запуском.
* ''--no-restart'' — перезапуск откладывается до следующей команды.
* ''&&'' — последовательность прекращается при ошибке.
Успех подготовки ещё не означает, что приложение запущено.
Точный сценарий указывает нужные миграции, переводы и статику и учитывает, что уже делает deploy. Новые файлы миграций не генерируют автоматически на рабочем сервере вместо подготовленной разработки.
===== Если запуск или проверка не удались =====
При сообщениях ''Restart permissions are not installed'' или ''Runtime state needs its managed isolated directory'' сверяют текущую процедуру: нужный штатный root ''activate --strict --use-current-checkouts --permissions=check'' подготавливает каталоги и разрешения. Затем выполняется новый deploy login и повтор только restart. Полная установка, рекурсивное исправление прав, ручной chmod или создание симлинков не подставляются вместо выяснения этой причины.
HTTP-диагностика после restart рекомендательная. Таймаут, сетевой отказ или HTTP-код сохраняются как WARNING и исследуются отдельно от результата перезапуска. Ошибки состояния службы, прав и проверки исходников блокируют продолжение. Имя systemd unit берут из конфигурации этой установки, а не из hostname.
При ошибке патча, конфликте исходников или незавершённой миграции не переходят к следующей фазе. Сначала фиксируют выполненные шаги и состояние. Обратное применение патча проверяют заново; восстановление БД может потребовать резервной копии и отдельного плана. ''reset --hard'', удаление файлов и повтор записи с неизвестным результатом не являются универсальным восстановлением.
===== Для нейросети: что проверить в собственном результате =====
- Проследить изменение от маршрута и формы/API до функции, модели, событий и вызывающих модулей. Найти существующую реализацию и библиотечный UI-элемент перед созданием новых.
- Сохранять ответственность за данные у их модуля. Для обработчиков изменять Blockly-модель, генерировать Python и проверять соответствие. В сценариях учитывать пользователя, API, таймеры и события; BPMN описывает их, а не исполняется просмотрщиком Wiki.
- Прочитать свою инструкцию как получатель: все ли файлы доступны, связаны ли шаги, совпадают ли пути, названы ли пользователи и условия остановки.
- Дать реальные ссылки на подготовленные файлы. Не заявлять серверную проверку по локальному результату или по другому продукту, не скрывать предупреждения и не включать дополнительные действия без поручения.
===== Как обновить документацию =====
Уточнить README нужного модуля, его описание в Wiki и контекстную справку изменённой страницы по роли пользователя. Учебные объяснения и примеры кода относятся к Moodle. Перед публикацией перечитать текущую страницу, сохранить правки других авторов, выполнить preview и сравнить сохранённый текст повторным чтением.
Обновления Wiki обычно сопровождаются одним обзором этапа со ссылками. Если владелец просит выполнить редактуру без уведомлений, это указание применяется к этому проходу. Общие правила подтверждения результата — [[sharixopen:knowledge:development:verification|приёмка изменений]].
===== Проверенная исходная база: 29.10.2026 =====
Проверены опубликованные исходники указанных ревизий. Это source-анализ; он не подтверждает применённую версию, конфигурацию или успешный сценарий конкретного сервера.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base/src/commit/f65376cdb5a3ac68a55d04f4c19493137e5a290b/CODING_POLICY.md|sharix-open-webapp-base: CODING_POLICY.md]] — f65376cdb5a3.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base/src/commit/f65376cdb5a3ac68a55d04f4c19493137e5a290b/bin/repositories.sh|sharix-open-webapp-base: bin/repositories.sh]] — f65376cdb5a3.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base/src/commit/f65376cdb5a3ac68a55d04f4c19493137e5a290b/bin/install.sh|sharix-open-webapp-base: bin/install.sh]] — f65376cdb5a3.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base/src/commit/f65376cdb5a3ac68a55d04f4c19493137e5a290b/bin/utils/install_modes.sh|sharix-open-webapp-base: bin/utils/install_modes.sh]] — f65376cdb5a3.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base/src/commit/f65376cdb5a3ac68a55d04f4c19493137e5a290b/bin/check_acceptance.sh|sharix-open-webapp-base: bin/check_acceptance.sh]] — f65376cdb5a3.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/ticket_blockly_codegen.py|sharix-open-handlers-backend: ticket_blockly_codegen.py]] — 50baf376e224.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/tools/check_canonical_ticket_codegen.py|sharix-open-handlers-backend: tools/check_canonical_ticket_codegen.py]] — 50baf376e224.
===== Уточнение команд: 30.10.2026 =====
В [[https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base/src/commit/c19e6651449483d898f5ae33548f97c0ef7e1cd2/bin/repositories.sh|bin/repositories.sh]] функция require_open_update_mode разрешает update-* только ShariX Open. Эти команды относятся к процедуре ShariX Open.
===== Уточнения владельца сразу фиксируются в документации =====
По поручению владельца от 01.11.2026 новое согласованное требование, меняющее продуктовый контракт, права, границы модулей, workflow или применимость проверок, сразу заносится в соответствующую предметную Wiki в рамках того же задания. Правило не должно оставаться только в переписке до следующего прохода.
В том же изменении устранить противоречия затронутых AGENTS.md, CODING_POLICY и README. Более позднее явное уточнение владельца имеет приоритет перед устаревшим локальным текстом. Учебные объяснения остаются в Moodle; предметные правила использования и разработки — в Wiki.
Отдельно обозначать согласованный контракт, подготовленное изменение исходников и проверенный результат установки. Перед записью перечитать текущую страницу и сохранить чужие изменения; после preview/publish выполнить GET/hash-сверку и предусмотренное уведомление со списком страниц и ссылками. Запись правила в Wiki не является разрешением на deploy и не подтверждает серверную приёмку.
~~SHARIX_KNOWLEDGE_RELATED~~