Skip to content

Follow-up: deferred review findings from PR #952 #973

Description

@philcunliffe

Deferred findings from the neutral review of PR #952 (hyp query grep, LLP 0265 T5), triaged non-blocking at head b25c9cf4fdd46b5db3c749a02a067a6eb8a98918. Each was re-verified against the code before deferral, including the server side via the hypaware-server repo.

1. MEDIUM: --remote can still forge a silent zero-hit for a malformed --from/--to

dayBound (src/core/search/grep_verb.js:184, applied at :109-110) guards only the local path: runVerbCommand never calls operation when --remote is set (src/core/cli/verb_command.js:100-127), so params travel verbatim. Verified server-side that the gap is real, not hypothetical: the server's MCP grep_search operation passes from/to through with only a typeof check (hypaware-server src/daemon.js:1213) into a lexicographic day comparison (src/search/grep-search.js:84-92), while the HTTP /v1/search route DOES validate (src/http/routes-search.js:64-68, isValidPartitionDate, 400 invalid_date). So hyp query grep needle --from 2026-8-1 --remote <target> returns exit 0, zero rows, empty stderr.

Why deferred, per review round 2 finding 4: every clean client-side fix leaves this verb. Options, in rough order of leverage:

  • hypaware-server: mirror the /v1/search route's isValidPartitionDate check inside the MCP grep_search operation (src/daemon.js:1213). Cheapest, and fixes every MCP caller, not just this CLI. The asymmetry between the route and the tool is a server defect that predates PR hyp query grep: the verb that makes grep a surface (LLP 0265 T5) #952.
  • Kernel: add a pattern keyword (plus a human-readable noun for error text) to VerbInputProperty so argvToParams rejects shape errors before dispatch. This is a published-contract change (hypaware-plugin-kernel-types.d.ts, "a deliberately small JSON-Schema subset") and wants an LLP first. It would also ride into the MCP tool schema for free (verb_codec.js:282 strips only greedy).
  • Kernel alternative: a verb-level pre-dispatch validate hook that runs on both local and remote paths.

2. LOW: --remote prints two overlapping truncation notices, one SQL-shaped

serverCapNotices (src/core/mcp/remote_verb.js:162) fires on any structured.truncated and reads rows/row_count/server_cap.rows, which a grep result does not carry (it has hits), so it degrades to the bare "remote: result truncated - narrow the query, or read the Iceberg archive directly for bulk" beside the verb's own line. Both lines describe the server cap (LLP 0033 #two-truncations intends server cap vs client display budget), and bulk Iceberg reads are not grep's escape hatch (query_sql is). Fix edits shared remote machinery and changes the stderr contract for every verb, so it is an LLP 0033 question. Flagged for T7 (#954).

3. LOW, cosmetic: the 518-character summary is also the hyp query --help subcommand row

renderGroupHelp writes child.summary verbatim with no wrap or truncation (src/core/cli/group_help.js:103), so grep renders as one 518-character line next to ~40-70 character neighbours. Alignment survives (per-row padding); ugly, not broken. The verbatim coverage clause is required by LLP 0264 #verb for the MCP surface, so the fix belongs in the CLI group-help renderer (truncate long summaries in the table; full text stays one hyp query grep --help away). Flagged for T7 (#954).

4. Release-note item: server displacement of the kernel grep_search twin (LLP 0264 collision)

hypaware-server #364 (LLP 0178, "The server's grep_search outranks a kernel-shipped twin") is verified MERGED (2026-08-19), so the displacement half exists. Residual risk is deployment ordering only: a server host running a pre-#364 server build with a kernel containing PR #952 would silently serve local-cache grep under the server's tool name. Record in the release notes of the first kernel release containing this verb that server hosts must be on a #364-or-later server build first.


Backlink: PR #952 (triaged at b25c9cf4). Review records: rounds 1 and 2 on the PR thread.

Metadata

Metadata

Assignees

No one assigned

    Labels

    neutral:fixDelegate this issue to neutral for an autonomous fix attempt (reproduce -> fix -> PR)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions