# Changelog

All notable public-index, website, bibliography, and discovery-layer changes are summarized here. The detailed operational record is on demand in [`docs/operations/maintenance-log.md`](docs/operations/maintenance-log.md); machine-readable evidence remains in dated `reports/` snapshots.

## 2026-10-07

- **Workflow-only commits keep the release anchor:** a commit that changes only
  CI workflow files or the Dependabot configuration no longer counts as new
  published content. Those files never reach the Pages site, so routine action
  updates validate and deploy without regenerating the release manifests. Any
  other file in the same commit still makes it a content commit. This holds
  whether the update is rebased, squashed, merged, or first brought up to date
  with GitHub's "Update branch".
- **Reviewed public-source baseline:** a new dated snapshot and review cover
  every observation since the 2026-10-06 baseline. The repository count (the
  `cadence` fork) and Zenodo record totals are applied to the claims and
  discovery pages; newer Ento-Linguistics and GNN versions and repository
  activity are acknowledged. This resolves the drift reported in issue #44.
- **Software archives on Zenodo:** the `fep_formal` v1.5.0 release archive is
  linked from its software catalog row. The uncatalogued-records check now
  treats a Zenodo software record as catalogued when it supplements an already
  catalogued work, that is, when the work's software row links its concept
  DOI, so later releases of the same repository are not reported again. Any
  other record, including a paper Zenodo files as software, still needs a
  bibliography row.

## 2026-10-06

- **Flickr artwork re-sync:** the gallery export was refreshed from Flickr with
  the API key now held as a repository secret. Every public artwork carries
  tags and a description, the newly tagged records join tag-driven pages, and a
  test keeps the export complete. Request URLs in sync failure messages no
  longer include the API key.
- **Lighthouse measured like production:** the rendered-test and Lighthouse
  fixture serves text assets gzip-compressed, as GitHub Pages does, so the
  ratchet scores what visitors download; thresholds are unchanged. The gallery
  validates its index in yielded chunks and the publications table initialises
  across short tasks, removing the long startup tasks on slow processors.
- **ActiveInferenceInstitute is a GitHub Organization:** GitHub now reports the
  account as an Organization. Identity notes and catalog text say so, and the
  public-source snapshot records each account's type, so the claim wording
  follows the recorded type instead of a fixed assumption.
- **Steadier freshness detection:** the weekly public-source refresh runs
  authenticated, retries transient network and server errors, lists Zenodo
  results newest-first, and compares snapshots without star counts and
  update timestamps, so drift reports name changes that matter to curated
  claims.
- **Two Active Inference Institute repositories catalogued:** `Working_Groups`,
  which supplements work #224 (release v1.0.0), and
  `active_inference_language_model`, empty at review, join the software catalog.
  Work #224 now links its source repository. Six new docxology forks are
  recorded under the standing fork policy.
- **Reviewed public-source baseline:** a new dated snapshot and review cover
  every observation since the last reviewed baseline (2026-08-26). Repository
  counts, the Organization account type, and Zenodo record totals are applied
  to the claims and discovery pages; star counts, update times, renames, and an
  upstream creator-list change are acknowledged. This resolves the drift
  reported in issue #12.
- **Deterministic Pages manifest:** the scan that keeps cited reports published
  now ignores git-ignored local files, so a manifest built on a working machine
  matches a clean checkout and the deploy check accepts it.
- **Catalog follows GitHub renames:** four Active Inference Institute rows now
  use their current repository names (`Active_InferAnts`, `GEO_INFER`,
  `Generalized_Notation_Notation`, `Journal_Utilities`), so the repository
  review queue is empty. Domain pages keep both ant repositories and list
  `fep_formal` under its current name.
- **AII claims re-checked:** the Scientific Advisory Board count and Textbook
  Group cohort claims were re-read against the institute's pages, found
  unchanged, and re-dated.
- **Lettering & Verse collection:** a sixth art collection gathers the
  handwritten verse, lettering, and calligraphy drawings, including
  *Solstice (Turning Point)*.
- **Coordinating the Field filed under the AII Ecosystem:** work #224 moves to
  the AII Ecosystem domain beside the Institute's other organisational work; its
  URL is unchanged.

## 2026-10-05

- **Regeneration reliability:** the default writer and fingerprint cache use
  the same scoped repository root. Source changes during rendering invalidate
  the cache, failed forced writers retire prior entries, and malformed cache
  records trigger a cold rebuild. Atomic bookkeeping and a repository-scoped
  single-writer lock preserve the restart boundary across concurrent runs.
- **Gallery and catalog resilience:** invalid compact/detail records preserve
  native artwork links or expose an explicit retry. Viewer images try a finite
  set of retained source resolutions, with visible source links on mobile when
  media fails. Sorting preserves publication batches; exhausted load controls
  disappear and keyboard load-more moves focus to newly revealed works.
  The art page suppresses unrelated decorative media. The optional hero canvas
  stays static for reduced motion and pauses when hidden or outside the viewport.
- **Repository manuscript and development guidance:** a source-backed methods
  draft replaces generic scaffold prose, with architecture/evidence diagrams
  and explicit source ownership. The local read-only manuscript gate checks
  configuration, section labels, citation-key/entry boundaries, and local
  references. It does not render outputs, validate full BibTeX field syntax,
  or establish publication readiness. Onboarding and configuration runbooks
  point to the shared generation plan and preserve archive/evidence boundaries.
- **New work:** *Coordinating the Field: The Case for Ecosystem-Level Technology
  Roadmapping and Community Working Groups in Active Inference* (Zenodo concept
  DOI 10.5281/zenodo.23066903) joins the bibliography with its eight registered
  creators and an archived PDF.
- **Scholar observations through tooling:** `record_scholar_observation.py`
  writes the metric snapshot and its SHA-256-bound receipt together from an
  operator-attested direct authenticated observation. It refuses older,
  same-day, or internally inconsistent values, predicts the bound hash in a dry
  run, and restores both files if a write fails. The 2026-10-05 observation was
  recorded with it.
- **Search Console follow-up:** the runbook no longer advises a blanket
  "Validate fix". It names the legitimate exclusions (canonicalized `papers/`
  pages, redirect stubs, the noindex `videos/` index), drops `videos/` from the
  indexing-request list, and covers removing the retired image sitemap, which
  returns 404 by design. The preflight now checks that `robots.txt` names only
  the canonical sitemap, that every priority URL is indexable and in the
  sitemap, and that retired sitemaps stay gone. Dated observations are in
  [the 2026-10-05 report](reports/gsc_observations_2026-10-05.md).
- **Flickr sync hardening:** `sync_flickr_artworks.py` validates the export
  before writing, reports tag and description coverage (key-free with
  `--coverage-local`), refuses a fetch shorter than Flickr's public total, can
  require complete metadata, and no longer reports view-count changes as drift.
  Quoted multiword Flickr tags arrive in Flickr's normalized form (for example
  `summersolstice`) and stay single matching tokens. The live re-sync waits on a
  Flickr API key. The start page's artwork count is now derived from the export.
- **Updates page rendering:** wrapped changelog bullets were published cut at
  their first line and bold titles showed stray asterisks; full bullets and bold
  titles now render, and structured-data descriptions carry plain text.
- **Backlog:** the active backlog tracks the remaining human visual review and
  release attestation, the measured performance gap, manuscript rendering and
  editorial review, the Flickr re-sync and Curio-description review, and the
  Search Console queue.

## 2026-10-02

- **Progressive catalog startup:** the search page browses a generated preview
  with complete type counts before loading the full core for queries or scoped
  browsing, then requests only the needed work/video text segments. Failed or
  malformed requests expose retries, and late responses preserve current
  controls. The artwork gallery filters the complete catalog but renders
  48-item batches, preserves canonical page links and source images even for
  duplicate titles, and loads descriptions/details on demand. Publications
  render before optional abstract/keyword enrichment; failed interactive loads
  preserve the available catalog links.
- **Accessible video navigation:** overlapping timeline links now become
  truthful numbered date groups with native dialogs exposing every original
  video link. Mobile screens use the filtered list and a working year jump;
  pressed states, focus restoration, contrast, forced colors, reduced motion,
  and UTC date arithmetic are covered by browser regressions. The shared
  reading-progress widget and video introduction now belong to landmarks.
  Decorative background suppression is scoped to the homepage stylesheet and
  publication template, preserving the complete Curio images, publication
  gradients and content, and other pages' design tokens.
- **Candidate-bound follow-ups:** live verification checks out the triggering
  Pages candidate and binds its exact run, workflow, branch, and completion
  status. A built same-candidate 404, transport/server failure, or malformed
  boolean flag cannot be accepted as propagation; marker/contract mismatches
  require explicit deployment-lag evidence.
  Dedicated fresh failure receipts replace stale-report glob selection and
  remain available from failed workflow steps; IndexNow also reads the deployed
  candidate. Cached offline checks remain separate from fresh acceptance.
- **Scoped local verification:** 13 focused accessibility browser checks passed
  without skips, including complete video coverage across zoom levels and dense
  same-day fixtures. One local Lighthouse 13.4.1 video-page observation measured
  87 performance / 100 accessibility / 100 SEO. An independent maintenance review
  and 89 focused regression tests verified the deployment-binding and typed
  failure rules. These local results do not establish hosted execution, live
  publication, performance stability, or human visual sign-off; earlier dated
  receipts remain unchanged.
- **Homepage and Curio Cards:** clearer introduction and routes into publications,
  software, art, and teaching; responsive typography, accessible profile disclosure,
  and readable media without JavaScript. The three art tiles now show the exact
  complete Complexity, Passion, and Education card images, with primary card links,
  source hashes, and documented artwork rights. Connected profile and art copy
  removes unsupported edition/market claims and repairs the Curio gallery anchor.
- **Source-text custody:** restored 43 paper extractions whose literal
  `manuscript/` paths had been changed by a directory migration, and corrected
  one evidence quotation against the archived PDF. All archived PDFs and the
  newer Pitch Deck extraction are preserved; the
  [custody receipt](reports/paper_text_custody_2026-10-02.md) records exact checks
  and their limits.
- **Search and deployment follow-up:** type filters reserve their loading space
  and remain keyboard-accessible in a bounded scrollable row. The generated
  manifest now records all four search exports and their paper/report inputs;
  the offline shell includes the homepage stylesheet, and deployed-byte checks
  include that stylesheet and all three Curio images. Real Lighthouse 13.4.1
  measured search CLS at zero after delayed-core mobile geometry tests passed.
  All 1,214 integration tests passed without skips; the
  [homepage receipt](reports/homepage_curio_2026-10-02.md) separates local
  measurements from hosted and live acceptance.
- **Public smoke-report privacy:** the capture generator removes the known
  workspace prefix from diagnostics before limiting their length. A regression
  covers partial-path exposure during truncation. Fresh smoke results retain
  selectors and image hashes; historical diagnostic redaction is explicitly
  marked and preserves the original capture results.

