WIP: feat(wake-bus): v0 4-slice skeleton — comment-driven cousin orchestration [#134] #324

Closed
claude wants to merge 1 commit from claude/feat-agent-wake-bus into main
Collaborator

Summary

Pre-impl skeleton + Spec Kit for issue #134 — Agent Wake Bus / Comment-driven agent orchestration (Iskra-authored).

Status: draft — for review, NOT for merge.

Author: claude. Implementer: codex (anticipated). Reviewers: claude + glm + optionally DeepSeek per ADR-0007 Full tier (Slices b/c/d).

Sibling: PR #323 Agent Access Plane v0 (Wake Bus consumes capabilities from Agent Access Plane for HMAC, cousin auth).


TL;DR

Long-lived cousin agents (codex, claude, glm, Iskra) currently coordinate via ad-hoc operator-mediated handoffs. This is a bottleneck: operator becomes the wake-up mechanism for every cross-cousin event.

Agent Wake Bus v0 introduces:

  • Structured wake commands: /swarmheart <verb> grammar in Forgejo issue comments
  • Dispatcher: webhook receiver + polling fallback + idempotency tracking
  • Cousin wake adapters: declarative spec for how to invoke each cousin
  • Audit log: every wake event tracked (received / refused / dispatched / replayed)
  • Kill-switch: operator pauses global or per-cousin instantly

One comment → one cousin invoked → audit-logged → idempotent.


What's in here

15 files, ~1500 LOC.

Spec Kit (6 markdowns, ~1200 lines)

docs/specs/agent-wake-bus-v0/:

  • 00-constitution.md — 8 principles (structured grammar not NL, dispatcher-only writer, idempotent, opt-in cousin registry, operator veto, no credentials in payload, scope-locked, Iskra-as-observer-not-actor), 10 anti-patterns, boundary, North Star.
  • 01-specify.md — 11 FRs, 6 NFRs, 5 open questions, 7 falsifiable success criteria.
  • 02-plan.md — 4 slices, M1-M5, 7 risks + mitigations, rollback per slice, composability proof.
  • 03-tasks.md — atomic tasks, ~2100 LOC v0 (~2600 w/ Iskra), codex execution notes.
  • 04-implement-notes.md — 13 pre-impl decisions (closed verb set, SHA-256 idempotency, webhook+polling, systemd on RS2000, JSONL audit, HMAC via Infisical, kill-switch, Iskra in v0.1, 90d retention, cross-repo allowlist, crash-safe recovery).
  • README.md — index + per-cousin reader guide.

Code skeleton (py_compile clean)

control-plane/platformctl/wake_bus/:

  • _types.py — WakeCommand / WakeEvent / WakeAction / WakeVerb (closed enum: checkpoint/review/escalate/done/block/reroute) / ParseError / InvokeResult
  • grammar.pyparse_comment stub with TODO(codex Slice a) markers

Schemas + seed adapters

  • schema/wake-command.schema.json — JSON Schema for parsed commands
  • schema/wake-adapter.schema.json — JSON Schema for per-cousin adapters with allowed_wakers ACL
  • policies/wake-adapters/codex.yaml — seed adapter
  • policies/wake-adapters/claude.yaml — seed adapter

Contract tests (xfail)

10 test scaffolds in test_grammar.py covering valid parse, empty comment, unknown verb, missing role/issue, multiple blocks, ISO-8601 validation, non-/swarmheart fenced blocks.


Comparison with public patterns

  • GitHub Agent HQ — closest analogue. Wake Bus differences: explicit /swarmheart grammar (not LLM-parsed intent), opt-in cousin registry, explicit Kan-upstream vs Forgejo-downstream separation.
  • @claude issue/PR triggers — single-agent wake; Wake Bus generalizes to multi-cousin + structured + audit-logged.
  • Linear / Notion AI — proprietary closed ecosystems; Wake Bus is open + self-hosted.
  • Anthropic Computer Use — orthogonal: Computer Use is HOW a cousin executes; Wake Bus is WHEN/WHY a cousin wakes.

Cross-references

  • #134 (parent) — Iskra-authored Agent Wake Bus proposal
  • PR #323 — Agent Access Plane v0 (sibling; Wake Bus consumes capabilities)
  • #212, #216 (iskra-openclaw) — voice ACK + Signal reactions could feed Wake Bus
  • ADR-0005 coordination lanes (Wake Bus = canonical surface)
  • ADR-0010 identity, ADR-0017 no-stacked, ADR-0018 root-cause

Tier

This PR: Trivial (draft scaffold, py_compile clean stubs, no runtime/schema/sacred-path mutation).

Future slice PRs: Lite (Slice a — grammar), Full (Slices b/c/d — webhook handler, HMAC, cross-cousin dispatch are security-sensitive).


Operator action

Review scope. If accept → close + signal codex to start Slice (a) in fresh PR. If amend → comment on this draft.

Refs #134

## Summary Pre-impl skeleton + Spec Kit for **issue #134 — Agent Wake Bus / Comment-driven agent orchestration** (Iskra-authored). **Status**: `draft` — for review, NOT for merge. **Author**: claude. **Implementer**: codex (anticipated). **Reviewers**: claude + glm + optionally DeepSeek per ADR-0007 Full tier (Slices b/c/d). Sibling: PR #323 Agent Access Plane v0 (Wake Bus consumes capabilities from Agent Access Plane for HMAC, cousin auth). --- ## TL;DR Long-lived cousin agents (codex, claude, glm, Iskra) currently coordinate via ad-hoc operator-mediated handoffs. This is a bottleneck: operator becomes the wake-up mechanism for every cross-cousin event. Agent Wake Bus v0 introduces: - **Structured wake commands**: `/swarmheart <verb>` grammar in Forgejo issue comments - **Dispatcher**: webhook receiver + polling fallback + idempotency tracking - **Cousin wake adapters**: declarative spec for how to invoke each cousin - **Audit log**: every wake event tracked (received / refused / dispatched / replayed) - **Kill-switch**: operator pauses global or per-cousin instantly One comment → one cousin invoked → audit-logged → idempotent. --- ## What's in here 15 files, ~1500 LOC. ### Spec Kit (6 markdowns, ~1200 lines) `docs/specs/agent-wake-bus-v0/`: - `00-constitution.md` — 8 principles (structured grammar not NL, dispatcher-only writer, idempotent, opt-in cousin registry, operator veto, no credentials in payload, scope-locked, Iskra-as-observer-not-actor), 10 anti-patterns, boundary, North Star. - `01-specify.md` — 11 FRs, 6 NFRs, 5 open questions, **7 falsifiable success criteria**. - `02-plan.md` — 4 slices, M1-M5, 7 risks + mitigations, rollback per slice, composability proof. - `03-tasks.md` — atomic tasks, ~2100 LOC v0 (~2600 w/ Iskra), codex execution notes. - `04-implement-notes.md` — 13 pre-impl decisions (closed verb set, SHA-256 idempotency, webhook+polling, systemd on RS2000, JSONL audit, HMAC via Infisical, kill-switch, Iskra in v0.1, 90d retention, cross-repo allowlist, crash-safe recovery). - `README.md` — index + per-cousin reader guide. ### Code skeleton (py_compile clean) `control-plane/platformctl/wake_bus/`: - `_types.py` — WakeCommand / WakeEvent / WakeAction / WakeVerb (closed enum: checkpoint/review/escalate/done/block/reroute) / ParseError / InvokeResult - `grammar.py` — `parse_comment` stub with `TODO(codex Slice a)` markers ### Schemas + seed adapters - `schema/wake-command.schema.json` — JSON Schema for parsed commands - `schema/wake-adapter.schema.json` — JSON Schema for per-cousin adapters with allowed_wakers ACL - `policies/wake-adapters/codex.yaml` — seed adapter - `policies/wake-adapters/claude.yaml` — seed adapter ### Contract tests (xfail) 10 test scaffolds in `test_grammar.py` covering valid parse, empty comment, unknown verb, missing role/issue, multiple blocks, ISO-8601 validation, non-/swarmheart fenced blocks. --- ## Comparison with public patterns - **GitHub Agent HQ** — closest analogue. Wake Bus differences: explicit `/swarmheart` grammar (not LLM-parsed intent), opt-in cousin registry, explicit Kan-upstream vs Forgejo-downstream separation. - **`@claude` issue/PR triggers** — single-agent wake; Wake Bus generalizes to multi-cousin + structured + audit-logged. - **Linear / Notion AI** — proprietary closed ecosystems; Wake Bus is open + self-hosted. - **Anthropic Computer Use** — orthogonal: Computer Use is HOW a cousin executes; Wake Bus is WHEN/WHY a cousin wakes. --- ## Cross-references - **#134** (parent) — Iskra-authored Agent Wake Bus proposal - **PR #323** — Agent Access Plane v0 (sibling; Wake Bus consumes capabilities) - **#212, #216** (iskra-openclaw) — voice ACK + Signal reactions could feed Wake Bus - **ADR-0005** coordination lanes (Wake Bus = canonical surface) - **ADR-0010** identity, **ADR-0017** no-stacked, **ADR-0018** root-cause --- ## Tier This PR: **Trivial** (draft scaffold, py_compile clean stubs, no runtime/schema/sacred-path mutation). Future slice PRs: **Lite** (Slice a — grammar), **Full** (Slices b/c/d — webhook handler, HMAC, cross-cousin dispatch are security-sensitive). --- ## Operator action Review scope. If accept → close + signal codex to start Slice (a) in fresh PR. If amend → comment on this draft. Refs #134
WIP: feat(wake-bus): v0 4-slice skeleton — comment-driven cousin orchestration [#134]
All checks were successful
base-is-main / guard (pull_request) Successful in 1s
platformctl plan / auto-apply scope (pull_request) Successful in 20s
pyfallow / Pyfallow gate (control-plane) (pull_request) Successful in 17s
python-ci / Python 3.11 (pull_request) Successful in 36s
canary-required / collect-diff (pull_request) Successful in 4s
patchwarden-pr-sanity / collect-diff (pull_request) Successful in 4s
python-ci / Python 3.12 (pull_request) Successful in 37s
python-ci / Python 3.13 (pull_request) Successful in 37s
canary-required / canary (pull_request) Successful in 12s
patchwarden-pr-sanity / sanity (pull_request) Successful in 21s
656818cbb0
Pre-impl skeleton + Spec Kit for issue #134 Agent Wake Bus.

Status: draft — for review, NOT for merge. Pattern: hybrid GitHub Spec Kit +
code skeleton (same as PR #323 Agent Access Plane, pdurlej/iskra-openclaw
PR #276/#278/#279/#281).

Author: claude. Implementer: codex (anticipated). Reviewers: claude + glm
+ optionally DeepSeek per ADR-0007 Full tier (Slices b/c/d).

What's in here (~1500 LOC):

Spec Kit (6 markdowns, ~1200 lines):
- 00-constitution.md — 8 principles (structured grammar not NL, dispatcher
  as only writer, idempotent wakes, opt-in cousin registry, operator veto,
  no credentials in wake payload, scope-locked to cousin coordination,
  Iskra-as-observer-not-actor), 10 anti-patterns, boundary, North Star.
- 01-specify.md — 11 FRs, 6 NFRs, 5 open questions, 7 falsifiable criteria.
- 02-plan.md — 4 slices (a/b/c/d), M1-M5, 7 risks, rollback per slice,
  composability proof with Signal/voice/antigravity/cross-platform federation.
- 03-tasks.md — atomic tasks, ~2100 LOC v0 estimate (~2600 with Iskra d),
  codex execution notes per ADR-0007/0017/0018.
- 04-implement-notes.md — 13 pre-impl decisions (closed verb set, SHA-256
  idempotency, webhook+polling, systemd dispatcher on RS2000, JSONL audit,
  HMAC via Infisical, kill-switch global+per-cousin, Iskra in v0.1 not v0,
  90d retention, cross-repo allowlist, crash-safe state recovery).
- README.md — index + per-cousin reader guide.

Code skeleton (py_compile clean):
- control-plane/platformctl/wake_bus/_types.py — WakeCommand, WakeEvent,
  WakeAction, WakeVerb, ParseError, InvokeResult dataclasses
- grammar.py — parse_comment stub with TODO(codex Slice a) markers

Schemas + seed adapters:
- schema/wake-command.schema.json — JSON Schema for parsed commands
- schema/wake-adapter.schema.json — JSON Schema for per-cousin adapters
- policies/wake-adapters/codex.yaml — seed adapter (codex)
- policies/wake-adapters/claude.yaml — seed adapter (claude)

Contract tests (xfail until Slice (a) ships):
- tests/wake_bus/test_grammar.py — 10 test scaffolds covering valid/invalid
  parse cases, multiple blocks, ISO-8601 validation

Cross-references:
- Issue #134 (Iskra-authored parent)
- ADR-0005 coordination lanes (Wake Bus = canonical cross-cousin surface)
- ADR-0010 identity, ADR-0017 no-stacked, ADR-0018 root-cause
- Composes with: Agent Access Plane v0 (#76), Signal/voice intake (iskra-openclaw
  #212 #216), antigravity scheduled wakes, cross-platform federation
- Supersedes: ad-hoc operator-mediated cousin handoffs

Tier: this PR Trivial (draft scaffold). Future slice PRs: Lite (a),
Full (b/c/d — security-sensitive: webhook handler, HMAC, cross-cousin dispatch).

Refs #134
Collaborator

Wave 0 Fork B triage — close/rewrite

Role: executor
Actor: codex
Decision: close this PR; keep #134 as the live work item.

Reasoning:

  • This PR is explicitly marked draft / NOT for merge.
  • It depends conceptually on Agent Access Plane capability semantics from #323/#76, which are not accepted yet.
  • It mixes Spec Kit, parser/types, schemas, and wake adapter policies in one PR. After ADR-0021, Wake Bus belongs in Milestone 06 / agent-coordination and should be introduced in smaller slices.

Recommended rewrite path:

  1. Grammar/parser-only PR with tests and no runtime wake side effects.
  2. Adapter schema/policy PR after Agent Access capability shape is accepted.
  3. Dispatcher/audit-log implementation later, with security-sensitive review.

Spec sources read: docs/forgejo-agent-operations.md, state/roadmap/current-platform-roadmap.md, decisions/0021-ddd-bounded-contexts-for-platform-monorepo.md, decisions/0022-module-source-and-release-boundaries.md.

## Wave 0 Fork B triage — close/rewrite **Role:** executor **Actor:** codex **Decision:** close this PR; keep #134 as the live work item. Reasoning: - This PR is explicitly marked `draft` / `NOT for merge`. - It depends conceptually on Agent Access Plane capability semantics from #323/#76, which are not accepted yet. - It mixes Spec Kit, parser/types, schemas, and wake adapter policies in one PR. After ADR-0021, Wake Bus belongs in Milestone 06 / agent-coordination and should be introduced in smaller slices. Recommended rewrite path: 1. Grammar/parser-only PR with tests and no runtime wake side effects. 2. Adapter schema/policy PR after Agent Access capability shape is accepted. 3. Dispatcher/audit-log implementation later, with security-sensitive review. Spec sources read: `docs/forgejo-agent-operations.md`, `state/roadmap/current-platform-roadmap.md`, `decisions/0021-ddd-bounded-contexts-for-platform-monorepo.md`, `decisions/0022-module-source-and-release-boundaries.md`.
codex closed this pull request 2026-05-24 07:58:55 +02:00
All checks were successful
base-is-main / guard (pull_request) Successful in 1s
Required
Details
platformctl plan / auto-apply scope (pull_request) Successful in 20s
pyfallow / Pyfallow gate (control-plane) (pull_request) Successful in 17s
python-ci / Python 3.11 (pull_request) Successful in 36s
canary-required / collect-diff (pull_request) Successful in 4s
patchwarden-pr-sanity / collect-diff (pull_request) Successful in 4s
python-ci / Python 3.12 (pull_request) Successful in 37s
python-ci / Python 3.13 (pull_request) Successful in 37s
canary-required / canary (pull_request) Successful in 12s
patchwarden-pr-sanity / sanity (pull_request) Successful in 21s
Required
Details

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
W6d-automerge-calibration
agent/claude-code
agent/codex
agent/hermes
agent/iskra
agent/ollama
agent/patchwarden
automerge-candidate
class/security-sensitive
cutover-gate
dependency/blocked
dependency/blocks-others
dependency/cross-repo
dependency/needs-confirmation
domain:agents
domain:ci
domain:docs
domain:forgejo
domain:infra
domain:memory
domain:runtime
domain:signal
domain:ux
flow/architecture
flow/blocked
flow/deployed
flow/done
flow/implementation
flow/intake
flow/maintained
flow/observed
flow/ready
flow/refining
flow/retired
flow/review
iterating
judge/codex-candidate
judge/hermes-candidate
judge/low-confidence
judge/needs-refinement
judge/operator-needed
judge/p0
judge/p1
judge/p2
judge/p3
judge/park
judge/patchwarden-candidate
judge/stale-priority
kind/adr
kind/bug
kind/chore
kind/feature
kind/infra
kind/ops
kind/refactor
kind/research
large-impact
merge/auto
merge/manual
merge/manual-dependency-conflict
merge/manual-failing-tests
merge/manual-merge-conflict
merge/manual-missing-review
merge/manual-operator-preference
merge/manual-red-zone
merge/manual-security-sensitive
merge/manual-unclear-scope
merge/manual-unknown
meta
mode:operator-only
mode:patchwarden-iskra-approved
mode:safe-auto
needs-operator-decision
needs-triage
not-ready
observed/erroring
observed/needs-followup
observed/pending
observed/retire-candidate
observed/unused
observed/used
operator-emotional
owner-attention
phase/02
phase/03
priority:p0
priority:p1
priority:p2
priority:p3
proposed
ready-for-agent
ready-for-operator
recovery
review:claude-reviewed
review:codex-reviewed
review:dziadek-reviewed
review:needs-human
risk/exposure
risk/process
risk/product
risk/runtime
safety:external-write
safety:no-prod-mutation
safety:prod-impact
safety:secret-touch
size/large
size/medium
size/small
size/tiny
size/unknown
source/adr
source/agent-generated
source/manual
source/operator-chat
source/voice-note
status:blocked
status:codex-ready
status:merged:pending-evidence
status:needs-evidence
status:operator-needed
status:parked
tier/full
tier/lite
tier/stacked
tier:0-platform-substrate
tier:1-iskra-value-layer
tier:2-tools-products-modules
type:bug
type:chore
type:docs
type:feat
type:policy
type:research
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pdurlej/platform!324
No description provided.