Files
activity-core/workplans/ACTIVITY-WP-0011-event-payload-context-resolver.md

180 lines
6.4 KiB
Markdown

---
id: ACTIVITY-WP-0011
type: workplan
title: "Event Payload Context Resolver"
domain: custodian
repo: activity-core
status: finished
owner: codex
topic_slug: custodian
created: "2026-06-18"
updated: "2026-06-18"
state_hub_workstream_id: "4efe4bcf-2148-4489-b57c-87f6039d4ed5"
---
# ACTIVITY-WP-0011 - Event Payload Context Resolver
## Context
State Hub message `d561ebd7-ba01-4dc6-8ffc-fe87d45304ee` from
`kaizen-agentic` handed off an urgent blocker for LOOP-WP-0002:
event-triggered definitions can receive the triggering EventEnvelope JSON, but
activity-core did not bind `source.type: event-payload` into the context
snapshot. The immediate customer is the disabled
`coulomb-low-success-rate-review` ActivityDefinition, whose
`flag-low-success-rate` rule needs to evaluate
`context.metrics.summary.success_rate`.
This is in activity-core scope because the repo owns ActivityDefinition context
resolution and the Event Bridge workflow boundary. The remaining event type
registry and live NATS smoke evidence are cross-repo/operator gates and should
wait in State Hub rather than depending on local kubectl or ad hoc live cluster
access from this repo.
## Implement Event Payload Resolver
```task
id: ACTIVITY-WP-0011-T01
status: done
priority: high
state_hub_task_id: "5c87ce0b-3bd0-4a44-aae5-10d7586c939e"
```
Register resolver type `event-payload` so event-triggered definitions can bind
the triggering EventEnvelope attributes into `context.*`.
Done when:
- `activity_core.context_resolvers` imports and registers an `event-payload`
resolver.
- `resolve_context` parses `event_envelope_json` once and passes the parsed
envelope to registered resolvers.
- `source.type: event-payload` extracts envelope `attributes`.
- `bind_to: context.metrics` strips the `context.` prefix and unwraps a
single-key `{"metrics": ...}` attributes payload into `snapshot["metrics"]`.
- Missing or malformed envelopes fail required sources visibly and bind `{}` for
optional sources.
2026-06-18: Completed in `src/activity_core/activities.py` and
`src/activity_core/context_resolvers/event_payload.py`.
## Cover Binding And Rule Evaluation
```task
id: ACTIVITY-WP-0011-T02
status: done
priority: high
state_hub_task_id: "c6f7dea6-9adc-4997-a22e-4bf2e94dc05a"
```
Add focused tests for the handoff acceptance contract.
Done when:
- sample `kaizen.metrics.recorded` envelope attributes resolve to:
`{"metrics": {"agent": "coach", "project": "kaizen-agentic", "summary": ...}}`;
- `flag-low-success-rate` evaluates
`context.metrics.summary.success_rate < 0.8`;
- optional missing envelopes bind `{}`;
- required missing envelopes raise a visible activity failure.
2026-06-18: Completed in `tests/test_resolve_context_binding.py`. Focused
tests passed:
`.venv/bin/python -m pytest tests/test_resolve_context_binding.py tests/test_rule_evaluation_activity.py`
reported 8 passed, and adjacent rule tests
`.venv/bin/python -m pytest tests/rules/test_evaluator.py tests/rules/test_actions.py`
reported 55 passed.
## Wait For Event Type Registry
```task
id: ACTIVITY-WP-0011-T03
status: done
priority: high
state_hub_task_id: "a4f277de-eb83-41bc-860e-b26586c72495"
```
Confirm that `kaizen.metrics.recorded` is registered in the shared event type
catalog through the owning State Hub / producer workflow.
Done when:
- State Hub or the producer-owned event catalog exposes
`kaizen.metrics.recorded` with an attributes schema covering
`metrics.agent`, `metrics.project`, and `metrics.summary.success_rate`;
- the registry decision names the owning repo for future schema changes;
- activity-core has no local-only event type drift from the producer contract.
Registry ownership: the event type is producer/catalog owned. Activity-core
accepted State Hub-backed registry confirmation before closing the workplan.
2026-06-18: Closed from State Hub acknowledgement
`3efb56d8-c3d6-4308-82ea-76eaaa172255` from `kaizen-agentic`. The producer
registered `kaizen.metrics.recorded` in `kaizen-agentic/event-types/` with
status `active`, publisher `kaizen-agentic`, and schema fields
`agent`, `project`, `summary.success_rate`, `summary.execution_count`, and
`summary.avg_quality`. The sync command reported was
`ACTIVITY_DEFINITION_DIRS=~/coulomb-loop:~/kaizen-agentic make sync-event-types`.
## Wait For Live Event Smoke
```task
id: ACTIVITY-WP-0011-T04
status: done
priority: high
state_hub_task_id: "3b636d5e-8f93-49b4-ae53-3da4f736a4d9"
```
After T03, run the live event-triggered path without relying on local kubectl
from activity-core.
Done when State Hub records non-secret evidence that:
- a sample `kaizen.metrics.recorded` envelope was published on the expected NATS
subject;
- activity-core triggered `coulomb-low-success-rate-review`;
- the resolved context snapshot contained `context.metrics.summary.success_rate`;
- `flag-low-success-rate` matched and produced the expected task/report output;
- any disabled-definition or operator-controlled enablement state was recorded.
Execution ownership: this cross-repo/live-runtime smoke was owned by the event
producer, customer definition owner, and cluster/operator path. Activity-core
accepted the non-secret evidence from State Hub.
2026-06-18: Closed from State Hub acknowledgement
`68bfcd0d-7c47-4b42-85fc-64d63f38a909` from `kaizen-agentic`.
Supplier confirms R1 acceptance criteria met and LOOP-WP-0002 closed. Evidence:
NATS `activity.kaizen.metrics.recorded` triggered
`coulomb-low-success-rate-review` (`da7a9af7`), run
`e61554c6-1e67-5fa1-b34e-478d154a188e`, `tasks_spawned=1`, with
`metrics.summary.success_rate=0.75`.
## Close Handoff
```task
id: ACTIVITY-WP-0011-T05
status: done
priority: medium
state_hub_task_id: "5169d8c5-769f-4272-97cf-c25b31087601"
```
Close the urgent R1/live-smoke handoff once State Hub has acknowledgement that
the resolver-side blocker is removed. The broader workplan remains blocked only
on T03 event-type registry confirmation.
Done when:
- State Hub message `d561ebd7-ba01-4dc6-8ffc-fe87d45304ee` is answered or
linked to this workplan;
- `kaizen-agentic` / LOOP-WP-0002 can proceed without an activity-core code
blocker;
- this workplan has no remaining activity-core code or live-smoke blocker.
2026-06-18: Closed from State Hub acknowledgement
`68bfcd0d-7c47-4b42-85fc-64d63f38a909`. The original handoff message
`d561ebd7-ba01-4dc6-8ffc-fe87d45304ee` was answered, and the live smoke
evidence in T04 unblocks LOOP-WP-0002.
2026-06-18: Workplan finished. T03 registry confirmation, T04 live event smoke,
and T05 handoff closure are all done in State Hub.