IOS-170 · Дефект · Граф · ios
Граф: паритет с вебом по мете усечения — декодер молча теряет 5 серверных полей + substrateError показывается кодом
Очередь
P2
ведёт: —
Суть
Источник: сверка веб↔iOS при WEB-174 (o174, 06.08). Заметка целиком: ~/work/wq/o174/ios-parity-notes.md на M4. iOS-дерево НЕ правилось. Актуальное iOS-дерево = ~/Projects/ios-wave5 ветка candidate/integration-wave6-20260802 @6452f730 (⚠️ НЕ сверять по старой копии ~/fable-ios-workspace-m4-20260722 — там графа без 3D, вывод получится противоположный).
Что уже В ПАРИТЕТЕ (не трогать): GraphTruncationMeta = дословный порт graphTruncation.ts; isNoteworthy; честная фраза при срезе без счётчиков; filterRelaxed отдельно; 3D-математика (MetalOrbitScene = порт egoLayout.ts).
РАСХОЖДЕНИЕ 1 — декодер не знает 5 полей, сервер их уже отдаёт, они молча теряются: scoredPairCount, linkScoreFloorDropped, linkScoreThreshold (graphActions.ts), rankedEntities (entityConceptNodes.ts), substrateFallback (notebookDocumentGraph.ts). Почему важно: порог веса связи на малом графе (0.55) выкашивает больше связей, чем все остальные механизмы вместе — пример: 190 пар → 40 прошли порог → 25 пережили кап; старый счётчик показывал «40 из 40», честный — «25 из 190». Без rankedEntities разрыв totalEntities−shownEntities смешивает два разных механизма настройки. ⚠️ rankedEntities в LightRAGGraphBuilder.swift:445 — совпадение имён, локальная переменная, НЕ серверная мета.
РАСХОЖДЕНИЕ 2 — новый код focus-source-missing в substrateError (POST /api/graph, вызывается из GraphService.swift:246): ego-граф вокруг несуществующей/удалённой заметки раньше выглядел как «нет связей», теперь сервер честно говорит, что проблема в запросе. iOS-декодеру код неизвестен.
РАСХОЖДЕНИЕ 3 — чип подставляет substrateError как есть: GraphMessages.string("graph.truncation.chip.substrateError", ["error": substrateError]), а веб теперь шлёт МАШИННЫЙ код (намеренно: текст исключения может нести строку подключения). Пользователь iOS увидит «builder-failed» вместо фразы. Нужен словарь код→локализованная фраза.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/ios/assign -H 'content-type: application/json' \
-d '{"issueId":"IOS-170","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-06T18:29:15.288Z