MiCyte
Home

What you build against

The surfaces.

MiCyte is implemented against a small set of surfaces. Each answers a different question, and each is written down as a contract in the public tree. This page names them, says what you build against each one, and links the page that governs it. The definitions are the documents' own.

Root surfaces

SYSTEM, NETWORK, UTILITIES.

The surface catalog is rooted only in SYSTEM, NETWORK and UTILITIES. SYSTEM is where an instance's records and its tool surfaces live; it is SQL-authoritative and fails closed when its authority store is missing or uninitialized. NETWORK is what the instance shows to, and asks of, other instances. UTILITIES is the operator's own kit, where extensions are mounted and ports are bound and granted.

You build under one of these roots, never beside them: a tool is a SYSTEM surface, a channel is a NETWORK one, a port's binding is a UTILITIES one.

  • Surface catalog The roots and every surface under them, with its route and its sandbox.

Tools

A function bound to a document's shape.

A tool is a modular function bound to a datum's archetype or source kind. It is surfaced from the search and added to the interface panel when a document it applies to is in view; eligibility is computed, not configured. A tool's posture comes from the capabilities it requires and the ports it employs, never from who is looking at it.

You build a tool against an archetype: say which shapes it reads, which it may write, and which ports it would employ. Installing it grants it nothing; what it may write is decided by a separate grant that denies on an empty set.

Instruments

A way to reach one kind of record, wherever it is kept.

An instrument lets an instance interface with specific types of datum information from different sandboxes. It is not a sandbox: a sandbox is a place that holds documents, while an instrument holds nothing. It is a lens over a datum kind wherever that kind is kept, so it cannot be browsed into, cannot be written to as a place, and has no anchor. Both instruments that exist are read-only; the documents they span are owned and edited elsewhere.

You build an instrument when a surface needs every sandbox's records of one kind at once: the rolodex reads every sandbox's contacts, the calendar reads every sandbox's logs.

Archetypes and viewscopes

The shape selects the render.

An archetype is a blank instance, not a description of one: the shape a document takes when it is minted. A viewscope says how a document of that shape is drawn. A lens is narrower still, a bounded presentation transform that changes how one recognized value is displayed without changing what is stored.

You build an archetype when there is a new kind of thing to keep, a viewscope when a shape needs its own drawing, a lens when one value needs another reading. Tools then bind to the archetype, not to the screen.

Apps and extensions

What ships together.

A gadget is a package of tools that ship together. An app is a package with a hub, a tabbed surface over its own tools, and a sandbox of its own to keep its records in. An extension is a package that fills a port an app employs; it ships no tools and no screen, and the seam it connects is refused everything until a grant names it.

You build a gadget as a declaration: its tools, the documents they need, the ports it declares or fills, its version. The declaration is what an instance installs and what this site offers for download; the code is the release.

  • The gadgets Every app and extension this build offers, what each installs, and its declaration to download.
  • The marketplace How packages are catalogued, installed and kept at their declared version.
  • Package update contract What the contract with the registrar carries, and why it is pull-only.

Ports

Four layers, four questions.

A port is a seam to the outside, and it is four separate facts, each owned by a different module. The type says which seams can exist. The extension says what is installed that could fill one. The binding says which one this instance chose. The grant says whether it may act. The layers are separate because the mistakes they prevent are different.

You build against a port type when a tool needs something outside the instance, mail, payment, a model, a host, and you fill it with an extension. Binding and granting are the operator's, never the installer's.

  • Ports as four layers Type, extension, binding, grant: where each lives and why they do not collapse.

Channels and routines

What the outside engages, and what runs alone.

A channel is a session surface the outside engages: open, to any browser that asks, or closed, to instances that hold a contract. A channel never writes. A routine is the third kind of component: nobody engages it, it runs unattended, and writing is its job. The register enforces the taxonomy both ways, so a tool or routine cannot land in the channel register by accident.

You build a channel to publish what an instance will show; you build a routine for what has to happen on a clock. The registrar's own answer, who is this msn, is a channel question; what they run is the instance's.

  • Channels Open and closed channels, routines, and the register that keeps them apart.
  • Registrar residency The registrar answers who; the channel answers what.
  • Contract formation How two instances come to hold a contract at all.