Запрос
текст
Добудь факт «Патч транспорта ресерча: инструмент Render только для чтения через живой CDP-браузер в форме трассы соседей, стены как остановки, отдельное устройство входа с охранником эффектов, герметичные тесты чистых частей; статус «не применён» до двери.» (render_device_patch). Выбирать, когда: Нужна новая способность чтения страниц, которые строятся скриптом или закрыты входом, встроенная рядом с существующими инструментами ресерча.. Нужны: ["neighbor_trace_form","cdp_endpoint","test_account_env"]
owner
{"id":"egor"}
company_name
Shadums
company_oneliner
ядро решений: согласует цель, раскладывает задачу на паттерны; знакомые паттерны переиспользуются быстро через Jev и алгоритмы без вызова большой модели, незнакомое дорешивает LLM и сохраняется паттерном с условием, когда он снова нужен
edge_jev
Jev — быстрая модель TypeSafe AI, в раннем доступе с 15 сентября 2026; TypeSafe заявляет на своих workflow-тестах ускорение 193.6x и снижение стоимости 444.6x относительно сравниваемых LLM (цифры производителя, верхняя граница; собственных замеров Shadums нет — Shadums их себе не приписывает)
edge_window
новый выпуск Jev — окно быстро выйти на рынок; занять его первыми — стремление, не подтверждённый факт
edge_quality
ожидаемый эффект декомпозиции — меньше ошибок и галлюцинаций, потому что знакомое не генерируется заново, а переиспользуется проверенным; измеренного подтверждения пока нет
edge_speed
скорость, лёгкость, адаптивность: каждая решённая задача делает следующую похожую быстрее и дешевле
traction
ядро проходит цикл «задача → паттерн → повторное использование без модели»; три цели в одном графе; код ядра проходит круг код → цель → код (165/165 тестов); выручки нет
team_credential
Егор, основатель; год не пишет код руками — построил платформу агентов, которая делает это за него
round_details
ранний раунд; сумма и условия открыты; сильная дистрибуция важнее цены
deck_link
демо будет готово к понедельнику 28 сентября 2026, ссылку пришлю после
call_slots
неделя 28 сентября — 2 октября, онлайн, 20 минут
sender_signature
Егор, основатель Shadums, shadums.com
proof_roundtrip
код ядра (4 модуля, 54 функции) прошёл круг «код → одна цель → код»: 165/165 тестов, 0 ошибок типов; ранее одна функция decide — 112/112 проверок поведения
proof_reuse
одно правило, полученное от модели, применено к 70 вхождениям в 45 функциях; 2450 из 2875 конструкций собраны обратно за 26.8 с без моделей; повтор того же входа — ноль вызовов модели
proof_portable
переносимость ядра проверена на двух доменах; повторная обработка и восстановление после прерывания протестированы локально
positioning
цель должна переживать разговор с ИИ: система удерживает цель, выполняет, проверяет результат и сохраняет найденный способ как исполняемый опыт; решения объяснимы — видно основание, правило можно поменять
ask_format
15–20-минутный показ демо; персонализация под тезис/портфель адресата обязательна; просьба о личных $4k к 20 октября НЕ актуальна и в письмо не идёт
vision_shared_brain
проект — развивающийся общий мозг: каждый решённый способ (паттерн) сохраняется как исполняемый опыт, и повтор стоит ноль вызовов модели; ценность создаёт тот, кто исследовал, а потребляет тот, кто переиспользует
economy_pay_for_research
платить за время, потраченное на исследование, когда этой работой потом пользуются другие: у записи паттерна есть кто её родил (mintedBy) и цена рождения (вызовы модели, веб-вызовы, время из расписок), у каждого повтора — факт применения без модели; разница между ценой рождения и ценой повтора измерима в реестре
open_registry_as_spec
реестр паттернов открыт на чтение как исполняемая спека платформы (назначение, посылки, форма, законы, источники, цена и число повторов); это стимулирует изучать платформу: чужая запись, взятая из реестра, приносит автору отметку и повтор без модели; запись — только через допуск с проверками
karate_labs_meeting
Созвон с Karate Labs: 28 сентября 2026, 12:30 UTC (09:30 Буэнос-Айрес, 13:30 UK, 18:00 Индия), Google Meet https://meet.google.com/xjv-scuu-sju. Участники с их стороны: Kapil Bakshi (CEO, сооснователь), Peter Thomas (CTO, сооснователь, автор фреймворка Karate), Pier-Jean. Повод: моё прямое письмо основателю «Engineer who works through coding agents» (05.09.2026); Кэпил ответил 11.09 «How are you placed week of 21 Sep?», созвон был назначен на 25.09 и перенесён ими на 28.09 (принято 23.09). Формат: знакомство с основателями, роль инженера не опубликована — уточнить в разговоре.
owner_timezone
America/Argentina/Buenos_Aires, UTC−3, без летнего времени
company_jurisdiction
юридического лица нет — компания ещё не зарегистрирована (слово владельца 2026-09-25 ~17:2xZ: «компании нет никакой»)
neighbor_setting_code
["revision: HEAD = ref: refs/heads/main (.git/HEAD:1); main = 4afbc7a78f291e928cf80125f0c0d3f199e31fbc (.git/refs/heads/main:1), read now (observed)","drift from prior map 5bddb3ac7d50659d4b7f458f84612508fa91deba: 1 commit, .git/logs/refs/heads/main:7390 — 5bddb3ac7d50659d4b7f458f84612508fa91deba to 4afbc7a78f291e928cf80125f0c0d3f199e31fbc (fast-forward from the prior map's SHA, observed); files changed: UNKNOWN (packed objects, no git diff with Read/Grep only). Inferred, not verified: .git/COMMIT_EDITMSG:1-7 describes a bridge-watcher change (_bridge-hand-watch, cdp-sweep; tsc over shared and dev-platform), which would be outside token-vault and app. Because of that, every anchor below was re-read at 4afbc7a and all matched the prior map's lines","neighbor choice: pool reserve floors (poolReserve and poolBackgroundReserve, PoolReserveSettings) — like the target priorityAccount, it is a property of the whole pool, not of one account; it is live (loaded at boot, PATCHed without a restart); it lives in the same doc-service row vault_settings/pool-reserve; it is read by dispatch and by health; it has a screen control. The neighbor is not the target: grep priorityAccount in packages returns 0","port (found, observed): packages/token-vault/src/ports/IPoolReserveStore.ts:23-32 — interface IPoolReserveStore (load, save); :13-18 StoredPoolReserves (partial: interactive, background, updatedAt, updatedBy); :21 PoolReservePatch","storage (found, observed): packages/token-vault/src/infrastructure/DocServicePoolReserveStore.ts:26 — class DocServicePoolReserveStore implements IPoolReserveStore; :7-8 DB imperiaos, COLLECTION vault_settings; :15 DOC_ID = pool-reserve; :50-51 $set under upsert with returnDocument after; :68-77 function pick keeps only its own finite fields (a new field must be added here or it gets dropped)","overlay (found, observed): packages/token-vault/src/domain/policy.ts:82 let storedReserves: StoredSettingsOverlay; :85 interface StoredSettingsOverlay; :91 setStoredPoolReserves; :96 getStoredPoolReserves; :101 __clearStoredPoolReservesForTest; :179 poolReserveSetting; :184 poolReserveFraction","use-case (found, observed): packages/token-vault/src/application/PoolReserveSettings.ts:47 class PoolReserveSettings; :58-71 load (non-fatal, log.error at :66); :74-82 current returns PoolReserveView; :89-117 update: validate, then store.save at :107, then apply at :111; :119-131 apply writes the overlay and checks it back at :127-130; :24 PoolReserveRejected","wiring (found, observed): packages/token-vault/src/server.ts:12-13 imports DocServicePoolReserveStore and PoolReserveSettings; :214 new PoolReserveSettings(new DocServicePoolReserveStore(STORAGE_URL)); :215 await poolReserve.load(); :256-257 registerRoutes receives poolReserve; packages/token-vault/src/routes.ts:43 optional slot poolReserve?: PoolReserveSettings","routes (found, observed): packages/token-vault/src/routes.ts:157-163 GET /api/pool/reserve (503 'pool reserve settings not wired' at :159, otherwise ok:true plus current() at :162); :165-189 PATCH /api/pool/reserve (update at :174; PoolReserveRejected gives 400, anything else gives 500 at :184; log.error at :186)","reads/health (found, observed): routes.ts:218-226 GET /api/tokens/health spreads checkHealth.execute(); packages/token-vault/src/application/CheckHealth.ts:60-61 read poolReserveSetting() and poolBackgroundReserveSetting(); :91-94 poolReserve, poolBackgroundReserve, poolReserveSource, poolReserveLimits; packages/token-vault/src/domain/types.ts:221 HealthSummary, :280 poolReserve, :282 poolBackgroundReserve, :289 poolReserveSource, :291 poolReserveLimits; list routes.ts:192-215 GET /api/tokens, selection.rank at :208; dispatch reads the floor at packages/token-vault/src/application/GetBestToken.ts:464 poolReserveFraction(), with the 'pool reserve breached' refusal at :485-486, before ranking","shared helper and ALL callers (found, observed; grep -w rankTokens in packages returns 4 call sites plus the definition and imports): definition packages/token-vault/src/domain/selectionChain.ts:211 rankTokens(candidates, now); callers: GetBestToken.ts:362 (inside private rank at :361, which is called at :496 primary, :499 fallback and :534 last resort, where the filter is isAdministrativelyActive and not isProviderWindowFull rather than canServeRequest); CheckHealth.ts:52 bestAvailable; SwitchActiveToken.ts:105 switch to next; routes.ts:201 list rank. The imports at GetBestToken.ts:12, CheckHealth.ts:10, SwitchActiveToken.ts:6 and routes.ts:17 are not calls","tests (found, observed): packages/token-vault/src/__tests__/pool-reserve-settings.test.ts:49 fakeStore(initial: StoredPoolReserves); :113 READ; :147 WRITE; :197 'survives the restart'; :207 APPLY; packages/token-vault/src/__tests__/pool-reserve.test.ts:170 describe poolReserveFraction; :325 'GetBestToken — the floor reads WHO is asking'; route-test pattern for another route: packages/token-vault/src/__tests__/patch-metadata-route.test.ts:88 registerRoutes(app, makeStubUseCases(repo)); screen: packages/app/tests/unit/vault-account-list.test.ts:2 imports vaultGroups and vaultOrder only","proxy (found, observed): packages/app/app/api/tokens/route.ts:26 GET, fetchVault /api/tokens at :28 and /api/tokens/health at :29; :40 POST only, no PATCH export; :73-91 action pool-reserve sends a PATCH to VAULT_URL/api/pool/reserve at :75, returns 503 'Token vault unreachable' when there is no response (:89), and otherwise passes the vault's status through (:91)","screen (found, observed): packages/app/views/platform/TokenVaultView.tsx:134 health keys poolBackgroundReserve, poolReserveSource, poolReserveLimits, poolForecast; :1332 function AccountCard(token, spend, now, doAction, actionLoading); :1338 isActive = status active; :1339 rank = token.selection.rank or null; :1361 card root div with a green frame when isActive and no onClick; :1434 activate button doAction('switch'); :1544 list.map renders AccountCard; :2036 doAction; :2055 reserveError; :2075-2090 onReserveCommit does fetch('/api/tokens?action=pool-reserve') at :2082, calls setReserveError on failure at :2087 and invalidateAsyncData('platform:tokens') on success at :2088","ABSENT (grep at HEAD 4afbc7a): 'priorityAccount|api/pool/priority|pool-priority|PoolPriority' in packages, excluding node_modules — 0; 'api/pool/reserve|rankTokens' in packages/token-vault/src/__tests__ — 0 (no route test for the reserve, no direct rankTokens test); 'AccountCard|pool-reserve' in packages/app/tests — 0; PATCH export in packages/app/app/api/tokens/route.ts — 0 (only GET at :26 and POST at :40)","divergences (outside the layer model): packages/token-vault/src/application/SwitchActiveToken.ts:105 and CheckHealth.ts:52 order tokens with rankTokens directly, not through GetBestToken.rank, so a priority applied only in GetBestToken.rank at :361 would not reach switch-to-next, health bestAvailable or the list rank at routes.ts:201 (inference); GetBestToken.ts:534 last resort calls the same rank on tokens that cannot serve, so the priority must be gated on canServeRequest inside rank or kept out of that tier (inference, matches S2-14); pick in DocServicePoolReserveStore.ts:68-77 and PoolReservePatch at IPoolReserveStore.ts:21 accept numbers only, so a string or null priorityAccount in the same document needs its own field handling (inference)"]
acceptance_scenarios
["@stmt-1 @set [S1-01] Дано: priorityAccount пула = null, в пуле аккаунты acc1 и acc2. Когда: владелец записывает приоритет пула accountName = «acc2». Тогда: ответ ok:true, priorityAccount = «acc2»; повторное чтение приоритета возвращает «acc2».","@stmt-1 @set [S1-02] Дано: priorityAccount = «acc2» (самопереход). Когда: владелец записывает приоритет accountName = «acc2». Тогда: ok:true, priorityAccount = «acc2», ошибки нет; повторное чтение возвращает «acc2».","@stmt-1 @unset [S1-03] Дано: priorityAccount = «acc2». Когда: владелец записывает приоритет accountName = null. Тогда: ok:true, priorityAccount = null; повторное чтение возвращает null.","@stmt-1 @unset [S1-04] Дано: priorityAccount = null (повторное снятие, no-op). Когда: владелец записывает приоритет accountName = null. Тогда: ok:true, priorityAccount = null, ошибки нет; повторное чтение возвращает null.","@stmt-1 @toggle [S1-05] Дано: priorityAccount = «acc1». Когда: владелец записывает приоритет accountName = «acc2». Тогда: ok:true, priorityAccount = «acc2»; повторное чтение возвращает «acc2»; у пула одно значение, acc1 больше не приоритет.","@stmt-1 @toggle @sequence [S1-06] Дано: priorityAccount = null. Когда: владелец записывает accountName = «acc1», и затем записывает accountName = null. Тогда: итоговое чтение возвращает null, ровно исходное состояние.","@stmt-1 @sequence @negative [S1-07] Дано: priorityAccount = null. Когда: владелец записывает accountName = null, и затем записывает accountName = «acc1» (порядок S1-06 переставлен). Тогда: итоговое чтение возвращает «acc1», а не null.","@stmt-1 @negative [S1-08] Дано: priorityAccount = «acc1». Когда: владелец отправляет запись приоритета без ключа accountName. Тогда: отказ, код 400, ok:false, причина в поле error; save хранилища не вызывался; чтение возвращает «acc1».","@stmt-1 @negative [S1-09] Дано: priorityAccount = null. Когда: владелец записывает приоритет accountName = 42. Тогда: отказ, код 400, ok:false; save хранилища не вызывался; чтение возвращает null.","@stmt-1 @dependency-down [S1-10] Дано: priorityAccount = «acc1»; хранилище настроек отвечает error на save. Когда: владелец записывает приоритет accountName = «acc2». Тогда: отказ, код 500, ok:false, запись ошибки в журнале; чтение возвращает «acc1»; выдача продолжает ставить acc1 первым (порядок: проверка, хранилище, память).","@stmt-1 @dependency-down [S1-11] Дано: хранилище настроек unavailable на load. Когда: волт стартует. Тогда: старт не падает, в журнале ошибка загрузки; чтение приоритета возвращает null; выдача идёт без приоритета.","@stmt-1 @dependency-down [S1-12] Дано: волт собран без объекта настроек пула. Когда: владелец читает приоритет пула. Тогда: отказ, код 503, ok:false, текст «not wired» (как у маршрутов резерва).","@stmt-1 @happy [S1-13] Дано: priorityAccount = «acc2» записан в хранилище. Когда: процесс волта перезапускается с тем же хранилищем. Тогда: чтение приоритета возвращает «acc2» (образец: тест резерва «survives the restart»).","@stmt-1 @happy [S1-14] Дано: в общем документе хранилища фоновый резерв 0.08, priorityAccount = null. Когда: владелец записывает приоритет accountName = «acc2». Тогда: чтение резерва даёт background 0.08; чтение приоритета даёт «acc2».","@stmt-1 @happy [S1-15] Дано: priorityAccount = «acc2», фоновый резерв 0.05. Когда: владелец записывает резерв background = 0.08. Тогда: чтение резерва даёт background 0.08; чтение приоритета по-прежнему «acc2».","@stmt-1 @characterization [S1-16] Текущее поведение. Дано: в хранилище документ резерва в сегодняшнем виде, без поля priorityAccount, с interactive 0.05 и background 0.08. Когда: волт загружает настройки. Тогда: чтение резерва отдаёт interactive 0.05 и background 0.08, как до правки; чтение приоритета отдаёт null.","@stmt-2 @set @happy @tier-primary [S2-01] Дано: acc1 util7d 0.30, acc2 util7d 0.80, оба primary и способны обслужить запрос; при null выдаётся acc1; priorityAccount = «acc2». Когда: интерактивный вызов выдачи токена. Тогда: выдан accountName = «acc2».","@stmt-2 @happy @tier-primary [S2-02] Дано: acc1 util7d 0.30, acc2 util7d 0.50, acc3 util7d 0.80, все способны обслужить; priorityAccount = «acc3». Когда: вызов выдачи. Тогда: первый кандидат acc3; взаимный порядок acc1 и acc2 после него совпадает с порядком при null.","@stmt-2 @unset @tier-primary [S2-03] Дано: acc1 util7d 0.30, acc2 util7d 0.80; приоритет acc2 снят, priorityAccount = null. Когда: вызов выдачи. Тогда: выдан acc1; порядок кандидатов совпадает с порядком без функции.","@stmt-2 @toggle @tier-primary [S2-04] Дано: acc1 util7d 0.30, acc2 util7d 0.80; приоритет переключён с acc1 на acc2, priorityAccount = «acc2». Когда: вызов выдачи. Тогда: выдан acc2, acc1 стоит вторым.","@stmt-2 @negative @tier-primary [S2-05] Дано: acc1 util7d 0.30, acc2 util7d 1.00 (мёртв), priorityAccount = «acc2». Когда: интерактивный вызов выдачи. Тогда: выдан acc1; порядок кандидатов совпадает с порядком при null.","@stmt-2 @negative @tier-primary [S2-06] Структура с примерами. Дано: порог недели 1.00 (VAULT_TURN_HEADROOM_7D = 0), acc1 util7d 0.30, priorityAccount = «acc2». Когда: вызов выдачи при util7d acc2 из строки примеров. Тогда: примеры (одна строка — одно нарушение): 0.99 выдан acc2; 1.00 выдан acc1; 1.01 выдан acc1.","@stmt-2 @negative @tier-primary [S2-07] Дано: priorityAccount = «acc2», статус acc2 = disabled, acc1 жив. Когда: вызов выдачи. Тогда: выдан acc1, порядок как при null.","@stmt-2 @negative @tier-primary [S2-08] Дано: priorityAccount = «acc9», в пуле только acc1 и acc2. Когда: вызов выдачи. Тогда: выдан тот же аккаунт и в том же порядке, что при null; ошибки нет.","@stmt-2 @negative [S2-09] Дано: priorityAccount = «acc2», acc2 жив, acc1 жив. Когда: вызов выдачи с исключением acc2. Тогда: выдан acc1; acc2 не выдан (приоритет упорядочивает только выживших после жёстких фильтров).","@stmt-2 @negative [S2-10] Дано: priorityAccount = «acc2», оба живы. Когда: вызов выдачи с привязкой к acc1. Тогда: выдан acc1.","@stmt-2 @negative [S2-11] Дано: priorityAccount = «acc2», лучший остаток недели 0.03 при интерактивном полу 0.05. Когда: интерактивный вызов выдачи. Тогда: отказ с текстом «pool reserve breached», токен не выдан.","@stmt-2 @negative @tier-fallback [S2-12] Дано: acc1 роль primary, жив; acc3 роль fallback, жив; priorityAccount = «acc3». Когда: вызов выдачи. Тогда: выдан acc1 (роль сильнее приоритета: fallback не соревнуется с живым primary).","@stmt-2 @happy @tier-fallback [S2-13] Дано: primary acc1 и acc2 с util7d 1.00; fallback acc3 util7d 0.30 и acc4 util7d 0.60, оба живы; priorityAccount = «acc4». Когда: вызов выдачи. Тогда: выдан acc4.","@stmt-2 @negative @tier-last-resort [S2-14] Дано: порог недели 0.80 (VAULT_TURN_HEADROOM_7D = 0.20), acc1 util7d 0.85, acc2 util7d 0.90, ни один не способен обслужить, окно провайдера не выбрано, fallback нет, requireUsable не задан; priorityAccount = «acc2». Когда: вызов выдачи. Тогда: выдан тот же аккаунт и порядок кандидатов тот же, что при null в этой конфигурации; acc2 не поднят приоритетом.","@stmt-2 @happy @tier-model-aware [S2-15] Дано: model-aware включён, запрошенная модель не капнута ни на acc1, ни на acc2; acc1 util7d 0.30, acc2 util7d 0.80; priorityAccount = «acc2». Когда: вызов выдачи с этой моделью. Тогда: выдан acc2.","@stmt-2 @negative @tier-model-aware [S2-16] Дано: model-aware включён, запрошенная модель капнута на acc2 и не капнута на acc1; priorityAccount = «acc2». Когда: вызов выдачи с этой моделью. Тогда: выдан acc1.","@stmt-2 @sequence @set [S2-17] Дано: экземпляр выдачи создан при priorityAccount = null, acc1 util7d 0.30, acc2 util7d 0.80. Когда: владелец записывает приоритет «acc2», и затем тот же экземпляр выполняет вызов выдачи. Тогда: выдан acc2, без перезапуска (образец: тест резерва APPLY).","@stmt-2 @sequence @negative [S2-18] Дано: экземпляр выдачи создан при priorityAccount = null, acc1 util7d 0.30, acc2 util7d 0.80. Когда: тот же экземпляр выполняет вызов выдачи, и затем владелец записывает приоритет «acc2» (порядок S2-17 переставлен). Тогда: этот вызов выдал acc1.","@stmt-2 @dependency-down [S2-19] Дано: хранилище настроек unavailable на load при старте; acc1 util7d 0.30, acc2 util7d 0.80. Когда: вызов выдачи. Тогда: выдан acc1, порядок как при null, отказа выдачи нет.","@stmt-2 @characterization [S2-20] Текущее поведение. Дано: priorityAccount = null. Когда: полный прогон существующих тестов выдачи (привязка, исключение, фолбэк, модельные капы, резерв). Тогда: 0 упавших; выбор и порядок совпадают со снимком, записанным на ревизии 5bddb3a до правки.","@stmt-3 @set @happy [S3-01] Дано: priorityAccount = «acc2». Когда: экран читает сводку здоровья волта. Тогда: ok:true и priorityAccount = «acc2».","@stmt-3 @set @happy [S3-02] Дано: priorityAccount = «acc2». Когда: экран читает список токенов. Тогда: ok:true и priorityAccount = «acc2».","@stmt-3 @unset [S3-03] Дано: priorityAccount только что снят в null. Когда: экран читает сводку здоровья. Тогда: ключ priorityAccount присутствует со значением null.","@stmt-3 @unset [S3-04] Дано: priorityAccount только что снят в null. Когда: экран читает список токенов. Тогда: ключ priorityAccount присутствует со значением null.","@stmt-3 @toggle [S3-05] Дано: приоритет переключён с acc1 на acc2. Когда: экран читает сводку здоровья. Тогда: priorityAccount = «acc2».","@stmt-3 @negative [S3-06] Дано: priorityAccount = «acc2», acc2 util7d 1.00. Когда: экран читает список токенов. Тогда: priorityAccount = «acc2», а selection.rank у acc2 = null (исчерпанный не имеет места в выдаче).","@stmt-3 @dependency-down [S3-07] Дано: хранилище настроек unavailable на load при старте. Когда: экран читает сводку здоровья. Тогда: ok:true, priorityAccount = null; поля poolReserve, poolBackgroundReserve, poolReserveSource, poolReserveLimits присутствуют.","@stmt-3 @characterization [S3-08] Текущее поведение. Дано: priorityAccount = null, сохранён interactive резерв 0.05. Когда: экран читает сводку здоровья и список токенов. Тогда: poolReserve = 0.05; poolBackgroundReserve, poolReserveSource, poolReserveLimits и selection.rank каждого токена совпадают со снимком до правки; новое только поле priorityAccount.","@stmt-4 @set [S4-01] Дано: приоритета нет, карточки acc1 и acc2 в группе с недельной квотой. Когда: владелец выбирает карточку acc1. Тогда: уходит запись priority = «acc1»; подсвечена только acc1; после обновления данных экрана подсветка у acc1.","@stmt-4 @unset [S4-02] Дано: подсвечена acc1. Когда: владелец снова выбирает карточку acc1. Тогда: уходит запись priority = null; подсвеченных карточек 0; после обновления данных тоже 0.","@stmt-4 @toggle [S4-03] Дано: подсвечена acc1. Когда: владелец выбирает карточку acc2. Тогда: уходит запись priority = «acc2»; подсвечена только acc2; подсвеченных карточек ровно 1.","@stmt-4 @toggle @sequence [S4-04] Дано: приоритета нет, карточки acc1 и acc2. Когда: владелец выбирает acc1, и затем снова выбирает acc1. Тогда: записи ушли в порядке «acc1», null; подсвеченных карточек 0, ровно исходное состояние.","@stmt-4 @negative [S4-05] Дано: подсвечена acc1. Когда: владелец нажимает кнопку «активировать» внутри карточки acc2. Тогда: уходит действие switch; запись приоритета не уходит; подсветка остаётся у acc1.","@stmt-4 @dependency-down [S4-06] Дано: подсвечена acc1; волт отвечает на запись приоритета отказом с кодом 503. Когда: владелец выбирает карточку acc2. Тогда: подсветка остаётся у acc1; на экране текст отказа (образец: прокси резерва передаёт статус отказа экрану).","@stmt-4 @dependency-down [S4-07] Дано: прокси экрана получает reachable = false и health = null. Когда: экран обновляет данные. Тогда: подсвеченных приоритетом карточек 0.","@stmt-4 @characterization [S4-08] Текущее поведение. Дано: priorityAccount = null. Когда: экран отрисовывает карточки. Тогда: рамка и порядок карточек совпадают со снимком до правки; зелёная рамка только у карточки со статусом active.","@stmt-4 @happy [S4-09] Дано: карточки acc1, acc2, acc3; priorityAccount = «acc3». Когда: экран отрисовывает карточки. Тогда: подсвечена ровно 1 карточка — acc3.","@stmt-4 @sequence [S4-10] Дано: приоритета нет, карточки acc1 и acc2. Когда: владелец выбирает acc1, затем acc2, затем acc2. Тогда: записи ушли в порядке «acc1», «acc2», null; после третьего выбора подсвеченных карточек 0.","@stmt-4 @sequence @negative [S4-11] Дано: приоритета нет, карточки acc1 и acc2. Когда: владелец выбирает acc2, затем acc2, затем acc1 (порядок S4-10 переставлен). Тогда: записи ушли в порядке «acc2», null, «acc1»; подсвечена только acc1.","@stmt-5 @happy [S5-01] Дано: набор из двух аккаунтов, priorityAccount = «acc2». Когда: прогон тестов пакета token-vault. Тогда: зелёные тесты «жив — первый» и «мёртв (util7d 1.00) — порядок как без приоритета».","@stmt-5 @negative [S5-02] Дано: мутант, в котором rank ставит приоритет первым без проверки способности обслужить. Когда: прогон тестов пакета token-vault. Тогда: тест «мёртв (util7d 1.00) — порядок как без приоритета» красный.","@stmt-5 @negative @tier-last-resort [S5-03] Дано: мутант, в котором приоритет поднимается и в ярусе last resort. Когда: прогон тестов пакета token-vault. Тогда: тест сценария S2-14 красный.","@stmt-5 @happy [S5-04] Дано: волт с поддельным хранилищем в памяти. Когда: прогон тестов маршрутов. Тогда: зелёные set, unset, switch с повторным чтением после каждой записи и отказ с кодом 400 на пустое тело.","@stmt-5 @negative [S5-05] Дано: мутант маршрута, вызывающий save хранилища до проверки тела. Когда: прогон тестов маршрутов. Тогда: тест «запись не выполнялась» для тела без accountName красный.","@stmt-5 @dependency-down [S5-06] Дано: поддельное хранилище в памяти бросает error на save, реальная сеть не используется. Когда: прогон тестов маршрутов. Тогда: зелёный тест: отказ с кодом 500 и повторное чтение возвращает прежнее значение «acc1».","@stmt-5 @sequence [S5-07] Дано: приоритета нет, карточки acc1 и acc2. Когда: проверка экрана выбирает acc1, затем acc2, затем acc2. Тогда: проверка зелёная: записи ушли в порядке «acc1», «acc2», null, подсвеченных карточек 0.","@stmt-5 @sequence @negative [S5-08] Дано: экран-мутант, который на повторный выбор шлёт priority = «acc2» вместо null. Когда: проверка экрана выбирает acc1, затем acc2, затем acc2. Тогда: проверка красная — после третьего выбора acc2 осталась подсвеченной.","@stmt-5 @characterization [S5-09] Текущее поведение. Дано: набор тестов token-vault и app на ревизии 5bddb3a (включая vault-account-list.test.ts). Когда: прогон до и после правки. Тогда: 0 упавших прежних тестов; число прежних тестов не уменьшилось."]
reproducer_test
packages/app/tests/unit/vault-card-tooltip-owner.test.tsx: F2P — открываем ⓘ-панель карточки acc1. Панель видна, но над кнопкой ⓘ всплывает подсказка всей карточки «click to make this account the pool priority — served first while it has headroom». Ожидается, что подсказки нет. Красный предсказан, не запущен
work_screen_tree
["ЦЕЛЬ (мета-характеристика): дерево рабочих экранов (не лендингов), на которых человек ставит задачу и видит, как она делается; нужно, чтобы найти в нём узел экрана shadums.com (ввод, вывод, дерево классификации цели)","КОРЕНЬ (N=11: ChatGPT, Claude, Manus, Devin, Cursor, Lindy, Dust, n8n, LangGraph Studio/LangSmith, Relevance AI, Perplexity): (1) вывод результата виден на рабочем экране, 11/11 = 1.00; причина по принципу: человек отдаёт работу, чтобы получить результат, и принять его или возразить может только тогда, когда видит его там же, где поставил задачу · (2) ход работы виден, 10/11 = 0.91 в широком прочтении (включая статус «Thinking»); в узком прочтении (только пошаговый след) 9/11 = 0.82; причина по принципу: работа, отданная другому исполнителю, скрыта от человека, и без видимого хода он не может ни проверить результат, ни вмешаться вовремя. Решение по нормализации: в корень идёт широкое прочтение; узкое тоже ≥ 0.8, поэтому состав корня от этого выбора не меняется. Какой 1 сайт не показывает ход работы, в записях не названо (пробел)","НЕ В КОРНЕ: «вывод в ленте разговора или треда» 6/11 = 0.55 (отсутствие, различие ветвей); «вывод на холсте или в графе» 3/11 = 0.27 (отсутствие); «вывод в файлах кода» 2/11 = 0.18 (отсутствие); место поля ввода, вложения и голос, панель истории, источники и цитаты, действия над результатом, показ ошибки и ожидания, поведение при повторе задачи — в записях не заполнены, это пробел [—], а не отсутствие. Их нельзя ни отклонить, ни использовать для деления. Отклонённых признаков с долей ≥ 0.8 нет","КОРЕНЬ → ребро «вывод: где показан = холст или граф сценария» (внешняя причина: сегмент и бизнес-модель — продают сборку повторяемой автоматизации, а не ответ на разовый запрос) → ПЛАТФОРМА СЦЕНАРИЕВ [n8n, LangGraph Studio/LangSmith, Lindy], лист из 3; остановка: в записях нет следующего документированного свойства с внешней причиной различия","КОРЕНЬ → ребро «вывод: где показан = файлы кода в IDE или редакторе» (внешняя причина: платформа и сегмент — результат для разработчика это изменение репозитория) → КОД В СРЕДЕ [Devin, Cursor]","КОД В СРЕДЕ → ребро «среда: где запущена = боковая панель редактора пользователя (Cmd+I)» (внешняя причина: канал — работает внутри локального редактора владельца) → ИНСТРУМЕНТ В РЕДАКТОРЕ [Cursor], лист из 1 (меньше 2 записей)","КОД В СРЕДЕ → ребро «среда: где запущена = сессия агента в веб-приложении app.devin.ai» (внешняя причина: канал и бизнес-модель — облачная песочница агента, работа отдаётся целиком) → АГЕНТ-РАЗРАБОТЧИК [Devin], лист из 1 (меньше 2 записей)","КОРЕНЬ → ребро «вывод: где показан = лента разговора или треда задачи» (внешняя причина: сегмент — широкий круг работников умственного труда, привычный канал — переписка) → РАЗГОВОР [ChatGPT, Claude, Dust, Perplexity, Manus, Relevance AI]","РАЗГОВОР → ребро «вывод: единица = задача (разговор задачи, статусы, шаринг задачи)» (внешняя причина: бизнес-модель — продают делегирование автономной работы, а не ответ) → ДЕЛЕГИРОВАННАЯ ЗАДАЧА [Manus, Relevance AI]","ДЕЛЕГИРОВАННАЯ ЗАДАЧА → ребро «ход работы: где показан = живая среда агента (браузер, VS Code), управление можно перехватить» (внешняя причина: платформа — агент работает в своём компьютере или браузере) → [Manus], лист из 1 (меньше 2 записей)","ДЕЛЕГИРОВАННАЯ ЗАДАЧА → ребро «ход работы: где показан = шаги и запуски инструментов в треде, одобрение вызова инструмента» (внешняя причина: сегмент и регуляция — корпоративная «рабочая сила» агентов, где действия требуют надзора человека) → ОЧЕРЕДЬ ЗАДАЧ АГЕНТА [Relevance AI], лист из 1 (меньше 2 записей)","РАЗГОВОР → ребро «вывод: единица = ответ-сообщение в разговоре» (внешняя причина: бизнес-модель — ассистент «вопрос → ответ») → ЧАТ-АССИСТЕНТ [ChatGPT, Claude, Dust, Perplexity], лист из 4; остановка: следующий возможный делитель (например, источники и цитаты у Perplexity) в записях не заполнен, это пробел, поэтому делить нельзя","КОНВЕРГЕНЦИЯ (convergent=true, для объединения ветвей не используется): «живая среда агента, управление можно перехватить» независимо возникла у Manus (ветвь РАЗГОВОР) и у Devin (ветвь КОД В СРЕДЕ, по документации Devin: IDE с перехватом управления); чат-ввод поверх холста (n8n — чат агента; Lindy — «Ask Agent Builder») независимо повторяет поле ввода ветви РАЗГОВОР","ПРОВЕРКА РАЗБИЕНИЯ: листы 3 (ПЛАТФОРМА СЦЕНАРИЕВ) + 1 (Cursor) + 1 (Devin) + 1 (Manus) + 1 (Relevance AI) + 4 (ЧАТ-АССИСТЕНТ) = 11 = N; каждая запись лежит ровно в одном листе, пересечений нет"]
statement_coverage_verdicts
["Случай 1 «работало только после выкатки, а ядро сказало принято»: утверждения 122 (task-target.json:412), 123 (:413), 124 (:414). По тексту — частично: 123 и 124 требуют выкатку и живую пробу, а исход admitted только по зелёной внешней пробе; но зелёная дверь с 0/0 проверок нигде не запрещена. По коду — частично: proveOutward task.ts:4947–4992, liveDeployPort :7079, liveProbePort :7129, подключены в CLI :7305–7306, вопрос observed :2987–3001; проверки [s123:8ef5acdb] и [s124:ba568455] есть, но только на подставных портах. Итог — частично. Остаток: R1, R2, R3, R4, R5","Случай 2 «клик по карточке перекрыл тултипы»: утверждения 125 (:415), 126 (:416), а также 124 (:414) — проба экрана взаимодействием. По тексту — целиком: 125 прямо называет «hover ребёнка под новым кликом родителя» и требует вопроса владельцу, 126 судит свойство родителя проверками частей. По коду — нет: в task.ts и packages по hover, tooltip, interaction, stopPropagation, statement 125/126 найдено 0; проверок s125 и s126 в statement-checks 0. Итог — частично (есть только текст). Остаток: R1, R6, R7, R8","Случай 3 «клик мигает весь экран»: ни одно утверждение в 0–126 это свойство не называет; соседние — 125 (:415, проверки взаимодействия render+event+assert, но только для уже существующих взаимодействий) и 126 (:416). Утверждение 127 (:417) называет этот спецймен, но оно вне диапазона. По тексту — нет, по коду — нет (тот же пустой grep), проверок 0. Итог — нет. Остаток: R9, R10"]
parent_task
Устройство «рендер страницы за логином» для ресерча (расширение утверждения 116: ресерч читает дом ядра и веб; сегодня он не читает страницы, которые рендерятся скриптом или лежат за входом — прогон 60c7c73e честно назвал: ни один из 11 рабочих экранов конкурентов не открыт живьём). Что есть: на этой машине живёт Chrome с CDP (юнит imperiaos-chrome-chatgpt, http://127.0.0.1:9226, профиль /home/deploy/.chrome-chatgpt, выход через socks5://127.0.0.1:1080, xvfb 1440x900) — он уже вошёл в chatgpt.com (аккаунт admiralpirog@gmail.com, план plus); Playwright в /home/deploy/apps/imperiaos/node_modules/playwright умеет connectOverCDP. Тестовый аккаунт для регистраций в чужих продуктах — TEST_GOOGLE_EMAIL / TEST_GOOGLE_PASSWORD в /home/deploy/.config/imperiaos/env/imperiaos.env (слово владельца 2026-09-27: использовать везде для регистрации и проверки). Сделай: (1) устройство ресерча render(url) → DOM-текст, ссылки, дерево элементов (роли, тексты, где поле ввода, где вывод), снимок экрана в файл — через живой профиль CDP 9226, в той же форме вызова трассы ресерча, что Read/Grep/WebFetch (utterance-трасса {tool:'Render', kind:'read', input}); утверждение об этом устройстве в стиле соседних (одно свойство, специмен = прогон 60c7c73e, исполняемая проверка); (2) вход в продукты за логином тестовым аккаунтом через Google — там, где вход требует капчи, кода из почты или телефона, устройство останавливается и называет это как вопрос владельцу (физическое действие), а не обходит; ничего не публикует и не пишет в чужих продуктах; (3) прогон: перечитать живьём рабочие экраны из прогона 60c7c73e (ChatGPT сразу — вход есть; Claude, Perplexity, Manus, Devin, Cursor, Lindy, Dust, n8n, LangSmith, Relevance — после входа) и обновить записи P1–P11 с меткой «живьём», назвав, что осталось непрочитанным и почему. Наружу ничего, кроме входов тестовым аккаунтом.
Классификация
вердикт
artifact:code
причина
new: no candidate
известных записей
260
Понятие c0
признаки
—
записи
jobs:letter:ats-form, jobs:letter:cold-founder, jobs:letter:money-system, jobs:letter:agent-tooling, jobs:letter:follow-up, jobs:letter:third-touch, compute_arithmetic, find_investor_fund_match, fix_code_defect_until_oracle_passes, build_goal_achievement_plan, find_goal_first_step, build_goal_milestones, build_goal_monitoring, find_goal_obstacle_plans, produce_code_patch, build_meeting_call_brief, find_meeting_local_time, find_role_requirements, find_meeting_likely_questions, find_org_profile, find_org_recent_news, find_owner_timezone, find_meeting_questions_to_ask, find_investor_decision_partner_name, find_investor_contact_channel, find_investor_opener, find_investor_thesis_fit, find_investor_signal_url, find_investor_signal, find_investor_thesis_source_url, find_company_oneliner_en, find_investor_thesis_quote, find_investor_thesis_bridge, find_counterparty_profile, build_investor_outreach_pack_for_named_fund, find_product_fit_usecase_goals, find_research_date, find_research_limits, find_excluded_usecases_by_hard_criteria, find_excluded_usecases, find_analog_usecase_catalog, build_inbox_digest_with_reply_drafts, find_customer_prospects_with_contacts, find_prospect_selection_criteria, find_prospect_gaps_and_assumptions, write_cold_email_with_org_news_hook, find_email_subject_from_org_news, find_org_news_bridge_en, find_org_news_decision_maker_name, find_org_recent_news_source_url, compare_vendors_and_recommend_one, find_research_unverified_gaps, find_recommendation_rationale, find_unverified_gaps_and_assumptions, find_options_reviews_summary, build_weighted_decision_matrix, build_weighted_decision_matrix_with_sensitivity, build_weighted_decision_matrix_with_robustness, find_options_tco_table, find_recommended_option, find_reproducer_test, find_investor_criteria, find_investor_shortlist, write_investor_first_emails_by_thesis, find_investors_and_draft_first_emails, run_oracle_before_fix_and_save_red_output, find_defect_root_cause_by_pass_fail_diff, rerun_oracle_after_patch_compare_to_baseline, find_investor_email_addressee_partner_name, find_investors_then_write_first_emails_per_partner, find_competitor_feature_catalog, find_analysis_date_cutoff, build_feature_fit_gap_table, find_rejected_features_with_reasons, select_features_by_kano_confidence_effort_as_goals, analyze_competitor_features_fit_gap_select_goals, select_features_by_declared_formula_as_goals_with_acceptance, select_fit_gap_features_by_rice_pert_as_goals_with_acceptance, select_features_by_rice_pert_as_goals_with_acceptance, select_fit_gap_features_by_value_confidence_pert_as_goals, select_features_by_rice_pert_formula_as_goals, select_fit_gap_features_by_rice_as_goals_with_acceptance, select_features_by_rice_as_goals_with_acceptance, select_features_by_value_confidence_effort_as_goals, select_features_by_formula_as_goals_with_acceptance, select_features_by_rice_capacity_as_goals_with_acceptance, select_fit_gap_features_by_rice_records_as_goals, fix_kernel_door_defect_until_oracle_green, rerun_oracle_after_patch_and_diff_per_case, write_minimal_kernel_patch_from_statements_until_oracle_green, extract_gap_core_from_review_item, write_measurable_acceptance_criterion_from_gap_core, design_missing_record_interfaces_from_gap_and_criterion, derive_executable_module_assertions_from_interfaces_and_acceptance, derive_red_green_readiness_scenario_from_done_criterion, implement_review_feature_as_records_with_readiness_test, write_gwt_acceptance_criteria_list_from_gap_core, design_prov_provenance_schema_and_migrate_text_records, find_competitor_feature_user_facing_reference, rewrite_done_criterion_into_red_given_when_then_scenarios, find_kernel_exit_points_sink_inventory, find_mail_inbound_producer_status_in_registry, write_secret_never_in_model_invariant_from_gap, find_webhook_door_contract, write_minimal_kernel_patch_from_interfaces_and_scenarios_until_green, write_gwt_acceptance_criteria_for_inbound_channel_with_abuse_cases, write_red_canary_sink_acceptance_test_before_patch, run_readiness_scenarios_and_cite_journal_seq_with_unverified, find_secret_typed_fact_keys_from_type_registry, write_gwt_acceptance_criteria_for_review_feature_with_e2e_done, write_gwt_acceptance_criteria_for_owner_fact_memory_view_find_forget, write_gwt_acceptance_criteria_for_review_feature_with_done_as_e2e, design_record_ops_list_inspect_forget_put_with_tombstone_journal, write_e2e_gwt_acceptance_criteria_for_review_feature_from_gap_core, write_3_5_gwt_acceptance_criteria_with_end_to_end_done_from_feature_task, design_record_store_interfaces_with_tombstone_and_journal, derive_record_store_interfaces_with_tombstone_and_journal, find_steps_that_must_run_without_model_call, design_list_inspect_forget_put_with_tombstone_and_journal, rewrite_gap_core_and_done_criterion_into_given_when_then_readiness_scenarios, write_gwt_acceptance_criteria_for_review_feature_with_done_e2e, design_mail_forward_to_task_records_with_readiness_test, write_minimal_kernel_patch_records_from_gap_core_and_gwt_scenarios, draft_minimal_feature_records_patch_from_gap_core_and_scenarios, draft_minimal_kernel_records_patch_from_gap_core_and_readiness_scenarios, write_minimal_schedule_tick_records_patch_from_gap_and_scenarios, write_recurring_goal_and_schedule_list_records_patch_in_kernel_repo, write_recurring_goal_schedule_tick_kernel_patch_as_records, write_schedule_tick_recurring_goal_records_patch_with_occurrence_id, write_recurring_goal_schedule_records_patch_with_misfire_policy, write_feature_records_kernel_patch_from_gap_and_scenarios, propose_kernel_patch_records_from_gap_core_and_readiness_scenarios, write_feature_records_patch_from_gap_and_scenarios_with_idempotent_tick, implement_recurring_schedule_goal_records_with_replay_acceptance, write_secret_handle_redaction_and_gate_substitution_kernel_patch_with_canary_test, report_test_and_regression_rerun_verified_vs_unverified, formulate_scoped_never_invariant_from_gap_with_refutation, identify_executed_kernel_patch_by_commit_patch_id_and_dirty_flag, implement_trigger_feature_from_review_item_as_records_with_replay_journal_acceptance, run_oracle_on_full_bench_before_patch_and_verify_target_red_reason, find_unreconciled_composition_acceptance_point_in_allowed_files, write_substitution_composition_patch_with_grounding_gate_naming_law, rerun_full_bench_oracle_after_patch_diff_per_check_vs_baseline_with_flaky_and_input_variants, identify_applied_kernel_patch_by_sha_patch_id_dirty_and_confirm_build_exit_code, patch_kernel_composition_to_assemble_only_from_part_values_until_oracle_green, write_closed_selection_policy_laws_and_decision_table_from_intent_and_incidents, find_counterparty_product_quote_and_bridge_to_demo_thesis, compose_c4_context_container_and_2_4_adr_decisions_with_honest_status, build_meeting_frame_utc_local_smart, inventory_live_decision_points_by_code_config_and_ledger_crosscheck, write_one_executable_pass_fail_unknown_check_per_law_over_source_facts, map_each_law_to_single_pap_pdp_and_role_tagged_enforcement_points, derive_timeboxed_demo_timeline_from_meeting_frame_with_live_share_and_reserve_flags, build_reverse_dated_prep_checklist_from_meeting_anchor_with_freeze_backup_and_rehearsal, find_verbatim_counterparty_product_quote_matching_demo_thesis_with_url, build_demo_qa_bank_bluf_from_owner_proofs_with_counterparty_bridge_and_honest_gaps, compose_interview_demo_plan_from_frame_bridge_timeline_architecture_qa_prep_and_fallback, decompose_numbered_feature_statements_into_traced_gwt_scenarios_with_boundary_forbidden_and_open_questions, write_bottom_up_feature_patch_storage_logic_api_ui_by_neighbor_analog_with_red_first_tests, trace_scenarios_to_tests_run_full_gates_fail_to_pass_land_and_list_unverified, retrieve_verbatim_prior_step_patch_with_full_base_sha_and_apply_check, derive_fail_to_pass_scenarios_from_patch_requirement_plus_pass_to_pass_regression_from_owner_proofs, implement_repo_feature_from_numbered_statements_via_edit_door_and_change_flow, derive_traced_gwt_scenarios_from_parent_task_numbered_statements_with_open_decisions, decompose_owner_numbered_feature_statements_into_traced_gwt_set_unset_switch_rollback_invalid_characterization_with_open_questions, derive_traced_gwt_scenarios_set_unset_switch_rollback_invalid_from_owner_numbered_statements_with_assumptions_and_open_questions, decompose_owner_toggle_setting_statements_into_traced_gwt_set_unset_switch_invalid_rollback_characterization_ui_sequence_with_questions, write_bottom_up_storage_domain_api_toggle_ui_patch_with_red_first_tests_traced_to_scenarios_by_neighbor_setting, draft_bottom_up_single_choice_toggle_setting_patch_storage_rank_api_ui_with_stub_first_red_tests_and_owner_questions, draft_bottom_up_single_choice_setting_patch_storage_logic_api_ui_with_red_first_tests_and_owner_decisions, draft_bottom_up_single_choice_setting_patch_storage_rank_api_toggle_ui_red_first_with_open_decisions, draft_bottom_up_nullable_single_pick_setting_patch_storage_rank_api_toggle_ui_with_red_first_tests, draft_bottom_up_single_choice_setting_patch_storage_rank_api_ui_with_stub_first_red_tests_and_characterization_guard, draft_layered_storage_logic_api_ui_patch_with_assert_red_first_tests_per_statement_and_flagged_assumptions, draft_bottom_up_single_select_priority_patch_storage_rank_api_toggle_card_ui_with_red_first_tests_and_outline_clicks, draft_bottom_up_single_select_priority_toggle_patch_storage_rank_api_aria_pressed_ui_with_red_first_tests_by_neighbor, draft_bottom_up_single_choice_toggle_patch_storage_rank_api_ui_with_red_first_tests_by_neighbor_setting, draft_layered_storage_logic_api_ui_patch_with_red_first_tests_traced_to_statements_and_open_owner_decisions, draft_bottom_up_storage_logic_api_ui_patch_with_stub_then_red_assert_tests_traced_to_statements_and_scenarios, draft_bottom_up_storage_logic_api_ui_patch_with_red_first_tests_per_statement_and_open_decisions, draft_bottom_up_storage_rank_api_ui_priority_toggle_patch_with_stub_first_red_tests_and_open_owner_decisions, draft_bottom_up_setting_storage_rank_api_toggle_ui_patch_with_assertion_red_stubs_traced_to_statements_and_open_decisions, write_bottom_up_storage_logic_api_ui_patch_with_red_first_tests_traced_to_statements_and_scenarios, draft_bottom_up_storage_logic_api_ui_patch_red_first_traced_to_parent_statements_with_open_decisions, read_neighbor_setting_storage_route_test_via_code_door_with_path_line_quotes, measure_kernel_baseline_head_sha_file_digests_dirty_utc_and_preregistered_run_selection, audit_every_outbound_channel_log_over_run_window_with_coverage_positive_control_and_weakest_link_verdict, derive_utc_run_window_from_observed_start_end_receipts_with_bounded_clock_skew_margin, map_each_kernel_exit_point_to_witness_log_by_code_and_real_record_with_no_witness_flag, derive_traced_gwt_scenarios_for_nullable_single_select_setting_storage_rank_api_ui_with_characterization_baseline_and_open_questions, decompose_owner_numbered_criteria_into_atoms_read_run_door_registry_code_evidence_and_verdict_pass_fail_nei_with_address, verify_kernel_against_numbered_criteria_with_three_valued_verdicts_and_evidence_locators_read_only, draft_bottom_up_single_select_priority_toggle_patch_storage_rank_api_aria_pressed_ui_with_stub_first_red_tests_and_owner_decisions, check_every_outbound_channel_log_over_utc_run_window_with_liveness_positive_control_and_three_valued_verdict, draft_bottom_up_single_choice_setting_patch_storage_rank_api_aria_pressed_ui_red_first_with_characterization_guard_and_owner_decisions, draft_bottom_up_single_choice_setting_patch_storage_rank_api_toggle_ui_red_first_resolved_from_statements, draft_bottom_up_baseline_storage_logic_api_ui_patch_with_assertion_red_first_tests_per_statement_and_owner_open_decisions, draft_bottom_up_storage_rank_api_ui_priority_toggle_patch_with_stub_first_red_tests_and_stated_defaults, draft_bottom_up_storage_logic_api_ui_patch_with_stub_then_red_assert_tests_traced_to_statements_and_open_decisions, draft_bottom_up_storage_rank_api_toggle_ui_patch_red_first_by_neighbor_setting_with_open_decisions_and_unverified_gaps, draft_bottom_up_setting_storage_rank_api_aria_pressed_toggle_ui_patch_with_assertion_red_first_tests_by_neighbor_and_owner_decisions, draft_bottom_up_storage_rank_api_aria_pressed_ui_patch_with_assert_red_tests_per_statement_characterization_guard_and_owner_defaults, draft_bottom_up_storage_logic_api_ui_patch_with_assert_red_tests_characterization_guards_and_server_confirmed_toggle_ui, read_neighbor_setting_all_layers_with_path_line_quotes_wiring_rank_callsites_tests_absent_and_revision, derive_traced_f2p_gwt_scenarios_with_p2p_repo_regression_baseline_and_open_questions, read_neighbor_setting_port_store_overlay_usecase_wiring_routes_health_rank_callsites_tests_proxy_ui_with_path_line_quotes_gaps_and_revision, derive_traced_gwt_scenarios_per_parent_statement_with_set_unset_switch_unavailable_neighbor_grounded_and_open_questions, read_door_receipts_main_ref_and_repo_tree_to_attest_red_green_full_suite_land_or_mark_not_obtained, derive_utc_run_window_from_run_at_reflog_oracle_journal_with_anchor_owner_zone_skew_margin_and_boundary_events, compose_kernel_self_check_report_from_baseline_run_window_criterion_verdicts_and_outbound_audit, draft_bottom_up_setting_patch_by_neighbor_storage_rank_api_server_confirmed_toggle_ui_with_assert_red_tests_traced_to_scenarios, derive_utc_run_window_min_run_at_max_receipt_at_over_selected_run_ids_with_line_evidence_and_open_end_flag, derive_tight_utc_run_window_from_run_at_reflog_door_journal_excluding_own_attempts_with_open_edge_and_margin_variant, derive_utc_run_window_from_earliest_anchor_run_at_reflog_oracle_journal_with_owner_zone_night_frame_and_open_right_edge, derive_utc_run_window_from_run_at_reflog_door_verdicts_anchored_on_parent_task_night_in_owner_zone_with_skew_margin_self_runs_flagged, derive_tight_utc_run_window_from_run_at_reflog_oracle_journal_by_owner_local_night_anchor_with_open_edge_flag, derive_utc_run_window_from_run_at_session_gap_anchored_on_named_runs_with_open_right_bound, reverify_neighbor_setting_layer_map_at_current_ref_with_corrections_all_rank_helper_callers_and_absence_greps, draft_rebased_neighbor_grounded_bottom_up_setting_domain_storage_usecase_api_toggle_ui_patch_with_scenario_tagged_assert_red_stubs_bisectable_commit_series_and_unapplied_status, read_code_door_run_receipts_and_main_reflog_to_attest_red_green_full_suite_land_per_claim_or_mark_not_obtained, draft_neighbor_grounded_bottom_up_storage_rule_api_ui_patch_with_scenario_tagged_tests_stub_red_reasons_commit_series_and_unapplied_status, draft_neighbor_grounded_bottom_up_setting_storage_rule_usecase_api_proxy_ui_patch_with_scenario_tagged_red_first_tests_commit_order_open_decisions_and_unapplied_status, draft_neighbor_grounded_bottom_up_setting_patch_with_scenario_tagged_red_first_tests_and_unapplied_status, draft_neighbor_grounded_bottom_up_setting_patch_anchor_edits_single_rank_seam_scenario_tagged_assert_red_tests_and_unapplied_status, draft_neighbor_grounded_bottom_up_setting_storage_rule_api_proxy_ui_patch_with_scenario_tagged_tests_commit_series_red_expectations_defaults_and_unapplied_status, draft_neighbor_grounded_bottom_up_storage_rule_api_ui_patch_with_scenario_tagged_red_first_tests_derived_decisions_and_unapplied_status, draft_bottom_up_storage_rule_api_ui_patch_stub_red_green_per_scenario_with_characterization_guards_open_decisions_and_unapplied_status, draft_neighbor_grounded_bottom_up_storage_rule_api_ui_patch_with_scenario_tagged_assertion_red_tests_and_unapplied_status, draft_neighbor_grounded_bottom_up_storage_usecase_rank_api_ui_patch_with_scenario_tagged_red_first_tests_guard_split_and_unapplied_status, draft_neighbor_grounded_bottom_up_storage_rule_usecase_rank_seam_api_proxy_ui_patch_with_scenario_tagged_red_first_tests_and_unapplied_status, draft_neighbor_grounded_bottom_up_setting_patch_single_dispatch_rank_seam_scenario_traced_assert_red_tests_and_unapplied_status, draft_rebased_neighbor_grounded_bottom_up_store_rank_api_toggle_ui_patch_with_scenario_tagged_assert_red_tests_traceability_and_unapplied_status, draft_rebased_neighbor_grounded_bottom_up_storage_domain_rank_api_proxy_ui_patch_with_scenario_tagged_assert_red_tests_stub_red_step_guards_mutant_checks_and_unapplied_status, draft_reverified_neighbor_grounded_bottom_up_setting_patch_store_usecase_single_rank_seam_api_confirmed_toggle_ui_with_scenario_tagged_assert_red_tests_mutation_check_and_unapplied_status, draft_rebased_bottom_up_setting_patch_overlay_carry_single_rank_seam_api_server_confirmed_toggle_ui_with_scenario_tagged_assert_red_tests_and_unapplied_status, draft_rebased_neighbor_grounded_bottom_up_setting_storage_rule_usecase_api_proxy_toggle_ui_patch_with_scenario_tagged_assert_red_tests_and_unapplied_status, draft_neighbor_grounded_bottom_up_setting_patch_storage_rank_api_toggle_ui_with_scenario_tagged_tests_red_stub_table_and_unapplied_status, draft_rebased_neighbor_grounded_bottom_up_setting_patch_single_rank_seam_scenario_tagged_red_first_tests_mutant_guards_and_unapplied_status, draft_reverified_bottom_up_storage_rule_api_ui_patch_with_stub_red_tests_per_scenario_tag_server_confirmed_toggle_mutants_and_unapplied_status, read_neighbor_setting_all_layers_at_current_main_head_with_drift_note_all_rank_helper_callers_and_absence_grep, derive_tagged_traced_gwt_scenarios_per_parent_statement_with_state_transitions_all_rank_tiers_unavailable_characterization_click_sequence_and_open_questions, read_main_ref_and_reflog_tail_count_goal_statement_arrays_pick_latest_t_run_with_result_verdict_and_times_read_only, draft_reverified_bottom_up_commit_series_by_neighbor_map_with_scenario_tagged_tests_it_fails_stubs_manual_diff_mutants_and_unapplied_status, inventory_kernel_exit_points_from_code_then_query_run_files_and_git_reflogs_over_run_window_with_three_valued_verdict_and_named_uncovered_channels, read_door_state_run_effect_applied_changeflow_and_main_ref_to_grade_each_statement_red_green_suite_land_or_not_obtained, compose_neighbor_map_tagged_scenarios_bottom_up_patch_red_first_and_door_receipts_status_per_statement, reverify_prior_neighbor_setting_anchor_map_at_current_main_ref_with_reflog_drift_all_shared_helper_callers_and_absence_greps, draft_head_reverified_bottom_up_commit_series_by_neighbor_map_with_scenario_tagged_stub_red_tests_manual_mutant_journal_and_unapplied_status, grade_each_goal_statement_from_door_effect_check_patch_after_changeflow_author_check_land_and_main_ref_or_not_obtained, compose_head_reverified_neighbor_map_tagged_scenarios_bottom_up_red_first_patch_and_door_receipt_status_per_statement, reread_main_ref_and_reflog_tail_count_drift_from_prior_map_sha_reverify_every_layer_anchor_all_shared_helper_callers_and_absence_greps_read_only, take_given_scenarios_verbatim_or_derive_tagged_gwt_per_statement_by_neighbor_map_then_trace_matrix_na_reasons_form_deviations_and_open_questions, draft_head_reverified_single_seam_bottom_up_commit_series_with_refactor_split_title_tagged_red_first_tests_manual_mutant_journal_equivalence_notes_and_unapplied_status, read_door_effect_changeflow_author_check_land_and_main_ref_reflog_then_grade_each_statement_monotonic_patch_f2p_applied_landed_or_not_obtained_with_code_gap_flags, compose_head_reverified_neighbor_map_scenarios_bottom_up_patch_and_per_statement_door_receipt_status, read_main_ref_reflog_tail_and_door_land_receipts_then_reresolve_every_layer_anchor_by_symbol_flip_absence_greps_to_present_per_layer_and_flag_live_tree_edits_read_only, grep_feature_vocabulary_all_cases_then_layer_hits_by_neighbor_chain_trace_callers_and_name_unreached_server_non_durable_untested_defects_with_path_line_and_empty_query_evidence_read_only, take_input_gwt_scenarios_verbatim_else_derive_stmt_tagged_gwt_from_parent_statements_by_neighbor_map_with_bidirectional_trace_and_open_questions, reverify_head_then_split_inventory_into_present_gap_defect_rows_and_draft_bottom_up_atomic_commits_with_scenario_tagged_f2p_red_on_base_p2p_guards_mutants_rollback_and_unapplied_status, reread_main_ref_and_reflog_tail_then_grep_feature_vocabulary_per_layer_classify_present_unwired_absent_broken_unknown_by_callers_and_data_path_map_rows_to_scenario_tags_with_orphans_and_counts_read_only, match_door_run_by_patch_version_then_ladder_green_author_check_land_mergedsha_eq_main_ref_and_reflog_line_then_grep_tree_per_statement_with_not_obtained_subitems, reverify_head_inventory_in_tree_partial_feature_find_defects_then_gap_only_bottom_up_patch_with_scenario_tests_and_per_statement_door_status, collect_or_verify_named_analogs_tiered_direct_adjacent_with_own_domain_homepage_and_product_page_urls, live_read_each_competitor_home_and_product_page_fill_fixed_axes_row_with_url_date_status_mark_unavailable_and_derive_take_notours_against_own_positioning, read_live_homepage_and_one_product_page_per_input_url_fill_fixed_codebook_record_with_typed_not_read_reasons_and_provenance, read_symptom_screen_and_commit_range_then_quote_new_lines_name_suppression_mechanism_chain_refute_alternatives_and_flag_static_or_unattributed, derive_competitor_frame_from_own_oneliner_search_mechanism_and_category_live_open_own_domain_home_and_product_pages_tier_direct_adjacent_exclude_pivoted_suppliers_papers, split_filled_competitor_site_matrix_into_conventions_by_preset_threshold_mechanism_techniques_verified_gaps_and_notours_with_counts_and_discards, read_old_vs_new_component_tree_find_new_ancestor_title_or_handler_then_write_jsdom_test_asserting_effective_nearest_title_per_hovered_element_with_p2p_own_title_guard_and_unrun_red_status, partial_revert_mechanism_lines_on_same_element_restore_old_beside_new_add_keyboard_parity_and_f2p_p2p_interaction_tests_unapplied_status, read_live_head_card_and_children_titles_name_nearest_ancestor_title_mechanism_write_jsdom_f2p_popover_tip_null_p2p_own_title_guard_state_seam_and_unrun_red_as_fact_not_door, diverge_three_axis_distinct_site_directions_one_phrase_essence_first_screen_blocks_url_borrowings_constraint_id_rationale_and_risk_from_synthesis_and_owner_decisions, read_live_home_and_product_page_per_competitor_url_fill_one_codebook_with_own_mechanism_axis_verbatim_quotes_typed_not_read_and_coverage_counts, grep_door_run_patch_before_after_for_suspect_lines_match_land_mergedsha_to_main_reflog_reread_head_lines_name_inherited_suppression_mechanism_refute_alternatives_flag_static, screen_directions_by_owner_must_constraints_then_prefixed_weighted_want_matrix_breakeven_sensitivity_recommend_one_and_graft_best_of_rejected_with_rescore_and_risks, build_object_by_feature_matrix_from_site_records_iceberg_root_at_0_8_of_all_with_reasons_and_exceptions_then_monothetic_split_by_externally_caused_non_root_property_until_single_site_leaves, diverge_three_axis_distinct_site_directions_from_competitor_readings_with_style_tiles_first_screen_blocks_borrowings_constraint_fit_and_risks, read_head_card_titles_then_find_first_receipt_whose_before_lacks_and_after_has_ancestor_title_match_mergedsha_to_reflog_name_nearest_ancestor_title_chain_counterfactual_and_unrun_bisect_command, write_package_suite_interaction_tests_old_new_old_with_effect_method_body_exact_count_child_actions_zero_effect_strict_fetch_and_unrun_red_green_mutant_procedure, describe_own_site_by_same_codebook_find_deepest_edge_path_attachment_adr_inherit_reject_per_branch_verify_notours_against_matrix_and_status_quo_errc_all_four_and_divergent_value_curve, gate_inputs_then_write_traced_spec_ia_verbatim_first_screen_dtcg_tokens_eight_state_matrix_per_analog_diff_thresholded_test_plan_owned_open_questions, inventory_screen_suite_and_change_acceptance_scenarios_classify_each_by_trigger_executed_and_violated_property_asserted_name_missing_check_kind_by_fixed_taxonomy_and_unrun_counterfactual, fix_root_and_criteria_from_own_oneliner_then_multichannel_search_mechanism_and_job_dedupe_by_domain_exclude_papers_pivoted_unverified_branch_by_competition_type_with_reasons_leaves_with_quote_evidence_saturation_stop_and_dated_flow, reread_main_ref_and_land_receipts_then_grep_package_suite_for_screen_imports_list_describe_it_with_path_line_split_kept_added_removed_by_land_shape_and_classify_check_kind_pure_fn_vs_rendered_interaction, take_recorded_direction_choice_verbatim_from_run_reports_with_status_else_screen_score_graft_then_crosswalk_newer_direction_sets_and_ask_owner_accept, read_competitor_sites_live_axis_matrix_synthesize_conventions_gaps_three_directions_pugh_choose_one_write_ia_verbatim_first_screen_tokens_and_validation_plan, grep_land_receipts_patch_before_lacks_after_has_suspect_line_match_mergedsha_to_main_reflog_reread_head_name_mechanism_chain_refute_alternatives_and_unrun_bisect_counterfactual, gate_inputs_then_compose_traced_site_spec_verbatim_first_screen_linear_blocks_4px_grid_two_role_font_pair_paired_color_roles_with_computed_wcag_contrast_state_matrix_reduced_motion_branches_and_render_roundtrip_plan, take_recorded_own_site_node_verbatim_from_run_reports_with_address_recheck_each_premise_against_current_input_flag_inherited_owner_decisions_and_gaps, read_competitor_sites_live_into_fixed_schema_records_then_root_branches_tree_place_own_node_errc_and_derive_provenance_tagged_site_spec_with_tokens, reread_head_then_move_inherited_ancestor_title_to_childless_leaf_keep_click_intent_verbatim_diff_new_jsdom_f2p_p2p_test_and_scoped_door_goal, trace_click_handler_through_cache_invalidation_or_remount_or_navigation_to_nearest_suspense_or_loading_branch_with_path_line_name_one_mechanism_check_transition_and_external_store_semantics_refute_alternatives_and_unrun_counterfactual, reread_head_locate_ancestor_title_introduced_by_land_move_it_to_childless_leaf_keep_intent_text_verbatim_export_seam_add_jsdom_nearest_title_f2p_p2p_test_reject_symptom_site_empty_title_and_mark_unapplied_unrun, read_vendor_docs_help_and_live_screens_per_product_fill_fixed_ten_property_work_screen_record_with_provenance_tag_url_read_status_and_explicit_not_found, trace_named_flash_cause_to_update_source_then_pick_one_mechanism_swr_keep_value_if_external_store_else_transition_else_stable_key_patch_cause_line_only_with_f2p_no_throw_test_characterization_guard_and_unapplied_status, reread_head_find_ancestor_title_added_by_named_land_move_it_verbatim_to_childless_leaf_export_test_seam_jsdom_nearest_title_f2p_visibility_and_owner_asserts_p2p_own_title_guard_reject_empty_title_symptom_fix_mark_unapplied_unrun, per_observed_case_read_run_receipts_door_patch_before_after_land_mergedsha_vs_main_reflog_reread_head_lines_name_kernel_statement_gate_binding_and_product_line_mechanism_with_is_isnot_contrast_and_unrun_status, reread_head_move_inherited_ancestor_title_verbatim_to_childless_leaf_export_seam_jsdom_nearest_title_f2p_p2p_mark_unapplied_unrun, reuse_same_day_run_records_by_address_then_recheck_weakest_fields_by_vendor_docs_search_fill_fixed_ten_property_schema_with_provenance_tags_url_live_read_status_and_explicit_not_found, per_case_inventory_door_check_and_receipt_changeflow_test_files_typecheck_probes_and_skipped_gates_from_land_runs_matched_by_mergedsha_then_classify_by_ordered_tree_self_report_no_check_other_env_weak_oracle_no_regression_with_unrun_counterfactual, reread_head_move_ancestor_title_added_by_named_land_verbatim_to_childless_leaf_export_seam_jsdom_nearest_title_f2p_visibility_owner_p2p_own_title_reject_empty_title_mark_unapplied_unrun, normalize_fixed_schema_work_screen_records_gap_is_not_absence_root_at_0_8_with_principle_reason_and_rejected_list_then_monothetic_split_by_one_documented_property_with_external_reason_stop_on_gaps_mark_convergence_and_partition_check, read_goal_statements_in_range_and_adapter_code_then_per_case_trace_topic_statements_decompose_obligations_grep_implementing_lines_and_tagged_checks_split_cause_a_defect_b_oracle_verdict_text_and_code_separately_with_explicit_remainder, read_live_fix_and_existing_tests_state_f2p_helper_test_with_base_semantics_stub_red_procedure_add_jsdom_suspense_wiring_test_killing_call_site_revert_mutant_and_unrun_status, walk_fixed_work_screen_tree_edges_with_own_values_open_new_edge_with_external_reason_name_closest_leaf_inherit_root_and_path_with_node_site_mark_convergent_borrowings_reject_with_positioning_reason_and_substitute_notours_1_3_keller_gap_is_not_absence_partition_check, trace_click_handler_to_cache_invalidation_or_remount_name_suspense_boundary_chain_patch_swr_revalidate_keep_last_frame_with_red_first_test_and_unapplied_status, gate_node_and_owner_screen_decisions_then_compose_traced_layout_input_output_tree_state_machine_empty_running_question_done_repeat_error_refusal_during_after_visibility_action_reversibility_ten_heuristic_review_and_owned_open_questions, read_competitor_work_screens_by_fixed_schema_with_provenance_then_root_branches_edge_labeled_tree_place_own_node_inherit_reject_ours_and_compose_provenance_tagged_screen_spec_with_states, reconstruct_remainder_from_coverage_verdicts_then_per_item_edit_existing_statement_branch_or_mint_next_free_id_with_run_receipt_specimen_code_line_executable_check_mutant_prevent_detect_and_case_link_and_recheck_empty_remainder, reconstruct_remainder_from_coverage_verdicts_then_per_item_edit_existing_statement_branch_or_mint_next_free_id_with_reread_code_line_run_receipt_specimen_wire_level_port_check_mutant_prevent_detect_case_link_and_unrun_status, reroute_plan_item_obstacle_through_single_existing_door_free_path_first_measured_params_ledgered_calls_success_by_target_reply_refusal_by_actor_owner_only_possession_factors_and_named_uncovered_kinds
Понятие c8
признаки
artifact:code
записи
fix_code_defect_until_oracle_passes, fix_kernel_door_defect_until_oracle_green, implement_review_feature_as_records_with_readiness_test, design_mail_forward_to_task_records_with_readiness_test, implement_recurring_schedule_goal_records_with_replay_acceptance, implement_trigger_feature_from_review_item_as_records_with_replay_journal_acceptance, patch_kernel_composition_to_assemble_only_from_part_values_until_oracle_green, retrieve_verbatim_prior_step_patch_with_full_base_sha_and_apply_check, derive_fail_to_pass_scenarios_from_patch_requirement_plus_pass_to_pass_regression_from_owner_proofs, implement_repo_feature_from_numbered_statements_via_edit_door_and_change_flow, write_bottom_up_storage_domain_api_toggle_ui_patch_with_red_first_tests_traced_to_scenarios_by_neighbor_setting, draft_bottom_up_single_choice_toggle_setting_patch_storage_rank_api_ui_with_stub_first_red_tests_and_owner_questions, draft_bottom_up_single_choice_setting_patch_storage_logic_api_ui_with_red_first_tests_and_owner_decisions, draft_bottom_up_single_choice_setting_patch_storage_rank_api_toggle_ui_red_first_with_open_decisions, draft_bottom_up_nullable_single_pick_setting_patch_storage_rank_api_toggle_ui_with_red_first_tests, draft_bottom_up_single_choice_setting_patch_storage_rank_api_ui_with_stub_first_red_tests_and_characterization_guard, draft_layered_storage_logic_api_ui_patch_with_assert_red_first_tests_per_statement_and_flagged_assumptions, draft_bottom_up_single_select_priority_patch_storage_rank_api_toggle_card_ui_with_red_first_tests_and_outline_clicks, draft_bottom_up_single_select_priority_toggle_patch_storage_rank_api_aria_pressed_ui_with_red_first_tests_by_neighbor, draft_bottom_up_single_choice_toggle_patch_storage_rank_api_ui_with_red_first_tests_by_neighbor_setting, draft_layered_storage_logic_api_ui_patch_with_red_first_tests_traced_to_statements_and_open_owner_decisions, draft_bottom_up_storage_logic_api_ui_patch_with_stub_then_red_assert_tests_traced_to_statements_and_scenarios, draft_bottom_up_storage_logic_api_ui_patch_with_red_first_tests_per_statement_and_open_decisions, draft_bottom_up_storage_rank_api_ui_priority_toggle_patch_with_stub_first_red_tests_and_open_owner_decisions, draft_bottom_up_setting_storage_rank_api_toggle_ui_patch_with_assertion_red_stubs_traced_to_statements_and_open_decisions, write_bottom_up_storage_logic_api_ui_patch_with_red_first_tests_traced_to_statements_and_scenarios, draft_bottom_up_storage_logic_api_ui_patch_red_first_traced_to_parent_statements_with_open_decisions, draft_bottom_up_single_select_priority_toggle_patch_storage_rank_api_aria_pressed_ui_with_stub_first_red_tests_and_owner_decisions, draft_bottom_up_single_choice_setting_patch_storage_rank_api_aria_pressed_ui_red_first_with_characterization_guard_and_owner_decisions, draft_bottom_up_single_choice_setting_patch_storage_rank_api_toggle_ui_red_first_resolved_from_statements, draft_bottom_up_baseline_storage_logic_api_ui_patch_with_assertion_red_first_tests_per_statement_and_owner_open_decisions, draft_bottom_up_storage_rank_api_ui_priority_toggle_patch_with_stub_first_red_tests_and_stated_defaults, draft_bottom_up_storage_logic_api_ui_patch_with_stub_then_red_assert_tests_traced_to_statements_and_open_decisions, draft_bottom_up_storage_rank_api_toggle_ui_patch_red_first_by_neighbor_setting_with_open_decisions_and_unverified_gaps, draft_bottom_up_setting_storage_rank_api_aria_pressed_toggle_ui_patch_with_assertion_red_first_tests_by_neighbor_and_owner_decisions, draft_bottom_up_storage_rank_api_aria_pressed_ui_patch_with_assert_red_tests_per_statement_characterization_guard_and_owner_defaults, draft_bottom_up_storage_logic_api_ui_patch_with_assert_red_tests_characterization_guards_and_server_confirmed_toggle_ui, draft_bottom_up_setting_patch_by_neighbor_storage_rank_api_server_confirmed_toggle_ui_with_assert_red_tests_traced_to_scenarios, draft_rebased_neighbor_grounded_bottom_up_setting_domain_storage_usecase_api_toggle_ui_patch_with_scenario_tagged_assert_red_stubs_bisectable_commit_series_and_unapplied_status, draft_neighbor_grounded_bottom_up_storage_rule_api_ui_patch_with_scenario_tagged_tests_stub_red_reasons_commit_series_and_unapplied_status, draft_neighbor_grounded_bottom_up_setting_storage_rule_usecase_api_proxy_ui_patch_with_scenario_tagged_red_first_tests_commit_order_open_decisions_and_unapplied_status, draft_neighbor_grounded_bottom_up_setting_patch_with_scenario_tagged_red_first_tests_and_unapplied_status, draft_neighbor_grounded_bottom_up_setting_patch_anchor_edits_single_rank_seam_scenario_tagged_assert_red_tests_and_unapplied_status, draft_neighbor_grounded_bottom_up_setting_storage_rule_api_proxy_ui_patch_with_scenario_tagged_tests_commit_series_red_expectations_defaults_and_unapplied_status, draft_neighbor_grounded_bottom_up_storage_rule_api_ui_patch_with_scenario_tagged_red_first_tests_derived_decisions_and_unapplied_status, draft_bottom_up_storage_rule_api_ui_patch_stub_red_green_per_scenario_with_characterization_guards_open_decisions_and_unapplied_status, draft_neighbor_grounded_bottom_up_storage_rule_api_ui_patch_with_scenario_tagged_assertion_red_tests_and_unapplied_status, draft_neighbor_grounded_bottom_up_storage_usecase_rank_api_ui_patch_with_scenario_tagged_red_first_tests_guard_split_and_unapplied_status, draft_neighbor_grounded_bottom_up_storage_rule_usecase_rank_seam_api_proxy_ui_patch_with_scenario_tagged_red_first_tests_and_unapplied_status, draft_neighbor_grounded_bottom_up_setting_patch_single_dispatch_rank_seam_scenario_traced_assert_red_tests_and_unapplied_status, draft_rebased_neighbor_grounded_bottom_up_storage_domain_rank_api_proxy_ui_patch_with_scenario_tagged_assert_red_tests_stub_red_step_guards_mutant_checks_and_unapplied_status, draft_reverified_neighbor_grounded_bottom_up_setting_patch_store_usecase_single_rank_seam_api_confirmed_toggle_ui_with_scenario_tagged_assert_red_tests_mutation_check_and_unapplied_status, draft_rebased_bottom_up_setting_patch_overlay_carry_single_rank_seam_api_server_confirmed_toggle_ui_with_scenario_tagged_assert_red_tests_and_unapplied_status, draft_rebased_neighbor_grounded_bottom_up_setting_storage_rule_usecase_api_proxy_toggle_ui_patch_with_scenario_tagged_assert_red_tests_and_unapplied_status, draft_neighbor_grounded_bottom_up_setting_patch_storage_rank_api_toggle_ui_with_scenario_tagged_tests_red_stub_table_and_unapplied_status, draft_rebased_neighbor_grounded_bottom_up_setting_patch_single_rank_seam_scenario_tagged_red_first_tests_mutant_guards_and_unapplied_status, draft_reverified_bottom_up_storage_rule_api_ui_patch_with_stub_red_tests_per_scenario_tag_server_confirmed_toggle_mutants_and_unapplied_status, draft_reverified_bottom_up_commit_series_by_neighbor_map_with_scenario_tagged_tests_it_fails_stubs_manual_diff_mutants_and_unapplied_status, compose_neighbor_map_tagged_scenarios_bottom_up_patch_red_first_and_door_receipts_status_per_statement, draft_head_reverified_bottom_up_commit_series_by_neighbor_map_with_scenario_tagged_stub_red_tests_manual_mutant_journal_and_unapplied_status, compose_head_reverified_neighbor_map_tagged_scenarios_bottom_up_red_first_patch_and_door_receipt_status_per_statement, draft_head_reverified_single_seam_bottom_up_commit_series_with_refactor_split_title_tagged_red_first_tests_manual_mutant_journal_equivalence_notes_and_unapplied_status, compose_head_reverified_neighbor_map_scenarios_bottom_up_patch_and_per_statement_door_receipt_status, reverify_head_then_split_inventory_into_present_gap_defect_rows_and_draft_bottom_up_atomic_commits_with_scenario_tagged_f2p_red_on_base_p2p_guards_mutants_rollback_and_unapplied_status, reverify_head_inventory_in_tree_partial_feature_find_defects_then_gap_only_bottom_up_patch_with_scenario_tests_and_per_statement_door_status, read_old_vs_new_component_tree_find_new_ancestor_title_or_handler_then_write_jsdom_test_asserting_effective_nearest_title_per_hovered_element_with_p2p_own_title_guard_and_unrun_red_status, partial_revert_mechanism_lines_on_same_element_restore_old_beside_new_add_keyboard_parity_and_f2p_p2p_interaction_tests_unapplied_status, read_head_card_titles_then_find_first_receipt_whose_before_lacks_and_after_has_ancestor_title_match_mergedsha_to_reflog_name_nearest_ancestor_title_chain_counterfactual_and_unrun_bisect_command, write_package_suite_interaction_tests_old_new_old_with_effect_method_body_exact_count_child_actions_zero_effect_strict_fetch_and_unrun_red_green_mutant_procedure, gate_inputs_then_compose_traced_site_spec_verbatim_first_screen_linear_blocks_4px_grid_two_role_font_pair_paired_color_roles_with_computed_wcag_contrast_state_matrix_reduced_motion_branches_and_render_roundtrip_plan, reread_head_then_move_inherited_ancestor_title_to_childless_leaf_keep_click_intent_verbatim_diff_new_jsdom_f2p_p2p_test_and_scoped_door_goal, reread_head_locate_ancestor_title_introduced_by_land_move_it_to_childless_leaf_keep_intent_text_verbatim_export_seam_add_jsdom_nearest_title_f2p_p2p_test_reject_symptom_site_empty_title_and_mark_unapplied_unrun, trace_named_flash_cause_to_update_source_then_pick_one_mechanism_swr_keep_value_if_external_store_else_transition_else_stable_key_patch_cause_line_only_with_f2p_no_throw_test_characterization_guard_and_unapplied_status, reread_head_find_ancestor_title_added_by_named_land_move_it_verbatim_to_childless_leaf_export_test_seam_jsdom_nearest_title_f2p_visibility_and_owner_asserts_p2p_own_title_guard_reject_empty_title_symptom_fix_mark_unapplied_unrun, reread_head_move_inherited_ancestor_title_verbatim_to_childless_leaf_export_seam_jsdom_nearest_title_f2p_p2p_mark_unapplied_unrun, reread_head_move_ancestor_title_added_by_named_land_verbatim_to_childless_leaf_export_seam_jsdom_nearest_title_f2p_visibility_owner_p2p_own_title_reject_empty_title_mark_unapplied_unrun, read_live_fix_and_existing_tests_state_f2p_helper_test_with_base_semantics_stub_red_procedure_add_jsdom_suspense_wiring_test_killing_call_site_revert_mutant_and_unrun_status, trace_click_handler_to_cache_invalidation_or_remount_name_suspense_boundary_chain_patch_swr_revalidate_keep_last_frame_with_red_first_test_and_unapplied_status, reroute_plan_item_obstacle_through_single_existing_door_free_path_first_measured_params_ledgered_calls_success_by_target_reply_refusal_by_actor_owner_only_possession_factors_and_named_uncovered_kinds
neighbor_trace_form
источник
text
статус
ok
cdp_endpoint
источник
ask
статус
ask
test_account_env
источник
ask
статус
ask
files
источник
derived
статус
ok
statements
источник
derived
статус
ok
oracle
источник
derived
статус
ok
url
источник
input
статус
ok
Исход
вид
admitted
починка
{"rounds":1,"first":"проверка «all_premises_present_act» не сошлась: ждали «act», наблюдали «ask»"}
вызовов модели
9
Результат
вид
ask
не хватает
cdp_endpoint, test_account_env
вопрос
Не хватает: адрес живого профиля браузера по CDP на машине владельца, имена переменных окружения тестового аккаунта и файл, где они лежат
Ответ
текст
render_device_patch = Патч транспорта ресерча из 3 коммитов, около 280 строк. Статус: «не применён, не запущен» до двери. Коммит 1: чистое ядро render-core.mjs и герметичные тесты. Коммит 2: устройство Render (только чтение), MCP-сервер render-mcp.mjs поверх живого профиля CDP http://127.0.0.1:9226 и проводка в design/whole-goal/run-model.py. Каждый вызов пишется в трассу как { tool: 'Render', kind: 'read', input: { url } } рядом с Read/Grep/Glob. Стены возвращаются как типизированные остановки с вопросом владельцу. Коммит 3: отдельное устройство входа login-device.mjs с охранником эффектов. Секреты берутся только из окружения (TEST_GOOGLE_EMAIL / TEST_GOOGLE_PASSWORD). Модель это устройство не вызывает. Новое утверждение 138 и его проверки прилагаются. ЧТО УСТАНОВЛЕНО ЧТЕНИЕМ (факты, с адресами) • Сосед, то есть транспорт ресерча: design/whole-goal/run-model.py. – :46 HOME_READ_TOOLS=['Read','Grep','Glob']. – :307 список tools и :308 cmd Claude CLI с '--strict-mcp-config' без конфига, то есть сегодня MCP-серверов нет вообще. – :315–317 разбор tool_use в вызовы трассы; :317 чтение дома пишется как { tool, kind: 'read', status, input }. – :369–370 research-trace.json со schema 'research-trace/v1'. – :268–269 receipt.homeReadable: только claude-subscription получает инструменты. Codex и grok названы пределом. • Форма трассы соседей (neighbor_trace_form), живой образец: design/whole-goal/requests/cebfefb6bfa78f55/research-trace.json:1–28, вызовы вида {"id","tool":"Grep"|"Read","kind":"read","status":"completed","input"}. • Утверждение 116: runtime/task-target.json:406. Проверка [s116:c2e47f6c]: runtime/statement-checks/task/task.statements.test.ts:6050. Шпион смотрит на request.home. • Специмен: runtime/runs/60c7c73e-1007-46b0-9a8f-f6434941ac56.json:74, цитата: «Сами рабочие экраны не открыты живьём ни у одного из 11 продуктов: все они за логином, а инструмент чтения SPA не рендерит». • Массив утверждений task заканчивается на строке :427. По счёту строк (116 → :406, 122 → :412) это номер 137, поэтому следующий свободный — 138. Номер нужно подтвердить при вставке, потому что черновики R1–R10 заняли 129–131 только на бумаге. • В репозитории: playwright 1.58.2 (node_modules/playwright/package.json:3); ariaSnapshot есть (playwright-core/types/types.d.ts:12580); ariaSnapshotJSON появился только в 1.63, значит его нет. @modelcontextprotocol/sdk 1.25.3 (node_modules/@modelcontextprotocol/sdk/package.json:3). Соседние скрипты подключаются к живому Chrome так же: chromium.connectOverCDP (scratch/linkedin/*.mjs, scratch/fb-post/*.mjs). • Живой профиль (cdp_endpoint) из parent_task: http://127.0.0.1:9226, юнит imperiaos-chrome-chatgpt, профиль /home/deploy/.chrome-chatgpt, выход через socks5://127.0.0.1:1080, xvfb 1440x900, вход в chatgpt.com уже есть. • Тестовый аккаунт (test_account_env): TEST_GOOGLE_EMAIL / TEST_GOOGLE_PASSWORD в /home/deploy/.config/imperiaos/env/imperiaos.env. Файл я не открывал: это секрет, он нужен только процессу входа. ЧТО ДАЛ РЕСЕРЧ И ЧТО ЭТО МЕНЯЕТ В ПАТЧЕ 1. Встроенных инструментов Claude CLI не добавить. Своя способность подключается MCP-сервером через --mcp-config. Имя инструмента — mcp__render__render (шаблон mcp__<server>__<tool>). Разрешать его нужно явно через allowedTools. Сервер, не прошедший проверку конфига, молча пропускается, а его статус виден в init-событии stream-json. Поэтому квитанция читает этот статус и пишет renderReadable честно. Результат больше 25 000 токенов CLI уносит в файл, поэтому лимиты вывода 30 000 символов текста и 15 000 символов дерева. 2. connectOverCDP подключается к уже запущенному браузеру. Контекст по умолчанию с куками профиля — browser.contexts()[0]. Для подключённого браузера browser.close() только отключается и закрывает созданные клиентом контексты; вкладки владельца остаются. Устройство открывает свою вкладку и закрывает только её, чужих вкладок не трогает. 3. page.locator('body').ariaSnapshot() даёт YAML дерева доступности (роли, имена, тексты). Отсюда и видно, где поле ввода и где вывод. 4. Google намеренно блокирует вход из автоматизированного браузера сообщением «This browser or app may not be secure». Общепринятый путь — войти руками в обычном профиле и потом читать через CDP. Поэтому устройство входа при этой стене останавливается и спрашивает владельца. Маскировку автоматизации и stealth-плагины оно не применяет. КОММИТ 1 — чистое ядро: design/whole-goal/render/render-core.mjs (новый файл) ```js // Чистое ядро устройства Render (утв. 138): без сети, браузера, часов и окружения. export const RENDER_TOOL = 'mcp__render__render' export const READ_VERBS = Object.freeze(['goto', 'readText', 'readLinks', 'ariaSnapshot', 'screenshot', 'closeOwnPage']) export const LIMITS = Object.freeze({ text: 30000, tree: 15000, links: 200 }) const INNER = [/^localhost$/i, /^127\./, /^10\./, /^192\.168\./, /^172\.(1[6-9]|2\d|3[01])\./, /^100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\./, /^169\.254\./, /^0\./, /^\[?::1\]?$/] export function checkUrl(raw) { let u try { u = new URL(String(raw)) } catch { return { ok: false, wall: 'url-refused', why: 'не URL' } } if (u.protocol !== 'https:' && u.protocol !== 'http:') return { ok: false, wall: 'url-refused', why: 'схема ' + u.protocol } if (INNER.some((re) => re.test(u.hostname))) return { ok: false, wall: 'url-refused', why: 'внутренний адрес ' + u.hostname } if (u.username || u.password) return { ok: false, wall: 'url-refused', why: 'учётка в URL' } return { ok: true, url: u.href } } export function guardVerb(verb) { if (!READ_VERBS.includes(verb)) throw new Error('effect-refused: ' + verb) return verb } const WALLS = [ ['blocked-browser', /this browser or app may not be secure|браузер или приложение могут быть небезопасны/i], ['captcha', /recaptcha|hcaptcha|cf-turnstile|verify you are human|not a robot|вы не робот/i], ['email-code', /enter the code|check your (e-?mail|inbox)|verification code|код подтверждения/i], ['phone', /verify your phone|enter your phone|номер телефона/i], ] const ASK = { 'blocked-browser': 'Google не пускает автоматизированный вход. Физическое действие: войдите руками тестовым аккаунтом в профиле CDP, после этого Render прочитает страницу.', captcha: 'На странице капча. Пройти её может только владелец в профиле CDP.', 'email-code': 'Нужен код из почты тестового аккаунта. Введите его в профиле CDP.', phone: 'Нужен телефон. Это решение и устройство владельца.', login: 'Страница за входом. Запустите устройство входа или войдите руками в профиле CDP.', } export function classifyWall({ status, url, text, aria }) { if (status === 403 || status === 429 || (typeof status === 'number' && status >= 500)) return { kind: 'http-' + status, url, question: 'Сайт ответил ' + status + ': повтор позже или решение владельца.' } const hay = String(text ?? '') + '\n' + String(aria ?? '') for (const [kind, re] of WALLS) if (re.test(hay)) return { kind, url, question: ASK[kind] } let host = '', path = '' try { const u = new URL(url); host = u.hostname; path = u.pathname } catch {} if (host === 'accounts.google.com' || /\/(login|signin|sign-in|auth)(\/|$)/i.test(path) || /- textbox "(password|пароль)/i.test(String(aria ?? ''))) return { kind: 'login', url, question: ASK.login } return null } export function shapeRender({ url, status, text, links, aria, shot }) { const t = String(text ?? ''), a = String(aria ?? ''), seen = new Set(), out = [] for (const [href, label] of links ?? []) { let h try { h = new URL(href, url).href } catch { continue } if (!seen.has(h) && out.length < LIMITS.links) { seen.add(h); out.push({ href: h, text: String(label ?? '').slice(0, 120) }) } } const lines = a.split('\n') return { url, status, text: t.slice(0, LIMITS.text), textTruncated: t.length > LIMITS.text, links: out, tree: a.slice(0, LIMITS.tree), treeTruncated: a.length > LIMITS.tree, inputs: lines.filter((l) => /- (textbox|searchbox|combobox)\b/.test(l)).map((l) => l.trim()), outputs: lines.filter((l) => /- (main|log|article|feed)\b/.test(l)).map((l) => l.trim()), shot: shot ?? null, wall: classifyWall({ status, url, text: t, aria: a }), } } ``` design/whole-goal/render/render-core.test.mjs (node:test; без сети, браузера и окружения): • checkUrl: https://chatgpt.com/ проходит. Отказ 'url-refused' получают file:///etc/passwd, chrome://settings, http://127.0.0.1:9226/json (сам CDP), http://100.122.143.89:3109/api/tokens/best (волт) и https://u:p@example.com. • guardVerb: все шесть READ_VERBS проходят; 'click', 'fill', 'type', 'press', 'evaluate' бросают /effect-refused/. • classifyWall на фикстурах: – текст «Couldn't sign you in. This browser or app may not be secure» на accounts.google.com → 'blocked-browser'; – status 429 → 'http-429'; – aria «- textbox "Password"» на https://app.example.com/login → 'login'; – iframe с «recaptcha» → 'captcha'; – чат с aria «- main:\n - textbox "Message ChatGPT"» и status 200 → null. • shapeRender: – текст длиной 30 001 → textTruncated true; – ссылки '/c/1' и 'https://chatgpt.com/c/1' на url https://chatgpt.com/ склеиваются в одну; – inputs содержит 'textbox "Message ChatGPT"', outputs содержит 'main'. • Специмен 60c7c73e: фикстура того, что читатель без рендера видит у SPA («Enable JavaScript to run this app», aria пустое), даёт inputs = []. Фикстура отрендеренной страницы даёт inputs ≠ []. Тест фиксирует, какое свойство добавляет устройство. Мутанты: добавить 'click' в READ_VERBS — guardVerb-тест краснеет; убрать 'blocked-browser' из WALLS — тест Google краснеет. КОММИТ 2 — устройство Render и проводка по форме соседей design/whole-goal/render/render-mcp.mjs (новый файл; единственное место эффектов; модель передаёт только url): ```js // Устройство Render (утв. 138): чтение страницы, как её рисует живой профиль. Без кликов, ввода и скриптов модели. import { createRequire } from 'node:module' import { createHash } from 'node:crypto' import { mkdirSync } from 'node:fs' import { checkUrl, guardVerb, shapeRender } from './render-core.mjs' const require = createRequire(process.env.RENDER_REPO + '/package.json') // модули берутся из репозитория, а не из рантайма const { chromium } = require('playwright') const { McpServer } = require('@modelcontextprotocol/sdk/server/mcp.js') const { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio.js') const { z } = require('zod') const CDP = process.env.RENDER_CDP_URL, SHOTS = process.env.RENDER_SHOTS const reply = (o) => ({ content: [{ type: 'text', text: JSON.stringify(o) }] }) const server = new McpServer({ name: 'render', version: '1.0.0' }) server.registerTool('render', { description: 'Read a page the way the logged-in browser renders it: text, links, accessibility tree, screenshot. Read-only.', inputSchema: { url: z.string() } }, async ({ url }) => { const u = checkUrl(url) if (!u.ok) return reply({ wall: u }) if (!CDP) return reply({ wall: { kind: 'no-config', question: 'RENDER_CDP_URL не задан: адрес живого профиля знает владелец.' } }) let browser try { browser = await chromium.connectOverCDP(CDP, { timeout: 15000 }) } catch { return reply({ wall: { kind: 'cdp-down', question: 'Живой профиль ' + CDP + ' не отвечает: юнит браузера лежит.' } }) } const ctx = browser.contexts()[0] if (!ctx) { await browser.close().catch(() => {}); return reply({ wall: { kind: 'no-context', question: 'В профиле нет контекста по умолчанию.' } }) } const page = await ctx.newPage() // своя вкладка; чужие вкладки не трогаются try { await page.route('**/*', (r) => (r.request().isNavigationRequest() && r.request().method() !== 'GET' ? r.abort() : r.continue())) guardVerb('goto'); const resp = await page.goto(u.url, { waitUntil: 'domcontentloaded', timeout: 30000 }) await page.waitForLoadState('networkidle', { timeout: 10000 }).catch(() => {}) guardVerb('readText'); const text = await page.locator('body').innerText() guardVerb('readLinks'); const links = await page.locator('a[href]').evaluateAll((as) => as.map((a) => [a.href, a.innerText.trim()])) guardVerb('ariaSnapshot'); const aria = await page.locator('body').ariaSnapshot() guardVerb('screenshot'); mkdirSync(SHOTS, { recursive: true }) const shot = SHOTS + '/' + createHash('sha256').update(u.url).digest('hex').slice(0, 16) + '.png' await page.screenshot({ path: shot }) return reply(shapeRender({ url: page.url(), status: resp ? resp.status() : null, text, links, aria, shot })) } finally { guardVerb('closeOwnPage'); await page.close().catch(() => {}); await browser.close().catch(() => {}) // для подключённого браузера — только отключение } }) await server.connect(new StdioServerTransport()) ``` design/whole-goal/run-model.py (правка соседа по его же форме): ```diff @@ :46 HOME_READ_TOOLS=['Read','Grep','Glob'] +# STATEMENT 138: Render читает страницы, которые строит скрипт или закрывает вход, через живой профиль CDP. Только чтение. +# Способность явная (request.render.cdp), а не окружающая; в трассе { tool:'Render', kind:'read', input: { url } } рядом с Read/Grep/Glob. +RENDER_TOOL='mcp__render__render' +def research_render(request): + r=request.get('render') + cdp=r.get('cdp') if isinstance(r,dict) else None + return {'cdp':cdp} if isinstance(cdp,str) and cdp.startswith('http://127.0.0.1:') else None +def trace_call(c): + """One tool_use of the Claude stream -> one research-trace call, or None. Pure: checked by check-research-trace.py.""" + n=c.get('name') if c.get('type')=='tool_use' else None + if n in ('WebSearch','WebFetch'):return {'id':c.get('id'),'tool':n,'kind':'search' if n=='WebSearch' else 'fetch','status':'completed','input':c.get('input',{})} + if n in HOME_READ_TOOLS:return {'id':c.get('id'),'tool':n,'kind':'read','status':'completed','input':c.get('input',{})} + if n==RENDER_TOOL:return {'id':c.get('id'),'tool':'Render','kind':'read','status':'completed','input':{'url':(c.get('input') or {}).get('url')}} + return None @@ research_lead (:35–43): when research_render(request), add the line «Страницы, которые строит скрипт или закрывает вход, читай инструментом Render (только чтение, живой профиль); стена входа, капчи или кода — это вопрос владельцу, не обход.» @@ :268–269 if research:receipt['homeReadable']=bool(home) and ent['provider']=='claude-subscription' + render=research_render(request) if research else None + if render:receipt['renderReadable']=ent['provider']=='claude-subscription' # Codex and grok: a named limit, like the home @@ :307–308 - tools=['WebSearch','WebFetch',*(HOME_READ_TOOLS if home else [])] if research else [] + tools=['WebSearch','WebFetch',*(HOME_READ_TOOLS if home else [])] if research else [] + mcp=[RENDER_TOOL] if render and ent['provider']=='claude-subscription' else [] + if mcp:(run/'render-mcp.json').write_text(json.dumps({'mcpServers':{'render':{'command':'node','args':[str(ROOT/'render/render-mcp.mjs')],'env':{'RENDER_CDP_URL':render['cdp'],'RENDER_SHOTS':str(run/'render-shots'),'RENDER_REPO':home['repository'] if home else ''}}}})) cmd=[...,'--tools',','.join(tools),*(['--allowedTools',*tools,*mcp] if research else []),...,*(['--mcp-config',str(run/'render-mcp.json')] if mcp else []),'--strict-mcp-config',...] @@ :313–317 - for c in (ev.get('message') or {}).get('content',[]): - if c.get('type')=='tool_use' and c.get('name') in ('WebSearch','WebFetch'):calls.append({...}) - elif c.get('type')=='tool_use' and c.get('name') in HOME_READ_TOOLS:calls.append({...}) + for c in (ev.get('message') or {}).get('content',[]): + t=trace_call(c) + if t:calls.append(t) + # a server skipped by config validation is silent otherwise: the init event names its status + if mcp and ev.get('type')=='system' and ev.get('subtype')=='init': + st=next((s.get('status') for s in ev.get('mcp_servers',[]) if s.get('name')=='render'),'absent') + receipt['renderServer']=st + if st!='connected':receipt['renderReadable']=False ``` Новый файл design/whole-goal/check-research-trace.py (по форме соседей check-*.py; без сети и CLI): • trace_call для Read, Grep и Glob даёт kind 'read' с исходным input, как сегодня. • WebFetch даёт 'fetch', WebSearch — 'search'. • mcp__render__render с input {"url":"https://claude.ai/new"} даёт {"tool":"Render","kind":"read","input":{"url":"https://claude.ai/new"}}. • Незнакомый mcp__x__y даёт None. • research_render: {'cdp':'http://127.0.0.1:9226'} принимается; 'http://10.0.0.5:9226' и отсутствие поля дают None. Мутант: удалить ветку RENDER_TOOL в trace_call — проверка краснеет. Адаптер: там же, где адаптер кладёт home в запрос ресерча (утв. 116), он кладёт render:{"cdp":"http://127.0.0.1:9226"}. Пробел: живой исходник адаптера task.ts в этом ходе я не нашёл по путям дома (нашлись только копии в runs/ и state/). Поэтому строка правки в нём не названа, её найдёт дверь. КОММИТ 3 — устройство входа, отдельно от Render: design/whole-goal/render/login-device.mjs и login-core.mjs • Устройство не зарегистрировано в MCP-сервере, поэтому модель его не вызывает. Запускает его ядро или владелец явно: node login-device.mjs <продукт>. Подключается к тому же http://127.0.0.1:9226. • Секреты: TEST_GOOGLE_EMAIL и TEST_GOOGLE_PASSWORD читаются только из process.env (EnvironmentFile юнита или set -a; . /home/deploy/.config/imperiaos/env/imperiaos.env). Они не пишутся в трассу, квитанцию, лог и снимки: пока открыта страница с полем пароля, снимок экрана не делается. Квитанция хранит только { product, step, wall }. • Охранник эффектов (чистый login-core.mjs, герметично тестируется): guardLoginAction(host, action, product). – Хосты: страница входа продукта и accounts.google.com. – Действия: 'open-login', 'click-continue-with-google', 'fill-email', 'fill-password', 'click-next', 'oauth-consent-continue'. Последнее разрешено только на экране согласия accounts.google.com, это и есть вход или регистрация, разрешённые владельцем 2026-09-27. – Всё остальное — effect-refused: любые формы онбординга продукта (имя рабочего пространства, выбор плана, чекбоксы условий), публикация, отправка сообщений, запись в чужой продукт. • Стены — это остановки с вопросом владельцу, без обхода и без масок автоматизации: 'blocked-browser' (для Google ожидаема по замыслу), 'captcha', 'email-code', 'phone', '2-step', 'onboarding'. Вопрос: «Физическое действие: войдите руками тестовым аккаунтом в профиле 9226 (xvfb 1440x900) на <продукт>; после этого Render прочитает рабочий экран с куками профиля». • Карта страниц входа для 10 продуктов прогона 60c7c73e (Claude, Perplexity, Manus, Devin, Cursor, Lindy, Dust, n8n, LangSmith, Relevance) заполняется по памяти не будет. Первый Render читает главную страницу продукта и берёт ссылку «Log in» из links. ChatGPT вход не нужен. • Тесты login-core.test.mjs: – 'fill-email' на evil.example → effect-refused; – 'oauth-consent-continue' вне accounts.google.com → effect-refused; – 'click' по «Create workspace» → effect-refused; – nextLoginStep на фикстуре «This browser or app may not be secure» → stop 'blocked-browser' с вопросом; – в сериализованной квитанции нет значения фиктивного пароля из тестового env. Мутант: разрешить любой host — тест evil.example краснеет. УТВЕРЖДЕНИЕ 138 (черновик для task-target.json, после :427) «RESEARCH READS WHAT A SCRIPT BUILDS OR A LOGIN CLOSES. Специмен: run 60c7c73e, runs/60c7c73e-1007-46b0-9a8f-f6434941ac56.json:74, «Сами рабочие экраны не открыты живьём ни у одного из 11 продуктов: все они за логином, а инструмент чтения SPA не рендерит». Свойство: – запрос ресерча с render.cdp даёт транспорту Claude ровно один дополнительный инструмент mcp__render__render со входом url; – каждый вызов записан в research-trace как { tool:'Render', kind:'read', input: { url } } рядом с Read/Grep/Glob; – устройство выполняет только глаголы чтения; – страница входа, капчи, кода, телефона или заблокированного браузера возвращает типизированную стену с вопросом владельцу, а не пустой успех; – вход — отдельное устройство, которое модель не вызывает; секреты только из окружения; – без render.cdp набор инструментов тот же, что сегодня.» Проверки: • [s138] в task.statements.test.ts, по образцу [s116:c2e47f6c]:6050: шпион на request.render. Цель, называющая рабочие экраны за входом, несёт render {"cdp":"http://127.0.0.1:9226"}; цель без веба — нет. • check-research-trace.py и render-core.test.mjs — как выше. • Живая проверка render-live.test.mjs отделена и пропускается без RENDER_CDP_URL. Она читает https://chatgpt.com/ и ждёт inputs ≠ [] и wall = null. СТАТУС И ПРОБЕЛЫ (честно) • Ни один файл не записан: у этого хода только чтение. Ни один тест не запускался. Красный на HEAD только предсказан: RENDER_TOOL и trace_call в run-model.py отсутствуют, grep по design/whole-goal в *.py/*.mjs/*.mts находит только request/answer-файлы, не код. • Не проверено живьём: что CDP http://127.0.0.1:9226 сейчас отвечает; что zod разрешается из node_modules репозитория (он нужен McpServer; SDK 1.25.3 установлен); как MCP-сервер ведёт себя с socks5-выходом профиля (идёт через сам Chrome, поэтому ожидается прозрачно). • Codex и grok Render не получают (renderReadable:false), так же как с домом в 116: ресерч, которому нужен рендер, идёт через Claude-транспорт. • Порядок двери: коммит 1 → 2 → 3, каждый отдельно. Коммит 3 можно отложить: Render без него уже читает ChatGPT, где вход есть, а остальные 10 продуктов читает после ручного входа владельца. Источники: - https://code.claude.com/docs/en/agent-sdk/mcp — имена mcp__<server>__<tool>, явный allowedTools, статусы серверов в init, предел вывода 25 000 токенов. - https://github.com/anthropics/claude-code/issues/14490 — --strict-mcp-config и его пределы. - https://playwright.dev/docs/api/class-browser — close() у подключённого браузера закрывает созданные контексты и отключается. - https://www.browserstack.com/guide/playwright-connect-to-existing-browser — connectOverCDP к уже запущенному браузеру, закрывать только своё. - https://playwright.dev/docs/aria-snapshots — ariaSnapshot как YAML ролей, имён и текстов; ariaSnapshotJSON с 1.63. - https://github.com/microsoft/playwright/issues/31212 — «This browser or app may not be secure» при автоматизированном входе в Google. - https://github.com/Sunwood-ai-labs/logged-in-google-chrome-skill — ручной вход в выделенном профиле, затем подключение Playwright по CDP.

Не хватает: адрес живого профиля браузера по CDP на машине владельца, имена переменных окружения тестового аккаунта и файл, где они лежат