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 %}