Skip to content

v0.1.14

Choose a tag to compare

@Muizzkolapo Muizzkolapo released this 02 May 13:01
· 134 commits to main since this release
1bf7d9b

v0.1.14

Breaking Changes

  • read_target() now validates _state field on all records (fail-closed). Pre-v0.1.14 target data requires deleting agent_io/target/ and re-running.
  • StorageBackend subclasses must implement _read_target_raw() (template method)

Enhancements

  • Record State MachineRecordState enum (8 states), RecordEnvelope.transition() as single lifecycle mutator, executor boundary reset, derive_disposition(), schema enforcement
  • Unified processingUnifiedProcessor with ProcessingStrategy protocol replaces RecordProcessor + inline pipeline logic
  • Batch enrichment — deduplicated EnrichmentPipeline from BatchResultStrategy
  • Tracking field propagationversion_correlation_id correctly propagated across online LLM, batch, and envelope paths
  • Frontend — guard-skip detection via metadata.reason, "upstream unprocessed" label, target_id as React key for 1→N expansions
  • Prompt trace — keyed by target_id (not source_guid) for correct 1→N matching

Bug Fixes

  • Batch guard-skip reason string normalized ("guard_skipped""guard_skip")
  • UI guard-skip detection uses metadata.reason instead of all-null heuristic
  • PassthroughItemBuilder stamps _state on tombstones (prevents downstream validation failure)
  • Guard prefilter excludes lifecycle keys from copy (prevents illegal transitions)
  • version_correlation_id assigned on 1→N expansions for non-versioned actions
  • data-screen.tsx React key uses target_id for expansion deduplication
  • Batch api_key resolution from action config
  • Scanner typekind config key fix

Refactoring

  • Extracted OnlineLLMStrategy, FileToolStrategy, HITLStrategy, BatchResultStrategy
  • Deleted RecordProcessor — all callers migrated to UnifiedProcessor
  • Centralized disposition writing into result_collector.py
  • Killed shadow observe and shadow passthrough paths
  • Migrated pipeline dispatch to UnifiedProcessor

Internal

  • SQLite schema enforcement (_enforce_schema + detail column)
  • record/reasons.py — canonical reason string constants
  • 40+ new tests across record lifecycle, transitions, executor reset, dispositions