<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sisudoc-spine/src/sisudoc/ocda, 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>ocda: bug fix related to dummy headings</title>
<updated>2026-09-03T19:23:31+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-03T16:30:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=ae1339c2ed532f8dc9f49fb4a3ddc3328055abfa'/>
<id>ae1339c2ed532f8dc9f49fb4a3ddc3328055abfa</id>
<content type='text'>
--+# clears dummy_heading_multiple_objects, fixed

until fix, following any ---# ... --+# block every ~# object in
the document was marked dummy_heading, (and the output generators
that honour that flag suppressed its text: so ~# behaved as -#.
One line added to correct the --+# branch.

~# suppresses the object's number only, content is still shown.
-# is for a heading introduced solely to segment an output:
object number suppressed and the heading text omitted from the
body where the output format allows, the toc entry kept. Both were
already correct in isolation; only the leaked block flag broke ~#.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
--+# clears dummy_heading_multiple_objects, fixed

until fix, following any ---# ... --+# block every ~# object in
the document was marked dummy_heading, (and the output generators
that honour that flag suppressed its text: so ~# behaved as -#.
One line added to correct the --+# branch.

~# suppresses the object's number only, content is still shown.
-# is for a heading introduced solely to segment an output:
object number suppressed and the heading text omitted from the
body where the output format allows, the toc entry kept. Both were
already correct in isolation; only the leaked block flag broke ~#.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>abstraction/.ssp: fix doc structure representation</title>
<updated>2026-08-30T17:28:10+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-08-30T17:28:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=8944b13ecdfeb4908cb70974e57d905775055ccf'/>
<id>8944b13ecdfeb4908cb70974e57d905775055ccf</id>
<content type='text'>
fix to --abstraction/.ssp: fix document structure, representation
parent, ancestors, children. Make parent_ocn, the marked-up and
collapsed ancestor arrays, and the children correctly represent
the document structure. fixed

(assisted by Claude-Code)

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01836BxBb8LvVKJ8sBg7Dx6U
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
fix to --abstraction/.ssp: fix document structure, representation
parent, ancestors, children. Make parent_ocn, the marked-up and
collapsed ancestor arrays, and the children correctly represent
the document structure. fixed

(assisted by Claude-Code)

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01836BxBb8LvVKJ8sBg7Dx6U
</pre>
</div>
</content>
</entry>
<entry>
<title>.ssp: doc structure related fixes (&amp; to epub toc_nav)</title>
<updated>2026-08-29T00:15:35+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-08-28T23:07:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=45a73e4464fb662d481d31ebf8d3ef204296159a'/>
<id>45a73e4464fb662d481d31ebf8d3ef204296159a</id>
<content type='text'>
for document abstraction and its .ssp output, removed the
requirement of including --abstraction &amp; --serial flags to produce
correct output (for: .dom_status, .dom_status_collapsed &amp;
.last_descendant)

- meta_processing_xml_dom() includes show_abstraction, so --pod2
  and --show-abstraction run the dom pass; last_descendant is
  derived from that pass via after_doc_get_descendants()

The accumulators are now verified as eight wide locals of
docAbstraction(), so each document starts clean and no two threads
share one.
- bug: the four dom accumulators were template scope (shared) and
  nine wide, while their end of document reset was eight wide, so
  the first document of a run differed from the rest and parallel
  runs raced on one buffer, (which also mis-nested epub toc_nav)

test/ reference .ssp regenerated: accelerando only, trailing zero
dropped.
test-abstraction-ssp.sh now runs parallel and diffs output against
a serial run.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
for document abstraction and its .ssp output, removed the
requirement of including --abstraction &amp; --serial flags to produce
correct output (for: .dom_status, .dom_status_collapsed &amp;
.last_descendant)

- meta_processing_xml_dom() includes show_abstraction, so --pod2
  and --show-abstraction run the dom pass; last_descendant is
  derived from that pass via after_doc_get_descendants()

The accumulators are now verified as eight wide locals of
docAbstraction(), so each document starts clean and no two threads
share one.
- bug: the four dom accumulators were template scope (shared) and
  nine wide, while their end of document reset was eight wide, so
  the first document of a run differed from the rest and parallel
  runs raced on one buffer, (which also mis-nested epub toc_nav)

test/ reference .ssp regenerated: accelerando only, trailing zero
dropped.
test-abstraction-ssp.sh now runs parallel and diffs output against
a serial run.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>image digest: include headings in image scan</title>
<updated>2026-08-28T14:29:40+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-08-27T17:56:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=d89584e65a327d6231f733afe243006c7beb9bb7'/>
<id>d89584e65a327d6231f733afe243006c7beb9bb7</id>
<content type='text'>
Assumed that headings do not include images, obj_digest() looked
for images only in the non-heading branch, however, the markup
does not forbid one, and an object type left out of the scan
carries neither digest nor .ssp record, silently.

Open Issue: image_list, which drives pod bundling and the @doc_has
images count, is gathered only from para objects (and only the
first image of each), so an image in a heading or in a block body
is recorded in the abstraction but not bundled.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Assumed that headings do not include images, obj_digest() looked
for images only in the non-heading branch, however, the markup
does not forbid one, and an object type left out of the scan
carries neither digest nor .ssp record, silently.

Open Issue: image_list, which drives pod bundling and the @doc_has
images count, is gathered only from para objects (and only the
first image of each), so an image in a heading or in a block body
is recorded in the abstraction but not bundled.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>doc_has: count inline links &amp; notes, always 0, fix</title>
<updated>2026-08-28T14:22:20+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-08-27T17:53:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=2b67e9532aada5c43061e49bb8e0954ffff0fadc'/>
<id>2b67e9532aada5c43061e49bb8e0954ffff0fadc</id>
<content type='text'>
Count them over the assembled body objects, (the body alone).

Previously dochas["inline_links"], ["inline_notes"] and
["inline_notes_star"] were initialised and read but never
incremented, so @doc_has reported 0 inline links and 0 notes for
every document while the block counters (codeblock, poem, group,
block, quote, table) were counted. create_abstraction_db.d records
the same values as document metadata.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Count them over the assembled body objects, (the body alone).

Previously dochas["inline_links"], ["inline_notes"] and
["inline_notes_star"] were initialised and read but never
incremented, so @doc_has reported 0 inline links and 0 notes for
every document while the block counters (codeblock, poem, group,
block, quote, table) were counted. create_abstraction_db.d records
the same values as document metadata.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>has.images: set flag but was not assigned, fix</title>
<updated>2026-08-28T14:04:05+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-08-27T17:32:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/sisudoc-spine/commit/?id=714b25c433bf41e798f98cc7a41026c405c23115'/>
<id>714b25c433bf41e798f98cc7a41026c405c23115</id>
<content type='text'>
every object with an .image record should now carry the images
flag.

Previously DocObj_Has_.images was read but never written anywhere
in the tree, so no object carried it: .ssp emitted has_images = 0
for every object of every document.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
every object with an .image record should now carry the images
flag.

Previously DocObj_Has_.images was read but never written anywhere
in the tree, so no object carried it: .ssp emitted has_images = 0
for every object of every document.

(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>
</feed>
