todo-45.4-event-kernel-quality-boundaries.md 3.4 KB

Todo 45.4 Event Kernel Quality Boundaries Plan

Status: done

Result

Preserved EventAgent default/explicit configuration semantics, isolated plugin mutations, encapsulated validator state, and normalized non-JSON handler payloads through kernel and EventAgent integrations.

Goal

Close five reproducible quality-review gaps before treating the generic event kernel as the stable foundation for runtime modes and built-in plugins.

Scope

  • Preserve configured EventAgent.params.extra_body when a call does not provide an override.
  • Detect missing required arguments nested under composed JSON Schemas such as anyOf and oneOf, so eligible incomplete input can use fallback.
  • Isolate nested resolved arguments from handler mutation and preserve consistent result/audit values.
  • Stop exposing the registry's mutable internal validator object.
  • Reject handler dictionaries that are not strict JSON-serializable and normalize them to HANDLER_ERROR.

Boundaries

  • Do not add direct ChatAgent tool mode, built-in event plugins, batch scheduling, or new UI behavior.
  • Preserve extra_body={} as an explicit override; only None means use the configured default.
  • Do not broaden fallback to complete-invalid input; only recursively discovered missing-required errors qualify.
  • Keep event payloads as dictionaries and reject, rather than coerce, sets, arbitrary objects, NaN, or Infinity.

Files

  • Modify: src/agent_lab/application/event_agent.py
  • Modify: src/agent_lab/application/events/kernel.py
  • Modify: src/agent_lab/application/events/registry.py
  • Modify: tests/test_event_agent.py
  • Modify: tests/test_event_kernel.py

Requirement Execution Loop

Plan

  1. Add one RED regression per reviewed issue and verify each fails for the reported reason.
  2. Fix configuration propagation and composed-schema error classification without changing valid call behavior.
  3. Deep-copy arguments at handler/result boundaries and encapsulate validator usage inside the registry.
  4. Validate handler payloads with the same strict JSON rules used for arguments.
  5. Run focused tests, full tests, diff checks, and renewed specification/quality reviews.

Act

  • Call EventAgent.handle() without extra_body while constructor params contain a marker; assert the provider receives the marker. Also assert explicit {} remains {}.
  • Use anyOf/oneOf branches containing required; assert missing data invokes fallback once, while nested complete-invalid data does not.
  • Mutate a nested handler argument; assert the original request, EventResult.arguments, and raw_arguments remain consistent and unchanged.
  • Replace public validator retrieval with a registry-owned validation operation; prove callers cannot mutate future validation behavior.
  • Return payloads containing object(), set, NaN, and Infinity; assert stable HANDLER_ERROR and no downstream json.dumps() failure.

Observe

Confirm the kernel remains generic and deterministic-first while all externally observable results are JSON-safe, immutable from plugin side effects, and consistent for audit/comparison metrics.

Update

  • Re-run final Todo 45 specification and quality reviews.
  • Mark Todos 45 through 45.4 done only after fresh full verification.

Verification

  • UV_CACHE_DIR=.uv-cache uv run pytest tests/test_event_kernel.py tests/test_event_agent.py -q
  • UV_CACHE_DIR=.uv-cache uv run pytest
  • git diff --check