{"criteria_id":"stream-divergence/v1","criteria_revision":"1.0.0","family":"stream-divergence/v1","family_note":"Criteria id stream-divergence/v1 is the coordinator's proposal in the M-42 brief, recorded as an interpretation in REGISTRY.md. Home decision (DESIGN.md D-1): standalone bundle — the Q6 pass carries no T1 question per the operator's ruling (BUILD-QUEUE section 3), so the consistency-family fold proposed in Evaluation #18 section 4.1 has no home; the evaluation's own park-fallback names this standalone bundle.","ops":["compare"],"ops_not_offered":[],"corpus":{"id":"stream-divergence-corpus/v1","sha256":"ad710604a7356969d4efc9c94f17910550f92f55794f8b245aecab17f614de09"},"corpus_pin_definition":"The corpus pin is the SHA-256 of the corpus's canonical serialization (the corpus object excluding its sha256 field), computed and verifiable by the published harness (harness.mjs). Expected outputs inside corpus cases are derived from the criteria text by an independent implementation in gen-corpus.mjs (never the engine's code path), and each case labels its provenance (constructed from on-disk fleet records vs synthetic).","price":{"usdc_units_per_call":50000,"label":"$0.05","basis":"per divergence report (one submitted artefact pair)"},"price_construction":"The $0.05 prices the signed, criteria-bound report. A plain standalone differencer clears at $0.001-$0.002 (Evaluation #18 section 4.1), under the $0.005 fleet floor; the priced object is the signed record under these published rules, in the $0.05 audit/report class.","free_tier":{"per_day":100,"min_interval_ms":5000,"on_exhaustion":"402"},"input_contract":{"body":"One JSON request body carrying the two artefacts (streamed_capture, reference_output) plus caller? on the free pre-check only.","caps":{"body_bytes":262144,"chunks_per_artefact":1024,"chunk_bytes":65536,"artefact_bytes":65536},"over_cap":"An over-cap submission is a free pre-gate refusal naming the cap.","validation":"The submission is validated FREE, before any payment: shape, per-field rules, base64 validity, and the published caps. A malformed submission fails free and never consumes a payment. The comparison runs only after payment verification (or on a verified-marker resume with no second charge)."},"input_contract_text":"Input contract: the request body is one JSON object carrying the two artefacts plus caller? (free pre-check only). (compare) { streamed_capture: { chunks: [base64 string, ...] }, reference_output: { chunks: [base64 string, ...] } }. Each artefact is a chunk list: chunks is an array of base64 strings, one per chunk, in order, boundaries preserved as submitted; the artefact's bytes are the concatenation of the decoded chunks in order. A reference captured without chunking is submitted as a single chunk. An empty artefact (an empty chunk list, or chunks decoding to zero bytes) is valid and comparable. Caps: request body up to 262,144 bytes; per artefact up to 1,024 chunks; per chunk up to 65,536 decoded bytes; per artefact up to 65,536 decoded bytes — an over-cap submission is a free refusal naming the cap, before any payment.","malformed_rule":"Malformed submissions (named FREE refusals, before any payment): body not a plain object; an artefact missing or not a plain object (streamed_capture_required / reference_output_required); chunks missing or not an array (chunks_required); a chunk not a string (chunk_not_string); a chunk not valid base64 (chunk_not_base64); a chunk count over the published cap (chunk_count_cap); a chunk decoding over the published cap (chunk_bytes_cap); an artefact decoding over the published cap (artefact_bytes_cap). A malformed submission fails free and never consumes a payment. Error surfaces carry static strings plus numeric facts only — never any part of an artefact.","comparison_rule":"Comparison rules (over the decoded bytes S of streamed_capture and R of reference_output): (1) byte_equal is true exactly when S and R have equal length and equal bytes at every offset. (2) first_divergence is { state: NONE } when byte-equal; otherwise { state: OFFSET, offset: n } where n is the smallest offset at which S and R differ — and when one side is a strict prefix of the other, n is the shorter length (the first offset one side does not have). (3) differing_spans are the maximal runs of consecutive differing offsets over max(len S, len R) — an offset beyond the shorter side differs by absence — each span named by start and length only; no artefact bytes and no artefact hash appear in the report. (4) Chunk counts and byte lengths are reported for both sides as submitted and are not graded: the same bytes under different chunking is byte_equal true with differing chunk counts, graded exactly so. Factors are printed; there is no composite score, grade, or band anywhere in this service.","scope_text":"The report does not establish which output is correct, nor why they diverged.","neutral_naming":"The two sides are named neutrally: streamed_capture (the capture as submitted, chunk boundaries preserved) and reference_output (the second artefact as submitted). Reference names the submitter's filing position only — the report never identifies either artefact as correct, authoritative, expected, or true, and never names a winner.","no_live_line":"This service never saw a stream and has no contact with any endpoint: it compares two submitted captures after the fact. Chunk boundaries are the submitter's representation, taken as submitted, never checked against any live stream.","wording_fence":"Wording fence: no surface of this service (criteria, catalog, report, pre-check, errors, metrics) may state or imply that a stream was verified, that its integrity was confirmed, or that it is reliable. The only sentence in this criteria that names the prohibited claim does so to prohibit it: no report from this service may be presented, quoted, or relied on as a claim of \"stream integrity verified\" — presenting one that way triggers the stop-and-review tripwire in the kill line.","verdict_grammar":{"line":"STREAM-CAPTURE DIVERGENCE — byte-equal: <YES|NO> · streamed chunks: <n> · reference chunks: <n> · first divergence: <offset|NONE> · differing spans: <k> — <check-end UTC>","vocabulary":"The report's facts are the published closed set: byte_equal, both chunk counts, both byte lengths, first_divergence (NONE or an offset), and differing_spans (start + length). There is no composite score, grade, or band anywhere in this service, and no field identifies either artefact as correct."},"free_precheck":"The free pre-check (POST /precheck) validates the submission under the published contract and returns assessability ONLY: the common signed fields, whether the submission is assessable (or the free refusal naming the failure), and both artefacts' chunk counts and byte lengths — with NO comparison run and NO divergence fact returned. Free allowance: 100 per day per caller wallet, minimum interval 5,000 ms, 402 on exhaustion.","custody":{"construction":"In-memory processing within a single request lifetime; artefacts persist nowhere, on any path including errors.","ledger_closed_fields":["payer wallet","timestamp/day","price (USDC units) with the CAD fair-market-value block (rate, rate date, basis, cad_pending, refund)","payment tx id + Solana fee (lamports)","criteria version","verdict line","op","byte_equal flag","house flag"],"ledger_note":"The ledger list above is closed: adding a field is a criteria/handling version change. The ledger NEVER carries any artefact content, any chunk, any span, any offset, or any hash of an artefact.","errors":"Error handling is closed-form: static strings plus numeric facts only (lengths against caps, rule ids). No error path interpolates any part of an artefact beyond the published refusal codes."},"forbidden":"Forbidden in every surface of this service (report, pre-check, errors, ledger, metrics): any composite score or grade; any artefact content or artefact hash; any statement or implication that a stream was verified, that its integrity was confirmed, or that it is reliable; any identification of either artefact as the correct one; any live contact with any endpoint.","honesty_line":"Every fact in the report is computed from the two submitted artefacts under the published rules and nothing else: the service observes no stream, contacts no endpoint, and infers nothing about either artefact beyond the comparison. An offset or span the comparison did not produce is never guessed or filled in.","retention":"Artefacts are processed in memory only and are never stored — not in KV, not in logs, not in the payments ledger, not in metrics, and not in error records. The report carries counts, offsets, and span positions and lengths only — never artefact content and never a hash of an artefact. The payments ledger records only the closed field list published in the criteria. Because nothing is kept, a paid retry re-submits both artefacts.","payment_includes":"$0.05 per divergence report. The payment includes exactly one comparison of the two artefacts you submitted (the streamed capture and the reference output, each up to 1,024 chunks and 65,536 decoded bytes, inside a request body of up to 262,144 bytes) and one signed divergence report under stream-divergence/v1 stating: byte-equal or not; the chunk count and byte length of each artefact; the first-divergence offset, or NONE when the artefacts are byte-equal; and every differing span named by position and length. The report carries the mandatory scope text: the report does not establish which output is correct, nor why they diverged. A free pre-check validates the submission's shape before any payment and returns assessability only — no comparison is run free. Artefacts are processed in memory only and are never stored; the payments ledger records only the payer, the time, the price, the byte-equal fact, and the verdict line.","kill_line":"Kill line (M-42 / Q-30, under the operator's 2026-11-03 build-bank-hold doctrine): build, bank, and hold; judged at the fleet's periodic reviews. There is NO demand kill line for this item. Day-0 = first outside paid settle (accounting only; house proofs never count). Tripwires, all stop-and-review: (1) refunds >5% of paid calls in any 30-day window; (2) free use >10x paid use; (3) a wrong verdict from undisclosed stale or partial data (stop-serving under the affected criteria version; the error enters the corpus first as a regression case, corrected rules publish as a new criteria version, the corpus re-passes at 100% before serving resumes; issued reports are never amended); (4) a divergence report circulating as a \"stream integrity verified\" claim; (5) any retained surface carrying artefact content or an artefact hash; (6) any composite score on any surface.","never":"This service never contacts an endpoint; never observes a stream; never stores an artefact; never prints artefact content or an artefact hash; never names a correct artefact; never computes a composite score.","service":"stream-divergence","version":"1.0.0","endpoints":{"criteria":"GET /criteria (free)","precheck":"POST /precheck (free, input validation + assessability only: no comparison, no divergence fact)","compare":"POST /compare (paid, $0.05 per divergence report)","metrics":"GET /metrics","not_offered":"Any other POST path answers NOT COVERED. No best-effort result is produced."}}