generated from coulomb/repo-seed
Agents can discover the activity-core → issue-core emission contract via `warden route show activity-core-issue-sink` instead of messaging ops-warden for ISSUE_CORE_API_KEY. The playbook points at owner-repo docs per the no-double-source rule.
2.8 KiB
2.8 KiB
activity-core IssueSink → issue-core REST emission
Date: 2026-06-18
Pointer playbook for agents wiring activity-core task emission to the issue-core REST ingestion endpoint. Authoritative contracts live in the owner repos — this page is a checklist and index only (no-double-source rule).
Owners
| Concern | Owner repo | Authoritative doc |
|---|---|---|
IssueSink consumer (IssueCoreRestSink) |
activity-core |
docs/issue-core-emission-boundary.md |
Ingestion server (POST /issues/) |
issue-core |
README.md — REST Ingestion Server |
| Production secret injection (K8s/OpenBao) | railiance-platform |
catalog id issue-core-ingestion-api-key (draft until path ships) |
Do not ask ops-warden
ISSUE_CORE_API_KEY is a shared ingestion key between activity-core and
issue-core. It is not an SSH certificate and ops-warden does not vend it.
- Generic API-key routing:
warden route show openbao-api-key --json - This emission lane:
warden route show activity-core-issue-sink --json - State Hub messages to
ops-wardenexpecting a key value will not succeed.
Never paste key values into Git, State Hub, workplans, logs, or agent chat.
Worker checklist
- Confirm sink mode —
ISSUE_SINK_TYPE=restfor live emission;nullfor dry-run (Railiance production default today). See activity-coreSCOPE.md. - Pair env vars on both sides (same value):
ISSUE_CORE_URL— e.g.http://127.0.0.1:8765locallyISSUE_CORE_API_KEY— shared secret; activity-core sendsAuthorization: Bearer <key>; issue-core validates on ingest
- Local dev — generate once, export on both processes:
Use
export ISSUE_CORE_API_KEY="$(python3 -c 'import secrets; print(secrets.token_urlsafe(32))')" issue serve --host 127.0.0.1 --port 8765 # issue-core terminaldefault: localin~/.config/issue-tracker/backends.jsonfor local smoke — a remote Gitea default backend will hang on ingest. - Verify —
uv run pytest tests/test_issue_sink.pyin activity-core; one live POST should return201withissue_id(see issue-core README). - Production — inject
ISSUE_CORE_API_KEYvia OpenBao/K8s on both deployments; coordinate withrailiance-platformwhen the canonical path ships (issue-core-ingestion-api-keycatalog entry).
Known contract gap
issue-core requires triggering_event_id as a UUID; activity-core cron paths
may send non-UUID keys (e.g. "scheduled"). Event-driven emission with real
event UUIDs works; align schemas before enabling cron rules against live REST.
See also
activity-core/AGENTS.md— Issue-core emission sectionissue-core/AGENTS.md— REST ingestion API key sectionWARDEN-WP-0012— playbook backlog and promotion gates