feat(budget): Safe-to-Spend / живой конверт (ADR-007) - #61
Merged
Conversation
…нверт Новый read-only skill safe_to_spend (ADR-007): по приходу из сообщения и горизонту (по умолчанию 2 недели) детерминированно считает свободный остаток после обязательств и разбивку ожидаемых переменных трат по категориям — приход НЕ пишется в ledger. LLM только нарратив/советы, числа считаются в Go. - Store: GetPeriodSnapshot (произвольный период, chat-scoped), GetRegularMonthlyIncomeAvg (чистый якорь без разовых), planned_expense и envelope CRUD, миграции 00015/00016. - budget actions add_planned_expense, start_envelope; режим остатка по конверту (остаток производный из фактических трат, не хранится). - Доменные помощники budget: ResolveHorizon, ToTHB, классификация категорий (consumption / variable-daily / one-off income) — единый источник. - Вывод: вердикт-first (можно/нельзя отложить), явный курс, раскрытые плановые.
… реплика - internal/appwiring: переиспользуемая сборка registry+Service (вынесено из cmd/app). - cmd/botclient + internal/botclient: read-only клиент к agent.Service в обход Telegram; write-safety на уровне БД-роли (--allow-writes + отдельный URL). - scripts/refresh-replica.sh + launchd: почасовой graceful рефреш локальной read-only реплики боевой БД (прод не мутируется, только pg_dump). - evals: golden-кейсы роутинга safe_to_spend/add_planned_expense/start_envelope, clarity-бенчмарк подачи.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что
Safe-to-Spend (ADR-007): по приходу денег из сообщения и горизонту бот показывает
сколько реально свободно после известных обязательств и на что уйдут
повседневные траты — чтобы можно было решить, сколько отложить/где сэкономить.
Флоу
пришло 127000, сколько свободно за 2 недели?→ вердикт (можно/нельзя отложить),раскладка (обязательные / запланированные покупки / повседневные по статистике с
разбивкой по категориям), советы по экономии.
запомни приход 127000 на 2 недели→ живой конверт; позжесколько осталось?—остаток пересчитывается по фактическим тратам (не хранится).
Ключевые решения
пришло Xуходило вadd_income).источников; fixed-категории (аренда/подписки) вне прогноза «переменных».
Состав
internal/skills/safetospend/— новый read-only reasoning-plugin.internal/budget/— период-агрегация, planned_expense, envelope, доменныепомощники (ResolveHorizon, ToTHB, классификация категорий).
00015_budget_planned_expense,00016_budget_envelope.budgetactions:add_planned_expense,start_envelope.internal/appwiring+cmd/botclient— прямой тест-клиент к ядру бота.scripts/refresh-replica.sh, launchd) для оффлайн-прогонов.Проверки
go build ./..., весьgo test ./...— зелёные (юнит + integration на реплике).golangci-lint run ./...— 0 issues.chat-scope изоляция, denylist категорий, недвойной учёт).
Заметки