Repository navigation
Add an A2A v1.0 task server and dual-stack Hyrule Handoff intake #40
Copy link
Copy link
Open
Labels
enhancementNew feature or requestNew feature or requestloop:needs-humanHuman review required before autonomous routingHuman review required before autonomous routing
Description
Parent architecture issue: AS215932/agent-core#14
Related reliability work: #29
Problem
Engineering currently consumes an NOC-specific LHP-v1 fetch path and rejects the equivalent SOC path. Intake is pull-oriented and coupled to origin-specific transport details, while the intended Engineering workflow is shared across agents.
Implementation
- Add an A2A v1.0 HTTP+JSON task server using the official Python SDK.
- Publish an Agent Card with a
prepare_guarded_changeskill and requirehttps://servify.network/a2a/extensions/hyrule-handoff/v1. - Persist A2A tasks and the
caseId/handoffId/ source-loop / GitHub issue correlation in PostgreSQL. - Validate size bounds, schema, authorization, source revision, canonical payload hash, evidence references, and redaction policy before durable acceptance.
- Store the highest accepted
sourceRevision; reject regressions and reject a conflicting hash at the same revision. - Create or reconcile one
loop:candidateissue per handoff. Never applyloop:approvedautomatically. - Before authorized execution, reconcile the latest CaseHandoff revision, GitHub labels, and required Knowledge context. Refuse stale or mismatched work.
- Report draft PRs, proposed changes, execution evidence, and bounded run output as A2A Artifacts.
- Implement the Hyrule task-state mapping from the parent issue.
COMPLETEDmeans the Engineering deliverable exists, not that the origin case is verified or resolved. - Support client polling in the first release. Keep push notifications behind a feature flag until the production TLS endpoint is ready.
- Retain the existing LHP-v1 intake under a feature flag for shadow comparison and rollback.
- Emit task, revision-conflict, authorization, rejection, retry, and latency metrics/traces without logging secrets or raw untrusted payloads.
A2A status events may wake the Reliability Governor, but they must not authorize execution. #29 remains the owner of persistent wake/reconciliation semantics; this issue owns A2A server and transport integration.
Acceptance criteria
- Valid NOC and SOC profile requests are durably accepted and correlated to exactly one candidate issue.
- Duplicate submissions and service restarts do not create duplicate tasks or GitHub issues.
- Stale revisions, same-revision hash conflicts, incompatible extensions, bad authentication, and oversized payloads are rejected and observable.
- A task waits in
INPUT_REQUIREDuntil the human authorization and domain prerequisites are present. - A draft PR is returned as an Artifact and maps to change-planned/completed-deliverable semantics only.
- Engineering cannot write the originating case's
verifiedorresolvedstate. - Shadow comparison demonstrates A2A/LHP semantic parity and the feature flag restores LHP-only intake.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestloop:needs-humanHuman review required before autonomous routingHuman review required before autonomous routing
Activity
hyrule-engineering-loop commentedon Jul 21, 2026
Reliability Governor Decision
staff_sre_autonomous_operationsneeds_humanhumanhuman_reviewknowledgesecret/ tier4nonecurrent/A0{ "affected_assets": [ "AS215932/engineering-loop" ], "affected_customers": [], "affected_services": [], "allowed_paths": [], "authority_text_hash": "e8f44d017eb63b1efa851ee11bff4c8929b4898accc1fcf5ce34455a98d1664f", "blast_radius": "credential plane", "controlled_loops": [ "engineering", "noc", "knowledge" ], "created_at": "2026-07-21T19:45:38.572022+00:00", "denial_reasons": [ "secrets are not explicitly allowed", "legal work is not explicitly allowed" ], "expected_paths": [ "secrets/" ], "forbidden_paths": [], "governor_name": "Reliability Governor", "governor_role": "staff_sre_autonomous_operations", "handoff_contract": "human_review", "intent_type": "secret", "issue_id": "AS215932/engineering-loop#40", "issue_number": 40, "issue_text_hash": "82af26f02daed2a2395c310ad5d560e7d437e7de75300694f4243fe654c23240", "knowledge_authority_level": "A0", "knowledge_context_pack_id": "ctx_622833469ab101620d895a206c6027b0", "knowledge_export_version": "local-20260710201321", "knowledge_status": "current", "labels_to_add": [ "loop:needs-human" ], "labels_to_remove": [ "loop:intake", "loop:candidate", "loop:approved", "loop:needs-context", "loop:knowledge-gap" ], "lhp": null, "matched_capability": null, "next_loop": "human", "policy_rules": [ "deny sensitive domains unless a capability explicitly allows them" ], "record_id": "0020b5d17f2b8ec41b35", "repo": "AS215932/engineering-loop", "required_checks": [], "risk_tier": 4, "rollback_plan": "Use the rollback/revert procedure specified in the request.", "routing_decision": "needs_human", "schema_version": "reliability-governor.cdr.v1", "source": "knowledge", "storage_path": "/var/lib/engineering-loop/reliability-governor/as215932-engineering-loop-40-0020b5d17f2b8ec41b35.json", "verification_method": "Use the issue-specified verification: tests/checks/evidence named in the request." }