Conversation
…e synthetic values (#104) tests/recorded/ held its procedure and no recording. This is the first: sixteen responses from a 12.0.0 server run for the purpose, one file per capability of 0272 that has a request to make, with a library of three generated black videos so that the item routes answer with items. RECORDED.md beside them says what each file shows, what has no request to record and why, and what was scrubbed in the order tests/recorded/README.md gives. WHAT IS IN A FILE IS AN ENVELOPE rather than the bare body: capability, method, path, status, the three headers kept, the request body where there was one, and the body as parsed JSON or as a byte count where it was not JSON or was empty. A comparison of shape, which is what #104 builds over these, needs the status and the content type as much as the fields, and a bare body carries neither. The date header and the server's timing header are not kept, because a value that changes on every recording turns each re-recording into a diff nobody can read. THE SIXTEEN SYNTHETIC IDENTIFIERS ARE FEWER THAN THE RECORDING HAS, so which values share one is a choice and it is made rather than left to order of appearance: the twelve identifiers that name a thing, the server, the views, the film, the episodes, the series, the season and the play session, get one value each, and the nine digests, entity tags, image tags and the display-preferences id, take the remaining four with the last six sharing the sixteenth. Two things that differ in the recording therefore differ here, and RECORDED.md says which kind of value says nothing about the server when two of them are equal. THE FIRST RECORDING LANDS WITH WHAT ITS PROCEDURE SAID IT MUST. The -text rule for tests/recorded/ joins .gitattributes, with the two Markdown files under the prefix normalised after it, and tests/fixture_bytes.rs gains the assertion that makes it bite: every envelope is read as bytes and refused if it carries a carriage return or does not end in exactly one line feed. The README's paragraph saying the directory was empty and the rule absent is rewritten to what is now true, and so is the paragraph in .gitattributes that said the same. The check that judges these files refused nothing: bash .github/fixture-scrub/fixture-scrub.sh check Every rule above was applied to its subject and refused nothing. Contributes to #104. It does not build the comparison in the harness, which is what closes that issue; it gives it the first recording to compare against. Signed-off-by: iderex <30603423+iderex@users.noreply.github.com>
Contributor
Author
|
The two commands before a push, run in the worktree at this head, with |
This was referenced Sep 18, 2026
Closed
Contributor
Author
|
Closed in favour of #505: the same change with one sentence of |
This was referenced Sep 18, 2026
Closed
iderex
deleted the
record/104-one-response-set-from-a-jellyfin-12-server-b
branch
September 18, 2026 12:46
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contributes to #104. It does not close it: the comparison in the harness is what closes that issue, and this gives it the first recording to compare against.
Replaces #501, which I close with this. Three things were wrong with it, and each is a reason on its own: its files carried the server's timing header while its own record said three headers were kept; its identifiers were allotted by order of appearance, so the two episodes and the play session shared one synthetic value and the recording could not show that next-up returned a different episode from the one marked; and it landed without the
-textrule and the byte assertion thattests/recorded/README.mdsays the first recording lands with.What changed
tests/recorded/jellyfin-12.0.0/holds sixteen responses from a Jellyfin 12.0.0 server, one file per capability of 0272 that has a request to make, andRECORDED.mdbeside them: what each file shows, which capabilities have no request to record and why, and what was scrubbed in the ordertests/recorded/README.mdgives. The server was run for the purpose in a container on this machine, with a library of three two-second black videos generated by its own ffmpeg, so the item routes answer with items rather than empty lists and nothing in the recording was made by a person.Each file is an envelope:
capability,method,path,status, the three headers kept, the request body where the call had one, andbodyas parsed JSON orbody_byteswithbody_content_typewhere the answer was image bytes or empty. The date header and the timing header are dropped, because a value that changes on every recording turns each re-recording into a diff nobody can read.The twelve identifiers that name a thing each got their own synthetic value; the nine digests, entity tags, image tags and the display-preferences id, took the remaining four, the last six sharing the sixteenth.
RECORDED.mdsays which kind of value says nothing about the server when two of them are equal..gitattributesgainstests/recorded/** -textwith the two Markdown files under the prefix normalised after it,tests/fixture_bytes.rsgains two tests that read every envelope as bytes and refuse a carriage return or a missing final line feed, and the two paragraphs that said the directory was empty and the rule absent, one in the README and one in.gitattributes, now say what is true.The failure it prevents
A fake server whose every answer was written by hand is measuring the core against a guess, and #104 says what that costs: a field the real server dropped is right in the fixture and wrong on the wire, and the first report comes from somebody running it. A recording from a real server of a supported line is what the comparison reads, and the version it was taken against is written beside it.
Evidence
The scrub check over the tracked subject, run at this head before the commit:
The two commands
CONTRIBUTING.mdnames before a push were run in this worktree and are pasted in the first comment below.What this does not cover
The comparison itself, the harness case that reads these files, and the recording from the 10.11 line, which is #88 and follows in its own pull request on top of this one. The raw recording never entered any tree.
Nobody other than me has read this change.