Skip to content

I3421 — A reasoning plan over the task's declared token or time budget consults nobody and says that the budget decided

Make reasoning.plan read the per-profile token budget that I3295 declares in policy, and a wall-time cap for consultation. Count the task's reported consultation tokens against the budget. When it is spent, plan the structured local review with reason budget_exhausted, naming the budget, the figure and its class.

BLOCKED wave 5 · p2 · implementation profile · parallel safe

Part of an-inference-names-its-source-and-budget — Every inference a decision rests on names its model and source, stays inside a declared budget, counts independent sources rather than answers, and is never reached from a hook path.

Blocked. This issue cannot start until I3295, I3425, milestone:an-inference-names-its-source-and-budget are done. The status is derived from that, not declared.

Objective

Make reasoning.plan read the per-profile token budget that I3295 declares in policy, and a wall-time cap for consultation. Count the task's reported consultation tokens against the budget. When it is spent, plan the structured local review with reason budget_exhausted, naming the budget, the figure and its class.

Why

The owner's 2026-10-19 Cognitive Fabric pack asks for per-task caps in the existing policy surface and a visible local fallback (campaigns/prismatic-way-cognitive-fabric-prompt-pack/contracts/ECONOMICS.md). prompts/04_REASONING_MESH.md lists budgets for time, tokens and fanout.

Current state

The only reasoning budget is the advisor count by mode and materiality (apps/majordomus-cli/src/reasoning/policy.rs:341, 384-386). The per-consultation timeout is a transport flag that defaults to 90 s (scripts/advisor-consult:27). Reported tokens are totalled (state.rs:492-495) and compared with nothing, and .ai/repo/policy.yaml has no token budget.

Desired state

The plan carries the budget it read, the spent figure and its class (reported), and budget_exhausted when the budget is spent. With no budget declared, the plan says so and selects as today.

Scope

  • apps/majordomus-cli/src/reasoning/policy.rs
  • apps/majordomus-cli/src/reasoning/state.rs
  • apps/majordomus-cli/src/capability/builtin/reasoning.rs
  • docs/REASONING.md

Out of scope

  • Declaring the budget table (I3295)
  • Refusing work; the budget only withholds advisors
  • Cost in currency (I3292)

Dependencies

What waits on this

Acceptance criteria

  • A task whose reported consultation tokens reach the declared budget gets a plan that selects no advisor, with reason budget_exhausted and the figures
  • Without a declared budget, the plan says none is declared and selects as before
  • ci mode stays at zero advisors regardless of budget

Validation

  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib reasoning
  • bash test/run.sh 730_reasoning_works_with_no_advisor 733_advisor_failure_and_recovery

Evidence required

  • a_spent_budget_selects_nobody

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Timeline

started
—
verified
—
completed
—

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I3421.yaml. Read it back with majordomus plan show I3421.

Searches the titles and descriptions of every page this site publishes.