DD-338 Phase B.2 — caldav-blade-mcp catalog flips (1 stable + 5 unsorted) #21

Merged
piersdd merged 1 commit from feat/dd-338-b2-caldav into main 2026-05-23 04:56:18 +00:00
piersdd commented 2026-05-23 04:55:20 +00:00 (Migrated from github.com)

Summary

Catalog-side of DD-338 Phase B.2. Paired with caldav-blade-mcp PR #1 (source-side changes + tests).

Six granularity.deterministic_ordering flips on caldav-blade-mcp.json:

Tool Old New Rationale
cal_info unstable stable Single-record return — trivially satisfies the byte-identical contract per B.1.a precedent
cal_calendars unstable unsorted Multi-provider — no atomic cross-provider sort guarantee
cal_events_batch unstable unsorted Per-calendar grouped; cross-provider set-semantics
cal_search unstable unsorted Cross-provider event interleave is honest-set
cal_today unstable unsorted Multi-provider grouped
cal_week unstable unsorted Multi-provider grouped

Honest-degraded-declaration precedent

The unsorted declarations mirror the architect-ratified cf_d1_query precedent from B.1.b (joined by tailscale tag-filter client-side). Where the blade cannot honestly fulfil the deterministic contract, declare what you actually deliver — set semantics — rather than fake-comply with an internal sort. The assembler downstream is responsible for canonical ordering with full provenance.

DD-338 honest-degraded-declaration registry now has three entries:

  1. cf_d1_query — unstable (user-supplied SQL precludes blade-side reorder)
  2. tailscale tag-filter — client-side (server returns full set; blade filters in-process)
  3. cal_* multi-provider (this PR) — unsorted (cross-provider interleave is honest-set)

Architect OQ locks honoured

  • OQ-1 (PRIMARY): honest-unsorted across all 5 multi-record tools ✅
  • OQ-2: no defensive sort under unsorted declaration ✅
  • OQ-3: cal_calendars partial-tolerance softening lands in paired source PR ✅
  • OQ-4: error-row render style at implementer's discretion ✅

Test plan

  • npm test green: 164/178 passing (14 skipped, 0 fail) after node scripts/build-forge-context.js
  • No tool changes its scope_filtering or audit_surface declaration (out of scope for B.2)

Convention #23 reader-audit advances 43 → 44 migrated blade-tool-sets on merge of both paired PRs.

🤖 Generated with Claude Code

## Summary Catalog-side of DD-338 Phase B.2. Paired with [`caldav-blade-mcp` PR #1](https://github.com/Groupthink-dev/caldav-blade-mcp/pull/1) (source-side changes + tests). Six `granularity.deterministic_ordering` flips on `caldav-blade-mcp.json`: | Tool | Old | New | Rationale | |---|---|---|---| | `cal_info` | `unstable` | `stable` | Single-record return — trivially satisfies the byte-identical contract per B.1.a precedent | | `cal_calendars` | `unstable` | `unsorted` | Multi-provider — no atomic cross-provider sort guarantee | | `cal_events_batch` | `unstable` | `unsorted` | Per-calendar grouped; cross-provider set-semantics | | `cal_search` | `unstable` | `unsorted` | Cross-provider event interleave is honest-set | | `cal_today` | `unstable` | `unsorted` | Multi-provider grouped | | `cal_week` | `unstable` | `unsorted` | Multi-provider grouped | ## Honest-degraded-declaration precedent The `unsorted` declarations mirror the architect-ratified `cf_d1_query` precedent from B.1.b (joined by `tailscale` tag-filter `client-side`). Where the blade cannot honestly fulfil the deterministic contract, **declare what you actually deliver** — set semantics — rather than fake-comply with an internal sort. The assembler downstream is responsible for canonical ordering with full provenance. DD-338 honest-degraded-declaration registry now has **three** entries: 1. `cf_d1_query` — `unstable` (user-supplied SQL precludes blade-side reorder) 2. `tailscale` tag-filter — `client-side` (server returns full set; blade filters in-process) 3. `cal_*` multi-provider (this PR) — `unsorted` (cross-provider interleave is honest-set) ## Architect OQ locks honoured - OQ-1 (PRIMARY): honest-unsorted across all 5 multi-record tools ✅ - OQ-2: no defensive sort under `unsorted` declaration ✅ - OQ-3: cal_calendars partial-tolerance softening lands in paired source PR ✅ - OQ-4: error-row render style at implementer's discretion ✅ ## Test plan - [x] `npm test` green: **164/178 passing** (14 skipped, 0 fail) after `node scripts/build-forge-context.js` - [x] No tool changes its `scope_filtering` or `audit_surface` declaration (out of scope for B.2) Convention #23 reader-audit advances **43 → 44** migrated blade-tool-sets on merge of both paired PRs. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Stallari/plugins!21
No description provided.