- 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
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'sdefault = []posture meansdir_sourceandscript_helperare off-limits (filesystem, rhai; ADR-002 decision 4, ADR-003) and must stay un-enabled: verify nowalkdir/rhaienters the dependency tree (cargo tree), rather than assuming it. serde+serde_jsonwithpreserve_orderstays 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 thebast-codegenfeature, and no engine-owned template set ships in v0.1.0 (the bast-rust-codecs activation is queued behind ssr-html and wgsl-jit; seedocs/plans/implementation.mdscope 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
handlebarspinned6.4;cargo treeshows nowalkdirand norhai(off-limits features provably not pulled in)alktypeabsent from the dependency tree;bast-codegendeclared under[features]gating nothing- package description/keywords updated to the text-generation framing; version still 0.1.0
cargo build --target wasm32-unknown-unknown --releasepasses on the landed dep set (ADR-003 validation posture)cargo test,cargo clippy --all-targets -- -D warnings,cargo fmt --check,taskgraph validatepass
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 implicitalktypefeature (or abast-codegenalias to nothing) is the same dead entry with more moving parts. The re-add lands with the bast-rust-codecs template set asbast-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 zerowalkdirand zerorhaihits, sodir_sourceandscript_helperare provably not pulled in (ADR-002 decision 4, ADR-003).alktyperemoved from[dependencies]entirely, matching the interpretation in the Notes: with no consuming code, anoptional = trueentry or abast-codegenalias to nothing is the same dead entry with more moving parts. The re-add lands with the bast-rust-codecs set asbast-codegen = ["dep:alktype"](flagged for the wave-1 gate to confirm against ADR-009 item 4).[features]declaresbast-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 insrc/lib.rsupdated to match. Version stays0.1.0(the publish task verifies, never bumps). serde+serde_jsonwithpreserve_orderandthiserror = "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.