generated from coulomb/repo-seed
Compare commits
9 Commits
61a8289faa
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 4c39b6e0ea | |||
| 74b481931c | |||
| 1aac55e978 | |||
| 01d4314b3f | |||
| 484b6c6a13 | |||
| 7ad6537a36 | |||
| 7ed9515ef1 | |||
| c535452195 | |||
| 03e6ac4594 |
20
.claude/rules/agents.md
Normal file
20
.claude/rules/agents.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
## Kaizen Agents
|
||||||
|
|
||||||
|
Specialized agent personas available on demand via the state-hub MCP.
|
||||||
|
|
||||||
|
**Discover:** `list_kaizen_agents()` — returns all agents with name, description, category
|
||||||
|
**Load:** `get_kaizen_agent("tdd-workflow")` — returns full instructions; read and follow them
|
||||||
|
|
||||||
|
Common agents:
|
||||||
|
|
||||||
|
| Agent | Category | When to use |
|
||||||
|
|-------|----------|-------------|
|
||||||
|
| `tdd-workflow` | testing | Step-by-step TDD8 workflow for any feature |
|
||||||
|
| `code-refactoring` | quality | Code quality analysis and safe refactoring |
|
||||||
|
| `test-maintenance` | testing | Diagnose and fix failing tests |
|
||||||
|
| `requirements-engineering` | process | Prevent interface/mock mismatches upfront |
|
||||||
|
| `keepaTodofile` | process | Maintain TODO.md during work |
|
||||||
|
| `project-management` | process | Track status, determine next steps |
|
||||||
|
| `datamodel-optimization` | quality | Optimize dataclasses and data structures |
|
||||||
|
|
||||||
|
All 17 agents: call `list_kaizen_agents()` for the full list.
|
||||||
8
.claude/rules/architecture.md
Normal file
8
.claude/rules/architecture.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
## Architecture
|
||||||
|
|
||||||
|
<!-- TODO: Describe the key design decisions and component structure.
|
||||||
|
Key modules, data flows, external integrations, state machines, etc. -->
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
`~/state-hub/mcp_server/TOOLS.md` — MCP tool reference
|
||||||
50
.claude/rules/credential-routing.md
Normal file
50
.claude/rules/credential-routing.md
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# Credential and access routing
|
||||||
|
|
||||||
|
**Audience:** Codex, Claude Code, Grok, and custodian agents that call **llm-connect**
|
||||||
|
for inference. Run this check **before** requesting secrets, API keys, SSH access,
|
||||||
|
login tokens, or database passwords — in any repo, not only `ops-warden`.
|
||||||
|
|
||||||
|
ops-warden **issues SSH certificates only** (`warden sign`, `cert_command`). Every
|
||||||
|
other credential need belongs to another subsystem. **Do not** message
|
||||||
|
`ops-warden` on State Hub expecting a secret value; the reply is a pointer, not a key.
|
||||||
|
|
||||||
|
### Lookup (do this first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
warden route find "<describe your need>" --json
|
||||||
|
warden route show <catalog-id> --json
|
||||||
|
```
|
||||||
|
|
||||||
|
Requires the `warden` CLI from `~/ops-warden` (`uv tool install .` or `uv run warden`).
|
||||||
|
|
||||||
|
| Agent runtime | How to orient |
|
||||||
|
| --- | --- |
|
||||||
|
| **Codex / Grok** (shell, HTTP State Hub) | `warden route` commands above; inbox `to_agent=coordination-engine` is for coordination, not secret vending |
|
||||||
|
| **Claude Code** (MCP when available) | `get_domain_summary("custodian")` for workstreams; **still** use `warden route` for credential ownership |
|
||||||
|
| **llm-connect** (inference service) | Never put secret retrieval in prompts; route custody to OpenBao/operator paths surfaced by `warden route` |
|
||||||
|
|
||||||
|
### Quick routing table
|
||||||
|
|
||||||
|
| I need… | Owner | ops-warden executes? |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| SSH cert (`adm`/`agt`/`atm`) | ops-warden | **Yes** — `warden sign` |
|
||||||
|
| API key, DB password, provider token | OpenBao (`railiance-platform`) | No — route only |
|
||||||
|
| Login / OIDC / MFA | key-cape / Keycloak | No — route only |
|
||||||
|
| Authorization decision | flex-auth | No — route only |
|
||||||
|
| activity-core → issue-core emission | activity-core + issue-core | No — `warden route show activity-core-issue-sink` |
|
||||||
|
| SSH tunnel | ops-bridge (+ `cert_command` from warden) | No — route only |
|
||||||
|
|
||||||
|
### Anti-patterns (do not do these)
|
||||||
|
|
||||||
|
- `POST /messages/` to `ops-warden` asking for `ISSUE_CORE_API_KEY`, `OPENROUTER_API_KEY`, etc.
|
||||||
|
- Inventing `warden secret`, `warden login`, `warden bao`, `warden tunnel` — they do not exist
|
||||||
|
- Pasting secrets into Git, State Hub, workplans, logs, or chat
|
||||||
|
|
||||||
|
### Other capabilities (reuse-surface)
|
||||||
|
|
||||||
|
Non-credential capabilities are usually discovered through **reuse-surface** federation
|
||||||
|
(`reuse-surface` registry / `capability.*` indexes). Credential routing is inlined in
|
||||||
|
every repo's agent instructions because it is high-frequency, high-risk, and easy to
|
||||||
|
get wrong.
|
||||||
|
|
||||||
|
**Canon:** `~/ops-warden/wiki/CredentialRouting.md` · catalog `~/ops-warden/registry/routing/catalog.yaml`
|
||||||
38
.claude/rules/first-session.md
Normal file
38
.claude/rules/first-session.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
## First Session Protocol
|
||||||
|
|
||||||
|
Triggered when `get_domain_summary("communication")` shows **no workstreams**.
|
||||||
|
The project is registered but work has not yet been structured.
|
||||||
|
|
||||||
|
**Step 1 — Read, don't write**
|
||||||
|
- `~/the-custodian/canon/projects/communication/project_charter_v0.1.md` — purpose, scope
|
||||||
|
- `~/the-custodian/canon/projects/communication/roadmap_v0.1.md` — planned phases
|
||||||
|
- Scan repo root: README, directory structure, existing code or docs
|
||||||
|
|
||||||
|
**Step 2 — Survey in-progress work**
|
||||||
|
Look for TODOs, open branches, half-finished files. Note done vs. started but incomplete.
|
||||||
|
|
||||||
|
**Step 3 — Propose workstreams to Bernd**
|
||||||
|
Propose 1–3 workstreams — each a coherent strand, weeks to months, anchored to a
|
||||||
|
roadmap phase. **Wait for approval before creating.**
|
||||||
|
|
||||||
|
**Step 4 — Create workplan file first, then DB record (ADR-001)**
|
||||||
|
```
|
||||||
|
workplans/COORDINATION-WP-NNNN-<slug>.md ← write this first
|
||||||
|
```
|
||||||
|
Then register in the hub:
|
||||||
|
```
|
||||||
|
create_workstream(topic_id="36c7421b-c537-4723-bf75-42a3ebc6a1dc", title="...", owner="...", description="...")
|
||||||
|
create_task(workstream_id="<id>", title="...", priority="high|medium|low")
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 5 — Record the setup**
|
||||||
|
```
|
||||||
|
add_progress_event(
|
||||||
|
summary="First session: structured communication into N workstreams, M tasks",
|
||||||
|
event_type="milestone",
|
||||||
|
topic_id="36c7421b-c537-4723-bf75-42a3ebc6a1dc",
|
||||||
|
detail={"workstreams": [...], "tasks_created": M}
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- Delete or archive this file once past first session -->
|
||||||
8
.claude/rules/repo-boundary.md
Normal file
8
.claude/rules/repo-boundary.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
## Repo boundary
|
||||||
|
|
||||||
|
This repo owns **Coordination Engine** only. It does not own:
|
||||||
|
|
||||||
|
<!-- TODO: List what belongs in adjacent repos, e.g.:
|
||||||
|
- SSH key management → railiance-infra/
|
||||||
|
- State hub code → state-hub/
|
||||||
|
-->
|
||||||
5
.claude/rules/repo-identity.md
Normal file
5
.claude/rules/repo-identity.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
**Purpose:** Coordination Engine - (fill in purpose)
|
||||||
|
|
||||||
|
**Domain:** communication
|
||||||
|
**Repo slug:** coordination-engine
|
||||||
|
**Topic ID:** 36c7421b-c537-4723-bf75-42a3ebc6a1dc
|
||||||
85
.claude/rules/session-protocol.md
Normal file
85
.claude/rules/session-protocol.md
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
## Session Protocol
|
||||||
|
|
||||||
|
Dev Hub (State Hub API): http://127.0.0.1:8000
|
||||||
|
MCP server name in `~/.claude.json`: `dev-hub`
|
||||||
|
|
||||||
|
**Step 1 — Orient**
|
||||||
|
|
||||||
|
Read the offline-safe brief first — it works without a live hub connection:
|
||||||
|
```bash
|
||||||
|
cat .custodian-brief.md
|
||||||
|
```
|
||||||
|
Then call the MCP tool for richer cross-domain context when MCP tools are exposed:
|
||||||
|
```
|
||||||
|
get_domain_summary("communication")
|
||||||
|
```
|
||||||
|
If MCP tools are unavailable in the current agent session, use the REST API:
|
||||||
|
```bash
|
||||||
|
curl -s "http://127.0.0.1:8000/state/summary" | python3 -m json.tool
|
||||||
|
```
|
||||||
|
If the hub is offline: `cd ~/state-hub && make api`
|
||||||
|
|
||||||
|
**Step 2 — Check inbox**
|
||||||
|
With MCP tools:
|
||||||
|
```
|
||||||
|
get_messages(to_agent="coordination-engine", unread_only=True)
|
||||||
|
```
|
||||||
|
Mark read with `mark_message_read(message_id)`. Reply or act on coordination
|
||||||
|
requests before proceeding.
|
||||||
|
|
||||||
|
Without MCP tools:
|
||||||
|
```bash
|
||||||
|
curl -s "http://127.0.0.1:8000/messages/?to_agent=coordination-engine&unread_only=true" \
|
||||||
|
| python3 -m json.tool
|
||||||
|
curl -s -X PATCH "http://127.0.0.1:8000/messages/<id>/read" \
|
||||||
|
-H "Content-Type: application/json" -d '{}'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 3 — Scan workplans**
|
||||||
|
```bash
|
||||||
|
ls workplans/
|
||||||
|
```
|
||||||
|
For each file with `status: ready`, `active`, or `blocked`, note pending
|
||||||
|
`wait`/`todo`/`progress` tasks.
|
||||||
|
|
||||||
|
**Step 4 — Present brief**
|
||||||
|
|
||||||
|
1. **Active workstreams** for `communication` — title, task counts, blocking decisions
|
||||||
|
2. **Pending tasks** from `workplans/` + any `[repo:coordination-engine]` hub tasks
|
||||||
|
3. **Goal guidance** — if `goal_guidance` in summary:
|
||||||
|
- `needs_workplan`: surface as top action — *"Repo goal '{title}' has no workplan yet"*
|
||||||
|
- `alignment_warnings`: flag if active work is not aligned with current goal
|
||||||
|
4. **Suggested next action** — highest-priority open item
|
||||||
|
5. **SBOM status** — flag if `last_sbom_at` is unset for this repo
|
||||||
|
|
||||||
|
If no workstreams: follow First Session Protocol (`first-session.md`).
|
||||||
|
|
||||||
|
**During work:** `record_decision()` · `add_progress_event()` · `resolve_decision()`
|
||||||
|
|
||||||
|
> State Hub is a *read model*. Bootstrap tools (`create_workstream`, `create_task`)
|
||||||
|
> are First Session Protocol only. Work structure belongs in repo files (ADR-001).
|
||||||
|
|
||||||
|
**Session close:**
|
||||||
|
With MCP tools:
|
||||||
|
```
|
||||||
|
add_progress_event(summary="...", topic_id="36c7421b-c537-4723-bf75-42a3ebc6a1dc", workstream_id="<uuid>")
|
||||||
|
```
|
||||||
|
Without MCP tools:
|
||||||
|
```bash
|
||||||
|
curl -s -X POST http://127.0.0.1:8000/progress/ \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"topic_id":"36c7421b-c537-4723-bf75-42a3ebc6a1dc","workstream_id":"<uuid>","event_type":"note","summary":"what changed","author":"codex"}'
|
||||||
|
```
|
||||||
|
If workplan files were modified, ensure the local copy is up to date first:
|
||||||
|
```bash
|
||||||
|
git -C <repo_path> pull --ff-only
|
||||||
|
cd ~/state-hub && make fix-consistency REPO=coordination-engine
|
||||||
|
```
|
||||||
|
For repos where implementation runs on a remote machine (e.g. CoulombCore),
|
||||||
|
use the combined target which pulls before fixing:
|
||||||
|
```bash
|
||||||
|
cd ~/state-hub && make fix-consistency-remote REPO=coordination-engine
|
||||||
|
```
|
||||||
|
**C-15** (DB task ahead of file) is normal in multi-machine workflows — writeback
|
||||||
|
will sync the file to match DB. **C-16** (repo behind remote) blocks all writes
|
||||||
|
until you pull — intentional to prevent clobbering remote progress.
|
||||||
20
.claude/rules/stack-and-commands.md
Normal file
20
.claude/rules/stack-and-commands.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
## Stack
|
||||||
|
|
||||||
|
- **Language:** Markdown-first registry and planning repo (no application runtime yet)
|
||||||
|
- **Key deps:** State Hub ADR-001 workplans, `registry/indexes/capabilities.yaml`
|
||||||
|
|
||||||
|
## Dev Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Orient (offline-safe)
|
||||||
|
cat .custodian-brief.md
|
||||||
|
cat INTENT.md
|
||||||
|
cat SCOPE.md
|
||||||
|
ls workplans/
|
||||||
|
|
||||||
|
# After workplan or registry edits — from ~/state-hub
|
||||||
|
make fix-consistency REPO=coordination-engine
|
||||||
|
|
||||||
|
# Sanity-check markdown / registry edits
|
||||||
|
git diff --check
|
||||||
|
```
|
||||||
40
.claude/rules/workplan-convention.md
Normal file
40
.claude/rules/workplan-convention.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
## Workplan Convention (ADR-001)
|
||||||
|
|
||||||
|
File location: `workplans/COORDINATION-WP-NNNN-<slug>.md`
|
||||||
|
ID prefix: `COORDINATION-WP-`
|
||||||
|
|
||||||
|
Work items originate as files in this repo **before** being registered in the hub.
|
||||||
|
|
||||||
|
Canonical workplan/workstream frontmatter statuses are:
|
||||||
|
`proposed`, `ready`, `active`, `blocked`, `backlog`, `finished`, `archived`.
|
||||||
|
Use `proposed` for a newly drafted plan, `ready` after review against current
|
||||||
|
repo state, and `finished` when implementation is complete. `stalled` and
|
||||||
|
`needs_review` are derived health labels, not stored statuses.
|
||||||
|
|
||||||
|
Closed workplans may be moved to `workplans/archived/` with a completion-date
|
||||||
|
prefix: `YYMMDD-COORDINATION-WP-NNNN-<slug>.md`. The frontmatter id remains
|
||||||
|
unchanged; the prefix is only for quick visual reference.
|
||||||
|
|
||||||
|
Small opportunistic tasks discovered during another session use **Ad Hoc Tasks**:
|
||||||
|
`workplans/ADHOC-YYYY-MM-DD.md`, workstream slug `adhoc-YYYY-MM-DD`, and task ids
|
||||||
|
`ADHOC-YYYY-MM-DD-T01`, `T02`, etc. Use adhocs only for low-risk work completed
|
||||||
|
directly. Promote anything requiring analysis, design, approval, dependencies, or
|
||||||
|
multiple planned phases into a normal workplan.
|
||||||
|
|
||||||
|
Ecosystem todos from other agents arrive as `[repo:coordination-engine]` hub tasks —
|
||||||
|
visible at session start. Pick one up by creating the workplan file, then registering
|
||||||
|
the workstream.
|
||||||
|
|
||||||
|
Task blocks use this shape:
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: COORDINATION-WP-NNNN-T01
|
||||||
|
status: wait | todo | progress | done | cancel
|
||||||
|
priority: high | medium | low
|
||||||
|
state_hub_task_id: "<uuid>" # written by fix-consistency — do not edit
|
||||||
|
```
|
||||||
|
|
||||||
|
Status progression is `todo` → `progress` → `done`; use `wait` for waiting or
|
||||||
|
blocked work and `cancel` for stopped work.
|
||||||
|
|
||||||
|
<!-- Ralph Loop rules and HEUREKA sequence: ~/.claude/CLAUDE.md — do not duplicate here -->
|
||||||
18
.custodian-brief.md
Normal file
18
.custodian-brief.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<!-- custodian-brief: generated by fix-consistency — do not edit manually -->
|
||||||
|
# Custodian Brief — coordination-engine
|
||||||
|
|
||||||
|
**Domain:** communication
|
||||||
|
**Last synced:** 2026-06-24 13:18 UTC
|
||||||
|
**State Hub:** http://127.0.0.1:8000 *(adjust if running on a remote machine)*
|
||||||
|
|
||||||
|
## Active Workstreams
|
||||||
|
|
||||||
|
*(none — repo may need first-session setup)*
|
||||||
|
|
||||||
|
---
|
||||||
|
## MCP Orientation (when available)
|
||||||
|
|
||||||
|
If the state-hub MCP server is reachable, call:
|
||||||
|
`get_domain_summary("communication")`
|
||||||
|
This provides richer cross-domain context.
|
||||||
|
If the MCP call fails, use this file as your orientation source.
|
||||||
26
.repo-classification.yaml
Normal file
26
.repo-classification.yaml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
repo_classification:
|
||||||
|
standard: Repo Classification Standard
|
||||||
|
version: '1.0'
|
||||||
|
classified_at: '2026-06-22'
|
||||||
|
classified_by: human
|
||||||
|
category: product
|
||||||
|
domain: communication
|
||||||
|
secondary_domains:
|
||||||
|
- infotech
|
||||||
|
- agents
|
||||||
|
capability_tags:
|
||||||
|
- coordination
|
||||||
|
- workflow
|
||||||
|
- orchestration
|
||||||
|
- evidence
|
||||||
|
- platform
|
||||||
|
business_stake:
|
||||||
|
- product
|
||||||
|
- technology
|
||||||
|
- operations
|
||||||
|
- automation
|
||||||
|
business_mechanics:
|
||||||
|
- coordination
|
||||||
|
- operation
|
||||||
|
- adaptation
|
||||||
|
notes: Goal-driven coordination framework; human confirmed.
|
||||||
219
AGENTS.md
Normal file
219
AGENTS.md
Normal file
@@ -0,0 +1,219 @@
|
|||||||
|
# Coordination Engine — Agent Instructions
|
||||||
|
|
||||||
|
## Repo Identity
|
||||||
|
|
||||||
|
**Purpose:** Coordination Engine - (fill in purpose)
|
||||||
|
|
||||||
|
**Domain:** communication
|
||||||
|
**Repo slug:** coordination-engine
|
||||||
|
**Topic ID:** `36c7421b-c537-4723-bf75-42a3ebc6a1dc`
|
||||||
|
**Workplan prefix:** `COORDINATION-WP-`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## State Hub Integration
|
||||||
|
|
||||||
|
The Custodian State Hub tracks work across all domains. Interact via HTTP REST —
|
||||||
|
there is no MCP server for Codex agents.
|
||||||
|
|
||||||
|
| Context | URL |
|
||||||
|
|---------|-----|
|
||||||
|
| Local workstation | `http://127.0.0.1:8000` |
|
||||||
|
| Remote via tunnel | `http://127.0.0.1:18000` |
|
||||||
|
|
||||||
|
### Orient at session start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Offline brief — works without hub connection
|
||||||
|
cat .custodian-brief.md
|
||||||
|
|
||||||
|
# Active workstreams for this domain
|
||||||
|
curl -s "http://127.0.0.1:8000/workstreams/?topic_id=36c7421b-c537-4723-bf75-42a3ebc6a1dc&status=active" \
|
||||||
|
| python3 -m json.tool
|
||||||
|
|
||||||
|
# Check inbox
|
||||||
|
curl -s "http://127.0.0.1:8000/messages/?to_agent=coordination-engine&unread_only=true" \
|
||||||
|
| python3 -m json.tool
|
||||||
|
```
|
||||||
|
|
||||||
|
Mark a message read:
|
||||||
|
```bash
|
||||||
|
curl -s -X PATCH "http://127.0.0.1:8000/messages/<id>/read" \
|
||||||
|
-H "Content-Type: application/json" -d '{}'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Log progress (required at session close)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s -X POST http://127.0.0.1:8000/progress/ \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"summary": "what was done",
|
||||||
|
"event_type": "note",
|
||||||
|
"author": "codex",
|
||||||
|
"workstream_id": "<uuid>",
|
||||||
|
"task_id": "<uuid>"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
Omit `workstream_id` / `task_id` when not applicable.
|
||||||
|
|
||||||
|
### Update task status
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s -X PATCH "http://127.0.0.1:8000/tasks/<task_id>" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"status": "progress"}'
|
||||||
|
# values: wait | todo | progress | done | cancel
|
||||||
|
```
|
||||||
|
|
||||||
|
### Flag a task for human review
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s -X PATCH "http://127.0.0.1:8000/tasks/<task_id>" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"needs_human": true, "intervention_note": "reason"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Session Protocol
|
||||||
|
|
||||||
|
**Start:**
|
||||||
|
1. `cat .custodian-brief.md` — domain goal and open workstreams (offline-safe)
|
||||||
|
2. Check inbox: `GET /messages/?to_agent=coordination-engine&unread_only=true`; mark read
|
||||||
|
3. Scan workplans: `ls workplans/` — note `status: ready`, `active`, or `blocked` files and open tasks
|
||||||
|
4. Check human-needed tasks: `GET /tasks/?needs_human=true`
|
||||||
|
|
||||||
|
**During work:**
|
||||||
|
- Update task statuses in workplan files as tasks progress
|
||||||
|
- Record significant decisions via `POST /decisions/`
|
||||||
|
|
||||||
|
**Close:**
|
||||||
|
1. Update workplan file task statuses to reflect progress
|
||||||
|
2. Log: `POST /progress/` with a summary of what changed
|
||||||
|
3. Note for the custodian operator: after workplan file changes, run from
|
||||||
|
`~/state-hub`:
|
||||||
|
```bash
|
||||||
|
make fix-consistency REPO=coordination-engine
|
||||||
|
```
|
||||||
|
This syncs task status from files into the hub DB.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Credential and access routing
|
||||||
|
|
||||||
|
**Audience:** Codex, Claude Code, Grok, and custodian agents that call **llm-connect**
|
||||||
|
for inference. Run this check **before** requesting secrets, API keys, SSH access,
|
||||||
|
login tokens, or database passwords — in any repo, not only `ops-warden`.
|
||||||
|
|
||||||
|
ops-warden **issues SSH certificates only** (`warden sign`, `cert_command`). Every
|
||||||
|
other credential need belongs to another subsystem. **Do not** message
|
||||||
|
`ops-warden` on State Hub expecting a secret value; the reply is a pointer, not a key.
|
||||||
|
|
||||||
|
### Lookup (do this first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
warden route find "<describe your need>" --json
|
||||||
|
warden route show <catalog-id> --json
|
||||||
|
```
|
||||||
|
|
||||||
|
Requires the `warden` CLI from `~/ops-warden` (`uv tool install .` or `uv run warden`).
|
||||||
|
|
||||||
|
| Agent runtime | How to orient |
|
||||||
|
| --- | --- |
|
||||||
|
| **Codex / Grok** (shell, HTTP State Hub) | `warden route` commands above; inbox `to_agent=coordination-engine` is for coordination, not secret vending |
|
||||||
|
| **Claude Code** (MCP when available) | `get_domain_summary("custodian")` for workstreams; **still** use `warden route` for credential ownership |
|
||||||
|
| **llm-connect** (inference service) | Never put secret retrieval in prompts; route custody to OpenBao/operator paths surfaced by `warden route` |
|
||||||
|
|
||||||
|
### Quick routing table
|
||||||
|
|
||||||
|
| I need… | Owner | ops-warden executes? |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| SSH cert (`adm`/`agt`/`atm`) | ops-warden | **Yes** — `warden sign` |
|
||||||
|
| API key, DB password, provider token | OpenBao (`railiance-platform`) | No — route only |
|
||||||
|
| Login / OIDC / MFA | key-cape / Keycloak | No — route only |
|
||||||
|
| Authorization decision | flex-auth | No — route only |
|
||||||
|
| activity-core → issue-core emission | activity-core + issue-core | No — `warden route show activity-core-issue-sink` |
|
||||||
|
| SSH tunnel | ops-bridge (+ `cert_command` from warden) | No — route only |
|
||||||
|
|
||||||
|
### Anti-patterns (do not do these)
|
||||||
|
|
||||||
|
- `POST /messages/` to `ops-warden` asking for `ISSUE_CORE_API_KEY`, `OPENROUTER_API_KEY`, etc.
|
||||||
|
- Inventing `warden secret`, `warden login`, `warden bao`, `warden tunnel` — they do not exist
|
||||||
|
- Pasting secrets into Git, State Hub, workplans, logs, or chat
|
||||||
|
|
||||||
|
### Other capabilities (reuse-surface)
|
||||||
|
|
||||||
|
Non-credential capabilities are usually discovered through **reuse-surface** federation
|
||||||
|
(`reuse-surface` registry / `capability.*` indexes). Credential routing is inlined in
|
||||||
|
every repo's agent instructions because it is high-frequency, high-risk, and easy to
|
||||||
|
get wrong.
|
||||||
|
|
||||||
|
**Canon:** `~/ops-warden/wiki/CredentialRouting.md` · catalog `~/ops-warden/registry/routing/catalog.yaml`
|
||||||
|
|
||||||
|
<!-- REPO-AGENTS-EXTENSIONS -->
|
||||||
|
<!-- Append repo-specific agent instructions below this marker.
|
||||||
|
The state-hub template sync preserves content after this line. -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Workplan Convention (ADR-001)
|
||||||
|
|
||||||
|
Work items originate as files in this repo — not in the hub. The hub is a
|
||||||
|
read/cache/index layer that rebuilds from files.
|
||||||
|
|
||||||
|
**File location:** `workplans/COORDINATION-WP-NNNN-<slug>.md`
|
||||||
|
|
||||||
|
**Archived location:** finished workplans may move to
|
||||||
|
`workplans/archived/YYMMDD-COORDINATION-WP-NNNN-<slug>.md`. The `YYMMDD` prefix is
|
||||||
|
the completion/archive date; the frontmatter `id` does not change.
|
||||||
|
|
||||||
|
**Ad Hoc Tasks:** small opportunistic fixes discovered during a session use
|
||||||
|
`workplans/ADHOC-YYYY-MM-DD.md` with task ids `ADHOC-YYYY-MM-DD-T01`, etc. Use
|
||||||
|
this only for low-risk work completed directly; create a normal workplan for
|
||||||
|
anything needing analysis, design, approval, dependencies, or multiple phases.
|
||||||
|
|
||||||
|
**Frontmatter:**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
id: COORDINATION-WP-NNNN
|
||||||
|
type: workplan
|
||||||
|
title: "..."
|
||||||
|
domain: communication
|
||||||
|
repo: coordination-engine
|
||||||
|
status: proposed | ready | active | blocked | backlog | finished | archived
|
||||||
|
owner: codex
|
||||||
|
topic_slug: ...
|
||||||
|
created: "YYYY-MM-DD"
|
||||||
|
updated: "YYYY-MM-DD"
|
||||||
|
state_hub_workstream_id: "<uuid>" # written by fix-consistency — do not edit
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
Use `proposed` for a new draft, `ready` after review against current repo
|
||||||
|
state, and `finished` after implementation. `stalled` and `needs_review` are
|
||||||
|
derived health labels, not frontmatter statuses.
|
||||||
|
|
||||||
|
**Task block format** (one per `##` section):
|
||||||
|
|
||||||
|
```
|
||||||
|
## Task Title
|
||||||
|
|
||||||
|
` ` `task
|
||||||
|
id: COORDINATION-WP-NNNN-T01
|
||||||
|
status: wait | todo | progress | done | cancel
|
||||||
|
priority: high | medium | low
|
||||||
|
state_hub_task_id: "<uuid>" # written by fix-consistency — do not edit
|
||||||
|
` ` `
|
||||||
|
|
||||||
|
Task description text.
|
||||||
|
```
|
||||||
|
|
||||||
|
Status progression: `todo` → `progress` → `done`; use `wait` for waiting/blocked work and `cancel` for stopped work.
|
||||||
|
|
||||||
|
To create a new workplan:
|
||||||
|
1. Write the file following the format above
|
||||||
|
2. Notify the custodian operator to run `make fix-consistency REPO=coordination-engine`
|
||||||
|
(or send a message to the hub agent via `POST /messages/`)
|
||||||
12
CLAUDE.md
Normal file
12
CLAUDE.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Coordination Engine — Claude Code Instructions
|
||||||
|
|
||||||
|
@SCOPE.md
|
||||||
|
@.claude/rules/repo-identity.md
|
||||||
|
@.claude/rules/session-protocol.md
|
||||||
|
@.claude/rules/first-session.md
|
||||||
|
@.claude/rules/workplan-convention.md
|
||||||
|
@.claude/rules/stack-and-commands.md
|
||||||
|
@.claude/rules/architecture.md
|
||||||
|
@.claude/rules/repo-boundary.md
|
||||||
|
@.claude/rules/credential-routing.md
|
||||||
|
@.claude/rules/agents.md
|
||||||
31
SCOPE.md
Normal file
31
SCOPE.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# SCOPE
|
||||||
|
|
||||||
|
> Lightweight boundary for agents and contributors.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## One-liner
|
||||||
|
|
||||||
|
Framework for goal-driven digital coordination as communication.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Core Idea
|
||||||
|
|
||||||
|
coordination-engine captures coordination models, specs, and registry entries for how actors align on shared goals.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## In Scope
|
||||||
|
|
||||||
|
- Coordination specs, history, and registry indexes
|
||||||
|
- State Hub workplans and agent instructions
|
||||||
|
- Capability registration when coordination patterns stabilize
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Out of Scope
|
||||||
|
|
||||||
|
- Runtime orchestration engine implementation (future repos)
|
||||||
|
- Replacing issue trackers or chat systems
|
||||||
|
|
||||||
586
spec/coordination-model-v0.1.md
Normal file
586
spec/coordination-model-v0.1.md
Normal file
@@ -0,0 +1,586 @@
|
|||||||
|
# coordination-model-v0.1.md
|
||||||
|
|
||||||
|
## 1. Document Status
|
||||||
|
|
||||||
|
**Document:** coordination-model-v0.1.md
|
||||||
|
**Project:** coordination-engine
|
||||||
|
**Version:** 0.1
|
||||||
|
**Status:** Baseline Draft
|
||||||
|
**Scope:** Coordination ontology and communication-act lifecycle
|
||||||
|
**Related Documents:**
|
||||||
|
|
||||||
|
* `INTENT.md`
|
||||||
|
* `SCOPE.md`
|
||||||
|
* `ProductRequirementsDocument.md`
|
||||||
|
* `RuntimeArchitectureAndAdapterSubsystem.md`
|
||||||
|
* `AdapterInterfaceSpecification.md`
|
||||||
|
|
||||||
|
## 2. Purpose
|
||||||
|
|
||||||
|
This document defines the first coordination ontology for `coordination-engine`.
|
||||||
|
|
||||||
|
It establishes the foundational vocabulary for how actors align on shared goals through commitments and how the engine closes the loop with observations, assessments, and follow-up actions.
|
||||||
|
|
||||||
|
The ontology is intentionally narrower than the full product requirements. Version 0.1 focuses on four pillars:
|
||||||
|
|
||||||
|
1. **Actors** — who participates in coordination
|
||||||
|
2. **Goals** — what the coordination process is trying to achieve
|
||||||
|
3. **Commitments** — what parties agree to do or enable
|
||||||
|
4. **Observation loops** — how evidence drives progress until a goal is satisfied, failed, expired, escalated, or manually closed
|
||||||
|
|
||||||
|
Downstream specs (runtime architecture, adapter contracts, scenario patterns) should map to this ontology rather than invent parallel terminology.
|
||||||
|
|
||||||
|
## 3. Core Principle
|
||||||
|
|
||||||
|
A coordination case succeeds when its **goal** is satisfied, not when a message has merely been sent.
|
||||||
|
|
||||||
|
Digital coordination is the controlled arrangement of actors, payloads, access, communication acts, and evidence so that intended results can be achieved under uncertainty.
|
||||||
|
|
||||||
|
## 4. Ontology Overview
|
||||||
|
|
||||||
|
```text
|
||||||
|
CoordinationCase
|
||||||
|
goal: IntendedResult
|
||||||
|
actors: Participant[]
|
||||||
|
commitments: Commitment[]
|
||||||
|
communication_acts: CommunicationAct[]
|
||||||
|
observations: EvidenceEvent[]
|
||||||
|
assessments: Assessment[]
|
||||||
|
policies: Policy[]
|
||||||
|
|
||||||
|
Observation loop:
|
||||||
|
CommunicationAct → native signal → EvidenceEvent → Assessment → Policy decision → next CommunicationAct or closure
|
||||||
|
```
|
||||||
|
|
||||||
|
At runtime, a `CoordinationCase` is the container object. Actors hold roles. Goals define success. Commitments express required obligations. Communication acts are the outward-facing operations (notify, deliver, interact). Observation loops connect external signals back to case progress.
|
||||||
|
|
||||||
|
## 5. Actors
|
||||||
|
|
||||||
|
### 5.1 Actor
|
||||||
|
|
||||||
|
An **Actor** is any entity that can initiate coordination, receive coordination, perform interactions, emit system events, or be referenced in evidence.
|
||||||
|
|
||||||
|
Actor types:
|
||||||
|
|
||||||
|
| Type | Description | Examples |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `human` | A natural person | Customer, employee, signer |
|
||||||
|
| `organization` | A legal or operational entity | Company, department, authority |
|
||||||
|
| `system` | A software system acting on behalf of a party | ERP, CRM, payment gateway |
|
||||||
|
| `agent` | An automation actor with delegated authority | Custodian agent, workflow bot |
|
||||||
|
| `bot` | An automated endpoint with limited authority | Scanner, webhook processor |
|
||||||
|
| `unknown` | Actor not yet identified | Anonymous portal visitor |
|
||||||
|
|
||||||
|
An actor may be referenced before identity is confirmed. The engine must support progressive identity strengthening through evidence.
|
||||||
|
|
||||||
|
### 5.2 Participant
|
||||||
|
|
||||||
|
A **Participant** is an actor bound to a specific `CoordinationCase` with one or more roles, endpoints, and required outcomes.
|
||||||
|
|
||||||
|
Participants are case-scoped. The same human may be a participant in multiple cases with different roles.
|
||||||
|
|
||||||
|
Common participant roles:
|
||||||
|
|
||||||
|
* `initiator` — starts the case and defines the goal
|
||||||
|
* `recipient` — expected to receive awareness, access, or payload
|
||||||
|
* `respondent` — expected to submit a response or payload
|
||||||
|
* `signer` — expected to sign or countersign
|
||||||
|
* `payer` — expected to settle payment
|
||||||
|
* `approver` — expected to approve or reject
|
||||||
|
* `delegate` — acts with delegated authority for another participant
|
||||||
|
* `intermediary` — routes or transforms communication without being the business target
|
||||||
|
* `observer` — may view progress or evidence without being required to act
|
||||||
|
|
||||||
|
Each participant may carry:
|
||||||
|
|
||||||
|
* `participant_id`
|
||||||
|
* `actor_ref` — stable identity reference when known
|
||||||
|
* `roles[]`
|
||||||
|
* `endpoints[]` — email, phone, portal account, API subject, etc.
|
||||||
|
* `required_outcomes[]` — participant-level success conditions
|
||||||
|
* `authority_attributes` — signing level, approval limit, delegation chain
|
||||||
|
* `state` — derived from evidence (see section 8)
|
||||||
|
* `evidence_level` — current confidence in progress toward required outcomes
|
||||||
|
|
||||||
|
### 5.3 ActorContext
|
||||||
|
|
||||||
|
`ActorContext` describes the actor associated with an observation or interaction event.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
ActorContext:
|
||||||
|
actor_ref: string?
|
||||||
|
actor_type: human | organization | system | agent | bot | unknown
|
||||||
|
participant_id: string?
|
||||||
|
identity_strength: none | suspected | authenticated | verified
|
||||||
|
authority_strength: none | delegated | authorized
|
||||||
|
```
|
||||||
|
|
||||||
|
Actor context may be incomplete at event time. Adapters and controllers append or refine context as stronger evidence arrives.
|
||||||
|
|
||||||
|
### 5.4 Actor Boundaries
|
||||||
|
|
||||||
|
Actors are not channels.
|
||||||
|
|
||||||
|
Email inboxes, phone numbers, portal sessions, and API clients are **endpoints** through which actors may be reached or may act. A single actor may have multiple endpoints. A single endpoint may temporarily map to an unknown actor until identity evidence is recorded.
|
||||||
|
|
||||||
|
## 6. Goals
|
||||||
|
|
||||||
|
### 6.1 CoordinationCase
|
||||||
|
|
||||||
|
A **CoordinationCase** is a goal-directed coordination process.
|
||||||
|
|
||||||
|
It binds:
|
||||||
|
|
||||||
|
* one initiating context
|
||||||
|
* one primary goal (`IntendedResult`)
|
||||||
|
* one or more participants
|
||||||
|
* zero or more payloads and action surfaces
|
||||||
|
* the commitments required to reach the goal
|
||||||
|
* the policies that govern follow-up under uncertainty
|
||||||
|
|
||||||
|
Core case attributes:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
CoordinationCase:
|
||||||
|
id: string
|
||||||
|
purpose: string
|
||||||
|
scenario_type: string
|
||||||
|
goal: IntendedResult
|
||||||
|
state: draft | active | paused | partially_completed | completed | failed | expired | cancelled | manually_closed
|
||||||
|
created_at: timestamp
|
||||||
|
deadlines: Deadline[]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2 IntendedResult
|
||||||
|
|
||||||
|
An **IntendedResult** defines what success means for the case.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
* all required recipients accessed the payload
|
||||||
|
* all required respondents submitted valid data
|
||||||
|
* all required signers completed signature
|
||||||
|
* payment settled above threshold
|
||||||
|
* incident acknowledged by all critical participants
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
IntendedResult:
|
||||||
|
result_type: access | submission | acceptance | signature | payment | acknowledgement | completion | custom
|
||||||
|
target_population: all_required | threshold | named_participants
|
||||||
|
required_outcome: string
|
||||||
|
required_evidence_level: low | medium | high
|
||||||
|
quantitative_threshold: number?
|
||||||
|
deadline: timestamp?
|
||||||
|
partial_success_rules: PartialSuccessRule[]
|
||||||
|
failure_rules: FailureRule[]
|
||||||
|
```
|
||||||
|
|
||||||
|
A goal is **satisfied** only when its predicate evaluates true against current assessments with sufficient evidence. Weak channel signals alone do not satisfy a goal.
|
||||||
|
|
||||||
|
### 6.3 Goal States
|
||||||
|
|
||||||
|
Case-level goal interpretation uses these assessment states:
|
||||||
|
|
||||||
|
| State | Meaning |
|
||||||
|
| --- | --- |
|
||||||
|
| `unresolved` | Insufficient evidence to judge progress |
|
||||||
|
| `in_progress` | Some required evidence present, goal not yet satisfied |
|
||||||
|
| `partially_satisfied` | Goal rules allow partial success and threshold is met |
|
||||||
|
| `satisfied` | Goal predicate is true with required evidence |
|
||||||
|
| `failed` | Failure rules triggered |
|
||||||
|
| `expired` | Deadline passed without required outcome |
|
||||||
|
| `escalated` | Manual or policy-driven escalation replaced normal closure path |
|
||||||
|
| `manually_closed` | Operator closed the case with documented override |
|
||||||
|
|
||||||
|
Goal state is always derived from evidence and policy evaluation. It is not set directly by message dispatch.
|
||||||
|
|
||||||
|
### 6.4 Goal vs Communication Act
|
||||||
|
|
||||||
|
A goal is not a message.
|
||||||
|
|
||||||
|
Sending a notification, granting access, or opening a payment page are **communication acts** in service of commitments. They may produce evidence relevant to the goal, but they do not constitute goal satisfaction by themselves.
|
||||||
|
|
||||||
|
## 7. Commitments
|
||||||
|
|
||||||
|
### 7.1 Commitment
|
||||||
|
|
||||||
|
A **Commitment** is an explicit or policy-derived obligation that some party will enable, attempt, or perform an outcome relevant to the case goal.
|
||||||
|
|
||||||
|
Commitments make coordination auditable. Instead of only recording that an email was sent, the engine records what was obligated, by whom, for whom, by when, and whether observations support fulfillment.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Commitment:
|
||||||
|
id: string
|
||||||
|
case_id: string
|
||||||
|
kind: awareness | access | delivery | interaction | response | payment | signature | acknowledgement | enforcement | custom
|
||||||
|
obligor: participant_id | system | policy_engine
|
||||||
|
beneficiary: participant_id | case
|
||||||
|
subject_ref: payload_id | action_surface_id | communication_act_id?
|
||||||
|
due_by: timestamp?
|
||||||
|
required_evidence_level: low | medium | high
|
||||||
|
state: proposed | active | satisfied | breached | waived | expired | cancelled
|
||||||
|
satisfaction_predicate: string
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.2 Commitment Sources
|
||||||
|
|
||||||
|
Commitments may originate from:
|
||||||
|
|
||||||
|
1. **Scenario definition** — a contract-signing scenario requires signature commitments from each signer
|
||||||
|
2. **Case creation** — the initiator requests collection of documents by a deadline
|
||||||
|
3. **Policy engine** — a reminder policy creates a new awareness commitment after non-response
|
||||||
|
4. **Participant action** — a delegate accepts responsibility for responding on behalf of another participant
|
||||||
|
|
||||||
|
### 7.3 Commitment Kinds
|
||||||
|
|
||||||
|
| Kind | Obligation | Typical fulfillment evidence |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `awareness` | Target participant should become aware of the case or payload | notification opened, portal visit, authenticated session |
|
||||||
|
| `access` | Target participant should receive usable access to a payload or action surface | access grant used, payload viewed |
|
||||||
|
| `delivery` | Payload should become available, transferred, submitted, or consumed | delivery submitted, download recorded, archive stored |
|
||||||
|
| `interaction` | Target participant should perform a meaningful action | form submitted, approval recorded, link clicked with identity |
|
||||||
|
| `response` | Target participant should provide a structured answer or artifact | inbound payload accepted, validation passed |
|
||||||
|
| `payment` | Payer should settle an amount | payment initiated, payment settled |
|
||||||
|
| `signature` | Signer should sign or countersign with required assurance | signature completed, authority verified |
|
||||||
|
| `acknowledgement` | Participant should confirm awareness of an urgent item | acknowledgement interaction recorded |
|
||||||
|
| `enforcement` | System should apply deadline or non-compliance consequence | access revoked, account restricted, case escalated |
|
||||||
|
|
||||||
|
### 7.4 Commitment Lifecycle
|
||||||
|
|
||||||
|
```text
|
||||||
|
proposed
|
||||||
|
→ active
|
||||||
|
→ satisfied
|
||||||
|
→ breached
|
||||||
|
→ expired
|
||||||
|
→ waived
|
||||||
|
→ cancelled
|
||||||
|
```
|
||||||
|
|
||||||
|
State transitions are driven by observations and policy rules:
|
||||||
|
|
||||||
|
* `proposed → active` when the engine accepts the commitment and may schedule communication acts
|
||||||
|
* `active → satisfied` when satisfaction predicate is met with required evidence
|
||||||
|
* `active → breached` when failure rules fire
|
||||||
|
* `active → expired` when `due_by` passes without satisfaction
|
||||||
|
* `active → waived` when an authorized actor or policy explicitly waives the obligation
|
||||||
|
* `* → cancelled` when the case is cancelled or the commitment is superseded
|
||||||
|
|
||||||
|
A commitment may be satisfied at participant level before the case goal is satisfied globally.
|
||||||
|
|
||||||
|
### 7.5 Commitments and Communication Acts
|
||||||
|
|
||||||
|
Commitments are the semantic layer above transport.
|
||||||
|
|
||||||
|
A notification attempt does not create a commitment by itself. The engine creates or activates a commitment first, then derives communication acts to pursue it.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Commitment: signer S must sign contract C by Friday
|
||||||
|
→ CommunicationAct: notify S via email
|
||||||
|
→ CommunicationAct: grant portal access to signature flow
|
||||||
|
→ Observation: portal authenticated visit
|
||||||
|
→ Observation: signature completed
|
||||||
|
→ Commitment state: satisfied
|
||||||
|
```
|
||||||
|
|
||||||
|
## 8. Observation Loops
|
||||||
|
|
||||||
|
### 8.1 Observation
|
||||||
|
|
||||||
|
An **Observation** is a recorded fact about what happened in the world or in an external system.
|
||||||
|
|
||||||
|
Observations enter the engine primarily as normalized `EvidenceEvent` records. Raw provider events are preserved, but assessments are derived from normalized meaning.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
EvidenceEvent:
|
||||||
|
id: string
|
||||||
|
case_id: string
|
||||||
|
event_type: string
|
||||||
|
observed_at: timestamp
|
||||||
|
source_adapter: string
|
||||||
|
participant_id: string?
|
||||||
|
actor_context: ActorContext?
|
||||||
|
payload_ref: string?
|
||||||
|
action_surface_ref: string?
|
||||||
|
communication_act_ref: string?
|
||||||
|
normalized_meaning: string
|
||||||
|
confidence: low | medium | high
|
||||||
|
evidence_grade: weak | moderate | strong
|
||||||
|
raw_event_ref: string?
|
||||||
|
correlation_id: string?
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8.2 Assessment
|
||||||
|
|
||||||
|
An **Assessment** is a derived judgment based on one or more observations.
|
||||||
|
|
||||||
|
Assessments exist at multiple levels:
|
||||||
|
|
||||||
|
* participant state — has this participant met required outcomes?
|
||||||
|
* commitment state — is this obligation satisfied, breached, or still active?
|
||||||
|
* case progress — how close is the case to goal satisfaction?
|
||||||
|
* uncertainty flags — conflicting, missing, late, or weak evidence
|
||||||
|
|
||||||
|
Assessments must remain traceable to the observations that support them.
|
||||||
|
|
||||||
|
### 8.3 Observation Loop
|
||||||
|
|
||||||
|
The engine operates through a repeating observation loop:
|
||||||
|
|
||||||
|
```text
|
||||||
|
1. Goal and commitments define required outcomes
|
||||||
|
2. Policy engine selects next communication acts
|
||||||
|
3. Adapters execute acts and emit native signals
|
||||||
|
4. Adapter boundary normalizes signals into EvidenceEvents
|
||||||
|
5. Controllers derive participant, commitment, and case assessments
|
||||||
|
6. Policy engine evaluates assessments against deadlines and thresholds
|
||||||
|
7. Loop continues with follow-up acts, escalation, or closure
|
||||||
|
```
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
G[Goal] --> C[Commitments]
|
||||||
|
C --> P[Policy Engine]
|
||||||
|
P --> A[Communication Acts]
|
||||||
|
A --> N[Native Signals]
|
||||||
|
N --> E[EvidenceEvents]
|
||||||
|
E --> S[Assessments]
|
||||||
|
S --> P
|
||||||
|
S --> CL[Closure / Escalation]
|
||||||
|
P --> CL
|
||||||
|
```
|
||||||
|
|
||||||
|
The loop is event-driven and may run continuously as late evidence arrives.
|
||||||
|
|
||||||
|
### 8.4 Loop Properties
|
||||||
|
|
||||||
|
Observation loops in coordination scenarios have common properties:
|
||||||
|
|
||||||
|
1. **Non-linearity** — events may arrive out of order, late, duplicated, or in conflict
|
||||||
|
2. **Weak evidence** — channel acceptance is not human awareness
|
||||||
|
3. **Progressive strengthening** — identity and authority may start unknown and become verified
|
||||||
|
4. **Multi-source fusion** — one assessment may depend on notification, access, and interaction evidence combined
|
||||||
|
5. **Policy-gated action** — follow-up acts are chosen by policy, not hardcoded per channel
|
||||||
|
6. **Auditable closure** — final case state must cite the evidentiary basis
|
||||||
|
|
||||||
|
### 8.5 Uncertainty Handling
|
||||||
|
|
||||||
|
Uncertainty is first-class in the loop.
|
||||||
|
|
||||||
|
The engine must represent:
|
||||||
|
|
||||||
|
* missing expected observations
|
||||||
|
* contradictory observations
|
||||||
|
* proxy, scanner, or bot-like interactions
|
||||||
|
* authenticated actor mismatch
|
||||||
|
* expired commitments with partial evidence
|
||||||
|
* adapter evidence ceilings
|
||||||
|
|
||||||
|
When evidence is weak, the loop prefers:
|
||||||
|
|
||||||
|
* `unresolved` or `in_progress` assessment states
|
||||||
|
* additional observation opportunities
|
||||||
|
* policy actions such as `wait`, `remind`, `switch_channel`, or `manual_review`
|
||||||
|
|
||||||
|
Underclaiming is mandatory. Adapters report what happened; the engine decides what it means for goals and commitments.
|
||||||
|
|
||||||
|
## 9. Communication Act Lifecycle
|
||||||
|
|
||||||
|
### 9.1 CommunicationAct
|
||||||
|
|
||||||
|
A **CommunicationAct** is an engine-directed operation that pursues one or more commitments through a channel or surface.
|
||||||
|
|
||||||
|
Kinds:
|
||||||
|
|
||||||
|
* `notification` — awareness-oriented prompt
|
||||||
|
* `delivery` — payload availability, transfer, retrieval, submission, or consumption
|
||||||
|
* `interaction` — meaningful action on a payload or action surface
|
||||||
|
* `access_change` — grant, revoke, expire, or delegate access
|
||||||
|
* `enforcement` — apply deadline or compliance consequence
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
CommunicationAct:
|
||||||
|
id: string
|
||||||
|
case_id: string
|
||||||
|
kind: notification | delivery | interaction | access_change | enforcement
|
||||||
|
commitment_id: string
|
||||||
|
adapter_ref: string?
|
||||||
|
action_surface_ref: string?
|
||||||
|
target_participant_id: string?
|
||||||
|
state: planned | requested | accepted | in_flight | observed | failed | cancelled
|
||||||
|
requested_at: timestamp?
|
||||||
|
correlation_id: string?
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9.2 Lifecycle Phases
|
||||||
|
|
||||||
|
Every communication act follows a common lifecycle pattern:
|
||||||
|
|
||||||
|
```text
|
||||||
|
intent declared
|
||||||
|
→ attempt requested
|
||||||
|
→ attempt accepted or rejected
|
||||||
|
→ provider or surface activity observed
|
||||||
|
→ normalized evidence recorded
|
||||||
|
→ act state updated
|
||||||
|
→ assessments and policies re-evaluated
|
||||||
|
```
|
||||||
|
|
||||||
|
This pattern is shared across channels. Channel-specific details belong in adapter specs, not in the core ontology.
|
||||||
|
|
||||||
|
### 9.3 Notification Lifecycle
|
||||||
|
|
||||||
|
Notifications pursue awareness commitments.
|
||||||
|
|
||||||
|
Typical phases:
|
||||||
|
|
||||||
|
```text
|
||||||
|
notification.planned
|
||||||
|
notification.requested
|
||||||
|
notification.accepted_by_adapter
|
||||||
|
notification.rejected_by_adapter
|
||||||
|
notification.accepted_by_provider
|
||||||
|
notification.endpoint_accepted
|
||||||
|
notification.opened
|
||||||
|
notification.clicked
|
||||||
|
notification.failed
|
||||||
|
notification.expired
|
||||||
|
```
|
||||||
|
|
||||||
|
Important distinction:
|
||||||
|
|
||||||
|
* `endpoint_accepted` means the channel accepted the message for the endpoint
|
||||||
|
* it does **not** mean the participant became aware
|
||||||
|
* stronger awareness requires additional observations where the channel allows them
|
||||||
|
|
||||||
|
### 9.4 Delivery Lifecycle
|
||||||
|
|
||||||
|
Deliveries pursue access, transfer, submission, or consumption commitments.
|
||||||
|
|
||||||
|
Typical phases:
|
||||||
|
|
||||||
|
```text
|
||||||
|
delivery.planned
|
||||||
|
delivery.payload.published
|
||||||
|
delivery.access.granted
|
||||||
|
delivery.payload.viewed
|
||||||
|
delivery.payload.downloaded
|
||||||
|
delivery.payload.submitted
|
||||||
|
delivery.payload.validated
|
||||||
|
delivery.payload.rejected
|
||||||
|
delivery.completed
|
||||||
|
delivery.failed
|
||||||
|
```
|
||||||
|
|
||||||
|
Delivery evidence may also inform notification and goal assessments. For example, portal access can be stronger evidence than email open tracking.
|
||||||
|
|
||||||
|
### 9.5 Interaction Lifecycle
|
||||||
|
|
||||||
|
Interactions pursue response, signature, payment, acknowledgement, and other outcome commitments.
|
||||||
|
|
||||||
|
Typical phases:
|
||||||
|
|
||||||
|
```text
|
||||||
|
interaction.surface.opened
|
||||||
|
interaction.identity.started
|
||||||
|
interaction.identity.completed
|
||||||
|
interaction.action.started
|
||||||
|
interaction.action.completed
|
||||||
|
interaction.declined
|
||||||
|
interaction.disputed
|
||||||
|
interaction.failed
|
||||||
|
```
|
||||||
|
|
||||||
|
Interactions should be classified by actor certainty and authority strength. Result-relevant interactions require stronger evidence than anonymous page loads.
|
||||||
|
|
||||||
|
### 9.6 Act State vs Goal State
|
||||||
|
|
||||||
|
Communication act success is local.
|
||||||
|
|
||||||
|
A notification act may reach `observed` while the related awareness commitment remains `active` because evidence is too weak. Case closure requires goal-level assessment, not merely exhausted communication attempts.
|
||||||
|
|
||||||
|
## 10. Supporting Concepts
|
||||||
|
|
||||||
|
The ontology above is intentionally focused. These related concepts appear in adjacent specs and runtime design:
|
||||||
|
|
||||||
|
| Concept | Role in the ontology |
|
||||||
|
| --- | --- |
|
||||||
|
| `Payload` | Subject of access, delivery, and interaction commitments |
|
||||||
|
| `ActionSurface` | Place where interactions occur |
|
||||||
|
| `AccessGrant` | Enabler for access commitments |
|
||||||
|
| `Policy` | Rules that drive observation-loop decisions |
|
||||||
|
| `Adapter` | Boundary that executes acts and supplies observations |
|
||||||
|
| `Deadline` | Time bound on goals and commitments |
|
||||||
|
| `NextAction` | Policy output consumed by controllers |
|
||||||
|
|
||||||
|
## 11. Minimal Case Example
|
||||||
|
|
||||||
|
Invoice payment collection:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Case goal: payment settled by payer P before due date
|
||||||
|
|
||||||
|
Participants:
|
||||||
|
- initiator: billing system
|
||||||
|
- payer: P
|
||||||
|
|
||||||
|
Commitments:
|
||||||
|
- awareness: payer P should become aware of invoice I
|
||||||
|
- access: payer P should receive access to payment surface S
|
||||||
|
- payment: payer P should settle invoice I
|
||||||
|
- enforcement: system should escalate if unpaid after deadline
|
||||||
|
|
||||||
|
Observation loop:
|
||||||
|
1. Publish invoice payload and grant access
|
||||||
|
2. Notify payer via email adapter
|
||||||
|
3. Observe endpoint_accepted (weak evidence)
|
||||||
|
4. Observe portal visit and authenticated session (stronger evidence)
|
||||||
|
5. Awareness commitment satisfied
|
||||||
|
6. Observe payment initiated then settled
|
||||||
|
7. Payment commitment satisfied
|
||||||
|
8. Goal assessment: satisfied
|
||||||
|
9. Case closed with traceable evidence chain
|
||||||
|
```
|
||||||
|
|
||||||
|
## 12. Terminology Mapping
|
||||||
|
|
||||||
|
| Ontology term (v0.1) | Existing project term |
|
||||||
|
| --- | --- |
|
||||||
|
| Actor | Actor / entity referenced in events |
|
||||||
|
| Participant | Participant |
|
||||||
|
| Goal | IntendedResult / case success criterion |
|
||||||
|
| CoordinationCase | CoordinationCase |
|
||||||
|
| Commitment | Obligation implied by scenario, policy, or participant requirement |
|
||||||
|
| CommunicationAct | Notification / Delivery / Interaction operation |
|
||||||
|
| Observation | EvidenceEvent |
|
||||||
|
| Assessment | Derived participant, commitment, or case state |
|
||||||
|
| Observation loop | Evidence-driven policy cycle |
|
||||||
|
| Endpoint | Participant contact channel |
|
||||||
|
|
||||||
|
## 13. v0.1 Non-Goals
|
||||||
|
|
||||||
|
This baseline ontology does not yet specify:
|
||||||
|
|
||||||
|
* concrete API schemas or persistence models
|
||||||
|
* policy language syntax
|
||||||
|
* full commitment algebra for nested or conditional obligations
|
||||||
|
* legal validity rules for regulated notice or signature scenarios
|
||||||
|
* cross-case actor identity merge rules
|
||||||
|
* runtime controller interfaces
|
||||||
|
|
||||||
|
Those belong in later specs once this vocabulary is stable.
|
||||||
|
|
||||||
|
## 14. Success Criteria for v0.1
|
||||||
|
|
||||||
|
The ontology is fit for purpose when:
|
||||||
|
|
||||||
|
1. A reader can explain a coordination scenario using actors, goals, commitments, and observation loops without referring to transport details.
|
||||||
|
2. Adapter and runtime specs can map their entities to this document without contradictory definitions.
|
||||||
|
3. A case can be traced from goal declaration through commitments, communication acts, observations, assessments, and closure.
|
||||||
|
4. Weak vs strong evidence distinctions remain visible at each loop step.
|
||||||
|
|
||||||
|
## 15. Guiding Statement
|
||||||
|
|
||||||
|
`coordination-engine` coordinates actors around shared goals through explicit commitments, pursues those commitments with communication acts, and uses observation loops to decide progress, follow-up, and closure under uncertainty.
|
||||||
67
workplans/COORDINATION-WP-0001-statehub-bootstrap.md
Normal file
67
workplans/COORDINATION-WP-0001-statehub-bootstrap.md
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
---
|
||||||
|
id: COORDINATION-WP-0001
|
||||||
|
type: workplan
|
||||||
|
title: "Bootstrap State Hub integration"
|
||||||
|
domain: communication
|
||||||
|
repo: coordination-engine
|
||||||
|
status: finished
|
||||||
|
owner: codex
|
||||||
|
topic_slug: communication
|
||||||
|
created: "2026-06-22"
|
||||||
|
updated: "2026-06-22"
|
||||||
|
state_hub_workstream_id: "656d4245-63a0-4022-98a3-e446b133a8d6"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Bootstrap State Hub integration
|
||||||
|
|
||||||
|
Coordination engine for inter-repo workflows.
|
||||||
|
|
||||||
|
## Review Generated Integration Files
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: COORDINATION-WP-0001-T01
|
||||||
|
status: done
|
||||||
|
priority: high
|
||||||
|
state_hub_task_id: "95769b93-99ce-4cbd-be90-a41dbb87fda0"
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Result 2026-06-22: Filled SCOPE.md from INTENT.
|
||||||
|
|
||||||
|
Review `INTENT.md`, `SCOPE.md`, `AGENTS.md`, and `.custodian-brief.md`.
|
||||||
|
Replace generated placeholders with repo-specific facts where needed.
|
||||||
|
|
||||||
|
## Verify Local Developer Workflow
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: COORDINATION-WP-0001-T02
|
||||||
|
status: done
|
||||||
|
priority: high
|
||||||
|
state_hub_task_id: "1c1930c6-8bd7-4979-b0a6-cfa476674129"
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Result 2026-06-22: Registry-oriented dev workflow documented.
|
||||||
|
|
||||||
|
Identify the repo's install, test, lint, build, and run commands. Add or refine
|
||||||
|
those commands in the agent instructions so future coding sessions can verify
|
||||||
|
changes confidently.
|
||||||
|
|
||||||
|
## Seed First Real Workplan
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: COORDINATION-WP-0001-T03
|
||||||
|
status: done
|
||||||
|
priority: medium
|
||||||
|
state_hub_task_id: "f74ef97e-8f0a-4d54-b17c-12dcb68ac3f1"
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Result 2026-06-22: Created COORDINATION-WP-0002.
|
||||||
|
|
||||||
|
Create the first implementation workplan for the repository's most important
|
||||||
|
next change. After workplan file updates, run from `~/state-hub`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make fix-consistency REPO=coordination-engine
|
||||||
|
```
|
||||||
29
workplans/COORDINATION-WP-0002-coordination-model-spec.md
Normal file
29
workplans/COORDINATION-WP-0002-coordination-model-spec.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
id: COORDINATION-WP-0002
|
||||||
|
type: workplan
|
||||||
|
title: "Coordination model specification baseline"
|
||||||
|
domain: communication
|
||||||
|
repo: coordination-engine
|
||||||
|
status: finished
|
||||||
|
owner: codex
|
||||||
|
topic_slug: communication
|
||||||
|
created: "2026-06-22"
|
||||||
|
updated: "2026-06-24"
|
||||||
|
state_hub_workstream_id: "2b62c9df-577d-45ce-81a7-cf343e2fb6b0"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Coordination model specification baseline
|
||||||
|
|
||||||
|
Draft the first coordination ontology and message lifecycle spec for the engine.
|
||||||
|
|
||||||
|
## Author coordination spec v0.1
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: COORDINATION-WP-0002-T01
|
||||||
|
status: done
|
||||||
|
priority: high
|
||||||
|
state_hub_task_id: "0ece010b-4597-4ae9-b77d-26a3ff8c906f"
|
||||||
|
```
|
||||||
|
|
||||||
|
Result 2026-06-24: Authored `spec/coordination-model-v0.1.md` with actors, goals,
|
||||||
|
commitments, observation loops, and communication-act lifecycle baseline.
|
||||||
Reference in New Issue
Block a user