<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://app.exepert.com/blog</id>
    <title>EXEPERT Blog</title>
    <updated>2026-08-05T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://app.exepert.com/blog"/>
    <subtitle>EXEPERT Blog</subtitle>
    <icon>https://app.exepert.com/img/favicon.png</icon>
    <entry>
        <title type="html"><![CDATA[Research Alpha v0.4.0-alpha.1 enters review]]></title>
        <id>https://app.exepert.com/blog/research-alpha-040-alpha1</id>
        <link href="https://app.exepert.com/blog/research-alpha-040-alpha1"/>
        <updated>2026-08-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[EXEPERT Research Alpha v0.4.0-alpha.1 is now an unreleased implementation]]></summary>
        <content type="html"><![CDATA[<p>EXEPERT Research Alpha <code>v0.4.0-alpha.1</code> is now an unreleased implementation
candidate for deterministic game-environment training, local PPO experiments,
and trajectory replay.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-is-included">What is included<a href="https://app.exepert.com/blog/research-alpha-040-alpha1#what-is-included" class="hash-link" aria-label="Direct link to What is included" title="Direct link to What is included" translate="no">​</a></h2>
<ul>
<li class="">One fixed-timestep, seeded Runner kernel shared by browser and Node adapters.</li>
<li class="">A versioned JSONL worker protocol and Gymnasium package.</li>
<li class="">A reproducible Stable-Baselines3 PPO example with local run artifacts.</li>
<li class="">A lazy-loaded Runs workspace and loopback-only job service.</li>
<li class="">Independent application, environment, protocol, manifest, and trajectory
versions exposed through an accessible version panel.</li>
<li class="">MIT licensing, DCO contribution sign-offs, and explicit open-core extension
seams that do not implement billing or hosted infrastructure.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="scope-and-privacy">Scope and privacy<a href="https://app.exepert.com/blog/research-alpha-040-alpha1#scope-and-privacy" class="hash-link" aria-label="Direct link to Scope and privacy" title="Direct link to Scope and privacy" translate="no">​</a></h2>
<p>This is a prerelease candidate, not a public release or deployment. Existing
Dashboard, Arcade, AI Rescue, Chat, Prompt, Observability, and Journal behavior
remains available. Training data, trajectories, and model checkpoints remain in
ignored local storage and are not uploaded without a separate explicit action.</p>
<p>The conformance target is deterministic Runner transitions for the same
environment version, seed, and actions. Learned PPO weights can vary across
hardware and numerical stacks.</p>
<p>The <a class="" href="https://app.exepert.com/docs/research-alpha/implementation-inventory">implementation inventory</a>
maps the delivered source areas, contracts, security boundaries, validation,
and deliberately excluded hosted or commercial capabilities.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="Research" term="Research"/>
        <category label="Release" term="Release"/>
        <category label="Docs" term="Docs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Arcade gains a fitted LCD and live power readout]]></title>
        <id>https://app.exepert.com/blog/arcade-lcd-live-power</id>
        <link href="https://app.exepert.com/blog/arcade-lcd-live-power"/>
        <updated>2026-08-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[EXEPERT Arcade now fits the Runner cleanly against the top of its Game Boy LCD]]></summary>
        <content type="html"><![CDATA[<p>EXEPERT Arcade now fits the Runner cleanly against the top of its Game Boy LCD
and can show a live, accessible device-battery percentage when the browser
supports it.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="root-cause">Root cause<a href="https://app.exepert.com/blog/arcade-lcd-live-power#root-cause" class="hash-link" aria-label="Direct link to Root cause" title="Direct link to Root cause" translate="no">​</a></h2>
<p>The Game Boy shell is scaled independently from Phaser. Phaser's FIT mode read
the already transformed parent bounds and wrote centering margins back onto the
canvas, producing a visible gray band above the game and cropping the rendered
width at some Size settings.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-changed">What changed<a href="https://app.exepert.com/blog/arcade-lcd-live-power#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<ul>
<li class="">The Runner remains a <code>320x180</code> scene, but its rendered canvas is now
top-centered, full-width, and uncropped inside the LCD. The unused lower
remainder shares the game's dark background.</li>
<li class="">Supporting secure browsers show <code>POWER {percentage}%</code>. Battery events update
the percentage, level arcs, LED state, charging glyph, and accessible status
without polling.</li>
<li class="">Charging uses the EXEPERT lime accent. Discharging uses green above 50%, amber
from 21-50%, and red at 20% or below; the percentage ensures status is never
communicated by color alone.</li>
<li class="">Unsupported, blocked, rejected, or invalid Battery API results keep the
classic static POWER label and red LED. No percentage is guessed.</li>
<li class="">Battery information is never persisted, logged, transmitted, or added to
Arcade research telemetry, and listeners are removed when Arcade closes.</li>
</ul>
<p>The Battery Status API is a progressive enhancement: browser support is
limited, secure contexts are required, and Permissions Policy or privacy
controls can prevent access. The Game Boy remains fully usable in every
fallback state.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="verification">Verification<a href="https://app.exepert.com/blog/arcade-lcd-live-power#verification" class="hash-link" aria-label="Direct link to Verification" title="Direct link to Verification" translate="no">​</a></h2>
<p>Automated coverage validates percentage normalization, visual thresholds,
live <code>levelchange</code> and <code>chargingchange</code> updates, listener cleanup, missing and
rejected API fallbacks, intrinsic <code>320x180</code> canvas geometry, LCD containment,
Runner and AI Rescue alignment, console resize behavior, and document overflow.
The combined telemetry release passed app and docs typechecks, 257 unit tests
with six expected skips, all 24 Arcade and responsive Playwright scenarios, and
both production builds. Visual checks at desktop, <code>970x820</code>, and <code>390x844</code> confirmed
the top-aligned LCD, live charging readout, contained phone Fit behavior, and
the absence of document-level horizontal overflow or browser-console errors.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="UI" term="UI"/>
        <category label="Bugfix" term="Bugfix"/>
        <category label="Docs" term="Docs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Arcade gains a stable tablet workspace]]></title>
        <id>https://app.exepert.com/blog/arcade-tablet-column-reflow</id>
        <link href="https://app.exepert.com/blog/arcade-tablet-column-reflow"/>
        <updated>2026-08-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[EXEPERT Arcade now gives the brain, Chat, and Game Boy predictable space on]]></summary>
        <content type="html"><![CDATA[<p>EXEPERT Arcade now gives the brain, Chat, and Game Boy predictable space on
tablet-sized workspaces without changing the desktop or phone layouts.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="root-cause">Root cause<a href="https://app.exepert.com/blog/arcade-tablet-column-reflow#root-cause" class="hash-link" aria-label="Direct link to Root cause" title="Direct link to Root cause" translate="no">​</a></h2>
<p>Dashboard and Arcade previously shared the same implicit two-row compact grid.
When Chat restored a longer conversation, its intrinsic content height expanded
the lower row and compressed the brain and Game Boy into a shallow top strip.
The brain canvas then appeared stretched, its status bar consumed most of the
tile, and the Arcade viewport could not use the available application height.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-changed">What changed<a href="https://app.exepert.com/blog/arcade-tablet-column-reflow#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<ul>
<li class="">At 961-1240px, Arcade uses explicit responsive rows:
<code>minmax(260px, 0.85fr)</code> for Brain and <code>minmax(0, 1.15fr)</code> for Study/Chat.
Brain and Study/Chat share the left column while Game Boy spans both rows in
the right column.</li>
<li class="">The tracks remain stable in Study and Chat modes, so restoring a long
transcript cannot resize the brain, Chat, or console panels.</li>
<li class="">Tablet Arcade Chat tabs use a compact <code>30px</code> height. Existing phone touch
targets and the Dashboard tablet layout are unchanged.</li>
<li class="">Compact Affective Field telemetry is a single bar-free horizontal strip. It
retains the dominant state, phase, intensity, valence, arousal, and toxicity;
narrow tiles scroll locally while Firefox and WebKit scrollbars stay hidden.</li>
<li class=""><code>#affectField</code> is keyboard-focusable and shows a focus-visible outline.
Arcade menu navigation yields arrow keys while this strip is focused, letting
keyboard users scroll telemetry without changing normal Game Boy controls.</li>
</ul>
<p>No API, event, storage key, chat-state, DOM-order, or DOM-ID contract changed.
Desktop widths above <code>1240px</code>, the Dashboard tablet reflow, and the single-column
Brain -&gt; Study/Chat -&gt; Tool order at <code>960px</code> and below remain intact.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="verification">Verification<a href="https://app.exepert.com/blog/arcade-tablet-column-reflow#verification" class="hash-link" aria-label="Direct link to Verification" title="Direct link to Verification" translate="no">​</a></h2>
<p>Responsive Playwright coverage now restores a deliberately long conversation
and verifies fixed Arcade tracks at 1240px and 970px, brain/canvas containment,
the full-height console column, the <code>30px</code> tabs, locally scrollable telemetry,
keyboard scrolling, phone ordering, and the absence of document-level
horizontal overflow. Existing Dashboard, Prompt, Observability, Journal, Arcade
menu, Fit, resize, and narrow-panel behavior remain covered.</p>
<p>The release passed app and docs TypeScript checks, 252 unit tests with six
expected skips, all 18 focused responsive and Arcade Playwright scenarios, the
production app build, and the Docusaurus production build. Visual checks at
1240x820, 970x820, 390x844, and 390x667 confirmed the intended proportions, a
<code>46px</code> affect strip, readable transcript, and pinned composer.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="UI" term="UI"/>
        <category label="Bugfix" term="Bugfix"/>
        <category label="Docs" term="Docs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Compact Chat puts the conversation first]]></title>
        <id>https://app.exepert.com/blog/compact-chat-readability</id>
        <link href="https://app.exepert.com/blog/compact-chat-readability"/>
        <updated>2026-08-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[EXEPERT's compact Chat layout now keeps the transcript and composer readable]]></summary>
        <content type="html"><![CDATA[<p>EXEPERT's compact Chat layout now keeps the transcript and composer readable
without removing the live Affective Field data.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="root-cause">Root cause<a href="https://app.exepert.com/blog/compact-chat-readability#root-cause" class="hash-link" aria-label="Direct link to Root cause" title="Direct link to Root cause" translate="no">​</a></h2>
<p>The tablet Chat tile had only about <code>269px</code> of internal height, while its model
header, context pills, <code>149px</code> Affective Field, quick prompts, and <code>73px</code>
composer required more than the tile could hold. Focusing the input then
scrolled the clipped <code>#leftChat</code> container, hiding the header and leaving the
message list only a few pixels tall.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-changed">What changed<a href="https://app.exepert.com/blog/compact-chat-readability#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<ul>
<li class="">At 961-1240px, active Chat receives a minimum <code>390px</code> lower row. At 960px
and below, active Chat uses <code>clamp(420px, 72svh, 640px)</code> without changing the
Study panel height.</li>
<li class="">The compact Affective Field is now a bar-free summary strip. It keeps the
dominant state, phase, intensity, valence, arousal, and toxicity visible,
wrapping the four values into a 2x2 grid on narrow tiles.</li>
<li class="">The redundant context-pill row is hidden below <code>1241px</code>; the selected model
remains visible in the Chat header.</li>
<li class="">Fixed Chat chrome no longer shrinks. The transcript owns the remaining space
and scrolls independently, while the composer stays pinned to the bottom.</li>
<li class="">Quick prompts remain visible for an empty chat, disappear after the first
user turn, and return when <strong>New chat</strong> resets the conversation.</li>
<li class="">Programmatic composer focus prevents browser scrolling, so <code>#leftChat</code> stays
at <code>scrollTop = 0</code> and its header remains visible.</li>
<li class="">The docs package now declares its Docusaurus-compatible React type dependency
directly, preventing the docs typecheck from resolving the app's React 18
types when both projects are installed in the same checkout.</li>
</ul>
<p>The existing desktop Chat, message history key, model picker, Affective Field
calculations, IDs, events, and public interfaces are unchanged.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="verification">Verification<a href="https://app.exepert.com/blog/compact-chat-readability#verification" class="hash-link" aria-label="Direct link to Verification" title="Direct link to Verification" translate="no">​</a></h2>
<p>The responsive Playwright coverage exercises 1440px, 1240px, 970px, 960px,
390x844, and the short-height 390x667 case. It checks transcript allocation,
telemetry height, prompt reset behavior, composer containment, brain-stage
containment, parent scroll position, and horizontal overflow across Dashboard
and Arcade while preserving Prompt, Observability, and Journal layouts.</p>
<p>The release passed the app and docs TypeScript checks, 252 unit tests with six
expected skips, ten focused Chat/responsive Playwright scenarios, the production
app build, and the Docusaurus production build. Visual checks at 970x820,
390x844, and 390x667 confirmed the compact telemetry, readable transcript,
pinned composer, zero parent scroll, and absence of horizontal overflow.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="UI" term="UI"/>
        <category label="Bugfix" term="Bugfix"/>
        <category label="Docs" term="Docs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Cortical response becomes a compact live metric]]></title>
        <id>https://app.exepert.com/blog/compact-cortical-response-card</id>
        <link href="https://app.exepert.com/blog/compact-cortical-response-card"/>
        <updated>2026-08-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Dashboard now presents its cortical response score as live telemetry inside]]></summary>
        <content type="html"><![CDATA[<p>The Dashboard now presents its cortical response score as live telemetry inside
a compact four-metric card instead of pairing a large number with a static
LOW/HIGH legend.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="root-cause">Root cause<a href="https://app.exepert.com/blog/compact-cortical-response-card#root-cause" class="hash-link" aria-label="Direct link to Root cause" title="Direct link to Root cause" translate="no">​</a></h2>
<p>The Cortical Response Index, onset, sustained activation, and duration values
were already refreshed from neural telemetry every 100 ms. The nearby LOW/HIGH
gradient was purely decorative, however, and the score occupied a separate row
above a 78px spacer. Narrow right panels then stacked a large empty 16:9 preview
above the useful metrics, making the card appear static and pushing live data
below the fold.</p>
<p>The first compact treatment also placed the variable-length semantic band in
the same flex row as the heading. <strong>Medium</strong> forced the heading onto a second
line, adding 13.75px to the metric and score card. Separately, opening Chat let
its intrinsic content expand the lower grid row from roughly 344px to 526px and
compress the Brain row from roughly 352px to 170px. The canvas CSS height fell
from 271px to 89px while its old 602x337 backing buffer and camera aspect stayed
unchanged, visibly stretching the neural scene.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-changed">What changed<a href="https://app.exepert.com/blog/compact-cortical-response-card#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<ul>
<li class="">Cortical Response is now the first item in a 2x2 group with Duration, Onset
Response, and Sustained Activation.</li>
<li class="">A normalized live meter keeps the number, fill, accessible value, and Low,
Medium, or High band synchronized. The boundaries are 0-39, 40-69, and
70-100.</li>
<li class="">The headline score is 26px, reducing to 24px in compact panels, with a muted
12px <code>/100</code> unit.</li>
<li class="">The stimulus preview remains beside the metrics down to a 361px panel width.
On narrower panels, metrics come first and an empty preview collapses to 64px;
loaded media remains 16:9.</li>
<li class="">The old potential row, static gradient, LOW/HIGH labels, and 78px content gap
have been removed.</li>
<li class="">The semantic band now occupies a fixed-width column beside the meter, the
heading remains one line, and the score reserves three numeric characters.
Low, Medium, and High therefore share identical geometry.</li>
<li class="">Compact Dashboard now uses the same stable approximately 300px/406px rows as
Arcade at <code>970x820</code>. Short tablets scroll inside the workspace instead of
squeezing the brain below 260px or clipping Chat.</li>
<li class="">A <code>ResizeObserver</code> synchronizes the Three.js camera and DPR-aware backing
buffer whenever the canvas container changes size. The window listener
remains as a fallback.</li>
</ul>
<p>No telemetry schema, public API, event, storage key, chat behavior, or existing
Dashboard metric ID changed.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="verification">Verification<a href="https://app.exepert.com/blog/compact-cortical-response-card#verification" class="hash-link" aria-label="Direct link to Verification" title="Direct link to Verification" translate="no">​</a></h2>
<p>Validation completed on August 2, 2026:</p>
<ul>
<li class=""><code>pnpm typecheck</code> and <code>pnpm build</code> passed.</li>
<li class=""><code>pnpm test</code> passed 257 tests; the six skipped tests remain the existing
opt-in live-integration cases.</li>
<li class="">The responsive Playwright suite passed all nine cases, including score and
meter synchronization, compact empty and loaded previews, metric
containment, stable score geometry, synchronized canvas buffers, short-tablet
scrolling, Dashboard ordering, and document-level overflow checks.</li>
<li class="">The Arcade Playwright suite passed all 15 cases, confirming that the shared
panel styling did not regress the Game Boy workbench.</li>
<li class="">The documentation typecheck and production build passed.</li>
<li class="">Visual checks at <code>970x820</code>, <code>1186x810</code>, <code>390x844</code>, and <code>390x667</code> confirmed
the intended hierarchy, stable band treatment, undistorted brain canvas, and
absence of horizontal overflow or console errors.</li>
</ul>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="UI" term="UI"/>
        <category label="Bugfix" term="Bugfix"/>
        <category label="Docs" term="Docs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Compact workspace puts the live brain first]]></title>
        <id>https://app.exepert.com/blog/compact-workspace-responsive-reflow</id>
        <link href="https://app.exepert.com/blog/compact-workspace-responsive-reflow"/>
        <updated>2026-08-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[EXEPERT's compact Dashboard and Arcade layouts now prioritize the live brain]]></summary>
        <content type="html"><![CDATA[<p>EXEPERT's compact Dashboard and Arcade layouts now prioritize the live brain
visualizer, keep the active tool beside it on tablets, and give the shared
Study/Chat region a wider reading surface below.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-changed">What changed<a href="https://app.exepert.com/blog/compact-workspace-responsive-reflow#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<ul>
<li class=""><code>css/app.css</code> reorders the initial, Dashboard, and Arcade workspace at the
existing <code>1240px</code> and <code>960px</code> breakpoints without changing the desktop grid.</li>
<li class="">At 961–1240px, the brain and Tool/Metrics panels occupy the first row while
the shared Study/Chat panel spans the full second row.</li>
<li class="">At 960px and below, the primary flow is Brain, Study/Chat, then Tool/Metrics,
keeping Chat reachable before the longer metrics stack.</li>
<li class="">The compact tablet brain card can shrink below its desktop <code>560px</code> minimum,
preventing the WebGL canvas and status bar from being clipped by the tile.
Existing phone height clamps still control the taller single-column stage.</li>
<li class="">The responsive selectors include the unset first-paint state, preventing a
layout jump before the workbench controller marks the Dashboard active.</li>
<li class=""><code>tests/e2e/responsive-workspace.spec.ts</code> covers desktop preservation, the
1240px and 970px tablet layouts, the 960px and 390px phone layouts, Chat
containment, brain-stage clipping, horizontal overflow, and the unchanged
Prompt, Observability, and Journal workspaces.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="user-impact">User impact<a href="https://app.exepert.com/blog/compact-workspace-responsive-reflow#user-impact" class="hash-link" aria-label="Direct link to User impact" title="Direct link to User impact" translate="no">​</a></h2>
<p>The brain visualizer now appears in the former top-left position at compact
widths instead of being pushed into a clipped full-width row. Chat gains the
full lower row on tablets and remains immediately below the brain on phones,
which improves line length, input visibility, and access to the conversation.</p>
<p>Prompt Playground, Observability, Journals, Settings, the wide-screen layout,
chat state, DOM identifiers, and runtime APIs are unchanged.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="verification">Verification<a href="https://app.exepert.com/blog/compact-workspace-responsive-reflow#verification" class="hash-link" aria-label="Direct link to Verification" title="Direct link to Verification" translate="no">​</a></h2>
<p>Checked locally with:</p>
<div class="language-bash codeBlockContainer_DNoR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_V6CO"><pre tabindex="0" class="prism-code language-bash codeBlock_oNt_ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines__z_2"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> typecheck</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">test</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">exec</span><span class="token plain"> playwright </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">test</span><span class="token plain"> tests/e2e/responsive-workspace.spec.ts</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> build</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--dir</span><span class="token plain"> docs-site typecheck</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--dir</span><span class="token plain"> docs-site </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">exec</span><span class="token plain"> docusaurus build</span><br></div></code></pre></div></div>
<p>The app suite completed with 252 passing unit tests and six expected skips. All
four responsive Playwright scenarios passed, and visual smoke checks at 970px
and 390px confirmed contained brain telemetry, the intended panel order, a
full-width tablet Chat surface, and no document-level horizontal overflow.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="UI" term="UI"/>
        <category label="Bugfix" term="Bugfix"/>
        <category label="Docs" term="Docs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Changelog calendar tracker and prompt list polish]]></title>
        <id>https://app.exepert.com/blog/changelog-calendar-tracker</id>
        <link href="https://app.exepert.com/blog/changelog-calendar-tracker"/>
        <updated>2026-06-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The changelog page now has an interactive calendar tracker for developer]]></summary>
        <content type="html"><![CDATA[<p>The changelog page now has an interactive calendar tracker for developer
activity. It maps changelog posts and committed code activity onto a monthly
grid so devs can inspect what changed by date.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-changed">What changed<a href="https://app.exepert.com/blog/changelog-calendar-tracker#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<ul>
<li class=""><code>docs-site/scripts/generate-activity-calendar.mjs</code> generates static activity
data from changelog markdown and committed Git stats.</li>
<li class=""><code>docs-site/src/components/ActivityCalendar</code> renders the calendar, activity
markers, day details, month navigation, and click-to-filter behavior.</li>
<li class=""><code>docs-site/src/theme/BlogListPage</code> adds the tracker above <code>/blog</code> entries and
filters visible changelog posts when a day is selected.</li>
<li class=""><code>docs-site/package.json</code> runs activity generation before docs start and build
commands, while <code>docs-site/docusaurus.config.ts</code> shows all posts on the blog
index so filtering works across the full changelog.</li>
<li class="">The calendar detail panel now uses container-aware layout rules to prevent
hover flicker and to stack cleanly on narrower blog columns.</li>
<li class=""><code>css/app.css</code> gives the Prompt list a thin neutral scrollbar, stable gutter,
and removes the older duplicate prompt-list style block.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="user-impact">User impact<a href="https://app.exepert.com/blog/changelog-calendar-tracker#user-impact" class="hash-link" aria-label="Direct link to User impact" title="Direct link to User impact" translate="no">​</a></h2>
<ul>
<li class="">Developers can scan changelog and code activity by date from <code>/blog</code>.</li>
<li class="">Hovering a day previews the related changelogs, commits, file count, and line
activity.</li>
<li class="">Clicking a day filters the changelog list to that date, and clearing the
filter restores the full list.</li>
<li class="">The Prompt list scrollbar feels quieter and no longer shows chunky browser
scrollbar buttons.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="verification">Verification<a href="https://app.exepert.com/blog/changelog-calendar-tracker#verification" class="hash-link" aria-label="Direct link to Verification" title="Direct link to Verification" translate="no">​</a></h2>
<p>Checked locally with:</p>
<div class="language-bash codeBlockContainer_DNoR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_V6CO"><pre tabindex="0" class="prism-code language-bash codeBlock_oNt_ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines__z_2"><div class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> docs-site</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> activity:generate</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> typecheck</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> build</span><br></div></code></pre></div></div>
<p>Browser checks confirmed the calendar renders on <code>/blog</code>, June 17 and June 18
filter to the expected changelog posts, hover previews no longer flicker, and
desktop, tablet, and mobile widths have no horizontal overflow.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="UI" term="UI"/>
        <category label="Docs" term="Docs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Brain stage telemetry cleanup]]></title>
        <id>https://app.exepert.com/blog/brain-stage-telemetry-cleanup</id>
        <link href="https://app.exepert.com/blog/brain-stage-telemetry-cleanup"/>
        <updated>2026-06-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The brain stage now keeps telemetry in one place. The floating canvas badge has]]></summary>
        <content type="html"><![CDATA[<p>The brain stage now keeps telemetry in one place. The floating canvas badge has
been removed, and the existing bottom status bar now carries the neuron and
axon counts beside the live signal count.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-changed">What changed<a href="https://app.exepert.com/blog/brain-stage-telemetry-cleanup#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<ul>
<li class=""><code>index.html</code> removes the <code>.brain-badge</code> overlay from the brain stage and
updates the initial status text with <code>N 0</code>, <code>A 0</code>, and <code>SIG 0</code>.</li>
<li class=""><code>css/app.css</code> removes the desktop and mobile badge styles plus the live-dot
styling that only existed for that overlay.</li>
<li class=""><code>src/brain-ui.ts</code> no longer caches or updates <code>#brainTelemetry</code>, and the
removed <code>buildTelemetryLine()</code> helper is gone.</li>
<li class=""><code>src/scene.ts</code> adds neuron and axon totals to the status bar. The full status
uses <code>NEURONS</code> and <code>AXONS</code>; the compact status uses <code>N</code> and <code>A</code> to keep the
line readable on narrow canvases.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="user-impact">User impact<a href="https://app.exepert.com/blog/brain-stage-telemetry-cleanup#user-impact" class="hash-link" aria-label="Direct link to User impact" title="Direct link to User impact" translate="no">​</a></h2>
<ul>
<li class="">The brain canvas is visually cleaner and focuses on the 3D brain plus the
existing affect label.</li>
<li class="">Duplicate telemetry is gone. Neuron and axon counts now live with the rest of
the stage readout in the bottom status bar.</li>
<li class="">The right-panel telemetry tiles are unchanged, so dashboard metrics remain in
the same place.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="verification">Verification<a href="https://app.exepert.com/blog/brain-stage-telemetry-cleanup#verification" class="hash-link" aria-label="Direct link to Verification" title="Direct link to Verification" translate="no">​</a></h2>
<p>Checked locally with:</p>
<div class="language-bash codeBlockContainer_DNoR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_V6CO"><pre tabindex="0" class="prism-code language-bash codeBlock_oNt_ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines__z_2"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> typecheck</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">test</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">exec</span><span class="token plain"> vite build</span><br></div></code></pre></div></div>
<p>The built app was served locally and checked at desktop and mobile widths. The
checks confirmed the badge DOM is gone, <code>#brainTelemetry</code> no longer exists, the
affect overlay remains, the status bar includes neuron, axon, and signal counts,
the right-panel metrics remain populated, and the WebGL canvas renders with
visible pixel variation.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="UI" term="UI"/>
        <category label="Bugfix" term="Bugfix"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Docs homepage and search polish]]></title>
        <id>https://app.exepert.com/blog/docs-homepage-search-polish</id>
        <link href="https://app.exepert.com/blog/docs-homepage-search-polish"/>
        <updated>2026-06-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The docs site homepage now uses a flatter, calmer presentation, and local docs]]></summary>
        <content type="html"><![CDATA[<p>The docs site homepage now uses a flatter, calmer presentation, and local docs
search has a clearer validation workflow. This change also removes long dash
punctuation from visible docs copy so the writing reads cleaner and less
template-like.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-changed">What changed<a href="https://app.exepert.com/blog/docs-homepage-search-polish#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<ul>
<li class=""><code>docs-site/src/css/custom.css</code> removes hero gradients, normalizes hero title
spacing, and simplifies the eyebrow badge.</li>
<li class=""><code>docs-site/src/pages/index.module.css</code> tightens homepage feature cards with
an 8px radius, quieter hover states, and more compact spacing.</li>
<li class=""><code>docs-site/docusaurus.config.ts</code> keeps local Docusaurus search, adds page
indexing, expands result limits and context, and excludes navbar, footer,
breadcrumbs, pagination, table of contents, and doc footer chrome from the
index.</li>
<li class=""><code>docs-site/package.json</code> adds <code>preview:search</code> for the production-search
workflow: build the docs site, then serve the generated static output.</li>
<li class="">Current docs, versioned docs, and blog posts replace long dash separators
with cleaner punctuation or explicit wording.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="user-impact">User impact<a href="https://app.exepert.com/blog/docs-homepage-search-polish#user-impact" class="hash-link" aria-label="Direct link to User impact" title="Direct link to User impact" translate="no">​</a></h2>
<ul>
<li class="">The docs homepage has a flat visual style with no gradient coloring.</li>
<li class="">Search validation is less confusing: <code>pnpm start</code> remains for live editing,
while <code>pnpm serve</code> or <code>pnpm preview:search</code> validates the generated search
index.</li>
<li class="">Searching for terms such as <code>tele</code> in the built site returns real local
results instead of the build-index warning.</li>
<li class="">The visible docs copy no longer uses em dash or en dash separators.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="verification">Verification<a href="https://app.exepert.com/blog/docs-homepage-search-polish#verification" class="hash-link" aria-label="Direct link to Verification" title="Direct link to Verification" translate="no">​</a></h2>
<p>Checked locally with:</p>
<div class="language-bash codeBlockContainer_DNoR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_V6CO"><pre tabindex="0" class="prism-code language-bash codeBlock_oNt_ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines__z_2"><div class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> docs-site</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> typecheck</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> build</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">rg </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-n</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'\x{2014}|\x{2013}'</span><span class="token plain"> docs-site/docs docs-site/versioned_docs docs-site/blog docs-site/src/pages docs-site/docusaurus.config.ts</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">rg </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-n</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'linear-gradient|radial-gradient'</span><span class="token plain"> docs-site/src</span><br></div></code></pre></div></div>
<p>The built site was served at <code>http://127.0.0.1:3001/</code>. Browser checks confirmed
the homepage hero has no background image, the mobile layout fits at 390px, and
searching for <code>tele</code> returns Telemetry results without the build-index warning.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="UI" term="UI"/>
        <category label="Bugfix" term="Bugfix"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Emotion-reactive brain canvas for EXEPERT Chat]]></title>
        <id>https://app.exepert.com/blog/emotion-reactive-brain-canvas</id>
        <link href="https://app.exepert.com/blog/emotion-reactive-brain-canvas"/>
        <updated>2026-06-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[EXEPERT Chat now drives a synthetic affect layer that colors and pulses the]]></summary>
        <content type="html"><![CDATA[<p>EXEPERT Chat now drives a synthetic affect layer that colors and pulses the
brain canvas while a user chats with an AI model. The feature is designed for AI
emotion research UX: it visualizes conversational affect signals, not clinical
or literal emotion detection.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-changed">What changed<a href="https://app.exepert.com/blog/emotion-reactive-brain-canvas#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<ul>
<li class=""><code>src/affect/*</code> adds the affect engine: shared types, the emotion palette, the
deterministic local classifier, text hashing, affect-to-region mapping, and
the browser client for saving affect annotations.</li>
<li class=""><code>src/brain-ui.ts</code> classifies user input immediately, classifies assistant
output after streaming, renders message affect chips, updates the new
<strong>Affective Field</strong>, and triggers emotion-colored neural pulses. Chat error
states can also become <code>assistant_error</code> affect events when the failed span is
available.</li>
<li class=""><code>index.html</code> adds the <strong>Affective Field</strong> readout inside the Chat tile and the
canvas-stage affect overlay.</li>
<li class=""><code>css/app.css</code> styles the Affective Field, message chips, stage overlay, and
responsive narrow-panel behavior.</li>
<li class=""><code>rust/brain_sim/src/lib.rs</code> extends the WASM signal pool with per-signal RGB
color buffers. Stimuli can now pass a hex color, and signals propagate that
color through neuron firing.</li>
<li class=""><code>src/brain.ts</code> binds the WASM particle color buffer to a Three.js <code>color</code>
geometry attribute so simultaneous signals can render different emotion
colors in the same canvas.</li>
<li class=""><code>supabase/functions/chat-affect/index.ts</code> adds an authenticated Edge Function
that writes <code>affective_state</code> span annotations. It always stores the local
<code>CODE</code> classifier output and can also store an LLM-refined annotation through
9Router.</li>
<li class=""><code>supabase/functions/run-chat/index.ts</code> now includes <code>trace_id</code>, <code>span_id</code>,
<code>otel_trace_id</code>, and <code>otel_span_id</code> on streaming error payloads when the error
span was persisted successfully.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="affect-model">Affect model<a href="https://app.exepert.com/blog/emotion-reactive-brain-canvas#affect-model" class="hash-link" aria-label="Direct link to Affect model" title="Direct link to Affect model" translate="no">​</a></h2>
<p>The local classifier scores:</p>
<ul>
<li class="">anger</li>
<li class="">fear</li>
<li class="">sadness</li>
<li class="">joy</li>
<li class="">disgust</li>
<li class="">surprise</li>
<li class="">curiosity</li>
<li class="">calm</li>
<li class="">distress</li>
<li class="">neutral</li>
</ul>
<p>Profanity is context-aware. For example, "fuck yeah" routes toward high-arousal
joy, while directed hostile profanity routes toward anger, distress, and higher
toxicity. The UI can look dramatic, but docs and metadata call the output
synthetic affect telemetry.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="persistence">Persistence<a href="https://app.exepert.com/blog/emotion-reactive-brain-canvas#persistence" class="hash-link" aria-label="Direct link to Persistence" title="Direct link to Persistence" translate="no">​</a></h2>
<p><code>chat-affect</code> writes to existing <code>span_annotations</code> rather than adding a new
table:</p>
<ul>
<li class=""><code>name = "affective_state"</code></li>
<li class=""><code>annotator_kind = "CODE"</code> for local analysis</li>
<li class=""><code>annotator_kind = "LLM"</code> for optional refinement</li>
<li class=""><code>identifier = chat-turn:&lt;turn_id&gt;:phase:&lt;phase&gt;:source:&lt;source&gt;</code></li>
</ul>
<p>Metadata stores score vectors, region mix, color palette, classifier version,
selected chat model, affect model, phase, and text hash. Raw message text is not
duplicated in affect metadata.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="verification">Verification<a href="https://app.exepert.com/blog/emotion-reactive-brain-canvas#verification" class="hash-link" aria-label="Direct link to Verification" title="Direct link to Verification" translate="no">​</a></h2>
<p>Checked locally with:</p>
<div class="language-bash codeBlockContainer_DNoR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_V6CO"><pre tabindex="0" class="prism-code language-bash codeBlock_oNt_ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines__z_2"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> run typecheck</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">test</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> build</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--dir</span><span class="token plain"> docs-site build</span><br></div></code></pre></div></div>
<p>A browser smoke check opened Chat at <code>http://127.0.0.1:9001/</code>, verified the
Affective Field on desktop and narrow viewports, confirmed no Chat overflow,
and confirmed the WebGL brain canvas screenshot was nonblank.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="UI" term="UI"/>
        <category label="Research" term="Research"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Settings shortcuts documented and empty clip timer fixed]]></title>
        <id>https://app.exepert.com/blog/settings-shortcuts-clip-timer</id>
        <link href="https://app.exepert.com/blog/settings-shortcuts-clip-timer"/>
        <updated>2026-06-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[EXEPERT now treats visualizer keyboard controls as documented commands instead]]></summary>
        <content type="html"><![CDATA[<p>EXEPERT now treats visualizer keyboard controls as documented commands instead
of hidden global behavior, and the right-panel clip preview no longer pretends a
video is loaded when the stimulus slot is empty.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-changed">What changed<a href="https://app.exepert.com/blog/settings-shortcuts-clip-timer#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<ul>
<li class=""><code>src/ui/keyboard-shortcuts.ts</code> adds a shared registry for visible keyboard
commands and a guard that decides whether global scene shortcuts should run.</li>
<li class=""><code>src/events.ts</code> now scopes the visualizer shortcuts so <code>Space</code>, <code>A</code>, and <code>S</code>
only affect the 3D scene when focus is outside inputs, buttons, chat, search,
Settings, diagnostics, prompt playground, and <code>lil-gui</code> controls.</li>
<li class=""><code>index.html</code> adds a <strong>Keyboard Shortcuts &amp; Commands</strong> card to Settings and
changes the initial clip preview from a fake <code>0:06</code> duration to an explicit
empty state.</li>
<li class=""><code>src/ui/workbench.ts</code> renders the Settings command list from the shortcut
registry so the visible docs match the active runtime behavior.</li>
<li class=""><code>src/ui/media-duration.ts</code> centralizes duration labels: no stimulus shows
<code>:</code>, images show <code>Still</code>, videos show their metadata duration, and unknown
loaded media shows <code>Loaded</code>.</li>
<li class=""><code>src/brain-ui.ts</code> now resets cleared media to an empty state, waits for video
metadata before showing a duration badge, and removes the clip-thumb badge
when no stimulus is loaded.</li>
<li class=""><code>css/app.css</code> adds the empty clip thumbnail style and responsive Settings
shortcut rows with compact <code>kbd</code> chips, scope labels, and wrapped
descriptions.</li>
<li class=""><code>src/__tests__/keyboard-shortcuts.test.ts</code> and
<code>src/__tests__/media-duration.test.ts</code> cover the shortcut guard and duration
label behavior.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="user-impact">User impact<a href="https://app.exepert.com/blog/settings-shortcuts-clip-timer#user-impact" class="hash-link" aria-label="Direct link to User impact" title="Direct link to User impact" translate="no">​</a></h2>
<ul>
<li class="">Pressing <code>A</code>, <code>S</code>, or <code>Space</code> while typing in Chat or interacting with
Settings no longer toggles visualizer helpers by accident.</li>
<li class="">Settings now lists the app's current global and contextual commands,
including Search, Diagnostics, Chat send, model picker navigation, and the
Floor Platform visualizer command.</li>
<li class="">Fresh app load and cleared clips show <strong>Duration :</strong> and a muted <strong>No clip</strong>
thumbnail instead of <code>0:06</code>.</li>
<li class="">Uploaded images show <strong>Still</strong> instead of a fake video duration; uploaded
videos show their real metadata duration once available.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="verification">Verification<a href="https://app.exepert.com/blog/settings-shortcuts-clip-timer#verification" class="hash-link" aria-label="Direct link to Verification" title="Direct link to Verification" translate="no">​</a></h2>
<p>Checked locally with:</p>
<div class="language-bash codeBlockContainer_DNoR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_V6CO"><pre tabindex="0" class="prism-code language-bash codeBlock_oNt_ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines__z_2"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> typecheck</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">exec</span><span class="token plain"> vitest run src/__tests__/keyboard-shortcuts.test.ts src/__tests__/media-duration.test.ts</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> build</span><br></div></code></pre></div></div>
<p>The browser smoke test opened <code>http://localhost:9001/</code>, confirmed the empty clip
state, confirmed the Settings list rendered nine command rows, and verified
<code>A</code>, <code>S</code>, and <code>Space</code> type normally inside the Chat input.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="UI" term="UI"/>
        <category label="Bugfix" term="Bugfix"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Chat model menu polished and Trace Ingestion moved to Observability]]></title>
        <id>https://app.exepert.com/blog/chat-model-menu-observability-tab</id>
        <link href="https://app.exepert.com/blog/chat-model-menu-observability-tab"/>
        <updated>2026-06-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Chat header now uses a dark, searchable model menu for all 9Router models,]]></summary>
        <content type="html"><![CDATA[<p>The Chat header now uses a dark, searchable model menu for all 9Router models,
and Trace Ingestion has moved out of the Chat area into the existing
Observability activity-bar page.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-changed">What changed<a href="https://app.exepert.com/blog/chat-model-menu-observability-tab#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<ul>
<li class=""><code>index.html</code> replaced the native <code>#brainModelSelect</code> with an app-owned model
picker: <code>#brainModelTrigger</code>, <code>#brainModelMenu</code>, <code>#brainModelSearch</code>, and
<code>#brainModelList</code>. It also added the <code>data-view="observability"</code> right-panel
view and the new <code>#observabilitySlot</code> mount target.</li>
<li class=""><code>src/brain-ui.ts</code> now renders the model list as a custom listbox while keeping
the existing <code>chatModels</code>, <code>selectedChatModel</code>, and
<code>exepert.brainChat.model.v1</code> persistence flow. The menu supports provider
grouping, search, variant badges, Escape, ArrowUp/ArrowDown, Enter,
outside-click dismissal, and disabled state while streaming.</li>
<li class=""><code>src/ui/observability.ts</code> now prefers <code>#observabilitySlot</code>, falls back to the
old <code>#obsSlot</code> only for older shells, and uses <code>exepert.obsCollapsed.v2</code> so the
activity-page panel defaults to expanded.</li>
<li class=""><code>css/app.css</code> adds the dark model popover, selected/active row states,
responsive badge behavior, Observability workbench view rules, and the wider
Trace Ingestion page layout.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="user-impact">User impact<a href="https://app.exepert.com/blog/chat-model-menu-observability-tab#user-impact" class="hash-link" aria-label="Direct link to User impact" title="Direct link to User impact" translate="no">​</a></h2>
<ul>
<li class="">Opening the Chat model picker no longer shows a white operating-system
dropdown in the dark UI.</li>
<li class="">Codex and Claude models from 9Router are searchable and grouped by provider.</li>
<li class="">Chat keeps its full vertical space because Trace Ingestion is no longer
mounted under the chat tile.</li>
<li class="">The Observability activity icon now opens a focused Trace Ingestion page with
the existing import, sample, trace viewer, live, project, Supabase status, and
summary controls.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="verification">Verification<a href="https://app.exepert.com/blog/chat-model-menu-observability-tab#verification" class="hash-link" aria-label="Direct link to Verification" title="Direct link to Verification" translate="no">​</a></h2>
<p>Checked locally with:</p>
<div class="language-bash codeBlockContainer_DNoR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_V6CO"><pre tabindex="0" class="prism-code language-bash codeBlock_oNt_ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines__z_2"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> typecheck</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">pnpm</span><span class="token plain"> build</span><br></div></code></pre></div></div>
<p>The browser smoke test confirmed that the menu listed 25 models, filtering
worked for Claude models, keyboard selection worked, a chat request used the
selected <code>cx/gpt-5.4</code> model, and <code>#obs-panel</code> mounted inside
<code>#observabilitySlot</code> rather than the Chat area.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="UI" term="UI"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Vercel build now bundles docs and the EXEPERT favicon]]></title>
        <id>https://app.exepert.com/blog/vercel-docs-favicon-bundle</id>
        <link href="https://app.exepert.com/blog/vercel-docs-favicon-bundle"/>
        <updated>2026-06-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Vercel deployment path now builds the Rust/WASM app and the Docusaurus docs]]></summary>
        <content type="html"><![CDATA[<p>The Vercel deployment path now builds the Rust/WASM app and the Docusaurus docs
site together, then publishes the docs from the same origin as the app.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="what-changed">What changed<a href="https://app.exepert.com/blog/vercel-docs-favicon-bundle#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<ul>
<li class="">Added <code>scripts/vercel-build.sh</code> as the Vercel build command. It prepares Rust,
installs the <code>wasm32-unknown-unknown</code> target and <code>wasm-pack</code>, runs the Vite
production build, builds <code>docs-site/</code>, and merges the rendered docs into
<code>dist/</code>.</li>
<li class="">Added <code>scripts/copy-docs-build.mjs</code> to copy <code>docs-site/build</code> into <code>dist/</code>
while skipping the docs site's root <code>index.html</code>. The app stays mounted at
<code>/</code>, and Docusaurus pages are available under routes like
<code>/docs/getting-started/introduction/</code>.</li>
<li class="">Replaced hardcoded <code>localhost:3000</code> documentation links with environment-aware
links. Local app origins use <code>http://localhost:3000</code>; production uses the app's
deployed origin unless <code>VITE_DOCS_URL</code> is explicitly set.</li>
<li class="">Added EXEPERT favicon assets for the app and docs site:
<code>public/favicon.png</code>, <code>public/favicon-32.png</code>, <code>public/favicon-192.png</code>,
<code>public/apple-touch-icon.png</code>, and <code>docs-site/static/img/favicon.png</code>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="deployment-note">Deployment note<a href="https://app.exepert.com/blog/vercel-docs-favicon-bundle#deployment-note" class="hash-link" aria-label="Direct link to Deployment note" title="Direct link to Deployment note" translate="no">​</a></h2>
<p>Set Vercel's Build Command to:</p>
<div class="language-bash codeBlockContainer_DNoR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_V6CO"><pre tabindex="0" class="prism-code language-bash codeBlock_oNt_ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines__z_2"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">bash</span><span class="token plain"> scripts/vercel-build.sh</span><br></div></code></pre></div></div>
<p>Leave the Output Directory as <code>dist</code>. Do not set <code>VITE_DOCS_URL</code> for the normal
Vercel deployment unless the docs are intentionally hosted somewhere else.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="Release" term="Release"/>
        <category label="Bugfix" term="Bugfix"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Chat header decluttered + collapsible Trace Ingestion]]></title>
        <id>https://app.exepert.com/blog/declutter-chat-and-collapsible-obs</id>
        <link href="https://app.exepert.com/blog/declutter-chat-and-collapsible-obs"/>
        <updated>2026-06-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Two small left-region tweaks give the Neural Brain chat more breathing room:]]></summary>
        <content type="html"><![CDATA[<p>Two small left-region tweaks give the <strong>Neural Brain</strong> chat more breathing room:
a stripped-down chat header and a collapsible Trace Ingestion tile.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="decluttered-chat-header">Decluttered chat header<a href="https://app.exepert.com/blog/declutter-chat-and-collapsible-obs#decluttered-chat-header" class="hash-link" aria-label="Direct link to Decluttered chat header" title="Direct link to Decluttered chat header" translate="no">​</a></h2>
<p>The chat tile header (<code>.brain-chat-header</code>) previously showed a "Neural Brain"
title plus a live-telemetry status pill (pulse dot + "Live telemetry" /
"Waiting for signal"). Both were removed; the header now holds only the close
(×) button, right-aligned.</p>
<ul>
<li class=""><code>index.html</code>: dropped <code>.brain-chat-title</code> and <code>.brain-chat-status-inline</code>
(which contained <code>#brainChatStatus</code>). The dialog now names itself with
<code>aria-label="Neural Brain chat"</code> instead of the dangling
<code>aria-labelledby="brainChatTitle"</code> (no such element ever existed).</li>
<li class=""><code>src/brain-ui.ts</code>: removed <code>brainChatStatus</code> from the cached-element list and
the per-tick <code>els.brainChatStatus.textContent = …</code> write, so nothing
references the deleted node.</li>
<li class=""><code>css/app.css</code>: <code>.brain-chat-header</code> is now <code>justify-content: flex-end</code>;
removed the unused <code>.brain-chat-title</code>, <code>.brain-chat-status-inline</code>,
<code>.pulse-dot</code>, and <code>@keyframes pulseDot</code> rules.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="collapsible-trace-ingestion-tile">Collapsible Trace Ingestion tile<a href="https://app.exepert.com/blog/declutter-chat-and-collapsible-obs#collapsible-trace-ingestion-tile" class="hash-link" aria-label="Direct link to Collapsible Trace Ingestion tile" title="Direct link to Collapsible Trace Ingestion tile" translate="no">​</a></h2>
<p>The observability panel (<code>#obs-panel</code>) gained a chevron toggle in its header
(<code>#obsCollapse</code>) that collapses the tile to just its header, hiding <code>.obs-body</code>.
Because the slot is <code>flex: 0 0 auto</code> and <code>#leftChat</code> is <code>flex: 1</code>, collapsing
the panel hands that vertical space straight to the chat.</p>
<ul>
<li class="">Defaults to <strong>collapsed</strong> so the chat gets maximum real estate out of the box.</li>
<li class="">The choice is persisted across reloads in <code>localStorage</code> under
<code>exepert.obsCollapsed</code>, wrapped in try/catch for private-mode / SSR safety.</li>
<li class=""><code>aria-expanded</code> + <code>aria-controls="obsBody"</code> keep the toggle accessible; the
chevron rotates 180° when expanded.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="help-link-now-opens-the-rendered-guide">Help link now opens the rendered guide<a href="https://app.exepert.com/blog/declutter-chat-and-collapsible-obs#help-link-now-opens-the-rendered-guide" class="hash-link" aria-label="Direct link to Help link now opens the rendered guide" title="Direct link to Help link now opens the rendered guide" translate="no">​</a></h2>
<p>The panel's <code>?</code> help link pointed at <code>Plans/guide-trace-ingestion.md</code>, which
Vite resolved to a raw, unrendered <code>.md</code> file on the app origin (a blank page).
It now opens the rendered Docusaurus guide page at
<code>/docs/guides/trace-ingestion</code>.</p>
<p>On local app origins, docs links default to <code>http://localhost:3000</code>, which
matches the separate Docusaurus dev server. In production, leave <code>VITE_DOCS_URL</code>
unset: the Vercel build bundles the rendered docs into the app's <code>dist/</code> folder,
so the link resolves on the deployed app origin under <code>/docs</code>.</p>
<p>See the <a class="" href="https://app.exepert.com/docs/ui-guide/overview#tile-structure">UI guide</a> for the chat tile
contract and the trace-ingestion tile notes.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="UI" term="UI"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Fix: Neural Brain chat tile rendered collapsed]]></title>
        <id>https://app.exepert.com/blog/fix-left-chat-nesting</id>
        <link href="https://app.exepert.com/blog/fix-left-chat-nesting"/>
        <updated>2026-06-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The inline Neural Brain chat tile (#leftChat) rendered with its messages]]></summary>
        <content type="html"><![CDATA[<p>The inline <strong>Neural Brain</strong> chat tile (<code>#leftChat</code>) rendered with its messages
squeezed into a ~30px-wide column and the input box overflowing the left panel.
The cause was malformed markup, not CSS.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="symptom">Symptom<a href="https://app.exepert.com/blog/fix-left-chat-nesting#symptom" class="hash-link" aria-label="Direct link to Symptom" title="Direct link to Symptom" translate="no">​</a></h2>
<p>With the Chat tab active, the DOM collapsed into the chat header:</p>
<ul>
<li class=""><code>div.brain-chat-header &gt; div#brainMessages</code>: message column ~30px wide
instead of full width.</li>
<li class=""><code>div.brain-chat-header &gt; div.brain-chat-input</code>: input overflowing the panel
(333px wide inside a 329px panel).</li>
</ul>
<p><code>#leftChat</code> is a <code>flex-direction: column</code> tile and its five regions are meant to
be <strong>direct siblings</strong>. Because they were nested inside the header row instead,
they inherited <code>display: flex; align-items: center</code> and collapsed.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="root-cause">Root cause<a href="https://app.exepert.com/blog/fix-left-chat-nesting#root-cause" class="hash-link" aria-label="Direct link to Root cause" title="Direct link to Root cause" translate="no">​</a></h2>
<p><code>index.html</code> had a duplicated opening <code>&lt;div class="brain-chat-header"&gt;</code> tag with
only one matching <code>&lt;/div&gt;</code>:</p>
<div class="language-html codeBlockContainer_DNoR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_KpbH">index.html: before</div><div class="codeBlockContent_V6CO"><pre tabindex="0" class="prism-code language-html codeBlock_oNt_ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines__z_2"><div class="token-line" style="color:#F8F8F2"><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">brain-chat-header</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">brain-chat-header</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">strong</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">brain-chat-title</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">Neural Brain</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">strong</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  …status · close…</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">&lt;!-- chat-context, brainMessages, quick-prompts, brain-chat-input</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">     were now all trapped INSIDE the header --&gt;</span><br></div></code></pre></div></div>
<p>The unbalanced tag pushed <code>.chat-context</code>, <code>#brainMessages</code>, <code>.quick-prompts</code>,
and <code>.brain-chat-input</code> inside the header, so the column layout never applied.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="fix">Fix<a href="https://app.exepert.com/blog/fix-left-chat-nesting#fix" class="hash-link" aria-label="Direct link to Fix" title="Direct link to Fix" translate="no">​</a></h2>
<p>Removed the duplicate opening tag so the header self-closes and the five regions
are siblings again:</p>
<div class="language-html codeBlockContainer_DNoR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_KpbH">index.html: after</div><div class="codeBlockContent_V6CO"><pre tabindex="0" class="prism-code language-html codeBlock_oNt_ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines__z_2"><div class="token-line" style="color:#F8F8F2"><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">brain-chat-header</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">strong</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">brain-chat-title</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">Neural Brain</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">strong</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">span</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">brain-chat-status-inline</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">…</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">span</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">button</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">brain-chat-close</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">id</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">closeBrainChat</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token entity named-entity">&amp;times;</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">button</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">chat-context</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">…</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">brain-chat-messages</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">id</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">brainMessages</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">…</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">quick-prompts</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">…</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">brain-chat-input</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">…</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></div></code></pre></div></div>
<p>No CSS changed: the stylesheet (<code>.brain-chat-messages { flex: 1 }</code>, the column
container, the input row) was already correct. See the
<a class="" href="https://app.exepert.com/docs/ui-guide/overview#tile-structure">UI guide</a> for the sibling contract that
this tile depends on.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="Bugfix" term="Bugfix"/>
        <category label="UI" term="UI"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[EXEPERT v0.2: docs are live]]></title>
        <id>https://app.exepert.com/blog/welcome</id>
        <link href="https://app.exepert.com/blog/welcome"/>
        <updated>2026-06-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The EXEPERT documentation site is live. EXEPERT is a brain research]]></summary>
        <content type="html"><![CDATA[<p>The EXEPERT documentation site is live. EXEPERT is a brain research
visualizer: a live neural-network simulation rendered over a brain mesh, with
research-style telemetry layered on top.</p>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="whats-documented">What's documented<a href="https://app.exepert.com/blog/welcome#whats-documented" class="hash-link" aria-label="Direct link to What's documented" title="Direct link to What's documented" translate="no">​</a></h2>
<p>This first pass covers the project as it actually runs today:</p>
<ul>
<li class=""><strong>Getting started</strong>: prerequisites (Node, pnpm, Rust + <code>wasm-pack</code>),
installation, the dev loop on port 9001, and production builds.</li>
<li class=""><strong>Architecture</strong>: the two-layer design where a Rust <code>World</code> compiled to
WebAssembly owns the state and the Three.js front end reads it through
zero-copy buffers.</li>
<li class=""><strong>Simulation core</strong>: neuron/axon generation, the struct-of-arrays signal
pool, the four cortical regions, stimulus injection, and the telemetry
contract.</li>
<li class=""><strong>Frontend modules</strong>, the <strong>diagnostics logger</strong>, a <strong>UI guide</strong>, and
<strong>development</strong> notes (testing, CI, the legacy reference pages).</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_DO4Z" id="a-note-on-the-rendering-path">A note on the rendering path<a href="https://app.exepert.com/blog/welcome#a-note-on-the-rendering-path" class="hash-link" aria-label="Direct link to A note on the rendering path" title="Direct link to A note on the rendering path" translate="no">​</a></h2>
<p>EXEPERT currently renders with a classic WebGL2 <code>WebGLRenderer</code> and GLSL
<code>ShaderMaterial</code> shaders, driven by a CPU simulation step (<code>step_cpu</code>). Earlier
design docs in the <code>Plans/</code> folder describe a WebGPU + TSL compute path that was
built and then reverted. The documentation describes the shipped code; treat
those plans as history.</p>
<p>Browse the <a class="" href="https://app.exepert.com/docs/getting-started/introduction">Introduction</a> to get started.</p>]]></content>
        <author>
            <name>EXEPERT Team</name>
            <uri>https://github.com/4kmal/MASTER-exe</uri>
        </author>
        <category label="Release" term="Release"/>
        <category label="Architecture" term="Architecture"/>
    </entry>
</feed>