spec_driven_docs/services/
budget.rs1use camino::Utf8Path;
10
11use crate::domain::debt::Measurement;
12use crate::domain::gate_id::GateId;
13use crate::error::AppError;
14use crate::gates::GateCtx;
15
16use crate::domain::debt::BUDGET_GATES;
17
18pub fn measure_gate(root: &Utf8Path, id: GateId) -> Result<Vec<Measurement>, AppError> {
24 let ctx: GateCtx = crate::commands::gate::context_at(root, id)?;
25 let measured = match id {
26 GateId::AdrWordCap => crate::gates::adr_word_cap::measure(&ctx),
27 GateId::AgentsDigestSize => crate::gates::agents_digest_size::measure(&ctx),
28 GateId::ChapterSizeCap => crate::gates::chapter_size_cap::measure(&ctx),
29 GateId::SpecSizeCap => crate::gates::spec_size_cap::measure(&ctx),
30 _ => Ok(Vec::new()),
31 };
32 Ok(measured?)
33}
34
35pub fn measure_all(root: &Utf8Path) -> Result<Vec<Measurement>, AppError> {
41 let mut all = Vec::new();
42 for id in BUDGET_GATES {
43 all.extend(measure_gate(root, *id)?);
44 }
45 Ok(all)
46}