Defines the typed image: a pixels-only .png/.svg visual brief one rung above Contract Markdown whose intelligent compile resolve reconstructs runnable contracts (image to prose-write to .prose.md to compile to IR to receipts). It explains why pictures own the structural skeleton (nodes, edges, fan-out, diamonds, layering) while text owns intent nuance, the loose type predicate (resolve yields a compiling acyclic topology; re-render plus re-resolve is round-trip stable, with prose compile as the typechecker), and scope tiers by box count (multi-box system graph, single responsibility, single function). It lists required structural channels (box plus label identity, box style for kind, directed edges for subscriptions, edge labels for facets, geometry for memo structure, left-to-right layering, acyclicity), pin-or-interrupt safety marks (clock glyphs for Continuity freshness, checklists for Maintains postconditions, else emit needs-input receipts), elaborated Goal and Maintains prose for ratification, out-of-scope connector bindings and runtime trails, and the resolve-then-compile handling for prose compile and prose run with honest generative-resolution limits. Authors and tooling engineers read this when compiling or running a .png/.svg brief, or when designing diagram-driven contract generation.
role: visual-compile-source
summary: |
The typed image: a pixel-only visual source that an intelligent compile
resolve turns into Prose contracts. A multi-node image is a visual projection
of a Forme topology world-model (forme.md); inverting that projection
reconstructs the ### Requires/### Maintains graph. The image sits one rung
ABOVE Contract Markdown in the derivation chain — a brief, not a binary. It is
"well-typed" not by a parser but by compilation succeeding: the resolve
emits .prose.md, a human ratifies it, and the normal compile (Forme +
canonicalizer + postcondition) runs unchanged. Read this to compile or run an
image source.
see-also:
- contract-markdown.md: The
.prose.mdthe resolve EMITS (kinds,### Requires,### Maintains,### Continuity) - forme.md: The topology world-model a multi-node image is a visual projection of
- compiler/ir-v0.md: The compile IR the topology rides inside
- compiler/index.prose.md: The compiler the resolve hands its emitted contracts to
- guidance/authoring.md: Ratifying the emitted contracts (the
prose writediscipline)
The Typed Image — a visual Prose source
A typed image is an ordinary raster picture (.png/.svg) that carries
no embedded metadata, archive, or hidden payload — pixels only — yet holds
enough visual information for an intelligent compile resolve to reconstruct a
runnable Prose system. The picture is the human-facing surface; the contracts
are what runs.
It is a source ABOVE markdown, not a runtime input.
image → (resolve = prose write) → *.prose.md → (compile) → IR → (run) → receipts └ lossy, generative, ratified ┘ └─ deterministic, content-addressed ─┘The resolve emits Contract Markdown as its artifact; a human ratifies it; that becomes the durable intent. Tenet 1 ("Markdown is intent") is preserved exactly — the image is a brief, the contracts are the spec, the IR is the binary. All model latitude is quarantined to authoring time, the rarest event in the system, identical to where
compilealready puts it.
Why the picture earns its place
A DAG drawing is a better notation than prose for the half of a contract that is hard to write, and a worse one for the half that is easy:
- Structure — nodes, directed edges, fan-out, diamonds, layering — is
tedious and error-prone in markdown (it is the whole reason Forme must
semantically match
### Requires↔### Maintains). A picture conveys it at a glance. - Intent nuance — the exact postcondition, the freshness window — pixels can only gesture at. Prose owns it.
So a typed image lets the image own the structural/temporal skeleton and text-inside-the-boxes own the semantic intent. The picture is a schematic (think circuit diagram or score), where labels and glyphs are load-bearing — not decoration.
The type
The type is conceptual and loose by design — it is not a byte schema. An image is well-typed iff:
resolve(image)yields a contract set that compiles — Forme draws a topology and asserts its postconditionacyclic: true.- The round-trip is stable — re-rendering the emitted topology
(
compile→topology.json→ the devtools/Forme render) and re-resolving it lands on the same topology fingerprint, modulo prose paraphrase of goals.
prose compile <image> is the typechecker. A picture that cannot be
resolved into a compiling, acyclic, round-trip-stable contract set is ill-typed,
and the resolve must say so (see Pin-or-interrupt), never guess a graph into
existence.
Scope tiers (the type is parameterized by box count)
| Scope | Boxes | Resolves to | Verb |
|---|---|---|---|
| System | many | a Forme graph of kind: responsibility/gateway contracts |
prose compile <image> → prose serve |
| Single responsibility | one | one kind: responsibility contract |
prose compile <image> |
| Single function | one | one kind: function (a visual signature + intent) |
prose compile <image> → prose run |
The type predicate is identical across tiers; only the box count changes. A single-node image is the N=1 case — a visual contract, not a visual graph.
Requirement tiers — what the pixels must carry
1. Required (structural — must be visually unambiguous)
The resolve must be able to read each of these directly off the pixels. If any is ambiguous, the image is ill-typed.
| Visual channel | Graph semantics |
|---|---|
| Box + label | a node, with a stable identity from its label text |
| Box style (color / border / icon / badge) | kind: gateway (ingress) · responsibility · function · terminal |
| Directed edge (arrowhead) | a subscription; the arrow is evidence flow |
| Edge label on a multi-out edge | which facet is subscribed — the materiality partition (e.g. funding / hiring / launches) |
| Fan-out / fan-in / diamond geometry | the memo structure: independent facets → independent wake lanes; a diamond → dedup/collapse |
| Left→right layering | reconcile depth / order |
| Overall acyclicity | the picture must read as a DAG |
A single labeled fan-out can encode an invariant that is a paragraph of prose.
competitor-monitor —funding→ deal-deskplus—hiring→ recruitingplus—launches→ product-radarsays: the monitor### Maintainsthree independent facets, each consumer### Requiresexactly one — so a funding-only change wakes onlydeal-deskand the other lanes memo-skip. That is cost-scales-with-surprise, drawn.
2. Pin-or-interrupt (safety — read an explicit mark, or refuse)
These are safety-load-bearing: a wrong freshness window is silent staleness or
runaway spend; a wrong postcondition admits a corrupt commit. The resolve must
read them from an explicit visual annotation or interrupt — emit the
standard "this sentence is not yet decidable" failed/needs-input receipt
routed to the author. It may not invent them.
| Visual annotation | Contract element |
|---|---|
Clock / timer glyph, e.g. +15m |
### Continuity valid_until freshness |
| Postcondition glyph / checklist in a box | ### Maintains admissibility checks |
3. Elaborated (the resolve authors; the human ratifies)
Given the structural skeleton pinned, the resolve may author these from context,
and they come back as ordinary prose write output for ratification:
- The Goal sentence per node (a node named
competitor-monitorbetween a news gateway and funding/hiring/launches consumers all but writes its own). - The Maintains body prose around the pinned facets.
Out of scope (deliberately NOT in the image)
- Connector bindings — which URL/queue a gateway actually reads. That is a deployment fact (adapters are the only reason hosts differ); the picture says "this ingress exposes a facet per source," the which is wired at serve time.
- Receipts / world-models / the ledger — runtime trail, never source.
Handling in compile and run
The image adds exactly one resolve render at the front of compile; nothing downstream changes.
prose compile <image.png> [--out <dir>]
- Detect the image format (Format Detection table → load this doc +
forme.md+compiler/index.prose.md). - Resolve — run a vision render (the
prose write-from-image session) that reads the pixels against this doc's requirement tiers and emits.prose.mdcontract(s) into<openprose-root>/src/. Pin-or-interrupt failures surface as receipts, not guesses. Per theprose writediscipline, the emitted contracts are shown for ratification and not silently applied beyondsrc/. - Compile — hand the emitted contracts to the normal compile pipeline
(Forme topology + per-node canonicalizer + postcondition validators) and emit
the IR to
<openprose-root>/dist/, exactly as a text compile does.
prose compile <image> is thus prose write-from-image fused with the ordinary
compile — and the act of compiling is what typechecks the picture.
prose run <image.png>
run already does a compile step. For an image, that compile step includes the
resolve. So run <image> = resolve → compile → reconcile. A single-node
kind: function image runs as a called helper; a kind: responsibility/system
image mounts a DAG (refuse a bare prose run on a lone kind: gateway, same as
text).
Honest limits
- Resolution is generative, not deterministic. Model A and model B may resolve the same picture differently — the same cross-model materiality parity question the harness already names as its sharpest open edge. It is made safe the same way: resolution is a compile-time act, its output is a reviewable content-addressed artifact, and the run phase is the dumb deterministic reconciler over the frozen IR.
- Semantic-drift nodes (no cheap stable identity) can have field-level materiality the pixels can only point at; there the image pins structure and the resolve interrupts for the intent it cannot safely infer.
- A screenshot of a graph is not a typed image unless it was authored to carry the required tiers. A bare topology render omits freshness and postconditions — it resolves to a structurally-correct skeleton with interrupts on every safety-bearing blank.