Skip to content

Releases

RangeProbe 0.3.0

Choose a tag to compare

@0then0 0then0 released this 11 Nov 20:45

Added

  • Separate rangeprobe if-range URL CLI mode for bounded baseline, matching strong
    and random mismatching strong entity-tag probes. Conditional range support,
    observed 200 fallback, confirmed violations and insufficient evidence are separate.
  • Opt-in --weak-if-range conformance probe, explicitly labelled deliberately invalid
    client input, and a reproducible historical Starlette #3567 parent/fixed lab with
    pinned validation dependencies and an independent status/header/byte oracle.
  • Additive schema-1 If-Range evidence: exact validator octets in base64, final-request
    forwarding evidence, condition, identity, per-probe outcomes and run axes. No raw
    body capture or new Go runtime dependencies.

Changed

  • If-Range mode rejects If-Match preconditions and other user precondition headers;
    managed If-Range is stripped across origins under the existing credential policy.
  • This new mode gives incomplete evidence priority over allowed ignored Range in exit
    codes; legacy modes and old report meaning are preserved. Full-body observation is
    bounded and explicitly partial when cut off, independently of a successful fallback.

RangeProbe 0.2.0

Choose a tag to compare

@github-actions github-actions released this 07 Nov 11:36

Added

  • A static browser page (web/) that sends the key checks from the browser with fetch()
    (credentials: omit, bounded reads, deadlines, cancel), compares the bytes with slices of a
    local reference file and saves a JSON report. It reports the byte comparison and the header
    evidence it could read as two separate results, and says what a page cannot see (CORS-hidden
    headers, automatic content decoding, the cause of a rejected fetch). See docs/browser.md.
  • Four diagnostics that only the page emits: CONTENT_RANGE_NOT_VISIBLE,
    ENCODING_DECODED_BY_BROWSER, ENCODING_NOT_OBSERVABLE, FETCH_REJECTED.
  • testdata/shared: planner and judging cases that the CLI (internal/parity) and the page
    (web/test) both must satisfy.
  • lab/browser: a local stand with two origins and reproducible routes (correct, hidden
    Content-Range, no CORS, wrong bytes, ignored Range with a 256 MiB response, slow headers and
    body, gzip).

Changed

  • The conditions of BYTES_MISMATCH_REFERENCE, STATUS_206_NO_CONTENT_RANGE,
    NUMBER_OUT_OF_RANGE and CANCELLED now state their meaning for both capture modes. The CLI's
    behaviour is unchanged.

RangeProbe 0.1.1

Choose a tag to compare

@github-actions github-actions released this 01 Nov 10:14

Fixed

  • Long ETags no longer produce false conclusions. Two different ETags that began alike were
    shortened for display and then compared as equal, which reported a replaced file as
    OVERLAP_INCONSISTENT or REREAD_INCONSISTENT. ETags are now compared in full; a changed
    ETag makes the affected comparisons inconclusive.
  • --preconditions sent the shortened ETag in If-Match and got 412 from an unchanged
    resource. The complete value is sent now.
  • An ETag that is repeated, malformed or longer than 8000 octets is no longer treated as a
    strong validator: it gives no strong evidence and is never sent in If-Match.
    WEAK_VALIDATORS names the reason in etag_problem.
  • An ETag cut for display in a report now ends with a short SHA-256 of the whole value.

RangeProbe 0.1.0

Choose a tag to compare

@github-actions github-actions released this 01 Nov 09:23

First version.

Added

  • rangeprobe reference URL FILE: sends a bounded set of single-range requests and compares
    the response bytes with the matching slices of a local reference file, streaming, without
    loading the file into memory.
  • rangeprobe observe URL: checks status and header consistency, body length against the
    declared length, and agreement of overlapping and repeated reads, without claiming that
    any bytes are correct.
  • Ten checks: first byte, start, middle, end, suffix range, open-ended range, last-pos beyond
    EOF, unsatisfiable range, overlapping ranges, re-read.
  • Findings with stable IDs, required conditions, concrete evidence and stated limits
    (docs/diagnostics.md).
  • A full 200 answer to a range request is reported as range_ignored (exit code 2), not as an
    RFC violation.
  • Representation tracking: a changed strong ETag, length, Last-Modified or content coding
    makes the affected comparisons inconclusive instead of reporting a server defect.
  • Hard limits on requests, total bytes, bytes per response, per-request and total time, and
    redirects. Large or endless responses are cut off at the limit.
  • Redirect policy: bounded hops, no HTTPS to HTTP downgrade, user headers and If-Match dropped
    on cross-origin redirects, no Referer. TLS verification is always on.
  • Text summary, versioned JSON report (schema 1) and standalone HTML report. URL query values,
    credentials and local directories are redacted by default. Reports are written atomically and
    never overwrite existing files without --force.
  • Exit codes: 0 pass, 1 confirmed problem, 2 range ignored, 3 incomplete, 64 usage, 70 run error,
    130 interrupted.
  • RustFS lab for rustfs/rustfs#2506 in lab/rustfs
    with results (docs/lab/rustfs-2506.md).
  • Release packaging for Linux, macOS and Windows (amd64, arm64) with SHA256SUMS.