Tagged “scriptorium”

Scriptorium: textbook solutions

Reference for how I file textbook solutions under the Scriptorium — the right tab on the Fragments page. Mostly for me, since I will forget the schema.

The shape of it

Three nested levels, plus the solution itself:

  • Book. Title and author. Has a slug for URLs (not yet exposed as a page).
  • Chapter. Belongs to a Book. Has a numeric number and an optional title.
  • Section. Belongs to a Chapter. Optional level — some books don't have sections, just end-of-chapter problems. Has a free-text label (so I can type "3.2" or "II.A" or whatever the book prints) and an optional title.
  • Fragment (the solution). Belongs to whichever level is deepest in the book's structure. For a sectioned book, attach to the Section. For a chapter-only book, attach to the Chapter. The Book auto-fills from there.

A single solution Fragment can cover one problem or a span ("Problems 3.2.1–3.2.5" or "End-of-chapter exercises"). I title each Fragment with whatever scope I picked.

The progress marker

Each solution Fragment has a progress_marker field. If set, it renders next to the title as a muted italic suffix:

Section 3.2 (through 3.2.5)

Use it when I've published a Fragment that I'm still adding problems to. When I finish the section, I clear the field; the title reverts to clean "Section 3.2". Freeform — the field accepts anything that reads sensibly after the title in parens:

  • (through 3.2.5)
  • (in progress)
  • (stopped at the harder ones)
  • (only end-of-chapter problems for now)

The title stays canonical; the suffix is metadata.

Admin workflow

Everything lives at /cellar/ (the renamed Django admin).

  1. Add a Book. Title, author, slug. Save.
  2. In the Book change page, add Chapters via the inline. Number and optional title per row. Save.
  3. In the Chapter change page, add Sections via the inline if the book uses them. Set the order integer to control display order; the label is what renders to the page.
  4. Add a Fragment. In the Solution placement fieldset, pick the deepest unit (Section if sectioned, otherwise Chapter). The Fragment's save method derives chapter from section and book from chapter, so I don't have to pick all three. The clean method rejects inconsistent picks (a Section from a different Chapter).
  5. Optionally fill progress_marker if I'm publishing mid-work.
  6. Publish or draft by setting (or leaving blank) published_at. Drafts are visible to me at the fragment URL but hidden from the public.

Resuming a draft

The "I'll never finish a section in one sitting" workflow:

  • First sitting: write Problems 3.2.1 and 3.2.2 in the body. Set progress_marker = "through 3.2.2". Set published_at = now(). Publish.
  • Second sitting: open the Fragment in /cellar/, append Problem 3.2.3 to the body (markdown picks up where I left off). Update progress_marker = "through 3.2.3". Save. The live page updates.
  • Last sitting: append the final problem. Clear progress_marker. Save. The page now reads "Section 3.2" without the suffix — done.

Alternatively, hold publication until done: leave published_at blank while drafting, set it when I'm ready for the world to see the half-finished state. Either pattern works. Public is the gate; the suffix is the WIP indicator.

Where the solutions render

  • /fragments/ → Solutions tab. Full tree: Book → Chapter → (Section →) Fragments. Books sorted by most-recent-activity. Inside each book, chapters by number; sections by order.
  • /fragments/<slug>/. Individual Fragment detail page. Same as any other Fragment.
  • /scriptorium/. The chronological year-archive (unchanged by this feature). Solutions show alongside notes there.
  • Tag pages. If I tagged the solution, it appears under those tags.
  • /fragments/feed/. Atom feed. Solutions and notes share the same feed.

Solutions are filtered OUT of the Notes tab on /fragments/. Notes are exactly fragments with no book attached.

Practical notes

  • Book without sections. Set section = None on the Fragment; leave the Section inline on the Chapter empty. Solutions render directly under the chapter heading.
  • A "miscellany" solution that doesn't fit any chapter. Attach to the Book only, leave chapter and section null. Renders as an "orphan" at the book level — works but rare.
  • Renaming a chapter or section. Edit it in /cellar/. The solutions attached to it move with it; titles and links stay stable because the Fragment slug is independent.
  • Reordering sections. Edit each Section's order integer. Lower numbers float up within a chapter.

What not to do

  • Don't put problem numbers in the Fragment title. Use the title for scope ("Section 3.2", "Problems 3.2.1–3.2.5") and put problem-by-problem detail inside the body with ## Problem 3.2.1 subheadings. The body is markdown — full math, code, references all work.
  • Don't write the same problem twice. If I'm extending a draft, append to the existing Fragment, don't create a new one. The progress marker exists so I can publish-then-extend.
  • Don't forget to clear progress_marker when done. It's the visual signal of WIP; leaving it stale gives the wrong impression.

Drafted by Claude (Anthropic) at my request, as a working reference for the Scriptorium feature added on 2026-05-19. Edits and additions are my own.

metareferencescriptorium

← All tags  ·  All posts