Запрос
текст
Добудь факт «Спека выбранного направления: ИА, дословный первый экран, визуальная система токенами и состояния, отличия от всех аналогов, план проверки, открытые вопросы» (chosen_direction_spec). Выбирать, когда: направление выбрано. Нужны: ["direction_choice","design_synthesis","public_cases","site_language","positioning"]
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 упавших прежних тестов; число прежних тестов не уменьшилось."]
competitor_urls
["Manus | direct | https://manus.im/ | https://manus.im/features/agent-skills","Lindy | direct | https://www.lindy.ai/ | https://www.lindy.ai/pricing","Zapier Agents | direct | https://zapier.com/ | https://zapier.com/agents","Relevance AI | direct | https://relevanceai.com/ | https://relevanceai.com/product","Dust | direct | https://dust.tt/ | https://dust.tt/home/product","n8n | direct | https://n8n.io/ | https://n8n.io/ai-agents/","LangGraph (LangChain) | adjacent | https://www.langchain.com/ | https://www.langchain.com/langgraph","Cursor | adjacent | https://cursor.com/ | https://cursor.com/product","Devin (Cognition) | adjacent | https://cognition.com/ | https://devin.ai/","ChatGPT (OpenAI) | adjacent | https://openai.com/ | https://openai.com/chatgpt/overview/","Claude (Anthropic) | adjacent | https://www.anthropic.com/ | https://claude.com/product/overview"]
competitor_site_readings
["1. Manus | URL: https://manus.im/ ; https://manus.im/features/agent-skills | прочитано 2026-09-27, обе страницы открылись (текстовый рендер без JS) | Первые 5 секунд: заголовок H1 «What can I do for you?», под ним «Less structure, more intelligence.»; чипы задач «Create slides», «Build website», «Design», «Create games», «More». Поле ввода в рендере не видно — возможно, его дорисовывает JS; не подтверждено | Порядок блоков (главная): шапка (Features, Solutions, Resources, Events, Team, Pricing) → hero с чипами → футер (Product, Resources, Community, Compare, Download, Team, Company) → соцсети → выбор языка. Продуктовая страница: H1 «Build custom AI workflows with Agent Skills», CTA «Build your first skill» → таблица сравнения → 3 карточки → 4 преимущества → «From Conversation to Automation in Minutes» → кейсы → кейсы подробно → таблица Skills + MCP → FAQ → CTA «Ready to automate your expertise?» → футер | Визуальная система: белый фон, тёмный текст, синие кнопки, много воздуха, карусель кейсов; шрифты и hex в рендере не видны | Как показано: на главной чипы задач вместо демо; на продуктовой скриншот дашборда и 3 шага «Complete a task → Package as Skill → Reuse anytime» | Что продукт делает: агент выполняет задачи (слайды, сайты, дизайн, игры); Skills упаковывают решённую задачу в повторяемый навык | Что взять: главная — это один вопрос и чипы задач без ленты блоков, ложится на «чат на первом экране»; схему «решил → сохранил → переиспользуй» показать на живом кейсе | Не наше: навык упаковывает сам человек, а у нас паттерн с условием и проверками сохраняет ядро; таблицы сравнения с конкурентами — маркетинговый шум","2. Zapier Agents | URL: https://zapier.com/ ; https://zapier.com/agents | прочитано 2026-09-27, обе открылись | Первые 5 секунд: на главной H1 «Zapier: Build and Govern AI Workflows, Agents, and Apps», подзаголовок про «9,000+ apps» и «Trusted by 3 million+ businesses»; CTA «Start free» / «Talk to sales»; поля ввода нет. На Agents H1 «Meet your new AI teammates», подзаголовок «Create your own superhuman teammates in minutes…», CTA «Get started free» | Порядок блоков (главная): hero → «Smarter workflows. Smaller bills» → «Make every AI step count» → «AI governance and security that scales with you» (Control, Delegation, Visibility) → Enterprise-grade security → Customer stories (4, с цифрами, например «42+ hours saved per week») → закрывающий CTA. Agents: hero → «2.2+ million companies» → Build / Monitor / Chat / Work on the web → видео «Watch Zapier Agents in action» → отзывы → кейсы (Meetings, Sales, Marketing, Customer Support) → галерея шаблонов агентов (карусель) → CTA | Визуальная система: на Agents тёмные фоны, яркие CTA, мокапы интерфейса, карусели со стрелками; главная держится на текстовой иерархии; шрифты и hex не видны | Как показано: видео на YouTube, галерея шаблонов, кейсы с цифрами | Что продукт делает: агенты и workflow в 9,000+ приложениях с управлением доступом | Что взять: галерею готовых шаблонов сделать витриной реестра паттернов (у каждого число повторов и цена); в кейсах давать измеримый итог | Не наше: заявления о масштабе («9,000+», «3 million+»), которых у нас нет; enterprise-язык governance","3. Lindy | URL: https://www.lindy.ai/ ; https://www.lindy.ai/pricing | прочитано 2026-09-27, обе открылись | Первые 5 секунд: H1 «The AI teammate that will 3x your output.»; подзаголовок «Lindy connects to all your tools, knows everything about your company, and does real work for the whole team.»; CTA «Try for free»; статичный мокап Slack (#growth, #support, #eng, #finance); поля ввода нет | Порядок блоков (главная, 18): навигация → hero → G2 4.9 и мокап Slack → логотипы → «Lindy's Toolkit» (5 карточек) → интеграции → библиотека встреч → Routines → Skills library (42 active) → Files/memory → use cases → «Where it lives» (Slack, iMessage, Gmail) → отзывы → Security → цены → FAQ → CTA → футер. Pricing: H1 «The teammate that punches above its price.»; тарифы Plus $29.99, Pro $99.99, Max $199.99 в месяц за пользователя, Enterprise; кредиты: Everyday Asks 2–250, Deep work 250–1,000, Big Builds 1,000–2,500; «No surprise bills—If the pool runs low, Lindy pauses and tells you.» | Визуальная система: белый фон, синие акценты, мокапы интерфейса, серые логотипы, иллюстрированные аватары, автокарусель логотипов | Как показано: мокапы интерфейса; видео и интерактива нет | Что продукт делает: AI-«сотрудник» в Slack/почте с навыками, рутинами и памятью | Что взять: цену задачи в понятных единицах по классам работы (у нас — цена рождения паттерна против нуля при повторе); честное «пауза и сообщение» при исчерпании | Не наше: неподтверждённое «3x your output»; лента из 18 блоков противоречит «никакого маркетингового шума»","4. Relevance AI | URL: https://relevanceai.com/ ; https://relevanceai.com/product | прочитано 2026-09-27, обе открылись | Первые 5 секунд: H1 «Specialist agents for every task»; подзаголовок «Deliver maximum ROI through optimized, enterprise-ready agents. Built and customized by your team.»; CTA «Book a demo» / «Try it out»; на первом экране дашборд метрик (1.24M tasks run/mo, $11.8k spend/mo); поля ввода нет | Порядок блоков (главная): hero с дашбордом → выбор типа агента (Sales, CS, Marketing, HR) → таблица 9 агентов с моделью и ценой → 6-недельный роадмап внедрения → истории (Qualified, Send Payments, Zembl) → Specialist agents vs Cowork/Codex → evals → выбор модели и цена → отзывы (Autodesk, Canva) → enterprise → 1,000+ интеграций → автономия L1–L4 → пресса → футер. Product: H1 «The enterprise-grade agent platform», подзаголовок «Build, run and manage AI agents at scale. The controls to keep them in production.»; цитата «Most teams bolt together a router, a queue, an eval tool and a tracer just to run agents. Relevance ships it all as one system.»; 3 способа сборки (drag-and-drop, Invent, MCP); production evals блокируют упавшую версию | Визуальная система: нейтральные серые, бирюзово-синие акценты, тёплый акцент около #D97757 (из рендера, пипеткой не проверен), иллюстрированные аватары агентов, умеренная плотность | Как показано: таблицы и цифры вместо видео (96.4% pass rate, $0.09/task) | Что продукт делает: платформа для сборки, запуска и контроля агентов в продакшене | Что взять: таблица «задача → модель → цена за задачу → pass rate» и есть наш реестр паттернов (цена рождения, повторы, проверки); evals, блокирующие плохую версию, похожи на наш допуск с проверками | Не наше: enterprise-продажа через демо и 6-недельное внедрение; метрики, которых у нас пока нет, не имитировать","5. Dust | URL: https://dust.tt/ ; https://dust.tt/home/product | прочитано 2026-09-27, обе открылись | Первые 5 секунд: H1 «Multiplayer AI for human-agent collaboration»; подзаголовок «Dust connects your company knowledge, tools, and teams so you can create, share, and run agents across real workflows. Use different models for different tasks, with people in control.»; CTA «Try for free →» / «Request a demo»; поля ввода нет | Порядок блоков (главная): навигация → hero → логотипы «3,000+ global organizations» → «See Dust in action» (скриншот) → отзывы (Clay, Vanta) → «One system for your company's AI work» (4 опоры) → «Work that moves between people and AI» → «Use AI on your terms» → «How every team uses Dust» (табы по отделам) → пресса → «The platform for AI Operators» → футер. По URL продукта открылась страница с H1 «Multiplayer AI for Marketing» (вариант под отдел; это отклонение от ожидаемой общей страницы продукта). CTA там «Contact Sales» / «Try Dust Now», блоки: teams/models/systems → any model → govern usage and costs → Pods и self-improving skills | Визуальная система: нейтральный белый и серый, тёмный текст, скриншоты, портреты клиентов, много воздуха | Как показано: статичный скриншот с подписью «Dust coordinating a Zendesk ticket through classification, CRM update, and reply» | Что продукт делает: общее рабочее пространство людей и агентов со знаниями компании и выбором модели | Что взять: подпись-трасса одного кейса (классификация → действие → ответ) — так же показывать «цель → паттерны → результат» на каждом живом кейсе; мысль «with people in control» близка нашему «правило видно и меняется» | Не наше: табы по отделам и продажа командам «AI Operators»; у нас один человек описывает цель словами","6. n8n | URL: https://n8n.io/ ; https://n8n.io/ai-agents/ | прочитано 2026-09-27, обе открылись | Первые 5 секунд: H1 «AI agents and workflows you can see and control»; подзаголовок «Build visually, go deep with code, connect to anything. Every step of your agents' reasoning, traceable on the canvas. Deploy on your infrastructure or ours.»; CTA «Get started for free» / «Talk to sales»; фоновое изображение, поля ввода нет | Порядок блоков (главная): навигация → hero → логотипы → карточки кейсов (IT Ops, SecOps, DevOps, Sales) → соцдоказательства (GitHub stars, G2) → 500+ интеграций → «Build AI agents you can actually follow» → complex AI / deployment / human-in-the-loop → Code vs UI → developer experience → кейсы (Huel, Vodafone) → enterprise → отзывы → CTA → футер. AI agents: H1 «Build AI agents that work predictably in prod»; CTA «Start building AI agents»; 200k+ GitHub stars; 4 типа агентов (Multi-Agent, Deep Research, RAG, Planning); цитата «There's no problem we haven't been able to solve with n8n.» | Визуальная система: тёмный фон, светлый текст, акцентные CTA, зацикленные карусели иконок, много воздуха | Как показано: диаграмма workflow с запросом «Who held meetings with SpaceX last week?», канвас, кейсы с цифрами | Что продукт делает: визуальный конструктор workflow и агентов с кодом и self-host | Что взять: «every step … traceable on the canvas» в нашем виде — видимое дерево классификации цели рядом с чатом (решение владельца) | Не наше: ручная сборка нод (у нас ядро само раскладывает цель); технический язык self-host и SOC2 на первом экране","7. LangGraph (LangChain) | URL: https://www.langchain.com/ ; https://www.langchain.com/langgraph | прочитано 2026-09-27, обе открылись | Первые 5 секунд: на главной H1 «LangChain: the open agent platform to own your intelligence», «Meet LangSmith Engine», CTA «Start building» / «Get a demo». На LangGraph H1 «Balance agent control with agency», подзаголовок «Design agents that reliably handle complex tasks with LangGraph, an agent runtime and low-level orchestration framework.», CTA «Start building» / «Read the docs». Поля ввода нет | Порядок блоков (главная): навигация → hero (запись keynote) → LangSmith Engine → логотипы → цикл Build / Test / Deploy / Monitor / Iterate / Govern → open source (deepagents, langchain, langgraph) → 5 кейсов → «350M+ monthly open source downloads / 7K+ active customers / 5 Fortune 10 companies» → футер. LangGraph: hero → иллюстрация → логотипы → «How does LangGraph help?» (4 карточки) → LangChain Academy → отзывы разработчиков → FAQ (3) → LangSmith → футер | Визуальная система: на LangGraph тёмный фон и синие ссылки; на главной персонажи-иллюстрации (Einstein, Newton, Franklin), градиенты, жирный sans-serif, карусели | Как показано: концептуальные карточки и ссылки в документацию; кода и демо на странице нет | Что продукт делает: фреймворк и рантайм оркестрации агентов для разработчиков | Что взять: пара «control vs agency» совпадает с нашим «система держит цель, правило можно поменять»; короткий FAQ из 3 вопросов | Не наше: аудитория разработчиков фреймворка, академия, персонажи-иллюстрации","8. Cursor | URL: https://cursor.com/ ; https://cursor.com/product | прочитано 2026-09-27, обе открылись | Первые 5 секунд: H1 «Cursor is your coding agent for building ambitious software.»; CTA «Download for macOS» / «Get started» / «Request a demo»; на первом экране интерфейс продукта: задачи «Build Landing Page» и «Plan Mission Control», статусы «In Progress» и «Ready for Review», длительности 10m, 30m, 14m 22s, пример CLI. Из прочитанных это единственный сайт с продуктом на первом экране | Порядок блоков (главная): навигация → hero с демо → таймлайн «Acme Labs» 2022–2026 → «Agents turn ideas into code» → «Works autonomously, runs in parallel» → «In every tool, at every step» (CLI, Slack, GitHub PR) → «Automate repetitive work» → отзывы (Diana Hu, Jensen Huang, Andrej Karpathy, Patrick Collison, shadcn, Greg Brockman) → «Use the best model for every task» → «Build with autonomous agents» → список задач репозитория → «Develop enduring software» → changelog → команда → блог → футер. Product: H1 «Turn ideas into code», подзаголовок «Delegate implementation to focus on higher-level direction.», CTA «Download for macOS» / «Try mobile agent» → демо desktop → «Everywhere you work» → web и mobile → «Understands your codebase, no matter the size» → Plan / Design / Debug → Terminal / Context / Git / Plugins / MCP → отзывы → блог и changelog → футер | Визуальная система: тёмный фон, cyan и синие акценты, подсветка синтаксиса, скриншоты продукта, умеренная плотность | Как показано: интерфейс со статусами задач и временем выполнения, похожий на живой | Что продукт делает: кодинг-агент в IDE, CLI и облаке | Что взять: первый экран — сам продукт с задачами в разных статусах и временем; прямо ложится на «три живых кейса» (статус, время, повтор без модели) | Не наше: стена знаменитых отзывов; скачивание десктоп-клиента как главный CTA","9. Devin (Cognition) | URL: https://cognition.com/ ; https://devin.ai/ | прочитано 2026-09-27, обе открылись (в parent_task указан cognition.ai, читал cognition.com из competitor_urls) | Первые 5 секунд: на Cognition H1 «Cognition operates Devin, the first autonomous software engineer.», CTA «Try Devin» / «Download apps». На Devin H1 «Meet Devin, your team's autonomous software engineer», подзаголовок «Devin runs in the cloud or on your machine, tests in its own browser, and won't stop until the PR is ready to merge», CTA «Get started» / «Book a demo». Поля ввода нет | Порядок блоков: Cognition: hero → логотипы (Mercedes-Benz, Goldman Sachs, Infosys) → бенчмарк FrontierCode → карьера → блог. Devin: hero → лента логотипов (16, повторена) → «Your teammate's favorite teammate» (4) → «From problem to merged PR» (Understand, Code, Review, Automate) → интеграции → «Recently shipped» (7) → enterprise security → CTA | Визуальная система: на Cognition минимализм, белый фон, крупные заголовки, нумерация 01/02/03; на Devin бегущая лента логотипов; hex и шрифты не видны | Как показано: текст и 4 нумерованных этапа; видео и демо нет | Что продукт делает: автономный агент-инженер от задачи до готового PR | Что взять: 4 нумерованных этапа от задачи до результата (у нас: согласовать цель → разложить → выполнить → проверить); критерий готовности в формулировке («won't stop until…») | Не наше: заявка на первенство («the first autonomous…»), тогда как у нас «занять окно первыми» — стремление, а не факт; лидерборд бенчмарка","10. ChatGPT (OpenAI) | URL: https://openai.com/ ; https://openai.com/chatgpt/overview/ | попытка 2026-09-27: НЕДОСТУПНО. Обе страницы вернули HTTP 403 Forbidden; https://chatgpt.com/ тоже 403; снимок web.archive.org инструменту недоступен | Первые 5 секунд, порядок блоков, визуальная система, как показано, что делает, что взять, что не наше: не заполнены — не прочитано, по памяти не додумываю | Нужно: открыть в обычном браузере (desktop) или через другой инструмент чтения и заполнить строку","11. Claude (Anthropic) | URL: https://www.anthropic.com/ ; https://claude.com/product/overview | прочитано 2026-09-27, обе открылись | Первые 5 секунд: на Anthropic H1 «AI research and products that put safety at the frontier», подзаголовок «AI will have a vast impact on the world. Anthropic is a public benefit corporation dedicated to securing its benefits and mitigating its risks.», CTA «Read more» (анонс Claude Opus 5.5). На Claude H1 «Give Claude more», подзаголовок «Hand Claude a task, not just a question. Tackle routines, tangled ideas, and big projects.», CTA «Try Claude» / «Download for macOS», статичный скриншот интерфейса. Поля ввода нет | Порядок блоков: Anthropic: навигация → hero → Latest releases (3) → 6 блоков контента → футер. Claude: hero → 3 тезиса → «Put Claude to Work» по ролям → пошаговые workflow → отзывы с видео → библиотека возможностей → пример для marketing → FAQ → футер | Визуальная система: нейтральные серые, белый фон, синие ссылки, модульные карточки, много воздуха, минимум анимации | Как показано: дословные запросы пользователя (например, «Pull customer feedback from Slack, email, and support»), под ними шаги вход → решения → выход и иконки коннекторов | Что продукт делает: ассистент, который берёт задачу целиком, а не только вопрос | Что взять: дословный запрос человека как заголовок кейса и трасса шагов под ним — формат трёх живых кейсов; мысль «a task, not just a question» близка «цель переживает разговор» | Не наше: ролевые разделы по отделам; миссионный язык безопасности на главной"]
parent_task
Проанализируй сайты конкурентов и спроектируй дизайн сайта shadums.com (слово владельца 2026-09-27 ~11:4xZ: «открывается, но внутри непонятно что; надо проанализировать конкурентов, взять лучшее из их дизайна и, используя наше ядро, построить дизайн»). Что такое Shadums: ядро решений — человек описывает цель словами, ядро согласует её, раскладывает на паттерны, знакомое переиспользует без большой модели, новое исследует, результат доводит до кода, письма, действия и проверяет сам (позиционирование: «опиши, что нужно — настроим решение»). Решения владельца о сайте, которые обязательны: сайт = чат + дерево классификации цели; первый экран — три живых кейса и поле ввода; крючок — упрощение; никакого маркетингового шума. Конкуренты и соседи, чьи сайты надо прочитать живьём (главная + одна страница продукта каждого): manus.im, zapier.com, lindy.ai, relevanceai.com, dust.tt, n8n.io, cursor.com, cognition.ai (Devin), openai.com/chatgpt, anthropic.com/claude, langchain.com (LangGraph). Для каждого: (1) что человек видит в первые 5 секунд — заголовок, первое действие, есть ли живой продукт на первом экране; (2) структура страницы — порядок блоков; (3) визуальная система — сетка, типографика, цвет, плотность, анимация; (4) как показывают «что это делает» — демо, кейсы, видео, интерактив; (5) что у них лучшее, что стоит взять, и что не наше. Итог — дизайн-спека сайта shadums.com: три направления (каждое — одно предложение сути, первый экран по блокам, откуда взято лучшее и почему оно ложится на нашу архитектуру), твоя рекомендация одного направления с доводом, и для него: информационная архитектура (страницы и блоки по порядку), первый экран дословно (заголовок, подзаголовок, поле ввода с плейсхолдером, три живых кейса — какие и как показаны), визуальная система (сетка, шрифтовые пары, цветовые роли, состояния), то, чем сайт отличается от всех прочитанных. Наружу ничего не отправлять; ссылки на источники — рядом с каждым заимствованием.
Классификация
вердикт
made:artifact
причина
new: no candidate
известных записей
233
Понятие 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, draft_bottom_up_storage_logic_api_ui_patch_with_red_first_tests_traced_to_owner_statements, draft_bottom_up_storage_logic_api_ui_patch_with_red_first_tests_per_layer_and_open_owner_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, retrieve_latest_prior_code_patch_draft_from_run_reports_with_full_base_sha_anchor_check_and_appliability_verdict, derive_utc_run_window_from_run_at_session_gap_anchored_on_named_runs_with_open_right_bound, draft_file_grounded_bottom_up_patch_by_neighbor_setting_with_scenario_tagged_tests_commit_order_and_unapplied_status, draft_bottom_up_storage_rule_api_ui_patch_by_neighbor_setting_with_scenario_traced_tests_and_honest_unapplied_status, 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
Понятие c74
признаки
artifact:file, made:artifact
записи
analyze_competitor_features_fit_gap_select_goals, compose_interview_demo_plan_from_frame_bridge_timeline_architecture_qa_prep_and_fallback, trace_scenarios_to_tests_run_full_gates_fail_to_pass_land_and_list_unverified, derive_traced_gwt_scenarios_from_parent_task_numbered_statements_with_open_decisions, derive_traced_gwt_scenarios_set_unset_switch_rollback_invalid_from_owner_numbered_statements_with_assumptions_and_open_questions, derive_traced_gwt_scenarios_for_nullable_single_select_setting_storage_rank_api_ui_with_characterization_baseline_and_open_questions, verify_kernel_against_numbered_criteria_with_three_valued_verdicts_and_evidence_locators_read_only, derive_traced_f2p_gwt_scenarios_with_p2p_repo_regression_baseline_and_open_questions, compose_kernel_self_check_report_from_baseline_run_window_criterion_verdicts_and_outbound_audit
direction_choice
источник
subgoal: ask
статус
subgoal: ask
Добудь факт «выбранное направление дизайна сайта (итог отбора и гибрида)» (direction_choice)
исход
admitted
ответ
direction_choice = Направление 1 «Один вопрос» в гибриде: из направления 2 взята полоса дерева выбранного кейса, видная без клика, из направления 3 — строка «повтор: N вызовов модели», которая показывается только при наличии замера **Это не новый выбор, а уже записанное решение.** По правилу «снача
design_synthesis
источник
alias:competitor_site_readings
статус
ok
competitor_site_readings
источник
input
статус
ok
positioning
источник
input
статус
ok
site_language
источник
ask
статус
ask
public_cases
источник
ask
статус
ask
proof_reuse
источник
input
статус
ok
parent_task
источник
input
статус
ok
Исход
вид
admitted
вызовов модели
9
Результат
вид
ask
не хватает
direction_choice, site_language, public_cases
вопрос
Не хватает: выбранное направление дизайна сайта (итог отбора и гибрида), язык сайта, какие прогоны можно показать публично и как обезличить
Ответ
текст
chosen_direction_spec = [\"0. РАМКА И ГЕЙТ. Цель сайта: за 5 секунд человек понимает, что Shadums берёт цель словами и доводит её до проверенного результата, и сразу вводит свою цель или смотрит, как ядро решило похожую. Аудитория: один человек, который описывает цель словами (синтез, Н1). Выбранное направление дословно: Направление 1 «Один вопрос» в гибриде: из направления 2 взята полоса дерева выбранного кейса, видная без клика, из направления 3 — строка «повтор: N вызовов модели», которая показывается только при наличии замера (runtime/runs/97ff7eab-d11d-49aa-a8aa-df82128a5a65.json:88; счёт 3.80 против 3.60 и 3.45; направление 3 отсеяно по Р3). Позиционирование дословно: цель должна переживать разговор с ИИ: система удерживает цель, выполняет, проверяет результат и сохраняет найденный способ как исполняемый опыт; решения объяснимы — видно основание, правило можно поменять. Решения владельца (parent_task): Р1 — сайт = чат + дерево классификации цели; Р2 — на первом экране три живых кейса и поле ввода; Р3 — крючок — упрощение; Р4 — никакого маркетингового шума. ГЕЙТ: direction_choice есть, но это рекомендация ядра, владелец её не подтвердил (В3); design_synthesis есть (runtime/runs/df4915ef-004e-42c0-9ce8-b8474c8d657c.json:1854, допущен); positioning есть; site_language НЕТ (pending, df4915ef…json:1478); public_cases НЕТ (pending, :1482). Поэтому это черновик на допущениях: Д1 — язык сайта русский (все решения владельца и H1 выбранного направления написаны по-русски); Д2 — публичные кейсы — три из направления 1, обезличенно. НЕ-ЦЕЛИ: лента блоков, логотипы, отзывы, карусели, видео (К2, К6, К8); таблица сравнения с конкурентами (Н6); корпоративные блоки и демо для продаж (Н2); тарифы; цифры производителя Jev; английская версия до ответа на В1; регистрация.\", \"1. ИНФОРМАЦИОННАЯ АРХИТЕКТУРА (ярлыки — на языке человека, а не жаргон ядра). Уровень 0 — Главная, адрес /. Зачем: ввести цель или открыть кейс. Главный объект: поле ввода. Уровень 0, то же место после отправки — Разговор: слева чат, справа дерево цели (Р1). Зачем: согласовать цель и получить результат. Главный объект: дерево. Уровень 1 — Кейс: /cases/pismo-osnovatelyu, /cases/nastroyka-v-kode, /cases/razbor-konkurentov. Зачем: увидеть записанный прогон целиком — дословный запрос, дерево, проверки, результат, повтор. Уровень 1 — Реестр паттернов, /registry (open_registry_as_spec): у каждой записи назначение, посылки, форма, законы, источники, цена рождения, число повторов и автор; показываются только реальные записи (П7). Уровень 2 — Запись паттерна, /registry/имя. Уровень 1 — Как это устроено, /how: пять этапов «согласовать → разложить → выполнить → проверить → сохранить» (К5). Навигация: в шапке только слово Shadums (ссылка на /); внизу одна строка «Реестр паттернов · Как это устроено». Связи: чип → полоса дерева → «Открыть кейс целиком»; узел → «Почему так?» → «Открыть запись в реестре»; запись → кейсы, где она применена. Пути: А) цель → «Начать» → ядро переспрашивает недостающее → дерево растёт → результат; Б) чип → на месте проигрывается записанный прогон → кейс; В) узел → основание правила → запись реестра. Отвергнуто: разделы по ролям и отделам (Н1), страница тарифов, блог.\", \"2. ПЕРВЫЙ ЭКРАН ДОСЛОВНО (язык по Д1 — русский; ширина от 1024 px; сверху вниз). Шапка: Shadums. H1: Опишите, что нужно — настроим решение. Подзаголовок: Ядро согласует цель, разложит её на шаги, знакомое сделает без большой модели и само проверит результат. Поле ввода — единственное главное действие; метка для экранного диктора «Опишите цель»; плейсхолдер: Например: напиши письмо основателю компании, где хочу работать. Кнопка: Начать. Строка над кейсами: Или посмотрите, как ядро это уже решило. Три чипа-кейса, первый выбран: Письмо основателю · Настройка в коде с тестами · Разбор сайтов конкурентов. Полоса дерева выбранного кейса, видна без клика. Заголовок полосы: «Как ядро решило этот запрос». Колонки: «Цель», «Шаги», «Проверки», «Результат». У каждого шага метка «знакомый · без модели» или «новый · дорешила LLM» и кнопка «Почему так?». У каждой проверки — «прошла» или «не прошла». Внизу ссылка «Открыть кейс целиком». Колонки заполняются из отчёта прогона. Метку «знакомый · без модели» получает только шаг, у которого в расписке ноль вызовов модели. Строка повтора: «Повтор этого запроса: 0 вызовов модели» — есть только у кейса с измеренным повтором (основание — proof_reuse: повтор того же входа — ноль вызовов модели); без замера строки нет. Сигнал доверия вместо логотипов (К2): Каждый шаг — из записанного прогона ядра. Числа показаны, только если измерены. Нижняя строка: Реестр паттернов · Как это устроено. Мобильная версия (до 640 px): одна колонка; полоса свёрнута в строку «Цель → шаги → проверки → результат» и раскрывается нажатием. После нажатия «Начать» экран делится 5/7: слева разговор, справа дерево; первая реплика ядра — согласование цели.\", \"3. ВИЗУАЛЬНАЯ СИСТЕМА. Формат DTCG: имя → $type → $value; семантический токен ссылается на примитив, в файле ссылка записывается в фигурных скобках. Основание: К7 (светлый нейтральный фон, синий акцент, много воздуха; 6/10) — соблюдаем; К8 (карусели) — не используем. ПРИМИТИВЫ, $type color: color.gray.0 #FFFFFF; color.gray.50 #F6F7F9; color.gray.100 #F3F4F6; color.gray.300 #D1D5DB; color.gray.500 #6B7280; color.gray.600 #4B5563; color.gray.900 #111827; color.blue.50 #EFF6FF; color.blue.700 #1D4ED8; color.blue.800 #1E40AF; color.green.50 #ECFDF5; color.green.700 #047857; color.amber.50 #FFFBEB; color.amber.800 #92400E; color.red.50 #FEF2F2; color.red.700 #B91C1C. СЕМАНТИКА: color.bg.page → gray.0; color.bg.surface → gray.50; color.bg.disabled → gray.100; color.bg.selected → blue.50; color.text.primary → gray.900; color.text.secondary → gray.600; color.text.disabled → gray.500; color.border.control → gray.500; color.border.subtle → gray.300; color.action.primary.bg → blue.700; color.action.primary.bg-hover → blue.800; color.action.primary.text → gray.0; color.focus.ring → blue.700; color.status.known.text и .bg → green.700 и green.50 (метка «знакомый · без модели»); color.status.new.text и .bg → amber.800 и amber.50 (метка «новый · дорешила LLM»); color.status.error.text и .bg → red.700 и red.50. Цвет статуса никогда не единственный признак: рядом всегда текст метки. КОНТРАСТ (посчитан вручную по формуле относительной яркости WCAG, нужно перепроверить инструментом): text.primary/bg.page 17.7:1; text.secondary/bg.page 7.6:1, на bg.surface 7.0:1; action.primary.text/action.primary.bg 6.7:1; blue.700/bg.selected 6.2:1; status.known 5.3:1; status.new 6.9:1; status.error.text/bg.page 6.5:1 — все пары текста не ниже 4.5:1 (AA). border.control/bg.page 4.8:1 и focus.ring/bg.page 6.7:1 — не ниже 3:1 (1.4.11). ТИПОГРАФИКА: font.family.sans → fontFamily → Inter, system-ui, sans-serif — весь текст; font.family.mono → fontFamily → JetBrains Mono, ui-monospace, monospace — узлы дерева, имена паттернов, числа из прогонов (трасса читается как данные). Обе гарнитуры поддерживают кириллицу. font.size.h1 → dimension → 40px (мобильная 30px), высота строки 1.2; font.size.lead 20px/1.5; font.size.body 16px/1.5; font.size.small 14px/1.43; font.size.mono 14px/1.43; font.weight.regular 400, medium 500, semibold 600 (H1 — semibold). ОТСТУПЫ: space.1 4px; space.2 8px; space.3 12px; space.4 16px; space.6 24px; space.8 32px; space.12 48px; space.16 64px. СЕТКА: 12 колонок, max-width 1120px, gutter space.6, поля space.6 (мобильная space.4). На главной — колонка 8/12 по центру, после отправки — 5/7. РАДИУСЫ: radius.control 8px; radius.card 12px; radius.chip 999px. ТЕНИ: shadow.none; shadow.sheet → 0 8px 24px rgba(17,24,39,0.12) — только у выезжающей панели дерева на мобильной. ГРАНИЦЫ: border.width.default 1px; focus.ring.width 2px; focus.ring.offset 2px. ДВИЖЕНИЕ: duration.fast 120ms (hover); duration.base 200ms (раскрытие); duration.replay-step 400ms (появление узла при проигрыше прогона); easing.standard cubic-bezier(0.2, 0, 0, 1). При prefers-reduced-motion все длительности равны 0, и проигрыш сразу показывает итог. СЛОЙ СОСТОЯНИЯ: opacity.state.hover 0.08; opacity.state.focus 0.12; opacity.state.pressed 0.12 — в пределах 8–12%, как описывают Material 3; точные значения выбраны мной.\", \"4. СОСТОЯНИЯ: для каждого указано, какие токены меняются. ПОЛЕ ВВОДА. default: bg.page, border.control, text.primary, плейсхолдер text.secondary. hover: граница → text.primary. focus: кольцо focus.ring 2px с отступом 2px, граница → action.primary.bg. active (идёт ввод): как focus. disabled (пока ядро отвечает): bg.disabled, text.disabled, фокус не принимает. loading: поле в disabled, под ним text.secondary «Согласую цель…». empty: виден плейсхолдер, «Начать» в disabled. error: граница и текст status.error.text «Не удалось отправить. Попробуйте ещё раз.», связь через aria-describedby. КНОПКА «НАЧАТЬ». default: action.primary.bg, action.primary.text. hover: action.primary.bg-hover. focus: focus.ring. active: bg-hover плюс слой opacity.state.pressed. disabled: bg.disabled, text.disabled, исключена из порядка табуляции. loading: надпись «Согласую…», aria-busy, ширина не меняется. empty: как disabled, пока поле пустое. error: кнопка возвращается в default, ошибку показывает поле. ЧИП КЕЙСА (переключатель, aria-pressed). default: bg.page, border.subtle, radius.chip. hover: слой opacity.state.hover цвета text.primary. focus: focus.ring. active (выбран): bg.selected, граница action.primary.bg, текст blue.700. disabled (во время отправки своей цели): text.disabled, не нажимается. loading: под чипом полоса-скелет bg.surface. empty: если кейса нет в public_cases, чип не рендерится. error (прогон не загрузился): в полосе status.error.text «Прогон не загрузился.» и ссылка «Открыть кейс целиком». УЗЕЛ ДЕРЕВА (кнопка раскрытия «Почему так?», aria-expanded). default: font.family.mono, метка status.known или status.new. hover: слой opacity.state.hover. focus: focus.ring. active (раскрыт): bg.surface, левая граница 2px action.primary.bg; видны основание правила и ссылка «Открыть запись в реестре». disabled (у узла нет основания в отчёте): text.disabled, aria-disabled, не фокусируется. loading (идёт живой прогон): метка text.secondary «выполняется…». empty (цель ещё не согласована): «Дерево появится, когда ядро согласует цель.». error (проверка не прошла): метка status.error «не прошла» и причина из отчёта.\", \"5. ОТЛИЧИЯ ОТ КАЖДОГО АНАЛОГА (по прочтениям 2026-09-27; для каждого — зачем это человеку). Manus: у них H1-вопрос и чипы умений, поле в рендере не видно. У нас чипы — три записанных прогона, и полоса дерева видна без клика: человек видит, как задача решается, а не перечень умений. Zapier Agents: у них числа масштаба («9,000+ apps», «3 million+»), видео и карусель шаблонов. У нас нет ни одного числа масштаба, а вместо видео прогон проигрывается на месте: меньше обещаний, больше того, что можно проверить. Lindy: у них лента из 18 блоков и «3x your output». У нас один экран и одна нижняя строка, неизмеренных множителей нет: суть понятна без прокрутки. Relevance AI: у них корпоративный дашборд метрик и «Book a demo». У нас главное действие — своё поле, продажи через демо нет, проверки видны у каждого шага. Dust: у них статичный скриншот с подписью-трассой. У нас та же трасса, но взята из отчёта прогона, и узел раскрывает основание: объяснение можно проверить. n8n: у них канвас ручной сборки на тёмном фоне. У нас дерево раскладывает ядро само, фон светлый: человеку ничего не нужно соединять. LangGraph: у них язык разработчиков фреймворка и «Read the docs». У нас язык человека с задачей, кода на первом экране нет. Cursor: у них продукт на первом экране, но это IDE на тёмном фоне, а главное действие — скачать клиент. У нас продукт (цель → шаги → проверки) работает прямо в браузере, скачивать ничего не нужно. Devin: у них «the first autonomous software engineer» и лента логотипов. У нас нет превосходных степеней, а готовность видна по пройденным проверкам. ChatGPT: не прочитан (HTTP 403), отличие не установлено (В5). Claude: ближайший приём — дословный запрос как заголовок кейса и шаги под ним. У нас каждый шаг помечен «знакомый · без модели» или «новый», а правило открывается в реестре: видно, что повтор дешевле, и основание можно поменять. Общее: по прочтениям рабочего поля ввода на первом экране нет у 8 из 10 (Г1), живого показа результата нет у 6 из 10 (Г2); у нас есть и то, и другое. В токенах мы отличаемся не цветом (светлый фон и синий акцент — конвенция К7), а моноширинной трассой и парой меток «знакомый»/«новый».\", \"6. ПЛАН ПРОВЕРКИ (пороги заданы до теста). Т1, первый экран — пятисекундный тест. 20 человек, которые пользовались чат-ассистентом; язык — по site_language. Вопросы: «Что делает этот сервис?», «Что вы сделаете первым?», «Чем он отличается от обычного чата?». Успех: не меньше 70% пересказывают суть «описать задачу — получить проверенное решение»; не меньше 70% называют поле или «Начать»; не меньше 40% упоминают шаги, дерево или «без модели». Если третий показатель ниже 40% — увеличить полосу, раскрыть первый шаг по умолчанию и повторить тест. Т2, ИА — tree test. 50 человек. Задачи: «Где посмотреть, как сервис уже написал письмо?» (Кейс); «Где увидеть все сохранённые способы решения?» (Реестр паттернов); «Как узнать, почему ядро сделало шаг?» (узел → Почему так?); «Где прочитать, как устроена работа?» (Как это устроено). Успех: по каждой задаче не меньше 80%, прямота не меньше 60%. Если у «Реестра паттернов» меньше 60% — переименовать в «Решённые способы» и повторить. Т3, система — аудит. Каждая пара цвет/фон из раздела 3: текст не ниже 4.5:1, границы и фокус не ниже 3:1. Все 4 компонента в 8 состояниях на одной стенд-странице. Клавиатура: Tab проходит поле → «Начать» → 3 чипа → узлы; элементы в disabled фокус не получают; reduced-motion отключает проигрыш. Успех: 100% пунктов. Т4, отличие — сравнительный пятисекундный тест. 20 человек видят первые экраны Shadums, Manus, Claude и Cursor в случайном порядке. Вопрос: «Какой сервис показывает, как он решает задачу?». Успех: не меньше 60% выбирают Shadums. Т5, честность (Р4) — сверка экрана: 0 логотипов, 0 отзывов, 0 чисел, у которых нет поля-источника в отчёте прогона. Успех: 100%.\", \"7. ОТКРЫТЫЕ ВОПРОСЫ (что · кто отвечает · что блокирует · срок). В1. site_language: только русский, только английский или оба? · владелец · текст первого экрана, font.family.sans, язык тестов Т1–Т4 · до вёрстки первого экрана. В2. public_cases: какие три прогона публикуем и есть ли согласие на обезличенный показ; в письме — без имён адресата и компании · владелец · чипы, полоса дерева, страницы кейсов · до вёрстки. В3. Подтвердить выбор направления и веса; при весе К1 выше 0.56 выигрывает направление 2 без гибрида · владелец · вся спека · до вёрстки. В4. Замеры времени, вызовов модели и повторов для трёх кейсов · отчёты runtime/runs · только строка повтора и числа в полосе (без замера они не рендерятся), запуск не блокирует · до публикации кейса. В5. ChatGPT не прочитан (HTTP 403) · чтение в обычном браузере · только строка отличий · до Т4. В6. Текущий shadums.com не открыт · владелец или чтение страницы · план замены старой страницы · до публикации. В7. Кириллицу Inter обзоры называют менее проработанной · Т1 на русском · токен font.family.sans · до вёрстки. РЕШЕНО: направление 3 отсеяно по Р3; таблица экономики на первый экран не идёт (Р3); контактная строка не включена, потому что канала связи во входах нет.\"]\n\n**Откуда входы.**\n- direction_choice — это предложение ядра в прогоне 97ff7eab (строка 88), владелец его не подтверждал.\n- Три направления — из допущенного отчёта df4915ef:2025, design_synthesis — оттуда же, строка 1854.\n- positioning, proof_reuse, competitor_site_readings и parent_task — из входа.\n- site_language и public_cases в прогоне df4915ef помечены как pending: владелец на них не ответил. Поэтому это черновик на допущениях Д1 (язык) и Д2 (кейсы), и ядро должно спросить владельца ровно об этих двух фактах.\n- Числа, которые на сайте должны браться из прогонов, я не вписывал, а привязал к полям отчёта.\n\n**Что проверено поиском и применено в спеке:**\n- [DTCG Format Module 2025.10](https://www.designtokens.org/tr/drafts/format/): у токена есть $value и $type, токен может ссылаться на другой токен.\n- [NN/g, 5-Second Test](https://www.nngroup.com/videos/5-second-usability-test/) и [NN/g, Testing Visual Design](https://www.nngroup.com/articles/testing-visual-design/): тест первого впечатления, 4–6 вопросов.\n- [NN/g, Tree Testing](https://www.nngroup.com/articles/tree-testing/) и [NN/g, Interpreting Tree Test Results](https://www.nngroup.com/articles/interpreting-tree-test-results/): метрики успеха и прямоты.\n- Пороги 60/80% и выборка около 50 человек в тех же результатах поиска приписаны NN/g. Страницы я не открывал, поэтому это ориентир, а не цитата.\n- [W3C, Understanding 1.4.11](https://www.w3.org/WAI/WCAG21/Understanding/non-text-contrast.html) и [WebAIM, Contrast](https://webaim.org/articles/contrast/): 4.5:1 для текста, 3:1 для компонентов и фокуса.\n- [Material 3, States](https://m3.material.io/foundations/interaction/states/applying-states): поиск дал только диапазон слоя состояния 8–12%; значения по каждому состоянию — моё решение.\n- [Inter](https://rsms.me/inter/) и [JetBrains Mono](https://www.jetbrains.com/lp/mono/): кириллица есть у обеих; есть замечание, что кириллица Inter проработана хуже — вынесено в В7.\n- [NN/g, Homepage Design Principles](https://www.nngroup.com/articles/homepage-design-principles/): главная за один взгляд говорит, кто вы и что здесь можно сделать.\n\n**Не проверено:**\n- Контрасты посчитаны вручную.\n- Пороги Т1 и Т4 выбраны мной заранее, а не взяты из источника.

Не хватает: выбранное направление дизайна сайта (итог отбора и гибрида), язык сайта, какие прогоны можно показать публично и как обезличить