Skip to content

feat(domain-service): refactor for unlock rules + new methods #29

@tomiloki

Description

@tomiloki

Context

Phase 5 del re-design. Refactor pesado del domain service: nuevas signatures sin puntos, nuevos métodos para reemplazar items y registrar acciones espontáneas, replan automático en check-ins.

Spec & Plan

  • Spec: `docs/superpowers/specs/2026-05-08-habitquest-reimagination-design.md` (secciones 3.8, 4.2, 4.3)
  • Plan: `docs/superpowers/plans/2026-05-08-habitquest-reimagination.md` (Phase 5)

Refactor existing

  • `getTodaySummary` → devuelve `{ menu, rewards: RewardWithStatus[], recentCheckIn, agentSummary }`. Sin `availablePoints`.
  • `redeemReward` → usa `evaluateReward`, escribe en `reward_redemptions` (no `wallet_transactions`)
  • `completePlanItem` → sin awarding de puntos, devuelve `RewardStatus[]` actualizado

New methods

  • `replaceMenuItem(planItemId, reason?)` — marca viejo como `replaced`, inserta nuevo en misma posición
  • `logSpontaneousAction({category, name?, durationMinutes?})` — Completion con `daily_plan_item_id = null`
  • `updateRewardRule({rewardId, profileId, rule})` — UPDATE rewards.unlock_rule
  • Replan interno en `logCheckIn` cuando `intent in [fatigue, replan, time_short]`

Tests integración

  • `tests/reward-redemption.integration.test.ts`
  • `tests/menu-replace.integration.test.ts`
  • `tests/spontaneous-action.integration.test.ts`

Acceptance

`npm run test:supabase` pasa con los tests nuevos. RLS validado.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions