Improvements
Improvement ideas and feedback: changes that would make the product or workflow better, from reviews, users, or conversation. Use improve: or feedback:. Move sections to ITERATION.md when scheduling work.
Last id: IMP-21
Re-migrate catalog epubs to current codexis template (purple numbers + MathML)
Id: IMP-21
Date: 2026-07-04
Why: 58 of 60 readable books lack the compile-time section.paragraph purple
numbers (and true MathML). Their epubs predate the current codexis pipeline, so
the reader falls back to bare sequential per-chapter numbers (1,2,3, id=pn1)
instead of canonical numbers (Grunch: data-pn="3.1" id="3.1"). The leading
section number is a document-wide counter from the LaTeX structure (weaves
front/back matter, skips stub pages) that the reader CANNOT reconstruct from the
epub alone — so this is not a reader bug and must not be faked reader-side
(synthesized numbers = wrong references + permalinks that break on later
migration). Same root cause as the MathML gap (synergetics-epub-missing-mathml).
Description: Program (not a one-off): each book is its own codexis project
(elib-*) needing a legacy→current-template migration via the
codexis-template-migrate skill, which enables BOTH the purplenumbers package
(opt-in per book in config.yaml) and MathML (\Preamble{xhtml,mathml,…}). Per
book: migrate → codexis build --format epub → re-import to
<slug>/<slug>.epub → pnpm --filter reader build → wrangler pages deploy.
The reader is already correct and needs no change (trusts compile-time purple
numbers when present, falls back otherwise; Grunch proves the 3.1 right-margin
layout renders). First instance in flight: Synergetics (elib-synergetics IMP-1).
Sub-task 1 = inventory which of the 58 slugs have a ready codexis project vs need
one created. Detection: in apps/reader/dist, a migrated book has
data-pn="N.M" (dotted); a non-migrated one only bare-integer data-pn.
Inventory (2026-07-04) — codexis project availability for the 60 readable books:
- Done (2) — already ship compile-time purple numbers:
grunch_of_giants
(fully migrated),synergetics(data-pn="000.101"canonical; only MathML
pending, elib-synergetics IMP-1). - Migrate-able now (6) — codexis project exists:
- template-ish (has
manuscript.tex+config.yaml):cosmography,
cosmic_fishing,collaborating_for_comprehensivity→ enablepurplenumbers
(+ mathml) in config, rebuild, re-import. - legacy layout (
src/<book>.tex, needs fullcodexis-template-migrate):
zome_primer,total_thinking,a_fuller_explanation.
- template-ish (has
- No codexis project (52) — need a project scaffolded from source FIRST (the
large lift): all remaining primary Fuller works (operating_manual_for_spaceship_earth,
critical_path,utopia_or_oblivion,nine_chains_to_the_moon,
ideas_and_integrities,intuition,education_automation,earth_inc,
no_more_secondhand_god,4d_time_lock, …) plus most secondary works and the
22 recently-promoted titles (a_fuller_view,fullers_earth,wizard_of_the_dome, …).
Full list of 52 in session notes / regenerate via the slug↔elib-*match. - Bonus — these DEFERRED (not-yet-readable) books already have codexis projects,
so they're migrate-able if promoted:sunspots,introduction_to_geometry,
the_man_who_saved_geometry,regular_polytopes,articles(elib-rbf-articles),
synergetics_a_new_hope,50_years…,world_design_science_decade….
Reshaped cost model: only 8/60 have a project (2 done, 6 migrate-able); 52/60
need a codexis project created before any purple-number/MathML work. Naming
convention: reader slug foo_bar ↔ repo elib-foo-bar under ~/Projects.
Pilot result (2026-07-04, cosmography) — "migrate-able" ≠ "mechanical". Set
purple_numbers: true + codexis build --format epub: the epub came out with 0
purple numbers AND 0 MathML (still 27 math SVGs). Root cause: the tex4ht/htlatex
run errored (Missing \begin{document} on a generated glossary) and codexis
masks it ("exited non-zero but produced an EPUB; treating as success"), so the
purple anchors (stamped during that run) never emit and the epub is degraded.
Codexis IS mathml+purple capable; the blocker is a clean tex4ht compile per book.
So each of the 6 needs real per-book migration (fix compile → green tex4ht build →
verify dotted data-pn + <math> → re-import), not a config flip — same as
Synergetics, best done per-repo with the codexis-template-migrate skill.
(cosmography config.yaml has purple_numbers: true set but UNCOMMITTED pending
a working build.)
Add an accession record for each collection item
Id: IMP-2
Date: 2026-05-09
Description: Add an accession record for each item in the collection so we can track details about each item.
Find digital receipts for each collection item
Id: IMP-3
Date: 2026-05-09
Description: Find digital receipts for each item in the collection so purchase and acquisition details are preserved.
Chrome extension to ingest items into the llm-wikis
Id: IMP-4
Date: 2026-06-28
Why: Capture sources directly from the browser into the wikis' ingest pipelines, instead of manually downloading files and dropping them into each repo's inbox — lowering the friction of adding sources across multiple knowledge bases.
Description: Build a Chrome extension that ingests items (pages, PDFs, selections, links) into the LLM wikis maintained across projects — e.g. buckyverse, jouleheist, etc. Should target the multiple wikis (likely via a selectable destination), feeding the same ingest-by-reference / raw-source flow these wikis already use.
Use readability extraction for Zotero ingest live-URL bodies
Id: IMP-6
Date: 2026-06-30
Why: During the IMP-5 Zotero ingest, live-URL fetching captured page nav/menus/footer chrome rather than clean article text, because zotero/ingest_to_wiki.py uses a plain HTMLParser tag-strip. Cleaner bodies make the raw sources far more useful for compile/query.
Issue: default_url_fetcher + extract_text_from_html strip tags but keep all visible text, so fetched ## Page content sections include boilerplate (e.g. the Macmillan "On Film-making" record is mostly site navigation).
Suggestion: Replace the tag-strip with a readability-style main-content extraction (e.g. a readability port, or heuristic largest-text-block selection) for fetch_status: ok records; optionally re-fetch existing noisy records.
Reconcile Zotero ingest slug-exact dedup with existing book dirs
Id: IMP-7
Date: 2026-06-30
Why: The IMP-5 Zotero ingest dedups by exact slug, so books that already exist as repo-root source dirs but under a subtitle-variant slug (e.g. Zotero "Utopia or oblivion: the prospects for humanity" → utopia-or-oblivion-the-prospects-for-humanity vs the repo dir utopia_or_oblivion/) were created as new raw/repos/*.md pointer records instead of matched — producing some redundancy with existing book sources.
Issue: scan_existing/resolve_action in zotero/ingest_to_wiki.py match slugs exactly; subtitle/edition differences defeat the match, so ~150 new repo pointers were created, some duplicating books already represented as root dirs.
Suggestion: Add fuzzy/normalized title matching (e.g. compare on title prefix before the first colon, or token-overlap against existing repo slugs and root book dirs) so near-duplicate books enrich the existing record instead of creating a new pointer; review the existing duplicates and reconcile.
Create updates/ and publish weekly summaries of books, articles, features, and changes
Id: IMP-10
Date: 2026-07-01
Why: buckyverse grows continuously (new book/article sources, wiki articles, features, page changes) but there is no running record of "what's new." A weekly summary gives readers a reason to return, surfaces recent additions that would otherwise be buried in a 23k-page wiki, and doubles as a changelog/newsletter for the project.
Issue: There is no updates/ section and no periodic digest; recent activity is scattered across the Wiki.js database (new/updated pages) and the git repo (commits, new source dirs, .wiki/ compiles) with no consolidated, reader-facing summary.
Suggestion: Create an updates/ area (repo-root pages + Wiki.js publish, mirroring the book-page pattern) and publish weekly summary posts covering new books, articles, features, and notable changes. Determine each week's content options from BOTH sources: the Wiki.js database (pages created/updated in the window — via the existing dev/wikijs tooling/GraphQL) and the git repo (commits, new root source dirs, .wiki/log.md ingest/compile entries) in the window. Draft the digest from that combined signal, then curate/publish. Consider automating the data-gathering step and a template for the post.
Add a "read in Bucky's voice" option to book pages
Id: IMP-11
Date: 2026-07-01
Why: An audio option that reads a page aloud in Buckminster Fuller's own synthesized voice would make the texts far more engaging and accessible — a distinctive, on-brand way to experience the corpus (audiobook-style, but in Bucky's voice), and a natural payoff for the voice-synthesis research already scoped.
Issue: Book/source pages are text-only; there is no way to listen to a page, let alone hear it in Fuller's voice.
Suggestion: Add a control on book pages (Wiki.js) that plays the page text as speech in a synthesized Bucky voice. Build on the TODO-6 Fuller voice-synthesis recipe (ACC-2, .wiki/output/projects/fuller-voice-synthesis/recipe.md): generate audio from page text (pre-rendered per page or on demand), host the audio, and add a play button/widget to the page template. Respects the recipe's ethics/rights stance (BFI permission + label audio as synthetic). Decide pre-generation vs. real-time TTS and where audio is stored/served.
Organization entity pages — Batch 2: publishers, agencies, and the long tail
Id: IMP-15
Date: 2026-07-01
Why: IMP-13 covered ~11 corpus-significant institutions, but many organizations that recur across the corpus still lack a node — completing coverage makes the organizational axis fully navigable alongside the people layer.
Issue: Organizations have no seed collection; the remaining ones (publishers, agencies, companies, minor institutions) live only in scattered corpus mentions and were capped at ~11 for Batch 1.
Suggestion: Continue the entity-organization model from IMP-13: create pages for the long tail — publishers (Garland, MIT Press, Princeton Architectural Press, and SIU Press if split from the university), agencies (NASA, the DEW-line/military dome programs), companies, and one-mention institutions not covered by Batch 1 — each with a description, "Role in Fuller's world", and bidirectional links, added to the fuller-organizations.md registry. Reuse the Batch-1 spec/plan (docs/superpowers/specs/2026-07-01-organization-entity-pages-design.md). With people (IMP-8/9, IMP-12, IMP-14) and organizations complete, the entity model spans the whole corpus.
Fork Wiki.js (or patch-overlay) to land pending page-render / tree-rebuild performance PRs
Id: IMP-20
Date: 2026-07-02
Why: Wiki.js rebuilds the entire page tree (O(all pages)) on every page create/update. On our ~23k-page site that makes bulk writes ~60s/page — measured during the llm-wiki knowledge/ projection, where a full ~1,068-page mirror extrapolates to ~17–18 hours and intermittently slows the live site during the run. Faster mutations would help not just bulk imports but everyday editing/publishing latency for readers and authors. Community PRs addressing render/tree performance reportedly exist but sit unmerged upstream (no maintainer to accept/implement them).
Issue: We run the stock ghcr.io/requarks/wiki:2 image; the per-mutation tree rebuild + render cost is a fixed upstream bottleneck we can't tune via config or GraphQL. Wiki.js 2.x is effectively in maintenance and Wiki.js 3 remains unreleased, so the pending perf improvements aren't reaching us.
Suggestion: Evaluate landing the pending performance work ourselves. Options in increasing order of commitment: (1) minimal patch overlay — cherry-pick just the tree-rebuild/render PRs into a thin Docker image layer over requarks/wiki:2 (least maintenance, no full fork); (2) maintained fork — fork Wiki.js, merge the perf PRs, build/host our own image (more control, but inherits the upstream security-patch/dependency burden); (3) wait for / migrate to Wiki.js 3. Note the safe one-time workaround already exists for bulk imports (scoped GraphQL projection run in off-hours phases), so this is about ongoing performance, not just the current migration.
Research findings (2026-07-02): Root cause is Page.rebuildTree() in server/models/pages.js — a full O(all-pages) tree rebuild run synchronously after every create/update/delete (≈60s/page at our 23k-page scale). Three upstream PRs address it, all touching the single file server/models/pages.js and all against main (= the 2.x line our requarks/wiki:2 image is built from), which makes a patch overlay very tractable:
- requarks/wiki#7780 — "feat(pages): incremental page tree updates" (OPEN, mergeable, +248/−10, 1 file). Per-action incremental tree maintenance instead of full rebuilds — the direct fix. Zero review/comments since 2025-09-09 (unmerged from neglect, not rejection — Wiki.js 2.x is in maintenance). Primary candidate to land. Risk: unreviewed, so we must test move/rename, nested deletes, and cache-invalidation ourselves.
- requarks/wiki#6082 — background rebuild patch (CLOSED). Makes
rebuildTree()run in the background (rebuildTreeBG()with running/queued guards) so saves return immediately and the tree catches up async. Simplest concept; low-risk fallback if #7780 misbehaves (trade-off: brief tree staleness after a save — fine for bulk import). - requarks/wiki#6246 — chunk-wise pageTree save (OPEN, mergeable). Chunks the tree writes to avoid DB connection timeouts on large sites; improves rebuild reliability but not per-save latency — complementary to #7780.
- Tangential (not the bottleneck): #7854 (extract page-conversion service), #7866 (parsing refactor).
Recommended next step: build a Docker image FROM ghcr.io/requarks/wiki:2 that patches server/models/pages.js with #7780, deploy to a staging/local Wiki.js, and benchmark create/update latency vs. the ~60s/page baseline; keep #6082's background approach as the fallback patch.
Benchmark result (2026-07-02): Confirmed against the real 45,937-page prod dump by replaying the exact rebuild-tree.js assembly loop and timing #7780's incremental lookups. Stock rebuildTree = ~56,000 ms per page write (O(n²) _.find scan — matches the ~60s/page seen live). #7780 = ~40 ms/write (~1,400×), or ~1 ms with a (localeCode,path) index the PR omits (~56,000×). Drops the full ~1,068-page projection from ~17h to a couple of minutes and fixes site-wide edit latency.
Image built + correctness-tested (2026-07-02): Patched image buckyverse/wiki:2-perf7780 builds cleanly on the droplet (patch applies to the exact live 2.x image). A correctness harness (dev/wikijs/perf-7780/harness.js) drove #7780's methods against the real 46k-page copy and diffed the result against a full rebuildTree() after every op — found two bugs that make #7780 undeployable as-written: (1) fatal — pageTree.id has no sequence in stock Wiki.js, so addPageToTree's id-less insert throws on every create/move and #7780's catch silently falls back to the slow full rebuild (→ zero speedup for our all-create workload); (2) cleanupEmptyFolders compares pg's string count to a number ('0' === 0), so emptied folders are never removed (orphan folders accumulate). Both fixed (pagetree-id-sequence.sql migration + a one-line numeric fix in 7780-fixed.patch) → harness ALL PASS. Artifacts + runbook under dev/wikijs/perf-7780/.
DEPLOYED + VERIFIED LIVE (2026-07-02): After a detour (the first deploy attempts were masked because the true write bottleneck was Wiki.js git storage, not the tree — see DEBT-2; once git storage was disabled, the patch's benefit became visible), the patched image is live behind Caddy and creates dropped from ~56s to ~3.5s, deletes to ~0.3s (incremental path, no fallback, id floored at 100M per the corrected pagetree-id-sequence.sql). That's ~16× — the full ~1,068-page knowledge/ projection went from 17h/3h estimates to ~1 hour. Two prerequisites, both now baked into the runbook: (1) the pageTree.id sequence must be floored high (100M) or rebuildTree desyncs it and every create collides→falls back (the bug that made early attempts look like failures); (2) the site must not be git-storage-bound. Caddy TLS termination (DEBT-1) makes the wiki-container swap cert-neutral, so this deploy is low-risk and one-line reversible.