Files
Classroom_Desktop/docs/manual/README.md
T
ekklesiaandClaude Opus 5 f2942a2946 docs: one manual, the pages a device has and a printable copy of all of them
Documentation becomes part of the release rather than a job afterwards.
docs/manual is now the only place teacher instructions are written, and
tools/build-manual produces both versions from it:

  classroom-manual.html   installed on every machine, showing only the
                          features THAT device has
  classroom-manual.pdf    the universal printed manual, every feature,
                          with a conditional sentence above each
                          optional page so it stays true in a room that
                          does not have them all

They cannot drift apart because neither is written by hand, and
build-release.sh builds and checks them on every release: a page that
declares a feature with no printed-if fails the build, because that is
exactly how the printed manual comes to state an optional feature as
though every room had it. So does a page naming a feature device.conf
does not have, and an optional feature with no page at all.

WHAT REACHES THE CLASSROOM ACCOUNT. Only a list of setting NAMES, and
only ones the package already defines as optional applications.
classroom-desktop-layout — already the one place that decides what a
device offers — writes them to /run/ekklesia-classroom/features.json,
and classroom-manual filters that against FEATURES before using it. No
values from device.conf, no broker password, no addresses. With no
manifest at all every page is shown, which is the printed manual and is
never wrong, only less specific.

Help is a Quick Launch button beside Parent Call, deliberately not in
the row with the applications: putting it there would move buttons
teachers reach for without looking. Every room gets it, because a
teacher who needs the manual is by definition one who does not know
where to look.

The PDF is written directly rather than converted. A manual is
headings, paragraphs, bullets, steps and one table; writing that with
the standard fonts is a couple of hundred lines and no dependency, so a
release can be built on any machine with Python. Pictures are embedded
in the digital manual as data URIs so it stays one file that works
wherever it is copied and with the network unplugged; the printed
manual names them instead, which is the one thing this builder does not
do and is noted where somebody would look for it.

Two defects found building it, both of which hung or corrupted the
output rather than failing: a paragraph opening with a bold word
matched the bullet guard but not the bullet rule, so nothing consumed
it and the build spun; and a list item wrapped across two source lines
ended the list, so a three-step procedure printed as three steps all
numbered 1.

Also adds the 0.2.6 physical checklist to docs/testing.md and the
release validator's checks for the Wi-Fi regression, the conversion
pipeline on a real Debian, the fonts, the manual and the dock order.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-22 20:21:39 -05:00

3.3 KiB
Raw Blame History

The teacher's manual

This directory is the only place teacher instructions are written.

Everything a teacher reads comes out of the .md files beside this one:

  • the digital manual on each classroom computer, which shows only the features that computer actually has; and
  • the printable PDF, which covers every feature with wording that stays true in a room that does not have all of them.

Both are built by tools/build-manual from these files. There is no second copy to keep in step, and there is no per-room manual: a room differs from another room by its device.conf, and the manual reads the same setting the panel does.

Writing a page

Each page is Markdown with a small header:

---
title: Presentations
order: 40
feature: PRESENTATIONS_ENABLED
printed-if: If your computer has a Presentations button
---

## Downloading a presentation
...
Field Means
title The heading, and the entry in the contents
order Where it comes. Common pages are 00–39, optional ones 40+
feature The device.conf setting that decides whether a computer shows this page. Leave it out for a page every room gets
printed-if The conditional sentence the printed manual puts above the page. Required whenever feature is set

Only ## and ### headings, ordinary paragraphs, * bullets, 1. numbered steps, simple | tables, ![caption](images/x.png) pictures and bold are supported. That is deliberate: the same text has to come out well as a web page and as print, and a manual for teachers does not need anything else.

Writing style

The existing pages set it, and it matters more than the format:

  • Say what the teacher does, not what the computer does.
  • One instruction per step, in the order they happen.
  • Name things the way the screen names them — Present, Quick Look, the bar along the bottom.
  • No paths, no package names, no settings files, no version numbers.
  • If something can go wrong, say what to do about it in the same breath.

Building

tools/build-manual              # both, into docs/manual/build/
tools/build-manual --check      # verify only; what the release runs

tools/build-release.sh builds and checks the manual on every release, so the digital and printed versions cannot drift apart. The check fails the build if a page declares a feature with no printed-if, if it names a feature device.conf does not have, or if the built files are missing.

Screenshots

Pictures live in docs/manual/images/. They are captured from the real interface with tools/lab/lab shot, never drawn or mocked up. A manual showing a screen that does not exist is worse than one with no pictures.

They are embedded into the digital manual as data URIs, so it stays a single file that works wherever it is copied and with the network unplugged. A picture named by a page that is not in images/ fails the build, as does one with no caption.

The printed manual prints the caption, not the picture — as [ Picture: ... — see the computer's own Help ]. Embedding a PNG in a PDF means decoding it and writing an /XObject, and this builder exists so that a release needs nothing but Python. If the printed manual ever needs real pictures, that is the thing to add, and it is a contained change: render_pdf is the only function that would move.