<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sisudoc-spine/src/sisudoc/ocda/abstraction/ssp.d, branch main</title>
<subtitle>SiSU Spine: document publishing and search (in D) 2015</subtitle>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/'/>
<entry>
<title>ocda a fix &amp; ssp code-style use curly braces</title>
<updated>2026-09-03T19:23:37+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-03T02:27:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=39cb8bd2847bfe1c45f629d579fcef5ce6621766'/>
<id>39cb8bd2847bfe1c45f629d579fcef5ce6621766</id>
<content type='text'>
ocda: fixed inverted object_number_off on body paragraphs

ssp: make use of curly braces (code-style)

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
ocda: fixed inverted object_number_off on body paragraphs

ssp: make use of curly braces (code-style)

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>image digest: single read, cache file read &amp; hash</title>
<updated>2026-08-28T14:02:05+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-08-27T02:53:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=a4ef474cabc4113c3dca72bf08bc477c452c624c'/>
<id>a4ef474cabc4113c3dca72bf08bc477c452c624c</id>
<content type='text'>
For image digests cache file read &amp; hash, one read per image
file

Fix issue: images referenced from several objects were read and
hashed once per reference.

  [as an example in the sisu-manual sm_tux.png accounts for 6 of
  the document's image records (12 across the sample set), each
  of them a fresh read of the same bytes, and source_pod.d hashes
  the file again for digests.txt.]

Memoise on the full path within safeComputeHashAndSize. static is
thread-local in D, so documents processed in parallel each get
their own cache and no synchronisation is involved. Files are not
expected to change during a run.

Output is unchanged: identical .ssp output. (An image that is
missing or unreadable now warns once to stdout rather than once
per reference).

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
For image digests cache file read &amp; hash, one read per image
file

Fix issue: images referenced from several objects were read and
hashed once per reference.

  [as an example in the sisu-manual sm_tux.png accounts for 6 of
  the document's image records (12 across the sample set), each
  of them a fresh read of the same bytes, and source_pod.d hashes
  the file again for digests.txt.]

Memoise on the full path within safeComputeHashAndSize. static is
thread-local in D, so documents processed in parallel each get
their own cache and no synchronisation is involved. Files are not
expected to change during a run.

Output is unchanged: identical .ssp output. (An image that is
missing or unreadable now warns once to stdout rather than once
per reference).

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>.ssp digest: add image file's own pixel dimensions</title>
<updated>2026-08-28T14:02:05+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-08-27T02:44:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=b2aaf09e46d6c7450311c5f684f3d811521b3ad1'/>
<id>b2aaf09e46d6c7450311c5f684f3d811521b3ad1</id>
<content type='text'>
Complete image file digest identity record: add
px:&lt;width&gt;x&lt;height&gt; to the .ssp image record, read from the
image file header (imageformats.read_image_info, no decode):

  .image: won_benkler_2_1.png sha256:5BA4...D128 bytes:93861 px:420x342

(The w##h## dimensions in the markup are display dimensions, not the
file's: they are author set, or where given as w0h0 are derived by
_image_dimensions and capped to a maximum display width, and they
become the width/height attributes of the output format image display).

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Complete image file digest identity record: add
px:&lt;width&gt;x&lt;height&gt; to the .ssp image record, read from the
image file header (imageformats.read_image_info, no decode):

  .image: won_benkler_2_1.png sha256:5BA4...D128 bytes:93861 px:420x342

(The w##h## dimensions in the markup are display dimensions, not the
file's: they are author set, or where given as w0h0 are derived by
_image_dimensions and capped to a maximum display width, and they
become the width/height attributes of the output format image display).

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>.ssp digests: report missing or unreadable image</title>
<updated>2026-08-28T14:01:18+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-08-27T02:41:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=8e7a8996944f80ca7e05d743b33deb1ac233f74f'/>
<id>8e7a8996944f80ca7e05d743b33deb1ac233f74f</id>
<content type='text'>
image digest: record missing or unreadable image, do not abort

safeComputeHashAndSize() open image with guard, so a document
naming an image absent from media/image/ throws
ErrnoException out of the abstraction stage.

as with _image_dimensions() (which warns and continues where issue
with image) warn to stdout and record the fact in the abstraction:

  .image: ffa.png missing:true

the abstraction would now state that the object embeds an image it
could not read, rather than the .ssp resemble one produced from a
complete pod. The sha256 summary line marks the same case
MISSING OR UNREADABLE.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
image digest: record missing or unreadable image, do not abort

safeComputeHashAndSize() open image with guard, so a document
naming an image absent from media/image/ throws
ErrnoException out of the abstraction stage.

as with _image_dimensions() (which warns and continues where issue
with image) warn to stdout and record the fact in the abstraction:

  .image: ffa.png missing:true

the abstraction would now state that the object embeds an image it
could not read, rather than the .ssp resemble one produced from a
complete pod. The sha256 summary line marks the same case
MISSING OR UNREADABLE.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>.ssp: image as repeatable self-describing property</title>
<updated>2026-08-28T13:01:12+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-08-26T22:25:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=0456cf8f767124e0a0033fac09d7ae3b666e389d'/>
<id>0456cf8f767124e0a0033fac09d7ae3b666e389d</id>
<content type='text'>
a repeatable record, one line per image, filename first:

  .image: won_benkler_2_1.png sha256:5BA492C2...D128 bytes:93861

an object embedding more than one image emits more than one .image
line.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
a repeatable record, one line per image, filename first:

  .image: won_benkler_2_1.png sha256:5BA492C2...D128 bytes:93861

an object embedding more than one image emits more than one .image
line.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>sha summary, mostly cosmetic, some work on images</title>
<updated>2026-08-26T19:40:12+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-08-26T02:56:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=5d9750a5651cdb230e7b781336958a7620c73dfd'/>
<id>5d9750a5651cdb230e7b781336958a7620c73dfd</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>digests (sha256) a revisit</title>
<updated>2026-07-31T18:48:09+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-07-31T03:24:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=569a22bdb0841f360af97683ded5006329a14b28'/>
<id>569a22bdb0841f360af97683ded5006329a14b28</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ocda + outputs split: module/import + dub.json fixups</title>
<updated>2026-05-25T16:21:38+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-05-25T14:47:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=0c5e723742fb923bfa85e3ee47434b463f390f20'/>
<id>0c5e723742fb923bfa85e3ee47434b463f390f20</id>
<content type='text'>
Modules and imports rewritten to sisudoc.ocda.* and
sisudoc.outputs.*; dub.json excludedSourceFiles and the
spine:abstraction sub-package sourcePaths collapsed to
./src/sisudoc/ocda.

Verified: nix build .#spine-overlay-ldc clean.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Modules and imports rewritten to sisudoc.ocda.* and
sisudoc.outputs.*; dub.json excludedSourceFiles and the
spine:abstraction sub-package sourcePaths collapsed to
./src/sisudoc/ocda.

Verified: nix build .#spine-overlay-ldc clean.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>separate abstraction lib from output processing</title>
<updated>2026-05-25T16:20:54+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-05-25T14:21:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=db3dd3c3a5f4c5cde9a736cb688f05af9f79d718'/>
<id>db3dd3c3a5f4c5cde9a736cb688f05af9f79d718</id>
<content type='text'>
create new directories under ./src/sisudoc ocda &amp; outputs in order to
separate the document abstraction library from downstream output
processing (stuff broken till paths &amp; modules fixed)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
create new directories under ./src/sisudoc ocda &amp; outputs in order to
separate the document abstraction library from downstream output
processing (stuff broken till paths &amp; modules fixed)
</pre>
</div>
</content>
</entry>
</feed>
