3f14aae032
Second Tier-2 battery, plugging into run.Ports.Budget: - budget.go: skillexec's BudgetTracker / NoOpBudget / DBBudget moved clean (stdlib only). Check/Commit match run.Budget exactly (compile-time proof in run.go: NoOpBudget and *DBBudget are run.Budget). - storage.go: the BudgetStorage seam + SkillBudget domain, split out of mort's GORM file (the GORM impl stays in mort). - memory.go: NewMemory() — zero-dependency in-process BudgetStorage with the 7-day rolling-window rollover in Add. Tests: per-user cap enforced, window rolls over after 7 days, NoOp always allows. CI invariant: core imports ZERO from the budget battery. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
10 lines
224 B
Go
10 lines
224 B
Go
package budget
|
|
|
|
import "gitea.stevedudenhoeffer.com/steve/executus/run"
|
|
|
|
// The budget trackers plug directly into run.Ports.Budget (Check/Commit match).
|
|
var (
|
|
_ run.Budget = NoOpBudget{}
|
|
_ run.Budget = (*DBBudget)(nil)
|
|
)
|