macroonz-compiler 0.2.0

Deterministic Rust code generation for procedural macros: plan, render, close, explain, and bind one sealed expansion from declared input.
Documentation
# stamp — one authored pattern, published as source

Some output cannot be written where a declaration stands.

A definition several files must reach is not expressible by tokens spliced at one declaration, and no splice can mint a name a second file then resolves.
This home renders the third road: one `macro_rules!` definition published as ordinary source somebody commits, and one invocation per site that adopts it.

## The pattern is the caller's

This home knows no pattern.

A caller declares one: the seats its material travels in, the literal syntax standing between them, and the body those seats expand into.
The body is token material the caller composed — nothing here reads it, checks what it names, or adds a line to it.

One declaration produces both halves of the grammar.
The matcher the definition is written with and the invocation each site writes are two walks over the same declared shape, so a site cannot be spelled in a form its own definition does not admit.

## The reach is transported, never copied

A pattern that seats its body inside a module of its own has a problem no caller can solve by hand.

`pub(super)` written at the site and `pub(super)` written one module deeper name two different scopes, so a reach copied straight through publishes an item somewhere nobody asked for.
Where a pattern declares a reach coordinate, the definition carries one front arm per reach: the site's own tokens land at the site's coordinate, the transported tokens land one module in, and the body writes whichever of the two it needs.

An opaque `vis` fragment cannot be transported at all — a wrapper that captured a whole visibility and forwarded it has handed over something no arm can place.
The last arm says so with the compiler's own refusal rather than guessing a scope, because a guessed reach publishes somebody's private item and nothing downstream reports it.

```mermaid
flowchart LR
    accTitle: Visibility transport across a seated module
    accDescr: Explicit visibility spellings map to their equivalent reach one module deeper, while an opaque forwarded visibility fragment receives a compile-time refusal.

    site["site coordinate"] -->|"private or pub(self)"| enclosing["pub(super) in the seated module"]
    site -->|"pub(super)"| ancestor["pub(in super::super) in the seated module"]
    site -->|"pub(crate)"| crateVis["pub(crate), unchanged"]
    site -->|"pub"| public["pub, unchanged"]
    opaque["forwarded $vis fragment"] --> refusal["compile-time refusal"]

    classDef coordinate fill:#eef6ff,stroke:#2563eb,color:#172554
    classDef admitted fill:#ecfdf5,stroke:#059669,color:#064e3b
    classDef refused fill:#fff1f2,stroke:#e11d48,color:#881337
    class site coordinate
    class enclosing,ancestor,crateVis,public admitted
    class opaque,refusal refused
```

## What it claims

That the definition and every invocation were rendered from one declaration, and that the record states which of the two grounds makes publication lawful.

## What it does not

It stages nothing, writes no file, and commits nothing.
What it hands back is rendered trees and one record; the publication actor independently verifies and lands them.

It reads no plan of its own accord either.
A caller hands it what its plan decided, and the two refusals that reading raises are about the plan's seat and delivery, never about the pattern.

## The boundary

This home owns the authored pattern, the closed seat and site namespaces, the one-level reach transport, and the whole rendered publication value.
Planning owns whether a requested seat exists and lands as an artifact; a publication actor owns staged bytes, filesystem placement, independent comparison with the record, and version-control custody.