Repository navigation
Remove dead NodeFilter/QueryNodesInput fields and the silent property-filter fetch cap - #3039
Conversation
…-filter fetch cap - NodeFilter: delete created_after/created_before/modified_after/modified_before and their builders; nothing read them. Date-range querying is served by QueryService's metadata filters (closes #2978) - QueryNodesInput: delete parent_id/root_id, which were only ever logged via tracing::warn! and never filtered anything (closes #3009) - NodeService::query_nodes: drop the 10,000-row fetch cap on property-filtered queries, which silently lost every match past it. The in-memory filter stays (it is the only ADR-078 maps_to read-scope implementation); it now reads the whole type-scoped set before paginating. Regression test places the lone match after 10,000 non-matching rows (closes #3010) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Pragmatic Code Review: PR #3039Review Type: Initial review (the PR had no reviews or comments before this one) Requirements Check
Leftover references to the deleted items: I searched Code Review Findings🔴 CriticalNone. 🟡 Improvements
🟢 Nits
Positives
Recommendation: APPROVEThis is a net improvement with no blockers. The stale "fetch cap" comment at |
malibio
left a comment
There was a problem hiding this comment.
Automated pragmatic-code-review: APPROVE (posted as a comment — GitHub blocks self-approval). Full findings in the review comment above.
… cap - scope_context_tests doc no longer cites the removed 10,000-row cap; states the per-row I/O risk is now unbounded - query_nodes comment names the worst case (no node_type reads every node) - ops::query_nodes doc no longer says over-fetching Skipped: test's 10_000 literal (its doc comment explains it) and the node.rs doc-example nit (reviewer confirmed it accurate). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Addressed review in 1225254 (comment-only; fmt + cargo check clean, pushed with --no-verify as a docs-only change):
Re-review: not needed — comments only, no logic change. |
Closes #3009, closes #3010, closes #2978.
Changes
#2978 —
NodeFiltertemporal fields. Deletedcreated_after/created_before/modified_after/modified_beforeand theirwith_*builders; nothing read them andNodeQueryhad nowhere to put them. The doc example that advertised "tasks created in last 7 days" is gone too. Date-range querying stays withQueryService's metadata filters.#3009 —
QueryNodesInput.parent_id/root_id. Deleted both fields and thetracing::warn!-only handling. All 7 construction sites (agent tools, skill pipeline, prompt assembler, two integration tests) updated.#3010 — property-filter fetch cap. Chose fix over delete: the in-memory property-filter branch in
NodeService::query_nodesis the only implementation of ADR-078 base-scopemaps_tovalue resolution (QueryServicedoesn't do it;extends_subtype_identity_testcovers it), so deleting it would remove that behavior. Instead the 10,000-row cap is gone — the branch reads the whole type-scoped set, then filters and paginates in memory. This matches the collection-scoped path, which already loads the full member set.A paged scan was considered and rejected: an empty page past the last row trips the store's title stem-match fallback, and id-scoped queries ignore limit/offset.
Tests
test_query_with_property_filters_sees_rows_past_ten_thousand: 10,000 non-matching tasks, then the single match. Fails onmain, passes here.🤖 Generated with Claude Code