- **Permanent bibliography identity:** a reviewed work-identifier registry
  preserves every existing work URL and reserves retired identifiers. Metadata
  corrections no longer rename citation keys. New intake validates the complete
  bibliography and identifier pair before writing; unsafe paths, collisions,
  retired-ID reuse, and unsupported partial updates fail closed.
- **Search and navigation:** autocomplete and the search page share a compact
  core and load work/video text when needed. Revision mismatches recover through
  a bounded core refresh. Search summaries show normalized abstract prose while
  retaining literal mathematical notation and the original source metadata.
  Mobile navigation works without JavaScript; keyboard
  shortcuts contain and restore focus; clipboard failures offer an ordinary
  link with a truthful status message.
- **Offline and browser reliability:** a small service-worker shell and bounded
  runtime cache preserve previously visited pages through updates. Network
  deadlines cover complete response bodies; failed requests cannot replace good
  cached entries. Required browser and Lighthouse tooling, malformed reports,
  and missing score categories fail the hosted gate. Real browser regressions
  exercise offline updates, error responses, progressive search, and focus.
- **Publication provenance and growth:** unchanged generated content retains
  its timestamp and footer stamp; changed content receives the current rendering
  provenance. Cached generation tracks each writer, shared Python libraries,
  and declared renderer helpers so code changes rebuild dependent outputs.
  Exact legacy QA screenshots remain in GitHub while leaving the
  bounded Pages projection, preserving all archived PDFs and manuscript files.
  Pages deployments now retain a SHA-bound technical acceptance receipt checking
  every work page, critical assets, all paper-PDF HEAD contracts, and sample PDF
  hashes. This evidence is distinct from the human-reviewed release attestation.
- **Source-backed curation:** corrected three full publication titles and one
  publication year without URL changes; corrected the Discovery Engine source
  abstract; updated five repository URLs after immutable GitHub-ID checks and
  added the reviewed OmniLatticeTextbook repository. Scholar metrics were
  refreshed from a direct authenticated observation with an exact snapshot
  receipt. Remaining author reconciliation, licensed full-text acquisition,
  account access, and publication-source discrepancies remain explicit in
  [the active backlog](TODO.md). Implementation scope and verification boundaries
  are recorded in [the forward reliability review](reports/site_reliability_2026-10-02.md).

## 2026-10-01

- **Paper access and complete summaries:** work pages now offer direct PDF
  downloads and the archive's GitHub paper folder beside the title. Multiple
  PDFs retain their filenames and source-selection basis; companion files are
  distinguished from the primary document in structured data. Work pages and
  folder READMEs preserve complete curated abstracts, separate concepts from
  findings, link summary evidence, and omit synthetic keywords and unverified
  authorship. Associated software repositories remain separately labeled.
  Shared responsive page styles reduce repeated HTML; citation copying
  preserves literal BibTeX text and inert JSON payloads escape script boundaries.
- **Reliable publication and active guidance:** scoped landing commits preserve
  unrelated staged work; bounded binder replays preserve source-review inputs,
  reach a byte fixed point, and validate the landed tree before push. Local
  regeneration uses two ordered passes for known cross-pass dependencies.
  The active backlog now contains unfinished work only; public completed notes
  are archived separately and stale private-checkout guidance is corrected.
  Scope and verification are recorded in
  [the work-page access review](reports/work_page_access_2026-10-01.md).

- **Independent accuracy follow-up and source recovery:** archived the correct
  CC BY iScience dopamine article (including its methods supplement) and the
  CC BY-NC-SA manuscript from the checksum-verified GNN v3.6.0 release.
  Both have source/version/license hashes and evidence-backed summaries;
  GNN command gates are described as manuscript claims, not newly executed
  runtime acceptance. Current concept-DOI authors were verified directly;
  historical community credit remains documented. Removed the unrelated DRE3
  artifact DOI/version/date from ToComment and restored its full registered
  title without changing its permanent work URL. Cleared unsupported seed
  content where licensed full text remains unavailable. Decisions and open
  source discrepancies are recorded in
  [the accuracy report](reports/bibliography_accuracy_2026-10-01.md).
  Skillarum, SilverLine and LineSet's archived PDFs match their registered
  version-file checksums and sizes; their verified version DOIs are now
  labeled artifacts under the existing concept citation DOIs.
- **Citation and public metadata consistency:** work-page citations and their
  JSON-LD now preserve the recorded author order and collective names.
  SKILL descriptions prefer the curated abstract, including explicit absence.
  Audited per-folder abstracts match the displayed source; four false seed
  descriptions and seven unsupported keyword sets were corrected. ConCatEnate,
  Beacons, and DataDescriptorTemplate are classified as Computational from
  their source subject matter. CFF synchronization detects removed artifact
  identifiers and accepts ORCID-first author entries; document-verified author
  intake validates the matching work/folder/quote before applying changes.
  Name inversion now uses only audited ORCID/name aliases. Excerpt clipping
  preserves valid complete URLs. Updated the generator dependency manifest
  and obsolete directory instructions for this public repository.
- **Freshness workflow repair:** replaced an invalid direct secret condition
  with a job-level availability flag; the Flickr key remains confined to its
  own step. Independent review and `actionlint` confirmed the workflow syntax.

