0.1.0 - #1
Merged
Merged
0.1.0#1
Conversation
breezykermo
force-pushed
the
0.1.0
branch
2 times, most recently
from
September 9, 2026 14:20
296d7d5 to
ba4d3c4
Compare
breezykermo
force-pushed
the
0.1.0
branch
2 times, most recently
from
September 17, 2026 08:53
5bcc70b to
04c5cc8
Compare
breezykermo
marked this pull request as ready for review
September 17, 2026 18:26
breezykermo
force-pushed
the
0.1.0
branch
3 times, most recently
from
September 19, 2026 20:49
5cbdb96 to
89d8ff1
Compare
A #window(limit: n) renders its body through _blocks, which decides what a paragraph is by element name and treats an unknown name as a block. Five names an author writes mid-sentence were missing: smartquote, ref, cite, smallcaps and symbol. An apostrophe was the visible cost. "the reader's own browser" came out as three paragraphs — "the reader", "'", "s own browser" — and the isolated quote, having no word in front of it, resolved as an opening quote rather than the apostrophe it was written as. A ref cost the same three-way cut, so a transcluded sentence pointing at another note broke wherever a limit sent it through here. context stays out of the list on purpose: it can hold block-level content, so naming it inline would merge two real blocks, which is the more expensive of the two errors. The demo's w-inner count rises from 6 to 8 because two of those renderings were being spelled with the split apostrophe and never matched the string the check counts.
Records the container-ordinal scheme's failure on a real site, the algorithm that replaces it, and the Typst facts that constrain it.
_name-slug derives a note name from a URL's tail (for reading-list style bare-link content) or from ordinary lowercase-hyphenated words, dropping a leading filler word and any leftover scheme word, and keeping whole words within a configurable character limit. _h3 is a three-character base36 djb2 digest for breaking slug collisions, built on _b36, a fixed-width base36 renderer that keeps a value's low-order digits when it overflows the requested width.
…dinal An unnamed note with no usable title now mints its id from a slug of its own body plus a short content digest, both pure functions of the note's content — so the id survives being re-rendered by #window, a minted page, or a nested transclusion, where the old container-ordinal counter answered for whichever copy of the note happened to render first. Deletes the container-mint stack and its push/pop pairs entirely, and rewrites every comment that explained the deleted mechanism to describe the current one.
Groups every note marker at bundle root by resolved id and compares payloads: two distinct payloads sharing an id panic naming both notes, one payload repeated under an id (a note replayed by its authoring vertebra, a minted page, or a #window) is left alone.
…e URL-tail slug rule, a nested titleless note deriving its own id, and a note keeping the same id across two renderings, plus a rheo-side note whose minted page filename is checked against the id on its authoring vertebra
Rewrites core's readme to describe the four-rung id ladder an unnamed note now mints through — pinned name, title slug, body slug plus digest, error — in place of the retired container-ordinal scheme, including the URL-tail rule and a worked example verified against the actual slug/hash code. Updates every #ideate fallback description that referenced the old container-ordinal mechanism to point at the same body-derived fallback. Marks naming.md as superseded by generating-idea-names.md, and fixes a stale ideate.typ comment describing beacon-id precedence.
…e name. _flatten's IK rule (transclusion.typ) stamps each note replay it rebuilds with a <rookery-replay> marker naming the id being replayed. _assert-unique-names (validate.typ) uses figure(kind: IK) placements minus those stamps to count genuine authoring call sites under an id whose payloads are otherwise identical: one call site is an ordinary replayed note, two or more is two authored notes landing on the same derived name. The latter now renders a non-fatal notice (_dup-warning-content) naming the note and suggesting a pinned name or distinct title, rather than merging silently. Typst has no warning() builtin, so the notice is plain visible content — rendered inline on the vertebra for a non-rheo build (template.typ), or on the affected note's own minted page for a rheo build (.marrow.typ), since bundle-root content itself cannot carry visible output there.
The native root builds one document from the files it names, where rheo's spine finds every vertebra under content/ whether a root names it or not. A window onto a note nobody included panics, which is what content/sub/page.typ's window onto same-title did. Also corrects _id-slug's comment, which described a fallback to a counter that no longer exists.
…t is being laid out A footnote's inline number used to come from a counter read through context at layout time, freshly named per rendering to avoid sharing one timeline across every placement of a transcluded note — but a fresh counter still needs Typst's layout to converge on its value, and on a heavily-windowed site it never did: every trial pass read 0 and only the final pass read the true number. A footnote's position among its own note's footnotes is knowable the moment the body is assembled, with no layout involved at all. pure.typ's _number-footnotes walks a body in document order and replaces each footnote marker with its literal numbered reference right there, reconstructing every node it passes through from its own fields so nothing else about the body changes. _footnoted (bib.typ) calls it instead of installing a show rule over a per-rendering counter, and the counter is gone.
A #window(tagged: ..)/#window(match: ..) selector now rides the same <rookery-window-mark> marker as a named window's ids, and _page-links resolves it against the final registry at render time -- so a page whose window selects notes by tag, not by name, now appears in those notes' Backlinks the same way a page naming them directly already did. A window carrying filter: (a function, which cannot ride on metadata) still announces nothing resolvable, since filter: narrows a tag selection rather than replacing it. Adds a cross-vertebra #window(tagged: "phd") to the demo's root page and a check.sh assertion pinning the new backlink; a same-page tag window can't exercise this, since Context already names a note's own origin page and Backlinks excludes it there on purpose.
…g the selector against the final registry once every note is registered
Neither function reads it — a note's id is now a pure function of its own content, and the parameter only ever forwarded between the two and from their four call sites. Removes the parameter from both signatures, strips the id: argument at every call site (idea.typ, window.typ x2, .marrow.typ), and drops the now-unused own-id binding and the comments explaining why the dead parameter was being kept around.
The naming beacon for #ideate now matches the name: vocabulary the rest of the package uses — #ideate's own name: parameter, #idea-href, #idea-path and #idea-body all already spoke of a name rather than an id. The metadata key it writes moves with it (rookery-ideate-name) and so does the private reader, kept in lockstep so the beacon and its reader never disagree on the key. No alias: a stale call to #ideate-id is now an unknown-variable error at compile time. The rheo demo keeps its file name (demo/rheo/content/ideated-id.typ) and its minted note names (fixed-id-note, second-para-note) unchanged — only the import, the two calls, and check.sh's messages move. The readme gains a migration note alongside the package's existing 0.1.0 migration sections.
…ding to display-name The permalink a note's hat shows IS the note's name — display-id: false / display: (id: ..) drops that permalink, so the flag now says display-name: / display: (name: ..), matching #idea/#idea-href/#idea-path/#idea-body's own name: vocabulary. Breaking, with no alias: a stale display-id: fails the compile with #idea's or #window's own unknown-named-argument panic.
… name-color and --idea-name-color The permalink they colour shows a note's name, not an id, matching the rest of the package's name-only vocabulary. Adds a Migrating from id-color readme section alongside the sibling id-to-name migration notes.
…nce per page-link pass Both reads were being redone inside a loop: the BibTeX entry regex was rebuilt for every bibliography source, and the page-link walk resolved the whole note registry again for every window carrying a tag selector.
…t an earlier revision did The deliberate migration sections stay: they address projects upgrading from the pre-release lineage, which is a different job from explaining a feature.
…ore's own helper The builtin folds EPUB into "html", which is what lets one comparison accept both and reject only the paged target; core's _target() reports EPUB distinctly, so adopting it here would reject EPUB outright.
…n what it did before Each keeps the rule it was protecting — the permalink's replay hazard, the slug-suffix trade, the display keys' auto tier — and drops only the framing that explained them as departures from an earlier shape.
Covers the unit fixture, both demo suites and the marrow, including two demo note bodies whose own prose narrated a fixed defect. The printed failure messages keep their 'no longer' wording: they describe what a future failure would mean, not a past one.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.