[package] name = "jouleclaw-corpus" version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true authors.workspace = true description = "Receipts → training corpus. Projects sealed JouleClaw receipts into the labelled (embedding, stage, success, cost_microjoules) rows an EOC router trainer consumes, turning the audit ledger into a supervision signal. Labels are derived from observed cascade closure — never invented; receipts whose closing tier has no EOC analogue are skipped and counted, not guessed." [dependencies] jouleclaw-prov = { path = "../jouleclaw-prov" } jouleclaw-energy = { path = "../jouleclaw-energy" } jouleclaw-intent = { path = "../jouleclaw-intent" } serde = { workspace = true } serde_json = { workspace = true } thiserror = { workspace = true } # Real semantic embedder, opt-in. Pulls candle + tokenizers + hf-hub, so it is # behind a feature: the default corpus build stays light and offline. See # `CandleTextEmbedder`. hf-hub + tokio are needed only by the semantic example # (loading the model is async and hits the hub); they ride the same feature so # the default build takes none of them. jouleclaw-embed-candle = { path = "../jouleclaw-embed-candle", optional = true } jouleclaw-hf-hub = { path = "../jouleclaw-hf-hub", optional = true } tokio = { workspace = true, optional = true } [features] default = [] candle = ["dep:jouleclaw-embed-candle", "dep:jouleclaw-hf-hub", "dep:tokio"] [[example]] name = "emit_corpus_semantic" required-features = ["candle"] [dev-dependencies] tempfile = { workspace = true }