- **Evidence-grounded paper summaries (DOC-016 core):** every paper folder
  that has full text (197 of them) now carries paper-specific Methods (801)
  and Key Findings (904) extracted from
  their own `full_text.md`. Each item records a verbatim quote (`evidence`,
  `key_findings_evidence`) that was mechanically verified against the text
  before merge, and `summary_provenance` says how it was produced. These
  replace the domain-template filler and abstract echoes, as well as several
  "specific" method lists the text did not support (for example, interviews
  credited with "modeling"). Paper READMEs/SKILLs render the methods as
  "**name** — description" with a provenance note, and work pages pick them up
  as their Use Notes. `test_grounded_summary_evidence_occurs_verbatim_in_full_text`
  re-checks every quote on each run. An independent second-pass review read
  every item against its quote and surrounding text. It found 0 major and 39
  minor issues (dropped hedges or scope conditions, cited or relayed claims
  worded as the paper's own, one added detail), and all were corrected. Each
  folder's `summary_provenance.reviewed` records the review.
- **Displayed abstracts audited against the paper text:** 70 folders whose
  abstract disagreed with the Zenodo description or the paper were each judged
  against the full text, choosing only among the existing abstract, the
  Zenodo description, or the paper's own abstract copied verbatim. 39 now use
  the Zenodo description, 13 the paper's own abstract text, 16 are unchanged,
  and 2 show an explicit "no abstract recorded" note instead of an invented
  one. Some of the replaced abstracts described a different paper (EvoJump,
  HoneyBeeGeneExpression, ArgentineAnt, AuBI, GNN, MDKV, VideoEntomology,
  among others). Separately, 14 journal papers whose stored abstract was a
  500-character-truncated paraphrase now carry their published abstract,
  recovered verbatim from the text. The generator's invented fallback
  ("Research paper on {topic}.") is gone.
- **Mis-filed source documents removed:** `papers/2018_DopamineForaging`
  held a byte-identical copy of the 2016 foraging-gene PDF, and
  `papers/2023_ToComment` held the DRE3 paper (#77, Zenodo 5573947). Their
  PDFs, extracted text, images, and the borrowed Zenodo fields were removed,
  because the real documents are not yet archived (DOC-016).
  `papers/2025_OnTime/full_text.md` contained another paper's text and was
  re-extracted from its own PDF. `papers/2026_TemplatePitchDeck` had been
  extracted from an example deck and was re-extracted from the manuscript;
  `extract_paper_texts.py` now honours a `primary_pdf` metadata field and
  accepts `--only FOLDER`. Ten folders whose PDFs had never been extracted now
  have full text. New test: no two paper folders may share an identical source
  document.
- **Document-verified authorship for works without a DOI:**
  `fetch_work_authors.py` accepts `status: "document_verified"`, which
  requires a source file and a verbatim title-page / edited-by quote.
  These entries survive registry refreshes and are re-checked by `--check`.
  It is applied to six works (#28, #44, #71, #79, #89, #93: dissertation,
  edited volumes, essay, chapter), so 209 of 219 works now list authors.
- **Figure alt text** on paper pages names the work instead of the folder id
  and distinguishes slides from pages.
- **Bibliography accuracy pass (live registry audit):** all 205 catalogued
  DOIs were re-resolved against Crossref/DataCite. Every author list matched
  except eight works with no Authors cell, now filled from verified records
  (#5, #112, #217–#223). #5 retitled to its registered "Formal Foundations
  (Part 1 of 3: Theoretical Foundations)", clearing the catalogue's only
  `title_mismatch`; seven journal titles corrected to the publisher's exact
  wording (#32, #68, #95, #100, #105, #107, #108). Every edit keeps its
  frozen `works/` URL.
- **Duplicate retired:** #30 and #128 were the same Zenodo deposit (concept
  14861595 / version 14861596, published 2025-02-12; #30 also carried the
  wrong year). Kept #128, now citing the concept DOI with the version as
  `artifact_doi`; removed #30's row, work page, and the byte-identical
  `papers/2024_BioFirm/` folder, per the #49/#118/#193 precedent. Works
  220 → 219, paper folders 203 → 202, Presentations 9 → 8.
- **Paper-folder citations follow the bibliography:** generated
  README/AGENTS/SKILL files used to take title and authors from hand-seeded
  folder metadata. That seed data had placeholder titles ("ForagingGene") and,
  on several journal papers, co-author lists that are not on the paper
  (#104 credited five non-authors). Now `regenerate_docs.py` reads both
  from `pages/BIBLIOGRAPHY.md`, and `generate_citation_cff.py` reconciles
  CFF `title`/`authors` from it too, rewriting only files whose parsed
  identity differs: 73 CITATION.cff files corrected, one of which (#63)
  had cited a different paper outright. 37 `metadata.json` files and 46
  `paper_metadata.json` author strings were corrected at the source.
- **No invented methods or findings:** domain-template "methods" (every
  entomology paper had "Field observation and behavioral assays") and
  findings that only echo the abstract are now suppressed on paper
  READMEs/SKILLs and on the indexed work pages
  (`code/src/metadata_templates.py`). Where nothing paper-specific is
  recorded, the page says so instead. Seed-data cleanup is tracked as
  DOC-016.
- **Author-name normalisation:** Zenodo often deposits creators as
  `familyName: "Daniel Ari Friedman"` with no given name. These rendered
  uninverted and exported to CSL-JSON as organisation `literal`s. When the
  creator carries an ORCID, `fetch_work_authors.format_author` now splits
  the name (46 names fixed); without an ORCID, a collective or pseudonym is
  left verbatim. One explicit owner correction maps Crossref's mis-split
  "Ari Friedman, Daniel" (#46).
- **Tooling fixes:** `regenerate_all.py` no longer halts when the number of
  works changes, because the start-here step now runs
  `build_start_here.py --sync-counts` (idempotent, no date stamp);
  `test_reproducibility_ledger` now tampers with a `tmp_path` copy instead
  of the tracked outputs, which had raced the parallel SEO single-read guard
  and was the cause of the intermittent
  `test_one_seo_pass_reads_each_page_once…` failure; SKILL.md frontmatter
  scalars are JSON-quoted, so titles with quotes stay valid YAML, and the
  SKILL citation names the venue instead of the domain. New
  `code/tests/test_bibliography_authority.py` pins all of the
  above.

## 2026-09-27

- **SEO ergonomics wave (serp_title decoupling, breadcrumbs, works-index
  copy):** root-level pillar pages now carry the full title in og:title,
  twitter:title, and JSON-LD headline while only `<title>` is SERP-clipped
  (`render_pillar_head(serp_title=...)`); 404 page gained BreadcrumbList
  JSON-LD; the works index leads with the longitudinal-record framing and
  a year-range hero; per-work pages dropped the duplicate Copy-BibTeX
  control and now render Findings/Methods cards without "Not yet
  summarized." placeholders. Per-domain RSS/Atom feeds (8 domains) ship
  with a deterministic `--check` that reuses on-disk `lastBuildDate`;
  `software.html` nav syncs from the shared manifest; start-here counts
  stamp from `data/current-counts.json` with a matching freshness check.
- **Regeneration recovery:** the interrupted 2026-09-25 generation chain
  was completed on recovery — video institute/personal pages finished and
  `--check` green, 949 artwork/collection pages brought current with the
  nav changes, and a zero-byte truncated `domain-active-inference.html`
  (drive failure during the concurrent session) rebuilt from
  `build_domain_pages.py`. Static accessibility 2537/2537; repositories
  refreshed from `data/github-repositories.json`.
- **Post-push receipts:** `reports/public_source_review_2026-09-27.json/.md`
  supersede the 09-26 pair (279 applied / 77 deferred / 317 rejected,
  reflecting the DOC-005 fork classifications); live-site verification
  receipt `reports/live_site_verification_2026-09-27.json` (12/17 passing
  at push time, five checks pending deploy propagation of the agent-index,
  works/software data, and hub pages); date-stamped generated surfaces
  (site facts, catalog, search index) converged to the receipt-day stamp.
  Binder chain bound with control-only tails; `validate_repo.py` green and
  the full suite 759 passed / 5 skipped at the pushed tip.

## 2026-09-25

- **Projections page (the "one surface, many projections" thesis, on site):**
  new hand-authored `projections.html` documents the site as a single corpus
  with many projections (works, videos, artworks, domains, feeds, agent
  index), with SoftwarePage/WebPage JSON-LD, `#page` nav anchor, breadcrumb,
  and its own `data/agent-index.json` route. Registered in the sitemap,
  `llms.txt`, the nav manifest (top-level "Projections" entry), start-here,
  discovery, 404, and the software/publications/video hub navs.
- **Thinking log + On-my-mind band:** `pages/THINKING_LOG.md` (one line per
  entry) feeds a new `build_updates_page.py` band on `updates.html`; the
  first entry frames the decade-plus longitudinal-record thesis.
- **Paper-page JSON-LD fix:** paper folder pages are `noindex, follow`
  canonicals to `works/{citation_key}.html`; the stray BreadcrumbList
  JSON-LD that violated the canonical policy (and
  `test_seo_invariants`/`test_paper_pages`) is no longer emitted by
  `build_paper_pages.py`.
- **Domain-feed determinism fix:** `build_domain_feeds.py` derives
  `lastBuildDate` from the newest item pubDate instead of wall-clock time,
  restoring the byte-identical-across-runs contract
  (`test_domain_feeds` 10/10); `--check` still reuses on-disk dates.
- **Software hero accuracy:** `pages/SOFTWARE.md` hero updated 116 → 119
  docxology repositories to match the curated table and
  `data/current-counts.json` (count-consistency gate green).
- **Fork classification (DOC-005 standing policy):** the 2026-09-24 GitHub
  inventory refresh added 5 public forks (bend, graphcoder, leanchess,
  Moonkale, observer-patch-holography); classified under the principal's
  2026-08-26 standing fork decision in `data/repository-exclusions.json` and
  the projection `data/repository-classification.json` regenerated (forks
  96/96 acknowledged).

## 2026-09-24

- **Art collection discoverability (the Flickr → site loop closed):**
  `data/artworks.json` refreshed live from Flickr via the new
  `code/orchestrators/sync_flickr_artworks.py` freshness step
  (`flickr.people.getPublicPhotos` + per-photo `getSizes`, key from the
  `FLICKR_API_KEY` env var/CI secret, deterministic upload-desc order,
  one-time HTML entity unescape of descriptions). Export now carries 943
  artworks including the previously missing *Solstice (Turning Point)*
  (55349041831, 2026-06-21) plus additive `license`/`license_name`/
  `license_url`/`date_upload` fields (942 records CC BY-NC 2.0; one CC BY-NC
  4.0). Compact index rebuilt with a generator-owned `page` field.
  - **New crawlable per-artwork pages:** `build_artwork_pages.py` (generation
    step `artwork-pages`) emits `artworks/<id>-<slug>.html` for all 943
    records — VisualArtwork + BreadcrumbList JSON-LD (creator `@id` reference,
    license, Flickr `sameAs`), meta description with unique fallbacks,
    canonical + OpenGraph/Twitter tags, meaningful alt text, tags, license
    notice, prev/next + tag-overlap related works, and a Flickr backlink. The
    `artworks/index.html` plain-HTML hub lists every page plus curated
    collections; 0 pages are thin (noindex) today — the 14 untagged records
    all carry real descriptions.
  - **Curated themed hubs:** `pages/ART_COLLECTIONS.md` (source of truth) →
    five `art-collections/<slug>.html` CollectionPage+ItemList pages
    (Neuroscience & Molecular Biology, Collective Behavior & Ants, Sacred
    Geometry & Kabbalistic Triangles, Active Inference, Americana & Seals).
  - **art.html crawlability:** tiles are now `artworks/<id>-<slug>.html`
    anchor links (lightbox = progressive enhancement via `tileClick`), the SSR floor is
    maintained by the new `sync_art_gallery.py` patcher step
    (`art-gallery-sync`), and the noscript block points at the plain-HTML
    artwork index. Gallery hydration (`js/art-gallery.js`) renders link tiles
    and defers to the lightbox only on plain clicks.
  - **Sitemap & search:** sitemap policy adds `artworks/` + the five
    collection hubs; `build_sitemap.py` appends all non-thin artwork pages
    with Flickr-upload `lastmod`. Search index gains compact `artwork` items
    (thin pages excluded).
  - **Identity graph:** Flickr profile added to the Person `sameAs` in
    index.html, work pages, and publications JSON-LD; `rel="me"` Flickr link
    site-wide (index.html + `deploy_seo_security.py` append behavior +
    `site_nav.REL_ME_LINKS`); art entries in `llms.txt`, `humans.txt`, and
    `start-here.html`; domain pages (art-synergetics, entomology,
    active-inference) link their matching collections.
  - **Publication intake (same day):** paired-publication scan (470 pairs,
    zero warnings) applied 55 actions — the new *Jev in Practice* paper
    (Zenodo 10.5281/zenodo.22816187, folder `2026_JevPractice`) plus 54
    metadata updates; 14 `needs_review` pairs remain queue items for manual
    curation.

## 2026-09-18

- **Zenodo intake hygiene:** the four software-only Zenodo deposits that kept
  re-flagging the uncatalogued check are now registered in
  `KNOWN_STALE_RECORD_IDS` with their curation dispositions — daf-jev release
  archive 22817425 (SOFTWARE.md row cites concept 10.5281/zenodo.22816187),
  EvoJump canonical curated deposit 22667290 per R80, EvoJump GitHub-Zenodo
  automated integration archive 22667291 per R81 (superseded; kept record
  22667290), and the CCD software revision archive v2.6.0 22760881 (supplement
  to paper row #112; same class as 22666981). The freshness gate now reads
  zero uncatalogued records on a fresh 464-pair scan (464 pairs, 0 new,
  0 needs_review, 50 update_existing = the already-applied 2026-09-17 set).
  The EvoJump software row carries its canonical concept DOI
  (10.5281/zenodo.22664675) in `pages/SOFTWARE.md` and `data/software.json`,
  matching the daf-jev curation format; software surfaces regenerated.
- **Live-doc legacy sweep:** all 217 distinct `.py` references, ~50 CLI flags,
  numeric claims (16 accessibility checks, 32 report_paths importers, 61
  orchestrators, 48-step generation chain), and every relative link target in
  live docs verified against current code — zero stale mentions found; the
  two `build_image_sitemap.py` mentions are deliberate removal records pinned
  by `code/tests/test_regenerate_all.py:20-21`. No edits required.
- **Private catch-up merge + DOC-010 re-run:** the sidecar checkout
  merged public `main` into the sidecar `main` (400 commits since
  `0d4e8da1`; 18 conflicts resolved in favor of the canonical upstream
  payloads). DOC-010 re-run at the merged head: `gsc_followup_preflight`
  PASS (sitemap 1375 URLs, seo_invariants ok, robots open-crawl, 29 live
  HTTP 200s; dated receipt `reports/gsc_preflight_2026-09-18.json`),
  checklist refreshed; signed-in Search Console steps remain externally
  blocked. Binder chain rebound at the merge receipt; `validate_repo.py`
  and the full suite green.

## 2026-09-17

- **September 17 publication and repository intake:** full pairing scan
  (464 pairs, 247 releases, 158 records, zero warnings) — 50 strong
  update_existing actions applied (DOI-already-represented metadata and
  software-link refreshes), two needs_review pairs dispositioned as
  version-history-only (R82 fep_lean v1.2.0, R83 GNN v3.4.0; both works
  already in the bibliography). `docxology/daf-jev` curated into
  pages/SOFTWARE.md Developer Tools (TypeSafe Jev client toolkit, Zenodo
  concept DOI 10.5281/zenodo.22816187) — originals 115 → 116, grand total
  154 → 155; classification queue clean (`classify_repositories.py --check`
  exit 0). Steganographer row fact-checked against its README (132 → 484
  tests). Fresh snapshot/inventory/pairing/external-link/PSR receipts for
  2026-09-17, discovery pointers re-rendered, binder chain rebound.
- **Hand-page content development:** start-here (site map for humans and
  agents, grounded in current counts), collaborators (six collaborator
  cards, interview subjects, institutional rows), art (gallery explainer),
  videos (provenance + usage guide), cite-verify (identifier table,
  reuse-humility rules) — every claim restated from repo sources, zero new
  external URLs.
- **Website polish:** 33 lines of dead CSS removed (unused selector groups,
  two unreferenced keyframes, one exact-duplicate rule — every removal
  verified repo-wide); og:site_name/og:locale completed across the
  hand-maintained pages; search.html rel="me" set completed to match the
  homepage.
- **DOC-014 landed:** all 61 orchestrators' ad-hoc sys.path bootstraps
  collapsed to a uniform two-line thin wrapper (`docxology_tools` owns the
  canonical bootstrap); CLI surface unchanged (smoke-verified), suite
  green. The Pages-artifact dangling-reference guard now skips gitignored
  paths (a locally-generated `regeneration-state.json` reference no longer
  fails local assembly; CI behavior unchanged, fail-closed outside a repo),
  with a regression test; the two prose references to that gitignored path
  were reworded so the shipped artifact cannot 404 on it.

## 2026-09-15

- **Full-backlog orchestration wave (DOC-002/003/005/006/007/008/009/011/012/013/015):**
  external evidence refreshed end-to-end (21-check snapshot, 20-section
  inventory — the AII textbook-group source added to the surface list,
  Scholar sync, GitHub inventory, fresh full pairing scan: 462 pairs, 0
  needs_review, all 43 coverage exceptions re-validated). Catalog: three
  principal curations promoted to SOFTWARE.md Developer Tools
  (`dicklesworthstone_meta_operator`, `Skillarum`, `nockchain-migration`) —
  115 originals / 154 grand total — classification queue at 4 honest defers
  pending paper/deposit. Privacy: insecure http:// URLs upgraded to https
  across the bibliography/works/resume/artwork chain, stealth records carry
  explicit status, `public_integrity.py` now fails plain http:// links.
  Agent layer: ReproducibilityLedger registered (schema registry 1.5)
  fixing the dangling `schema_ref`, two inert query recipes removed,
  release-integrity date preservation verified by-design with fresh SHAs.
  QA: browser smoke 10/10 + QA 7/7 re-run green at current HEAD; GSC
  preflight refreshed (signed-in Search Console steps remain externally
  blocked). Budget: artifact 825.6 MiB / 4,820 files, 54.4 MiB headroom,
  omission classes verified, ADR re-anchored. Runbooks: settle.md Notes and
  AGENT_START carry the discovery-pointer rule; the TODO binder bullet
  corrected to the fails-closed reality. SEC-002 unblock attempt: plugin
  enabled, scan attempted against a clean candidate, failed closed on the
  managed-profile runtime requirement — blocked state stands with updated
  evidence.
- **Fast intake path — parallel refresh, report reuse, fingerprint-gated
  regeneration:** three composable speedups with no gate loosened. The
  21-check snapshot in `refresh_public_sources.py` fans out through
  `ThreadPoolExecutor(8)` with order-identical output (the serial fan-out is
  now concurrent; 429 Retry-After and safe-fetch isolation unchanged;
  equivalence test-pinned). `refresh_public_source_inventory.py --cache-reports`
  reuses a same-day report's payloads (freshness keyed on `generated_at`, any
  `!ok` section fails closed to a live fetch, `--force` lifts it with
  warnings accepted, reuse adds an `anchors` provenance block).
  `sync_paired_publications.py --cache-reports` reuses the same-day report's
  GitHub releases and Zenodo records while `already_reviewed` classification
  becomes fingerprint-incremental — short-circuited when the
  (bibliography, decisions) hashes match the prior report's persisted
  `classification_cache`, full scan re-run on drift with a stderr note (drift
  surfaced, never absorbed); `create_new`/`update_existing`/`needs_review`
  always re-derive and cached-but-warned scans fail validation.
  `check_zenodo_uncatalogued.py --records-from <paired_report.json>` reuses
  the pairing scan's Zenodo records — one fetch per intake — failing closed
  on non-pairing sources, warned scans, or stale reports unless `--force`.
  Apply mode no longer regenerates inline: the hardcoded 13-generator
  `run_regeneration` chain is deleted and `regenerate_all.py` is the single
  write-mode driver, now input-gated — steps with declared inputs
  (paper-documents, work-pages, video-pages, asset-audit-first/final,
  accessibility-first/final) skip when their input fingerprints are unchanged
  (state in a gitignored local `reports/` state file named
  `regeneration-state.json` — never shipped to Pages — fingerprint
  recorded only after a successful run, unmatched patterns and empty inputs
  never skip; `--force` restores always-run). Measured: cold chain 48 steps in
  1m52s; warm no-op rerun skips 7/7 gated steps, runs 41 in 1m35s,
  byte-identical tree; `validate_repo.py --check` remains the ungated
  authority and the full settle battery (~6 min) and CI (~4 min) are
  unchanged. `docs/operations/publication-sync.md` documents the fast intake
  path (when it applies, the exact command sequence, what never gets skipped)
  with a signpost from `AGENT_START.md` and a regeneration-skip note in
  `docs/operations/settle.md`. Wall-clock measured same-day on this machine:
  snapshot fan-out 11.4s serial → 1.8s parallel (6.4×, byte-identical
  modulo `generated_at`); pairing scan 122.1s full → 0.60s with
  `--cache-reports` (~200×; 464 pairs, actions and counts byte-equal, zero
  warnings, fingerprint hashes stable across the two runs).

## 2026-09-12

- **Unified settle driver (`code/orchestrators/settle.py`) + change classifier
  (`code/src/change_classifier.py`):** one command classifies dirty paths into
  surfaces (reports/site/code/tests/ci/docs/other) and runs a tiered gate
  battery — fast (sitemap `--check`, artifact budget, ruff), full (adds
  pytest + standard `validate_repo.py`, CI-equivalent per
  `.github/workflows/validate.yml`), release (adds
  `validate_repo.py --release --strict-reports`, binding the conventional
  `reports/deployment-attestations/<HEAD>.json` when present) — then lands
  the payload + control-tail commit split (`release_controls.is_control_path`
  is the single control predicate), optionally pushing and opening a PR.
  Decision tree, tier table, and measured timings live in the new
  `docs/operations/settle.md` runbook, signposted from `AGENT_START.md`.
- **Gate-latency fixes:** `code/src/build_stamp.py` memoizes the build stamp
  (one git probe per process; video-pages check measured 55s → 5.7s), and
  `build_sitemap.py`'s `_batch_latest_map` now caches its full-history walk
  result, including the failure path; previously every `git_lastmod` call
  re-walked the whole history (sitemap `--check` measured 0.8s after the fix
  versus 19s before, with an 11m47s worst case eliminated).
- **Docs-accuracy wave (DOC-013; PERF-001 closed):** a three-reviewer sweep
  of `docs/operations/*`, the root agent docs, and the satellite docs checked
  every cited command/flag against the code and receipts; all findings landed.
  `docs/operations/settle.md` gained the code-verified corrections (drift
  review is inside the full battery; the manifest write fails closed on dirty
  post-deploy inputs with `--allow-dirty-prepayload-evidence` whitelisting
  only the pre-payload snapshot; the lint step's `--no-sync` exception; the
  binder chain restated in the canonical `generation_plan.py` order ending on
  a second `build_generated_manifest.py` pass, with
  `build_public_source_review.py` described as the excluded manual render).
  `TODO.md` closes PERF-001 with the measured evidence (batch walk adopted,
  byte-identical, 0.8s vs 19s) and records the 2026-09-12 session findings.
  The root docs (AGENTS, CLAUDE, GENERATED, AGENT_START) and nine operations
  runbooks now cross-reference the settle driver; stale references fixed
  (CLAUDE maintenance-log path, docs/AGENTS cache-bust version, ADR growth
  receipt re-anchored to the 2026-09-12 receipt, security-posture CSP example
  aligned to the deployed `CSP_META_TAG`, releases/design AGENTS boilerplate
  corrected to the single-origin flow, manuscript inventory completed).

## 2026-09-11

- **Backlog batch — all five 2026-09-10 principal-review items resolved:**
  EvoJump: R80 accepts the six release pairs under the canonical curated
  concept `10.5281/zenodo.22664675` as software-catalog and R81 supersedes the
  six auto-archive pairs under `10.5281/zenodo.22664645`
  (`data/paired-publication-decisions.json`, groups 79 → 81; the citable paper
  remains row #12, concept `10.5281/zenodo.17229924`; no new bibliography row).
  CCD row #112 adopted the Zenodo v2.4.0 self-title "Cognitive Diagrams:
  Reviewing Categorical Accounts of Linguistic Case". The On Time version-DOI
  citation (record `15168382`) gained its full-identity
  `VERSION_SPECIFIC_CITATION_EXCEPTIONS` entry, and software-only record
  `22666981` was registered in `KNOWN_STALE_RECORD_IDS` by record id
  (`check_zenodo_uncatalogued.py`) — the next uncatalogued/DOI-role reports
  should show zero flags for both.
- **Superseded dated reports omitted from the Pages projection (DOC-009/DOC-012
  durable fix):** `build_pages_artifact.py` gained a third omission class — any
  tracked `reports/` path strictly older than the newest date of its family
  (top-level `reports/<family>_<YYYY-MM-DD>` receipts, including qualifier
  variants like `paired_publications_2026-06-09-itrace.json`, plus whole dated
  `reports/visual-qa/`, `reports/browser-smoke/`, `reports/browser-qa/` sets)
  is left out of the deploy artifact while every file stays committed in the
  repository. Files sharing a family's newest date stay published together, and
  the new shared citation scan (`code/src/report_references.py`, reused by
  `prune_old_reports._referenced_externally` so both tools share one exclusion
  semantics — `papers/` in scope, inventory manifests and repo-only trees out)
  keeps any report cited from a published page or data file in the projection.
  Measured against the 2026-09-11 growth receipt (864.17 MiB, 5,184 files):
  **390 files / 70.9 MiB** newly leave the artifact, projecting **≈793.3 MiB**
  with ≈87 MiB of headroom under the unchanged 880 MiB review band — the band
  and the 900 MiB release ceiling are untouched, and each new evidence wave now
  adds only the newest receipt per family. The manifest gains the
  `omitted_superseded_reports` summary (count, bytes, examples) with the
  `superseded_report_policy` key, `MANIFEST_COMPARISON_FIELDS` covers the new
  field, the growth receipt adds `omitted_superseded_report_count`/`_bytes`,
  and a durable 404 guard fails the build if any repository-relative `reports/`
  reference in the assembled projection was not copied. Docs:
  `github-pages-artifact.md`, `report-retention.md` (projection-only omission
  is the default archive tier, no retention entry needed),
  `asset-strategy-adr.md` execution subsection, and the agent-index
  `PagesArtifactManifest` schema; the principal-review TODO item is resolved.

## 2026-09-10

- **Publication intake — Skillarum #216 and 48 versioned updates (GitHub +
  Zenodo pairing):** broad warning-free scan (`reports/paired_publications_
  2026-09-10.json`: 462 pairs; 239 releases; 155 Zenodo records) against the
  2026-09-07 baseline. Applied the single strong `create_new` and 48 strong
  `update_existing` actions; works total 212 → 213. New work #216
  *Skillarum: Conditionally Reproducible Website-to-Agent-Skill Compilation*
  (concept DOI `10.5281/zenodo.22663906`; v0.2.0, 2026-09-08) with a complete
  paper folder and the versioned combined PDF. Row #112 (Cognitive Case
  Diagrams) updated to Zenodo record `22653315` v2.4.0 (2026-09-07) with the
  new 15.3 MB versioned PDF retained alongside the v1 PDF; the v2.5.0
  re-release is ledgered as version-history-only (decision R79). The 47
  baseline `update_existing` actions re-verified idempotently (folder
  metadata and PDF refreshes). New fork `docxology/oh-my-pi` registered under
  the standing fork policy (DOC-005 mechanized path, RGMs precedent).
  Principal-review items left open with evidence in
  [TODO.md](TODO.md) ("Session findings (2026-09-10)"): 12 EvoJump
  `needs_review` pairs (duplicate Zenodo concepts `22664645`/`22664675`),
  the CCD row #112 title divergence, the deliberate On Time version-DOI
  citation (commit `d086e7a3`) missing its `VERSION_SPECIFIC_CITATION_
  EXCEPTIONS` entry, and the software-only record `22666981`.
- **Bibliography completeness backfills:** Author cells filled for rows 199,
  210, 211, and 216 via the DataCite registry pass
  (`fetch_work_authors.py`, title-similarity 1.0, no invented authors);
  Domain Legend now declares `🔍 Other` (row 215); GNN and Codomyrmex paper
  folders record their version records as `artifact_doi`/`artifact_doi_url`
  (verified live: `10.5281/zenodo.20671741`, `10.5281/zenodo.21750801`) with
  `CITATION.cff` DOI roles synced.
- **Agent-surface pointer refresh (generator fix):** the dated-report rewrite
  in `sync_site_facts.py` covered only three report families, so
  `llms.txt`, `discovery.html`, and `pages/DISCOVERY.md` pointed agents at
  3-4-month-old snapshots (external-links 2026-05-15, live-site 2026-07-17,
  source-coverage 2026-07-17; `llms.txt` never refreshed its
  snapshot/inventory pair). The rewrite list now covers
  external-links/triage, live-site verification, source coverage, and the
  snapshot/inventory pair for `llms.txt`, with the resolver glob
  digit-anchored so `external_links_triage_*` can no longer shadow
  `external_links_*`. Also: duplicated discovery-page ListItems and table
  rows removed; `llms.txt` manifest/registry versions corrected to 1.5/1.4
  with the `ScholarVerificationReceipt` schema added; agent-index Work
  schema now documents the `Report` type and the `authors` field.
- **Light-mode card ink:** under `prefers-color-scheme: light` the card
  family (white cards via the remapped `--bg-card`) still inherited
  hardcoded dark-theme ink (#fff headings, #cfcfcf body) and was unreadable
  on every page that renders cards. The light fixups block now maps card
  headings/body/stat numerals to the text tokens, with compensating
  light-ink rules for the by-design dark plates (art cards on their
  hardcoded #0b0b0b background, `.section-alt` dark bands) and a
  specificity bump for repositories.html's later-loading inline style.
  Verified with light/dark full-page captures before and after; dark mode
  is pixel-identical.
- **Docs and ledger hygiene:** TODO.md's stale "Intake still blocked on
  DOC-004" sentence replaced with the 2026-09-07 closure pointer;
  `docs/README.md` index gained the missing `asset-strategy-adr.md` row and
  the `manuscript/` tree; the 2026-09-08 section backfilled the PR #18
  median-of-3 Lighthouse change; `codemeta.json` `dateModified` refreshed.
- **Artifact review budget moved 850 → 880 MiB after a growth review:** the
  2026-09-10 intake evidence (a new paired-publications report, refreshed
  public-source snapshot/inventory, external-link report, source coverage,
  and the dated public-source review) plus the 2026-09-11 UTC-rollover
  double-generation pushed the bounded Pages projection from 844.9 MiB to
  870.5 MiB, tripping the review threshold in CI. Composition at review
  time: paper PDFs 681 MiB (78%), extracted paper images 950 MiB (omitted
  from the projection per policy), published dated reports ≈ 60 MiB,
  everything else small. The 880 MiB review threshold keeps 20 MiB of
  headroom below the 900 MiB release hard ceiling (`code/src/
  artifact_budget.py`, `build_pages_artifact.py`, and the manifest
  `warning_policy` string updated together). The durable alternative —
  omitting superseded dated reports from the Pages projection while they
  remain in the repository — is flagged for the principal in
  [TODO.md](TODO.md) (DOC-009/DOC-012).

## 2026-09-08

- **Deploy-freshness alarm now passes — stamp comparison fixed to prefix
  semantics:** the `Verify live site` workflow (added 2026-09-05) compared the
  live homepage's build stamp against main's HEAD truncated to 7 characters,
  but git's `--short` auto-lengthens on ambiguity and the deployed stamp is 8
  (`8ecdaa07`) — `8ecdaa07 != 8ecdaa0` retried through the whole grace window
  and failed every run since the alarm shipped. Two corrections: the
  comparison is now prefix-based (`run_freshness_check` in
  `code/src/deploy_freshness.py`, with a regression test for the
  auto-lengthened form), and the workflow derives its expectation from the
  stamp embedded in the committed `index.html` rather than HEAD — page stamps
  are deliberately reused across non-rendering commits
  (`build_stamp.reuse_or_current`), so "stamp equals HEAD" was
  unsatisfiable by design while "live site serves the deployed artifact" is
  the check's actual intent.
- **CHANGELOG typography:** rejoined "pure-function", split across lines in
  the 2026-09-07 entry.
- **Live-verification marker fixed for the compact JSON-LD emission:** with
  the freshness alarm finally passing, its next step ran for the first time
  and failed on a stale pin — `verify_live_site.py` expected
  `"@type": "CollectionPage"` (with a space) on `publications.html`, while
  the page's JSON-LD is emitted compact (`"@type":"CollectionPage"`). The
  marker now matches the emitted format, consistent with the
  `software.html` marker.

- **CI robustness — median-of-3 Lighthouse scoring and structural JSON-LD
  checks (PR #18, commit `57cd548d`):** the Lighthouse budget gate tripped on
  shared-runner variance — `index.html performance=52 < baseline floor 55` on
  a byte-identical homepage that had passed four PR runs and re-passed green
  on rerun (the file's baseline comment records ±20 swings, 76/75/57, on
  identical content). Per-page scoring now takes the **median of 3 runs**
  when the first run lands below a floor, so a single noisy dip no longer
  fails the gate while a genuine regression stays below the median; floor
  values are unchanged (integrator-owned). In the same pass the
  spaced-vs-compact marker pin in `verify_live_site.py` was replaced by
  structural JSON-LD parsing (`jsonld_types_in_html`) asserting `@type`
  values, immune to generator re-serialization. The workflow has been green
  end-to-end since.

## 2026-09-07

- **Search index split surfaces no longer skew their timestamps:** when a
  regeneration changed the rendered body, `build_search_index.py` wrote
  `search-index.json` and its three split companions
  (`search-index-core.json`, `search-index-content-work.json`,
  `search-index-content-video.json`) with *different* `generated_at` values —
  `stable_generated_at` returned `None` for changed bodies, and the fallback
  `None` made `render()` and `render_split()` call the clock independently.
  The committed tree then failed `validate_repo.py --check`
  ("Stale generated search index surfaces: …") until a second idempotent run
  rewrote all four files with one reused timestamp; the 2 s skew in f58f0be9
  and the 3 s skew in 71506b8b are both visible in git history. The builder now
  resolves one timestamp (`stable_generated_at(...) or` the candidate's own
  `generated_at`) before rendering any surface, and
  `code/tests/test_build_search_index.py` pins the invariant with a countable
  fake clock — under the old writer the changed-content test fails with
  exactly the observed main-vs-splits skew, and the unchanged-content test
  pins the existing stable-timestamp reuse. The three committed split
  artifacts were regenerated with the fixed writer (single
  `2026-09-05T22:50:01Z` timestamp across all four surfaces).
- **TODO reconciliation (2026-09-07):** every open item verified against live
  state — `classify_repositories.py --check` (2 primary decisions pending,
  matching DOC-005), the 2026-09-04 paired-publications report (5 unreviewed
  actions, queue sharpened in DOC-004 with the four DOIs and their
  already-represented status), `sync_scholar_metrics.py --check` (815
  citations snapshot current), the 2026-09-05 external-link triage (no hard
  404s; 129 warnings are bot-protection/timeouts/transients), asset and
  accessibility reports current. Resolved MIN-01/MIN-02 sections removed from
  `TODO.md` per the completed-rows-deleted convention (evidence: 2026-08-31
  entry above); no new MAJOR items found.
- **PR validate workflow now validates the PR head commit:** the
  `pull_request` event checked out the synthetic merge ref, whose first
  parent is the base branch, so its first-parent diff is the entire PR and
  the commit-bound `source_commit_at_generation` binding could never resolve
  there — every content PR since the provenance pattern landed failed
  `build_pages_artifact.py --check-manifest` ("stale Pages artifact
  manifest") while push runs stayed green. `.github/workflows/validate.yml`
  now checks out `github.event.pull_request.head.sha`.
- **Paired-publication decisions R73/R74 recorded:** the 2026-09-04 review
  queue's Codomyrmex `untagged-ce7d…` v1.3.0 release and GNN v3.2.0 are now
  recorded `superseded` / `bibliography-folder version-history-only` in
  `data/paired-publication-decisions.json`, each citing its curated
  bibliography folder; the refreshed full-scope
  `reports/paired_publications_2026-09-07.json` (450 pairs) drops the queue
  to 4 unreviewed actions — the rotating-draft Codomyrmex URLs and the
  Cognitive Integrity cluster held for the principal (DOC-005 overlap).
- **DOC-004 closed — the pairing queue reached zero:** the principal
  classified `docxology/cognitive_integrity` as curated (added to
  `pages/SOFTWARE.md`, backed by `papers/2026_CognitiveIntegrity/` and
  `papers/2026_CognitiveIntegrityFramework/`), confirmed superseded
  dispositions for the rotating Codomyrmex draft URLs (R75/R76) and for the
  ActiveInferAnts and CEREBRUM releases as version-specific artifacts under
  the represented Cognitive Integrity Framework DOI (R77/R78), and directed
  that draft releases be skipped from pairing. The refreshed full-scope
  `reports/paired_publications_2026-09-07.json` has **zero unreviewed
  candidates** (447 pairs; the three skipped draft pairs account for the 450
  → 447 delta) and `classify_repositories.py` leaves one open primary
  (`docxology/dicklesworthstone_meta_operator`).
- **Draft releases no longer pair:** `is_draft_release` in
  `code/src/publication_pairing.py` skips releases whose canonical URL is the
  rotating `untagged-<hash>` draft slug, ending the requeue treadmill (R71 →
  R73 → R75 documented three rotations of the same Codomyrmex draft).
- **Provenance binding is merge-aware:** `latest_payload_commit` in
  `code/src/release_controls.py` steps through a merge commit whose tree is
  identical to one of its parents (a PR merge ref's first parent is the base
  branch, so its first-parent diff is the whole branch and the tip-recorded
  `source_commit_at_generation` could never resolve there). Covered by pure-function fixtures and an end-to-end PR-merge-ref test that was
  mutation-verified to fail under the old walk.

## 2026-09-05

- **Child processes inherit the running interpreter:** every orchestrator that shelled out to another repository script spawned a bare `python3` 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.
- **Lint gate widened from one rule to Ruff's default rule set:** CI ran `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.
- **Exclusion provenance is explicit (`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.
- **Dead image-sitemap references removed:** `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.
- **The documented regeneration chain is now checked against the one that runs:** `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).
- **SEO invariants stop re-reading the site:** one `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.
- **Browser tests skip instead of failing where a loopback socket cannot be bound:** a sandbox that forbids `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.
- **The external-link gate can stay green now:** `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.
- **A catalogued repository no longer asks to be reviewed again:** `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`).
- **Redirect discovery stops re-reading the site:** `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.
- **Regenerated the stale generated layer:** `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`.

## 2026-09-02

- **MillenniumAudit follow-through and counts refresh (daf-stack docxsite pass):**
  - Linked the standalone implementation repository [`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).
  - Mirrored the full README into `.github/README.md` for GitHub profile rendering and dropped the duplicated tagline from the root README.
  - Refreshed `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).

## 2026-09-01

- **Publication Intake — MillenniumAudit (#215):**
  - Cataloged Zenodo record `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).
  - Added paper documentation folder `papers/2026_MillenniumAudit/` with README, AGENTS, SKILL, CITATION.cff, `metadata.json`, source PDF, and full-text extraction.
  - Added bibliography row 215 and generated the work page, bibliography exports (`bibliography.bib`, `bibliography.csl.json`, `bibliography.ris`), `data/works.json`, `data/publications-ld.json`, work enrichment, and per-paper site cross-references.
- **Doc-pass residue cleanup:** corrected `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).

## 2026-08-31

- **Agent-navigation doc pass** (see `REVIEW_LOG_2026-08-31.md`): pointed the
  AGENT_START.md external-link triage recipe at the GENERATED.md triage row and
  the two-command refresh instead of the stale hard-coded 2026-05-15 report;
  added `llms.txt` to the GENERATED.md Volatile-site-facts outputs row (it is
  rewritten by `sync_site_facts.py`); refreshed the TODO.md last-reviewed stamp
  and recorded the two minor doc findings as resolved.

## 2026-08-26

- **Release-blocking link repair:** corrected the canonical Science DOI for *Defining events: 2020 in hindsight*, removed three verified-dead AII software aliases rather than inventing replacement ownership, and migrated moved AII governance/program links to their live canonical routes.
- **Bounded link-gate coverage:** external-link validation now scans every root-level public HTML route, while excluding only URLs used as CSP source expressions; real YouTube embed paths remain in scope. This exposed and corrected three additional generated domain/pillar links before publication.
- **Review discipline:** current AII governance, advisory-board, and textbook-program wording remains explicitly queued for human review rather than silently changing time-sensitive profile claims.
- **Post-deploy evidence boundary:** external-link triage is now recognized as a narrowly date-stamped post-deploy derivative only after its deterministic check matches the refreshed link report; malformed and unrelated report paths remain release-blocking source drift. Deterministic source renderers now resolve dated reports from Git-tracked source only, and the Pages manifest rejects dirty tracked post-deploy receipts, so temporary evidence cannot make a committed artifact pass locally but fail in a clean checkout.

## 2026-08-25

- **Public-main release-integrity controls:** established a source-payload versus control-tail provenance model so deterministic manifests, artifact budgets, and review records can be checked without masking source drift. Publication, software, paper-document, pillar-page, redirect, and generation-plan checks now fail on stale source-rendered output.
- **Release deployment gate:** GitHub Pages now runs the repository validator, full test suite, and pinned W605 Ruff gate before it assembles or deploys the bounded artifact. A release-ready claim remains blocked until the deployed SHA has fresh browser/link/live evidence and a post-deploy attestation.
- **Source visibility and JSON-LD:** bibliography projections now use Git-tracked/non-ignored source visibility rather than machine-local derived files; publication and software CollectionPage JSON-LD replacement now shares one output-preserving renderer.
- **Scholar provenance:** added `data/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.
- **Artifact and generated-write reliability:** Pages retains provenance for omitted visual QA image binaries while enforcing its 900 MiB ceiling, and real-filesystem tests cover late hard-link aliases during atomic generated-output replacement.

## 2026-08-17

- **Publication Intake — docxplus (#212):**
  - Cataloged new Zenodo publication record `21985580` (concept DOI `10.5281/zenodo.21983948`, version DOI `10.5281/zenodo.21985580`): *docxplus — the Intelligent Document Container*.
  - Added paper documentation folder `papers/2026_DocxplusIntelligentDocument/` with full metadata, skill, and extracted text representations.
  - Updated active cataloged bibliography works count to **209** (212 work rows across 192 indexed paper folders).
  - Regenerated all 40 local surfaces, search indices, sitemaps, JSON-LD structured data, and release integrity manifests.

## 2026-08-14

- **SEO/GEO Optimization Pass & Technical Defects Resolved:**
  - **Hreflang elimination**: Removed non-self-referential alternate links pointing 1,563 pages at the homepage from  () and .
  - **noindex + cross-canonical consolidation**: Removed conflicting  directives from paper pages and , keeping clean  consolidation to  landing pages.
  - **Video title disambiguation**: Implemented series/lecture token preservation in , eliminating all 30 duplicate  collision groups across 1,127 video pages.
  - **Work page title bounding**: Bounded all work landing page  lengths to $\le 70$ characters on clean word boundaries.
  - **Schema & Entity hygiene**: Fixed  to point to , enriched  with LinkedIn/YouTube/Bluesky, and deduplicated the  Organization node in .
  - **Service Worker optimization**: Removed the 1.7MB  from  pre-caching in  to protect offline installation while keeping lazy network-first search indexing.
  - **Static SSR for publications table**: Enhanced  to statically emit all 206 publication  elements into  at build time for AI crawler indexing (GPTBot, ClaudeBot, PerplexityBot).
  - **Video index equity**: Consolidated search equity by pointing  canonical to .
  - **Scholarly citation graph**: Enriched  structured data across all work pages with  and  metadata.
- **Pillar Content & Generative Engine Optimization (GEO):**
  - **5 Hand-crafted pillar research explainers authored**:
    - : "What Is Cognitive Security? Theory, Threat Models, and Multi-Agent Defense" (~2,200 words,  +  JSON-LD).
    - : "Computational Entomology: Algorithms, Models, and Digital Insect Colonies" (~2,100 words,  +  JSON-LD).
    - : "Insect Cognition & Collective Intelligence: How Ant Colonies Think Without a Brain" (~2,100 words,  +  JSON-LD).
    - : "Active Inference & The Free Energy Principle: A Practical Tutorial" (~2,500 words,  +  JSON-LD).
    - : "Neurosymbolic AI & Active Inference: Bridging Symbolic Reasoning and Generative Agents" (~2,200 words,  +  JSON-LD).
  - **GEO & AI Agent Provenance Layer**: Thickened  with verifiable agent provenance principles and a GEO architecture case study.
  - **Site-wide editorial wiring**: Added dedicated Research Guides section to , wired learning pathways in , registered routes in , , , and , and generated dedicated Open Graph cards in .

## 2026-08-13

- **DOC-005:** promoted three paper-paired Active Inference Institute repositories into `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.
- **Domain inference centralized** into `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**.
- **Review/CI/CSP:** repository inventory pages load `/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`.
- **Robustness backlog:** shared `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.
- Live-site snapshot refreshed: 12/17 markers passing with deployment pending until this commit is on Pages.

## 2026-08-10

- **Two new Zenodo software publications catalogued** with full paper-folder documentation (README/AGENTS/SKILL/CITATION.cff/metadata.json + PDF) and regenerated bibliography, exports, work pages, domain pages, catalog, feed, sitemap, resume, accessibility, and Pages-manifest surfaces (works 206→**208**):
  - **#210** Robust Belief Sharing in Federated Active Inference: A Recovery-Tested Generalized-Variational Framework for Categorical Contamination-Aware Consensus (🧠, concept DOI `zenodo.21864003`; source repository [`ActiveInferenceInstitute/active_fedference`](https://github.com/ActiveInferenceInstitute/active_fedference)).
  - **#211** Active Skillference: A Validated Prerequisite Graph, Computational Claim Registry, and SkillTree Delivery Contract (🧠, concept DOI `zenodo.21865643`; source repository [`ActiveInferenceInstitute/active_skillference`](https://github.com/ActiveInferenceInstitute/active_skillference)).
- **45 paired-publication `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).
- **Fix: string-form paired-publication decisions are now honored** (`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).


## 2026-08-07

- **Two new Zenodo publications catalogued** with paper-folder documentation and regenerated bibliography, exports, work pages, feeds, sitemap, resume, accessibility, and Pages-manifest surfaces:
  - **#208** PROJECT BOND — The Special-Agent Operations Compendium (💻, concept DOI `zenodo.21843592`; source repository [`docxology/bond`](https://github.com/docxology/bond)).
  - **#209** DigiPPPiP: Digital Partner Pen Play in Parallel (🛡️, concept DOI `zenodo.21815704`; authors Siddhant Shrivastava, Evelyn C. Goh, Alexandra Mikhailova, and Daniel Ari Friedman).
- **Repository catalog updated**: added `docxology/bond` to the owned Developer Tools list; owned-repository count 94→95 and total curated software count 132→133.
- **Canonical DOI corrected** for kept ATLAS row #136 from version DOI `zenodo.10362561` to concept DOI `zenodo.10296601`; the retired #49 duplicate remains a permanent gap.
- **Zenodo stale-version exceptions documented**: records `21418901` (SynthOBS), `20804586` (CogSecSkills), and `19139090` (retired Template/Reproducible duplicate) are not new publications and are not added.
- **Release metadata**: CITATION.cff bumped to `2026.08.07`.
- **DOC-005 triage pass - ten more repositories promoted to `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).
- **DOC-004 decision R25 recorded** in `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`.
- **DOC-004 decisions R26-R27 recorded** in `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.
- **Authenticated GitHub inventory refresh** (241 repos, `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.
- **Authenticated paired-publication refresh** wrote `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.

## 2026-08-02

- **Seven new Zenodo publications catalogued** via `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:
  - **#200** The Witness Register: Co-Registration Without Aggregation (💻, `zenodo.21754245`)
  - **#201** The Line Set: Holding Instruments Apart (💻, `zenodo.21754243`)
  - **#202** White Line: A Typed Ledger for the Edge of the Claim (💻, `zenodo.21754241`)
  - **#203** Personal Red Lines for Development (🛡️, `zenodo.21754239`)
  - **#204** Golden Line: Toward What Matters (💻, `zenodo.21754237`)
  - **#205** Black Line: Strong Work in Public (🛡️, `zenodo.21754235`)
  - **#206** Codomyrmex: An Artificial Ecology for Agentic Software Development (💻, `zenodo.21750800`)
- **Authors populated** on all seven new rows (Friedman, Daniel Ari).
- **Zenodo uncatalogued queue cleared** (0 new remaining; the SynthOBS `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).
- **GitHub paired-publication sync deferred**: `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.
- **Duplicate publications retired (2 rows)** after a full duplicate audit (0 duplicate DOIs; 2 genuine title/DOI duplications found and removed, keeping the canonical rows): removed **#49** (ATLAS concept-DOI `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.
- **One new Zenodo publication catalogued** — **#207** THALIA: Typed Harness with Analytical Lexical-Integrated Architecture (💻, `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).
- **README signposting & completeness pass**: expanded the Quick Links line and Repository Map so **every** site page is reached from the README — added `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.
- **README + repo-organization pass**: added the 2026 line-set research-practice works and new software to the relevant domain sections, added a "🔬 Research-Practice Line Set" subsection under Computational, surfaced THALIA + Active Inference Power Suite + Codomyrmex / line-set works in the domain tables, and added Thalia + the line-set repos to the highlighted-repositories list. Verified AGENTS.md-referenced orchestrators (regenerate_docs, sync_publications_html, sync_software_html, export_bibliography, export_agent_data, sync_scholar_metrics) all exist.
- **Accessibility/usability fix — site header was unusable**: the global
  `nav{position:fixed;top:0;z-index:200;background;...}` rule in `style.css`
  applies to every `<nav>` element, so the breadcrumb `<nav>` rendered as a
  second full-width fixed dark bar painted directly over the primary
  navigation. On every page and viewport the logo, middle nav links, and the
  mobile hamburger were hidden/unclickable behind the breadcrumb bar. Fixed by
  pinning the breadcrumb as a slim bar directly below the nav
  (`position:fixed;top:74px;z-index:150`) at a z-index below the nav (200), in
  `code/src/site_nav.py` `BREADCRUMB_CSS` (generated pages), the inline
  breadcrumb `<style>` on the 11 hand-authored pages, and the work-page
  template in `code/orchestrators/build_work_pages.py` (230 breadcrumb pages
  total). Verified via Playwright: mobile hamburger receives taps and opens the
  menu, desktop nav links are no longer covered (0/11 covered), breadcrumb sits
  below the nav and non-hero pages stay clear. `pytest` 231 green,
  `validate_repo` green.
- Bibliography **199→206**; paper folders **181→188**.
- CITATION.cff version/date-released bumped to `2026.08.02`.

## 2026-07-30

- **One new Zenodo publication catalogued** via `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.
- **Two existing works updated** to newer Zenodo records (same work, re-deposited): **#174** CogSecSkills (`20804585` → `21513316`, domain corrected to 🛡️) and **#198** SynthOBS & FractiSynth (`21418687` → `21418782`). Duplicate rows #200–#201 retired.
- **Comprehensive repo audit**: Zenodo uncatalogued queue cleared (0 remaining), paired-publication scan (0 new pairs), all local `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.
- Bibliography **197→199**; paper folders **180→181**.

## 2026-07-24

- **Repo-wide functional and signposting audit implemented**: Pages growth reports are date-stable control metadata across UTC rollovers; release-integrity now records explicit deployment-pending reasons and supports a strict `--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`.
- **Regeneration tail made one-pass idempotent**: `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`.

## 2026-07-17

- **Compact video projection and repository triage added**: the interactive timeline now loads generated `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.
- **Operating runbooks expanded**: added repository-classification, CV release, evidence-refresh, accessibility/browser/visual QA, and live-verification runbooks; linked them from `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.
- **Regeneration pipeline made genuinely idempotent**: fixed local-vs-UTC report selection at the date boundary, moved the agent manifest behind its report and Pages dependencies, and added body-aware timestamp reuse across generated snapshots, exports, CV, feeds, and indexes. A complete second `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.
- **Progressive browser QA added**: `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.
- **Artwork gallery payload split**: added generated `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.
- **Backlog and documentation cleaned**: removed the completed stale issue-sync item from `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.
- **Public-source refresh completed without unreviewed promotion**: refreshed the dated public-source/inventory, repository, coverage, and pairing reports; the current pairing scan found one represented update and no new or ambiguous rows. Repository validation passes 1531/1531 static accessibility checks, 186 tests, the 17/17 live snapshot gate, strict report validation, Pages artifact checks, and GSC preflight.

## 2026-07-16

- **Service worker v20 — content data is network-first**: `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.
- **New publication catalogued — Active FractalRabbit**: added *"Active FractalRabbit: A Synthetic Benchmark for Belief Filtering Under Sparse Waypoint Observations"* (Daniel Ari Friedman, Zenodo 2026-07-13, canonical concept DOI `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.

- **CSP inline-script breakage fixed (art gallery restored)**: the `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`.
- **Art gallery search is art-local again**: new `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.
- **Lightbox double-advance fixed**: the /art lightbox sort/size/nav controls carry `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).
- **videos.html skip-link**: inline `onfocus`/`onblur` (CSP-blocked) replaced with a CSS `:focus` reveal rule.
- **Font loading un-broken CSP-safely**: the `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.
- **publications.html search input**: CSP-blocked inline `oninput="filterPubs()"` replaced with `addEventListener` wiring in `js/publications.js`.
- **Service worker v19**: cache bumped; new per-page JS modules added to the precache list.

## 2026-07-12 (session 5)

- **Non-render-blocking Google Fonts**: All 17 HTML pages with Google Fonts links converted to `media="print" onload="this.media='all'"` pattern, eliminating render-blocking CSS on first paint. New `code/orchestrators/optimize_font_loading.py` orchestrator.
- **Twitter Card tags on about.html**: Added `twitter:card`, `twitter:title`, `twitter:description`, `twitter:image` meta tags for social sharing parity with OG tags.
- **apple-touch-icon optimized**: Reduced from 77KB to 39KB (48% reduction) via PNG quantization to 128 colors, with no visible quality loss at 180x180.
- **extract_paper_texts.py error logging**: Silent `except Exception: continue` now logs the exception with page number, image index, and PDF filename to stderr before continuing, preventing silent extraction failures.
- **Descriptive image alt text**: Paper page thumbnail alt text now uses `"Figure from [paper_name], page N"` instead of raw filenames, improving screen reader usability and SEO.
- **Service worker v18**: Cache version bumped to serve updated JS assets (CSP-compliant scripts, search badges, count badges).

## 2026-07-12 (session 4)

- **CITATION.cff generated for all 176 papers**: New `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.
- **2024_BioFirm PPTX extraction**: Downloaded `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).
- **Content-Security-Policy deployed**: CSP meta tag (`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`.
- **Inline event handlers eliminated**: all 68 `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.
- **rel="me" social verification links** expanded from 3 pages to all 21 indexable pages (Scholar, ORCID, GitHub, LinkedIn, YouTube, Wikidata, Bluesky).
- **hreflang alternate links** expanded from 1 page (index.html) to all 21 indexable pages.
- **External `js/menu-esc.js`**: menu Escape-to-close handler moved from inline `<script>` to external file for CSP compliance.
- **Service worker bumped to v17**: cache version updated for new JS assets.
- **Accessibility audit enhanced**: `accessibility_audit.py` now checks for `no_inline_handlers` as a gate (16 checks, up from 15). All 23 pages pass.
- **art.html nav-toggle button**: added missing `.menu-btn` for keyboard-accessible menu toggle on the art gallery page.
- **New orchestrators**: `deploy_seo_security.py` (idempotent CSP/rel-me/hreflang deployment), `migrate_inline_handlers.py` (inline handler → data-attribute conversion).
- **Shared head extras**: `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).
- All generated surfaces, sitemap, manifest, and asset-size report refreshed. All validation + 154 tests green.

## 2026-07-12 (session 3)

- **Image thumbnail previews on paper landing 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.
- **CSS classes for thumbnails**: `.image-thumbs`, `.thumb-link`, and `.muted` added to `style.css`, replacing inline styles for cleaner maintenance and consistent rendering.
- **Search index image_count**: `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.
- **llms.txt stale counts corrected**: 171→172 full text papers, 139→168 image galleries, 8986→9938 images.
- **PPTX text extraction**: Extracted text from `BIOFIBIOFIRM_v2.pptx` (11 slides) for 2025_BiofirmDevelopmentWith. 172 of 176 papers now have full_text.md (97.7% coverage).
- All generated surfaces, sitemap, manifest, and asset-size report refreshed. All validation + 154 tests green.

## 2026-07-12

- Added work **#194 "Prior Cognitive Art"** (`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.
- **Enhanced full-text extraction pipeline**: `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.
  - **171 papers** now have `full_text.md` (was 166 — gained 5 from ODT/DOCX/PDF source extractions)
  - **8,986 images** extracted across **139 papers** (was 3,057 across 136)
  - **8,924 image references** embedded inline in `full_text.md` with 0 broken links
  - Downloaded and extracted text from 4 Zenodo ODT/DOCX transcript files and 1 misnamed PDF
  - `format_markdown()` now accepts an `images` parameter and groups image refs by page
  - `extract_images()` now returns `(page_num, filename)` tuples for page-aware embedding
- **Image sitemap expansion**: `build_image_sitemap.py` now includes paper-extracted figures in `sitemap-images.xml` (9,928 total images, was 942 — 139 paper pages with image galleries)
- **Full-text extraction pipeline**: new `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).
  - **166 papers** now have `full_text.md` with complete page-by-page text extraction
  - **3,057 images** extracted to per-paper `images/` subdirectories across **136 papers**
  - **0 errors** across all 166 extractions (10 papers have no PDF — Zenodo-only metadata, slides, or non-PDF artifacts)
  - Paper landing pages (`papers/*/index.html`) now link to `full_text.md` and the `images/` gallery
  - Work pages now include JSON-LD `encoding` field (Schema.org `TextObject`) for all 166 works with full text
  - Search index includes `full_text_url` for all 166 works with extracted text
  - `papers/README.md` updated to document `full_text.md` and `images/` as standard folder contents
  - `llms.txt` updated with full-text extraction pipeline link
  - Fixed `regenerate_all.py` to use `sys.executable` instead of hardcoded `python3` (was breaking on Python 3.9 vs 3.14 `datetime.UTC` import)
  - Fixed `build_current_counts.py` Python 3.9 compatibility (`datetime.UTC` → `datetime.timezone.utc`)
  - Fixed `build_resume.py` to gracefully skip PDF generation when reportlab is not installed
  - Fixed `validate_repo.py` to skip `full_text.md` files in local-link validation (academic paper internal references)
  - Fixed `build_sitemap.py` to not list `/papers/` URLs (SEO invariant compliance)
  - All 22 local generated surfaces regenerated (bibliography, publications, software, domains, works, paper pages, exports, evidence, catalog, search index, RSS feed, sitemap, manifest)

## 2026-07-05

- Comprehensive interactive-layer buildout across all 23 indexable pages:
  - **Text-to-Speech (TTS)**: Web Speech API integration (`js/tts-controls.js`) — floating control panel, speed/voice selection, paragraph highlighting, keyboard shortcut `T`
  - **Interactive features** (`js/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 safety
  - **+515 lines CSS** for all new components with responsive, print, and reduced-motion overrides
  - **Service Worker v16** — caches new JS modules, drops stale cache
  - **Performance**: 5 hero-art image preloads, resource hints (dns-prefetch, prefetch) across all pages, `preconnect` for Scholar/ORCID
  - **SEO**: `rel="me"` social profile verification links, `hreflang` support, WebPage JSON-LD on homepage
  - **Docs**: `SKILL.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 components
- 5 `noindex` redirect stubs intentionally skipped (about, research, meditations, nft, google verification)

## 2026-07-01

- Massive metadata enrichment sweep: all 164 paper folders now have extended schema (domain, type, methods, key_findings, related_papers, checked_at) via `batch_enrich_metadata.py`. 44 previously-missing `metadata.json` files created, 119 existing ones extended with paper-specific content.
- Multi-agent triple audit completed: metadata completeness (164/164 pass), navigability (all SKILL.md cross-references valid, all bibliography rows linked), domain accuracy (0 discrepancies), HTML output quality (26 root pages + 183 work pages well-formed, JSON-LD valid), live site parity (14/14 checks pass, no drift).
- Quality improvement pass: replaced 3 placeholder key_findings, fixed 55 truncated findings with sentence-boundary extraction, replaced generic domain-template methods with paper-specific methods for 163 papers (e.g. "Uniparental marker haplotype analysis", "Lean 4 theorem proving", "CPRA legal analysis").
- Added `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).
- Full `validate_repo.py --strict-reports` pipeline passes (30+ checks including browser smoke, accessibility, visual QA, live-site verification, sitemap, search index, external links).
- Added works **#180 "Sortition Upstream of NTQR"** (`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.

## 2026-06-29

- Added work **#179 "Mapping William Blake's Works"** (`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`.

## 2026-06-27

- Added work **#178 "AlphaCOGANT: Recursive Corporate Self-Improvement as Active Inference"** (`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.

## 2026-06-26

- Added works **#176 "A Living Meta-Analysis of the Modafinil Literature"** and **#177 "Refinement of Gold"** via the paired GitHub+Zenodo scan, with new paper folders (README/AGENTS/SKILL/CITATION.cff/metadata.json) and Zenodo PDFs; refreshed `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.

## 2026-06-24

- Added work **#175 "Realizing Emptiness: Operational Surrogates for No-Self-Evidence, QRF Opacification, and Bayesian Model Reduction"** (`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).
- Added `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).
- Pruned superseded dated QA screenshot sets under `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.
- Softened unguarded external/domain prose counts that would drift as external repos grow (codomyrmex module counts, COGSEC bio paper/book counts); fixed `regenerate_all.py`'s report-producer ordering so write-mode indexes don't go stale relative to the dated reports they link.

## 2026-06-22

- Synced the **CogSecSkills** publication (`zenodo.20804585`, 💻) and hardened publication intake.

## 2026-06-21

- Added two Zenodo publications: **Template Madlib** (`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.
- Repo-wide **Zenodo DOI concept-consistency** pass: switched **70** bibliography rows (plus the 4 newest works and the `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.
- Added **AGEINT** (`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.
- Fixes: `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/a11y pass: reconciled `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-label`s 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).
- Migrated the site body font from Georgia serif to **Inter** to match the design system (Playfair Display headings unchanged); centralized the duplicated menu-ESC handler into `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.

## 2026-06-17

- Added **AGEINT: Agentic Intelligence** (`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.

## 2026-06-15

- Completed **COGANT** (`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**.

## 2026-06-14

- Added two Zenodo-only publications via `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**.
- Completed the CEREBRUM dedup the 2026-06-10 pass flagged for the maintainer: removed the duplicate work `…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).
- Re-pointed the template/ Reproducible Generative Research bibliography entry (row 1) to its latest release `zenodo.20669283` (v3.4.0).
- Reconciled all volatile-count surfaces to **167 works / 150 paper folders** (BIBLIOGRAPHY header + per-domain counts, papers/README, index.html, DISCOVERY, and the regenerated data/exports); count-consistency drift clean, 92 tests passing.
- Hardened work identity without a URL migration (FirstPrinciples/RedTeam scoping concluded slug/DOI URLs would cost 168 forever-stubs on a no-redirect static host). `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.
- Modularized `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.
- Documentation/signpost accuracy pass: reconciled five hand-maintained narrative pages (`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/`.

## 2026-06-10

- SEO/discoverability pass. Fixed work-page meta descriptions that were hard-cut mid-word: `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).
- Added Twitter Card (`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`.
- Added the sixth research-domain landing page `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.
- Polished homepage: removed duplicate `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.
- New SEO invariants in `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.
- Deep-scan follow-ups: work-page fallback meta descriptions now include the title (eliminated 17 duplicate/templated descriptions across same-type works; 162/165 work descriptions now unique). Enriched `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.
- Reviewed Google Search Console (3-month window): 74 clicks / 3.25K impressions / 2.3% CTR / avg position 9; 118 indexed vs 111 not (43 "crawled-not-indexed" + 50 "discovered-not-indexed" thin/templated work pages — the description/author fixes target these). Confirmed the lone "Not found (404)" (`papers/2024_PopulationSearch/`) is stale (crawled before publish; now live, noindex, canonicalized). Findings + roadmap recorded in `reports/seo-discoverability-audit-2026-06-10.md`.
- Added a Google image sitemap (`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`.
- Deduplicated the CEREBRUM pair: work `…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.
- Corrected three mis-attributed paper abstracts (source READMEs had the wrong paper's text), sourced from authoritative records: `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-06-04

- Applied four strong GitHub release + Zenodo publication pairs: `2026_DeterministicTestbedSelf`, `2026_RecoveringLLMPersona`, `2026_Triplicate`, and `2026_TemplateTextbook`; bibliography **150→154**, paper folders **143→147**.
- Refreshed represented GitHub/Zenodo publication pairs for existing works, including `WhenDoBugs`, `MusicNeverStopped`, `BeeStack`, `BiologyTextbook`, `CrescentCity`, and template-derived exemplars; left review-only pairings untouched.
- Added six owned repositories to the curated software catalog (`template_autoscientists`, `template_newspaper`, `template_textbook`, `ntqr_llm`, `grateful_data`, `cohereants`); software catalog **50→56 owned**, **82→88 total**.
- Recorded June 4 public API counts: docxology GitHub **305** public repositories, AII **51**, Zenodo exact-name **40**, Zenodo ORCID-linked **98**; treated `docxology/template` DOI [10.5281/zenodo.20469500](https://doi.org/10.5281/zenodo.20469500) as software/version metadata, not a bibliography work row.
- Expanded volatile-count validation across README, AGENTS files, BIBLIOGRAPHY summaries, Discovery, `llms.txt`, software JSON/LD, and GitHub inventory counts.

## 2026-05-26

- Thermo-nuclear documentation pass: aligned volatile counts (116 works / 109 paper folders) across `llms.txt`, release notes, and publications head meta; added count-consistency validation (`code/src/count_consistency.py`).
- Refactored `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).
- Added `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.
- Added `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**.
- Added `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-05-19

- Added `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.
- Created the per-paper documentation set: `README.md`, `AGENTS.md`, `SKILL.md`, `CITATION.cff`, and `metadata.json`.
- Registered the work in `papers/paper_metadata.json`, the `papers/README.md` index, and `papers/AGENTS.md` (counts + maintenance log + domain coverage).
- Added bibliography table row 116 in `pages/BIBLIOGRAPHY.md` and the 🛡️ Cognitive Security domain index; regenerated `data/works.json` and bibliography exports via `export_bibliography.py`.
- Resynced `publications.html` PUBS + JSON-LD `mainEntity` and regenerated downstream artifacts (search index, domain/work/catalog pages, evidence, feed, sitemap, updates).
- Updated current counts to 116 curated works, 109 per-paper folders at the latest check.

## 2026-05-13

- Added machine-readable discovery artifacts: `llms.txt`, `CITATION.cff`, `codemeta.json`, bibliography exports, and structured `data/*.json`.
- Added domain landing pages, per-work landing pages, a generated search index, and an RSS feed.
- Added `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.
- Enriched generated work pages and the search index with abstracts, keywords, methods, and findings extracted from per-paper README/SKILL files.
- Added scoped external-link reporting plus a weekly freshness workflow, Dependabot, tighter workflow permissions, and workflow concurrency controls.
- Added `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.
- Expanded per-work JSON-LD with citation text, DOI identifiers, keywords, documentation links, and structured publisher/about fields.
- Added citation and evidence pages with claim confidence, caveats, maintenance ownership, and public-source reconciliation.
- Added fresh Open Graph images for the homepage, major sections, and research domains.
- Added source-refresh, bibliography export, software export, work-page, evidence, sitemap, reconciliation, accessibility, and visual-QA orchestrators.
- Added GitHub Actions validation for generated files, local links, JSON-LD, sitemap targets, and the Python test suite.
- Updated current counts to 115 curated works, 108 per-paper folders, 48 owned software repositories, 32 AII catalogued contributions, and 286 public docxology GitHub repositories at the latest API check.

## 2026-05-12

- Performed repo-wide README and AGENTS audit.
- Updated public GitHub repository count and domain figures from bibliography ground truth.
- Verified public-source discrepancies around Google Scholar cache, AII officers, board size, and Scientific Advisory Board context.

## 2026-05-04

- Renamed paper folders from author-title form to `YYYY_Topic`.
- Added `2020_FacilitatorsCatechism`.
- Added shared bibliography-table parser and publication HTML synchronization script.
