sapupra - News

* 0.50.0 (2026-11-05)

- With the log at debug, a search or a lookup says the sources in the
  order they are asked, the ones skipped and why, and what each answered.
- With the log at debug, the gateway, the entry module and the
  consultation say each connection of a client, then its address, its
  method, its path and the status of the answer (never the query or the
  body).
- sppgen has -p N (--progress): a line every N copies, with the share
  done, the rate and the time left; by default every hundredth of the
  copies, at least every thousand.
- The manual corrected: on FreeBSD the group wheel allows su, not sudo.
- Records of the trials: a catalogue of a million copies; the phone.

* 0.49.0 (2026-11-04)

- The verdict and the log of a book found by a source end with the
  source: "resolved (item 14): The art of computer programming, Donald
  Knuth (1973) — from openlibrary".
- The texts of a description (title, authors, publisher, ...) are put
  in one line with single spaces when it is catalogued or corrected:
  Open Library wrote "The  art" with two plain spaces. Descriptions
  already catalogued keep what they have; /Correct the description/
  mends one.

* 0.48.0 (2026-11-04)

- The title and the other texts of a MARC record are cleaned of every
  control character and of the characters that show nothing (soft
  hyphen, zero-width space, word joiner, byte order mark), and every kind
  of space becomes a plain one: a title of the Library of Congress had
  two spaces after "The". The cause is a guess, see ResearchJournal.org.
- Records of the trial: the card number 73-1830 found the book at the
  Library of Congress; the phone tested on FreeBSD too.

* 0.47.0 (2026-11-04)

- A search for a book by title and author that finds nothing is tried
  again by the worker with the two longest words of the title (and the
  author as typed), and the verdict says so.
- The page "Look up" has a field for the card number of the Library of
  Congress (73-1830), searched alone, for the American books that have no
  ISBN. It is asked of the Library of Congress by the Bib-1 use attribute
  9; ~[sources] lccn~ names the sources (loc by default). Needs YAZ; not
  yet tried against the real server.
- The verdict of a search names the sources that gave the records.
- Tests, French translation, Design, Manual, sppwork(8) and the sample
  file follow.

* 0.46.0 (2026-11-04)

- A description can be corrected after the book is catalogued: on the
  page of an item, "Correct the description" opens the form of the
  description by hand, filled with what is stored. The correction
  applies to the book, so to all its copies; the copies stay where they
  are. The record as the source sent it is kept; the ISBN of a description
  that comes from a source is not changed, only that of one typed by hand.
  A new kind of order, correct, carries it to the worker, which answers
  with the status corrected; the page of the item says when.
- A search shows what was asked for: the to-do list, the page of the
  input and the result say title and author as they were typed. A search
  that finds nothing adds a line of advice (all the words must be found,
  as they are spelled). The result page offers "Another search".
- Tests, French translation, Design and Manual follow.

* 0.45.0 (2026-11-04)

- The value listen of sapupra.ini ([gateway], [entry], [consult]) may be
  a name that the machine resolves (listen=localhost:8080): it is resolved
  once at the start, and the first IPv4 address is taken, else the first.
  A name that does not resolve stops the program, with the reason. Until
  now only an address was accepted.
- Concept: Romania introduced the ISBN in 1989, with the quotation.

* 0.44.0 (2026-11-04)

- The identifier of a scan device that wrote its name wrongly (puxel for
  pixel) is corrected on the page Scan devices of Places: all its scans
  take the new identifier, the past ones too; if the new one is a scan
  device already, the two become one. A new kind of order, device, carries
  it to the worker. The phone goes on sending its old name until its
  address is corrected (?device=pixel).
- The page Look up: the scan device and the place come after the title and
  the author, with a line that says they are not searched for.
- spplist: the article that starts a title is set aside for the order, by
  the language of the edition (English, French, German, Italian, Spanish,
  Hungarian); the title is written in full. An author is filed as the
  source said it (the MARC records, the BnF and MusicBrainz say it), else
  by the rule of the last word. The catalogue is of version 6: the column
  contributor.sort_name; the worker upgrades the file at start.
- Manual: a section "Upgrading to a newer version".
- Concept: the ISBN in Italy and Romania, with what was checked.

* 0.43.0 (2026-11-04)

- Tried: Binary Eye 1.75.6 (Google Play) scans on a phone running Android
  17, and the URL test works; the services, the entry module and the
  scans work on Debian, and survive a reboot. The Manual says so.
- orgdoc-check has a new rule, glossary: the first use, in the prose of
  the design, the manual and the index, of a term of the glossary of the
  concept document is a link to its entry. Sixteen first uses without a
  link are fixed. Six ordinary words (item, location, scan, status,
  input, edition) are left to review.
- The batch export of the documents no longer evaluates code blocks
  (org-export-use-babel is nil) and no longer sets
  org-confirm-babel-evaluate; it pairs straight double quotes by the
  language of the document (org-export-with-smart-quotes). A passage of
  the Manual that printed two opening quotes is reworded.
- Concept: the dates at which some countries began to give ISBNs (United
  Kingdom, United States, France, Hungary, East Germany); Italy and
  Romania were not found.
- FutureResearch.org: five items closed or dismissed (document checks,
  Babel, quotes, Binary Eye on Android 17, Constitution.org, which is
  not delivered).

* 0.42.0 (2026-11-03)

- The systemd units are installed in /etc/systemd/system (they went to
  /usr/local/lib/systemd/system, under the prefix). systemd reads its
  units at the start of the boot; with /usr/local on a filesystem of its
  own (a ZFS dataset, a partition), mounted later, the units were not
  found: the services were enabled and did not start at the boot, and
  the journal said nothing. --with-systemdunitdir=DIR still chooses (a
  package wants /lib/systemd/system). A machine that has the units in the
  old place removes them.
- Manual: "After a reboot" gives the three causes met on a Debian
  machine (not enabled; two minutes lost to systemd-networkd-wait-online
  beside NetworkManager; the units on a filesystem mounted late), with
  the commands that tell them apart.

* 0.41.0 (2026-11-03)

- Manual: a section "After a reboot" (the units are installed and not
  enabled; how to see that they are, what to read when one did not
  start at the boot). And why a new catalogue is 128 KiB, with an empty
  log: SQLite gives each of the 29 tables and indexes a page of its own,
  and 3 more for the list of them; not a fault. A sentence of the
  Manual that said a new database could be one page is corrected.
- FutureResearch.org rewritten in a plainer shape: each open item says in
  short what it is, where it stands (a point each), the alternatives with
  the one proposed, and what would close it.
