<!doctype html>
<!--
  trentpower.fr · /documentation/
  Public documentation surface · edition 2026-06-10
  Links the signed README.pdf and plain-text README, with the PDF's SHA-256 for
  cross-checking against integrity.json. No analytics, no cookies, no external assets.
-->
<html lang="en-AU" dir="ltr">
<head>
  <!-- foundations -->
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
  <meta name="format-detection" content="telephone=no">
  <meta name="color-scheme" content="light dark">
  <meta name="theme-color" content="#E9E5DC">

  <!-- appearance bootstrap (theme; hash authorised in global CSP) -->
  <script>(()=>{const e=document.documentElement;e.classList.add('js');try{const m=localStorage.getItem('tp-theme');if(m==='dark'||m==='light')e.dataset.theme=m}catch(_){}})();</script>

  <!-- document identity -->
  <title>Documentation · Trent Power</title>
  <meta name="description" content="The complete technical documentation for trentpower.fr — architecture, privacy, security and verification — as a signed PDF and plain-text README.">
  <meta name="document-edition" content="2026-06-10">
  <meta name="robots" content="index, follow">
  <meta name="referrer" content="no-referrer">
  <link rel="canonical" href="https://trentpower.fr/documentation/">

  <!-- authorship + provenance -->
  <meta name="author" content="Trent Power">
  <link rel="author" href="/.well-known/person.json">
  <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">
  <link rel="describedby" href="/integrity.json">

  <!-- application surface -->
  <link rel="icon" href="/favicon.ico" sizes="any">
  <link rel="icon" href="/favicon.svg" type="image/svg+xml">
  <link rel="apple-touch-icon" href="/apple-touch-icon.png">
  <link rel="manifest" href="/manifest.webmanifest" type="application/manifest+json">

  <!-- rendering + assets -->
  <link rel="preload" as="font" type="font/woff2" href="/fonts/soehne-buch.woff2" crossorigin>
  <link rel="preload" as="font" type="font/woff2" href="/fonts/signifier-regular.woff2" crossorigin>
  <link rel="stylesheet" href="/styles.css?v=2026-06-10.f9f41383" integrity="sha384-PKmLVxbd/YfbUiIpYTcgq9EPzTLIMmT684A7Y93xg7UV5Iuoli1U99dfwTxs7nDE">
  <link rel="stylesheet" href="/print.css?v=2026-06-10.f9f41383" media="print">

  <!-- provenance · page record · generated from the public source repository -->
  <script type="application/json" id="tp-page-record">
{
  "canonical": "https://trentpower.fr/documentation/",
  "sourceRepository": "https://github.com/trentpower/trentpower.fr",
  "sourcePath": "tools/build/generate_documentation.py",
  "sourceUrl": "https://github.com/trentpower/trentpower.fr/blob/main/tools/build/generate_documentation.py",
  "edition": "2026-06-10",
  "generated": true
}
  </script>
</head>
<body data-page="documentation" data-layout="masthead" data-surface="record" data-masthead="brand-only" data-edition="2026-06-10">

<a href="#main" class="skip-link">Skip to content</a>

<!-- masthead -->
<header class="site-header" data-component="site-header">
  <div class="nav">
    <div class="nav-inner">
      <a class="nav-mark u-author" href="/" aria-label="Trent Power home"><span>Trent</span> <span>Power</span></a>
    </div>
  </div>
</header>

