Furth FortuneM9 reference

Platform product / System overview

Studio Kit

Tools for building Trident applications

Studio Kit combines node editing, script editing, reusable libraries, data views, and validation. It edits the same application source that runs in production.

Inside the system

Architecture plates

Each plate preserves the internal layout, paths, boundaries, and highlighted decisions. Use the short label first, then follow the lines through the system.

Plate 01

Four tiers, and the test that sorts a thing into one of them

the four questions · the tier each one selects · what refuses a drift

1 · ASK IN ORDER · THE FIRST YES DECIDES THE TIER IT SELECTS WHAT REFUSES A DRIFT 1 · a generic mechanism, no scenario baked in? yes, it is Core no 2 · a reusable authoring capability, no brand? yes, it is Studio Kit no 3 · a value, a choice, or a policy for ONE deployment? yes, it is an App no 4 · distribution, money, or a brand over an app? yes, it is a Product overlay Core C, plus reserved Trident libs generic kernels, data, hooks, hosts Studio Kit first-party .tri · native/studio/ 5 libraries · 0 compiled files App config plus .tri · one tenant MerTek.io and MerTekStak are Apps Product overlay config plus .tri · EXTERNAL repo skin, storefront, price, ops CORE STAYS PURE an app adds no file under native/ core C holds no tenant verb key A KIT IS NOT AN APP run-app-shape.sh names the app roots and excludes native/studio by name THE APP SHAPE GATE refuses compiled source outside tests/ and refuses appC not 0 PROVENANCE IS DECLARED PKG_SOURCE_KINDS admits 4 values; external-repository is one of them 2 · THE RECURRING SPLIT · ONE TEST, TWO HOMES a CAPABILITY goes to the Kit a logic-graph editor, a docking shell, a data grid, a timeline the reflective inspector, the live preview, the agent host one editor, and every interface composes it a BRAND, an ARRANGEMENT, or a PRICE goes to the product that same editor, in THIS product's tool rail at THIS price, under THIS skin, in THIS storefront config plus .tri, in an external repository
Plate 02

Five libraries that compose, and a long list they do not own

the five libraries · the surfaces they compose · what lives elsewhere

native/studio/ · 5 LIBRARIES · 0 COMPILED FILES shell.tri · 0 functions the shell scaffold, a scene studio.tri · 17 functions chips, layout, compose, preview project.tri · 4 functions one tool-tagged error report studio_client.tri · 7 typed call and event wrappers toolkit.tri · 11 functions one declaration, four faces IT COMPOSES DECLARED SURFACES t.code.* · 6 compiled verbs the live palette, in trident_rt.c t.ui.form.* · 9 public verbs trt_ui_form.tri, a runtime library t.db.entity.* · declared schemas define, introspect, save ui_controls.tri · control trees panel, label, button, rect t.gfx.embed · t.gfx.scene · t.ui.root the portal and the surface edge the five authoring tool libraries chart conch current spindrift wake IT DOES NOT HOLD THESE the docking shell native/thalassa/lib/client/studio_dock.tri the six tool regions the shell routes native/thalassa/scenes/authoring/ · 5 libs plus shoal.tri under scenes/tests/ the reflective form primitive native/trident/lib/runtime/trt_ui_form.tri the five tool-gating libraries native/thalassa/lib/client/ · plate 03 the runtime distribution surface the Conductor shell, catalog, launcher The Kit composes each one. It owns none. 11 TRACKED .tri FILES OUTSIDE THE KIT LOAD IT 2 App deploy boots boot_mertekstak_console.tri boot_mertekio_employee_console.tri each App is config plus .tri 3 App console gates mertekstak_console_ui.tri mertek_io_ui.tri mertekio_employee_console_ui.tri 6 scene gate fixtures studio_context · studio_layout studio_render · project_validate toolkit_four_faces · spindrift_facade
Plate 03

One declaration, one gate, four faces that cannot bypass each other

one record · one gate · four projections · five named refusals

ONE DECLARATION ONE GATE FOUR FACES, ONE RECORD SET toolkit.tool(...) key · requiresScopes provenance · agentConfirm params · tier · elementTypes class · title · summary · group one fail-closed gate tier + scope + provenance toolkit.admit, toolgate.admit FACE 1 · UI palette button toolkit.palette(records, filter) FACE 2 · contextual-menu action toolkit.contextActions(records, elementType, filter) FACE 3 · agent MCP tool toolgate.manifest(records, token) · it delegates FACE 4 · raw call or event endpoint tooldispatch.dispatch(records, key, token, ...) THE GATE REFUSES BY NAME · IN EVERY FACE denied_policy no filter presented denied_tier caller tier too low not_callable private, no scopes denied_scope a scope is absent denied_provenance caller class refused WHY THE FIVE LIBRARIES STAY PLATFORM native/thalassa/lib/client/ toolgate.tri · tooldispatch.tri policy_view.tri · agent_dispatch.tri mcprelay.tri The Kit loads them. It ships none. DECLARED AS PLATFORM thalassa_client_manifest.tri gives each one a module id of the form platform.thalassa.client.<name> visibility platform-internal A MOVE WOULD INVERT THE STACK the Fathom MCP handler conformance loads four of the five libraries, and it drives mcp-agent-handler.tri. A Kit-owned lib makes Fathom depend on the Kit above it.
Plate 04

The loop closes: the Kit authors an Application that composes the Kit

six route-names · no address in the Kit · the authored app runs on Fathom

studio_client.tri · 7 WRAPPERS · 6 REQUEST ROUTE-NAMES · 0 ADDRESSES MerTek.io · identity mertekio.signUp · mertekio.signIn the creator signs in MerTekStak · project control mertek.provision · mertek.appList mertek.saveProjectModel mertek.getProjectModel THE KIT CARRIES NO ADDRESS callConnect · callRequest · callClose the generic call and event client 7 of 7 wrappers take hostx and port as parameters, so a boot config supplies the endpoint. Every call blocks: it is a user act. BOTH SERVICES ARE APPLICATIONS mertek-api-handler.tri answers the four mertek.* names the Kit calls, among many mertekio-identity-api-handler.tri answers the two mertekio.* names the Kit calls Each is config plus .tri, and neither adds one line of app-specific C. THE LOOP · THE KIT PRODUCES APPLICATIONS, AND AN APPLICATION COMPOSES THE KIT a creator authors in the Kit editor a project model, pure data mertek.saveProjectModel MerTekStak persists the authored model mertek.provision it provisions the child Application it runs on Fathom its own config plus .tri no app-specific C The child Application re-offers the same authoring capability to its own users. A capability is mechanism, tenant, tier and policy. The mechanism is core; the tier is per Application.

Key parts

What the system does

These are the main boundaries, inputs, outputs, and failure rules. The examples show a specific use of each part.

Visual and text authoring

Teams can move between diagrams and precise Trident text without creating separate application versions.

Specific example

An operator can help shape a maintenance workflow visually while a software lead reviews the exact behavior.

Reusable mission building blocks

Shared libraries provide common controls, data patterns, and simulation tools. Applications choose and combine what they need.

Specific example

A new planning tool can reuse an approved map view and identity flow instead of rebuilding both.

Built-in review path

Authoring, validation, and evidence use the same declared application. No private tool path can bypass the platform rules.

Specific example

A prototype can mature into a pilot while keeping its review history and tested behavior connected.

Uses

Example uses

Pilot questions

What the team must decide

Who needs to take part in authoring

Which building blocks can be reused across programs

What evidence is needed to move from pilot to field use

Request a technical briefing