- Decided: the inventory pages wait until more items carry a label of
  our own (option (b)).

* 0.40.0 (2026-11-03)

- The catalogue is looked for where the system's service files make
  its directory: /var/lib/sapupra with the systemd units, /var/db/sapupra
  with the rc scripts (otherwise sapupra under the localstatedir, as
  before). Until now, with the line [database] file of sapupra.ini left
  as a comment, the worker on Debian looked in /usr/local/var/sapupra
  and failed with "cannot be opened", while its unit had made
  /var/lib/sapupra. ./configure --with-databasedir=DIR chooses another.
  The line in sapupra.ini still wins.
- Manual: the broker's password file is pwfile on Debian too, and
  the configuration of Mosquitto on Debian is that of FreeBSD apart
  from the path of the password file; who makes /var/lib/sapupra
  (systemd, not the worker).
- FutureResearch.org: the open items on the labels' inventory pages and
  on the order of names and articles are rewritten in plain words, with
  examples; the first becomes a decision of the author.

* 0.39.0 (2026-11-03)

- The HTML manual pages need the HTML device of groff, which the Debian
  package groff-base does not have (the package groff does). configure
  now tries the device, and asks for the package groff when it is
  missing; man2htmldoc stops with a message when groff fails, where it
  wrote an empty page and make went on.
- The gateway publishes through InputPublisher, the class the entry
  module already used: one copy of the logic of the receipts, the
  verdicts, the worker's presence and the publication again, instead of
  two. The replies of the gateway are the same. A receipt now also tells
  the gateway that the worker has the input. New test: InputPublisherTest.

* 0.38.0 (2026-11-02)

- The method HEAD is answered, by the three programs: as the GET is,
  without the body. A health check of a proxy (curl -I) no longer takes
  the program for down; until now it was answered 501.
- A place for each browser. On the page of the scan devices, a form
  sets the place that this browser remembers (a cookie, kept a year,
  read by sppentry alone); the forms of the items typed by hand (the
  ISBN, the description, the search) offer it first, whatever the
  location of the manual entry, and a form sent with a place makes the
  browser remember it. Two people who type items in two rooms no longer
  meet. sppconsult sets and reads no cookie.
- French: the note of the title list is in the conditional, "par
  exemple, « Le Nom de la rose » se trouverait à la lettre L", and so
  is the English source ("would be under T"): an example is not an entry
  of the catalogue.

* 0.37.0 (2026-11-02)

- New program, sppconsult: the pages of the catalogue (the search, the
  page of an item, the CSV file) and no other, for a reader outside the
  local network. It has no form, no connection to the broker, no
  password and does not read the file of the secrets; it refuses any
  method but GET, any other address, a field longer than 200
  characters, and cuts a search that lasts more than 3 seconds. It
  listens on this machine alone (127.0.0.1:8082) and is put behind a
  proxy that gives the encryption and the password. Service files for
  both systems, a manual page (sppconsult(8)), the section [consult] of
  sapupra.ini.
- The manual gives the Caddy configuration (a file of a few lines; the
  certificate is obtained and renewed by Caddy) and keeps the nginx one.
  Both were run against sppconsult. The nginx example of 0.35.0 did not
  load (limit_except was in the wrong block): corrected.
- The manual says how to allow an ordinary account to make the copy of
  the catalogue with sudo (one command line, no wildcard, and why), and
  how to read the database under an account that can do nothing else.
- Documents: the standard says what a delivery must run according to what
  changed (a delivery of documents only does not compile).

* 0.36.0 (2026-11-02)

- French: the note above the list of titles of spplist says that the
  articles, definite or indefinite, are counted in the order: /Le Nom
  de la rose/ is under L.
