<!doctype html>
<!--
  trentpower.fr · /integrity/

  static, semantic, self-managed, privacy-first.
  signed manifest, detached signature, public signing key.
  no analytics. no cookies. no external assets.

  every public file is hashed, signed,
  and listed at /integrity.json.
-->
<html lang="en" dir="ltr">
<head>
  <!-- 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" media="(prefers-color-scheme: light)">
  <meta name="theme-color" content="#22201B" media="(prefers-color-scheme: dark)">

  <!-- head · language bootstrap -->
  <script>(()=>{const e=document.documentElement;let t='';try{t=localStorage.getItem('tp-lang')||''}catch{}const n=(navigator.languages&&navigator.languages[0])||navigator.language||'en',a=t&&['en','fr'].includes(t)?t:/^fr\b/i.test(n)?'fr':'en';e.lang=a,e.dataset.lang=a,e.classList.add("js")})();</script>

  <!-- head · document identity -->
  <title>Integrity · Trent Power</title>
  <meta name="description"
        content="Signed public releases, integrity manifest, detached signature and public signing key">
  <meta name="document-edition" content="2026-05-09">
  <link rel="canonical" href="https://trentpower.fr/integrity/">

  <!-- head · indexing and discovery -->
  <meta name="robots" content="noindex">
  <meta name="referrer" content="no-referrer">

  <!-- head · authorship and identity -->
  <meta name="author" content="Trent Power">
  <link rel="author" href="/.well-known/attribution.txt">
  <link rel="alternate" type="application/ld+json" href="/.well-known/person.json">
  <link rel="alternate" type="text/plain" href="/llms.txt">
  <link rel="me" href="https://commons.wikimedia.org/wiki/File:Trent_Power_portrait.jpg">
  <link rel="me" href="https://www.linkedin.com/in/trentpower/">
  <link rel="me" href="https://orcid.org/0009-0002-2652-7188">
  <link rel="me" href="https://www.crunchbase.com/person/trent-power-3f52">

  <!-- head · rights and reuse -->
  <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">

  <!-- head · social and sharing -->
  <meta property="og:type" content="website">
  <meta property="og:site_name" content="Trent Power">
  <meta property="og:title" content="Integrity · Trent Power">
  <meta property="og:description" content="Signed public releases, integrity manifest, detached signature and public signing key">
  <meta property="og:url" content="https://trentpower.fr/integrity/">
  <meta property="og:locale" content="en_AU">
  <meta property="og:image" content="https://trentpower.fr/images/og/integrity-og.png">
  <meta property="og:image:width" content="1200">
  <meta property="og:image:height" content="630">
  <meta property="og:image:type" content="image/png">
  <meta property="og:image:alt" content="Integrity · Trent Power">

  <!-- head · application surface -->
  <meta name="application-name" content="Trent Power">
  <meta name="apple-mobile-web-app-title" content="Trent Power">
  <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">

  <!-- head · rendering and assets -->
  <link rel="stylesheet" href="/styles.css?v=2026-05-09.fceaf1e4" integrity="sha384-y+VS/OHX/2qm5pl3NOcFOmrRi3kBp8xhdlQQ1N9FBRpJffyKH6rj1vGRYEFlv1zJ">
  <link rel="stylesheet" href="/print.css?v=2026-05-09.fceaf1e4" media="print">

  <!-- head · structured data -->
  <script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","@id":"https://trentpower.fr/integrity/#page","url":"https://trentpower.fr/integrity/","name":"Integrity · Trent Power","description":"Signed public releases, integrity manifest, detached signature and public signing key","inLanguage":"en","isPartOf":{"@id":"https://trentpower.fr/#website"},"about":{"@id":"https://trentpower.fr/#trent-power"},"author":{"@id":"https://trentpower.fr/#trent-power"},"publisher":{"@id":"https://trentpower.fr/#trent-power"},"primaryImageOfPage":{"@type":"ImageObject","url":"https://trentpower.fr/images/og/integrity-og.png","width":1200,"height":630},"datePublished":"2026-02-15T00:00:00+00:00","dateModified":"2026-05-15T00:00:00+00:00"}</script>
</head>
<body data-page="integrity" data-surface="record" data-masthead="brand-only" data-edition="2026-05-09">

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

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

