<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sisudoc-spine/src/sisudoc, branch main</title>
<subtitle>SiSU Spine: document publishing and search (in D) 2015</subtitle>
<link rel='alternate' type='text/html' href='https://www.amissah.com/projects/sisudoc-spine/'/>
<entry>
<title>ocda public surface + dub.json import-path and dyaml cleanups</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-25T15:33:14+00:00</published>
<link rel='alternate' type='text/html' href='https://www.amissah.com/projects/sisudoc-spine/commit/?id=6ce2e8efb3a81b724840c06d62d5c8379992f7f0'/>
<id>6ce2e8efb3a81b724840c06d62d5c8379992f7f0</id>
<content type='text'>
Three small follow-ups to the ocda/outputs split:

1. Add src/sisudoc/ocda/package.d (module sisudoc.ocda) as a 2-line
   public re-export of sisudoc.ocda.abstraction. Provides downstream
   consumers with a canonical "import sisudoc.ocda;" entry point and
   a stable handle for eventual peer-repo packaging of the
   abstraction library.

2. Fix the D import-path root in dub.json so it matches the declared
   module names:
   - spine:abstraction sub-package
     "importPaths": [ "./src/sisudoc" ] -&gt; [ "./src" ]
   - main package buildTypes (dmd, ldc2, ldmd2, gdc, gdmd)
     "-I=src/sisudoc" -&gt; "-I=src"
   The modules are named sisudoc.ocda.* / sisudoc.outputs.* /
   sisudoc.* so the filesystem-based resolver needs to see
   ./src as the root (so &lt;root&gt;/sisudoc/ocda/X.d resolves).

3. Replace dyaml sub-package's destructive preGenerateCommands
   ("rm -rf ./src/ext_depends/D-YAML/{examples,testsuite}") with
   declarative excludedSourceFiles globs. The two directories do
   not exist in the vendored D-YAML tree, so the rm was a no-op
   in practice; the glob form is defensive (would silently skip
   them if they were ever re-introduced) and removes the
   destructive side-effect from every build.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Three small follow-ups to the ocda/outputs split:

1. Add src/sisudoc/ocda/package.d (module sisudoc.ocda) as a 2-line
   public re-export of sisudoc.ocda.abstraction. Provides downstream
   consumers with a canonical "import sisudoc.ocda;" entry point and
   a stable handle for eventual peer-repo packaging of the
   abstraction library.

2. Fix the D import-path root in dub.json so it matches the declared
   module names:
   - spine:abstraction sub-package
     "importPaths": [ "./src/sisudoc" ] -&gt; [ "./src" ]
   - main package buildTypes (dmd, ldc2, ldmd2, gdc, gdmd)
     "-I=src/sisudoc" -&gt; "-I=src"
   The modules are named sisudoc.ocda.* / sisudoc.outputs.* /
   sisudoc.* so the filesystem-based resolver needs to see
   ./src as the root (so &lt;root&gt;/sisudoc/ocda/X.d resolves).

3. Replace dyaml sub-package's destructive preGenerateCommands
   ("rm -rf ./src/ext_depends/D-YAML/{examples,testsuite}") with
   declarative excludedSourceFiles globs. The two directories do
   not exist in the vendored D-YAML tree, so the rm was a no-op
   in practice; the glob form is defensive (would silently skip
   them if they were ever re-introduced) and removes the
   destructive side-effect from every build.

