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.

Activity

  1. hyrule-engineering-loop commented on Jul 21, 2026

    @hyrule-engineering-loop
    Contributor

    Reliability Governor Decision

    • role: staff_sre_autonomous_operations
    • decision: needs_human
    • next_loop: human
    • handoff_contract: human_review
    • source: knowledge
    • intent: secret / tier 4
    • capability: none
    • knowledge: current / A0
    • reasons: secrets are not explicitly allowed; legal work is not explicitly allowed
    {
      "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."
    }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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