<p>Every codebase carries two histories. Git records <em>what</em> changed — every line, forever. But the <em>why</em> lives somewhere far more fragile: a Slack thread, a meeting nobody wrote up, the head of the person who left last spring. And now, increasingly, inside an AI coding session that will be compacted, closed, and forgotten by Thursday.</p><p>Elyra 0.9.36 gives the <em>why</em> a home in your repository.</p><h2>Why this release</h2><p>Here's a scene we kept noticing. You spend an afternoon with the agent weighing Livewire against Inertia for a new admin area. You look at the tradeoffs, you pick Inertia, you explain your reasoning, and the agent builds it. Good session.</p><p>Three weeks later, a colleague — or you, or the agent in a fresh session — looks at the code and asks: <em>why Inertia? The rest of the app is Livewire.</em> Nobody remembers. The session that held the answer was compacted twice and then closed. The decision survived; the reasoning evaporated.</p><p>Elyra already had memory for <em>how</em> — <code>/learn</code> distills procedures into your <code>AGENTS.md</code>, and skills capture hard-won solutions. But a decision is a different kind of knowledge. It has rejected alternatives. It constrains future work. And critically, it belongs to the <em>team</em>, not to the person who happened to be at the keyboard. That means it belongs in the repo.</p><h2>One file per decision, versioned in git</h2><p>Decisions now live at <code>.elyra/memory/decisions/</code>, one Markdown file each, in a lightweight ADR format:</p><pre><code class="language-text">.elyra/memory/decisions/
  2026-08-14-store-audit-events-in-clickhouse.md
  2026-09-02-use-inertia-over-livewire-for-the-admin-ui.md
</code></pre><pre><code class="language-markdown">---
id: 2026-09-02-use-inertia-over-livewire-for-the-admin-ui
title: "Use Inertia over Livewire for the admin UI"
date: 2026-09-02
status: active
---

# Use Inertia over Livewire for the admin UI

## Context
Livewire round-trips became a bottleneck on the dashboard's live tables.

## Decision
Build new admin pages with Inertia + Vue; leave existing Livewire pages as-is.

## Alternatives considered
Keep Livewire (too many round-trips for live tables); Blade + Alpine
(too much manual state management).

## Consequences
CI needs a Vite build step. Two frontend paradigms coexist until the
admin migration is complete.
</code></pre><p>Why one file per decision instead of a single log? Because two developers compacting sessions in the same week would collide on a shared file every time. Separate files never conflict, and the format is the ADR convention teams already recognize. You get <code>git blame</code> on your reasoning and PR review on your architecture choices — for free.</p><p>Decisions are never deleted. When you reverse one, the new decision <em>supersedes</em> the old, and the old file stays with <code>status: superseded</code> and a pointer forward. The history of "why did we switch back?" is half the value.</p><h2>How decisions get recorded</h2><p>Two paths, and they cover each other.</p><p><strong>The deliberate path.</strong> When you settle a choice in conversation — <em>"let's go with ClickHouse for audit events, Postgres won't scale past this"</em> — the agent records it with the new <code>decision_record</code> tool. By default you see an approval dialog first:</p><pre><code class="language-text">─────────────────────────────────────────────────────
 Record this architecture decision in the project log?

 Store audit events in ClickHouse (2026-09-04)
 Write audit events to ClickHouse via a queue; Postgres
 audit table grew past 200M rows.

 &gt; Record decision
   Discard
─────────────────────────────────────────────────────
</code></pre><p>The bar is deliberately high. The agent's instructions say: lasting impact, alternatives rejected, constrains future work. Naming conventions and one-off fixes don't qualify. Nobody wants a decision log full of "chose camelCase."</p><p><strong>The safety net.</strong> Sometimes a decision gets made and nobody says "record that." Then compaction comes along and discards the conversation that held it. So compaction now <em>looks</em> before it discards: we append a small machine-parseable request to the summarization call that already runs — no extra request, no extra cost — asking for any lasting decisions in the history about to disappear.</p><p>In <code>confirm</code> mode, you'll see:</p><pre><code class="language-text">Compaction found 1 unrecorded decision: Store audit events in ClickHouse.
Ask the agent to record it, or /decisions auto to record automatically.
</code></pre><p>In <code>auto</code> mode, it's simply written. Either way, nothing is silently lost.</p><h2>Reading it back</h2><p>A log nobody reads is just a file. So a compact digest of <em>active</em> decisions — title plus one line each — goes into the agent's system prompt in every session:</p><pre><code class="language-text"># Architecture Decisions
- **Use Inertia over Livewire for the admin UI**: Build new admin pages
  with Inertia + Vue; leave existing Livewire pages as-is.
- **Store audit events in ClickHouse**: Write audit events to ClickHouse
  via a queue.
</code></pre><p>The agent respects these unless you explicitly revisit one. The digest is budget-capped, so a long-lived project's decision history can't crowd out the working context it exists to protect. Full text stays on disk for the <code>read</code> tool when the agent needs the reasoning.</p><p>And for humans, <code>/decisions</code>:</p><pre><code class="language-text">/decisions

- `2026-09-04-store-audit-events-in-clickhouse` — Store audit events in ClickHouse
- `2026-09-02-use-inertia-over-livewire-for-the-admin-ui` — Use Inertia over Livewire
- `2026-08-01-use-livewire-for-interactivity` — Use Livewire for interactivity
  (superseded by 2026-09-02-use-inertia-over-livewire-for-the-admin-ui)

3 decisions (2 active) · mode: confirm
</code></pre><p><code>/decisions 2026-09-02</code> shows one in full (a unique prefix is enough). <code>/decisions auto</code> or <code>/decisions off</code> switches the mode. Tab completion offers modes and ids.</p><h2>Three kinds of memory, one clear map</h2><p>Elyra now remembers three different things, and the boundaries matter:</p><p>Memory Answers Lives in <code>AGENTS.md</code> (via <code>/learn</code>) <em>How do we do things here?</em> Repo Skills <em>How did we solve that hard problem?</em> User or repo Decision log <em>What did we choose, and why not the alternatives?</em> Repo, per decision</p><p>Procedures, solutions, decisions. Keep them apart and each one stays findable.</p><h2>Also in this release</h2><p><strong>GPT-6 Astra</strong> landed in the registry — OpenAI's new flagship, on the direct API, GitHub Copilot, and the gateways (with <code>-pro</code>, <code>-fast</code>, and half-price <code>:batch</code> variants). $10/$50, a million tokens of context, reasoning and vision. It sits in the same tier as Claude Fable 5.1, and like Fable it's a deep-tier pick rather than a default: <code>gpt-5.6</code> stays the OpenAI default.</p><h2>Get it</h2><pre><code class="language-bash">elyra update
</code></pre><p>Then, next time you and the agent settle something that matters, watch for the dialog. Say yes. Commit the file with your code. Three weeks from now, someone will thank you — and it might be you.</p>