Skip to content

Expand event fixtures to cover all action.type values #3

Description

@Faux16

Context

The spec README states the target is fixtures/events/ covering all action.type values — "50 example events" (coming). Today there are 4:

  • 01-tool-call-allowed.json
  • 02-tool-call-blocked-external-email.json
  • 03-model-response-logged.json
  • 04-session-open-l1-only.json

The fixtures are load-bearing — both SDKs and agp-cts validate against them in CI, and they're the canonical examples in the spec for each event shape.

Goal

Expand fixtures/events/ to cover every action.type enum value defined in schemas/event.json plus realistic variations (allowed/blocked, with/without policy stamp, multi-action, etc.).

Scope (checklist — each line is a small PR)

Action types not yet represented (audit schemas/event.json for the full enum; the list below is best-effort from a quick read):

  • tool_call — additional variants beyond 01 (e.g., parallel calls, MCP-routed call, denied for non-policy reason).
  • model_response — variants with content filtering, with citations, refusal.
  • session_open — L2 (with policy stamp) and L3 (with decision id).
  • session_close — clean close vs. timeout vs. policy-driven termination.
  • file_access — read, write, attempted-blocked.
  • data_export — bulk export, redacted export, blocked.
  • network_request — outbound HTTPS, outbound email (blocked variant exists, add allowed variant), socket.
  • code_execution — sandboxed, denied, with output captured.
  • policy_decision — Flow C decision recorded as event.
  • (add more once schemas/event.json is enumerated)

Each fixture should:

  1. Validate against schemas/event.json (the existing validate-fixtures workflow enforces this).
  2. Be loaded by the SDK interop tests under openagp/sdk-python and openagp/sdk-typescript.
  3. Be signed with a deterministic test key so the cross-language byte-equality assertion holds.

Out of scope

  • New schema fields (those need their own RFC via the Spec change template).
  • Policy fixtures (tracked separately).

Pointers

Why this is a good first issue

Each fixture is small, well-scoped, and produces an immediate, runnable PR. New contributors can pick one row from the checklist, write the JSON, get CI green, and ship.


🚀 Start here

What: add one event fixture per action.type value not yet covered. The enum lives in schemas/common.json $defs/action_type: tool_call, model_response, session_open, session_close, data_read, data_write, external_request. Compare against the files already in fixtures/events/.

Files: add fixtures/events/NN-<action-type>-<scenario>.json (follow the existing numbering/naming).

How to test locally:

pip install "jsonschema>=4.21.0" "referencing>=0.34.0"
python -m jsonschema -i fixtures/events/NN-your-fixture.json schemas/event.json

CI validates every fixture on PR.

Acceptance criteria:

  • One realistic fixture for each uncovered action.type.
  • Each validates against schemas/event.json.
  • Required L1 fields present; realistic actor/action values.
  • DCO sign-off (git commit -s).

Good for a first PR — self-contained, one file at a time.

Metadata

Metadata

Assignees

No one assigned

    Labels

    good first issueGood entry point for a new contributorstatus:needs-triageNewly opened, not yet assessed by a maintainertype:featureAdditive change — new functionality

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions