Skip to content

v1.9.1 — searches no longer fail with HTTP 400 (#3)

Choose a tag to compare

@zw008 zw008 released this 13 Oct 08:10
· 44 commits to main since this release

Every log_search / log_aggregate call (and vmware-log-insight search) was rejected by a real appliance with
HTTP 400, while doctor passed.
The query builder sent each constraint as three path segments —
timestamp/LAST/3600000, text/CONTAINS/error — but Log Insight reads a constraint as a field followed by ONE
segment holding the operator and value separated by a space: timestamp/LAST%203600000, text/CONTAINS%20error.
doctor never builds a query, which is why it stayed green. Reported in
#3; the reporter's hand-written curl had the right
form.

  • All constraints now use field/<OPERATOR value>: relative window, absolute >/< window, text CONTAINS, and
    every (field, operator, value) filter. EXISTS is sent as field/EXISTS (it previously got a trailing
    empty segment).
  • The operator+value segment is percent-encoded as a whole, so a value containing / or spaces still stays one
    segment.
  • New regression test_constraint_wire_grammar.py checks the path that actually leaves the HTTP client (not just
    the builder's string), including the exact request from the issue. Reverting the fix turns all three tests red.

Dependencies. uv.lock moves pyjwt 2.13.0 → 2.15.0 (supersedes Dependabot
#2; 2.15.0 carries an upstream fix for deeply nested
token payloads). pyjwt reaches this skill only transitively through mcp; the published wheel's requirements are
unchanged, so this only moves the locked dev/test environment.