<main class="site documentation-page" id="main" tabindex="-1">
  <div class="page">

    <!-- primary · statement -->
    <p class="page-kicker">Public Documentation</p>
    <h1 class="page-title hero-stack">Documentation</h1>
    <div class="page-body">
      <p class="page-lede">The complete technical description of this site — its architecture, content model, build pipeline, security and privacy posture, and verification process — published as a signed PDF and a plain-text README.</p>
      <p>This page is part of the verification chain. The PDF below is hashed in the signed <a href="/integrity.json">integrity manifest</a>, so anyone can confirm the document they downloaded is exactly the one that was published — no need to trust the host or the network.</p>

      <!-- the publication -->
      <section class="security-section" aria-labelledby="doc-pub-h">
        <h2 class="security-section-heading" id="doc-pub-h">The publication</h2>
        <p>One reading of the whole system, written so a non-technical reader and the engineer who maintains it can both follow it. The PDF is the canonical, page-designed edition; the README is the same documentation in plain text.</p>
        <div class="integrity-record-card">
          <p class="integrity-record-kicker">Documentation set</p>
          <h3 class="integrity-record-title">README</h3>
          <dl class="integrity-record-dl">
            <div class="integrity-rg integrity-rg--ruled">
              <dt class="integrity-rg-label">Edition</dt>
              <dd class="integrity-rg-value"><time datetime="2026-06-10">2026-06-10</time></dd>
            </div>
            <div class="integrity-rg">
              <dt class="integrity-rg-label">Published</dt>
              <dd class="integrity-rg-value">10 June 2026</dd>
            </div>
            <div class="integrity-rg">
              <dt class="integrity-rg-label">PDF</dt>
              <dd class="integrity-rg-value"><a class="integrity-rg-link" href="/documentation/README.pdf">README.pdf</a></dd>
              <dd class="integrity-rg-desc">A4 portrait · 5749 kB</dd>
            </div>
            <div class="integrity-rg">
              <dt class="integrity-rg-label">Plain text</dt>
              <dd class="integrity-rg-value"><a class="integrity-rg-link" href="/documentation/README.txt">README.txt</a></dd>
              <dd class="integrity-rg-desc">Markdown source, as text</dd>
            </div>
          </dl>
        </div>
      </section>

      <!-- integrity -->
      <section class="security-section" aria-labelledby="doc-int-h">
        <h2 class="security-section-heading" id="doc-int-h">Integrity</h2>
        <p>The PDF is covered by the same signed manifest as every other published byte. Its fingerprint is recorded in <a href="/integrity.json">integrity.json</a>, which is signed with the published PGP key.</p>
        <div class="integrity-record-card">
          <p class="integrity-record-kicker">Signed artefact</p>
          <h3 class="integrity-record-title">README.pdf</h3>
          <p class="integrity-record-status">SHA-256 recorded in integrity.json · Edition 2026-06-10</p>
          <dl class="integrity-record-dl">
            <div class="integrity-rg integrity-rg--ruled">
              <dt class="integrity-rg-label">SHA-256</dt>
              <dd class="integrity-rg-value">sha256-YNWqyK6EeZTUAup+r7y1AI+K6QFJ8y7+yl0zgmZxcGE=</dd>
            </div>
            <div class="integrity-rg">
              <dt class="integrity-rg-label">Manifest</dt>
              <dd class="integrity-rg-value"><a class="integrity-rg-link" href="/integrity.json">integrity.json</a></dd>
              <dd class="integrity-rg-desc">Signed: <a class="integrity-rg-link" href="/integrity.json.sig">integrity.json.sig</a></dd>
            </div>
            <div class="integrity-rg">
              <dt class="integrity-rg-label">Key</dt>
              <dd class="integrity-rg-value"><a class="integrity-rg-link" href="/.well-known/pgp-key.asc">pgp-key.asc</a></dd>
            </div>
            <div class="integrity-rg">
              <dt class="integrity-rg-label">Fingerprint</dt>
              <dd class="integrity-rg-value">A729 591B 450D 3F59 3694 98BD 8299 1F25 04AE 0263</dd>
            </div>
          </dl>
        </div>
        <details class="tests-verify">
          <summary>View verification command</summary>
          <p>Download the PDF, hash it, and confirm the digest appears in the signed manifest.</p>
          <pre class="tests-cmd">curl -O https://trentpower.fr/documentation/README.pdf <span class="tests-cmd__op">&amp;&amp;</span>
openssl dgst -sha256 -binary README.pdf | openssl base64 <span class="tests-cmd__op">&amp;&amp;</span>
curl -s https://trentpower.fr/integrity.json | grep documentation/README.pdf</pre>
        </details>
        <p class="tests-downloads">Read the full <a href="/en-au/verify/">verification record</a>, or browse the <a href="/source/">source mirror</a> and <a href="/integrity/releases/2026-06-10/">release archive</a>.</p>
      </section>

    </div>
  </div>
</main>

