Skip to content

docs: frame hexol as a substrate; add oslo-config bootstrap example#2

Closed
polyedre wants to merge 1 commit into
ci-guixfrom
hexdocs-substrate-framing
Closed

docs: frame hexol as a substrate; add oslo-config bootstrap example#2
polyedre wants to merge 1 commit into
ci-guixfrom
hexdocs-substrate-framing

Conversation

@polyedre

@polyedre polyedre commented Jul 3, 2026

Copy link
Copy Markdown
Owner

Docs-only. Reframes hexol's "no oslo.config renderer / no OpenStack vocabulary" from a shortcoming into the intended design: you bootstrap a thin domain layer, and that's step one.

Framing added

  • README.md — new "The shape: an engine, plus a thin layer you write" section near the top, with a layering diagram (kernel/engine → generic renderers → your thin domain layer → your content). Points at the renders-with hook (hexol/kernel.scm:484) and define-construct.
  • docs/extending.md — new "hexol is a substrate — you bring the target" section with a worked bootstrap walkthrough of examples/oslo-config.scm.

New example (renders)

  • examples/oslo-config.scm (~90 lines) — full thin layer inline: an oslo.config INI renderer via renders-with, plus config-section and keystone-authtoken constructs. hexol render -o ini emits correct INI; tree/render (sexp) work for free.

Doc-bug fixes (docs ↔ repo consistency)

  • examples/regions.scm was referenced in docs/authoring.md but did not exist → created as the importable region module; examples/inventory.scm now imports it (render output byte-identical).
  • Removed the stale CMDB block from the authoring.md layout table (cmdb/ was deleted in the parent commit).

Verification

  • guix shell -m manifest.scm -- make test → all checks passed.
  • hexol render -o ini -i examples/oslo-config.scm → correct INI.
  • hexol render -i examples/inventory.scm → identical to pre-change baseline.

Make the core philosophy explicit and discoverable: hexol ships an engine,
and users are expected to bootstrap a thin domain layer (a renderer via
renders-with + constructs via define-construct) for their target. A prior
reviewer read 'no oslo.config renderer, no OpenStack vocabulary' as a
shortcoming because the docs never framed that thin-layer bootstrap as the
intended first step.

Framing added:
- README: new 'The shape' section near the top — the kernel -> generic
  renderers -> your thin domain layer -> your inventory layering, with the
  renders-with (kernel.scm:484) / define-construct hooks and sql.scm /
  ledger.scm / oslo-config.scm as minimal worked examples.
- docs/extending.md: new 'hexol is a substrate' section walking the
  oslo-config bootstrap (renderer + config-section/keystone-authtoken
  constructs) as the normal first step.

New example:
- examples/oslo-config.scm — the whole bootstrap in one file: an
  oslo.config INI renderer + a service vocabulary, ~40 lines. Renders via
  'hexol render -o ini'.

Doc-bug fixes (docs must match repo):
- examples/regions.scm was referenced but missing. Created it as the
  importable region-table module the docs describe; inventory.scm now
  imports it (render output unchanged).
- Dropped the authoring.md repository-layout block for the CMDB subsystem,
  deleted in the parent commit (cmdb/, bin/cmdb-server, docs/cmdb.md, …).

Docs-only: no library code or real target library changed. Tests pass;
inventory.scm and oslo-config.scm both render.
@polyedre polyedre closed this Jul 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant