## 2026-06-27 (subagent budgets typed-default guardrail — TEST ONLY, no version bump) — branch fix/subagent-budgets-typed
State: consumers (positioning/segmenting/amz/backend) omit `budgets` on `SubAgentArchetypeDescriptor` and rely
on its `default_factory=SubAgentBudgets`. No source change; the schema was already correct.

zma: fix the `budgets={}` drift cleanly across repos and lock the schema-owner contract with tests.

Ai: added two tests to `keble-helpers/tests/test_ai_subagent.py`: (1) a descriptor built with NO `budgets`
kwarg yields a real `SubAgentBudgets()`; (2) `model_dump()`→`model_validate()` round-trips with `budgets` as a
JSON object — locking the rule that dict `budgets` must stay accepted (never add a dict-banning validator).
Test-only, no `keble-helpers` version bump / republish.

## 2026-06-27 (Agent-deps unification — keble-db 1.7.1 follow-up)
State: keble-db 1.7.1 — `AgentDbDeps.aneo4j`/`aqdrant` relaxed to Optional[..]=None.

zma: same unification program; keble-task lazy-retry + non-graph runtimes build deps without neo4j/qdrant.

Ai: `AgentDbDeps.aneo4j: AsyncDriver | None = None` and `aqdrant: AsyncQdrantClient | None = None`. Relaxing-only (all existing callers pass real clients), so it unblocks `TaskHandlerRequest(AgentDbDeps)` construction in the read/lazy-retry path that has no graph/vector client. Consumers that require them still guard at use.

## 2026-06-27 (Agent-deps unification — Phases 1-2)
State: keble-helpers 1.30.0 / keble-db 1.7.0 — unified agent deps + retire ProgressTask from deps

zma: clean-first, code-breaking refactor — one cross-cutting deps base carries owner/event-emitter/usage-recorder; retire ProgressTask from shared agent deps (keep only in keble-amz shuffle); per-repo ActionType enums; backend-owned single event router.

Ai (Phase 1, keble-helpers 1.30.0): `AgentBaseDeps` now carries `owner: str|None`, `owner_type: OwnerType|None`, `owner_scope: OwnershipScope` (NEW enum OWNER/IGNORE, secure default OWNER), `event_emitter: AgenticEventEmitter` (default_factory), `usage_recorder: UsageAccountingRecorderProtocol|None` (SkipValidation) — all defaults so existing constructions stay valid; `deps.py` now imports `.events`+`.usage_accounting` (no cycle). Added `KEBLE_KEEPA_ANALYSIS`+`KEBLE_AMZ_SHUFFLE` to `AgenticActionEventSource`. New `tests/test_agent_base_deps.py`. Ai (Phase 2, keble-db 1.7.0): `AgentDbDeps(AgentBaseDeps)` now inherits the base; **removed `progress_task`**. Test rewritten to assert inheritance + no progress_task. BREAKING: any constructor passing `progress_task=` to AgentDbDeps now errors (fixed in downstream phases).

## 2026-06-12 (Round 3 Phase 3)
State: keble-helpers 1.22.0 — memory list/delete protocol

zma: Round-3 transparency UX — memory was invisible to users; the protocol had only arecall/aremember.

Ai: `ChatMemoryStoreProtocol` += `alist(owner, scope_type, limit, offset)` (newest-first, user-safe fields only) and `adelete(owner, scope_type, memory_id) -> bool` (owner-gated; foreign ids no-op False). BREAKING for runtime_checkable isinstance checks: legacy 2-method stores no longer satisfy the protocol — implementers (agch NoOp, backend Qdrant store) widen in lockstep. Tests updated + widening pin.

