PRJ-BIBLIOTHECA — Domus Library System

Project Summary

Field Value

PRJ ID

PRJ-BIBLIOTHECA

Owner

Evan Rosado

Priority

P1 (High)

Status

Active — Phase 1

Parent Directory

~/atelier/_bibliotheca/

GitHub Org

github.com/EvanusModestus/domus-*

Category

Education

Architecture

Multi-spoke: one Antora component per study domain, hub-aggregated

Originating RCA

RCA-2026-04-11-001

Spoke Registry

Spoke Domain Component Status

domus-scripture

Bible study — RV1909, KJV, Tanakh (~6,800 pages)

scripture

Phase 1 — scaffolding

domus-classics

Literary classics — Don Quijote, Garcia Marquez, DISCO Sonnets

classics

Planned

domus-technical

Technical books — Python, Bash, networking, security

technical

Planned

domus-lingua

Language study — Spanish, Hebrew, linguistic analysis

lingua

Planned

domus-tools

Tool mastery — Neovim, tmux, CLI deep-dives (study notes, not command reference)

tools

Planned

Purpose

PRJ-BIBLIOTHECA is the governance project for the Domus Digitalis library system — a multi-spoke Antora architecture for structured study across scripture, literature, technical books, languages, and tool mastery.

Each study domain gets its own spoke repository and Antora component. This prevents any single domain from hitting the build limits that triggered this project (Antora hangs at ~5,000 pages; Cloudflare enforces 20-minute build timeout). Each spoke builds independently, deploys independently, and scales independently.

The distinction from the codex (domus-captures) is purpose:

System Purpose Example

Codex

Command reference — copy-paste patterns

awk '{print $1}' /etc/passwd

Bibliotheca

Study notes — structured learning from books and texts

Chapter 3 summary, vocabulary, exercises, reflections

The codex answers "how do I use this tool." The bibliotheca answers "what did I learn from this book."

Scope

