Skip to content

Add an A2A v1.0 task server and dual-stack Hyrule Handoff intake #40

Description

@Svaag

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_change skill and require https://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:candidate issue per handoff. Never apply loop:approved automatically.
  • 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. COMPLETED means 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_REQUIRED until 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 verified or resolved state.
  • Shadow comparison demonstrates A2A/LHP semantic parity and the feature flag restores LHP-only intake.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestloop:needs-humanHuman review required before autonomous routing

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions