<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sisudoc-spine/src/sisudoc/outputs/io_out/metadata.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/projects/sisudoc-spine/'/>
<entry>
<title>metadata page: reporting digests only provide link</title>
<updated>2026-10-01T14:00:42+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-30T21:01:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/projects/sisudoc-spine/commit/?id=7a6d7e3bc332230b5dff4962f10a5c6776b0c97b'/>
<id>7a6d7e3bc332230b5dff4962f10a5c6776b0c97b</id>
<content type='text'>
fix issue with reporting of multi-lingual document digests

Set as with the .ocda.db digest taken off this page on 2026-09-18,
and the same remedy: the page links &lt;doc&gt;.digests.txt, where each
digest is taken once, of the finished file, and quotes none itself.

single-language documents lose a line that was right, but for
multi-language documents the last language in the run was missing here,
and this cannot go wrong again.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
fix issue with reporting of multi-lingual document digests

Set as with the .ocda.db digest taken off this page on 2026-09-18,
and the same remedy: the page links &lt;doc&gt;.digests.txt, where each
digest is taken once, of the finished file, and quotes none itself.

single-language documents lose a line that was right, but for
multi-language documents the last language in the run was missing here,
and this cannot go wrong again.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>markdown output, --markdown (--md)</title>
<updated>2026-09-28T17:12:20+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-28T15:43:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/projects/sisudoc-spine/commit/?id=af9f8677ff80287a0c83319258261d2368e14294'/>
<id>af9f8677ff80287a0c83319258261d2368e14294</id>
<content type='text'>
A plain-text output that keeps the object numbers, written as CommonMark
with GFM pipe tables, one .md per document-language in &lt;lang&gt;/markdown/,
(linked from the metadata page) with images into that shared directory
itself, skipping any already there, so --markdown alone still gives a complete tree.

provided as an alternative to --text rather than a replacement

