Added
-
A page the binary serves about itself, at
/_feint/ui, opened by
feint ui. Served on the loopback interface only — off loopback it is not
mounted at all — read-only, with no authentication by design, and with no
dependency: three files embedded in the binary, no build step, no framework.
It shows served against driven against probed without ever adding them up, the
versioned gap with each provider's upstream API, everything the session
created, and a live log of the calls. Every aggregate opens onto what it is
made of. -
GET /_feint/resources, an inventory read from the store rather than from
a provider API, so a pack nobody has written yet is listed with its own
vocabulary. Whole attributes, never a curated subset. It is the one endpoint
that publishesRuntime— the container backing a machine — and a test drives
every provider read route to prove none of them does. -
GET /_feint/eventsandGET /_feint/trace, the call log: a bounded ring
of 256 exchanges, as a one-way event stream for the page and as a JSON array
for a script or a CI job that reads it after the fact. Each line carries the
time, the status, the duration, the operation, the fields a client sent that no
handler read, and the fields an answer carried that the provider's own API
description does not define. Both were already computed and displayed nowhere. -
The record's shape is
internal/trace.Exchange, published once so the
transcriptfeint proxywill write (X-2) and the replay that reads it (X-3)
share one format with the emulator's own ring. -
The coverage artefacts carry their per-operation verdicts, with the reason
each declined operation was declined. 625 arguments that were previously
reachable only by running a scan against an SDK checkout. -
The page is checked in a real browser, and photographed by the same run.
mise run docs:uiloads it against a live emulator, waits for its data, and
asserts eighteen values against what the endpoints answered — the counts, a
created resource and its attributes, a refusal reason in full, a logged call
and the field no handler read — before writing the images the README shows. It
runs on every pull request.docs/limits.mdsays what it covers and what it
leaves out; the short version is that a renamed node now fails CI and an ugly
stylesheet still does not. -
The screenshots are on the existing freshness rail.
feint docs --check
compares a digest of the page with the one recorded beside the images, so a
change to the page without regenerating them fails the pre-commit hook, the
docs gate and the release preflight. It compares the page, never the pixels:
the page renders wall-clock values, so a byte comparison would be red forever.
Changed
/_feint/healthanswerscapabilities: nullwhen the machine driver
declares nothing, instead of an object of fivefalse. Silence and refusal
were indistinguishable on the wire, so a reader printed "no" on behalf of a
driver that had never been asked.feint statusnow says
isolation: not declaredin that case. A driver that declares — every one
that ships today, including the no-op — is unaffected./_feint/conformancecarriesprobes, the per-operation probe counts,
alongsidecalls. The scalarprobedcould say how many routes only a probe
had reached, never which.