<!-- body · footer -->
<footer class="site-footer" aria-label="Site footer">
  <div class="site-footer__inner">

    <!-- top stratum · identity · nav · language -->
    <div class="site-footer__top">

      <p class="site-footer__identity">
        <span class="year">&copy; <span class="since">1997 &ndash;</span> <time datetime="2026">2026</time></span>
        <a class="wm" href="/en-au/" rel="home" aria-describedby="desc-home-footer"><bdi>Trent Power</bdi></a>
        <span class="visually-hidden" id="desc-home-footer">Return to the homepage</span>
      </p>

      <nav class="site-footer__nav" aria-label="Footer">
        <span>Paris, France</span>
        <span class="sep" aria-hidden="true">&middot;</span>
        <a class="site-footer__action" href="/en-au/privacy/" rel="privacy-policy" aria-describedby="desc-privacy">Privacy</a>
        <span class="visually-hidden" id="desc-privacy">Read how this site avoids analytics, cookies, profiling, tracking, and third-party assets</span>
        <span class="sep" aria-hidden="true">&middot;</span>
        <button type="button" class="site-footer__action"
                data-cite-open aria-haspopup="dialog"
                aria-describedby="desc-cite">Verify</button>
        <span class="visually-hidden" id="desc-cite">Open citation and verification details for this page</span>
      </nav>

      <ul class="site-footer__language" aria-label="Language">
        <li><a href="/en-au/"  aria-describedby="desc-lang-en" lang="en" aria-current="page">English</a> <span class="visually-hidden" id="desc-lang-en">Read this site in English</span></li>
        <li aria-hidden="true"><span class="sep">&middot;</span></li>
        <li><a href="/fr/" aria-describedby="desc-lang-fr" lang="fr">Français</a> <span class="visually-hidden" id="desc-lang-fr">Lire ce site en français</span></li>
      </ul>

    </div>

    <hr class="site-footer__break tp-rule" aria-hidden="true">

    <!-- bottom stratum · colophon · theme -->
    <div class="site-footer__bottom">

      <ul class="site-footer__colophon" id="footerImprint" aria-label="Publication verification">
        <li class="site-footer__colophon-row">
          <a class="site-footer__colophon-link" href="/en-au/verify/" aria-describedby="desc-integrity"><span class="site-footer__colophon-key">Edition</span> <time datetime="2026-06-10">2026-06-10</time></a>
          <span class="site-footer__colophon-sep" aria-hidden="true">·</span>
          <span class="site-footer__colophon-note" data-edition-age>Published today</span>
          <span class="visually-hidden" id="desc-integrity">Open the verification record for this edition — citation, source mirror, fingerprint, signed release</span>
        </li>
      </ul>

      <ul class="site-footer__theme" aria-label="Appearance">
        <li><button type="button" data-theme="light"  aria-pressed="false" aria-describedby="desc-theme-light">Light</button> <span class="visually-hidden" id="desc-theme-light">Switch to the light appearance</span></li>
        <li aria-hidden="true"><span class="sep">&middot;</span></li>
        <li><button type="button" data-theme="system" aria-pressed="true"  aria-describedby="desc-theme-auto">Auto</button> <span class="visually-hidden" id="desc-theme-auto">Match the system appearance setting</span></li>
        <li aria-hidden="true"><span class="sep">&middot;</span></li>
        <li><button type="button" data-theme="dark"   aria-pressed="false" aria-describedby="desc-theme-dark">Dark</button> <span class="visually-hidden" id="desc-theme-dark">Switch to the dark appearance</span></li>
      </ul>

    </div>

  </div>
</footer>

<!-- scripts · progressive enhancement, no telemetry -->
<script src="/js/theme.js?v=2026-06-10.f9f41383" integrity="sha384-BoulfjXBzTzKZepcXtJ55HOBvZ6Z1vlJ2F1/oKeG0duSBmbq+8iuuNRBq9cOEtuS" defer></script>
<script src="/sw-register.js?v=2026-06-10.f9f41383" integrity="sha384-S02ZUys8FBSl9T/d6ZOUzwUsIRGM7XqEu00nouu0bOBOL8fySyU4QCzOXoKwMqFU" defer></script>
<script src="/js/reveal.js?v=2026-06-10.f9f41383" integrity="sha384-evAfeRi0JtOyJV2Lekp1iIVgpVKolniSa1uW/y4LF6GdpyXEh9u2EYCj3+NyFWhH" defer></script>
<script src="/js/overlay.js?v=2026-06-10.f9f41383" integrity="sha384-n3avwjT6Y3Gt81ewRZ3xNoOJh7GWJff5pcBR40w0ysJ+pi1alr0JhK0YGD2aRu9h" defer></script>
<script src="/verify/verification-data.js?v=2026-06-10.f9f41383" defer></script>
<script src="/js/copy.js?v=2026-06-10.f9f41383" integrity="sha384-QMLMM2Hp2mANKcmISyVIIES7LBGAWLJvHturH651G/B2Xkj+zZXBE0DZ0ufyXTU4" defer></script>
<script src="/js/edition.js?v=2026-06-10.f9f41383" integrity="sha384-iO0w8zmiIy+PKCcn52n+bxnD8GxJcyMXMMddSHMJAjxRpRxaYbPG3dD7jRtM7oKC" defer></script>
<script src="/js/micro-interactions.js" integrity="sha384-SipxtV8ZVVFXb63JYEJvP90oeBOz53eCea8kvIC5PqEB0E072RI8dDL+foIMuVGT" defer></script>
<script src="/js/verify-modal.js?v=2026-06-10.f9f41383" integrity="sha384-Kb8LrSoY27mMZZl+F/0TsiJ4Yc+Z48xVDXCK3mTaMfNYr+kfj/C+P5ss0lMD/NTl" defer></script>
<script src="/js/fonts.js?v=2026-06-10.f9f41383" integrity="sha384-7umqDK42ooQp+0dNYoFCPbZdWWBCGBi/Hms1KLw0gfXkScV4R1BZUFad7NMFgCze" defer></script>
</body>
</html>
