ORCA = Orchestration & Risk Control for Agents. Resolved before build start, based on the tech spec (Interlock_Tech_Specv3) review. If you change one of these, tell the whole team — other people's code depends on them.
The LangGraph adapter must wrap the tools themselves, so every tool call passes through the Policy Gate before it runs — same as agents built on our own harness. Observing/logging alone is not enough; the cross-framework enforcement claim depends on this. (Owner: Person A)
- Waiting: an agent that hits an
escalateverdict freezes and stays frozen until a human acts. No timeout, no auto-continue. - Denied: the human chooses one of two options in the modal:
"Give up" (agent ends the task, emits a
failed/closed event) or "Try another way" (agent replans without the blocked action). - Approved: the agent simply resumes and executes the approved action. (Owners: Person A for pause/resume in the harness, Person C for the modal's two-option deny UI)
Cross-agent taint spread (Doc agent reads poisoned file → downstream agents
inherit "untrusted") is parked until the end. The schema keeps the
data_provenance.tainted field so it can be added without a schema change.
Until then, the poisoned-doc demo can set the flag directly on the affected
agent's events.
Renamed Quality Gate (was "Governance Gate") per the final workflow
diagram, July 9. JUDGE_PROVIDER=mock (default) is the deterministic
rubric judge — demo-safe, zero network; JUDGE_PROVIDER=llm +
LLM_ENDPOINT/LLM_API_KEY/LLM_DEPLOYMENT switches to a strict-prompted
second LLM. Beat 2's disagreement (150 vs 1500 PSI) fires on cue either way.
Flag routing (team decision, July 9): a judge disagreement FREEZES the run — the flagged output goes to the same human-review inbox as safety escalations, and nothing downstream proceeds until a human approves / rejects it. It only runs where a step declares a rubric (that's the "optional" in the diagram).
Agents run sequentially, never concurrently. One global hash chain over all events, computed by the single event store writer. If we ever go concurrent, revisit (per-trace chains).
(Was "Interlock" in the spec — renamed; "Interlock" alone collides with a known ransomware gang. Keep the safety-interlock metaphor in the pitch, just not as the product name.)
Four beats is the goal, not a commitment. Priority if time is short: Beat 3 (attack + block) > Beat 4 (audit/hash-chain) > Beat 1 (cascade) > Beat 2 (judge disagreement). Rehearse with a timer.
The LLM API key lives in backend_starter/.env (gitignored) on each
machine. Never commit it, never paste it in chat/docs/slides. Rotate the
key after the hackathon.
- Which provider is the API key for (Azure OpenAI / Gemini / other)? Need the
endpoint URL + model/deployment name to wire the judge agent
(
JUDGE_PROVIDER=llmis ready and waiting for those three env vars). backend_starter/(Allen's branch) uses the old, simpler event schema — upgrade it to the spec schema or retire it so nobody builds against the old shape.
- Token threshold: per-trace cumulative (implemented in orca/tripwires.py).
- Compliance report contents: chain verification, enforcement record with OWASP tags, human oversight with reviewer names, quality reviews, cost attribution (orca/compliance.py; GET /report.md).
- Cross-framework enforcement: proven with a real LangGraph graph — guarded tools pass the Policy Gate before executing (orca/adapters.py, test_adapters.py).