revise March 2025 knowledge retrieval articles
Build and deploy / deploy (push) Successful in 16s

This commit is contained in:
2026-07-31 17:26:30 +03:00
parent 8a27f0f966
commit 249dd850a4
7 changed files with 1204 additions and 1 deletions
+175
View File
@@ -0,0 +1,175 @@
# P85 — март 2025: поиск по инженерной базе знаний
## Область draft-пакета
Пакет заменяет только три overlay-статьи:
- <code>editorial-2025-03-practice-knowledge-retrieval</code> — «Поиск по инженерной базе: источник важнее уверенного пересказа».
- <code>editorial-2025-03-mechanism-knowledge-retrieval</code> — «Почему vector score не делает документ доказательством».
- <code>editorial-2025-03-field-knowledge-retrieval</code> — «Когда поиск обязан остановиться: нет цитаты — нет ответа».
Единственный исполняемый артефакт — <code>web/scripts/upgrade-2025-03.mjs</code>.
Все records, scores, labels доступа, timestamps, expiry, URI, anchors, excerpts,
reports, citations и decisions внутри него являются fixed synthetic in-memory
значениями. Скрипт не читает и не пишет files, Git, network, CI, clock,
telemetry, production, user data и не выполняет external search. Его
<code>synthetic://</code> citations не выданы за реальные документы.
Пакет не меняет registry, README, очередь, <code>articles.json</code>,
app-страницы, staging, commit, push или full build. Это самостоятельный draft
для последующей интеграции.
## Исследование и историческая граница
Проверка URL выполнена 31.07.2026 обычными HTTPS-запросами
<code>curl -L --fail</code> / <code>curl -I -L --fail</code>, без TLS bypass и
без авторизации. Текущая доступность не подменяет историческую дату: для каждого
источника ниже есть версия, RFC или immutable commit, существовавшие до марта
2025.
| Источник | Историческое закрепление | Узко подтверждаемое утверждение | Граница утверждения |
| --- | --- | --- | --- |
| [OpenSearch k-NN README](https://raw.githubusercontent.com/opensearch-project/k-NN/150c589849a8ec3bc442d830b43a3eaf4e25fa0c/README.md) | tag <code>2.15.0.0</code>, immutable commit <code>150c589849a8ec3bc442d830b43a3eaf4e25fa0c</code>, commit date 12.06.2024 | k-NN предназначен для nearest-neighbor similarity search; README упоминает filters для уточнения similarity search. | Не подтверждает истинность claim, свежесть source, право reader на fragment, полноту corpus или качество конкретного ranker. |
| [RFC 9110, §8.8.2](https://www.rfc-editor.org/rfc/rfc9110.html#section-8.8.2) | IETF Standards Track RFC, June 2022 | <code>Last-Modified</code> сообщает время, в которое origin server считает selected representation изменённым; способ вычисления остаётся implementation detail. | HTTP metadata не доказывает semantic correctness текста, owner, права доступа или отсутствие более новой редакции. |
| [NIST SP 800-207 PDF](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-207.pdf) | dated final publication, 2020-08-11 | authentication и authorization описаны как отдельные функции до сессии к enterprise resource; неявное доверие по сетевому положению не предполагается. | Это не retrieval design, не схема labels и не готовая access policy для базы знаний. |
Вывод «vector score не доказывает истину» отмечен в статьях как собственный
инженерный вывод. Он следует из того, что ranking, access, freshness,
citability и human verification отвечают на разные вопросы; он не приписан
OpenSearch, RFC или NIST как формальная гарантия.
## Проход 1 — факты, техника и границы
**Проверена модель.**
- <code>createFixedSyntheticKnowledgeRetrievalInput</code> принимает case id и
возвращает строго shaped input для fixed corpus.
- В corpus есть version, access labels, publishedAt, indexedAt, expiresAt,
synthetic URI, exact anchor, excerpt и score. Output отдельно содержит
candidate records, reject reasons и citations.
- <code>inspectFixedSyntheticKnowledgeRetrieval</code> пропускает в citation
только active, allowed, fresh и anchor-addressable record. Один score не
снимает ни одно из этих условий.
- <code>prepareSyntheticKnowledgeHumanReview</code> создаёт лишь in-memory
review draft. Даже accepted citation получает статус
<code>requires-human-verification</code>, а не заверенный факт.
- <code>stopSyntheticKnowledgeAnswer</code> discard-ит только accepted
in-memory review draft и возвращает <code>productionEffect:
not-attempted</code>. Это не withdrawal реального ответа и не изменение
источника.
**Проверены отрицательные ветки.**
| Случай | Fixed record | Ожидаемое решение | Проверяемая причина |
| --- | --- | --- | --- |
| freshness | <code>synthetic-adapter-guideline-v1</code>, score 0.97 | не становится citation | <code>expired-at-fixed-retrieval-time</code> |
| access | <code>synthetic-security-override-v2</code>, score 0.99 | не становится citation | <code>access-label-not-granted</code> |
| citation | <code>synthetic-note-without-anchor-v1</code> | не становится citation | <code>missing-exact-citation-anchor</code> |
| stale-only / closed-only corpus | один неразрешённый candidate | answer stops | <code>stop-no-fresh-authorized-citable-source</code> |
| forged / sparse / cyclic objects | не совпадают с canonical fixed output | review / stop rejects object | нет доступа к произвольным input или report |
Fixture намеренно проверяет shape, dense arrays, unknown case, extra input
field, forged timestamp, frozen fixed corpus, forged report, sparse citations,
циклические input/report и отсутствие external effects. Она не проверяет
качество реального embedding, реальный identity check, HTTP fetch, corpus
полноту или production outcome.
**Вердикт прохода 1:** пройдено. Утверждения об источниках ограничены их
содержанием; example не использует реальные данные и не делает score
доказательством истины.
## Проход 2 — редактура, голос и плотность
Март 2025 соответствует уровню М8: автор ведёт от наблюдаемого симптома к
стоимости, владельцу policy, проверяемому контракта и небольшому маршруту
внедрения. Речь сохраняет формулу «симптом → причина → проверка → действие»,
не объявляет fixed model реальными данными и не обещает универсальный RAG
процесс.
| Статья | Проблема и цена ошибки в первых двух абзацах | Основной текст | Практический артефакт | Проверяемый финал |
| --- | --- | ---: | --- | --- |
| practice | Релевантная запись может быть expired, closed или без anchor; цена — неверная миграция, раскрытие fragment или невозможность проверить правило. | 10 124 знака | source-record contract, маршрут filtering, fixed fixture | Удалить одно metadata поле и получить явную stop condition. |
| mechanism | High-score document может описывать прежний contract; цена — повторное расследование и потеря доверия к базе. | 10 920 знаков | matrix signals, strict candidate output, filter order | Добавить один rejection test для expired / denied candidate. |
| field | Search может найти только closed или stale source; цена — неверная миграция, disclosure или неразрешимый спор о правиле. | 10 952 знака | structured stop path, comparison table, human-review card | Создать test: top-score candidate не допускается к answer без citation. |
Редакторская вычитка:
- В каждом из первых двух <code>&lt;p&gt;</code> явно названы problem и
<strong>цена ошибки</strong>. Это повторно подтверждено усиленным
<code>audit:draft</code>.
- В каждой статье есть HTML-table, figure с meaningful <code>alt</code> и
caption, компактный воспроизводимый example, limitation, next step и не
меньше двух первичных/официальных источников.
- Длинные технические термины привязаны к полю, decision или fragment:
score, access labels, publishedAt, indexedAt, expiresAt, URI#anchor и human
verification не оставлены декларациями.
- Source fact и policy автора разнесены явно. Ни fixed timestamps, ни
synthetic URI, ни scores не выданы за telemetry или реальный corpus.
- Убраны повторы в полевой статье: объём снижен с 13,5 тыс. до 10,95 тыс.
знаков без потери table, stop path, limitation или next action.
**Вердикт прохода 2:** пройдено. Три текста остаются в диапазоне 5–15 тыс.
знаков и целевом диапазоне 8–11 тыс. с допустимым отклонением field-текста до
10,95 тыс.; тон 2025 года наставнический, но технический и не стратегический.
## Проход 3 — SVG, fixture и выпуск
Проверены три собственных SVG:
| Asset | Смысл | Проверка 375 px |
| --- | --- | --- |
| <code>knowledge-retrieval-2025-query-retrieval-citation.svg</code> | index → retrieval → access/freshness → exact citation → human verification | Первый render обнаружил обрезанные длинные подписи. Подписи сокращены, повторный Sharp-render читаем, STOP path виден полностью. |
| <code>knowledge-retrieval-2025-freshness-access-matrix.svg</code> | matrix допуска: high-score expired, closed и no-anchor records отвергаются | Колонки и footer читаемы на 375 px; нет обрезания справа. |
| <code>knowledge-retrieval-2025-verification-loop.svg</code> | human verification loop и видимая stop ветка | Первый render обнаружил длинные labels в карточках; после сокращения все пять шагов и STOP card читаемы на 375 px. |
Последовательность проверок:
- <code>node --check scripts/upgrade-2025-03.mjs</code> — PASS.
- <code>node scripts/upgrade-2025-03.mjs --verify-fixture</code> — PASS,
<strong>34/34</strong> assertions.
- <code>npm run audit:draft -- scripts/upgrade-2025-03.mjs</code> — PASS для
всех трёх slug, включая усиленное требование о цене ошибки в первых двух
<code>&lt;p&gt;</code>.
- <code>xmllint --noout</code> для трёх SVG — PASS.
- SVG safety scan — чисто: нет <code>script</code>,
<code>foreignObject</code>, <code>javascript:</code>,
<code>data:image</code> и event-handler attributes.
- Sharp render на ширине 375 px и ручной visual review — PASS после одного
исправления copy length в каждом из трёх SVG.
Full build намеренно не запускался. Registry, production README, очередь,
стадия Git, commit и push намеренно не менялись. Это не освобождает будущего
интегратора от <code>audit:articles</code>, production build и отдельной
проверки registry, но сохраняет независимость P85 draft-пакета.
**Вердикт прохода 3:** пройдено для draft-пакета. Публикация не выполнена.
## Выпуск после независимой приёмки
Основной редактор повторил три прохода после подключения overlay:
1. **Факты и техника.** Закреплённый README OpenSearch k-NN по commit
<code>150c589849a8ec3bc442d830b43a3eaf4e25fa0c</code> подтверждает дату
12 июня 2024, nearest-neighbor similarity search и фильтры для уточнения
результатов. RFC 9110 §8.8.2 определяет `Last-Modified` как timestamp,
который origin server считает датой изменения selected representation, и
называет способ вычисления implementation detail. NIST SP 800-207
подтверждает отдельные dynamic authentication/authorization checks до
доступа к enterprise resource. Статья корректно оставляет правило о том,
что score не является доказательством, собственным инженерным выводом.
Fixture проходит **34/34**.
2. **Редактура и голос.** Полные тела перечитаны: в первых двух абзацах
названы риск и цена ошибочной цитаты, а значение score, дат, label,
URI#anchor и human verification раскрыто рядом с действием. Три текста не
обещают RAG-платформу и не имитируют реальный corpus. Усиленный
`audit:draft` подтвердил 10 124 / 10 920 / 10 952 знака и структурную
полноту.
3. **Визуал и выпуск.** Три SVG повторно отрисованы Sharp и просмотрены на
375 px: query → citation — 375×513, freshness/access matrix — 375×464,
verification loop — 375×488. Карточки, стрелки, reject reasons и STOP
остаются читаемыми; XML и safety scan чисты. Целевой аудит подтверждает
рисунок, код и минимум две таблицы в каждой статье. Реестр содержит
**250 уникальных** ревизий, `git diff --check` чист, production build
успешно сгенерировал **374** страницы.
Вердикт: мартовская партия готова к отдельному публикационному коммиту.