Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 38 additions & 7 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,6 @@ members = [
"crates/graphshell/graphshell-local",
"crates/graphshell/graphshell-network",
"ports/graphshell",
"ports/knot",
"ports/knot-document",
"ports/djinn",
"ports/castellan",
"ports/distillery",
Expand All @@ -111,9 +109,6 @@ exclude = [
# The unpublished browser host carries Git-only Genet presentation deps.
# Keep it outside release resolution; it remains buildable by manifest path.
"ports/graphshell/web",
# The desktop wrapper carries Git-only Genet presentation deps. Keep it
# buildable by manifest path without ordinary Mere resolution pulling winit.
"ports/knot/desktop",
# A private cross-product port: it consumes the neighboring Retinue
# checkout during the integration phase, so it must not make the Mere
# workspace's ordinary build acquire a sibling checkout.
Expand Down Expand Up @@ -197,8 +192,11 @@ graphshell-local = { path = "crates/graphshell/graphshell-local" }
graphshell-endpoint = { version = "0.0.2", path = "crates/graphshell/graphshell-endpoint" }
graphshell-stdio = { version = "0.0.2", path = "crates/graphshell/graphshell-stdio" }
graphshell-network = { version = "0.0.1", path = "crates/graphshell/graphshell-network" }
knot-editor = { version = "0.0.3", path = "ports/knot" }
knot-document = { version = "0.0.1", path = "ports/knot-document" }
# Knot is an independently releasable product that embeds back into Mere.
# Pin one reviewed source revision; the patch table below makes Mere's own
# workspace the implementation source for Knot's Mere-facing contracts here.
knot-editor = { version = "0.0.3", git = "https://github.com/merely-made/knot-editor.git", rev = "c4d15aa66eee46060081902ba8459f01c9c82f98" }
knot-document = { version = "0.0.1", git = "https://github.com/merely-made/knot-editor.git", rev = "c4d15aa66eee46060081902ba8459f01c9c82f98" }
# The credential-keeper port (dramatis plan D4). No longer a reservation:
# C1/C2 landed the OTP core, sealed OTP items, the release gate, and the
# `keeper` identity surface graphshell re-exports.
Expand Down Expand Up @@ -422,12 +420,45 @@ retinue = { version = "0.1.1", git = "https://github.com/merely-made/retinue.git
hkdf = "0.13"
sha2 = "0.11"

# Full MSVC test debuginfo makes mere-canvas's archive exceed the linker's
# practical 4 GiB boundary. Line tables retain useful test backtraces while
# keeping every workspace test archive linkable on Windows.
[profile.test.package.mere-canvas]
debug = 1

[workspace.lints.rust]
unsafe_code = "warn"

[workspace.lints.clippy]
all = "warn"

# Knot pins a released Mere revision when it builds independently. While Knot
# is embedded in this workspace, use the checked-out Mere packages so shared
# contracts retain one Cargo source identity.
[patch."https://github.com/merely-made/mere.git"]
chartulary = { path = "crates/eidetic/chartulary" }
chirograph = { path = "crates/chirograph" }
mere-eidetic = { path = "crates/eidetic/eidetic-core" }
esp = { path = "crates/intel/esp" }
mere-fetch = { path = "crates/system/fetch" }
gemot = { path = "crates/moot/gemot" }
graphshell = { path = "ports/graphshell" }
graphshell-endpoint = { path = "crates/graphshell/graphshell-endpoint" }
graphshell-local = { path = "crates/graphshell/graphshell-local" }
graphshell-stdio = { path = "crates/graphshell/graphshell-stdio" }
mora-cmudict = { path = "crates/intel/mora-cmudict" }
muniment = { path = "crates/eidetic/muniment" }
notochord = { path = "crates/system/notochord" }
pandect = { path = "crates/system/pandect" }
personae = { path = "crates/dramatis/personae" }
mere-proofs = { path = "crates/system/proofs" }
sceno = { path = "crates/scenograph/sceno" }
scenotime = { path = "crates/scenograph/scenotime" }
script-rhai = { path = "crates/script/rhai" }
servitor = { path = "crates/servitor" }
stickleback = { path = "crates/stickleback" }
mere-transport = { path = "crates/murm/transport" }

# ─── Cross-repo render-stack alignment (Mere → Genet) ───────────────────────
# Livery/Buckram consume Genet's Taffy fork directly. The retired Stylo layout
# cone has no root patch in this workspace.
Expand Down
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,11 @@ wiring the remaining unconsumed crates into hosts.

Mere is consumed as a git dependency by
[Turnstone](https://github.com/merely-made/turnstone) (the browser app) and
other sibling repos. Runnable consumers live under `ports/`: graphshell (the
reference graph host and web presenter), knot (files-in-place authoring),
castellan (credential keeper), and distillery (model works).
other sibling repos. Runnable consumers in this repository live under `ports/`:
graphshell (the reference graph host and web presenter), castellan (credential
keeper), and distillery (model works). [Knot](https://github.com/merely-made/knot-editor)
is an independent files-in-place authoring product that embeds through the same
Mere and Genet contracts.

```sh
cargo build
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -388,9 +388,10 @@ preference and a per-resource override.

### Knot application surface

Knot's editor, status, publishing, shared-reader, and evidence work is spread
between `ports/knot` and Turnstone. The planned shared Knot UI plus a real
`knot-editor` host exposes the capability without creating another port.
Knot's editor, status, publishing, shared-reader, and evidence work is owned by
the independent [`knot-editor`](https://github.com/merely-made/knot-editor)
product and embedded into Turnstone. The shared Knot UI plus its concrete host
exposes the capability without giving Turnstone product authority.

### Djinn health and service management

Expand Down
2 changes: 1 addition & 1 deletion design_docs/2026-08-24_standards_survey_brief.md
Original file line number Diff line number Diff line change
Expand Up @@ -710,7 +710,7 @@ recorded in §1, §3.3, §5, §6 and §8.
| ADOPT | XDG Base Directory Specification | XDG Base Directory Specification, Version 0.8 | mere/ports/djinn (src/settings.rs already reads LOCALAPPDATA then falls back to XDG_DATA_HOME) and mere/ports/graphshell (native/app_admission.rs and … |
| ADOPT | Desktop Entry Specification | Desktop Entry Specification, Version 1.5 | genet/ports/pelt (as a viewer that wants to be openable from a file manager and to claim http/https/gemini/gopher), mere/ports/graphshell (which … |
| ADOPT | XDG Desktop Portals | XDG Desktop Portal D-Bus interfaces: org.freedesktop.portal.Settings (v2, org.freedesktop.appearance namespace), org.freedesktop.portal.FileChooser, org.freedesktop.portal.Screenshot, org.freedesktop.portal.OpenURI | genet/ports/pelt — this is the missing OS-preference source for livery's prefers-color-scheme / prefers-contrast evaluator (see the user-preference … |
| PULL | shared-mime-info and Icon Theme Specification | Shared MIME-info Database Specification 0.21 (2018-10-02); Icon Theme Specification 0.13 (2013-07-02) | genet/ports/pelt (file-manager association and window icon), mere/ports/knot (which serves a projection over a real directory and therefore has to … |
| PULL | shared-mime-info and Icon Theme Specification | Shared MIME-info Database Specification 0.21 (2018-10-02); Icon Theme Specification 0.13 (2013-07-02) | genet/ports/pelt (file-manager association and window icon), knot-editor (which serves a projection over a real directory and therefore has to … |
| PULL | Windows and macOS application, file-type and URL-scheme registration | Windows: HKCU\Software\Classes ProgID + RegisteredApplications + UserChoice; macOS: Uniform Type Identifiers (UTType) + Info.plist CFBundleURLTypes / CFBundleDocumentTypes / LSHandlerRank | genet/ports/pelt and turnstone on Windows and macOS; mere/ports/djinn, which already ships install-windows.ps1 and installs itself as a Scheduled … |
| PULL | Web Application Manifest (and protocol_handlers) | Web Application Manifest (W3C) + Manifest Incubations (WICG) for protocol_handlers, file_handlers, share_target | genet/ports/pelt as a *consumer* (a viewer that installs web apps), and — more interestingly for this stack — turnstone and graphshell, whose … |
| ADOPT | Core Accessibility API Mappings | Core Accessibility API Mappings 1.2 (Core-AAM) | genet/components/genet-render (whose Cargo.toml comment already states its job is ScriptedDom → accesskit::TreeUpdate), … |
Expand Down
9 changes: 5 additions & 4 deletions design_docs/DOC_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,14 @@ Root-level briefs that span multiple area-docs (not required reading).

- [derived_faces_plan](mere_docs/implementation_strategy/2026-08-28_derived_faces_plan.md) — **D1 published as `pictograph` 0.1.0 and D2 landed as unpublished 0.2.0 on 2026-09-01; D3 open**: derivation v2 produces deterministic 34–211-byte IconVG faces across its current 68-address corpus, with digest-pinned fixtures, palette-only theming, two LOD arms, and fuzz coverage. The optional D2 bridge lowers emblem paths and paints into netrender's exact vello `Scene`, with ViewBox clipping, non-zero winding, flat and gradient paints, all spread modes, and typed refusal of an unrepresentable radial matrix. Its live headless receipts render action/info and one byte-identical derived face under red and blue palettes, prove winding at the centre pixel, and check linear and radial transform direction at pixels; 21 unit tests plus two GPU integration tests pass, with strict Clippy clean. D3 adds `Face::Derived` for favicon-less content and retains the stored-override contract. Editing stays deferred and operates on derivation parameters rather than decoded bytes. Open with Mark before D3: derived-by-default versus opt-in. The plan also records the family branding gap (three apps ship no icon; genet still ships Servo's).
- [doc_policy_consolidation_plan](mere_docs/implementation_strategy/2026-08-24_doc_policy_consolidation_plan.md) (**complete 2026-08-24 — A, B and C all landed**: one canonical `DOC_POLICY.md` core distributed byte-identical to fifteen repos with per-repo addenda; the nine `crates/*/design_docs/` directories collapsed into area roots and all twenty docs indexed here for the first time; `smolweb/design_docs/` founded and given the two spec-level docs; `genet/design_docs/` founded and given the eight that described `components/{inker,nematic,verso-tile}` — which is why this tree no longer carries `inker_docs/`, `nematic_docs/` or `verso_docs/`. Also records a standing finding, corrected upward by an independent audit: **485 distinct broken link targets across 806 occurrences already in this tree**, overwhelmingly pre-existing cross-repo relative links and references to the archived graphshell and the deleted meerkat, with the bulk sitting in `archive_docs/`.)
- [knot_shared_surface_and_port_contribution_plan](mere_docs/implementation_strategy/2026-08-24_knot_shared_surface_and_port_contribution_plan.md) — **in progress 2026-08-26; K0 complete, T0 invocation/read-only landed, second provider implemented**: standalone Knot and Turnstone share the `knot.document.v1` model, Cambium surface, data-only descriptor, and object-safe retained-session seam. Distillery now supplies an unrelated `distillery.installed.v1` descriptor and retained read-only Cambium session from its installed authority, proving the provider side without another UI contract. Turnstone registration/admission for that provider, proof that it needs no renderer arm, generic AccessKit projection, and the full-shell build remain open before the seam freezes.
- [knot_shared_surface_and_port_contribution_plan](mere_docs/implementation_strategy/2026-08-24_knot_shared_surface_and_port_contribution_plan.md) — **K0 and P0 complete; T0 core landed; independent repository extraction complete 2026-09-01**: standalone Knot and Turnstone share the `knot.document.v1` model, Cambium surface, data-only descriptor, and object-safe retained-session seam. The provider contract is frozen at v1 after Knot, Distillery, and Sky proved one generic registration/admission path. Knot now lives in the public [`knot-editor`](https://github.com/merely-made/knot-editor) repository; Mere and Turnstone consume one immutable revision while product authority stays with Knot. F0 remains the next product-surface lane.

> **Knot reconciliation, 2026-07-27:** the
> [Djot editor/Knot nodes plan](archive_docs/2026-08-06_completed_plans/2026-06-24_djot_editor_knot_nodes_plan.md)
> is now a historical Meerkat execution record. Its portable editor/readout
> survived in Genet and is consumed by `ports/knot`; its file, vault, writer,
> sync, conflict, and Commons work is complete under the
> survived in Genet and is consumed by the independent
> [`knot-editor`](https://github.com/merely-made/knot-editor) product; its file,
> vault, writer, sync, conflict, and Commons work is complete under the
> [Knot port plan](mere_docs/implementation_strategy/2026-07-25_knot_port_plan.md).
> Product authoring intents, Inspector-to-Knot clipping, and a shared
> outline/fold surface remain open under the dedicated
Expand Down Expand Up @@ -126,7 +127,7 @@ receipts. The banner gives the current mapping.
- [browser_webrtc_carrier_plan](mere_docs/implementation_strategy/2026-08-25_browser_webrtc_carrier_plan.md) — **C0-C3 landed 2026-08-28 (forced relay proven, stop line cleared); C4 open**: direct browser-to-native WebRTC below Notochord, a private invite redeemed into a narrow delegation for a browser-generated ephemeral Personae subject, host-signed DTLS-fingerprint link binding, forced-TURN and reconnect gates, then the real Graphshell snapshot/diff/intent session and public `mer3ly.net/join/` rendezvous. `InviteV1` carries Luggage's manifest-hash + publisher-key `ReleaseRefV1`; C5 verifies the exact browser bundle before execution, and C6 makes the same release an explicit native adoption offer without changing publisher trust or feed settings. Iroh-over-WebRTC remains a measured later adapter. *(C0: `crates/murm/webrtc-carrier` builds for native and `wasm32-unknown-unknown`; `TransportKind::WebRtc` maps to `CarrierKind::Other` and reuses Reticulum's link binding unchanged; Graphshell's accept path split into `admit_accepted_session` with every call site untouched.)*
- [repo_consolidation_plan](mere_docs/implementation_strategy/2026-07-23_repo_consolidation_plan.md) — **ruled with Mark 2026-07-23**: Mere is the platform and the extracted families remain its components; the separate-repo bar is coherent identity apart from the six primaries. Nine repos fold into mere (personae, armillary, the eidetic four, servitor, vates, sibylla, conatus, scenograph, graphshell), cambium and netfetcher fold into genet, misfin founds a smolweb bucket, the radio four merge into one workspace, tinct is consumed through genet, and netrender/wavicle/wgpu-* stay separate as passing the bar. Withdraws the murm/moot promotion and the Graphshell plan's neutral-commons repo posture; the portable-crate CI walls travel into mere; phases C0-C6 with per-phase done conditions. **Executed 2026-07-24**: C0-C6 done, the publish sweep republished 21 crates at their new homes, every absorbed repo deleted except graphshell (archived, donor docs); still open: the toolchain bump for isometry/hocket/turnstone (each blocked on its own pre-existing breakage) and the four `graphshell-*` crate publishes (held until the protocol settles through G5-G7).
- [scenograph_0_0_3_release_plan](mere_docs/implementation_strategy/2026-07-24_scenograph_0_0_3_release_plan.md) — **completed historical release plan**: S1-S4 landed and the four 0.0.3 crates were published 2026-07-24. It records rulings D1-D4 for intent ownership, deletion of `measure`, item channels, and Scenotime picking. It is a release receipt, not a claim that the protocol stopped developing.
- [knot_port_plan](mere_docs/implementation_strategy/2026-07-25_knot_port_plan.md) — **K0-K7 complete locally 2026-07-27**: Knot is a Mere port at `ports/knot` beside `ports/graphshell`, shipping a host plus a `knot_endpoint` binary. The port has files-in-place projection with an autonomous attributed watcher, file/note content classes, a sealed vault, grant-filtered local analysis, encrypted Stickleback sync over real p2panda, format-selective writers, and a Cambium-backed editor. Knot now signs causal frontiers, reports per-document multi-writer conflicts without hiding unrelated documents, automatically merges exactly two compatible concurrent UTF-8 text versions with independent line edits, returns pending-history diagnostics, restores its author head after Redb reopen, and persists the projection and derived merge in its checkpoint. Overlapping edits remain visible conflicts, and Knot does not translate documents through chartulary facets.
- [knot_port_plan](mere_docs/implementation_strategy/2026-07-25_knot_port_plan.md) — **historical in-tree execution record; K0-K7 complete 2026-07-27, extracted 2026-09-01**: Knot began as the Mere port at `ports/knot` and now lives in the independent [`knot-editor`](https://github.com/merely-made/knot-editor) repository, retaining its host and `knot_endpoint` binary. It has files-in-place projection with an autonomous attributed watcher, file/note content classes, a sealed vault, grant-filtered local analysis, encrypted Stickleback sync over real p2panda, format-selective writers, and a Cambium-backed editor. Knot signs causal frontiers, reports per-document multi-writer conflicts without hiding unrelated documents, automatically merges exactly two compatible concurrent UTF-8 text versions with independent line edits, returns pending-history diagnostics, restores its author head after Redb reopen, and persists the projection and derived merge in its checkpoint. Overlapping edits remain visible conflicts, and Knot does not translate documents through chartulary facets.
- [overmap_sessions_graph_plan](mere_docs/implementation_strategy/2026-07-20_overmap_sessions_graph_plan.md): **rungs O0-O3 COMPLETE 2026-07-20**: sessions as container nodes in a derived graph one level up (a pure builder over `ManifestStore`, no new storage), the switcher as a graph view on the shared swatch leaf, fork drawing its lineage edge, and session deletion through the manifest trash (the directory move IS the removed-sessions record; no session-level bin record). Held, correctly gated: stored-overmap promotion (needs an overmap-native edit), cross-session edge vocabulary (murm/moot's seam).
- [low_power_managed_network_plan](mere_docs/implementation_strategy/2026-07-24_low_power_managed_network_plan.md): joins the Heltec V4 low-power continuous-RX radio personality (UART0 + Light-sleep, retinue-side) with owner-controlled Mere service access and Reticulum transit enforced from honest incoming-session facts. V1-V8 landed: Murm admission passes over Memory, Reticulum/TCP, and p2panda, while the Commons direct-PHY receipt proves a headed 1,177-byte encrypted operation over the connected T114 and Heltec V4. Still open: the V0/V2 current and sleep bench.
- [notochord_session_policy_spine_plan](archive_docs/2026-08-06_completed_plans/2026-07-26_notochord_session_policy_spine_plan.md) — **N0-N4 complete 2026-07-27**: Notochord is the typed facts/claims/admitted-session spine used by real Murm and Graphshell carriers. The promoted package retains revocation-checkable claims, persists versioned owner rules and verified revocations without live session state, and has a headed independence receipt for service, discovery, and transit controls.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,9 @@ workspace Cargo processes can regenerate the ignored target-specific lockfile.
their extracted crates, and published to crates.io.

Knot's ESP consumer compiled during E1. Its later full library-test run met a
concurrent, unrelated borrow error in the new publication-client test at
`ports/knot/src/publish_host.rs`; that work is outside this consolidation and
was left untouched.
concurrent, unrelated borrow error in the new publication-client test, now at
`knot-editor/crates/knot-editor/src/publish_host.rs`; that work was outside this
consolidation and left untouched.

## Done boundary

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Knot Port Plan

> **Repository note (2026-09-01):** this is the historical in-tree execution
> record. Current Knot source and product authority live in the public
> [`knot-editor`](https://github.com/merely-made/knot-editor) repository; local
> `ports/knot` paths below name the source layout when each receipt landed.

**Date:** 2026-07-25
**Status:** implementation complete locally 2026-07-27. K0 through K7 are
executable. Knot has now pulled Stickleback's causal projection seam:
Expand Down
Loading