Skip to main content

Habits V2

1. Preface

This brief explains the new ownership model for Habits.

It should be read together with the Workouts brief. The two briefs describe one connected system. The Habit model is hard to fully understand without understanding Workouts, and the Workout model depends on this Habit model.

The central idea is:

Habits are no longer simply selected or unselected.
Habits can be surfaced through bookmarks, Workouts, or direct completion.

This is important because NEO is not just a habit tracker. It is a multiplayer habit game.

The Habit system must support:

  • Bookmarked Habits View
  • All Habits View
  • Habits inside Workouts
  • Habit leaderboards
  • Category leaderboards
  • Workout leaderboards
  • future Challenges

2. Why We Are Choosing This Architecture

The current selected/unselected model is too rigid.

The new architecture solves three major problems.

2.1 Workouts need flexible Habit inclusion

With the old model, if a user wanted to add a Habit to a Workout, that Habit would first need to be selected into the main Habits page.

That defeats the purpose of Workouts.

Workouts are meant to reduce clutter. They are like folders. If a user has 30, 40, or 50 Habits, the main Habits page becomes overwhelming. Workouts let users group Habits without forcing every Habit to appear on the main screen.

So a Habit must be allowed to exist inside a Workout without being bookmarked as a standalone Habit.

2.2 Users should be able to try Habits without committing

The idea that a user must select or “own” a Habit before trying it creates psychological friction.

The better model is:

Open any Habit. Try it. Complete it. Bookmark it later if you want to keep it close.

This makes the product more playful and less rigid.

2.3 Challenges need flexible multiplayer coordination

The most important reason is future Challenges.

If we keep a rigid ownership model, players could only challenge each other in Habits and Workouts they both already selected/bookmarked.

That is too restrictive.

With the new model:

  • I can challenge someone to Pullups even if Pullups is not bookmarked for them.
  • I can challenge someone to a Workout even if that Workout is not bookmarked for them.
  • They can accept, play, and later decide whether they want to keep/bookmark it.

This creates more flexible and playful coordination between players.


3. Current Habit Model

Currently, Habits have two states:

Selected = user has the Habit
Unselected = user does not have the Habit

This is basically an ownership model.

The user selects Habits from a library, and selected Habits become “their Habits.”

We are replacing that.


4. No More Closed Library Model

The old model was:

user enters a library, selects Habits, exits, and now those selected Habits are the user’s Habits.

The new model is:

everything is the library.

The Habits page has two bookmark-based views:

Bookmarked Habits View
All Habits View

Bookmarked Habits View

This is the current equivalent of “my Habits.”

It shows the Habits the user has bookmarked.

All Habits View

This is the current equivalent of the library, except it also includes the user’s bookmarked Habits.

It shows the full universe of Habits.

The user can open and complete a Habit from either view.


5. Bookmark View Toggle

At the top of the Habits page, there should be a bookmark view toggle.

Filled bookmark icon

Means:

Bookmarked Habits View

Only bookmarked Habits are shown.

Outline / unfilled bookmark icon

Means:

All Habits View

All Habits are shown.

This toggle only changes the view.

It does not complete a Habit.

It does not create a score event.

It does not remove score.


6. New Habit Model

The new model has three important dimensions:

score state
bookmark state
bookmarked Workout inclusion state

Score state

active = score > 0
inactive = score = 0

Active/inactive is about score, not simply whether a PlayerHabit relationship exists.

Bookmark state

bookmarked = true
bookmarked = false

Bookmarking controls whether the Habit appears in Bookmarked Habits View.

Bookmarked Workout inclusion state

inWorkout = true
inWorkout = false

This indicates whether the Habit is inside one or more bookmarked Workouts for this player.

A Habit can be in a bookmarked Workout without being bookmarked as a standalone Habit.


7. Core Product Rule

The core rule is:

A PlayerHabit exists if the Habit is relevant to the player through score, bookmark, or bookmarked Workout inclusion.

A PlayerHabit should exist if any of these are true:

score > 0
bookmarked = true
inWorkout = true

A PlayerHabit should not exist only when all of these are true:

score = 0
bookmarked = false
inWorkout = false

That is the clean rule.


8. PlayerHabit Creation Routes

Previously, PlayerHabit was created when the user selected a Habit.

Now, PlayerHabit can be created through three routes.

Route 1 — Bookmarking a Habit

If the user bookmarks a Habit, create a PlayerHabit.

Initial state:

