fix(assets): a remote reference is inert and a declared size is bounded
Two MAJOR findings of the independent v0.10.0 review, both with the shipped defaults, both new in 0.10.0. Repros rebuilt as tests first. - A remote <img src>/xlink:href became a LIVE markdown image link in the persisted concept, with the address and query string chosen by whoever wrote the document. Extraction opens no socket; a consumer rendering the bundle does. Now inert text with the address in a code span, pinned by a property over the readers rather than by one string. The tier asymmetry (user-upload refuses, trusted-source persisted) went to the guard repo with the repro. - Nothing bounded a declared image size: 9.6 KB of PDF declaring 3000x3000 grayscale zeros took 83 MB peak RSS, linear in pixels. MAX_IMAGE_PIXELS (40 000 000) and MAX_IMAGE_BYTES (256 MiB) are read off the corpora (largest measured 18.6 MP on K2, 1.4 MP on R761) and checked on what the container declares, before any decompression; over them is asset_too_large, counted. The same bound closes the inline data: URI, which the review flagged and did not measure. Also fixed, added by PM to this order: an inline PDF image was named from id() of a Python object, so two concept files of the reference corpus differed between builds. It is now named from its position. R761 unchanged: 50 carried of 50 found, assets diff -rq clean. Report: docs/2026-09-17-bildestien-0-10-1.md Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
864570b320
commit
230d1cbccd
8 changed files with 580 additions and 3 deletions
21
CLAUDE.md
21
CLAUDE.md
|
|
@ -890,6 +890,27 @@ and fixtures, never code.
|
|||
move (it is not delivered on the Arm B bundle either, by a different
|
||||
mechanism). hit@8 over the six published questions holds at **5 of 6 on both
|
||||
K2 bundles**, so the default move cost the retrieval side nothing.
|
||||
- **The image path has a size CEILING and no live links (0.10.1).** An
|
||||
independent review of `v0.10.0` found two MAJOR defects, both with the
|
||||
shipped defaults, both new in 0.10.0.
|
||||
- A remote `<img src>` / `xlink:href` became a LIVE markdown image link in
|
||||
the persisted concept. This package opens no socket; a consumer that
|
||||
renders the bundle does, and the guard refuses such a line at
|
||||
`user-upload` while the build's default tier persisted it. Now inert text
|
||||
with the address in a code span, pinned by a PROPERTY over the readers
|
||||
(`FOREIGN_IMAGE_LINK`), never one string.
|
||||
- Nothing bounded a declared image size: 9.6 KB of PDF declaring
|
||||
3 000 x 3 000 zeros took 83 MB peak RSS, linear in pixels.
|
||||
`MAX_IMAGE_PIXELS = 40 000 000` and `MAX_IMAGE_BYTES = 256 MiB` are
|
||||
checked on what the container DECLARES, before any decompression, and
|
||||
over them is `asset_too_large`, counted. Read off the corpora: the
|
||||
largest image measured is 18.6 MP (K2) and 1.4 MP (R761). The same bound
|
||||
closes the inline `data:` URI.
|
||||
- **An inline PDF image is named from its position, not from `id()`** —
|
||||
pdfminer's name broke the bit-exact rebuild on two K2 concepts.
|
||||
- Documented rather than changed: `images: N` counts POINTER BLOCKS, and a
|
||||
pointer-only concept is substantive.
|
||||
- Report: `docs/2026-09-17-bildestien-0-10-1.md`.
|
||||
- **Account for content: `okf build --accounting PATH` and its judge
|
||||
`python3 tools/okf_accounting_gate.py` (2026-09-17).**
|
||||
- The gate was written RED at `0b00de4` and turned GREEN on all six rows by
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue