Musewoods · GroveThe Musewoods Field Manual

Extending Musewoods

Extending Musewoods should make the system more expressive without making its authoring grammar less coherent. The first question is therefore not “where do I add a component?” but “what new responsibility is the platform being asked to carry?” Once that responsibility is clear, the implementation should enter at the narrowest existing boundary and preserve the same expectations around validation, accessibility, Ground behavior, field ownership, tests, and Guide coverage.

The default posture is reuse. If an existing motif, analytical primitive, resolver, or field adapter already expresses the semantics, extend through that contract rather than creating a parallel path. New vocabulary earns its place only when the system would otherwise be forced to misrepresent the authored meaning.

The Governing Instinct

  1. Do not add an abstraction when a responsibility already exists

    If a ledger, field, evidence, or another registered motif already carries the intended structure, use it. A new motif should represent a distinct editorial or analytical responsibility, not a preference for a slightly different arrangement.

  2. The registry is the contract

    Public vocabulary belongs in the registry or field model that owns it. A new capability may require only registration and treatment when an existing renderer already understands the shape; a genuinely new structure or behavior may also require validation, a renderer, interaction logic, and accessibility work. The extension should be explicit at the contract boundary rather than hidden in route- or title-specific conditionals.

  3. Authors express meaning; renderers own mechanics

    Authored content should not specify pixel coordinates, D3 callbacks, ad hoc CSS, or the physical location of remote data. Authors declare semantics and bounded treatments; renderers and infrastructure translate those declarations into geometry, interaction, and data resolution.

  4. Ground is consumed, never forked

    A Story- or Grove-aware component consumes semantic Ground tokens and should preserve the same structure across Grounds. If a feature needs a separate Forest Floor implementation merely to change its appearance, the presentation abstraction has leaked into behavior.

  5. Shared behavior has one home

    Shared editorial motifs live in the common motif layer, shared analytical primitives in the analytical layer, and charts in the chart engine. A field adapter can decide whether and how a capability is hosted, but it should not create a second implementation of the same behavior.

  6. Context is not a publishing field

    Clearing extends meaning across canonical objects; it does not become another field adapter or a destination for copied editorial content. New semantic capability should enter through the relationship registry, context resolver, provenance model, or Clearing projection boundary rather than by adding clearing to field-wide switches. Until those contracts exist in code, use the normative Clearing System design and do not invent route-local implementations.

    The same boundary applies to book vocabulary such as Allures, Roots, Connections, Canopy, and Arrival. A specialized v9 behavior may exist under a particular subsystem, but the concept does not become a general authoring or runtime primitive until a release deliberately defines its schema, validator, renderer, compatibility policy, and tests.

  7. Navigation is not a publishing field

    Trailheads and Trailmaps cross canonical work without becoming additional publishing fields. A Trailhead extension should enter through the v2 semantic journey model or the v1 compatibility boundary it actually changes. A Trailmap extension should enter through graph model, validation, projection, or Explorer interaction. Do not add trailhead or trailmap branches to Story, Journal, Viewgraph, or Grove field switches merely to reuse layout or routing behavior.

  8. Circulation is not a publishing field

    Resonance extends audience relationship across canonical objects; it does not become another field adapter or a destination for copied editorial content. A Trailhead extension should enter through Trailhead source/model/projection, a relationship extension through Follow, and a journey-measurement extension through the bounded signal grammar rather than by adding resonance to every field switch statement.

Recipe — Add A Story Motif

  1. 01 Shape

    Write down the semantic job first, then the smallest authoring shape that can express it: fields, item cardinality, child grammar, optionality, and any meaningful treatment values. If the shape is already representable through an existing motif, stop here and reuse it.

  2. 02 Register

    Add the public name and summary to the Story vocabulary owned by the render layer. Registration should make the capability discoverable to normalization, documentation generation, and coverage checks rather than relying on a renderer that only happens to recognize a special case.

  3. 03 Validate

    Add validation only for structural conditions that a renderer cannot safely or meaningfully recover from: missing required fields, impossible counts, invalid references, or unsupported enumerated values. Do not turn aesthetic preference into a build failure.

  4. 04 Render

    Reuse the generic block path whenever the shape is ordinary. Add a dedicated component only when real structure or interaction requires one, and style it through stable motif/treatment hooks rather than a content title, route slug, or one-off page selector.

  5. 05 Cover

    Add a minimal fixture, a live Field Manual specimen or canonical gallery example, and the appropriate coverage entry. Coverage should prove that the registered capability is both documented and actually renderable through the production path.

  6. 06 Prove

    Regenerate derived vocabulary when applicable, then run the full content, test, type, and build chain. An extension is not complete because the new page looks right locally; it is complete when the registries, validators, renderers, documentation, fixtures, and build all agree on the new contract.

Recipe — Add A Chart Family

A chart family crosses more boundaries than a visual motif because type semantics, validation, geometry, interaction, field permission, canonical data, and gallery coverage must stay aligned. The sequence below is therefore a useful dependency order rather than a suggestion to scatter chart behavior across unrelated modules.

Figure 1

Rendering diagram…

StepResponsibility
Register the familydeclare the chart type and type-specific authored fields in the chart model
Validate semanticsenforce required dimensions, numeric expectations, accessibility, and density guidance
Draw the familyimplement geometry in the shared D3 chart layer rather than in a field-specific renderer
Declare interactionstate which interaction modes the family can support without distortion
Gate by fieldnarrow interaction or treatment where a host field's editorial contract requires it
Cover itadd the family to the canonical gallery and its exhaustiveness/regression tests

Extension Recipes, In Full

Answer every question before adding anything

A new motif in the Grove field's own registry — only when no existing Grove motif already expresses the structure.

A Story- or Grove-rendered surface that must remain legible and semantically identical on both supported Grounds.

A new structural check for an existing motif, field, or shared model.

A new frame render, layout, primitive, or presentation behavior in the Viewgraph vocabulary.

A new infrastructure strategy for resolving a logical dataset reference into rows for the shared chart engine.

A change to v2 Encounter roles, cardinality, transitions, routes, relationships, target semantics, Trailmap bridge, or compatible rendering hints; v1 changes remain isolated to their circulation compatibility lane.

A change to Trailmap regions, node ontology, edge kinds/relations, Trails, Horizons, provenance, projection hints, Waymarker interaction, or Trailhead bridge semantics.

A different AsciiMath implementation, a wider MathML allowlist, or a new content surface adopting `{{math: ...}}` / `:::math`.

A new bounded journey event, or a versioned change to what engagement or Return means.

A transport adapter behind Musewoods-owned consent, Follow, Trailhead, suppression, and send semantics.

Anti-Patterns

  1. Parallel field engines

    A shared semantic responsibility should not grow one behavior engine per field. Fields can adapt presentation and permission, but copied logic creates drift in validation, interaction, accessibility, and future maintenance.

  2. Authored pixel geometry

    Margins, coordinates, callback code, and chart geometry belong to renderers. Authors may choose bounded semantic treatments such as wide; they should not become layout programmers inside Markdown.

  3. Hard-coded field color

    Shared components should consume semantic Palette or host tokens. A route name or literal field color embedded in component logic is a coupling defect.

  4. Direct chart fetches

    Charts ask the data-resolution layer for rows through a logical reference. Authored analytical content should not couple itself to infrastructure topology or duplicate data-fetch policy.

  5. Global Ground leakage

    Story and Grove Ground belong at their bounded page/shell roots. Embedded Viewgraph frames and unrelated Musewoods surfaces should retain their own canonical token contracts rather than inheriting a local Ground accidentally.

  6. Separate dark-mode components

    Forest Floor is a governed re-toning of one semantic surface contract, not a second component tree. Forking component structure for appearance guarantees behavior drift later.

  7. Parser bypass

    Every public authored shape should enter through a registered model and validation boundary. Silent acceptance is especially dangerous because it turns implementation accidents into undocumented authoring contracts.

  8. Clearing as field number five

    Do not add Clearing to publishing-field navigation, field manifests, or field-wide switches. Do not create a parallel canonical content model merely to host context that belongs to Stories, Journals, Viewgraphs, or Groves. Clearing is a semantic system layer; when it needs a durable human-facing place, project it through a Grove rather than redefining the field architecture.

  9. Trailmap as a visual sitemap

    Do not create a graph whose only semantic content is page titles connected by lines, and do not make a Waymarker click an automatic exit to another page. A Venture Trailmap must represent innovation topology and should first deepen a selected Waymarker inside the field through Glimpse/Encounter Lens context.

  10. Resonance as field number five

    Do not add Resonance to publishing-field navigation, field manifests, motif adapters, or field-wide switches simply to reuse field infrastructure. It is a cross-field system layer whose content plane references canonical objects.

  11. Provider-owned audience semantics

    A mail vendor may transport a rendered edition and normalize delivery feedback; it must not become the source of truth for Follow, consent, attribution, Trailhead structure, or suppression policy. Those remain Musewoods semantics.

  12. Generic analytics event sprawl

    Do not turn /api/resonance/events into an open collection endpoint or invent route-local event names. The bounded event grammar and versioned engagement / Return policies exist specifically to keep journey signals interpretable and identity-separated.