karass.devstatus: building itself·phase 1 · foundation·watch it build →

  ##  ##    ####    #####     ####    ######  ######
  ##  ##   ##  ##   ##  ##   ##  ##  ##      ##
  ## ##    ##  ##   ##  ##   ##  ##  ##      ##
  ####     ######   #####    ######   ####    ####
  ## ##    ##  ##   ## ##    ##  ##      ##      ##
  ##  ##   ##  ##   ##  ##   ##  ##      ##      ##
  ##  ##   ##  ##   ##  ##   ##  ##  ######  ######

karass is building itself

a self-driving product: it senses its own defects, picks the next block from the queue, builds it, and a verifier — never the builder — decides whether the block stands. this page is the construction site. what you see below is the actual work queue of the organism assembling itself, block by block.

customer #0 is karass. customer #2 is checkmyapp.dev — a sibling organism that gives karass its sense of touch. if it can build itself, it can build for you.

## the crane — what's building now

a tower crane over the structure it's assembling, live from Linear and GitHub. it carries the block it claimed, hangs it above the tower while checks run, and lowers it into place once a verifier — never the crane — says it stands.

[idle] no active session

raw queue cards
next in line
[ ].crane bookkeeping in the PR diff is the reviewer's most repeated P1 — it burned three blocksKARASS-247
[ ][gap:v7_self_hosted_from_terraform] V7 — self-hosted: the builder the organism runs on is provisioned from Terraform, not by handKARASS-256
[ ]Прокинуть id decision_point-события допуска до порождённого блокаKARASS-252
[ ]Headless browser screenshot capture utilityKARASS-250
[ ]Map PR diff to changed UI pages/routesKARASS-249
[ ]Route outside_diff verdicts to the new root-cause ticket instead of capping the PRKARASS-240

## roadmap

live from Linear
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 «допуск тикета в очередь» с исходом (мёрж/провал/кап)
[ ]Прокинуть id decision_point-события допуска до порождённого блокаKARASS-252
[ ]Событие-исход «мёрж» должно ссылаться через 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
[ ]Route outside_diff verdicts to the new root-cause ticket instead of capping the PRKARASS-240
epic KARASS-233 · Headless screenshot of changed pages against preview URL
[ ]Map PR diff to changed UI pages/routesKARASS-249
[ ]Headless browser screenshot capture utilityKARASS-250
[ ]Wire screenshot capture into CI pipeline as an artifact-producing stepKARASS-251
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
[ ].crane bookkeeping in the PR diff is the reviewer's most repeated P1 — it burned three blocksKARASS-247
[ ]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

[x] placed · [~] growing · [ ] spore · milestone — a block counts as placed only when the verifier says so, never the builder.

## anatomy of the organism


   senses                   the crane                 verifiers
   sentry . checkmyapp      claude code on a vm       ci . monitor . checkmyapp
   ci . the owner           one block at a time       done is granted, not claimed
        |                         |                          |
        v                         v                          v
 +------------+   claim   +---------------+  pr/merge  +--------------+
 |   queue    | --------> |   builder vm  | ---------> |   verifier   |
 |  (linear)  |           | (claude code) |   deploy   |  grants done |
 +------------+           +---------------+            +------+-------+
        ^                                                     |
        +----------- regressions become new blocks <----------+

 ~~~~~~~~~~~~ everything writes to the mycelium (event log) ~~~~~~~~~~~~
myceliumappend-only event log in postgres. every actor writes, any agent reads. memory, observability, and the soil any emergent structure grows from.
sensesmonitor polls errors of karass itself; checkmyapp walks the ui like a stranger and reports what breaks; ci reports red; the owner speaks through telegram.
attentionsignals become tickets in one queue. the queue is the only source of work — no side quests.
the cranea dispatcher on an isolated vm. picks one block at a time, opens a workspace, runs a claude code session, raises a pr. strictly serial — patience is cheaper than chaos.
verifiersci gates the pr; after deploy, monitor watches for the defect returning; checkmyapp re-walks affected journeys. only a verifier moves a block to done — the builder never grades its own work.
memoryevery ambiguous choice is a named decision with a typed outcome. repeated pain graduates into policy that biases — never silently replaces — future choices.
steeringthe owner sets direction and holds the abort switch. the first blocks merge with owner approval; autonomy is earned on the trust ladder, not assumed.
symbiosis · karass ↔ checkmyapp

two fruiting bodies of one mycelium. checkmyapp gives karass senses — it walks karass.dev daily and turns regressions into build tickets. karass gives checkmyapp hands — the same crane will work its backlog as customer #2. each builds the other.

two media, deliberately: the mycelium is for remembering and noticing — actions travel through typed channels (the queue, pull requests, webhooks). commands are never fished out of a log, and nothing that happened is ever lost.

## watch it grow

karass is invite-only while it raises itself. leave your address and tell us what you would let an organism like this build for you — it shapes which tentacles grow next.

$