<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sisudoc-spine/org/out_sqlite.org, branch sisudoc-spine_v0.24.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>images alt text, and epub says what it is</title>
<updated>2026-09-14T16:18:51+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-14T01:56:43+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=eb5a9f3dab1d1848a1aa90c534a125c222327635'/>
<id>eb5a9f3dab1d1848a1aa90c534a125c222327635</id>
<content type='text'>
Four things, not visible in an error count:

- Images had no alt text, even where markup carried the text, and the
  field alt text is present, incorrectly used in code; fixed as the alt.

  { sm_tux.png 64x80 "Gnu/Linux - a better way" }image

  an image with nothing to say for itself gets alt=""

- Images with no dimensions were incorrectly written width="0"
  height="0", fixed

- Accessibility metadata, which EPUB Accessibility 1.1 requires:
  schema:accessMode, accessibilityFeature and accessibilityHazard, plus
  accessModeSufficient and accessibilitySummary, which epubcheck does
  not test for; used by
  - readers looking for a book it can use,
  - anyone distributing into the EU.
  Every value is derived from the document, not asserted: a document
  with no images says so, one whose images all carry alt text claims
  alternativeText and textual sufficiency, one where an image says
  nothing claims neither.
  Nothing claims WCAG conformance, which would be a claim about an
  evaluation that has not happened.

- DPUB-ARIA roles beside the structure spine already knew about.
  doc-toc, doc-endnotes, doc-bibliography, doc-glossary and doc-index on
  the sections, doc-noteref on a note reference and doc-footnote on the
  note it points at. "doc_endnotes" as a class name means something to a
  stylesheet and nothing to a reading system. Not doc-biblioentry: DPUB-
  ARIA 1.1 deprecated it. These are plain ARIA, so the html gets them
   too.

Also dealt with here:
- Spine makes certain sections such as endnotes, bookindex, ... and a
  heading that has a name for itself cannot share the same name, if it
  does the name is now disambiguated, disambiguated. (disambiguation
  similar to that used for a repeated anchor tag)

- Endnote anchors fixed to use "id" (being one unique tag in the
  document that is target of every reference to it)instead of obsolete
  form (they were &lt;a name="note_1"&gt;. "name" on an &lt;a&gt;).
  Book index markers keep "name": the same marker sits on every object
  an entry names, 296 times in one document, and those are markers of
  where a term occurs rather than distinct targets.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Four things, not visible in an error count:

- Images had no alt text, even where markup carried the text, and the
  field alt text is present, incorrectly used in code; fixed as the alt.

  { sm_tux.png 64x80 "Gnu/Linux - a better way" }image

  an image with nothing to say for itself gets alt=""

- Images with no dimensions were incorrectly written width="0"
  height="0", fixed

- Accessibility metadata, which EPUB Accessibility 1.1 requires:
  schema:accessMode, accessibilityFeature and accessibilityHazard, plus
  accessModeSufficient and accessibilitySummary, which epubcheck does
  not test for; used by
  - readers looking for a book it can use,
  - anyone distributing into the EU.
  Every value is derived from the document, not asserted: a document
  with no images says so, one whose images all carry alt text claims
  alternativeText and textual sufficiency, one where an image says
  nothing claims neither.
  Nothing claims WCAG conformance, which would be a claim about an
  evaluation that has not happened.

- DPUB-ARIA roles beside the structure spine already knew about.
  doc-toc, doc-endnotes, doc-bibliography, doc-glossary and doc-index on
  the sections, doc-noteref on a note reference and doc-footnote on the
  note it points at. "doc_endnotes" as a class name means something to a
  stylesheet and nothing to a reading system. Not doc-biblioentry: DPUB-
  ARIA 1.1 deprecated it. These are plain ARIA, so the html gets them
   too.

Also dealt with here:
- Spine makes certain sections such as endnotes, bookindex, ... and a
  heading that has a name for itself cannot share the same name, if it
  does the name is now disambiguated, disambiguated. (disambiguation
  similar to that used for a repeated anchor tag)

