I3667 — A run that would fall through to metered billing while a grant is held, or cross a declared cap, is told before it starts
Before the economics runner or an execution starts a model client, compare the route's source (I3662) with the owner's holdings and caps (I3661): tell the caller when the route would draw on a metered source while a credit grant is held, or when observed spend (I3666) already meets a declared cap, naming the source, the cap and the figure's class; refuse only where the repository policy declares refuse, through the same mechanism as I3295's over-budget telling.
CANCELLED wave 4 · p3 · implementation profile · parallel safe
Objective
Before the economics runner or an execution starts a model client, compare the route's source (I3662) with the owner's holdings and caps (I3661): tell the caller when the route would draw on a metered source while a credit grant is held, or when observed spend (I3666) already meets a declared cap, naming the source, the cap and the figure's class; refuse only where the repository policy declares refuse, through the same mechanism as I3295's over-budget telling.
Why
The point of claiming the grant is that agents run on it and not on the owner's card. Without a check before the run, a missing credential silently moves headless work onto metered billing; with no observed spend, a cap can only be judged on what was observed, never on an estimate.
Current state
Nothing checks funding before a run; I3295 plans over-budget telling for token budgets.
Desired state
Falling through to metered, or meeting a cap, is told before the run and refused only by declared policy.
Scope
- apps/majordomus-cli/src/economics
- apps/majordomus-cli/src/execution
- .ai/repo/policy.yaml
Dependencies
- I3662CANCELLED models.route names the funding source a route would draw on, as an inference with its basis, in the declared source order
- I3666CANCELLED Spend against a funding source is observed from a named vendor seam or recorded absent, and no balance is derived from a price
- I3295BLOCKED A task declared over its token budget is told so, and refused only where policy says refuse
Acceptance criteria
- A held grant with its credential unset and a metered credential set: the run is told it would draw on metered
- A cap with spend absent is reported as not judgeable, never as within the cap (test)
- With policy refuse, the run does not start and the refusal names the source and the cap
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test economics
Evidence required
- test_falling_through_to_metered_is_told
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Completion report
Cancelled 2026-10-21 on feature/intent-funding-sources by the plan's critique (finding metered-fallthrough-presupposes-separate-credentials): the credit grant and metered billing share ANTHROPIC_API_KEY, so a run 'falling through to metered' is not a state Majordomus can see, and with spend absent for an individual account a cap could only ever read not judgeable. Reopen with a per-source credential split or a spend seam, each with vendor evidence.
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/I3667.yaml. Read it back with majordomus plan show I3667.