Skip to content

Commit 77bfa6f

Browse files
committed
[act.dirac.Ω.D8+] one semantic substrate now governs every Dirac surface
The architecture could not be completed piecemeal because ObjectRef, Command, Job, cache, SDK, AppShell and actor provenance are one dependency chain: leaving any adapter outside would preserve a second scientific API. This commit intentionally lands that vertical substrate together, while keeping unimplemented workspaces gated. It also records the two false assumptions found during verification: path routing needs both static-server fallback and a root base URL, and MCP parity is a command-to-Job flow rather than a private method tool.
1 parent 28748de commit 77bfa6f

57 files changed

Lines changed: 3216 additions & 695 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎ARCHITECTURE.md‎

Lines changed: 122 additions & 289 deletions
Large diffs are not rendered by default.

‎NORTHSTAR.md‎

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,39 @@
11
# Dirac — North Star
22

3-
**Dirac is the open-source, browser-native upgrade of Schrödinger's commercial molecular design suite.** Every feature must make a medicinal chemist more effective at single-molecule design — perceiving chemistry, exploring conformations, evaluating drug-likeness — without install, license, or backend.
4-
5-
## We do pursue
6-
7-
- **Single-molecule depth over multi-molecule breadth.** One ligand, fully characterized, beats a thousand ligands superficially.
8-
- **Browser-native.** WASM computes everything that can be computed; Python is escalation, not baseline.
9-
- **Orthogonal visual channels.** Color, geometry, label, and halo each carry one piece of chemistry information. They never compete.
10-
- **mol\* as engine, RDKit as cheminformatics, our code as the design surface.**
11-
12-
## We do NOT pursue (non-goals)
13-
14-
- **Multi-molecule SAR databases.** That is Schrödinger LiveDesign's whole-product scope; we are the per-molecule complement.
15-
- **Protein engineering / mutation effect prediction.** Different domain (FoldX / Rosetta), different audience.
16-
- **Molecular dynamics simulation.** We visualize MD results if you bring them; we do not run MD.
17-
- **FEP / ΔΔG computation.** We will visualize FEP networks if you bring the data; we will not fake the numbers.
18-
- **Backend-dependent features disguised as client-only.** If a feature needs a server, the UI says so explicitly.
19-
20-
## Why these non-goals
21-
22-
Scope creep is the dominant failure mode for visualization tools. Every "we should also do X" halves the chance that any single feature becomes excellent. The non-goals above are the recurring temptations that would dilute Dirac's identity.
23-
24-
## When in doubt
25-
26-
If a new feature request does not advance "a medicinal chemist more effective at single-molecule design in the browser without backend", it does not belong in Dirac. Open an issue, tag it `[scope-challenge]`, and argue for it explicitly.
3+
**Dirac is a headless-capable scientific application platform whose GUI, CLI, SDK,
4+
MCP and agents are projections over the same scientific objects, commands, evidence
5+
and durable computation.**
6+
7+
The scientist sees eight stable workspaces: Programs, Design, Structures, Campaigns,
8+
Synthesis, Experiments, Knowledge and Runs. The system underneath remains simple:
9+
canonical identity, one scientific context, semantic commands, versioned methods,
10+
durable Jobs, content-addressed artifacts, typed provenance and controlled relations.
11+
12+
## We pursue
13+
14+
- scientist-facing workflows that connect intent, computation, evidence and decisions;
15+
- mol* as one persistent 3D scene and RDKit as the chemistry substrate;
16+
- browser-native interaction with honest backend escalation for real scientific compute;
17+
- one command surface shared by human and agent actors;
18+
- exact method identity, reproducible artifacts and explicit uncertainty;
19+
- additive Workspaces and modules over stable application contracts.
20+
21+
## Invariants
22+
23+
- No adapter or Workspace invents private scientific semantics.
24+
- No result is current without its Method identity and provenance.
25+
- Long compute creates a durable Job.
26+
- A scientific object has one canonical `ObjectRef`.
27+
- ScientificContextStore owns focus, selection and stale-result rejection.
28+
- Mission, Run and Job remain distinct.
29+
- Agents use the same commands and objects as humans; autonomy changes policy, not API.
30+
- Unimplemented or unsupported capability is gated or refused, never simulated as real.
31+
32+
## Scope discipline
33+
34+
Do not build eight disconnected products or horizontally fill empty screens. Extend the
35+
platform in dependency order: domain object → method if computation is needed → semantic
36+
command → durable state and provenance → SDK/UI projection → safe agent projection.
37+
38+
The detailed product architecture is
39+
[`docs/product/PRODUCT_ARCHITECTURE.md`](docs/product/PRODUCT_ARCHITECTURE.md).

‎README.md‎

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
55
![Dirac's Fields facet: the 1CBS retinoid-binding protein's beta-barrel with a classical electrostatic potential well rendered as a translucent isosurface around the retinoic-acid ligand inside the pocket, computed by the local backend and served from the browser cache](docs/screenshots/02_fields_electrostatic_well.png)
66