--markdown  produces a document that renders, (both provide objext
  numbering survives both. Every object carries an anchor and a
  superscript number linking to itself, so a citation by object number
  is a link in any markdown renderer.
--text may still be of value to read in a terminal

A note is written where it is referenced, with a link back to the
object it came from, rather than gathered into an endnotes
section.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A plain-text output that keeps the object numbers, written as CommonMark
with GFM pipe tables, one .md per document-language in &lt;lang&gt;/markdown/,
(linked from the metadata page) with images into that shared directory
itself, skipping any already there, so --markdown alone still gives a complete tree.

provided as an alternative to --text rather than a replacement

--markdown  produces a document that renders, (both provide objext
  numbering survives both. Every object carries an anchor and a
  superscript number linking to itself, so a citation by object number
  is a link in any markdown renderer.
--text may still be of value to read in a terminal

A note is written where it is referenced, with a link back to the
object it came from, rather than gathered into an endnotes
section.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>cleanup: misc. (previously deferred)</title>
<updated>2026-09-22T21:16:20+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-21T18:29:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/projects/sisudoc-spine/commit/?id=9f93ed4ced8e7434b89e93b50c3464e34e4767fb'/>
<id>9f93ed4ced8e7434b89e93b50c3464e34e4767fb</id>
<content type='text'>
dr_document_make in three identifier spellings becomes document_make,
which is what the file has been called since the rename.

The mixin import audit, a template declares its imports at template
scope and they are then visible in every scope it is mixed into (which
is how a template-level split once hijacked a UFCS lookup in code that
had not been touched). Disabling htmlSnippet's imports and rebuilding
names the consumers that were relying on them rather than on their own:
across twelve mixin sites, exactly one. metadata.d now imports the `to`
it uses. The templates keep their imports, their own functions needing
them, and narrowing those is a change of its own rather than a cleanup.

And the standing FIX in source_pod.d: the insert digest line for a non
pod source recorded the insert's path, where every other line in
digests.txt is a filename and a digest naming a file that is not in
the pod under that name cannot be checked against it.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
dr_document_make in three identifier spellings becomes document_make,
which is what the file has been called since the rename.

The mixin import audit, a template declares its imports at template
scope and they are then visible in every scope it is mixed into (which
is how a template-level split once hijacked a UFCS lookup in code that
had not been touched). Disabling htmlSnippet's imports and rebuilding
names the consumers that were relying on them rather than on their own:
across twelve mixin sites, exactly one. metadata.d now imports the `to`
it uses. The templates keep their imports, their own functions needing
them, and narrowing those is a change of its own rather than a cleanup.

And the standing FIX in source_pod.d: the insert digest line for a non
pod source recorded the insert's path, where every other line in
digests.txt is a filename and a digest naming a file that is not in
the pod under that name cannot be checked against it.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>digests: db digest taken once on file completion</title>
<updated>2026-09-22T18:54:35+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-21T15:52:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/projects/sisudoc-spine/commit/?id=b0084e0d55595b1d1cc93a088ae3c841220cddc6'/>
<id>b0084e0d55595b1d1cc93a088ae3c841220cddc6</id>
<content type='text'>
One file for the document (including all languages) with digest of the
document. digests.txt lists it once, beside the shared images, taken
when the last language has been written.

digests.txt carries all digests.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
One file for the document (including all languages) with digest of the
document. digests.txt lists it once, beside the shared images, taken
when the last language has been written.

digests.txt carries all digests.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>pod: write &lt;doc&gt;.sisupod (single zstd frame)</title>
<updated>2026-09-22T17:48:19+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-21T13:35:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/projects/sisudoc-spine/commit/?id=4c766a8455d05bdf6a9793946f7839a01f179b65'/>
<id>4c766a8455d05bdf6a9793946f7839a01f179b65</id>
<content type='text'>
The pod archive spine writes is now named .sisupod and carries the
same archive inside one zstd frame. The reader has accepted both
since the previous commit, so every pod already published stays
readable and this changes only what is written.

  free_culture           2863504 -&gt; 1100180
  live-manual            6972418 -&gt;  692942   10.06x

The wrap is at the pod call site and not in createZipFile, which
also writes every epub and every odt.

Best compression from whole-stream (rather than per-member compression).
(for live-manual per-member deflate manages about 3x compared to 10x for
whole pod content compression).

The suffix is named as pod_archive_suffix.

--pod-compression sets the level, 19 by default: a pod is written once
and fetched many times (692942 bytes at 19, 837703 at 9, 2054365 at 1).
(A value that is not a number warns and the default is used).

Output built from a written .sisupod is byte identical to output built
from the markup it came from.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The pod archive spine writes is now named .sisupod and carries the
same archive inside one zstd frame. The reader has accepted both
since the previous commit, so every pod already published stays
readable and this changes only what is written.

  free_culture           2863504 -&gt; 1100180
  live-manual            6972418 -&gt;  692942   10.06x

The wrap is at the pod call site and not in createZipFile, which
also writes every epub and every odt.

Best compression from whole-stream (rather than per-member compression).
(for live-manual per-member deflate manages about 3x compared to 10x for
whole pod content compression).

The suffix is named as pod_archive_suffix.

--pod-compression sets the level, 19 by default: a pod is written once
and fetched many times (692942 bytes at 19, 837703 at 9, 2054365 at 1).
(A value that is not a number warns and the default is used).

Output built from a written .sisupod is byte identical to output built
from the markup it came from.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>metadata: use document's language</title>
<updated>2026-09-22T16:57:26+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-21T04:21:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/projects/sisudoc-spine/commit/?id=73d2e15d754c149544b69a8854b5279fcf705c6b'/>
<id>73d2e15d754c149544b69a8854b5279fcf705c6b</id>
<content type='text'>
Every metadata page body element carried lang="en" xml:lang="en" as a
literal. It now carries the document's own language tag.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Every metadata page body element carried lang="en" xml:lang="en" as a
literal. It now carries the document's own language tag.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>html metadata: a link to the ocda.db</title>
<updated>2026-09-09T23:04:06+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-08T22:44:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/projects/sisudoc-spine/commit/?id=c6e822e3ce4b096163e0016e5735ef9c16e8997f'/>
<id>c6e822e3ce4b096163e0016e5735ef9c16e8997f</id>
<content type='text'>
The metadata page gains a line between the markup source and the
source digests.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The metadata page gains a line between the markup source and the
source digests.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>--ocda-db replaces --show-abstraction-db</title>
<updated>2026-09-09T23:03:54+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-08T21:30:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/projects/sisudoc-spine/commit/?id=557810df54fb5411c362528b459648611e8267ba'/>
<id>557810df54fb5411c362528b459648611e8267ba</id>
<content type='text'>
ocda (object centric document abstraction)

flag --ocda-db (or --abstraction-db)
replaces --show-abstraction-db

rename results in consequently large diff
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
ocda (object centric document abstraction)

flag --ocda-db (or --abstraction-db)
replaces --show-abstraction-db

rename results in consequently large diff
</pre>
</div>
</content>
</entry>
<entry>
<title>output: the abstraction artefacts live with the pod</title>
<updated>2026-09-09T22:28:25+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-08T20:09:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sisudoc.org/projects/sisudoc-spine/commit/?id=c16ada7749d842fa868b7b8b25a1ff17ffdf7b40'/>
<id>c16ada7749d842fa868b7b8b25a1ff17ffdf7b40</id>
<content type='text'>
pod/ holds all document source representations:
  pod/&lt;doc&gt;/                             source tree
  pod/&lt;doc&gt;/media/abstraction/&lt;uid&gt;.ssp  abstraction, as text
  pod/&lt;doc&gt;.zip                          tree, zipped, .ssp included
  pod/&lt;doc&gt;.digests.txt                  sha256s of what is in them
  pod/&lt;uid&gt;.ocda.db                      abstraction, as sqlite db

&lt;lang&gt;/abstraction/ is gone.
pod/&lt;doc&gt;/media/abstraction/&lt;uid&gt;.ssp preferred as having the
images (found within the pod tree) which .ssp needs to reproduce a
document but does not carry on its own.

The .ocda.db sits carries the images as well and (like the
pod.zip) can be used to reproduce a document directly.

digests.txt now covers the database as well as the zip, the source
and the .ssp; (as does the metadata html page).

Two ordering issues addressed:
- the pod builder clean-slates pod/&lt;doc&gt;/ before regenerating it,
  and the .ssp is now written before that runs. The clean slate
  now leaves media/abstraction/ alone, and the .ssp writer clears
  that directory itself on the first language of a run, so a .ssp
  for a language the document no longer is removed and cannot be
  bundled.
- for a multi-language document the .ssp files accumulate one
  language at a time and are bundled on the last, which is why the
  directory cannot simply be emptied by whichever (language) gets
  there first.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
pod/ holds all document source representations:
  pod/&lt;doc&gt;/                             source tree
  pod/&lt;doc&gt;/media/abstraction/&lt;uid&gt;.ssp  abstraction, as text
  pod/&lt;doc&gt;.zip                          tree, zipped, .ssp included
  pod/&lt;doc&gt;.digests.txt                  sha256s of what is in them
  pod/&lt;uid&gt;.ocda.db                      abstraction, as sqlite db

&lt;lang&gt;/abstraction/ is gone.
pod/&lt;doc&gt;/media/abstraction/&lt;uid&gt;.ssp preferred as having the
images (found within the pod tree) which .ssp needs to reproduce a
document but does not carry on its own.

The .ocda.db sits carries the images as well and (like the
pod.zip) can be used to reproduce a document directly.

digests.txt now covers the database as well as the zip, the source
and the .ssp; (as does the metadata html page).

Two ordering issues addressed:
- the pod builder clean-slates pod/&lt;doc&gt;/ before regenerating it,
  and the .ssp is now written before that runs. The clean slate
  now leaves media/abstraction/ alone, and the .ssp writer clears
  that directory itself on the first language of a run, so a .ssp
  for a language the document no longer is removed and cannot be
  bundled.
- for a multi-language document the .ssp files accumulate one
  language at a time and are bundled on the last, which is why the
  directory cannot simply be emptied by whichever (language) gets
  there first.

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