Add an optional `chassis_u` field for shelf-mounted devices (their height
in U where they stand on the shelf) and render it:
- gen_rack draws each tower chassis_u U's tall, rising above the 1U shelf
line; rail-mounted devices now paint on top so a PDU within a tower's
span (e.g. pdu03 over srv05/06) stays visible
- occupancy table shows each tower's real U-span (e.g. srv01 U37-U46)
- validate_item checks chassis_u is a positive integer; absent chassis_u
renders byte-identically to before
- set chassis_u for srv01-07 (10/8/6/6/7/7/6U); document the field in the
editing guide; regenerate rack01 artifacts
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rebuild rack01 from the physically remounted hardware:
- Correct stale positions/ports/outlets for pp01, pp02, sw01, pdu01-04
- Model shelves as 1U trays (towers stand above without consuming rack U's);
add shf02 and empty half-depth shf03/shf04
- Add ups01/ups02; reseat nas01/02 and sw02-05; move srv04-07 onto shf02
- Add `wan` hardware kind; add WAN demarcation hosts wan01 (active) and
wan02 (staging)
- Document full live network wiring: srv01-07 -> pp02 -> sw01 (LAN) and
srv01 eth0 -> pp02 -> pp01 -> wan01 (WAN); keep non-active lines
(wan2, working-table patches, sw01 mgmt) in notes only
- Regenerate hardware index + rack01 elevation/network/power artifacts
Also includes the in-progress generator updates (gen_rack.py, gen_overview.py,
Makefile, tests) that the regenerated artifacts depend on.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Camilla's "added all devices to rack" commit committed the regenerated
index/rack artifacts but not the new per-device source files, so CI's
drift check failed (regeneration dropped 9 devices that had no source).
Recreate the source files for sw02-sw05, pp02, srv06-srv07 and nas01-nas02
from the committed artifacts (placement, power feeds, network links, and
cluster:tappaas on the servers; specs left as '?' placeholders, optional
port counts omitted). Regeneration is now drift-clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Move the naming-scheme spec from notes/dev/specs/ into docs/guides/ so it
publishes to docs.makerfloss.eu, add it under the Hardware nav, and link it
from the editing guide. Repoint the stale references in CLAUDE.md and the
migration plan to the new path.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add docs/guides/editing-hardware-docs.md covering the frontmatter schema,
rack/shelf/PDU/power/network fields, the `make docs-index` workflow and
CI drift gate, plus dos and don'ts. Kept under docs/guides/ so the
hardware generators don't parse it as a host file. Linked under the
Hardware nav section so it publishes to docs.makerfloss.eu.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Mark srv02/srv03 as TaPPaaS nodes 2/3 and clear the completed
BIOS/UEFI todo items on srv01.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Camilla's "Changed PDU values" commit added pdu03/pdu04 frontmatter but
left the auto-generated docs/hardware/index.md stale, failing the CI
drift check. Correct both PDUs from the placeholder racks rack33/rack11
to rack01 (where all current hardware lives) and regenerate the hardware
index and rack01 elevation via `make docs-index`.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Shrink global font and tighten spacing so dense slides fit; split the
phasing slide into VPS-edge (1-3) and internal/later (4-5). Remove a
stray </content> line that leaked into the source. Verified all 13
slides fit via per-slide PNG render.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Marp deck for the split-horizon DNS + public exposure design: reuses the
mf01 pattern (TLS at VPS, plain HTTP over wg1 to TaPPaaS Caddy). Two
Mermaid request-flow diagrams, decisions, phasing, isolation, risks.
Publishes to slides.makerfloss.eu on CI.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The service note was moved to notes/coursemanagement.md but the generated
index still listed it, which fails the CI drift check.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add rack placement frontmatter to mf00–mf04, fix pre-existing schema
error in docs/services/coursemanagement.md (missing kind/name fields),
extend Makefile docs-index and docs-check targets to also run gen_rack,
add test target, generate rack01.md and rack01-elevation.svg.
Positions are provisional placeholders to prove the pipeline; correct when mounting.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add ram_type (DDR4-2666 non-ECC UDIMM) to mf01 and mf02 frontmatter, and
set mf00's placeholder status to staging so the overview index regenerates.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Removed from per-host frontmatter, the index column, and the Specs table.
Model values kept churning (case manufacturer vs. "custom") without adding
useful information.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
mf00.md used bare ? in YAML (a complex-key indicator), breaking gen_overview.py.
Quoted the placeholders and taught fmt_cpu/fmt_ram/fmt_storage/fmt_nic to render
string values literally so unknown specs show as "?" in both the per-host Specs
table and the hardware index. Also regenerates docs/hardware/index.md to clear
the accumulated drift (mf02 16 GB, mf04 entry, mf00 custom).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sidebar nav had Services after the previous commit, but the home page
body still only mentioned Hardware and House rules. Add a matching
bullet so visitors land somewhere obvious.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mirror the auto-indexed per-host pattern for a new docs/services/
category, seeded with the six things currently deployed on or around
makerfloss.eu: docs, slides, forgejo, gandi-dns, marp, mermaid.
Generator/hook generalisation:
- scripts/gen_overview.py: replace the hardcoded `hostname` check
with a configurable `key_field` (default: hostname). Add a generic
`key-link` column kind (replaces the old `hostname-link`) and a
`url-link` kind that renders the value as a clickable link.
- scripts/overview_config.yml: declare hardware's key_field, then add
a `services` block (key_field=name, its own kind/status enums,
grouped by kind for the index table).
- scripts/mkdocs_hooks.py: route by `page.file.src_uri` so each
hardware/* page gets a "Specs" table and each services/* page gets
a "Service" table; both share the helpers in gen_overview.
Wiring:
- Makefile: docs-index and docs-check now regenerate and drift-check
both indices.
- .forgejo/workflows/docs.yml: same on the CI runner.
- mkdocs.yml: add Services to nav.
- README.md, CLAUDE.md: list services/ in the repo-layout block.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adopt one filename convention everywhere except hardware host pages
(those are pinned to their hostnames by the index validator):
- ASCII lowercase
- kebab-case word separator
- dated docs: YYYY-MM-DD-label.md (hyphen between date and label)
- English regardless of content language
Renames:
docs/makerFLOSS_house_rules.md -> docs/house-rules.md
docs/infrastruktur/ -> docs/infrastructure/
docs/infrastructure/vps-og-dns.md -> docs/infrastructure/vps-and-dns.md
docs/presentations/2026-05-11_messaging.md -> docs/presentations/2026-05-11-messaging.md
docs/presentations/2026-05-11_SoMe-taxonomi.md -> docs/presentations/2026-05-11-social-media-taxonomy.md
notes/todo/2026-04-14_todo.md -> notes/todo/2026-04-14-todo.md
notes/todo/OM_services.md -> notes/todo/om-services.md
notes/todo/indkøbsliste.md -> notes/todo/wishlist.md
notes/communications/2026-03-16_facebookpost.md -> notes/communications/2026-03-16-facebook-post.md
Other touches:
- Document the convention in CLAUDE.md under Working Norms.
- Refresh the stale Repository Structure block in CLAUDE.md to reflect
the docs/ vs notes/ split introduced in f6d589e.
- Update the House rules link in docs/index.md and the nav entry in
mkdocs.yml to the new house-rules.md path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The docs/ tree previously conflated published-site content (3 pages
were in mkdocs.yml nav) with working notes (~18 files that just sat
in the repo). Restructure so each tree means one thing:
- docs/ everything here is built and shipped to docs.makerfloss.eu.
Adds docs/presentations/ for the two Marp decks
previously living under docs/møder/.
- notes/ repo-only working material, not built. Contains
meetings/, todo/, dev/ (was docs/superpowers/), and
communications/ (the launch Facebook post).
- sandbox/ test-mermaid.md, the Marp/Mermaid pipeline sandbox.
Other touches:
- Drop "_noter" suffix on meeting filenames; drop "_presentation"
from the messaging deck's basename for symmetry with SoMe-taxonomi.
- Update CLAUDE.md and docs/index.md path references.
- Drop the now-redundant --exclude-dir=superpowers from
build-slides.sh since superpowers/ is no longer under docs/.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add 'touch display med kalender etc.' to the OM services wishlist.
- Reset indkøbsliste into an empty wish/get list ('Ønske/skaffe-liste').
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Delete two stale single-meeting todos: 2026-03-16_todo.md and 2026-05-05.md.
- Rename `2026-04-14 TODO.md` -> `2026-04-14_todo.md` to match the
underscore convention used by the other dated files, and update the
CLAUDE.md reference.
- Remove the two Marp/CSS fit-test sandboxes (labdesign-fit-test.md
and 2026-05-11_messaging-presentation-fit-test.md); the responsive
experiments were never folded back into the canonical decks.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add scripts/mkdocs_hooks.py: on_page_markdown hook that prepends
`# {hostname}` + a Specs table built from the YAML frontmatter.
Reuses fmt_cpu/fmt_ram/fmt_storage/fmt_nic from gen_overview.py so
the host page and the index table stay in sync.
- Wire the hook into mkdocs.yml.
- Demote `# Notes` / `# ToDo` to `##` in the five host source files so
each rendered page has a single H1.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add `staging` to allowed status enum so mfXX hosts validate.
- fmt_nic and fmt_storage now accept lists (mf00 has 3 NICs and 4 drives).
- Rename makerfloss.md -> makerfloss.eu.md so filename matches the FQDN.
- Regenerate docs/hardware/index.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bootstraps an MkDocs Material documentation site (rendered to
docs.makerfloss.eu by the Forgejo Actions runner). The first feature
is an auto-generated hardware overview built from per-host YAML
frontmatter blocks under docs/hardware/.
- mkdocs.yml, requirements.txt: MkDocs Material 9.5 + pyyaml
- Makefile: docs-index | docs-build | docs-serve | docs-check
- scripts/gen_overview.py: stdlib + pyyaml generator, deterministic and
offline. Reads scripts/overview_config.yml — category-driven so
services/vms can plug in later without touching the script.
- scripts/overview_config.yml: hardware schema and index layout
- docs/hardware/{makerfloss,fisi,tembo}.md: 3 sample entries
- docs/hardware/index.md: GENERATED, committed (CI fails on drift)
- docs/index.md: site landing page
- .forgejo/workflows/docs.yml: drift-check + mkdocs build --strict +
rsync site/ to /srv/docs-makerfloss/html on push to main
- .gitignore: site/, .venv, __pycache__
Schema:
- hostname, kind, status (required; kind/status are enums)
- model, location, cpu, cpu_cores, cpu_threads, ram_gb, storage_gb,
storage_type (enum), storage_notes, nic_gbps (all optional)
- Filename stem MUST equal hostname (enforced by generator)
- Extra optional fields are accepted silently and live on the per-page
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>