[2026-11-14] eagle: personal/projects/personal-os/personal-os-action-plan-2026-10-05.md personal/projects/personal-os/personal-os-fixes-2026-11-13.md personal/projects/personal-os/personal-os-production-acceptance.md personal/projects/personal-os/personal-os-repeat-audit-2026-11-13.md
This commit is contained in:
1 parent
ce32e19411
commit
905855daf3
4 files changed
+16
-6
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# Personal OS — план действий E1–E5
|
||||
|
||||
Текущее исполнение A01–A17: [журнал исправлений и оставшаяся приёмка](personal-os-fixes-2026-11-13.md), [повторный независимый аудит](personal-os-repeat-audit-2026-11-13.md), [актуальная приёмка](personal-os-production-acceptance.md). E4v186/E5v188 опубликованы; четыре расписания переключены на Windmill13ноября. Штатный production `22b4e60b-974a-4fe2-ae64-2b8f74ec3420` без подставленного proposal завершён: ranked, rejected0, все39 действий обсуждений сохранены. Python/SQL-домен и Windmill-оркестрация подтверждены. Полная рабочая приёмка остаётся открытой: две удержанные работы после частично успешного scoped A17 flow1c5085d8…, повторная публикация исправления неизвестной ёмкости после failed190491d9…, Outlook, сценарии открытого дня/доставки и пять реальных дней. UI8/8 и полный Node305/305, Python199/199 прошли; host безопасно перезагружен14ноября13:59:36Z. Пилот0/5. Ниже сохранён план и история его уточнений.
|
||||
Текущее исполнение A01–A17: [журнал исправлений и оставшаяся приёмка](personal-os-fixes-2026-11-13.md), [повторный независимый аудит](personal-os-repeat-audit-2026-11-13.md), [актуальная приёмка](personal-os-production-acceptance.md). E4v186/E5v188 опубликованы; четыре расписания переключены на Windmill13ноября. Последний штатный production `7542cd0a-3d15-4769-83ee-57a9ea498cf5` без подставленного proposal завершён за61,828с: ranked, rejected0, все38 незакрытых действий обсуждений сохранены. Неизвестная субботняя ёмкость удерживает действия без слотов; все29сверок/145мин остаются backlog. Python/SQL-домен и Windmill-оркестрация подтверждены. Полная рабочая приёмка остаётся открытой: две удержанные работы после частично успешного scoped A17 flow1c5085d8…, восстановление A17 после исправления пустого шаблона, Outlook, сценарии открытого дня/доставки и пять реальных дней. UI8/8 и полный Node305/305, Python199/199 прошли; host безопасно перезагружен14ноября13:59:36Z. Пилот0/5. Ниже сохранён план и история его уточнений.
|
||||
|
||||
## Уточнение плана после независимого аудита 13 ноября
|
||||
|
||||
|
||||
@@ -15,9 +15,15 @@
|
||||
|
||||
- Штатный dispatcher без подготовленного proposal создал `190491d9-0ce1-4ce7-8b53-2a212c4c76db` (E5v187). Job завершился failed за60,533с на host_persist `01a1da71-8752-4ea8-bca1-19df8a3c33a1`; прежний latest-plan не перезаписан. Защита публикации обнаружила три человеческих действия по15мин без временных слотов при неизвестной субботней ёмкости.
|
||||
- Причина воспроизведена на точном сохранённом input/context/rank. Python `day_constraints.py` теперь удерживает все такие кандидаты с human_capacity_unknown:3 выбранных →0,32 работы и29 сверок остаются видимыми. Произвольный бюджет субботы не введён. Независимые replay/verify_execution/validate_publication прошли. Диагностика сохраняет только фиксированные guard/admission_reason без свободного текста источников.
|
||||
- Объединённый кандидат E5v188 принят независимым ревью;199Python PASS и diagnostic10PASS. Подготовка метаданных `01a1da7c-a0cd-f01b-a8e2-e8a33a199ee8` завершена; E5v188 опубликован14:38:33Z. GET подтвердил21host и2day_constraints копии. Зависимости не изменены. Новый штатный dispatcher-run ожидает завершения активного refresh и безопасного обновления host; успешный повторный production пока не утверждается.
|
||||
- Объединённый кандидат E5v188 принят независимым ревью;199Python PASS и diagnostic10PASS. Подготовка метаданных `01a1da7c-a0cd-f01b-a8e2-e8a33a199ee8` завершена; E5v188 опубликован14:38:33Z. GET подтвердил21host и2day_constraints копии. Зависимости не изменены. Новый штатный dispatcher-run `7542cd0a-3d15-4769-83ee-57a9ea498cf5` завершён success=true за61,828с, только mode=production. Три версии плана совпали SHA и UUID; все38 незакрытых обсуждений сохранены,32кандидата held_unknown_capacity,29сверок/145мин backlog, назначений безслотов0. Независимое рабочее ревью принято; prepare.changed=false, новогоартефакта/второгопрохода не было.
|
||||
- A17 scopedflow `1c5085d8-9fe6-4f71-8eb2-e74cc07b946d`: success=true, status=partial,743,532с. Работы `305821cf-6338-4416-86ed-797945d13704` и `9213372b-44ca-453b-9ad5-a33ba3c57a4f` succeeded. `45f02c3f-c190-4cca-ae1f-48d658ffc8b1` held4/17 из-за требования модели предоставить отсутствующий текст пустого шаблона; `842dc8d4-cbae-4d2e-829c-55e7314a13bd` retry0/14 после небуквальной цитаты. Валидатор не ослаблен; bounded Python feedback для первого случая принят независимым ревью,39целевых тестов PASS. Однократный запрос защищён durable reservation до модели; host пока занят, reload и retry не выполнены.
|
||||
|
||||
## Рабочая проверка после v188
|
||||
|
||||
- Headless read-only UI14:46:28Z: API200, план held/plan_not_admitted с UUID `7542cd0a-3d15-4769-83ee-57a9ea498cf5`,39карточек обсуждений,0ошибок JS. Панель показывает неизвестную ёмкость,256удержаний,13ожиданий и145мин backlog ревью; незапланированные действия не показаны как готовые к исполнению.
|
||||
- В двух завершённых A17 работах: `9213372b…` обновлено5и добавлен1кандидат (14→15); `305821cf…` обновлён1кандидат (29→29). Все44текущих claims остаются candidate, accepted0; решений пользователя не было. `842dc8d4…` прошёл обычную коррекцию буквальной цитаты и продвинулся1/14.
|
||||
- Штатный refresh14:30 `01a1da5b-9f6a-667d-15a6-4f8b77b7ff54` завершён за677,651с. По exactjournal это9chunks одного164-record обсуждения, а не9повторов одного модельного запроса. При одинаковой подтверждённой семантике отрицательных проверок текущая revision отличается служебной диагностикой: publisher не узнаёт уже проверенный cache. Устранение повторного анализа ещё проходит реализацию/ревью; sourcehold не снят по предположению.
|
||||
|
||||
## Реализованные изменения
|
||||
|
||||
- A01–A03, A12, A16: входящие адресные обязательства без предварительного ответа; атомарные действия разных типов; единый жизненный цикл accept/reject/complete/cancel/wait/defer/reopen/optional с revision и историей. Ручные решения не переписываются запоздавшей моделью. Проверка завершения требует точного артефакта и автора; неоднозначное закрытие остаётся на проверке. Связь с Asana необязательна. Для Next TP требуется подтверждённое авторство, назначенный исполнитель не считается автором комментария.
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
|
||||
- В22:19 Бишкек13ноября четыре прежних LaunchAgent отключены и выгружены после проверки отсутствия работающих PID. Включены четыре расписания E5 с no_flow_overlap: production15мин, Clarify15мин по будням08:00–18:45, source-observer5мин, discussion-refresh30мин. Production дополнительно проверяет рабочее окно; автоматический Clarify повторно проверяет часы до модели. Сборщики Asana, claims, Zoom и Mattermost не отключались. Резервные копии и квитанции: `.local/acceptance-pilot/cutover-2026-11-13/`.
|
||||
- Настоящий опубликованный production job **22b4e60b-974a-4fe2-ae64-2b8f74ec3420** завершён success=true за67,822с. Единственный аргумент — mode=production, без подставленных packet/proposal. Штатный dispatcher создал UUID; latest-plan и квитанции содержат тот же UUID и execution_owner=windmill. E4 ranked, rejected0. Все39 действий обсуждений сохранены;23 безAsana:6 в отложенном списке и17 в удержании. NextTopPriority присутствует. После19:00 запланировано и committed0мин;150мин очереди сверок отражены как backlog, а не выполненная работа.
|
||||
- Повторный штатный production `190491d9-0ce1-4ce7-8b53-2a212c4c76db` наE5v187 завершился failed: неизвестная субботняя ёмкость дала три действия без слотов, публикация корректно отклонена. Исправление удержания кандидатов принято независимым replay; E5v188 опубликован14:38:33Z;21host и2day_constraints копии совпали с проверенным кодом, новый реальный прогон ожидает освобождения host. A17 scopedflow `1c5085d8-9fe6-4f71-8eb2-e74cc07b946d` завершён частично: две работы succeeded, две требуют восстановления по конкретным причинам.
|
||||
- Повторный штатный production `190491d9-0ce1-4ce7-8b53-2a212c4c76db` наE5v187 завершился failed: неизвестная субботняя ёмкость дала три действия без слотов, публикация корректно отклонена. Исправление удержания кандидатов принято независимым replay; E5v188 опубликован14:38:33Z;21host и2day_constraints копии совпали с проверенным кодом, повторный production `7542cd0a-3d15-4769-83ee-57a9ea498cf5` завершился success=true за61,828с. A17 scopedflow `1c5085d8-9fe6-4f71-8eb2-e74cc07b946d` завершён частично: две работы succeeded, две требуют восстановления по конкретным причинам.
|
||||
- Независимая проверка новогоv188: plan/published-plan/latest-plan совпали по SHA и UUID. Все41 сырых ID сохранены через39 канонических карточек/aliases; все38 незакрытых карточек присутствуют в удержании плана. E4 ranked:298входов, включая29сверок;256held,13waiting,0rejected.32работы удержаны human_capacity_unknown;29сверок/145мин остаются backlog, слотов/ordered_actions0. Неизвестная суммарная ёмкость остаётся unknown, не подменена нулём. NextTP: два уточнения срока и одно удержание ёмкости. prepare.changed=false; рабочий второй проход и новый артефакт этим запуском не доказаны. Новых внерабочих уведомлений нет.
|
||||
- Текущая общая очередь ранжирует сверки и действия через E4. Обычные сверки не вытесняют срочный1-Must; применяется общий недельный остаток AoR. Непринятое человеческое решение не считается выполненной зависимостью. Незнакомое время участия ведёт к явному revision-bound уточнению.
|
||||
- Собственные сроки Zoom/MM доходят до E4/E5 с доказательством. Точные подтверждённые timestamps ограничивают окно; относительные, условные, отрицаемые и конфликтующие сроки требуют сверки. На настоящем входе указанного запуска было11 таких удержаний. Срок закрытой родительской задачи не переносится на самостоятельное обещание.
|
||||
- Обработка обсуждений завершила текущий метод; первый автоматический observer **01a1d5b4-9289-5b45-54a2-d44c3741491a** подтвердил26/26 обнаруженных работ, held_changed/input/method0. Исправлена нестабильность отрицательных проверок артефакта из-за лимита и порядка: неизвестный/неполный источник не становится подтверждённым. Пять исторических пустых MM-тредов вышли из14-дневного окна; они не содержали опубликованных действий и остаются отмеченными missing. Это не доказательство полного доступа ко всем историческим тредам.
|
||||
|
||||
@@ -4,9 +4,11 @@
|
||||
|
||||
## Текущий независимый вердикт
|
||||
|
||||
**Опубликованы E4 v186 и E5 v187, четыре расписания переключены на Windmill.** Рабочий запуск E5 v185 записал план на реальных источниках после закрытия дня. В v187 подтверждена новая диагностика ошибок хоста. Полная приёмка открыта. Размещение действий в открытом дне, второй проход на реальном черновике, полнота разбора обязательств, Outlook и пилот **0 из 5** остаются открытыми.
|
||||
**E4 v186 и E5 v188 опубликованы, штатный запуск v188 записал план на рабочих источниках при неизвестной ёмкости.** Четыре расписания работают в Windmill. Размещение действий в открытом дне, второй проход на реальном черновике, полнота разбора обязательств, Outlook и пилот **0 из 5** остаются открытыми.
|
||||
|
||||
- **Штатный запуск опубликованного E5.** Диспетчер запустил `22b4e60b-974a-4fe2-ae64-2b8f74ec3420` с единственным аргументом `mode=production`. Windmill подтвердил успех за 67,8 секунды и версию 185. Записанный в 22:20 план побайтово совпал с копией запуска. UUID и ревизии обсуждений, уточнений и очереди проверок совпали с квитанцией и входом. Во входе 219 записей задач, 213 сигналов Asana, 39 карточек обсуждений и 9 запросов GitHub-ревью. Asana, GitHub и коллекция обсуждений прошли проверку свежести. Календарь остался частичным.
|
||||
- **Рабочая запись E5 v188.** Диспетчер запустил `7542cd0a-3d15-4769-83ee-57a9ea498cf5` только с `mode=production`. В субботу в 20:43 по Бишкеку Windmill завершил цикл за 61,8 секунды. `latest-plan.json` и две сохранённые копии плана побайтово совпали. Asana, GitHub и обсуждения подтвердили свежесть. Ревизии обсуждений, Clarify и ревью совпали с закреплённым входом. E4 применил пять целей и единое ранжирование с проверками. Из 41 исходного ID сохранены 39 карточек с двумя псевдонимами, включая одну закрытую. Все 38 незакрытых карточек видны в удержаниях, 24 из них без привязки к Asana. Среди трёх Next TP два ждут уточнения срока, одно — данных о ёмкости. [Ранжирование](../windmill/workspace/f/attend/roles_importance_e4__flow/rank.py) · [Ограничения дня](../windmill/workspace/f/attend/attention_loop_e5__flow/day_constraints.py)
|
||||
- **Результат записи v188.** Календарь частичный, ёмкость неизвестна. Назначено ноль действий и ноль проверок. В 256 удержаниях 32 действия ждут данных о ёмкости. Есть 29 проверок на 145 минут, 13 ожиданий и ноль отклонений. Выполнены запись, GTD, наблюдение, проверка уведомлений и завершение. Подготовка не меняла очередь, второй проход не понадобился. Новых квитанций доставки уведомлений за запуск нет. Пилот остаётся 0 из 5. [Хост](../scripts/planning-runtime.py) · [Наблюдатель](../scripts/observe-acceptance-pilot.py)
|
||||
- **Результат после 19:00.** Назначено 0 минут работы, 0 минут ревью и 0 суммарных минут с резервом. Очередь сохранила 150 минут на потом: 29 сверок обсуждений и 1 Asana Clarify. В плане 239 удержаний, 36 действий сверх ёмкости, 13 ожиданий и 0 отклонений. Видны 23 действия без привязки к Asana. Из трёх Next TP два ждут уточнения срока, одно — следующего окна. Одиннадцать актуальных карточек удержаны с причиной неоднозначного срока. Подготовка не изменила очередь, второй проход не потребовался. Квитанции GTD, наблюдения, проверки уведомлений и завершения присутствуют.
|
||||
- **Рабочий E5.** Production-preview `01a1d57f-5a2a-3854-bf18-93909a5a9166` завершился в 21:22 по Бишкеку. По квитанциям выполнены sync, snapshot, attention, фиксация входа, запись плана, GTD, подготовка, наблюдение, проверка уведомлений и завершение. `latest-plan.json`, `plan.json` и `published-plan.json` побайтово совпали и содержат этот UUID и `execution_owner=windmill`. Во входе было 217 записей задач, 213 назначений и сигналов Asana, 36 действий обсуждений и 8 запросов GitHub-ревью. Ревизии обсуждений, уточнений и очереди проверок совпали с закреплённым входом. Свежесть Asana и GitHub подтверждена. Календарь частичный. После 19:00 план выделил 0 минут и 0 слотов, 5 минут одного Clarify-ревью остались в перегрузке. В итоговом снимке видны 35 действий сверх бюджета, 233 удержанных, 13 ожиданий и 2 конфликта. Опубликованный ранее v184 и два диагностических preview также завершились с исчерпанным бюджетом.
|
||||
- **Архитектура.** Опубликованный E5 управляет порядком шагов. Python обрабатывает канонический вход, правила допуска и версии источников, очередь обсуждений, бюджет проверок, Clarify, Weekly Review и проекцию принятых проектных утверждений. Существующие Node-модули передают запросы и читают источники. Сверка опубликованного кода и lock-файлов с рабочей копией прошла. Пересчёт из UI направляется в Windmill с закреплённым UUID. Запросы во время активного цикла сохраняются для следующего запуска. [E5](../windmill/workspace/f/attend/attention_loop_e5__flow/flow.yaml) · [Порт входа](../scripts/acceptance-plan-input.py) · [Диспетчер](../scripts/windmill-dispatch.py)
|
||||
@@ -19,7 +21,8 @@
|
||||
- **Обсуждения, проверка артефактов.** В 22:00 наблюдатель сверил 21 из 26 обнаруженных работ. Пять удерживались из-за исчерпания бюджета чтения, формулировки отрицательного результата или порядка проверок. После исправления реальное перечитывание в 22:14:36 на временной копии сверило 26 из 26. Пять отрицательных результатов признаны эквивалентными при точном совпадении источника, обязательства и метода. Все 31 сохранённая модельная ревизия и действия сохранились без изменений. Пять прежних работ отсутствовали в текущем обходе и остались явно отмеченными. Пропущенные и недоступные проверки удерживаются, положительный результат требует полного доказательства. Проверен охват данного снимка. Полнота распознавания обязательств и качество модели требуют отдельной оценки. [Наблюдатель источников](../scripts/observe-discussion-sources.py) · [Доказательство артефакта](../scripts/artifact_observation.py) · [Проекция](../scripts/discussion_queue.py)
|
||||
- **Уточнение и claims.** В рабочем SQLite сохранён один исход Clarify `needs_review` с причиной `no_verified_next_action`. В позднем чтении 166 назначений были `source_unavailable`, текущих подтверждённых действий было 0. Есть проверенный путь до ручной сверки и изолированный положительный тест через E4/E5. Реальный автономный допуск конкретного модельного шага и обработка всей очереди пока не показаны. Рабочий повторный scan claims принял в очередь все 597 работ, после чего проверка обработчика вернула `busy`. 597 — объём поставленных работ. Полное применение и качество утверждений предстоит проверить. [Clarify](../scripts/clarification-runtime.py) · [Очередь](../scripts/clarification-queue.py) · [Claims](../scripts/work-claim-updates.js)
|
||||
- **Диагностика E5 v187.** Все 21 опубликованный шаг хоста совпали с рабочей копией. Синтетический Windmill preview `01a1da53-3dfd-f11e-04c9-ccf4080fe9ea` провёл HTTP 400 через фактический шаг наблюдения. Записаны код, имя скрипта, тип исключения и строка. Контрольная приватная строка отсутствует в результате. [Шаг хоста](../windmill/workspace/f/attend/attention_loop_e5__flow/host_step.py)
|
||||
- **Проверки этого среза.** Полный прогон Python после проверки повторных карточек прошёл 195 тестов. Полный прогон Node с изменениями UI и A17 прошёл 298 тестов без пропусков. Работающие страницы My Tasks, Weekly и Work History проверены отдельно. Фактический Windmill preview подтвердил выделенный worker `personalos_planning`. Рабочий Outlook, доставка в обычное рабочее окно и результат пятидневного пилота в этих прогонах не измерены.
|
||||
- **Неизвестная ёмкость, исправление E5 v188.** Штатный запуск `190491d9-0ce1-4ce7-8b53-2a212c4c76db` на v187 остановился на записи плана. E5 поместил три действия по 15 минут в рекомендации без окон при неизвестной ёмкости. Проверка допуска заблокировала запись. На том же сохранённом входе v188 удержал 32 действия и 29 проверок, без назначений. В опубликованном v188 совпали 21 шаг хоста и два шага ограничений дня. Диагностика различает причину отказа по закрытому списку. [Ограничения дня](../windmill/workspace/f/attend/attention_loop_e5__flow/day_constraints.py) · [Допуск записи](../scripts/planning-runtime.py)
|
||||
- **Проверки этого среза.** Полный прогон Python прошёл 199 тестов, полный прогон Node — 305 тестов без пропусков. Работающие страницы My Tasks, Weekly и Work History проверены отдельно. Фактический Windmill preview подтвердил выделенный worker `personalos_planning`. Рабочий Outlook, доставка в обычное рабочее окно и результат пятидневного пилота в этих прогонах не измерены.
|
||||
|
||||
### Предыдущий срез после перекрёстного ревью
|
||||
|
||||
@@ -72,7 +75,7 @@
|
||||
- **A14 — исправлено, изолированные прогоны.** Причина отклонения и предыдущая ревизия передаются на ограниченную переработку. Повтор сохраняет результат, вытесненный черновик перестаёт быть активным. Реальный отклонённый артефакт в штатном цикле ещё не проверен. [Ревизии Next TP](../scripts/priority-handoff.py#L88) · [Регрессии](../test/test_operations_review.py)
|
||||
- **A15 — исправлено, синтетический пропуск.** Предыдущий день без финального наблюдения доступен для сверки пробела и не засчитывается. Штатное восстановление реального пропуска ещё не наблюдалось. [Восстановление](../scripts/observe-acceptance-pilot.py#L103)
|
||||
- **A16 — исправлено на тестовых источниках.** Next TP извлекается без обязательной ручной привязки встречи. Для закрытия проверяются автор публикации, хронология и однозначная связь с источником обещания. Назначение карточки и вручную заданная связь сами по себе не закрывают обязательство. Реальный прогон новой встречи с публикацией требует подтверждения. [Реестр и сверка](../scripts/discussion_packets.py) · [Экстрактор](../windmill/workspace/f/analyse/discussion_actions.py#L73)
|
||||
- **A17 — исправлены проверка и разбиение, четыре рабочих задания возвращены в очередь.** Проверка доказательств принимает буквальную цитату из одного строкового поля JSON при совпадении хеша источника. Корневая задача включается в контекст каждой части разбиения. Повтор 50 сохранённых модельных попыток по десяти рабочим проектам увеличил число прошедших проверку с 18 до 34. Все восемь корректных отказов для утверждений на удалённых источниках сохранились. Отдельный повтор шести реальных пакетов сохранил корневой контекст в 415 частях и передал 2 826 изменений без дублей в пределах лимита. В изолированной PostgreSQL прошли 32 целевых теста. В 20:10 четыре задания переведены в `retry` после сверки текущих источников с резервной копией и пробного прохода. Для двух заданий перестроены 31 часть. Все 17 исходных попыток сохранены, записи утверждений и решения пользователя в этой транзакции совпали с резервной копией. Выполнение повторов, полнота очереди и достаточность принятых фактов остаются предметом приёмки. [Claims](../scripts/work-claim-updates.js) · [Пакеты](../scripts/claim-packets.js) · [Источники](../scripts/work-claim-sources.js) · [Проекция](../scripts/project_state.py)
|
||||
- **A17 — два из четырёх рабочих повторов завершились.** Проверка доказательств принимает буквальную цитату из одного строкового поля JSON при совпадении хеша источника. Корневая задача включается в контекст каждой части разбиения. Повтор 50 сохранённых попыток по десяти рабочим проектам дал 34 успешные проверки вместо 18. Все восемь корректных отказов для утверждений на удалённых источниках сохранились. Повтор шести пакетов сохранил корневой контекст в 415 частях и передал 2 826 изменений без дублей в пределах лимита. В 20:10 четыре задания возвращены в очередь, для двух перестроена 31 часть. Все 17 исходных попыток и человеческие решения сохранены. Штатный Windmill `1c5085d8-9fe6-4f71-8eb2-e74cc07b946d` завершил два задания и внёс семь изменений в набор кандидатных утверждений, без автоматического человеческого подтверждения. Остальные два дошли до 1 из 14 частей и удержания после 4 из 17 частей. Для полного пакета с явно пустым шаблоном проверен один дополнительный запрос к модели с записью резерва под арендой. Ответ всё равно проходит обычную проверку. Пакеты с недостающим источником или корневым контекстом остаются удержанными. В изолированной PostgreSQL и целевых тестах прошло 39 сценариев. Рабочий результат дополнительного запроса и полнота очереди ещё проверяются. [Claims](../scripts/work-claim-updates.js) · [Пакеты](../scripts/claim-packets.js) · [Повтор с диагностикой](../scripts/claim-review-feedback.py) · [Проекция](../scripts/project_state.py)
|
||||
|
||||
## GTD и лидерские практики
|
||||
|
||||
|
||||
Reference in new issue
Block a user