# P85 — март 2025: поиск по инженерной базе знаний ## Область draft-пакета Пакет заменяет только три overlay-статьи: - editorial-2025-03-practice-knowledge-retrieval — «Поиск по инженерной базе: источник важнее уверенного пересказа». - editorial-2025-03-mechanism-knowledge-retrieval — «Почему vector score не делает документ доказательством». - editorial-2025-03-field-knowledge-retrieval — «Когда поиск обязан остановиться: нет цитаты — нет ответа». Единственный исполняемый артефакт — web/scripts/upgrade-2025-03.mjs. Все 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. Его synthetic:// citations не выданы за реальные документы. Пакет не меняет registry, README, очередь, articles.json, app-страницы, staging, commit, push или full build. Это самостоятельный draft для последующей интеграции. ## Исследование и историческая граница Проверка URL выполнена 31.07.2026 обычными HTTPS-запросами curl -L --fail / curl -I -L --fail, без TLS bypass и без авторизации. Текущая доступность не подменяет историческую дату: для каждого источника ниже есть версия, RFC или immutable commit, существовавшие до марта 2025. | Источник | Историческое закрепление | Узко подтверждаемое утверждение | Граница утверждения | | --- | --- | --- | --- | | [OpenSearch k-NN README](https://raw.githubusercontent.com/opensearch-project/k-NN/150c589849a8ec3bc442d830b43a3eaf4e25fa0c/README.md) | tag 2.15.0.0, immutable commit 150c589849a8ec3bc442d830b43a3eaf4e25fa0c, 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 | Last-Modified сообщает время, в которое 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 — факты, техника и границы **Проверена модель.** - createFixedSyntheticKnowledgeRetrievalInput принимает 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. - inspectFixedSyntheticKnowledgeRetrieval пропускает в citation только active, allowed, fresh и anchor-addressable record. Один score не снимает ни одно из этих условий. - prepareSyntheticKnowledgeHumanReview создаёт лишь in-memory review draft. Даже accepted citation получает статус requires-human-verification, а не заверенный факт. - stopSyntheticKnowledgeAnswer discard-ит только accepted in-memory review draft и возвращает productionEffect: not-attempted. Это не withdrawal реального ответа и не изменение источника. **Проверены отрицательные ветки.** | Случай | Fixed record | Ожидаемое решение | Проверяемая причина | | --- | --- | --- | --- | | freshness | synthetic-adapter-guideline-v1, score 0.97 | не становится citation | expired-at-fixed-retrieval-time | | access | synthetic-security-override-v2, score 0.99 | не становится citation | access-label-not-granted | | citation | synthetic-note-without-anchor-v1 | не становится citation | missing-exact-citation-anchor | | stale-only / closed-only corpus | один неразрешённый candidate | answer stops | stop-no-fresh-authorized-citable-source | | 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. | Редакторская вычитка: - В каждом из первых двух <p> явно названы problem и цена ошибки. Это повторно подтверждено усиленным audit:draft. - В каждой статье есть HTML-table, figure с meaningful alt и 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 | | --- | --- | --- | | knowledge-retrieval-2025-query-retrieval-citation.svg | index → retrieval → access/freshness → exact citation → human verification | Первый render обнаружил обрезанные длинные подписи. Подписи сокращены, повторный Sharp-render читаем, STOP path виден полностью. | | knowledge-retrieval-2025-freshness-access-matrix.svg | matrix допуска: high-score expired, closed и no-anchor records отвергаются | Колонки и footer читаемы на 375 px; нет обрезания справа. | | knowledge-retrieval-2025-verification-loop.svg | human verification loop и видимая stop ветка | Первый render обнаружил длинные labels в карточках; после сокращения все пять шагов и STOP card читаемы на 375 px. | Последовательность проверок: - node --check scripts/upgrade-2025-03.mjs — PASS. - node scripts/upgrade-2025-03.mjs --verify-fixture — PASS, 34/34 assertions. - npm run audit:draft -- scripts/upgrade-2025-03.mjs — PASS для всех трёх slug, включая усиленное требование о цене ошибки в первых двух <p>. - xmllint --noout для трёх SVG — PASS. - SVG safety scan — чисто: нет script, foreignObject, javascript:, data:image и event-handler attributes. - Sharp render на ширине 375 px и ручной visual review — PASS после одного исправления copy length в каждом из трёх SVG. Full build намеренно не запускался. Registry, production README, очередь, стадия Git, commit и push намеренно не менялись. Это не освобождает будущего интегратора от audit:articles, production build и отдельной проверки registry, но сохраняет независимость P85 draft-пакета. **Вердикт прохода 3:** пройдено для draft-пакета. Публикация не выполнена. ## Выпуск после независимой приёмки Основной редактор повторил три прохода после подключения overlay: 1. **Факты и техника.** Закреплённый README OpenSearch k-NN по commit 150c589849a8ec3bc442d830b43a3eaf4e25fa0c подтверждает дату 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** страницы. Вердикт: мартовская партия готова к отдельному публикационному коммиту.