Files
http-latency-prober/docs/summaries/2026-07-02-10-22-hxprobe-usage-doc-and-makefile.md
Jan Novak f487a4b1bd docs: hxprobe plans, summaries, explanations, usage, and changelog
Plans (docs/plans/):
- 2026-07-01-23-47-py-hxprobe-httpx.md — initial httpx probe design
- 2026-07-02-09-32 through 14-05 — standalone project, toolchain, usage
  doc + Makefile, file input (-f), simplification pass, run-summary footer

Summaries (docs/summaries/): one per completed feature, recording what
was actually built, deviations from the plan, and verification steps

Explanations (docs/explanations/): two deep-dives written during review —
hxprobe concurrency model and worst-exit-code + render-loop analysis

Usage (docs/usage/hxprobe.md): overview with pointer to hxprobe/USAGE.md
for the full runnable reference

Walkthrough (docs/py-latprobe-walkthrough.md): narrative tour of the
latprobe Python package for interview / code-review context

CHANGELOG.md: entries for all hxprobe features (toolchain, usage doc,
file input, simplification, run-summary footer)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-02 13:22:59 +02:00

75 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Summary: hxprobe usage reference doc + standalone Makefile
Plan: [docs/plans/2026-07-02-10-22-hxprobe-usage-doc-and-makefile.md](../plans/2026-07-02-10-22-hxprobe-usage-doc-and-makefile.md)
## What was built
- **`hxprobe/USAGE.md`** (new): a "Runnable Usage Reference" matching the
depth/format of `python/configs/usage-latprobe.md` (concrete `sh` command
→ real captured output, brief explanatory notes, `---` section
separators). 16 cases: basic, verbose (HTTPS, plain HTTP, redirect
followed, `--no-follow-redirects`, `--no-http2`, TLS failure, DNS
failure), sampling, multi-URL, `--fail`, JSON, JSON+verbose, timeout,
exit-codes table, Makefile shortcuts (both `hxprobe/Makefile`'s own and
the parent repo's `hx-*` ones). Placed inside `hxprobe/` per the user's
explicit choice, so the doc travels with the project if it's ever
extracted to its own repo.
- **`docs/usage/hxprobe.md`** (edit): one-line pointer added at the top to
`hxprobe/USAGE.md`. No other changes.
- **`hxprobe/Makefile`** (new): standalone, `help`/`deps`/`run`/`lint`/
`fmt`/`test`/`test-integration`/`check`/`clean`, same auto-generated
`## comment` help style as the root Makefile. Deliberately independent
from the root Makefile's `hx-*` targets (neither calls into the other) —
explicit user decision over the "delegate" alternative.
## Key design decisions
- **Every output in `USAGE.md` is real, freshly captured this session** —
10 of 16 cases were run live during implementation specifically for this
doc (TLS failure, sampling ×2, multi-URL, `--fail`, JSON ×2, timeout,
basic, plain-HTTP), the rest reused real captures from earlier in the
same session (redirect-follow, `--no-follow-redirects`, `--no-http2`, DNS
failure) since the code hadn't changed since those were taken. No numbers
were fabricated or extrapolated.
- **Timeout example uses `192.0.2.1`, not `10.255.255.1`.** Tested both:
`10.255.255.1` resolves to an immediate `connect: Connection refused` in
this dev sandbox (the sandbox's network layer actively rejects the
packet rather than dropping it silently), which would misrepresent the
timeout path. `192.0.2.1` (RFC 5737 TEST-NET-1, reserved/unreachable)
reliably produces a genuine ~500ms timeout here, so that's what the doc
uses and explains.
- **No delegation between the two Makefiles**, per explicit user
instruction — both have complete, independent implementations of the
same `uv sync`/`uv run pytest`/`ruff` commands. This is deliberate
duplication: a change to one Makefile's command flags won't silently
break the other, at the cost of needing to update both if the underlying
`uv run ...` invocations ever change.
- **`hxprobe/Makefile` target names have no `hx-` prefix** (`run`, `test`,
not `hx-run`, `hx-test`) since the prefix's whole purpose — disambiguating
from `go-*`/`py-*` targets in the same file — doesn't apply once you're
already inside `hxprobe/`'s own Makefile.
## Deviations from the plan
One, driven by what the live network in this sandbox actually does: the
plan didn't anticipate the timeout target needing to change from
`10.255.255.1` (used in `latprobe`'s own timeout example) to `192.0.2.1`.
Discovered and resolved by testing both live before writing the doc, rather
than assuming `latprobe`'s example target would work identically for
hxprobe.
## Verification
- `cd hxprobe && make help` — lists all 9 targets, no dependency on the
root Makefile
- `cd hxprobe && make run ARGS="-v https://example.com"` — matches
`make hx-run ARGS="-v https://example.com"` output shape from the repo
root (both Makefiles agree independently)
- `cd hxprobe && make check` — 28 hermetic tests pass (lint + test)
- `cd hxprobe && make test-integration` — 9 live tests pass
- Every command block in `USAGE.md` was actually executed during
authoring; output pasted directly from the terminal, not hand-edited
beyond JSON float-precision rounding (documented as such in the doc)
- `git diff Makefile` — confirms the root Makefile's `hx-*` section is
unchanged by this task