This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Blog authoring conventions (Duino / structural-bio series)
Conventions agreed with Artem for the Duino series, and the default for new posts. (The two short rules in .claude/CLAUDE.md — no last-name citations, math symbol dropdowns — are the seed of this and are expanded below.)
Structure: two tiers
The material splits into a Core and a Secondary tier. The Core is the foremost citizen; Secondary chapters matter to the mission but are secondary to the Core in their capacity to address the heterogeneity problem. Core prose may link out to Secondary chapters to call out problems, motivate choices, or elaborate — but Secondary material never pollutes the Core text.
- Core — the Duino fundamentals, as two tracks: Track A (ensemble representation: Hierarchy, Groupings, Heterogeneity with the three regimes R1/R2/R3, Materialization with the three modes A/B/C) and Track B (forward-operator infrastructure: operator records and the likelihood substrate), plus the evaluation model that composes descriptors into rendered coordinates.
- Secondary — problems with mmCIF, annotations / the artifact engine, the technology survey, ML-native access patterns, and the appendices.
Chapter 0 splits: the forward-operator material becomes the Track B Core chapter; the statistical-mechanics / Bayesian background becomes a linked prerequisite Primer page (not inlined into the Core).
The series stays a multi-page Quarto website (no book conversion). Global continuous figure numbering across pages is not a priority; per-page cross-references are enough.
Citations
Papers always go in references.bib, cited [@key] (numeric superscript). Never cite a paper by last name (no “the Wankowicz-Bonomi line”, no “gemmi (Wojdyr)”) — always link to the bibliography. Software/tools mentioned more than once also get a bib entry (@misc/@software) for a consistent link; a genuine one-off link to a tool’s docs/repo may stay a plain inline link.
Mathematics
Every non-trivial formula is presented the same way: the inline/display math as usual, plus a subtle, unstyled, collapsed-by-default dropdown directly beneath it spelling out each symbol and index. Keep operational symbol-prose out of the running text (it lives in the dropdown) but keep the mathematics lucid. Exempt the elementary cases (definition of covariance, a simple integral, etc.).
Definitions and the glossary
No .def insets in the prose. Canonical concept definitions live in the Glossary (posts/glossary/), organised thematically. The first use of a term in a post is bolded and links to its glossary anchor. The glossary is a first-class part of the series — the single place concepts are defined.
Glossary entries carry explicit {#gloss-<slug>} anchors (e.g. []{#gloss-scope}**Scope.** ...); link first use as [**Term**](../glossary/index.qmd#gloss-<slug>). The chapter nav (_glossary.qmd) links to the glossary so it is always reachable.
Main prose vs. side content (the meat / context split)
The main column carries only load-bearing content: the claims and definitions that actually constitute the format. It is condensed and informative — never vague rambling, and never the residue of an exploratory session (tangents, clarifying back-and-forth, restated context).
Secondary material — elaboration, examples, motivating asides, extra context — does not sit in the main column. It goes into a sidenote: an in-flow Tufte-style margin note that is ALWAYS visible and scrolls with the body text like any other block — never pinned, never collapsed behind a marker, never a popover. Keep this distinct from links and their hover previews, which are a separate mechanism (the Gwern-style link-preview tooltips stay). The .def-stack right-rail machinery is kept but unused in this series; .fold remains for inline collapsibles. Do not remove the right-rail infrastructure. Apply this split when drafting new posts and when reorganising existing ones.
Sidenote syntax: place ::: {.sidenote} ... ::: immediately after the paragraph it elaborates. Placement is pure CSS: on wide viewports (>= 1500px, where the outer gap holds a column) the note floats into the right gap and consecutive notes stack via clear: right so hefty notes push each other down rather than overlap; on narrower viewports it falls back to an in-flow indented block in the reading column. Either way it is always shown and scrolls normally. A small + cue is dropped at the anchor to tie note to sentence; it is a +, not a number, so it never reads as a numeric-superscript citation. To place the cue on a specific phrase instead of the paragraph end, wrap that phrase as [phrase]{.sn-anchor}. The marker injection lives in installSidenotes() (scripts.js); all placement is in the .sidenote* rules in styles/custom.css. Canonical definitions go to the glossary, not a sidenote; sidenotes are for elaboration, examples, and motivating asides.
Voice
Blog-style first person is welcome, but disciplined: keep the voice, drop the solipsistic rambling. Opinion and motivation worth keeping go into a sidenote, not the load-bearing prose.
Naming
The format is “Duino”. Introduce the name once, then use it consistently (not “the new format”).