Core foundation

Initial Patch

v0.1.1 is the first bus-gx patch. It is only the deterministic render tree, with enough structure to represent safe static HTML and prove the renderer contract:

  1. Node
  2. Shared interfaces
  3. VNode
  4. Text
  5. Element
  6. Fragment
  7. Props

Shared interfaces define how Go values become normalized VNode trees and deterministic HTML. Text always escapes. Element accepts lowercase HTML-compatible names from the Element allowlist. Fragment groups children without adding output. Props serializes attributes in stable order and rejects unsafe names and values. VNode is the shared immutable node shape passed to renderers and tests.

Ownership

bus-gx owns the low-level Core in this patch: nodes, props, escaped text, safe lowercase elements, fragments, validation, deterministic rendering, and tests for those contracts. This patch does not initialize bus-ui, a portal host, product feature modules, providers, controller code, browser behavior, or library components.

Provider/API modules own authorization, persistence, validation, and domain operations. Product feature modules own screen-ready labels, permissions display, disabled reasons, selected-row state, safe links, workflow copy, and other product-specific view-model projection. Reusable low-level behavior only moves into bus-gx when it is needed to build framework pieces across products.

Module Initialization

This version initializes the bus-gx submodule as Go library code, not as a CLI tool. The module should contain normal BusDK Go development infrastructure: go.mod, a module Makefile, package tests, formatting and lint targets, a short README.md, and a PLAN.md that tracks the next implementation work.

The public library package is pkg/gx. It defines the data structures, shared interfaces, constructors, validation, and deterministic HTML rendering needed by the pages in this version. The package API should be small enough that bus-ui can import it to build higher-level components without depending on any command-line tooling.

Core node acceptance defines the concrete module files and checks that prove this patch.

No bus gx command is required in this version. Source parsing, .gx files, bus gx fmt, bus gx lint, compilation, component calls, composition, controllers, events, lifecycle hooks, browser hydration, and generated Go output are outside this version. The module still has ordinary Go formatting and lint targets for the library code initialized in this patch.

Composition Rule

Code in this iteration should stay limited to nodes, props, escaped text, safe elements, fragments, deterministic rendering, and focused tests for those contracts.