Перейти к содержанию

ADR 0185: Life thread — delayed / event self-wake (SendToLifeThread)

Статус: Proposed
Дата: 2026-07-25
Обновлено: 2026-07-25 — Time-Aware Cognition; wake landing = Deep-Link (не путать с CodeAnchor)
Tags: #harness #autonomy #scheduler #cockpit #life-thread #time-aware #deep-link #code-anchor #equal-standing #adr #cascade-ide

Резюме

  • Ignition всегда с текстом; автор может быть harness (0184).
  • Wake: timer или event (job.done) → enqueue → новый completion.
  • Time-Aware Cognition: long job → sleep inference (не poll); экономия $/токенов.
  • Evidence landing: harness готовит CDP + pulse + [Family:navigation;…] Anchor (0186). Code-family Anchor — только если цитируем код.
  • CIDE на парке — канон.

Связанные ADR

ADR Роль
0184 Ignition vs mute
0183 Continuity card
0182 Desk prepare / restore
0180 Background jobs
0177 Presence wake
0179 Progress ≠ wake
0080 Deep links (сообщение / surface URI)
0128 CodeAnchor / AttachmentAnchor — только код-locus
0186 Anchor Family:navigation — land wire; не Deep-Link
0166 Token economics
0116 Follow-up

Контекст

Poll long job и dump полного лога в messages — оба tax. Нужно: уснуть → проснуться по триггеру → попасть в готовый locus, не читать роман в чате.

Решение (направление)

Time-Aware Cognition + evidence landing

агент:  start heavy job
агент:  SendToLifeThread(when=job.done)
агент:  конец хода → инференс гаснет
…
harness: job finished
harness: prepare CDP (desk restore?; evidence/report surface ready)
harness: enqueue: "job finished" + Deep-Link (LandingRef)
агент:  открыть deep-link → CDP на отчёте
Понятие ADR Вопрос В life wake
Deep-Link 0080 + этот Куда открыть IDE / evidence / scene / URI Default LandingRef
CodeAnchor 0128 О каком куске кода говорим (member / range; re-resolve; attach) Только если job вернул явный код-locus

Смешение даёт ложный re-resolve, ложные excerpt’ы и путаницу с attach chips. CSX / PlantUML / stop_context / test report → deep_link, не CodeAnchor.

Контракт (черновик)

SendToLifeThread(
  text | structured payload,
  delay_seconds?: number,
  when?: "timer" | "job.done" | "presence.online" | "scm.changed" | …,
  job_id?: string,
  thread_id?: string,
  cancel_token?: string
)

Wake pulse (минимум):

life_wake:
  reason: job.done
  job: { id, status, exit_code }
  summary: "12 passed, 1 failed"
  landing: LandingRef    # default deep_link; code_anchor опционально
  desk: prepared | needs_restore | ok

LandingRef (sketch):

LandingRef =
  | { kind: "deep_link", uri: string }              # intercom://… | cdp://evidence/… | file://…#L
  | { kind: "code_anchor", anchor: AttachmentAnchor }  # только код-locus
  | { kind: "none" }

Триггеры

Trigger Пример
timer seconds:5
job.done digest + Deep-Link landing + prepare
presence.online MCP back
scm.changed later

Не путать

Механика Роль
Poll / noop tools Анти-паттерн
Progress notify Не пробуждение
Wake + full log Отклонено
Wake + prepare + Deep-Link Канон landing
CodeAnchor в wake Опциональный attach, не замена deep-link

Тёплый / холодный

Случай Harness
Тёплый Ignition + pulse + deep-link
Холодный + continuity pack
Desk мёртв Prepare включает 0182

Последствия

  • Job finish pipeline: artifact → evidence surface → deep-link → enqueue.
  • Metrics: wake_chars ↓; time-to-report-locus ↓.
  • Deep-link navigate ≠ CodeAnchor attach/reveal (0128).

Отклонённые альтернативы

  • Poll 0.5с; noop stay-awake; полный log в wake; «проснись» без locus; один тип «якорь» на всё.

Follow-up (после unpark CIDE)

  • [ ] SendToLifeThread + timer|job.done + cancel.
  • [ ] Job finish → prepare CDP + LandingRef (deep_link default; code_anchor opt-in).
  • [ ] Wire test/build/shell → job.done.
  • [ ] Warm/cold pack; caps; operator pause.