score = 0
bookmarked = true
inWorkout = false unless already in a bookmarked Workout

The Habit appears in Bookmarked Habits View.

Route 2 — Completing a Habit

If the user completes a Habit without bookmarking it, create a PlayerHabit.

Initial state after completion:

score > 0
bookmarked = false
inWorkout = false unless already in a bookmarked Workout

The Habit is active but unbookmarked.

It appears in All Habits View but not Bookmarked Habits View.

Route 3 — Adding a Habit to a Bookmarked Workout

If a Habit is inside a bookmarked Workout, create or sustain a PlayerHabit.

State may be:

score = 0
bookmarked = false
inWorkout = true

Important:

A Habit inside a bookmarked Workout does not become bookmarked as a standalone Habit.

It is available through the Workout, but it does not appear in Bookmarked Habits View unless the user separately bookmarks that Habit.


Use a single PlayerHabit relationship/node with fields for bookmark and Workout inclusion.

Recommended model:

Player
Habit
PlayerHabit

PlayerHabit fields

playerId
habitId
score
level
dailyScore
bookmarked
inWorkout
lastCompletedAt
createdAt
updatedAt

Important field:

bookmarked

bookmarked: Boolean

This controls whether the Habit appears in Bookmarked Habits View.

Important field:

inWorkout

inWorkout: Boolean

This shows whether the Habit is inside at least one bookmarked Workout for this player.

This matters because inWorkout = true means the PlayerHabit relationship should be sustained, even if:

score = 0
bookmarked = false

The exact source of inWorkout may be derived from Workout membership and the PlayerWorkout / PlayerBookmarkedWorkout node rather than manually maintained, depending on backend preference. But conceptually, the model needs this condition.


10. When PlayerHabit Does Not Exist

A Habit should have no PlayerHabit only when all of these are true:

score = 0
bookmarked = false
inWorkout = false

This is the only truly untouched/unactivated state.

If any one of these is not true, the player needs a PlayerHabit.


11. The Eight State Combinations

There are three binary dimensions:

active/inactive
bookmarked/unbookmarked
in bookmarked Workout/not in bookmarked Workout

This creates eight possible states.

11.1 Active + Bookmarked + In Bookmarked Workout

score > 0
bookmarked = true
inWorkout = true

Example:

Pushups is bookmarked, has score, and also appears inside Chest Day Workout.

Result:

  • appears in Bookmarked Habits View;
  • appears in All Habits View;
  • appears inside Chest Day Workout;
  • score is shared everywhere;
  • atrophies if uncompleted.

11.2 Active + Bookmarked + Not In Bookmarked Workout

score > 0
bookmarked = true
inWorkout = false

Example:

Meditation is bookmarked and active, but not in any Workout.

Result:

  • appears in Bookmarked Habits View;
  • appears in All Habits View;
  • does not appear in any Workouts;
  • has score;
  • atrophies if uncompleted.

11.3 Active + Unbookmarked + In Bookmarked Workout

score > 0
bookmarked = false
inWorkout = true

Example:

Chinups is inside Morning Exercise Workout and has been completed, but is not bookmarked standalone.

Result:

  • appears inside the Workout;
  • appears in All Habits View;
  • does not appear in Bookmarked Habits View;
  • has score;
  • atrophies if uncompleted.

11.4 Active + Unbookmarked + Not In Bookmarked Workout

score > 0
bookmarked = false
inWorkout = false

Example:

User completed Pullups once or a few times from All Habits View without bookmarking it.

Result:

  • appears in All Habits View;
  • does not appear in Bookmarked Habits View;
  • does not appear in any Workouts;
  • has score;
  • atrophies if uncompleted.

11.5 Inactive + Bookmarked + In Bookmarked Workout

score = 0
bookmarked = true
inWorkout = true

Example:

User bookmarked Squats as standalone, and Squats is also inside Full Body Strength Workout, but score is currently zero.

Result:

  • appears in Bookmarked Habits View;
  • appears in All Habits View;
  • appears inside the Workout;
  • no atrophy because score is zero;
  • daily score display is blank.

11.6 Inactive + Bookmarked + Not In Bookmarked Workout

score = 0
bookmarked = true
inWorkout = false

Example:

User bookmarked Reading because they want to try it later but has not completed it yet.

Or:

User previously had score in Reading, it decayed back to zero, but Reading remains bookmarked.

Result:

  • appears in Bookmarked Habits View;
  • appears in All Habits View;
  • does not appear in any Workouts;
  • no atrophy because score is zero;
  • daily score display is blank;
  • can remain bookmarked indefinitely.