<!-- body · primary content -->
<main class="site" id="main" tabindex="-1" itemscope itemtype="https://schema.org/WebPage">
  <div class="page">

    <!-- primary · 01 · statement -->
    <h1 class="page-title" data-i18n="integrity.page_title">Integrity</h1>
    <div class="page-body">
      <p class="page-lede" data-i18n-html="integrity.body_intro">This site publishes signed releases so public files can be checked against a <dfn id="integrity-manifest">manifest</dfn>, <dfn id="detached-signature">detached signature</dfn> and public key.</p>
      <p class="page-meta" data-i18n-html="integrity.last_reviewed">Last reviewed: <time datetime="2026-05-09">9 May 2026</time></p>

      <!-- primary · 02 · current signed release -->
      <article class="integrity-record-card record-card release-card" aria-labelledby="integrity-record-title">
        <header class="integrity-record-header">
          <p class="integrity-record-kicker" data-i18n="integrity.record.kicker">Signed release</p>
          <h2 class="integrity-record-title" id="integrity-record-title" data-i18n-html="integrity.record.title"><time datetime="2026-05">May 2026</time></h2>
          <p class="integrity-record-status" data-i18n="integrity.record.status_short">Manifest · Signature · Public key</p>
        </header>

        <dl class="integrity-record-dl">
          <div class="integrity-rg integrity-rg--ruled">
            <dt class="integrity-rg-label" data-i18n="integrity.record.label.manifest">Manifest</dt>
            <dd class="integrity-rg-value">
              <a class="integrity-rg-link" href="/integrity.json"><code>/integrity.json</code></a>
            </dd>
            <dd class="integrity-rg-desc" data-i18n-html="integrity.record.desc.manifest"><abbr title="Secure Hash Algorithm, 256-bit">SHA-256</abbr> hashes of public files</dd>
          </div>
          <div class="integrity-rg">
            <dt class="integrity-rg-label" data-i18n="integrity.record.label.signature">Signature</dt>
            <dd class="integrity-rg-value">
              <a class="integrity-rg-link" href="/integrity.json.sig"><code>/integrity.json.sig</code></a>
            </dd>
            <dd class="integrity-rg-desc" data-i18n-html="integrity.record.desc.signature">Detached <abbr title="Pretty Good Privacy">PGP</abbr> signature</dd>
          </div>
          <div class="integrity-rg">
            <dt class="integrity-rg-label" data-i18n="integrity.record.label.public_key">Public key</dt>
            <dd class="integrity-rg-value">
              <a class="integrity-rg-link" href="/.well-known/pgp-key.asc"><code>/.well-known/pgp-key.asc</code></a>
            </dd>
            <dd class="integrity-rg-desc" data-i18n="integrity.record.desc.public_key">Public signing key</dd>
          </div>
          <div class="integrity-rg">
            <dt class="integrity-rg-label" data-i18n="integrity.record.label.archives">Archives</dt>
            <dd class="integrity-rg-value">
              <a class="integrity-rg-link" href="/integrity/releases/2026-05-09/trentpower-fr-2026-05-09.zip" title="trentpower-fr-2026-05-09.zip">ZIP</a>
              <span class="integrity-rg-sep" aria-hidden="true">·</span>
              <a class="integrity-rg-link" href="/integrity/releases/2026-05-09/trentpower-fr-2026-05-09.tar.gz" title="trentpower-fr-2026-05-09.tar.gz">TAR.GZ</a>
            </dd>
            <dd class="integrity-rg-desc" data-i18n="integrity.record.desc.archives">Signed public source release</dd>
          </div>
          <div class="integrity-rg">
            <dt class="integrity-rg-label" data-i18n="integrity.record.label.checksums">Checksums</dt>
            <dd class="integrity-rg-value">
              <a class="integrity-rg-link" href="/integrity/releases/2026-05-09/SHA256SUMS"><code>SHA256SUMS</code></a>
              <span class="integrity-rg-sep" aria-hidden="true">·</span>
              <a class="integrity-rg-link" href="/integrity/releases/2026-05-09/SHA256SUMS.sig"><code>SHA256SUMS.sig</code></a>
            </dd>
            <dd class="integrity-rg-desc" data-i18n="integrity.record.desc.checksums">Signed checksum list for archive downloads</dd>
          </div>
          <div class="integrity-rg integrity-rg--ruled integrity-rg--fingerprint fingerprint-section">
            <dt class="integrity-rg-label record-label">
              <span class="integrity-rg-label-text" data-i18n="integrity.record.label.fingerprint">Fingerprint</span>
            </dt>
            <dd class="integrity-rg-value">
              <div class="record-action-row">
                <button type="button" class="integrity-record-action copy-fingerprint record-inline-action text-action"
                        data-copy-target="pgp-fingerprint"
                        data-i18n="integrity.fingerprint_copy"
                        data-i18n-copied="integrity.fingerprint_copied">Copy fingerprint</button>
              </div>
              <samp class="fingerprint-grid" id="pgp-fingerprint" tabindex="0" aria-label="Public key fingerprint">
                <span>A729 591B</span>
                <span>450D 3F59</span>
                <span>3694 98BD</span>
                <span>8299 1F25</span>
                <span>04AE 0263</span>
              </samp>
            </dd>
          </div>
        </dl>

        <nav class="integrity-record-actions integrity-record-actions--strip" aria-label="Record tools">
          <span class="integrity-record-actions-line">
            <a class="integrity-record-action record-inline-action" href="/integrity/releases/2026-05-09/trentpower-fr-2026-05-09.zip"
               data-i18n="releases.download_zip">Download ZIP</a>
            <span class="integrity-record-actions-sep" aria-hidden="true">·</span>
            <a class="integrity-record-action record-inline-action" href="/integrity/releases/2026-05-09/trentpower-fr-2026-05-09.tar.gz"
               data-i18n="releases.download_targz">Download TAR.GZ</a>
          </span>
          <span class="integrity-record-actions-line">
            <a class="integrity-record-action record-inline-action" href="/integrity.json"
               data-i18n="integrity.record.action.view_manifest">View manifest</a>
            <span class="integrity-record-actions-sep" aria-hidden="true">·</span>
            <a class="integrity-record-action record-inline-action" href="/integrity/releases/"
               data-i18n="integrity.record.action.view_releases">View releases</a>
          </span>
        </nav>
      </article>

      <p class="integrity-page-level-note" data-i18n="integrity.release_verify_note">Release archives are verified through a signed checksum list and detached archive signatures. The live public site is verified through /integrity.json.</p>
      <p class="integrity-page-level-note" data-i18n-html="integrity.page_level_verify_note">For page-level records, use <a href="/verify/">Verify</a>. For local manifest verification commands, see <a href="/integrity/verify-locally/">Verify locally</a>.</p>

      <!-- primary · 03 · history -->
      <section class="integrity-history" aria-labelledby="integrity-history-heading">
        <h2 class="integrity-history-heading" id="integrity-history-heading" data-i18n="integrity.history_heading">History</h2>
        <p class="integrity-history-body" data-i18n="integrity.history_body">Signed snapshots are kept for reference.</p>
        <p><a class="integrity-history-link" href="/integrity/releases/" data-i18n="integrity.history_link">View archived editions</a></p>
      </section>

      <!-- primary · 04 · related -->
      <nav class="integrity-related related-grid" aria-labelledby="integrity-related-label">
        <p class="integrity-related-label" id="integrity-related-label" data-i18n="integrity.related.label">Related</p>
        <ul class="integrity-related-list related-grid-list">
          <li><a href="/verify/" data-i18n="integrity.related.verify_page">Verify a page</a></li>
          <li><a href="/source/" data-i18n="integrity.related.source_mirrors">Source mirrors</a></li>
          <li><a href="/integrity/releases/" data-i18n="integrity.related.archived_editions">Archived editions</a></li>
        </ul>
      </nav>
    </div>
    <a href="/privacy/" class="page-back" data-i18n="integrity.back">← Privacy</a>
  </div>

