Panel catalogue
The panels shipped with the kernel, with their identifier and declared dock. Each one automatically gets a <id>.toggle command in the panneau category, callable from the palette, a shortcut, the View menu, or the All panels... picker, which is also the only place plugin panels appear.
Overview
| Panel | Identifier | Declared dock | Shortcut |
|---|---|---|---|
| Files | core.fichiers | Left | Ctrl+Shift+E |
| Database browser | core.db | Left | Ctrl+Shift+D |
| Journal | core.journal | Bottom | Ctrl+Shift+J |
| Problems | core.problemes | Bottom | Ctrl+Shift+M |
| Actions | core.actions | Right | Ctrl+Shift+A |
| History | core.historique | Right | Ctrl+Shift+H |
| Dashboard | core.tableau | Right | Palette |
| Workflows | core.workflows | Right | Palette |
| Assistant | core.assistant | Right | Palette |
| Notebook | core.notebook | Bottom | Palette |
| Python console | core.console | Bottom | Palette |
| Knowledge | core.connaissances | Bottom | Palette |
| LIMS acquisition | core.lims | Bottom | Palette |
| Campaign | core.campagne | Left | Palette |
| Campaign chain | core.campagne.chaine | Central zone | Palette |
| Tasks | core.taches | Bottom | Palette |
| Plugins | core.plugins | Right | Title bar |
| Campaign banner | Banner | Outside the docks | Dedicated commands |
Files
Browses the user's files. Double-clicking a CSV opens it in a central-zone tab through the editor registry: the same editor as by drag-and-drop or by a plugin call, with the same CSV parser and typed columns.
Navigation is bounded by roots declared on the backend (files_routes.py): home folder, desktop, documents, mounted volumes. Any path outside a root is refused. The user may add a root; the point of the check is that a path constructed elsewhere in the application cannot reach the keys, the SQLCipher database, or the installation directory.
Database browser
Opens an external SQLite database read-only: tables, schema, queries. It gives no access to the software's own encrypted database, which is reached exclusively through the single secure_db.connect connection point.
Journal
Session trace, filterable by source. It captures the console, feeds on command.before, command.after and command.error, and exposes K.log(source, message) to the rest of the application.
Problems
Aggregates the anomalies the engines detect: missing uncertainties, non-exploitable samples, unmatched standards, failed workflow steps. Clicking a row opens the object concerned.
Actions
The commands available in the current context, grouped by category, as a persistent list. The star pins a command as a favourite; favourites feed a dashboard widget.
Favourites are revalidated against the registry on every render: a favourite command whose plugin has been uninstalled disappears instead of failing on click.
History
Reads the signed registry, sample by sample. For each event: timestamp, operation, table, actor (who decides), agent (what executes), plus campaign and motive when declared.
The panel listens for the historique.ouvrir event: clicking a recent modification on the dashboard loads that sample directly, without retyping its name.
Notebook and Python console
Neither owns a runtime. Both go through K.notebooks.noyau('python'), a single Pyodide instance running in a worker. Giving the console its own bridge would start a second Python: the user would see two where they believe there is one, and a variable defined in the console would be unreachable from a notebook cell.
Tabs are namespaces, not processes
Each console tab executes under a distinct session name, so two tabs do not tread on each other. But they share the same interpreter.
State does not survive navigation
Every sidebar link destroys the document, and therefore the worker. The console persists the command history, which is text. Never the transcripts, never the tabs: showing them again on return would suggest that the corresponding Python state is still alive, when the worker was destroyed along with the document.
%pip does not mean PyPI
The worker's CSP only allows Pyodide's local path, and the application targets air-gapped use. %pip therefore relies on micropip, which resolves first against the local Pyodide distribution: scipy, sympy and the rest of the bundle install offline.
Beyond that, a wheel must be placed in the local store (/vendor/wheels/). When the network is the cause of the failure, the console states the rule rather than relaying an unreadable network trace.
Commands
| Command | Effect |
|---|---|
| core.console.new | New tab, new namespace, same interpreter. |
| core.console.clear | Clears the tab's transcript. Does not clear Python state. |
| core.console.kill | Kills the Python kernel. Affects every tab and the notebook. |
IGL compatibility
The notebook's Python kernel exposes the bindings for IGL, the open language for modelling isotopic processes, published under the name igl-lang. An IGL model can be loaded, compiled and run from a cell, like any other scientific library.
IGL remains an independent standard, with its own specification, reference engine and data format. IsoFind adapts to IGL and changes neither its language nor its contracts: a model written in the notebook means the same thing to any conforming implementation, inside IsoFind or outside it.
Knowledge
Declares the documentary sources the assistant may consult, and indexes them. The assistant reaches them through a tool call, visible in the conversation thread like any other.
Three kinds of source
| Kind | Sources | Path |
|---|---|---|
| Shipped with IsoFind | isofind, api, modules | Resolved automatically, locked. Indexed on first start. |
| Your laboratory | wiki, sop, publications | To be filled in. Absolute path to a folder. |
| External tools | phreeqc, r, python | To be filled in if the documentation is installed on the machine. |
External sources are empty at install time, and deliberately so: IsoFind cannot ship the PHREEQC, R and Python documentation. They weigh hundreds of megabytes, carry their own licences, and change version independently of the software.
The document counter
| Display | Meaning |
|---|---|
| 42 doc | Source indexed. The indexing timestamp is in the tooltip. |
| empty | Source enabled but holding no document. Wrong path, or empty folder. |
| off | Source unchecked. It is not consulted. |
The paths of shipped sources are shown but not editable: the user must be able to see where the software found its documentation, if only to understand why it is empty, without being able to break it.
Campaign
Two surfaces carry this name. The banner shows the active campaign of the database, outside the docks, with two commands, campagne.declarer and campagne.clore. The Campaign panel opens a working folder indexed on disk and gives access to its inventory and its aliquot chain; it is described on Campaigns. What follows describes the banner: The campaign propagates to every write and enters the signed message in the registry.
Propagation is done by wrapping window.fetch once in the kernel, explicitly filtered to internal API calls. A local connector, Ollama included, never receives the campaign header.
Dashboard
Mounts the same widgets as the home page, from the same registry, inside a dock. Useful for keeping recent modifications in view while working. It remounts on events rather than displaying the state it had when it was opened, indefinitely.
LIMS acquisition
Watches folders, not a network API: files dropped by the instrument or the LIMS are detected, parsed and offered for import.
Kernel inspector and Plugin workshop
The Kernel inspector lists the registered contributions with their source, category, zone and capability. The Plugin workshop is restricted to the local zone: its command carries zone: 'local' and does not appear in the palette outside developer mode.
In developer mode, core.dev.dump exports the whole registry as JSON: commands, panels and context keys, with their source and zone.