- Rust 68.8%
- TypeScript 30.7%
- Dockerfile 0.4%
- HTML 0.1%
noema: adopt wrapperless Runseal profile Land-Source: sealkit-combination-models@c7e6ac3673ac29d660fb86defd70a67e5a402a5d |
||
|---|---|---|
| .cargo | ||
| .forgejo/workflows | ||
| .runseal/resources | ||
| apps/web | ||
| charts/noema | ||
| crates | ||
| deploy | ||
| docs | ||
| .gitignore | ||
| AGENTS.md | ||
| biome.json | ||
| Cargo.lock | ||
| Cargo.toml | ||
| ectropy.toml | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| runseal.toml | ||
| sidecar.toml | ||
Noema
Noema maintains the structure of what has been perceived and thought.
It is a media-native, set-shaped thought topology built for retrieval and visual exploration. It records how materials and concepts relate without claiming that those relations are objectively true, valuable, decided, or actionable.
Status
The first delivery vertical slice is active. The Rust library provides content-addressed Text, Link, Image, Audio, and Video Media; stable Sets with immutable membership revisions; versioned role-labelled Facts with projected algebraic laws; and linear GraphCommit history over a Keel-backed transaction boundary. Binary Tuple remains a two-role convenience API.
The loopback API exposes head catalog, immutable Media content, exact retrieval, explicit-layer global/local Projection, and expected-head atomic topology mutation. The CLI is a lowest-loss ordinary pane over those same capabilities: JSON request documents pass from stdin without a second wire model, successful response bytes pass to stdout, and refusals remain on stderr. Projection carries uniform Media descriptors rather than content bytes. The first Web pane reaches both topology and content only through product hooks. It treats Projection as the first algebra-layout specimen, then deterministically derives an independent SVG scene with a bounded pane-local camera, without introducing View or Lens identity.
Development uses the paired Sidecar shape:
pnpm install
sidecar start
Sidecar leases API and Web ports and passes the API endpoint to Vite. API and Web have separate inert image/chart seats; ingress is disabled by default and no deployment or release is active.
The CLI defaults to the API's direct-run loopback address. Pass Sidecar's leased endpoint explicitly when it is active:
cargo run -p noema-cli -- catalog
cargo run -p noema-cli -- project < projection.json
cargo run -p noema-cli -- mutate < mutation.json
cargo run -p noema-cli -- retrieve < retrieval.json
cargo run -p noema-cli -- content media:... > material
Use --endpoint before the command to select another loopback API. catalog,
project, mutate, and retrieve preserve the API response document.
content writes exact canonical Media bytes and is safe to pipe.
Stateless Projection queries evaluate explicit membership and Relation layers at one GraphCommit. They switch between global and bounded local spans without creating identity, persistence, or topology changes. Each result carries the commit-bound RelationRevision for every returned Fact, deduplicated by relation identity and revision, so consumers do not race a separate Catalog read to interpret its roles or algebra.
Reference retrieval scans Text/Link content or one named metadata field at a GraphCommit. Metadata applies to every Media kind. It returns unranked seeds that can become Projection focus; indexes and ranking remain rebuildable.
Text and Link are distinct Media kinds. Link identity preserves the authored UTF-8 and identity-bearing metadata exactly; it does not parse or normalize a URL. Image, Audio, and Video preserve opaque raw bytes. Their current mutation transport is Base64, while exact content reads return the original bytes.
Provenance Facts atomically bind child, source, and witness roles. Global Projection retains n-ary Facts; bounded local traversal follows every explicit role projection without inventing implicit all-to-all hyperedges. The Web scene preserves that shape with one visual Fact junction. It draws only the role axes declared by the returned RelationRevision, routes them through that junction, and applies arrowheads only when the law is directed. Missing or duplicate definitions refuse visibly instead of being guessed. A witness is an ordinary Media identity; Noema assigns it no hidden selector language.
Changing retrieval, focus, Layers, direction, depth, or global/local span invalidates the previous Projection before the next API result arrives. These criteria remain ephemeral controls, not a Lens. At whole-scene scale the Web pane keeps every node, edge, junction, and accessible description while withholding repeated role labels. A zoomed viewport reveals them only while its visible Fact and role-label pressure fits the fixed detail budget, without changing algebra selection. Camera controls use short rows; Connection cards resolve readable participant labels from the current Projection while retaining their complete identities as accessible descriptions. Elements and Connections each initially disclose 12 stable-order entries, expand independently to the complete result, and collapse when that result changes. Scene and result surfaces enumerate resource-bearing geometry; browser contours derive pane-local materialization demand without semantic source priority. A Projection-scoped queue deduplicates identity and starts at most eight Text/Link reads. Contraction drops work that has not started while active reads finish into the current cache. Each identity settles independently, so one slow or failed Media cannot block successful peers; failure remains visible without implicit same-Projection retry. A zoomed scene accepts pointer drag and cursor-anchored wheel zoom; buttons remain the accessible fallback, and wheel at a camera boundary remains ordinary page scrolling. A high-degree local focus may therefore remain as large as the global graph when that is its real bounded adjacency.
The stable architecture brief lives in docs/architecture.md.