8 Commits
Author SHA1 Message Date
glm-5.3-flash a7ebd28303 docs(api): compile-checked usage doctests in the crate docs
Two examples: the String sink with an assertion-golden, and the write
sink. They run in cargo test and mirror the README usage block.
2026-11-07 06:07:28 +00:00
glm-5.3-flash 4f1722145a refactor(api): mark the public Error enum non-exhaustive for the 0.1.0 freeze
The documented evolution policy is additive (the context-build error
arm lands with the first engine-owned template set); non-exhaustive-
ness keeps that addition non-breaking for downstream match sites.
Decided in the wave-3 freeze inventory (review-wave-1 reminder (a)).
No behavior change: in-crate matching is unaffected.
2026-11-07 06:07:28 +00:00
glm-5.3-flash e361b4181a feat(render): add the TemplateSet render entry point (both sinks, deterministic, strict)
- public TemplateSet::render (String sink) and
  TemplateSet::render_to_write (io::Write sink), synchronous and
  deterministic, both surfacing the wave-1 Error enum
- render-name rule enforced behaviorally: the entry resolves names
  against the set-level bookkeeping before the substrate is
  consulted, so a partial's name or an unknown name is a typed
  Error::Render (substrate TemplateNotFound reason), never a
  rendered partial
- strict-mode missing variable is a typed error in both sinks,
  never silently-empty output; the write sink's streaming
  (non-atomic) semantics on mid-render failure documented
- determinism pinned by tests: byte-identical repeated renders,
  byte-identical output across registry rebuilds in opposite
  registration order, and byte-for-byte agreement between sinks

Verification: cargo test (19 passed), cargo clippy --all-targets
-- -D warnings, cargo fmt --check, cargo doc --no-deps, and
cargo build --target wasm32-unknown-unknown --release all green.
2026-11-06 20:01:57 +00:00
glm-5.3-flash 22f32e6fc5 feat(registry): the set builder per ADR-002/005/008
- TemplateSet: one strict handlebars registry per template set; strict
  mode forced at construction, unparameterizable; enforcement test pins
  missing-variable renders as Error::Render, never empty output
- EscapePolicy::{Html, NoOp}: explicit per-set escaper choice; Html
  leaves the substrate default html_escape, NoOp registers
  handlebars::no_escape; both postures pinned by golden render tests
- typed fallible registration of templates and partials; malformed
  text is Error::Registration, never a panic; failed registration
  leaves bookkeeping untouched
- set-level bookkeeping of template vs partial names (decision 1,
  flagged for the gate): the substrate's register_partial is identical
  to template registration, so the render-name rule cannot delegate to
  it; TemplateSet::is_template exposes the tracking for the
  w1-render-entry rejection
- per-set helper registration seam; zero custom helpers by default,
  pinned by test (unknown helper is a typed render error)
- naming conveventions enforced by tests only, not at registration
  (decision 2, flagged for the gate): consumer-facing engine API
  stays naming-neutral per ADR-001/008

Verification: cargo test (15 pass), clippy -D warnings, fmt --check,
wasm32-unknown-unknown release build

Verification: cargo test (15 pass), clippy --all-targets -D warnings, cargo fmt --check, wasm32-unknown-unknown --release
2026-11-06 19:59:19 +00:00
glm-5.3-flash 02037c4f10 feat(error): the public error enum per core.md error model
- src/error.rs: pub enum Error via thiserror with Registration
  (#[from] TemplateError) and Render (#[from] RenderError) variants;
  substrate errors stay reachable through the source chain
- src/lib.rs re-exports alkgen::Error per convention 10
- six unit tests pin variant mapping, source-chain reachability, and
  operation-naming Display strings
- no catch-all; no context-build arm in this scope (recorded
  interpretation, flagged for the wave-1 gate)

Verification: cargo test, clippy -D warnings, fmt --check, cargo doc,
wasm32-unknown-unknown release build, taskgraph validate (14 tasks)
all green
2026-11-06 19:54:47 +00:00
glm-5.3-flash c678615f2d build(manifest): dep posture per ADR-002/009; drop alktype; declare bast-codegen
- pin handlebars = "6.4" on default features; tree verified free of walkdir and rhai
- remove alktype from deps: no consuming code in v0.1.0, so an optional
  entry would be a dead feature; re-add lands with bast-rust-codecs as
  bast-codegen = ["dep:alktype"] (flagged for the wave-1 gate)
- declare [features] bast-codegen = [] (name reserved per ADR-009, gates nothing)
- package metadata to the text-generation framing (ADR-001): description,
  keywords, and the src/lib.rs crate doc; version stays 0.1.0

Verified: cargo test, clippy -D warnings, fmt --check,
wasm32 release build, taskgraph validate, dep-tree inspection
2026-11-06 19:51:04 +00:00
glm-5.3-flash 5e5c54a869 docs(phase0): record 2026-11-06 unpause for alkforge SSR; adopt no-em-dash convention
- AGENTS.md: adopt alkssh conventions (conventional commits, small
  focused commits, taskgraph section, lifecycle status, verification
  grep gate); add convention 12 (no em dashes in prose, U+2014)
- README.md: note the unpaused status and the alkforge SSR consumer
- phase-0.md: alkforge SSR enters as branch 0 (in-library HTML
  rendering, two target classes bound the core generality), new
  OQ-GN-09 for the SSR library posture, unpause context section,
  alktype 0.4.0 revalidation notes
- reader-poc-summary.md: re-validation note for alktype 0.4.0
  (parity + bench unchanged); em dashes restructured repo-wide
2026-11-06 06:05:15 +00:00
glm-5.3-flash 3178621adb init: repo skeleton — cargo crate, AGENTS.md, gitignore, licenses
- Cargo.toml: alkgen 0.1.0, deps alktype 0.3.0 + handlebars 6.4 + serde_json
  (preserve_order) + thiserror; empty lib
- AGENTS.md: family-style conventions (wasm-clean, strict templates,
  template-is-code, generated-code hygiene) + reference map
- verified: cargo check/clippy/fmt, wasm32-unknown-unknown release build
2026-09-08 08:27:03 +00:00