(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://www.amissah.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>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://www.amissah.com/projects/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>
<entry>
<title>org files out of sync, fix</title>
<updated>2026-05-24T02:03:55+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-05-24T02:02:17+00:00</published>
<link rel='alternate' type='text/html' href='https://www.amissah.com/projects/sisudoc-spine/commit/?id=ba21ada59220f06f3ba1319b73b5983abbd07cac'/>
<id>ba21ada59220f06f3ba1319b73b5983abbd07cac</id>
<content type='text'>
(also cgi_sqlite_search_form.d did not belong here)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
(also cgi_sqlite_search_form.d did not belong here)
</pre>
</div>
</content>
</entry>
<entry>
<title>css: html (additional) tags alignment</title>
<updated>2026-05-22T19:42:48+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-05-22T19:04:51+00:00</published>
<link rel='alternate' type='text/html' href='https://www.amissah.com/projects/sisudoc-spine/commit/?id=2cb20ea0436e4f0180716ff8440a686d5347ee8f'/>
<id>2cb20ea0436e4f0180716ff8440a686d5347ee8f</id>
<content type='text'>
css: align body-flow &lt;ul&gt;/&lt;li&gt; &amp; &lt;details&gt;/&lt;summary&gt; with &lt;p&gt;

Not used by sisudoc-spine but for hand-authored body-flow markup such as
the current homepage / body-flow, added block to each of the four html
CSS string heredocs in src/sisudoc/io_out/xmls_css.d

Existing tags are left in place and untouched.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
css: align body-flow &lt;ul&gt;/&lt;li&gt; &amp; &lt;details&gt;/&lt;summary&gt; with &lt;p&gt;

Not used by sisudoc-spine but for hand-authored body-flow markup such as
the current homepage / body-flow, added block to each of the four html
CSS string heredocs in src/sisudoc/io_out/xmls_css.d

Existing tags are left in place and untouched.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>decouple abstraction phase1:2</title>
<updated>2026-05-22T19:42:48+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-05-21T18:52:41+00:00</published>
<link rel='alternate' type='text/html' href='https://www.amissah.com/projects/sisudoc-spine/commit/?id=fcacae04d8f13baee88528a3e72ed5f791c4c1c6'/>
<id>fcacae04d8f13baee88528a3e72ed5f791c4c1c6</id>
<content type='text'>
phase1 step2: move SSP serialiser into sisudoc.abstraction package

git mv src/sisudoc/io_out/create_abstraction_txt.d to
  src/sisudoc/abstraction/ssp.d

Module rename: sisudoc.io_out.create_abstraction_txt
  -&gt; sisudoc.abstraction.ssp

Completes phase1: after this commit the sisudoc.abstraction package has
zero outgoing edges into sisudoc.io_out. The library produces both the
in-memory document object model AND the .ssp text serialisation without
referencing any output-side module.

The serialiser previously imported sisudoc.io_out.paths_output for the
single purpose of constructing the .ssp output path. That import is
dropped; the path construction is inlined as three lines of std.path
(chainPath / asNormalizedPath / array) producing
  &lt;output_path&gt;/&lt;language&gt;/abstraction/&lt;doc_uid_out&gt;.ssp
- byte-for-byte the same path the previous spineOutPaths!() call
produced.

Updated:
- src/sisudoc/abstraction/ssp.d - module decl + inline path
- src/sisudoc/abstraction/package.d - public import .ssp
- src/sisudoc/spine.d - import sisudoc.abstraction.ssp (x2)

Completes decouple abstraction phase1

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
phase1 step2: move SSP serialiser into sisudoc.abstraction package

git mv src/sisudoc/io_out/create_abstraction_txt.d to
  src/sisudoc/abstraction/ssp.d

Module rename: sisudoc.io_out.create_abstraction_txt
  -&gt; sisudoc.abstraction.ssp

Completes phase1: after this commit the sisudoc.abstraction package has
zero outgoing edges into sisudoc.io_out. The library produces both the
in-memory document object model AND the .ssp text serialisation without
referencing any output-side module.

The serialiser previously imported sisudoc.io_out.paths_output for the
single purpose of constructing the .ssp output path. That import is
dropped; the path construction is inlined as three lines of std.path
(chainPath / asNormalizedPath / array) producing
  &lt;output_path&gt;/&lt;language&gt;/abstraction/&lt;doc_uid_out&gt;.ssp
- byte-for-byte the same path the previous spineOutPaths!() call
produced.

Updated:
- src/sisudoc/abstraction/ssp.d - module decl + inline path
- src/sisudoc/abstraction/package.d - public import .ssp
- src/sisudoc/spine.d - import sisudoc.abstraction.ssp (x2)

Completes decouple abstraction phase1

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>decouple abstraction phase1:1</title>
<updated>2026-05-22T19:42:48+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-05-21T18:39:34+00:00</published>
<link rel='alternate' type='text/html' href='https://www.amissah.com/projects/sisudoc-spine/commit/?id=ca59943ad212cec4c7a2d167468109d95d7a9d74'/>
<id>ca59943ad212cec4c7a2d167468109d95d7a9d74</id>
<content type='text'>
phase1 step1: introduce sisudoc.abstraction package re-export surface

Create src/sisudoc/abstraction/package.d as a library-facing re-export
module for the document-abstraction stage.

The surface currently re-exports:
- sisudoc.meta.metadoc          (spineAbstraction, A-layer entry)
- sisudoc.meta.metadoc_from_src (docAbstraction, B-layer entry)

No code moves; no behaviour change. The package exists so external
consumers can `import sisudoc.abstraction;` and reach the entry points
without depending on spine's internal directory layout.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
phase1 step1: introduce sisudoc.abstraction package re-export surface

Create src/sisudoc/abstraction/package.d as a library-facing re-export
module for the document-abstraction stage.

The surface currently re-exports:
- sisudoc.meta.metadoc          (spineAbstraction, A-layer entry)
- sisudoc.meta.metadoc_from_src (docAbstraction, B-layer entry)

No code moves; no behaviour change. The package exists so external
consumers can `import sisudoc.abstraction;` and reach the entry points
without depending on spine's internal directory layout.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>decouple abstraction phase0:2</title>
<updated>2026-05-22T19:42:48+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-05-21T18:14:38+00:00</published>
<link rel='alternate' type='text/html' href='https://www.amissah.com/projects/sisudoc-spine/commit/?id=265176e24a7aa64d6bcd11c04d3e6020f629023b'/>
<id>265176e24a7aa64d6bcd11c04d3e6020f629023b</id>
<content type='text'>
phase0 step2: move curation modules from meta/ to io_out/curate/

Curation modules moved to src/sisudoc/io_out/curate/, module
declarations renamed sisudoc.io_out.curate.metadoc_curate* from
sisudoc.meta.metadoc_curate* and updated spine.d imports. File contents
are otherwise unchanged.

Completes phase0: meta/ now has zero io_out imports - the abstraction
core's outgoing deps are now only:
  meta/ internals + io_in/ + ext_depends/D-YAML

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
phase0 step2: move curation modules from meta/ to io_out/curate/

Curation modules moved to src/sisudoc/io_out/curate/, module
declarations renamed sisudoc.io_out.curate.metadoc_curate* from
sisudoc.meta.metadoc_curate* and updated spine.d imports. File contents
are otherwise unchanged.

Completes phase0: meta/ now has zero io_out imports - the abstraction
core's outgoing deps are now only:
  meta/ internals + io_in/ + ext_depends/D-YAML

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>decouple abstraction phase0:1</title>
<updated>2026-05-22T19:41:10+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-05-21T17:47:32+00:00</published>
<link rel='alternate' type='text/html' href='https://www.amissah.com/projects/sisudoc-spine/commit/?id=66f5c683414d505f327c6c4f6dccd6511a19b569'/>
<id>66f5c683414d505f327c6c4f6dccd6511a19b569</id>
<content type='text'>
phase0: drop vestigial io_out.hub coupling from meta/metadoc.d

phase0 step1: abstraction-library extraction/decoupling: meta/ should
not import io_out/.

Removed unused call to `import sisudoc.io_out.hub;` `mixin outputHub;`
from `template spineAbstraction()`. (the load-bearing UFCS site is
spine.d:92 which has its own `mixin outputHub).

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
phase0: drop vestigial io_out.hub coupling from meta/metadoc.d

phase0 step1: abstraction-library extraction/decoupling: meta/ should
not import io_out/.

Removed unused call to `import sisudoc.io_out.hub;` `mixin outputHub;`
from `template spineAbstraction()`. (the load-bearing UFCS site is
spine.d:92 which has its own `mixin outputHub).

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>source_pod: --pod2 include (doc abstraction) .ssp</title>
<updated>2026-05-16T15:58:32+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-05-15T23:05:49+00:00</published>
<link rel='alternate' type='text/html' href='https://www.amissah.com/projects/sisudoc-spine/commit/?id=9d244bf416f94415faa532fc5c7d98c0213012b6'/>
<id>9d244bf416f94415faa532fc5c7d98c0213012b6</id>
<content type='text'>
- include all (doc abstraction) .ssp in pod zip and in digests
  - fixed: for multi-language pods built with --pod2, only the last
    language's .ssp file was being written into pod.zip and listed in
    .digests.txt each languages' .ssp files were on disk in the pod
    directory (copied during their own per-language passes) but were not
    in final zip as it was being built once for each language and
    writing over previous, (only the last one remaining). The solution
    is to follow the pattern already used to avoid this by .sstm and
    .ssi, namely wait for the last language and iterate the
    manifest_list_of_languages internaly.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- include all (doc abstraction) .ssp in pod zip and in digests
  - fixed: for multi-language pods built with --pod2, only the last
    language's .ssp file was being written into pod.zip and listed in
    .digests.txt each languages' .ssp files were on disk in the pod
    directory (copied during their own per-language passes) but were not
    in final zip as it was being built once for each language and
    writing over previous, (only the last one remaining). The solution
    is to follow the pattern already used to avoid this by .sstm and
    .ssi, namely wait for the last language and iterate the
    manifest_list_of_languages internaly.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
</feed>