Phase 1: domus-scripture

  • La Reina Valera 1909 — 66 books, 1,189 chapters (Spanish, public domain)

  • King James Version — 66 books, 1,189 chapters (English, public domain)

  • Tanakh (WLC) — 39 books, 929 chapters (Hebrew with nikkud, public domain)

  • Per-chapter study scaffolds (capitulo-*.adoc) with xref to texto pages

  • Per-chapter full text pages (texto/*.adoc) split from Principia source

  • Per-book index pages with dual-track xref tables (Notes + Full Text)

  • Full chapter-level nav via partials (scripture-rv1909/kjv/tanakh.adoc)

  • Tracker partials for reading progress

  • Generation script for reproducible page creation from Principia sources

Phase 2: domus-classics

  • Don Quijote de la Mancha — 126 chapters, dual-track (study + texto)

  • Garcia Marquez — study pages

  • DISCO Sonnets — 10,288 Spanish sonnets (15th-20th century)

Phase 3: domus-technical

  • Python book study (chapters, exercises, patterns)

  • Bash/shell scripting (RHCSA study, exercises)

  • Networking (CCNP study material, lab notes)

  • Security tools and methodologies

Phase 4: domus-lingua

  • Spanish language study and grammar

  • Hebrew study and translation exercises

  • Linguistic analysis and comparative notes

Phase 5: domus-tools

  • Neovim mastery (beyond codex — book-style study)

  • tmux deep-dive study notes

  • Other tool study guides

Out of Scope

  • Principia PKMS content (terminal-reading text stays in Principia)

  • Codex entries (stay in domus-captures — command reference, not book study)

  • Hub configuration (managed by domus-docs)

  • Cloudflare Pages project setup (manual step per spoke)

Architecture

Multi-Spoke Design

domus-docs (hub)
├── antora-playbook.yml          # aggregates all spokes
├── domus-captures               # codex, worklogs, projects
├── domus-scripture              # Phase 1: Bible study
├── domus-classics               # Phase 2: literary classics
├── domus-technical              # Phase 3: technical books
├── domus-lingua                 # Phase 4: language study
├── domus-tools                  # Phase 5: tool mastery
└── (existing spokes: infra-ops, ise-linux, netapi, secrets-ops, antora-ui)

Each spoke is:

  • Its own git repository

  • Its own Antora component (unique name: in antora.yml)

  • Its own Cloudflare Pages build (or aggregated via hub)

  • Independently scalable — adding 10,000 sonnets doesn’t slow scripture

Repository Template (per spoke)

domus-<domain>/
├── docs/asciidoc/
│   ├── antora.yml                     # component: <domain>
│   ├── antora-playbook.yml            # standalone build (local testing)
│   └── modules/ROOT/
│       ├── nav.adoc                   # includes nav partials
│       ├── pages/
│       │   ├── index.adoc
│       │   └── <corpus>/             # one directory per work/book
│       │       ├── index.adoc
│       │       └── <chapters>/
│       ├── partials/
│       │   ├── trackers/
│       │   └── nav/
│       └── examples/
├── scripts/
│   └── generate-study.py
├── Makefile
├── package.json
├── .gitignore
└── README.adoc

Dual-Track Study Pattern

Each corpus mirrors the Don Quijote pattern from domus-captures:

Track Purpose

capitulo-.adoc / chapter-.adoc

Study notes — summary, themes, vocabulary, parallel reading, reflections

texto/.adoc / text/.adoc

Source text — verse/paragraph per line with superscript numbers

index.adoc (per book)

Dual xref table linking to both tracks for every chapter

Nav partials

Full chapter-level sidebar navigation

Study pages link to corresponding text pages via TIP block:

TIP: xref:reina-valera/antiguo-testamento/genesis/texto/texto-001.adoc[Read Chapter 1]

Cross-Component References

From domus-captures or any other spoke:

xref:scripture::reina-valera/index.adoc[La Reina Valera]
xref:classics::quijote/index.adoc[Don Quijote]
xref:technical::python/index.adoc[Python Study]
xref:lingua::spanish/index.adoc[Spanish Language]
xref:tools::neovim/index.adoc[Neovim Mastery]

Hub Registration (per spoke)

# domus-docs/antora-playbook.yml — add one entry per spoke
- url: https://github.com/EvanusModestus/domus-scripture
  branches: main
  start_path: docs/asciidoc
  edit_url: false

Generation Scripts

Two scripts handle the full spoke lifecycle:

Script Purpose

domus-captures/scripts/bibliotheca/scaffold-spoke.sh

Creates GitHub repo, scaffolds Antora structure, installs dependencies, verifies build, commits, pushes. One command per spoke — infrastructure only, no content.

domus-captures/scripts/bibliotheca/generate-scripture.py

Reads Principia .adoc sources, splits by chapter headings, generates all content into a spoke. Copied into spoke as scripts/generate-study.py after scaffolding.

# Scaffold (run once)
./scripts/bibliotheca/scaffold-spoke.sh scripture "Scripture Study" "Bible study — RV1909, KJV, Tanakh"

# Generate (run from spoke — idempotent, safe to rerun)
cd ~/atelier/_bibliotheca/domus-scripture
python3 scripts/generate-study.py --corpus all           # generate ~6,800 files
python3 scripts/generate-study.py --corpus rv1909        # single corpus
python3 scripts/generate-study.py --corpus all --dry-run # preview without writing

The generation script produces: texto pages, study scaffolds, book indexes, division indexes, corpus hubs, spoke hub (pages/index.adoc), nav partials, and root nav.adoc. All xrefs are component-relative. Source and output validation run automatically (pre- and post-generation).

Execution Plan

Phase 1: domus-scripture

Two scripts handle the full pipeline. Both live in domus-captures/scripts/bibliotheca/.

Set once per session — all steps below reference this variable:

SPOKE=~/atelier/_bibliotheca/domus-scripture

1a. Scaffold the Spoke

scaffold-spoke.sh creates the GitHub repo, clones, generates all config files, installs npm, commits, verifies build, and pushes. Uses --resume if repo/directory already exist from a partial run.

# From domus-captures (where scripts live)
# Fresh run:
./scripts/bibliotheca/scaffold-spoke.sh scripture "Scripture Study" \
  "Bible study — RV1909, KJV, Tanakh" 2>&1 | tee /tmp/scaffold-spoke.log

# Resume after partial failure (skips repo creation and clone):
./scripts/bibliotheca/scaffold-spoke.sh --resume scripture "Scripture Study" \
  "Bible study — RV1909, KJV, Tanakh" 2>&1 | tee /tmp/scaffold-spoke.log

Output: empty spoke at ~/atelier/_bibliotheca/domus-scripture with clean build, pushed to origin.

1b. Generate Content

generate-scripture.py reads Principia source .adoc files, splits by chapter headings, and generates all content: texto pages, study scaffolds, book indexes, division indexes, corpus hubs, nav partials, spoke hub, and root nav.adoc.

All xrefs are component-relative (no education/literature/ prefix).

# Copy script into spoke and generate — no cd required
cp scripts/bibliotheca/generate-scripture.py "${SPOKE}/scripts/generate-study.py"

# Dry-run: preview file counts without writing
python3 "${SPOKE}/scripts/generate-study.py" --corpus all --dry-run 2>&1 | tee /tmp/generate-scripture-dry.log

# Generate all three corpora (~6,800 files)
python3 "${SPOKE}/scripts/generate-study.py" --corpus all 2>&1 | tee /tmp/generate-scripture.log

Flags:

Flag Purpose

--corpus rv1909|kjv|tanakh|all

Select corpus (default: all)

--output-root <path>

Override modules/ROOT target (default: domus-scripture spoke)

--source-root <path>

Override Principia assets root

--dry-run

Show file counts and structure without writing

1c. Build and Validate

make -C "${SPOKE}" 2>&1 | tee /tmp/domus-scripture-build.log
# MUST show: zero errors, zero warnings

1d. Commit and Push (domus-scripture)

git -C "${SPOKE}" add -A
git -C "${SPOKE}" commit -m "$(cat <<'EOF'
feat: generate scripture content — RV1909, KJV, Tanakh (~6,800 pages)

PRJ-BIBLIOTHECA Phase 1b
Three corpora: La Reina Valera 1909, King James Version, Tanakh (WLC)
Dual-track: study scaffolds + full text per chapter
EOF
)"
git -C "${SPOKE}" push origin main

1e. Register in Hub (domus-docs)

HUB=~/atelier/_bibliotheca/domus-docs/antora-playbook.yml

sed -i '/domus-captures$/,/edit_url: false/ {
  /edit_url: false/a\
\
    # Scripture Study (PRJ-BIBLIOTHECA)\
    - url: https://github.com/EvanusModestus/domus-scripture\
      branches: main\
      start_path: docs\
      edit_url: false
}' "${HUB}"

Verify placement:

awk '/domus-captures/,/domus-scripture.*edit_url/' "${HUB}"

Commit and push the hub:

git -C ~/atelier/_bibliotheca/domus-docs add antora-playbook.yml
git -C ~/atelier/_bibliotheca/domus-docs commit -m "$(cat <<'EOF'
feat: register domus-scripture spoke in hub playbook

PRJ-BIBLIOTHECA Phase 1e
Component: scripture, start_path: docs
EOF
)"
git -C ~/atelier/_bibliotheca/domus-docs push origin main

1f. Copy Tracker Partials (domus-captures → domus-scripture)

Both trackers are xref-free — safe to copy without adaptation.

cp ~/atelier/_bibliotheca/domus-captures/docs/modules/ROOT/partials/trackers/education/la-reina-valera.adoc \
   "${SPOKE}/docs/modules/ROOT/partials/trackers/"

cp ~/atelier/_bibliotheca/domus-captures/docs/modules/ROOT/partials/trackers/education/tanakh.adoc \
   "${SPOKE}/docs/modules/ROOT/partials/trackers/"

1g. Validate Spoke (domus-scripture)

# Verify trackers copied
ls "${SPOKE}/docs/modules/ROOT/partials/trackers/"
# Verify file counts match generation output
find "${SPOKE}/docs/modules/ROOT/pages" -name "*.adoc" -type f | wc -l
# Expected: ~6,796 pages
# Verify nav partials
find "${SPOKE}/docs/modules/ROOT/partials/nav" -name "*.adoc" -type f
# Expected: scripture-rv1909.adoc, scripture-kjv.adoc, scripture-tanakh.adoc
# Spot-check: Genesis 1 study page has TIP xref to texto
awk '/^TIP:/' "${SPOKE}/docs/modules/ROOT/pages/reina-valera/antiguo-testamento/genesis/capitulo-001.adoc"

1h. Verify No Cleanup Needed (domus-captures)

Codex scripture pages (pages/codex/scripture/) are CLI reference (terminal reading commands) — these stay in domus-captures. All existing xrefs either point to local codex pages or already use cross-component scripture:: syntax.

# Confirm: all scripture xrefs are either local codex or cross-component
rg 'xref:.*scripture' ~/atelier/_bibliotheca/domus-captures/docs/modules/ROOT --glob '*.adoc'

Expected output — no captures-internal xrefs to study content:

  • xref:codex/scripture/…​ — local codex pages (stay)

  • xref:scripture::…​ — cross-component to spoke (already correct)

1i. Fix Standalone UI Bundle (domus-scripture)

The scaffold generates antora-playbook.yml with the default Antora UI. Update to the Domus Catppuccin UI bundle for local builds:

sed -i 's|url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/HEAD/raw/build/ui-bundle.zip?job=bundle-stable|url: /home/evanusmodestus/atelier/_bibliotheca/domus-antora-ui/build/ui-bundle.zip|' \
  "${SPOKE}/antora-playbook.yml"

Verify:

awk '/ui-bundle/' "${SPOKE}/antora-playbook.yml"

Also update scaffold-spoke.sh to use the custom UI by default for future spokes.

1j. Set Repo to Private

Scripture spokes contain study material — not public-facing. The scaffold script creates repos as private by default.

gh repo edit EvanusModestus/domus-scripture --visibility private --accept-visibility-change-consequences

1k. Grant Cloudflare Access (per new spoke)

Cloudflare Pages needs permission to clone each spoke repo (especially private ones). Without access, the hub build hangs then times out at ~20 minutes.

Grant access via GitHub:

GitHub → Settings → Integrations → Applications → Cloudflare Pages → Configure → Repository access

Add the new spoke repo (e.g., domus-scripture) to the allowed list.

1l. Disable Spoke in Hub (if Cloudflare build exceeds timeout)

Cloudflare Pages has a ~20 minute build limit. If the hub build times out after adding a spoke, comment it out until GitHub Actions deployment is configured.

HUB=~/atelier/_bibliotheca/domus-docs/antora-playbook.yml

# Comment out the scripture spoke block
sed -i '/Scripture Study/,/edit_url: false/ s/^/    # /' "${HUB}"

Verify:

awk '/Scripture/,/edit_url/' "${HUB}"

Add a note above the commented block:

sed -i '/# .*# Scripture Study/i\    # DISABLED: Cloudflare Pages build timeout (~20 min). Enable after GitHub Actions deploy configured.' "${HUB}"

Verify the full block:

awk '/DISABLED/,/edit_url/' "${HUB}"

Commit and push (domus-docs):

git -C ~/atelier/_bibliotheca/domus-docs add antora-playbook.yml
git -C ~/atelier/_bibliotheca/domus-docs commit -m "$(cat <<'EOF'
fix: disable scripture spoke — Cloudflare build timeout

Hub build exceeds Cloudflare Pages 20-min limit with scripture (~6,800 pages).
Local hub build: ~2 min. Cloudflare environment too slow.
Re-enable after GitHub Actions direct deploy is configured.
EOF
)"
git -C ~/atelier/_bibliotheca/domus-docs push origin main

Phase 2: domus-classics (when ready)

Repeat the spoke creation pattern:

  1. gh repo create domus-classics --public

  2. Scaffold, configure, generate

  3. Migrate Don Quijote from domus-captures

  4. Generate DISCO Sonnets from Principia source

  5. Build, validate, integrate

Phase 3-5: domus-technical, domus-lingua, domus-tools

Each follows the same spoke creation pattern. Create only when content is ready — no empty repos.

Verification Checklist (per spoke)

  • npx antora in spoke — zero errors, zero warnings

  • make in domus-captures — zero errors after migration

  • make in domus-docs — hub builds with new component

  • Sample page renders correctly (Genesis 1 for scripture, Chapter 1 for classics)

  • Study pages link to text via TIP block

  • Nav sidebar shows chapter-level navigation

  • Cross-component xrefs resolve in hub build

Risks

Risk Mitigation

Spoke build exceeds Cloudflare limit

Each spoke builds only its own pages. Scripture ~6,800 should be under 20 min. Monitor build times.

Nav partial xref paths wrong

Generation script uses component-relative paths (no education/literature/ prefix)

Too many spokes to manage

Create spokes only when content exists. No empty repos. Hub playbook is the single source of truth.

Cross-component xrefs break

Validate in hub build. rg 'xref:scripture::' docs/ to find all references before spoke changes.

Build output missed

Always make 2>&1. Never grep build output.

Status

Indicator Detail

Activity Level

Active — Phase 1 (domus-scripture) in progress

Maturity

Pre-alpha — generation script tested, architecture validated

Last Activity

2026-04-11

Key Milestones

  • 2026-04-10: Scripture texts converted from GitHub JSON sources to AsciiDoc in Principia

  • 2026-04-11: Study pages generated and tested in domus-captures (~6,800 pages)

  • 2026-04-11: Build failure at volume — RCA-2026-04-11-001

  • 2026-04-11: Decision to create dedicated spoke architecture

  • 2026-04-11: Renamed PRJ-SPOKE-016 → PRJ-BIBLIOTHECA, multi-spoke strategy

  • 2026-04-11: Scripture pages removed from domus-captures, build restored

  • 2026-04-11: generate-scripture.py adapted for spoke (component-relative xrefs, --dry-run, --output-root, source/output validation)

Current Phase

Phase 1: domus-scripture — scaffold spoke, then generate content

Blockers

Run scaffold-spoke.sh scripture then generate-scripture.py --corpus all

Deployment Status

Not deployed — pending Phase 1 completion

Metadata

Field Value

PRJ ID

PRJ-BIBLIOTHECA

Author

Evan Rosado

Date Created

2026-04-11

Last Updated

2026-04-11

Status

Active — Phase 1

Category

Education

Originating RCA

RCA-2026-04-11-001

Next Review

2026-04-18