11.7 Inactive + Unbookmarked + In Bookmarked Workout

score = 0
bookmarked = false
inWorkout = true

Example:

Back Extension is inside a bookmarked Workout, but the user has not completed it yet and has not bookmarked it standalone.

Result:

  • appears inside the Workout;
  • appears in All Habits View;
  • does not appear in Bookmarked Habits View;
  • no atrophy because score is zero;
  • daily score display is blank;
  • PlayerHabit is sustained because it is in a bookmarked Workout.

11.8 Inactive + Unbookmarked + Not In Bookmarked Workout

score = 0
bookmarked = false
inWorkout = false

This is the only state with no PlayerHabit.

Example:

User has never bookmarked, completed, or included the Habit in a bookmarked Workout.

Or:

The Habit previously had one of these attributes, but now does not.

Result:

  • appears in All Habits View;
  • no score;
  • no atrophy;
  • no daily score display;
  • no PlayerHabit relationship.

12. No User-Facing Delete / Reset / Sever Action

There is no user-facing action that can delete, reset, or sever a PlayerHabit without the score atrophying to zero.

Once the score has atrophied to zero, if the Habit is unbookmarked and not in a bookmarked Workout, then the PlayerHabit can be severed.

This is different from the previous model, where a user could simply unselect a Habit.

The user can intentionally affect Habit visibility/placement through:

  • bookmark;
  • unbookmark;
  • add to Workout;
  • remove from Workout.

This is similar to the old select/unselect model in terms of user intent, but it no longer directly deletes score.

A PlayerHabit is only severed when all three conditions are true:

score = 0
bookmarked = false
inWorkout = false

There is no user-facing “reset score” button.

Score changes only through the game economy:

  • completions grow score;
  • atrophy reduces score.

If a Habit score goes up, it must be allowed to come down.

It is never cut short artificially by a user-facing delete/reset action.

This should simplify the economy versus making special affordances where unselecting a Habit preserves some score somewhere else.


13. Atrophy Rule

If a PlayerHabit exists and has a positive score, it atrophies when uncompleted.

Rule:

If the Habit has a positive score and is uncompleted, it atrophies no matter what.

Unbookmarking does not stop atrophy.

Removing a Habit from the Bookmarked Habits View does not protect it.

Being inside a Workout does not isolate it from atrophy.

Examples:

Bookmarked active Habit

Meditation is bookmarked and has Level 6.

User does not complete Meditation today.

Meditation atrophies.

Unbookmarked active Habit

Pullups is unbookmarked and has Level 3.

User does not complete Pullups today.

Pullups atrophies.

Habit inside Workout

Chinups is inside a bookmarked Workout and has Level 24.

User does not complete Chinups today.

Chinups atrophies.

Bookmark state and Workout inclusion do not affect atrophy.


14. What Happens at Zero

A Habit does not atrophy below zero.

Once a Habit’s total score reaches zero:

  • it stops atrophying;
  • it has no negative contribution to overall score;
  • it has no daily atrophy score;
  • the daily score display should be blank;
  • it is inactive at the score level.

Important uncertainty to check against current implementation:

I am not 100% sure whether the current build continues to apply atrophy to the overall score even when a Habit itself is already at zero. That should not happen in the new model.

New rule:

Once the Habit score reaches zero, it stops contributing negative atrophy to the Habit score and to overall score.


15. When PlayerHabit Can Be Severed

A PlayerHabit can be severed only when all of these are true:

score = 0
bookmarked = false
inWorkout = false

If those three conditions are met, the PlayerHabit is no longer needed.

Example:

User tries Pullups.

Pullups reaches +1000.

User unbookmarks Pullups.

User stops doing Pullups.

Pullups atrophies back to zero.

Pullups is not in any bookmarked Workout.

Result:

Pullups becomes inactive, unbookmarked, and not in a Workout. The PlayerHabit relationship can be severed.


16. Bookmarked Habit at Zero

If a Habit reaches zero but remains bookmarked, the PlayerHabit should persist.

Example:

User bookmarks Pullups.

User completes Pullups for a while.

Pullups eventually decays back to zero.

But Pullups is still bookmarked.

Result:

  • PlayerHabit persists;
  • bookmarked = true;
  • score is zero;
  • no atrophy occurs;
  • daily score display is blank;
  • Pullups remains visible in Bookmarked Habits View.

