tools tier

tools-site-impforge

Renders impforge.com: a static site built from this workspace's own registry,

Renders impforge.com: a static site built from this workspace's own registry, READMEs, ratified vocabulary and research essays, in English and Spanish.

The site is a projection. Nothing on it is typed twice: the crate tree comes from docs/architecture/layers.toml, each crate's page from that crate's own README, the glossary from the ratified term rows exported to docs/reference/glossary.tsv, and the research essays from the Markdown in docs/. A number on a page is a number somebody can re-derive, and the command that produced it is recorded beside the figure in content.rs.

Running it

cargo run -p tools-site-impforge --bin site-impforge -- --repo-root . --out dist/impforge
flagmeaning
--repo-root <dir>where the registry, READMEs and essays are read from (default .)
--out <dir>where the site is written (default dist/impforge)

The build is all-or-nothing. A missing essay, an unreadable registry, a screenshot that will not redact, or a write that would land outside the output root aborts it — a half-written site is never left for a web server to serve.

Two languages

English is served from /, Mexican Spanish from /es/. Both are rendered from one set of page definitions, so a paragraph added to a page exists in both or the tests say which one is missing.

modulewhat it holds
catalogthe machinery: foundation-i18n bundles, locale fallback, Words::s(key)
stringsthe words: every user-facing string as (key, english, spanish)
langwhich language is being built, and where its pages and URLs live

Fallback is on, so a key with no Spanish value renders its English rather than a blank. That would let a gap sit forever unnoticed, which is what these tests are for:

the names that genuinely are the same in both.

English under a Spanish URL and looks perfectly fine; this is what catches it.

too, and one word too long bends a box.

Research essays are republished as written. Where docs/<path>/<name>.es.md exists beside an English source it is used for /es/; where it does not, the English is published under the Spanish URL with a line saying so. That is what lets the essays be translated one at a time without the site breaking in between.

What the build refuses

this site. no_email_address_is_published scans every rendered page for a mailto: or a bare address, in both languages.

ruled out, and scans both the rendered pages and this crate's own source, comments included. Republished essays are exempt: they are the operator's earlier writing, quoted as it stands.

data; redact applies it and verifies the result before the file is written. A source that will not redact fails the build.

_renders` checks every href on every page against what the build writes.

The contact form

contact-handler is a second binary: a std-only HTTP server on 127.0.0.1:8111 that accepts the form, rate-limits by address, and hands the message to sendmail as a strict argument vector. Header fields are flattened so a newline in a name cannot forge a header. It stores nothing.

All tools · Manual