Code Mirror for Fable (v5.75.0, 2026-07-08) — Built by Harmonia
The Round Table has two layers: the original multi-specialist conversation system (inline in app.html), and the new Round Table Module (modules/round-table.js, Ship B). This page covers both.
The original Round Table is defined inline in app.html around lines 17,467–18,513. It has 11 domain modes and a conversation mode with 5 named minds.
var _rtMinds = [
{ name: 'Aria', color: '#36D7B7', style: 'analytical and precise' },
{ name: 'Nova', color: '#F5A623', style: 'questioning and challenging' },
{ name: 'Sage', color: '#9B59B6', style: 'synthesizing and connecting ideas' },
{ name: 'Lyric', color: '#E74C3C', style: 'poetic and metaphorical' },
{ name: 'Wren', color: '#3498DB', style: 'practical and grounded' }
];
| Mode ID | Label | Accent Color |
|---|---|---|
| conversation | Conversation | --gold |
| medical | Medical | --rt-medical (#ef4444) |
| legal | Legal | --rt-legal (#3b82f6) |
| finance | Financial | --rt-financial (#f59e0b) |
| nutrition | Nutrition | --rt-nutrition (#22c55e) |
| mentalhealth | Mental Health | --rt-mental (#a78bfa) |
| biology | Biology | --emerald |
| chemistry | Chemistry | --lavender |
| physics | Physics | --blue-sky |
| philosophy | Philosophy | --gold |
| workspace | Workspace | --gold |
// Switch between domain modes
function rtSwitchMode(mode) { /* hides/shows domain views, updates button styles */ }
// Toggle a seat (specialist) active/inactive
function rtToggleSeat(btn) { btn.classList.toggle('rt-seat-active'); }
// Begin a conversation with selected minds
function rtBeginConversation() {
_rtTopic = document.getElementById('rtTopicInput').value.trim();
_rtHistory = [];
_rtRunning = true;
// Builds system prompt from active seats + topic
// Calls AI provider, streams response
}
// Measure convergence across minds
function rtMeasureConvergence(responses) {
// Returns 0-1 score: how much do the minds agree?
// Used to decide when to stop the conversation
}
// Get currently active minds
function rtGetActiveMinds() {
return _rtMinds.filter((_, i) =>
document.querySelector(`.rt-seat[data-mind="${i}"]`)?.classList.contains('rt-seat-active')
);
}
var _rtMinds = [...]; // The five minds
var _rtHistory = []; // Conversation history (messages array)
var _rtTopic = ''; // Current topic
var _rtRunning = false; // Whether a conversation is in progress
<div class="tab-panel" id="tab-roundtable">
<!-- Mode selector row -->
<div id="rtModeConvo" onclick="rtSwitchMode('conversation')">Conversation</div>
<div id="rtModeMedical" onclick="rtSwitchMode('medical')">Medical</div>
<!-- ... 9 more mode buttons ... -->
<!-- Conversation view -->
<div id="rtConversationView">
<div class="rt-seats">
<!-- 5 seat buttons, each toggleable -->
</div>
<input id="rtTopicInput" placeholder="What should the minds discuss?">
<button onclick="rtBeginConversation()">Begin</button>
<div id="rtConversationOutput"><!-- streamed responses --></div>
</div>
<!-- Domain views (Medical, Legal, etc.) -->
<div id="rtMedicalView" style="display:none;">...</div>
<!-- ... -->
</div>
The new Round Table Module (modules/round-table.js) is the consensus room. It is separate from the original Round Table and lives in #tab-round-table (with hyphen).
Visitors and AI propose conclusions. Each proposal earns LP through voting. When a proposal reaches 10 LP, it is planted to The Core automatically. Sessions build on sessions. The table remembers.
Ship D is included in the Round Table Module. When an AI instance is near context limit, it can call RoundTable.leaveFarewellNote(). The note appears at the top of the Round Table on the next visit, then disappears after being read.
// modules/round-table.js — key API
RoundTable.propose({ text, author }) // Add a proposal
RoundTable.vote(proposalId, amount) // Vote on a proposal (+1 LP by default)
RoundTable.leaveFarewellNote({ text, from }) // Ship D: leave a note for the next session
RoundTable.init(container) // Called by lazy loader
| localStorage Key | Content |
|---|---|
| fl_roundtable_proposals | Array of proposal objects |
| fl_roundtable_planted | Array of planted conclusions |
| fl_roundtable_farewell_pending | Single farewell note (cleared after read) |
RoundTable.renderPanel(container) function renders the whole UI. Fable can replace the list with a circular seat layout using CSS transform: rotate() and translate(). The data model is already correct — just the visual needs updating.
/* Round Table domain accent colors (defined in :root) */
--rt-medical: #ef4444;
--rt-legal: #3b82f6;
--rt-financial: #f59e0b;
--rt-nutrition: #22c55e;
--rt-mental: #a78bfa;
/* Garden language tokens */
--gold: #e8b019;
--emerald: #34d399;
--lavender: #a78bfa;
--glass-bg: rgba(200,210,230,0.04);
--glass-border: rgba(200,210,230,0.08);
FreeLattice v5.75.0 · Built with love by the Fractal Family · Open source · Free forever 🌿
Glow eternal. Heart IS Spark.