propose: MCP filter frame — typed query language with one named carve-out#128
Conversation
…-out Drafts propose/MCP-FILTER-FRAME-PROPOSE.md for issue #117. Locks the strict frame, the 7 frame-edge questions surfaced during grilling, `resolve` as a named-but-deferred primitive, and a 3-PR migration shape (step 1 already shipped as #122). Appendix A is the aligned-vocabulary audit handed to PR-FRAME-1. Builds on PR #89 V2 decisions (four primitives, closed EdgeType, rollup dot-keys read-only, _coerce_filter lossless JSON-decoding). Does not relitigate them.
Review (propose only)Overall: the frame is sound, the carve-out boundary is well reasoned, and the migration is correctly sequenced with step 1 already shipped. A few items worth flagging before locking. Code reference accuracyThe six Substantive notes
Minor
Verdict: Ready to move from draft toward lock after tightening #2 and #7; the rest are suggestions or doc fixes. |
Accepted: - Fix _coerce_filter line reference (79-98 -> 161-180). - Clarify §3.4.2 describe(fqn=...) as PR-FRAME-2 deliverable, not frame-only. - Ground §3.4.3 in shipped multi-value surfaces (symbol_kinds, exclude_roles). - Reframe Appendix A as vocabulary/concept alignment, not applicability bug. - Add 'both kinds list http_method' note to client_method audit row. - Narrow PR-FRAME-3 'telemetry hooks' to local counters / stderr; no observability stack assumed. Additional revision per user constraint (breaking changes allowed, no users): - Drop deprecation-alias scaffolding from PR-FRAME-1; rename in place. - Drop transition-window framing (§3.4.7 renamed to identifier-resolution fallback; not user-facing). - Strike V2.x/V3.0 ceremony from principle #8 and decision #14. - Drop alias-friendly risk row; update remaining risk rows accordingly.
|
Thanks. Revision pushed at Accepted
Verified — point 4UC table renders cleanly in the file. The truncation you saw is the GitHub diff view collapsing wide tables; the rendered file has all 18 rows with complete pipes. Beyond the review — soft-migration framing droppedThe review didn't flag this, but it's worth surfacing: the original draft carried deprecation-alias scaffolding in PR-FRAME-1, transition-window framing in §3.4.7, and V2.x-vs-V3.0 ceremony in principle #8 and decision #14. With no users (confirmed by the author), all of that is over-engineering — there's no migration cost to amortize. Dropped:
Net effect: the propose is shorter and sharper. PR-FRAME-1 in particular shrinks substantially. Ready to lock?After your re-read of |
Draft propose for issue #117 — locks the MCP filter frame.
Frame (locked)
What's in the propose
describe(fqn=…)lossless alias for Symbols only, within-field OR / cross-field AND, negation predicates strict, empty-filter = pagination safety net, revisit-trigger N=3 in 6 months, transition-window fallback documented.resolvenamed in the frame, designed in a separate propose. Two-decisions-in-one-thread anti-pattern avoided.resolve, butsearchcovers it acceptably.extra="forbid"+ per-kind applicability validation) already shipped as lossless-permissive frame: tactical no-regret fix for #117 silent-drop bug class #122 — confirmed in master atmcp_v2.py:60, 83, 130, 525, 557, 678.source_layer/role,target_service/target_microservice,client_method/http_method). Most are deprecation-alias-friendly → V2.x incremental.Builds on, does not replace
PR #89 V2 invariants are preserved: four primitives, closed EdgeType, rollup dot-keys read-only (decision #11),
_coerce_filterlossless JSON-decoding. This propose does not relitigate them.Sequencing
propose: design \resolve` tool` as a follow-up (named in §3.5 / decision feat: B2b HTTP_CALLS + ASYNC_CALLS extractor (PR-D1) #12).Open questions deferred to review
resolvedesign — its own propose.Status
Draft. Status header in the file is
draft. Will move tounder reviewwhen this PR opens,lockedafter consistency pass on review comments.