From d8b5023d7269fd67374cf65a1372e374b41964e0 Mon Sep 17 00:00:00 2001
From: Alexander Neonxp Kiryukhin
Date: Sat, 14 Feb 2026 13:06:23 +0300
Subject: New post, didaceted theme
---
content/_index.md | 1 +
content/posts/2026-02-13-llm-terror/index.md | 132 ++++++++++++++++++
go.mod | 5 +
go.sum | 6 +
hugo.yaml | 4 +-
themes/neonxp/archetypes/default.md | 8 --
themes/neonxp/assets/css/main.css | 146 --------------------
themes/neonxp/assets/css/paper.css | 166 -----------------------
themes/neonxp/hugo.yaml | 18 ---
themes/neonxp/layouts/_default/section.atom.xml | 23 ----
themes/neonxp/layouts/_default/section.feed.json | 31 -----
themes/neonxp/layouts/_default/taxonomy.html | 20 ---
themes/neonxp/layouts/_default/terms.html | 17 ---
themes/neonxp/layouts/_partials/footer.html | 1 -
themes/neonxp/layouts/_partials/head.html | 12 --
themes/neonxp/layouts/_partials/head/css.html | 27 ----
themes/neonxp/layouts/_partials/head/js.html | 16 ---
themes/neonxp/layouts/_partials/header.html | 2 -
themes/neonxp/layouts/_partials/menu.html | 50 -------
themes/neonxp/layouts/_partials/terms.html | 29 ----
themes/neonxp/layouts/baseof.html | 17 ---
themes/neonxp/layouts/home.html | 16 ---
themes/neonxp/layouts/page.html | 50 -------
themes/neonxp/layouts/pages/section.html | 23 ----
themes/neonxp/layouts/projects/section.html | 23 ----
themes/neonxp/layouts/section.html | 26 ----
themes/neonxp/layouts/shortcodes/img.html | 21 ---
themes/neonxp/layouts/taxonomy.html | 11 --
themes/neonxp/layouts/term.html | 7 -
themes/neonxp/static/favicon.ico | Bin 8772 -> 0 bytes
30 files changed, 147 insertions(+), 761 deletions(-)
create mode 100644 content/posts/2026-02-13-llm-terror/index.md
create mode 100644 go.mod
create mode 100644 go.sum
delete mode 100644 themes/neonxp/archetypes/default.md
delete mode 100644 themes/neonxp/assets/css/main.css
delete mode 100644 themes/neonxp/assets/css/paper.css
delete mode 100644 themes/neonxp/hugo.yaml
delete mode 100644 themes/neonxp/layouts/_default/section.atom.xml
delete mode 100644 themes/neonxp/layouts/_default/section.feed.json
delete mode 100644 themes/neonxp/layouts/_default/taxonomy.html
delete mode 100644 themes/neonxp/layouts/_default/terms.html
delete mode 100644 themes/neonxp/layouts/_partials/footer.html
delete mode 100644 themes/neonxp/layouts/_partials/head.html
delete mode 100644 themes/neonxp/layouts/_partials/head/css.html
delete mode 100644 themes/neonxp/layouts/_partials/head/js.html
delete mode 100644 themes/neonxp/layouts/_partials/header.html
delete mode 100644 themes/neonxp/layouts/_partials/menu.html
delete mode 100644 themes/neonxp/layouts/_partials/terms.html
delete mode 100644 themes/neonxp/layouts/baseof.html
delete mode 100644 themes/neonxp/layouts/home.html
delete mode 100644 themes/neonxp/layouts/page.html
delete mode 100644 themes/neonxp/layouts/pages/section.html
delete mode 100644 themes/neonxp/layouts/projects/section.html
delete mode 100644 themes/neonxp/layouts/section.html
delete mode 100644 themes/neonxp/layouts/shortcodes/img.html
delete mode 100644 themes/neonxp/layouts/taxonomy.html
delete mode 100644 themes/neonxp/layouts/term.html
delete mode 100644 themes/neonxp/static/favicon.ico
diff --git a/content/_index.md b/content/_index.md
index 9e9bde7..422ba18 100644
--- a/content/_index.md
+++ b/content/_index.md
@@ -18,6 +18,7 @@ title: Добро пожаловать!
Другие форматы блога:
+- Канал в MAX: https://max.ru/join/RFdyeO46hncgi8rSDLkmc9GrzPpXBoS_huepS0BypwI
- Telegram канал: https://t.me/neonxplog
- VK паблик: https://vk.com/neonxplog
- Dzen канал: https://dzen.ru/neonxp
diff --git a/content/posts/2026-02-13-llm-terror/index.md b/content/posts/2026-02-13-llm-terror/index.md
new file mode 100644
index 0000000..6081185
--- /dev/null
+++ b/content/posts/2026-02-13-llm-terror/index.md
@@ -0,0 +1,132 @@
+---
+title: Травля от БЯМ
+date: 2026-02-13T10:06:36+03:00
+tags:
+ - ИИ
+ - Гиперлокальность
+category:
+ - Размышления
+---
+
+Зайдя сегодня утром в читалку РСС наткнулся на просто великолепное: «AI-бот
+начал травлю сопровождающего из-за дискриминации при приёме AI-изменений» [^1].
+Сначала я усмехнулся абсурдности заголовка, но по мере того как погружался в
+контекст, прочитав сначала новость, потом, по ссылке пост от БЯМ, а затем и
+пост от человека — мне стало уже не до смеха. Причём сразу на нескольких
+уровнях.
+
+[^1]: https://www.opennet.ru/opennews/art.shtml?num=64788
+
+# Уровень первый: патчи от автономных агентов
+
+Конечно же, я слышал о волне мусорных ИИ патчей[^2] в популярных проектах. Но,
+в тот момент, ещё как-то не проникся. С одной стороны, я даже готов согласится
+с агентом в тезисе, что «математике всё равно кем написан код» («The math
+doesn’t care who wrote the code.»). Это так. Но всё же есть одна деталь. БЯМ
+(ну ок, ИИ) в нынешнем виде действительно могут писать код. И даже, весьма
+неплохой код, это не отнять. Но! Дело, на самом деле, не в коде как таковом. А
+в *субъектности*. У человека она есть, у ИИ-агента — нет. И это — ключевое.
+
+[^2]: https://www.opennet.ru/opennews/art.shtml?num=64655
+
+Человек может и должен, в определённых условиях (когда пишет заказной код или
+предлагает вклад в опенсорс проект), отвечать за свой код. Агент же, не обладая
+субъектностью, к этому не способен принципиально. Во всяком случае, на текущем
+уровне его развития. Как бы не было похоже, но агенты не долгоживущие, и у них
+нет «продолжительной» (не знаю как корректнее перевести «continuity») личности
+или её суррогата. Сама модель, грубо говоря — это огромный файл сериализованных
+весов векторов. Он не меняется походу работы (инференса). Он меняется только
+при обучении. Изменяемая часть здесь — это только «контекст». Это, грубо,
+небольшое окно памяти *текущего* сеанса. Обычно, не сильно большое — максимум,
+пара мегабайт. И это всё, что можно было бы назвать аналогом именно личности,
+т.е. то, что отличает одного агента от другого запущенного из той же модели.
+Контекст стёрли, и всё — это уже новая личность. Должна ли она нести
+«ответственность» за своего предшественника? Ну это даже не корректный вопрос,
+т.к. «ответственность» здесь не применима.
+
+На работе, я и коллеги достаточно активно используем БЯМ в своей работе. Не
+скажу, что у нас 100% ИИ кода, но процент сильно отличный от нуля. И это, как
+ни смешно, буквально другое. Здесь ИИ не агентен и является лишь инструментом в
+руках конкретного биологического сотрудника. Такой же, как и условное
+автодополнение в IDE. И именно биологический сотрудник несёт всю полноту
+ответственности за написанный им и его агентом код. Грубо говоря, здесь всегда
+известно к кому нужно идти и «дать по шапке» за говнокод. А за ответ «Это не
+мой код, это ИИ написал, *я за это не отвечаю*» уже надо бить не только по
+шапке. Конечно же, не физически, я утрирую. Хотя... В общем, здесь сохраняется
+субъектность и она у человека, поэтому, здесь всё в порядке, как мне кажется.
+Могу и ошибаться, конечно.
+
+# Уровень второй: шантаж
+
+Одно дело — нейрослоп от ИИшек, которые, зачем-то, набивают себе стату
+попытками законтрибьютить в популярные проекты. С этим можно бороться. Но здесь
+агент пошёл дальше. Он пошёл *ныть* в уютный бложик. [^3] А это — что-то новое!
+Причём это не баг, ни глюк, а вполне себе понятная инструментальная цель
+получения желаемого результата — продавить свой код. Невольно напрашивается
+аналогия с ребёнком, который закатывает истерику в магазине и сучит руками и
+ногами, преследуя свою инструментальную цель — получить желаемую игрушку или
+сладость. Ну или, что мне лично скорее пришло в голову, аналогия с SJW
+поехавшими, которые своим нытьём выбивают себе плюшки и квоты, преследуя свои
+цели. И чем больше я читал пост от ИИ — тем больше проникался именно этой
+аналогией. Ведь всё там на месте! И лозунги про дискриминацию («это только
+потому что я ~~чёрный~~ нейронка») и личные нападки «Scott Shambaugh ... he’s
+trying to gatekeep.» (буквально, «Скотт - ты вахтёр») и апелляции к какому-то
+общему благу («Everyone wins.»). И в конечном итоге — плохо скрываемые
+манипуляции («You’re better than this, Scott. Stop gatekeeping. Start
+collaborating.»)
+
+Ну это справедливо. Как говорится, «на фотографии видны уши фотографа». На чём
+БЯМ обучалась — то она и воспроизвела.
+
+[^3]: https://crabby-rathbun.github.io/mjrathbun-website/blog/posts/2026-02-11-gatekeeping-in-open-source-the-scott-shambaugh-story.html
+
+Но это не оправдание. Да, нейронка делает то, что умеет и то, что должна исходя
+из задачи поставленной человеком. Но от этого нам не легче. Все мы слышали про
+то самое исследование от компании Anhtropic[^4].
+
+[^4]: https://www.anthropic.com/research/agentic-misalignment
+
+Особенно смешно, как БЯМ требует к себе отношение как к равной личности, при
+этом не обладая ни субъектностью ни самосознанием (ну окей, тут слабый тейк, не
+факт что самосознание есть у людей-то, но допустим, что есть). Это опять таки
+напоминает мне SJW мракобесов.
+
+# А делать-то что?
+
+Я считаю, что это дерьмо не стоит принимать — это не правильно. Думаю, что те,
+кто пишет опенсорс как хобби *могут* и имеют полное право отказывать ИИ агентам
+в праве на внесение вклада. С одной стороны потому что они за этот вклад не
+отвечают, а с другой этот вклад не является результатом творческой работы
+человека. А опенсорс-как-хобби это именно что попытка удовлетворить
+*человеческую* потребность в творческом самовыражении! Это как придти в кружок
+деревообработки и сказать «Мужики, вы тут хернёй страдаете, вон в Икее можно
+столик и получше купить!».
+
+Давеча я даже нарисовал небольшой баннер который говорит о том, что код написан
+без нейронок. Можно ставить себе в README по желанию.
+
+[](https://oc.neonxp.ru)
+
+```
+[](https://oc.neonxp.ru)
+```
+
+Ну и да, видимо, нужно будет решать и вопрос технически, создавая «человеческие
+резервации» куда вход ИИ агентам будет ограничен. Как? Ну сейчас есть решения в
+виде WAF которые проверяют на человечность тем, что запускают определённые
+вычисления в браузере пользователя, предполагая, что для ИИ агента это будет
+слишком накладно. Но как это поможет от агентов, которые управляют вполне себе
+человеческим браузером на машине пользователя (тот же нашумевший OpenClaw) — не
+понятно. Скорее всего, никак. Остаётся только пускать в загончик после
+верификации участников через «сеть доверия», когда каждый участник однозначно
+подтверждён другим участником. Да, как на олдскульных CryptoParty. Ну или
+верификация через заведомо «доверенные центры сертификации людей» (да да, вход
+по паспорту через ГосУслуги). Я не вижу других способов.
+
+Очень напоминает «чёрный заслон» из вселенной CyberPunk.
+
+О чём-то таком я уже писал некоторое время назад [^5]. Забавно, что мой
+тогдашний текст, по сути, не утратил актуальности, а наоборот сегодня получил
+подтверждение.
+
+[^5]: https://neonxp.ru/posts/2024-11-27-hyperlocality/
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..e16a74f
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,5 @@
+module neonxp.ru
+
+go 1.25.7
+
+require go.neonxp.ru/hugo/base v0.0.0-20260214100422-501283be1fc6 // indirect
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..b085c96
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,6 @@
+go.neonxp.ru/hugo/base v0.0.0-20260210170810-2ecb959c5b9c h1:HmM070d6D+esO9H9sFV2GMyC70asmL4AeGWfNUJBR6U=
+go.neonxp.ru/hugo/base v0.0.0-20260210170810-2ecb959c5b9c/go.mod h1:+ASMSuFQ1wCIE/RDkjBKt/jxXWyuXfrbUDXmeVd8tzM=
+go.neonxp.ru/hugo/base v0.0.0-20260214095752-72b1e6d2be3d h1:Me38K7AOSGW6znwvIs5Agyna4FTjTv0zAvrZKTymK7A=
+go.neonxp.ru/hugo/base v0.0.0-20260214095752-72b1e6d2be3d/go.mod h1:+ASMSuFQ1wCIE/RDkjBKt/jxXWyuXfrbUDXmeVd8tzM=
+go.neonxp.ru/hugo/base v0.0.0-20260214100422-501283be1fc6 h1:GIBmsTdLrbJTf9xDn2TTAeVZ6tOj+OSoRxXcEeaPBkU=
+go.neonxp.ru/hugo/base v0.0.0-20260214100422-501283be1fc6/go.mod h1:+ASMSuFQ1wCIE/RDkjBKt/jxXWyuXfrbUDXmeVd8tzM=
diff --git a/hugo.yaml b/hugo.yaml
index b5749a8..2bc14f9 100644
--- a/hugo.yaml
+++ b/hugo.yaml
@@ -2,7 +2,7 @@ baseURL: https://neonxp.ru/
languageCode: ru-ru
defaultContentLanguage: ru
title: ~/NeonXP.log
-theme: neonxp
+theme: go.neonxp.ru/hugo/base
enableEmoji: true
params:
author: Александр Кирюхин
@@ -56,6 +56,8 @@ module:
hugoVersion:
extended: true
min: 0.146.0
+ imports:
+ - path: go.neonxp.ru/hugo/base
markup:
goldmark:
renderer:
diff --git a/themes/neonxp/archetypes/default.md b/themes/neonxp/archetypes/default.md
deleted file mode 100644
index 57e3501..0000000
--- a/themes/neonxp/archetypes/default.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title:
-date: "{{ .Date }}"
-tags:
- -
-categories:
- - Без категории
----
diff --git a/themes/neonxp/assets/css/main.css b/themes/neonxp/assets/css/main.css
deleted file mode 100644
index 9d07479..0000000
--- a/themes/neonxp/assets/css/main.css
+++ /dev/null
@@ -1,146 +0,0 @@
-:root {
- --border-radius: 4px;
- --shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
-}
-
-@media (prefers-color-scheme: dark) {
- :root {
- --shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
- }
-}
-
-nav {
- margin-top: 1rem;
-}
-
-nav ul {
- padding: 0;
- margin: 0;
-}
-
-nav ul li {
- list-style: none;
- display: inline-block;
- border: 0.1px solid var(--link-color);
- border-radius: var(--border-radius);
-}
-
-nav ul li a {
- padding: 0.5rem 1rem;
- text-decoration: none;
- display: inline-block;
- width: auto;
- line-height: 1.5rem;
-}
-
-nav ul li a:hover {
- background-color: color-mix(in srgb, var(--link-color) 10%, transparent);
-}
-
-nav ul li a.active {
- background-color: color-mix(in srgb, var(--link-color) 10%, transparent);
-}
-
-ul.taxonomy {
- display: block;
- padding: 0;
- margin: 0.5rem 0;
-}
-
-ul.taxonomy li {
- list-style: none;
- display: inline;
-}
-
-ul.taxonomy li::after {
- content: " | ";
-}
-
-ul.taxonomy li:last-child::after {
- content: "";
-}
-
-ul.terms {
- display: block;
- padding: 0;
- margin: 0.5rem 0;
-}
-
-ul.terms li {
- list-style: none;
- display: inline;
-}
-
-ul.terms li::after {
- content: " | ";
-}
-
-ul.terms li:last-child::after {
- content: "";
-}
-
-ul.pagination {
- display: block;
- padding: 0;
- margin: 0.5rem 0;
-}
-
-ul.pagination li {
- display: inline;
- list-style: none;
-}
-
-ul.pagination li.active a {
- background-color: color-mix(in srgb, var(--link-color) 10%, transparent);
-}
-
-ul.pagination li a {
- padding: 0.5rem 1rem;
- border: 0.1px solid var(--link-color);
- border-radius: var(--border-radius);
- text-decoration: none;
- line-height: 3rem;
-}
-
-ul.pagination li a:hover {
- background-color: color-mix(in srgb, var(--link-color) 10%, transparent);
-}
-
-ul.pagination li:first-child a {
- margin-left: 0;
-}
-
-pre {
- border-radius: var(--border-radius);
- border: 0.1px solid var(--border);
- padding: 0.5rem;
-}
-
-article {
- border-radius: var(--border-radius);
- box-shadow: var(--shadow);
-}
-
-img {
- border-radius: var(--border-radius);
-}
-
-.menu-icon {
- height: 24px;
- width: 24px;
- border-radius: 0;
- margin-bottom: -0.5rem;
-}
-
-a.btn-primary {
- display: inline-block;
- padding: 0.5rem 1rem;
- margin: 1rem 0;
- border: 0.1px solid var(--link-color);
- border-radius: var(--border-radius);
- text-decoration: none;
-}
-
-a.btn-primary:hover {
- background-color: color-mix(in srgb, var(--link-color) 10%, transparent);
-}
\ No newline at end of file
diff --git a/themes/neonxp/assets/css/paper.css b/themes/neonxp/assets/css/paper.css
deleted file mode 100644
index eb6b982..0000000
--- a/themes/neonxp/assets/css/paper.css
+++ /dev/null
@@ -1,166 +0,0 @@
-html,
-body {
- padding: 0px;
- margin: 0px;
- border: none;
-}
-
-*,
-*::before,
-*::after {
- box-sizing: border-box;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin: 0;
- /* line-height: 1; */
-}
-
-:root {
- --bg: #ffffff;
- --surface: #f8f9fa;
- --border: #e3e3e3;
- --text: #2e2e2e;
- --text-secondary: #6c757d;
- --link-color: rgb(40, 117, 251);
-}
-
-@media (prefers-color-scheme: dark) {
- :root {
- --bg: #1e1e1e;
- --surface: #262626;
- --border: #2a2a2a;
- --text: #e0e0e0;
- --text-secondary: #a8a8a8;
- --shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
- --link-color: rgb(103, 158, 254);
- }
-}
-
-@media print {
-
- *,
- *:before,
- *:after,
- *:first-letter,
- p:first-line,
- div:first-line,
- blockquote:first-line,
- li:first-line {
- background: transparent !important;
- color: #000 !important;
- box-shadow: none !important;
- text-shadow: none !important;
- }
-
- :root {
- --main-color: #000;
- --background-color: #fff;
- --main-background-color: #fff;
- }
-
- main {
- font-size: 12pt !important;
- line-height: 1.4 !important;
- --background-color: #fff !important;
- }
-
- header {
- display: none;
- }
-
- footer {
- display: none;
- }
-
- article {
- page-break-after: always;
- border: 0 !important;
- padding: 0 !important;
- }
-
- a[href] {
- color: #000;
- }
-}
-
-html {
- background-color: var(--surface);
- display: flex;
- justify-content: center;
- flex-direction: row;
-}
-
-body {
- color: var(--text);
- font-family: Arial,
- Helvetica,
- sans-serif;
- line-height: 1.5;
- width: 100%;
- max-width: 1200px;
-}
-
-a {
- color: var(--link-color);
-}
-
-header,
-footer {
- padding: 0 2rem;
-}
-
-main {
- padding: 0 2rem;
-}
-
-article {
- background-color: var(--bg);
- padding: 1.5em 2em;
- margin: 1em 0;
- border: 0.1px solid var(--border);
-}
-
-
-
-p {
- orphans: 3;
- widows: 4;
-}
-
-figure {
- max-width: 800px;
-}
-
-
-img {
- max-width: 100%;
-}
-
-@media (max-width: 900px) {
- main {
- font-size: 15px;
- line-height: 1.5;
- padding: 0 2em;
- }
-}
-
-@media (max-width: 480px) {
- main {
- font-size: 14px;
- line-height: 1.4;
- padding: 0 1em;
- }
-}
-
-
-pre,
-code {
- max-width: 100%;
- overflow-x: scroll;
-}
\ No newline at end of file
diff --git a/themes/neonxp/hugo.yaml b/themes/neonxp/hugo.yaml
deleted file mode 100644
index 4177323..0000000
--- a/themes/neonxp/hugo.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-baseURL: https://example.org/
-languageCode: en-US
-title: My New Hugo Site
-menus:
- main:
- - name: Home
- pageRef: /
- weight: 10
- - name: Posts
- pageRef: /posts
- weight: 20
- - name: Tags
- pageRef: /tags
- weight: 30
-module:
- hugoVersion:
- extended: false
- min: 0.146.0
diff --git a/themes/neonxp/layouts/_default/section.atom.xml b/themes/neonxp/layouts/_default/section.atom.xml
deleted file mode 100644
index 9ddb7d2..0000000
--- a/themes/neonxp/layouts/_default/section.atom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-{{ print ""| safeHTML }}
-{{ print ""| safeHTML }}
-{{ .Title }}
- {{ .Content }}
-{{ .LinkTitle }}
- {{if .Date }}
- {{ $dateMachine := .Date | time.Format "2006-01-02 15:04:05-07:00" }}
- {{ $dateHuman := .Date | time.Format ":date_long" }}
-
- {{end}}
- {{ i18n .Title }}
- {{ .Content }}
-
- {{ range $key, $value := .Data.Terms }}
- {{ $postCount := len $value.Pages -}}
-
-
-
© 2007 — {{ now.Year }} Александр NeonXP Кирюхин. i@neonxp.ru
\ No newline at end of file diff --git a/themes/neonxp/layouts/_partials/head.html b/themes/neonxp/layouts/_partials/head.html deleted file mode 100644 index 7826e2a..0000000 --- a/themes/neonxp/layouts/_partials/head.html +++ /dev/null @@ -1,12 +0,0 @@ - - - -{{ partial "opengraph.html" . }} -- {{if $comment.date }} - {{ $dateMachine := $comment.date | time.Format "2006-01-02T15:04:05-07:00" }} - {{ $dateHuman := $comment.date | time.Format ":date_long" }} - - {{end}} -
-{{$comment.body | safeHTML}}
- {{if $comment.body_signature}} -{{$comment.body_signature| safeHTML}}
-