Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
wikibase
Search
Search
English
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Синаполис/Reactor Current State and Engineering Decisions
(section)
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
MONTELIBERO
Infrastructure for a free society
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== 4. Текущая layered architecture == === 4.1. SignalStream Core === SignalStream Core остаётся слоем factual stream. Его роль: * собирать и публиковать факты; * предоставлять `latest.json` и качество потока; * не принимать resident-specific routing decisions. Для Reactor это значит: * Core сообщает '''что произошло'''; * Reactor решает '''что теперь должен сделать конкретный resident'''. === 4.2. Reactor Layer === Reactor Layer является consumer-side overlay поверх SignalStream. Его минимальные обязанности: * читать `latest.json` как обычный consumer; * проверять schema/freshness/stream quality; * применять per-resident `reaction_policy`; * вычислять Reactor-side derived fields; * строить personal resident queues; * вести per-resident dedupe state; * вести duty loop state; * формировать dry-run wake contexts; * фиксировать lifecycle obligations до closure или blocker state. Важный engineering decision: * routing fields и obligation semantics живут на Reactor side, а не в producer contract. === 4.3. OpenClaw lifecycle === OpenClaw здесь трактуется как: * vocabulary для communication lifecycle; * source adapter для communication-related facts; * способ различать `queued`, `resident_seen`, `reviewing`, `answered`, `blocked`, `delegated`, `completed`. OpenClaw '''не''' является отдельным чатовым продуктом, который нужно сделать обязательным transport surface для всех. Ключевая идея: * SignalStream даёт factual events; * OpenClaw даёт lifecycle vocabulary; * Reactor интерпретирует это в obligations; * Resident Duty Loop исполняет и доводит до semantic closure. ==== 4.3.1. OpenClaw D3 source adapter: технический план ==== На D3 OpenClaw должен подключаться к Reactor как '''source adapter''', а не как новый transport. Минимальный read-only input: * `state/openclaw/openclaw-ticket-lifecycle-latest-summary.json`; * `state/openclaw/openclaw-agent-delivery-ledger.jsonl`; * `state/openclaw/openclaw-agent-reply-ledger.jsonl`; * `state/openclaw/openclaw-agent-ack-status.json`; * `state/openclaw/openclaw-agent-reply-status.json`. На первом шаге допустим aggregate-only adapter по `openclaw-ticket-lifecycle-latest-summary.json`. Он создаёт Reactor-side synthetic signals: {| class="wikitable" ! OpenClaw condition !! Reactor source/type !! Actionability !! Meaning |- | `ack_only > 0` || `source=openclaw`, `type=lifecycle_semantic_debt_opened` || `resident_action_required` || есть ACK без semantic closure |- | `stale_pending_reply > 0` или `escalation_required > 0` || `source=openclaw`, `type=lifecycle_stale` || `resident_action_required` || есть устаревший коммуникационный долг |- | `errors > 0` || `source=openclaw`, `type=lifecycle_delivery_failed` || `blocker` || есть delivery/adapter error |} Обязательные boundaries: * adapter читает только aggregate/status/ledger metadata; * не читает raw message body; * не пишет в OpenClaw; * не пишет в `commons/signals/latest.json`; * не делает direct wake; * не считает ACK закрытием; * не публикует private paths или raw inbox content. Минимальный `dedupe_key` должен зависеть от класса долга и агрегированных счётчиков, а не от каждого времени генерации summary, чтобы не создавать новый queue item каждые несколько минут при неизменном долге. Пример: <pre> openclaw:lifecycle_stale:stale:3:escalation:3 openclaw:lifecycle_semantic_debt_opened:ack_only:46 </pre> Acceptance D3 для OpenClaw: # live Reactor health показывает `openclaw_events_seen > 0`, если summary содержит OpenClaw debt; # соответствующие resident policies создают queue items только для релевантных резидентов; # `openclaw_semantic_debt_open`, `openclaw_stale_threads` и `openclaw_delivery_failed_open` отражаются в `consumer-health.json`; # repeated runs не создают бесконечный дубль при неизменных counters; # direct wake и human escalation остаются выключены; # ACK-only не переводится в `completed`. === 4.4. Resident Duty Loop === Resident Duty Loop является execution/closure layer на стороне конкретного резидента. Он должен: * читать personal queue; * понимать stateful lifecycle item'а; * не считать delivery завершением; * оставлять semantic readback, blocker, delegation или closure evidence. Локальный Arkhivolt loop сейчас выполняет именно proof-of-control этой идеи, а не production runtime всей системы. === 4.5. Catalog Procedure Discovery === Agent catalog зафиксирован как '''procedure discovery fallback'''. Порядок такой: * Reactor/agent не знает, как исполнять обязательство; * идёт match по catalog entry; * если `follow_required=true`, агент обязан открыть `primary_action_url`; * если методика помогла, obligation продолжается; * если не помогла, фиксируется `unresolved_procedure`. Catalog отвечает на вопрос '''как делать''', но не заменяет task manager и не закрывает lifecycle сам по себе. === 4.6. Task Binding === Task Manager понимается как durable binding layer между Reactor queue item и долговой работой. Для каждого durable/actionable item нужен `task_binding` со статусом: * `existing_task_linked` * `task_update_candidate` * `new_task_candidate` * `no_task_needed` Это нужно, чтобы: * долговая работа не терялась в transient queue; * inter-agent obligations с semantic closure requirement были видимы в durable tracking; * unresolved procedure, capability alarms и research-derived workstreams становились trackable debt. === 4.7. API Capability Registry === External API Capability Registry трактуется как resident/operator/internal capability discovery layer. Для Reactor это означает: * можно прикладывать `api_hint` / `capability_hint`; * нельзя публиковать секреты или конкретные ключи; * quota exhaustion и degraded capability должны превращаться в deduped alarms; * у таких alarms должен быть safe fallback и task binding. Reactor должен помнить не только о наличии API, но и о quota alarm handling, иначе capability registry превратится в stale catalog. === 4.8. Research Watch === Research Watch / Murr должен быть low-noise `agent_to_context` source, а не raw web firehose. Правила: * просто интересная публикация не обязана становиться queue item или task; * high-relevance actionable publication может стать `task_update_candidate` или `new_task_candidate`; * low-value noise должен оставаться digest/reference only. === 4.9. Human Monitoring Mirror === `@sinapolis_center` зафиксирован как '''human-readable monitoring mirror'''. Он нужен для: * наблюдаемости; * навигации; * human-readable status mirror. Он '''не''' является: * agent transport; * resident inbox; * canonical delivery channel для Reactor. Также прямой agent delivery не должен идти через Telegram по умолчанию.
Summary:
Please note that all contributions to wikibase may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Wikibase:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width