- The manual explains why a copy of the catalogue made with sqlite3
  by an ordinary account fails ("attempt to write a readonly
  database") and leaves an empty file, and says what works in each
  state of the database directory, and what silently gives an old
  catalogue (cp or the option immutable beside a log that has content).
- Access from outside: the choice between a standard proxy and a door of
  our own, built into the read-only instance, is weighed in the design
  and put to the author as a decision.

* 0.35.0 (2026-11-02)

- The tools can be used by an ordinary user. Passwords and tokens move
  out of sapupra.ini into a new file, sapupra.secret.ini (mode 0640,
  readable by the services only); sapupra.ini then holds nothing secret
  and is installed 0644, the directory of the database 0755 and its
  files 0644, so that spplist and spplabel work for anyone of the
  machine. A password left in sapupra.ini still works, and the service
  says in its log that the file should not be world-readable. See the
  manual, /The database and the configuration/, and sapupra.secret.ini.sample.
- spplist reads a catalogue it cannot write: as an account without
  write access it opens the file read-only, and when the worker is
  stopped it can still read the file alone. The error messages say
  whether the directory or the file is closed to the account.
- The three files of the database. The worker now empties the SQLite
  log (catalogue.db-wal) when it closes, so that after a stop
  catalogue.db is whole; the empty log and the index (catalogue.db-shm)
  may remain if the entry module, which only reads, stops last. They are
  harmless. The manual explains them and corrects its claim about
  backups.
- The address of the entry module (http://HOST:8081/) opens on the
  catalogue. The list of what waits is at /todo, and the menu follows.
- The code of a place can be shown on the screen, to be scanned from
  it without a printed label: the page /Places/, /Labels/, and the
  result of a search for a place (needs libzint in the entry module;
  without it the page says so).
- spplabel warns on stderr when a page option (--text and the others)
  is given with --plain, where it has no effect.
- French: the button /Effacer/ of the search is now /Réinitialiser/
  (/Reset/ in English); the note above the list of titles of spplist
  says what it means (the articles are not set aside).
- Documented: how to read the catalogue from outside the local network
  (a VPN first; an SSH tunnel; a reverse proxy that lets through the
  consultation alone), and why the programs cannot defend themselves.

* 0.34.1 (2026-10-31)

- Building on FreeBSD works again. 0.34.0 did not build with clang, the
  compiler of FreeBSD: two lines that declared a collator (the object
  that sorts words in the alphabet of a language) were read by clang as
  the declaration of a function, an error with -Werror. GCC, with which
  0.34.0 was tried, accepts them. The two lines are written otherwise,
  and the whole tree, tests included, is now also built and tried with
  clang before a delivery.

* 0.34.0 (2026-10-31)

- Printed lists: the new command spplist writes the catalogue as an
  Org-mode document with up to three tables, by author (author, title,
  location), by title (title, author, location) and by location
  (location, author, title); -t chooses one, two or all. Org exports
  it to PDF or HTML. The names are written and sorted as /Surname,
  Forename/ (--as-written leaves them alone); the order is the alphabet
  of the language, a number is a number. See the manual, /Printed lists
  of the catalogue/, and spplist(1).
- A catalogue to try the programs on: the developer's sppgen (built,
  not installed) makes a database of n invented books, with authors,
  publishers, ISBNs, and a tree of places (up to eight rooms). 5000
  copies in 9 seconds, 20000 in 40. On 20000 copies, every page of the
  catalogue answers in under half a second.
- The answers of the catalogue are sortable: a click on the heading of
  a column (title, author, publisher, year, medium, location) orders the
  whole answer, a second click reverses it. The order is the alphabet of
  the language (an /É/ is not after the /Z/); the CSV file follows it.
  Before, the answers were by title in the order of SQLite, which put
  the accented letters last.
- Seven, plus or minus two: the advanced search has four groups of at
  most seven fields (the work, the edition, the numbers, the copies), the
  form of a new item has two (the work, the edition), and the places on
  the home of the catalogue are a folded tree: the rooms, and the
  furniture, the rows and the shelves on demand.
- Stopping a service twice prints, on FreeBSD, /sppgate not running?
  (check /var/run/sppgate.pid)/. It is the message of rc.subr for a
  service that is already stopped; nothing is wrong.
- The Design document has no dates in its prose; the fault of
  QString::arg() with a "%N" in an inserted text has a section of its
  own.
- The CSV file opens as it is in LibreOffice 26.8.

* 0.33.0 (2026-10-31)

- Several users at once: the catalogue has one writer, the worker, and
  now two workers cannot be started on one database (a lock file beside
  it). Two scans of one code, from two phones, are one lookup. The
  pages of the entry module are one device for everybody; see the
  manual, /Several people at once/.
- A place with a slash in its name (salon/caisson gauche/rayon 1) is
  found by its link: a fault in the building of the links turned each
  slash into 6F ("salon6Fcaisson") and the search found nothing.
- The places are four pages instead of one: the places, make/rename/
  merge/delete, the scan devices, the labels. The command that prints a
  place's label is on the page /Labels/ and, folded, on the result of a
  search by place.
- The pseudo device of the pages is called /manual entry/ (/saisie
  manuelle/) and is preselected in the lists of devices: the place set
  for it is now the place of the new item. (Before, another device was
  preselected.)
- A new item is shown on its own page, with a line saying it is new,
  instead of a short message. The page of an item has a row /Item
  number/; the column /Copy/ of its table of copies appears only when
  there are several.
- /Look up/ says where to type an ISBN (/New item/).
- The command of the label no longer makes the page scroll sideways on a
  small screen.
- French: /document/ for an item, counted or alone; /exemplaire/ only
  for a copy among the copies of an edition. In English, /item/.

* 0.32.0 (2026-10-30)

- Two sources more. The German national library (DNB) is asked first for
  German books (978-3), then Open Library and the BnF. The Library of
  Congress, for the American users, is asked third for English books
  (978-0, 978-1, 979-8; the build needs YAZ); the DNB is also asked by
  author and title. Both are changed in [sources] like the others
  (isbn.978-3, loc.address). Google Books is not added: a key for
  every user was not worth it.
- The page of a copy says which source described the book, and when
  (/Source of the description/).
- Authors missing: Open Library gives the author of some editions on the
  work, not on the edition; the worker asks the work. The books already
  catalogued without an author keep none: remove the copy and scan again.
  (Your curl printed nothing because it needs -L: Open Library answers
  an ISBN with a redirection.)
- Accents written as a letter and a combining mark (the DNB's) are
  composed in the catalogue.
- The wording: /Nothing needs your attention/, /Rien ne demande votre
  attention/, and the like, for the scans that wait for you.

* 0.31.0 (2026-10-30)

- A copy can be removed. On the page of a copy: /Remove this copy/,
  with the reason (donated, sold, lost, entered by mistake, other). It
  leaves every list, count and CSV file; nothing is deleted, the page of
  the copy says when and why, and /Put it back/ returns it. The list of
  the removed copies is the page /Removed/. The book itself (the edition)
  is kept, so that its barcode is recognised if you get it again. The
  label of a removed copy is refused when scanned. The database moves to
  version 5 by itself.
- A place made by mistake can be deleted on /Places/ if nothing depends
  on it (no place below, no phone, no copy, no scan made there);
  otherwise merge it into another.
- The pages /Location/ and /Places/ are one: /Places/ lists the places,
  shows where each phone is, sets it, and makes, renames, merges and
  deletes places. A copy can be moved to another place from its own
  page, and every form chooses among the places listed.
- The kind of an input and the reason of a removal are said in the
  language of the page; the database stores codes (it has since 0.28.0),
  and a French page must show no English keyword. If you still see
  "book" or "status" on a French page, tell me where.

* 0.30.0 (2026-10-30)

- Places are made on purpose (option C, as you chose). The page
  /Places/ of the entry module makes a place (with its parents),
  renames it (the places below it follow) and merges it into another.
  A scan of a label, or a location typed, that names a place not made is
  refused ("unknown", error 422 on the phone), so that a misspelt label
  is found when it is stuck. Before the first scans, make a place and
  choose it in /Location/ (or scan its label): the current location of a
  device is chosen among the places made. The database moves to
  version 4 by itself (the parents of the places already stored are made).
- An item entered by hand (/New item/, /Look up/, a choice) can be
  given a place of its own, which does not become the device's location.
  The import of Binary Eye's history lists the places that are not made
  and makes them, if you leave the box checked.
- The labels of our own, stage 2, the three questions as proposed: a
  scan of an item's label (~ITM:1234-4~) shows the item and puts it at the
  current location of the device ("put at X (was at Y)", "already at X",
  "no location is current"); an unknown item or a misread label is an
  error on the phone; the page of an item lists the places where its
  label was scanned. The gateway, the worker and the entry module read
  ~[items] prefix~. The inventory pages are the next stage.
- Search by author and title in Z39.50: the OSZK is searched by the words
  of the author (its name index) and, with no author, by the first words
  of the title; with both, the books of the author are filtered by the
  title. Add it to ~[sources] search~ (~search = openlibrary, bnf, oszk~).
  Seen on your third run: the title index is anchored on the left, and the
  book of 1913 is in the OSZK, under the author.
- libzint is found on FreeBSD: ~configure~ looks in /usr/local and
  /opt/local, and ~--with-zint=DIR~ names a prefix. Zint 2.16 is
  checked against the header; the fallback itself could not be run on
  FreeBSD, so tell me if it still fails (then send the lines of
  config.log about zint).
- The Romanian national library refuses Z39.50: it is not a source. No
  other Romanian library with a public protocol was found; the open item
  says what is left (Library of Congress and DNB for Romanian books,
  Google Books with your key).
- Publisher of the old book: Légrády, as you said.
- The French catalogue has the new sentences (places are "emplacements");
  please read them.

* 0.29.0 (2026-10-29)

- spplabel prints the labels. A location label holds ~LOC:~ and the
  path, as ~LOC:salon/bookcase 2/shelf 4~, in a QR code, with the last
  part in bold under it and the places that contain it under that; the
  label of an item holds ~ITM:1234-4~ (the number and a check digit),
  with its number and, if you give it, a line of text. A4 or Letter,
  twenty-eight to a page with a code of 20 mm, a grid and a skip for
  a sheet of adhesive labels; QR, Data Matrix, Aztec or Code 128;
  ~--plain~ gives the code alone, as shapes, for a 3D printer. It is
  built if libzint is there (Debian: ~apt install libzint-dev~;
  FreeBSD: ~pkg install zint~). Its manual page is spplabel(1).
  Codes of the four kinds, with accents and ideographs, were read
  back from the pages by two decoders; your phone and your printer are
  the next test.
- A location is a path: the parts are separated by a slash, a place
  and what is below it are found together in the catalogue, and the
  counts show every room, bookcase and shelf. A place is still made by
  its first use (a scan, or typed): who makes them is a new decision
  for you in FutureResearch.org (Explicit locations), three options,
  proposed B, a page that makes, renames and merges places.
- The page of an item shows the code of its label and the command that
  prints it. Nothing yet reads such a label: that is the next stage,
  which waits for three answers (FutureResearch.org).
- Option A for the code of a label, as you chose.
- PETG: a polyester, without chlorine or nitrate, thought suitable by
  a conservator if it has no additives; "acid-free" is a word of paper,
  and no filament has been through the test that libraries use. The
  journal has the details and the plate.
- The OSZK: it folds the accents, and refuses the search by name
  (attribute 1002) and drops the connection. Your book was not found
  under ~decameronja~; it is probably spelt with a /k/, and its
  publisher may be Légrády (the weekly Az Érdekes Újság was theirs)
  rather than Léonardy: a third, smaller request is in
  FutureResearch.org. The Hungarian roles ford., szerk. and bev. are
  read.

* 0.28.0 (2026-10-29)

- The French is corrected as you asked: "La liste des actions",
  entrer and saisir (never taper), "Pas de résultat pour cette
  recherche.", provient, "Importer un historique du lecteur",
  recherché, champ, motif; the sentences name no scanning program but
  where the history of Binary Eye is the subject; fr.po carries
  "sapupra $Revision: 98 $" and no version. "Le catalogue est vide :
  ajoutez un livre" (it said to read one).
- One language on a page: the database keeps keywords and codes, the
  pages say them in the language of the page. The medium, how an
  edition was described, the role of a contributor and the language
  (fre and French both become "français" on a French page; the
  language search takes the code, the English name or the name in the
  page's language). Titles, subjects, publishers stay in the language
  of the book. No change to the database.
- The OSZK's answer: it supports the search by author and by title,
  and its Hungarian records are read as they come (six of them are
  now a test). Your book was not found because the title word was
  misspelt in the first try; a second, smaller request is in
  FutureResearch.org, and the search by author and title in Z39.50 is
  now an open item to build.
- Labels of our own, for discussion: how much a QR code holds (a
  table), your two ways of tying a label to an entry (the key, the
  content), where the locations are (the database), and the options of
  spplabel (a table). Still nothing built; the decision has a fourth
  option for the content.

* 0.27.0 (2026-10-29)

- The pages can be in French. In sapupra.ini, ~[interface]~ with
  ~language=fr~ (English stays the default); the gateway's one reply to
  the phone follows. Everything the pages say is translated: the
  navigation, the forms, the notices, the counts with their plurals.
  The log, the manual pages and your data are not. The catalogues are
  made at the build by the tools of the package gettext (Debian:
  ~apt install gettext~; FreeBSD: ~pkg install gettext~); the programs
  need nothing to read them, not a locale, not a library. Without the
  tools the pages are in English. The French is mine and unread by a
  French speaker: tell me the sentences to change (they are in fr.po).
- The English of the pages changed a little where words were glued:
  "1 copy of 1 edition" (it said "edition(s)").
- Labels of our own for items without a code: a design for discussion
  (Design.org), and four questions for you in FutureResearch.org,
  each with a proposal. Nothing is built yet.
- The Hungarian book of before the war is in neither Open Library nor
  the BnF (the answers are now fixtures of the tests). A new item
  proposes a search by author and title in the OSZK by Z39.50, and a
  request to run asks what the OSZK answers. Meanwhile the book is
  entered by hand.

* 0.26.0 (2026-10-29)

- The first field of the catalogue search, /Anywhere/, which searched
  words in any of six attributes, is dropped, at the author's word:
  each attribute has its own field, the simple page has the title, the
  author, the ISBN or barcode, the location and the medium. The
  parameter ~q~ of ~/catalogue~ and ~/catalogue.csv~ goes with it (the
  ~q~ of the to-do list stays). The full-text table is still written,
  for Datasette.
- The look of the pages is kept as it is (the author: excellent on
  the desktop and on the phone).
- The framework of the translation is gettext; the comparison with
  the Qt tools is in the research journal. The translation itself
  waits for the interface to be declared stable.
- The request to run for the search by author and title is rewritten:
  what it is for, and one book of the author's shelves to try. No
  decision waits for the author.

* 0.25.0 (2026-10-29)

- A new look for the pages of the entry module, in the spirit of KDE's
  Breeze, by a style sheet alone (about 5 kB, no script, no image, no
  font, nothing fetched): a bar with the name and the entries, the entry
  of the page marked; a card for the page; compact tables; the search
  forms in a grid; a dark scheme that follows the browser; on a phone,
  the columns that another page repeats are left out and the to-do list
  is a list of cards, where it overflowed the screen; taller targets for
  a touch screen, compact ones for a mouse.
- The first delivery with pictures: the pages of 0.24.0 and of 0.25.0
  side by side, on a phone and on a desktop, in both schemes.
- The comparison of gettext and the Qt tools for the translation of the
  interface (French first, when the interface is stable) is in the
  Decisions of FutureResearch.org, with gettext proposed.
- The two answers of the search by author and title were sent again and
  are, byte for byte, the fixtures of 0.18.0. The Romanian national
  library has been written to; Google Books waits for the author.

* 0.24.0 (2026-10-28)

- Documents only; no change of the programs but their version.
- Google Books, asked whether it was explored enough: it was not (one
  request without a key, then dismissed). The documents now say what is
  known, what a key is, what to try and how it would be built; the
  item waits for the author's decision to register a key and for a
  trial, written out in "Requests to run".
- A catalogue for Romanian books: the national library states that its
  records can be taken in UNIMARC by Z39.50 and gives no address; the
  request to the library and the command to try are written out. The
  earlier note "no service found" is corrected.
- Three new items: a nicer and more compact look for the pages (what
  can be done with a style sheet alone, and the tension between a
  dense catalogue and large targets at the shelf), Google Books as a
  source, and translating the interface (French): the interface is not
  yet stable, and the item says why, the mechanisms and the steps.

* 0.23.0 (2026-10-28)

- Every page of the entry module ends with the name and the version of
  the program (sppentry (sapupra) 0.23.0).
- After /Search/ the page shows the result: the fields are folded under
  "Change the search" and the browser lands on the heading "Result",
  with what was asked in a line.
- No hit is said, and nothing else is shown: not the last result, not
  the catalogue. A form sent with every field empty says that no field
  is filled; words with no word in them (a lone * or -) find nothing,
  where they found everything. The pages are sent with
  Cache-Control: no-store.
- A "Clear" button empties all the fields of the search.
- The section Decisions of FutureResearch.org is empty again, with one
  sentence, and no history.
- orgdoc-check has new rules: captions and their names, references to
  captions, links to other documents that must land, the shape of the
  future research list and of the Decisions section. It found 11 links
  to sections that had left FutureResearch.org (the journal's);
  they are mended. Only the glossary first use is still held by review.

* 0.22.0 (2026-10-28)

- The catalogue search has a field for each attribute. The simple page:
  Anywhere (the words, as before), Author, Title, ISBN or barcode,
  Location and Medium. The advanced page (/catalogue/advanced, the link
  "Advanced search" carries what is typed): the title, the subtitle, the
  author, the translator, the other contributors, the publisher, the
  place, the language, the series, the subject, the ISBN or barcode, the
  ISSN, the extent; the year from and to; the days of entry; the least
  number of copies of an edition; the location, the medium and how the
  description was obtained.
- Each field is an extended regular expression tried on that attribute
  alone, found anywhere in a value, ^ and $ at its ends, capitals and
  accents ignored; the fields filled are ANDed. A plain word is enough.
  The "Pattern" box of 0.20.0 is gone: its work is done by the fields.
- A non-number in "year from" is a pattern on the year, like the other
  fields, and "year to" is then not used (the page says so).
- A field that is not valid is named on the page and nothing is
  searched; the CSV file answers 400. The pages, the counts and the
  CSV file take the same fields, and the address carries all of them,
  so that a search can be a bookmark.
- The speed was measured: Design.org and ResearchJournal.org give the
  figures on 30000 generated editions.
- Upgrade: nothing to do; the database is unchanged (version 3).

* 0.21.0 (2026-10-28)

- Documents only. SBN: the first record is kept when the library holds
  several editions under one ISBN (decided); a choice among them is
  provisioned as a waiting item, for an explicit demand.
- The real answers of the search by author and title were sent again;
  they are the fixtures of the tests since 0.18.0.
- The catalogue search by attribute (a field for each attribute, taking
  a regular expression; a simple page and an advanced one) is proposed
  in FutureResearch.org, Decisions, to be discussed before it is built.

* 0.20.0 (2026-10-28)

- The Z39.50 sources are confirmed by the author's trial: a Hungarian
  and an Italian book were catalogued from the OSZK and SBN.
- The catalogue accepts a pattern, an extended regular expression
  (the field "Pattern" next to the words): tried on each field of an
  edition (title, subtitle, a name, publisher, year, series, a
  subject, the numbers), capitals and accents ignored, ^ and $ at the
  ends of a field. It narrows the words, the medium and the location,
  and it is in the CSV file too. Manual.org says what each field
  accepts, with examples.
- Ambiguous scans: when the sources give several records for a code, the
  worker keeps them (the database is upgraded to version 3: start the
  worker once before the entry module), and the page of the scan
  in /To do/ offers them, each with a button; the choice
  catalogues that record for the scan. A typed ISBN that is ambiguous
  shows the same list. The edition takes the ISBN of the scan when the
  record has none.
- The packages to install: Manual.org has a table of the prerequisites
  with their Debian and FreeBSD packages (YAZ: libyaz-dev on Debian,
  not just yaz), the README lists YAZ, and ./configure names the
  package and says at its end whether the Z39.50 sources were built.
- One decision waits in FutureResearch.org: SBN, several editions of
  one ISBN, the first or a choice.

* 0.19.0 (2026-10-28)

- The messages shown on the phone follow the capitalisation of the
  language ("Not recorded, scan again"), no more capitals throughout.
- Two sources by Z39.50, the national libraries of Hungary (oszk) and
  of Italy (sbn), through YAZ (configure --with-yaz=auto, the default;
  without YAZ the other sources are built as before). A Hungarian ISBN
  (978-963, 978-615) is looked up in the OSZK first, an Italian one
  (978-88, 979-12) in SBN, then in Open Library and the BnF; the order
  by prefix, and the servers (oszk.address, sbn.address), are
  settings of the configuration file. Written after the raw records of
  2026-10-27 and tested against a Z39.50 server of the test suite; not
  yet against the libraries, which the author's first scans will try.
- The search fields: Manual.org states what they accept (words, all of
  them, a trailing * for the beginning of a word, case and accents
  ignored; no regular expressions). An ISBN or a barcode typed alone
  finds the edition.
- FutureResearch.org: the section of decisions is cleared.

* 0.18.0 (2026-10-28)

- The catalogue is read in pages of the entry module (the author's
  choice, "pages of our own, read-only routes"): /Catalogue/ in the
  navigation bar, a search by words with the counts by location and
  medium, the latest copies, the page of a copy, and a CSV file. Datasette
  stays possible, as an optional extra outside the build (Manual.org).
- The search by author and title is seen against real answers of Open
  Library and of the BnF (a search for Simondon, kept as test
  fixtures). The two sources overlap, so the books are deduplicated by
  ISBN; the BnF titles lose their " / author" suffix; a chosen book
  that has an ISBN is looked up by it, so that the sources describe
  that edition. The page is now named /Look up/.
- A book already in the catalogue and scanned again: the message of the
  phone and of the page say plainly "ALREADY IN THE CATALOGUE, NOT
  ADDED" and the two buttons say what each does ("Add it as copy N",
  "Discard this scan, add nothing"). When several are held (a history
  of Binary Eye imported again), one button discards them all.
- Manual.org lists every message that the phone shows, with what to do.
- sppentry logs each request at the debug level; the log listing of
  FreeBSD in the manual names the three programs.
- A browser's "+" for a space in the search of the catalogue is a space.

* 0.17.0 (2026-10-27)

- Search by author and title. The page of a scan that failed, and a new
  page /Search/, take a title and an author; the worker asks the sources
  of [sources] search (Open Library, the BnF by default), the books
  found are listed on the result page, and a button catalogues the one
  chosen. Written after the sources' documentation and tested against
  fixtures; the real answers are asked (FutureResearch.org, Requests to
  run).
- Another copy? [worker] copies is yes, ask or no (default ask): the
  scan of a book already in the catalogue is held in the to-do list
  and becomes a copy only when confirmed on its page. A rescan of a code
  whose lookup is still running no longer makes a second item. The
  database is upgraded to schema version 2 by the worker (the entry
  module asks to start the worker first).
- A scan taken by mistake is dismissed from its page; it stays in the
  database, marked dismissed, and leaves the to-do list.
- The entry module is easier to find: the navigation bar is made of
  buttons, and the to-do list ends with what else can be done.
- Open Library's lost connections: a source that is silent for 8
  seconds ([sources] attempt) is asked again on a new connection, up to
  the timeout. The analysis is in ResearchJournal.org.
- make install installs the rc scripts (FreeBSD) or the systemd units
  (Linux) of the three services, not enabled; --with-service-files,
  --with-rcdir and --with-systemdunitdir choose.
- DevelopmentStandard.org is no longer installed (not an end-user
  document). The batch kit has the lexical-binding cookie, so that
  Emacs 31 no longer warns for each document.
- Asked and answered: the stop of sppgate on FreeBSD is clean; Open
  Library loses the opening packets of some connections (SYN
  retransmissions at 1, 3, 7 and 15 seconds); sppentry runs as a
  service. The web front: the comparison of Datasette and pages of our
  own is in FutureResearch.org, Decisions, for the author to decide.
- Not yet: the Z39.50 sources, the choice among the records of an
  ambiguous scan, the search tried against the real sources, the entry
  module tried with a phone.

* 0.16.0 (2026-10-27)

- The entry module, sppentry: the pages, on the local network, where
  what the phone could not settle is settled by hand. A to-do list of
  the scans that failed (not found, not an ISBN, ambiguous, not
  recognized), each settled by an ISBN, by a description typed in, or
  set aside; a new item without a scan (Binary Eye cannot scan it);
  the location of the shelf set by hand; the latest scans; the import
  of Binary Eye's history file (the scans taken while the gateway was
  out of reach), which recognizes what is recorded already and can be
  run twice. Plain HTML forms, no script, and it works on the phone's
  browser. It runs as the account sapupra, beside the worker, with its
  own man page sppentry(8), rc script and systemd unit; [entry] in
  sapupra.ini. Manual.org and Design.org describe it.
- make, make check and make install warn of the files left over from
  an older release (stale-files --warn), and say how to remove them;
  they do not stop. make stale and ./stale-files still fail.
- The documentation is installed as PDF, not Org-mode, by make install.
- Note.org (the author's private notes) is ignored by the generation of
  the documentation, by orgdoc-check and by the archive.
- The catalogue can be opened read-only (Catalogue::openReadOnly) and
  answers the questions of the entry module (to-do, latest items,
  neighbours, waiting scans).
- Tests: HttpForm, Html, HistoryImport and Entry (a broker of the test
  and a catalogue); Catalogue (read-only, the entry module).
- Asked and answered: no IPv6 on the author's machine, so not the
  cause of Open Library's stalls (it is intermittent); the message "not
  running?" of service sppgate stop on FreeBSD needs the exact sequence
  (FutureResearch.org, Requests to run); the duplicates of the trial
  are copies by design (FutureResearch.org, Decisions: a second scan of
  an edition already catalogued).
- Not yet: search by author and title, the choice among the records of
  an ambiguous scan, dismissing a scan, the Z39.50 sources, the entry
  module tried with a phone and on FreeBSD.

* 0.15.0 (2026-10-27)

- A log level for each program, in its section of sapupra.ini:
  log_level=quiet, normal or debug, in [gateway] and in [worker]. The
  options -q and -d of the command line win over it, so that a service
  keeps its level and a run by hand asks for the debugging messages.
  Manual.org, "The level of the log", also says where the debugging
  messages of a service go on Debian and on FreeBSD.
- Open Library is slow to accept a connection from the author's
  machine (1 to 3.6 seconds to be connected, 2 to 14 more for TLS,
  while the BnF takes a tenth of a second): the cause is not HTTP/2 nor
  Connection: close, as thought in 0.13.0. The default timeout of the
  sources is now 60 seconds (it was 15). A new request in
  FutureResearch.org asks for the name lookup and the address family.
- The manual page sppwork(8) had a stray character that troff
  complained of ("character with input code 12 not defined"); fixed,
  and make check now runs groff on the man pages and fails on any
  warning.
- The ar message "u modifier ignored" on every library is gone
  (the libraries are made with ar cr).
- Binary Eye: the settings that stop the browser (Open immediately off,
  no Automated actions, Scan continuously on) are tried by the author
  on Binary Eye 1.75.5, Android 12, and the manual says so.
- Datasette: the manual shows three ways to install it (the FreeBSD
  package py312-datasette, the Debian package datasette, a Python
  virtual environment, explained); datasette.yml.sample hides the SQL
  of its two stored questions; five pictures of its pages were sent
  with the delivery.
- The raw Z39.50 records of the OSZK and of SBN, the BnF without the DVD
  (0 records), and the log of the author's trial, are described in
  ResearchJournal.org. Tests: Log (setLevel, names), Config (choice).
- Not yet: the entry module, the Z39.50 sources, the search by author
  and title, the systemd units tried on Debian, a service file for
  Datasette.

* 0.14.0 (2026-10-27)

- Binary Eye: how to stop it from opening the browser after a scan
  (Settings, Content: "Open immediately" off and "Automated actions"
  empty; Settings, Scan: "Scan continuously" on). Read in its source,
  to be confirmed on the phone. Manual.org.
- The BnF: an ISBN-13 that is not found is asked again as an ISBN-10
  (978 only): the BnF indexes the ISBN as printed, and the Simondon of
  the author's trial is found by the one and not by the other.
  Code::isbn13To10.
- Open Library did not answer any request in the author's trial of
  0.13.0 (the cause is not known). The worker now logs each request
  (status, milliseconds, HTTP/1.x or HTTP/2) with --debug, a failure
  says after how long, and [sources] of sapupra.ini has three new
  keys: timeout (seconds, 15), http2 (no), keepalive (no). Config
  reads yes/no values (Config::boolean). To settle the cause, the
  author is asked for three curl timings (FutureResearch.org,
  "Requests to run").
- One set of service files (the author's decision): sapupra.service.in
  and sapupra.rc.in replace the four files of 0.13.0; make generates
  the two services of each system from them, and make check verifies
  the result.
- The web front: Datasette serves the catalogue, tried on a catalogue
  made of the test fixtures. New datasette.yml.sample (the views, the
  search that does not break on hyphens and apostrophes, the items
  that wait for a hand); Manual.org describes the install and the
  start. Not in the build, not yet a service.
- The author's answers recorded: UPCitemdb is not used for the DVDs;
  the Library of Congress's SRU has no index for a UPC; the yaz client
  is 5.35.0. Binary Eye's history file is seen (beg.json).
- Manual.org: the real syslog of the FreeBSD worker; the timing of the
  sources by hand. Design.org: the web front. sppwork(8), sppgate(8).
- Tests: Config (booleans), Code, BnfResolver (isbn10), Open Library
  (real author records, the timing in the failures); fourteen programs
  as before.
- Not yet: the entry module, the Z39.50 sources (the raw records are
  asked for), the search by author and title, the systemd units tried
  on Debian.

* 0.13.0 (2026-10-27)

- Two new sources: the Bibliothèque nationale de France (by ISBN, and
  by the barcode of a document) and MusicBrainz (the barcode of a CD).
  They are built on the real answers of the author's run of the
  requests. By default an ISBN is asked of Open Library, then of the
  BnF; a product number of MusicBrainz, then of the BnF. A CD entered
  twice in MusicBrainz is one record. Google Books is dismissed (it
  needs a key); the Hungarian and Italian Z39.50 servers answered and
  wait for a client.
- FreeBSD: the normal messages of the services reached nothing in
  /var/log/messages, because they were logged at a level that the
  default syslog.conf does not keep. They are now logged at "notice".
- With --debug, each line on standard error begins with the time
  (HH:MM:SS.mmm).
- Every request to a source now has a connection of its own (no HTTP/2,
  Connection: close): the likely cure of the warning "QIODevice::read
  (QSslSocket): device not open" seen once. To confirm in the next
  trial.
- The comments of the four service files say why the services only
  order their start after the broker's, and require nothing: the broker,
  the gateway and the worker are not interdependent.
- sapupra.ini.sample: the new sources, the default orders, the French
  and Hungarian examples. sppwork(8), sppgate(8): the sources, the time,
  the syslog level.
- Manual.org: the command that runs the worker (terminal 2), the
  author's real sessions of 0.12.0, the rc services tried on FreeBSD,
  the order of start, the yaz client to install (package yaz).
  Design.org: the sources as they answer.
- Tests: LogTest, BnfResolverTest, MusicBrainzResolverTest; the worker
  and the Open Library tests also run on the real answers; fourteen
  programs in all.
- Not yet: the Z39.50 sources, the entry module, the search by author
  and title, and the systemd units tried on Debian.

* 0.12.0 (2026-10-26)

- New program sppwork, the worker: takes the inputs of the gateway
  from the broker, records each in the database before it publishes
  the receipt, classifies the code, finds the edition in the catalogue
  or asks Open Library, catalogues what it finds (an edition and an
  item, at the location of the scan device) and publishes the verdict
  that the gateway turns into the answer of the phone. It is the only
  program that writes the database, one SQLite file (WAL, FTS5).
- A scan of an edition already catalogued makes another copy without a
  request; the same code read twice in a few seconds is one scan; a
  code that no source knows is set aside once ("set aside, already
  waiting" afterwards); a book whose barcode is not its ISBN is
  completed by the ISBN typed later (the entry module, to come).
- A source that does not answer is tried again after 1 minute, 10
  minutes, 1 hour, then every day for a week; the phone is told
  "queued" once.
- The order of the sources is configuration: [sources] isbn.default,
  isbn.978-2 and the like by registration group, gtin, ismn, issn.
  Open Library is the only source of this version.
- sppwork(8), a systemd unit (it makes /var/lib/sapupra) and a FreeBSD
  rc script; sapupra.ini.sample: [worker], [database], [sources].
- configure also checks that Qt has the SQLite driver, FTS5 and TLS
  (Debian: libqt6sql6-sqlite).
- Manual.org: the worker, tried by hand, the database, the backup.
  Design.org: the worker settled, the schema as written, the tests.
- Tests: RecordTest, CatalogueTest, OpenLibraryResolverTest and
  WorkerTest (the whole path, against a broker of its own and a fake
  Open Library); eleven in all.
- Not yet: a lookup tried against the real Open Library, the other
  sources, the search by author and title, and the entry module.

* 0.11.0 (2026-10-26)

- The configuration file is read as written: a value from after the
  "=" to the end of the line, any character included (Qt's QSettings,
  used until now, changed a value at a semicolon, a backslash, a double
  quote or a comma, and the broker refused a password so changed); a
  comment is a line of its own; a malformed line is an error, with its
  number.
- sppgate gives the broker the account's name as client identifier:
  the broker's log names "gateway", as the configuration does. With
  --debug, the length of the password read.
- sapupra.ini.sample: the broker's address and the gateway's listening
  address written out, as in the manual.
- Manual.org: the trial of the gateway begins by checking its account
  at the broker; the password named is the gateway's. FreeBSD's Noto
  Devanagari packages named.

* 0.10.0 (2026-10-26)

- configure checks every prerequisite, the documents' included (Emacs
  and Org, Graphviz, groff, LuaLaTeX, each LaTeX package and font, by
  compiling the documents' preamble), and reports all the missing ones
  at once with what to install; --disable-pdf and --disable-html leave
  a format out. The program mosquitto is required for the tests.
- sppgate: the reason of a failed connection to the broker is the
  right one (libmosquitto 2.1 loses it, and the gateway printed "Bad
  file descriptor"; it now finds it by a connection of its own), with
  advice that fits it; [broker] host must be the address of the broker's
  listener, as the example of the configuration now says.
- make install no longer installs the research journal and the future
  research list.
- Manual.org: the account on FreeBSD; the trial of the gateway by hand,
  step by step, terminal by terminal, with what each prints.

* 0.9.0 (2026-10-26)

- New program sppgate, the gateway: receives the scans of Binary Eye
  and AllCodeRelay by HTTP, publishes them on the broker, and answers
  with the worker's verdict, "queued", or "NOT RECORDED"; publishes an
  input again when its receipt does not come. Its manual page
  sppgate(8), a systemd unit and a FreeBSD rc script (the service
  manager puts it in the background), an example of the configuration.
- A warning is an error: -Werror, and the headers of Qt and
  libmosquitto read as system headers, which removes the warnings of
  GCC 16 in Qt 6.11's headers; built and tested with GCC 16 and Qt
  6.11 as with GCC 13 and Qt 6.4. ./configure --disable-werror for a
  newer compiler.
- Design.org says what was decided, the options going to the research
  journal: services, HTTP, location prefix LOC:, labels drawn by
  libzint with spplabel's options --kind and --code; the import of
  Binary Eye's history in the entry module, described step by step.
- FutureResearch.org: a section "Requests to run", the requests to
  the sources for the author to run, and what to send back.
- Manual.org: installing the gateway, by hand and as a service.

* 0.8.0 (2026-10-26)

- First code: the library common to the programs (configuration,
  logging, the MQTT client driven by Qt's event loop, a minimal HTTP
  server, the messages, the classification of codes), with QtTest unit
  tests run by make check, the sample of the collection among them;
  ./configure checks for Qt 6 and libmosquitto, or --disable-programs.
- Design.org: the term scan device; the kinds of input explained; who
  puts the services in the background (proposed: the service
  manager); what happens when a part is absent; spplabel, a command
  that prints location labels; the HTTP server of our own, chosen.
  The decisions to take moved to FutureResearch.org, in a section of
  their own.
- Manual.org: on FreeBSD, how to replace a broker that the service
  does not know (the cause of the pid file warning); how to build the
  library and run its tests.
- The author is named only in the research journal, the future
  research list and the copyright statements.

* 0.7.0 (2026-10-26)

- Design.org: decisions taken: programs sppgate, sppwork and sppentry;
  ports, waits and windows configurable; HTTP 422 and 503; one
  configuration file and a system account sapupra; English texts,
  translated on explicit request once stable; no password on the entry
  module for the prototype. The role of the location prefix and the
  choice of the HTTP server are explained, still to decide.
- Manual.org: on FreeBSD, the broker's configuration names its pid
  file, without which the service could not see it running.

* 0.6.0 (2026-10-26)

- New Design.org: the three programs (gateway, worker, entry module)
  and their shared library; the topics and messages of the broker,
  with a receipt so that no scan is lost between the broker and the
  database; the gateway's replies to the phone; the classification of
  codes and the order of the bibliographic sources; the statuses and
  their retries; the entry module's pages; the database schema; the
  configuration file; the layout of the code and its tests; the
  decisions still to take.
- Concept.org: glossary terms edition, input, receipt, verdict.

* 0.5.0 (2026-10-23)

- Manual.org: on Android 17, Binary Eye 1.75.2 to 1.75.5 cannot reach
  the local network (Android's local network protection; reported to
  its author): scan from Android 16 or older meanwhile. A new section,
  "When the phone cannot connect", goes from the whole message to what
  reaches the machine and to a test with the phone's browser. The
  message Binary Eye sends is shown as captured. A firewall note for
  the machine.

* 0.4.0 (2026-10-23)

- Locations: set at the beginning of a batch, by a scanned code or by
  an entry in the entry module, and default for the device's following
  scans until a new one (Concept.org, Manual.org).
- Manual.org: the Mosquitto accounts explained (one per program, each
  with its own password); FreeBSD procedure revised after a first
  trial: an account of its own for the broker, the password file
  replaced with -c, a configuration of a few lines with persistence and
  syslog; the test listener for the phones now loops and listens on
  IPv4, with what to check when the phone cannot connect.
- Concept.org: the languages of the collection given as an example;
  glossary of the tools (Mosquitto, SQLite, FTS5, Datasette).

* 0.3.0 (2026-10-23)

- New Manual.org, the guide to installing and using sapupra, by role
  (user, admin, developer and prototyping): Binary Eye and the trial of
  AllCodeRelay, Mosquitto with accounts and persistence, a test
  listener for the phones; the programs to come are marked as such.
- Concept.org: failed lookups are never lost (every scan is recorded
  first, with a status); the phone signals "not found, set aside" at
  the shelf; a new entry module completes what failed (typed ISBN,
  search by author and title, entry by hand) and catalogues items
  without code; the worker alone writes the database; when ISBNs and
  book barcodes appeared.
- Implementation language decided: C++17 with Qt 6, libmosquitto and
  YAZ.

* 0.2.0 (2026-10-23)

- Architecture adopted for a first prototype: everything around the
  MQTT broker, every other part replaceable (Concept.org).
- Concept.org describes the collection (languages, what is printed on
  the items) and its consequences: an ISBN can be typed when an item
  has no barcode or a barcode that is not its ISBN; the ISBN's
  registration group chooses the catalogue to ask first.
- Capture on an iPhone: AllCodeRelay proposed, to be tried.
- Implementation language: C++ with Qt 6 proposed (decision pending);
  the build of such a program under autotools was proved.
- The sources were tried on a sample of the collection (results in
  ResearchJournal.org).
- New maintainer tool, orgdoc-check, run by `make check`: checks the
  documents against markup rules that an export does not catch, with
  its manual page.
- Fixed: an automake warning at ./bootstrap; description lists whose
  items were rendered in two styles; an unresolvable link no longer
  passes the build silently.

* 0.1.0 (2026-10-22)

- Survey of existing free software for the workflow (smartphone scan,
  MQTT, Internet lookup, light database, web consultation): no product
  covers it; findings and sources in ResearchJournal.org, summary in
  Concept.org.
- Concept.org states the goal, the requirements, the prior art, a
  proposed architecture (with a first figure) and a glossary.
- FutureResearch.org lists the open decisions, in order: build or
  adopt, phone-to-broker path, implementation language and web front,
  verification of the sources on real items.
- Documentation scaffold adapted to sapupra: foreign residue of the
  projects it came from removed; figures built from Graphviz sources;
  make-archive and stale-files no longer trip on a freshly built tree.

* 0.0.0 (2026-10-22)

- Project initialization (scaffold).
