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
Each consultation is attributable, and independence is counted by a defined source. Peer critique reviews the evidence. A spent budget decides locally and says so, and consultation usage is economics data with its class. The pack's routing levels are documented as the existing plan outcomes. Hook closures are checked to reach no model. Reuse holds only while its evidence holds, and a poisoned answer stays data.
BLOCKED 0 of 9 issues done
- ready
- 0
- blocked
- 9
- active
- 0
- verify
- 0
- done
- 0
- cancelled
- 0
Problem
majordomus reasoning plans, consults, records and settles disagreement by experiment, but six gaps remain. A consultation records no model (apps/majordomus-cli/src/reasoning/record.rs:414-460). Selection counts one adapter as one source (policy.rs:355-358) while the conclusion counts distinct advisor ids (store.rs:789-793), so two peers through the one mesh-review adapter count as two independent reviews. A mesh peer is asked a subject line without the evidence (scripts/lib/advisors/mesh-review.mjs:31-35). Reuse has no validity window (store.rs:446-497). The only budget is an advisor count (policy.rs:341), and advisor usage never reaches economics. Nothing refuses a hook path that reaches a model.
Outcome
Each consultation is attributable, and independence is counted by a defined source. Peer critique reviews the evidence. A spent budget decides locally and says so, and consultation usage is economics data with its class. The pack's routing levels are documented as the existing plan outcomes. Hook closures are checked to reach no model. Reuse holds only while its evidence holds, and a poisoned answer stays data.
Current state
Verified by code and tests: six reasoning capabilities (capability/builtin/reasoning.rs:563-668); zero advisors in CI; offline and local fallback; circuit breaker, timeout and rate limit; disagreement settled by evidence (cases 730-736). Also verified: mesh trust, partition conflict, reconnect and expiry (mesh_cooperation.rs:474,494,716; mesh/state.rs:962).
Desired state
I3418 to I3426 have landed as nine pull requests that extend the reasoning, advisor transport and economics files, with no new store, setting tree, noun or peer identity.
Scope
- apps/majordomus-cli/src/reasoning/policy.rs
- apps/majordomus-cli/src/reasoning/record.rs
- apps/majordomus-cli/src/reasoning/store.rs
- apps/majordomus-cli/src/reasoning/state.rs
- apps/majordomus-cli/src/reasoning/check.rs
- apps/majordomus-cli/src/capability/builtin/reasoning.rs
- apps/majordomus-cli/src/capability/builtin/economics.rs
- apps/majordomus-cli/src/economics/model.rs
- apps/majordomus-cli/src/economics/report.rs
- apps/majordomus-cli/tests/economics.rs
- apps/majordomus-cli/tests/reasoning_mesh.rs
- scripts/advisor-consult
- scripts/lib/advisors/contract.mjs
- scripts/lib/advisors/contract.test.mjs
- scripts/lib/advisors/mesh-review.mjs
- scripts/lib/advisors/ollama-chat.mjs
- scripts/lib/advisors/lmstudio-chat.mjs
- scripts/lib/advisors/openai-chat.mjs
- docs/REASONING.md
- docs/ECONOMICS.md
Out of scope
- Running or observing local models (the local-inference work, unmerged on feature/a-local-runtime-is-observed)
- A tier field or any other new noun (rule project.no-new-nouns)
- Mesh work assignment (I3198, I3199)
- Provider session usage and price lists (declared by I3292 and I3295; this milestone only reads them)
- Replacing the mesh-review poll with the pushed channel (unmerged on feature/the-blackboard-is-pushed)
- Fairness scheduling across tasks without measured contention
Acceptance criteria
- The six reasoning criteria of the intent are rewritten to evidence: test
- majordomus reasoning check is clean on this repository, and cases 730 to 736 pass with their intent unchanged
- No advisor, model or vendor literal enters the provider-independent reasoning files
Validation
- majordomus plan validate
Risks
- I3421 waits on I3295 and I3422 on I3292; I3424, I3426, I3418, I3419, I3423, I3425 and I3420 land first
- feature/a-local-runtime-is-observed touches no file under apps/majordomus-cli/src/reasoning or scripts/lib/advisors. It changes models/mod.rs (models.route), models/observed.rs, builtin/models.rs and scripts/lib/inference. I3423's mapping must name models.route's choice as it stands when I3423 lands, and I3424's transport pattern names scripts/lib/inference for when that directory lands
- Records already stored carry no model or session; I3418 reads them as absent with a reason and never rewrites them
Issues
Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.
| issue | status | wave | depends on | title |
|---|---|---|---|---|
| I3418 | BLOCKED | 1 | I3426 | Every advisor consultation records the model that answered, the source it came through and the session that asked |
| I3419 | BLOCKED | 2 | I3418 | A conclusion's independent review count counts distinct sources, defined as adapter plus recorded model, so two answers from one source are one review |
| I3420 | BLOCKED | 2 | I3418 | A mesh peer asked for critique receives the question and its evidence, and its answer is recorded with the session that gave it |
| I3421 | BLOCKED | 5 | I3295, I3425 | A reasoning plan over the task's declared token or time budget consults nobody and says that the budget decided |
| I3422 | BLOCKED | 6 | I3418, I3421, I3292 | Advisor consultations are economics usage with their measurement class, and a consultation over its plan's budget is a finding |
| I3423 | BLOCKED | 3 | I3419 | docs/REASONING.md maps the pack's routing levels onto the existing plan outcomes and modes, and a test fails when an outcome is missing from that mapping |
| I3424 | BLOCKED | 0 | — | No inference transport is reachable from the shell closure of any declared hook command, and reasoning check refuses one that is |
| I3425 | BLOCKED | 4 | I3423 | A standing conclusion is reused only while the files it cites are unchanged since it was recorded |
| I3426 | BLOCKED | 0 | — | An advisor answer carrying instructions or record-shaped fields is kept as bounded text and changes no record |
The graph
flowchart LR
I3418["I3418<br/>Every advisor consultation records the model that answered, the source it came through and the session that asked"]:::blocked
I3419["I3419<br/>A conclusion's independent review count counts distinct sources, defined as adapter plus recorded model, so two answers from one source are one review"]:::blocked
I3420["I3420<br/>A mesh peer asked for critique receives the question and its evidence, and its answer is recorded with the session that gave it"]:::blocked
I3421["I3421<br/>A reasoning plan over the task's declared token or time budget consults nobody and says that the budget decided"]:::blocked
I3422["I3422<br/>Advisor consultations are economics usage with their measurement class, and a consultation over its plan's budget is a finding"]:::blocked
I3423["I3423<br/>docs/REASONING.md maps the pack's routing levels onto the existing plan outcomes and modes, and a test fails when an outcome is missing from that mapping"]:::blocked
I3424["I3424<br/>No inference transport is reachable from the shell closure of any declared hook command, and reasoning check refuses one that is"]:::blocked
I3425["I3425<br/>A standing conclusion is reused only while the files it cites are unchanged since it was recorded"]:::blocked
I3426["I3426<br/>An advisor answer carrying instructions or record-shaped fields is kept as bounded text and changes no record"]:::blocked
I3418 --> I3419
I3418 --> I3420
I3418 --> I3422
I3419 --> I3423
I3421 --> I3422
I3423 --> I3425
I3425 --> I3421
I3426 --> I3418
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxLinked from this diagram (9)
- I3418 Every advisor consultation records the model that answered, the source it came through and the session that asked
- I3419 A conclusion's independent review count counts distinct sources, defined as adapter plus recorded model, so two answers from one source are one review
- I3420 A mesh peer asked for critique receives the question and its evidence, and its answer is recorded with the session that gave it
- I3421 A reasoning plan over the task's declared token or time budget consults nobody and says that the budget decided
- I3422 Advisor consultations are economics usage with their measurement class, and a consultation over its plan's budget is a finding
- I3423 docs/REASONING.md maps the pack's routing levels onto the existing plan outcomes and modes, and a test fails when an outcome is missing from that mapping
- I3424 No inference transport is reachable from the shell closure of any declared hook command, and reasoning check refuses one that is
- I3425 A standing conclusion is reused only while the files it cites are unchanged since it was recorded
- I3426 An advisor answer carrying instructions or record-shaped fields is kept as bounded text and changes no record
Canonical record: .ai/repo/project/milestones/an-inference-names-its-source-and-budget.yaml. Read it back with majordomus plan show an-inference-names-its-source-and-budget.