2026-09-18
- **Zenodo intake hygiene:** the four software-only Zenodo deposits that kept
- **Live-doc legacy sweep:** all 217 distinct
.pyreferences, ~50 CLI flags,
Recent changes to the public research, software, citation, evidence, and discovery index.
.py references, ~50 CLI flags,code/orchestrators/settle.py) + change classifiercode/src/build_stamp.py memoizes the build stampprefers-color-scheme: light the cardis_draft_release inlatest_payload_commit inpython3 resolved through PATH, so running validate_repo.py with the project's own .venv/bin/python silently validated under a *different* Python — reproducibly failing with ModuleNotFoundError: No module named 'PIL' while Pillow was installed in the launching environment. All 30 call sites in validate_repo.py, regenerate_all.py, sync_paired_publications.py, add_zenodo_only.py, browser_qa.py, browser_smoke.py, visual_qa.py, and the test suite now use sys.executable. The CV generator keeps its deliberate uv run python3 for byte-identical ReportLab PDFs, and code/tests/test_interpreter_consistency.py holds that as the one documented exception.ruff check --select W605 code, which left 44 real findings invisible — unused imports, a shadowed json import, import sys missing from a module that calls sys.path.insert, ambiguous l bindings, and an unused argparse result. All 44 are fixed, the rule set now lives in pyproject.toml under [tool.ruff.lint] (Ruff defaults + W605), and both validate.yml and pages.yml run the config-driven ruff check code so a local run and CI enforce the same rules. Deliberate re-exports (seo_invariants.REDIRECT_STUBS) are marked rather than deleted.data/repository-exclusions.json schema 1.4):** a fork that appeared in the 2026-08-30 inventory refresh (docxology/RGMs) sat unacknowledged and failed the classification contract. Rather than backdate a review nobody performed, reviewed_by now distinguishes principal (this repository was reviewed individually, on reviewed_at) from standing_policy (an already-recorded principal decision was applied to a repository nobody looked at one by one). A standing_policy entry must name that decision in policy_source and may only cover a fork — retiring a primary repository is always an individual call, enforced in classify_repositories.py with negative fixtures. data/agent-index.json documents all three provenance fields (schema registry 1.4). The fork-review test no longer pins the literal 2026-08-26 review date, which had made every later decision a test failure.build_image_sitemap.py and sitemap-images.xml were deleted on 2026-08-28, but the generated manifest kept publishing a rebuild command and an output file for both, so GENERATED.md and data/generated-manifest.json handed every agent a generator that does not exist. Cleared from the manifest, code/AGENTS.md, code/README.md, CLAUDE.md, and the asset-strategy ADR (which credited the decision to a test file that had also been deleted; the real pin is code/tests/test_regenerate_all.py). A new manifest test fails on any declared generator script that is missing from the tree.CLAUDE.md's prose step list had fallen nine steps behind LOCAL_GENERATION_STEPS — it still named the deleted image-sitemap generator and omitted ten steps added since — so an agent following it would have rebuilt the site incorrectly and trusted the result. The chain is corrected, prune_old_reports.py's deliberate exclusion is stated (a destructive step has no place in an idempotent rebuild), and code/tests/test_generation_plan_docs.py pins prose to plan. code/tests/test_code_agents_doc.py does the same for code/AGENTS.md's layout table and its report_paths importer count, which had drifted twice (~20 → ~26 → the actual 31).collect_seo_errors() pass decoded 5,613 files / 91.1 MB because eight checks walked overlapping page sets and check_canonical_integrity read every HTML file twice on its own. A revision-keyed page cache (path + inode + size + nanosecond mtime, so any rewrite or atomic replace misses) brings that to 1,582 files / 24.9 MB, and memoizing internal-link resolution — shared nav links resolved thousands of times through Path.resolve() — took check_canonical_integrity from 45.5 s to 1.2 s in the same run. Two regression tests hold both properties, including that a rewritten file is never served from the cache.bind() is a missing local capability like a missing chromium binary, not a site defect. Only PermissionError is treated this way; an address in use or any other OSError still fails..github/README.md is generated, not copied — 120 broken links on the repository page:** GitHub renders .github/README.md in preference to the root README.md and resolves its relative links against .github/, so the 2026-09-02 byte-identical mirror pointed every repo-relative link at .github/publications.html, .github/papers/..., and so on. That is also why validate_repo.py's local-link gate was red at HEAD. New build_github_readme.py renders the mirror from README.md with ../-relocated targets and a do-not-edit marker, registered in the generation plan (after the final sync_site_facts.py, so it carries the final counts), the generated manifest, and code/AGENTS.md. The two files can no longer drift, because one is derived from the other. validate_local_links passes.check_external_links.py --check was failing at HEAD because the cached coverage contract included the footer build-stamp permalink (.../commit/<sha>), which every regeneration rewrites — each refresh made the next commit's report "missing" the new SHA while carrying the old ones as "unexpected", so the gate could never be current for more than one commit, and the URLs are unverifiable before the commit is pushed anyway. Build-stamp permalinks joined IGNORE_PREFIXES, the same forgiveness build_stamp.reuse_on_disk_stamp and build_sitemap --check already apply. The report was then refreshed against the live web (809 URLs, 680 ok): no 404s, and the failure profile is unchanged from the 2026-08-29 report (98 doi.org 429 rate-limits, 24 bot-protection 403s, 1 LinkedIn 999), so the triage backlog is the same known set, not new rot.curated is derived from data/software.json, but it was only recomputed when build_github_inventory.py ran a *network* fetch and froze the flag into its snapshot — so every catalog promotion left a review-queue row demanding a decision that had already been made, until someone happened to run an authenticated refresh. docxology/millennium_audit had been sitting there since 2026-09-04. classify_repositories.py now reads the catalog directly, as a second reason to exclude and never a reason to include, so it can only remove a false row. The primary review queue drops from three rows to the two that are genuinely undecided (docxology/cognitive_integrity, docxology/dicklesworthstone_meta_operator).discover_redirect_stubs walks every HTML document through the hardened reader, and several callers reach it more than once per process, which made it the slowest thing in the test suite. It now memoizes by lstat identity — path, inode, size, nanosecond mtime — so a rewrite, an atomic replace, or a path that becomes a symlink all miss the cache and go back through the reader that refuses them. test_redirect_stubs.py fell from 439 s to 92 s, and two new tests hold both properties, including that a cached path replaced by a symlink still fails closed.reproducibility.json / reproducibility.html / REPRODUCIBILITY.md carried pre-millennium_audit figures (executable-code signal 63 → 64, mean score 4.693 → 4.698), and the nine domain pages carried a dateModified older than data/current-counts.json.docxology/millennium_audit](https://github.com/docxology/millennium_audit) from papers/2026_MillenniumAudit/ (README pointer and github_repo metadata field; AGENTS/SKILL/papers/paper_metadata.json regenerated)..github/README.md for GitHub profile rendering and dropped the duplicated tagline from the root README.reports/current_counts.md and data/current-counts.json via the documented pipeline (build_current_counts.py, then regenerate_all.py --validate) so the volatile totals no longer predate bibliography row 215, and aligned the hand-authored count sources with the parsed totals: pages/BIBLIOGRAPHY.md hero lines now **212** works / **195** indexed folders (types row gains **1** Report), papers/README.md heading now ## Papers (195) (test_count_consistency 4/4 passing).22243473 (concept DOI 10.5281/zenodo.22243472, version DOI 10.5281/zenodo.22243473): *Forensic Audit of the MillenniumLean Clay-Proof Package (AIX Global)* — a statement-level audit that independently reproduces every kernel-hygiene claim of the AIX Global MillenniumLean package (clean build, zero sorry, zero project axioms) under the pinned toolchain, then audits what the theorem types actually say; verdict: none of the six Clay Millennium Problems is resolved (14 line-anchored, byte-verified findings).papers/2026_MillenniumAudit/ with README, AGENTS, SKILL, CITATION.cff, metadata.json, source PDF, and full-text extraction.bibliography.bib, bibliography.csl.json, bibliography.ris), data/works.json, data/publications-ld.json, work enrichment, and per-paper site cross-references.manuscript/ → docs/manuscript/ paths across paper full-text extractions plus bibliography metadata corrections (2026-08-31 pass residue); removed the dated REVIEW_LOG_2026-08-31.md scratch report (point-in-time; content remains in git history).REVIEW_LOG_2026-08-31.md): pointed thedata/scholar-verification-receipt.json, a SHA-256-bound baseline record for the existing 2026-06-09 direct logged-in snapshot. Any future snapshot edit invalidates the receipt and makes sync_scholar_metrics.py --check fail until a new direct-authenticated observation is reviewed and recorded; no Scholar metrics were changed in this release work.21985580 (concept DOI 10.5281/zenodo.21983948, version DOI 10.5281/zenodo.21985580): *docxplus — the Intelligent Document Container*.papers/2026_DocxplusIntelligentDocument/ with full metadata, skill, and extracted text representations.pages/SOFTWARE.md after they gained descriptions: Active_Fedference (paper 2026_RobustBeliefSharing), Active_Skillference (paper 2026_ActiveSkillference), and active_inference_power (paper 2026_ActiveInferencePower). AII catalogued 38→**41**; curated software total 143→**146**. Left as explicit deferrals (description-less or not auto-promoted): Active_Inference_Un0, docxology/GrowthModel, docxology/multi-time, and docxology/math4wisdom-superhuman-docs-archive. Forks were not auto-promoted.code/src/domain_inference.py (whole-word matching; computational before entomology). add_zenodo_only.py, batch_enrich_metadata.py, regenerate_docs.py, and publication_pairing.py now delegate. A metadata/bibliography diff showed text-only re-inference would reclassify 110 stored domains; **no papers/*/metadata.json or pages/BIBLIOGRAPHY.md rewrites were accepted**./js/repo-inventory.js instead of inline filter JS (CSP script-src 'self'); --check-manifest no longer requires an unwritten today's growth report; Pages deploy no longer cancels in-progress jobs; live-verify.yml and indexnow-on-push.yml run after a successful Pages deploy; Action bumps checkout@v7, setup-python@v7, configure-pages@v6, deploy-pages@v5.esc() from js/search-utils.js; TTS panel aria-hidden tracks open state; ? keyboard shortcut works; check_external_links.py URL accounting and tab stripping; prune_old_reports.py scans the working tree; feed site-updates moved to data/site-updates.json; export_agent_data.py import is IO-free; brittle catalog pins replaced with structure/count assertions; add_zenodo_only.render_citation YAML-quotes version and names; regenerate_all.py re-runs sync_site_facts.py after the second accessibility audit.zenodo.21864003; source repository [ActiveInferenceInstitute/active_fedference](https://github.com/ActiveInferenceInstitute/active_fedference)).zenodo.21865643; source repository [ActiveInferenceInstitute/active_skillference](https://github.com/ActiveInferenceInstitute/active_skillference)).update_existing refreshes applied**: version/PDF/metadata + software-link updates across already-catalogued works (template exemplars, DigiPPPiP, PROJECT BOND, Codomyrmex v1.3.0-paper, AlphaCOGANT, Active Inference Power Suite, prior_cognitive_art, BeeStack, COGANT, and more).code/orchestrators/sync_paired_publications.py). Decisions R25-R27 stored raw_candidates as bare release-URL strings, which reviewed_pair_decisions() silently dropped — re-surfacing a create_new duplicate for an already-decided pair. The parser now accepts both dict and URL-string candidates, the three decisions were normalized to dict form, and a regression test was added. The CogSecSkills v1.0.0/zenodo.20804585 false positive is again correctly reported already_reviewed instead of create_new (report: **0 new**, 28 already reviewed).zenodo.21843592; source repository [docxology/bond](https://github.com/docxology/bond)).zenodo.21815704; authors Siddhant Shrivastava, Evelyn C. Goh, Alexandra Mikhailova, and Daniel Ari Friedman).docxology/bond to the owned Developer Tools list; owned-repository count 94→95 and total curated software count 132→133.zenodo.10362561 to concept DOI zenodo.10296601; the retired #49 duplicate remains a permanent gap.21418901 (SynthOBS), 20804586 (CogSecSkills), and 19139090 (retired Template/Reproducible duplicate) are not new publications and are not added.2026.08.07.pages/SOFTWARE.md** after manual review of the authenticated inventory (forks cleared by the owner are now reflected; inventory is 241 public repos = 154 primary + 87 forks): the six research-practice line-set repos (line_set, black_line, white_line, golden_line, red_line, witness_register, new **Research Practice** summary category, 6), the DigiPPPiP computational companion Digi-PPPiP (Other), the whole-colony simulation scaffold BeeStack (Developer Tools), the template_advanced_literature_review exemplar (Developer Tools), and crescent-city-intel (Data & Policy). Owned repositories 95->**105**; curated total 133->**143**; data/repository-classification.json uncatalogued queue 112->**101** with 4 primary-review non-fork items remaining (active_inference_power, Active_Inference_Un0, GrowthModel, multi-time - all description-less, deferred for human review).data/paired-publication-decisions.json: the single new-candidate action from the paired-publication refresh (CogSecSkills v1.0.0 GitHub release paired with old concept zenodo.20804585) is **rejected** as a superseded-version false positive - bibliography row #174 already cites concept zenodo.21513316.data/paired-publication-decisions.json: the 9 CogSecSkills release pairs under concept zenodo.21513316 (row #174) and 18 Codomyrmex release pairs under zenodo.21750800 (row #206) are **superseded/version-history** relations; no duplicate bibliography rows were created.data/github-repositories.json 2026-08-07) and refreshed reports/paired_publications_2026-08-07.json; the curated flag is now computed against the full 143-row catalog.reports/paired_publications_2026-08-07.json: 402 pairs, 1 new candidate, 38 updates, and 363 items still requiring manual review under DOC-004; no candidates were auto-promoted.add_zenodo_only.py as the DAF "line set" research-practice instruments plus a software release, each with full paper-folder documentation (README/AGENTS/SKILL/CITATION.cff/metadata.json + PDF) and regenerated downstream surfaces:zenodo.21754245)zenodo.21754243)zenodo.21754241)zenodo.21754239)zenodo.21754237)zenodo.21754235)zenodo.21750800)21418901 and CogSecSkills 20804586 flags are stale-version duplicate detections of already-catalogued works and were intentionally not added; the AII-Ecosystem 17982447 non-canonical-DOI note remains the documented exception).sync_paired_publications.py could not complete due a GitHub API rate limit (HTTP 403). codomyrmex's GitHub repo is already catalogued in SOFTWARE.md (Developer Tools); new line-set GitHub repos remain an open DOC-005 triage item pending a manual review pass.zenodo.10296601, duplicate of kept **#136** /10362561) and **#193** (Template/Reproducible v1 concept zenodo.19139089, duplicate of kept **#1** /16903351). Retired numbers are left as gaps (49, 118, 193) per the repo's immutable-catalog convention — no renumbering, so every later work URL is preserved. Removed the retired paper folders (papers/2023_ATLAS/, papers/2026_TemplateApproachReproducible2/) and their work pages; paper_metadata.json 189→187; papers/README.md and BIBLIOGRAPHY header updated. Works 206→**204**, Papers 185→183. #123 (template_ approach, template_template) confirmed distinct and retained.zenodo.21763244, 2026-08-02), a typed agentic harness for reproducible long-context memory experiments, with paired GitHub repo [docxology/thalia](https://github.com/docxology/thalia) added to pages/SOFTWARE.md (owned-repos table; software catalog rows 93→94).research.html, reports.html, reproducibility.html, agent-verify.html, art.html, nft.html, meditations.html, about.html, exports.html and the pages/… sources (WIKIPEDIA.md, EVIDENCE.md, RESOURCES.md, VIDEOS.md, README.md); enumerated the eight domain-*.html clusters under the domains.html hub. Verified all 114 relative link targets resolve on disk (0 broken), all non-domain root .html and all pages/*.md are linked, and the Repository Map table is well-formed.2026.08.02.add_zenodo_only.py: **#199** Active Inference Power Suite: Conditional Statistical Power under Controlled Generative Settings (, zenodo.21695160), with full paper folder documentation and regenerated downstream surfaces.20804585 → 21513316, domain corrected to ) and **#198** SynthOBS & FractiSynth (21418687 → 21418782). Duplicate rows #200–#201 retired.validate_repo.py checks pass (39/40 — live-site mismatch at 197 vs 199 is expected pre-push), 216 pytest green, 1540/1540 static accessibility passes, 0 asset-size warnings, all count-consistency surfaces aligned.--require-deployed gate; accessibility commands use the supported --check flag; public-page SEO guidance distinguishes indexable pages from intentional paper/redirect exceptions; cache-buster documentation matches the generated layer; and the historical maintenance table moved out of always-loaded AGENTS.md.build_generated_manifest.py now runs before build_agent_index.py, so the agent route manifest hashes the current command matrix on its first pass; a final manifest pass still closes the release-integrity envelope. The ordering is regression-tested in test_regenerate_all.py.data/videos-index.json (VideoIndex.v1, 1127 compact records) while the complete data/videos.json remains available for downloads and detail pages; the repository classification queue now preserves description, language, topics, privacy, update, and derived description-quality fields for all 292 uncatalogued repositories (45 missing, 43 short, 204 substantive descriptions) without auto-promotion.docs/README.md and AGENT_START.md. The ordered regeneration chain now re-runs asset and static accessibility reports after catalog rendering so generated report checks remain current when the catalog grows.regenerate_all.py pass now produces zero file-content changes; the Pages artifact also treats GENERATED.md as control metadata so the integrity tail cannot invalidate its own manifest.browser_qa.py now exercises no-JavaScript fallbacks, mobile menu Escape/focus, publication filtering and sorting, gallery lightbox focus, reduced motion at 320px, forced colors, console/page errors, and YouTube iframe origin/title/referrer policy. The fresh report passes 7/7; browser smoke passes 10/10 and visual QA covers 26 screenshots.data/artworks-index.json (942 grid records, 712 KiB versus the 3.1 MiB full export) and lazy full-detail loading for description search and lightbox resolution links. The complete data/artworks.json export remains available for agents and downloads.TODO.md, kept remaining release work as recurring gates, corrected the animation documentation's obsolete inline-script reference, and documented the GitHub Pages meta-CSP frame-ancestors limitation.data/*.json and search-index.json were served cache-first, and each page fetches them at a stable ?v= query that does not change when the data does — so a returning visitor kept seeing the *previous* publication list (e.g. 193 works after #195 was added) until the SW version happened to bump. These content-data requests are now network-first (cache fallback for offline), matching navigations; static assets (JS/CSS/images/fonts) stay cache-first for speed. Bumped v19 → v20 to clear existing stale caches. This is why a freshly-added publication now appears immediately.10.5281/zenodo.21330636) as work #195 via add_zenodo_only.py. Created papers/2026_ActiveFractalRabbit/ (README/AGENTS/SKILL/CITATION.cff/metadata.json + PDF), the works/…195.html page, and regenerated the bibliography, works/software exports, catalog, search index, feed, sitemaps, and counts (bibliography works 193 → 194). check_zenodo_uncatalogued.py now reports the bibliography caught up (0 uncatalogued). Scope note: "0 uncatalogued" covers the Zenodo/ORCID deposit channel (DAF's primary archival target) — curated software (SOFTWARE.md) and presentations are deliberately-curated subsets, not auto-swept, and Google Scholar citation metrics (data/scholar-snapshot.json, as_of 2026-06-09) require DAF's own signed-in browser fetch per repo policy and were not updated. The record-17982447 non-canonical-DOI note is the documented AII-Ecosystem yearly-snapshot exception and is intentionally unchanged.add_zenodo_only.py DOI fix**: the tool wrote the version-specific DOI into the per-paper folder files (README/AGENTS/SKILL/CITATION.cff/metadata.json) while the bibliography and paper_metadata.json used the canonical concept DOI — splitting one work across two DOIs and failing test_paper_readme_contracts.py. Added a canonical_doi(rec, meta) helper (concept-DOI-first, mirroring the bibliography derivation) and routed every folder renderer through it; the version id is retained separately as record_id. Future Zenodo-only additions are now concept-DOI-consistent by construction.script-src 'self' CSP deployed 2026-07-12 silently blocked the inline <script> blocks still shipping on art.html, videos.html, search.html, repositories.html, repositories-forks.html, and index.html — /art rendered zero of its 942 artworks and its search box only surfaced site-wide paper suggestions. All six pages' scripts externalized to js/art-gallery.js, js/videos-page.js, js/search-page.js, js/repo-inventory.js (shared by both repo pages), and js/index-page.js.data-local-search attribute on the /art search input opts it out of the site-wide search-index.json autocomplete in js/interactive.js; gallery filtering (title/description/tags over all 942 works) is handled by js/art-gallery.js. Also fixed a latent error-path bug (getElementById('empty') → emptyState) and a duplicated tts-controls.js include.data-* attributes already delegated by js/interactive.js to window.* globals; js/art-gallery.js was additionally addEventListener-wiring the same buttons, so each ‹/› click advanced two artworks. art-gallery.js now wires only the search input, Escape/arrow keys, and overlay-click and defers the delegated controls to interactive.js (caught by cross-vendor review).onfocus/onblur (CSP-blocked) replaced with a CSS :focus reveal rule.media="print" onload="this.media='all'" pattern (blocked by CSP, so Google Fonts never applied on nine pages) replaced with media="print" data-media-swap="all" + an external swap in js/interactive.js; optimize_font_loading.py updated to emit and migrate to the new pattern.oninput="filterPubs()" replaced with addEventListener wiring in js/publications.js.media="print" onload="this.media='all'" pattern, eliminating render-blocking CSS on first paint. New code/orchestrators/optimize_font_loading.py orchestrator.twitter:card, twitter:title, twitter:description, twitter:image meta tags for social sharing parity with OG tags.except Exception: continue now logs the exception with page number, image index, and PDF filename to stderr before continuing, preventing silent extraction failures."Figure from [paper_name], page N" instead of raw filenames, improving screen reader usability and SEO.generate_citation_cff.py script creates CFF 1.2.0 files from metadata.json. 47 papers that were missing CITATION.cff now have it. Year extracted from folder names for older papers. Multi-line author format with ORCID for DAF.BIOFIBIOFIRM_v2.pptx from Zenodo, extracted 11 slides of text + 8 images using python-pptx. 173 of 176 papers now have full_text.md (98.3% coverage).script-src 'self') now on all 23 indexable HTML pages, blocking inline event handlers and inline <script> blocks. Documented in docs/security/security-posture.md.onclick/onchange/onsubmit handlers across 23 pages migrated to data-* attributes wired via addEventListener in js/interactive.js. New code/orchestrators/migrate_inline_handlers.py orchestrator.js/menu-esc.js**: menu Escape-to-close handler moved from inline <script> to external file for CSP compliance.accessibility_audit.py now checks for no_inline_handlers as a gate (16 checks, up from 15). All 23 pages pass..menu-btn for keyboard-accessible menu toggle on the art gallery page.deploy_seo_security.py (idempotent CSP/rel-me/hreflang deployment), migrate_inline_handlers.py (inline handler → data-attribute conversion).HEAD_EXTRAS constant in code/src/site_nav.py centralizes CSP + rel-me + hreflang + dns-prefetch for generated HTML templates (domain, work, paper, video pages).image_gallery_link() in build_paper_pages.py now shows up to 6 thumbnail previews of extracted figures with lazy loading and a "+N more" indicator. All 176 paper pages regenerated..image-thumbs, .thumb-link, and .muted added to style.css, replacing inline styles for cleaner maintenance and consistent rendering.build_search_index.py now includes image_count for works with extracted images (140 works). Search results page shows "Full Text" and "N Images" badges on matching works.BIOFIBIOFIRM_v2.pptx (11 slides) for 2025_BiofirmDevelopmentWith. 172 of 176 papers now have full_text.md (97.7% coverage).zenodo.21316510, docxology/prior_cognitive_art v0.1.0) via the canonical sync_paired_publications.py --apply path. Paper folder, bibliography row, work page, domain page, search index, sitemap, and all generated surfaces updated.extract_paper_texts.py now embeds inline image references in full_text.md at the correct page positions, so readers and crawlers can discover extracted figures in context.full_text.md (was 166 — gained 5 from ODT/DOCX/PDF source extractions)full_text.md with 0 broken linksformat_markdown() now accepts an images parameter and groups image refs by pageextract_images() now returns (page_num, filename) tuples for page-aware embeddingbuild_image_sitemap.py now includes paper-extracted figures in sitemap-images.xml (9,928 total images, was 942 — 139 paper pages with image galleries)code/orchestrators/extract_paper_texts.py extracts page-level text and embedded images from all paper PDFs using PyMuPDF (with OCR fallback via tesseract for scanned PDFs).full_text.md with complete page-by-page text extractionimages/ subdirectories across **136 papers**papers/*/index.html) now link to full_text.md and the images/ galleryencoding field (Schema.org TextObject) for all 166 works with full textfull_text_url for all 166 works with extracted textpapers/README.md updated to document full_text.md and images/ as standard folder contentsllms.txt updated with full-text extraction pipeline linkregenerate_all.py to use sys.executable instead of hardcoded python3 (was breaking on Python 3.9 vs 3.14 datetime.UTC import)build_current_counts.py Python 3.9 compatibility (datetime.UTC → datetime.timezone.utc)build_resume.py to gracefully skip PDF generation when reportlab is not installedvalidate_repo.py to skip full_text.md files in local-link validation (academic paper internal references)build_sitemap.py to not list /papers/ URLs (SEO invariant compliance)js/tts-controls.js) — floating control panel, speed/voice selection, paragraph highlighting, keyboard shortcut Tjs/interactive.js): reading progress bar, scroll-to-top button, keyboard shortcuts overlay (?), section anchor copy-links, search autocomplete from search-index.json, image lazy loading, external link safetypreconnect for Scholar/ORCIDrel="me" social profile verification links, hreflang support, WebPage JSON-LD on homepageSKILL.md, docs/design/components/tts.md, docs/design/animations.md; updated AGENTS.md with WEB DEVELOPER role, CLAUDE.md with interactive layer commands, design-system docs with new componentsnoindex redirect stubs intentionally skipped (about, research, meditations, nft, google verification)batch_enrich_metadata.py. 44 previously-missing metadata.json files created, 119 existing ones extended with paper-specific content.code/orchestrators/batch_enrich_metadata.py (bulk metadata generation), code/orchestrators/improve_metadata_quality.py (paper-specific methods/findings), code/src/paper_metadata_schema.py (dataclass schema).validate_repo.py --strict-reports pipeline passes (30+ checks including browser smoke, accessibility, visual QA, live-site verification, sitemap, search index, external links).zenodo.21083779), **#181 "Exploratory Data Analysis: A Reproducible Notebook Template"** (zenodo.21086292), **#182 "A Domain Language for Specifying Controlled Methods"** (zenodo.21086548) — all Computational, with paper folders and full metadata.zenodo.21047573, docxology/blake v0.1.0) via the canonical sync_paired_publications.py --apply path, plus benign checked_at metadata bumps on existing rows. Full local regenerate (works.json, exports, publications, work/domain/paper pages, resume, claims, catalog, search index, feed, sitemap, counts) and live-site snapshot refresh; validate_repo + pytest green. Also fixed 32 malformed bare-domain markdown links in reports/publishing_status_megaindex.md.zenodo.20976824, docxology/alphacogant v1.0.1) with paper folder, PDF, and work page; updated "A template/ approach to Reproducible Generative Research" to Zenodo version v1.0.9. Regenerated the dependent layer and refreshed the live-site verification snapshot.build_work_pages.py now renders a **Platform availability card** on every canonical work page (Zenodo/GitHub/arXiv/OSF/HuggingFace/Software-Heritage/PyPI/site), driven by a new data/publishing-status.json; added reports/publishing_status_megaindex.md, a publishing-status mega-index across 272 items (works + software) with per-platform coverage and gaps. Began archiving origins to Software Heritage via anonymous Save Code Now.checked_at metadata on 27 existing paired works. Regenerated bibliography exports, publications/works/paper/domain pages, catalog, search index, feed, sitemap, resume, claims, evidence/reconciliation, and current counts; live-site snapshot refreshed.zenodo.20834846, docxology/realizing_emptiness v1.0.0) via sync_paired_publications.py --apply; refreshed checked_at metadata and software links for 25 existing works; fixed the pages/BIBLIOGRAPHY.md paper-folder prose count (156→157).code/orchestrators/regenerate_all.py: a single-command, dependency-ordered, local-only write-mode counterpart to validate_repo.py's --check sequence (manifest last), replacing manual whack-a-mole after a publication-sync apply. refresh_bibliography_counts now also keeps the "**N** indexed paper folders" prose current. validate_repo.py now runs sync_scholar_metrics.py --check, catching Scholar-metric drift across README/BIBLIOGRAPHY/PROFILE/LINKS/DISCOVERY (previously unguarded).reports/visual-qa and reports/browser-smoke (validation only reads the latest); reports/ 100 MB → 40 MB. add_zenodo_only.py now runs regenerate_all.py automatically after adding records.regenerate_all.py's report-producer ordering so write-mode indexes don't go stale relative to the dated reports they link.zenodo.20804585, ) and hardened publication intake.zenodo.20786638, ) — docxology/template_madlib, deterministic token injection for conditional IMRAD manuscripts — as work **172**, and **California Public Records** (zenodo.20789899, ) — a technical and legal reference for the post-AB 473 era — as work **173**. Downloaded both PDFs, generated work/paper pages, and registered papers/README.md entries. Bibliography **170→172**; paper folders **153→155**. Also added the previously-missing **COGANT-0.6.0.pdf** and removed a duplicate On-Policy Distillation folder.itrace / ntqr_llm / on_policy_distillation software-catalog links) from per-version DOIs to their **concept DOIs**, each verified against the Zenodo API conceptdoi field so the citation always resolves to the latest version. Deliberately excluded version-distinct works that share a single concept DOI (e.g. the AII Ecosystem v1/v2/v3 snapshots) to avoid duplicate DOIs.docxology/AGEINT) and **template_madlib** (docxology/template_madlib) to the software catalog: docxology owned **58→60**, Grand Total **92→94** (Education 5→6, Developer Tools 15→16); recomputed the GitHub-inventory curated split.sync_publications_html.py now patches twitter:image:alt with the live work count (was stale at 170); removed a doubled "Abstract" heading and added the MIT license field in the On-Policy Distillation paper folder; reconciled that folder's metadata to its concept DOI.design-system.md to the actual style.css (corrected background/radius/body-font/focus-color tokens, documented previously-missing tokens); added mobile-menu aria-expanded toggling, ESC-to-close, and a 44px WCAG touch target across all 20 nav pages and their generators; fixed heading-hierarchy skips (h1→h3/h2→h4) on domain and index pages; added aria-labels to 3 unlabelled search inputs; tokenized 26 hardcoded gold rgba() values into 14 --gold-NN tokens (no visual change); accessibility_audit.py now enforces single-h1, no-heading-skips, and form-control-labels (22/22 pages pass).site_nav.MENU_ESC_SCRIPT; removed 26 lines of verified-dead CSS (duplicate footer block, zero-reference selectors) after confirming the two-layer base+newspaper override structure is intentional, not duplication.zenodo.20732275, ) — docxology/AGEINT v0.1.0, a Synthetic Analytic Tradecraft curriculum-and-assurance atlas — as work **170** via the canonical sync_paired_publications.py apply path, scoped --since 2026-06-16 to isolate the single new release. Stripped the <p> HTML the Zenodo abstract carried into metadata.json/README.md; renumbered the papers/README.md index strictly **1..152** (closed the gap at 111 left by the CEREBRUM dedup, plus a duplicate 152). Regenerated all dependent surfaces. Bibliography **168→169**; paper folders **151→152**; software unchanged at **91**; Computational domain **27→28**. Identified **CEREBRUM** (zenodo.15231156) and **Self-Improvement Agent Harness** (zenodo.20693012) as re-versions of existing works …010 / …127 (newer version DOIs of already-curated concepts) — update-only, not new rows.zenodo.20705351, ) and **coasys** / **COGANT** software-catalog intake after commit b6fa1b4: added 2026_COGANT to papers/README.md (151 folders), paper_metadata.json, and the Computational domain blurb (27 works); regenerated publications, software, sitemap, resume, evidence, search, feed, domain, and count exports. Bibliography **167→168**; software catalog **89→91** (58 owned + 33 AII); paper folders **150→151**.add_zenodo_only.py: **DemoCreate** (zenodo.20693217, ) and **ENTO** (zenodo.20647443, ); added the **GeneralizedNotationNotation (GNN)** software v2.0.0 (zenodo.20671741, ) as a distinct work from the 2023 GNN paper (different Zenodo concept). Bibliography **165→167**.…118 (papers/2025_CEREBRUM2, the v1.4 deposit zenodo.15231156) outright, keeping the primary …010 (papers/2025_CEREBRUM, zenodo.15170907). Retired the now-empty WORK_CANONICAL_OVERRIDES entry and its regression test; re-pointed the CEREBRUM software-catalog entry to the surviving paper folder. Removed-work numbers are retired, not renumbered, so existing work-page URLs stay stable — sync_publications_html.validate_rows now allows numbering gaps (strictly-increasing instead of exactly-sequential).zenodo.20669283 (v3.4.0).build_work_pages.py now fails loud on a duplicate citation_key (was silent last-write-wins page overwrite); new test_frozen_work_keys.py freezes every num → citation_key so a retitle that would churn a live URL fails CI; documented works/{citation_key}.html as a permanent opaque contract in the canonical policy.docs/ from 7 flat files into topic subdirectories (operations/, seo/, design/, security/, releases/) with a new docs/README.md navigation index; updated all inbound references across code, agent entrypoints, and the search index. docs/AGENTS.md retained as agent operational guidance.LINKS, PROFILE, WIKIPEDIA, COLLABORATORS, MEDIA) that had silently drifted to 125/154-work counts → **167**, and added them to count_consistency so they can no longer rot. Linked the new docs/README.md index from README.md, AGENT_START.md, and llms.txt; documented data/works.json as the canonical works registry and the security.txt/warrant-canary status under docs/security/.build_work_pages.py now clips on a word boundary with an ellipsis via new clip_description() in code/src/site_nav.py (145 of 165 work descriptions corrected; rendered length ≤160).summary_large_image) and og:image:alt tags site-wide. Generators (build_work_pages, build_domain_pages, build_catalog, build_exports_page, build_evidence_page, build_updates_page, build_github_inventory) emit them; hand-maintained pages (index, publications, art, videos, collaborators, search, discovery, cite-verify, media, software) are covered by a new idempotent code/orchestrators/ensure_social_meta.py.domain-biomedicine.html (Genetics & Biomedicine, , 15 works) with og-biomedicine.jpg; added to sitemap_policy.py; relinked the homepage card from a raw pages/BIBLIOGRAPHY.md#… anchor to the new page.theme-color and standardized to #0c0c0e (matches manifest); tightened the meta/og description to 153 chars; added word separators between publication-card title/venue/citation spans so text extractors and screen readers no longer read them run-together.code/src/seo_invariants.py (check_social_meta, check_work_descriptions) with tests in test_seo_invariants.py and test_site_nav.py; full suite 88 passing.ScholarlyArticle.author JSON-LD with inline @type/name/url (not just a cross-document @id) so search engines reliably attribute authorship for rich results. Applied the same word-boundary clip_description() to build_paper_pages.py (148 paper-folder pages no longer truncate mid-word). Verified site-wide: 373 JSON-LD blocks all valid, full image-alt coverage (incl. the JS-rendered art gallery via artAlt()), no broken internal links.papers/2024_PopulationSearch/) is stale (crawled before publish; now live, noindex, canonicalized). Findings + roadmap recorded in reports/seo-discoverability-audit-2026-06-10.md.sitemap-images.xml, new build_image_sitemap.py) declaring 942 gallery artworks for Google Images discovery — preferring the same-domain /art/*.jpg copies (939) over Flickr, since art.html renders client-side and the images are otherwise invisible to crawlers. Registered in robots.txt; well-formedness + freshness covered by test_build_image_sitemap.py.…118 (papers/2025_CEREBRUM2, the v1.4 deposit) now sets rel=canonical + og:url to the primary entry …010 (papers/2025_CEREBRUM), consolidating ranking signals for the same paper. Added a shared WORK_CANONICAL_OVERRIDES/canonical_work_key in code/src/site_nav.py, used by both the work-page generator and the check_work_pages invariant, with a regression test.2023_HoneyBeeGeneExpression (Zenodo TSGE meta-analysis abstract), 2023_AII_v1 (AII overview, recovered from the file's own schema block — the body had TrustFinder text), and 2023_ToComment (a *Physics of Life Reviews* commentary on Manrique & Walker's "To copy or not to copy?", per Semantic Scholar — not the digital-memes text it carried). All 165 work-page meta descriptions are now unique. Confirmed www→apex 301 redirect and self-canonical (no duplicate-content split). Flagged: works …010/…118 are the same CEREBRUM paper (DOI zenodo.15170907 resolves to 15231156, v1.4) — a bibliography dedup/curation decision left to the maintainer.2026_DeterministicTestbedSelf, 2026_RecoveringLLMPersona, 2026_Triplicate, and 2026_TemplateTextbook; bibliography **150→154**, paper folders **143→147**.WhenDoBugs, MusicNeverStopped, BeeStack, BiologyTextbook, CrescentCity, and template-derived exemplars; left review-only pairings untouched.template_autoscientists, template_newspaper, template_textbook, ntqr_llm, grateful_data, cohereants); software catalog **50→56 owned**, **82→88 total**.docxology/template DOI [10.5281/zenodo.20469500](https://doi.org/10.5281/zenodo.20469500) as software/version metadata, not a bibliography work row.llms.txt, software JSON/LD, and GitHub inventory counts.llms.txt, release notes, and publications head meta; added count-consistency validation (code/src/count_consistency.py).publications.html to load catalog rows from data/works.json via js/publications.js; externalized CollectionPage JSON-LD to data/publications-ld.json (166-line shell).docs/SECURITY.md, docs/DESIGN_SYSTEM.md, reports/web_assessment_2026-05-26.md, shared nav (code/src/site_nav.py) on work and domain pages; removed Inter from body typography in favor of system-ui stack.2026_BiologyTextbook — *Introduction to Biology: A Generative Approach* (DOI [10.5281/zenodo.20286478](https://doi.org/10.5281/zenodo.20286478); repo docxology/biology_textbook); bibliography **116→117**; paper folders **109→110**; Computational domain **7→8**; Books **3→4**.papers/software_table.py and papers/sync_software_html.py: full 82-row software catalog sync from pages/SOFTWARE.md to software.html + data/software-ld.json; fixed SOFTWARE.md subtotal **49→50**; biology_textbook on software surface; work-page source-repo links from metadata.json.2026_CrescentCity — *Crescent City in Living Waves: Space, Time, People, and Minds on the Southern Cascadian Coast* (DOI [10.5281/zenodo.20286171](https://doi.org/10.5281/zenodo.20286171); repo docxology/crescent_city), filed under Cognitive Security.README.md, AGENTS.md, SKILL.md, CITATION.cff, and metadata.json.papers/paper_metadata.json, the papers/README.md index, and papers/AGENTS.md (counts + maintenance log + domain coverage).pages/BIBLIOGRAPHY.md and the Cognitive Security domain index; regenerated data/works.json and bibliography exports via export_bibliography.py.publications.html PUBS + JSON-LD mainEntity and regenerated downstream artifacts (search index, domain/work/catalog pages, evidence, feed, sitemap, updates).llms.txt, CITATION.cff, codemeta.json, bibliography exports, and structured data/*.json.search.html, opensearch.xml, catalog.html, data/catalog.json, GENERATED.md, and data/generated-manifest.json for human search, browser discovery, dataset discovery, and generated-file rebuild provenance.updates.html, AGENT_START.md, humans.txt, .well-known/security.txt, external-link triage, live-site verification, asset-size audit, and selector-based browser smoke reporting.YYYY_Topic.2020_FacilitatorsCatechism.