If the user then unbookmarks Pullups while score is zero and it is not inside a Workout, the PlayerHabit can be severed.


17. Bookmarked but Never Completed

A user can bookmark a Habit and never complete it.

This should remain allowed indefinitely.

Do not auto-remove it ever.

Reason:

Bookmarking is an intentional user action.

If the app silently removes the Habit later, it may feel like the app is undoing the user’s intention.

If users clutter their Bookmarked Habits View with too many unstarted Habits, they can manually unbookmark them.

Later, we can consider prompts or cleanup suggestions, but not automatic removal.


18. Level Zero / Level One Display Logic

Previously, we made it so no selected Habit was ever shown as level zero. That made sense when unselected Habits simply were not part of the user’s active model.

Now we no longer have a simple selected/unselected model.

New rule:

No PlayerHabit = level 0 / blank state
PlayerHabit exists with score = 0 = level 0 or blank score state
PlayerHabit exists with score > 0 = minimum displayed level 1

After the first completion, if the score is above zero, display at least level one, even if the score has not mathematically crossed a traditional level-one threshold.

After that, normal level logic applies.

Once the user reaches level two, everything follows the standard formula.

Daily score should be blank when:

score = 0

It should not show plus or minus.


19. Overall Score

The player’s overall score should always be the cumulative score of every Habit with score above zero.

This includes:

  • bookmarked active Habits;
  • unbookmarked active Habits;
  • Habits active because they were completed through Workouts;
  • Habits active because they were completed from All Habits View.

Important:

Overall score is not just the sum of bookmarked Habits.

It is the sum of all active Habit scores.

However:

Habits at zero should not continue to produce negative overall-score atrophy.

There is no special preserved score after a Habit is removed.

There is no artificial score severing.

The new rule is simpler:

A Habit score goes up through completions and comes down through atrophy until zero. Overall score reflects the sum of active Habit scores.


20. Habit Completion From Any Context

A user can complete a Habit from three core contexts:

  1. Bookmarked Habits View;
  2. All Habits View;
  3. inside a Workout.

No matter where the user completes the Habit, it affects the same canonical Habit score.

Example:

Pushups appears:

  • in Bookmarked Habits View;
  • inside Morning Workout;
  • inside Travel Workout.

If Pushups is +1000 in Bookmarked Habits View, it is also +1000 in every Workout.

If the user completes Pushups inside Travel Workout and it becomes +1200, then Bookmarked Habits View and Morning Workout also show Pushups as +1200.

The Habit score is canonical.

Contexts do not own separate Habit scores.

Habit scores are the same in all contexts.


21. Workouts Depend on This Model

This Habit model is necessary for Workouts.

A Workout can contain Habits that are not bookmarked as standalone Habits.

Example:

User has a bookmarked Workout called:

Morning Exercise

Inside it:

Pushups
Chinups
Situps
Back Extension

Those Habits do not all need to appear on the main Bookmarked Habits View.

They are accessible inside the Workout because the Workout itself is bookmarked.

If the user completes Chinups inside the Workout:

  • Chinups gets or updates active Habit score state;
  • Chinups contributes to overall score;
  • Chinups does not become bookmarked as a standalone Habit by completing it inside the Workout;
  • Chinups can continue to atrophy when active, meaning when score is above zero, even if it was never bookmarked and only exists inside a Workout.

This is one of the main reasons the bookmark model exists.


22. Bookmark-Based Views

There are two bookmark-based Habit views.

22.1 Bookmarked Habits View

This is the user’s clean main Habit view.

It shows Habits where:

bookmarked = true

It is for convenience and daily use.

It is not the full universe of Habits.

22.2 All Habits View

This is the always-open library.

It shows all Habits.

It is the full universe of Habits.

The user can:

  • browse;
  • filter by category;
  • search;
  • open any Habit;
  • complete any Habit;
  • bookmark/unbookmark any Habit.

This replaces the old separate library selection model.

Everything is the library.


23. Bookmarked Habits View Ordering

Bookmarked Habits View should be ordered as follows:

  1. bookmarked Habits with positive daily score;
  2. bookmarked Habits with negative daily score;
  3. zero-score, inactive, bookmarked Habits.

Within each group, sort by daily score descending where applicable.

This means:

  • positive Habits rise to the top;
  • negative Habits sit below positive Habits;
  • zero-score, inactive, bookmarked Habits sit at the bottom.

A bookmarked Habit that has never been completed can remain at the bottom indefinitely.

