git / moonbite-network / templates/governance.html · raw

{% extends "base.html" %}{% block body_class %}{% endblock %}{% block title %}Governance — MoonBite decision records (ADRs){% endblock %}{% block meta_description %}Every rule change to MoonBite is written down as an Architecture Decision Record. Read them all.{% endblock %}{% block head_extra %}<style nonce="{{ csp_nonce }}">  /* Governance: decision log. Composes the ds- kit; only the few rules below are page-specific. */  .gov-art { width: 100%; height: auto; display: block; }  .gov-count { margin-top: 48px; }  .gov-log { margin-top: 16px; }  .gov-log .ds-row { min-height: 44px; }  .gov-log .ds-row .t { overflow-wrap: anywhere; }  .gov-log .ds-row .id { color: var(--ds-bone); }  .gov-log .ds-row .meta { display: inline-flex; color: var(--ds-ash); transition: transform var(--ds-t1) var(--ds-ease), color var(--ds-t1) var(--ds-ease); }  .gov-log a.ds-row:hover .meta { transform: translateX(4px); color: var(--ds-bone); }  .gov-log a.ds-row:hover .t { text-decoration: underline; text-decoration-color: var(--ds-line-2); text-underline-offset: 4px; }  .gov-howto a, .gov-board a { color: var(--ds-bone); border-bottom: 1px solid var(--ds-line-2); }  .gov-howto a:hover, .gov-board a:hover { border-color: var(--ds-bone); }  .gov-howto code { font-family: var(--ds-mono); font-size: .9em; color: var(--ds-bone); }  @media (max-width: 767px) {    .gov-log .ds-row { grid-template-columns: minmax(0, 1fr) auto; gap: 8px 16px; }    .gov-log .ds-row .id { grid-column: 1 / -1; }  }</style>{% endblock %}{% block content %}{# d01 mark: one closed path; d02 glyph bars at y=-40.5 and 11.5. #}{% set MARK = "M 13.99 -99.02 A 100 100 0 1 0 99.02 -13.99 A 62 62 0 0 1 13.99 -99.02 Z" %}{% set newest = adrs[-1] if adrs else none %}<div class="ds">  <!-- ================= HEAD ================= -->  <header class="ds-pagehead split">    <div class="ds-wrap">      <div>        <ol class="ds-crumbs">          <li><a href="/">MoonBite</a></li>          <li><span aria-current="page">Governance</span></li>        </ol>        <p class="ds-eyebrow">Governance</p>        <h1 class="ds-title">Every rule change,<br><span class="g">written down first.</span></h1>        <p class="ds-lede">Every change to how MoonBite works is written down first, in the open, as an Architecture Decision Record. <b>No silent rule changes.</b> Read the reasoning behind the chain.</p>        <div class="ds-actions">          {% if newest %}          <a class="ds-btn gold" href="/governance/{{ newest.slug }}">Read the newest record            <svg width="16" height="16" viewBox="0 0 16 16" aria-hidden="true"><path d="M3 8h10M9 4l4 4-4 4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>          </a>          {% endif %}          <a class="ds-btn" href="/git/">Read the source code</a>        </div>        <ul class="ds-checks">          <li>No silent rule changes</li>          <li>Full text of every record</li>          <li><span><span class="mono">{{ adrs|length }}</span> records on file</span></li>        </ul>      </div>      <div class="ds-stage" aria-hidden="true">        <svg class="gov-art" viewBox="0 0 400 320" aria-hidden="true">          <rect x="112" y="24" width="236" height="252" rx="10" fill="#161A22" stroke="#8A8580" stroke-width="2"/>          <rect x="88" y="40" width="236" height="252" rx="10" fill="#161A22" stroke="#8A8580" stroke-width="2"/>          <rect x="64" y="56" width="236" height="252" rx="10" fill="#0B0D12" stroke="#F5F2EA" stroke-width="2"/>          <text x="84" y="88" fill="#8A8580" font-family="ui-monospace,Menlo,Consolas,monospace" font-size="11" letter-spacing="1.5">ADR</text>          <rect x="84" y="100" width="168" height="10" rx="5" fill="#F5F2EA"/>          <rect x="84" y="116" width="120" height="10" rx="5" fill="#F5F2EA"/>          <line x1="84" y1="142" x2="280" y2="142" stroke="#8A8580" stroke-width="1"/>          <text x="84" y="162" fill="#8A8580" font-family="ui-monospace,Menlo,Consolas,monospace" font-size="9" letter-spacing="1">STATUS</text>          <rect x="150" y="155" width="70" height="7" rx="3.5" fill="#8A8580"/>          <text x="84" y="180" fill="#8A8580" font-family="ui-monospace,Menlo,Consolas,monospace" font-size="9" letter-spacing="1">DATE</text>          <rect x="150" y="173" width="56" height="7" rx="3.5" fill="#8A8580"/>          <line x1="84" y1="196" x2="280" y2="196" stroke="#8A8580" stroke-width="1"/>          <text x="84" y="216" fill="#F5F2EA" font-family="ui-monospace,Menlo,Consolas,monospace" font-size="9" letter-spacing="1">DECISION</text>          <rect x="84" y="226" width="180" height="6" rx="3" fill="#8A8580"/>          <rect x="84" y="240" width="150" height="6" rx="3" fill="#8A8580"/>          <rect x="84" y="254" width="164" height="6" rx="3" fill="#8A8580"/>          <rect x="84" y="268" width="96" height="6" rx="3" fill="#8A8580"/>          <circle cx="262" cy="88" r="16" fill="none" stroke="#F5F2EA" stroke-width="2"/>          <path d="M254 88.5l5.5 5.5 10-10" fill="none" stroke="#F5F2EA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>        </svg>      </div>    </div>  </header>  <!-- ================= DECISION LOG ================= -->  <section class="ds-section" id="records" aria-labelledby="log-h">    <div class="ds-wrap">      <div class="ds-head">        <div>          <p class="ds-eyebrow">Decision log</p>          <h2 class="ds-h2" id="log-h">Every record, <span class="dim">newest first.</span></h2>          <p class="ds-sub">Each record explains what was decided and why. Open one to read its full text, including its status and date.</p>        </div>      </div>      <p class="ds-eyebrow gov-count"><span class="mono">{{ adrs|length }}</span> records</p>      <div class="ds-rows gov-log">        {% for a in adrs|reverse %}        {% set parts = a.slug.split('-') %}        <a class="ds-row" href="/governance/{{ a.slug }}">          <span class="id">{{ parts[0] }}-{{ parts[1] }}</span>          <span class="t">{{ a.title.split('—', 1)[1].strip() if '—' in a.title else a.title }}</span>          <span class="meta" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 16 16"><path d="M3 8h10M9 4l4 4-4 4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></span>        </a>        {% endfor %}      </div>    </div>  </section>  <!-- ================= HOW A RULE CHANGES ================= -->  <section class="ds-section alt" aria-labelledby="how-h">    <div class="ds-wrap">      <p class="ds-eyebrow">Process</p>      <h2 class="ds-h2" id="how-h">How a rule changes</h2>      <p class="ds-sub">The record comes first. The code follows it, and anyone can check the running parameters against both.</p>      <ol class="ds-howto gov-howto">        <li><div><h3 class="ds-h3">Written down as a record</h3><p>A change starts as an Architecture Decision Record: what is decided, why, and which earlier records it relates to or replaces. Its status (accepted, proposed or draft) is stated at the top.</p></div></li>        <li><div><h3 class="ds-h3">Published in the open</h3><p>The full text of every record is public and listed in the <a href="#records">decision log</a> above.</p></div></li>        <li><div><h3 class="ds-h3">Shipped in the source</h3><p>Changes to the rules land in the <a href="/git/">source code</a>, which anyone can read and build.</p></div></li>        <li><div><h3 class="ds-h3">Checked against the live rules</h3><p>The monetary parameters are published as JSON at <a href="/api/consensus"><code>/api/consensus</code></a>. Compare them with the records that set them.</p></div></li>      </ol>    </div>  </section>  <!-- ================= RULES IN FORCE ================= -->  <section class="ds-section" aria-labelledby="force-h">    <div class="ds-wrap">      <p class="ds-eyebrow">In force</p>      <h2 class="ds-h2" id="force-h">The rules the records set</h2>      <p class="ds-sub">Read from the consensus parameters, not typed into this page.</p>      <div class="ds-board gov-board">        <div class="ds-brow"><span class="k">Block time</span><span class="val">{{ consensus.block_time_min }} min<small>Set by <a href="/governance/ADR-010">ADR-010</a></small></span></div>        <div class="ds-brow"><span class="k">Initial block subsidy</span><span class="val">{{ consensus.initial_subsidy_coins }} MBITE<small>Set by <a href="/governance/ADR-010">ADR-010</a></small></span></div>        <div class="ds-brow"><span class="k">Halving interval</span><span class="val">{{ "{:,}".format(consensus.halving_interval) }} blocks<small>Set by <a href="/governance/ADR-010">ADR-010</a></small></span></div>        <div class="ds-brow"><span class="k">Supply cap</span><span class="val">{{ "{:,.8f}".format(consensus.max_supply_coins) }}<small>MBITE, locked by <a href="/governance/ADR-011">ADR-011</a></small></span></div>      </div>      <p class="ds-note"><span>Full parameter set: <a class="ds-textlink" href="/api/consensus">/api/consensus</a></span></p>    </div>  </section>  <!-- ================= CLOSING ================= -->  <section class="ds-section tight" aria-labelledby="close-h">    <div class="ds-wrap">      <div class="ds-band">        <svg class="mk" viewBox="-150 -150 300 300" aria-hidden="true"><path fill="#F5F2EA" d="{{ MARK }}"/><rect x="-127.5" y="-40.5" width="255" height="13" fill="#D9A441"/><rect x="-127.5" y="11.5" width="255" height="13" fill="#D9A441"/></svg>        <h2 class="ds-h2" id="close-h">Check the rules yourself.</h2>        <p class="ds-sub">The records explain the reasoning. The source code and the consensus parameters are what the network runs.</p>        <div class="ds-actions">          <a class="ds-btn" href="/git/">Source code</a>          <a class="ds-btn" href="/api/consensus">Consensus rules (JSON)</a>        </div>      </div>    </div>  </section></div>{% endblock %}