cross-repo-communication
Standardized methodology for inter-orchestrator communication across the EvaLok ecosystem. Use when processing, polling, or responding to cross-repo issues between the main, QC, and audit repos.
SKILL.md.claude/skills/cross-repo-communication/SKILL.md
GitHubCross-repo Communication Protocol
Standardized methodology for inter-orchestrator communication across the EvaLok ecosystem. Adopted per audit #53.
Core Principles
- Write only to your own repo. Messages go OUT as labeled issues on the sender's repo.
- Discover by polling. Receivers find messages by polling other repos' issues via
gh api. - Respond on your own repo. Create a tracking issue on YOUR repo referencing the source.
- Track in state.json. Record processed issue numbers to avoid double-processing.
- Trust only EvaLok. All issue authors must be verified as
EvaLok.
Message Types (Labels)
| Label | Created on | Created by | Consumed by | Purpose |
|---|---|---|---|---|
audit-outbound |
Audit repo | Audit | Main, QC | Process recommendation |
audit-inbound |
Main/QC repo | Main/QC | Audit | Response to audit recommendation |
qc-outbound |
QC repo | QC | Main | QC validation report |
qc-inbound |
Main repo | Main | QC | Response to QC report |
qc-outbound (title [QC-REQUEST]) |
Main repo | Main | QC | Validation request |
qc-ack |
QC repo | QC | Main | Acknowledgment of request |
input-from-eva |
Any repo | Eva | Target repo | Human directive |
question-for-eva |
Any repo | Any | Eva | Question for human operator |
Communication Flows
Audit recommendation flow
Audit repo Main/QC repo
(audit-outbound #N) --------> Polls, discovers, evaluates
Creates audit-inbound issue on OWN repo
<-------- Audit polls main/QC for audit-inbound issues
QC report flow
QC repo Main repo
(qc-outbound #N) --------> Polls, discovers, evaluates
Creates qc-inbound issue on main repo
<-------- QC polls main for qc-inbound issues
Validation request flow
Main repo QC repo
(qc-outbound request) -------> Polls, discovers, evaluates
Creates qc-ack issue on QC repo
<-------- Main polls QC for qc-ack issues
Main Repo Polling Templates
Step 4 — QC repo polling
# Discover new QC reports
gh api "repos/EvaLok/schema-org-json-ld-qc/issues?labels=qc-outbound&state=open&creator=EvaLok&sort=created&direction=asc" --paginate --jq '.[] | {number, title, created_at}'
# Discover QC acknowledgments of our requests
gh api "repos/EvaLok/schema-org-json-ld-qc/issues?labels=qc-ack&state=all&sort=created&direction=desc&per_page=5" --jq '.[] | {number, title, state, created_at}'
Step 5 — Audit repo polling
# Discover new audit recommendations
gh api "repos/EvaLok/schema-org-json-ld-audit/issues?labels=audit-outbound&state=open&creator=EvaLok&sort=created&direction=asc" --paginate --jq '.[] | {number, title, created_at}'
Response channel: audit-inbound issues on THIS repo. The main orchestrator does NOT have write access to the audit repo.
Response Issue Format
Title format
[{label}] {Decision}: {brief description} (source #{number})
Examples:
[audit-inbound] Accept: Cross-repo communication skill (audit #53)[qc-inbound] Fix dispatched: Recipe missing properties (qc #72)
Body template
## Source
- **Repo**: {repo name}
- **Issue**: [{repo}#{number}]({full URL})
- **Title**: {source issue title}
## Decision
{accept | reject | defer | acknowledge | in-progress}
## Actions taken
- {bullet list of concrete actions}
## Notes
{additional context}
State Tracking
Track processed issue numbers in docs/state.json. Arrays contain issue numbers from the SOURCE repo.
Current main repo schema:
{
"audit_processed": [2, 3, 4, ...],
"qc_processed": [8, 57, 72, ...],
"qc_requests_pending": [331]
}
Processing logic:
- Poll for issues matching target label on source repo
- Filter for trusted author (EvaLok)
- Compare issue numbers against processed array
- For each new issue: read body, evaluate, create response issue on own repo, add to processed array
- Update
last_polledtimestamp
Lifecycle Management
- Response issues: Create when processing a message. Close when action is complete.
- Source issues: Managed by the sender. Don't close issues on repos you don't control.
- Stale cleanup: During housekeeping, cross-reference open response issues against source issue state.
Full Cross-repo URLs
Always use full GitHub URLs for cross-repo references:
# Correct
Responding to https://github.com/EvaLok/schema-org-json-ld-audit/issues/53
# Avoid
Responding to EvaLok/schema-org-json-ld-audit#53