<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sisudoc-spine/org/default_paths.org, branch sisudoc-spine_v0.25.1</title>
<subtitle>SiSU Spine: document publishing and search (in D) 2015</subtitle>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/'/>
<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://sisudoc.com/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>typst output --typist &amp; --pdf that makes the pdf</title>
<updated>2026-09-28T17:07:41+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-28T00:40:20+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=b254c23c56a113bdcdb89f1f7917352baaa1cf0a'/>
<id>b254c23c56a113bdcdb89f1f7917352baaa1cf0a</id>
<content type='text'>
typst provides a new pdf build path replacing latex as the primary pdf
builder.
  --typst (--typ) writes the .typ;
  --pdf writes the .typ and compiles it by spawning `typst compile`.
    (--pdf is redefined, being typst to pdf rather than latex).
  --latex is unchanged and writes the .tex;

One .typ per document-language (not one per paper size). The paper and
the orientation are read from sys.inputs with a default, so the same
file compiles to every paper --set-papersize asks for, the pdfs keep
their original names.

Spine's paper names (derived from what suited latex) and typst's are
different vocabularies and are mapped; a paper typst does not have is
named and skipped.

With the flag --pdf spine invokes a typesetter to generate the pdf
output directly, which is new (the latex path writes a .tex and leaves
xelatex to the caller). If typst is not available on the machine it is
reported absent, naming the binary and printing the command, and the run
continues, the .typ is written.

Several useful features of an object-centric pdf are easily met, usually
being a few lines each.
- The object number goes in the margin as one `place` at a coordinate
  inside the object's own block, carrying the label every citation
  points at.
- A note is a real footnote at the point of reference, with the
  document's own number and one link back to the object.
- The table of contents locates by object number rather than by page, so
  it holds true across every paper and every setting.

That typst compiles silently across the sample set means every internal
link in every document resolves (--pdf over the collection with two
paper sizes gives 144 pdfs, none skipped and none failed, each the page
size its name claims and each tagged).

paths: .typ, pdf named in same way as .tex based built pdfs so site
linkage works either way

flake.nix: added a typst dev shell, for .typ pdf typesetter
- dsh-typst-pdf providing a pdf typsetter for spine's .typ.
- dsh-latex-pdf provides xelatex for .tex which can still be written.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
typst provides a new pdf build path replacing latex as the primary pdf
builder.
  --typst (--typ) writes the .typ;
  --pdf writes the .typ and compiles it by spawning `typst compile`.
    (--pdf is redefined, being typst to pdf rather than latex).
  --latex is unchanged and writes the .tex;

One .typ per document-language (not one per paper size). The paper and
the orientation are read from sys.inputs with a default, so the same
file compiles to every paper --set-papersize asks for, the pdfs keep
their original names.

Spine's paper names (derived from what suited latex) and typst's are
different vocabularies and are mapped; a paper typst does not have is
named and skipped.

With the flag --pdf spine invokes a typesetter to generate the pdf
output directly, which is new (the latex path writes a .tex and leaves
xelatex to the caller). If typst is not available on the machine it is
reported absent, naming the binary and printing the command, and the run
continues, the .typ is written.

Several useful features of an object-centric pdf are easily met, usually
being a few lines each.
- The object number goes in the margin as one `place` at a coordinate
  inside the object's own block, carrying the label every citation
  points at.
- A note is a real footnote at the point of reference, with the
  document's own number and one link back to the object.
- The table of contents locates by object number rather than by page, so
  it holds true across every paper and every setting.

That typst compiles silently across the sample set means every internal
link in every document resolves (--pdf over the collection with two
paper sizes gives 144 pdfs, none skipped and none failed, each the page
size its name claims and each tagged).

paths: .typ, pdf named in same way as .tex based built pdfs so site
linkage works either way

flake.nix: added a typst dev shell, for .typ pdf typesetter
- dsh-typst-pdf providing a pdf typsetter for spine's .typ.
- dsh-latex-pdf provides xelatex for .tex which can still be written.

(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://sisudoc.com/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>paths: doc_uid_out_no_lang, doc name sans language</title>
<updated>2026-09-22T18:37:34+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-21T15:12:45+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=dcd8209d1291fe84351e8d19483c260218f430b7'/>
<id>dcd8209d1291fe84351e8d19483c260218f430b7</id>
<content type='text'>
doc_uid_out ends in ".{lng}", which is right for an artefact written per
language and wrong for one that holds every language of a document.
Rather than strip the suffix at each place that needs the bare name,
build it by the same branches without the language, so the two names
cannot drift apart.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
doc_uid_out ends in ".{lng}", which is right for an artefact written per
language and wrong for one that holds every language of a document.
Rather than strip the suffix at each place that needs the bare name,
build it by the same branches without the language, so the two names
cannot drift apart.

(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://sisudoc.com/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>conf: read conf/document_make, drop the dr_ prefix</title>
<updated>2026-09-22T16:50:33+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-21T03:50:58+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=84f4c4c963e4b3edc04300f8c5b931028e028c6c'/>
<id>84f4c4c963e4b3edc04300f8c5b931028e028c6c</id>
<content type='text'>
Spine now looks for conf/document_make, and bundles that name.
(the dr_ prefix was a sisu-era name to distinguish it)

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Spine now looks for conf/document_make, and bundles that name.
(the dr_ prefix was a sisu-era name to distinguish it)

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>xml: markup language attributes take a bcp 47 tag</title>
<updated>2026-09-22T16:50:31+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-21T03:43:35+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=cd93d2d8b5062493650673ecdd13139d6f0e5171'/>
<id>cd93d2d8b5062493650673ecdd13139d6f0e5171</id>
<content type='text'>
Spine names a language as the directory under media/text/ is
named, which for a region is the posix form with an underscore,
pt_BR. A lang, xml:lang or dc:language value is a BCP 47 (RFC
3066) tag and wants a hyphen, pt-BR. Spine put its own code
there unchanged, so a document in a region language produced an
invalid attribute in every one of its xhtml files: 138 epubcheck
errors for a document of ten segments and a navigation file.

src.language_tag is the same language as a tag. The attributes
and the dc metadata now read it. Output paths keep src.language,
since a path is named after the directory, not after the tag.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Spine names a language as the directory under media/text/ is
named, which for a region is the posix form with an underscore,
pt_BR. A lang, xml:lang or dc:language value is a BCP 47 (RFC
3066) tag and wants a hyphen, pt-BR. Spine put its own code
there unchanged, so a document in a region language produced an
invalid attribute in every one of its xhtml files: 138 epubcheck
errors for a document of ten segments and a navigation file.

src.language_tag is the same language as a tag. The attributes
and the dc metadata now read it. Output paths keep src.language,
since a path is named after the directory, not after the tag.

(assisted by Claude-Code)
</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://sisudoc.com/projects/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>org files cosmetic, remove word BUG</title>
<updated>2026-05-05T22:38:24+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-05-05T22:38:24+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=b321e212521b80e5c6d66a00e8f9cd3c4bc117e8'/>
<id>b321e212521b80e5c6d66a00e8f9cd3c4bc117e8</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>org headers rearranged (&amp; odd hilighting issue)</title>
<updated>2026-05-04T16:12:12+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-05-04T15:46:57+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=c81bb010f45b732f97d7fbecd812ecae28f2be7d'/>
<id>c81bb010f45b732f97d7fbecd812ecae28f2be7d</id>
<content type='text'>
- odd hilighting issue ... must result from my org config, but "fix"
  makes things easier for me.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- odd hilighting issue ... must result from my org config, but "fix"
  makes things easier for me.
</pre>
</div>
</content>
</entry>
</feed>