A previously active bookmarked Habit that decays back to zero can also remain at the bottom indefinitely.


24. All Habits View Ordering

All Habits View should show all Habits in three sections.

Section 1 — Habits with non-zero score

Show every Habit with a non-zero score.

This includes:

  • bookmarked Habits with score;
  • unbookmarked Habits with score;
  • Habits inside Workouts with score;
  • Habits completed once from All Habits View.

Sort this section by daily score descending.

Bookmark state does not affect the ordering inside this section. A non-bookmarked Habit with a higher daily score can appear above a bookmarked Habit with a lower daily score.

Section 2 — Bookmarked Habits with zero score

Show bookmarked Habits with zero score.

This includes:

  • Habits bookmarked but never completed;
  • Habits previously active that decayed back to zero but remain bookmarked.

These sit below non-zero Habits.

Divider

Add a clear visual divider between:

Bookmarked zero-score Habits

and:

Unbookmarked zero-score Habits

Section 3 — Unbookmarked Habits with zero score

Show unbookmarked Habits with zero score.

This includes:

  • untouched Habits, meaning Habits that are not bookmarked and not scored;
  • Habits not bookmarked;
  • Habits not yet scored;
  • Habits may or may not be inside a bookmarked Workout;
  • Habits inside a bookmarked Workout but with zero score.

Sort this section alphabetically or by existing category/search logic.

Only Section 3 is below the divider.


25. Habit Card Bookmark Control

A Habit is bookmarked or unbookmarked from within the Habit card.

The exact UI is provided separately.

Expected behaviour:

If user bookmarks a Habit

Set:

bookmarked = true

Create PlayerHabit if needed.

The Habit appears in Bookmarked Habits View.

If user unbookmarks a Habit

Set:

bookmarked = false

Do not delete score.

Do not stop atrophy.

If:

score = 0
inWorkout = false

then the PlayerHabit can be severed.


26. Visual State: Bookmarked vs Unbookmarked

The visual system should distinguish bookmarked and unbookmarked Habits.

Current design direction:

Bookmarked = 100% opacity
Unbookmarked = 70% opacity

This applies to the whole Habit bar in list view.

This also applies to the expanded Habit card.

This opacity state is inherited inside Workouts.

Example:

If Pushups is not bookmarked as a standalone Habit, but appears inside a Workout:

  • Pushups still appears inside the Workout;
  • bookmark toggle on the Pushups card is off;
  • Pushups card appears at 70% opacity;
  • PlayerHabit relationship exists because it is inside a bookmarked Workout;
  • this shows that Pushups is available through the Workout but not bookmarked as a standalone Habit.

Opacity means bookmark state.

Do not use opacity for completion state.


27. Visual State: Completed / Uncompleted

The existing black/white visual logic should continue to represent daily completion/score state.

For active Habits:

Completed / positive today = white design
Uncompleted / negative today = black design

Bookmark state and completion state are separate.

Examples:

Bookmarked + Completed

Pushups is bookmarked and positive today.

Visual:

  • 100% opacity;
  • white design.

Bookmarked + Uncompleted

Pushups is bookmarked and negative today.

Visual:

  • 100% opacity;
  • black design.

Unbookmarked + Completed

Pushups is unbookmarked but positive today.

Visual:

  • 70% opacity;
  • white design.

Unbookmarked + Uncompleted

Pushups is unbookmarked but negative today.

Visual:

  • 70% opacity;
  • black design.

If Pushups is black/negative and not bookmarked, it remains black/negative wherever it appears, just at 70% opacity.

Bookmark state and completion state must remain independent.

This visual state is inherited by Workouts.


28. Searching and Filtering

Both Bookmarked Habits View and All Habits View should support:

  • category filtering;
  • search, pending front-end design.

Filtering and search happen within the current bookmark view.

If the user searches inside Bookmarked Habits View, the search should show matching bookmarked Habits.

If the user searches inside All Habits View, the search should show matching Habits from all Habits.

Potential decision to make:

Search may automatically search All Habits View regardless of current view. This is not yet decided.


29. Categories and Privacy

The category structure is:

  1. Recenter — mindfulness, meditation, breath, stillness.
  2. Revitalize — cardio, strength, physical effort.
  3. Remobilize — stretching, mobility, range of motion.
  4. Rewire — learning, reading, neuroplasticity, cognitive training.
  5. Renourish — diet, nutrition, hydration, supplements.
  6. Refresh — hygiene, tidying, cleaning, personal reset.

The first four are public/game-visible categories:

