Files
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

5.2 KiB

id, name, status, depends_on, scope, risk, impact, level
id name status depends_on scope risk impact level
w1-manifest Wave 1: manifest landing (dep pins, alktype removal, feature graph) completed
single low project implementation

Description

Land the dependency posture everything else in the crate builds inside. This is the ADR-002/ADR-009 manifest landing; no other wave-1 task starts before it.

  • Pin the substrate: handlebars = "6.4" from crates.io on the substrate's default features. The crate's default = [] posture means dir_source and script_helper are off-limits (filesystem, rhai; ADR-002 decision 4, ADR-003) and must stay un-enabled: verify no walkdir / rhai enters the dependency tree (cargo tree), rather than assuming it.
  • serde + serde_json with preserve_order stays as is (load-bearing, AGENTS.md convention 5), thiserror = "2" for the error model task.
  • Remove alktype from [dependencies]: it is listed unconditionally on main today, but ADR-009 decision 1 ships it only behind the bast-codegen feature, and no engine-owned template set ships in v0.1.0 (the bast-rust-codecs activation is queued behind ssr-html and wgsl-jit; see docs/plans/implementation.md scope authority). A dep behind a feature that gates nothing is a dead entry; the optional alktype dep and the feature's payload land together at the target's activation. This interpretation is recorded in the plan and flagged for the wave-1 gate.
  • Declare the feature graph: [features] bast-codegen = [] (name reserved per ADR-009; gates nothing yet; the first consuming code arrives with the bast-rust-codecs set, a future wave).
  • Update package metadata to the text-generation framing (ADR-001): the description and keywords currently read "codegen over BAST documents"; the crate's honest v0.1.0 description covers the text engine. Keep version = "0.1.0" (the publish task verifies, never bumps).

Acceptance Criteria

  • handlebars pinned 6.4; cargo tree shows no walkdir and no rhai (off-limits features provably not pulled in)
  • alktype absent from the dependency tree; bast-codegen declared under [features] gating nothing
  • package description/keywords updated to the text-generation framing; version still 0.1.0
  • cargo build --target wasm32-unknown-unknown --release passes on the landed dep set (ADR-003 validation posture)
  • cargo test, cargo clippy --all-targets -- -D warnings, cargo fmt --check, taskgraph validate pass

References

  • docs/plans/implementation.md (scope authority; the alktype interpretation)
  • docs/architecture/overview.md §Dependencies
  • docs/architecture/decisions/002-handlebars-substrate-strict-mode.md
  • docs/architecture/decisions/003-core-posture-sync-wasm-deterministic.md
  • docs/architecture/decisions/009-feature-gated-template-sets.md (especially decision 1 and item 4)
  • docs/architecture/decisions/010-library-only-no-cli.md

Notes

Design: the task removes alktype rather than leaving it behind optional = true: with no consuming code, optional = true + an auto-created implicit alktype feature (or a bast-codegen alias to nothing) is the same dead entry with more moving parts. The re-add lands with the bast-rust-codecs template set as bast-codegen = ["dep:alktype"]. Flagged for the wave-1 gate to confirm against ADR-009 item 4.

Summary

Agent fills this on completion.

Landed 2026-11-06. Cargo.toml is the ADR-002/ADR-009 posture:

  • handlebars = "6.4" from crates.io on the substrate's default features (resolves to 6.4.4); no extra features enabled. cargo tree (also with -e features) shows zero walkdir and zero rhai hits, so dir_source and script_helper are provably not pulled in (ADR-002 decision 4, ADR-003).
  • alktype removed from [dependencies] entirely, matching the interpretation in the Notes: with no consuming code, an optional = true entry or a bast-codegen alias to nothing is the same dead entry with more moving parts. The re-add lands with the bast-rust-codecs set as bast-codegen = ["dep:alktype"] (flagged for the wave-1 gate to confirm against ADR-009 item 4).
  • [features] declares bast-codegen = [] (name reserved per ADR-009; gates nothing; first consuming code arrives with bast-rust-codecs). default = [] unchanged.
  • Package metadata moved to the text-generation framing (ADR-001): description now reads "Text-generation engine: handlebars-rust templates rendered over serde-serializable contexts with strict, deterministic output, for HTML SSR, codegen, and WGSL artifacts"; keywords are handlebars, templates, text-generation, templating, html (the BAST/alktype/codegen keywords go). The crate-level doc line in src/lib.rs updated to match. Version stays 0.1.0 (the publish task verifies, never bumps).
  • serde + serde_json with preserve_order and thiserror = "2" unchanged (convention 5; the error model task's base).

Verification on the landed dep set: cargo test, cargo clippy --all-targets -- -D warnings, cargo fmt --check, cargo build --target wasm32-unknown-unknown --release, taskgraph validate (14 tasks valid), and the tree inspection above, all green.