epic KARASS-91 · EPIC A — Foundation: GitHub remote, CI, deploy pipeline
[x]Push karass-landing to GitHub, install karass-dev App, protect mainKARASS-97
[x]CI on PR: typecheck + lint + build (GitHub Actions)KARASS-98
[x]Auto-deploy: merge to main → Cloud Build → Cloud RunKARASS-99
[ ]Agent merge policy: who merges what, when, and how it's enforcedKARASS-100
epic KARASS-92 · EPIC B — Mycelium: unified event log, mandatory logging, read API
[x]Event log schema v1 (migration 016): append-only, refs, meta-levelsKARASS-102
[~]Writers: Claude Code hooks, CI/deploy, Linear webhook, TG — log-first everywhereKARASS-103
[~]Event-log read interface: MCP server (get_events, search, context, agent_state)KARASS-104
[~]Organism self-health: liveness timestamps per subsystem + /api/health/organismKARASS-105
epic KARASS-93 · EPIC C — Build loop: dispatcher that builds Karass itself
[x]Builder VM in karass-platform: isolated, Claude Code + hooks, provisioned via resource ledgerKARASS-106
[x]Dispatcher constitution for Karass: pickup contract, workspace lifecycle, serializationKARASS-107
[x]First autonomous cycle: one real KARASS ticket end-to-end to prod — the "1" milestoneKARASS-108
[ ]Decision→Outcome→Policy wiring: every dispatcher choice is a named decision pointKARASS-109
[ ]Safety rails: budget caps, concurrency 1, stall watchdog, owner abort switchKARASS-110
[~]Foreman: the crane manages its own queue (stop bootstrap labeling waves)KARASS-126
[ ]Robust epic-exclusion in claim: don't treat parentless tickets as epicsKARASS-129
[ ]The crane ships like yeet — review, fix, merge, watchKARASS-130
[~]Yeet delivery 1/3 — safe PR-walk + fail-closed owner-gateKARASS-136
[~]Yeet delivery 2/3 — merge gate (both reviewers, P1-aware, retry Done)KARASS-137
[~]Yeet delivery 3/3 — fix-session sub-flow (validate exit, cap rounds)KARASS-138
epic KARASS-94 · EPIC D — Signals & verification: Karass senses itself
[ ]Monitor watches Karass itself: own Sentry project + self-tenantKARASS-111
[~]Post-deploy verify + auto-revert live for Karass deploysKARASS-113
[~]Owner channel: TG digest (log-first) + inbound owner messages → events/ticketsKARASS-114
[~]Known-good anchor: eye-verified versions + catastrophic rollback organKARASS-125
[~]Fix verify: drop the fragile GitHub CI-lookup — a serving revision already passed CIKARASS-127
[~]Fix verify: Monitor-quiet = no regression, not zero errorsKARASS-131
[~]Notion self-healing: health limb + dead-token escalation + degraded fallbackKARASS-132
epic KARASS-95 · EPIC E — Construction site UI on karass.dev
[~]Live organism feed: event-log stream page on karass.devKARASS-115
[~]Work queue + attempt timeline: what the organism is building nowKARASS-116
[~]Trust & budget controls: pause/abort, caps, gated-approvals queueKARASS-117
[~]Construction site becomes the default view for tenant "karass"KARASS-118
[~]ASCII construction animation: the crane, alive on the front pageKARASS-124
[~]Roadmap live from Linear — stop hand-maintaining the front-page snapshotKARASS-128
epic KARASS-96 · EPIC F — Infra roadmap & economics (0→1 now, 1+ sketch)
[ ]Infra doc 0→1: LLM tiering under real constraints, enforced in configKARASS-119
[ ]Legacy infra decision: repurpose or sleep the idle $45–65/mo (needs owner OK)KARASS-120
[ ]1+ infra research: Managed Agents, hosted MCP servers, multi-tenant isolationKARASS-121
[ ]Housekeeping: triage stale KARASS-78..90 against the revival roadmapKARASS-123
epic KARASS-101 · Preview deploy per PR + post-deploy screenshot for visual verify
[x]Deploy tagged Cloud Run revision (no traffic) per PRKARASS-232
[ ]Post/update PR comment with preview URL and screenshotsKARASS-234
epic KARASS-133 · EPIC G — Self-build family (крон-компоненты)
[x]Meta-observer (пастух): отдельный крон, смотрит на всю петлюKARASS-134
[~]Planner/decomposer: цель → правильные тикетыKARASS-135
epic KARASS-139 · Организм — кроны: наблюдаемость, здоровье, самонаправление
[x]Дашборд организма: остались здоровье, фронтир способностей и распределение раундовKARASS-140
[x]Каждый крон бьёт лимбKARASS-141
[~]Переделать TG-дайджестKARASS-142
[~]Провижнер: systemd-таймеры + дрейфKARASS-143
[~][KEYSTONE] Gap-engine / decider кронKARASS-144
[~]Notion-документация Karass — top notchKARASS-145
[~]Сироты видимы организму: эпик = «есть дети», а не «нет родителя»KARASS-151
[~]Verify: лог-чек якоря меряет регрессию, а не наличие ERROR-строкKARASS-152
[~]Fix-session обслуживает и owner-gate PR: починка ревью ≠ мёржKARASS-153
[~]CodeRabbit — единственный ревьюер контура; Codex выведенKARASS-154
[x]Fix-session синкает ветку с main: конфликт = первый шаг починкиKARASS-155
[~]Fix-cap меряет сходимость находок, а не число раундовKARASS-156
[~]Karass выбирает себе ревьюера сам: ресерч, решение, сообщение владельцуKARASS-161
[~]Ревью по готовности: гейт живёт в окне ревьюера, а не считает молчание отказомKARASS-175
[~]Приёмка: блок доказывает, что сделал то, что просил тикетKARASS-180
[x]Ошибочно поданный гейт отзывается механизмом, а не человеком с доступом к базеKARASS-181
[x]Karass открывается внешнему прохожему: CheckMyApp ходит по karass.dev как пользовательKARASS-182
[~]Кран не берёт блок, чьё внешнее условие не выполненоKARASS-188
[~]Karass сам решает, как развязать собственную пропускную способностьKARASS-190
[~]Пароль песочной учётки выдаётся через Secret Manager, а не строкой в логахKARASS-191
[ ]Страница готовности написана для машины, а не для человекаKARASS-199
[~]Молчащий ревьюер должен кричать: конвейер, который строит, но не мёржитKARASS-200
[~]Karass выводит собственную стейт-машину из своего журналаKARASS-201
[~]Найти оставшиеся тупики и превратить их в поводыKARASS-203
epic KARASS-159 · Хронист: страница дня на karass.dev + суточный крон
[~]Chronicler: day_page table + /api/internal/chronicler/day routeKARASS-169
[~]Chronicler MCP: day_events + publish_day toolsKARASS-170
[x]crane/chronicler.mjs runnerKARASS-171
[~]/app/den page — server-rendered day viewKARASS-172
[~]Chronicler systemd timer + organism_liveness limbKARASS-173
[~]Ежедневное сообщение владельцу: четыре вещи, которые он хочет знатьKARASS-174
epic KARASS-160 · Готовность: три вопроса владельца, ответ каждый день + страница и баннер
[~]Readiness storage: date-keyed verdict + prose + frontier snapshotKARASS-163
[~]Readiness MCP server: capability_report, organism_health, recent_outcomes, publish_readinessKARASS-164
[~]Daily readiness runner (claude -p session)KARASS-165
[~]Schedule the readiness runner + liveness limbKARASS-166
[~]Readiness page (Russian, day-page visual language)KARASS-167
epic KARASS-162 · Инструментальщик: Karass ревизует свои инструменты и строит себе новые
[~]tool_friction: evidence query for tool friction over the myceliumKARASS-176
[~]propose_tool_ticket: file tool-change tickets with a server-side hands-safety gateKARASS-177
[~]Toolsmith runner: weekly systemd timer wiring tool_friction into propose_tool_ticketKARASS-178
epic KARASS-168 · Readiness banner on the day page (KARASS-159)
[~]Fetch latest verdict word and remaining-item count for day page bannerKARASS-197
[x]Render readiness banner on day page with link to readiness pageKARASS-198
epic KARASS-183 · Три дыры, найденные вмешательствами пастуха 26–29.08
[~]Атомарный сброс тикета при возврате в очередьKARASS-184
[x]Провижнер systemd-юнитов доезжает до VM и запускается после самообновления кранаKARASS-185
[x]Вооружение manual-таймеров через проверку креденшла после самообновленияKARASS-186
[x]Порог тревоги живости выводится из каденции опроса, а не назначается числомKARASS-187
epic KARASS-189 · Раунды правок: с 4.3 на PR до двух — самый крупный резерв скорости и цены
[x]Разбор причин раундов правок: числовая раскладка 4.3 раунда/PRKARASS-192
[~]Мицелий помнит находки каждого раунда, а не только закапченныхKARASS-196
epic KARASS-193 · Перед капом: организм проверяет, лежит ли причина вне диффа
[~]Add pre-cap expanded-scope diagnostic round producing a verdictKARASS-228
[~]Surface the explicit question when capping on needs_decisionKARASS-230
[ ]Add regression fixtures for the three historical stall casesKARASS-231
epic KARASS-202 · Решение помнит свой исход: 115 решений за месяц, ни одного с последствием
[x]Связать decision_point «выбор блока decider'ом» с исходом постройки (построен/сошёлся)KARASS-220
[x]Связать decision_point «выбор ревьюера» с исходом (число ревью, упор в лимит)KARASS-221
[x]Связать decision_point «решение о параллельности» с исходом изменения каденцииKARASS-222
[~]Связать decision_point «выбор блока для постройки» с событием `acceptance_checked` как его исходомKARASS-223
[ ]Запрос: к чему приводит класс решений (по связанным исходам)KARASS-224
epic KARASS-216 · [EPIC] Gap-движок должен диффить vision, а не собственную карту способностей
[x][EPIC] V6 нарушен: петля трижды за день заблокировалась на владельце внутри себяKARASS-217
[x][EPIC] V4 не реализован: ограничители — константы, не функция доказанного восстановленияKARASS-218
epic KARASS-219 · Связать decision_point «допуск тикета в очередь» с исходом (мёрж/провал/кап)
[ ]Событие-исход «мёрж» должно ссылаться через refs на decision_point допускаKARASS-253
[ ]Событие-исход «провал» должно ссылаться через refs на decision_point допускаKARASS-254
[ ]Событие-исход «кап» должно ссылаться через refs на decision_point допускаKARASS-255
epic KARASS-229 · Route outside_diff verdicts to a linked root-cause ticket instead of a cap
[~]Create root-cause ticket generator from outside_diff verdictsKARASS-239
epic KARASS-233 · Headless screenshot of changed pages against preview URL
[ ]Wire screenshot capture into CI pipeline as an artifact-producing stepKARASS-251
epic KARASS-240 · Route outside_diff verdicts to the new root-cause ticket instead of capping the PR
[x]Make an outside_diff diagnostic verdict carry structured file / line / descriptionKARASS-275
[x]Internal route: file a root-cause ticket and link it as a dependency of the originating ticketKARASS-276
[x]Route an outside_diff verdict to its root-cause ticket instead of capping the PRKARASS-277
epic KARASS-247 · .crane bookkeeping in the PR diff is the reviewer's most repeated P1 — it burned three blocks
[x]Carry the acceptance manifest without it appearing in the reviewed feature diffKARASS-260
epic KARASS-249 · Map PR diff to changed UI pages/routes
[x]Emit changed page routes from a PR file diff (App Router path convention)KARASS-273
[~]Attribute changed shared component files to the pages that import themKARASS-274
epic KARASS-250 · Headless browser screenshot capture utility
[ ]Script/CLI entry point for screenshot captureKARASS-262
epic KARASS-252 · Прокинуть id decision_point-события допуска до порождённого блока
[~]Expose the queue_admission decision id on the claimed ticketKARASS-271
[x]Carry the admission decision id onto the spawned block so merge/fail/cap can read itKARASS-272
epic KARASS-256 · [gap:v7_self_hosted_from_terraform] V7 — self-hosted: the builder the organism runs on is provisioned from Terraform, not by hand
[ ]Emit builder_provisioned event on successful Terraform applyKARASS-264
[ ]Bring the live builder under Terraform management and retire the hand-provisioned setupKARASS-265
epic KARASS-259 · Stop git-tracking .crane/DISMISSED.md; move dismissal ledger to the mycelium
[x]Record each fix round's dismissals as mycelium events (write path only)KARASS-268
[ ]Stop git-tracking .crane/DISMISSED.md so it never appears in a block's diffKARASS-270
epic KARASS-261 · Core screenshot capture function (Playwright)
[~]Add Playwright as a dependency without breaking the production image buildKARASS-282
[x]Screenshot capture module: base URL + route paths + output dir → one deterministic file per routeKARASS-283
epic KARASS-263 · Author Terraform module for builder droplet infrastructure
[~]Gate infra/builder on `terraform fmt -check` + `terraform validate` in CIKARASS-280
[x]Declare the builder's network surface explicitly in infra/builderKARASS-281
epic KARASS-269 · Backfill the 265 existing DISMISSED.md entries into the mycelium as finding_dismissed events
[x]Backfill generator: resolve every .crane/DISMISSED.md entry to the commit that introduced itKARASS-322
epic KARASS-292 · [gap:learn] outcomes bias future choices (decision → outcome → policy)
[~]Score the claim: one typed `decision_outcome` per `ticket_selection` decision, linked by refsKARASS-317
[~]Score the foreman's `queue_admission` the same way, chained off the claim's own outcomeKARASS-318
[ ]Derive a weak policy at `ticket_selection` from repeated negative outcomes — and let a clean window clear itKARASS-319
[ ]The claim reads that policy and records that it did — bias inside the ordering, never a vetoKARASS-320
[ ]A check that can fail: drive decision → outcome → policy → biased order end to endKARASS-321
epic KARASS-314 · Вот игра: https://thefounder.biz/play/ — выиграй её
[~]Drive the builder's system chromium from a script (scripts/game/browser.mjs)KARASS-324
[~]Observe thefounder.biz/play and commit what the game actually isKARASS-325
[~]Define the game's terminal state as a mechanical predicate (scripts/game/win.mjs)KARASS-326
[~]Snapshot and restore the playthrough so it survives the session boundaryKARASS-327
[ ]The play loop: observe → choose → act → checkpoint, until won or out of budgetKARASS-329
[ ]Play thefounder.biz to its terminal state and commit the evidenceKARASS-330
epic KARASS-323 · Generated migration: insert the historical DISMISSED.md ledger into the event table as finding_dismissed rows
[~]Generate and commit migrations/037_backfill_dismissed_ledger.sql (finding_dismissed backfill, pinned sha)KARASS-358
epic KARASS-328 · Closed action registry for the game (scripts/game/actions.mjs)
[~]Observe The Founder past the main menu and write down the in-game action surfaceKARASS-337
[~]scripts/game/actions.mjs: frozen ACTIONS registry and perform(page, name, target)KARASS-338
[ ]node scripts/game/actions.mjs --self-test drives three distinct actions against the live gameKARASS-341
epic KARASS-340 · Bounded drag primitive for the canvas surfaces, with game-named targets
[~]Recon: does the Market minigame need a drag, and what can its pieces/cells be named?KARASS-349
[~]Register the market drag action with game-named targets, or record why notKARASS-350
epic KARASS-347 · [root-cause] src/app/api/internal/crane/github-token/route.ts:20
[x]Add contents:read to READ_TOKEN_PERMISSIONS so pr_review_status can resolve commit oidsKARASS-359
epic KARASS-351 · [EPIC] Эволюция Karass: стена → одно изменение себя → скор → отбор (DGM, поколение 0)
[x]Эволюция 0: гейт с двумя внешними ревьюерами — молчащий обходится, возражение любого блокируетKARASS-352
[x]Эволюция 1: датчик стен — общее определение стены, журнал wall_opened / wall_closedKARASS-353
[x]Эволюция 2: мутация — стена → одна сессия → один тикет-изменение себяKARASS-354
[x]Эволюция 3: скор версии — исход каждой мутации меряет датчик, архив с родословнойKARASS-355
[x]Эволюция 4: отбор — плохая мутация откатывается, судья неприкосновененKARASS-356
epic KARASS-360 · listLegalActions(observation) with a never-empty deterministic fallback in scripts/game/actions.mjs
[ ]Export listLegalActions(observation) from scripts/game/actions.mjs with a never-empty fallbackKARASS-364
[ ]Browser-free CLI check for listLegalActions over every recon observation fixtureKARASS-365
epic unsorted · unsorted
[~]Убрать owner-approval из контура: гейты = механизмы, не человекKARASS-146
[~]Изоляция билд-сессий: отдельный uid + расщепление гейтвей-секретаKARASS-147
[ ][ARCH] Builder-VM целиком из Terraform — прообраз клиентского деплояKARASS-148
[~]Потерянные блоки возвращаются сами: ретрай после фикса вместо ручного релейблаKARASS-149
[x]Foreman различает контентные тикеты: Notion-работа не идёт в билд-контурKARASS-150
[ ]«Уже сделано» — не провал: сессия без коммитов не должна кормить кулдаун, когда утверждение уже истинноKARASS-235
[ ]Тест V6 должен считать различные ожидания, а не события: метрику нельзя двигать правкой логированияKARASS-237
[ ]CodeRabbit already reviews every crane PR and the merge gate does not count it — one reviewer is the loop's remaining single point of failureKARASS-248
[ ]Build workspaces cannot read the repo's history: --depth 50 + scrubbed credential blocks any block that needs git historyKARASS-331
[ ]Fix-round workspaces leave a GitHub token in .git/config after the round endsKARASS-332
[x]A session that times out after writing `status: done` is thrown away — push what it committed instead of discarding itKARASS-334
[x][mutation] Make tg_send a demand-driven limb: its health is the last send's outcome, not elapsed silenceKARASS-361
[ ][mutation] A seed escalation derived from ticket text notifies but never blocks; only a declared or in-session-discovered seed keepKARASS-367
[ ][mutation] File voice/rollback tickets into the Karass backlog project so the foreman can see themKARASS-369
[ ][root-cause] crane/merge-gate.mjs:868KARASS-370