- Endnote anchors fixed to use "id" (being one unique tag in the
  document that is target of every reference to it)instead of obsolete
  form (they were &lt;a name="note_1"&gt;. "name" on an &lt;a&gt;).
  Book index markers keep "name": the same marker sits on every object
  an entry names, 296 times in one document, and those are markers of
  where a term occurs rather than distinct targets.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>epub and html: no errors left over the sample set</title>
<updated>2026-09-14T16:18:51+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-14T00:53:26+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=6835275408e1629f450d163e0cc5221c977e87d2'/>
<id>6835275408e1629f450d163e0cc5221c977e87d2</id>
<content type='text'>
epubcheck 5.3.0 over the 35 sample epubs went from 1302 remaining errors
to none. The six causes for those remaining errors fixed here.

most of the count was one of them:

- Tables (1123 errors, 86%) where the writer emitted obsolete
  attributes, removed in 2014; table also now in div instead of a
  paragraph. also fixed:

- Navigation (115). Every level 4 heading's nav entry ended "#0", the
  ocn of an object that has no ocn and so no id.

- Duplicate ids (37). (from three unrelated sources).

- The publication identifier (27 warnings). dc:identifier was a
  hardcoded hex string, not a UUID, and the same one in all 35 files,
  so two documents in one library collided. It is now UUID v5 over the
  document's own uid: a real RFC 4122 identifier, stable across builds
  and distinct per document.

- Image manifest entries (15). media-type was "image/" plus the file
  extension, giving "image/jpg", which is not a media type; epubcheck
  reads it as a foreign resource and wants a fallback. There is now a
  mapping, which also covers svg and webp. Item ids came from the file
  basename, and "2bits_02_01-100.png" gave an id starting with a digit,
  which is not an XML name; ids are now prefixed and sanitised.

- An ocn resolving to no segment (9). A poem block and its first verse
  share one ocn; the verses are written into a segment and the block
  itself is not.

Also dropped from the package document: an xmlns:xsi that nothing
used, and a prefix declaration for the rendition vocabulary, which is
a reserved prefix and needed no declaring. The package now carries
xml:lang.

test-epub-validity.sh now allows no fatal and no error. Two NAV-011
warnings remain and are described in it. Three reference .ssp files
change, all of them the anchor tag disambiguation above.

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
epubcheck 5.3.0 over the 35 sample epubs went from 1302 remaining errors
to none. The six causes for those remaining errors fixed here.

most of the count was one of them:

- Tables (1123 errors, 86%) where the writer emitted obsolete
  attributes, removed in 2014; table also now in div instead of a
  paragraph. also fixed:

- Navigation (115). Every level 4 heading's nav entry ended "#0", the
  ocn of an object that has no ocn and so no id.

- Duplicate ids (37). (from three unrelated sources).

- The publication identifier (27 warnings). dc:identifier was a
  hardcoded hex string, not a UUID, and the same one in all 35 files,
  so two documents in one library collided. It is now UUID v5 over the
  document's own uid: a real RFC 4122 identifier, stable across builds
  and distinct per document.

- Image manifest entries (15). media-type was "image/" plus the file
  extension, giving "image/jpg", which is not a media type; epubcheck
  reads it as a foreign resource and wants a fallback. There is now a
  mapping, which also covers svg and webp. Item ids came from the file
  basename, and "2bits_02_01-100.png" gave an id starting with a digit,
  which is not an XML name; ids are now prefixed and sanitised.

- An ocn resolving to no segment (9). A poem block and its first verse
  share one ocn; the verses are written into a segment and the block
  itself is not.

Also dropped from the package document: an xmlns:xsi that nothing
used, and a prefix declaration for the rendition vocabulary, which is
a reserved prefix and needed no declaring. The package now carries
xml:lang.

