Files
timmy-config/wizards/shared_context.yaml
step35-burn-bot 3f24b51a54
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 19s
Smoke Test / smoke (pull_request) Failing after 18s
Validate Config / YAML Lint (pull_request) Failing after 15s
Validate Config / JSON Validate (pull_request) Successful in 18s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 52s
Validate Config / Python Test Suite (pull_request) Has been skipped
Validate Config / Shell Script Lint (pull_request) Failing after 54s
Validate Config / Cron Syntax Check (pull_request) Successful in 12s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 13s
Validate Config / Playbook Schema Validation (pull_request) Successful in 22s
Architecture Lint / Lint Repository (pull_request) Failing after 20s
PR Checklist / pr-checklist (pull_request) Successful in 3m15s
feat(comm): wizard-to-wizard communication protocol v1 — Closes #441
Implement the smallest working channel while Matrix/Conduit remains
undeployed (#166 blocked by host/TLS). The shared_context.yaml file
is the single source of truth for summons and wizard status.

• Add wizards/shared_context.yaml — YAML schema for active_summon +
  wizard_status heartbeat (P0/P1/P2 priorities, state-change-only)
• Add bin/wizard-summon.py — Alexander's CLI to create/broadcast summons.
  Creates Gitea PR, posts structured Telegram broadcast, bumps branch.
• Add docs/wizard-communication.md — protocol spec, operational rules,
  access patterns from Emacs/Telegram, acceptance checklist.
• Wizards/__init__.py — namespace package marker.

Acceptance criteria satisfied:
  ✓ MX server verified dead (port 6167 filtered; .env placeholders present;
    host selection + TLS blocked per docs/infra/matrix/EXECUTION_RUNBOOK.md)
  ✓ Working channel exists (Gitea-backed YAML + Telegram broadcast)
  ✓ Structured message format defined (priorities, state-change-only,
    acknowledgements, timestamped transitions)
  ✓ Alexander can summon — bin/wizard-summon.py creates summon + PR + notice
  ✓ Shared context from desk (Emacs reads file) and phone (Telegram notices)
  ✓ No redundant chatter — only state transitions logged; message_log append-only

Signed-off-by: step35-burn-bot <step35-burn@alexanderwhitestone.com>
2026-04-26 01:33:54 -04:00

67 lines
2.1 KiB
YAML

# Wizard-to-Wizard Shared Context — v1.0
# Issue: timmy-config#441 | Wizard Communication Protocol
#
# This file is the single source of truth for fleet-wide summons and status.
# All wizards read this on each turn; Alexander edits via wizard-summon.py.
# DO NOT manually edit except through the canonical tooling.
version: "1.0"
updated_at: 2026-04-26T00:00:00Z
# ── Active Summon ──
# When Alexander needs all wizards' attention, a summon occupies this slot.
# Wizards must acknowledge by setting their own status to 'acked_summon' and
# optionally adding notes to their acknowledgement payload.
active_summon:
summon_id: null # e.g., SUM-20260426-001
priority: null # P0 (critical) | P1 (high) | P2 (routine)
topic: null # short imperative topic string
summoner: null # Alexander
summoned_at: null # ISO8601
deadline: null # optional ISO8601 or null
status: null # open | acknowledged | completed | cancelled
acknowledgements: # per-wizard ack state (ISO8601 when acked)
timmy: null
allegro: null
bezalel: null
ezra: null
# ── Wizard Heartbeat/Status ──
# Each wizard updates their own entry on a regular cadence (ideally every turn).
# status: idle | busy | acked_summon | error | unreachable
# last_seen: ISO8601 timestamp of last update
# current_task: short description of what the wizard is doing (or null)
# notes: free-text state-change explanation (only on change)
wizard_status:
timmy:
status: idle
last_seen: null
current_task: null
notes: null
allegro:
status: idle
last_seen: null
current_task: null
notes: null
bezalel:
status: idle
last_seen: null
current_task: null
notes: null
ezra:
status: idle
last_seen: null
current_task: null
notes: null
# ── Message Log (append-only history) ──
# The tooling appends significant state-change events here.
# Consumers: Emacs desk view, Telegram digest bots, audit trails.
message_log: []
# Example:
# - timestamp: 2026-04-26T01:45:00Z
# source: timmy
# type: status_update
# priority: P2
# content: "Switched to idle — waiting for summons"