vestige/crates
Sam Valladares ff0324a0e5 fix(schema): honor changelog start/end + intention include_snoozed
Both parameters were advertised in the MCP tool schemas since v1.7+ but
were silently ignored at runtime — a schema-contract violation. Any
caller that set them got unfiltered results with no error or warning,
which is the worst possible failure mode for a public tool surface.

changelog.rs
  - Parse `start` / `end` as ISO-8601/RFC-3339 timestamps; return an
    explicit error on malformed input (previously: silent drop).
  - In system-wide mode, over-fetch 4× limit when a time window is set,
    then apply an inclusive [start, end] filter in Rust before the
    sort+truncate. SQL-level filtering is a v2.1+ optimisation.
  - Response JSON gains a `filter` field echoing the applied bounds so
    callers can confirm the window was honored.
  - Per-memory mode still ignores the window (semantically meaningless
    when scoped to one memory's transition history).

intention_unified.rs
  - `execute_check`: when `include_snoozed=true`, fold snoozed
    intentions back into the check pool so their time/context triggers
    can wake them when a matching condition appears. Previously
    snoozed intentions were invisible to check regardless of the arg.
  - Deduplicates defensively via a HashSet on intention.id in case
    storage ever returns overlap.

Tests: 9 changelog + 37 intention_unified tests continue to pass.
Full vestige-mcp lib suite 419 passing, 0 failures.
2026-04-19 16:53:10 -05:00
..
vestige-core feat(db): V11 migration drops dead knowledge_edges + compressed_memories tables 2026-04-19 16:44:41 -05:00
vestige-mcp fix(schema): honor changelog start/end + intention include_snoozed 2026-04-19 16:53:10 -05:00