</main>


<!-- body · footer · language, citation, privacy -->
<footer class="site-footer">
  <p class="site-footer__seal" aria-hidden="true">· · ·</p>
  <p class="site-footer__colophon">2026&nbsp;&nbsp;Trent Power&nbsp;&nbsp;Paris,&nbsp;France</p>
  <nav class="site-footer__language" aria-label="Language">
    <button type="button" data-lang="en" lang="en" aria-pressed="true" aria-label="English">English</button>
    <span class="site-footer__lang-sep" aria-hidden="true">/</span>
    <button type="button" data-lang="fr" lang="fr" aria-pressed="false" aria-label="Français">Français</button>
  </nav>
</footer>

<!-- body · print edition -->
<div class="print-trust-sheet print-only" data-print-sheet="integrity" aria-hidden="true">
  <header class="print-trust-header">
    <p class="print-trust-kicker" data-i18n="integrity.print.kicker">Integrity</p>
    <p class="print-trust-title" data-i18n="integrity.print.title">Signed public verification</p>
    <p class="print-trust-lede" data-i18n="integrity.print.lede">Published files are listed in a public manifest and signed with a detached PGP signature so updates can be verified independently.</p>
    <p class="print-trust-meta" data-i18n="integrity.print.meta">Edition 2026-05-09 · trentpower.fr/integrity/</p>
  </header>

  <div class="print-trust-grid">
    <div class="print-trust-card">
      <p class="print-trust-label"><span class="num">01</span> <span data-i18n="integrity.print.card.01.title">Manifest</span></p>
      <p class="print-trust-code" data-i18n-html="integrity.print.card.01.body"><code>/integrity.json</code> — <abbr title="Secure Hash Algorithm, 256-bit">SHA-256</abbr> hashes of every intentional public file.</p>
    </div>
    <div class="print-trust-card">
      <p class="print-trust-label"><span class="num">02</span> <span data-i18n="integrity.print.card.02.title">Detached signature</span></p>
      <p class="print-trust-code" data-i18n="integrity.print.card.02.body">/integrity.json.sig — detached PGP signature that verifies the manifest.</p>
    </div>
    <div class="print-trust-card">
      <p class="print-trust-label"><span class="num">03</span> <span data-i18n="integrity.print.card.03.title">Public key</span></p>
      <p class="print-trust-code" data-i18n="integrity.print.card.03.body">/.well-known/pgp-key.asc — fingerprint A729 591B 450D 3F59 3694 98BD 8299 1F25 04AE 0263.</p>
    </div>
    <div class="print-trust-card">
      <p class="print-trust-label"><span class="num">04</span> <span data-i18n="integrity.print.card.04.title">Frozen releases</span></p>
      <p data-i18n="integrity.print.card.04.body">/integrity/releases/ — public snapshots: February 2026, April 2026, May 2026.</p>
    </div>
    <div class="print-trust-card">
      <p class="print-trust-label"><span class="num">05</span> <span data-i18n="integrity.print.card.05.title">Source route</span></p>
      <p data-i18n="integrity.print.card.05.body">/source/ — public text view of selected source files. No secrets, no private artefacts.</p>
    </div>
    <div class="print-trust-card">
      <p class="print-trust-label"><span class="num">06</span> <span data-i18n="integrity.print.card.06.title">Verification</span></p>
      <p class="print-trust-code" data-i18n="integrity.print.card.06.body">curl -O trentpower.fr/integrity.json &amp;&amp; curl -O trentpower.fr/integrity.json.sig &amp;&amp; gpg --verify integrity.json.sig integrity.json</p>
    </div>
  </div>

  <footer class="print-trust-footer">
    <div class="print-trust-footer-text">
      <p class="print-proof" data-i18n="integrity.print.footer.proof">Private · Static · Signed · No tracking</p>
      <p data-i18n="integrity.print.footer.edition">Edition 2026-05-09 · trentpower.fr/integrity/</p>
    </div>
    <div class="print-qr-block" aria-hidden="true">
      <img class="print-qr-image" src="/images/qr/qr-integrity.svg" alt="">
      <p class="print-qr-url">trentpower.fr/integrity/</p>
    </div>
  </footer>
