roadmap/waku/monthly-reports/2023-sept.html

156 lines
112 KiB
HTML
Raw Normal View History

2023-10-05 21:09:12 +00:00
<!DOCTYPE html>
2023-12-28 07:05:51 +00:00
<html><head><title>2023 September Monthly Waku Report</title><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta property="og:title" content="2023 September Monthly Waku Report"/><meta property="og:description" content="Executive Summary § The month of September saw an agreement and solidification of the Waku roadmap which defines the process of launching the Waku Network as an independent piece of infrastructure the broader ecosystem can rely upon."/><meta property="og:image" content="https://roadmap.logos.co/static/og-image.png"/><meta property="og:width" content="1200"/><meta property="og:height" content="675"/><link rel="icon" href="../../static/icon.png"/><meta name="description" content="Executive Summary § The month of September saw an agreement and solidification of the Waku roadmap which defines the process of launching the Waku Network as an independent piece of infrastructure the broader ecosystem can rely upon."/><meta name="generator" content="Quartz"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com"/><link href="../../index.css" rel="stylesheet" type="text/css" spa-preserve/><link href="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css" rel="stylesheet" type="text/css" spa-preserve/><link href="https://fonts.googleapis.com/css2?family=IBM Plex Mono&amp;family=sans-serif:wght@400;700&amp;family=sans-serif:ital,wght@0,400;0,600;1,400;1,600&amp;display=swap" rel="stylesheet" type="text/css" spa-preserve/><script src="../../prescript.js" type="application/javascript" spa-preserve></script><script type="application/javascript" spa-preserve>const fetchData = fetch(`../../static/contentIndex.json`).then(data => data.json())</script></head><body data-slug="waku/monthly-reports/2023-sept"><div id="quartz-root" class="page"><div id="quartz-body"><div class="left sidebar"><h1 class="page-title "><a href="../..">Logos Collective Project Roadmaps</a></h1><div class="spacer mobile-only"></div><div class="search "><div id="search-icon"><p>Search</p><div></div><svg tabIndex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search</title><desc id="desc">Search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"></path><circle cx="8" cy="8" r="7"></circle></g></svg></div><div id="search-container"><div id="search-space"><input autocomplete="off" id="search-bar" name="search" type="text" aria-label="Search for something" placeholder="Search for something"/><div id="results-container"></div></div></div></div><div class="darkmode "><input class="toggle" id="darkmode-toggle" type="checkbox" tabIndex="-1"/><label id="toggle-label-light" for="darkmode-toggle" tabIndex="-1"><svg xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" version="1.1" id="dayIcon" x="0px" y="0px" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xmlSpace="preserve"><title>Light mode</title><path d="M6,17.5C6,16.672,5.328,16,4.5,16h-3C0.672,16,0,16.672,0,17.5 S0.672,19,1.5,19h3C5.328,19,6,18.328,6,17.5z M7.5,26c-0.414,0-0.789,0.168-1.061,0.439l-2,2C4.168,28.711,4,29.086,4,29.5 C4,30.328,4.671,31,5.5,31c0.414,0,0.789-0.168,1.06-0.44l2-2C8.832,28.289,9,27.914,9,27.5C9,26.672,8.329,26,7.5,26z M17.5,6 C18.329,6,19,5.328,19,4.5v-3C19,0.672,18.329,0,17.5,0S16,0.672,16,1.5v3C16,5.328,16.671,6,17.5,6z M27.5,9 c0.414,0,0.789-0.168,1.06-0.439l2-2C30.832,6.289,31,5.914,31,5.5C31,4.672,30.329,4,29.5,4c-0.414,0-0.789,0.168-1.061,0.44 l-2,2C26.168,6.711,26,7.086,26,7.5C26,8.328,26.671,9,27.5,9z M6.439,8.561C6.711,8.832,7.086,9,7.5,9C8.328,9,9,8.328,9,7.5 c0-0.414-0.168-0.789-0.439-1.061l-2-2C6.289,4.168,5.914,4,5.5,4C4.672,4,4,4.672,4,5.5c0,0.414,0.168,0.789,0.439,1.06 L6.439,8.561z M33.5,16h-3c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5h3c0.828,0,1.5-0.672,1.5-1.5S34.328,16,33.5,16z M28.561,26.439C28.289,26.168,27.914,26,27.5,26c-0.828,0-1.5,0.672-1.5,1.5c0,0.414,0.168,0
2023-10-05 21:09:12 +00:00
<p>The month of September saw an agreement and solidification of the Waku roadmap which defines the process of launching the Waku Network as an independent piece of infrastructure the broader ecosystem can rely upon. Along with this, a revamp of the process in which work is labeled and tracked was performed which has an automated part and is generally more in line with the requests from the Insights team.</p>
2023-10-09 22:26:37 +00:00
<p>Work continues in the scaling and productionization efforts across the clients. Work previously done to enables PostgreSQL engine for <code>WAKU-STORE</code> in nwaku is being locally stress tested, further stress test using dev fleet is expected to be finalized next month. A Waku static sharding strategy is being integrated into Status to accommodate the first growth milestones of the re-release and adaptive sharding research and implementation is close behind.
Local simulation of <code>RLN-RELAY</code> has enabled the discovery of minor bugs which are fixed in the latest release of zerokit and nwaku and the study of the affect of RLN on performance.</p>
2023-10-05 21:09:12 +00:00
<p>Kurtosis as a platform was found to be insufficient for modeling a Waku network at the scale we wish, and the Vac team is pursuing an alternative strategy and writing up learnings from the boundaries were able to push.</p>
<p>Quality Assurance practices are scheduled throughout the next year to keep all client implementations up to a threshold of continuous quality.</p>
<p>The process to add native integration APIs to <code>nwaku</code> is underway such that the default native library moves from <code>go-waku</code> to <code>nwaku</code>.</p>
<h2 id="key-updates">Key Updates<a aria-hidden="true" tabindex="-1" href="#key-updates" class="internal"> §</a></h2>
<h3 id="personnel">Personnel<a aria-hidden="true" tabindex="-1" href="#personnel" class="internal"> §</a></h3>
<ul>
2023-10-09 22:26:37 +00:00
<li>addition of
<ul>
<li>Aaron as Project Manager</li>
<li>Sergei as Researcher</li>
<li>Gabriel as nwaku Engineer</li>
</ul>
</li>
<li>Several Jobs Descriptions have been reviewed this month to be opened shortly:
<ul>
<li>Growth Lead/Marketing strategist to drive Wakus growth and liaise with Comms Hubs</li>
<li>Business Development Lead, to further develop partnership with ecosystem projects</li>
<li>Solution Engineer, to provide technical support to projects integrating Waku</li>
</ul>
2023-10-05 21:09:12 +00:00
</li>
2023-10-09 22:26:37 +00:00
<li>A core contributor to lead the Waku Chat SDK team has been secured, with start date in November.</li>
2023-10-05 21:09:12 +00:00
</ul>
<h3 id="milestones">Milestones<a aria-hidden="true" tabindex="-1" href="#milestones" class="internal"> §</a></h3>
2023-10-09 22:26:37 +00:00
<p>A lot of work has been put into coalescing and finalizing the development tracking process that is in line with the Insight Reporting requirements, and Aarons addition to the team this month as pushed it over the edge to completion. Much of this has gone into automating the weekly reporting process via GitHub labels and comments on issues.</p>
2023-10-05 21:09:12 +00:00
<p>For tracking Waku maintains these Milestones in the <code>waku-org/pm</code> repo. Within each milestone description, youll find the corresponding Epics. Every Epic is distinctly labeled, and this label is affixed to each issue associated with that particular Epic. The labels are managed by the <code>labels.yaml</code> file located in the <code>waku-org/pm</code> repo.</p>
2023-10-09 22:26:37 +00:00
<p>Given the expansive nature of Waku and its various repositories working towards the milestones, the labels established in the <code>labels.yaml</code> file are replicated across each respective <code>waku-org</code> repo. This structure allows for seamless navigation, starting from top-level milestones down to the most granular issues.</p>
2023-10-05 21:09:12 +00:00
<p>Waku is broken out into the following four Milestones, with Epics associated with them:</p>
<ul>
<li><code>Waku Network Gen0</code></li>
<li><code>Waku Network Can Support 1MM Users</code></li>
<li><code>Quality Assurace Processes in Place</code></li>
<li><code>Support Many Platforms</code></li>
</ul>
<p>More details on the structure and progress of all Waku work can be tracked in their PM repository, specifically <a href="https://github.com/waku-org/pm/milestones" class="external">the milestone page</a>. The following sections are highlighted updates on what happened this month.</p>
<h4 id="waku-network-gen0"><a href="https://github.com/waku-org/pm/issues/50" class="external">Waku Network Gen0</a><a aria-hidden="true" tabindex="-1" href="#waku-network-gen0" class="internal"> §</a></h4>
<p>The Waku Network RFC was created and <a href="https://rfc.vac.dev/spec/64/" class="external">published on Vac</a> as RAW which details the ideas and architecture of the Waku Network. The next version of RLN was also <a href="https://rfc.vac.dev/spec/58/" class="external">published on Vac</a> as RAW.</p>
2023-10-09 22:26:37 +00:00
<p>A benchmark of RLN was conducted and <a href="https://github.com/waku-org/research/issues/23" class="external">the results</a> were discussed in a <a href="https://minutes.logos.co/logos/logos-research-call-notes#september-27" class="external">Logos Research Call presentation</a> (See <a href="https://github.com/waku-org/research/issues/23" class="external">waku-org/research#23</a> for details). The tl;dr is copied here for convenience:</p>
2023-10-05 21:09:12 +00:00
<blockquote class="callout" data-callout="quote">
<div class="callout-title">
<div class="callout-icon"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z"></path><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z"></path></svg></div>
<div class="callout-title-inner"><p>TLDR: </p></div>
</div>
<ul>
<li>Proof generation is constant-ish. 0.15 second for each proof</li>
<li>Proof verification is constant-ish, 0.012 seconds. In a network with 10k nodes and D=6 this would add an overhead delay of 0.06 seconds.</li>
<li>Gossipsub scoring drops connections from spammer peers, which acts as the punishment (instead of slashing). Validated in the simulation.</li>
<li>RLN doesnt have any impact on memory consumption.</li>
</ul>
</blockquote>
<p>Based on these two specification publications and other associated work, efforts have begun to launch the first dev-testnet in time for the DevConnect event in November 2023.</p>
2023-10-09 22:26:37 +00:00
<p>All launch critical work for autosharding has been done in terms of RFC and nwaku.</p>
2023-10-05 21:09:12 +00:00
<h4 id="waku-network-can-support-1mm-users"><a href="https://github.com/waku-org/pm/issues/83" class="external">Waku Network Can Support 1MM Users</a><a aria-hidden="true" tabindex="-1" href="#waku-network-can-support-1mm-users" class="internal"> §</a></h4>
<p>Significant work was completed on the PostgreSQL integration and setup within <code>nwaku</code>, which supports the data retention and retrieval of Waku archival nodes. The implementation is currently being stress-tested to ensure production performance metrics are met.</p>
<p>The efforts in simulating a Waku Network of 10k users within a single shard continues and is tracked within <a href="../../vac/dst/" class="internal" data-slug="vac/dst/">Vac DST Roadmap</a>. The performance of Wakurtosis (Kurtosis backend) was found to be insufficient for our requirements for scaling simulations. The creation of a Kubernetes orchestration tool, written in Python, has begun construction. This tool is heavily architected to mimic what Codex has created. It was chosen to reproduce this tooling in Python in order to increase usability and ease of maintenance/contribution as C# is a less known language within the org. The reasoning for this development can be tracked in <a href="../../vac/dst/wakurtosis/vac/retrospective-rlog" class="internal" data-slug="vac/dst/wakurtosis/vac/retrospective-rlog">retrospective-rlog</a>.</p>
<p>The effort to understand a “professional Waku node operator” has begun and initial notes can be tracked within this <a href="https://notes.status.im/node-operators-meeting" class="external">minutes doc</a>.</p>
2023-10-09 22:26:37 +00:00
<p>A “static sharding” fleet was setup to test sharding and PostgreSQL by Waku team.
Setup of a similar fleet dedicated to Status Communities is in progress (the first fleet may be used in the interim).</p>
2023-10-05 21:09:12 +00:00
<h4 id="quality-assurance-processes-in-place"><a href="https://github.com/waku-org/pm/issues/73" class="external">Quality Assurance Processes in Place</a><a aria-hidden="true" tabindex="-1" href="#quality-assurance-processes-in-place" class="internal"> §</a></h4>
<p>This milestone was created to ensure preparedness for the upcoming production client needs (specifically Waku Network Gen0 and Status Communities). A list of required processes in place was constructed and tasked out so that all implementations of Waku go through a standardized production release cycle.</p>
2023-10-09 22:26:37 +00:00
<p>This work is coordinating with the new <a href="../../vac/dst/" class="internal" data-slug="vac/dst/">Vac DST</a> additions focused on testing rubrics for Logos Projects. This milestone is expected to be completed by Q1 2024.
Work has started to use the js-waku CI as an integration test suite for nwaku and go-waku. This test suite can now easily be run for either client as part of their release process.</p>
2023-10-05 21:09:12 +00:00
<h4 id="support-many-platforms"><a href="https://github.com/waku-org/pm/issues/42" class="external">Support Many Platforms</a><a aria-hidden="true" tabindex="-1" href="#support-many-platforms" class="internal"> §</a></h4>
<p>This is a large milestone created last month that tracks Wakus “integration landscape” and attempting to ensure any developer seamlessly is able to integrate Waku.</p>
<p>It has started to list the work required for completion but more detail is needed to be fleshed out on prioritization and estimated resource needs. Currently, it is slotted for completion by April 2024.</p>
<p>Much of the work this month was fleshing out the available REST APIs of <code>nwaku</code>.</p>
2023-10-09 22:26:37 +00:00
<p>A <a href="https://discord.com/channels/1110799176264056863/1111568123007606855/1149298157306531890" class="external">poll</a> was created to query what language priority we should have was gone. Theyll be published on socials next month to boost engagement and feedback. This poll will assist with priorities for this milestone.</p>
2023-10-05 21:09:12 +00:00
<h2 id="perceived-changes-in-project-risk">Perceived Changes in Project Risk<a aria-hidden="true" tabindex="-1" href="#perceived-changes-in-project-risk" class="internal"> §</a></h2>
<ul>
<li>Waku doing most integration of Waku into <code>status-go</code> consumes a lot of Go-related developer resources.
<ul>
<li>a list of needed work is tracked <a href="https://github.com/status-im/status-go/issues/4057" class="external">here</a></li>
</ul>
</li>
<li>There effort to convert <code>nwaku</code> to the main native integration client requires a large effort in the implementations of C-bindings in Nim and has some unknowns associated with it. Furthermore this additional effort and uncertainty doesnt directly contribute to the current critical path of development.</li>
<li>The first main application of the milestone reorganization within the project has made the milestones associated with it clear, thus allowing the Waku Network MVP target setup to be tracked well</li>
</ul>
<h2 id="future-improvement-plans">Future Improvement Plans<a aria-hidden="true" tabindex="-1" href="#future-improvement-plans" class="internal"> §</a></h2>
<h3 id="insight">Insight<a aria-hidden="true" tabindex="-1" href="#insight" class="internal"> §</a></h3>
<p>The insight team plans to further evaluate the value the reporting process implemented by Waku as it pertains to use within the other projects under Logos. It is expected that next month it will be finalized and ready for review by other teams to see if theyd like to adopt it.</p>
<p>One side effect of the automated reporting process is that the associate issue labels are already compatible with our data lake ingestion that was initiated by the Status project. This will allow us to create more useful dashboards and monitoring that take into account accurate development activity.</p>
<h3 id="project">Project<a aria-hidden="true" tabindex="-1" href="#project" class="internal"> §</a></h3>
<p>As the milestones continue to be fleshed out and detailed, the ability to show progress over time will improve.</p>
<h2 id="sources-and-useful-links">Sources and Useful Links<a aria-hidden="true" tabindex="-1" href="#sources-and-useful-links" class="internal"> §</a></h2>
<p>Weekly Reports</p>
<ul>
<li><a href="../../waku/updates/2023-09-04" class="internal" data-slug="waku/updates/2023-09-04">2023-09-04</a></li>
<li><a href="../../waku/updates/2023-09-11" class="internal" data-slug="waku/updates/2023-09-11">2023-09-11</a></li>
<li><a href="../../waku/updates/2023-09-18" class="internal" data-slug="waku/updates/2023-09-18">2023-09-18</a></li>
<li><a href="../../waku/updates/2023-09-25" class="internal" data-slug="waku/updates/2023-09-25">2023-09-25</a></li>
2023-10-25 18:50:16 +00:00
</ul></article></div><div class="right sidebar"><div class="graph "><h3>Graph View</h3><div class="graph-outer"><div id="graph-container" data-cfg="{&quot;drag&quot;:true,&quot;zoom&quot;:true,&quot;depth&quot;:1,&quot;scale&quot;:1.1,&quot;repelForce&quot;:0.5,&quot;centerForce&quot;:0.3,&quot;linkDistance&quot;:30,&quot;fontSize&quot;:0.6,&quot;opacityScale&quot;:1,&quot;showTags&quot;:true,&quot;removeTags&quot;:[]}"></div><svg version="1.1" id="global-graph-icon" xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 55 55" fill="currentColor" xmlSpace="preserve"><path d="M49,0c-3.309,0-6,2.691-6,6c0,1.035,0.263,2.009,0.726,2.86l-9.829,9.829C32.542,17.634,30.846,17,29,17
2023-10-05 21:09:12 +00:00
s-3.542,0.634-4.898,1.688l-7.669-7.669C16.785,10.424,17,9.74,17,9c0-2.206-1.794-4-4-4S9,6.794,9,9s1.794,4,4,4
c0.74,0,1.424-0.215,2.019-0.567l7.669,7.669C21.634,21.458,21,23.154,21,25s0.634,3.542,1.688,4.897L10.024,42.562
C8.958,41.595,7.549,41,6,41c-3.309,0-6,2.691-6,6s2.691,6,6,6s6-2.691,6-6c0-1.035-0.263-2.009-0.726-2.86l12.829-12.829
c1.106,0.86,2.44,1.436,3.898,1.619v10.16c-2.833,0.478-5,2.942-5,5.91c0,3.309,2.691,6,6,6s6-2.691,6-6c0-2.967-2.167-5.431-5-5.91
v-10.16c1.458-0.183,2.792-0.759,3.898-1.619l7.669,7.669C41.215,39.576,41,40.26,41,41c0,2.206,1.794,4,4,4s4-1.794,4-4
s-1.794-4-4-4c-0.74,0-1.424,0.215-2.019,0.567l-7.669-7.669C36.366,28.542,37,26.846,37,25s-0.634-3.542-1.688-4.897l9.665-9.665
C46.042,11.405,47.451,12,49,12c3.309,0,6-2.691,6-6S52.309,0,49,0z M11,9c0-1.103,0.897-2,2-2s2,0.897,2,2s-0.897,2-2,2
S11,10.103,11,9z M6,51c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S8.206,51,6,51z M33,49c0,2.206-1.794,4-4,4s-4-1.794-4-4
s1.794-4,4-4S33,46.794,33,49z M29,31c-3.309,0-6-2.691-6-6s2.691-6,6-6s6,2.691,6,6S32.309,31,29,31z M47,41c0,1.103-0.897,2-2,2
2023-10-25 18:50:16 +00:00
s-2-0.897-2-2s0.897-2,2-2S47,39.897,47,41z M49,10c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S51.206,10,49,10z"></path></svg></div><div id="global-graph-outer"><div id="global-graph-container" data-cfg="{&quot;drag&quot;:true,&quot;zoom&quot;:true,&quot;depth&quot;:-1,&quot;scale&quot;:0.9,&quot;repelForce&quot;:0.5,&quot;centerForce&quot;:0.3,&quot;linkDistance&quot;:30,&quot;fontSize&quot;:0.6,&quot;opacityScale&quot;:1,&quot;showTags&quot;:true,&quot;removeTags&quot;:[]}"></div></div></div><div class="toc desktop-only"><button type="button" id="toc"><h3>Table of Contents</h3><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="fold"><polyline points="6 9 12 15 18 9"></polyline></svg></button><div id="toc-content"><ul class="overflow"><li class="depth-0"><a href="#executive-summary" data-for="executive-summary">Executive Summary</a></li><li class="depth-0"><a href="#key-updates" data-for="key-updates">Key Updates</a></li><li class="depth-1"><a href="#personnel" data-for="personnel">Personnel</a></li><li class="depth-1"><a href="#milestones" data-for="milestones">Milestones</a></li><li class="depth-0"><a href="#perceived-changes-in-project-risk" data-for="perceived-changes-in-project-risk">Perceived Changes in Project Risk</a></li><li class="depth-0"><a href="#future-improvement-plans" data-for="future-improvement-plans">Future Improvement Plans</a></li><li class="depth-1"><a href="#insight" data-for="insight">Insight</a></li><li class="depth-1"><a href="#project" data-for="project">Project</a></li><li class="depth-0"><a href="#sources-and-useful-links" data-for="sources-and-useful-links">Sources and Useful Links</a></li></ul></div></div><div class="backlinks "><h3>Backlinks</h3><ul class="overflow"><li><a href="../../waku/" class="internal">Waku Roadmap</a></li></ul></div></div></div><footer class><hr/><p>Created with <a href="https://quartz.jzhao.xyz/">Quartz v4.1.0</a>, © 2023</p><ul><li><a href="https://github.com/logos-co/roadmap">GitHub</a></li><li><a href="https://discord.com/invite/logos-state">Discord Community</a></li></ul></footer></div></body><script type="application/javascript">// quartz/components/scripts/quartz/components/scripts/callout.inline.ts
2023-10-05 21:09:12 +00:00
function toggleCallout() {
const outerBlock = this.parentElement;
outerBlock.classList.toggle(`is-collapsed`);
const collapsed = outerBlock.classList.contains(`is-collapsed`);
const height = collapsed ? this.scrollHeight : outerBlock.scrollHeight;
outerBlock.style.maxHeight = height + `px`;
let current = outerBlock;
let parent = outerBlock.parentElement;
while (parent) {
if (!parent.classList.contains(`callout`)) {
return;
}
const collapsed2 = parent.classList.contains(`is-collapsed`);
const height2 = collapsed2 ? parent.scrollHeight : parent.scrollHeight + current.scrollHeight;
parent.style.maxHeight = height2 + `px`;
current = parent;
parent = parent.parentElement;
}
}
function setupCallout() {
const collapsible = document.getElementsByClassName(
`callout is-collapsible`
);
for (const div of collapsible) {
const title = div.firstElementChild;
if (title) {
title.removeEventListener(`click`, toggleCallout);
title.addEventListener(`click`, toggleCallout);
const collapsed = div.classList.contains(`is-collapsed`);
const height = collapsed ? title.scrollHeight : div.scrollHeight;
div.style.maxHeight = height + `px`;
}
}
}
document.addEventListener(`nav`, setupCallout);
window.addEventListener(`resize`, setupCallout);
</script><script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
const darkMode = document.documentElement.getAttribute('saved-theme') === 'dark'
mermaid.initialize({
startOnLoad: false,
securityLevel: 'loose',
theme: darkMode ? 'dark' : 'default'
});
document.addEventListener('nav', async () => {
await mermaid.run({
querySelector: '.mermaid'
})
});
</script><script src="https://cdn.jsdelivr.net/npm/katex@0.16.7/dist/contrib/copy-tex.min.js" type="application/javascript"></script><script src="../../postscript.js" type="module"></script></html>