mirror of
https://github.com/computerim/impactflow-discovery.git
synced 2026-08-27 07:10:37 +00:00
Phase 3: coaching preferences + weekly check-in engine
Add coaching preferences (auto-derived from the profile, user-overridable) and a periodic check-in engine that quotes the person's own words and asks whether their direction still feels valid — mirror, not compass. - Preferences are deterministic: a documented triad mapping (gut → direct/ higher-friction, heart → warm/drift-sensitive, head → reflective/question-led) produces defaults for the six fields (coaching_frequency, coaching_style, misalignment_threshold, friction_tolerance, prefer_questions_over_directives, time_of_day_preference). PUT overrides; regenerate re-derives. - CheckinCoach (app/services/coaching.py): Anthropic-backed; writes a check-in that quotes the person's goals back and asks if the direction still holds. - Endpoints (app/routers/coaching.py): GET/PUT/regenerate preferences; GET/POST checkins; respond (records still_valid); admin POST /run is the weekly batch (due = cadence elapsed + locked profile), intended for a cron. - Models + migration 005: coaching_preferences (per user) and coaching_checkin. - Frontend: coaching.html (preferences form + check-in feed); linked from profile.html. Tests: 68 passing (added deterministic-preference unit tests and coaching endpoint/batch tests; run in-container). README updated for Phase 3. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -48,6 +48,20 @@ def test_profile_page_links_to_reflection():
|
||||
assert "/static/reflect.html" in html
|
||||
|
||||
|
||||
def test_coaching_page_uses_coaching_endpoints():
|
||||
"""Phase 3 coaching page drives preferences + check-ins via authedFetch."""
|
||||
html = Path("app/static/coaching.html").read_text(encoding="utf-8")
|
||||
assert "/discovery/coaching/preferences" in html
|
||||
assert "/discovery/coaching/checkins" in html
|
||||
assert "authedFetch" in html
|
||||
assert "user_id" not in html
|
||||
|
||||
|
||||
def test_profile_page_links_to_coaching():
|
||||
html = Path("app/static/profile.html").read_text(encoding="utf-8")
|
||||
assert "/static/coaching.html" in html
|
||||
|
||||
|
||||
def test_auth_helper_sends_credentials_and_refreshes():
|
||||
js = Path("app/static/auth.js").read_text(encoding="utf-8")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user