|
@@ -0,0 +1,63 @@
|
|
|
|
|
+# Todo 45.4 Event Kernel Quality Boundaries Plan
|
|
|
|
|
+
|
|
|
|
|
+**Status:** in_progress
|
|
|
|
|
+
|
|
|
|
|
+## 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`
|