</div>

<!-- body · behaviour -->
<script src="/i18n-core.js?v=2026-05-09.fceaf1e4" integrity="sha384-lV7pwDwerNfEsW2JaZJujhBg+oHE1T4sxvSjUTIBWlWC1QLCQ+TOOvdN51q9PxZ7" defer></script>
<script src="/app.js?v=2026-05-09.fceaf1e4" integrity="sha384-Z6I7OJ48wrxeNCxv696t8GcWhKvJtNL1k3Jd/jn85IAww6+hao2mMncJK6PoTuZg" defer></script>
<script src="/app-enhance.js?v=2026-05-09.fceaf1e4" integrity="sha384-OcM6fBrT4SLPWzae3KsTFJ+FLo4I/GMnLUPMdgkVk2F6g61xl5HVc3xTkBFTG0dq" defer></script>
<script src="/verify/verification-data.2026-05-09.33c0b6f0.js" integrity="sha384-7hCL4of/0HnCOSAkAELfUdixZwKTW2pz3jVHB2sS4+QSWyyZueDOB70T6BWU5huM" defer></script>
<script src="/cite.js?v=2026-05-09.fceaf1e4" integrity="sha384-7bNRCHCsMzonHWF+yMHnIHfqYd1i1jLy3uD+4vAC2ZJ6uMCsLxDO1ooqYyuv/Prp" defer></script>

</body>
</html>