test-epub-validity.sh now allows no fatal and no error. Two NAV-011
warnings remain and are described in it. Three reference .ssp files
change, all of them the anchor tag disambiguation above.

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>epub, html, db: use of elements &amp; attributes, fix</title>
<updated>2026-09-14T16:18:49+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-13T02:42:06+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=c959735f21b3ddac6932bc9e8862d77a4421f133'/>
<id>c959735f21b3ddac6932bc9e8862d77a4421f133</id>
<content type='text'>
fixed, four things used that XHTML does not have.
(search db sisudoc-spine-search-cgi results share styling)

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
fixed, four things used that XHTML does not have.
(search db sisudoc-spine-search-cgi results share styling)

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>some file renames</title>
<updated>2026-09-12T16:39:08+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-12T02:01:51+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=bf605ac48b231c5852986be2b9a91838c617bfb7'/>
<id>bf605ac48b231c5852986be2b9a91838c617bfb7</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>sqlite: schema version, &amp; fail run on writes fail</title>
<updated>2026-09-10T00:26:27+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-09T16:05:55+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=12b1a42d654ac2bdde984a671b4b55ae595ae2fd'/>
<id>12b1a42d654ac2bdde984a671b4b55ae595ae2fd</id>
<content type='text'>
Spine now declares sqlite_db_schema_version and stamps it into the
database as PRAGMA user_version when the tables are created, in
both the shared and the discrete DDL blocks. On opening an
existing database it compares, and says once per run which version
it found and which it writes.

Failures are now tallied (shared, the output can run in parallel),
reported one line each on stderr naming the operation, and main
exits 1 without printing "run complete, ok".

Two tests under test/, both taking the spine binary as their first
argument and building their own database from data/pod unless
$SpinePOD says otherwise:
  test-search-db-schema.sh  names: every column the search form
    uses exists, and spine's declaration, the database's stamp
    and the search form's expectation all agree
  test-search-cgi.sh  behaviour: the real search binary answers
    real requests against a fresh database, no web server
    involved, the probe values read out of whichever database it
    is given

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Spine now declares sqlite_db_schema_version and stamps it into the
database as PRAGMA user_version when the tables are created, in
both the shared and the discrete DDL blocks. On opening an
existing database it compares, and says once per run which version
it found and which it writes.

Failures are now tallied (shared, the output can run in parallel),
reported one line each on stderr naming the operation, and main
exits 1 without printing "run complete, ok".

Two tests under test/, both taking the spine binary as their first
argument and building their own database from data/pod unless
$SpinePOD says otherwise:
  test-search-db-schema.sh  names: every column the search form
    uses exists, and spine's declaration, the database's stamp
    and the search form's expectation all agree
  test-search-cgi.sh  behaviour: the real search binary answers
    real requests against a fresh database, no web server
    involved, the probe values read out of whichever database it
    is given

(assisted by Claude-Code)
</pre>
</div>
</content>
</entry>
<entry>
<title>ocda: remove dead fields</title>
<updated>2026-09-09T21:07:32+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-09-06T22:11:56+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=204afb453c630bba44fdc975d4186922a4331299'/>
<id>204afb453c630bba44fdc975d4186922a4331299</id>
<content type='text'>
remove four dead fields, two of them serialised, none of the
them were assigned (or called for reading).

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
remove four dead fields, two of them serialised, none of the
them were assigned (or called for reading).

(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>sqlite: stop on missing/unwritable sqlite-db-path</title>
<updated>2026-05-16T15:57:30+00:00</updated>
<author>
<name>Ralph Amissah</name>
<email>ralph.amissah@gmail.com</email>
</author>
<published>2026-05-15T22:51:42+00:00</published>
<link rel='alternate' type='text/html' href='https://sisudoc.com/projects/sisudoc-spine/commit/?id=d9eb4ea08e509515f594b9bfcbf1c422d04c7e0c'/>
<id>d9eb4ea08e509515f594b9bfcbf1c422d04c7e0c</id>
<content type='text'>
- fatal error on missing/unwritable --sqlite-db-path

(assisted by Claude-Code)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- fatal error on missing/unwritable --sqlite-db-path

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