Put the developer docs under docs/dev and index the folder for users first

docs/ had 26 developer documents flat beside the manual, and the two
audiences are very differently sized: most readers want the manual and
the gesture reference, a few want the register, the designs and the
measurements. The manual and gestures.md stay at the top; everything for
someone changing the code moves to docs/dev/, and the two documents that
name their own successors — the v0.1 milestone and the UI-refinement plan
— go to docs/dev/archive/ rather than being deleted, since both are still
cited. docs/README.md is the index, users first.

Every reference follows: code comments, Cargo manifests, the workflows,
the pre-commit hook, the bench and traceability tools (which locate the
repo root by docs/dev/requirements.md now), packaging, the Docker READMEs,
CLAUDE.md, CONTRIBUTING.md and the README. The matrix links one level
deeper and is regenerated. Links out of the moved documents into the tree
gain a level; a link checker over every Markdown file finds none broken.
This commit is contained in:
2026-09-20 21:16:03 +02:00
parent 681486196e
commit 84fade99ec
137 changed files with 658 additions and 572 deletions
+3 -3
View File
@@ -12,7 +12,7 @@
//! thing that makes the feature affordable: a library that has been browsed has
//! already paid for its proxies, so face indexing adds **no RAW decodes that
//! were not already happening**. The tier is `ThumbSize::Large` — 1024 on the
//! long edge — and docs/faces.md §7 has the table of what the embedder actually
//! long edge — and docs/dev/faces.md §7 has the table of what the embedder actually
//! receives at that resolution.
//!
//! # Why clustering is a separate pass and not a job
@@ -39,7 +39,7 @@ use dr_types::ImageId;
/// The tier a stored face crop is cut from. See the module note.
///
/// **No longer a tier faces are found or cropped at**, and the distinction is
/// the whole of `docs/faces.md` §7: cutting an already-located face out of a
/// the whole of `docs/dev/faces.md` §7: cutting an already-located face out of a
/// stored 1024px proxy so the People screen can draw a thumbnail of it is
/// fine, because that crop is only ever looked at. Sampling the *embedder's*
/// 112×112 from a buffer this size is what left 47% of the reference library's
@@ -845,7 +845,7 @@ pub fn spawn_store_face_sweep(
// Models first: they are the expensive failure, and there is no point
// listing ten thousand images before discovering the weights are
// missing. This is also the path a library with face indexing enabled
// but no model downloaded takes (docs/faces.md §2.2), so it must be a
// but no model downloaded takes (docs/dev/faces.md §2.2), so it must be a
// quiet return rather than an error.
let mut detector = match Detector::from_path(&models.detector) {
Ok(d) => d,