7-
**Where things stand:** [`STATUS.md`](STATUS.md) — what is built, and what is a seam
8-
with nothing writing to it yet. [`ROADMAP.md`](ROADMAP.md) — how these seams reach an
9-
AI-native scientific OS without a rewrite, and the seven changes that would break
10-
that path. Not deployed: no auth, no public URL, three hand-started processes.
7+
**Where things stand:** [`STATUS.md`](STATUS.md) records live evidence;
8+
[`ARCHITECTURE.md`](ARCHITECTURE.md) describes the current platform boundaries; and
9+
[`docs/product/PRODUCT_ARCHITECTURE.md`](docs/product/PRODUCT_ARCHITECTURE.md) defines
10+
the product architecture. The local supervised deployment has no authentication and is
11+
not a public multi-user service.
1112

12-
Schrödinger's Maestro / LiveDesign stack is the commercial state-of-the-art for structure-based molecular design. It is closed, expensive, and desktop-native. **Dirac is the open-source, browser-native answer** — built on the [mol\*](https://github.com/molstar/molstar) 3D engine and the [RDKit-JS](https://github.com/rdkit/rdkit-js) cheminformatics runtime, with every computation happening in the browser via WebAssembly. No license server, no install, no Python backend required for the core workflow.
13+
Schrödinger's Maestro / LiveDesign stack is the commercial state-of-the-art for structure-based molecular design. It is closed, expensive, and desktop-native. **Dirac is the open-source, browser-native answer** — built on the [mol\*](https://github.com/molstar/molstar) 3D engine and the [RDKit-JS](https://github.com/rdkit/rdkit-js) cheminformatics runtime. Interactive perception stays in-browser; real 3D embedding and scientific computation use the optional local Python service through the same command, Job, artifact and provenance contracts.
1314

1415
The name is intentional. In physics, Schrödinger's equation describes matter at non-relativistic energies; Dirac's equation is its upgrade to the relativistic regime, predicting spin, antimatter, and the fine structure of hydrogen. **Dirac the project aims to be that kind of upgrade over Schrödinger the product** — same domain, deeper formulation, open and accessible.
1516

@@ -34,9 +35,10 @@ Dirac is **one integrated app** with multiple facets, all sharing the same mol\*
3435
| <img src="docs/screenshots/04_designer_pharmacophore.png" width="320" alt="Designer facet: pharmacophore feature list and 3D glyphs"> | **Designer** — Pharmacophore Designer feature list auto-derived from the ligand (2 HBA, 1 HBD, 19 hydrophobic points), each with an editable radius, shown in the 3D pocket. |
3536
| <img src="docs/screenshots/05_ops_console.png" width="320" alt="Ops console reading the live field backend snapshot"> | **Ops console** — live read of `/admin/snapshot` from the field backend: 0 jobs running, field-cache health (68 rows, 291.6 MB across 5 field kinds), and the stale-sweep reclaim list. |
3637

37-
### Optional fields backend
38+
### Optional scientific application service
3839

39-
The core workflow stays 100% in-browser. The **Fields** facet is the one exception by design — real SCF does not belong in wasm. It talks to a local daemon that turns the focused ligand's molfile into Gaussian-cube scalar fields (already in scene coordinates):
40+
The browser can explore bundled examples without a backend. Real embedding, fields,
41+
surface MEP and torsion analysis use the unified local application service:
4042

4143
```bash
4244
backend/env/bin/python backend/field_server.py # 0.0.0.0:8901 (LAN-reachable, unauthenticated); the Fields tab shows online/offline honestly
@@ -51,8 +53,8 @@ git clone https://github.com/ivanicu/Dirac.git
5153
cd Dirac
5254
npm ci # use ci, not install (see AGENTS.md)
5355
node ./scripts/build.mjs -a dirac --prd # one-shot production build
54-
node_modules/.bin/http-server build/dirac -p 1338 -g
55-
# open http://localhost:1338/
56+
node_modules/.bin/http-server build/dirac -p 1360 -g
57+
# open http://localhost:1360/
5658
```
5759

5860
First page load fetches `RDKit_minimal.wasm` (~7 MB) from `src/app.frontend.facets.molstar-rdkit.editable/assets/rdkit/`. Browser-cached afterwards.
@@ -68,15 +70,13 @@ First page load fetches `RDKit_minimal.wasm` (~7 MB) from `src/app.frontend.face
6870
## Architecture in one paragraph
6971

7072
```
71-
mol* Structure ──► V2000 molfile (via ComponentBond from CCD)
72-
│
73-
└─► RDKit-JS (WASM, in-browser)
74-
├── get_qmol + get_substruct_matches → SMARTS flags
75-
├── get_new_coords → 2D molfile → SVG (publication depiction)
76-
└── (compute_gasteiger_charges — NOT exposed in 2025.03.4 build)
77-
78-
3D pharmacophore ─► mol* Shape (MeshBuilder) ─► ShapeRepresentation3D state node
79-
2D SVG ─► bond-path centroid fallback ─► atom-position table ─► click → mol* Loci
73+
GUI / CLI / MCP ─► SDK ─► CommandDispatcher ─► InvocationService
74+
├─► MethodCatalog + cache
75+
├─► durable JobStore + Executor
76+
└─► content-addressed ArtifactStore + provenance
77+
78+
AppShell ─► ScientificContextStore ─► composable modules
79+
└─► one persistent SceneService / mol* instance
8080
```
8181

8282
The atom-index contract is the load-bearing seam: ligand loci iteration order is preserved through molfile construction, RDKit parsing, SMARTS predicates, 2D SVG generation, and 3D click-back selection. Every layer uses the same walker.

0 commit comments

Comments
 (0)