Recenter
Revitalize
Remobilize
Rewire

The last two are private/personal categories:

Renourish
Refresh

Renourish and Refresh should not be public competition categories.

They should not appear in:

  • completion posts on timeline;
  • leaderboards;
  • logs;
  • future Challenges.

Reason:

These Habits are generally personal. People will be less interested in showing, seeing, or competing in hygiene and nutrition Habits.

The key public Habit categories are the first four.

Renourish and Refresh can still exist as Habits and can still be completed/bookmarked privately.


30. Leaderboards

The first step in making Habits a multiplayer habit game, rather than only a single-player habit game, is leaderboards.

The front-end design has already been shared separately.

Leaderboards exist in three main places.

30.1 Overall / Root Habit Leaderboard

From the root Habit screen, users can access the overall leaderboard.

This shows overall score for each player.

It should also include a completion log of recent Habit completions.

30.1.1 Category Leaderboards

The overall leaderboard can be filtered by category.

This allows users to see who has the highest score in:

  • Recenter;
  • Revitalize;
  • Remobilize;
  • Rewire.

Do not show leaderboards for:

  • Renourish;
  • Refresh.

Those are private/personal categories.

30.2 Workout Leaderboards

Every Workout has its own leaderboard.

This is covered more fully in the Workout brief.

30.3 Habit Leaderboards

Every Habit has its own leaderboard.

Example:

  • Pushups leaderboard;
  • Meditation leaderboard;
  • Chess leaderboard;
  • Pullups leaderboard.

Every leaderboard view should also include a log of the most recent completions relevant to that leaderboard.


31. Correct Language

Use bookmark language.

Correct language:

Bookmark Habit
Remove Bookmark
Bookmarked Habits
All Habits
Bookmarked Workouts
Friends’ Workouts

Avoid ownership language:

Own Habit
Add Habit
Remove Habit
Delete Habit
Selected Habit
Community Workouts

The core meaning is:

Bookmarking surfaces a Habit for easier access.

It does not mean hard ownership.


32. Summary of Key Rules

  1. Current Habit model is selected/unselected ownership.
  2. New Habit model is based on score state, bookmark state, and bookmarked Workout inclusion state.
  3. Active means score > 0.
  4. Inactive means score = 0.
  5. PlayerHabit exists if score > 0, bookmarked = true, or inWorkout = true.
  6. PlayerHabit does not exist only if score = 0, bookmarked = false, and inWorkout = false.
  7. bookmarked is a field on PlayerHabit.
  8. inWorkout is a field or derived condition on PlayerHabit.
  9. Bookmarking creates/sustains PlayerHabit.
  10. Completing creates/sustains PlayerHabit.
  11. Inclusion inside a bookmarked Workout creates/sustains PlayerHabit.
  12. Bookmarking surfaces a Habit in Bookmarked Habits View.
  13. Bookmarking can happen before first completion.
  14. Completing a Habit can happen without bookmarking it.
  15. Completing an unbookmarked Habit creates/sustains PlayerHabit.
  16. A Habit inside a bookmarked Workout can have PlayerHabit without being bookmarked standalone.
  17. Unbookmarking does not delete score.
  18. Unbookmarking does not stop atrophy.
  19. There is no user-facing reset/delete/sever action.
  20. Habits with positive score atrophy when uncompleted.
  21. A Habit at zero does not continue to atrophy.
  22. A Habit at zero does not create negative overall-score atrophy.
  23. Daily score display should be blank when score is zero.
  24. PlayerHabit can be severed only if score is zero, unbookmarked, and not inside a bookmarked Workout.
  25. Overall score is the cumulative score of all positive Habit scores, not just bookmarked Habits.
  26. Habit score/state is canonical everywhere.
  27. Bookmarked Habits View is the clean main view.
  28. All Habits View is the always-open library.
  29. Everything is the library.
  30. All Habits View has three sections: non-zero score, bookmarked zero-score, unbookmarked zero-score.
  31. Opacity represents bookmark state.
  32. 100% opacity = bookmarked.
  33. 70% opacity = unbookmarked.
  34. Black/white represents completion/score state.
  35. Search and category filtering should work in both Bookmarked Habits View and All Habits View.
  36. Renourish and Refresh are private/personal and should not appear as timeline completion posts, leaderboards, logs, or future Challenges.
  37. Leaderboards exist for overall/root, category, Workout, and Habit contexts.
  38. Use Bookmark language.
  39. Avoid ownership language.