2026-10-11  Peter Felecan  <peter@felecan.example>

	Iteration 0.145.0. Remove the stale standalone util.scad; the
	helpers live in bsppfit.scad.

	* util.scad: delete. Its content was inlined into bsppfit.scad at
	0.103.0 and kept only until the dedicated models were retired
	(0.143.0); the copy had drifted (it lacks the six fillet
	constants) and nothing includes it.
	* Makefile.am (EXTRA_DIST): drop util.scad.
	* bsppfit.scad: turn the transitional "INLINED" banner into a
	permanent description of the helper block; list the cutaway
	helpers in its contents (item 11, previously a second item 9);
	drop the remaining mentions of Util/util.scad, including in the
	self-test banner string (the only non-comment change).
	* equivalence-test (PREAMBLE): drop the util.scad include.
	* dimensions.csv: the sync rule names the table in bsppfit.scad.
	* LibraryOverview.org, DevelopmentStandard.org, FutureResearch.org:
	name bsppfit.scad where they named util.scad, and correct the
	Util/dimensions.csv path in the same sentences.
	* ResearchJournal.org: record that the file was left behind by
	omission at 0.143.0 and 0.144.0, and the comparison.

2026-10-11  Peter Felecan  <peter@felecan.example>

	Iteration 0.144.0. Replace the diverted threading fork by BOSL2's
	undersize parameter; the models' male_slop becomes undersize.

	* bsppfit.scad: call BOSL2's bspp_threaded_rod() at all 19 thread
	sites instead of bsppfit_threaded_rod().
	(male thread sites): pass undersize = undersize.
	(female thread sites): pass no undersize; fixes the elbow, whose
	two female sockets passed male_slop to their internal masks.
	(public modules): rename the parameter male_slop to undersize
	(BOSL2's thread-diameter reduction in mm; male_slop was radial, so
	undersize = 2 * male_slop) and BSPPFIT_MALE_SLOP to
	BSPPFIT_UNDERSIZE.
	(top level): require BOSL2 2.0.767 with bosl_required, since an
	older bspp_threaded_rod() silently ignores undersize.
	* util.scad (BSPPFIT_UNDERSIZE): rename, as in bsppfit.scad.
	* bsppfit_threading.scad: delete.
	* Makefile.am (EXTRA_DIST): drop bsppfit_threading.scad.
	* equivalence-test (PREAMBLE): include BOSL2 directly.
	* equivalence-test.1: drop the stale development-build remark.
	* DevelopmentStandard.org: rewrite the version pin (2.0.767, with
	a runtime assertion) and the male-clearance section; give the
	Print Tuning Log values on the diameter, keeping the old column.
	* LibraryOverview.org, Resuming.org: describe undersize and the
	BOSL2 minimum; drop the fork; correct the list of called modules.
	* FutureResearch.org: remove the resolved Heterogeneous fits item;
	add Female and per-port undersize.
	* ResearchJournal.org: record the comparison and its verification.

2026-09-21  Peter Felecan  <peter@felecan.example>

	Iteration 0.143.0. Retire the per-fitting oracle models: bsppfit.scad
	is now the library's sole implementation.

	* equivalence-test (PREAMBLE): include <Util/util.scad> ->
	include <util.scad> (and bsppfit_threading.scad); the harness could
	not run since the 0.136.0 flatten and this bug was never caught,
	since nothing in this assistant's test environment had real
	OpenSCAD until this iteration.
	* Makefile.am (EXTRA_DIST): fix the same stale Util/ prefix on
	dimensions.csv, util.scad, bsppfit_threading.scad.
	With both fixed: all thirteen equivalence-test cases pass.
	(RENDER_ARCHETYPES): re-point all twenty entries from the ten
	oracle files to bsppfitTest.scad, with the correct model-prefixed
	dispatch-variant override (verified per entry against
	bsppfitTest.scad's own dispatch list).
	(render-archetypes recipe): extend to read an optional fourth
	dispatch-variant-override field, matching the proven pattern
	already used by RENDER_STILLS and render_variant_rules.
	(RENDER_MODELS, render_model_rules instantiations): remove the ten
	oracle-specific entries; the equivalent capability already exists
	via RENDER_VARIANTS.
	(check-equivalence comment): update to reflect the retirement.
	* Nipple.scad, Pipe.scad, Elbow.scad, Reducer.scad, Cap.scad,
	Plug.scad, Union.scad, HexBush.scad, HoseTail.scad, Manifold.scad:
	removed. Kept only as the equivalence-test oracle; retired per the
	project author's explicit authorization, once every topology's
	mono-file wrapper was confirmed equivalent.
	* equivalence-test (main): detect the retired oracle files
	directly and exit with a plain explanation, rather than let every
	case fail with a confusing "file not found" from inside the
	OpenSCAD run.
	* equivalence-test.1: document the new exit-2 case and add a NOTES
	section explaining the retirement.
	* LibraryOverview.org (Folder layout -> File layout): rewritten
	entirely; previously described a Models/ / Util/ directory
	structure gone since 0.136.0, the ten now-removed files
	individually, and called bsppfit.scad "EXPERIMENTAL". The
	taxonomy-facet table now maps G-facets to bsppfit.scad module
	names, not file names.
	* Catalogue.org: fix eleven illustration-provenance sections
	(each named an oracle file as source geometry and gave a
	non-functional reproduction command); every provenance note now
	names bsppfit.scad, every command sources bsppfitTest.scad, every
	render-variant value verified against bsppfitTest.scad's dispatch
	list.
	* Taxonomy.org, DevelopmentStandard.org: fix the remaining seven
	current-state references the same way; caught and corrected one
	invented, nonexistent variant (union-exploded) before it shipped.
	* FutureResearch.org: remove the oracle-file-retirement item this
	iteration resolves.
	Verified with a full, fresh bootstrap && configure && make html
	using the real OpenSCAD dev build and BOSL2 the project author
	supplied; all three tracked orgdoc-lint baselines (196/19/60)
	unchanged.

2026-09-21  Peter Felecan  <peter@felecan.example>

	Iteration 0.142.0. api2doc ignored ./configure INDEX=...; a
	FutureResearch.org review that found far more than one missing
	item.

	* api2doc (INDEX_HTML): read the AC_SUBST'd value straight out of
	the generated Makefile at run time, matching the script's own
	existing ASSISTANT-from-version.org.in pattern; api2doc is a plain
	script, not an Org export, so it never went through batch-init.el's
	configure-substitution path and the Index link was hardcoded.
	(nav.html heredoc): quoted -> unquoted, so $INDEX_HTML actually
	substitutes.
	Fix bug in the fix itself: guard the Makefile read with "|| true"
	--- set -e + pipefail silently killed the script when Makefile
	doesn't exist yet (api2doc run before ./configure), skipping the
	fallback entirely.
	* api2doc.1: document the Index link's ./configure INDEX=...
	configurability and its run-time source.
	* configure.ac: update the INDEX_HTML comment to describe both
	consumers (batch-init.el via substitution, api2doc via runtime
	read of the generated Makefile).
	* FutureResearch.org: promote the oracle-file-retirement decision
	(traced to the 0.104.3 ResearchJournal entry; "open for the
	author... neither is taken unilaterally") to its own item --- it
	existed only as a buried point inside an unrelated-titled
	ergonomics item, undiscoverable by heading.
	(Model-library expansion beyond the 0.9.0 pilot): retitled to
	"Model-library refinements and open design questions"; removed the
	fully-stale build-out queue (all ten fittings now exist) and ~20
	sub-bullets self-declared "DONE at 0.XX.0"/"VERIFIED at"/
	"ADDRESSED" in their own titles, never removed since being closed
	(1943 total lines with the 503 from stretch-goal bullets); condensed
	one partially-done bullet (Union flat-gasket-seat variant) to its
	still-open remainder; removed one exact byte-for-byte duplicate
	bullet (Renders/ git-tracking decision), confirmed with diff.
	(Illustrations for taxonomy concepts): removed a 134-line "State
	changes (reverse chronological)" subsection that was purely
	ResearchJournal-style retrospective narrative, misplaced here.
	A similar-looking subsection in a different, still-open item
	(Combinatorial render coverage) deliberately left alone: an
	explicit concise-pointer-to-ResearchJournal design, not the same
	bug.
	Full triage of the remaining ~17 top-level items not completed
	this iteration.
	All three tracked orgdoc-lint baselines (196/19/60) unchanged
	(FutureResearch.org's own count moves from 24 to 19, tracking the
	removed content).

2026-09-05  Peter Felecan  <peter@felecan.example>

	Iteration 0.141.0. Name the exact PATH-prepending mechanism in the
	diagnostic, instead of a generic "shells may differ" claim.

	* model-docs, model-doc-check: the project author correctly
	pushed back on 0.140.0's explanation: same PATH, no PATH-changing
	logic visible in the Makefile. Both true. The actual mechanism is
	one level down: both scripts already silently prepend the user's
	.local/bin directory to their own PATH if not already present
	(where pip --user / pipx install console scripts) --- already
	documented in each man page's own PATH entry, never connected to
	the failure diagnostic itself. Reproduced directly (a fake
	$HOME/.local/bin/openscad-docsgen, an outer shell's PATH that
	omits it) before changing anything: a bare "command -v" in that
	outer shell fails exactly as reported, while the script's own
	resolution (carrying its prepend) succeeds. Replaced the generic
	"a separate shell's PATH may differ" line with this specific
	mechanism and a cross-reference to the man page's own PATH entry.
	* model-docs.1, model-doc-check.1: update EXIT STATUS to
	cross-reference the existing PATH entry the same way, rather than
	repeating the mechanism inconsistently. Both re-rendered, no
	warnings.
	All three tracked orgdoc-lint baselines (196/24/60) unchanged.

2026-09-05  Peter Felecan  <peter@felecan.example>

	Iteration 0.140.0. The 0.138.0/0.139.0 fix confirmed working;
	make its own diagnostic self-contained.

	* model-docs, model-doc-check: the self-test's failure diagnostic
	previously told the user to run "head -1 \"\$(command -v
	openscad-docsgen)\"" themselves, in whatever shell they happened
	to be typing into. That shell's PATH is not guaranteed to match
	whatever PATH make (or however the script was invoked) resolved
	--- confirmed by a project-author report that the suggested
	command produced nothing in their shell, even though the
	self-test had just succeeded inside the script's own process
	moments earlier. Capture $(command -v openscad-docsgen) and print
	its shebang line directly instead, in the same process and PATH
	context the self-test itself just ran in, removing the dependency
	on the reader's own shell entirely. Guard the read with a
	fallback (2>/dev/null || echo '(could not read it)') so an
	unreadable path cannot introduce an unrelated failure into the
	diagnostic path itself.
	* model-docs.1, model-doc-check.1: update the account of what the
	error message contains to match --- the path and shebang are now
	printed directly by the script, not left as an instruction; note
	why (a separate shell's PATH might differ and mislead). Both
	re-rendered, no warnings.
	Re-verified against the same reproduction used for 0.139.0 (a
	wrapper pointed at a genuinely empty virtualenv); the working
	case re-confirmed unaffected. All three tracked orgdoc-lint
	baselines (196/24/60) unchanged.
	Project author confirmed the underlying fix works ("the API
	documentation is build successfully" after a forced reinstall)
	and confirmed the root cause directly: a Python 3.13 -> 3.14
	transition, exactly the "Python version change" both prior
	entries named as the typical cause.

2026-09-05  Peter Felecan  <peter@felecan.example>

	Iteration 0.139.0. Self-test for "exists but broken" openscad-docsgen;
	correct the fix's own advice for pip vs pipx.

	* model-docs, model-doc-check: add a self-test (openscad-docsgen
	--help) after the existing "command -v" tool check, since the
	latter only confirms a file exists, not that running it works.
	On failure, print the self-test's own captured error plus a
	concrete diagnosis and fix commands, rather than letting a bare
	Python traceback surface with only this project's generic
	"unavailable" message after it. Reproduced the exact reported
	traceback (a wrapper pointed at a genuinely empty virtualenv)
	before designing the fix.
	Follow-up correction within this same iteration: the project
	author's environment can only use pipx (PEP-668-restricted), and
	the first version of the diagnostic's fix commands and its
	"does the current python3 see it" check were pip-only --- the
	latter actively wrong for pipx, whose whole point is keeping a
	tool's module out of the system python3's site-packages, so a
	correctly-working pipx install would fail that check too. Dropped
	the pip-show diagnostic step entirely; kept only the shebang
	inspection (head -1 on the executable), which correctly
	identifies either a pipx venv path or a plain pip interpreter
	path without presupposing which applies. Fix commands now name
	both "pipx install --force" and the original pip command.
	* model-docs.1, model-doc-check.1: update EXIT STATUS to document
	the new self-test and its diagnosis, covering both pip and pipx;
	re-rendered, no warnings.
	* ResearchJournal.org: fix an accidentally duplicated sentence
	fragment in the Introduction, a leftover from an earlier
	session's overlapping str_replace, found while inserting this
	iteration's entry.
	All three tracked orgdoc-lint baselines (196/24/60) unchanged.

2026-09-05  Peter Felecan  <peter@felecan.example>

	Iteration 0.138.0. Fix the API-doc build, silently broken by the
	0.136.0 flatten; audit all nine man pages for the same staleness.

	* model-docs, model-doc-check (ROOT): drop the "/.." --- these
	scripts now live at the project root, not one level below it.
	(SRC): Models/bsppfit.scad -> bsppfit.scad.
	(OPENSCADPATH / cleanup paths): drop the Models/ suffix.
	* api2doc (ROOT): same fix.
	(DOCSDIR fallback): Doc/api.wiki -> api.wiki.
	(SRC_MD): drop the Models/ path segment.
	(OUT_HTML, OUT_PDF): drop the Doc/ prefix.
	(ASSISTANT lookup): drop the Doc/ prefix on version.org.in.
	* equivalence-test (MODELS_DIR_DEFAULT): drop the second dirname()
	and the /Models suffix --- same bug, Python side.
	* checkxref (doc_dir default): "Doc" -> "." --- protected when
	invoked via "make check-xref" (explicit argument), broken for
	direct invocation.
	Root cause common to all five: each computed its own project root
	by walking up one directory from its own location, correct when
	these scripts lived under bin/, wrong since 0.136.0 put them at
	the root directly. Never caught before because this assistant's
	test environment has never had openscad-docsgen installed, so
	every prior verification died at an earlier "tool not found"
	check before reaching the broken path logic; installed
	openscad-docsgen and a stub openscad this iteration specifically
	to exercise the real code path. Verified each script by running
	it and inspecting its output, then via a full, artifact-cleared
	bootstrap && configure && make html: bsppfit-api.html and the
	docsgen wiki are genuinely produced, with fresh timestamps, and
	the "unavailable" message is gone from the build output.
	* api2doc.1, applyxref.1, checkxref.1, equivalence-test.1,
	man2htmldoc.1, model-doc-check.1, model-docs.1, orgdoc-lint.1,
	render-views.1: fix the same class of staleness throughout every
	man page's current-usage documentation and examples (Doc/, Models/,
	bin/ prefixes); render-views.1 additionally carried examples from
	an even older, pre-mono-file Models/G0n_Class/ convention that
	predates the flatten. Genuine historical mentions (e.g. "introduced
	in iteration 0.79.0 under Doc/man/") left as accurate history.
	Every page re-rendered with groff -mandoc after editing; none
	flagged.
	All three tracked orgdoc-lint baselines (196/24/60) unchanged;
	make check-xref's pre-existing findings re-confirmed as the same
	known non-regressing backlog, not new.

2026-09-04  Peter Felecan  <peter@felecan.example>

	Iteration 0.137.0. Documentation audit: broken links from the
	flattening, a stale Concept, FutureResearch/ResearchJournal
	separation.

	* Taxonomy.org: fix roughly fifty [[file:Illustrations/...]] image
	links left over from 0.136.0's flattening; every embedded
	illustration was broken. Verified against a real build: every
	<img src> in the built Taxonomy.html resolves to an existing file.
	* Index.org: fix broken [[file:man/*.html]] and
	[[file:Illustrations/Catalogue.html]] links; fix stale prose
	claiming models/tools live under Models//bin/.
	* FutureResearch.org, DevelopmentStandard.org: same class of fix,
	smaller instances.
	* Concept.org (Modelling Approach for the BSPP Model Library):
	rewrite; the section described the model library as "~7% done at
	0.8.4" with an architecture later abandoned, while the library has
	been complete for 100+ iterations. Verified against the actual
	bsppfit.scad module list before rewriting.
	(Related Work --- Learning From, and Distinguishing From): fix
	tense throughout; the section read as a pre-implementation survey.
	(Completion Status): stop pointing at "the latest Phase 1
	completion status entry, always at or near the top" --- the actual
	latest such entry is from iteration 0.57.0, ~80 iterations stale.
	Add cross-references to Taxonomy.org, LibraryOverview.org,
	Catalogue.org.
	* FutureResearch.org: remove all 24 DONE/DISMISSED item subtrees
	(1943 of 5092 lines), per the project author's observation that
	completed-item rationale already belongs in ResearchJournal.org
	and duplicating it here serves no purpose. Update the Introduction
	to state the new policy. Add a new TODO item recording that Phase
	1 completion tracking has itself gone stale since iteration 0.57.0.
	* Concept.org, DevelopmentStandard.org, FutureResearch.org,
	ResearchJournal.org: fix the roughly ten cross-references broken
	by the above removal; each traced to its actual new home (mostly
	ResearchJournal.org entries, one to Taxonomy.org's own Facet Audit
	section) rather than deleted.
	* Concept.org, ResearchJournal.org: fix eight instances of
	[[file:*Heading]] (introduced earlier in this same iteration),
	which does not work as a same-file link; [[*Heading]] is correct.
	Confirmed empirically with a throwaway export test.
	* Resuming.org: fix pervasive stale Doc/ prefixed paths throughout
	(ResearchJournal.org, FutureResearch.org, Constitution.org,
	DevelopmentStandard.org, transcript-catalog.txt); this is the
	project's own "how to continue in a new session" guide.
	* LibraryOverview.org: remove "the project author pointed out..."
	narrative framing from two Convention entries, keeping the factual
	rationale.
	* NEWS: add the eight missing entries (0.129.0 through 0.136.0);
	last entry was 0.128.0.
	Verified with a full real build after every fix: bootstrap &&
	configure && make html clean, zero cross-reference warnings, all
	three tracked orgdoc-lint baselines confirmed (196/60 unchanged;
	FutureResearch.org now 24, down from 39, the expected consequence
	of removing duplicated content).

2026-09-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.136.0. Flatten the source tree into one directory.

	* Doc/, Doc/Illustrations/, Doc/man/, Models/, Models/Util/, bin/:
	all content moved to the project root. Confirmed before moving
	anything: exactly one basename collides across the whole tree
	(Makefile.am, once per directory); every other file already had
	a name unique across the tree.
	* Makefile.am: the four former Makefile.am files (root, Doc/,
	Doc/Illustrations/, Models/) merged into one non-recursive file.
	Three near-identical %.pdf / html.stamp pattern rules (one per
	former directory) merged into one over a combined DOC_FILES list,
	not concatenated (a single Makefile cannot have three rules for
	one pattern without silently shadowing two of them); same for the
	three lint / lint-errors / check-org trios. Root's and Models'
	clean-local bodies consolidated for the same reason.
	(API_WIKI_MD): drop model-docs from the prerequisite list. Once
	flattened, the model-docs script and the "make model-docs"
	convenience target share one name; GNU Make matches a .PHONY
	target against a prerequisite regardless of a "./" prefix, so
	listing the script as a prerequisite made this rule invoke the
	other rule's hard-failing recipe instead of its own graceful
	fallback. Root-caused with an isolated minimal reproduction;
	checked systematically for the same collision shape elsewhere
	(none found).
	* configure.ac (INDEX_HTML): replaces the three-way INDEX_DOC /
	INDEX_ILLUS / INDEX_MODELS split added at 0.135.0, which existed
	only because the three (now former) directories sat at three
	different relative distances from Index.html.
	(AC_CONFIG_FILES): Makefile, version.org, batch-init.el --- no
	longer per-directory.
	* batch-init.el.in (org-publish-project-alist): the
	BSPPFIT_TOP_SRCDIR-driven three-component publish structure
	(added 0.9.1-0.9.4 to unify cross-document anchor resolution
	across separate directories) collapses to one project entry.
	* Cap.scad, Elbow.scad, HexBush.scad, HoseTail.scad, Manifold.scad,
	Nipple.scad, Pipe.scad, Plug.scad, Reducer.scad, Union.scad,
	bsppfit.scad: include <Util/...> -> include <...>.
	* .tar-exclude, .openscad_docsgen_rc: path prefixes updated to
	match the flattened tree.
	* Catalogue.org, Index.org, LibraryOverview.org, ResearchJournal.org,
	Taxonomy.org: roughly fifty #+INCLUDE / #+LATEX_HEADER /
	[[file:...]] cross-references corrected for the flattened paths.
	LibraryOverview.org's Util/ documentation section rewritten, not
	path-patched, since the subdirectory it described no longer exists.
	* DevelopmentStandard.org (Directory Creation Rule): rewritten;
	establishes the new standing rule (ask before creating a
	subdirectory, with reasons, and wait for explicit agreement).
	Verified with the real build pipeline twice (default INDEX, then
	an override), grepping generated HTML both times, plus a full
	clean rebuild after the model-docs fix specifically; make
	check-xref's pre-existing findings confirmed not a regression
	against the untouched 0.135.0 archive; all three tracked
	orgdoc-lint baselines (196/39/60) unchanged; all 46 illustration
	symlinks confirmed to survive the move as symlinks.

2026-08-31  Peter Felecan  <peter@felecan.example>

	Iteration 0.135.0. orgdoc-lint: relax OD001, not retire it.

	* bin/orgdoc-lint (VERSION): bump to 1.4.0.
	(CODES, DEFAULT_CODES): OD001 stays fully registered (--list,
	--explain, --select all still work) but is no longer in
	DEFAULT_CODES, the set a bare invocation checks. --errors-only
	narrows whatever is already selected, so it no longer independently
	re-includes OD001 either.
	(main): default `selected` to DEFAULT_CODES instead of CODES.
	(EXPLAIN["OD001"]): document the #+OPTIONS: ^:{} fix, the opt-in
	status, and the residual case it does not cover (a literal
	underscore inside a raw "@@latex:...@@" export snippet, which Org
	never processes and #+OPTIONS: ^:{} therefore cannot reach).
	* Doc/man/orgdoc-lint.1: update --select, --errors-only and
	DIAGNOSTICS for OD001's opt-in status; add a 1.4.0 history line.
	Fixed a .BR macro concatenating two flag names with no space,
	caught by rendering the page (groff -mandoc), not by re-reading
	the source.
	* Makefile.am, Doc/Makefile.am: update the lint-target comments;
	"make lint-errors" (--errors-only, no explicit --select) now
	omits OD001, matching the tool's new default.
	* Doc/DevelopmentStandard.org: document OD001's opt-in status
	and the export-snippet exception in the linter section.
	No already-wrapped identifier touched; no .scad file touched.

2026-08-17  Peter Felecan  <peter@felecan.example>

	Iteration 0.134.0. #+OPTIONS: ^:{} in every .org preamble; a
	configurable HTML index/home link.

	* Doc/Concept.org, Doc/Constitution.org, Doc/DevelopmentStandard.org,
	Doc/FutureResearch.org, Doc/Illustrations/Catalogue.org,
	Doc/Index.org, Doc/ResearchJournal.org, Doc/Resuming.org,
	Doc/SessionHandoff.org, Doc/Taxonomy.org, Models/LibraryOverview.org:
	add "#+OPTIONS: ^:{}", stopping a bare underscore from being read
	as a subscript inductor without needing every identifier wrapped
	in ~...~/=...=. Verified against the project's real export
	toolchain (LaTeX and HTML) with a probe file and two full
	documents; does not retire orgdoc-lint's OD001 rule or unwrap
	existing markup, both left as a separate decision.
	* configure.ac: new INDEX variable (AC_ARG_VAR), generating
	INDEX_DOC / INDEX_ILLUS / INDEX_MODELS (each defaulting to its
	component's own relative path to Doc/Index.html; all three equal
	to INDEX when set). Add Doc/batch-init.el to AC_CONFIG_FILES.
	* Doc/batch-init.el -> Doc/batch-init.el.in: substitute the six
	:html-link-home / :html-link-up pairs across the four
	org-publish-project-alist entries with the three variables above.
	* Doc/Makefile.am (EXTRA_DIST): ship batch-init.el.in, not the
	now-generated batch-init.el.
	(DISTCLEANFILES): add batch-init.el, matching version.org's own
	precedent.
	* Doc/Concept.org, Doc/Constitution.org, Doc/DevelopmentStandard.org,
	Doc/FutureResearch.org, Doc/Illustrations/Catalogue.org,
	Doc/ResearchJournal.org, Doc/Resuming.org, Doc/Taxonomy.org,
	Models/LibraryOverview.org: remove the per-file #+HTML_LINK_UP: /
	#+HTML_LINK_HOME: keywords (each was shadowing the now-configurable
	project-alist default).
	* Doc/DevelopmentStandard.org (Correct HTML Invocation): document
	that standalone/interactive export now shows no index link at
	all, extending the manual-vs-batch asymmetry already accepted
	there.
	Verified with the real pipeline twice: ./bootstrap && ./configure
	&& make html for the default case, then reconfigured with
	INDEX=https://example.org/portal.html and rebuilt; grepped the
	generated HTML both times. No .scad file touched.

2026-07-09  Peter Felecan  <peter@felecan.example>

	Iteration 0.133.1. Fix a stale HTML export archive surviving
	maintainer-clean; document anchor/spin/orient in the API docs.

	* Makefile.am (maintainer-clean-local): remove any
	bsppfit-html-*.tar.xz archive via wildcard, not just the one
	matching the current $(VERSION).
	(html-export-clean): same fix, same underlying flaw.
	* Models/bsppfit.scad: add anchor / spin / orient to the
	Arguments table of all thirteen attachable modules (bsppfit()
	and every public bsppfit_* wrapper); each already had the
	parameters, none had them documented. bsppfit_cutaway() and
	bsppfit_branch_fillet() correctly left alone (not attachable).
	Comment-only and Makefile-only changes; 19 named STL variants
	unaffected (still carrying the hexbush difference from 0.133.0
	and the union difference from 0.129.2).

2026-07-09  Peter Felecan  <peter@felecan.example>

	Iteration 0.133.0. bsppfit_hexbush: a stepped through-bore
	instead of one uniform diameter.

	* Models/bsppfit.scad (bsppfit_hexbush): replace the single bore
	parameter with bore_male / bore_female. The through-bore now steps
	between the two diameters: whichever port's thread is shorter (a
	tie favours the female) governs, its own diameter extending from
	its own face through its own thread, through the unthreaded gap
	between the two threads, up to where the other thread's own
	engagement begins; the other port's diameter fills the remainder.
	Example updated to describe the stepped bore.
	* Doc/Illustrations: regenerate HexBush-default (and -cut) and
	HexBush-gallery-archetypes (and -cut); all four depend on
	configurations the new bore profile changes.
	The hexbush variant is re-baselined; the other 18 named STL
	variants are byte-identical to 0.132.1 (already carrying the
	pre-existing union difference from 0.129.2).

2026-07-02  Peter Felecan  <peter@felecan.example>

	Iteration 0.132.1. Fix bsppfit_nipple: a female or mixed-gender
	nipple left small solid fragments disconnected at both tips.

	* Models/bsppfit.scad (bsppfit_nipple): arm length per end now
	floored at the hub sphere's radius (max of the two ends' core arm
	ODs, halved) plus 1 mm, alongside the existing thread-plus-half-
	middle figure. Root cause: the hub sphere's radius can exceed the
	previous arm-length formula when a female end's wider arm OD sets
	the hub size (12.48 mm vs 12.2 mm at catalogue defaults); the
	sphere's own pole then extends past the nominal tip, and the
	straight bore does not reach far enough to remove it. Inactive
	for all-male nipples (hub radius there is already cleared by the
	existing formula).
	* Doc/Illustrations: regenerate Nipple-gallery-archetypes (and
	-cut) and Nipple-gender-comparison (and -cut); three of the
	gallery's twelve cells and the comparison figure's female half
	used affected configurations.
	All 19 named STL variants byte-identical to 0.132.0 except the
	pre-existing union difference (from 0.129.2); the all-male nipple
	variant confirms the fix does not disturb the common case.

2026-07-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.132.0. Close the "Finish re-pointing" to-do: re-point
	RENDER_VARIANTS' archetype-gallery entries, retire the rest.

	* Models/Makefile.am (render_variant_rules): add an optional
	fifth field overriding the dispatch variant, mirroring
	render-archetype-stills' own rvariant mechanism.
	(RENDER_VARIANTS): re-point the gallery-archetypes /
	gallery-archetypes-cut entry per model to bsppfitTest.scad.
	Remove the bare "gallery" entry per model and roughly forty
	one-off named variants unique to each oracle model's own
	dispatch (Reducer bushing/fxf/hex/hex-large/hex-small/eccentric;
	Union exploded/tail-a/tail-b/nut/mxf/fxf; HoseTail
	female/hex/hex-female/shouldered/stepped/christmas-tree; HexBush
	swapped; Manifold both-sides/female-run/capped-end/six/tee/
	cross/y-tee/y-fan-stem/y-fan-point/parallel-lean/x-form/
	mixed-genders): each already covered by its model's own
	archetype gallery, and none tracked or cited from any built
	document.
	* Doc/FutureResearch.org: mark the "Finish re-pointing the
	illustration pipeline to the mono-file" to-do DONE, closed
	2026-07-01 (opened 2026-06-29).
	All 19 named STL variants byte-identical to 0.131.0 (Makefile.am
	only; no model code touched).

2026-07-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.131.0. Re-point the nine non-branched default (and
	cut) single-fitting figures, plus the Nipple gender-comparison,
	to the mono-file.

	* Models/bsppfitTest.scad: add cap-default, plug-default,
	reducer-default, hexbush-default, hosetail-default, union-default,
	pipe-default, nipple-default, elbow-default (and -cut for each)
	dispatch variants; every -cut uses cutaway = FRONT (the oracle
	dispatch used BACK for the same figure in every case). Add
	bsppfit_nipple_gender_comparison() and _cut().
	* Models/Makefile.am (RENDER_STILLS): re-point all eighteen
	default/default-cut entries and the two gender-comparison entries
	from the oracle .scad files to bsppfitTest.scad.
	* Doc/Illustrations: regenerate all eighteen default/default-cut
	frames and the two gender-comparison frames from the mono-file
	(byte-reproducible); add the Pipe-default(.png/-cut.png) symlinks,
	absent before since no prior illustration existed. The Union
	default-cut frame now shows the 0.129.2 fix (continuous nut
	thread) rather than the old shouldered-tail design.
	All 19 named STL variants byte-identical to 0.130.0 (new
	illustration content only; no model code behaviour changed).

2026-07-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.130.0. Transcribe the Manifold archetype gallery to
	the mono-file; two doc-example fixes.

	* Models/bsppfitTest.scad: add bsppfit_manifold_gallery() and
	bsppfit_manifold_gallery_cut() (twelve cells, rotate(180,[1,0,1])
	per cell). Add "manifold-gallery-archetypes" and
	"manifold-gallery-archetypes-cut" to the variant list and render
	dispatch.
	* Models/Makefile.am (RENDER_STILLS): re-point the two Manifold
	gallery-archetypes entries from Manifold.scad to bsppfitTest.scad.
	* Doc/Illustrations: regenerate Manifold-gallery-archetypes and
	its cut companion from the mono-file (byte-reproducible).
	* Models/bsppfit.scad (bsppfit_hosetail): examples 1 and 2 now
	pass barb_major_d = 30 (barbs were too subtle to read at
	thumbnail scale).
	(bsppfit_elbow): add an angle = 45 example.
	All 19 named STL variants byte-identical to 0.129.2 (new
	illustration and doc-example content only; no model code
	behaviour changed).

2026-07-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.129.2. Fix bsppfit_union: tail B's shoulder and the
	nut's retaining lip cannot be assembled from three separately
	printed parts (the lip is narrower than the shoulder it would
	need to pass, and so is the threaded end).

	* Models/bsppfit.scad (_bsppfit_union_tail_b): collar changed
	from a plain shoulder to an external BSPP coupling thread,
	matching tail A's collar.
	(_bsppfit_union_nut): internal coupling thread now cut over
	the full nut length, replacing the separate thread-zone /
	plain-lip-zone split.
	(_bsppfit_union_resolve): drop gBUR_COLLAR_OD and gBUR_LIP_ID
	(no longer needed); gBUR_NUT_AF now sized from the coupling
	thread OD directly. Renumbered the remaining gBUR_ indices.
	bsppfit_union doc header updated.
	* Doc/Taxonomy.org (The per-port finding): refreshed the stale
	gender-combinatorics claim to reflect the mono-file's current
	per-port gender parameters.
	The union variant is re-baselined; the other 18 named STL
	variants are byte-identical to 0.129.1. The oracle Union.scad
	has the same design and was not touched (out of scope; flagged
	for the project author).

2026-07-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.129.1. Documentation hygiene: assistant credit,
	VERSION header, ChangeLog terseness, Taxonomy provenance.

	* VERSION: restore the leading $Revision$ keyword line, lost
	since 0.124.0.
	* AUTHORS, bootstrap, Doc/version.org.in, Doc/SessionHandoff.org,
	Doc/DevelopmentStandard.org, Doc/man/*.1, Models/*.scad,
	bin/checkxref, bin/render-views, bin/applyxref: assistant credit
	updated from Claude Opus to Claude Sonnet 5. Dated historical
	entries in ChangeLog/ResearchJournal left unchanged.
	* ChangeLog (0.129.0 entry): trimmed back to terse form; had
	drifted into rationale that belongs in the journal.
	* Doc/Taxonomy.org: removed every iteration-number mention (44)
	and every FutureResearch.org cross-reference (6); fixed one
	broken fuzzy link (Validation Scenarios) and one confusing
	self-reference (Elbow LR/SR vs the Facet Audit). Extracted
	content checked against ResearchJournal.org before deletion.
	* Doc/FutureResearch.org (Re-review related-work survey):
	notes the Taxonomy coverage-map section shares its trigger.
	* Doc/ResearchJournal.org: new entry recording this pass.
	No model geometry touched; 19 named STL variants byte-identical
	to 0.129.0.

2026-07-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.129.0. Close the mono Manifold API gap: per-end run
	gender, per-side branch gender and arm length, and a "point"
	run-end.

	* Models/bsppfit.scad (bsppfit_manifold): add left_gender_run /
	right_gender_run, top_gender_branch / bottom_gender_branch, and
	top_arm_length_branch / bottom_arm_length_branch, each undef and
	falling back to gender_run / gender_branch / arm_length_branch
	respectively. Extend end_a / end_b to accept "point" alongside
	"open" / "closed"; at most one end may be "point" (asserted).
	(bsppfit_manifold_ports): take end_a / end_b so a "point" end
	omits that run port from the returned list. Doc header updated;
	three new examples.
	All 19 named STL variants byte-identical to 0.128.0.

2026-06-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.128.0. Re-point the HoseTail archetype gallery to the
	mono-file; give bsppfit_hosetail the barb profiles and body shapes
	of the per-model HoseTail.

	* Models/bsppfit.scad: port the per-model HoseTail construction as
	a private helper (_bsppfit_hose_tail) and rebuild bsppfit_hosetail
	on top of it. New parameters barb_profile ("shark_fin" default,
	"stepped", "christmas_tree"), body_shape ("round" default, "hex"),
	thread_length, shoulder_length and arm_od. The default hose tail is
	now the shark-fin barb (was a plain frustum stack). Doc header
	updated.
	* Models/bsppfitTest.scad: transcribe the HoseTail archetype
	gallery (bsppfit_hosetail_gallery and its cut, which uses FRONT);
	add two dispatch cases and variant names.
	* Models/Makefile.am: source the two committed HoseTail gallery
	stills from bsppfitTest.scad (camera 35,270).
	* Doc/Illustrations: regenerate HoseTail-gallery-archetypes and its
	cut companion from the mono-file (byte-reproducible).
	The hosetail variant is re-baselined (shark-fin barbs); the other
	18 named STL variants are byte-identical to 0.127.0. This completes
	the per-gallery illustration re-point.

2026-06-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.127.0. Reshape bsppfit_union from the simplified
	ring-collar body into the full captive-nut assembly, matching the
	per-model Union (author request).

	* Models/bsppfit.scad: port the Union internals as private helpers
	(_bsppfit_union_resolve, _bsppfit_union_tail_a, _bsppfit_union_tail_b,
	_bsppfit_union_nut and the gBUR_ dimension indices). bsppfit_union
	now assembles a threaded tail, a seated tail and a hex ring nut
	whose internal coupling thread draws them onto a 60-degree cone
	seat; explode separates the three parts. New parameters
	coupling_size, thread_length, body_length, collar_length and arm_od;
	default gender is now male (was female). Doc header updated.
	* Doc/Illustrations: regenerate Union-gallery-archetypes and its
	cut companion (now the captive-nut assembly; byte-reproducible).
	The union variant is re-baselined (simplified -> captive-nut); the
	other 18 named STL variants are byte-identical to 0.126.0.

2026-06-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.126.0. Re-point the Union archetype gallery to the
	mono-file; give bsppfit_union per-end genders and an explode view.

	* Models/bsppfit.scad (bsppfit_union): replace the single gender
	parameter with per-end gender_a (-Z) and gender_b (+Z), and add
	explode (the two tails pull apart from the central nut; 0 is
	assembled). explode enters only as a positional offset, so the
	default (both female, assembled) is byte-identical to before. Doc
	header updated.
	* Models/bsppfitTest.scad: transcribe the Union archetype gallery
	(bsppfit_union_gallery, bsppfit_union_gallery_cut) from the
	per-model module; the cut gallery uses FRONT. Add two dispatch
	cases and variant names.
	* Models/Makefile.am: source the two committed Union gallery
	stills from bsppfitTest.scad (camera 35,270).
	* bin/equivalence-test: update the union case to the per-end
	gender signature.
	* Doc/Illustrations: regenerate Union-gallery-archetypes and its
	cut companion from the mono-file (byte-reproducible).
	All 19 named STL variants byte-identical to 0.125.1.

2026-06-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.125.1. The Elbow archetype cut-gallery also needed
	FRONT. At camera 30,315 the BACK cut showed the solid exterior
	rather than the section --- the same fault corrected for the other
	six galleries in 0.125.0, which the Elbow had wrongly been judged
	exempt from.

	* Models/bsppfitTest.scad (bsppfit_elbow_gallery_cut): cutaway
	BACK -> FRONT.
	* Doc/Illustrations: regenerate Elbow-gallery-archetypes-cut so it
	shows the open bore and threads (byte-reproducible). No STL variant
	changes; all 19 named variants byte-identical to 0.125.0.

2026-06-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.125.0. Fix the stoppered elbow bore and correct the
	cut direction of six archetype cut-galleries.

	* Models/bsppfit.scad (bsppfit_elbow): the two arm through-bores
	ran inward into the bend instead of outward along the arms, so
	both arm barrels were left solid --- the elbow was stoppered. Each
	bore now runs from the bend out to its arm tip, giving a
	continuous mouth-to-mouth passage.
	* Models/bsppfitTest.scad: flip the cutaway in the Cap, Reducer,
	Nipple, HexBush, Plug and Pipe gallery-cut modules from BACK to
	FRONT so the open section faces the viewer at camera 35,270 (the
	bore and internal threads were hidden behind the solid half). The
	Elbow cut-gallery (camera 30,315) already read correctly and keeps
	BACK.
	* Doc/Illustrations: regenerate the six cut-galleries (now FRONT)
	and both Elbow galleries (solid end faces and cut now show the
	open bore); all byte-reproducible.
	The elbow, usage and usage-cut STL variants are re-baselined (the
	bore opens); the other 16 are byte-identical to 0.124.0.

2026-06-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.124.0. Re-point the Elbow archetype gallery to the
	mono-file and reshape bsppfit_elbow from a mitred junction to a
	swept bend (quarter-torus at 90 degrees, torus arc in general),
	matching the per-model Elbow and commercial elbows.

	* Models/bsppfit.scad (bsppfit_elbow): rebuilt as a swept elbow.
	Arm A now runs +Z (was -Z). New single-port parameters arm_length,
	arm_od, bore, thread_length and bend_radius replace the unused
	per-arm _a/_b parameters. The arms are tangent to a torus arc of
	major radius bend_radius; the bore follows as a swept arc. General
	angle handled via the bisector. Doc header updated.
	* Models/bsppfitTest.scad: transcribe the Elbow archetype gallery
	(bsppfit_elbow_gallery, bsppfit_elbow_gallery_cut) from the
	per-model module; add two dispatch cases and variant names.
	* Models/Makefile.am: source the two committed Elbow gallery
	stills from bsppfitTest.scad (camera 30,315).
	* bin/equivalence-test: the swept mono elbow now poses like the
	oracle (arms +X and +Z); measure arm B along +Z. Case passes.
	* Doc/Illustrations: regenerate Elbow-gallery-archetypes and its
	cut companion from the mono-file (byte-reproducible).
	The elbow, usage and usage-cut STL variants are intentionally
	re-baselined (mitred -> swept); the other 16 are byte-identical.

2026-06-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.123.0. Re-point the Pipe archetype gallery to the mono-file;
	add a length convenience parameter to bsppfit_pipe.

	* Models/bsppfit.scad (bsppfit_pipe): add a length parameter that sets
	each arm to length/2 (an explicit arm_length_a/arm_length_b still wins).
	Defaults to undef (the derived per-arm lengths), so the named pipe and
	default variants are byte-identical.
	* Models/bsppfitTest.scad: add bsppfit_pipe_gallery and _cut (transcribed
	from Pipe_Gallery_Archetypes, with length = 60 supplied to the
	gender-combination row that relied on the per-model default length) and
	the matching dispatch variants.
	* Models/Makefile.am (RENDER_STILLS): re-point the Pipe
	gallery-archetypes stills (and cut) to bsppfitTest.scad.
	* Doc/Illustrations/Pipe-gallery-archetypes{,-cut}_001+35+270.png:
	regenerate from the mono-file.
	* Doc/ResearchJournal.org, Doc/FutureResearch.org,
	Doc/SessionHandoff.org: iteration 0.123.0.
	* VERSION, NEWS: 0.123.0.

2026-06-29  Peter Felecan  <peter@felecan.example>

	Iteration 0.122.0. Re-point the Plug archetype gallery to the mono-file;
	add a thread_length override to bsppfit_plug.

	* Models/bsppfit.scad (bsppfit_plug): add a thread_length parameter
	overriding the size-derived threaded length, so the gallery thread-length
	sweep can be reproduced. Defaults to undef (the size-derived length), so
	the named plug and plug-head variants are byte-identical.
	* Models/bsppfitTest.scad: add bsppfit_plug_gallery and _cut
	(transcribed from Plug_Gallery_Archetypes) and the matching dispatch
	variants.
	* Models/Makefile.am (RENDER_STILLS): re-point the Plug
	gallery-archetypes stills (and cut) to bsppfitTest.scad.
	* Doc/Illustrations/Plug-gallery-archetypes{,-cut}_001+35+270.png:
	regenerate from the mono-file.
	* Doc/ResearchJournal.org, Doc/FutureResearch.org,
	Doc/SessionHandoff.org: iteration 0.122.0.
	* VERSION, NEWS: 0.122.0.

2026-06-29  Peter Felecan  <peter@felecan.example>

	Iteration 0.121.0. Re-point the HexBush archetype gallery to the
	mono-file; fix the mono hex bush for female-larger (swapped) bushings.

	* Models/bsppfit.scad (bsppfit_hexbush): size the hex across-flats from
	the larger of the two threads, and the through-bore from the smaller, so
	a bushing whose female end is larger than its male end keeps a body (was
	a thin ring) and keeps its male spud (the female-sized bore had bored it
	away). Both reduce to the previous values when size_male >= size_female,
	so every male-large bushing --- including the named hexbush variant ---
	is byte-identical.
	* Models/bsppfitTest.scad: add bsppfit_hexbush_gallery and _cut (a
	one-for-one transcription of HexBush_Gallery_Archetypes) and the matching
	dispatch variants.
	* Models/Makefile.am (RENDER_STILLS): re-point the HexBush
	gallery-archetypes stills (and cut) to bsppfitTest.scad.
	* Doc/Illustrations/HexBush-gallery-archetypes{,-cut}_001+35+270.png:
	regenerate from the mono-file.
	* Doc/ResearchJournal.org, Doc/FutureResearch.org,
	Doc/SessionHandoff.org: iteration 0.121.0.
	* VERSION, NEWS: 0.121.0.

2026-06-29  Peter Felecan  <peter@felecan.example>

	Iteration 0.120.0. Re-point the Cap, Reducer and Nipple archetype
	galleries to the mono-file; cross-link the model library from the index.

	* Models/bsppfitTest.scad: add six per-model gallery modules
	(bsppfit_{cap,reducer,nipple}_gallery and _cut) reproducing the legacy
	per-model gallery compositions through the mono public API, and the
	matching dispatch variants. The mono API mirrors the per-model parameter
	names, so each gallery is a one-for-one transcription; axial fittings
	share the per-model orientation, so no reframing is needed.
	* Models/Makefile.am (RENDER_STILLS): re-point the Cap, Reducer and
	Nipple gallery-archetypes stills (and cuts) to bsppfitTest.scad via the
	fifth-field render-variant override.
	* Doc/Illustrations/{Cap,Reducer,Nipple}-gallery-archetypes{,-cut}_001+35
	+270.png: regenerate from the mono-file.
	* Doc/Index.org: add an internal pointer from "Reference content" to the
	"Model library" section, which is itself project reference material.
	* Doc/ResearchJournal.org, Doc/FutureResearch.org,
	Doc/SessionHandoff.org: iteration 0.120.0.
	* VERSION, NEWS: 0.120.0.

2026-06-29  Peter Felecan  <peter@felecan.example>

	Iteration 0.119.0. Re-point the Manifold figures to the mono-file.

	* Models/bsppfitTest.scad (bsppfit_Render): add six illustration
	variants --- manifold-default, manifold-tee, manifold-cross and their
	-cut --- reproducing the oracle Manifold figures via bsppfit_manifold
	(1/2 male run, 1/4 female branches; tee/cross are branch_count 1,
	one/both sides; -cut is cutaway BACK), so they carry the branch-junction
	reinforcement. rotate(180,[1,0,1]) maps the mono run/branch axes onto the
	oracle layout (run horizontal, branches up) so the figures drop in
	unchanged but for the reinforcement.
	* Models/Makefile.am (render-archetype-stills): accept an optional fifth
	RENDER_STILLS field, Name:File:variant:LAT,LON:render-variant, overriding
	the dispatch variant while the frame keeps its <Name>-<variant> name (so
	the Doc/Illustrations symlinks resolve). Re-point the six Manifold
	single-fitting stills to bsppfitTest.scad through it.
	* Doc/Illustrations/Manifold-{default,tee,cross}{,-cut}_001+35+270.png:
	regenerate from the mono-file; the branch reinforcement now shows.
	* Doc/ResearchJournal.org, Doc/FutureResearch.org,
	Doc/SessionHandoff.org: iteration 0.119.0.
	* VERSION, NEWS: 0.119.0.

2026-06-29  Peter Felecan  <peter@felecan.example>

	Iteration 0.118.1. Patch: cove no longer stoppers the branch tip.

	* Models/bsppfit.scad: bsppfit_fillet_external's cove prism rises from the
	run surface, where join_prism measures its length, so a length equal to the
	arm length overshot the branch tip by run_r/sin(lean) --- solid material past
	the bore and socket, sealing the mouth. Shorten the cove prism by that
	surface offset so it stops at the branch tip the arm builds; the cove fillet
	is unchanged. Affects reducer branches only (the boss path is untouched), so
	all named variants are byte-identical to 0.118.0.
	* Doc/ResearchJournal.org, Doc/SessionHandoff.org: iteration 0.118.1.
	* VERSION, NEWS: 0.118.1.

2026-06-28  Peter Felecan  <peter@felecan.example>

	Iteration 0.118.0. Minor: wire branch reinforcement into _bsppfit().

	* Models/bsppfit.scad: _bsppfit() now reinforces each branch against the run
	(the collinear port pair): an external boss or join_prism cove in the union
	and an internal join_prism bore flare in the difference, oriented per branch
	with frame_map and gated by BSPPFIT_BRANCH_FILLET, whose default flips on.
	Add the shared canonical-frame bsppfit_fillet_external and
	bsppfit_fillet_internal modules. The seven branched render variants (tee,
	cross, manifold and the four galleries) change by design; the twelve
	non-branched variants stay byte-identical; functional mate/bore dimensions
	are unchanged (equivalence-test passes).
	* Doc/ResearchJournal.org, Doc/FutureResearch.org, Doc/SessionHandoff.org:
	iteration 0.118.0; record the wiring and that the committed doc illustrations
	render from the oracle per-model files, so showing the reinforcement in them
	awaits an illustration-source decision.
	* VERSION, NEWS: 0.118.0.

2026-06-28  Peter Felecan  <peter@felecan.example>

	Iteration 0.117.0. Minor: angle-aware branch-fillet policy (laterals).

	* Models/bsppfit.scad: add the shared bsppfit_fillet_* policy functions and
	BSPPFIT_FILLET_MIN_LEAN (default 45); bsppfit_branch_fillet now angle-corrects
	the cove/boss split by the branch lean (the footprint stretches 1/sin(lean))
	and sizes the boss run-aware in radius and footprint-aware in length, so
	laterals no longer overflow. The helper is still not invoked by _bsppfit(), so
	every named variant is byte-identical.
	* Models/bsppfitTest.scad: bsppfit_FilletGrid and the fillet-grid render
	targets take an angle (fillet_angle, default 90).
	* Doc/ResearchJournal.org, Doc/FutureResearch.org, Doc/SessionHandoff.org:
	iteration 0.117.0; record the angle-aware policy and the resolved wiring
	decisions (cross stays 90; reinforcement becomes the default appearance).
	* VERSION, NEWS: 0.117.0.

2026-06-28  Peter Felecan  <peter@felecan.example>

	Iteration 0.116.1. Patch: fix the same-size boss-cove pole cusp ---
	drop the cove for a generous boss shoulder.

	* Models/bsppfit.scad (bsppfit_branch_fillet): path 2 (same-size) no longer
	fillets the branch onto the boss with join_prism, which cusps at the poles
	on so curved a base; the boss with a generous shoulder roundover is the
	reinforcement and the branch meets it plainly. The cove still serves path 1
	(reducers). Boss shoulder rounding raised to 2.2x the fillet. The body
	builder still does not invoke the helper, so every named variant is
	byte-identical.
	* Doc/ResearchJournal.org, Doc/FutureResearch.org, Doc/SessionHandoff.org:
	iteration 0.116.1.
	* VERSION, NEWS: 0.116.1.

2026-06-28  Peter Felecan  <peter@felecan.example>

	Iteration 0.116.0. Minor: branch-junction fillet, integration step 1
	--- the default-OFF helper and its configuration, on a test grid.

	* Models/bsppfit.scad: add BSPPFIT_BRANCH_FILLET (off), BSPPFIT_FILLET_EXT,
	BSPPFIT_FILLET_INT, BSPPFIT_FILLET_BOSS_RATIO, BSPPFIT_FILLET_FN and the
	module bsppfit_branch_fillet(); _bsppfit() does not yet invoke it, so every
	named variant is byte-identical.
	* Models/bsppfitTest.scad: add bsppfit_FilletGrid() and the render targets
	fillet-grid and fillet-grid-cut.
	* Doc/ResearchJournal.org, Doc/FutureResearch.org, Doc/SessionHandoff.org:
	iteration 0.116.0; path-2 boss-cove pole cusp tracked for step 2.
	* VERSION, NEWS: 0.116.0.

2026-06-28  Peter Felecan  <peter@felecan.example>

	Iteration 0.115.3. Patch: record the branch-junction fillet decision
	and integration design (documentation only; no model change).

	* Doc/ResearchJournal.org: new 2026-06-28 entry --- branch-junction
	fillets, the chosen join_prism cove/boss mix over the custom Steinmetz
	construct, the options considered, and the integration design.
	* Doc/FutureResearch.org: new STARTED item, branch-junction fillets ---
	FDM strength reinforcement, with the staged integration plan.
	* Doc/SessionHandoff.org: promote 0.115.3; fillet method resolved.
	* VERSION, NEWS: 0.115.3.

2026-06-27  Peter Felecan  <peter@felecan.example>

	Iteration 0.115.2. Patch: drop the bore-junction blend sphere.

	* Models/bsppfit.scad (bsppfit): remove the general-junction blend; tee,
	cross and manifold junctions are left at bore level (the transition hull
	and spine bore carry connectivity), keeping the wall material the blend
	scooped out.
	* Models/bsppfit.scad: remove the now-unused bsppfit_offset_spine_axis,
	bsppfit_offset_is_interior and BSPPFIT_BRANCH_BLEND.
	* Doc/ResearchJournal.org, Doc/SessionHandoff.org,
	Doc/FutureResearch.org: iteration 0.115.2.
	* VERSION, NEWS: 0.115.2.

2026-06-27  Peter Felecan  <peter@felecan.example>

	Iteration 0.115.1. Patch: trim the manifold bore-junction blend so it
	stops removing material at the run ends and the sealed header end.

	* Models/bsppfit.scad (bsppfit): the general junction blend placed a
	near-wall sphere at EVERY port offset --- right for a coincident
	junction (tee, cross), where the per-offset spheres collapse onto the
	one meeting point, but wrong on a manifold's spread offsets, where it
	scattered spheres onto the two run ends and the sealed header end as
	well as the branches. The blend is now placed only where bores meet at
	an angle: a coincident junction keeps its full tangent sphere; a spread
	manifold blends only at its interior branch points, and those are
	trimmed to a tight fillet (BSPPFIT_BRANCH_BLEND times the bore radius)
	rather than reaching the wall; a free run end and a closed port get no
	blend. No topological data is read or changed --- only the realised
	bore rounding. New helpers bsppfit_offset_spine_axis and
	bsppfit_offset_is_interior; new constant BSPPFIT_BRANCH_BLEND.
	* Doc/ResearchJournal.org, Doc/SessionHandoff.org,
	Doc/FutureResearch.org: iteration 0.115.1.
	* VERSION, NEWS: 0.115.1.

2026-06-26  Peter Felecan  <peter@felecan.example>

	Iteration 0.115.0. Minor: redefine the "closed" port termination as a
	thread-less, rounded, integral seal.

	* Models/bsppfit.scad (bsppfit): a closed port is now a full-length
	barrel capped by a rounded dome, with no thread cut and no bore
	breaking through --- an integral seal (a manifold header, a dead-leg),
	not a stoppered threaded port. Open ports are unchanged.
	(bsppfit_cap_ports, bsppfit_plug_ports): reproduce the cap / plug mate
	feature from an OPEN threaded port; the sealing head is the
	bsppfit_cap / bsppfit_plug decoration. Header port-record description,
	catalogue examples and the GENERALISES note updated; the closed-port
	open question is recorded as resolved.
	* bin/equivalence-test: cap-g12 / plug-g12 comments follow the open
	mate-feature reproduction (dimensions unchanged, still pass).
	* Doc/ResearchJournal.org, Doc/SessionHandoff.org,
	Doc/FutureResearch.org: iteration 0.115.0; close the closed-port
	question.
	* VERSION, NEWS: 0.115.0.

2026-06-26  Peter Felecan  <peter@felecan.example>

	Iteration 0.114.2. Patch: clearer doc-block examples and the API HTML
	author block at the foot of the page.

	* Models/bsppfit.scad (bsppfit_hexbush, bsppfit_nipple, bsppfit_elbow):
	second example reworked. The hex bush is shown from the female end
	(camera VPR) so the tapped socket is visible; the nipple and the elbow
	second examples are now male-to-female (male A, female B).
	* bin/api2doc: place the author block at the end of the HTML page (as
	the Org HTML postamble does); the PDF keeps it in the title block.
	* Doc/man/api2doc.1: version.
	* Doc/ResearchJournal.org, Doc/SessionHandoff.org,
	Doc/FutureResearch.org: iteration 0.114.2; record the closed-port
	closure question raised against bsppfit_manifold.
	* VERSION, NEWS: 0.114.2.

2026-06-26  Peter Felecan  <peter@felecan.example>

	Iteration 0.114.1. Patch: produce the model API HTML/PDF from the html
	and pdf targets (not only html-export), check the lualatex font loader,
	and align the author credit.

	* Doc/Makefile.am (html-local, pdf-local, CLEANFILES): build
	bsppfit-api.html in the html target and bsppfit-api.pdf in the pdf
	target, via bin/api2doc, so the Index.html link resolves.
	* bin/api2doc: add --html/--pdf/--all mode; the html and pdf targets
	build one format each. Author credit "assisted by" (was "with").
	* Doc/version.org.in (AUTHORLINE): "assisted by" (was "with").
	* configure.ac: check for the luaotfload lualatex font loader.
	* Makefile.am (api-doc, clean-local, html-export): api-doc delegates to
	Doc; html-export drops the now-redundant api-doc step; clean leaves the
	API HTML/PDF to Doc's CLEANFILES.
	* Doc/man/api2doc.1: document the mode flag.
	* Doc/ResearchJournal.org, Doc/SessionHandoff.org,
	Doc/FutureResearch.org: iteration 0.114.1.
	* VERSION, NEWS: 0.114.1.

2026-06-26  Peter Felecan  <peter@felecan.example>

	Iteration 0.114.0. Minor: HTML and PDF renditions of the model API
	documentation, wired into the export.

	* bin/api2doc: new; renders the model-docs Markdown to a consolidated
	Doc/bsppfit-api.html and Doc/bsppfit-api.pdf via pandoc, styled to
	match the documentation set (Index back-link, authoring and version
	block, HTML-to-PDF link).
	* Doc/man/api2doc.1: new.
	* configure.ac: check for pandoc (optional; warn if absent).
	* Makefile.am (api-doc, clean-local, html-export, EXTRA_DIST, .PHONY):
	add the api-doc target; have clean remove the docsgen wiki and the API
	HTML/PDF; generate and bundle the API doc in html-export.
	* Doc/Index.org: link the BSPP Model API Reference.
	* Doc/ResearchJournal.org (2026-06-26 iteration 0.114.0): new entry.
	* Doc/FutureResearch.org, Doc/SessionHandoff.org: iteration 0.114.0.
	* VERSION, NEWS: 0.114.0.

2026-06-26  Peter Felecan  <peter@felecan.example>

	Iteration 0.113.4. Patch: document the public functions; the
	openscad-docsgen documentation rollout is complete.

	* Models/bsppfit.scad: full doc blocks on the dimension lookups
	(bsppfit_lookup and the size/thread/bore accessors, bsppfit_arm_od)
	and the cutaway operator (bsppfit_cutaway); one-line Synopsis blocks
	on the port-list builders (bsppfit_pipe_ports ... bsppfit_yfan_ports).
	Trivial port accessors and internal helpers left undocumented by
	design.
	* Doc/ResearchJournal.org (2026-06-26 iteration 0.113.4): new entry.
	* Doc/FutureResearch.org: documentation rollout complete.
	* Doc/SessionHandoff.org: iteration 0.113.4.
	* VERSION, NEWS: 0.113.4.

2026-06-26  Peter Felecan  <peter@felecan.example>

	Iteration 0.113.3. Patch: document the super-class.

	* Models/bsppfit.scad (bsppfit): add the openscad-docsgen doc block,
	documenting the port-record representation and the per-port override
	rule (undef, scalar, or one value per port); replace the stale
	skeleton divider above the module.
	* Doc/ResearchJournal.org (2026-06-26 iteration 0.113.3): new entry.
	* Doc/FutureResearch.org: record the super-class as documented.
	* Doc/SessionHandoff.org: iteration 0.113.3.
	* VERSION, NEWS: 0.113.3.

2026-06-26  Peter Felecan  <peter@felecan.example>

	Iteration 0.113.2. Patch: document the decorations.

	* Models/bsppfit.scad (bsppfit_hexbush, bsppfit_hosetail,
	bsppfit_union, bsppfit_cap, bsppfit_plug): add openscad-docsgen doc
	blocks (Synopsis, Topics, Usage, Description, Arguments, examples);
	extend See-Also cross-links to them, including a bsppfit_reducer ->
	bsppfit_hexbush back-link.
	* Doc/ResearchJournal.org (2026-06-26 iteration 0.113.2): new entry.
	* Doc/FutureResearch.org: record the decorations as documented.
	* Doc/SessionHandoff.org: iteration 0.113.2.
	* VERSION, NEWS: 0.113.2.

2026-06-25  Peter Felecan  <peter@felecan.example>

	Iteration 0.113.1. Patch: document the catalogue wrappers.

	* Models/bsppfit.scad (bsppfit_reducer, bsppfit_nipple, bsppfit_elbow,
	bsppfit_tee, bsppfit_cross, bsppfit_manifold): add openscad-docsgen doc
	blocks (Synopsis, Topics, Usage, Description, Arguments, examples); add
	See-Also cross-links among the catalogue fittings, including from
	bsppfit_pipe.
	* Doc/ResearchJournal.org (2026-06-25 iteration 0.113.1): new entry.
	* Doc/FutureResearch.org: record the catalogue wrappers as documented.
	* Doc/SessionHandoff.org: iteration 0.113.1.
	* VERSION, NEWS: 0.113.1.

2026-06-25  Peter Felecan  <peter@felecan.example>

	Iteration 0.113.0. Minor: documentation generation, tool rename,
	section scaffolding.

	* bin/docs-check: renamed to bin/model-doc-check, with its internal
	references updated.
	* bin/model-docs: new; generates and keeps the rendered API
	documentation wiki for review.
	* Doc/man/docs-check.1: renamed to Doc/man/model-doc-check.1.
	* Doc/man/model-docs.1: new.
	* Makefile.am (EXTRA_DIST, model-doc-check, model-docs, .PHONY):
	rename the docs-check target to model-doc-check and add a model-docs
	target.
	* Models/bsppfit.scad: add seven Section headers across the file;
	reflow three prose lines off the bare label-and-colon form.
	* Doc/FutureResearch.org: record the rename and the model-docs
	companion.
	* Doc/ResearchJournal.org (2026-06-25 iteration 0.113.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.113.0.
	* VERSION, NEWS: 0.113.0.

2026-06-25  Peter Felecan  <peter@felecan.example>

	Iteration 0.112.1. Patch.

	* Doc/man/docs-check.1: new; man page for the docs-check tool.
	* bin/docs-check: prepend ~/.local/bin to PATH so a pip- or
	pipx-installed openscad-docsgen is found.
	* Makefile.am (EXTRA_DIST): ship Doc/man/docs-check.1.
	* Doc/ResearchJournal.org (2026-06-25 iteration 0.112.1): new entry.
	* Doc/SessionHandoff.org, Doc/FutureResearch.org: iteration 0.112.1.
	* VERSION, NEWS: 0.112.1.

2026-06-25  Peter Felecan  <peter@felecan.example>

	Iteration 0.112.0. Minor: BOSL2 documentation-conformance tooling.

	* Models/bsppfit.scad: add the LibFile/Includes/FileGroup/FileSummary
	file header; document bsppfit_pipe in openscad-docsgen grammar under a
	new "Catalogue Fittings" section; reword nine prose labels that
	collided with the docsgen block grammar.
	* .openscad_docsgen_rc: new; project metadata and SynTags definitions.
	* bin/docs-check: new; runs the structure and example-compilation gates.
	* Makefile.am (EXTRA_DIST, docs-check, .PHONY): ship the new files and
	add the "make docs-check" target.
	* .tar-exclude, .gitignore: ignore Doc/api.wiki and docsgen_report.json.
	* Doc/ResearchJournal.org (2026-06-25 iteration 0.112.0): new entry.
	* Doc/SessionHandoff.org, Doc/FutureResearch.org: iteration 0.112.0.
	* VERSION, NEWS: 0.112.0.

2026-06-25  Peter Felecan  <peter@felecan.example>

	Iteration 0.111.6. Patch.

	* Models/bsppfitTest.scad (bsppfit_Render): build the eccentric
	reducer cell with bsppfit_reducer(eccentric = RIGHT) instead of a
	generic bsppfit() call.
	* Doc/ResearchJournal.org (2026-06-25 iteration 0.111.6): new entry.
	* Doc/SessionHandoff.org, Doc/FutureResearch.org: iteration 0.111.6.
	* VERSION, NEWS: 0.111.6.

2026-06-25  Peter Felecan  <peter@felecan.example>

	Iteration 0.111.5. Patch.

	* Models/bsppfit.scad (_bsppfit): orient the reducer loft circles to
	the collinear port axis (lUnits[1]) rather than the tip-to-tip vector.
	For an eccentric reducer the latter tilts a few degrees, canting the end
	caps so they stopped short of the tip faces and left a film of material
	across both bore mouths. A concentric reducer is unchanged (the two axes
	coincide there).
	* Doc/ResearchJournal.org (2026-06-25 iteration 0.111.5): new entry.
	* Doc/SessionHandoff.org, Doc/FutureResearch.org: iteration 0.111.5.
	* VERSION, NEWS: 0.111.5.

2026-06-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.111.4. Patch.

	* Models/bsppfit.scad (_bsppfit): a reducer's bore (two collinear
	open ports differing in diameter, concentric or eccentric) is now a
	single lofted taper --- straight through each arm, tapering and, for an
	eccentric, shifting across the junction. For it the per-arm bores, the
	bore-mouth transition hull and the spine are skipped; the hull's
	equal-axis mouths had left a junction sphere and the spine a fat
	lateral bore. lBoreReduce added beside lBoreBend.
	* Doc/ResearchJournal.org (2026-06-12 iteration 0.111.4): new entry.
	* Doc/SessionHandoff.org, Doc/FutureResearch.org: iteration 0.111.4.
	* VERSION, NEWS: 0.111.4.

2026-06-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.111.3. Patch.

	* Models/bsppfit.scad (_bsppfit): for an elbow, skip the per-arm
	straight bores and the bore-mouth transition hull; the swept torus is
	the whole bore. Removes the junction sphere the transition hull's two
	coincident equal mouths left behind. lBoreBend hoisted to module scope.
	* Doc/ResearchJournal.org (2026-06-12 iteration 0.111.3): new entry.
	* Doc/SessionHandoff.org, Doc/FutureResearch.org: iteration 0.111.3.
	* VERSION, NEWS: 0.111.3.

2026-06-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.111.2. Elbow bore curves through the bend as a swept
	torus, not a junction sphere. Patch (a fix; the elbow's thread and bore
	dimensions, and every other fitting, are unchanged).

	* Models/bsppfit.scad (_bsppfit, bore junction blend): a two-port
	angled junction --- an elbow --- now rounds its bore with a swept
	toroidal arc of constant bore width (circle of the bore radius swept
	along a centreline rounded at the junction with radius = bore radius),
	replacing the junction sphere. The sphere, sized rb/sin(angle/2),
	scooped far wider than the bore, ballooning the channel, thinning the
	wall and pocketing the flow. Multi-way junctions (tee, cross, manifold)
	keep the sphere blend (a single torus cannot round three-plus bores
	meeting at a point). Straight two-port fittings are unaffected.
	* Models/bsppfit.scad (bsppfit_elbow): docstring updated for the
	toroidal bend.
	* Doc/FutureResearch.org, Doc/ResearchJournal.org,
	Doc/SessionHandoff.org: iteration 0.111.2 recorded.
	* VERSION, NEWS: 0.111.2.

2026-06-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.111.1. Nipple defaults fixed; test area exercises the
	sub-classes. Patch (behaviour-preserving for the male-male nipple and
	all named variants; fixes broken/degenerate cases only).

	* Models/bsppfit.scad (bsppfit_nipple): female end revised --- the core
	arm of a female end now takes the size-derived arm OD instead of the
	thread-flush major, so its internal thread keeps a proper wall (was a
	paper-thin shell). The grip band welds to the thinner of the two arms.
	middle_length must now be > 0 (the degenerate close nipple --- visible
	hub sphere, obstructed bore --- is disallowed; bsppfit_pipe covers a
	plain short connector). Male-male nipple unchanged.
	* Models/bsppfitTest.scad (test grid, bsppfit_Gallery, bsppfit_Usage):
	cap and plug cells call the bsppfit_cap/bsppfit_plug sub-classes instead
	of the super-class port builders (the plain dispatch variants are kept).
	Nipple row drops the close nipple for a female-female socket nipple. New
	row: a male elbow and a male cross, for completeness.
	* Doc/FutureResearch.org, Doc/ResearchJournal.org,
	Doc/SessionHandoff.org: iteration 0.111.1 recorded.
	* VERSION, NEWS: 0.111.1.

2026-06-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.111.0. Seventh and last catalogue wrapper,
	bsppfit_manifold --- every topology now has a named wrapper. Minor
	(new feature).

	* Models/bsppfit.scad (bsppfit_manifold): new wrapper --- a run carrying
	branch_count branches at pitch spacing, branch_sides one/both, per-side
	top_angle/bottom_angle, closable run ends (end_a/end_b), run vs branch
	size/gender and grouped overrides. Reuses bsppfit_manifold_ports for
	the run-reach and branch layout, then re-tags ports per group; delegates
	to bsppfit. No equivalence-oracle case (the harness measures
	single-mouth-per-axis fittings, not the multi-branch Manifold oracle);
	validated by byte-identity to the builder and by render.
	* Models/bsppfitTest.scad (bsppfit_Usage, bsppfit_Render, test grid):
	call bsppfit_manifold where bsppfit_manifold_ports was called directly.
	* Doc/FutureResearch.org (Super-class instantiation ergonomy): manifold
	implemented; all topologies COMPLETE; decision point for retirement and
	the 1.0.0 bump.
	* Doc/ResearchJournal.org (2026-06-12 iteration 0.111.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.111.0 delivered.
	* VERSION, NEWS: 0.111.0.

2026-06-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.110.0. Sixth catalogue wrapper, bsppfit_cross. Minor (new
	feature).

	* Models/bsppfit.scad (bsppfit_cross): new wrapper --- a straight run
	plus two opposite branches in the X-Z plane, each leaning by
	branch_angle (default 90). Run and (shared) branches may differ in
	size and gender; overrides grouped run vs branch. Delegates straight
	to bsppfit. Oracle is a two-sided one-branch Manifold.
	* Models/bsppfitTest.scad (bsppfit_Gallery, bsppfit_Usage,
	bsppfit_Render, test grid): call bsppfit_cross where bsppfit_cross_ports
	was called directly.
	* bin/equivalence-test (cross-g12-f): drive the mono case through
	bsppfit_cross.
	* Doc/FutureResearch.org (Super-class instantiation ergonomy): cross
	implemented; remaining topology manifold.
	* Doc/ResearchJournal.org (2026-06-12 iteration 0.110.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.110.0 delivered.
	* VERSION, NEWS: 0.110.0.

2026-06-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.109.0. Fifth catalogue wrapper, bsppfit_tee. Minor (new
	feature).

	* Models/bsppfit.scad (bsppfit_tee): new wrapper --- a straight run
	(two collinear ports) plus one branch leaning by branch_angle (default
	90). Run and branch may differ in size and gender; overrides grouped
	run vs branch. Delegates straight to bsppfit (the three-way junction
	is the super-class's). No dedicated Tee model; the oracle is a
	one-branch Manifold.
	* Models/bsppfitTest.scad (bsppfit_Gallery, bsppfit_Usage,
	bsppfit_Render, test grid): call bsppfit_tee where bsppfit_tee_ports
	was called directly.
	* bin/equivalence-test (tee-g12-f): drive the mono case through
	bsppfit_tee.
	* Doc/FutureResearch.org (Super-class instantiation ergonomy): tee
	implemented; remaining topologies cross, manifold.
	* Doc/ResearchJournal.org (2026-06-12 iteration 0.109.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.109.0 delivered.
	* VERSION, NEWS: 0.109.0.

2026-06-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.108.0. Fourth catalogue wrapper, bsppfit_elbow. Minor
	(new feature).

	* Models/bsppfit.scad (bsppfit_elbow): new wrapper --- two same-size
	ports at an angle (default 90 deg, arm A along -Z, arm B leaning by
	angle in X-Z); full per-end surface (gender, arm length, arm OD, bore,
	thread length). Delegates straight to bsppfit; the bend is the hub
	hull plus bore junction blend, so the dedicated Elbow's bend_radius
	has no equivalent and is not exposed. Default gender M x M.
	* Models/bsppfitTest.scad (bsppfit_Usage, bsppfit_Render, test grid):
	call bsppfit_elbow where bsppfit_elbow_ports was called directly.
	* bin/equivalence-test (elbow-g12-mm): drive the mono case through
	bsppfit_elbow.
	* Doc/FutureResearch.org (Super-class instantiation ergonomy): elbow
	implemented; remaining topologies tee, cross, manifold.
	* Doc/ResearchJournal.org (2026-06-12 iteration 0.108.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.108.0 delivered.
	* VERSION, NEWS: 0.108.0.

2026-06-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.107.0. Third catalogue wrapper, bsppfit_nipple, with its
	wrench-grip middle section. Minor (new feature).

	* Models/bsppfit.scad (bsppfit_nipple): new wrapper --- two same-size
	ports joined by a short unthreaded middle grip (middle_length,
	middle_od, middle_shape "hex"/"round"), per-end gender, thread_length
	and bore. Core gets a thread-flush arm (hub hidden inside the thread);
	the grip is a wrapper-owned annular band so the bore survives.
	middle_length 0 is a close nipple.
	* Models/bsppfitTest.scad (bsppfit_Render, test grid): add a "nipple"
	render variant and a nipple row (hex, round, close, M x F).
	* bin/equivalence-test (nipple-g12-mm): drive the mono case through
	bsppfit_nipple.
	* Doc/FutureResearch.org (Super-class instantiation ergonomy): nipple
	implemented; remaining topologies elbow, tee, cross, manifold.
	* Doc/ResearchJournal.org (2026-06-12 iteration 0.107.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.107.0 delivered.
	* VERSION, NEWS: 0.107.0.

2026-06-11  Peter Felecan  <peter@felecan.example>

	Iteration 0.106.0. Reducer hex body; second catalogue wrapper,
	bsppfit_pipe; test file aligned to the wrappers. Minor (new features).

	* Models/bsppfit.scad (bsppfit_reducer): draw the wrapper-owned hex
	wrench-grip body for hex_ports "large", "small" or "both" --- hex
	corner slivers unioned around the round arm (bore and socket
	untouched); the wrapper is attachable in the hex case to honour
	anchor/spin/orient and cutaway. Remove the not-yet-implemented assert.
	(bsppfit_pipe): new wrapper --- full per-end surface (size, gender,
	arm length, arm OD, bore, thread length per end).
	(bsppfit): fix hub-sizing arm_od resolution to handle a per-element
	undef in a list (broke bsppfit_pipe()'s [undef, undef]).
	* Models/bsppfitTest.scad (bsppfit_Gallery, bsppfit_Usage,
	bsppfit_Render, test grid): call bsppfit_pipe / bsppfit_reducer where
	the pipe / reducer port-builder was called directly; raw inline
	port-list demonstrations left as-is.
	* bin/equivalence-test (pipe-g12-mm): drive the mono case through
	bsppfit_pipe.
	* Doc/FutureResearch.org (Super-class instantiation ergonomy): hex
	and bsppfit_pipe implemented; test-file alignment standing rule.
	* Doc/ResearchJournal.org (2026-06-11 iteration 0.106.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.106.0 delivered.
	* VERSION, NEWS: 0.106.0.

2026-06-11  Peter Felecan  <peter@felecan.example>

	Iteration 0.105.0. Per-port arm/bore parameters in the bsppfit core;
	the first catalogue wrapper, bsppfit_reducer. Minor (new features).

	* Models/bsppfit.scad (bsppfit, _bsppfit): arm_length, arm_od, bore
	and thread_length each accept undef, a scalar, or a per-port list
	(a list element may be undef); arm_od and thread_length are new
	parameters; list lengths are validated against the port count.
	(bsppfit_reducer): new catalogue wrapper --- full per-side surface
	(size, gender, arm length, arm OD, bore, thread length), eccentric,
	forwarded parameters; hex_ports reserved (asserts for non-"none"
	pending the wrapper-owned hex body).
	* bin/equivalence-test (reducer-g12-g38-mm): drive the mono case
	through bsppfit_reducer.
	* Doc/FutureResearch.org (Super-class instantiation ergonomy):
	STARTED; current-state section recorded; arm_od reverted to a core
	parameter.
	* Doc/ResearchJournal.org (2026-06-11 iteration 0.105.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.105.0 delivered.
	* VERSION, NEWS: 0.105.0.

2026-06-11  Peter Felecan  <peter@felecan.example>

	Iteration 0.104.4. Document the core bsppfit() parameters; record the
	second-exchange wrapper decisions and a before/after override example
	in FutureResearch. Patch (documentation; comment-only code change).

	* Models/bsppfit.scad (bsppfit): inline comments for the previously
	undocumented public parameters (manifold_safe, tol_thread, male_slop,
	cutaway, anchor, spin, orient).
	* Doc/FutureResearch.org (Super-class instantiation ergonomy): arm OD
	override is wrapper-owned (core lists now arm_length and bore only);
	transition criterion recorded; add the deeper-overrides before/after
	example (transition_length dropped, others forwarded); note the
	bsppfit.scad documentation under the BOSL2 doc-standard entry.
	* Doc/ResearchJournal.org (2026-06-11 iteration 0.104.4): new entry.
	* Doc/SessionHandoff.org: iteration 0.104.4 delivered.
	* VERSION, NEWS: 0.104.4.

2026-06-11  Peter Felecan  <peter@felecan.example>

	Iteration 0.104.3. Record the super-class wrapper decision and a
	per-port worked example in FutureResearch. Patch (documentation only).

	* Doc/FutureResearch.org (Super-class instantiation ergonomy ---
	Decision; Worked example: the reducer wrapper): record Option 1/4
	adopted (snake-named wrappers in bsppfit.scad, dedicated models kept
	as the equivalence oracle, wrapper-owned body shape); add the reducer
	example for per-port gender and arm overrides and the proposed
	list-means-per-port core mechanism.
	* Doc/ResearchJournal.org (2026-06-11 iteration 0.104.3): new entry.
	* Doc/SessionHandoff.org: iteration 0.104.3 delivered.
	* VERSION, NEWS: 0.104.3.

2026-06-11  Peter Felecan  <peter@felecan.example>

	Iteration 0.104.2. Analyse super-class instantiation ergonomy in
	FutureResearch. Patch (documentation only).

	* Doc/FutureResearch.org (Super-class instantiation ergonomy ---
	catalogue fittings via bsppfit): new section.
	* NEWS, ChangeLog: tighten the 0.103.0--0.104.1 entries to terse
	form (recurring narrative drift).
	* Doc/ResearchJournal.org (2026-06-11 iteration 0.104.2): new entry.
	* Doc/SessionHandoff.org: iteration 0.104.2 delivered.
	* VERSION, NEWS: 0.104.2.

2026-06-11  Peter Felecan  <peter@felecan.example>

	Iteration 0.104.1. Make bsppfit.scad a definitions-only library;
	move its render scaffold to bsppfitTest.scad. Patch.

	* Models/bsppfit.scad: remove all top-level geometry and state ---
	the render variable, the $fn assignment, the gTest* grid helpers,
	the test-grid block, and the bsppfit_Render, bsppfit_Gallery and
	bsppfit_Usage modules.
	* Models/bsppfitTest.scad: new; includes bsppfit.scad and carries
	the moved galleries, render dispatch and test grid.
	* Models/Makefile.am (EXTRA_DIST): add bsppfitTest.scad.
	(RENDER_MODELS, render_model_rules, RENDER_VARIANTS): render from
	bsppfitTest.scad.
	* Doc/Taxonomy.org: mono-file references Fitting -> bsppfit,
	Models/Fitting.scad -> Models/bsppfit.scad.
	* Models/LibraryOverview.org: file tree adds bsppfitTest.scad.
	* Doc/ResearchJournal.org (2026-06-11 iteration 0.104.1): new entry.
	* Doc/SessionHandoff.org: iteration 0.104.1 delivered.
	* VERSION, NEWS: 0.104.1.

2026-06-11  Peter Felecan  <peter@felecan.example>

	Iteration 0.104.0. Rename Models/Fitting.scad to Models/bsppfit.scad
	and prefix its identifiers bsppfit/bsppfit_. Minor.

	* Models/Fitting.scad: renamed to Models/bsppfit.scad. Module Fitting
	-> bsppfit; module _fitting -> _bsppfit; the sub-class modules and
	port/geometry helpers fitting_* -> bsppfit_* (e.g. fitting_hexbush ->
	bsppfit_hexbush, fitting_port_dir -> bsppfit_port_dir); dispatch
	modules Fitting_Render/Fitting_Gallery/Fitting_Usage ->
	bsppfit_Render/bsppfit_Gallery/bsppfit_Usage; gFittingManifoldEps ->
	gBsppfitManifoldEps; assert-message prefixes "Fitting:" -> "bsppfit:".
	* Models/Makefile.am (EXTRA_DIST, RENDER_MODELS, render_model_rules,
	RENDER_VARIANTS): Fitting/Fitting.scad -> bsppfit/bsppfit.scad.
	* bin/equivalence-test (PREAMBLE use target, mono_model, mono_call):
	Fitting -> bsppfit, fitting_* -> bsppfit_*.
	* Makefile.am: comment filename reference.
	* Models/LibraryOverview.org: file-tree entry and current-state
	references to bsppfit.scad / bsppfit_* helpers.
	* Doc/ResearchJournal.org (2026-06-11 iteration 0.104.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.104.0 delivered.
	* VERSION, NEWS: 0.104.0.

2026-06-10  Peter Felecan  <peter@felecan.example>

	Iteration 0.103.0. Inline Util/util.scad into Fitting.scad. Minor.

	* Models/Fitting.scad: drop the `include <Util/util.scad>`
	directive; carry its content inline (BSPP_TABLE and accessors,
	tolerance and wall defaults, bore heuristic, size-listing, variant
	and cutaway helpers).
	* Doc/ResearchJournal.org (2026-06-10 iteration 0.103.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.103.0 delivered.
	* VERSION, NEWS: 0.103.0.

2026-06-10  Peter Felecan  <peter@felecan.example>

	Iteration 0.102.3. Unify the cutaway mechanism; round the eccentric
	reducer bore and exterior. Patch: no functional-mouth change.

	* Models/Fitting.scad (fitting_hexbush, fitting_hosetail,
	fitting_union, fitting_cap, fitting_plug): section the body with
	bsppfit_cutaway instead of the separate fitting_cutaway_mask, which
	is removed --- one cutaway mechanism. (_fitting): bore-transition
	hull between adjacent ports for a smooth reducer taper; hub hull
	spheres sized per-port arm radius so a reducer exterior tapers
	without a bulge.
	* Doc/ResearchJournal.org (2026-06-10 iteration 0.102.3): new entry.
	* Doc/SessionHandoff.org: iteration 0.102.3 delivered.
	* VERSION, NEWS: 0.102.3.

2026-06-10  Peter Felecan  <peter@felecan.example>

	Iteration 0.102.2. Fix the junction-blend scope warnings; correct
	the cutaway direction in util.scad. Patch: no functional change.

	* Models/Fitting.scad (_fitting): compute the smallest arm OD inline
	from ports instead of the out-of-scope lArmOds, removing the test
	-area render warnings; define the spine-bore diameter above the
	blend block that uses it.
	* Models/Util/util.scad (bsppfit_cutaway): keep the opposite half in
	each branch so cutaway = FRONT opens the front (and likewise for the
	other directions).
	* Doc/ResearchJournal.org (2026-06-10 iteration 0.102.2): new entry.
	* Doc/SessionHandoff.org: iteration 0.102.2 delivered.
	* VERSION, NEWS: 0.102.2.

2026-06-10  Peter Felecan  <peter@felecan.example>

	Iteration 0.102.1. Round the bore at the bend inflection. Patch:
	behaviour-preserving geometry fix.

	* Models/Fitting.scad (_fitting): add a junction blend sphere at
	each port offset, sized to round the sharp re-entrant bore corner
	where bores meet at an angle (elbow, branch), capped inside the arm
	wall. Functional mouth dimensions unchanged.
	* Doc/ResearchJournal.org (2026-06-10 iteration 0.102.1): new entry.
	* Doc/SessionHandoff.org: iteration 0.102.1 delivered.
	* VERSION, NEWS: 0.102.1.

2026-06-10  Peter Felecan  <peter@felecan.example>

	Iteration 0.102.0. Enforce Y-fan clearance; complete the cap and
	plug wrench-head decorations. Minor: new behaviour.

	* Models/Fitting.scad (fitting_branch_run_reach,
	fitting_branches_run_reach): new helpers computing the run reach a
	leaning branch needs. (fitting_manifold_ports): extend each run end
	to clear leaning branches. (fitting_yfan_ports): new enforced
	-clearance Y-fan builder. (fitting_cap, fitting_plug): new
	head-decorated sub-classes, hex or round head. (Fitting_Render):
	cap-head, plug-head variants. (test area): mixed Y uses
	fitting_yfan_ports.
	* Models/Makefile.am (RENDER_VARIANTS): register cap-head, plug-head.
	* bin/equivalence-test: add caphead-g12 and plughead-g12 cases
	(mate dimension and hex head, both delta 0); thirteen cases total.
	* Models/LibraryOverview.org: note completed decorations and the
	enforced Y-fan clearance.
	* Doc/ResearchJournal.org (2026-06-10 iteration 0.102.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.102.0 delivered.
	* VERSION, NEWS: 0.102.0.

2026-06-10  Peter Felecan  <peter@felecan.example>

	Iteration 0.101.1. Two test-area geometry fixes. Patch:
	behaviour-correcting, no new features.

	* Models/Fitting.scad (fitting_manifold_ports): bottom branch
	family now points toward -X so branch_sides = "both" puts branches
	on both sides of the run, not all on one side. (test area, mixed Y):
	lengthen the run and lower the branch so a fitting clears the run
	port on the side the branch leans toward; document the minimum-run
	-reach constraint.
	* Doc/ResearchJournal.org (2026-06-10 iteration 0.101.1): new entry.
	* Doc/SessionHandoff.org: iteration 0.101.1 delivered.
	* VERSION, NEWS: 0.101.1.

2026-06-10  Peter Felecan  <peter@felecan.example>

	Iteration 0.101.0. Reverse the cutaway direction; engineering
	bibliography as a sub-list. Minor: cutaway is a behaviour change.

	* Models/Fitting.scad (fitting_cutaway_mask): section on the dir
	side so cutaway = FRONT opens the front (the 0.100.0 sign was still
	reversed).
	* Doc/Taxonomy.org (Bibliographic references): split the engineering
	reading item into a two-entry sub-list, Cross 1936 and Weiler 1985
	each in its own sub-item.
	* Doc/ResearchJournal.org (2026-06-10 iteration 0.101.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.101.0 delivered.
	* VERSION, NEWS: 0.101.0.

2026-06-10  Peter Felecan  <peter@felecan.example>

	Iteration 0.100.0. Natural cutaway semantics; complete the test
	area. Minor: cutaway direction is a behaviour change.

	* Models/Fitting.scad (fitting_cutaway_mask): section on the dir
	side so cutaway = FRONT opens the front (was reversed). (test area):
	gallery and usage now section with FRONT; add a fifth row ---
	eccentric reducer, hex bush, hose tail, union.
	* Doc/ResearchJournal.org (2026-06-10 iteration 0.100.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.100.0 delivered.
	* VERSION, NEWS: 0.100.0.

2026-06-10  Peter Felecan  <peter@felecan.example>

	Iteration 0.99.2. Bibliography refinements in the Taxonomy topology
	part. Patch: documentation, no behaviour change.

	* Doc/Taxonomy.org (Topological Foundations): name concrete sources
	for the engineering reading --- Cross 1936 (pipe-network graph) and
	Weiler 1985 (face-adjacency graph) --- in the inline citation and the
	Bibliographic references subsection, keeping the framing prose.
	Retarget the six topology bibliography links to the Bibliographic
	references (Topological Foundations) subsection instead of the
	Sources and Attributions section.
	* Doc/ResearchJournal.org (2026-06-10 iteration 0.99.2): new entry.
	* Doc/SessionHandoff.org: iteration 0.99.2 delivered.
	* VERSION, NEWS: 0.99.2.

2026-06-10  Peter Felecan  <peter@felecan.example>

	Iteration 0.99.1. Extend the equivalence test to all eleven trade
	categories; confirm the mono-file matches the reference models.
	Patch: additive test coverage, no model behaviour change.

	* bin/equivalence-test (registered_cases, CASE_MODEL): add cases for
	nipple, cap, plug, elbow, reducer, tee, cross, hexbush, hosetail,
	union. (measure): add socket_minor and thread_major_axis kinds.
	(run_case): support per-side axis args for differently-posed
	fittings. All eleven cases pass at 0.05 mm.
	* Doc/ResearchJournal.org (2026-06-10 iteration 0.99.1): new entry.
	* Doc/SessionHandoff.org: iteration 0.99.1 delivered.
	* VERSION, NEWS: 0.99.1.

2026-06-09  Peter Felecan  <peter@felecan.example>

	Iteration 0.99.0. The two-tier equivalence-test harness, proven on
	the pipe facet.

	* bin/equivalence-test: new harness comparing the mono-file
	Fitting.scad against the dedicated reference models --- Tier 1
	functional-dimension equality (thread major Ø, bore Ø) measured
	from rendered STLs, Tier 2 visual stills. One pilot case,
	pipe-g12-mm.
	* Doc/man/equivalence-test.1: new man page.
	* Makefile.am (EXTRA_DIST): ship the harness and its man page.
	(check-equivalence): new target running the harness.
	* Doc/ResearchJournal.org (2026-06-09 iteration 0.99.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.99.0 delivered.
	* VERSION, NEWS: 0.99.0.

2026-06-09  Peter Felecan  <peter@felecan.example>

	Iteration 0.98.0. The mono-file model: fold the three decorated
	fittings into Fitting.scad as sub-classes.

	* Models/Fitting.scad (fitting_hexbush, fitting_hosetail,
	fitting_union): new sub-class modules adding the hex grip, barb
	stack, and detachable ring-nut decorations. (fitting_cutaway_mask):
	shared cutaway helper. (Fitting_Render): hexbush, hosetail, union
	variants. With these, the one file subsumes all eleven trade
	categories.
	* Models/Makefile.am (RENDER_VARIANTS): register the three variants.
	* Models/LibraryOverview.org: record that the sub-classes complete
	the mono-file subsumption.
	* Doc/ResearchJournal.org (2026-06-09 iteration 0.98.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.98.0 delivered.
	* VERSION, NEWS: 0.98.0.

2026-06-09  Peter Felecan  <peter@felecan.example>

	Iteration 0.97.0. Lift the single-ancestor deferral; unify the
	topology documents into the Taxonomy.

	* Doc/Taxonomy.org (Topological Foundations): new part integrating
	the former Topology.org and TopologyRigorous.org, with a decision
	section recording the single-ancestor verdict. (Sources and
	Attributions): add a Bibliographic references subsection. (G-01):
	internal topology link; (Reducer caption): fix hex_ports leak.
	* Doc/Topology.org, Doc/TopologyRigorous.org: removed (merged).
	* Doc/Index.org: fold the two topology entries into the Taxonomy
	entry.
	* Doc/Makefile.am, Makefile.am: drop the two removed documents.
	* Doc/ResearchJournal.org (2026-06-09 iteration 0.97.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.97.0 delivered.
	* VERSION, NEWS: 0.97.0.

2026-06-09  Peter Felecan  <peter@felecan.example>

	Iteration 0.96.0. Inline reference attributions; angled-branch
	clearance; two-sided angled manifolds.

	* Doc/Topology.org (mathematical tradition, engineering tradition):
	add inline citations; new References section.
	* Doc/TopologyRigorous.org (intro, classification, Frobenius): add
	inline citations linking to References.
	* Models/Fitting.scad (_fitting): add lArmClear arm-length
	clearance so angled arms clear the run. (fitting_manifold_ports):
	branch_sides, top_angle, bottom_angle for two-sided angled
	branches. (test area): angle-expressed 45-degree Y; 70/110 X-form
	manifold.
	* Doc/ResearchJournal.org (2026-06-09 iteration 0.96.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.96.0 delivered.
	* VERSION, NEWS: 0.96.0.

2026-06-09  Peter Felecan  <peter@felecan.example>

	Iteration 0.95.0. Branch position as decoration (multi-branch
	manifold via the super-class); sub-class hypothesis; topology
	references; the missing Pipe illustration.

	* Models/Fitting.scad (fitting_port_offset): new optional 5th
	port-record element, the branch-position decoration. (_fitting):
	hub is now the hull of spheres at the port offsets, with a spine
	bore joining them, so multi-branch manifolds render from one code
	path. (fitting_manifold_ports): spread branches by offset.
	(Fitting_Usage): add a manifold row. (test area): rich 4x4
	combination grid. Add the manifold render variant.
	* Models/Makefile.am (RENDER_VARIANTS): register Fitting manifold.
	* Doc/Taxonomy.org (G-01): add the Pipe archetype gallery figures.
	* Doc/Illustrations: add Pipe-gallery-archetypes[-cut] stills.
	* Doc/TopologyRigorous.org (Step 5): branch position as decoration;
	new sub-class subsection; new References section.
	* Models/LibraryOverview.org: note the manifold capability.
	* Doc/ResearchJournal.org (2026-06-09 iteration 0.95.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.95.0 delivered.
	* VERSION, NEWS: 0.95.0.

2026-06-09  Peter Felecan  <peter@felecan.example>

	Iteration 0.94.0. Decorated Fitting super-class: facet review and
	usage gallery. The single-ancestor decision stays deferred.

	* Models/Fitting.scad: complete the port-list-driven geometry (hub
	+ arms + bore); add elbow/reducer/plug/manifold port helpers and a
	fitting_arm_od helper (catalogue branch convention, major + 4); add
	Fitting_Usage gallery; add usage/usage-cut/elbow/reducer/plug render
	variants. Fixed the male arm sleeving its thread.
	* Models/Makefile.am (RENDER_MODELS, RENDER_VARIANTS): register
	Fitting and its variants; add the render-rule eval call.
	* Models/LibraryOverview.org: document Fitting as the experimental
	super-class (file tree + prose), explicitly not the model of record.
	* Doc/ResearchJournal.org (2026-06-09 iteration 0.94.0): new entry.
	* Doc/SessionHandoff.org: iteration 0.94.0 delivered.
	* VERSION, NEWS: 0.94.0.

2026-06-08  Peter Felecan  <peter@felecan.example>

	Iteration 0.92.0. Execute the rigorous pass: the fitting cobordism
	category, with proofs.

	* Doc/TopologyRigorous.org: new; builds the cobordism category,
	proves port count is a complete invariant and the genus-zero
	structure theorem (every fitting = pipe + tee + cap), records the
	first evidence on the ancestor decision (kept deferred; exit
	condition is the clean build of a decorated super-class).
	* Doc/Makefile.am (DOC_FILES): add TopologyRigorous.org.
	* Makefile.am (ORG_LINT_FILES): add TopologyRigorous.org.
	* Doc/Index.org (Reference): link the rigorous pass.
	* Doc/Topology.org (What the rigorous pass would involve): point to
	the now-written companion.
	* Doc/ResearchJournal.org (2026-06-08 iteration 0.92.0): new entry.
	* Doc/SessionHandoff.org: latest iteration 0.92.0.
	* VERSION, NEWS: 0.92.0.

2026-06-08  Peter Felecan  <peter@felecan.example>

	Iteration 0.91.0. Fix the missing Pipe render rules; add the
	topology prior-art survey and the rigorous-pass plan.

	* Models/Makefile.am: add the eval call generating the Pipe render
	rules (render-Pipe, -hemisphere, -sphere, -mp4), and Pipe entries in
	RENDER_ARCHETYPES, RENDER_VARIANTS and RENDER_STILLS.
	* Models/Pipe.scad (Pipe_Gallery_Archetypes): rewrite as the house
	4x3 twelve-cell grid; add Pipe_Gallery_Archetypes_Cut; update the
	render dispatch.
	* Doc/Topology.org (Prior art and related work): new section
	(cobordism / pair of pants; pipe-network valence).
	* Doc/Topology.org (What the rigorous pass would involve): new
	section (four-step construction, deferral triggers, model impact).
	* Doc/Taxonomy.org (G-01 Straight): note the Pipe model.
	* Doc/ResearchJournal.org (2026-06-08 iteration 0.91.0): new entry.
	* Doc/SessionHandoff.org: latest iteration 0.91.0.
	* VERSION, NEWS: 0.91.0.

2026-06-08  Peter Felecan  <peter@felecan.example>

	Iteration 0.90.0. Add the topological exploration document; exempt
	LaTeX math from orgdoc-lint's content checks.

	* Doc/Topology.org: new; a topological reading of the fitting set
	(fluid-path and solid-body framings in parallel), port count as the
	deformation invariant, the ancestor question deferred.
	* Doc/Makefile.am (DOC_FILES): add Topology.org.
	* Makefile.am (ORG_LINT_FILES): add Topology.org.
	* Doc/Index.org (Reference): link Topology.
	* bin/orgdoc-lint: linter 1.3.0; exempt math spans (\( \), \[ \],
	$ $) from OD001/OD005/OD006.
	* Doc/ResearchJournal.org (2026-06-08 iteration 0.90.0): new entry.
	* Doc/SessionHandoff.org: latest iteration 0.90.0.
	* VERSION, NEWS: 0.90.0.

2026-06-08  Peter Felecan  <peter@felecan.example>

	Iteration 0.89.0. Add the --fix option to orgdoc-lint; add the
	Pipe model.

	* bin/orgdoc-lint: linter 1.2.0; add --fix (auto-correct OD001 and
	OD006 only), --diff, and --format=json.
	* Doc/man/orgdoc-lint.1: document --fix, --diff, --format.
	* Doc/DevelopmentStandard.org (orgdoc-lint): note the --fix subset.
	* Models/Pipe.scad: new; a length of pipe with gendered ports and a
	given overall length.
	* Models/Makefile.am (EXTRA_DIST, RENDER_MODELS): register Pipe.
	* Models/LibraryOverview.org (file tree, taxonomy map): add Pipe.
	* Doc/ResearchJournal.org (2026-06-08 iteration 0.89.0): new entry.
	* Doc/SessionHandoff.org: latest iteration 0.89.0.
	* VERSION, NEWS: 0.89.0.

2026-06-06  Peter Felecan  <peter@felecan.example>

	Iteration 0.88.0. Integrate the orgdoc-lint markup-hazard linter
	into the project; clear all error-severity findings.

	* bin/orgdoc-lint: new; the Org-mode markup-hazard linter (from the
	orgdoc-kit), version 1.1.0.
	* Doc/man/orgdoc-lint.1: new manual page.
	* configure.ac: add AC_CHECK_PROGS for python3 (warns if absent).
	* Makefile.am (EXTRA_DIST): add bin/orgdoc-lint, Doc/man/orgdoc-lint.1.
	* Makefile.am (lint, lint-errors, check-org): new whole-tree targets.
	* Doc/Makefile.am (MAN_PAGES): add man/orgdoc-lint.1.
	* Doc/Makefile.am, Models/Makefile.am (lint, lint-errors, check-org):
	new per-directory targets.
	* Doc/Index.org (Command-line tools): link orgdoc-lint(1).
	* Doc/DevelopmentStandard.org (underscore-protection): correct the
	heading-exempt error; add the orgdoc-lint enforcement subsection.
	* Doc/FutureResearch.org, Doc/Taxonomy.org, Doc/SessionHandoff.org,
	Doc/Illustrations/Catalogue.org, Models/LibraryOverview.org: wrap bare
	underscore identifiers flagged by the linter.
	* Doc/ResearchJournal.org: join multi-line spans flagged OD002/OD005.
	* Doc/ResearchJournal.org (2026-06-06 iteration 0.88.0): new entry.
	* Doc/SessionHandoff.org: latest iteration 0.88.0.
	* VERSION, NEWS: 0.88.0.

2026-06-05  Peter Felecan  <peter@felecan.example>

	Iteration 0.87.1. Eliminate the underscore-subscript issue in the
	research journal's body text (behaviour-preserving doc fix).

	* Doc/ResearchJournal.org: wrap bare underscore identifiers in prose,
	tables, and quote blocks in code markup; repair verbatim spans split
	across line breaks and spans whose closing tilde abutted a slash, plus,
	or parenthesis; reorder the 0.87.0 entry above 0.86.0.
	* Doc/ResearchJournal.org (2026-06-05 iteration 0.87.1): new entry.
	* Doc/SessionHandoff.org: latest iteration 0.87.1.
	* VERSION, NEWS: 0.87.1.

2026-06-05  Peter Felecan  <peter@felecan.example>

	Iteration 0.87.0. Expose male_slop through the models' public API;
	correct document authors; clean the HTML author meta tag.

	* Models/Util/util.scad (section 4): add BSPPFIT_MALE_SLOP constant
	(default 0).
	* Models/Plug.scad, Models/Elbow.scad, Models/HexBush.scad,
	Models/HoseTail.scad, Models/Manifold.scad, Models/Nipple.scad,
	Models/Reducer.scad, Models/Union.scad: add a male_slop parameter,
	threaded to the male thread call sites.
	* Models/LibraryOverview.org (Conventions): document male_slop.
	* Doc/Constitution.org: author is Peter Felecan alone (read-only for
	the assistant); drop the local ASSISTANT/AUTHORLINE macros.
	* Doc/SessionHandoff.org: author is the assistant.
	* Doc/batch-init.el: add orgdoc/clean-author-string and
	orgdoc/html-meta-tags; set org-html-meta-tags.
	* Doc/FutureResearch.org: move the public-API item to "Done since".
	* Doc/ResearchJournal.org (2026-06-05 iteration 0.87.0): new entry.
	* Doc/SessionHandoff.org: latest iteration 0.87.0.
	* VERSION, NEWS: 0.87.0.

2026-06-05  Peter Felecan  <peter@felecan.example>

	Iteration 0.86.0. Add the assistant to the author block on a second
	line in both backends; tighten ChangeLog and NEWS to terse form.

	* Doc/version.org.in: add the AUTHORLINE macro (author on line one,
	assistant on line two; works in both backends).
	* Doc/Concept.org, Doc/DevelopmentStandard.org, Doc/FutureResearch.org,
	Doc/Index.org, Doc/ResearchJournal.org, Doc/Resuming.org: use
	#+AUTHOR: {{{AUTHORLINE}}}.
	* Doc/Constitution.org: define ASSISTANT and AUTHORLINE locally (no
	version.org include) and use {{{AUTHORLINE}}}.
	* Doc/Taxonomy.org: replace the inline author line with {{{AUTHORLINE}}}.
	* NEWS, ChangeLog: tighten the 0.81.0--0.85.0 entries to terse form.
	* VERSION, NEWS: 0.86.0.

2026-06-03  Peter Felecan  <peter@felecan.example>

	Iteration 0.85.0. Integrate documentation-kit findings: fix the
	checkmark glyph mapping, and sweep the underscore-subscript heading
	issue across all of ResearchJournal (not only recent entries).

	* Doc/Preamble.tex: map U+2713 checkmark in math mode.
	* Doc/ResearchJournal.org: wrap underscore identifiers in code markup
	in all 33 historical headings with bare underscores.
	* Doc/SessionHandoff.org (Environment facts): wrap bare LaTeX commands
	in the page-headers note.
	* Doc/FutureResearch.org: wrap a bare \listoffigures in prose.
	* Doc/ResearchJournal.org (2026-06-03 iteration 0.85.0): new entry.
	* Doc/SessionHandoff.org: latest iteration 0.85.0.
	* VERSION, NEWS: 0.85.0.

2026-06-03  Peter Felecan  <peter@felecan.example>

	Iteration 0.84.0. Fix the diverted threading module so it works under
	use; record the bench-measured male_slop values and a sealant note;
	fix an underscore-subscript leak in several research-journal headings.

	* Models/Util/bsppfit_threading.scad: include BOSL2/threading.scad
	(for generic_threaded_rod()) so the module is self-sufficient under
	use, not only include; USAGE comment updated. Fixes "Ignoring unknown
	module 'generic_threaded_rod'" reported when used via use. Models that
	include it render byte-identical (the added include is idempotent).
	* Doc/DevelopmentStandard.org (Print Tuning Log): add the bench-
	measured male_slop table (G1/2, PETG, Prusa Core One: 0.05 mm snug in
	brass) and a sealant note (GEB plastic/metal-plastic paste).
	* Doc/ResearchJournal.org: new 2026-06-03 (0.84.0) entry; wrap
	underscore identifiers in code markup in several headings
	(bsppfit_threaded_rod(), male_slop, bsppfit_is_variant,
	RENDER_VARIANTS) so they export as \texttt, not \textsubscript.
	* Doc/FutureResearch.org (Heterogeneous fits): update inbound heading
	links to match; record the bench value and the module fix.
	* Doc/SessionHandoff.org: latest iteration 0.84.0.
	* VERSION, NEWS: 0.84.0.

2026-06-02  Peter Felecan  <peter@felecan.example>

	Iteration 0.83.0. Wire the project models to the diverted
	bsppfit_threaded_rod() so male thread sites can take a clearance
	allowance. Behaviour-preserving (male_slop defaults to 0; renders
	byte-identical to the pre-switch models).

	* Models/Cap.scad, Models/Elbow.scad, Models/HexBush.scad,
	Models/HoseTail.scad, Models/Manifold.scad, Models/Nipple.scad,
	Models/Plug.scad, Models/Reducer.scad, Models/Union.scad: include
	Util/bsppfit_threading.scad and call bsppfit_threaded_rod() at every
	thread site (30 call sites total). male_slop not yet wired to the
	public API; male calls still pass $slop = tol_thread (inert on males).
	* Doc/FutureResearch.org (Heterogeneous fits): step (c) done; (a)
	upstream proposal and (b) bench male_slop remain (project author's).
	* Doc/DevelopmentStandard.org (Diverted BSPP threading module): status
	updated --- models now call the diverted module.
	* Doc/ResearchJournal.org (2026-06-02 iteration 0.83.0): new entry.
	* Doc/SessionHandoff.org: latest iteration 0.83.0.
	* VERSION, NEWS: 0.83.0.

2026-06-02  Peter Felecan  <peter@felecan.example>

	Iteration 0.82.0. Add a diverted (forked) BSPP threading module with a
	male-thread clearance allowance, for test-printing before proposing the
	feature upstream to BOSL2.

	* Models/Util/bsppfit_threading.scad: new. Verbatim fork of BOSL2's
	bspp_threaded_rod() (and bspp_dimensions), project-namespaced
	(bsppfit_threaded_rod, bsppfit_dimensions) to avoid collision when
	included alongside BOSL2's threading.scad, plus a new male_slop
	parameter (default 0) that subtracts 2*male_slop from the rod diameter
	(the male counterpart of $slop, which BOSL2 applies to female threads
	only). male_slop=0 reproduces upstream exactly.
	* Models/Makefile.am (EXTRA_DIST): add Util/bsppfit_threading.scad.
	* Doc/DevelopmentStandard.org (BOSL2 BSPP Module): new subsection
	documenting the diverted module and its usage.
	* Doc/FutureResearch.org (Heterogeneous fits and male-thread
	clearance): record the project author's decision (the convenience case
	is genuinely useful; implement in the module, not a wrapper) and the
	diverted module; status updated.
	* Doc/ResearchJournal.org (2026-06-02 iteration 0.82.0): new entry.
	* Doc/SessionHandoff.org: latest iteration 0.82.0.
	* VERSION, NEWS: 0.82.0.

2026-06-02  Peter Felecan  <peter@felecan.example>

	Iteration 0.81.0. Add the missing man2htmldoc manual page; analyse
	heterogeneous (mixed-material) thread fits and a non-invasive route to
	male-thread clearance. No model or build-logic change.

	* Doc/man/man2htmldoc.1: new manual page for the man-page HTML build
	helper, in the project man-page style.
	* Doc/Makefile.am (MAN_PAGES): add man/man2htmldoc.1.
	* Makefile.am (EXTRA_DIST): add Doc/man/man2htmldoc.1.
	* Doc/Index.org (Command-line tools): link man2htmldoc(1) (build
	helper).
	* Doc/FutureResearch.org: new STARTED entry --- heterogeneous fits and
	male-thread clearance. Bench data; printed-male-in-metal-female is a
	non-structural convenience only; a true male allowance needs a project
	wrapper around generic_threaded_rod() with d - 2*allowance (not a
	change to bspp_threaded_rod(), not $slop).
	* Doc/ResearchJournal.org (2026-06-02 iteration 0.81.0): new entry.
	* Doc/SessionHandoff.org: latest iteration 0.81.0.
	* VERSION, NEWS: 0.81.0.

2026-06-02  Peter Felecan  <peter@felecan.example>

	Iteration 0.80.0. Fix a fontspec missing-character warning; rename the
	man-page HTML converter and move it to bin/; check groff at configure
	time; correct a print-tuning value.

	* Doc/Preamble.tex: map U+2208 (element-of) to \in and U+25A1 (white
	square) to \square; both are absent from Latin Modern and were the
	source of the "Missing character(s) ... fontspec" warning.
	* bin/man2htmldoc: renamed from Doc/man/man2html.sh and moved here
	(no suffix, magic shebang, per the bin/ convention; distinct name
	avoids a PATH clash with the man2html-base package's man2html, which
	is a CGI tool and cannot replace it). Self-references updated.
	* Doc/Makefile.am (man/%.html rule): call $(top_srcdir)/bin/man2htmldoc.
	* Makefile.am (EXTRA_DIST): bin/man2htmldoc replaces Doc/man/man2html.sh.
	* Doc/Index.org (Command-line tools): reference bin/man2htmldoc.
	* configure.ac: AC_CHECK_PROGS([GROFF], [groff]) with a warning when
	absent (needed only by "make html"); AC_SUBST([GROFF]).
	* Doc/DevelopmentStandard.org (Print Tuning Log): structural profile
	0.020 mm -> 0.20 mm.
	* Doc/ResearchJournal.org (2026-06-02 iteration 0.80.0): new entry;
	(2026-06-01 iteration 0.79.0): structural-profile value corrected.
	* Doc/SessionHandoff.org: latest iteration 0.80.0; structural-profile
	value corrected; man-converter note updated.
	* VERSION, NEWS: 0.80.0.

2026-06-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.79.0. Document the BOSL2 $slop internal-only behaviour;
	add a print-tuning log; add the command-line tools' man pages to the
	HTML documentation; fold a French profil-gaz reference into the
	bilingual glossary.

	* Doc/man/man2html.sh: new. Convert a groff man page to styled
	standalone HTML (groff + awk), matching Index.html.
	* Doc/Makefile.am: MAN_PAGES/MAN_HTML; man/%.html pattern rule (errors
	if groff absent); MAN_HTML a prerequisite of html-local; man2html.sh
	in EXTRA_DIST.
	* Makefile.am (EXTRA_DIST): add Doc/man/man2html.sh.
	* Doc/Index.org (Command-line tools): new section linking
	checkxref(1), applyxref(1), render-views(1) HTML man pages.
	* Doc/FutureResearch.org: new DONE entry --- BOSL2 $slop is applied to
	internal threads only (4*$slop on the female bore; male rod
	unaffected), traced to generic_threaded_rod() and confirmed by a
	render sweep.
	* Doc/DevelopmentStandard.org (3D Printing Considerations): new Print
	Tuning Log subsection; seeded with PETG/Prusa Core One female $slop =
	0.1 mm and the 0.020 mm structural profile.
	* Doc/Taxonomy.org (Bilingual Labels): cite Chevalier, Guide du
	dessinateur industriel 2004 (profil gaz); record the origin-vs-use
	naming idiosyncrasy in the thread-forms caption.
	* Doc/Concept.org (Related Work): mark the tolerance-handling
	male/female question answered (0.79.0).
	* Doc/ResearchJournal.org (2026-06-01 iteration 0.79.0): new entry.
	* Doc/SessionHandoff.org (Current state, Open items): latest iteration
	0.79.0.
	* VERSION, NEWS: 0.79.0.

2026-06-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.78.0. Fold the BOSL2 documentation-build process into the
	integration record, in preparation for eventual upstream contribution
	of the models. No model or build change.

	* Doc/FutureResearch.org (BOSL2 documentation-standard conformance):
	new STARTED entry --- the disentangled openscad-docsgen pipeline, the
	four failure classes and their fixes (library must be reachable as a
	BOSL2 directory; undefined SynTags crash docsgen; headless GL/Xvfb;
	stale mkdocspdf.sh), the reproducible procedure, the conformance gate
	(openscad-docsgen -Tmf), and the required doc-block grammar.
	* Doc/ResearchJournal.org (2026-06-01 iteration 0.78.0): new entry ---
	the dated witness of the investigation and end-to-end verification.
	* Doc/SessionHandoff.org (Current state, Environment facts, Open
	items): latest iteration 0.78.0; durable BOSL2 docs-toolchain note
	added, pointing to FutureResearch.
	* VERSION, NEWS: 0.78.0.

2026-06-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.77.0. Move the Validation Scenarios chapter in the
	taxonomy; return ChangeLog/NEWS to terse form; back-fill the 0.76.0
	research-journal entry.

	* Doc/Taxonomy.org (Validation Scenarios): chapter moved from after
	the facets (F-08) to just before the Glossary, i.e. after the
	Coverage map and Facet Audit. Demotes the worked examples from the
	first post-core chapter to the last substantive one; reference matter
	(Glossary, Bilingual Labels, Sources) stays last. Content-preserving;
	by-heading cross-references unaffected.
	* ChangeLog, NEWS (0.76.0): rewritten from narrative to the terse
	file/section/change form; rationale moved to the research journal.
	* Doc/ResearchJournal.org (2026-06-01 iteration 0.77.0): new entry;
	(2026-06-01 iteration 0.76.0): back-filled (was missing).
	* Doc/SessionHandoff.org (Current state): trimmed to point at the
	journal rather than re-narrate 0.76.0; durable build facts kept.
	* VERSION, NEWS: 0.77.0.

2026-06-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.76.0. Float before hyperref (removes the duplicate
	hyperref destinations reported as build errors); global longtable;
	Catalogue remote-image embed and org-persist-gc; three latent ^!
	errors; deferred table-of-contents item resolved (a pass-count, not a
	source defect).

	* Doc/batch-init.el: insert ("" "float" nil) into
	org-latex-default-packages-alist before the hyperref entry (float
	loads before hyperref; removes the per-float duplicate-destination
	warnings). Set org-latex-default-table-environment to "longtable".
	Drop "http"/"https" from org-latex-inline-image-rules (remote image
	URLs become hyperlinks, not embeds). No-op org-persist-gc and remove
	it from kill-emacs-hook. Require cl-lib.
	* Doc/Preamble.tex: drop \usepackage{float} (now loaded before
	hyperref via org-latex-default-packages-alist); [H] redefinition kept.
	* Doc/Taxonomy.org: remove #+TOC: tables (duplicate List of Tables).
	(tab:pressure-bands): :align l l p{7.5cm}.
	* Doc/ResearchJournal.org (0.75.0 longtable entry): space the
	endhead/endfoot verbatim slash (was leaking a live \endfoot).
	(inch-mark entry): drop a live U+2033 (unrenderable under
	unicode-math).
	* Doc/FutureResearch.org (0.75.0 state-changes entry): wrap bare
	\nouppercase and \small in verbatim.
	* VERSION, NEWS: 0.76.0.

2026-06-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.75.0. Page-header fix (all docs), Table 22/23 column
	fixes, longtable for Table 14, and the Catalogue PDF now builds.

	* Doc/Preamble.tex: fancyhdr reconfigured for twoside --- single
	truncated \nouppercase \small mark on the outer corner per page
	(leftmark verso, rightmark recto), \headheight 14.5pt, matching
	plain style. Fixes long-section-name header overlap, all documents.
	* Doc/batch-init.el: override org-persist-write:url to a no-op so
	PDF export of documents containing remote source URLs (the
	Catalogue) no longer loops on the unsafe-download check.
	* Doc/Makefile.am: restore SUBDIRS = Illustrations.
	* configure.ac: add Doc/Illustrations/Makefile to AC_CONFIG_FILES.
	* Doc/Taxonomy.org (tab:bilingual-fr-sizing): four column widths
	(was three for a four-column table). (tab:illustration-credits):
	File column widened to p{4.0cm} to stop filename/Title overlap;
	also has its caption from 0.74.0. (tab:bilingual-geometry):
	:environment longtable for multi-page continuation.
	* Doc/ResearchJournal.org (2026-06-01 iteration 0.75.0): new entry.
	* Doc/FutureResearch.org: 0.75.0 state-change; TOC issue deferred.
	* VERSION, NEWS: 0.75.0.

2026-06-01  Peter Felecan  <peter@felecan.example>

	Iteration 0.74.0. Fixed the remaining overflowing tables (the
	bilingual glossary tables and the section-16 credits table).

	* Doc/Taxonomy.org (tab:bilingual-geometry, -gender, -sealing,
	-materials, -pressure, -approvals, -tools, -application,
	-fr-sizing): ATTR_LATEX :align p{2.6cm} p{4.6cm} p{6.6cm} :font
	\footnotesize, matching tab:bilingual-thread-forms.
	(tab:illustration-credits, section Sources and Attributions):
	added #+CAPTION + #+NAME and a six-column p{} layout + \footnotesize;
	the table was previously uncaptioned and overflowing.
	* Doc/ResearchJournal.org (2026-06-01 iteration 0.74.0): new entry.
	* Doc/FutureResearch.org: 0.74.0 state-change; table-overflow item
	marked done.
	* VERSION, NEWS: 0.74.0.

2026-05-31  Peter Felecan  <peter@felecan.example>

	Iteration 0.73.0. convert prerequisite; table overflow fixes
	(named tables); assistant byline under the author.

	* configure.ac: AC_CHECK_PROGS([CONVERT], [convert magick], [no])
	+ warning + AC_SUBST, in the optional render-tooling section.
	* Models/Makefile.am (RENDER_STILL_TRIM): use $(CONVERT) instead
	of a bare convert.
	* Doc/version.org.in: new ASSISTANT macro (assistant name + model
	version), configure-substituted alongside REVISION.
	* Doc/Taxonomy.org (#+AUTHOR): render {{{ASSISTANT}}} under the
	author via the NEWLINE macro and a small-italic wrapper, both
	backends.
	(tab:bspp-dimensions, tab:bspt-dimensions, tab:npt-dimensions):
	abbreviated wide headers, right-aligned numeric columns, column
	legend in caption.
	(tab:application-constraints, tab:wp-coverage,
	tab:bilingual-thread-forms): ATTR_LATEX :align p{} :font for
	wrapping + smaller font.
	(Facet-by-facet audit table): added #+CAPTION + #+NAME
	tab:facet-audit and the same :align/:font treatment.
	* Doc/ResearchJournal.org (2026-05-31 iteration 0.73.0): new entry.
	* Doc/FutureResearch.org: 0.73.0 state-change; remaining bilingual
	tables flagged for review.
	* VERSION, NEWS: 0.73.0.

2026-05-31  Peter Felecan  <peter@felecan.example>

	Iteration 0.72.0. Trim the whitespace around the illustrations
	(content was only 19-32 %% of each frame).

	* Models/Makefile.am (RENDER_STILL_BG, RENDER_STILL_MARGIN,
	RENDER_STILL_TRIM, render-archetype-stills): added a deterministic
	ImageMagick trim (crop to content bounding box + 40 px uniform
	margin, -strip for byte-reproducibility) applied in place to each
	still right after it is rendered.
	* Doc/Illustrations/*_001+*.png: all 42 stills regenerated, trimmed
	(e.g. Cap gallery 1600x1200 -> 1057x584). Stable-name symlinks
	unchanged.
	* Doc/ResearchJournal.org (2026-05-31 iteration 0.72.0): new entry.
	* Doc/FutureResearch.org: 0.72.0 state-change.
	* VERSION, NEWS: 0.72.0.

2026-05-31  Peter Felecan  <peter@felecan.example>

	Iteration 0.71.0. Gender illustration (zone A): geometry-level
	male-vs-female comparison in the F-02 section (M-11). Completes
	the illustration programme.

	* Models/Nipple.scad (Nipple_Gender_Comparison,
	Nipple_Gender_Comparison_Cut, Nipple_Render): new two-fitting
	side-by-side scene (male M x M nipple + female F x F socket) and
	its cutaway; wired as the gender-comparison and
	gender-comparison-cut render variants.
	* Doc/Taxonomy.org (Facet --- Gender (F-02)): figures
	fig:gender-comparison, fig:gender-comparison-cut and an
	introductory paragraph added.
	* Doc/Illustrations/Catalogue.org (Model render index (M-NN),
	M-11): zone-A gender-comparison slot added.
	* Models/Makefile.am (RENDER_STILLS): Nipple gender-comparison
	[-cut] at 35,270.
	* Doc/Makefile.am (EXTRA_DIST, M_NN_STABLE_LINKS): four files and
	two stable-name symlinks added.
	* Doc/Illustrations/Nipple-gender-comparison*.png: new stills and
	symlinks.
	* Doc/ResearchJournal.org (2026-05-31 iteration 0.71.0): new entry.
	* Doc/FutureResearch.org: zone A done; illustration programme
	complete.
	* VERSION, NEWS: 0.71.0.

2026-05-31  Peter Felecan  <peter@felecan.example>

	Iteration 0.70.0. Three delivery fixes against the 0.69.0
	PDF/HTML build.

	* Doc/Taxonomy.org (header): removed the <details><summary>List of
	tables</summary> ... </details> wrapper around #+TOC: tables so the
	HTML list of tables is unfolded like the list of figures.
	(Glossary / Geometry and ports): corrected the four Manifold
	tee/cross glossary figure links from Manifold-{tee,cross}-default
	[-cut].png to Manifold-{tee,cross}[-cut].png.
	* Doc/Preamble.tex: redefined the figure environment to force [H]
	placement (float package), overriding Org's [htbp], so figures
	anchor at their definition point instead of floating away.
	* Doc/ResearchJournal.org (2026-05-31 iteration 0.70.0): new entry.
	* Doc/FutureResearch.org: 0.70.0 state-change.
	* VERSION, NEWS: 0.70.0.

2026-05-31  Peter Felecan  <peter@felecan.example>

	Iteration 0.69.0. End-of-zone-B cross-reference pass (proposal
	D4): link geometry figures from the scenario prose that reasons
	about them.

	* Doc/Taxonomy.org (Validation Scenarios): five prose->figure
	cross-references added --- SC-01 -> fig:hosetail-archetypes, SC-02
	-> fig:hexbush-archetypes-cut, SC-03 -> fig:union-archetypes, SC-07
	-> fig:reducer-archetypes-cut, SC-08 -> fig:manifold-archetypes.
	* Doc/ResearchJournal.org (2026-05-31 iteration 0.69.0): new entry.
	* Doc/FutureResearch.org (Taxonomy model-render integration): D4
	cross-reference pass marked done; zone A remains.
	* VERSION, NEWS: 0.69.0.

2026-05-31  Peter Felecan  <peter@felecan.example>

	Iteration 0.68.0. Glossary single-fitting illustrations (zone C):
	solid + cutaway renders for the eleven fitting-type terms (M-10).

	* Models/Nipple.scad, Models/Elbow.scad, Models/Cap.scad,
	Models/Plug.scad, Models/Union.scad, Models/Reducer.scad,
	Models/HexBush.scad, Models/HoseTail.scad (*_Render): added the
	default-cut render variant (default fitting, cutaway = BACK).
	* Models/Manifold.scad (Manifold_Render): added default-cut,
	tee-cut, cross-cut variants.
	* Doc/Taxonomy.org (Glossary / Geometry and ports): inline
	fig:gloss-<term> and fig:gloss-<term>-cut figures added to the
	eleven fitting-type entries.
	* Doc/Illustrations/Catalogue.org (Model render index (M-NN),
	M-10): consolidated zone-C glossary-renders slot added.
	* Models/Makefile.am (RENDER_STILLS): 22 default/default-cut/
	tee/tee-cut/cross/cross-cut entries at 35,270.
	* Doc/Makefile.am (EXTRA_DIST, M_NN_STABLE_LINKS): 44 glossary
	illustration files and 22 stable-name symlinks added.
	* Doc/Illustrations/{Nipple,Elbow,Cap,Plug,Union,Reducer,HexBush,
	HoseTail,Manifold}-default[-cut].png, Manifold-{tee,cross}[-cut].png:
	new stills and symlinks.
	* Doc/ResearchJournal.org (2026-05-31 iteration 0.68.0): new entry.
	* Doc/FutureResearch.org (Taxonomy model-render integration): zone
	C done; zone A and the cross-reference pass remain.
	* VERSION, NEWS: 0.68.0.

2026-05-31  Peter Felecan  <peter@felecan.example>

	Iteration 0.67.0. Manifold (G-10) gallery added to the taxonomy
	(M-09); completes the zone-B geometry galleries. Also illustrates
	the Tee (G-03) and Cross (G-04) configurations.

	* Models/Manifold.scad (Manifold_Gallery_Archetypes_Cut): cutaway
	FRONT -> BACK, twelve cells; comment documents the cut/viewpoint
	coupling and the branch-to-run junctions.
	* Doc/Taxonomy.org (G-10 --- Manifold): figures
	fig:manifold-archetypes, fig:manifold-archetypes-cut and
	cross-reference added.
	(G-03 --- Tee, G-04 --- Cross): cross-reference the Manifold
	figures (the cells where each configuration appears).
	* Doc/Illustrations/Catalogue.org (Model render index (M-NN),
	M-09): Manifold gallery slot added.
	* Models/Makefile.am (RENDER_STILLS): Manifold
	gallery-archetypes[-cut] at 35,270.
	* Doc/Makefile.am (EXTRA_DIST, M_NN_STABLE_LINKS): four M-09
	illustration files and two stable-name symlinks added.
	* Doc/Illustrations/Manifold-gallery-archetypes*.png: new stills
	and symlinks.
	* Doc/ResearchJournal.org (2026-05-31 iteration 0.67.0): new entry.
	* Doc/FutureResearch.org (Taxonomy model-render integration): G-10
	done; zone B complete; zones A/C and the cross-reference pass now
	due.
	* VERSION, NEWS: 0.67.0.

2026-05-31  Peter Felecan  <peter@felecan.example>

	Iteration 0.66.0. Union (G-07) gallery added to the taxonomy
	(M-08); last standalone geometry facet.

	* Models/Union.scad (Union_Gallery_Archetypes_Cut): cutaway FRONT
	-> BACK, twelve cells; comment documents the cut/viewpoint
	coupling.
	* Doc/Taxonomy.org (G-07 --- Union): figures fig:union-archetypes,
	fig:union-archetypes-cut and cross-reference added.
	* Doc/Illustrations/Catalogue.org (Model render index (M-NN),
	M-08): Union gallery slot added.
	* Models/Makefile.am (RENDER_STILLS): Union
	gallery-archetypes[-cut] at 35,270.
	* Doc/Makefile.am (EXTRA_DIST, M_NN_STABLE_LINKS): four M-08
	illustration files and two stable-name symlinks added.
	* Doc/Illustrations/Union-gallery-archetypes*.png: new stills and
	symlinks.
	* Doc/ResearchJournal.org (2026-05-31 iteration 0.66.0): new entry.
	* Doc/FutureResearch.org (Taxonomy model-render integration): G-07
	done; only G-10 Manifold remains.
	* VERSION, NEWS: 0.66.0.

2026-05-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.65.0. Hex bush (G-08) gallery added to the taxonomy
	(M-07).

	* Models/HexBush.scad (HexBush_Gallery_Archetypes_Cut): cutaway
	FRONT -> BACK, twelve cells; comment documents the cut/viewpoint
	coupling.
	* Doc/Taxonomy.org (G-08 --- Hex bush): figures
	fig:hexbush-archetypes, fig:hexbush-archetypes-cut and
	cross-reference added.
	* Doc/Illustrations/Catalogue.org (Model render index (M-NN),
	M-07): Hex-bush gallery slot added.
	* Models/Makefile.am (RENDER_STILLS): HexBush
	gallery-archetypes[-cut] at 35,270.
	* Doc/Makefile.am (EXTRA_DIST, M_NN_STABLE_LINKS): four M-07
	illustration files and two stable-name symlinks added.
	* Doc/Illustrations/HexBush-gallery-archetypes*.png: new stills
	and symlinks.
	* Doc/ResearchJournal.org (2026-05-30 iteration 0.65.0): new entry.
	* Doc/FutureResearch.org (Taxonomy model-render integration): G-08
	done.
	* VERSION, NEWS: 0.65.0.

2026-05-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.64.0. Hose tail (G-09) gallery added to the taxonomy
	(M-06).

	* Models/HoseTail.scad (HoseTail_Gallery_Archetypes_Cut): cutaway
	FRONT -> BACK, twelve cells; comment documents the cut/viewpoint
	coupling and the barb-section legibility.
	* Doc/Taxonomy.org (G-09 --- Hose tail): figures
	fig:hosetail-archetypes, fig:hosetail-archetypes-cut and
	cross-reference added.
	* Doc/Illustrations/Catalogue.org (Model render index (M-NN),
	M-06): Hose-tail gallery slot added.
	* Models/Makefile.am (RENDER_STILLS): HoseTail
	gallery-archetypes[-cut] at 35,270.
	* Doc/Makefile.am (EXTRA_DIST, M_NN_STABLE_LINKS): four M-06
	illustration files and two stable-name symlinks added.
	* Doc/Illustrations/HoseTail-gallery-archetypes*.png: new stills
	and symlinks.
	* Doc/ResearchJournal.org (2026-05-30 iteration 0.64.0): new entry.
	* Doc/FutureResearch.org (Taxonomy model-render integration): G-09
	done.
	* VERSION, NEWS: 0.64.0.

2026-05-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.63.0. Cap and Plug (G-06) galleries added to the
	taxonomy (M-04, M-05); the one geometry facet with two model
	files, so both done in one iteration.

	* Models/Cap.scad (Cap_Gallery_Archetypes_Cut): cutaway FRONT ->
	BACK, twelve cells; comment documents the cut/viewpoint coupling.
	* Models/Plug.scad (Plug_Gallery_Archetypes_Cut): cutaway FRONT ->
	BACK, twelve cells; comment updated.
	* Doc/Taxonomy.org (G-06 --- Cap and plug): four figures
	(fig:cap-archetypes[-cut], fig:plug-archetypes[-cut]) and
	cross-references added.
	* Doc/Illustrations/Catalogue.org (Model render index (M-NN),
	M-04, M-05): Cap and Plug gallery slots added.
	* Models/Makefile.am (RENDER_STILLS): Cap and Plug
	gallery-archetypes[-cut] at 35,270.
	* Doc/Makefile.am (EXTRA_DIST, M_NN_STABLE_LINKS): eight M-04/M-05
	illustration files and four stable-name symlinks added.
	* Doc/Illustrations/Cap-gallery-archetypes*.png,
	Doc/Illustrations/Plug-gallery-archetypes*.png: new stills and
	symlinks.
	* Doc/ResearchJournal.org (2026-05-30 iteration 0.63.0): new entry.
	* Doc/FutureResearch.org (Taxonomy model-render integration): G-06
	done; Tee/Cross recorded as Manifold degenerates.
	* VERSION, NEWS: 0.63.0.

2026-05-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.62.0. Reducer (G-05) gallery added to the taxonomy
	(M-03); HTML list-of-figures; session-handoff shipped; distcheck
	fix.

	* Doc/batch-init.el (bsppfit/html-list-of-figures): new
	final-output filter synthesising an HTML list-of-figures;
	excluded SessionHandoff.org from the publish projects.
	* Doc/SessionHandoff.org: new; session continuity record, shipped.
	* configure.ac (AC_CONFIG_FILES): dropped unused
	Doc/Illustrations/Makefile; fixes make distcheck.
	* Models/Reducer.scad
	(Reducer_Gallery_Archetypes_Cut): cutaway FRONT -> BACK, twelve
	cells; comment documents the cut/viewpoint coupling.

	* Doc/Taxonomy.org
	(G-05 --- Reducer): figures fig:reducer-archetypes,
	fig:reducer-archetypes-cut and cross-reference added.

	* Doc/Illustrations/Catalogue.org
	(Model render index (M-NN), M-03): Reducer gallery slot added.

	* Models/Makefile.am
	(RENDER_STILLS): Reducer gallery-archetypes[-cut] at 35,270.

	* Doc/Makefile.am
	(EXTRA_DIST): four M-03 illustration files added.

	* Doc/Illustrations/Reducer-gallery-archetypes_001+35+270.png,
	Doc/Illustrations/Reducer-gallery-archetypes-cut_001+35+270.png:
	new stills.
	* Doc/Illustrations/Reducer-gallery-archetypes.png,
	Doc/Illustrations/Reducer-gallery-archetypes-cut.png: new symlinks.

	* Doc/ResearchJournal.org (2026-05-30 iteration 0.62.0): new entry.
	* Doc/FutureResearch.org (Taxonomy model-render integration): G-05
	done; HTML list-of-figures marked done.

	* VERSION, NEWS: 0.62.0.

2026-05-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.61.0. Straight (G-01) gallery added to the taxonomy
	(M-02); three pre-existing PDF/LaTeX errors fixed; make dist now
	preserves illustration symlinks.

	* Models/Nipple.scad
	(Nipple_Gallery_Archetypes_Cut): cutaway FRONT -> BACK, twelve
	cells; comment documents the cut/viewpoint coupling.

	* Doc/Taxonomy.org
	(G-01 --- Straight): figures fig:straight-archetypes,
	fig:straight-archetypes-cut and cross-reference added.
	(F-03 BSPP designation): U+2033 -> ASCII inch mark.

	* Doc/Illustrations/Catalogue.org
	(Model render index (M-NN), M-02): Straight gallery slot added.

	* Models/Makefile.am
	(RENDER_STILLS): Nipple gallery-archetypes[-cut] at 35,270.

	* Doc/Makefile.am
	(EXTRA_DIST): four M-02 illustration files added.

	* Doc/Illustrations/Nipple-gallery-archetypes_001+35+270.png,
	Doc/Illustrations/Nipple-gallery-archetypes-cut_001+35+270.png:
	new stills.
	* Doc/Illustrations/Nipple-gallery-archetypes.png,
	Doc/Illustrations/Nipple-gallery-archetypes-cut.png: new symlinks.

	* Doc/FutureResearch.org (Hyphen-in-word-boundary): stray U+0008
	-> \b.
	(Taxonomy model-render integration): G-01 done; HTML
	list-of-figures noted open.

	* Doc/ResearchJournal.org (Coverage-mode misclassification at
	0.13.0): quoted old table wrapped in #+begin_example.
	(2026-05-30 iteration 0.61.0): new entry.

	* Makefile.am (am__tar): override to drop tar -h so make dist
	preserves the M-NN illustration symbolic links.

	* VERSION, NEWS: 0.61.0.

2026-05-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.60.0. Taxonomy integration begun: Elbow (G-02)
	gallery stills added as figures. New still-render mode;
	symlink-indirected illustrations.

	* bin/render-views
	(main): --still LAT,LON (single coordinate-encoded frame;
	rejects --mp4/--tar/--label-frames); --colorscheme NAME.
	(render_one_frame): colorscheme parameter.

	* Models/Elbow.scad
	(Elbow_Gallery_Archetypes_Cut): cutaway FRONT -> BACK, twelve
	cells; comments updated.

	* Doc/Taxonomy.org
	(Geometry Facet --- Enumeration): list -> per-entry subheadings
	G-01..G-10; intro updated.
	(G-02 --- Elbow): figures fig:elbow-archetypes,
	fig:elbow-archetypes-cut and cross-reference added.

	* Doc/Illustrations/Catalogue.org
	(Purpose, Model render index (M-NN), M-01): M-NN slot class and
	Elbow slot added.

	* Doc/DevelopmentStandard.org
	(Archetype-gallery illustrations): new convention subsection.

	* Doc/Makefile.am
	(EXTRA_DIST): four M-NN illustration files added.

	* Models/Makefile.am
	(RENDER_STILLS, RENDER_STILL_COLORSCHEME, render-archetype-stills):
	per-model still registry and target; Elbow 30,315.

	* Doc/man/render-views.1
	(SYNOPSIS, OPTIONS): --still, --colorscheme.

	* Doc/Illustrations/Elbow-gallery-archetypes_001+30+315.png,
	Doc/Illustrations/Elbow-gallery-archetypes-cut_001+30+315.png:
	new stills.
	* Doc/Illustrations/Elbow-gallery-archetypes.png,
	Doc/Illustrations/Elbow-gallery-archetypes-cut.png: new symlinks.

	* Doc/ResearchJournal.org
	(2026-05-30 iteration 0.60.0): new entry.

	* Doc/FutureResearch.org
	(Illustrations for taxonomy concepts; Combinatorial render
	coverage): zone-B tracking; nested-parallelism note; 0.60.0
	state-change lines.

	* NEWS, VERSION: 0.60.0.

2026-05-29  Peter Felecan  <peter@felecan.example>

	Iteration 0.59.0. (1) Manifold taxonomy alignment; (2)
	cutaway parameter API: BOSL2 axis-direction vectors instead
	of strings. No model geometry change.

	* Models/Util/util.scad
	(bsppfit_is_cutaway): rewritten to accept undef or one of
	LEFT/RIGHT/FRONT/BACK/BOTTOM/TOP.
	(bsppfit_cutaway): is_undef() guard replaces "none" comparison;
	dispatch on vector equality.
	Header comment block: rewritten to document the vector API.

	* Models/Cap.scad, Models/Elbow.scad, Models/HexBush.scad,
	Models/HoseTail.scad, Models/Manifold.scad, Models/Nipple.scad,
	Models/Plug.scad, Models/Reducer.scad, Models/Union.scad
	(cutaway parameter default): "none" -> undef in all 12
	declarations (9 model wrappers + 3 Union sub-modules).
	(cutaway assert message): updated to list LEFT/RIGHT/FRONT/
	BACK/BOTTOM/TOP.
	(cutaway header docstring): updated to document the vector
	form.

	* Models/*.scad
	(archetype-gallery _Cut companion calls): 131
	cutaway = "front" -> cutaway = FRONT; 1 cutaway = "top" ->
	cutaway = TOP.

	* Doc/Taxonomy.org
	(G-10 Manifold catalogue entry): [[term-manifold][Manifold]]
	back-link added at first mention.
	(Manifold glossary entry): rewritten to carry both trade and
	project-specific (unified G-10 class) senses.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): State change line for 0.59.0.

	* Doc/ResearchJournal.org: 0.59.0 entry.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.59.0.

	Rationale: 0.59.0 ResearchJournal entry.

2026-05-29  Peter Felecan  <peter@felecan.example>

	Iteration 0.58.0. Model directory hierarchy flattened.
	Pure refactor; no model API or geometry change.

	* Models/Nipple.scad: moved from Models/G01_Straight/.
	* Models/Elbow.scad: moved from Models/G02_Elbow/.
	* Models/Reducer.scad: moved from Models/G05_Reducer/.
	* Models/Cap.scad, Models/Plug.scad: moved from Models/G06_CapPlug/.
	* Models/Union.scad: moved from Models/G07_Union/.
	* Models/HexBush.scad: moved from Models/G08_HexBush/.
	* Models/HoseTail.scad: moved from Models/G09_HoseTail/.
	* Models/Manifold.scad: moved from Models/G10_Manifold/.

	Models/G0n_*/ directories removed (eight directories).

	* Models/*.scad: include <../Util/util.scad> changed to
	include <Util/util.scad>.

	* Models/Makefile.am
	(EXTRA_DIST, RENDER_MODELS, RENDER_VARIANTS, RENDER_ARCHETYPES,
	render_model_rules call sites): G0n_<Class>/ prefix stripped
	from all .scad paths.
	(render, render-archetypes): output-dir now Renders/$$name.
	(render_model_rules, render_variant_rules): generated rules
	output-dir now Renders/$(1).
	(clean-local): collapsed to a single rm -rf Renders.
	Render-output, help-text, and EXTRA_DIST comments updated.

	* bin/render-views: header USAGE examples updated to flat paths
	and Models/Renders/Elbow/.

	* Models/LibraryOverview.org
	(Folder layout): rewritten for the flat structure;
	taxonomy ↔ model mapping table added.

	* Doc/DevelopmentStandard.org
	(Render output, manual command example, Manifold reference,
	make clean description, placeholder paths): live G0n_ refs
	updated to flat paths and Models/Renders/<ModelName>/.
	Historical narrative refs (past-tense, deleted artefacts)
	preserved.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): State change line for 0.58.0.

	* Doc/ResearchJournal.org: 0.58.0 entry.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.58.0.

	Rationale: 0.58.0 ResearchJournal entry.

2026-05-28  Peter Felecan  <peter@felecan.example>

	Iteration 0.57.0. Render-pipeline infrastructure:
	render-archetypes aggregate target; parallel frame
	rendering driven by make -j.

	* bin/render-views
	(main): --jobs N argument added; frame loop parallelised via
	ThreadPoolExecutor when jobs > 1 (byte-identical to sequential).
	Imports: concurrent.futures added.

	* Models/Makefile.am
	(RENDER_JOBS, RENDER_JFLAG, RENDER_NPROC, RENDER_JOBS_FLAG): job
	count derived from MAKEFLAGS -j.
	(RENDER_ARCHETYPES): new model:path:variant list.
	(render): --jobs flag threaded in.
	(render-archetypes): new aggregate target.
	(render_model_rules, render_variant_rules): --jobs threaded into
	generated recipes.
	(help): render-archetypes and -j semantics documented.

	* Doc/man/render-views.1
	SYNOPSIS: --jobs added.
	Performance: new section documenting --jobs and make -j derivation.

	* Doc/DevelopmentStandard.org
	(Model Rendering Pipeline): render-archetypes target documented;
	Parallel rendering (make -j) subsection added.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): State change line for 0.57.0.

	* Doc/ResearchJournal.org: 0.57.0 entry.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.57.0.

	Rationale: 0.57.0 ResearchJournal entry.

2026-05-28  Peter Felecan  <peter@felecan.example>

	Iteration 0.56.0. Per-port gender for the Straight-family
	Nipple; archetype gallery; taxonomy resolution of the
	female/mixed straight-fitting naming. Completes the
	per-model archetype-gallery rollout (all nine models).

	* Models/G01_Straight/Nipple.scad
	(Nipple): gender_a, gender_b parameters added with validation.
	(_nipple): gender_a, gender_b parameters; female-port geometry
	(solid stock + tapped socket via internal bspp_threaded_rod).
	(Nipple_Gallery_Archetypes): new module.
	(Nipple_Gallery_Archetypes_Cut): cutaway companion.
	(Nipple_Render): two new dispatch variants.
	Header: F-02 gender note and gender TODO corrected.

	* Models/Makefile.am
	(RENDER_VARIANTS): Nipple:gallery-archetypes:1600x1200 added.
	(RENDER_VARIANTS): Nipple:gallery-archetypes-cut:1600x1200 added.

	* Doc/Taxonomy.org
	(Geometry Facet, G-01): subtype list updated, adapter named,
	full gender facet noted.
	(Glossary, Adapter): new entry.
	(Glossary, Nipple): open-question language replaced with
	resolved naming.

	* Doc/FutureResearch.org
	(Close nipple open question): moved to Recently closed, resolved.
	(Combinatorial render coverage): State change line for 0.56.0;
	Still-open updated, rollout marked complete.

	* Doc/ResearchJournal.org: 0.56.0 entry.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.56.0.

	Rationale: 0.56.0 ResearchJournal entry.

2026-05-28  Peter Felecan  <peter@felecan.example>

	Iteration 0.55.0. HoseTail archetype gallery.

	* Models/G09_HoseTail/HoseTail.scad
	(HoseTail_Gallery_Archetypes): new module.
	(HoseTail_Gallery_Archetypes_Cut): cutaway companion.
	(HoseTail_Render): two new dispatch variants.
	Dispatch docstring updated.

	* Models/Makefile.am
	(RENDER_VARIANTS): HoseTail:gallery-archetypes:1600x1200 added.
	(RENDER_VARIANTS): HoseTail:gallery-archetypes-cut:1600x1200 added.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): State change line for 0.55.0.
	(Combinatorial render coverage): Still-open updated, Nipple noted
	as the one model without an archetype gallery.

	* Doc/ResearchJournal.org: 0.55.0 entry.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.55.0.

	Rationale: 0.55.0 ResearchJournal entry.

2026-05-28  Peter Felecan  <peter@felecan.example>

	Iteration 0.54.0. Per-port gender for the Elbow; gallery
	reworked to gender-first archetype form.

	* Models/G02_Elbow/Elbow.scad
	(Elbow): gender_a, gender_b parameters added with validation.
	(_elbow): gender_a, gender_b parameters; female-port geometry
	(extended body + tapped socket via internal bspp_threaded_rod).
	(Elbow_Gallery_Archetypes): reworked, row 1 gender combinations.
	(Elbow_Gallery_Archetypes_Cut): reworked to match.
	Header: MALE-only note and F-02 taxonomy line corrected.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): State change line for 0.54.0.
	(Combinatorial render coverage): 0.53.0 line annotated superseded.
	(Street elbow): annotated implemented 0.54.0.

	* Doc/ResearchJournal.org: 0.54.0 entry.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.54.0.

	Rationale: 0.54.0 ResearchJournal entry.

2026-05-28  Peter Felecan  <peter@felecan.example>

	Iteration 0.53.0. Elbow archetype gallery.

	* Models/G02_Elbow/Elbow.scad
	(Elbow_Gallery_Archetypes): new module.
	(Elbow_Gallery_Archetypes_Cut): cutaway companion.
	(Elbow_Render): two new dispatch variants.
	Dispatch docstring updated.

	* Models/Makefile.am
	(RENDER_VARIANTS): Elbow:gallery-archetypes:1600x1200 added.
	(RENDER_VARIANTS): Elbow:gallery-archetypes-cut:1600x1200 added.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): State change line for 0.53.0.
	(Combinatorial render coverage): Elbow removed from Still open.

	* Doc/ResearchJournal.org: 0.53.0 entry.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.53.0.

	Rationale: 0.53.0 ResearchJournal entry.

2026-05-28  Peter Felecan  <peter@felecan.example>

	Iteration 0.52.0. Union archetype gallery.

	* Models/G07_Union/Union.scad
	(Union_Gallery_Archetypes): new module.
	(Union_Gallery_Archetypes_Cut): cutaway companion.
	(union_tail_a): cutaway parameter added.
	(union_tail_b): cutaway parameter added.
	(union_nut): cutaway parameter added.
	(Union_Render): two new dispatch variants.
	Dispatch docstring updated.

	* Models/Makefile.am
	(RENDER_VARIANTS): Union:gallery-archetypes:1600x1200 added.
	(RENDER_VARIANTS): Union:gallery-archetypes-cut:1600x1200 added.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): State change line for 0.52.0.
	(Combinatorial render coverage): Union removed from Still open.

	* Doc/ResearchJournal.org: 0.52.0 entry.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.52.0.

	Rationale: 0.52.0 ResearchJournal entry.

2026-05-27  Peter Felecan  <peter@felecan.example>

	Iteration 0.51.0. HexBush archetype gallery.

	* Models/G08_HexBush/HexBush.scad
	(HexBush_Gallery_Archetypes): new module.
	(HexBush_Gallery_Archetypes_Cut): cutaway companion.
	(HexBush_Render): two new dispatch variants.
	Dispatch docstring updated.

	* Models/Makefile.am
	(RENDER_VARIANTS): HexBush:gallery-archetypes:1600x1200 added.
	(RENDER_VARIANTS): HexBush:gallery-archetypes-cut:1600x1200 added.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): State change line for 0.51.0.
	(Combinatorial render coverage): HexBush removed from Still open.

	* Doc/ResearchJournal.org: 0.51.0 entry.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.51.0.

	Rationale: 0.51.0 ResearchJournal entry.

2026-05-27  Peter Felecan  <peter@felecan.example>

	Iteration 0.50.1. Bug-fix iteration: configure-time
	fc-match check; help target variant extraction;
	FutureResearch compression; Cap cutaway policy.

	* configure.ac
	(AC_CHECK_PROGS): fc-match check added.
	(FC_MATCH): substituted.
	Summary: fc-match line added.

	* Models/Makefile.am
	(help): variant extraction switched to cut -d: -f3.
	(help): imgsize extracted from field 4.
	(help): imgsize shown as parenthetical annotation.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): five iteration status
	updates compressed to State changes section.
	(Combinatorial render coverage): Still open list extracted.

	* Doc/ResearchJournal.org: 0.50.1 entry. Cap cutaway
	preservation policy recorded.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.50.1.

	Rationale: 0.50.1 ResearchJournal entry.

2026-05-27  Peter Felecan  <peter@felecan.example>

	Iteration 0.50.0. Burn-in refinements (fc-match font,
	temp directory, --keep-labels); Cap and Plug archetype
	galleries.

	* bin/render-views
	(resolve_label_font): new helper.
	(_DEFAULT_LABEL_FONT_FAMILY): replaces _LABEL_FONT.
	(_ensure_label_tmpdir): new helper.
	(_cleanup_label_tmpdir): new helper.
	(_LABEL_TMPDIR, _KEEP_LABEL_TMPDIR): module state.
	(burn_in_labels): rewritten for per-process tmpdir.
	(burn_in_labels): label_font now accepts path or pattern.
	(build_mp4): label_font parameter unchanged in signature.
	Argparser: --keep-labels flag added.
	Argparser: --label-font metavar PATH to FONT.
	Imports: atexit, tempfile added.

	* Doc/man/render-views.1
	--label-frames: rewritten for tmpdir model.
	--label-font: accepts fontconfig pattern via fc-match.
	--keep-labels: documented.
	ENVIRONMENT: TMPDIR documented.
	FILES: tmpdir path documented.
	SEE ALSO: fc-match(1) added.

	* Models/G06_CapPlug/Cap.scad
	(Cap_Gallery_Archetypes): new module.
	(Cap_Gallery_Archetypes_Cut): cutaway companion.
	(Cap_Render): two new dispatch variants.

	* Models/G06_CapPlug/Plug.scad
	(Plug_Gallery_Archetypes): new module.
	(Plug_Gallery_Archetypes_Cut): cutaway companion.
	(Plug_Render): two new dispatch variants.

	* Models/Makefile.am
	(RENDER_VARIANTS): Cap:gallery-archetypes:1600x1200 added.
	(RENDER_VARIANTS): Cap:gallery-archetypes-cut:1600x1200 added.
	(RENDER_VARIANTS): Plug:gallery-archetypes:1600x1200 added.
	(RENDER_VARIANTS): Plug:gallery-archetypes-cut:1600x1200 added.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): Status update for 0.50.0.

	* Doc/ResearchJournal.org: 0.50.0 entry.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.50.0.

	Rationale: 0.50.0 ResearchJournal entry.

2026-05-26  Peter Felecan  <peter@felecan.example>

	Iteration 0.49.0. Burn-in refinements; Makefile pipeline
	always labels; per-variant imgsize override.

	* bin/render-views
	(burn_in_labels): stale-frame cleanup before new burn-in.
	(burn_in_labels): label_font parameter added.
	(_DEFAULT_LABEL_FONT): renamed from _LABEL_FONT.
	(build_mp4): label_font parameter threaded.
	Argparser: --label-font PATH flag added.

	* Doc/man/render-views.1
	OPTIONS / MP4 aggregation: --label-font documented.
	--label-frames: cleanup note added.
	--label-frames: always-on Makefile default noted.

	* Models/Makefile.am
	(render): --label-frames added.
	(render_model_rules): --label-frames added in three targets.
	(render_variant_rules): --label-frames added in three targets.
	(render_variant_rules): fourth positional arg for WxH.
	(render_variant_rules): $(if $(4),--imgsize $(4),) per target.
	(RENDER_VARIANTS): foreach passes word 4 to render_variant_rules.
	(RENDER_VARIANTS): Manifold gallery-archetypes 1600x1200.
	(RENDER_VARIANTS): Manifold gallery-archetypes-cut 1600x1200.
	(RENDER_VARIANTS): Reducer gallery-archetypes 1600x1200.
	(RENDER_VARIANTS): Reducer gallery-archetypes-cut 1600x1200.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): Status update for 0.49.0.

	* Doc/ResearchJournal.org: 0.49.0 entry.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.49.0.

	Rationale: 0.49.0 ResearchJournal entry.

2026-05-26  Peter Felecan  <peter@felecan.example>

	Iteration 0.48.0. MP4 frame-label burn-in; Reducer
	archetype gallery.

	* bin/render-views
	(burn_in_labels): new helper.
	(build_mp4): label_frames parameter threaded.
	(_label_text_from_filename): new helper.
	(_FRAME_COORD_RE): coordinate regex.
	(_LABEL_FONT): DejaVu Sans Mono Bold path.
	Argparser: --label-frames flag added.
	Argparser: --label-frames implies --mp4.
	Imports: re added.

	* Doc/man/render-views.1
	OPTIONS / MP4 aggregation: --label-frames documented.
	EXAMPLES: salient Manifold-archetypes label-frames example.
	FILES: .Labelled/ sidecar and DejaVu font path.

	* Models/G05_Reducer/Reducer.scad
	(Reducer_Gallery_Archetypes): new module.
	(Reducer_Gallery_Archetypes_Cut): cutaway companion.
	(Reducer_Render): gallery-archetypes and gallery-archetypes-cut
	dispatch variants added.
	Dispatch docstring updated.

	* Models/Makefile.am
	(RENDER_VARIANTS): Reducer:gallery-archetypes added.
	(RENDER_VARIANTS): Reducer:gallery-archetypes-cut added.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): Status update for 0.48.0.

	* Doc/ResearchJournal.org: 0.48.0 entry.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.48.0.

	Rationale: 0.48.0 ResearchJournal entry.

2026-05-26  Peter Felecan  <peter@felecan.example>

	Iteration 0.47.0. Manifold archetype gallery replaces
	axis-matrix gallery.

	* Models/G10_Manifold/Manifold.scad
	(Manifold_Gallery_Archetypes): new 12-cell archetype gallery.
	(Manifold_Gallery_Archetypes_Cut): cutaway companion.
	(Manifold_Gallery_Genders_Ends): removed.
	(Manifold_Gallery_Genders_Ends_Cut): removed.
	(Manifold_Render): rename dispatch variants gallery-genders-ends
	to gallery-archetypes; same for the cut variant.
	Dispatch docstring updated.
	Y-piece archetype uses left_end = "point".
	Ordinal-suffix convention recorded for future use.

	* Models/Makefile.am
	(RENDER_VARIANTS): rename Manifold gallery-genders-ends
	entries to gallery-archetypes.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): Status update for 0.47.0
	records the matrix-to-archetype shift.

	* Doc/ResearchJournal.org: 0.47.0 entry --- archetype-vs-
	matrix decision, cell selection rationale, ordinal-suffix
	convention.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.47.0.

	Rationale: 0.47.0 ResearchJournal entry.

2026-05-25  Peter Felecan  <peter@felecan.example>

	Iteration 0.46.0. Reducer eccentric API: BOSL2 directional
	constants.

	* Models/G05_Reducer/Reducer.scad
	(Reducer): eccentric takes BOSL2 directional constants.
	(Reducer): default CENTER replaces "none".
	(Reducer): LEFT, RIGHT, FRONT, BACK replace "-x", "+x", "-y", "+y".
	(Reducer): UP and DOWN rejected.
	Validation rewritten for vector form.
	Offset computation: lEccOffset = lEccDelta * eccentric.
	Top-of-file parameter docstring updated.
	(Reducer_Render): eccentric variant uses LEFT.
	Dispatch docstring updated.
	Test-area examples updated.

	* Doc/FutureResearch.org
	(G-05 Reducer eccentric subtype DONE): API refinement
	subsection records the 0.46.0 change.

	* Doc/ResearchJournal.org: 0.46.0 entry --- three-way
	API option discussion, library-idiom lesson.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.46.0.

	Rationale: 0.46.0 ResearchJournal entry.

2026-05-25  Peter Felecan  <peter@felecan.example>

	Iteration 0.45.0. First combinatorial gallery for
	Manifold; proof of concept for the gallery-as-render-
	matrix design.

	* Models/G10_Manifold/Manifold.scad
	(Manifold_Gallery_Genders_Ends): new gallery module,
	4 gender combos x 3 end treatments = 12 cells in a 2D
	grid. "Point" rows switch to Y-piece form.
	(Manifold_Gallery_Genders_Ends_Cut): cutaway companion
	to the above.
	(Manifold_Render): add gallery-genders-ends and
	gallery-genders-ends-cut dispatch variants.
	Dispatch docstring updated.

	* Models/Makefile.am
	(RENDER_VARIANTS): add Manifold:gallery-genders-ends
	and Manifold:gallery-genders-ends-cut.

	* Doc/FutureResearch.org
	(Combinatorial render coverage): Status update
	subsection added recording the 0.45.0 proof-of-concept
	landing. TODO stays open for the broader rollout
	(other models, Taxonomy.org integration, per-variant
	imgsize override).

	* Doc/ResearchJournal.org: 0.45.0 entry --- gallery-as-
	render-matrix design, four options considered, camera
	choice analysis (front view collapses Y rows into Z
	depth, 3/4 view preserves the grid), what this
	iteration deliberately doesn't try.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.45.0.

	Rationale: 0.45.0 ResearchJournal entry.

2026-05-25  Peter Felecan  <peter@felecan.example>

	Iteration 0.44.0. Manifold parameter renames (left/right
	for run ends); Reference frame documentation; Reducer
	test-area eccentric examples; Y-piece rounding research
	note.

	* Models/G10_Manifold/Manifold.scad
	(Manifold): rename end_minus_x to left_end, end_plus_x
	to right_end.
	(Manifold): rename gender_run_minus_x to left_gender_run,
	gender_run_plus_x to right_gender_run.
	(_manifold): rename arm_len_run_minus/plus to
	left/right_arm_len_run.
	(_manifold): rename gender_run_minus/plus parameters to
	left/right_gender_run.
	Local variables renamed: lArmLenRunMinus/Plus to
	lLeftArmLenRun/lRightArmLenRun; lFemRunMinus/Plus to
	lLeftFemRun/lRightFemRun; lBodyMinusX/PlusX to
	lLeftBodyX/lRightBodyX; lBoreMinusX/PlusX to
	lLeftBoreX/lRightBoreX; lGenderRunMinusX/PlusX to
	lLeftGenderRun/lRightGenderRun.
	Coordinate-extremum locals (lTipPlusX, lTipMinusX) kept
	Plus/Minus suffixes: they describe X-axis coordinate
	signs, not parameter names.

	* Models/G05_Reducer/Reducer.scad
	Manual-experiments block: add four eccentric examples.
	Lead-in comment restyled per the 0.41.1 convention.

	* Doc/DevelopmentStandard.org
	(OpenSCAD Specific Conventions): new subsection
	"Reference frame and the front view" documenting the
	BOSL2 axis convention (+X right, +Y back, +Z up) and
	the front view (camera at -Y looking toward +Y).

	* Doc/FutureResearch.org: rename the four Manifold
	parameter names in the existing entries to match the
	new public API.

	* Doc/ResearchJournal.org: 0.44.0 entry --- rename
	tables, options considered for the X-coordinate
	naming, Y-piece rounding exploration analysis,
	closed-as-documented decision.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.44.0.

	Rationale: 0.44.0 ResearchJournal entry.

2026-05-21  Peter Felecan  <peter@felecan.example>

	Iteration 0.43.0. G-05 Reducer eccentric subtype.

	* Models/G05_Reducer/Reducer.scad
	(Reducer): add eccentric parameter, default "none".
	(Reducer): accept "+x", "-x", "+y", "-y"; reject "+z", "-z".
	(Reducer): resolve eccentric offset; expand bbox on offset axis.
	(_reducer): take ecc_offset; concentric path byte-identical.
	(_reducer): outer frustum via hull() of end discs for eccentric.
	(_reducer): bore frustum via hull() of bore discs for eccentric.
	(_reducer): small body, small thread, small bore, small socket
	all shifted by ecc_offset.
	(Reducer_Render): add eccentric variant (uses "-x").
	Top-of-file parameter docstring: eccentric entry.

	* Models/Makefile.am
	(RENDER_VARIANTS): add Reducer:eccentric.
	(variant-exposition comment): mention eccentric.

	* Models/LibraryOverview.org: G-05 tree entry notes
	concentric/eccentric subtype distinction.

	* Doc/FutureResearch.org
	(G-05 Reducer --- eccentric subtype): closed DONE with
	resolution naming three design decisions.

	* Doc/ResearchJournal.org: 0.43.0 entry --- Phase 1 status,
	narrative, options considered for the three decisions,
	honest disclosures.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.43.0.

	Rationale: 0.43.0 ResearchJournal entry.

2026-05-21  Peter Felecan  <peter@felecan.example>

	Iteration 0.42.0. Per-side gender API; G-03 / G-04 deletion;
	junction-fillets TODO re-tagged.

	* Models/G10_Manifold/Manifold.scad
	(Manifold): add gender_run_minus_x, gender_run_plus_x.
	(Manifold): add top_gender_branch, bottom_gender_branch.
	(Manifold): validate the four overrides; resolve effective values.
	(_manifold): signature takes per-side gender values.
	(_manifold): replace lFemRun and lFemBr with four per-side booleans.
	(lBranchSolid, lBranchSocket): resolve gender from pIsTop.
	(Manifold_Render): add mixed-genders variant.
	Top-of-file F-02 Gender taxonomy entry: per-side overrides.
	Top-of-file parameter docstring: gender_run, gender_branch expanded.

	* Models/G03_Tee, Models/G04_Cross: directories removed.

	* Models/Makefile.am: remove all Tee and Cross references
	(RENDER_MODELS, render_model_rules evals, RENDER_VARIANTS
	entries, rm -rf render lines, variant-exposition comment,
	make help example replaced with Manifold equivalent).
	(RENDER_VARIANTS): add Manifold:mixed-genders.

	* Models/LibraryOverview.org: G-03 and G-04 tree entries
	replaced with a one-line note explaining their geometries
	are now configurations of Manifold.

	* Doc/DevelopmentStandard.org: example reference to
	Models/G04_Cross/Cross.scad redirected to Manifold.scad.

	* Doc/FutureResearch.org
	(run-as-point junction fillets): re-tagged LOW-PRIORITY,
	EXPLICIT TRIGGER ONLY per project-author guidance.

	* Doc/ResearchJournal.org: 0.42.0 entry --- per-side gender
	options considered, deletion bookkeeping, the per-side
	parameter convention now stable.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.42.0.

	Manifold queue exhausted except for the junction-fillets
	TODO under explicit-trigger semantics.

	Rationale: 0.42.0 ResearchJournal entry.

2026-05-21  Peter Felecan  <peter@felecan.example>

	Iteration 0.41.1 (fix only). Bottom-branch male thread
	placement; manual-experiments comment block.

	* Models/G10_Manifold/Manifold.scad
	(lBranchSolid): bottom male: anchor at body bottom face,
	not at the tip.
	Manual-experiments lead-in: rewrite so the example line
	reads as a commented Manifold_Render(); statement.

	* Doc/ResearchJournal.org: 0.41.1 entry --- male-thread
	bug, mirror-of-0.41.0 disclosure, versioning convention.

	* NEWS, ChangeLog: terse entries.

	* VERSION: 0.41.1.

	First fix-only iteration: third digit incremented (the
	versioning convention adopted at this iteration; the
	Constitution describes only sequence-on-each-delivery
	and does not yet distinguish minor vs sequence bumps).

	Rationale: 0.41.1 ResearchJournal entry.

2026-05-21  Peter Felecan  <peter@felecan.example>

	Iteration 0.41.0. Bottom-branch female-socket cut; tidy a
	comment that read like unbalanced parens.

	* Models/G10_Manifold/Manifold.scad
	(lBranchSocket): remove orient=DOWN on bottom side.
	(lBranchSocket): keep anchor=BOTTOM; default UP orient cuts inward.
	Bottom-of-file manual-experiments comment: split into two
	non-parenthesised sentences.

	* Doc/ResearchJournal.org: 0.41.0 entry --- the socket bug,
	the male-vs-female asymmetry that hid it, the
	shipped-twice disclosure.

	* NEWS, ChangeLog: terse-style entries.

	* VERSION: 0.41.0.

	Rationale and disclosures: 0.41.0 ResearchJournal entry.

2026-05-21  Peter Felecan  <peter@felecan.example>

	Iteration 0.40.0. Branch-penetration bug fix; run-as-point
	Y-piece coherent as a side effect.

	* Models/G10_Manifold/Manifold.scad
	(lBranchSolid): body cylinder now extends from the pivot,
	not from the stem outer surface.
	(lBranchSolid): top side: up(-lEps) anchor=BOTTOM,
	length lExit+lPlainLen+lEps.
	(lBranchSolid): bottom side: down(-lEps) anchor=TOP, same
	length formula.
	(end-treatment comment): 0.40.0 makes "point" coherent.
	Top-of-file run-as-point note: rewritten as landed at 0.40.0.
	Manifold_Render: y-fan-point dispatch comment refreshed.

	* Models/LibraryOverview.org: tree note updated.

	* Doc/FutureResearch.org
	(run-as-point junction shell): closed DONE (resolved as a
	side effect of the 0.40.0 fix).
	(run-as-point junction fillets): new optional TODO for the
	aesthetic refinement.

	* Doc/ResearchJournal.org: 0.40.0 entry --- Phase 1 status,
	the bug-and-fix arithmetic, side effect, options considered,
	closure of the 0.39.0 partial disclosure, honest disclosures.

	* NEWS, ChangeLog: terse-style entries.

	* VERSION: 0.40.0.

	Rationale and disclosures: 0.40.0 ResearchJournal entry.

2026-05-21  Peter Felecan  <peter@felecan.example>

	Iteration 0.39.0. Manifold side redefinition (top/bottom by
	XY plane); per-side branch angle and arm length;
	from-stem-surface length convention; start run-as-point.

	* Models/G10_Manifold/Manifold.scad
	(Manifold): drop branch_angle list form.
	(Manifold): add top_branch_angle, bottom_branch_angle.
	(Manifold): add top_arm_length_branch, bottom_arm_length_branch.
	(Manifold): branch arm length now from stem cylinder surface.
	(Manifold): minimum arm length enforced per side.
	(Manifold): end_minus_x and end_plus_x accept "point".
	(_manifold): drop zflip; build top and bottom independently.
	(_manifold): guard against zero-length run body.
	(Manifold_Render): drop y-fan, y-fan-3.
	(Manifold_Render): add y-fan-stem, y-fan-point, parallel-lean, x-form.
	Top-of-file PURPOSE: Side Convention block.
	Top-of-file parameter docstring rewritten.

	* Models/Makefile.am
	(RENDER_VARIANTS): drop y-fan, y-fan-3.
	(RENDER_VARIANTS): add y-fan-stem, y-fan-point, parallel-lean, x-form.

	* Models/LibraryOverview.org: tree note rewritten for side
	convention.

	* Doc/FutureResearch.org
	(run-as-point Y-fan): closed DONE with resolution.
	(run-as-point junction shell): new TODO.

	* Doc/ResearchJournal.org: 0.39.0 entry --- Phase 1 status,
	narrative, options considered, X-shape correction, honest
	disclosures.

	* NEWS, ChangeLog: terse-style entries.

	* VERSION: 0.39.0.

	Rationale, options considered, X-shape correction, and
	partial-implementation disclosures: 0.39.0 ResearchJournal entry.

2026-05-21  Peter Felecan  <peter@felecan.example>

	Iteration 0.38.0. Symmetric Y-fan (run-with-stem) on the
	unified Manifold; trunk-encroachment fix for any
	non-orthogonal branch; BOSL2 version pinning prose landing.

	* Models/G10_Manifold/Manifold.scad: branch_angle accepts a
	2-list [a_left, a_right] in addition to a scalar. New
	internal function lTiltAt(pX) resolves per-pX effective
	tilt (pX < 0 -> a_left, pX > 0 -> a_right, pX = 0 -> 90).
	Run arm length split into arm_len_run_minus and
	arm_len_run_plus; the asymmetric extents come from the
	X-reach of the tilted trunk inside the body
	(arm_od_branch / (2 cos|T|) + (arm_od_run / 2) tan T per
	side). The five _manifold call sites that used the old
	arm_len_run (lRunEndMale, lRunEndSocket, run body, run
	bore, lBranchSocketUp / lBranchBoreUp via lTiltAt) all
	updated. Bounding box rebuilt to use per-pX tilt and the
	symmetric envelope of the asymmetric arm lengths. New
	dispatch variants y-fan and y-fan-3. Top-of-file
	Y-form note rewritten.

	* Doc/DevelopmentStandard.org: §BOSL2 BSPP Module gains
	a Version pinning subsection citing PR #1877, merge
	commit ed3afe3, and BOSL_VERSION >= [2, 0, 716] as the
	runtime-checkable form. Records why the runtime assert
	was considered and declined.

	* Doc/FutureResearch.org: Manifold --- symmetric Y-fan
	marked DONE with a Resolution note for the 0.38.0 work.
	New TODO Manifold --- run-as-point Y-fan tracks the
	remaining scope (the Y-Piece and IFT-M311 catalogue
	evidence). BOSL2 BSPP module --- exact tag verification
	entry corrected from [2, 0, 739] to [2, 0, 716] on
	PR-author evidence; Correction note added; Action
	updated to DONE at 0.38.0.

	* NEWS, ChangeLog: this entry and the matching NEWS
	paragraph.

	* VERSION: 0.38.0.

	Rationale, options considered, and disclosures: 0.38.0
	ResearchJournal entry.

2026-05-20  Peter Felecan  <peter@felecan.example>

	Iteration 0.37.0. Y-form (non-orthogonal) branches for
	the unified Manifold.

	* Models/G10_Manifold/Manifold.scad: branch_angle == 90
	assert replaced by 30..150 range check. The three branch
	helper modules in _manifold gain yrot(90 - branch_angle)
	at the pivot point. Bounding box recomputed for the
	X-extension and Z-projection from tilted branches. New
	y-tee dispatch variant. PURPOSE and parameter docs
	updated.

	* Models/Makefile.am: y-tee added to Manifold
	RENDER_VARIANTS.

	* Doc/FutureResearch.org: Manifold --- Y-form TODO
	resolved. New Manifold --- symmetric Y-fan TODO for the
	splaying form (per-branch tilt + run-as-point question).

	* Doc/Taxonomy.org: G-10 Y-form claim sharpened from
	"reserved" to "supported".

	* Models/LibraryOverview.org: tree note updated.

	* VERSION: 0.37.0.

	Rationale and disclosures: 0.37.0 ResearchJournal entry.

2026-05-20  Peter Felecan  <peter@felecan.example>

	Iteration 0.36.0. Branch-fitting taxonomy unification
	(Option B); cutaway test-area examples; eccentric
	reducer explanation; BOSL2 BSPP version pinning
	recorded.

	* Models/G10_Manifold/Manifold.scad: PURPOSE rewritten as
	the unified branch-fitting class. New branch_angle
	parameter (default 90; asserts otherwise, reserved for
	Y-form). New dispatch variants tee, cross. Test-area
	examples updated.

	* Models/G03_Tee/Tee.scad, Models/G04_Cross/Cross.scad:
	DEPRECATED banner added just below the license header.
	Files remain callable.

	* Models/G*/*.scad: each model's test area gains one
	commented cutaway example.

	* Models/Makefile.am: tee and cross added to Manifold
	RENDER_VARIANTS. G-03 and G-04 entries left intact.

	* Doc/Taxonomy.org: F-01 Geometry G-03 and G-04 rewritten
	as configuration pointers to G-10; G-10 entry rewritten
	as the unified class with the merge history.

	* Doc/FutureResearch.org: branch-fitting taxonomy TODO
	resolved; BOSL2 BSPP exact-tag verification TODO
	resolved; new standalone Y-form Manifold TODO; new
	eccentric reducer TODO.

	* Models/LibraryOverview.org: directory tree marks G-03
	and G-04 DEPRECATED; class list reflects unification.

	* VERSION: 0.36.0.

	Rationale, OBSOLETE file list and detail: 0.36.0
	ResearchJournal entry.

2026-05-20  Peter Felecan  <peter@felecan.example>

	Iteration 0.35.0. Branch-fitting taxonomy review --- the
	design work, not a resolution.

	* Doc/FutureResearch.org: review block added to the
	standing branch-fitting taxonomy TODO. Three structural
	options (A status quo + G-11, B unified branched class,
	C hybrid with parent grouping) with consequences and
	recommendation. Decision pending.

	* VERSION: 0.35.0.

	Rationale and detail: 0.35.0 ResearchJournal entry.

2026-05-20  Peter Felecan  <peter@felecan.example>

	Iteration 0.34.0. Christmas-tree barb dimensioning.

	* Models/G09_HoseTail/HoseTail.scad: the "christmas_tree"
	branch of the barb loop separates the envelope taper
	(lCtEnvFloor = 0.78 on major only) from the per-barb
	rise (lCtMinorFrac = 0.72 of each barb's own major).
	Pronounced ridges restored.

	* Doc/FutureResearch.org: christmas-tree thin-stepping
	follow-up resolved.

	* VERSION: 0.34.0.

	Rationale and detail: 0.34.0 ResearchJournal entry.

2026-05-19  Peter Felecan  <peter@felecan.example>

	Iteration 0.33.0. Per-port hex for the Reducer.

	* Models/G05_Reducer/Reducer.scad: body_shape replaced by
	hex_ports ("none"/"large"/"small"/"both"); legacy
	"round"/"hex" accepted as aliases. _reducer takes
	per-section hex flags. New dispatch variants hex-large,
	hex-small.

	* Models/Makefile.am: RENDER_VARIANTS gains
	Reducer hex-large, hex-small.

	* Doc/FutureResearch.org: two-hex note resolved.

	* VERSION: 0.33.0.

	Rationale and detail: 0.33.0 ResearchJournal entry.

2026-05-19  Peter Felecan  <peter@felecan.example>

	Iteration 0.32.0. Cutaway facility.

	* Models/Util/util.scad: section 9 --- BSPPFIT_CUTAWAY_SIZE,
	bsppfit_is_cutaway(), bsppfit_cutaway() (wraps the BOSL2
	planar-half modules).

	* Models/G*/*.scad: every model wrapper gains a "cutaway"
	parameter (default "none"), validation, and a
	bsppfit_cutaway() wrap around attachable().

	* Doc/FutureResearch.org: cutaway TODO marked DONE; new
	branch-fitting taxonomy TODO; christmas-tree dimensioning
	note added.

	* VERSION: 0.32.0.

	Rationale and detail: 0.32.0 ResearchJournal entry.

2026-05-19  Peter Felecan  <peter@felecan.example>

	Iteration 0.31.0. A new geometry class: G-10 Manifold,
	the tenth model of the library.

	Project-author timestamp: [2026-05-19 Tue 06:24].

	New G-10 Manifold model:

	* Models/G10_Manifold/Manifold.scad: new file. A BSPP
	distribution manifold --- a straight cylindrical run
	carrying a row of N branch ports, with a port at each run
	end. Pipe-bodied, the same body family as the G-03 Tee
	and G-04 Cross; reuses the Tee's union-of-perpendicular-
	cylinders branch idiom. Public module Manifold() with
	branch_count, branch_sides ("one"/"both"), gender_run,
	gender_branch, end_minus_x, end_plus_x ("open"/"capped"),
	size_run, size_branch, branch_pitch, and thread/arm/bore
	controls; private _manifold() builds the geometry; the
	-Z branches for branch_sides "both" use BOSL2 zflip().
	Render dispatch with variants default, gallery,
	both-sides, female-run, capped-end, six. An earlier
	0.31.0 draft modelled the manifold as a rectangular
	block (from pneumatic distribution blocks, a different
	product family); it was discarded after the project
	author supplied HTC/PVC-Welt catalogue references
	showing a pipe-run body.

	* Models/Makefile.am: G10_Manifold/Manifold.scad added
	to the model list, the dispatch list, the
	render_model_rules eval, the RENDER_VARIANTS entries
	(both-sides, female-run, capped-end, six), and the clean
	target.

	Documentation:

	* Doc/Taxonomy.org: new G-10 Manifold entry in the
	Geometry Facet enumeration, recording the pipe-bodied
	nature, the tee/cross/manifold continuum as a descriptive
	relationship, and the distinction from a pneumatic
	distribution block.

	* Doc/FutureResearch.org: the manifold taxonomy TODO
	marked DONE with a resolution note.

	* Models/LibraryOverview.org: G-10 added to the geometry-
	class list (now ten classes) and the directory tree.

	* VERSION: bumped to 0.31.0.

2026-05-18  Peter Felecan  <peter@felecan.example>

	Iteration 0.30.0. Documentation-only release. No code
	change, no model touched.

	Project-author timestamp: [2026-05-18 Mon 20:06].

	* Doc/FutureResearch.org: new TODO entry "Cutaway module
	--- a parametric half-cut for viewing internals". Records
	the project author's proposal for a committed cutaway
	facility built on BOSL2's planar-cut modules (half_of,
	left_half, right_half, front_half, back_half, top_half,
	bottom_half), the design questions and their answers (a
	symmetric model needs one static cut, a non-symmetric one
	may need several; no multiframe renderer is needed; the
	cut target should be a "cutaway" parameter defaulting to
	"none"), and an open question on parameter-versus-external-
	module form for the implementing iteration.

	* VERSION: bumped to 0.30.0.

2026-05-18  Peter Felecan  <peter@felecan.example>

	Iteration 0.29.0. The alternative hose-tail barb
	profiles --- the last form-axis variant. With this
	iteration the form axis is complete. No new geometry
	class, no taxonomy change.

	Project-author timestamp: [2026-05-18 Mon 20:06].

	Alternative barb profiles:

	* Models/G09_HoseTail/HoseTail.scad (HoseTail,
	_hose_tail): new barb_profile parameter, "shark_fin"
	(default), "stepped", or "christmas_tree". "shark_fin" is
	the pre-0.29.0 single-frustum barb. "stepped" gives each
	barb a frustum over the leading 70% of barb_pitch and a
	straight cylindrical land at barb_major_d over the
	trailing 30%. "christmas_tree" tapers the barb diameters
	down toward the tip, scaled by 1 - iI * step with the
	step bounded by a floor so the tip barb clears the bore.
	The barb loop gained a three-way branch on barb_profile.
	barb_profile is independent of gender and body_shape. All
	pre-0.29.0 HoseTail() calls are unchanged. New "stepped"
	and "christmas-tree" render-dispatch variants.

	* Models/Makefile.am (RENDER_VARIANTS): added the
	HoseTail:stepped and HoseTail:christmas-tree entries.

	Documentation:

	* Doc/FutureResearch.org: the G-09 Hose Tail alternative
	barb profiles entry marked DONE. With it the form-axis
	variant programme is complete.

	* VERSION: bumped to 0.29.0.

2026-05-18  Peter Felecan  <peter@felecan.example>

	Iteration 0.28.0. A defect fix and a form-axis variant,
	both in the G-09 Hose Tail. No new geometry class, no
	taxonomy change.

	Project-author timestamp: [2026-05-18 Mon 15:04].

	Hose tail default-bore fix:

	* Models/G09_HoseTail/HoseTail.scad (HoseTail): the
	default through-bore is now the smaller of
	bsppfit_default_bore(size) and BSPPFIT_DEFAULT_BORE_FACTOR
	* barb_minor_d. The bore runs the full length of the
	fitting and must pass the barb tips; the size-keyed
	default ignored a barb_minor_d override below the
	size-derived default, so a narrow-hose tail aborted on
	the bore assert. The assert itself was correct and is
	unchanged. Same defect class as the 0.25.0 hex bush bore.

	Shouldered body-to-barbs transition:

	* Models/G09_HoseTail/HoseTail.scad (HoseTail,
	_hose_tail): new shoulder_length parameter, default 0.
	At 0 the body-to-barbs junction is flush and the
	arm_od >= barb_major_d assert holds. Above 0 the assert
	is relaxed to require arm_od < barb_major_d and a frustum
	of shoulder_length bridges the body OD up to
	barb_major_d before the first barb. The arm_od default
	is shoulder-aware: the wall-safe minimum when shouldered.
	overall_length and lBarbsStartZ account for the shoulder
	run. New "hex-female" and "shouldered" render-dispatch
	variants. All pre-0.28.0 HoseTail() calls are unchanged.

	* Models/Makefile.am (RENDER_VARIANTS): added the
	HoseTail:hex-female and HoseTail:shouldered entries.

	Documentation:

	* Doc/FutureResearch.org: recorded the hose-tail bore bug
	as a second occurrence of the dimension-default defect
	class under the combinatorial-render TODO. Extended the
	Reducer hex-body entry with the project author's 0.28.0
	finding (no commercial two-hex reducer exists) and the
	proposed per-port parametric hex for 0.29.0. New TODO
	entry on manifold fittings --- taxonomy review and the
	question of whether tees and crosses are degenerate
	manifolds.

	* VERSION: bumped to 0.28.0.

2026-05-18  Peter Felecan  <peter@felecan.example>

	Iteration 0.27.0. The hexagonal-body hose tail --- the
	form-axis sibling of the 0.26.0 hex-bodied reducer. No
	new geometry class, no taxonomy change.

	Project-author timestamp: [2026-05-18 Mon 11:02].

	Hexagonal-body hose tail:

	* Models/G09_HoseTail/HoseTail.scad (HoseTail,
	_hose_tail): New body_shape parameter, "round" (default)
	or "hex". With "hex" the plain body section between the
	threaded end and the first barb is a regular hexagonal
	prism providing a wrench grip; the threaded end and the
	barbed cone stack are unaffected. _hose_tail emits the
	body section as a regular_prism or a cyl per body_shape;
	the prism across-flats equals arm_od so the hex inscribes
	the round body. The attachable bounding box uses the hex
	across-corners (arm_od * 2 / sqrt(3)) for a hex body.
	body_shape is independent of gender --- a hex-bodied
	female-thread hose tail has the tapped socket cut into
	the hex stock. All pre-0.27.0 HoseTail() calls are
	unchanged. New "hex" render-dispatch variant. Follows the
	precedent of the Reducer's body_shape and the Nipple's
	middle_shape.

	* Models/Makefile.am (RENDER_VARIANTS): added the
	HoseTail:hex entry, generating render-HoseTail-hex and
	its hemisphere / sphere variants.

	Documentation:

	* Doc/FutureResearch.org: the G-05 Reducer hexagonal-body
	variant entry marked DONE (at 0.26.0), with a recorded
	open question --- the 0.26.0 reducer makes both body
	sections hexagonal, an unusual trade form; commercial hex
	reducers more often have a single wrench-grip band. Noted
	for future exploration pending commercial reference; no
	change made to the delivered two-hex form.

	* VERSION: bumped to 0.27.0.

2026-05-18  Peter Felecan  <peter@felecan.example>

	Iteration 0.26.0. The first form-axis variant: the
	hexagonal-body reducer. A FutureResearch note on
	combinatorial render coverage records a
	verification-method point. No new geometry class, no
	taxonomy change.

	Project-author timestamp: [2026-05-18 Mon 10:33].

	Hexagonal-body reducer:

	* Models/G05_Reducer/Reducer.scad (Reducer, _reducer):
	New body_shape parameter, "round" (default) or "hex".
	With "hex" the two plain body sections are regular
	hexagonal prisms providing a wrench grip; the conical
	transition frustum stays round. A local module
	lBodySection in _reducer emits each body section as a
	cyl or a regular_prism per body_shape; for "hex" the
	prism across-flats equals the section's arm_od so the
	hex inscribes the round body and the threads meet it
	cleanly. The attachable bounding box uses the hex
	across-corners (arm_od * 2 / sqrt(3)) for a hex body.
	body_shape is independent of the gender parameters. All
	pre-0.26.0 Reducer() calls are unchanged. New "hex"
	render-dispatch variant. Follows the precedent of the
	G-01 Nipple's middle_shape parameter.

	* Models/Makefile.am (RENDER_VARIANTS): added the
	Reducer:hex entry, generating render-Reducer-hex and its
	hemisphere / sphere variants.

	Documentation:

	* Doc/FutureResearch.org: new TODO entry "Combinatorial
	render coverage for multi-variant models", recording the
	verification-method point raised after the 0.24.0/0.25.0
	hex bush defect --- a cutaway is necessary but not
	sufficient, and a render matrix may be needed. Not a
	committed task; a note pending recurrence of the error
	class.

	* VERSION: bumped to 0.26.0.

2026-05-18  Peter Felecan  <peter@felecan.example>

	Iteration 0.25.0. A defect fix: the through-bore of the
	gender-swapped hex bush was sized to the wrong port,
	hollowing the small male thread into a bare floating
	helix. No new geometry class, no new variant.

	Project-author timestamp: [2026-05-18 Mon 09:58].

	Hex bush through-bore sizing fix:

	* Models/G08_HexBush/HexBush.scad (HexBush): Through-bore
	now sized to the smaller of the two ports. New
	lSizeSmaller = (size_male <= size_female) ? size_male :
	size_female and lMinorOdSmaller; the bore default
	(bsppfit_default_bore) and the bore validation assert are
	keyed to it. The 0.24.0 model keyed both to size_female,
	correct only when the female port was the smaller --- in
	the gender-swapped layout the female port is the larger,
	so the bore was wider than the small male thread's minor
	diameter and removed the male thread's core, leaving a
	bare helix. Defect fix: pre-0.25.0 gender-swapped or
	step-up hex bushes have a hollow male thread and should
	be re-generated. The classic layout is unchanged ---
	there the smaller port is the female one. The bore assert
	message rewritten to describe both failure modes (a
	too-large bore removes a female port's thread root, or
	hollows a male port's thread). The bore parameter doc
	updated.

	* VERSION: bumped to 0.25.0.

2026-05-17  Peter Felecan  <peter@felecan.example>

	Iteration 0.24.0. The gender-swapped hex bush, which
	completes the gender-axis variant programme begun at
	0.20.0. The same change fixes a latent hex-sizing defect
	present since iteration 0.9.7. No new geometry class, no
	taxonomy change.

	Project-author timestamp: [2026-05-17 Sun 20:31].

	Gender-swapped hex bush and hex-sizing fix:

	* Models/G08_HexBush/HexBush.scad (HexBush): Hex body
	now sized to the larger of the two ports. New
	lMajorOdLarger = max(major_od(size_male),
	major_od(size_female)); the hex_od default and the
	bsppfit_safe_wall enforcement are keyed to it. The 0.9.7
	model keyed both to size_male alone, correct only when
	the male port was the larger --- a gender-swapped
	(large-female) hex bush was sized too small to contain
	its own female cavity. Defect fix: pre-0.24.0
	gender-swapped or step-up hex bushes should be
	re-generated. New assert: hex_od must clear
	major_od(size_female) + 2 * BSPPFIT_MIN_WALL so the
	female cavity fits radially with a wall remaining. The
	"step-up adapter, atypical" warning replaced with a
	neutral echo flagging only the equal-size case. PURPOSE
	block, size_female parameter doc, and ARCHITECTURAL ROLE
	note rewritten for the two layouts. New "swapped"
	render-dispatch variant. No new parameter --- the
	existing size_male / size_female already encode the
	gender-to-size assignment.

	* Models/Makefile.am (RENDER_VARIANTS): added the
	HexBush:swapped entry, generating render-HexBush-swapped
	and its hemisphere / sphere variants.

	Documentation:

	* Doc/FutureResearch.org: the per-port variant space
	entry updated --- the gender axis is complete for every
	model class that admits a gender choice; the note
	explains the hex bush's gender options are a
	which-port-is-which choice, not the four-way per-port
	space, and that same-gender reducing is the Reducer's
	province.

	* VERSION: bumped to 0.24.0.

2026-05-17  Peter Felecan  <peter@felecan.example>

	Iteration 0.23.0. The gender variants of the G-07
	Union, the most structurally involved fitting in the
	library --- a three-piece assembly. With this iteration
	the gender axis is complete for the Reducer, the hose
	tail, and the union. No new geometry class, no taxonomy
	change.

	Project-author timestamp: [2026-05-17 Sun 20:15].

	Union female-port and mixed-gender variants:

	* Models/G07_Union/Union.scad (Union, union_tail_a,
	union_tail_b): New per-pipe-end gender. union_tail_a and
	union_tail_b each gained a gender parameter, "M"
	(default) or "F". The Union wrapper gained gender_a and
	gender_b, passing one to each tail; they are
	independent, so the Union produces all four gender
	combinations MxM, MxF, FxM, FxF. With "F" a pipe end is
	a tapped female socket: the tail's plain body section is
	extended to cover the pipe-thread region as solid stock
	and an internal bspp_threaded_rod is subtracted from it,
	the Cap.scad idiom. Each tail branches on gender in
	three places: body section length, male-thread
	presence, female-socket presence. The nut-to-collar
	coupling thread and the ring nut are unaffected;
	_union_resolve needed no change, since gender selects a
	geometry operation, not a dimension. All pre-0.23.0
	Union() calls are unchanged. New "mxf" and "fxf"
	render-dispatch variants.

	* Models/Makefile.am (RENDER_VARIANTS): added the
	Union:mxf and Union:fxf entries, generating
	render-Union-mxf and render-Union-fxf and their
	hemisphere / sphere variants.

	Documentation:

	* Doc/FutureResearch.org: the G-07 Union female-port and
	mixed-gender variants entry marked DONE; the per-port
	variant space entry updated to record the Union gender
	axis as fully covered.

	* VERSION: bumped to 0.23.0.

2026-05-17  Peter Felecan  <peter@felecan.example>

	Iteration 0.22.0. The third gender-axis variant: the
	female-thread hose tail. An autotools fix makes Emacs a
	soft dependency so the project configures and builds
	without it (Emacs is needed only for the documentation
	targets). No new geometry class, no taxonomy change.

	Project-author timestamp: [2026-05-17 Sun 15:41].

	Female-thread hose tail:

	* Models/G09_HoseTail/HoseTail.scad (HoseTail,
	_hose_tail): New gender parameter, "M" (default) or "F".
	With "F" the threaded end is a tapped female socket: the
	plain body section is extended to cover the thread
	region as solid stock and an internal bspp_threaded_rod
	of depth thread_length is subtracted from it, the
	Cap.scad idiom. The barbed end is unaffected. _hose_tail
	branches on gender in three places: body section length
	and centre, male-thread presence, female-socket
	presence. All pre-0.22.0 HoseTail() calls are unchanged.
	New "female" render-dispatch variant.

	* Models/Makefile.am (RENDER_VARIANTS): added the
	HoseTail:female entry, generating render-HoseTail-female
	and its hemisphere / sphere variants.

	Autotools: Emacs as a soft dependency:

	* configure.ac: the Emacs check downgraded from
	AC_MSG_ERROR to AC_MSG_WARN for both the not-found and
	too-old cases; EMACS set to "no" when unusable so
	configure proceeds. Emacs is used only by the pdf and
	html documentation recipes; building the programs and
	running the render pipeline do not need it.

	* Doc/Makefile.am, Models/Makefile.am: each %.pdf and
	html.stamp recipe gained an EMACS != no guard that
	fails with an explanatory message if a documentation
	target is invoked without Emacs.

	Documentation:

	* Doc/FutureResearch.org: the G-09 Hose Tail
	female-thread variant entry marked DONE; the per-port
	variant space entry updated to record the hose tail
	gender axis.

	* VERSION: bumped to 0.22.0.

2026-05-17  Peter Felecan  <peter@felecan.example>

	Iteration 0.21.0. The second gender-axis variant: the
	Reducer FxF female reducer, completing the G-05 Reducer
	gender axis. A taxonomy-document structural repair
	rounds out the iteration. No new geometry class, no
	taxonomy-coverage change.

	Project-author timestamp: [2026-05-17 Sun 15:13].

	Reducer FxF female reducer:

	* Models/G05_Reducer/Reducer.scad (Reducer, _reducer):
	New gender_large parameter, "M" (default) or "F",
	mirroring the gender_small added at 0.20.0. Independent
	of gender_small, so the Reducer produces all four gender
	combinations MxM, MxF, FxF, FxM. With "F" the large port
	is a tapped socket: the large body extends solid to the
	open port and an internal bspp_threaded_rod (orient
	DOWN) of depth thread_length_large is subtracted from
	it. _reducer branches on gender_large in three places
	mirroring the gender_small branches: large body length,
	large male-thread presence, large female-socket
	presence. All pre-0.20.0 Reducer() calls are unchanged.
	New "fxf" render-dispatch variant.

	* Models/Makefile.am (RENDER_VARIANTS): added the
	Reducer:fxf entry, generating render-Reducer-fxf and its
	hemisphere / sphere variants.

	Taxonomy Glossary repair:

	* Doc/Taxonomy.org: restored the "* Glossary" top-level
	heading, its <<glossary>> anchor, and the opening line
	of its description. These three lines were lost when the
	Facet Audit against ISO 12006-2 and UniClass 2015
	section was inserted at iteration 0.17.0, which left the
	Glossary subsections silently re-nested under the audit
	section and a dangling [[glossary]] link in
	DevelopmentStandard.org. The Glossary is again a
	top-level section and the cross-reference resolves.

	Documentation:

	* Doc/FutureResearch.org: the G-05 Reducer FxF variant
	entry marked DONE; the per-port variant space entry
	updated to record the Reducer gender axis as fully
	covered (all four of MxM, MxF, FxF, FxM).

	* VERSION: bumped to 0.21.0.

2026-05-17  Peter Felecan  <peter@felecan.example>

	Iteration 0.20.0. The first gender-axis variant: the
	Reducer reducing bushing (M large x F small). A
	render-help discoverability fix and verification of the
	development OpenSCAD in the assistant environment round
	out the iteration. No new geometry class, no taxonomy
	change.

	Project-author timestamp: [2026-05-17 Sun 11:11].

	Reducer reducing bushing:

	* Models/G05_Reducer/Reducer.scad (Reducer, _reducer):
	New gender_small parameter, "M" (default, the unchanged
	MxM reducer) or "F" (the reducing bushing). With "F" the
	small port is a tapped female socket: the small body
	extends solid to the open port and an internal
	bspp_threaded_rod of depth thread_length_small is
	subtracted from it, the Cap.scad idiom. The large port
	is always male. _reducer branches on gender_small in
	three places: small body length, male-thread presence,
	female-socket presence. All pre-0.20.0 Reducer() calls
	are unchanged. New "bushing" render-dispatch variant.

	Render pipeline:

	* Models/Makefile.am (help): the render-variant section
	of "make help" now prints the turntable, hemisphere, and
	sphere target for each variant with frame counts,
	matching the per-model section. No target added --- all
	three coverage modes were already generated by
	render_variant_rules since 0.18.0.

	* Models/Makefile.am (RENDER_VARIANTS): added the
	Reducer:bushing entry, generating render-Reducer-bushing
	and its hemisphere / sphere variants.

	Documentation:

	* Doc/DevelopmentStandard.org: a note added to the
	coverage-mode guidance --- the reducing tee and reducing
	cross keep their geometry class's coverage mode (the
	reducing tee still needs sphere, the reducing cross
	still allows hemisphere).

	* Doc/FutureResearch.org: the G-05 Reducer
	reducing-bushing entry marked DONE; the FxF entry
	updated to point to the 0.20.0 bushing as its template;
	the per-port variant space entry updated to record the
	first gender-axis move.

	* VERSION: bumped to 0.20.0.

2026-05-17  Peter Felecan  <peter@felecan.example>

	Iteration 0.19.0. Reducing fittings: the reducing tee
	and the reducing cross. No new geometry class, no
	taxonomy change. Each branching fitting gains an
	independent branch-port size --- the first moves into
	the per-port variant space named by the 0.17.0 facet
	audit, along its size axis.

	Project-author timestamp: [2026-05-17 Sun 10:04].

	Reducing tee:

	* Models/G03_Tee/Tee.scad (Tee, _tee): New size_branch
	parameter for the branch port C, defaulting to undef ->
	size (equal tee). New companion parameters
	thread_length_branch, arm_length_branch, arm_od_branch,
	bore_branch, each undef -> size_branch-derived. The
	branch thread, bore, arm length, and arm OD all follow
	size_branch. The branch arm OD is clamped via
	min(branch_od, run_od) so a branch wider than the run
	still yields a sound body junction. All pre-0.19.0
	Tee() calls are unchanged. New "reducing" render-
	dispatch variant.

	Reducing cross:

	* Models/G04_Cross/Cross.scad (Cross, _cross): Same
	parameter set as the reducing tee. The cross reduces as
	a pair --- the run ports A and B (X axis) keep size, the
	branch ports C and D (Z axis) take size_branch. The
	vertical body cylinder stays centred at the origin (the
	branch arms remain symmetric about the XY plane). New
	"reducing" render-dispatch variant.

	Render pipeline:

	* Models/Makefile.am (RENDER_VARIANTS): Added
	Tee:reducing and Cross:reducing entries, generating the
	render-Tee-reducing and render-Cross-reducing targets.

	Documentation:

	* Doc/Taxonomy.org: the G-04 Cross entry in the Geometry
	Facet enumeration now links to its glossary term
	([[term-cross][Cross]]), matching its sibling entries.

	* Doc/FutureResearch.org: the G-03 Tee reducing-variant
	and G-04 Cross reducing-variant entries marked DONE; the
	per-port variant space entry updated to record the first
	moves along the size axis.

	* VERSION: bumped to 0.19.0.

2026-05-16  Peter Felecan  <peter@felecan.example>

	Iteration 0.18.0. Render-pipeline infrastructure. No new
	model, no taxonomy change. Adds a string-keyed
	render-dispatch mechanism so the render pipeline can
	target a named variation of a model --- the Union's
	exploded view in particular --- closing a residual item
	from iteration 0.17.0. Implements the project author's
	own proposal: a dispatch module switched by a variable
	set on the OpenSCAD command line with -D.

	Project-author timestamp: [2026-05-16 Sat 19:54].

	Render-dispatch in the model library:

	* Models/Util/util.scad (bsppfit_is_variant): New. A
	whole-string list-membership test, used to validate a
	requested render variant. A list comprehension, not
	search() --- OpenSCAD's search() with a string
	match-value walks the string character by character.

	* Models/G01_Straight/Nipple.scad,
	Models/G02_Elbow/Elbow.scad, Models/G03_Tee/Tee.scad,
	Models/G04_Cross/Cross.scad,
	Models/G05_Reducer/Reducer.scad,
	Models/G06_CapPlug/Cap.scad, Models/G06_CapPlug/Plug.scad,
	Models/G07_Union/Union.scad,
	Models/G08_HexBush/HexBush.scad,
	Models/G09_HoseTail/HoseTail.scad (<Model>_Render): New
	render-dispatch module in every model file, plus a
	top-level "render" string knob. The file's active
	top-level statement is now a single <Model>_Render()
	call. Each dispatch validates the requested variant
	(function-assert pattern) and switches to the matching
	module call. Every model recognises "default" and
	"gallery"; Union additionally recognises "exploded",
	"tail-a", "tail-b", "nut".

	Render pipeline:

	* bin/render-views (main, render_one_frame): New
	--render-variant NAME option. Adds -D render="NAME" to
	every OpenSCAD invocation. extra_args is appended before
	the positional .scad file, which is kept strictly last
	--- OpenSCAD's --render can otherwise consume the
	filename token.

	* Models/Makefile.am (RENDER_VARIANTS,
	render_variant_rules, help): New. Generates a
	render-<Model>-<variant> target, with -hemisphere /
	-sphere coverage suffixes, for each RENDER_VARIANTS
	entry. A variant render's output carries the
	<Model>-<variant> filename stem. "make help" lists the
	variant targets.

	Documentation:

	* Doc/DevelopmentStandard.org: New sections Render
	Dispatch Module (under OpenSCAD Project Standards) and
	Render Variant Selection (under Model Rendering
	Pipeline).

	* Models/LibraryOverview.org: render-dispatch added to
	the model-file conventions.

	* Doc/man/render-views.1: --render-variant documented; an
	EXAMPLES entry for the exploded-view render added.

	* Doc/FutureResearch.org: the iteration-0.17.0 residual
	item --- the render pipeline could not target the
	exploded view automatically --- marked resolved.

	* VERSION: bumped to 0.18.0.

2026-05-16  Peter Felecan  <peter@felecan.example>

	Iteration 0.17.1. Patch iteration. No model or taxonomy
	change. Hardens project continuity across working-session
	boundaries and records two corrections of assistant
	errors. Triggered by the project author hitting the
	per-conversation uploaded-file limit and asking what must
	be provided to resume the project in a new session
	without loss of state.

	Project-author timestamp: [2026-05-16 Sat 15:19].

	New document:

	* Doc/Resuming.org: new file. States how to continue
	BSPPFit in a new working session with no loss of state:
	the two essential uploads (BOSL2-master.zip and the
	latest BSPPFit-X.Y.Z.tar.xz delivery archive), the
	recommended transcript uploads, the principle that the
	delivery archive is self-describing, and start-of-session
	and end-of-session checklists.

	* Doc/Makefile.am: Resuming.org added to DOC_FILES (so it
	builds to PDF and HTML); transcript-catalog.txt added to
	EXTRA_DIST.

	New archive artifact:

	* Doc/transcript-catalog.txt: new file. A copy of the
	assistant environment's past-session transcript-summary
	catalogue, distributed inside the delivery archive so its
	information survives session boundaries (the live
	catalogue is an assistant-environment artifact a new
	session may not have).

	* Doc/Index.org: new "Project continuity" section linking
	Resuming.org and mentioning transcript-catalog.txt.

	Corrections recorded:

	* Doc/FutureResearch.org: new entry "Assistant lost track
	of where bspp_threaded_rod is defined --- corrected
	0.17.1". The assistant had wrongly recorded, in working
	notes during 0.15.0--0.17.0, that bspp_threaded_rod was
	not a BOSL2 module. It is defined in BOSL2's
	threading.scad (function + module pair), taking a
	fractional-inch size looked up in BOSL2's bspp_dimensions
	table. The 0.17.0 Union code is correct against the real
	signature; no .scad file changed this iteration. The
	error, caused by searching a guessed subset of BOSL2
	files, is recorded with the lesson: grep the whole BOSL2
	tree.

	* Doc/FutureResearch.org: new entry "BSPP size range: the
	project table, the BOSL2 table, and ISO 228-1". The
	0.17.0 claim that a G2 union has no wider BSPP coupling
	size implied an inherent ceiling; the accurate account
	distinguishes ISO 228-1 (sizes well beyond G2), the
	project's deliberate G1/8..G2 table, and BOSL2's
	bspp_dimensions table (1/16..2, the operative ceiling for
	a renderable thread). The 0.17.0 Union coupling-thread
	entry's residual item updated to point at the new entry.

	* Doc/ResearchJournal.org: new 2026-05-16 iteration-0.17.1
	entry prepended, recording the project-author input, the
	two corrections, the new continuity documents, and honest
	disclosures.

	Project files:

	* VERSION: 0.17.0 -> 0.17.1.

	* NEWS: 0.17.1 release note prepended.

	* ChangeLog: This entry.


2026-05-16  Peter Felecan  <peter@felecan.example>

	Iteration 0.17.0. Minor iteration. Two strands:
	Union refinements prompted by detailed project-author
	feedback, and the §24.3.4 facet audit against ISO
	12006-2 and UniClass 2015. No new geometry class; the
	headline Phase 1 aggregate is unchanged.

	Project-author timestamp: [2026-05-16 Sat 14:46].

	Union: BSPP coupling thread.

	* Models/G07_Union/Union.scad: the nut-to-collar
	coupling joint is now a real BSPP thread. The 0.16.0
	Union used a generic 1.5 mm-pitch vee thread (BOSL2
	threaded_rod with a hand-chosen pitch); the project
	author supplied a PVC-Welt catalogue description of a
	brass coupling union confirming the union ring nut's
	thread is BSP pipe thread per ISO 228-1. Tail A's
	collar now uses bspp_threaded_rod (external); the ring
	nut's internal thread uses bspp_threaded_rod(internal
	= true).

	Union: coupling_size parameter.

	* Models/G07_Union/Union.scad: new parameter on
	union_tail_a, union_tail_b, union_nut, and the Union
	wrapper. It is the BSPP size of the coupling thread,
	settable independently of the union's pipe size for
	heterogeneous piping. Default resolved by a new
	private function _union_default_coupling_size, which
	returns the smallest BSPP catalogue size whose major
	diameter clears the plain body OD (for a G1/2 union,
	G3/4). The coupling thread must be wider than the body;
	for a G2 union no wider standard size exists, so the
	default clamps to G2.

	The _union_resolve record was reworked: the
	gUR_COUPLING_D / gUR_COUPLING_PITCH pair (diameter and
	pitch for the old generic thread) became
	gUR_COUPLING_SIZE / gUR_COUPLING_OD (a BSPP size and
	its major diameter). All collar, nut, and lip
	dimensions now derive from the coupling thread's BSPP
	major diameter.

	Union: Union_Exploded module.

	* Models/G07_Union/Union.scad: new module Union_Exploded,
	which calls Union with a non-zero explode gap defaulting
	to a size-proportional value. Added in response to the
	project author's observation that the exploded rendering
	needs a module of its own rather than hand-placed piece
	calls. The render pipeline still renders a .scad file's
	top-level statement, so a make render-Union-exploded
	target remains a queued render-pipeline enhancement.

	The Union PURPOSE header's F-03 thread-form note
	updated: the coupling joint is now described as a BSPP
	thread, not a separate non-BSPP thread.

	Facet audit.

	* Doc/Taxonomy.org: new section "Facet Audit against ISO
	12006-2 and UniClass 2015", placed before the Glossary.
	Audits the empirically-chosen facets F-01 through F-08
	against ISO 12006-2 (the meta-framework) and UniClass
	2015 (its eleven-table realisation).

	Result: the facets are sound; no renumbering, no facet
	removal. Seven clarifications, the most consequential
	being: BSPPFit is a deep single-product-class taxonomy
	whose facets are properties inside UniClass Products
	(Pr), not table-level peers of UniClass's eleven tables;
	and F-02 Gender, F-03 Thread form, F-04 Nominal size are
	per-port facets indexed against a port schema that F-01
	Geometry fixes --- which names the project's
	combinatorial variant space precisely.

	* Doc/FutureResearch.org: the "Facet audit against ISO
	12006-2 and UniClass 2015" task marked DONE with a
	closure subsection. The Union exploded-view, cone-seat,
	and female/mixed-gender entries updated for the 0.17.0
	refinements. New entry "G-07 Union: BSPP coupling
	thread --- DONE at 0.17.0". New entry "Per-port variant
	space (named by the 0.17.0 facet audit)". The
	pvc-welt.de reference-catalogue entry updated to
	ADDRESSED.

	* Doc/ResearchJournal.org: two new 2026-05-16 entries
	prepended (Phase 1 status, iteration narrative).

	Project files:

	* VERSION: 0.16.0 -> 0.17.0.

	* NEWS: 0.17.0 release note prepended.

	* ChangeLog: This entry.


2026-05-16  Peter Felecan  <peter@felecan.example>

	Iteration 0.16.0. Correction iteration. No new
	geometry class --- all nine were covered at 0.15.0.
	Instead, 0.16.0 corrects a design-philosophy error
	in the 0.15.0 Union, prompted by a project-author
	observation, and records the general principle
	behind the correction in the development standard.

	Project-author timestamp: [2026-05-16 Sat 09:25].

	The manufacturing-fidelity principle:

	* Doc/DevelopmentStandard.org (Models Are For
	Manufacturing, Not Only Rendering): new subsection
	opening the OpenSCAD Project Standards section.

	Rule: a model must include all functional geometry
	(threads, bores, clearances, seats, chamfers)
	regardless of whether that geometry is visible in
	an assembled render. Geometry must never be omitted
	on "hidden in the assembled view" grounds.

	Two corollaries recorded: multi-piece fittings are
	modelled as separate non-fused pieces, each its own
	manufacturable solid; mating pieces carry the
	print/machine clearance ($slop, or explicit
	diameter clearance) that lets them assemble.

	Prompted by the project author's correction of the
	0.15.0 Union, which omitted the internal coupling
	threads with the mistaken rationale that they are
	invisible in the assembled render. The models are
	for 3D printing and other manufacturing, not only
	for catalogue images.

	Union rewritten:

	* Models/G07_Union/Union.scad: rewritten. The
	0.15.0 version had two faults, both consequences
	of an "assembled render is all that matters"
	mindset: the three sub-bodies were boolean-fused
	into one rigid solid (a 3D print of which cannot
	function as a union --- the nut cannot turn), and
	the ring-nut-to-collar coupling threads were
	omitted (without them the nut cannot screw on).

	The 0.16.0 rewrite provides three independent,
	independently-manufacturable modules:
	- union_tail_a: threaded tail. BSPP male pipe
	thread, plain body, and a collar carrying a real
	EXTERNAL coupling thread (BOSL2 threaded_rod,
	nominal diameter arm_od + 6, pitch 1.5 mm). Inner
	face is a 60-degree conical seat recess.
	- union_tail_b: shouldered tail. BSPP male pipe
	thread, plain body, and a plain collar shoulder
	captured by the nut's inward lip. Inner face is
	the matching 60-degree conical seat protrusion.
	- union_nut: hex ring nut with a real INTERNAL
	coupling thread (a threaded_rod built with
	internal = true, removed from the hex body) and
	an inward retaining lip (a smaller-diameter bore)
	capturing tail B's collar shoulder.

	Each module renders and exports on its own for
	manufacturing. The Union wrapper positions the
	three in the assembled pose for the catalogue
	view and does NOT boolean-fuse them. A new
	explode parameter (default 0) separates the
	pieces along the Z axis for an exploded view.

	The 60-degree cone seat (shown in the reference
	section drawing union-droit-male-1-bspp-male-1-bspp.jpg)
	is modelled as a shallow conical frustum land: a
	recess on tail A, a matching protrusion on tail
	B, with the cone surface at 30 degrees to the
	axis (60-degree included angle). The frustum
	terminates at bore + 2 mm rather than running to
	a knife edge at the bore.

	A private function _union_resolve centralises the
	dimension defaulting so the three piece modules
	and the assembly wrapper cannot drift apart; it
	returns a record (a list indexed by named gUR_*
	constants).

	The Union wrapper asserts body_length,
	collar_length, and explode are in range.

	* Models/LibraryOverview.org: G07_Union tree line
	updated to "three manufacturable pieces".

	FutureResearch updates:

	* Doc/FutureResearch.org: "G-07 Union: model the
	internal coupling threads" marked DONE at 0.16.0,
	with the corrected reasoning recorded. "G-07
	Union: exploded / separated view" marked DONE
	(the explode parameter). "G-07 Union: cone-seat"
	marked DONE; the flat-gasket-seat alternative
	remains queued. New entry "Manufacturing-fidelity
	audit of all models" marked DONE: only the Union
	violated the principle; the other nine models
	(Nipple, Elbow, Tee, Cross, Reducer, Cap, Plug,
	HexBush, HoseTail) are single manufacturable
	solids with all threads and bores present and
	already comply.

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-16
	entries prepended (Phase 1 status, iteration
	narrative). Records the project-author
	correction, the reading of the 0.15.0 Union
	render, the Union rewrite, and honest
	disclosures (no end-to-end render in the
	assistant's environment; the assembly
	positioning arithmetic is the most likely defect
	site; the coupling thread is a generic vee
	thread not a standardised BSPP thread; no
	gasket; the nut is not literally captive).

	Project files:

	* VERSION: 0.15.0 -> 0.16.0.

	* NEWS: 0.16.0 release note prepended.

	* ChangeLog: This entry.


2026-05-16  Peter Felecan  <peter@felecan.example>

	Iteration 0.15.0. Minor-version bump. The 0.14.0
	HoseTail is verified by project-author render
	review. The 0.15.0 minor version adds the Union
	(G-07) --- the tenth fitting and the last of the
	nine F-01 geometry classes. With the Union
	delivered, every geometry class in the BSPPFit
	taxonomy has at least one end-to-end parametric
	model, and the Phase 1 BSP model-library
	component reaches 100%.

	Project-author timestamp: [2026-05-16 Sat 08:53].

	Union model added:

	* Models/G07_Union/Union.scad: new file. Tenth
	fitting in the library, last of the nine F-01
	geometry classes. M x M BSPP pipe union,
	modelled in its assembled state.

	First model with multi-sub-body construction.
	The Union is composed of three independently-
	defined sub-bodies: _union_end_piece (invoked
	twice --- directly for end piece B, through
	zflip() for end piece A) and _union_nut.

	Geometric layout: longitudinal axis along Z,
	seat plane (where the two end pieces meet,
	centre of the ring nut) at the origin. Each
	end piece is thread_length + body_length +
	collar_length long; the collar's seat face
	sits on z = 0. End piece A opens -Z, end piece
	B opens +Z. The ring nut is a hex prism centred
	at the origin.

	Construction of each end piece (_union_end_piece):
	- Collar: cyl of d = collar_od, the section
	inside the ring nut. Seat face on z = 0; single
	eps overhang at the +Z end into the body.
	- Plain body: cyl of d = arm_od between collar
	and thread, 2 * eps overhang on each end.
	- BSPP male thread: bspp_threaded_rod at the
	outer end.
	- Through-bore with eps overhang past the seat
	plane and past the open port.

	Construction of the ring nut (_union_nut): a
	hexagonal regular_prism centred on the seat
	plane, minus a cylindrical clearance of
	collar_od - 2 * lEps (slightly smaller than the
	collar, so the nut and collars interpenetrate
	by eps rather than sharing a coincident
	surface).

	The hidden internal threads (ring-nut-to-collar)
	are NOT modelled: in the assembled state they
	are entirely inside the nut, so modelling them
	would add geometry invisible in any external
	view. The two BSPP pipe-connection threads ARE
	modelled. The decision is documented in the
	Union.scad PURPOSE note.

	Parameters: size (default 1/2), thread_length
	(default per bsppfit_useful_thread_length),
	body_length (default 6 mm), collar_length
	(default 5 mm), arm_od (default major_od + 4 mm
	wall-safe), collar_od (default arm_od + 3 mm),
	nut_af (default collar_od + 6 mm), nut_length
	(default 2 * collar_length + 2 mm), bore
	(default per bsppfit_default_bore),
	manifold_safe (default true), tol_thread
	(default BSPPFIT_TOL_THREAD), anchor/spin/orient.

	Five asserts: body_length > 0; collar_length >
	0; collar_od > arm_od (the collar is wider than
	the body, giving the nut a shoulder to capture);
	nut_af > collar_od (the hex nut material
	surrounds the collars); nut_length >= 2 *
	collar_length (the nut covers both collars);
	bore non-negative and at most the BSPP minor
	diameter. bsppfit_warn_wall_raised on arm_od.

	Attachable bounding box: cylinder with d =
	max(nut hex circumdiameter, collar_od), l =
	overall length.

	BOSL2 idioms used throughout: regular_prism for
	the hex nut (as in the HexBush), cyl with
	default UP orient and up()/down() positioning,
	zflip() to mirror end piece A.

	* Models/G07_Union/Union_Gallery(): new module.
	Renders all supported BSPP sizes side by side.

	* Models/Makefile.am: Union registered in three
	places (EXTRA_DIST, RENDER_MODELS,
	render_model_rules invocation). Make targets
	generated: render-Union, -hemisphere, -sphere,
	and the deprecated -mp4 alias.

	* Models/LibraryOverview.org: tree diagram and
	Status section updated. G07_Union line updated
	from "(planned)" to actual content. Status text
	updated to record the ten-fitting, all-nine-
	geometry-classes milestone.

	Phase 1 geometry-class coverage complete:

	With the Union, all nine F-01 geometry classes
	(G-01 Straight through G-09 Hose Tail) have at
	least one end-to-end parametric model. The
	Phase 1 BSP-3D-model-library component is at
	100%.

	FutureResearch updates:

	* Doc/FutureResearch.org (G-09 Hose Tail: 0.14.0
	implementation): new entry. Marked VERIFIED at
	0.15.0.

	* Doc/FutureResearch.org (G-07 Union: model the
	hidden internal threads): new entry. Deferred
	until an exploded-view feature motivates it.

	* Doc/FutureResearch.org (G-07 Union: exploded /
	separated view): new entry. An explode
	parameter is queued; the sub-body helpers are
	written to support it.

	* Doc/FutureResearch.org (G-07 Union: cone-seat
	vs flat-gasket-seat variant): new entry.

	* Doc/FutureResearch.org (G-07 Union:
	female-port and mixed-gender variants): new
	entry.

	* Doc/FutureResearch.org (Reference catalogue
	for the §24.3.4 facet audit: pvc-welt.de): new
	entry. Records the project-author's observation
	that pvc-welt.de is a good taxonomy reference
	and queues its catalogue structure as a
	concrete cross-check for the facet audit.

	Research journal:

	* Doc/ResearchJournal.org: two new entries
	prepended, dated 2026-05-16 (Phase 1 status,
	iteration narrative). Records the project-
	author timestamp, the reading of the 0.14.0
	HoseTail sphere render (two sample frames
	confirming the shark-fin barb direction), the
	pvc-welt.de taxonomy-reference observation, the
	Union design choices (assembled not exploded;
	hidden internal threads omitted; multi-sub-body
	construction; the nut-collar interpenetration
	sign), and honest disclosures (no end-to-end
	render in the assistant's environment; the
	Union resembles a hex nipple in the assembled
	view; the default equal union is in fact
	XY-mirror-symmetric but classified as needing
	sphere coverage as a conservative default to
	avoid the 0.13.0 coverage-mode-misclassification
	mistake; multi-sub-body construction is new).

	Project files:

	* VERSION: 0.14.0 -> 0.15.0.

	* NEWS: 0.15.0 release note prepended.

	* ChangeLog: This entry.


2026-05-15  Peter Felecan  <peter@felecan.example>

	Iteration 0.14.0. Minor-version bump. The 0.13.0
	Reducer is verified by project-author render
	review. The project-author's upload of /both/
	turntable and sphere coverage of the Reducer
	surfaced an error in the 0.13.0 coverage-mode-
	per-symmetry guidance: the assistant had
	classified the Reducer as "turntable suffices"
	because of its rotational symmetry about Z, but
	the two ends differ and sphere coverage is
	needed to see both end faces. The 0.14.0
	minor version adds the HoseTail (G-09) and
	corrects the coverage-mode guidance.

	Project-author timestamp: [2026-05-15 Fri 21:29].

	HoseTail model added:

	* Models/G09_HoseTail/HoseTail.scad: new file.
	Ninth fitting in the library. BSPP male thread
	on one end, barbed cone (Christmas-tree shark-
	fin pattern) on the other end. First model
	with no thread on one end.

	Second model using BOSL2's cyl(d1=..., d2=...,
	l=...) frustum form (after the 0.13.0 Reducer);
	first model using a stacked-repeating-frustum
	pattern, with N barbs placed by a
	for (iI = [0 : barb_count - 1]) loop.

	Each barb uses orient = DOWN to flip BOSL2's
	d1-at-bottom convention so the smaller leading-
	edge diameter (d1) ends up at the +Z (hose
	tip) side and the larger trailing-edge
	diameter (d2) at the -Z (thread) side. This
	produces the shark-fin profile where pushing
	a hose on (toward -Z) is easy and pulling it
	off (toward +Z) is hard because each barb's
	sharp trailing-edge drop catches the hose's
	inner wall.

	Geometric layout: local origin at the centre
	of the overall length. Thread at -Z (opens
	toward -Z), plain body in the middle, barbs
	at +Z (barbed tip at z = +L/2). Total length
	L = thread_length + body_length + barb_count
	* barb_pitch.

	Construction:
	- Male thread at z = -L/2, anchor = BOTTOM,
	default orient = UP. Spans z in [-L/2, -L/2
	+ thread_length].
	- Plain body cylinder of d = arm_od, length
	body_length + 2 * lEps, centred at the
	body's z midpoint. Eps overhang into both
	the thread (at -Z) and the first barb (at
	+Z).
	- N barbs: for each i in [0, barb_count - 1],
	a frustum with d1 = barb_minor_d, d2 =
	barb_major_d, l = barb_pitch, orient =
	DOWN, centred at z = barbs_start + (i +
	0.5) * barb_pitch. Adjacent barbs BUTT
	cleanly with NO eps overhang (different
	from every other interface in the library;
	the reason is documented inline).
	- Through-bore: single straight cylinder of
	d = bore, length L + 2 * lEps, centred at
	origin. Hose tails have uniform bore from
	thread to tip.

	Parameters: size (default 1/2), thread_length
	(default per bsppfit_useful_thread_length),
	body_length (default 8 mm), barb_count
	(default 4), barb_pitch (default 4 mm),
	barb_minor_d (default major_od + 1 mm =
	21.96 mm for G1/2), barb_major_d (default
	barb_minor_d + 2 mm = 23.96 mm), arm_od
	(default max(major_od + 4, barb_major_d) =
	24.96 mm), bore (default per
	bsppfit_default_bore), manifold_safe (default
	true), tol_thread (default
	BSPPFIT_TOL_THREAD), anchor/spin/orient.

	Six asserts: barb_count >= 1; barb_pitch > 0;
	body_length > 0; barb_major_d > barb_minor_d
	(shark-fin profile non-degenerate); arm_od >=
	barb_major_d (no negative-step body-to-barbs
	transition); bore non-negative AND at most
	minor_od AND at most barb_minor_d (bore must
	fit inside both the thread root and the
	smallest barb). bsppfit_warn_wall_raised on
	arm_od.

	Attachable bounding box: cylinder with d =
	max(arm_od, barb_major_d), l = L.

	The HoseTail needs sphere coverage per the
	corrected coverage-mode-per-symmetry guidance
	(rotationally symmetric about Z but ends
	differ: threaded port vs barbed tip).

	* Models/G09_HoseTail/HoseTail_Gallery(): new
	module. Renders all supported BSPP sizes side
	by side with default barb settings.

	* Models/Makefile.am: HoseTail registered in
	three places (EXTRA_DIST, RENDER_MODELS,
	render_model_rules invocation). Make targets
	generated: render-HoseTail, -hemisphere,
	-sphere, and the deprecated -mp4 alias.

	* Models/LibraryOverview.org: tree diagram
	and Status section updated. G09_HoseTail
	line updated from "(planned)" to actual
	content. Status text updated from "eight
	end-to-end fittings" to "nine end-to-end
	fittings"; the "remaining geometry classes"
	list reduced to just G-07 Union.

	Coverage-mode-per-symmetry guidance correction:

	* Doc/DevelopmentStandard.org (Choosing the
	coverage mode for a fitting): the 0.13.0 row
	"rotational about Z = turntable" was wrong
	for fittings with dissimilar ends. The
	corrected table distinguishes /rotational
	symmetry/ (longitude scan captures the side
	profile) from /end-similarity/ (whether the
	top face and bottom face are identical).

	New criterion: turntable suffices only when
	(a) the fitting is rotationally symmetric
	about Z /and/ (b) its two ends are
	identical. Only Nipple (M x M same size on
	both ports) and Cross (mirror through XY
	plane) satisfy both; everything else needs
	sphere coverage.

	Driven by project-author observation at
	this iteration ("IMHO turntable render is
	not sufficient for the reducer but I load
	also the turntable to compare and decide
	if it was really enough, maybe I'm wrong").

	FutureResearch updates:

	* Doc/FutureResearch.org (G-05 Reducer:
	0.13.0 implementation): new entry. Marked
	VERIFIED at 0.14.0. Records the project-
	author's two-mode render upload and the
	coverage-mode insight that triggered the
	0.14.0 guidance correction.

	* Doc/FutureResearch.org (G-05 Reducer:
	hexagonal-body variant): existing entry
	strengthened with the HTC dimensioned
	drawing MF0205_Zeichnung.jpg as direct
	commercial reference for the variant
	(dimensions A overall, L1/L2 thread
	lengths, B/C major diameters, S_W wrench
	size).

	* Doc/FutureResearch.org (G-09 Hose Tail:
	hex-body variant): new entry. Commercial
	hose tails commonly have a hex flange
	between the thread and the barbs.

	* Doc/FutureResearch.org (G-09 Hose Tail:
	female-thread variant (FxBarb)): new
	entry. The 0.14.0 HoseTail is M x Barb.

	* Doc/FutureResearch.org (G-09 Hose Tail:
	alternative barb profiles): new entry.
	The 0.14.0 uses simple shark-fin;
	commercial variations include multiple
	rings per barb or reverse-tapered tip.

	* Doc/FutureResearch.org (G-09 Hose Tail:
	shouldered body-to-barbs transition): new
	entry. The 0.14.0 constrains arm_od >=
	barb_major_d; the relaxed variant adds a
	frustum transition.

	Research journal:

	* Doc/ResearchJournal.org: two new
	2026-05-15 entries prepended (Phase 1
	status, iteration narrative). Records the
	project-author timestamp, the reading of
	the 0.13.0 Reducer turntable and sphere
	renders (three sample frames inspected
	confirming the geometry is correct), the
	coverage-mode misclassification at 0.13.0
	and its correction at 0.14.0, the
	HoseTail design choices (local origin
	centred on overall length; barb profile
	direction; barbs-butt-without-eps-overhang
	rationale; default barb_minor_d slightly
	larger than thread major OD), and honest
	disclosures (no end-to-end render in the
	assistant's environment; the barb orient
	= DOWN trick is new; barbs butt by design;
	conservative arm_od default; uniform
	bore; the 0.13.0 coverage-mode error was
	a real error not a misunderstanding).

	Project files:

	* VERSION: 0.13.0 -> 0.14.0.

	* NEWS: 0.14.0 release note prepended.

	* ChangeLog: This entry.


2026-05-15  Peter Felecan  <peter@felecan.example>

	Iteration 0.13.0. Minor-version bump. The 0.12.x
	line closed with the Cross (G-04) added and
	verified by project-author render review. The
	0.13.0 minor version opens by adding the Reducer
	(G-05) --- the first fitting in the library with
	per-port size variation --- and by formalising
	symmetry-driven coverage-mode guidance.

	Project-author timestamp: [2026-05-15 Fri 21:00].

	Reducer model added:

	* Models/G05_Reducer/Reducer.scad: new file.
	Eighth fitting in the library. M x M BSPP
	reducer with two threaded ports of different
	nominal sizes connected by a tapered conical
	transition.

	First model with per-port size variation: the
	two ports have independent size, thread_length,
	arm_length, arm_od, and bore values. Parameter
	naming uses _large / _small suffixes.

	First model using BOSL2's cyl(d1=..., d2=...,
	l=...) frustum form. Verified against the
	BOSL2 source shapes3d.scad:2518 that the
	module signature accepts both d1 and d2.

	Geometric layout: longitudinal axis along Z,
	large port at z = -arm_length_large (opens
	-Z), small port at z = +arm_length_small
	(opens +Z), transition frustum centred at the
	origin spanning z in [-transition_length/2,
	+transition_length/2].

	Construction:
	- Outer body: three sections along Z. Large
	cylindrical body (cyl with d = arm_od_large,
	l = lLargeBody + 2 * lEps, positioned at
	lLargeBodyCentreZ); conical frustum (cyl with
	d1 = arm_od_large, d2 = arm_od_small,
	l = transition_length + 2 * lEps, centred at
	origin); small cylindrical body (mirror of
	large). Plus two threaded rods at the open
	ends (large at z = -arm_length_large with
	orient = DOWN; small at z = +arm_length_small
	with orient = UP).
	- Through-bore: three sections mirroring the
	outer body. Large bore cylinder (d =
	bore_large, length to the large port with
	eps overhang and to the bore-frustum start);
	bore frustum (d1 = bore_large at -Z, d2 =
	bore_small at +Z, same z-extent as the outer
	frustum); small bore cylinder.

	Parameters: size_large (default 1/2),
	size_small (default 3/8), thread_length_large
	/ thread_length_small (defaults per
	bsppfit_useful_thread_length), arm_length_large
	/ arm_length_small (defaults thread_length +
	transition_length/2 + arm_od/2 + 1.5 mm),
	arm_od_large / arm_od_small (defaults
	major_od + 4 mm wall-safe), bore_large /
	bore_small (defaults per
	bsppfit_default_bore), transition_length
	(default 5 mm), manifold_safe (default true),
	tol_thread (default BSPPFIT_TOL_THREAD),
	anchor/spin/orient.

	Asserts: size_large > size_small;
	arm_length_large >= thread_length_large +
	transition_length/2 (and likewise for small);
	transition_length > 0; bore_large > bore_small
	(the reducer steps DOWN in bore); each bore
	at most the corresponding minor_od.
	bsppfit_warn_wall_raised invoked for both
	arm_ods.

	Attachable bounding box: cube with X-extent
	and Y-extent = max(arm_od_large, arm_od_small),
	Z-extent = arm_length_large + arm_length_small.

	BOSL2 idioms used throughout per the
	established 0.11.0 expanded standard:
	up/down directional transforms rather than
	translate; cyl with default UP orient and
	per-axis positioning; cyl with d1/d2 for the
	frustums.

	* Models/G05_Reducer/Reducer_Gallery(): new
	module. Renders five representative
	reductions side by side (1/4->1/8, 1/2->3/8,
	3/4->1/2, 1->1/2, 2->1) rather than
	iterating over a single size axis (the
	Reducer has no single-axis iteration like
	the Tee/Cross galleries because it is a
	pair of sizes).

	* Models/Makefile.am: Reducer registered in
	three places (EXTRA_DIST, RENDER_MODELS,
	render_model_rules invocation). Make
	targets generated: render-Reducer,
	-hemisphere, -sphere, and the deprecated
	-mp4 alias.

	* Models/LibraryOverview.org: tree diagram
	and Status section updated. G05_Reducer
	line updated from "(planned)" to actual
	content. Status text updated from "seven
	end-to-end fittings" to "eight end-to-end
	fittings".

	Coverage-mode-per-symmetry guidance:

	* Doc/DevelopmentStandard.org (Choosing the
	coverage mode for a fitting): new sub-section
	under § Model Rendering Pipeline / Coverage
	modes. Tabulates each fitting's symmetry
	group and the minimum coverage mode that
	captures all the geometric information.

	Driven by project-author question at this
	iteration ("is the hemisphere sufficient for
	this symmetrical fitting or should I send you
	spherical renderings always?"). The answer
	("hemisphere is sufficient for the Cross
	because of its XY-plane mirror symmetry")
	generalises to a table covering all eight
	fittings in the library. Upload protocol:
	project author sends the minimum coverage;
	sending more wastes tarball size and render
	time without adding information.

	FutureResearch updates:

	* Doc/FutureResearch.org (G-04 Cross: 0.12.0
	implementation): new entry. Marked VERIFIED
	at 0.13.0. Project-author verdict ("seem
	correct for this phase") captured. Pointer
	to the new Coverage-mode-per-symmetry
	guidance included.

	* Doc/FutureResearch.org (G-05 Reducer:
	reducing-bushing variant (MxF)): new entry.
	The 0.13.0 Reducer is M x M; the reducing
	bushing has one male and one female port.
	Effort estimated: half a day.

	* Doc/FutureResearch.org (G-05 Reducer: FxF
	variant): new entry. Less commercially
	common.

	* Doc/FutureResearch.org (G-05 Reducer:
	hexagonal-body variant): new entry.
	Parameter body_shape defaulting to "round"
	with "hex" as the alternative, parallel to
	the Nipple's middle_shape parameter.

	Research journal:

	* Doc/ResearchJournal.org: two new
	2026-05-15 entries prepended (Phase 1
	status, iteration narrative). Records the
	project-author timestamp, the reading of
	the 0.12.0 Cross hemisphere render (three
	sample frames confirming the geometry is
	commercially correct), the hemisphere-vs-
	sphere question and its symmetry-driven
	answer, the Reducer design choices (centre
	at frustum centre rather than at port
	midpoint; bore stepped to match commercial
	brass; default reduction one BSPP step;
	parameter naming _large / _small over
	_a / _b or _in / _out), and honest
	disclosures.

	Project files:

	* VERSION: 0.12.0 -> 0.13.0.

	* NEWS: 0.13.0 release note prepended.

	* ChangeLog: This entry.


2026-05-15  Peter Felecan  <peter@felecan.example>

	Iteration 0.12.0. Minor-version bump. The 0.11.x
	patch line closed with the Tee defect-fix
	(0.11.1) verified by project-author render
	review. The 0.12.0 minor version opens by
	adding the Cross (G-04) and by formalising the
	side-by-side review discipline that the 0.11.0
	Tee defect revealed was missing.

	Project-author timestamp: [2026-05-15 Fri 15:48].

	Cross model added:

	* Models/G04_Cross/Cross.scad: new file.
	Seventh fitting in the library. 4 x M BSPP
	Cross with four perpendicular arms meeting at
	a central junction.

	Geometric layout: port A at -X, port B at +X
	(colinear run), port C at +Z, port D at -Z
	(colinear branches). All four ports share the
	same nominal size; reducing crosses are
	queued in FutureResearch.org.

	Construction:
	- Outer body: union of two perpendicular
	centred cylinders. Horizontal body along X
	(cyl orient = RIGHT, l = 2 * lPlain + 2 *
	lEps); vertical body along Z (default orient
	UP, same length). lPlain = arm_length -
	thread_length, mirroring the Tee's lPlain.
	The 2 * eps overhang on each endcap prevents
	coplanar faces at the body-thread interface.
	- Four threaded rods at the open ends, each
	with anchor=TOP and the corresponding orient:
	thread A at left(arm_length) with orient=LEFT;
	thread B at right(arm_length) with
	orient=RIGHT; thread C at up(arm_length) with
	orient=UP; thread D at down(arm_length) with
	orient=DOWN.
	- Through-bore: union of two centred bore
	cylinders, each of length 2 * arm_length + 2 *
	lEps, forming a + cross-section channel at
	the junction.

	Symmetric construction: the Cross is simpler
	in code than the Tee despite having one more
	port, because both body cylinders take the
	same form (centred). The Tee has an
	asymmetric branch body that the Cross does
	not need.

	Parameters: same as Tee (size with default
	1/2, thread_length, arm_length with default
	thread_length + arm_od/2 + 1.5 mm, arm_od
	with default major_od + 4 mm wall-safe, bore
	with default per bsppfit_default_bore,
	manifold_safe with default true, tol_thread
	with default BSPPFIT_TOL_THREAD,
	anchor/spin/orient).

	Asserts: same three as Tee (arm_length >=
	arm_od/2 + thread_length; bore >= 0; bore <=
	minor_od); bsppfit_warn_wall_raised on
	arm_od.

	Attachable bounding box: cube [2 * arm_length,
	arm_od, 2 * arm_length]. Custom anchor list
	naming the four port faces queued in
	FutureResearch.org (same refinement that
	Elbow and Tee need).

	BOSL2 idioms used throughout per the
	established 0.11.0 expanded standard: cyl
	with orient parameter rather than rotate-
	wrapping; left/right/up/down directional
	transforms rather than translate.

	* Models/G04_Cross/Cross_Gallery(): new
	module. Renders all supported BSPP sizes side
	by side.

	* Models/Makefile.am: Cross registered in
	three places (EXTRA_DIST, RENDER_MODELS,
	render_model_rules invocation). Make targets
	generated: render-Cross, render-Cross-
	hemisphere, render-Cross-sphere, and the
	deprecated render-Cross-mp4 alias.

	* Models/LibraryOverview.org: tree diagram
	and Status section updated. G04_Cross line
	updated from "(planned)" to actual content.
	Model count text updated from "six end-to-
	end fittings" to "seven end-to-end
	fittings".

	Side-by-Side Body-Thread Length Review:

	* Doc/DevelopmentStandard.org (Side-by-Side
	Body-Thread Length Review): new sub-section
	under § Programming Source Code / OpenSCAD
	Specific Conventions, between BOSL2 Idiom
	Preference and Teardrop Holes. Codifies the
	discipline the assistant should have applied
	at 0.11.0 Tee review.

	Rule: before delivering a new fitting that
	combines a body cylinder with one or more
	threaded ports, the assistant tabulates the
	body-cylinder length expressions of every
	existing fitting in the library alongside
	the new fitting's, and confirms the new
	entry follows the established pattern.

	The pattern: body cylinder occupies the PLAIN
	section of the arm (junction to thread
	start), with an eps overhang on each endcap
	into the adjacent thread's volume. Skipping
	the body-trim step (as the 0.11.0 Tee did)
	leaves the thread covered by the body and
	produces the missing-thread defect.

	Practical form: a comment block in the new
	fitting's _implementation module includes a
	table with one row per existing fitting. The
	0.12.0 Cross is the first model written
	under this discipline; its _cross module
	contains the inaugural example of the
	table.

	FutureResearch updates:

	* Doc/FutureResearch.org (G-03 Tee: missing
	threads on all three ports): new entry
	marked FIXED at 0.11.1, VERIFIED at 0.12.0.
	Project-author verification quote ("now the
	tee is correct, with threads for a M x M x M
	version") captured. Pointer to the new
	DevelopmentStandard subsection included.

	* Doc/FutureResearch.org (G-04 Cross: swept-
	junction refinement): new entry queued
	alongside the existing G-03 Tee swept-Y
	refinement.

	* Doc/FutureResearch.org (G-04 Cross:
	reducing variant): new entry queued
	alongside the existing G-03 Tee reducing
	variant.

	* Doc/FutureResearch.org (Elbow attachable
	bounding-box refinement): entry extended to
	mention the 0.12.0 Cross (four named port
	anchors).

	Research journal:

	* Doc/ResearchJournal.org: two new
	2026-05-15 entries prepended (Phase 1
	status, iteration narrative). Records the
	project-author timestamp, the reading of
	the 0.11.1 Tee sphere render (two sample
	frames inspected confirming the threads
	defect is resolved), the choice-of-iteration-
	content reasoning (Cross over Reducer over
	tech-debt over pure-process for the reasons
	documented), the side-by-side review table
	used during Cross construction (tabulating
	Nipple, Elbow A, Elbow B, Tee run, Tee
	branch, Cross X, Cross Z), the thread
	orientation table for the Cross's four
	ports, honest disclosures (no end-to-end
	render in the assistant's environment;
	Cross.scad is the first model written under
	the new review discipline; symmetry is a
	help not a hazard), and next-iteration
	options (Reducer next, then HoseTail or
	Union).

	Project files:

	* VERSION: 0.11.1 -> 0.12.0.

	* NEWS: 0.12.0 release note prepended.

	* ChangeLog: This entry.


2026-05-15  Peter Felecan  <peter@felecan.example>

	Iteration 0.11.1. Defect-fix patch. The 0.11.0
	Tee shipped with the threads on all three
	ports geometrically present but visually
	hidden: the body cylinders were sized to the
	full arm_length, and because the thread OD is
	smaller than the body OD by design
	(bsppfit_major_od is approximately 20.96 mm
	versus arm_od = 24.96 mm for G1/2), the body
	covered the threads. Project-author noticed
	this on first render of the 0.11.0 delivery
	("seem alright from my standpoint with the
	exception of the missing threading") and asked
	whether the 0.11.0 Tee was M x M x M or
	F x F x F --- the intent at 0.11.0 was
	always M x M x M (docstring F-02 Gender
	declaration is explicit), so the ambiguity was
	a consequence of the missing-thread defect
	rather than an underspecified docstring.

	Project-author timestamp: [2026-05-15 Fri 15:27].

	Tee thread fix:

	* Models/G03_Tee/Tee.scad (_tee): single
	conceptual change with three code edits. New
	local lPlain = arm_length - thread_length
	mirrors the Nipple's middle_length semantic:
	the plain-cylinder length of each arm between
	the junction and the thread start.

	Run body: l changed from 2 * arm_length to
	2 * lPlain + 2 * lEps. The eps overhang on
	each end prevents coplanar faces at the
	body-thread interface (the same pattern as
	the Nipple's body, which uses
	middle_length + 2 * lEps for the same
	reason).

	Branch body: changed from l = arm_length with
	anchor = BOTTOM at z=0, to
	l = lPlain + lEps with down(lEps) +
	anchor = BOTTOM. The body now spans
	z in [-eps, lPlain] instead of
	[0, arm_length]: an eps overlap into the run
	body at the junction, the plain section up
	to the thread start.

	Bore subtraction is unchanged: the bore must
	pass through both body and thread regions in
	full, and the 0.11.0 bore lengths
	(2 * arm_length and arm_length + 2 * eps)
	were already correct.

	* Models/G03_Tee/Tee.scad (header):
	construction commentary at the top of _tee
	updated to describe the new lengths and to
	explicitly mark the 0.11.0-to-0.11.1 defect
	transition for future reviewers. The "1.
	Run cylinder" through "5. Branch thread C"
	enumeration replaced with the corrected
	lengths and a note explaining that the
	0.11.0 implementation had this defect.

	No other changes:

	The 0.11.1 iteration is intentionally
	minimal. The wrapper docstring (F-02 Gender:
	Male x Male x Male declaration), parameter
	set, attachable bounding box, assertions,
	gallery module, test area, and Makefile
	registration are all unchanged from 0.11.0.
	BOSL2 idiom usage unchanged. FutureResearch
	entries unchanged.

	Research journal:

	* Doc/ResearchJournal.org: two new
	2026-05-15 entries prepended (Phase 1
	status, iteration narrative). Records the
	project-author timestamp, the reading of
	the 0.11.0 Tee sphere render (two sample
	frames inspected showing the missing-
	thread defect), the side-by-side comparison
	of Nipple/Elbow/Tee body-thread arrangements
	that localised the bug to the Tee's body-
	cylinder lengths, the fix (lPlain local +
	two length expressions changed + eps
	overhang pattern), and honest disclosures
	(no end-to-end render in the assistant's
	environment; the fix should produce
	threads with a small body-thread shoulder
	step matching commercial reference photos;
	the defect was not caught at 0.11.0 review
	because the source review did not place
	Nipple/Elbow/Tee body-cylinder length
	expressions side-by-side).

	Project files:

	* VERSION: 0.11.0 -> 0.11.1.

	* NEWS: 0.11.1 release note prepended.

	* ChangeLog: This entry.


2026-05-15  Peter Felecan  <peter@felecan.example>

	Iteration 0.11.0. Minor-version bump. The 0.10.x
	patch line closed with the Elbow geometric rewrite
	(0.10.2) verified by project-author render review.
	The 0.11.0 minor version opens by adding the Tee
	(G-03) --- the third of the four most-common BSPP
	fitting types after the Nipple and the Elbow
	already in the library. Project-author timestamp:
	[2026-05-15 Fri 10:11].

	Tee model added:

	* Models/G03_Tee/Tee.scad: new file. Sixth
	fitting in the library. M x M x M BSPP Tee with
	three perpendicular arms meeting at a central
	junction.

	Geometric layout: run port A at -X, run port B
	at +X (colinear), branch port C at +Z. All three
	ports share the same nominal size in this
	implementation; reducing tees (different size
	on the branch) are queued in FutureResearch.org.

	Construction:
	- Outer body: union of three perpendicular
	cylinders. Run cylinder along X covers arms A
	and B in one primitive (length 2 * arm_length,
	cyl orient = RIGHT). Branch cylinder along +Z
	for arm C (anchor = BOTTOM, default orient =
	UP). Three threaded rods at the open ends
	(thread A at -X, thread B at +X, thread C at
	+Z), each with orient set to match.
	- Through-bore: T-shaped channel via union of
	two bore cylinders. Run bore along X (length
	2 * arm_length + 2 * eps); branch bore along
	+Z (length arm_length + 2 * eps, anchored at
	z = -eps for manifold safety overlap with run
	bore).

	Parameters: size (default 1/2), thread_length,
	arm_length (default thread_length + arm_od/2 +
	1.5 mm), arm_od (default major_od + 4 mm,
	wall-safe), bore (default per
	bsppfit_default_bore), manifold_safe (default
	true), tol_thread (default BSPPFIT_TOL_THREAD),
	anchor/spin/orient.

	Asserts: arm_length >= arm_od/2 + thread_length
	(junction body and thread do not overlap); bore
	>= 0; bore <= minor_od; bsppfit_warn_wall_raised
	on arm_od.

	Attachable bounding box: cube [2 * arm_length,
	arm_od, arm_length]. Custom anchor list naming
	the three port faces queued in
	FutureResearch.org (same refinement applies to
	the Elbow's L-shape).

	BOSL2 idioms used throughout per the expanded
	DevelopmentStandard rule (see below): cyl with
	orient parameter rather than rotate-wrapping;
	left/right/up directional transforms rather
	than translate; cuboid not used (Tee has no
	cuboid bodies, only cylinders).

	* Models/G03_Tee/Tee_Gallery(): new module.
	Renders all supported BSPP sizes side by side
	(using right(...) for spacing rather than
	translate, per the BOSL2 idiom rule).

	* Models/Makefile.am: Tee registered in three
	places: EXTRA_DIST adds G03_Tee/Tee.scad;
	RENDER_MODELS adds Tee:G03_Tee/Tee.scad; new
	render_model_rules expansion for Tee. Make
	targets generated: render-Tee, render-Tee-
	hemisphere, render-Tee-sphere, render-Tee-mp4
	(deprecated alias).

	* Models/LibraryOverview.org: tree diagram and
	Status section updated. The "early-bootstrap
	state: one fitting implemented" wording (which
	had not been updated since iteration 0.9.0)
	corrected to reflect the six end-to-end
	fittings now in the library. G02 line updated
	from "mitered elbow" to "elbow, swept bend"
	(reflecting the 0.10.2 rewrite). G03_Tee line
	updated from "(planned)" to actual content.

	BOSL2 Idiom Preference expanded:

	* Doc/DevelopmentStandard.org (BOSL2 Idiom
	Preference (positioning, rotation, primitives)):
	the existing § Programming Source Code /
	OpenSCAD Specific Conventions / BOSL2
	Positioning and Rotation Functions subsection
	is renamed and substantially expanded.

	New: general rule about preferring BOSL2 over
	OpenSCAD primitives when the BOSL2 form is "at
	least as clear and either equivalent or richer".

	New: scope clause explicitly stating that the
	rule applies to new code and to deliberate
	touches on existing code, and does not mandate
	retroactive rewrites. The 0.10.2 Elbow.scad is
	mentioned as a known violator queued for a
	future deliberate touch.

	Existing single-axis-transform examples
	preserved verbatim (xrot, yrot, zrot, right,
	left, fwd, back, up, down).

	New: primitives sub-rule preferring cuboid
	over cube and cyl over cylinder, with the
	BOSL2 attachment-system / chamfer / rounding
	features as the justification.

	New: off-axis primitive examples showing
	cyl(orient = RIGHT) over rotate-and-cyl, and
	torus(orient = BACK) over
	rotate([90, 0, 0]) torus(...). The latter is
	exactly the pattern the 0.10.2 Elbow.scad
	would use after the deferred reflow.

	BOSL2 source-access correction:

	* /tmp/BOSL2-master/ (assistant working
	environment): BOSL2 source extracted from
	/mnt/user-data/uploads/BOSL2-master.zip (which
	had been uploaded since iteration 0.9.0; the
	assistant overlooked it and issued false
	disclaimers in 0.10.0..0.10.2). Modules verified
	present: torus (shapes3d.scad:3880), cuboid
	(shapes3d.scad:204), cyl (shapes3d.scad:2518),
	xrot (transforms.scad:610), right
	(transforms.scad:242), plus the directional
	constants in constants.scad.

	The standing 0.10.2 disclaimer about "BOSL2's
	torus(or, ir) parameter-name assumption" is now
	resolved: the BOSL2 torus module accepts or,
	od, ir, id, r_maj, r_min, d_maj, d_min in any
	combination per shapes3d.scad:3880-3911.

	FutureResearch updates:

	* Doc/FutureResearch.org (Elbow geometric
	defects identified 0.9.9): updated from
	ADDRESSED at 0.10.2 to ADDRESSED at 0.10.2,
	VERIFIED at 0.11.0. Verification procedure
	documented: assistant review of four sample
	frames from the project-author-uploaded
	Elbow_sphere.tar (lon=0, lon=90, lon=180,
	lat=+30); project-author verdict ("from my
	standpoint it seems correct") cited
	verbatim.

	* Doc/FutureResearch.org (Elbow.scad: reflow
	to BOSL2 idioms): new entry. The 0.10.2
	Elbow.scad uses rotate([90,0,0]) and
	translate([..., 0, ...]) in places that would
	read more clearly as xrot(90) and right(...)
	per the iteration-0.11.0 expanded BOSL2-idiom-
	preference rule. The reflow is queued for the
	next deliberate touch on the file (e.g. when
	adding female-elbow variants or the custom
	anchor list); not done in 0.11.0 because the
	0.10.2 geometry is verified-correct and a
	no-functional-change reflow would risk
	introducing regressions.

	* Doc/FutureResearch.org (G-03 Tee: swept-Y
	junction refinement): new entry. The 0.11.0
	Tee uses three perpendicular cylinders for the
	junction; commercial cast/forged tees have a
	swept-Y geometry. Refinement queued; likely
	requires BOSL2's path_sweep along a Y-shaped
	path or a custom multi-quarter-torus
	construction.

	* Doc/FutureResearch.org (G-03 Tee: reducing
	variant): new entry. Allow different size on
	the branch port for reducing tees
	(G1/2 x G1/2 x G1/4 etc.). Parameter expansion
	to add size_run and size_branch separately,
	with a default that keeps the current
	uniform-size behaviour. Effort estimated:
	half a day.

	* Doc/FutureResearch.org (Female-female hex-
	corner elbow (F x F)): new entry. Four
	project-author-uploaded reference photos
	(femalehexcorner.jpeg, femalehexcorner1.webp,
	femalehexcorner2.webp, femalehexcorner4.webp)
	confirm this is a real commercial fitting
	pattern. The "hex corner F x F elbow" is
	plausibly a parametric variant of G-02 Elbow,
	or a distinct entry in G-02, or evidence that
	hex grip on female fittings is a cross-
	cutting facet. The placement question is
	deferred to the §24.3.4 facet audit against
	ISO 12006-2 and UniClass 2015. The 0.11.0
	library does not implement the F x F hex-
	corner variant; this is a deferral, not a
	refusal. Note that this is a different
	pattern from the 0.10.0 M x M corner_hex
	misfeature: on M x M the hex is wrong (run-
	flat surfaces of the male arms carry the
	wrench grip); on F x F the hex is correct
	(female ports have no thread-flat surfaces of
	their own).

	* Doc/FutureResearch.org (Elbow attachable
	bounding-box refinement): entry extended to
	mention the same refinement is needed for the
	new 0.11.0 Tee.

	Research journal:

	* Doc/ResearchJournal.org: two new
	2026-05-15 entries prepended (Phase 1 status,
	iteration narrative). Records the project-
	author timestamp, the BOSL2 source-access
	correction, the reading of the 0.10.2 Elbow
	sphere render (four sample frames inspected,
	verdict confirmed), the Tee design rationale
	(why three-cylinder-union over swept-Y), the
	BOSL2 idiom-preference scope question and the
	resolution (queue the Elbow reflow, apply the
	rule to new code immediately), the hex-corner
	F x F deferral, honest disclosures (no end-
	to-end render of the new Tee in the
	assistant's environment; Tee geometry
	verified by analogy with Nipple/Elbow not by
	render; BOSL2 directional constants verified
	against source; hex-corner deferral is a real
	taxonomic question), and next-iteration
	options (Cross, Reducer, Union, Hose Tail in
	priority order).

	Project files:

	* VERSION: 0.10.2 -> 0.11.0.

	* NEWS: 0.11.0 release note prepended.

	* ChangeLog: This entry.


2026-05-14  Peter Felecan  <peter@felecan.example>

	Iteration 0.10.2. Bloom-and-refine iteration:
	Elbow geometric rewrite + render pipeline gains
	tar + MP4 production in every target. Project-
	author timestamp: [2026-05-14 Thu 17:19]. The
	OpenSCAD 2025.12.09 development build rendered
	the 0.10.1 Elbow sphere in 35 seconds versus 10
	minutes for the 2021.01 system package ---
	empirical validation of the 0.10.1
	--with-openscad infrastructure.

	Elbow rewrite:

	* Models/G02_Elbow/Elbow.scad (Elbow, _elbow):
	substantially rewritten to address three
	project-author-identified defects from
	iteration 0.10.0.

	(1) corner_hex parameter REMOVED. Also removed:
	corner_hex_height, corner_hex_od. Commercial
	M x M brass elbows have smooth bodies; the hex
	was a 0.9.9 misfeature. Removal is hard (not
	deprecated) because no consumer has called
	Elbow(corner_hex=true) intentionally; any
	caller that did so will get an explicit error
	rather than silent acceptance of an outdated
	parameter.

	(2) Default arm_length formula changed from
	thread_length + 8 mm (0.10.1) to thread_length
	+ bend_radius + 1.5 mm (0.10.2). For G1/2 with
	default bend_radius this gives approximately
	22.7 mm, within 1.2 mm of the commercial
	PVC-Welt G1/2 reference L = 21.5 mm. The +1.5
	mm provides a small plain-cylinder section
	between the bend exit and the thread start.

	(3) Cylinder-union corner joint replaced by
	quarter-torus swept bend. New geometry:
	- Each arm is a straight cylinder from
	bend_radius to arm_length - thread_length,
	then a bspp_threaded_rod for the thread.
	- The corner is a quarter-torus centred at
	(bend_radius, 0, bend_radius), axis along
	+Y, tube radius arm_od/2, major radius
	bend_radius. Clipped by a cube to the
	lower-left quadrant of its XZ cross-section.
	- The bore follows the same L-shaped path
	with smaller radii: two straight bore
	cylinders + a smaller quarter-torus, all
	subtracted in a single difference()
	operation.

	New parameter bend_radius (default arm_od/2 +
	0.5 mm). The +0.5 mm offset above the minimum
	avoids the horn-torus singularity at exactly
	arm_od/2 (where inner_curve_radius would
	collapse to a point).

	Four new asserts validate the geometry:
	arm_length >= bend_radius + thread_length;
	bend_radius >= arm_od/2; bore >= 0;
	bore < 2 * bend_radius.

	New Hungarian-prefix locals: lBendRadius,
	lPlain (replaces lPlainLength to reflect the
	new shorter plain-section name), lBig.

	Allman braces throughout; spaces around = in
	named arguments preserved.

	Render pipeline: tar + MP4 in every target:

	* bin/render-views (build_tar): new function.
	Uses Python's standard tarfile module to
	produce an uncompressed tar archive
	<Model>_<mode>.tar containing the produced
	PNGs. Uncompressed because the PNGs are
	already zlib-compressed; recompressing would
	waste CPU without saving meaningful space.

	* bin/render-views (build_mp4): mode parameter
	added. Output filename is now
	<Model>_<mode>.mp4 (was always
	<Model>_turntable.mp4 in 0.10.1, regardless of
	actual coverage mode --- a bug that would
	silently overwrite the MP4 if both turntable
	and sphere were rendered for the same model).

	* bin/render-views (main): new --tar flag,
	parallel to --mp4. New per-frame tracking
	(frame_paths list) supplies the source-of-truth
	file list to build_tar. The main loop now
	records each produced PNG path and passes the
	list to build_tar after rendering.

	* bin/render-views (header docstring): the
	purpose / coverage modes blocks updated to
	mention the tar + MP4 production.

	* Models/Makefile.am (render targets): every
	render target (render-<Model>,
	render-<Model>-hemisphere, render-<Model>-sphere,
	and the aggregate render) now passes both
	--tar and --mp4 to bin/render-views. Targets'
	echo messages updated to indicate the three
	artefacts.

	* Models/Makefile.am (render-<Model>-mp4): kept
	as a backward-compatible alias for
	render-<Model> (which now always produces
	both the tar and the MP4). Marked deprecated
	in the help text.

	* Models/Makefile.am (help): output expanded
	to show the three artefacts each target
	produces (PNG sequence, <Model>_<mode>.tar,
	<Model>_<mode>.mp4).

	Documentation:

	* Doc/DevelopmentStandard.org (Quick start):
	every example updated to show the
	three-artefact output. The OpenSCAD example
	updated to use --tar --mp4 in the ad-hoc
	invocation.

	* Doc/DevelopmentStandard.org (Architecture):
	the "MP4 output" line updated to describe
	the tar + MP4 combined production with
	mode-qualified filenames.

	* Doc/DevelopmentStandard.org (Make targets):
	each per-target line now lists the three
	output artefacts; -mp4 suffix documented as
	deprecated alias.

	* Doc/FutureResearch.org (Elbow geometric
	defects identified 0.9.9): entry marked
	ADDRESSED at 0.10.2 with sub-bullets
	documenting each of (a) hex removal, (b)
	arm-length increase, (c) quarter-torus
	swept bend. End-to-end verification is
	queued for the project-author's
	make render-Elbow-sphere on receipt.

	Research journal:

	* Doc/ResearchJournal.org: two new
	2026-05-14 entries prepended (Phase 1
	status, iteration narrative). Records the
	project-author timestamp, the OpenSCAD
	development-build performance result (35
	sec vs 10 min), the read of the 0.10.1
	sphere-render upload (four sample frames
	inspected), the design rationale for the
	quarter-torus bend (major-radius default,
	tube-radius matching, clipping cube
	placement), the tar+MP4 design choices
	(uncompressed tar, flat archive,
	mode-qualified filename), honest
	disclosures (no end-to-end render in the
	assistant's environment; quarter-torus
	geometry unverified; BOSL2 torus(or, ir)
	parameter-name assumption; horn-torus
	singularity avoided by +0.5 mm offset;
	--tar flag tested in isolation only;
	other fittings not started this
	iteration), and next-iteration options
	(add Tee vs verify and refine 0.10.2
	Elbow).

	Project files:

	* VERSION: 0.10.1 -> 0.10.2.

	* NEWS: 0.10.2 release note prepended.

	* ChangeLog: This entry.


2026-05-13  Peter Felecan  <peter@felecan.example>

	Iteration 0.10.1. Refinement-of-infrastructure
	iteration on the 0.10.0 communication jig.
	Timestamp: [2026-05-13 Wed 10:38]. Project author
	ran the 0.10.0 jig on the Elbow (10 minutes under
	the 2021 system OpenSCAD package), uploaded the
	PNG tarball and MP4 turntable for review, and
	returned seven items of feedback. All seven
	addressed.

	Renderer tool renamed:

	* bin/render-views.py: removed.

	* bin/render-views: added (was render-views.py).
	Shebang #!/usr/bin/env python3 handles execution;
	the .py extension was redundant per the Unix-tool-
	naming standard. Internal references updated:
	header docstring path comment, USAGE block.

	Renderer filename-format change:

	* bin/render-views (frame_filename): the per-frame
	PNG filename format changes from the verbose
	labelled form
	  Elbow_lat+00_lon+090_frame_010.png
	(0.10.0) to the terse positional form
	  Elbow_010+00+090.png
	(0.10.1). Structure:
	<Model>_NNN{lat_sign}LL{lon_sign}LLL.png. Frame
	number FIRST (so lex order matches frame order
	unambiguously); no labels; no separators between
	numeric fields (the leading sign of each numeric
	field is the implicit separator).

	* bin/render-views (build_mp4): glob pattern
	updated from <model>_*_frame_*.png to
	<model>_[0-9]*.png to match the new format.

	Renderer binary-selection:

	* bin/render-views (main, render_one_frame,
	build_mp4): three new behaviours.

	(1) New argument --openscad-binary PATH (default
	'openscad' resolved via PATH).

	(2) New argument --ffmpeg-binary PATH (default
	'ffmpeg' resolved via PATH; only consulted when
	--mp4 is passed).

	(3) Both arguments distinguish explicit-path
	(contains os.sep or os.altsep) from bare-name
	(resolved via shutil.which). Explicit paths are
	validated for existence and executability and
	error loudly if missing; bare names fall through
	to PATH lookup and error if not found.

	Plumbed through render_one_frame() (new
	openscad_binary parameter, default 'openscad')
	and build_mp4() (new ffmpeg_binary parameter,
	default 'ffmpeg').

	USAGE block in the script header expanded with a
	second example showing the --openscad-binary
	form.

	Configure-time binary selection:

	* configure.ac (--with-openscad): new AC_ARG_WITH
	block. ./configure --with-openscad=PATH overrides
	the default PATH lookup. The path is validated for
	executability; an unexecutable path is an error
	(not a warning). If no override is given, falls
	back to AC_CHECK_PROGS (warning if not found).
	Comment block explains the motivation: the 2021
	system OpenSCAD is substantially slower than a
	development build with the Manifold backend.

	* configure.ac (--with-ffmpeg): parallel
	AC_ARG_WITH block for ffmpeg, same behaviour.

	Makefile integration:

	* Models/Makefile.am (RENDER_OPENSCAD_FLAG,
	RENDER_FFMPEG_FLAG): two new variables that
	expand to --openscad-binary $(OPENSCAD) /
	--ffmpeg-binary $(FFMPEG) when the configure-
	resolved variable is not 'no', and to empty
	otherwise.

	* Models/Makefile.am (render, render-<Model>,
	render-<Model>-hemisphere, render-<Model>-sphere,
	render-<Model>-mp4): every render target appends
	$(RENDER_OPENSCAD_FLAG); the -mp4 target also
	appends $(RENDER_FFMPEG_FLAG).

	* Models/Makefile.am (RENDER_SCRIPT): path
	updated from bin/render-views.py to
	bin/render-views.

	Discoverability:

	* Models/Makefile.am (help): new "make help"
	target. Lists each render-related target with a
	one-line description, sh-loops over RENDER_MODELS
	for the per-model variants, and ends with a
	pointer to Doc/DevelopmentStandard.org and
	bin/render-views --help. Added to .PHONY.

	Manual pages:

	* Doc/man/render-views.1: new file. Standard
	groff section 1 (user commands). Synopsis,
	options (required, coverage, image/camera, MP4,
	binary selection, output), filename format,
	coordinate convention, exit status, examples
	(make-based and standalone, including the
	--openscad-binary form), environment, files, SEE
	ALSO, history, authors.

	* Doc/man/checkxref.1: new file. Synopsis,
	options (--brief, --summary, --include-mass,
	--verbatim-aware), exit status, files, examples
	(including the pre-delivery underscore-audit form
	with --brief --verbatim-aware), SEE ALSO,
	history.

	* Doc/man/applyxref.1: new file. Synopsis,
	options (--verbatim-aware), positional arguments,
	exit status, examples (including the recommended
	checkxref -> applyxref -> checkxref workflow),
	SEE ALSO, history.

	* Makefile.am (EXTRA_DIST): adds the three
	Doc/man/*.1 files. They ship in the distribution
	archive; not yet installed under $(mandir)/man1/
	(deferred until "make install" is introduced).

	Documentation:

	* Doc/DevelopmentStandard.org (Model Rendering
	Pipeline / Quick start): new subsection at the
	top, before Architecture. Most-common
	invocations first, with the --with-openscad
	example and a direct bin/render-views example.
	Addresses the project-author observation that
	the journal was the wrong place to look for
	"how do I invoke this?".

	* Doc/DevelopmentStandard.org (Model Rendering
	Pipeline / Architecture): the filename-format
	example updated to Elbow_010+00+090.png; an
	explanation block notes that the 0.10.0 verbose
	form has been superseded.

	* Doc/DevelopmentStandard.org (Model Rendering
	Pipeline / Make targets): "make help" added as
	the first item.

	* Doc/DevelopmentStandard.org (Model Rendering
	Pipeline / Dependencies): expanded with a
	performance note (2021 system OpenSCAD versus
	Manifold-backend development build), the
	--with-openscad / --with-ffmpeg documentation,
	and a Phase-1 deferral note about promoting the
	three optional dependencies to required when
	renders feed taxonomy illustrations.

	* Doc/DevelopmentStandard.org (Model Rendering
	Pipeline / Manual pages): new subsection before
	Cross-platform note. Lists the three manpages
	and notes the deferred installation under
	$(mandir)/man1/.

	* Doc/DevelopmentStandard.org (render-views.py
	to render-views): all remaining stale .py
	references updated.

	* Doc/FutureResearch.org (render-pipeline
	stretch-goals): three new bullets.
	(1) Promote python3/openscad/ffmpeg from optional
	to required when renders feed taxonomy
	illustrations; trigger documented; effort
	estimated.
	(2) Manpage installation under $(mandir)/man1/
	via man_MANS when "make install" is introduced.
	(3) PNG-tarball vs MP4 upload protocol
	recommendation: tarball for assistant uploads
	(metadata preserved), MP4 for project-author
	viewing.

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-13
	entries prepended (Phase 1 status, iteration
	narrative). Records the project-author
	timestamp, the seven items of feedback and how
	each was addressed, direct answers to the two
	project-author questions (PNG tarball over MP4;
	the journal is the wrong place for invocation
	examples), the assistant's review of the
	uploaded PNG tarball with three sample frames
	inspected, and honest disclosures (no
	end-to-end test; manpages not validated; sh-loop
	in make help not tested; path-vs-PATH detection
	not tested on Windows).

	Project files:

	* VERSION: 0.10.0 -> 0.10.1.

	* NEWS: 0.10.1 release note prepended.

	* ChangeLog: This entry.


2026-05-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.10.0. Communication-jig iteration.
	Timestamp: [2026-05-12 Tue 20:01]. Version-number
	bump from 0.9.9 to 0.10.0 reflects the new
	top-level tool category (bin/render-views.py on
	the same scale as bin/checkxref), the new
	configure-time dependencies, and the new Renders/
	subdirectory layout. No new fitting; no
	refinement of an existing fitting.

	New rendering pipeline:

	* bin/render-views.py: new file. Python 3 (no
	third-party dependencies, only standard library)
	script that renders a BSPPFit model from a
	systematic sample of camera viewpoints on a
	sphere. Drives OpenSCAD in batch mode, one
	invocation per frame. Each PNG is named with
	the spherical coordinates (latitude, longitude)
	of its camera position plus an ordinal frame
	number so the viewpoint is identifiable from
	the filename alone. Optional MP4 turntable via
	ffmpeg.

	CLI: --scad-file, --model-name, --output-dir
	(required); --mode {turntable,hemisphere,sphere},
	--longitude-step DEG, --imgsize WxH, --distance MM,
	--mp4, --fps INT, --verbose (optional).

	Coverage modes:
	- turntable  : equator, 36 frames every 10 deg
	               longitude. Default.
	- hemisphere : equator + +30/+60 + north pole,
	               109 frames.
	- sphere     : full sphere, 182 frames.

	OpenSCAD invocation uses --render (full geometry
	pipeline, excludes preview-mode axis overlay),
	--viewall (auto-fit camera distance), and the
	6-argument --camera=eyex,eyey,eyez,cx,cy,cz
	LookAt form. Computed eye position from
	(lat, lon, distance) via standard
	spherical-to-Cartesian conversion. Pole
	coordinates inset slightly (+89 instead of +90)
	to avoid OpenSCAD up-vector degeneracy.

	Filename format:
	<Model>_lat{sign}DD_lon{sign}DDD_frame_NNN.png.

	Makefile integration:

	* Models/Makefile.am (render targets): the 0.9.0
	placeholder render target is replaced by a
	generator-pattern that emits four targets per
	registered model: render-<Model>,
	render-<Model>-hemisphere, render-<Model>-sphere,
	render-<Model>-mp4. Plus an aggregate "make
	render" that runs turntable mode for every
	registered model.

	* Models/Makefile.am (RENDER_MODELS variable):
	central list of registered models, currently
	Nipple, Elbow, Cap, Plug, HexBush. Adding a new
	model requires one line of Makefile change.

	* Models/Makefile.am (clean-local): new target
	that removes per-model Renders/ subdirectories.
	"make clean" propagates through clean-local.

	* Makefile.am (EXTRA_DIST): adds
	bin/render-views.py to the distribution list.

	Configure-time tool checks:

	* configure.ac (PYTHON3, OPENSCAD, FFMPEG):
	three new optional dependency checks. All
	warnings, not errors: the render targets are
	not part of "make all", so a configuration
	without the render tools still builds the
	documentation.

	* configure.ac (configuration summary): new
	"Optional (render pipeline)" block prints
	python3, openscad, ffmpeg under the existing
	summary.

	Documentation:

	* Doc/DevelopmentStandard.org (Model Rendering
	Pipeline): new top-level section before
	Conclusion. Documents the architecture,
	coverage modes, make targets, dependencies,
	coordinate convention, image size/rendering
	mode, and cross-platform note.

	* Doc/FutureResearch.org (Render pipeline
	stretch goal): original 0.9.0 goal marked as
	superseded by the richer 0.10.0 implementation.

	* Doc/FutureResearch.org (new queued items):
	cross-platform support (macOS, Windows);
	Renders/ git-tracking decision; Elbow defects
	(a)..(c) from the 0.10.0 project-author
	review (queued for 0.10.1 to be fixed with the
	help of the new rendering jig).

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-12
	entries prepended (Phase 1 status, iteration
	narrative). Records the project-author
	timestamp, the discussion-first approach
	(eight design questions answered before
	coding), Option B (jig first, Elbow defects
	in 0.10.1), what landed, the version-number
	choice rationale, honest disclosures
	(end-to-end test unavailable; camera formula
	not empirically verified; --render axis
	suppression not verified; cross-platform
	deferred; no actual renders ship in the
	delivery). Includes an "apology of sorts"
	for the cumulative 0.9.7..0.9.9 elbow
	misreads that motivated the jig.

	Project files:

	* VERSION: 0.9.9 -> 0.10.0.

	* NEWS: 0.10.0 release note prepended.

	* ChangeLog: This entry.


2026-05-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.9.9. Refinement iteration responding
	to project-author review of the 0.9.8 Elbow
	renders. Timestamp: [2026-05-12 Tue 15:30].
	Project-author comment: "this is a good start but
	which requires some enhancements"; five views
	uploaded; no specific defect called out. The
	assistant identified enhancements from the views.

	Elbow refinements:

	* Models/G02_Elbow/Elbow.scad (Elbow): three
	changes.

	(1) New parameter corner_hex (boolean, default
	true) plus its sub-parameters corner_hex_height
	(undef-resolved to arm_od + 2 mm) and corner_hex_od
	(undef-resolved to arm_od + 4 mm). When true, the
	elbow includes a hex prism at the corner with axis
	along +Y (perpendicular to both arm axes); the hex
	provides wrench grip in the plane of the elbow's
	cross-section. When false, the 0.9.8 design (plain
	cylindrical arms only) is preserved.

	(2) Default arm_length increased from
	thread_length + 5 mm to thread_length + 8 mm for
	more commercially-realistic proportions. The 0.9.8
	default produced a visually compact elbow where
	the corner zone dominated; +8 mm gives a longer
	plain-cylinder section between thread and corner.

	(3) Cleaned-up eps-overlap pattern at the corner.
	The 0.9.8 construction extended each arm cylinder
	by lEps INTO the corner via translate([-lEps, ...]);
	this added unnecessary overlap since the natural
	Steinmetz-solid intersection of two perpendicular
	cylinders already produces clean boolean unions.
	The 0.9.9 outer-body construction places each arm
	at its natural corner-side end (no negative
	offset). eps is retained only at the bore
	subtractions' open ends (overhang past the thread
	mouth).

	The attachable bounding-box Y extent gains
	awareness of the corner hex: now
	max(arm_od, corner_hex_height) when the hex is
	present, arm_od when not.

	New Hungarian-prefix locals: lCornerHexHeight,
	lCornerHexOd, lBoundingYExtent.

	Allman braces throughout; spaces around = in
	named arguments preserved.

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-12
	entries prepended (Phase 1 status, iteration
	narrative). Records the project-author
	timestamp, the assistant's synthesis of the
	five-view 0.9.8 render review, the rationale
	for the three enhancements, and honest
	disclosures (no specific defect named; the
	corner_hex default is a commercial-match
	choice; dimensions are heuristics; geometry
	unverified by render).

	Project files:

	* VERSION: 0.9.8 -> 0.9.9.

	* NEWS: 0.9.9 release note prepended.

	* ChangeLog: This entry.


2026-05-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.9.8. Bloom-and-judgment iteration.
	Timestamp: [2026-05-12 Tue 15:03]. One new model
	(Elbow); one explicit judgment call answered
	(manifold-warning investigation deferred);
	manifold-warning investigation recorded as a
	stretch-goal item with risks of delay made
	explicit.

	New model G-02 Elbow:

	* Models/G02_Elbow/Elbow.scad: new file. First
	90-degree mitered male x male BSPP elbow.
	Architecture firsts: first model with two ports
	not on a common axis; first use of off-axis
	orientation primitives (rotate([0, 90, 0])
	wrapping arm B's cylinder and thread to put them
	along +X); first fitting where the BOSL2
	attachable bounding-box approximation visibly
	under-serves the geometry (the elbow is
	L-shaped, not cuboid).

	Public wrapper Elbow() with parameters: size
	(default 1/2, same on both ports), thread_length
	(undef-resolved to bsppfit_useful_thread_length),
	arm_length (undef-resolved to thread_length +
	5 mm; the +5 mm gives a plain-cylinder seal
	shoulder between thread and corner), arm_od
	(undef-resolved to bsppfit_major_od(size) +
	4 mm, raised via bsppfit_safe_wall with
	BSPPFIT_MIN_WALL), bore (undef-resolved to
	bsppfit_default_bore), manifold_safe (default
	true), tol_thread (default BSPPFIT_TOL_THREAD),
	anchor / spin / orient (BOSL2 attachment-system).

	Construction: union of two L-arms (plain
	cylinder + BSPP threaded rod each), arm A along
	+Z, arm B along +X, corner (axis intersection)
	at the local origin; through-bores cross at the
	corner forming the L-shaped interior channel;
	solid material remains at the inner-corner
	volume where neither bore reaches, which is the
	natural inner-edge geometry of a mitered elbow.
	Manifold-fix epsilon (gElbowManifoldEps = 0.01)
	on the corner-side of each plain cylinder and
	thread for clean booleans at the arm/corner
	seam.

	Validations: arm_length >= thread_length;
	bore >= 0 and bore <= bsppfit_minor_od(size);
	arm_od raised via bsppfit_safe_wall +
	bsppfit_warn_wall_raised.

	Gallery Elbow_Gallery() renders all 9 supported
	sizes in a single row at the default orientation.

	Allman braces throughout; Hungarian-prefix
	locals; spaces around = in named arguments.

	* Models/Makefile.am (EXTRA_DIST): adds
	G02_Elbow/Elbow.scad.

	Documentation:

	* Models/LibraryOverview.org (folder layout):
	G02_Elbow marked as landed with a one-line
	description.

	* Doc/FutureResearch.org (model-library queue):
	Elbow.scad marked as landed in 0.9.8 with
	follow-up variants queued (45-degree, female and
	mixed-gender / street elbow, attachable
	bounding-box refinement to a custom anchor list).

	* Doc/FutureResearch.org (Stretch goals): new
	queued investigation for the manifold-conversion-
	warning issue under ~manifold_safe = false~.
	Records the project-author observation (warning
	fires on Nipple, Cap, Plug, HexBush across
	multiple sizes; raising $fn does not help; the
	repair pass succeeds; default manifold_safe =
	true path is clean). Records the justification
	for the 0.9.8 deferral (warning is the
	documented cost of opt-in per 0.9.2; repair
	produces correct geometry; one unified
	diagnosis at the right time is more efficient
	than per-fitting workarounds). Records the
	risks of delay (cause may compound; user
	confidence may erode; if the repair pass ever
	produces subtly different geometry the issue
	jumps from log noise to defect). Records the
	trigger for revisiting (fifth model affected
	OR user report of geometry defect).

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-12
	entries prepended (Phase 1 status, iteration
	narrative). Records the project-author
	timestamp, the HexBush render confirmation
	(top + bottom views), the full assistant
	judgment call on the manifold-warning issue
	(with reasoning and risk acknowledgement), the
	Elbow design decisions (mitered not curved;
	M x M only in 0.9.8; same size both ports),
	and honest disclosures (Elbow geometry
	unverified by render; attachable bounding-box
	approximation; hex grip deliberately omitted in
	0.9.8; manifold-warning under blunt-start
	expected to appear on Elbow too).

	Project files:

	* VERSION: 0.9.7 -> 0.9.8.

	* NEWS: 0.9.8 release note prepended.

	* ChangeLog: This entry.


2026-05-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.9.7. Pure-bloom iteration on project-
	author invitation to continue. Timestamp:
	[2026-05-12 Tue 10:33]. Project-author hint:
	wall thickness is the heuristic to think about
	next. Hint shaped both the model choice and the
	architectural addition.

	Wall-thickness convention:

	* Models/Util/util.scad (BSPPFIT_MIN_WALL,
	bsppfit_safe_wall, bsppfit_warn_wall_raised):
	new section 5 inserted between Tolerance defaults
	(4) and Bore heuristic (6). BSPPFIT_MIN_WALL =
	1.5 mm is the project-default minimum wall
	thickness; rationale is FDM 0.4 mm nozzle x 3
	extrusion passes = 1.2 mm with safety margin.
	bsppfit_safe_wall(requested_od, thread_od,
	min_wall) returns the larger of requested_od
	and thread_od + 2*min_wall.
	bsppfit_warn_wall_raised emits an echo() warning
	when the helper raises a user-supplied OD; the
	label argument identifies which OD was raised
	(e.g. "HexBush hex_od").

	* Models/Util/util.scad (section numbering): shifts
	to accommodate the insertion. Tolerance is 4,
	Wall-thickness is 5, Bore is 6, Self-correcting
	middle-diameter is 7, Size listing is 8,
	Self-test is 9. The CONTENT listing at the file
	head updated to match.

	* Models/Util/util.scad (header rationale block):
	documents per-fitting min_wall conventions
	(Nipple uses 0.5 as safety floor; Cap and Plug
	use 1.5 matching the default; HexBush uses
	BSPPFIT_MIN_WALL against larger-thread major_od).

	New model G-08 Reducing Hex Bush:

	* Models/G08_HexBush/HexBush.scad: new file. First
	model with two BSPP sizes in one fitting (size_male
	and size_female); first model with mixed gender
	(male external thread, female internal thread); first
	model combining bspp_threaded_rod (external) and
	bspp_threaded_rod(internal = true) in a single
	difference(); first user of the new wall-thickness
	convention.

	Public wrapper HexBush() with parameters: size_male
	(default 1/2), size_female (default 1/4),
	male_thread_length (undef-resolved to useful_thread_length
	of size_male), female_thread_depth (undef-resolved
	to size_female's), hex_height (undef-resolved to
	female_thread_depth + 4 mm), hex_od (undef-resolved
	to major_od(size_male) + 8 mm, raised via
	bsppfit_safe_wall), bore (undef-resolved to
	bsppfit_default_bore(size_female)), manifold_safe
	(default true), tol_thread (default
	BSPPFIT_TOL_THREAD), anchor/spin/orient (BOSL2
	attachment-system).

	Validations: both sizes asserted present in
	BSPP_TABLE; warn if size_female > size_male (atypical
	step-up); assert female_thread_depth <= hex_height;
	assert 0 <= bore <= minor_od(size_female); hex_od
	raised via safe_wall + warn_wall_raised.

	Private implementation _hexbush() constructs the
	geometry as difference(union(hex, male_thread),
	female_thread_cavity, through_bore). Z-axis origin
	at the middle of the overall fitting; hex centred
	on the lower half, male thread on the upper half.
	Manifold-fix epsilon (gHexBushManifoldEps = 0.01)
	at the hex/male seam and the female-thread
	bottom-face overhang.

	Gallery HexBush_Gallery() renders nine common
	reducing ratios in a row: G1/4 x G1/8, G3/8 x G1/4,
	G1/2 x G1/4, G1/2 x G3/8, G3/4 x G1/2, G1 x G3/4,
	G1+1/4 x G1, G1+1/2 x G1+1/4, G2 x G1+1/2.

	Allman braces throughout; Hungarian-prefixed local
	variables; spaces around = in named arguments.

	* Models/Makefile.am (EXTRA_DIST): adds
	G08_HexBush/HexBush.scad.

	LibraryOverview update:

	* Models/LibraryOverview.org (folder layout): shows
	G06_CapPlug with Cap.scad and Plug.scad as landed
	(one-line descriptions), G08_HexBush with
	HexBush.scad as landed. util.scad description
	mentions wall-thickness defaults alongside
	tolerance defaults.

	* Models/LibraryOverview.org (Conventions): new
	wall-thickness convention bullet inserted between
	the bore-heuristic and manifold-clean bullets.
	Records BSPPFIT_MIN_WALL = 1.5 mm and the
	bsppfit_safe_wall helper, plus the per-fitting-
	class overrides for Nipple (0.5 floor), Cap/Plug
	(1.5 matching default), and HexBush
	(BSPPFIT_MIN_WALL against larger thread's
	major_od).

	FutureResearch.org queue:

	* Doc/FutureResearch.org: HexBush.scad marked as
	landed in 0.9.7. Records the priority promotion
	ahead of Elbow per the wall-thickness hint
	(HexBush exercises wall-thickness reasoning;
	Elbow exercises angular geometry which is a
	different concern). Elbow promoted to next in
	queue.

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-12
	entries prepended (Phase 1 status, iteration
	narrative). Records the project-author hint and
	timestamp, the Plug.png render confirmation, the
	rationale for choosing HexBush ahead of Elbow,
	what landed (model + convention + documentation),
	honest disclosures (HexBush geometry unverified
	by render; wall-thickness 1.5 mm default is FDM-
	reasonable but not catalogue-verified; hex_od
	+8 mm default is a spot-guess similar to Cap/Plug
	+6 mm).

	Project files:

	* VERSION: 0.9.6 -> 0.9.7.

	* NEWS: 0.9.7 release note prepended.

	* ChangeLog: This entry.


2026-05-12  Peter Felecan  <peter@felecan.example>

	Iteration 0.9.6. Fix-and-bloom iteration. Project-
	author timestamp: [2026-05-12 Tue 10:00].

	Emacs minimum version enforcement:

	* configure.ac (Emacs version check): new explicit
	check on the discovered $EMACS binary; errors out
	if major < 29 or major == 29 with minor < 1.
	Reason: Doc/batch-init.el's
	org-resource-download-policy / org-safe-remote-resources
	settings require Org 9.6+ which ships with Emacs
	29.1. On older Emacs the boundp-guard makes the
	setq a silent no-op and the documentation build
	hangs on Catalogue.org's remote URLs.

	* configure.ac (configuration summary): prints the
	discovered Emacs version alongside the binary
	path.

	* Doc/DevelopmentStandard.org §Dependencies: adds
	Minimum Emacs version: 29.1 note with the
	rationale.

	Catalogue.pdf generation deferred:

	* Doc/Makefile.am (SUBDIRS): commented out per
	project-author direction. Cause: the 0.9.5
	org-resource-download-policy = nil setting did NOT
	suppress the remote-fetch loop on Catalogue.org's
	external Wikimedia URLs; org-export-link--remote-
	local-copy still calls org-persist-write:url which
	independently hits the "considered unsafe" check.
	The fix is deferred (Catalogue is a working
	document expected to disappear when illustration
	slots are settled). With SUBDIRS commented out,
	`make all` (default target) no longer recurses to
	Doc/Illustrations and Catalogue.pdf is not built.

	* Makefile.am (html-export, $(HTML_EXPORT_ARCHIVE)):
	now invokes $(MAKE) -C Doc/Illustrations html
	explicitly (not via SUBDIRS recursion) so
	Catalogue.html is still produced and bundled.
	Doc/Illustrations/*.pdf dropped from the bundle
	glob list; the deploy banner notes the omission
	and points readers at the journal entry.

	New model G-06 Plug:

	* Models/G06_CapPlug/Plug.scad: new file. Male-
	thread counterpart of Cap; screws INTO a female
	pipe port; solid hex (or round) head at the back;
	no through-bore. Construction is a union() of the
	head and the BOSL2 bspp_threaded_rod shank (default
	external thread) with a manifold-fix epsilon
	overlap at the seam. Mirrors Cap's wrapper +
	underscore-implementation pattern. Companion
	Plug_Gallery() module renders all 9 supported
	sizes in a single row, hex heads only. Same
	hybrid identifier convention and Allman braces as
	the rest of the library.

	* Models/Makefile.am (EXTRA_DIST): adds
	G06_CapPlug/Plug.scad.

	* Doc/FutureResearch.org: updates the Cap/Plug
	queue entry to mark both files as landed (Cap in
	0.9.5, Plug in 0.9.6).

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-12
	entries prepended (Phase 1 status, iteration
	narrative). Records the project-author timestamp,
	the explicit answer to the bore-heuristic-
	verification question for Cap (no bore by
	exception; head_od heuristic spot-checked but
	not fully catalogue-verified), the Catalogue
	deferral rationale, and honest disclosures
	(Catalogue workaround is not a fix; Emacs
	version check and Plug geometry both unverified
	by execution).

	Project files:

	* VERSION: 0.9.5 -> 0.9.6.

	* NEWS: 0.9.6 release note prepended.

	* ChangeLog: This entry.


2026-05-11  Peter Felecan  <peter@felecan.example>

	Iteration 0.9.5. Bug-fix-plus-bloom iteration.
	Project-author timestamp: [2026-05-11 Mon 19:45].
	Five defects/observations addressed, one new model
	added.

	`make` default target restored:

	* Doc/Makefile.am (pdf-local, html-local,
	pdf-recursive, html-recursive): the 0.9.4 custom
	pdf-recursive and html-recursive targets are
	REMOVED. They collided with automake's
	auto-generated targets of the same names (which
	implement SUBDIRS recursion when SUBDIRS is set).
	The override emitted "overriding recipe for target
	'pdf-recursive'" and broke the recursion. With the
	custom targets removed, automake's auto-generation
	handles SUBDIRS recursion; pdf-local and html-local
	contain only the local-files rules.

	* Doc/batch-init.el (org-resource-download-policy,
	org-safe-remote-resources): both set to nil
	(boundp-guarded for older Emacs without these
	defcustoms). Doc/Illustrations/Catalogue.org
	references external Wikimedia URLs in its source-
	tracking records; Org's PDF exporter tried to
	download them via org-export-link--remote-local-copy
	under the "considered unsafe" security policy and
	looped indefinitely under batch mode. With the
	policy set to nil, no remote-fetch is attempted
	during export; URLs in the Catalogue render as
	plain hyperlinks.

	html-export archive layout:

	* Makefile.am ($(HTML_EXPORT_ARCHIVE)): tar
	--transform options removed. Archive contents are
	now rooted at the project layout (Doc/Concept.html
	etc.) rather than nested under
	bsppfit-html-N.N.N/. The echoed deploy
	instructions tell the operator to `cd <web-root>`
	before `tar xJf <archive>`.

	Index.html postamble:

	* Doc/Index.org (#+OPTIONS): changed
	`html-postamble:nil html-preamble:nil` to
	`html-preamble:nil`. Org's default `auto`
	postamble now runs and emits the author + date +
	creator block at the bottom of Index.html,
	restoring orthogonality with the other rendered
	HTML pages. html-preamble:nil is preserved (the
	project's custom preamble function would emit a
	near-empty header strip on Index, which looks
	odd).

	LibraryOverview §Status refactor:

	* Models/LibraryOverview.org (* Status): rewritten.
	The 0.9.4 Status section had grown to five
	paragraphs --- one per iteration 0.9.0..0.9.4 ---
	duplicating ResearchJournal content. The 0.9.5
	Status is two paragraphs: the library's current
	state (third Phase 1 deliverable, early-bootstrap
	state, /two fittings/ implemented end-to-end with
	this iteration's Cap addition, eight other
	geometry classes queued in FutureResearch.org)
	and a pointer to ResearchJournal.org for
	per-iteration history.

	New model G-06 Cap:

	* Models/G06_CapPlug/Cap.scad: new file. First new
	model since 0.9.0. Single-port BSPP fitting with
	an internal (female) thread that screws onto a
	male pipe end, terminated at the top by a solid
	head (hex default, round optional). NO through-
	bore by design --- exercises the cap/plug
	exception to pipe semantics recorded in
	LibraryOverview.org §Conventions in 0.9.2.

	Public wrapper Cap() with parameters: size
	(numeric, default 1/2), thread_depth (default
	bsppfit_useful_thread_length(size) via
	undef-then-resolve, per the 0.9.4 rule),
	head_height (default 6 mm), head_od (default
	bsppfit_major_od(size) + 6 mm via undef-then-
	resolve), head_shape ("hex" default or "round"),
	manifold_safe (default true), tol_thread (default
	BSPPFIT_TOL_THREAD), anchor/spin/orient (BOSL2
	attachment-system, each documented per-
	parameter). Private implementation _cap() takes
	resolved parameters and builds the geometry via
	difference() of outer body minus BOSL2's
	bspp_threaded_rod(internal = true). Gallery
	module Cap_Gallery() renders all 9 supported
	sizes side by side.

	Plug counterpart (external thread, screws into
	female port) deferred to a future iteration; the
	directory name G06_CapPlug accommodates the pair.

	* Models/Makefile.am (EXTRA_DIST): adds
	G06_CapPlug/Cap.scad to the distribution list.

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-11
	entries prepended (one Phase 1 status, one
	iteration narrative). Records the project-
	author timestamp, the project-author's
	tokens-counter question (direct answer: no
	access), the five defects with their fixes, the
	Cap addition, and honest disclosures (build-chain
	fixes unverified by execution; Cap geometry
	unverified by render).

	Project files:

	* VERSION: 0.9.4 -> 0.9.5.

	* NEWS: 0.9.5 release note prepended.

	* ChangeLog: This entry.


2026-05-11  Peter Felecan  <peter@felecan.example>

	Iteration 0.9.4. Bug-fix iteration responding to
	project-author execution of the 0.9.3 delivery.
	Three defects fixed, one infrastructure gap closed.

	Nipple parameter-default form reverted:

	* Models/G01_Straight/Nipple.scad (Nipple): the
	0.9.3 native-default form (thread_length =
	bsppfit_useful_thread_length(size) in the parameter
	list) reverted to the 0.9.2 undef + ternary
	pattern. OpenSCAD does NOT bind earlier parameter
	values for use in later default expressions; the
	0.9.3 form produced "WARNING: Ignoring unknown
	variable 'size'" at runtime followed by an
	unknown-size assertion. Size-dependent defaults
	(thread_length, middle_od, bore) now use undef in
	the parameter list and resolve in the body via
	is_undef + ternary. Constant-defaults
	(middle_length = 8, middle_shape = "hex",
	tol_thread = BSPPFIT_TOL_THREAD, anchor = CENTER,
	spin = 0, orient = UP, manifold_safe = true) keep
	the native parameter-list form because they do not
	reference other parameters. New Hungarian-prefixed
	local variables for the resolved defaults:
	lThreadLength, lRequestedMiddleOd, lBore.

	* Models/G01_Straight/Nipple.scad (Nipple
	docstring): parameter documentation reworded to
	say "Default (resolved when undef is passed): ..."
	rather than implying the default is literally that
	expression in the parameter list. Implementation
	note appended at the end of the parameter doc
	block explaining why the native form fails.

	* Doc/DevelopmentStandard.org §BSPP Model Library
	--- OpenSCAD Style Addenda: parameter-default
	subsection rewritten. The 0.9.3 recommendation
	("prefer native OpenSCAD form when a default
	depends on another parameter") is reversed. The
	0.9.4 rule: defaults that are literals or
	top-level constants use the native parameter-list
	form; defaults that depend on other parameters
	use undef + is_undef + ternary. Worked example
	shows both forms side by side.

	* Models/LibraryOverview.org §Architecture/Conventions:
	OpenSCAD-style bullet about native defaults
	rewritten to match.

	HTML page header double-row fix:

	* Doc/batch-init.el (org-html-home/up-format): set
	to the empty string "". The 0.9.3 setting kept the
	legacy nav format active "for any export path
	that uses it directly", and Org rendered BOTH the
	legacy div AND the new bsppfit/html-preamble
	function output, producing two consecutive Index
	back-link rows on every page. With the format set
	to "", the legacy div emits nothing; only the
	preamble function output renders.

	* Doc/batch-init.el: comment block reworded to
	record the suppression and the manual-vs-batch
	asymmetry it preserves.

	Doc/Illustrations promoted to SUBDIR:

	* Doc/Illustrations/Makefile.am: new file. Models
	the Models/Makefile.am pattern. DOC_FILES =
	Catalogue.org, PDF_DOCS / HTML_DOCS derived, %.pdf
	pattern rule referencing $(top_srcdir)/Doc/Preamble.tex
	etc., html.stamp target via bsppfit/publish-all,
	all-local: pdf-local default.

	* Doc/Makefile.am (SUBDIRS, EXTRA_DIST, pdf-local,
	html-local, pdf-recursive, html-recursive): adds
	SUBDIRS = Illustrations. Adds explicit recursive
	make calls into SUBDIRS for the custom pdf-local
	and html-local targets (automake's automatic
	recursion covers all/install/clean/dist but not
	custom targets). Removes Illustrations/Catalogue.org
	from EXTRA_DIST because the sub-directory's
	Makefile.am now distributes it; the image files
	remain in the parent's EXTRA_DIST as project
	sources.

	* configure.ac (AC_CONFIG_FILES): adds
	Doc/Illustrations/Makefile so ./configure
	generates it from Doc/Illustrations/Makefile.am.

	* Doc/batch-init.el (org-publish-project-alist):
	adds bsppfit-doc-illustrations-component as a
	third component of the unified bsppfit-all
	publish project. Catalogue.org now publishes via
	the same org-publish-all path as the rest of the
	documents.

	* Makefile.am (html-export, $(HTML_EXPORT_ARCHIVE)):
	tar invocation reworked. The 0.9.3 direct-glob
	form crashed on empty matches; the 0.9.4 form
	expands each glob in a shell loop, warns on empty
	matches and skips them, errors out only if no
	files at all match.

	LibraryOverview status update:

	* Models/LibraryOverview.org (Status): new
	paragraph noting the 0.9.4 changes (parameter-
	default reversal, HTML header double-row fix,
	Illustrations as SUBDIR, DevelopmentStandard
	correction).

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-11
	entries prepended:
	  - Phase 1 completion status (iteration 0.9.4):
	    aggregate ~65.6% (up from ~65.45%); BSPP 3D
	    model library at ~15.5% (up from ~15%).
	  - Iteration 0.9.4 narrative: project-author
	    input (four items with timestamp
	    [2026-05-11 Mon 14:48]), what landed, honest
	    disclosures (0.9.3 self-assurance about native
	    default form was wrong; HTML and SUBDIR fixes
	    unverified by execution).

	Project files:

	* VERSION: 0.9.3 -> 0.9.4.

	* NEWS: 0.9.4 release note prepended.

	* ChangeLog: This entry.


2026-05-09  Peter Felecan  <peter@felecan.example>

	Iteration 0.9.3. Polish-and-refinement iteration
	responding to project-author review of the 0.9.2
	Nipple.scad. Three user-visible improvements, two
	infrastructure additions, and several stylistic
	alignments with project-author preferences.

	The 2026-05-09 date is an estimate; the project
	author's note did not carry an explicit timestamp
	(unlike 0.9.2). The project author can correct in
	the next iteration.

	Nipple parameter-list reform:

	* Models/G01_Straight/Nipple.scad (Nipple): wrapper
	parameter list rewritten to use OpenSCAD's native
	default-argument resolution rather than the 0.9.2
	undef + is_undef + ternary pattern. thread_length
	defaults to bsppfit_useful_thread_length(size),
	middle_od to bsppfit_major_od(size) + 4.0, bore to
	bsppfit_default_bore(size), tol_thread to
	BSPPFIT_TOL_THREAD. Reader sees each default at the
	parameter list rather than having to scroll into
	the body.

	* Models/G01_Straight/Nipple.scad (Nipple): middle_shape
	default changed from "round" to "hex". Hex is the
	commercial norm for brass nipples; round middles
	are uncommon in trade fittings.

	* Models/G01_Straight/Nipple.scad (Nipple docstring):
	anchor, spin, orient each get their own
	documentation line listing default and intended use.
	The 0.9.2 "passed through transparently" lump-note
	is replaced.

	Nipple_Gallery enrichment:

	* Models/G01_Straight/Nipple.scad (Nipple_Gallery):
	now renders two rows. Top row (Y > 0) is hex
	middle, bottom row (Y < 0) is round middle; both
	span G1/8 through G2 left to right. Lets the
	reader compare shape choice across the size range
	at a glance.

	OpenSCAD style refinement:

	* Doc/DevelopmentStandard.org §BSPP Model Library ---
	OpenSCAD Style Addenda: rewritten. Brace style
	addendum exempting single-child modifier chains
	from braces (added 0.9.2) is removed; rule is now
	"Allman braces, everywhere". Identifier-style
	addendum replaced with a hybrid rule: public-facing
	identifiers (modules callable from outside, exported
	functions, parameters, configuration constants) use
	snake_case for BOSL2 compatibility; internal
	identifiers (local variables, private modules/
	functions prefixed _, internal-only constants,
	loop iterators) use Hungarian notation per the
	standing project rule. New section explicitly
	covers spaces around `=` in named arguments
	(extension of the standing spaces-around-operators
	rule) and preference for native default-argument
	resolution over body-side undef+ternary.

	* Models/LibraryOverview.org §Architecture/Conventions:
	OpenSCAD-style bullet rewritten to match.

	* Models/Util/util.scad: refactored throughout to
	Allman braces on every compound including
	translate-with-single-child. Local variables
	prefixed l (lRow, lMajorOd, lSafeMin, lS), loop
	iterators prefixed i (liIdx), internal constants
	prefixed g (none required in this file but
	convention recorded). Spaces around `=` in named
	arguments. Function bsppfit_default_bore parameter
	default uses native form (factor =
	BSPPFIT_DEFAULT_BORE_FACTOR).

	* Models/G01_Straight/Nipple.scad: same refactor.
	Local variables prefixed l (lDesignator, lMajorOd,
	lMinorOd, lSafeMiddleOd, lOverallLength, lEps,
	lBlunt, lXSpacing, lYSpacing, lCenterShift,
	lSizes). Loop iterator prefixed i (iI). Internal
	constant prefixed g (gNippleManifoldEps).

	PDF link in HTML header:

	* Doc/batch-init.el (bsppfit/html-preamble): new
	function. Emits a CSS-flex nav strip with the
	Index back-link on the left ("← Index", from the
	#+HTML_LINK_UP keyword) and the PDF link on the
	right ("PDF ↓", derived from the current file's
	basename). Assigned to org-html-preamble.

	* Doc/batch-init.el (org-html-home/up-format):
	retained as fallback for any export path that
	uses it directly rather than the preamble
	function. Single-link form pointing at Index;
	unchanged from 0.9.2.

	html-export Make target:

	* Makefile.am (html-export, HTML_EXPORT_ARCHIVE):
	new target that builds HTML and PDF versions of
	every published document and bundles the
	deliverables into bsppfit-html-N.N.N.tar.xz at
	the project root. Archive contents: every
	Doc/*.html, Doc/*.pdf, Doc/Illustrations/*.html,
	*.pdf, *.png, *.svg, and Models/*.html,
	Models/*.pdf. Excluded: .org source, .tex
	intermediates, LaTeX auxiliary files. Uses
	--transform to ensure the archive unpacks into a
	self-named subdirectory bsppfit-html-N.N.N/
	rather than splattering into the current
	directory.

	* Makefile.am (html-export-clean): companion
	target removing the archive.

	LibraryOverview update:

	* Models/LibraryOverview.org (Status): new
	paragraph noting the 0.9.3 changes (Allman
	everywhere, hybrid identifier rule, native
	default-argument form, hex middle default,
	two-row gallery, operator-whitespace correction).

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-09
	entries prepended:
	  - Phase 1 completion status (iteration 0.9.3):
	    aggregate ~65.45% (up from ~65.1%); BSPP 3D
	    model library at ~15% (up from ~14%).
	  - Iteration 0.9.3 narrative: project-author
	    input (eleven items), what landed, honest
	    disclosures (manifold-warning resolution
	    unattributed; iteration date estimated;
	    native-default-form and PDF-link and
	    html-export all unverified by execution).

	Project files:

	* VERSION: 0.9.2 -> 0.9.3.

	* NEWS: 0.9.3 release note prepended.

	* ChangeLog: This entry.


2026-05-08  Peter Felecan  <peter@felecan.example>

	Iteration 0.9.2. Bug-fix-and-modelling-correction
	iteration responding to project-author rendering of
	the 0.9.1 Nipple.scad in OpenSCAD. Five items
	addressed: date-format restoration with project-
	author-supplied timestamp table, bore-heuristic-
	verification convention with cap/plug exception to
	pipe semantics, residual manifold warning addressed
	in two layers (eps overlap + manifold-safe default),
	OpenSCAD code style made explicit (Allman braces
	with no-brace addendum for single-child modifier
	chains), and Models source files refactored to
	follow it.

	The "DATE  Author <email>" GNU ChangeLog header
	form is restored from this iteration onward, using
	the project-author-supplied request timestamp
	(2026-05-08 for this iteration). Past iterations
	with future-dated headings generated by the
	assistant's runtime are NOT corrected per project-
	author direction; the canonical timestamp table is
	recorded in NEWS for reference.

	Through-bore for Nipple:

	* Models/G01_Straight/Nipple.scad (Nipple, _nipple):
	new bore parameter on the public wrapper, default
	bsppfit_default_bore(size) which returns
	0.7 * minor_od (commercial-fitting heuristic
	confirmed against 0.8.8 catalogue mining for brass
	G1/2 nipples). The implementation now subtracts
	a tall bore cylinder via difference() from the
	union of thread + barrel + thread. bore=0
	permitted explicitly and suppresses the through-
	hole, producing a solid-rod placeholder documented
	as "NOT a real nipple" in the parameter docstring.
	bore < 0 and bore > minor_od asserted out with
	helpful messages.

	* Models/Util/util.scad (BSPPFIT_DEFAULT_BORE_FACTOR,
	bsppfit_default_bore): new constant and function
	encapsulating the 0.7 commercial-fitting heuristic.
	Future fittings can call bsppfit_default_bore with
	a different factor if their commercial-range
	verification finds the 0.7 factor inappropriate.

	Pipe-semantics convention with cap/plug exception:

	* Models/LibraryOverview.org (Architecture/Conventions):
	new bullet recording that every BSPP fitting must
	have a defined fluid behaviour. Pass-through
	fittings (G-01 straight, G-02 elbow, G-03 tee, G-04
	cross, G-05 reducer, G-07 union, G-08 hex bushing)
	need a through-bore. Terminating fittings (G-06 cap
	and plug) do not. Transitional fittings (G-09 hose
	tail) have a bore on the threaded side that opens
	into the barb-side ID. Models that omit the
	through-bore for visualisation purposes only (e.g.
	via bore=0 on a Nipple) must mark themselves
	clearly as "not real fittings" in their parameter
	documentation.

	Bore-heuristic-verification convention:

	* Models/LibraryOverview.org (Architecture/Conventions):
	new bullet recording that the 0.7 factor was
	confirmed for nipples via 0.8.8 catalogue mining
	but is NOT a universal rule. Each new fitting must
	verify the heuristic against trade catalogues for
	that fitting's commercial range. Reasons the
	factor may differ: elbows have flow-direction
	changes; reducers have two different bores by
	definition; hose tails have a barb-side ID that
	depends on hose ID, not thread minor diameter;
	caps and plugs have no bore.

	Manifold warning addressed (two layers):

	* Models/G01_Straight/Nipple.scad (NIPPLE_MANIFOLD_EPS,
	_nipple): NIPPLE_MANIFOLD_EPS = 0.01 mm overlap
	pattern. The middle barrel cylinder is now
	middle_length + 2*eps long with eps overlap into
	both threads, removing the coplanar-face condition
	at the seam. The through-bore cylinder is similarly
	overhung past the open ends.

	* Models/G01_Straight/Nipple.scad (Nipple, _nipple):
	new manifold_safe parameter on the public wrapper,
	default true. When set, the threaded rods are
	rendered with blunt_start=false (passed through to
	BOSL2's bspp_threaded_rod), producing simpler
	bevel-ended thread terminations that are reliably
	manifold. When false, BOSL2's default blunt-start
	lead-in geometry is used --- visually more
	authentic but with known Manifold-backend
	fragility at the lead-in tips. Default
	conservative; opt-in case-by-case.

	OpenSCAD code style explicit, source files refactored:

	* Doc/DevelopmentStandard.org (Algebraic Abstract
	Languages → OpenSCAD Specific Conventions): new
	sub-section "BSPP Model Library --- OpenSCAD
	Style Addenda" recording the identifier-style
	override (snake_case for functions and module
	parameters, UPPERCASE_SNAKE_CASE for constants,
	modules remain PascalCase, private modules/
	functions prefixed with _; overrides Hungarian
	notation rule for code under Models/), and the
	brace-style addendum (single-child modifier
	chains use NO braces with the child indented on
	the next line; multi-child compounds use Allman
	braces per the parent rule).

	* Models/LibraryOverview.org (Architecture/Conventions):
	OpenSCAD code style bullet inserted, cross-
	referencing the DevelopmentStandard for the full
	rule and recording the project-relevant subset for
	library readers.

	* Models/Util/util.scad: refactored throughout to
	Allman braces and no-brace single-child modifier
	chains. Comment block at file head updated to
	cross-reference the DevelopmentStandard.

	* Models/G01_Straight/Nipple.scad: refactored
	throughout to the same conventions. Comment block
	at file head updated similarly.

	LibraryOverview status update:

	* Models/LibraryOverview.org (Status): new paragraph
	noting the 0.9.2 changes (through-bore + pipe-
	semantics convention + manifold-safe default +
	code-style refactor). Iteration dates corrected to
	match the project-author canonical timestamp
	table (0.9.0 = 2026-05-07, 0.9.1 = 2026-05-07,
	0.9.2 = 2026-05-08).

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-08
	entries prepended:
	  - Phase 1 completion status (iteration 0.9.2):
	    aggregate ~65.1% (up from ~64.75%); BSPP 3D
	    model library at ~14% (up from ~13%).
	  - Iteration 0.9.2 narrative: project-author
	    input (five items), what landed, honest
	    disclosures (apparent contradiction in the
	    OpenSCAD style rule statement and how it was
	    resolved; manifold-safe default unverified by
	    execution; architectural-credit increment
	    held at +1% rather than higher).

	Project files:

	* VERSION: 0.9.1 -> 0.9.2.

	* NEWS: 0.9.2 release note prepended, including
	the project-author canonical timestamp table for
	past releases.

	* ChangeLog: This entry.


2026-05-11  Peter Felecan  <peter@felecan.example>

	Iteration 0.9.1. Bug-fix-and-cleanup iteration
	responding to project-author review of the 0.9.0
	model-library bootstrap. Four items: util.scad
	runtime bug, API change to numeric size keys,
	README.org rename and PDF/HTML build integration,
	unified publish project for cross-document anchor
	resolution.

	util.scad bug fix and API change:

	* Models/Util/util.scad: rewritten. The 0.9.0
	bsppfit_lookup combined incompatible search()
	conventions (listful first arg + index_col_num)
	producing runtime failure on every model
	invocation. The 0.9.1 form follows BOSL2's own
	pattern (search(value, table-of-rows)) and works
	correctly. API change applied at the same time:
	model size parameter is now a numeric fractional-
	inch value (1/8, 1/2, 1+1/4, 2) rather than the
	"G..."-prefixed string used in 0.9.0. Per project-
	author direction confirming the BSPP-threading
	collaborator's preference. The "G" prefix is
	redundant inside a BSPP-only library; numeric keys
	compose more cleanly with BOSL2's
	bspp_threaded_rod which expects exactly this form.
	bsppfit_size_inches() removed (no longer needed).
	bsppfit_designator(size) added (returns the
	"G..."-prefixed human-readable form for warnings
	and gallery labels). bsppfit_sizes() added
	(companion to bsppfit_designators()).

	* Models/Util/dimensions.csv: column order
	changed. size_inches is now first (the primary
	key); designator moves to second.

	* Models/G01_Straight/Nipple.scad: default
	Nipple(size=1/2) instead of size="G1/2", examples
	updated, Nipple_Gallery() iterates bsppfit_sizes()
	rather than bsppfit_designators() in this
	position.

	README.org rename:

	* Models/README.org -> Models/LibraryOverview.org:
	renamed per project's PascalCase-and-descriptive
	convention used throughout Doc/. Preamble updated
	to follow the Doc/ template (#+INCLUDE:
	../Doc/version.org, #+LATEX_HEADER: \input{../Doc/Preamble.tex},
	#+LATEX_HEADER: \svnInfo $Id$, #+EXPORT_FILE_NAME:
	LibraryOverview.pdf). Same relative-path pattern
	that Doc/Illustrations/Catalogue.org already uses.
	Content updated for the numeric-API change.

	* Models/Makefile.am: rewritten to mirror
	Doc/Makefile.am. DOC_FILES = LibraryOverview.org,
	standard PDF_DOCS / HTML_DOCS derived patterns,
	%.pdf : %.org pattern rule, html.stamp target via
	bsppfit/publish-all, all-local: pdf-local default.
	Build dependencies on $(top_srcdir)/Doc/version.org,
	$(top_srcdir)/Doc/Preamble.tex, and
	$(top_srcdir)/Doc/batch-init.el keep the shared
	project files as the single source of truth. Old
	render-target placeholder retained.

	* Doc/Index.org (Model library): new section linking
	to ../Models/LibraryOverview.html under a new
	"Model library" heading.

	Unified publish project for cross-document anchors:

	* Doc/batch-init.el (org-publish-project-alist):
	extended with three additional entries activated
	when BSPPFIT_TOP_SRCDIR is set: bsppfit-doc-component
	(rooted at Doc/), bsppfit-models-component (rooted
	at Models/, html-link-home/up at ../Doc/Index.html),
	bsppfit-all (:components aggregating both). When
	the env var is unset (interactive Emacs use from a
	single directory), the legacy bsppfit-docs project
	is used, preserving 0.9.0 behaviour exactly.

	* Doc/batch-init.el (bsppfit/publish-all): updated
	to publish "bsppfit-all" when BSPPFIT_TOP_SRCDIR is
	set, falling back to org-publish-all otherwise.

	* Doc/Makefile.am (html.stamp): passes
	BSPPFIT_TOP_SRCDIR='$(top_srcdir)' to Emacs.

	* Models/Makefile.am (html.stamp): passes
	BSPPFIT_TOP_SRCDIR='$(top_srcdir)' to Emacs.

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-11
	entries prepended:
	  - Phase 1 completion status (iteration 0.9.1):
	    aggregate ~64.75% (up from ~64.4%); BSPP 3D
	    model library at ~13% (up from ~12%, small bump
	    reflecting that the 0.9.0 architecture-end-to-
	    end claim is now actually true).
	  - Iteration 0.9.1 narrative: project-author input
	    (four items), what landed, honest disclosures
	    (0.9.0 bootstrap not validated by execution;
	    Models-publish-project elisp not validated by
	    Emacs build).

	Project files:

	* VERSION: 0.9.0 -> 0.9.1.

	* NEWS: 0.9.1 release note prepended.

	* ChangeLog: This entry.


2026-05-10  Peter Felecan  <peter@felecan.example>

	Iteration 0.9.0. Minor-version bump marking the
	opening of the BSPP 3D model library. The transition
	from 0.8.x to 0.9.x signals the boundary between the
	taxonomy-only phase and the taxonomy + first-models
	phase.

	Models/ tree opened:

	* Models/README.org: new file. Library overview,
	folder layout, conventions (wrapper +
	underscore-implementation pair, designator-keyed
	parameters, BOSL2 attachment-system pass-through,
	multi-named tolerances, self-correcting middle-OD,
	gallery module, test-area toggle), dependency
	declaration (BOSL2 std.scad and threading.scad on
	the include path), CSV-to-SCAD sync rule.

	* Models/Util/dimensions.csv: new file. Source of
	truth for the BSPP per-size table. Mirrors
	tab:bspp-dimensions in Doc/Taxonomy.org, 9-row
	common-fittings range G1/8 through G2 ratified at
	0.8.8. Columns: designator, size_inches, tpi,
	pitch_mm, major_od_mm, minor_od_mm,
	useful_thread_length_mm.

	* Models/Util/util.scad: new file. OpenSCAD helpers:
	BSPP_TABLE constant mirroring the CSV;
	BSPP_COL_DESIGNATOR / BSPP_COL_SIZE_INCHES / etc.
	column-index constants; bsppfit_lookup,
	bsppfit_size_inches, bsppfit_major_od,
	bsppfit_minor_od, bsppfit_pitch,
	bsppfit_useful_thread_length lookup functions;
	BSPPFIT_TOL_THREAD, BSPPFIT_TOL_GASKET,
	BSPPFIT_TOL_FACE, BSPPFIT_TOL_PIPE tolerance
	defaults; bsppfit_safe_middle_od and
	bsppfit_warn_middle_od_raised self-correcting
	helpers; bsppfit_designators enumeration;
	bsppfit_util_self_test echo-only module.

	* Models/G01_Straight/Nipple.scad: new file. Pilot
	model. BSPP nipple, M x M, round or hex barrel.
	Wrapper Nipple(size, thread_length, middle_length,
	middle_od, middle_shape, tol_thread, anchor, spin,
	orient) with default size G1/2, default
	thread_length from ISO 228-1 useful-length
	per-designator, default middle_length 8 mm, default
	middle_od major_od + 4 mm, default middle_shape
	"round". Underscore-implementation _nipple takes
	resolved-and-validated parameters. Uses BOSL2's
	bspp_threaded_rod as the threading layer, cyl /
	regular_prism for the barrel, attachable() to
	expose anchor/spin/orient. Includes
	Nipple_Gallery() rendering all nine sizes side by
	side, and a test-area toggle at the bottom of the
	file.

	* Models/Makefile.am: new file. Registers
	Models/README.org, Models/Util/dimensions.csv,
	Models/Util/util.scad, Models/G01_Straight/Nipple.scad
	in EXTRA_DIST. Placeholder "render" target for
	future OpenSCAD render-pipeline work.

	Build-system registration:

	* Makefile.am (SUBDIRS): "Doc" -> "Doc Models".
	The forward-looking comment that previously said
	"SUBDIRS list will grow at that point" is replaced
	with a comment noting that the library opened in
	0.9.0.

	* configure.ac (AC_CONFIG_FILES): added
	Models/Makefile to the list. Without this entry,
	./configure would not generate Models/Makefile from
	Models/Makefile.am.

	FutureResearch updates:

	* Doc/FutureResearch.org (Model-library expansion
	beyond the 0.9.0 pilot): new TODO. Lists the next
	models in suggested order (G06_CapPlug, G02_Elbow,
	G03_Tee, G05_Reducer, G09_HoseTail, G07_Union,
	G08_HexBush, G04_Cross), the per-file structure
	(mirror Nipple.scad), and the build-system update
	step. Stretch goals: csv2scad.py generator,
	check_table_sync.py defensive check, OpenSCAD
	render pipeline.

	* Doc/FutureResearch.org (Recently closed): two
	0.9.0 closures prepended:
	  - BSPP model library opened.
	  - BOSL2 source visibility.

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-10
	entries prepended:
	  - Phase 1 completion status (iteration 0.9.0):
	    aggregate ~64.4% (up from ~62.7%); BSPP 3D
	    model library at ~12% (up from ~7%); reasoning
	    for the percentage breakdown recorded.
	  - Iteration 0.9.0 narrative: project-author
	    input (version-bump rationale, "que mille models
	    emergent" directive), what landed, what is NOT
	    in 0.9.0, honest disclosures (M x M only, no
	    render targets, hand-synced table,
	    architecture-credit weighting is a judgement
	    call).

	Project files:

	* VERSION: 0.8.9 -> 0.9.0.

	* NEWS: 0.9.0 release note prepended.

	* ChangeLog: This entry.


2026-05-09  Peter Felecan  <peter@felecan.example>

	Iteration 0.8.9. Quality-and-correction iteration
	closing two FutureResearch items: HTML Index
	back-link orthogonality between manual and batch
	export, and verbatim-aware mode for the
	cross-reference scripts.

	HTML Index back-link orthogonality:

	* Doc/batch-init.el (org-html-preamble,
	org-html-postamble): removed custom string
	overrides. Org's default 'auto postamble handles
	author and date display.

	* Doc/batch-init.el (org-html-home/up-format):
	customised to a single-link "← Index" form. Manual
	export uses Org's default "UP | HOME" rendering;
	both paths produce a working back-link.

	* Doc/Concept.org, Doc/Constitution.org,
	Doc/DevelopmentStandard.org, Doc/FutureResearch.org,
	Doc/ResearchJournal.org, Doc/Taxonomy.org
	(#+HTML_LINK_UP, #+HTML_LINK_HOME): added with
	target Index.html. These are universally-supported
	Org keywords recognised by both manual and batch
	export paths.

	* Doc/Illustrations/Catalogue.org (#+HTML_LINK_UP,
	#+HTML_LINK_HOME): added with target ../Index.html.
	Removed the per-file #+HTML_PREAMBLE and
	#+HTML_POSTAMBLE keywords from 0.8.8 (which the
	manual export path didn't pick up reliably).

	* Doc/Index.org: no link-up/home keywords (this is
	the index document); existing #+OPTIONS
	html-postamble:nil html-preamble:nil retained.

	Verbatim-aware mode for cross-reference scripts:

	* bin/checkxref (--verbatim-aware): new CLI flag.
	When set, the scanner ALSO flags ~Term~ verbatim
	spans whose entire content fullmatches a defined
	term, in addition to the default prose scan.

	* bin/checkxref (DEFINITION_LIST_VERBATIM_SUBJECT_RE,
	TABLE_ROW_FIRST_CELL_RE, VERBATIM_SPAN_RE,
	get_verbatim_subject_spans,
	find_verbatim_term_occurrences): new helpers
	implementing exceptions (e1) verbatim subject of
	definition-list item and (e2) verbatim in first
	cell of table row.

	* bin/checkxref (scan_file): accepts new
	verbatim_aware parameter; combines prose and
	verbatim spans into a single per-anchor candidate
	list.

	* bin/applyxref (--verbatim-aware): mirror CLI flag
	on the bulk-fix tool. Wraps the WHOLE verbatim span
	with [[anchor][~Term~]] form.

	* bin/applyxref (main): rewritten using argparse
	rather than raw sys.argv parsing, to accommodate
	the new flag cleanly.

	* bin/applyxref: same helpers as bin/checkxref
	(intentionally duplicated to keep each script
	self-contained per the existing convention).

	Cross-reference rule documentation:

	* Doc/DevelopmentStandard.org (Cross-Referencing
	Defined Terms): exception (c) Tables of the term
	itself extended to mention the table-row first-
	cell and definition-list subject patterns.
	Verbatim-wrapping paragraph added: when a verbatim
	span's content is a defined term, the canonical
	form is [[anchor][~Term~]].

	Cross-reference fixes applied via bin/applyxref
	--verbatim-aware on Taxonomy.org:

	* Doc/Taxonomy.org (line 176): Designation: ~NPT~
	→ Designation: [[term-npt][~NPT~]].

	* Doc/Taxonomy.org (SC-06 expected resolution):
	(~ACS~, ~KTW~, ...) → ([[term-acs][~ACS~]],
	[[term-ktw][~KTW~]], ...).

	* Doc/Taxonomy.org (Designation prefix glossary
	continuation): ~NPT~ for the American taper →
	[[term-npt][~NPT~]] for the American taper.

	FutureResearch closures:

	* Doc/FutureResearch.org (Verbatim-aware mode for
	bin/checkxref and bin/applyxref): TODO → DONE
	(0.8.9). Resolution and verification details
	recorded.

	* Doc/FutureResearch.org (Recently closed): two new
	0.8.9 entries prepended (verbatim-aware mode and
	HTML orthogonality fix).

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-09
	entries prepended above the 2026-05-08 (0.8.8)
	entries:
	  - Phase 1 completion status (iteration 0.8.9):
	    aggregate ~62.7% (unchanged from 0.8.8;
	    iteration value is in tooling).
	  - Iteration 0.8.9 narrative: project-author
	    input, what landed, BOSL2 standards noted for
	    next session.

	Project files:

	* VERSION: 0.8.8 -> 0.8.9.

	* NEWS: 0.8.9 release note prepended.

	* ChangeLog: This entry.


2026-05-08  Peter Felecan  <peter@felecan.example>

	Iteration 0.8.8. Quality-and-correction iteration
	addressing five project-author review items: per-size
	table alignment, Catalogue.html back-link, HTML
	author/date display, supplier-catalogue mining, and
	an honest answer on the value of 14 PDFs as input.

	Per-size table alignment:

	* Doc/Taxonomy.org (tab:bspp-dimensions): trimmed
	from 14 to 9 rows. Dropped G1/16, G5/8, G7/8,
	G2 1/2, G3. Caption updated to point readers to
	ISO 228-1 for sizes outside the table range.

	* Doc/Taxonomy.org (tab:bspt-dimensions): trimmed
	from 10 to 9 rows. Dropped R1/16. Caption updated
	to point readers to ISO 7-1 for out-of-range
	sizes.

	* Doc/Taxonomy.org (tab:npt-dimensions): trimmed
	from 10 to 9 rows. Dropped 1/16 NPT. Caption
	updated to point readers to ANSI/ASME B1.20.1 for
	out-of-range sizes. First "1/8 NPT" row links
	[[term-npt][NPT]] to satisfy paragraph-tracking
	exemption for the term NPT in subsequent rows.

	tab:bspp-size-equivalence (already 9 rows G1/8 to
	G2) is now consistent with the per-size tables.

	HTML preamble and postamble:

	* Doc/batch-init.el (org-html-postamble): extended
	to include author (%a) and export timestamp (%T)
	using format-spec interpolation, alongside the
	existing Index back-link nav. Author and date now
	display in the HTML postamble matching what the
	PDF shows in its title block.

	* Doc/Illustrations/Catalogue.org (#+HTML_PREAMBLE,
	#+HTML_POSTAMBLE): per-file overrides added
	pointing back-link to ../Index.html (one level up
	from the sub-directory). Author and timestamp
	included in the per-file postamble.

	Bilingual additions from supplier-catalogue mining:

	* Doc/Taxonomy.org (tab:bilingual-gender): caption
	extended to introduce German shorthand AG =
	Außengewinde and IG = Innengewinde. Notes columns
	of the Female, Male, Mixed gender rows updated
	with the German abbreviation.

	* Doc/Taxonomy.org (tab:bilingual-geometry): three
	new rows added --- Extension nipple (rallonge /
	Hahnverlängerung), Swivel nut (écrou prisonnier /
	Gelenkmutter), Wallplate elbow (coude applique /
	Wandwinkel). The existing Plug row's Notes column
	gained the German equivalent /Stopfen/.

	* Doc/Taxonomy.org (tab:bilingual-approvals): new
	row for DVGW W 534, German potable-water approval
	for metallic fittings.

	* Doc/Taxonomy.org (Approvals and certifications,
	term-dvgw-w534): new glossary entry explaining
	that DVGW W 534 is finer-grained than KTW
	(specifically applies to metallic and combination
	drinking-water fittings).

	* Doc/Taxonomy.org (F-08 Plumbing potable-water
	context): paragraph updated to mention DVGW W 534
	alongside WRAS / ACS / KTW as a relevant
	jurisdictional approval.

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-08
	entries prepended above the prior 2026-05-07
	(0.8.7) entries:
	  - Phase 1 completion status (iteration 0.8.8):
	    aggregate to ~62.7% from ~62.5%; descriptive
	    taxonomy to ~99%.
	  - Iteration 0.8.8 narrative: project-author
	    input, decision rationale for the table-
	    alignment options (A, B, C with C chosen), and
	    an honest assessment of catalogue-mining
	    yield.

	Project files:

	* VERSION: 0.8.7 -> 0.8.8.

	* NEWS: 0.8.8 release note prepended.

	* ChangeLog: This entry.


2026-05-07  Peter Felecan  <peter@felecan.example>

	Iteration 0.8.7. Quality-and-correction iteration
	responding to project-author review of the 0.8.6
	delivery. Substantive corrections in the bilingual
	sizing note (retraction of a fabricated "15/21
	family" label), Elbow glossary entry (LR/SR domain
	and materials), Taxonomy Introduction (broken link
	fixed, meta paragraphs removed), section ordering
	(Glossary and Bilingual to last); cross-referencing
	rule scope clarified; bin/applyxref shipped; HTML
	back-link to Index added.

	Cross-referencing rule:

	* Doc/DevelopmentStandard.org (Cross-Referencing
	Defined Terms): scope clarified per project-author
	direction. Replaced the document-role distinction
	with explicit /In scope --- full rule applies/ and
	/Out of scope --- rule does not apply/ lists. Only
	Doc/Taxonomy.org is in scope fully;
	Doc/ResearchJournal.org and Doc/FutureResearch.org
	are in scope only for taxonomy-or-modelling content;
	other documents entirely out of scope. Rule 2
	simplified.

	* Doc/FutureResearch.org (Cross-reference audit on
	non-Taxonomy documents): TODO state changed from
	TODO to DISMISSED with rationale recorded.

	bin/applyxref:

	* bin/applyxref: moved from assistant's working tree
	into project tree. Header rewritten to project-tree
	style with $Id$, GPL v3+ license banner, attribution
	to Claude Opus 4.7 (Anthropic), full description as
	companion to bin/checkxref.

	* Makefile.am (EXTRA_DIST): bin/applyxref added.

	Bilingual sizing note:

	* Doc/Taxonomy.org (Practical sizing note): renamed
	to /French DI×DE designations and the European DN
	system/. Substantive rewrite:
	  - Retraction of the fabricated "15/21 family"
	    label, with verification that French commercial
	    sources do not use "famille".
	  - "Imperial" column header replaced with /BSPP
	    designator/.
	  - Three coexisting designation systems
	    (G-designator, DN code, French DI×DE) explicitly
	    documented in their own paragraph.
	  - German practice paragraph added: G 1/2 Zoll, DN
	    15, 1/2"AG trinity verified against German
	    catalogues (Selfio, Haustechnik24, Spewa, Gep24).
	  - 3-column table (BSPP designator | DN code |
	    French DI×DE) replacing the prior 2-column
	    table.
	  - Cross-reference to F-04 §Bore and thread-OD
	    notation for the precise interpretation of the
	    second number.

	(Coverage map vs Wikipedia): two residual "family"
	mentions cleaned up.

	Elbow glossary entry:

	* Doc/Taxonomy.org (term-elbow): extended with
	/Domain note (LR vs SR)/ recording the usage-domain
	partition (SR for pressurised systems, LR for
	low-pressure gravity-fed in plastics) and the
	implication for BSPPFit scope (LR/SR remains a
	property of an elbow rather than a separate facet
	axis; question deferred to Facet audit). Source:
	project-author-supplied Wikipedia text.

	Taxonomy Introduction:

	* Doc/Taxonomy.org (Introduction): broken link to
	~ResearchJournal.org::*Project scope:...~ replaced
	with stable anchor [[file:ResearchJournal.org::scope-decision]].
	Two meta-process paragraphs removed (scaffolding
	from early iterations 0.2.0 / 0.4.0 referencing
	captions, #+NAME: anchors, Development Standard
	rules; not taxonomy content).

	* Doc/ResearchJournal.org (2026-04-25 Project scope
	entry): <<scope-decision>> anchor added immediately
	after the heading.

	Section reordering:

	* Doc/Taxonomy.org: Coverage map → Glossary →
	Bilingual Labels → Sources and Attributions
	(previously Glossary → Bilingual Labels → Coverage
	map → Sources and Attributions). The glossary and
	bilingual labels are now the document's reference
	back-matter, with eventual Index able to slot in
	alongside them.

	HTML back-link to Index:

	* Doc/batch-init.el (HTML preamble and postamble):
	configured org-html-preamble and org-html-postamble
	to inject a small "← Index" navigation link at top
	and bottom of every HTML document.

	* Doc/Index.org (#+OPTIONS): html-preamble:nil added
	alongside html-postamble:nil so Index.html does not
	get a back-link to itself.

	HTML list of tables:

	* Doc/Taxonomy.org (preamble): #+TOC: tables added
	in a collapsible <details> block. The PDF
	list-of-tables continues to come from the existing
	#+LATEX: \listoftables directive.

	* Doc/FutureResearch.org: new TODO "HTML list of
	figures (requires Org elisp customisation)" with
	three implementation candidates (custom elisp,
	post-processing pass, manual #+HTML: blocks).

	Approval-term cross-references:

	* Doc/Taxonomy.org (SC-06 Expected resolution):
	~WRAS~, ~ACS~, ~KTW~ manually wrapped as
	[[term-wras][~WRAS~]] etc. (link wrapping verbatim,
	not instead of).

	* Doc/FutureResearch.org: new TODO "Verbatim-aware
	mode for bin/checkxref and bin/applyxref" recording
	the script-refinement that would catch these
	automatically.

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-07
	entries prepended above the prior 2026-05-06 (0.8.6)
	entries:
	  - Phase 1 completion status (iteration 0.8.7):
	    aggregate up to ~62.5% from ~62.3%; descriptive
	    taxonomy moves to ~98.5%.
	  - Iteration 0.8.7 narrative: project-author
	    input, what landed, honest disclosures.

	(rolling list /Recently closed/): seven 0.8.7
	closures added.

	Project files:

	* VERSION: 0.8.6 -> 0.8.7.

	* NEWS: 0.8.7 release note prepended.

	* ChangeLog: This entry.


2026-05-06  Peter Felecan  <peter@felecan.example>

	Iteration 0.8.6. Substantive iteration: the descriptive-
	taxonomy cross-reference audit completes on
	Doc/Taxonomy.org, the verification script bin/checkxref
	ships, and a heating-engineer trade-specialist correction
	lands as a substantive F-08 regional note.

	bin/checkxref verification script:

	* bin/checkxref: new file. Python 3 script enumerating
	<<term-X>> anchors and reporting body occurrences not
	preceded by a link, with the four exceptions from
	DevelopmentStandard.org §Cross-Referencing Defined Terms
	applied. Modes: verbose (default), --brief, --summary,
	--include-mass.

	* Makefile.am (EXTRA_DIST): bin/checkxref added.

	* Makefile.am (check-xref target): comment updated to
	reflect that the script now exists; absence-fallback
	branch's exit code changed from 0 (TODO acknowledgement)
	to 1 (defensive failure for partial-checkout cases).

	Cross-reference audit on Doc/Taxonomy.org:

	* Doc/Taxonomy.org: 354 link-additions in two passes (249
	non-trio + 105 BSPP/BSPT/NPT trio). One display-text
	artefact in the Wikipedia coverage map ("nipple, close
	nipple") fixed manually after the bulk pass. Post-audit
	checkxref output: zero defects under the rule's four
	exceptions.

	(F-08 Gas application context): new /Regional note ---
	French metropolitan domestic practice/ subsection added.
	Records that French domestic-plumbing convention uses
	BSPP with a flat gasket for gas service, diverging from
	the European-default BSPT preference. Source: heating
	engineer (France) via project author, iteration 0.8.6.

	(Bilingual table, Sellers thread profile row): /(pas du
	gaz américain) [à vérifier]/ replaced with /filetage
	américain/; usage note added in the Notes column
	recording the trade-specialist information.

	Cross-Referencing rule (DevelopmentStandard.org):

	* Doc/DevelopmentStandard.org (Cross-Referencing Defined
	Terms): updated to reflect 0.8.6 discoveries. Five
	operational rules (split rule 2 into density-depends-on-
	document-role; expanded rule 3 to four exceptions).
	Explicit grammatical-mass terms table with current
	membership (Fitting, Port, Male, Female) and procedure
	for adding/removing terms. Decision narrative recording
	how the document-role distinction was discovered through
	the audit.

	Future Research:

	* Doc/FutureResearch.org (Retroactive cross-reference
	audit, body of Taxonomy.org): state changed from TODO to
	DONE with closure note recording the 354 link-additions,
	verification-script output, and three design refinements.

	(Cross-reference verification script): state changed from
	TODO to DONE with closure note recording script behaviour
	and Makefile wiring.

	(new TODO "Cross-reference audit on non-Taxonomy
	documents"): lighter-density audit for Concept, Research
	Journal (with append-only constraint), Future Research,
	Development Standard, Catalogue, and Index.

	(Decisions awaiting project-author input rolling list):
	BOSL2 source visibility status updated --- the Taxonomy
	half of the descriptive-taxonomy gate is now arguably
	met; remaining gating items are project-author-side.
	/[à vérifier]/ items: /pas du gaz américain/ closed
	(see Resolution events). Recently closed section gained
	three 0.8.6 entries: cross-reference audit; verification
	script; pas du gaz américain.

	Research journal:

	* Doc/ResearchJournal.org: three new 2026-05-06 entries
	prepended above the prior 2026-05-05 (0.8.5) entries:
	  - Phase 1 completion status (iteration 0.8.6):
	    aggregate up to ~62.3% from ~61.7%; descriptive
	    taxonomy moves to ~98%.
	  - Cross-reference audit on Taxonomy.org:
	    every-occurrence rule applied; document-role
	    distinction discovered. Records method, numbers, the
	    three design refinements that emerged, the overlap-
	    handling fix during the bulk-fix pass.
	  - Resolution events for 0.8.6: /pas du gaz américain/
	    resolved by heating engineer; cross-reference audit
	    closed; verification script closed; rule
	    refinement-not-closure noted.

	Project files:

	* VERSION: 0.8.5 -> 0.8.6.

	* NEWS: 0.8.6 release note prepended.

	* ChangeLog: This entry.


2026-05-05  Peter Felecan  <peter@felecan.example>

	Iteration 0.8.5. Quality-and-correction iteration
	responding to seven project-author corrections from
	0.8.4. Architectural substance unchanged; iteration
	value is in correctness.

	Cross-referencing rule reconsidered:

	* Doc/DevelopmentStandard.org (Cross-Referencing
	Defined Terms): rewritten. The 0.8.4 claim that
	"Chicago + ISO + IBM converge on first-occurrence-
	per-section" was overconfident; re-checking the
	sources shows no consensus exists. Revised rule
	acknowledges two competing principles (reader-entry
	vs visual-clutter) and adopts reader-entry for
	BSPPFit. Operational rule: every occurrence of a
	defined term in prose links to the canonical anchor,
	with three exceptions: (a) the definition itself,
	(b) successive uses in the same paragraph, (c)
	tables of the term itself.

	Decisions-awaiting list migrated to FutureResearch:

	* Doc/ResearchJournal.org (2026-05-04 entry): rolling
	list replaced by a stub pointing to the new home.
	Per the temporal-triad convention (Concept = present,
	Journal = past, FutureResearch = future), open
	decisions belong in FutureResearch.

	* Doc/FutureResearch.org: new entry "Decisions
	awaiting project-author input (rolling list)" with
	current open items (BOSL2 source visibility timing,
	bilingual [a verifier] items, LR/SR as separate
	facet, Facet audit, close-nipple gender question)
	and recently-closed items (BOSL2 long-term-goal
	confirmed, street elbow shape, close nipple shape,
	plus history from earlier iterations).

	Underscore-protection audit:

	* Doc/Concept.org: 2 fixes (NPT_Library, snake_case).

	* Doc/DevelopmentStandard.org: 1 fix (old_function in
	deprecation example).

	* Doc/FutureResearch.org: 3 fixes (BSP_thread_form,
	NPT_Library, PERMISSIONS_ERROR).

	* Doc/ResearchJournal.org: 7 fixes (EXTRA_DIST,
	NPT_Library, PERMISSIONS_ERROR, snake_case ×2,
	thread_profile, web_fetch).

	All 13 fixed by wrapping in ~...~ verbatim per
	DevelopmentStandard §4.3.5 (which I had violated in
	prose written in 0.8.3 and 0.8.4). Re-audit confirms
	zero remaining defects.

	Borrow-from-Wikipedia candidates closed:

	* Doc/Taxonomy.org: new glossary entries
	term-elbow-street (street elbow as F-02 mixed-gender
	on F-01 elbow per project-author direction) and
	term-nipple-close (close nipple as length sub-variant
	of nipple per project-author direction). Parent
	Nipple entry extended to record that standard
	nipples are male-only by definition and to introduce
	the open question on the existence of female nipples.

	* Doc/FutureResearch.org (Borrow-from-Wikipedia
	candidates from coverage map): Progress (iteration
	0.8.5) added. Two candidates closed; LR/SR remains
	deferred.

	BOSL2 integration confirmed as long-term goal:

	* Doc/Concept.org (Modelling Approach summary table,
	BOSL2 row): updated to record /Long-term goal
	confirmed by project author in 0.8.5; deferred until
	taxonomy half of Phase 1 is finalised/. Cross-
	reference re-pointed from the now-stub Journal entry
	to the FutureResearch rolling list.

	Cross-reference verification script (naming corrected):

	* Doc/FutureResearch.org (Cross-reference verification
	script): script renamed from bin/check-cross-refs to
	bin/checkxref per DevelopmentStandard §Naming
	Convention Scope §2.2.1 (lowercase single word, no
	hyphen, no extension). Output section also notes the
	required Makefile rule (added below).

	(Retroactive cross-reference audit): description and
	method revised to reflect the every-occurrence rule;
	effort estimate marked /provisional/ pending the
	verification-script's first defect-report.

	Makefile target check-xref:

	* Makefile.am: new target check-xref. Detects the
	script's absence and exits gracefully with a "not yet
	implemented" message; once the script lands, the rule
	executes it directly. Naming: target name
	check-xref (with hyphen, idiomatic for Make);
	executable name bin/checkxref (no hyphen, per the
	project naming rule). Deliberately not identical.

	New Index TODO:

	* Doc/FutureResearch.org: new entry "Index for the
	Taxonomy document (gating on document size)". Records
	state-of-the-art thresholds for when technical
	documents warrant an index (Chicago, ASI, ISO
	999:1996, Mulvany), and proposes a concrete trigger
	for action.

	Research journal:

	* Doc/ResearchJournal.org: three new 2026-05-05
	entries prepended above the prior 2026-05-04 (0.8.4)
	entries:
	  - Phase 1 completion status (iteration 0.8.5):
	    aggregate up to ~61.7% from ~61.5%; descriptive
	    taxonomy moves to ~97%.
	  - Cross-referencing rule reconsidered: honest
	    research, revised policy. Records the 0.8.4
	    overconfident framing, what the sources actually
	    say, the two-principles synthesis, the
	    operational change, and a meta-pattern recorded
	    for self-correction (don't search for sources
	    that confirm a position you already hold).
	  - Resolution events for 0.8.5: BOSL2 long-term
	    goal confirmed; street elbow shape adopted;
	    close nipple shape adopted; close nipple gender
	    question open pending trade-specialist input;
	    [a verifier] items preserved; LR/SR deferred;
	    Facet audit deferred; rolling-list location
	    migrated; underscore-protection audit completed.

	Project files:

	* VERSION: 0.8.4 -> 0.8.5.

	* NEWS: 0.8.5 release note prepended.

	* ChangeLog: This entry.


2026-05-04  Peter Felecan  <peter@felecan.example>

	Iteration 0.8.4. Quality-and-correction iteration.
	The substance is small (one new illustration, several
	glossary entries, bilingual cross-references); the
	structural work is large (Concept refactor moving
	decision content to the Research Journal, new
	cross-referencing rule, retraction of the 0.8.3
	"minority pattern" framing on gender handling).

	Concept document refactor (Constitution alignment):

	* Doc/Concept.org (Modelling Approach for the BSPP
	Model Library): refactored from 460-line decision-
	record into 87-line summary table that cross-
	references the Research Journal where decisions
	properly live. Old form duplicated decision history
	in Concept; new form lists architectural choices
	with one row per choice, columns Aspect / Current
	choice / Decided in (iteration) / Journal cross-
	reference. Decision content preserved (in the
	journal entries it cross-references, which already
	contained it).

	(BOSL2-integration goal added to summary table):
	noted as a possible long-term goal raised by the
	project author. If pursued, the architecture
	acquires conformance-to-BOSL2 as a hard constraint;
	tuning deferred to a subsequent iteration once
	BOSL2 source is fully visible.

	Cross-referencing rule:

	* Doc/DevelopmentStandard.org: new section "Cross-
	Referencing Defined Terms" added, with the
	five-rule standard derived from Chicago Manual of
	Style §2.36 + §14, ISO/IEC Directives Part 2, and
	Microsoft + IBM style guides.

	Bilingual section cross-references and new glossary
	entries:

	* Doc/Taxonomy.org: 65 row-level updates linking
	both the English and French columns of the
	bilingual section to glossary anchors.

	(Glossary): 52 new <<term-X>> anchors added to
	entries that previously lacked them. 7 new
	glossary entries: Cap, Coupling, Cross, Elbow
	(with Wikipedia borrow-candidates: 22.5°
	angle, LR vs SR distinction, plumbing-vs-protractor
	angle clarification), Fitting (generic), Plug,
	Port, Sellers profile, Tee, Wye.

	I-09 Sellers historical thread-form plate:

	* Doc/Illustrations/ThreeThreadForms.png: new file.
	William Sellers (1864), public domain via
	Wikimedia Commons. Supplied by the project
	author.

	* Doc/Taxonomy.org (F-03 Comparison subsection):
	I-09 illustration embedded with caption noting
	the informational status (1864 plate, pre-dates
	modern dimensional standards; reproduced for
	visual comparison only).

	(Sources and Attributions): I-09 row added to the
	per-illustration credit table.

	* Doc/Illustrations/Catalogue.org (Index): I-09
	row added.

	(per-slot record): new section "DONE I-09 ---
	Three-thread-form historical plate" with source,
	attribution, role, why-informational rationale,
	resolution note.

	* Doc/Makefile.am (EXTRA_DIST): added
	Illustrations/ThreeThreadForms.png so make dist
	ships the new file.

	Research journal:

	* Doc/ResearchJournal.org: six new 2026-05-04
	entries prepended above the prior 2026-05-03
	(0.8.3) entries:
	  - Phase 1 completion status (iteration 0.8.4):
	    aggregate up to ~61.5% from ~60.5%; descriptive
	    taxonomy moves to ~96.5%; illustrations to ~56%.
	  - Modelling Approach: gender-handling decision
	    revisited (correction to 0.8.3 framing).
	    Retracts the "minority pattern" language;
	    records the deeper rule (taxonomy is source of
	    truth for API shape, surveyed-library counts
	    are not votes); architectural choice itself
	    unchanged.
	  - Concept document refactor: decision content
	    moved to Research Journal. Records what was
	    wrong with the old shape, what was done in
	    0.8.4, the Constitution rule made explicit,
	    the lesson recorded for the assistant.
	  - Cross-referencing rule established and bilingual
	    section fixed. Records the project-author-
	    identified regression, the state-of-the-art
	    consulted (Chicago + ISO + IBM converge), the
	    five-rule standard, what was fixed in 0.8.4,
	    what remains a defect.
	  - Decisions awaiting project-author input (rolling
	    list). New journal entry consolidating the open
	    decisions; refresh convention documented.
	  - Iteration 0.8.4 narrative.

	FutureResearch:

	* Doc/FutureResearch.org: two new TODOs added:
	  - Retroactive cross-reference audit (body of
	    Taxonomy.org outside glossary and bilingual
	    section).
	  - Cross-reference verification script
	    (bin/check-cross-refs).

	(Borrow-from-Wikipedia candidates from coverage map):
	progress note added; Wye and Elbow extensions
	adopted in 0.8.4; three remain pending decision.

	Project files:

	* VERSION: 0.8.3 -> 0.8.4.

	* NEWS: 0.8.4 release note prepended.

	* ChangeLog: This entry.


2026-05-03  Peter Felecan  <peter@felecan.example>

	Iteration 0.8.3. Substantive iteration: the project
	author supplied the three OpenSCAD libraries directly
	(Makrokaba.zip, DoommaisterOpenscadPipeFittingScripts.zip,
	DoommeisterPipeRoundDuctFittingsLibraryParametric.zip),
	closing the description-only gap that 0.8.1
	acknowledged honestly. The Modelling Approach Audit
	extends with empirical confirmations from direct
	source reading. Separately, the Wikipedia coverage
	map landed.

	Empirical confirmations from direct source reading:

	* Doc/Concept.org § Modelling Approach for the BSPP
	Model Library: two new subsections inserted between
	"Provenance and credit" and "What remains open":
	  - "Empirical confirmations from direct source reading
	    (0.8.3)": records what was read, what survives,
	    what extends, and what is now explicitly minority-
	    pattern in the 0.8.1 architectural decisions.
	    Compositional pattern fully confirmed (Makrokaba's
	    six adapter files); self-correcting middle-diameter
	    pattern documented (worth borrowing); gender
	    handling minority-pattern acknowledged (BSPPFit's
	    single-module choice follows doommeister; Makrokaba
	    and uwo-fast both use two parallel modules); two-
	    layer underscore-prefix convention from doommeister
	    adopted; test-area / library-mode duality from
	    doommeister adopted; threadlib API surface confirmed.
	  - "Patterns from doommeister's round-ducting library":
	    three-layer composition (end + middle + end with
	    composable middles); parametric port-count for
	    manifolds and N-way tees (manifold_n(ways=3, ...)).
	  - "Provenance update --- additions after 0.8.3":
	    chain of derivative credit fully traced (Kirshner ->
	    doommeister modified; Schlatter -> Makrokaba ->
	    uwo-fast).
	  - "Decisions revisited (none changed, two extended)":
	    standard-size handling extends to CSV-source-of-truth
	    + script-generated-OpenSCAD pattern; documentation
	    generation extends to also adopting test-area
	    comment-toggle convention.

	Wikipedia coverage map:

	* Doc/Taxonomy.org: new top-level section "Coverage map
	vs Wikipedia /Piping and plumbing fitting/" inserted
	between "Bilingual Labels" and "Sources and
	Attributions". Section anchor: wikipedia-coverage-map.

	  - 17-row matrix mapping Wikipedia subject-categories
	    against BSPPFit's facet/section coverage.
	  - "What BSPPFit covers that Wikipedia does not"
	    sub-section.
	  - "What Wikipedia covers that BSPPFit intentionally
	    does not" sub-section.
	  - "Borrow-from-Wikipedia candidates" list (six items).
	  - Currency note: point-in-time review; Wikipedia
	    article evolves.

	FutureResearch updates:

	* Doc/FutureResearch.org (Wikipedia coverage map):
	state changed from TODO to DONE with closure note
	recording output, currency, and the borrow-candidates
	list.

	(new TODO "Borrow-from-Wikipedia candidates from
	coverage map"): 0.25-day effort. Six items: 22.5°
	elbow, LR vs SR elbow, street elbow, plumbing-vs-
	protractor angle clarification, wye as distinct from
	tee, close nipple. Each to be either adopted or
	rejected with rationale in a future iteration.

	Research journal:

	* Doc/ResearchJournal.org: three new 2026-05-03
	entries prepended above the prior 2026-05-03 (0.8.2)
	entries:
	  - Phase 1 completion status (iteration 0.8.3):
	    aggregate up to ~60.5% from ~60%; descriptive
	    taxonomy moves to ~96% from ~95%; model library
	    moves to ~7% from ~5% reflecting the verified-not-
	    inferred architecture.
	  - Modelling Approach Audit: empirical confirmations
	    from direct source. Records what was read in each
	    archive, the empirical findings against the 0.8.1
	    decisions, the new patterns from doommeister
	    round-ducting, the standards reference broadening
	    (BS 1387, BS 21), the honest limit retired and
	    the new one taking its place.
	  - Wikipedia coverage map landed; iteration 0.8.3
	    narrative. Records the verification-iteration
	    framing, the prioritisation-bias acknowledgement
	    carried forward, and the three legitimate next-
	    iteration choices (project-author [a verifier]
	    corrections; borrow-candidate adoption-decisions;
	    first model-library file).

	Project files:

	* VERSION: 0.8.2 -> 0.8.3.

	* NEWS: 0.8.3 release note prepended.

	* ChangeLog: This entry.


2026-05-03  Peter Felecan  <peter@felecan.example>

	Iteration 0.8.2. Substantive iteration: the French
	glossary lands as a new "Bilingual Labels --- English
	<-> French" section in Taxonomy.org. Eight sub-sections
	of bilingual tables, plus a Practical sizing note
	documenting the French 15x21-family designations, plus
	an explicit out-of-scope block. The next round of
	project-author photography is unblocked.

	Bilingual Labels section in Taxonomy.org:

	* Doc/Taxonomy.org: new top-level section "Bilingual
	Labels --- English <-> French" inserted between the
	Glossary and Sources and Attributions. Section
	anchor: bilingual-glossary.

	(Bilingual table per glossary sub-section): Thread
	forms (6 rows including BSPP, BSPT, NPT, Whitworth,
	Sellers, pas du gaz historical). Geometry and ports
	(20 rows covering the full geometry catalogue plus
	port terminology). Gender (3 rows). Sealing (9 rows
	including the Joint Dowty / Joint Usit genericised
	brand-name pair, filasse + pate traditional French
	plumbing). Materials (8 rows). Pressure (9 rows).
	Approvals (4 rows for the EN-/jurisdiction-specific
	marks). Tools and trade terms (10 rows including the
	collier Serflex / Jubilee clip parallel and the
	plumber's leak hierarchy suinter < goutter < fuir).
	Application terms (5 rows for adjacent connection
	systems referenced for confusion-avoidance).

	(Practical sizing note subsection): table mapping
	the French 8 rows of designations (8x13, 12x17,
	15x21, 20x27, 26x34, 33x42, 40x49, 50x60) to BSPP
	designators (G1/4 through G2). Documents the
	identification workflow for the project author's
	photography of French-labelled fittings.

	(What this section does not cover block): explicit
	out-of-scope enumeration --- pipe materials beyond
	brass and steel, hydraulic/pneumatic specialised
	vocabulary beyond BSPP intersection, sanitary
	fittings DIN 11581, items flagged [a verifier].

	(Sources paragraph in section preamble): records the
	AFNOR / Wikipedia FR / OQLF / French manufacturer
	catalogue sources used. Records the format choice
	rationale and the honest limit (assistant is not a
	francophone professional plumber).

	French glossary TODO closed:

	* Doc/FutureResearch.org (French glossary): state
	changed from TODO to DONE with closure note.
	Records: format choice (single bilingual table per
	sub-section, sorted by English term, with the inline-
	parenthetical and inline-plus-table alternatives
	considered and rejected); sources used (AFNOR,
	Wikipedia FR, OQLF, manufacturer catalogues); honest
	limits surfaced (assistant not a francophone trade
	practitioner; items flagged [a verifier] for project-
	author correction); project-value link (next round
	of photography unblocked).

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-03 entries
	prepended above the prior 2026-05-03 (0.8.1)
	entries:
	  - Phase 1 completion status (iteration 0.8.2):
	    aggregate up to ~60% from ~59%; descriptive
	    taxonomy moves to ~95% from ~92% reflecting the
	    bilingual section's coverage growth.
	  - French glossary: bilingual labels section landed.
	    Format choice rationale (A inline-only rejected,
	    B table-only chosen, C both-formats rejected);
	    sources used; coverage decisions (eight sub-
	    sections, Practical sizing note, What this
	    section does not cover); honest limits surfaced
	    inline; propose-not-produce alignment (textual
	    production with textual sources is on the right
	    side of the line, distinguishing this from the
	    v0.6.0 visual-production-without-visual-
	    perception mistake); iteration narrative noting
	    this is the project-author's-workflow iteration.

	Project files:

	* VERSION: 0.8.1 -> 0.8.2.

	* NEWS: 0.8.2 release note prepended.

	* ChangeLog: This entry.


2026-05-03  Peter Felecan  <peter@felecan.example>

	Iteration 0.8.1. Substantive iteration: the Modelling
	Approach Audit closes with a synthesised section
	landing in Concept.org. No model code yet --- the
	architecture is recorded first, by design. The
	iteration also ratifies a splitting policy that defaults
	to combining substantive work into single iterations
	rather than shipping in small clean batches, in
	response to the project author's token-window
	constraints.

	Modelling Approach for the BSPP Model Library:

	* Doc/Concept.org: new top-level section "Modelling
	Approach for the BSPP Model Library" inserted between
	"Related Work --- Learning From, and Distinguishing
	From" and "Completion Status". Eight architectural-
	decision subsections plus "What remains open" plus
	currency stamp. Roughly 350 lines.

	Decisions recorded:
	  - Threading layer: BOSL2.
	  - Parameterisation of nominal size: designator-keyed
	    primary, raw-argument fallback.
	  - Gender handling: single module with gender
	    parameter (not the two-module pattern from
	    uwo-fast).
	  - Composition: facet-keyed record using F-01..F-08
	    as the schema. /This is BSPPFit's distinctive
	    contribution to the modelling-pattern landscape./
	  - File and namespace organisation: folder per
	    geometry class matching F-01's G-01..G-09.
	  - Tolerance handling: multiple named parameters
	    (tol_thread, tol_gasket, tol_face, tol_pipe)
	    rather than BOSL2's single $slop.
	  - Documentation generation: gallery modules per
	    parametric file, sharing code with user-callable
	    modules so they cannot drift.
	  - Provenance and credit: BOSL2, uwo-fast / Brooks et
	    al. 2025 paper, Makrokaba, doommeister, threadlib.

	Modelling Approach Audit closed:

	* Doc/FutureResearch.org (Modelling Approach Audit):
	state changed from STARTED to DONE with a closure
	note. Records the coverage achieved (full source
	reading of two uwo-fast files plus the open-access
	MDPI paper; description-level reading of doommeister
	and Makrokaba, blocked by 403 from Thingiverse) and
	the honest limits (depth of reading was uneven;
	synthesis is biased toward uwo-fast's vocabulary).

	(orphaned subheadings cleanup): removed leftover
	** Targets and progress / ** Notes from 0.8.0 in-flight
	reading / ** Audit questions / ** Output / ** Effort
	remaining / ** Why this should land before the model
	library starts subsections from the previous STARTED
	entry. The synthesised content lives in Concept.org
	and the journal now; preserving the working-notes
	scaffolding under the DONE entry would have been
	clutter.

	(duplicate "* TODO French glossary" cleanup): removed
	the stray duplicate heading introduced by the same
	cleanup operation.

	Research journal:

	* Doc/ResearchJournal.org: three new 2026-05-03
	entries prepended above the prior 2026-05-03 (0.8.0)
	entries:
	  - Phase 1 completion status (iteration 0.8.1):
	    aggregate up to ~59% from ~57%; model library
	    component moves from 0% to 5% reflecting the
	    architectural-decisions-recorded value.
	  - Modelling Approach Audit: synthesised findings.
	    Per-library findings condensed (uwo-fast,
	    doommeister, Makrokaba, BOSL2). Architectural
	    choices summarised in a borrowed-from table.
	    What was /not/ borrowed and why. Honest limits
	    of the audit. Next steps (first concrete files
	    to write are pure-utility ones:
	    Util/Designator.scad and Util/FacetRecord.scad).
	  - Iteration 0.8.1: full Modelling Approach Audit,
	    large-iteration policy. Records the splitting
	    policy decision and applies the prioritisation
	    bias self-check from 0.8.0 to this iteration's
	    own choices (modelling section came together
	    quickly; French glossary, probably more
	    immediately important to the project author's
	    workflow, was again deferred --- the bias is
	    consistent).

	Project files:

	* VERSION: 0.8.0 -> 0.8.1.

	* NEWS: 0.8.1 release note prepended.

	* ChangeLog: This entry.


2026-05-03  Peter Felecan  <peter@felecan.example>

	Iteration 0.8.0. Substantive iteration: four
	illustrations land with full attribution, build system
	fixed against autoconf's configure~ backups surviving
	make maintainer-clean, auto-generated sitemap replaced
	by an authored Index.org, Modelling Approach Audit
	started (one of three target libraries read; synthesis
	split off to 0.8.1).

	Illustrations placed:

	* Doc/Illustrations/WhitworthThread.svg: New. CC BY-SA
	4.0; Original: Tjt263, Vector: AntiCompositeNumber,
	via Wikimedia Commons. The 55° Whitworth thread profile
	diagram.

	* Doc/Illustrations/BondedWasher.png: New. Public
	domain; Wikipedia user Brotherpete (Paint.net), via
	Wikimedia Commons. Cross-section diagram with labelled
	callouts for outer hard ring and inner soft ring.

	* Doc/Illustrations/BSPPMaleStraightThread.png: New.
	CC BY-SA 4.0; Kees08, via Wikimedia Commons. Project
	author downsampled the 65.5 MB original to 19 KB.

	* Doc/Illustrations/WormDriveHoseClamp.png: New.
	Project author's own photograph showing three
	hose-clamping mechanisms side by side. GPL v3+.

	* Doc/Taxonomy.org (F-03 Comparison): replaced the
	forwarding paragraph with the actual figure embedding
	for I-01.

	(F-03 BSPP subsection): added I-04 figure embedding
	in the BSPP designation paragraph.

	(F-05 Mechanisms, bonded washer entry): replaced the
	forwarding paragraph with the actual figure embedding
	for I-02.

	(F-05 Mechanisms, cone seat entry): updated the
	forwarding paragraph to reflect the project author's
	rejection of the Wikipedia JIC-fitting source; now
	points to FutureResearch for alternative-source
	tracking.

	(Glossary, Worm-drive clamp entry): added I-05 figure
	embedding.

	(new section "Sources and Attributions"): consolidated
	per-illustration credit table with six columns
	(Slot / File / Title / Author / License / Source).

	(document header): \listoffigures{} restored since
	figures are now present.

	* Doc/Illustrations/Catalogue.org: index table updated
	with new statuses --- I-01, I-02, I-04, I-05 marked
	DONE; I-03 RESTARTED; I-06 DISMISSED; I-07 and I-08
	DEFERRED. Per-slot sections rewritten for I-01 through
	I-08 with resolution paragraphs documenting what was
	chosen / rejected / deferred and why. Stale duplicate
	I-05 / I-06 / I-07 / I-08 sections from the 0.7.0
	bootstrap removed.

	Build system fixes:

	* Makefile.am (MAINTAINERCLEANFILES): added configure~,
	aclocal.m4~, Makefile.in~. These are autoreconf's
	safety backup files (the project author confirmed not
	using Emacs make-backup-files); without listing them
	they survived make maintainer-clean. An expanded
	comment explains the file origin.

	* Doc/Makefile.am (MAINTAINERCLEANFILES): added
	Makefile.in~ for the same reason.

	(CLEANFILES): removed the blanket *.png pattern. PNGs
	under Doc/Illustrations/ are project sources (project-
	author photographs and license-clean external images);
	make clean must not delete them. Code comment explains
	the rationale.

	(EXTRA_DIST): added the four new illustration files
	plus Index.org so that make dist ships them.

	(DOC_FILES): added Index.org so that the publishing
	pass produces Index.html.

	(CLEANFILES += html.stamp index.html sitemap.org): now
	just html.stamp; Index.html is built normally and
	cleaned via $(HTML_DOCS).

	Authored documentation index:

	* Doc/Index.org: New. Modeled on the project author's
	uploaded svah Index.org. Versioned subtitle via
	#+INCLUDE: version.org. An Introduction section
	setting project context. Grouped sections: Project
	constitution and standards; Concept and scope;
	Reference content; Research and planning; Asset
	catalogues. Each link annotated with a one-sentence
	description.

	* Doc/batch-init.el (org-publish-project-alist):
	dropped :auto-sitemap, :sitemap-filename,
	:sitemap-title, :sitemap-style. Index.html is now
	built normally from Index.org. Updated :html-link-home
	and :html-link-up from "index.html" to "Index.html"
	(PascalCase, consistent with the file naming
	convention).

	(bsppfit/publish-all): removed the post-publish
	sitemap.html -> index.html rename, no longer needed.

	(comments): added a v0.8.0 paragraph in the cross-
	document anchor resolution comment block recording
	the sitemap-to-Index transition rationale.

	Modelling Approach Audit started:

	* Doc/FutureResearch.org (Modelling Approach Audit):
	state changed from TODO to STARTED. New "Notes from
	0.8.0 in-flight reading" subsection captures findings
	from reading uwo-fast/pipe-fitting-SCAD's
	pfDesigner.scad: hybrid raw-input + thread-table-
	search parameterisation, explicit Upper/Middle/Lower
	composition with positional parameter list, multi-
	design preview pattern, asymmetric tolerance handling
	(tol_pipe + tol_gasket vs BOSL2's single $slop),
	$preview/$fn rendering switch, fudge factor for
	circle subtraction. "Targets and progress",
	"Open questions for 0.8.1", "Audit questions
	(still pending)" subsections added.

	(new TODO "French glossary --- bilingual labels for
	fitting terms"): direct producer of project value;
	the project author needs French equivalents to
	identify which fitting on the workbench corresponds
	to which class for the next photography round. Scope
	covers F-03 / F-05 / Geometry-and-ports / Tools
	groups. Format question (inline parenthetical vs
	parallel table) noted but deferred.

	(new TODO "I-03 alternative cone-seat illustration
	source"): search angles listed --- Wikimedia Commons
	subcategories, project-author photograph (gated on
	the French glossary), OpenSCAD render once the model
	library exists.

	(new TODO "I-08 BSPT taper geometry diagram"): search /
	project-author drawing / OpenSCAD render once the
	model library exists.

	Research journal:

	* Doc/ResearchJournal.org: three new 2026-05-03
	entries prepended above the prior 2026-05-03 entries:
	  - Phase 1 completion status (iteration 0.8.0):
	    aggregate up to ~57% from ~52%, driven by the
	    illustrations component moving from ~5% to ~50%.
	  - Iteration 0.8.0: illustrations land, build fix,
	    authored Index, modelling audit begun. Five
	    strands recorded with rationale. Captures the
	    split decision and its acceptance.
	  - Honest answer: assistant prioritisation bias.
	    Records the assistant's confirmation that its
	    proposed Modelling-first ordering is partly biased
	    by its own confidence in software-architecture
	    work over taxonomy-design work. The disclosure
	    belongs in the journal rather than the
	    Development Standard because it is a diagnosis
	    of one episode rather than a project-wide rule.

	Project files:

	* VERSION: 0.7.2 -> 0.8.0. Minor digit bumped because
	the iteration ships substantive new content (four
	placed illustrations, build fix, authored Index, the
	beginning of the modelling audit) rather than only
	sequence-step refinements.

	* NEWS: 0.8.0 release note prepended.

	* ChangeLog: This entry.


2026-05-03  Peter Felecan  <peter@felecan.example>

	Iteration 0.7.2. Minor iteration: documentary reframing
	and audit planning, no Phase 1 deliverable state changes.
	Related Work section in Concept.org reframed (learning
	from precedent is now the primary frame); three concrete
	audit TODOs opened in FutureResearch.org for subsequent
	iterations.

	Related Work section reframed (Concept):

	* Doc/Concept.org (Related Work and Differentiation):
	section title changed to "Related Work --- Learning From,
	and Distinguishing From". Lead paragraph rewritten to
	state that the primary purpose of surveying related work
	is to inherit discipline, vocabulary, and modelling
	decisions from earlier efforts. Each of the three
	subsections (BIM, OpenSCAD libraries, encyclopaedic
	sources) now structured as: items / "What we can learn"
	/ "What distinguishes us". The "What we can learn"
	blocks contain the operationally useful conclusions
	with explicit references to the new TODOs in
	FutureResearch.org.

	"Reuse, not reinvent" list expanded with two new
	entries: faceted-classification discipline (ISO 12006-2
	+ UniClass 2015) and modelling architecture for the
	model library (informed by uwo-fast/pipe-fitting-SCAD,
	doommeister, Makrokaba).

	Currency stamp updated: "first written 0.7.1, reframed
	0.7.2".

	Future research --- three planned audits:

	* Doc/FutureResearch.org: three new TODO entries
	inserted before the recurring "Re-review related-work
	survey" entry:
	  - "Facet audit against ISO 12006-2 and UniClass 2015"
	    (1 day): read the standard, map F-01..F-08 against
	    UniClass's eleven tables, decide whether to add
	    facets (Activities, Tools), merge facets, or adopt
	    hierarchical coding for G-01..G-09.
	  - "Modelling Approach Audit (read source of three
	    OpenSCAD libraries)" (1 day): read the source of
	    uwo-fast/pipe-fitting-SCAD, doommeister, Makrokaba.
	    Extract decisions on parameterisation, gender
	    handling, namespace organisation, composition,
	    documentation generation, tolerance handling.
	    Output: Modelling Approach section in Concept or
	    DevelopmentStandard, written before the model
	    library starts.
	  - "Wikipedia coverage map" (0.5 day): map our
	    Taxonomy sections against the Piping and plumbing
	    fitting Wikipedia article, identify exclusive
	    coverage on each side, record explicit borrowings.

	Research journal:

	* Doc/ResearchJournal.org: two new 2026-05-03 entries
	prepended above the prior 2026-05-03 (0.7.1) entries:
	  - Phase 1 completion status (iteration 0.7.2):
	    aggregate unchanged at ~52%; iteration is reframing
	    and planning, no Phase 1 progress.
	  - Related work survey: reframed from
	    "differentiation" to "learning" as primary frame.
	    Records the project author's diagnosis (the
	    original framing was defensive and inverted the
	    operationally useful conclusions), the decision,
	    the implementation in Concept.org, and the three
	    concrete audits planned for subsequent iterations.

	Project files:

	* VERSION: 0.7.1 -> 0.7.2.

	* NEWS: 0.7.2 release note prepended.

	* ChangeLog: This entry.


2026-05-03  Peter Felecan  <peter@felecan.example>

	Iteration 0.7.1. Minor iteration: documentary additions,
	no Phase 1 deliverable state changes. New "Working with
	the LLM assistant" section in DevelopmentStandard.org
	codifying the assistant's environment constraints; new
	"Related Work and Differentiation" section in Concept.org
	surveying adjacent projects; recurring annual TODO opened
	to re-review the related-work survey.

	Working with the LLM assistant (Development Standard):

	* Doc/DevelopmentStandard.org: new top-level section
	"Working with the LLM assistant", inserted between
	Introduction and File Naming. Subsections: Visual
	perception, Implication for illustration work, Web
	access, Implication for research and gathering work,
	Drawing tools and their limits, What the assistant
	should propose not produce, Self-knowledge limits. The
	section formalises the workflow that produced the
	iteration 0.7.0 illustration catalogue (assistant
	catalogues, project author fetches and places) and the
	v0.6.0-mistake-prevention rule (propose, don't produce
	degraded).

	Related Work and Differentiation (Concept):

	* Doc/Concept.org: new top-level section "Related Work
	and Differentiation", inserted between Validation and
	Completion Status. Six subsections: Industry
	classification standards (BIM), Open OpenSCAD model
	libraries, Encyclopaedic and educational written
	sources, Combined position, What BSPPFit should reuse
	not reinvent, Currency of this survey.

	Surveys: OmniClass, UniClass 2015, MasterFormat,
	UniFormat, SfB family (CCS, Talo 90, BSAB, JCCS),
	BOSL2, Nicolas45Dev/NPT_Library, uwo-fast/pipe-fitting-
	SCAD, threadlib (Adrian Schlatter), DimensionPrint
	(Thingiverse), Makrokaba (Thingiverse), doommeister
	(Thingiverse), Wikipedia (BSP, piping fittings,
	plumbing, JIC fitting, bonded seal, hose clamp,
	O-ring), manufacturer guides, ISO/BS standards,
	Machining Doctor.

	Differentiation conclusion: BSPPFit combines a faceted
	descriptive taxonomy, validation scenarios as
	selection reasoning, and a parametric model library
	traceable to the taxonomy --- no surveyed project
	combines all three.

	Currency stamped: 2026-05-03. Re-review tracked as a
	recurring annual TODO in FutureResearch.org.

	Future research:

	* Doc/FutureResearch.org: new TODO "Re-review related-
	work survey (recurring)" with annual cadence. Inserted
	before the DONE block. The entry never closes; each
	cycle is logged as a fresh ResearchJournal entry under
	the pattern "Related work survey".

	Research journal:

	* Doc/ResearchJournal.org: three new 2026-05-03 entries
	prepended above the prior 2026-05-02 entries:
	  - Phase 1 completion status (iteration 0.7.1):
	    aggregate unchanged at ~52%; contribution is
	    documentation hygiene, not Phase 1 progress.
	  - Related work survey: full method, findings,
	    differentiation, decision, reuse vs originate
	    split.
	  - Assistant capabilities and working-environment
	    constraints: visual perception, web access,
	    drawing tools. Options A/B/C considered for
	    placement of the rule; chose Development Standard
	    (option C). Self-knowledge caveat recorded.

	Project files:

	* VERSION: 0.7.0 -> 0.7.1.

	* NEWS: 0.7.1 release note prepended.

	* ChangeLog: This entry.


2026-05-02  Peter Felecan  <peter@felecan.example>

	Iteration 0.7.0. Corrective iteration addressing the
	v0.6.0 review: hand-drawn SVGs retracted, illustration
	strategy switches to license-clean external sources via a
	catalogue document for the project author to fetch and
	credit; subdirectory naming brought into line with the
	convention (illustrations/ -> Illustrations/); PDF version
	macro fixed; glossary intra-references converted from
	italic text to anchored links.

	Illustrations: retraction and new sourcing strategy:

	* Doc/illustrations/dowty-seal.svg
	* Doc/illustrations/cone-seat.svg
	* Doc/illustrations/thread-profiles.svg: Deleted. The
	first two were judged a hodge-podge by the project author
	on review of v0.6.0; the third was passable but not
	correct. The directory illustrations/ itself is gone (see
	naming entry below).

	* Doc/Illustrations/Catalogue.org: New. Working catalogue
	listing 8 candidate illustration slots (I-01 through
	I-08): Whitworth thread profile, bonded seal washer,
	cone seat / JIC, BSPP male thread photograph, worm-drive
	clamp, pipe fitting types overview, O-ring cross-section,
	BSPT taper geometry. Each entry carries source URL,
	author, license, attribution string template, role in
	the project, and target local PascalCase filename.
	Identifies Wikimedia Commons Whitworth_Thread.svg
	(CC BY-SA 4.0) as the primary candidate for I-01 and
	BSPP_Male_Straight_Thread.png for I-04.

	* Doc/Taxonomy.org (F-03 Comparison): the
	thread-profiles.svg embedding replaced with a
	one-paragraph forwarding note pointing to slot I-01 of
	Catalogue.org.

	(F-05 Mechanisms, bonded washer entry): the
	dowty-seal.svg embedding replaced with a forwarding note
	pointing to slot I-02.

	(F-05 Mechanisms, cone seat entry): the cone-seat.svg
	embedding replaced with a forwarding note pointing to
	slot I-03.

	(document header): \listoffigures{} directive removed
	since the document no longer carries figures. (Will
	return when the catalogued illustrations land in
	subsequent iterations.)

	* Doc/FutureResearch.org (Thread cross-section
	illustrations): TODO state changed from DONE (v0.6.0) to
	RESTARTED. Body rewritten to record the v0.6.0 closure
	attempt, the project author's review, the retraction,
	and the new approach via Illustrations/Catalogue.org.
	Closure criteria updated to: at least three catalogue
	slots reach the DONE status.

	Directory naming: illustrations/ -> Illustrations/:

	* Doc/Illustrations/: New directory. PascalCase per the
	file-naming convention.

	* Doc/DevelopmentStandard.org (Naming Convention Scope):
	new "Common lapse" note explicitly warning that
	subdirectories created mid-project for new artefact
	classes are subject to the same convention.
	Shell-friendliness of all-lowercase names is not a
	justification.

	PDF version macro fix:

	* Doc/version.org.in: REVISION macro rewritten to expand
	to v@PACKAGE_VERSION@ for both backends, replacing the
	previous backend-conditional form
	(@@latex:v\svnInfoRevision@@ @@html:v@PACKAGE_VERSION@@@).
	Cause of the v0.6.0 bug: each document's
	#+LATEX_HEADER: \svnInfo $Id$ ran after the include and
	redefined \svnInfo, overwriting the title-page revision
	with the per-file SVN keyword (often blank). Fix
	bypasses the indirection entirely; configure.ac already
	substitutes the full string.

	Glossary intra-references: anchor-and-link mechanism:

	* Doc/Taxonomy.org (Glossary, Geometry-and-ports group):
	added inline anchors <<term-inlet>>, <<term-manifold>>,
	<<term-nipple>>, <<term-outlet>> at the start of each
	canonical entry's body. Outlet entry now uses
	[[term-inlet][Inlet]] link instead of /See /Inlet/./.

	(Glossary, Tools, accessories, and trade terms group):
	added anchors <<term-faucet>>, <<term-hose-clamp>>,
	<<term-hose-clip>>, <<term-jubilee-clip>>,
	<<term-leak-argot>>, <<term-shutoff-tap>>,
	<<term-shutoff-valve>>, <<term-spigot>>,
	<<term-stopcock>>, <<term-tap>>, <<term-worm-drive-clamp>>.
	All inter-entry references now use [[term-X][display]]
	links instead of italic /See /Term/./.

	Body uses re-pointed to specific anchors:
	(SC-01 worm-drive clamp): now points to term-worm-drive-clamp.
	(SC-03 shutoff tap): now points to term-shutoff-tap.
	(F-08 Pneumatic manifold): now points to term-manifold.

	Research journal:

	* Doc/ResearchJournal.org: five new 2026-05-02 entries
	prepended (above the prior 2026-04-30 and earlier
	entries which are unchanged in substance):
	  - Phase 1 completion status (iteration 0.7.0):
	    aggregate down to ~52% from ~54%, reflecting the
	    illustration retraction.
	  - Illustration sourcing strategy: license-clean web
	    research, credit, replace later. Three-step
	    knowledge loop (external -> photographs -> model
	    renders). Options A/B/C considered.
	  - Glossary intra-references: anchor-and-link mechanism.
	  - Version macro: REVISION uniformed across backends.
	    Options A/B/C considered.
	  - Directory naming lapse: illustrations/ ->
	    Illustrations/.

	Project files:

	* VERSION: 0.6.0 -> 0.7.0.

	* Doc/Makefile.am: EXTRA_DIST updated. Three illustration
	SVG paths replaced with Illustrations/Catalogue.org.

	* NEWS: 0.7.0 release note prepended above the 0.6.0
	entry.

	* ChangeLog: This entry.


2026-04-30  Peter Felecan  <peter@felecan.example>

	Iteration 0.6.0. HTML cross-document anchor warnings fixed
	for real (the v0.5.0 fix didn't work and is retracted);
	per-size dimension reference tables for BSPP / BSPT / NPT
	added; first illustration set committed (three SVG
	cross-sections); Glossary Coverage Rule added to the
	Development Standard with new trade-term entries in the
	Taxonomy glossary; Completion Status accounting moved out
	of Concept.org back into ResearchJournal.org per the
	project author's pushback; validation pass closed.

	HTML cross-document anchor resolution (real fix):

	* Doc/batch-init.el: org-publish-project-alist entry
	"bsppfit-docs" extended with :auto-sitemap t,
	:sitemap-filename "sitemap.org", :sitemap-title, and the
	publishing-direction options needed for index generation.
	New defun bsppfit/publish-all wraps (org-publish-all t)
	and renames sitemap.html to index.html after publishing.
	The t argument forces a fresh build on every invocation.

	* Doc/Makefile.am: per-file %.html: %.org pattern rule
	removed. Replaced with html.stamp: $(DOC_FILES) version.org
	batch-init.el rule that calls bsppfit/publish-all in one
	Emacs invocation. $(HTML_DOCS) depends on html.stamp as a
	no-op for backward compatibility ("make some-doc.html"
	still works). CLEANFILES extended with html.stamp,
	index.html, sitemap.org. EXTRA_DIST extended with the
	three Doc/illustrations/*.svg files.

	* Doc/DevelopmentStandard.org (Cross-Document Anchor
	Resolution in HTML Export): rewritten. Documents the
	org-publish-all approach. Explicitly retracts the v0.5.0
	advice (which was that defining org-publish-project-alist
	alone was sufficient).

	Per-size dimension reference:

	* Doc/Taxonomy.org: new top-level section "Per-size
	dimension reference (BSPP, BSPT, NPT)" placed between F-04
	(Nominal Size) and F-05 (Sealing Mechanism). Three captioned
	tables:
	  tab:bspp-dimensions  ISO 228-1, G1/16 .. G3
	  tab:bspt-dimensions  ISO 7-1, R1/16 .. R2 at gauge plane
	  tab:npt-dimensions   ANSI/ASME B1.20.1, 1/16 .. 2 NPT
	Each row carries TPI, pitch (mm), OD, useful thread length.
	"How to read the tables" subsection explains the columns;
	"Sources and verification" subsection names the standards
	and reminds the reader the working tables are not a
	substitute for the standards in safety-critical
	applications.

	Illustrations (first set):

	* Doc/illustrations/dowty-seal.svg: New. Bonded seal
	washer compressed cross-section. Hand-written plain SVG
	(viewBox 600x300), no external references.

	* Doc/illustrations/cone-seat.svg: New. 60-degree
	hydraulic cone-seat metal-to-metal seal cross-section.

	* Doc/illustrations/thread-profiles.svg: New. Side-by-side
	comparison of 55-degree Whitworth (BSPP, BSPT) and
	60-degree American (NPT) thread profiles.

	* Doc/Taxonomy.org: three figures embedded with
	#+CAPTION, #+NAME, #+ATTR_LATEX :width X, #+ATTR_HTML
	:width X% directives:
	  fig:thread-profiles  next to tab:thread-forms in the
	                       Comparison subsection of F-03
	  fig:dowty-seal       under the bonded-washer entry in
	                       F-05 Mechanisms
	  fig:cone-seat        under the cone-seat entry in F-05
	                       Mechanisms
	\listoffigures{} added to the document header now that
	the document carries figures.

	Glossary coverage:

	* Doc/DevelopmentStandard.org (Glossary Coverage Rule):
	new subsection. Every domain term used in a body must
	have a glossary entry. Trade and dialect terms count
	(Northern American, Commonwealth, Australian, etc.). Where
	a term has multiple regional names, all the synonyms get
	cross-referenced entries pointing to a canonical form.
	Argot counts when it appears in the body. Glossary entries
	are sorted alphabetically within each thematic group;
	updates are committed alongside the body changes that
	introduce or remove the terms.

	* Doc/Taxonomy.org (Glossary, new subsection "Tools,
	accessories, and trade terms"): new entries:
	  Faucet (NA synonym for tap)
	  Hose clamp (Commonwealth/NA synonym for worm-drive
	    clamp)
	  Hose clip (UK colloquial synonym)
	  Jubilee clip (UK trade-name-as-argot)
	  Plumber's argot --- "leak" (seep/weep/leak distinction)
	  Shutoff tap (canonical) and Shutoff valve (NA synonym)
	  Spigot (NA outdoor-water-outlet sense, plus British
	    plain-male-end sense)
	  Stopcock (UK term for supply-side shutoff tap)
	  Tap (the British/general-English generic)
	  Worm-drive clamp (canonical, with regional synonyms
	    cross-referenced)

	(SC-01, SC-03): body uses of "worm-drive clamp" and
	"shutoff tap" hyperlinked to the new glossary entries.

	Concept versus journal placement of completion status:

	* Doc/Concept.org: the "Completion Status (as of iteration
	0.5.0)" section (six subsections, ~80 lines) removed.
	Replaced with a five-line forwarding paragraph titled
	"Completion Status" pointing the reader at the latest
	per-iteration entry in Doc/ResearchJournal.org. The
	forwarding paragraph is static across iterations.

	* Doc/DevelopmentStandard.org (Completion Status Rule):
	rewritten. The rule now specifies that the per-iteration
	Completion Status entry lives in the ResearchJournal, not
	the Concept. Explains why: the concept describes what the
	project is and what completion means (static); the journal
	records where the project stands (moving). The reverse-
	chronological ordering of the journal places the latest
	status at or near the top, so the reader reads /one/
	entry, not several.

	Research journal:

	* Doc/ResearchJournal.org: seven new 2026-04-30 entries
	prepended (above the prior 2026-04-29 and earlier entries
	which are unchanged in substance):
	  - Phase 1 completion status (iteration 0.6.0): per-
	    component figures and aggregate (54%, up from 35%).
	  - Validation pass against the populated taxonomy:
	    passed. All nine scenarios feasible/understandable.
	    Two qualitative findings recorded.
	  - HTML cross-document anchor warnings: real fix via
	    org-publish-all (retracts the 2026-04-29 entry on
	    the same topic). Options A/B/C considered.
	  - Completion status belongs in the journal, not the
	    concept (retracts the 2026-04-29 entry choosing
	    Option C). Lesson recorded about reading the
	    options-considered block out loud at write time.
	  - Glossary Coverage Rule, including trade and dialect
	    terms (options A/B/C considered).
	  - Illustration tooling: SVG over TikZ for the first
	    set (options A/B/C considered with explicit
	    pro/con).
	  - Per-size dimension reference: BSPP, BSPT, NPT tables
	    added.

	The 2026-04-29 entries on HTML resolver and on
	Completion-Status-in-Concept have a parenthetical
	"superseded by 2026-04-30 entry above" suffix added to
	their headings; the entry bodies are unchanged in
	substance.

	Future research:

	* Doc/FutureResearch.org: three TODO entries advanced:
	  - Per-nominal-size dimension tables: TODO -> DONE.
	  - Thread cross-section illustrations: TODO -> DONE
	    (with a note that the actual implementation used
	    SVG rather than the originally-planned TikZ).
	  - Illustrations for taxonomy concepts: TODO ->
	    STARTED. Body rewritten to record the SVG-based
	    approach, the first three illustrations committed,
	    and the remaining illustration backlog.

	Project files:

	* VERSION: 0.5.0 -> 0.6.0.

	* NEWS: 0.6.0 release note prepended above the 0.5.0
	entry. Covers HTML resolver real fix, per-size tables,
	first illustrations, glossary coverage, completion
	status placement, validation pass closure.

	* ChangeLog: This entry.


2026-04-29  Peter Felecan  <peter@felecan.example>

	Iteration 0.5.0. HTML cross-document anchor resolver
	configured via org-publish-project-alist (no more "cannot
	be resolved without publishing" warnings); validation
	scenarios all carry an explicit Expected-resolution
	section; taxonomy clarifications on BSPT designations,
	1:16 taper, inlet/outlet, French bore/OD sizing, gas and
	steam thread form, gasket sealing, pressure bands; glossary
	enriched and sorted; Concept gains an honest Completion
	Status section.

	HTML cross-document anchor resolution:

	* Doc/batch-init.el: New (require 'ox-publish) and
	org-publish-project-alist entry "bsppfit-docs" listing the
	current directory as a publishable project. The resolver
	uses this alist to locate cross-referenced .org files; with
	it set, the per-link warning ("Reference X in file Y cannot
	be resolved without publishing") that flooded HTML export
	in v0.4.0 is gone. No org-publish-project call is made;
	export continues to be triggered per-document by
	org-html-export-to-html. Documented in the new
	DevelopmentStandard.org "Cross-Document Anchor Resolution
	in HTML Export" subsection.

	Validation scenarios:

	* Doc/Taxonomy.org (Validation Scenarios, intro): New
	"How to read each scenario" paragraph documenting the
	four-section structure: Situation / Facets exercised /
	Expected resolution / (optional) Caveats.
	(SC-01, SC-02, SC-03, SC-05): New Expected resolution
	sections. SC-04 also gained a Caveats section noting that
	post-mortem diagnosis of BSPP × BSPT confusion requires
	gauging or comparing bore diameters.
	(SC-06..SC-09): The existing "Expected reasoning"
	paragraphs were restructured into the four-section form
	for consistency. Caveats sections added where they help.

	* Doc/DevelopmentStandard.org: New "Validation Scenario
	Format" subsection codifying the four-section structure
	as a project rule: a scenario without an Expected
	resolution is incomplete (it is the test criterion, not
	prose colour).

	Taxonomy clarifications:

	* Doc/Taxonomy.org (BSPT --- British Standard Pipe Taper):
	Major rewrite. Each of R / Rc / Rp gets a paragraph
	explaining what it is, the geometry, and the typical
	pairing. New sub-subsection "The 1:16 taper, in plain
	numbers" explains the taper rate (1 unit of diameter per
	16 units of axial length, equivalent to about 3.58° between
	cone surface and thread axis).

	(Conventions and notation): New sub-subsection "What
	inlet and outlet mean here", distinguishing flow-direction
	labelling from fixed-end labelling and listing three
	reasons the distinction matters (direction-sensitive
	devices, asymmetric gendered fittings, tool access during
	installation).

	(Common selection errors / Bore and thread-OD notation):
	New sub-subsection "Bore and thread-OD notation
	(15/21, 20/27, ...)" with a CAPTION'd equivalence table
	(tab:bspp-size-equivalence) covering G1/8 to G2 in inch,
	French, and measured forms; clarification of the common
	misreading (the second number is rounded thread OD, not
	pipe-wall OD).

	(Sealing Mechanism): The "Flat-face crush gasket"
	mechanism widened into a "Gasket" entry covering soft
	(fibre / elastomer / PTFE), composite (graphite /
	graphite-with-mesh), and soft-metal variants. Cross-
	references the bonded seal washer entry as a related but
	distinct mechanism.

	(Pressure rating): New "What low, moderate, and high
	pressure mean here" sub-section with CAPTION'd pressure
	band table (tab:pressure-bands) covering very low /
	low / moderate / high / very high. The bare term "high
	pressure" in this document is now defined as the 16-40
	bar band.

	(Application Context, Pneumatic): "manifold" now
	hyperlinked to its new glossary entry; pressure band
	cross-referenced to the new pressure-bands sub-section.

	(Application Context, Hydraulic): pressure described as
	"very high" (with cross-reference) rather than a bare
	100-400+ bar number.

	(Application Context, Gas): New paragraph on thread form,
	noting BSPT (R/Rc) is the convention for in-line gas
	fittings, with reasoning (vibration resistance,
	mechanical robustness, no soft-elastomer to degrade) and
	boundaries (BSPP-with-bonded for low-pressure appliance
	connections, NPT in American markets).

	(Application Context, Steam): New paragraph on thread
	form, parallel to Gas. Notes BSPT or NPT, with metallic
	gaskets or anaerobic sealants formulated for the
	operating temperature; explicit statement that PTFE tape
	is unsuitable.

	(Glossary): Group "Geometry" renamed to "Geometry and
	ports" to make room for port-related entries. New
	entries: Bore, Inlet, Outlet, Manifold, Gasket, R/Rc/Rp,
	Low pressure, Moderate pressure, High pressure. All
	entries (~75 in total) re-sorted alphabetically within
	each thematic group, replacing the previous insertion-
	order arrangement. Bushing entry mildly clarified.

	Completion status accounting:

	* Doc/Concept.org (Completion Status (as of iteration
	0.5.0)): New section. Lists the five components of the
	Phase 1 maturity criterion (descriptive taxonomy,
	illustrations, per-size dimension tables, validation pass,
	BSPP 3D model library), gives each an honest
	per-component completeness percentage and one-paragraph
	reading, and computes a weighted Phase 1 aggregate
	(~35%). Updated every iteration to keep the project's
	progress legible.

	* Doc/DevelopmentStandard.org: New "Completion Status
	Rule" subsection codifying the per-iteration honest
	status accounting in the concept document as a project
	rule.

	Research journal:

	* Doc/ResearchJournal.org: Four new 2026-04-29 entries
	prepended (above the prior 2026-04-27 and earlier entries
	which are unchanged in substance):
	  - HTML cross-document anchor warnings: resolved via
	    org-publish-project-alist (options A/B/C considered).
	  - Validation scenarios: explicit Expected-resolution
	    format (options A/B/C considered).
	  - Taxonomy clarifications: BSPT designations, taper
	    rate, inlet/outlet, French sizing, gasket, gas/steam
	    thread form (per-gap option analysis).
	  - Phase 1 completion status: explicit accounting in the
	    Concept (options A/B/C considered).

	Project files:

	* VERSION: 0.4.0 -> 0.5.0.

	* NEWS: 0.5.0 release note prepended above the 0.4.0
	entry. Covers HTML resolver fix, validation scenarios,
	taxonomy clarifications, completion status.

	* ChangeLog: This entry.


2026-04-27  Peter Felecan  <peter@felecan.example>

	Iteration 0.4.0. Build-tool detection promoted, multi-pass
	LaTeX bound to latexmk where available, default target
	produces the documentation, cross-document references
	upgraded to hyperlinks throughout, taxonomy fleshed out
	across all facets, four new validation scenarios, glossary
	tripled in size.

	Build-tool detection (configure.ac):

	* configure.ac (EMACS, LUALATEX): Promoted from warning to
	error. Documentation cannot be built without either, so
	failing at configure time is more useful than a cryptic
	build-time error.
	(LATEXMK): New AC_CHECK_PROGS check. When found, used as
	the LaTeX driver in Doc/batch-init.el; otherwise the
	build falls back to four explicit lualatex passes.
	(PLANTUML_JAR, DOT): Stay as warnings (only documents using
	the corresponding source-block language are affected).
	(summary block): New AC_MSG_NOTICE block at the end listing
	the resolved path of each tool.

	LaTeX multi-pass and Emacs setup (Doc/Makefile.am,
	Doc/batch-init.el):

	* Doc/batch-init.el: New. Consolidates the Emacs Lisp setup
	previously inlined in Doc/Makefile.am --eval chains. Reads
	consumer-machine-specific values (lualatex, latexmk,
	plantuml.jar paths, PDF process kind) from environment
	variables to avoid shell-quoting hazards. Sets
	org-latex-pdf-process to either a single latexmk command or
	four explicit lualatex passes. Defines and registers
	bsppfit/org-link-org-to-pdf for cross-document hyperlinks
	in PDF output. Sets org-export-with-broken-links to mark.

	* Doc/Makefile.am (all-local): New. Depends on pdf-local so
	that "make" with no argument produces the PDF documents.
	(pdf-local, html-local): Now implemented via a shared
	"emacs --batch --quick --load batch-init.el" recipe with
	the environment variables described above; the previous
	EMACS_BATCH_EVAL_PDF / EMACS_BATCH_EVAL_HTML --eval chains
	are gone.
	(EXTRA_DIST): Added batch-init.el.
	(CLEANFILES): Added latexmk byproducts (*.fdb_latexmk,
	*.fls, *.synctex.gz) and the per-document .tex
	intermediates listed explicitly via $(DOC_FILES:.org=.tex)
	(consistent with the "no blanket *.tex" pattern adopted in
	the .tar-exclude in 0.3.0).

	Cross-document references rule:

	* Doc/DevelopmentStandard.org (Cross-References Between
	Documents): New section. Documents the rule that every
	cross-document and cross-section reference in prose must be
	a real Org link. Lists the four supported link forms
	([[file:Other.org::*Heading][display]] etc.), explains the
	HTML and PDF behaviour, and gives the convention for
	naming stable <<anchor>> targets.

	* Doc/DevelopmentStandard.org (Multiple LaTeX Passes and
	[undefined reference]): Rewritten to describe the latexmk
	preferred / four-pass fallback strategy.

	* Doc/DevelopmentStandard.org (Required and Optional Build
	Tools): New section. Documents the three-tier
	categorisation: required (configure errors), recommended
	(warning + fallback), optional (warning, no fallback).

	* Doc/DevelopmentStandard.org (Makefile Integration):
	Rewritten to reference Doc/batch-init.el and the
	environment-variable interface.

	* Doc/DevelopmentStandard.org (Required Packages):
	Reorganised into Required / Recommended / Optional groups,
	with latexmk added to Recommended.

	* Doc/DevelopmentStandard.org (Correct PDF Invocation):
	Annotated note pointing the reader to Doc/batch-init.el for
	the project's actual recipe; the bare-Emacs example remains
	for pedagogical reference.

	* Doc/DevelopmentStandard.org (Correct HTML Invocation):
	Removed dangling reference to EMACS_BATCH_EVAL_HTML.

	* Doc/Concept.org: Seven bare-filename references upgraded
	to hyperlinks (rationale links to ResearchJournal.org;
	Phase 2 link to FutureResearch.org; validation scenarios
	link to Taxonomy.org §Validation Scenarios).

	* Doc/FutureResearch.org: Six bare-filename references
	upgraded to hyperlinks. HTMLize description corrected to
	reference Doc/batch-init.el instead of the now-removed
	EMACS_BATCH_EVAL_HTML variable. Two new TODO entries
	added: per-nominal-size dimension tables, and thread
	cross-section illustrations (TikZ, first set).

	* Doc/ResearchJournal.org: Nine bare-filename references in
	prior entries upgraded to hyperlinks. Substance and
	rationale of the entries are unchanged; only the link form
	differs. The cosmetic upgrade is consistent with the
	never-rewrite-history rule because the substance is
	preserved; the change is disclosed in the new
	cross-references entry.

	Taxonomy expansion:

	* Doc/Taxonomy.org: Major rewrite for iteration 0.4.0.
	Facets F-02 (Gender), F-04 (Nominal size), F-05 (Sealing
	mechanism), F-06 (Material), F-07 (Pressure and
	temperature rating), F-08 (Application context) all
	fleshed out with values / conventions / constraints /
	common errors subsections. New tables: sealing-vs-thread,
	material-vs-media, fitting markings, application
	constraints. SC-04 cross-reference to ResearchJournal.org
	(the example flagged in the v0.3.0 review) is now a
	proper hyperlink. Four new validation scenarios:
	  SC-06  Hot potable water -> DZR brass selection
	  SC-07  Concentric vs eccentric reducer in a horizontal line
	  SC-08  10 bar pneumatic branch tee in a workshop
	  SC-09  Read a fitting marking (G1/2 PN16 DZR WRAS)
	Stable <<anchor>> targets added throughout (facets,
	facet-thread-form, facet-geometry, facet-gender,
	facet-nominal-size, facet-sealing, facet-material,
	facet-pressure-temperature, facet-application,
	mismatch-consequences, scenarios, sc-04, sc-06..sc-09,
	glossary). Glossary roughly tripled in size, organised
	into eight thematic groups (thread forms / geometry /
	gender / sealing / materials / pressure-and-ratings /
	approvals / application terms). New domain terms:
	DZR brass, dezincification, CW617N / CW614N, banjo bolt,
	compression set, dielectric union, galvanic corrosion,
	schedule, pipe class, PN16/25/40, WRAS / ACS / KTW,
	EN 10204 3.1, tri-clamp, quick-release fitting, anaerobic
	sealant, cone seat, taper ratio, designation prefix,
	pitch. Glossary typo from 0.3.0 fixed (*Union/ ->
	*Union*). Tightened cross-doc link to Concept.org and
	ResearchJournal.org in the introduction.

	Default target builds documentation:

	* Doc/Makefile.am (all-local): New. Depends on pdf-local.
	"make" with no argument now produces PDFs in Doc/, which
	is the present iteration's deliverable.

	Research journal and future research:

	* Doc/ResearchJournal.org: Six new 2026-04-27 entries
	prepended (above the prior 2026-04-26 and 2026-04-25
	entries which are unchanged in substance):
	  - Build tools: required vs optional, configure-time
	    enforcement (options A/B/C considered).
	  - LaTeX multi-pass: latexmk preferred, four-pass
	    fallback (options A/B/C considered).
	  - Default target builds the documentation (options
	    A/B/C considered).
	  - Cross-document references must be hyperlinks (options
	    A/B/C considered, including the disclosure about
	    cosmetic upgrades to past entries).
	  - Consolidating Emacs Lisp into Doc/batch-init.el
	    (options A/B/C considered).
	  - Taxonomy expansion: facets F-02..F-08, scenarios
	    SC-06..SC-09 (with explicit notes on what was
	    excluded for this iteration).

	* Doc/FutureResearch.org: Two new TODO entries prepended:
	  - Per-nominal-size dimension tables (BSPP / BSPT / NPT
	    thread OD, pitch, engagement length).
	  - Thread cross-section illustrations (TikZ, first set).

	Project files:

	* VERSION: 0.3.0 -> 0.4.0.

	* NEWS: 0.4.0 release note prepended above the 0.3.0
	entry. Covers build system, cross-document references,
	taxonomy, and future research.

	* README: Build prerequisites reorganised into Required /
	Recommended / Optional groups (matching configure.ac).
	Default target description updated: "make" now produces
	PDFs, "make pdf" is equivalent.

	* Makefile.am (top-level): Unchanged in this iteration.
	(README is auto-distributed by automake; no EXTRA_DIST
	entry is needed.)


2026-04-26  Peter Felecan  <peter@felecan.example>

	Build-system polish iteration --- version 0.3.0. Every warning
	observed during the project author's exercise of v0.2.0 has
	been addressed at its cause, not its symptom. New conventions
	captured in the Development Standard (captions, illustrations
	tool palette, archive layout). Validation-scenarios role
	clarified. BOSL2 BSPP dependency pinned. SC-04 revised to a
	BSPP-vs-BSPT confusion accessible from a European context.

	Archive layout (no-wrapper for collaboration deliveries):

	* (delivery): The collaboration delivery archive
	(BSPPFit-0.3.0.tar.xz) no longer contains a BSPPFit-0.3.0/
	wrapper directory. Files extract directly into the current
	directory via "tar -C BSPPFit-0.3.0 .". Distribution
	archives produced by "make dist" continue to use the
	wrapped layout per autotools convention. The Development
	Standard documents both forms in the new "Two Archive
	Forms" and "Collaboration Delivery Archive Layout"
	sections.

	Build warnings resolved:

	* Doc/Makefile.am (DOC_FILES): Renamed from ORG_SOURCES.
	Avoids the automake "library has 'ORG' as canonical name"
	warning that fires for any *_SOURCES variable whose stem is
	not a registered automake primary. The Development Standard
	now explains which suffixes carry automake meaning (in a new
	"Variable Naming in Makefile.am" subsection).

	* configure.ac (AM_INIT_AUTOMAKE): Options changed from
	"[-Wall foreign]" to "[-Wall -Wno-portability foreign
	dist-xz]". -Wno-portability silences the "%-style pattern
	rules are a GNU make extension" warning (we own this
	intentionally; the project requires GNU Make). dist-xz
	enables automake's native .tar.xz distribution and replaces
	the custom dist-xz target that clashed with automake's own.

	* Doc/Preamble.tex: New shared LaTeX preamble. Declares
	\newunicodechar mappings for the Unicode characters used in
	prose that lualatex's default font lacks: -> (rightarrow),
	<= (leq), >= (geq), ~ (approx), x (times), - (en-dash),
	deg (degree symbol), ' (prime), " (double prime), checkmark,
	ballot-x, warning sign. Eliminates the "Missing character(s):
	please load an appropriate font" warning at PDF export.

	* Doc/Concept.org, Doc/ResearchJournal.org,
	Doc/FutureResearch.org: \listoffigures{} and \listoftables{}
	directives removed. These files have no captioned content;
	their presence was producing the "[undefined reference]"
	warning at PDF export. The list directives are retained in
	DevelopmentStandard.org and Taxonomy.org which do have
	captioned tables (and, in the future, figures).

	* Doc/Makefile.am (EMACS_BATCH_EVAL_HTML): Now sets
	org-html-htmlize-output-type to nil. Suppresses the per-
	source-block "htmlize.el >= 1.34 required" warning. Source
	blocks render as plain monospace; colorized rendering is
	tracked as a future-research item with a documented upgrade
	path (install htmlize >= 1.34 from MELPA, switch to 'css).

	* Makefile.am (MAINTAINERCLEANFILES, maintainer-clean-local):
	Top-level Makefile.am now lists aclocal.m4, configure,
	Makefile.in, and the build-aux/install-sh, missing, compile,
	depcomp files in MAINTAINERCLEANFILES. A maintainer-clean-
	local hook removes the build-aux/ directory itself and
	autom4te.cache. After "make maintainer-clean", the source
	tree is back to its pre-bootstrap state. Doc/Makefile.am also
	gains MAINTAINERCLEANFILES = Makefile.in.

	Shared LaTeX preamble:

	* Doc/Preamble.tex: New file. Single source of truth for the
	LaTeX preamble of every org document: a4wide, color, svg,
	fancyhdr, indentfirst, enumitem, booktabs, svninfo, xcolor,
	hyperref configuration, fontspec with DejaVu Sans Mono as
	the monospace font, float, unicode-math, and the
	\newunicodechar declarations.

	* Doc/Concept.org, Doc/Constitution.org (in archive),
	Doc/DevelopmentStandard.org, Doc/FutureResearch.org,
	Doc/ResearchJournal.org, Doc/Taxonomy.org: LATEX_HEADER
	lines collapsed to two per file: "\input{Preamble.tex}" and
	the per-file "\svnInfo $Id$" keyword. Adding a LaTeX package
	or a Unicode character mapping is now a single-file edit.

	* Doc/Makefile.am (EXTRA_DIST, %.pdf): Preamble.tex is
	added to EXTRA_DIST and listed as a prerequisite of every
	%.pdf target so that editing the preamble triggers a rebuild.

	Diagrams and Illustrations:

	* Doc/DevelopmentStandard.org (Diagrams and Illustrations):
	Section renamed from "Diagrams" and substantially expanded.
	Distinguishes diagrams (structure, behaviour --- PlantUML
	for sequences/states, Graphviz for trees and dependency
	graphs) from illustrations (shape, content --- TikZ for
	dimensioned drawings and thread cross-sections, OpenSCAD
	renders for model-derived views, Inkscape SVG for hand-
	finished work, photographs for real-world reference). A
	cheat-sheet table maps content type to recommended tool.

	* configure.ac: Added detection of Graphviz dot (warns if
	absent rather than failing; dot is a documentation-build
	dependency, not a compile dependency).

	Captions for figures and tables:

	* Doc/DevelopmentStandard.org (Org-Mode Documents): New
	"Captions for Figures and Tables" subsection mandating
	#+CAPTION: and #+NAME: anchors on every figure and every
	table. Cross-referenced from the underscore-protection
	rule. Also documents that \listoffigures{} and
	\listoftables{} should appear only in documents with
	captioned content of the corresponding kind.

	* Doc/Taxonomy.org: All tables now carry #+CAPTION: and
	#+NAME: anchors. Existing references updated.

	* Doc/DevelopmentStandard.org: Tables in the document
	(underscore-protection table, illustrations cheat-sheet
	table, file-naming examples table) now carry #+CAPTION: and
	#+NAME: anchors.

	Variable naming and build conventions in Development Standard:

	* Doc/DevelopmentStandard.org (Variable Naming in
	Makefile.am): New subsection. Explains the automake
	primaries that consume the *_SOURCES, *_LIBRARIES,
	*_PROGRAMS suffixes; recommends DOC_ or documentation_ as
	prefixes for project documentation lists.

	* Doc/DevelopmentStandard.org (MAINTAINERCLEANFILES and the
	Bootstrap Cleanup Gap): New subsection. Documents that
	autoreconf-installed files (aclocal.m4, configure, install-sh,
	missing, compile, depcomp, build-aux/) must be in
	MAINTAINERCLEANFILES, or maintainer-clean leaves residuals.

	* Doc/DevelopmentStandard.org (Two Archive Forms,
	Collaboration Delivery Archive Layout): New sections. The
	"make dist" archive (wrapped, autotools standard) and the
	collaboration delivery archive (no wrapper, "tar -C dir .")
	are distinct artefacts with distinct purposes. The standard
	prescribes which is used when.

	* Doc/DevelopmentStandard.org (Document Export, Required
	Packages): htmlize >= 1.34 is mentioned as the optional
	upgrade for HTML source-block colorization, with the
	one-line edit to switch to 'css.

	* Doc/DevelopmentStandard.org (BOSL2 BSPP Module): Confirms
	commit e5b0fcf as the integration point and documents the
	install procedure (clone upstream, symlink into
	~/.local/share/OpenSCAD/libraries/BOSL2).

	Validation scenarios clarification:

	* Doc/ResearchJournal.org (2026-04-26 entry on validation
	scenarios): New entry, prepended. Documents the role
	(stress-tests of the taxonomy as a document, not software
	unit tests), frequency (at major milestones), and scope (each
	scenario exercises >= 2 facets, drawn from dominant real-world
	failure modes) of validation scenarios. Responds to
	clarification questions raised during the v0.2.0 review.

	SC-04 revision:

	* Doc/Taxonomy.org (SC-04): Reframed as a BSPP-vs-BSPT
	confusion (parallel-vs-tapered, same 55-degree Whitworth
	thread profile, common European mistake) instead of a BSPP-
	vs-NPT "American hardware store" framing. Accessible to the
	project author from a European context, and a more
	instructive teaching case (identical thread profile makes
	the confusion harder to detect by eye). NPT remains
	documented as an adjacent class.

	* Doc/ResearchJournal.org (2026-04-26 entry on SC-04
	revision): Records Options A (drop NPT entirely from the
	taxonomy), B (keep NPT as adjacent class but no validation
	scenario), C (keep NPT as adjacent class, add a metric-thread
	scenario in its place). Decision: B. Rationale: NPT remains
	relevant for confusion-avoidance but the validation scenario
	is more useful when set in a context the project author can
	actually exercise.

	BOSL2 BSPP dependency pinning:

	* Doc/ResearchJournal.org (2026-04-26 entry on BOSL2 BSPP
	dependency): Records that the BSPP threading helpers are
	present in BOSL2 from commit e5b0fcf (January 2026); API is
	stable; the project author wrote the implementation, with
	commit by a permanent BOSL2 member. Local clone with symlink
	at ~/.local/share/OpenSCAD/libraries/BOSL2. Tag-vs-commit
	verification (whether tag 2.0.736 corresponds to e5b0fcf) is
	tracked as a small future-research item.

	* Doc/FutureResearch.org: Two prior items closed (DONE):
	"pin BOSL2 BSPP dependency" (with cross-reference to the
	new install procedure in DevelopmentStandard.org) and
	"validate the autotools build pipeline end-to-end" (the
	project author has exercised the pipeline; the cosmetic
	warnings observed are addressed in this iteration). New
	open items: illustrations for taxonomy concepts (per the
	project author's musing), htmlize >= 1.34 install for HTML
	source-block colorization, BOSL2 tag verification, and a
	tracker for Phase 1 maturity (validation pass and BSPP
	model library).

	Build system illustration tooling:

	* Doc/Concept.org (Tooling): Brief note added that
	illustrations will accompany taxonomy entries; details are
	in DevelopmentStandard.org and tracked in
	FutureResearch.org.

	Other:

	* VERSION: Bumped to 0.3.0.

	* NEWS: New 0.3.0 release notes prepended above 0.2.0 and
	0.1.0 entries.

	* AUTHORS, README: Updated for 0.3.0. README gains a
	"Building the documentation" install line for fonts-noto-extra
	(harmless if absent), a paragraph on BOSL2 install for the
	model library work that begins in 0.4.0, and a pointer to
	FutureResearch.org as the open-questions index.

	* .tar-exclude: Extended with *.svg and *.eps so that
	working illustration sources are not accidentally bundled
	into the no-wrapper delivery. The blanket *.tex pattern has
	been replaced with an explicit per-document list (Doc/<n>.tex)
	so that the source Doc/Preamble.tex is shipped while the
	Org-mode export intermediates are still excluded; a comment
	above the list reminds maintainers to add an entry when a
	new Doc/<n>.org is added.

	* bootstrap: Unchanged in content; runs autoreconf
	--install --symlink --verbose.


2026-04-25  Peter Felecan  <peter@felecan.example>

	Foundation iteration --- version 0.2.0. Documents are now
	PDF/HTML-buildable; the Constitution and Development Standard
	ship with the archive; Phase 1 has begun with a seeded
	taxonomy and proposed validation scenarios.

	Development Standard merge:

	* Doc/DevelopmentStandard.org: Merged the svah project's
	Development Standard. Pulled in: directory creation rule,
	cross-references and hyperlinks (Org-mode anchors and
	inter-file links), underscore protection rule for LaTeX
	export, PlantUML diagram conventions, document export recipes
	for PDF and HTML (Emacs batch invocation, --eval-before-
	filename trap, required packages), VERSION-file mechanism
	with SVN $Revision$ keyword, ChangeLog never-rewrite-always-
	prepend rule, version sequencing rule, delivery completeness
	rule. Dropped: C include discipline, cross-compilation matrix,
	library logging callback (SvahLog), simulator script format.
	Preserved: all OpenSCAD-specific guidance ($preview, include
	vs use, BOSL2 positioning/rotation functions, teardrop holes,
	rounding constraints, axis conventions, assert validation
	pattern, local module pattern, parametric part selection,
	sub-assembly design) and 3D-printing considerations. Project
	name svah replaced with BSPPFit throughout. Assistant model
	attribution updated from Claude Sonnet 4.6 to Claude Opus 4.7.

	Archive contents:

	* Doc/Constitution.org: New in archive. Copied verbatim from
	the project's read-only Constitution.

	* Doc/DevelopmentStandard.org: Now ships with the archive (was
	previously read-only project file).

	Build system bootstrap:

	* configure.ac: New. Assembles a four-digit version from the
	VERSION file via m4_esyscmd_s, requires GNU Make, locates
	Emacs and plantuml.jar (with PLANTUML_JAR override).

	* Makefile.am: New. Top-level: SUBDIRS = Doc, EXTRA_DIST for
	VERSION, bootstrap, .tar-exclude.

	* Doc/Makefile.am: New. Pattern rules %.pdf:%.org and
	%.html:%.org with EMACS_BATCH_EVAL_PDF and
	EMACS_BATCH_EVAL_HTML variables. pdf-local and html-local
	hooks extend automake's reserved targets. CLEANFILES,
	DISTCLEANFILES, EXTRA_DIST set per the standard.

	* bootstrap: New. Shell script that invokes autoreconf
	--install --symlink. Includes shebang, $Id$ keyword, GPL
	header.

	* Doc/version.org.in: New. Template with #+MACRO: REVISION
	using @PACKAGE_VERSION@ for HTML and \svnInfoRevision for
	LaTeX.

	* VERSION: New. Two lines: "# $Revision$" and "0.2.0".

	* COPYING: New. GNU GPL v3 text.

	* AUTHORS: New. Peter Felecan as author, Claude Opus 4.7
	(Anthropic) as assistant.

	* NEWS: New. Release notes for 0.2.0 and 0.1.0.

	* README: New. Project overview, layout, build instructions,
	phase status, license.

	* .tar-exclude: New. Exclusion patterns for ad-hoc archive
	creation outside the autotools dist target.

	Phase 1 work:

	* Doc/Taxonomy.org: New. Seeded faceted-classification
	document. Eight facets defined (F-01 Geometry, F-02 Gender,
	F-03 Thread Form with BSPP/BSPT/NPT, F-04 Nominal Size, F-05
	Sealing Mechanism, F-06 Material, F-07 Pressure/Temperature
	Class, F-08 Application Context). Validation scenarios SC-01
	through SC-05 indexed with cross-references to
	ResearchJournal.org. Multilingual glossary placeholder
	section in place per the Phase 1 commitment.

	* Doc/Concept.org: Updated. Added Tooling section (OpenSCAD
	with BOSL2, leveraging the user's existing BSPP module in
	BOSL2). Added the multilingual glossary as an explicit
	in-scope deliverable. Switched version macro to use
	#+INCLUDE: version.org per the new mechanism.

	* Doc/ResearchJournal.org: Prepended new decision entries
	above the preserved 2026-04-25 scope-decision entry: (a)
	Phase 1 validation scenarios (SC-01 through SC-05) proposed,
	with Options A/B/C considered; (b) tooling --- OpenSCAD with
	BOSL2 and the existing user-implemented BSPP module, with
	Options A/B/C considered; (c) build system --- full autotools
	driving documentation export, with Options A/B/C considered;
	(d) versioning reconciliation --- three-digit archive name,
	four-digit internal version, with Options A/B/C considered;
	(e) the merge of the svah Development Standard documented
	with what was kept, dropped, and preserved.

	* Doc/FutureResearch.org: New TODO entries: multilingual
	glossary at the end of Phase 1 (English + French), end-to-end
	verification of the autotools build (caveat: not exercised
	in the production environment), pinning the BOSL2 dependency.
	Existing Phase 2 entry preserved.

2026-04-25  Peter Felecan  <peter@felecan.example>

	Initial bootstrap delivery (v0.1.0). Project foundation
	documents establishing scope and decision tracking.

	* Concept.org: New. Project goal, motivation, and scope.
	Defines Phase 1 (BSPP-centred taxonomy with BSPT and NPT as
	adjacent classes; BSPP-only 3D model library) and Phase 2
	(deferred extension to non-threaded fittings). Lists in-scope
	and out-of-scope items, candidate facets for the taxonomy,
	deliverables, and validation criterion.

	* ResearchJournal.org: New. First decision entry on project
	scope. Records the three options considered (pure BSPP;
	BSPP-centred with adjacent classes; thread form as primary
	axis), the rationale for choosing the second, and the
	operational definition of "adjacent class" for BSPT and NPT.
	Notes the accepted framework cost for a possible Phase 2
	refactoring.

	* FutureResearch.org: New. Phase 2 entry (extension to
	non-threaded fittings) with explicit re-opening trigger:
	Phase 1 taxonomy validated and BSPP model library covering
	common cases. Initial open sub-questions seeded.

	* ChangeLog: New. This file.
