[{"data":1,"prerenderedAt":2252},["ShallowReactive",2],{"$fp-rOOnce7HPNUtPcdzeThQtCkMXnKIn3xRULGti4dac":3,"$flWyjMhSgJA492sUwf2xPQq_ctrI96G8vR6j5_sgmN9I":175},{"blueprints":4},[5,22,38,51,63,75,84,94,106,116,124,134,146,154,165],{"slug":6,"title":7,"summary":8,"category":9,"logo":10,"cover":11,"tags":12,"stats":15,"publishedAt":21},"bookmark-manager","Bookmark Manager","A private library of links you save yourself, from browser, phone or a browser's export, filed and tagged, with your own AI agent suggesting tidying.","productivity","\u002F_blueprints\u002Fbookmark-manager.logo.svg","\u002F_blueprints\u002Fbookmark-manager.cover.webp",[13,14],"agentic","single-user",{"entities":16,"capabilities":17,"journeys":18,"scenarios":19,"rules":20},7,15,3,37,18,"2026-10-07T14:20:29+03:00",{"slug":23,"title":24,"summary":25,"category":26,"logo":27,"cover":28,"tags":29,"stats":33,"publishedAt":21},"code-snippet-sharing","Code Snippet Sharing","Keep code snippets with their language, description and tags, share them by unlisted link or in public, fork others' public snippets, and revise code with kept history.","dev-tools","\u002F_blueprints\u002Fcode-snippet-sharing.logo.svg","\u002F_blueprints\u002Fcode-snippet-sharing.cover.webp",[30,31,32],"ai-assisted","multi-user","public",{"entities":34,"capabilities":35,"journeys":36,"scenarios":37,"rules":35},4,9,1,26,{"slug":39,"title":40,"summary":41,"category":9,"logo":42,"cover":43,"tags":44,"stats":45,"publishedAt":50},"content-feed-reader","Content Feed Reader","Follow feeds, catch up and keep worthwhile items in a private web or mobile library, and publish read-only collections for the web.","\u002F_blueprints\u002Fcontent-feed-reader.logo.svg","\u002F_blueprints\u002Fcontent-feed-reader.cover.webp",[32,14],{"entities":46,"capabilities":47,"journeys":48,"scenarios":49,"rules":17},6,20,2,39,"2026-08-04T15:46:50+03:00",{"slug":52,"title":53,"summary":54,"category":55,"logo":56,"cover":57,"tags":58,"stats":59,"publishedAt":21},"event-rsvp","Event RSVP","Create an event, share one invitation link, collect going, maybe and not going answers without guest accounts, keep a waitlist once it is full, and message the guests.","community","\u002F_blueprints\u002Fevent-rsvp.logo.svg","\u002F_blueprints\u002Fevent-rsvp.cover.webp",[30,31,32],{"entities":60,"capabilities":35,"journeys":48,"scenarios":61,"rules":62},5,33,11,{"slug":64,"title":65,"summary":66,"category":67,"logo":68,"cover":69,"tags":70,"stats":71,"publishedAt":21},"flashcard-app","Flashcard App","Build flashcard decks, study what is due with spaced repetition on the web or a phone, draft cards from pasted notes, and share decks for others to copy.","education","\u002F_blueprints\u002Fflashcard-app.logo.svg","\u002F_blueprints\u002Fflashcard-app.cover.webp",[30,31],{"entities":34,"capabilities":72,"journeys":48,"scenarios":73,"rules":74},14,29,13,{"slug":76,"title":77,"summary":78,"category":55,"logo":79,"cover":80,"tags":81,"stats":82,"publishedAt":21},"form-and-survey-builder","Form & Survey Builder","Build a form or survey, share it through a public link, collect answers from people without accounts, and review, summarize and export what came back.","\u002F_blueprints\u002Fform-and-survey-builder.logo.svg","\u002F_blueprints\u002Fform-and-survey-builder.cover.webp",[30,31,32],{"entities":46,"capabilities":20,"journeys":36,"scenarios":83,"rules":20},34,{"slug":85,"title":86,"summary":87,"category":9,"logo":88,"cover":89,"tags":90,"stats":91,"publishedAt":21},"habit-tracker","Habit Tracker","Define habits on a daily, chosen-day or weekly schedule, check them off, follow their streaks, pause one without losing it, and read an optional weekly reflection.","\u002F_blueprints\u002Fhabit-tracker.logo.svg","\u002F_blueprints\u002Fhabit-tracker.cover.webp",[30,14],{"entities":60,"capabilities":92,"journeys":48,"scenarios":93,"rules":17},12,30,{"slug":95,"title":96,"summary":97,"category":98,"logo":99,"cover":100,"tags":101,"stats":102,"publishedAt":21},"kanban-board","Kanban Board","Plan and track a small team's work on shared boards of columns and cards, with stalled work flagged and an AI agent proposing the next cards.","collaboration","\u002F_blueprints\u002Fkanban-board.logo.svg","\u002F_blueprints\u002Fkanban-board.cover.webp",[13,31],{"entities":35,"capabilities":103,"journeys":36,"scenarios":104,"rules":105},23,44,32,{"slug":107,"title":108,"summary":109,"category":9,"logo":110,"cover":111,"tags":112,"stats":113,"publishedAt":21},"notes-app","Notes App","Capture quick notes into an inbox, file them into notebooks, tag and link them, find them again, and let your own AI agent suggest where they belong.","\u002F_blueprints\u002Fnotes-app.logo.svg","\u002F_blueprints\u002Fnotes-app.cover.webp",[13,14],{"entities":46,"capabilities":74,"journeys":36,"scenarios":114,"rules":115},31,17,{"slug":117,"title":118,"summary":119,"category":98,"logo":120,"cover":121,"tags":122,"stats":123,"publishedAt":21},"polls-and-decisions","Polls & Decisions","Put a question to the team as a poll, vote and argue while it is open, and keep the outcome as a decision the team can look up.","\u002F_blueprints\u002Fpolls-and-decisions.logo.svg","\u002F_blueprints\u002Fpolls-and-decisions.cover.webp",[30,31],{"entities":60,"capabilities":62,"journeys":36,"scenarios":73,"rules":74},{"slug":125,"title":126,"summary":127,"category":26,"logo":128,"cover":129,"tags":130,"stats":131,"publishedAt":21},"public-status-page","Public Status Page","Publish a public page of your components and their current status, keep visitors informed through incidents and scheduled maintenance, and email confirmed subscribers every update an operator posts.","\u002F_blueprints\u002Fpublic-status-page.logo.svg","\u002F_blueprints\u002Fpublic-status-page.cover.webp",[30,31,32],{"entities":16,"capabilities":72,"journeys":36,"scenarios":132,"rules":133},28,19,{"slug":135,"title":136,"summary":137,"category":67,"logo":138,"cover":139,"tags":140,"stats":141,"publishedAt":21},"quiz-builder","Quiz Builder","Build quizzes of multiple-choice, true\u002Ffalse and short-answer questions, share them by link or with a class, score each learner's one attempt, and practice what was missed.","\u002F_blueprints\u002Fquiz-builder.logo.svg","\u002F_blueprints\u002Fquiz-builder.cover.webp",[30,31],{"entities":142,"capabilities":143,"journeys":48,"scenarios":144,"rules":145},10,22,45,24,{"slug":147,"title":148,"summary":149,"category":67,"logo":150,"cover":151,"tags":152,"stats":153,"publishedAt":21},"study-planner","Study Planner","Set dated study goals with estimated topics, get a schedule built around your weekly hours, log what you study, and let your AI agent propose revisions.","\u002F_blueprints\u002Fstudy-planner.logo.svg","\u002F_blueprints\u002Fstudy-planner.cover.webp",[13,14],{"entities":46,"capabilities":115,"journeys":48,"scenarios":83,"rules":103},{"slug":155,"title":156,"summary":157,"category":98,"logo":158,"cover":159,"tags":160,"stats":161,"publishedAt":21},"team-wiki","Team Wiki","Keep a team's knowledge in permissioned spaces of nested pages with revision history, find it by search, and let members' AI agents answer from it and suggest updates.","\u002F_blueprints\u002Fteam-wiki.logo.svg","\u002F_blueprints\u002Fteam-wiki.cover.webp",[13,31],{"entities":162,"capabilities":163,"journeys":48,"scenarios":164,"rules":47},8,16,41,{"slug":166,"title":167,"summary":168,"category":26,"logo":169,"cover":170,"tags":171,"stats":173,"publishedAt":21},"url-shortener","URL Shortener","Turn long addresses into short links on the web or through an API, disable them or let them expire, and see how often and where they are followed.","\u002F_blueprints\u002Furl-shortener.logo.svg","\u002F_blueprints\u002Furl-shortener.cover.webp",[172,32,14],"api",{"entities":46,"capabilities":142,"journeys":174,"scenarios":47,"rules":92},0,{"blueprint":176},{"slug":85,"publishedAt":21,"reportDigest":177,"logo":88,"cover":89,"report":178,"source":2249},"bb309b90e06ac9a547788e25f8843f1aaddf2a72370cdc78701cda08cdddcd30",{"schemaVersion":179,"id":85,"title":86,"summary":87,"description":180,"category":9,"authors":181,"license":184,"intent":185,"supportingSections":186,"references":187,"referenceProfile":193,"tags":194,"languages":195,"generatedAt":197,"generator":198,"counts":201,"limitations":202,"model":208,"coverage":2244},"19.0.0","A personal tracker for the small things someone means to do regularly. The\nOwner defines each habit with a schedule — every day, on chosen weekdays, or a\nnumber of times a week — checks it off on the days they do it, and follows the\nstreak and history it builds. A habit can be paused for a while and resumed\nwith its history intact. An optional weekly reflection reads the week back and\nmay suggest one schedule adjustment, which the Owner accepts or dismisses.",[182],{"name":183},"pdd-kit","MIT","People who set out to do something regularly tend to give up after a missed\nday, because most trackers count a rest day or a break as a failure. Here a\nstreak counts only the days a habit was meant to happen, a pause keeps\neverything, and the Owner can make an over-ambitious schedule realistic\nwithout losing the record they built.",[],[188],{"kind":189,"role":190,"target":191,"title":192},"research","context","https:\u002F\u002Fgithub.com\u002Fitai-gendler\u002Fpdd-kit\u002Fblob\u002Fmain\u002Fblueprints\u002Fhabit-tracker\u002Freferences\u002Fassumptions.md","Habit assumptions","portable",[30,14],[196],"en","2026-10-12",{"name":199,"version":200},"pdd-kit-cli","0.34.1",{"interfaces":48,"experiences":174,"screens":142,"domains":48,"entities":60,"capabilities":92,"capabilityScenarios":37,"journeys":48,"journeyScenarios":34,"businessRules":17,"variations":174},[203,204,205,206,207],"Habits are private to their one Owner. There is no sharing, social accountability or coaching.","A habit is done or not done on a day, so a check-in holds nothing to edit; a wrong day is unchecked. There are no quantities, timers, notes or habits to avoid.","The Product sends no reminders or notifications; the Owner comes to it.","A language model writes each weekly reflection's summary and drafts its suggested adjustment, and it may be wrong; the Owner decides every suggestion. While it is unavailable, a reflection carries its consistency figures alone and everything else works.","The Owner signs in with an existing account; signing up and managing accounts are not part of this product.",{"taxonomies":209,"interfaces":223,"experiences":250,"screens":251,"domains":481,"entities":494,"capabilities":590,"capabilityScenarios":695,"journeys":1816,"journeyScenarios":1839,"businessRules":2006,"variations":2243},{"scenarioKinds":210},[211,215,219],{"id":212,"name":213,"description":214,"colorSlot":46},"edge","Edge case","An uncommon but expected path with a distinct observable outcome.",{"id":216,"name":217,"description":218,"colorSlot":36},"primary","Primary","The expected observable behavior path.",{"id":220,"name":221,"description":222,"colorSlot":18},"validation","Validation","Input the Product refuses while preserving the Actor's work.",[224,238],{"id":225,"title":226,"description":227,"type":228,"actorIds":229,"entryPoints":231,"languages":234,"intent":235,"supportingSections":236,"references":237},"tracker-mobile","Habit Tracker mobile application","The supported mobile Interface for the daily loop: checking habits off,\ndefining and changing them, pausing them, and following their streaks and\nhistory. Weekly reflections and their suggested adjustments remain a web\ncommitment.","mobile-app",[230],"owner",[232],{"type":228,"path":233},"habit-tracker:\u002F\u002Ftoday",[],"",[],[],{"id":239,"title":240,"description":241,"type":242,"actorIds":243,"entryPoints":244,"languages":247,"intent":235,"supportingSections":248,"references":249},"tracker-web","Habit Tracker web application","The supported browser Interface for everything the Owner does with their\nhabits: checking them off, defining and changing them, pausing them, following\ntheir streaks and history, and reading and answering weekly reflections. Every\nplace in it belongs to the signed-in Owner.","web",[230],[245],{"type":242,"path":246},"\u002F",[],[],[],[],[252,300,319,337,357,377,391,405,431,448],{"id":253,"title":254,"description":255,"capabilityIds":256,"entities":264,"capabilityScenarioIds":279,"journeyScenarioIds":294,"entryPoints":295,"intent":235,"supportingSections":298,"references":299},"tracker-mobile::habit-detail","Habit detail","One habit, opened to work with. It presents the habit's name and schedule, the\nday it started, whether it is active or paused, its current and best streak,\nand the history of days it was done. Here the Owner changes its name or\nschedule, checks off or unchecks a day from the past week, pauses or resumes\nit, and deletes it.",[257,258,259,260,261,262,263],"check-off-habit","delete-habit","edit-habit","pause-habit","resume-habit","uncheck-habit","view-progress",[265,270],{"entityId":266,"shows":267,"collects":269},"check-in",[268],"Day",[],{"entityId":271,"shows":272,"collects":278},"habit",[273,274,275,276,277],"Best streak","Current streak","Name","Schedule","Started on",[275,276],[280,281,282,283,284,285,286,287,288,289,290,291,292,293],"change-a-habits-schedule","check-off-an-earlier-day","delete-a-habit","delete-a-habit-with-suggested-adjustments","delete-a-paused-habit","pause-a-habit","reject-a-day-outside-the-past-week","reject-checking-off-a-paused-habit","rename-a-habit","resume-a-paused-habit","see-a-habits-streak-and-history","see-a-streak-carried-across-a-pause","see-a-weekly-target-streak","uncheck-an-earlier-day",[],[296],{"type":225,"path":297},"habit-tracker:\u002F\u002Fhabits\u002F:habitId",[],[],{"id":301,"title":302,"description":303,"capabilityIds":304,"entities":306,"capabilityScenarioIds":310,"journeyScenarioIds":313,"entryPoints":314,"intent":235,"supportingSections":317,"references":318},"tracker-mobile::habits","Habits","Lists every habit the Owner keeps, active and paused, with its schedule and\ncurrent streak, opens one, and starts defining a new one.",[305,258,260,263],"create-habit",[307],{"entityId":271,"shows":308,"collects":309},[274,275,276],[],[311,282,283,284,285,312,290,291,292],"create-a-habit","reject-a-schedule-with-no-days",[],[315],{"type":225,"path":316},"habit-tracker:\u002F\u002Fhabits",[],[],{"id":320,"title":321,"description":322,"capabilityIds":323,"entities":324,"capabilityScenarioIds":328,"journeyScenarioIds":329,"entryPoints":332,"intent":235,"supportingSections":335,"references":336},"tracker-mobile::new-habit","New habit","Takes the Owner through defining a habit: what it is called and when it is\ndue — every day, on chosen weekdays, or a number of times each week. The Owner\ncan leave before saving without a habit being created.",[305],[325],{"entityId":271,"shows":326,"collects":327},[275,276],[275,276],[311,312],[330,331],"start-a-habit-due-today","start-a-habit-not-due-today",[333],{"type":225,"path":334},"habit-tracker:\u002F\u002Fhabits\u002Fnew",[],[],{"id":338,"title":339,"description":340,"capabilityIds":341,"entities":342,"capabilityScenarioIds":349,"journeyScenarioIds":352,"entryPoints":353,"intent":235,"supportingSections":355,"references":356},"tracker-mobile::today","Today","Lists the active habits due today with their current streak and whether each\nhas been checked off today, and lets the Owner check one off or uncheck it. A habit kept a number of times each week is listed every day\nof the week, with how many of its times are done, until its target is met.",[257,305,259,261,262],[343,346],{"entityId":266,"shows":344,"collects":345},[268],[],{"entityId":271,"shows":347,"collects":348},[274,275,276],[],[280,350,311,289,351],"check-off-a-habit-due-today","uncheck-a-habit-done-today",[330,331],[354],{"type":225,"path":233},[],[],{"id":358,"title":254,"description":255,"capabilityIds":359,"entities":361,"capabilityScenarioIds":368,"journeyScenarioIds":370,"entryPoints":372,"intent":235,"supportingSections":375,"references":376},"tracker-web::habit-detail",[360,257,258,259,260,261,262,263],"accept-suggested-adjustment",[362,365],{"entityId":266,"shows":363,"collects":364},[268],[],{"entityId":271,"shows":366,"collects":367},[273,274,275,276,277],[275,276],[369,280,281,282,283,284,285,286,287,288,289,290,291,292,293],"accept-a-suggested-adjustment",[371],"accept-and-see-the-new-schedule",[373],{"type":239,"path":374},"\u002Fhabits\u002F:habitId",[],[],{"id":378,"title":302,"description":303,"capabilityIds":379,"entities":380,"capabilityScenarioIds":384,"journeyScenarioIds":385,"entryPoints":386,"intent":235,"supportingSections":389,"references":390},"tracker-web::habits",[305,258,260,263],[381],{"entityId":271,"shows":382,"collects":383},[274,275,276],[],[311,282,283,284,285,312,290,291,292],[],[387],{"type":239,"path":388},"\u002Fhabits",[],[],{"id":392,"title":321,"description":322,"capabilityIds":393,"entities":394,"capabilityScenarioIds":398,"journeyScenarioIds":399,"entryPoints":400,"intent":235,"supportingSections":403,"references":404},"tracker-web::new-habit",[305],[395],{"entityId":271,"shows":396,"collects":397},[275,276],[275,276],[311,312],[330,331],[401],{"type":239,"path":402},"\u002Fhabits\u002Fnew",[],[],{"id":406,"title":407,"description":408,"capabilityIds":409,"entities":412,"capabilityScenarioIds":421,"journeyScenarioIds":425,"entryPoints":426,"intent":235,"supportingSections":429,"references":430},"tracker-web::reflections","Reflections","Lists the weekly reflections prepared for the Owner, newest first, and opens\none. Here the Owner turns reflections on or off, and is told what it\nreads and that it changes no habit by itself.",[410,411],"change-reflection-settings","generate-weekly-reflection",[413,416],{"entityId":230,"shows":414,"collects":415},[407],[407],{"entityId":417,"shows":418,"collects":420},"weekly-reflection",[419],"Week",[],[422,423,424],"generate-a-weekly-reflection","turn-off-reflections","turn-on-reflections",[],[427],{"type":239,"path":428},"\u002Freflections",[],[],{"id":432,"title":339,"description":340,"capabilityIds":433,"entities":434,"capabilityScenarioIds":441,"journeyScenarioIds":442,"entryPoints":443,"intent":235,"supportingSections":446,"references":447},"tracker-web::today",[257,305,259,261,262],[435,438],{"entityId":266,"shows":436,"collects":437},[268],[],{"entityId":271,"shows":439,"collects":440},[274,275,276],[],[280,350,311,289,351],[330,331],[444],{"type":239,"path":445},"\u002Ftoday",[],[],{"id":449,"title":450,"description":451,"capabilityIds":452,"entities":454,"capabilityScenarioIds":469,"journeyScenarioIds":474,"entryPoints":476,"intent":235,"supportingSections":479,"references":480},"tracker-web::weekly-reflection","Weekly reflection","One week read back: how consistently each active habit was done, the written\nsummary when there is one, marked as written by a language model, and the\nschedule adjustment it suggests, if any, beside the habit's current schedule. Here the Owner accepts or dismisses the\nsuggestion.",[360,453,411],"dismiss-suggested-adjustment",[455,458,464],{"entityId":271,"shows":456,"collects":457},[275,276],[],{"entityId":459,"shows":460,"collects":463},"suggested-adjustment",[461,462],"Proposed schedule","Reason",[],{"entityId":417,"shows":465,"collects":468},[466,467,419],"Consistency","Summary",[],[369,470,471,472,473],"dismiss-a-suggested-adjustment","generate-a-reflection-with-nothing-to-suggest","generate-while-the-language-model-is-unavailable","reject-an-outdated-suggestion",[475,371],"accept-a-suggestion-that-no-longer-fits",[477],{"type":239,"path":478},"\u002Freflections\u002F:week",[],[],[482,488],{"id":483,"name":302,"description":484,"boundary":485,"colorSlot":36,"intent":235,"supportingSections":486,"references":487},"habits","The Owner's habits and what they build up: defining them, changing, pausing\nand resuming them, deleting them, and reading the streaks and history their\ncheck-ins add up to.","Owns habits, their schedules, whether they are paused, and the streaks read\nfrom their check-ins. It does not own weekly reflections or the adjustments\nthey suggest, and checking a habit off or unchecking it is reached from Today\nas well as from the habit itself.",[],[],{"id":489,"name":407,"description":490,"boundary":491,"colorSlot":18,"intent":235,"supportingSections":492,"references":493},"reflections","The optional weekly look back: whether the Owner wants one, the reflections\nthe Product prepares when a week ends, and the schedule adjustments they\nsuggest.","Owns weekly reflections, suggested adjustments and the Owner's choice to\nreceive them. It does not own habits: an accepted adjustment changes a habit's\nschedule under the same rules as any other change the Owner makes.",[],[],[495,507,536,551,575],{"id":266,"title":496,"description":497,"domainId":483,"kind":498,"acts":498,"singleton":499,"informationKept":500,"relations":503,"states":504,"intent":235,"supportingSections":505,"references":506},"Check-in","The record that the Owner did a habit on a particular day. A habit has at most\none for each day.",null,false,[501],{"name":268,"description":502},"the calendar day the habit was done on, in the Owner's time zone when it was recorded",[],[],[],[],{"id":271,"title":508,"description":509,"domainId":483,"kind":498,"acts":498,"singleton":499,"informationKept":510,"relations":521,"states":527,"intent":235,"supportingSections":534,"references":535},"Habit","Something the Owner means to do regularly, on a schedule they chose.",[511,513,515,517,519],{"name":275,"description":512},"what the Owner calls it",{"name":276,"description":514},"when it is due: every day, on chosen weekdays, or a number of times each week",{"name":277,"description":516},"the first day it counts from",{"name":274,"description":518},"how many scheduled days, or weekly targets, in a row have been done, read from its check-ins",{"name":273,"description":520},"the longest streak it has reached",[522,525],{"entityId":266,"verb":523,"cardinality":524},"records","one-to-many",{"entityId":459,"verb":526,"cardinality":524},"receives",[528,531],{"name":529,"content":530},"Active","Due on its schedule, listed on Today when due, and open to check-ins.",{"name":532,"content":533},"Paused","Set aside by the Owner. It is not due and takes no check-ins, and it keeps its\nschedule, history and streak until the Owner resumes it.",[],[],{"id":230,"title":537,"description":538,"kind":539,"acts":540,"singleton":499,"informationKept":541,"relations":544,"states":548,"intent":235,"supportingSections":549,"references":550},"Owner","The one person whose habits these are. The Owner defines, checks off, pauses\nand reviews their own habits, and nobody else reaches them.","person","external",[542],{"name":407,"description":543},"whether the Owner wants a reflection prepared when each week ends: On or Off, and Off until they turn it on",[545,547],{"entityId":271,"verb":546,"cardinality":524},"owns",{"entityId":417,"verb":526,"cardinality":524},[],[],[],{"id":459,"title":552,"description":553,"domainId":489,"kind":498,"acts":498,"singleton":499,"informationKept":554,"relations":559,"states":560,"intent":235,"supportingSections":573,"references":574},"Suggested adjustment","A new schedule for one habit, drafted by a language model for a weekly\nreflection and kept for the Owner to accept or dismiss. It proposes a schedule\nand nothing else: never a new habit, a pause or a deletion.",[555,557],{"name":461,"description":556},"the schedule it suggests for the habit",{"name":462,"description":558},"the pattern in the week it is based on, in one sentence",[],[561,564,567,570],{"name":562,"content":563},"Proposed","Waiting for the Owner. The habit is unchanged.",{"name":565,"content":566},"Accepted","The Owner accepted it, and the habit follows the proposed schedule from that\nday.",{"name":568,"content":569},"Dismissed","The Owner dismissed it. The habit is unchanged.",{"name":571,"content":572},"Outdated","No longer fits, because the habit's schedule was changed or the habit was\npaused after it was drafted. The Product closes it when the Owner tries to\naccept it. The habit is unchanged.",[],[],{"id":417,"title":450,"description":576,"domainId":489,"kind":498,"acts":498,"singleton":499,"informationKept":577,"relations":584,"states":587,"intent":235,"supportingSections":588,"references":589},"A look back at one week of the Owner's habits, prepared by the Product when the\nweek ends. It proposes at most one suggested adjustment.",[578,580,582],{"name":419,"description":579},"the calendar week it looks back on",{"name":466,"description":581},"for each active habit, how many of its scheduled days, or how much of its weekly target, were done",{"name":467,"description":583},"a few sentences reading the week back, written with a language model; absent when it could not be written",[585],{"entityId":459,"verb":586,"cardinality":524},"proposes",[],[],[],[591,599,607,616,625,634,642,651,659,668,677,686],{"id":360,"title":592,"description":593,"domainId":489,"availability":594,"intent":596,"supportingSections":597,"references":598},"Suggested adjustment acceptance","Lets the Owner accept a weekly reflection's suggested adjustment, which gives\nthat habit the proposed schedule from that day and opens the habit. A\nsuggestion for a habit the Owner has changed or paused since is outdated and\ncannot be accepted.",[595],{"placeId":239},"Keep the Owner the only one who decides a habit's schedule: a suggestion is an\noffer, and accepting it is an ordinary schedule change the Owner makes.",[],[],{"id":410,"title":600,"description":601,"domainId":489,"availability":602,"intent":604,"supportingSections":605,"references":606},"Reflection settings","Turns reflections on or off for the Owner. It is off until the Owner\nturns it on.",[603],{"placeId":239},"Keep the reflection a choice: the Owner decides whether the Product reads their\nweek back at all.",[],[],{"id":257,"title":608,"description":609,"availability":610,"intent":613,"supportingSections":614,"references":615},"Habit check-off","Records that the Owner did a habit on a day: for today from Today, and for any\nday of the past week from the habit itself.",[611,612],{"placeId":225},{"placeId":239},"Make recording a habit the quickest thing in the Product, and let a forgotten\ncheck-off be fixed without making history editable at will.",[],[],{"id":305,"title":617,"description":618,"domainId":483,"availability":619,"intent":622,"supportingSections":623,"references":624},"Habit creation","Defines a new habit with a name and a schedule: every day, on chosen weekdays,\nor a number of times each week. A new habit counts from the day it is saved.",[620,621],{"placeId":225},{"placeId":239},"Let the Owner say plainly how often they mean to do something, so that every\nstreak and reflection measures them against their own intention.",[],[],{"id":258,"title":626,"description":627,"domainId":483,"availability":628,"intent":631,"supportingSections":632,"references":633},"Habit deletion","Removes a habit, its whole history and its suggested adjustments for good, once\nthe Owner confirms.",[629,630],{"placeId":225},{"placeId":239},"Let the Owner let go of a habit completely, while making sure they know pausing\nwould keep it.",[],[],{"id":453,"title":635,"description":636,"domainId":489,"availability":637,"intent":639,"supportingSections":640,"references":641},"Suggested adjustment dismissal","Lets the Owner dismiss a weekly reflection's suggested adjustment. The habit\nkeeps the schedule it has, and the suggestion reads as dismissed.",[638],{"placeId":239},"Make saying no to a suggestion as easy as saying yes, so a suggestion never\nlingers as something the Owner owes the Product.",[],[],{"id":259,"title":643,"description":644,"domainId":483,"availability":645,"intent":648,"supportingSections":649,"references":650},"Habit editing","Changes a habit's name or schedule. A new schedule applies from the day it is\nset, and the habit keeps its history and streak.",[646,647],{"placeId":225},{"placeId":239},"Let the Owner fit a habit to how their life actually goes without starting\nover or rewriting what they already did.",[],[],{"id":411,"title":652,"description":653,"domainId":489,"availability":654,"intent":656,"supportingSections":657,"references":658},"Weekly reflection generation","When a week ends for an Owner who has turned reflections on, the Product reads\nback that week's check-ins for each active habit and records how consistently\neach was done. It then asks a language model to write a short summary and to\ndraft at most one suggested adjustment to a habit's schedule. It runs on the\nProduct's own weekly schedule, only while the Owner has it on; the Owner finds\nthe result among their reflections.",[655],{"placeId":239},"Offer a small, optional look back that helps the Owner notice a schedule that\ndoes not fit. The Product only reads and proposes, and the language model it\nqueries is a helper whose absence costs the reflection its summary and\nsuggestion, never its figures.",[],[],{"id":260,"title":660,"description":661,"domainId":483,"availability":662,"intent":665,"supportingSections":666,"references":667},"Habit pausing","Sets an active habit aside. A paused habit is not due and takes no check-ins,\nand it keeps its schedule, history and streak until it is resumed.",[663,664],{"placeId":225},{"placeId":239},"Give the Owner a way to take a break — travel, illness, a busy month — that\ncosts nothing, so stopping for a while never means deleting.",[],[],{"id":261,"title":669,"description":670,"domainId":483,"availability":671,"intent":674,"supportingSections":675,"references":676},"Habit resumption","Brings a paused habit back on the schedule it had. It is due again from its\nnext scheduled day, and its streak carries on from where the pause left it.",[672,673],{"placeId":225},{"placeId":239},"Make coming back after a break as easy as leaving: nothing has to be set up\nagain, and nothing done before the pause is lost.",[],[],{"id":262,"title":678,"description":679,"availability":680,"intent":683,"supportingSections":684,"references":685},"Habit unchecking","Removes the check-in the Owner recorded for a habit on a day: today's from\nToday, and one from the past week from the habit itself. Days before the past\nweek cannot be unchecked. Any day that can be unchecked can be checked off\nagain, so unchecking asks for no confirmation.",[681,682],{"placeId":225},{"placeId":239},"Let an honest slip in recording be undone as easily as it was made, without\nletting an old history be rewritten.",[],[],{"id":263,"title":687,"description":688,"domainId":483,"availability":689,"intent":692,"supportingSections":693,"references":694},"Habit progress","Presents a habit's current and best streak and the history of days it was\ndone, each counted against the habit's own schedule.",[690,691],{"placeId":225},{"placeId":239},"Show progress the way the Owner meant the habit: unscheduled days and paused\nstretches are neither failures nor gaps.",[],[],[696,747,796,835,874,929,983,1049,1096,1138,1184,1232,1275,1312,1347,1387,1438,1479,1517,1554,1596,1633,1672,1699,1737,1776],{"id":369,"capabilityId":360,"title":697,"kindId":216,"actorIds":698,"routes":699,"steps":702,"trigger":741,"decisionPoints":742,"outcome":743,"edgeCases":744,"intent":235,"supportingSections":745,"references":746},"Accept a suggested adjustment",[230],[700],{"id":242,"name":701},"Web",[703,714,723,734],{"text":704,"kind":705,"actorId":230,"capabilityId":360,"entities":706,"unattended":499,"contexts":712},"The Owner opens a weekly reflection with a suggested adjustment","actor",[707,710],{"entityId":417,"as":498,"effect":708,"from":498,"to":498,"facts":709,"with":498},"reads",[466,467,419],{"entityId":459,"as":498,"effect":708,"from":498,"to":498,"facts":711,"with":498},[461,462],[713],{"routeId":242,"placeId":449},{"text":715,"kind":705,"actorId":230,"capabilityId":360,"entities":716,"unattended":499,"contexts":721},"The Owner compares the proposed schedule with the habit's current one and accepts the suggested adjustment",[717,719],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":718,"with":498},[275,276],{"entityId":459,"as":498,"effect":708,"from":498,"to":498,"facts":720,"with":498},[461],[722],{"routeId":242,"placeId":449},{"text":724,"kind":725,"actorId":230,"capabilityId":360,"entities":726,"unattended":499,"contexts":732},"The Product gives the habit the proposed schedule, due from today","product",[727,730],{"entityId":271,"as":498,"effect":728,"from":498,"to":498,"facts":729,"with":498},"changes",[276],{"entityId":459,"as":498,"effect":728,"from":562,"to":565,"facts":731,"with":498},[],[733],{"routeId":242,"placeId":449},{"text":735,"kind":725,"actorId":230,"capabilityId":360,"entities":736,"unattended":499,"contexts":739},"The Product opens the habit, which follows the new schedule with its earlier days still counted against the schedule they had",[737],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":738,"with":498},[274,275,276],[740],{"routeId":242,"placeId":358},"The Owner agrees with a weekly reflection's suggestion for one of their habits.",[],"The habit follows the proposed schedule from today, its history and streak are\nkept, the suggestion reads as accepted, and the Owner is shown the habit.",[],[],[],{"id":280,"capabilityId":259,"title":748,"kindId":216,"actorIds":749,"routes":750,"steps":755,"trigger":789,"decisionPoints":790,"outcome":791,"edgeCases":792,"intent":235,"supportingSections":794,"references":795},"Change a habit's schedule",[230],[751,752],{"id":242,"name":701},{"id":753,"name":754},"mobile","Mobile",[756,764,772,781],{"text":757,"kind":705,"actorId":230,"capabilityId":259,"entities":758,"unattended":499,"contexts":761},"The Owner opens a habit and chooses a different schedule for it",[759],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":760,"with":498},[275,276],[762,763],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":765,"kind":725,"actorId":230,"capabilityId":259,"entities":766,"unattended":499,"contexts":769},"The Product saves the new schedule, due from today",[767],{"entityId":271,"as":498,"effect":728,"from":498,"to":498,"facts":768,"with":498},[276],[770,771],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":773,"kind":774,"actorId":230,"capabilityId":259,"entities":775,"unattended":499,"contexts":778},"Earlier days keep counting against the schedule they had, so the history and streak are unchanged","condition",[776],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":777,"with":498},[273,274],[779,780],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":782,"kind":774,"actorId":230,"capabilityId":259,"entities":783,"unattended":499,"contexts":786},"Today lists the habit on the days its new schedule makes it due",[784],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":785,"with":498},[276],[787,788],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},"The Owner finds a habit's schedule no longer fits, such as every day when four\ntimes a week is realistic.",[],"The habit follows the new schedule from today, and its earlier history and\nstreak are exactly as they were.",[793],"The new schedule has no days → the Product refuses it as it does for a new habit and keeps the old schedule.",[],[],{"id":350,"capabilityId":257,"title":797,"kindId":216,"actorIds":798,"routes":799,"steps":802,"trigger":828,"decisionPoints":829,"outcome":830,"edgeCases":831,"intent":235,"supportingSections":833,"references":834},"Check off a habit due today",[230],[800,801],{"id":242,"name":701},{"id":753,"name":754},[803,811,820],{"text":804,"kind":705,"actorId":230,"capabilityId":257,"entities":805,"unattended":499,"contexts":808},"The Owner checks off a habit due today",[806],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":807,"with":498},[275],[809,810],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},{"text":812,"kind":725,"actorId":230,"capabilityId":257,"entities":813,"unattended":499,"contexts":817},"The Product records a check-in for today",[814],{"entityId":266,"as":498,"effect":815,"from":498,"to":498,"facts":816,"with":498},"creates",[268],[818,819],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},{"text":821,"kind":774,"actorId":230,"capabilityId":257,"entities":822,"unattended":499,"contexts":825},"The habit shows as done today, and its current streak includes today",[823],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":824,"with":498},[274],[826,827],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},"The Owner has done a habit that is due today.",[],"Today's check-in is recorded, the habit is done for today, and its current\nstreak counts today.",[832],"A habit kept a number of times each week → the check-in counts toward this week's target, and the habit leaves Today once the target is met.",[],[],{"id":281,"capabilityId":257,"title":836,"kindId":212,"actorIds":837,"routes":838,"steps":841,"trigger":868,"decisionPoints":869,"outcome":870,"edgeCases":871,"intent":235,"supportingSections":872,"references":873},"Check off an earlier day",[230],[839,840],{"id":242,"name":701},{"id":753,"name":754},[842,852,860],{"text":843,"kind":705,"actorId":230,"capabilityId":257,"entities":844,"unattended":499,"contexts":849},"The Owner opens a habit and picks a day of the past week that has no check-in",[845,847],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":846,"with":498},[275],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":848,"with":498},[268],[850,851],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":853,"kind":725,"actorId":230,"capabilityId":257,"entities":854,"unattended":499,"contexts":857},"The Product records a check-in for that day",[855],{"entityId":266,"as":498,"effect":815,"from":498,"to":498,"facts":856,"with":498},[268],[858,859],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":861,"kind":774,"actorId":230,"capabilityId":257,"entities":862,"unattended":499,"contexts":865},"The day appears in the habit's history, and its streaks are counted again",[863],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":864,"with":498},[273,274],[866,867],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},"The Owner did a habit on a day of the past week but did not record it then.",[],"The day is recorded as done, and a streak the missing record had broken is\nwhole again.",[],[],[],{"id":311,"capabilityId":305,"title":875,"kindId":216,"actorIds":876,"routes":877,"steps":880,"trigger":911,"decisionPoints":912,"outcome":925,"edgeCases":926,"intent":235,"supportingSections":927,"references":928},"Create a habit",[230],[878,879],{"id":242,"name":701},{"id":753,"name":754},[881,889,895,903],{"text":882,"kind":705,"actorId":230,"capabilityId":305,"entities":883,"unattended":499,"contexts":886},"The Owner looks over their habits and starts a new one",[884],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":885,"with":498},[275,276],[887,888],{"routeId":242,"placeId":378},{"routeId":753,"placeId":301},{"text":890,"kind":705,"actorId":230,"capabilityId":305,"entities":891,"unattended":499,"contexts":892},"The Owner gives it a name and chooses when it is due",[],[893,894],{"routeId":242,"placeId":392},{"routeId":753,"placeId":320},{"text":896,"kind":725,"actorId":230,"capabilityId":305,"entities":897,"unattended":499,"contexts":900},"The Product saves the new habit, counting from today",[898],{"entityId":271,"as":498,"effect":815,"from":498,"to":529,"facts":899,"with":498},[275,276,277],[901,902],{"routeId":242,"placeId":392},{"routeId":753,"placeId":320},{"text":904,"kind":725,"actorId":230,"capabilityId":305,"entities":905,"unattended":499,"contexts":908},"The Product returns the Owner to Today, which lists the new habit whenever it is due",[906],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":907,"with":498},[274,275,276],[909,910],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},"The Owner wants to start keeping up something new.",[913],{"title":276,"question":914,"branches":915},"When does the Owner mean to do it?",[916,919,922],{"condition":917,"outcome":918},"Every day","the habit is due daily.",{"condition":920,"outcome":921},"On chosen weekdays","the habit is due only on those days of the week.",{"condition":923,"outcome":924},"A number of times each week","the habit is due on any day of the week until that many check-offs are made.","The Owner has a new active habit with the chosen name and schedule, counted\nfrom today, and is back on Today, where checking it off begins.",[],[],[],{"id":282,"capabilityId":258,"title":930,"kindId":216,"actorIds":931,"routes":932,"steps":935,"trigger":974,"decisionPoints":975,"outcome":976,"edgeCases":977,"intent":235,"supportingSections":981,"references":982},"Delete a habit",[230],[933,934],{"id":242,"name":701},{"id":753,"name":754},[936,944,954,966],{"text":937,"kind":705,"actorId":230,"capabilityId":258,"entities":938,"unattended":499,"contexts":941},"The Owner chooses to delete a habit",[939],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":940,"with":498},[275],[942,943],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":945,"kind":725,"actorId":230,"capabilityId":258,"entities":946,"unattended":499,"contexts":951},"The Product asks the Owner to confirm, says the habit's check-ins will be lost, and offers to pause it instead",[947,949],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":948,"with":498},[],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":950,"with":498},[],[952,953],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":955,"kind":705,"actorId":230,"capabilityId":258,"entities":956,"unattended":499,"contexts":963},"The Owner confirms the deletion",[957,960],{"entityId":271,"as":498,"effect":958,"from":529,"to":498,"facts":959,"with":498},"removes",[],{"entityId":266,"as":498,"effect":958,"from":498,"to":498,"facts":961,"with":962},[],{"entityId":271,"as":498},[964,965],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":967,"kind":774,"actorId":230,"capabilityId":258,"entities":968,"unattended":499,"contexts":971},"Nothing of it remains on Today or in the list of habits",[969],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":970,"with":498},[],[972,973],{"routeId":242,"placeId":378},{"routeId":753,"placeId":301},"The Owner no longer wants to keep a habit at all.",[],"The habit and all of its check-ins are gone for good, and no streak or history\nof it remains.",[978,979,980],"The Owner declines to confirm → the habit and its history stay as they were.","The Owner pauses instead → the habit is paused with its history kept.","The habit has suggested adjustments → they are removed with it.",[],[],{"id":283,"capabilityId":258,"title":984,"kindId":212,"actorIds":985,"routes":986,"steps":989,"trigger":1043,"decisionPoints":1044,"outcome":1045,"edgeCases":1046,"intent":235,"supportingSections":1047,"references":1048},"Delete a habit with suggested adjustments",[230],[987,988],{"id":242,"name":701},{"id":753,"name":754},[990,998,1008,1035],{"text":991,"kind":705,"actorId":230,"capabilityId":258,"entities":992,"unattended":499,"contexts":995},"The Owner chooses to delete a habit that has had suggestions",[993],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":994,"with":498},[275],[996,997],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":999,"kind":725,"actorId":230,"capabilityId":258,"entities":1000,"unattended":499,"contexts":1005},"The Product asks the Owner to confirm, says the habit's check-ins and suggestions will be lost, and offers to pause it instead",[1001,1003],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1002,"with":498},[],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1004,"with":498},[],[1006,1007],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1009,"kind":705,"actorId":230,"capabilityId":258,"entities":1010,"unattended":499,"contexts":1032},"The Owner confirms the deletion, and the habit's suggested adjustments go with it, whether waiting or already answered",[1011,1013,1016,1020,1024,1028],{"entityId":271,"as":498,"effect":958,"from":529,"to":498,"facts":1012,"with":498},[],{"entityId":266,"as":498,"effect":958,"from":498,"to":498,"facts":1014,"with":1015},[],{"entityId":271,"as":498},{"entityId":459,"as":1017,"effect":958,"from":562,"to":498,"facts":1018,"with":1019},"waiting",[],{"entityId":271,"as":498},{"entityId":459,"as":1021,"effect":958,"from":565,"to":498,"facts":1022,"with":1023},"accepted",[],{"entityId":271,"as":498},{"entityId":459,"as":1025,"effect":958,"from":568,"to":498,"facts":1026,"with":1027},"dismissed",[],{"entityId":271,"as":498},{"entityId":459,"as":1029,"effect":958,"from":571,"to":498,"facts":1030,"with":1031},"outdated",[],{"entityId":271,"as":498},[1033,1034],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1036,"kind":774,"actorId":230,"capabilityId":258,"entities":1037,"unattended":499,"contexts":1040},"Nothing of it remains in the list of habits",[1038],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1039,"with":498},[],[1041,1042],{"routeId":242,"placeId":378},{"routeId":753,"placeId":301},"The Owner deletes a habit that weekly reflections have suggested schedule\nchanges for.",[],"The habit, its check-ins and every suggested adjustment for it are gone for\ngood. The weekly reflections that suggested them keep their figures and summary\nand offer nothing to accept or dismiss.",[],[],[],{"id":284,"capabilityId":258,"title":1050,"kindId":212,"actorIds":1051,"routes":1052,"steps":1055,"trigger":1091,"decisionPoints":1092,"outcome":976,"edgeCases":1093,"intent":235,"supportingSections":1094,"references":1095},"Delete a paused habit",[230],[1053,1054],{"id":242,"name":701},{"id":753,"name":754},[1056,1064,1074,1084],{"text":1057,"kind":705,"actorId":230,"capabilityId":258,"entities":1058,"unattended":499,"contexts":1061},"The Owner chooses to delete a paused habit",[1059],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1060,"with":498},[275],[1062,1063],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1065,"kind":725,"actorId":230,"capabilityId":258,"entities":1066,"unattended":499,"contexts":1071},"The Product asks the Owner to confirm and says the habit's check-ins will be lost",[1067,1069],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1068,"with":498},[],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1070,"with":498},[],[1072,1073],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":955,"kind":705,"actorId":230,"capabilityId":258,"entities":1075,"unattended":499,"contexts":1081},[1076,1078],{"entityId":271,"as":498,"effect":958,"from":532,"to":498,"facts":1077,"with":498},[],{"entityId":266,"as":498,"effect":958,"from":498,"to":498,"facts":1079,"with":1080},[],{"entityId":271,"as":498},[1082,1083],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1036,"kind":774,"actorId":230,"capabilityId":258,"entities":1085,"unattended":499,"contexts":1088},[1086],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1087,"with":498},[],[1089,1090],{"routeId":242,"placeId":378},{"routeId":753,"placeId":301},"The Owner paused a habit and decides not to come back to it.",[],[],[],[],{"id":470,"capabilityId":453,"title":1097,"kindId":216,"actorIds":1098,"routes":1099,"steps":1101,"trigger":1131,"decisionPoints":1132,"outcome":1133,"edgeCases":1134,"intent":235,"supportingSections":1136,"references":1137},"Dismiss a suggested adjustment",[230],[1100],{"id":242,"name":701},[1102,1110,1117,1124],{"text":704,"kind":705,"actorId":230,"capabilityId":453,"entities":1103,"unattended":499,"contexts":1108},[1104,1106],{"entityId":417,"as":498,"effect":708,"from":498,"to":498,"facts":1105,"with":498},[466,467,419],{"entityId":459,"as":498,"effect":708,"from":498,"to":498,"facts":1107,"with":498},[461,462],[1109],{"routeId":242,"placeId":449},{"text":1111,"kind":705,"actorId":230,"capabilityId":453,"entities":1112,"unattended":499,"contexts":1115},"The Owner dismisses the suggested adjustment",[1113],{"entityId":459,"as":498,"effect":708,"from":498,"to":498,"facts":1114,"with":498},[461],[1116],{"routeId":242,"placeId":449},{"text":1118,"kind":725,"actorId":230,"capabilityId":453,"entities":1119,"unattended":499,"contexts":1122},"The Product records that the Owner dismissed it",[1120],{"entityId":459,"as":498,"effect":728,"from":562,"to":568,"facts":1121,"with":498},[],[1123],{"routeId":242,"placeId":449},{"text":1125,"kind":774,"actorId":230,"capabilityId":453,"entities":1126,"unattended":499,"contexts":1129},"The habit keeps its schedule",[1127],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1128,"with":498},[276],[1130],{"routeId":242,"placeId":449},"The Owner does not want the change a weekly reflection suggests.",[],"The habit is unchanged and the suggestion reads as dismissed.",[1135],"The suggestion no longer fits the habit → it is dismissed all the same, and the habit is unchanged.",[],[],{"id":471,"capabilityId":411,"title":1139,"kindId":212,"actorIds":1140,"routes":1141,"steps":1143,"trigger":1178,"decisionPoints":1179,"outcome":1180,"edgeCases":1181,"intent":235,"supportingSections":1182,"references":1183},"Generate a reflection with nothing to suggest",[],[1142],{"id":242,"name":701},[1144,1151,1159,1165,1171],{"text":1145,"kind":774,"actorId":498,"capabilityId":411,"entities":1146,"unattended":1149,"contexts":1150},"The week ends for an Owner who has reflections on",[1147],{"entityId":230,"as":498,"effect":708,"from":498,"to":498,"facts":1148,"with":498},[407],true,[],{"text":1152,"kind":725,"actorId":498,"capabilityId":411,"entities":1153,"unattended":499,"contexts":1158},"The Product reads back the week's check-ins for each active habit",[1154,1156],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1155,"with":498},[276],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1157,"with":498},[268],[],{"text":1160,"kind":725,"actorId":498,"capabilityId":411,"entities":1161,"unattended":499,"contexts":1164},"The Product asks a language model to summarize the week, and records the weekly reflection with its consistency and summary",[1162],{"entityId":417,"as":498,"effect":815,"from":498,"to":498,"facts":1163,"with":498},[466,467,419],[],{"text":1166,"kind":774,"actorId":498,"capabilityId":411,"entities":1167,"unattended":499,"contexts":1170},"Every active habit kept to its schedule, so no adjustment is proposed",[1168],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1169,"with":498},[276],[],{"text":1172,"kind":774,"actorId":498,"capabilityId":411,"entities":1173,"unattended":499,"contexts":1176},"The weekly reflection presents the week with nothing to answer",[1174],{"entityId":417,"as":498,"effect":708,"from":498,"to":498,"facts":1175,"with":498},[466,467,419],[1177],{"routeId":242,"placeId":449},"A week ends in which every active habit kept to its schedule.",[],"The weekly reflection reads the week back and proposes no change.",[],[],[],{"id":422,"capabilityId":411,"title":1185,"kindId":216,"actorIds":1186,"routes":1187,"steps":1189,"trigger":1224,"decisionPoints":1225,"outcome":1226,"edgeCases":1227,"intent":235,"supportingSections":1230,"references":1231},"Generate a weekly reflection",[],[1188],{"id":242,"name":701},[1190,1195,1202,1207,1215],{"text":1145,"kind":774,"actorId":498,"capabilityId":411,"entities":1191,"unattended":1149,"contexts":1194},[1192],{"entityId":230,"as":498,"effect":708,"from":498,"to":498,"facts":1193,"with":498},[407],[],{"text":1152,"kind":725,"actorId":498,"capabilityId":411,"entities":1196,"unattended":499,"contexts":1201},[1197,1199],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1198,"with":498},[276],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1200,"with":498},[268],[],{"text":1160,"kind":725,"actorId":498,"capabilityId":411,"entities":1203,"unattended":499,"contexts":1206},[1204],{"entityId":417,"as":498,"effect":815,"from":498,"to":498,"facts":1205,"with":498},[466,467,419],[],{"text":1208,"kind":725,"actorId":498,"capabilityId":411,"entities":1209,"unattended":499,"contexts":1214},"The Product asks the language model to draft a new schedule for the one habit whose schedule the week fell furthest short of, and keeps it as a suggested adjustment",[1210,1212],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1211,"with":498},[276],{"entityId":459,"as":498,"effect":815,"from":498,"to":562,"facts":1213,"with":498},[461,462],[],{"text":1216,"kind":774,"actorId":498,"capabilityId":411,"entities":1217,"unattended":499,"contexts":1222},"The new weekly reflection waits among the reflections, and no habit has changed",[1218,1220],{"entityId":417,"as":498,"effect":708,"from":498,"to":498,"facts":1219,"with":498},[419],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1221,"with":498},[],[1223],{"routeId":242,"placeId":406},"A week ends for an Owner who has turned reflections on, with no\nOwner present.",[],"A weekly reflection for that week waits for the Owner, with how consistently\neach active habit was done, a short summary, and one suggested adjustment.\nEvery habit is exactly as the Owner left it.",[1228,1229],"No active habit had a scheduled day that week → no reflection is prepared for it.","That habit already has a suggested adjustment waiting → no second one is drafted for it, and the earlier one stays open to accept or dismiss.",[],[],{"id":472,"capabilityId":411,"title":1233,"kindId":212,"actorIds":1234,"routes":1235,"steps":1237,"trigger":1269,"decisionPoints":1270,"outcome":1271,"edgeCases":1272,"intent":235,"supportingSections":1273,"references":1274},"Generate while the language model is unavailable",[],[1236],{"id":242,"name":701},[1238,1243,1250,1254,1260],{"text":1145,"kind":774,"actorId":498,"capabilityId":411,"entities":1239,"unattended":1149,"contexts":1242},[1240],{"entityId":230,"as":498,"effect":708,"from":498,"to":498,"facts":1241,"with":498},[407],[],{"text":1152,"kind":725,"actorId":498,"capabilityId":411,"entities":1244,"unattended":499,"contexts":1249},[1245,1247],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1246,"with":498},[276],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1248,"with":498},[268],[],{"text":1251,"kind":774,"actorId":498,"capabilityId":411,"entities":1252,"unattended":499,"contexts":1253},"The language model cannot be reached or returns nothing usable",[],[],{"text":1255,"kind":725,"actorId":498,"capabilityId":411,"entities":1256,"unattended":499,"contexts":1259},"The Product records the weekly reflection with its consistency and no summary",[1257],{"entityId":417,"as":498,"effect":815,"from":498,"to":498,"facts":1258,"with":498},[466,419],[],{"text":1261,"kind":774,"actorId":498,"capabilityId":411,"entities":1262,"unattended":499,"contexts":1267},"The weekly reflection presents the consistency alone, with no suggested adjustment",[1263,1265],{"entityId":417,"as":498,"effect":708,"from":498,"to":498,"facts":1264,"with":498},[466,419],{"entityId":459,"as":498,"effect":708,"from":498,"to":498,"facts":1266,"with":498},[],[1268],{"routeId":242,"placeId":449},"A week ends while the language model the Product queries is unavailable.",[],"The Owner still gets the week's consistency figures, without a summary or a\nsuggested adjustment, and nothing waits on the language model.",[],[],[],{"id":285,"capabilityId":260,"title":1276,"kindId":216,"actorIds":1277,"routes":1278,"steps":1281,"trigger":1306,"decisionPoints":1307,"outcome":1308,"edgeCases":1309,"intent":235,"supportingSections":1310,"references":1311},"Pause a habit",[230],[1279,1280],{"id":242,"name":701},{"id":753,"name":754},[1282,1290,1298],{"text":1283,"kind":705,"actorId":230,"capabilityId":260,"entities":1284,"unattended":499,"contexts":1287},"The Owner pauses an active habit",[1285],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1286,"with":498},[275],[1288,1289],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1291,"kind":725,"actorId":230,"capabilityId":260,"entities":1292,"unattended":499,"contexts":1295},"The Product sets the habit aside",[1293],{"entityId":271,"as":498,"effect":728,"from":529,"to":532,"facts":1294,"with":498},[],[1296,1297],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1299,"kind":774,"actorId":230,"capabilityId":260,"entities":1300,"unattended":499,"contexts":1303},"The habit leaves Today and is listed as paused among the habits, with its streak kept",[1301],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1302,"with":498},[274],[1304,1305],{"routeId":242,"placeId":378},{"routeId":753,"placeId":301},"The Owner wants a break from a habit without losing it.",[],"The habit is paused: it is not due and takes no check-ins, and its schedule,\nhistory and streak are kept.",[],[],[],{"id":286,"capabilityId":257,"title":1313,"kindId":220,"actorIds":1314,"routes":1315,"steps":1318,"trigger":1341,"decisionPoints":1342,"outcome":1343,"edgeCases":1344,"intent":235,"supportingSections":1345,"references":1346},"Reject a day outside the past week",[230],[1316,1317],{"id":242,"name":701},{"id":753,"name":754},[1319,1327,1333],{"text":1320,"kind":705,"actorId":230,"capabilityId":257,"entities":1321,"unattended":499,"contexts":1324},"The Owner opens a habit and picks a day more than a week ago, or one still to come",[1322],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1323,"with":498},[275],[1325,1326],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1328,"kind":725,"actorId":230,"capabilityId":257,"entities":1329,"unattended":499,"contexts":1330},"The Product explains that only today and the six days before it can be checked off",[],[1331,1332],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1334,"kind":774,"actorId":230,"capabilityId":257,"entities":1335,"unattended":499,"contexts":1338},"No check-in is recorded and the history is unchanged",[1336],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1337,"with":498},[],[1339,1340],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},"The Owner tries to check off a habit for a day before the past week or after\ntoday.",[],"Nothing is recorded, the Owner knows which days can be checked off, and the\nhabit's history and streak are unchanged.",[],[],[],{"id":312,"capabilityId":305,"title":1348,"kindId":220,"actorIds":1349,"routes":1350,"steps":1353,"trigger":1379,"decisionPoints":1380,"outcome":1381,"edgeCases":1382,"intent":235,"supportingSections":1385,"references":1386},"Reject a schedule with no days",[230],[1351,1352],{"id":242,"name":701},{"id":753,"name":754},[1354,1361,1367,1373],{"text":882,"kind":705,"actorId":230,"capabilityId":305,"entities":1355,"unattended":499,"contexts":1358},[1356],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1357,"with":498},[275,276],[1359,1360],{"routeId":242,"placeId":378},{"routeId":753,"placeId":301},{"text":1362,"kind":705,"actorId":230,"capabilityId":305,"entities":1363,"unattended":499,"contexts":1364},"The Owner gives it a name and chooses specific weekdays without picking a day",[],[1365,1366],{"routeId":242,"placeId":392},{"routeId":753,"placeId":320},{"text":1368,"kind":725,"actorId":230,"capabilityId":305,"entities":1369,"unattended":499,"contexts":1370},"The Product explains that at least one day must be chosen",[],[1371,1372],{"routeId":242,"placeId":392},{"routeId":753,"placeId":320},{"text":1374,"kind":774,"actorId":230,"capabilityId":305,"entities":1375,"unattended":499,"contexts":1376},"Nothing is saved, and the name and choices stay as the Owner entered them",[],[1377,1378],{"routeId":242,"placeId":392},{"routeId":753,"placeId":320},"The Owner tries to save a new habit due on chosen weekdays without choosing any.",[],"No habit is created, and the Owner can pick a day or another schedule without\nentering anything again.",[1383,1384],"A number of times each week below one or above seven → the Product refuses it the same way.","No name → the Product asks for one and keeps the chosen schedule.",[],[],{"id":473,"capabilityId":360,"title":1388,"kindId":212,"actorIds":1389,"routes":1390,"steps":1392,"trigger":1431,"decisionPoints":1432,"outcome":1433,"edgeCases":1434,"intent":235,"supportingSections":1436,"references":1437},"Reject an outdated suggestion",[230],[1391],{"id":242,"name":701},[1393,1401,1408,1415,1424],{"text":704,"kind":705,"actorId":230,"capabilityId":360,"entities":1394,"unattended":499,"contexts":1399},[1395,1397],{"entityId":417,"as":498,"effect":708,"from":498,"to":498,"facts":1396,"with":498},[466,467,419],{"entityId":459,"as":498,"effect":708,"from":498,"to":498,"facts":1398,"with":498},[461,462],[1400],{"routeId":242,"placeId":449},{"text":1402,"kind":705,"actorId":230,"capabilityId":360,"entities":1403,"unattended":499,"contexts":1406},"The Owner accepts the suggested adjustment",[1404],{"entityId":459,"as":498,"effect":708,"from":498,"to":498,"facts":1405,"with":498},[461],[1407],{"routeId":242,"placeId":449},{"text":1409,"kind":774,"actorId":230,"capabilityId":360,"entities":1410,"unattended":499,"contexts":1413},"The habit's schedule was changed, or the habit was paused, after the suggestion was made",[1411],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1412,"with":498},[276],[1414],{"routeId":242,"placeId":449},{"text":1416,"kind":725,"actorId":230,"capabilityId":360,"entities":1417,"unattended":499,"contexts":1422},"The Product explains that the suggested adjustment no longer fits the habit, and marks it outdated",[1418,1420],{"entityId":459,"as":498,"effect":728,"from":562,"to":571,"facts":1419,"with":498},[],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1421,"with":498},[],[1423],{"routeId":242,"placeId":449},{"text":1425,"kind":774,"actorId":230,"capabilityId":360,"entities":1426,"unattended":499,"contexts":1429},"The habit keeps the schedule and state the Owner gave it",[1427],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1428,"with":498},[276],[1430],{"routeId":242,"placeId":449},"The Owner accepts a suggestion for a habit they have changed or paused since\nthe reflection was prepared.",[],"Nothing about the habit changes, the Owner knows why, and the suggestion reads\nas outdated.",[1435],"The habit was deleted since → its suggestion was removed with it, and the weekly reflection offers nothing to accept or dismiss.",[],[],{"id":287,"capabilityId":257,"title":1439,"kindId":220,"actorIds":1440,"routes":1441,"steps":1444,"trigger":1473,"decisionPoints":1474,"outcome":1475,"edgeCases":1476,"intent":235,"supportingSections":1477,"references":1478},"Reject checking off a paused habit",[230],[1442,1443],{"id":242,"name":701},{"id":753,"name":754},[1445,1453,1463],{"text":1446,"kind":705,"actorId":230,"capabilityId":257,"entities":1447,"unattended":499,"contexts":1450},"The Owner opens a paused habit and tries to check off a day",[1448],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1449,"with":498},[275],[1451,1452],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1454,"kind":725,"actorId":230,"capabilityId":257,"entities":1455,"unattended":499,"contexts":1460},"The Product explains that a paused habit takes no check-ins until it is resumed",[1456,1458],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1457,"with":498},[],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1459,"with":498},[],[1461,1462],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1464,"kind":774,"actorId":230,"capabilityId":257,"entities":1465,"unattended":499,"contexts":1470},"No check-in is recorded, and the habit stays paused",[1466,1468],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1467,"with":498},[],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1469,"with":498},[],[1471,1472],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},"The Owner tries to check off a day for a habit that is paused.",[],"Nothing is recorded and the habit stays paused, with the way to resume it in\nreach.",[],[],[],{"id":288,"capabilityId":259,"title":1480,"kindId":216,"actorIds":1481,"routes":1482,"steps":1485,"trigger":1510,"decisionPoints":1511,"outcome":1512,"edgeCases":1513,"intent":235,"supportingSections":1515,"references":1516},"Rename a habit",[230],[1483,1484],{"id":242,"name":701},{"id":753,"name":754},[1486,1494,1502],{"text":1487,"kind":705,"actorId":230,"capabilityId":259,"entities":1488,"unattended":499,"contexts":1491},"The Owner opens a habit and gives it a new name",[1489],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1490,"with":498},[275],[1492,1493],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1495,"kind":725,"actorId":230,"capabilityId":259,"entities":1496,"unattended":499,"contexts":1499},"The Product saves the new name",[1497],{"entityId":271,"as":498,"effect":728,"from":498,"to":498,"facts":1498,"with":498},[275],[1500,1501],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1503,"kind":774,"actorId":230,"capabilityId":259,"entities":1504,"unattended":499,"contexts":1507},"The habit keeps its schedule, history and streak under its new name",[1505],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1506,"with":498},[274,275,276],[1508,1509],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},"The Owner wants a habit called something else.",[],"The habit has its new name everywhere it is listed, and nothing else about it\nhas changed.",[1514],"The Owner clears the name → the Product refuses to save until the habit has a name, and the old one stays.",[],[],{"id":289,"capabilityId":261,"title":1518,"kindId":216,"actorIds":1519,"routes":1520,"steps":1523,"trigger":1548,"decisionPoints":1549,"outcome":1550,"edgeCases":1551,"intent":235,"supportingSections":1552,"references":1553},"Resume a paused habit",[230],[1521,1522],{"id":242,"name":701},{"id":753,"name":754},[1524,1532,1540],{"text":1525,"kind":705,"actorId":230,"capabilityId":261,"entities":1526,"unattended":499,"contexts":1529},"The Owner resumes a paused habit",[1527],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1528,"with":498},[275],[1530,1531],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1533,"kind":725,"actorId":230,"capabilityId":261,"entities":1534,"unattended":499,"contexts":1537},"The Product makes the habit active again on its schedule",[1535],{"entityId":271,"as":498,"effect":728,"from":532,"to":529,"facts":1536,"with":498},[],[1538,1539],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1541,"kind":774,"actorId":230,"capabilityId":261,"entities":1542,"unattended":499,"contexts":1545},"Today lists the habit again from its next due day, with its streak carrying on from before the pause",[1543],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1544,"with":498},[274,276],[1546,1547],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},"The Owner is ready to pick a paused habit up again.",[],"The habit is active on the schedule it had, and the streak it had when it was\npaused carries on.",[],[],[],{"id":290,"capabilityId":263,"title":1555,"kindId":216,"actorIds":1556,"routes":1557,"steps":1560,"trigger":1589,"decisionPoints":1590,"outcome":1591,"edgeCases":1592,"intent":235,"supportingSections":1594,"references":1595},"See a habit's streak and history",[230],[1558,1559],{"id":242,"name":701},{"id":753,"name":754},[1561,1569,1579],{"text":1562,"kind":705,"actorId":230,"capabilityId":263,"entities":1563,"unattended":499,"contexts":1566},"The Owner opens a habit from their habits",[1564],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1565,"with":498},[274,275,276],[1567,1568],{"routeId":242,"placeId":378},{"routeId":753,"placeId":301},{"text":1570,"kind":725,"actorId":230,"capabilityId":263,"entities":1571,"unattended":499,"contexts":1576},"The Product presents the habit's schedule, the day it started, its current and best streak, and the days it was done",[1572,1574],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1573,"with":498},[273,274,275,276,277],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1575,"with":498},[268],[1577,1578],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1580,"kind":774,"actorId":230,"capabilityId":263,"entities":1581,"unattended":499,"contexts":1586},"Nothing about the habit or its check-ins changes",[1582,1584],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1583,"with":498},[],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1585,"with":498},[],[1587,1588],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},"The Owner wants to know how a habit is going.",[],"The Owner sees the habit's current and best streak and every day it was done,\nand nothing has changed.",[1593],"A habit with no check-ins yet → its streaks read zero and its history is empty from the day it started.",[],[],{"id":291,"capabilityId":263,"title":1597,"kindId":212,"actorIds":1598,"routes":1599,"steps":1602,"trigger":1627,"decisionPoints":1628,"outcome":1629,"edgeCases":1630,"intent":235,"supportingSections":1631,"references":1632},"See a streak carried across a pause",[230],[1600,1601],{"id":242,"name":701},{"id":753,"name":754},[1603,1611,1619],{"text":1604,"kind":705,"actorId":230,"capabilityId":263,"entities":1605,"unattended":499,"contexts":1608},"The Owner opens a habit that was paused for a while and has been resumed",[1606],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1607,"with":498},[274,275],[1609,1610],{"routeId":242,"placeId":378},{"routeId":753,"placeId":301},{"text":1612,"kind":725,"actorId":230,"capabilityId":263,"entities":1613,"unattended":499,"contexts":1616},"The Product presents a current streak that joins the scheduled days before and after the pause",[1614],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1615,"with":498},[273,274],[1617,1618],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1620,"kind":774,"actorId":230,"capabilityId":263,"entities":1621,"unattended":499,"contexts":1624},"The history marks the paused days as paused, not as missed",[1622],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1623,"with":498},[268],[1625,1626],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},"The Owner looks at a habit they paused and later resumed.",[],"The streak counts straight through the pause, and the paused days read as a\nbreak rather than as misses.",[],[],[],{"id":292,"capabilityId":263,"title":1634,"kindId":212,"actorIds":1635,"routes":1636,"steps":1639,"trigger":1666,"decisionPoints":1667,"outcome":1668,"edgeCases":1669,"intent":235,"supportingSections":1670,"references":1671},"See a weekly target streak",[230],[1637,1638],{"id":242,"name":701},{"id":753,"name":754},[1640,1648,1658],{"text":1641,"kind":705,"actorId":230,"capabilityId":263,"entities":1642,"unattended":499,"contexts":1645},"The Owner opens a habit kept a number of times each week",[1643],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1644,"with":498},[274,275,276],[1646,1647],{"routeId":242,"placeId":378},{"routeId":753,"placeId":301},{"text":1649,"kind":725,"actorId":230,"capabilityId":263,"entities":1650,"unattended":499,"contexts":1655},"The Product presents its streak in weeks whose target was met, and how far this week has come toward the target",[1651,1653],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1652,"with":498},[273,274,276],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1654,"with":498},[268],[1656,1657],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1659,"kind":774,"actorId":230,"capabilityId":263,"entities":1660,"unattended":499,"contexts":1663},"The week in progress does not break the streak before it ends",[1661],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1662,"with":498},[274],[1664,1665],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},"The Owner looks at a habit they mean to do a number of times each week.",[],"The streak is counted in weeks, and an unfinished week only counts against it\nonce the week is over.",[],[],[],{"id":423,"capabilityId":410,"title":1673,"kindId":216,"actorIds":1674,"routes":1675,"steps":1677,"trigger":1692,"decisionPoints":1693,"outcome":1694,"edgeCases":1695,"intent":235,"supportingSections":1697,"references":1698},"Turn off reflections",[230],[1676],{"id":242,"name":701},[1678,1685],{"text":1679,"kind":705,"actorId":230,"capabilityId":410,"entities":1680,"unattended":499,"contexts":1683},"The Owner turns reflections off",[1681],{"entityId":230,"as":498,"effect":728,"from":498,"to":498,"facts":1682,"with":498},[407],[1684],{"routeId":242,"placeId":406},{"text":1686,"kind":774,"actorId":230,"capabilityId":410,"entities":1687,"unattended":499,"contexts":1690},"No further weekly reflection is prepared, and those already prepared stay readable",[1688],{"entityId":417,"as":498,"effect":708,"from":498,"to":498,"facts":1689,"with":498},[419],[1691],{"routeId":242,"placeId":406},"The Owner no longer wants a weekly look back.",[],"The Product stops preparing reflections and stops reading the Owner's week on\nits own; earlier reflections remain.",[1696],"A suggested adjustment is still waiting → it can still be accepted or dismissed.",[],[],{"id":424,"capabilityId":410,"title":1700,"kindId":216,"actorIds":1701,"routes":1702,"steps":1704,"trigger":1731,"decisionPoints":1732,"outcome":1733,"edgeCases":1734,"intent":235,"supportingSections":1735,"references":1736},"Turn on reflections",[230],[1703],{"id":242,"name":701},[1705,1712,1717,1724],{"text":1706,"kind":705,"actorId":230,"capabilityId":410,"entities":1707,"unattended":499,"contexts":1710},"The Owner chooses to turn reflections on",[1708],{"entityId":230,"as":498,"effect":708,"from":498,"to":498,"facts":1709,"with":498},[407],[1711],{"routeId":242,"placeId":406},{"text":1713,"kind":725,"actorId":230,"capabilityId":410,"entities":1714,"unattended":499,"contexts":1715},"The Product explains that each week it will read the week back, write a summary with a language model, and may suggest one schedule change that waits for the Owner",[],[1716],{"routeId":242,"placeId":406},{"text":1718,"kind":705,"actorId":230,"capabilityId":410,"entities":1719,"unattended":499,"contexts":1722},"The Owner confirms, and the Product records the choice",[1720],{"entityId":230,"as":498,"effect":728,"from":498,"to":498,"facts":1721,"with":498},[407],[1723],{"routeId":242,"placeId":406},{"text":1725,"kind":774,"actorId":230,"capabilityId":410,"entities":1726,"unattended":499,"contexts":1729},"A weekly reflection will be prepared when the current week ends",[1727],{"entityId":417,"as":498,"effect":708,"from":498,"to":498,"facts":1728,"with":498},[],[1730],{"routeId":242,"placeId":406},"The Owner wants a look back at each week.",[],"Reflections are on, and the Owner knew what it reads and that it\nchanges no habit by itself before agreeing.",[],[],[],{"id":351,"capabilityId":262,"title":1738,"kindId":216,"actorIds":1739,"routes":1740,"steps":1743,"trigger":1770,"decisionPoints":1771,"outcome":1772,"edgeCases":1773,"intent":235,"supportingSections":1774,"references":1775},"Uncheck a habit done today",[230],[1741,1742],{"id":242,"name":701},{"id":753,"name":754},[1744,1754,1762],{"text":1745,"kind":705,"actorId":230,"capabilityId":262,"entities":1746,"unattended":499,"contexts":1751},"The Owner unchecks a habit checked off today",[1747,1749],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1748,"with":498},[275],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1750,"with":498},[268],[1752,1753],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},{"text":1755,"kind":725,"actorId":230,"capabilityId":262,"entities":1756,"unattended":499,"contexts":1759},"The Product removes today's check-in",[1757],{"entityId":266,"as":498,"effect":958,"from":498,"to":498,"facts":1758,"with":498},[],[1760,1761],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},{"text":1763,"kind":774,"actorId":230,"capabilityId":262,"entities":1764,"unattended":499,"contexts":1767},"The habit is due again today, and its current streak no longer counts today",[1765],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1766,"with":498},[274],[1768,1769],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},"The Owner checked off a habit by mistake.",[],"There is no check-in for today, the habit is due again, and its streak is as it\nwas before the mistake.",[],[],[],{"id":293,"capabilityId":262,"title":1777,"kindId":212,"actorIds":1778,"routes":1779,"steps":1782,"trigger":1809,"decisionPoints":1810,"outcome":1811,"edgeCases":1812,"intent":235,"supportingSections":1814,"references":1815},"Uncheck an earlier day",[230],[1780,1781],{"id":242,"name":701},{"id":753,"name":754},[1783,1793,1801],{"text":1784,"kind":705,"actorId":230,"capabilityId":262,"entities":1785,"unattended":499,"contexts":1790},"The Owner opens a habit and unchecks a day of the past week that has a check-in",[1786,1788],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1787,"with":498},[275],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1789,"with":498},[268],[1791,1792],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1794,"kind":725,"actorId":230,"capabilityId":262,"entities":1795,"unattended":499,"contexts":1798},"The Product removes that day's check-in",[1796],{"entityId":266,"as":498,"effect":958,"from":498,"to":498,"facts":1797,"with":498},[],[1799,1800],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},{"text":1802,"kind":774,"actorId":230,"capabilityId":262,"entities":1803,"unattended":499,"contexts":1806},"The day leaves the habit's history, and its streaks are counted again",[1804],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1805,"with":498},[273,274],[1807,1808],{"routeId":242,"placeId":358},{"routeId":753,"placeId":253},"The Owner recorded a day of the past week that they did not actually do the\nhabit on.",[],"The day is no longer recorded as done, and the habit's streaks are counted\nwithout it.",[1813],"A day before the past week → the habit offers no way to uncheck it, and its history stays as it is.",[],[],[1817,1828],{"id":1818,"title":1819,"goal":1820,"successCriterion":1821,"actorIds":1822,"capabilityIds":1823,"failureOnlyCapabilityIds":1824,"domainIds":1825,"intent":235,"supportingSections":1826,"references":1827},"change-a-schedule-from-a-weekly-reflection","Change a schedule from a weekly reflection","The Owner wants a habit's schedule to follow what the week's reflection\nshowed.","The habit follows the accepted schedule, and the Owner sees it there.",[230],[360,263],[],[483,489],[],[],{"id":1829,"title":1830,"goal":1831,"successCriterion":1832,"actorIds":1833,"capabilityIds":1834,"failureOnlyCapabilityIds":1835,"domainIds":1836,"intent":235,"supportingSections":1837,"references":1838},"start-a-habit","Start a habit","The Owner wants to begin keeping up something new and record the first day\nthey do it.","The habit exists on its chosen schedule and has its first check-in.",[230],[257,305],[],[483],[],[],[1840,1878,1924,1971],{"id":475,"journeyId":1818,"result":1841,"title":1842,"kindId":212,"actorIds":1843,"routes":1844,"steps":1846,"trigger":1872,"decisionPoints":1873,"outcome":1874,"edgeCases":1875,"intent":235,"supportingSections":1876,"references":1877},"not-achieved","Accept a suggestion that no longer fits",[230],[1845],{"id":242,"name":701},[1847,1856,1865],{"text":1848,"kind":705,"actorId":230,"capabilityId":360,"entities":1849,"unattended":499,"contexts":1854},"The Owner opens the weekly reflection and reads its suggested adjustment",[1850,1852],{"entityId":417,"as":498,"effect":708,"from":498,"to":498,"facts":1851,"with":498},[466,467,419],{"entityId":459,"as":498,"effect":708,"from":498,"to":498,"facts":1853,"with":498},[461,462],[1855],{"routeId":242,"placeId":449},{"text":1857,"kind":705,"actorId":230,"capabilityId":360,"entities":1858,"unattended":499,"contexts":1863},"The Owner accepts a suggested adjustment for a habit they have changed since",[1859,1861],{"entityId":459,"as":498,"effect":708,"from":498,"to":498,"facts":1860,"with":498},[461],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1862,"with":498},[276],[1864],{"routeId":242,"placeId":449},{"text":1866,"kind":725,"actorId":230,"capabilityId":360,"entities":1867,"unattended":499,"contexts":1870},"The Product explains that the suggestion no longer fits, and marks the suggested adjustment outdated",[1868],{"entityId":459,"as":498,"effect":728,"from":562,"to":571,"facts":1869,"with":498},[],[1871],{"routeId":242,"placeId":449},"The Owner accepts a suggestion for a habit whose schedule they already changed\nafter the reflection was prepared.",[],"The Journey goal is not achieved: the habit keeps the schedule the Owner gave\nit, and the suggestion reads as outdated.",[],[],[],{"id":371,"journeyId":1818,"result":1879,"title":1880,"kindId":216,"actorIds":1881,"routes":1882,"steps":1884,"trigger":1918,"decisionPoints":1919,"outcome":1920,"edgeCases":1921,"intent":235,"supportingSections":1922,"references":1923},"achieved","Accept and see the new schedule",[230],[1883],{"id":242,"name":701},[1885,1893,1902,1909],{"text":1848,"kind":705,"actorId":230,"capabilityId":360,"entities":1886,"unattended":499,"contexts":1891},[1887,1889],{"entityId":417,"as":498,"effect":708,"from":498,"to":498,"facts":1888,"with":498},[466,467,419],{"entityId":459,"as":498,"effect":708,"from":498,"to":498,"facts":1890,"with":498},[461,462],[1892],{"routeId":242,"placeId":449},{"text":1894,"kind":705,"actorId":230,"capabilityId":360,"entities":1895,"unattended":499,"contexts":1900},"The Owner accepts the suggested adjustment, and the habit takes the proposed schedule from today",[1896,1898],{"entityId":459,"as":498,"effect":728,"from":562,"to":565,"facts":1897,"with":498},[],{"entityId":271,"as":498,"effect":728,"from":498,"to":498,"facts":1899,"with":498},[276],[1901],{"routeId":242,"placeId":449},{"text":1903,"kind":725,"actorId":230,"capabilityId":360,"entities":1904,"unattended":499,"contexts":1907},"The Product opens the habit",[1905],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1906,"with":498},[275,276],[1908],{"routeId":242,"placeId":358},{"text":1910,"kind":705,"actorId":230,"capabilityId":263,"entities":1911,"unattended":499,"contexts":1916},"The Owner reads the habit's new schedule beside its streak and history",[1912,1914],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1913,"with":498},[273,274,276],{"entityId":266,"as":498,"effect":708,"from":498,"to":498,"facts":1915,"with":498},[268],[1917],{"routeId":242,"placeId":358},"The Owner reads a weekly reflection that suggests a schedule they agree with.",[],"The Journey goal is achieved: the habit follows the accepted schedule from\ntoday, and the Owner sees it on the habit with its streak intact.",[],[],[],{"id":330,"journeyId":1829,"result":1879,"title":1925,"kindId":216,"actorIds":1926,"routes":1927,"steps":1930,"trigger":1965,"decisionPoints":1966,"outcome":1967,"edgeCases":1968,"intent":235,"supportingSections":1969,"references":1970},"Start a habit due today",[230],[1928,1929],{"id":242,"name":701},{"id":753,"name":754},[1931,1939,1947,1957],{"text":1932,"kind":705,"actorId":230,"capabilityId":305,"entities":1933,"unattended":499,"contexts":1936},"The Owner defines a habit with a name and a schedule that makes it due today",[1934],{"entityId":271,"as":498,"effect":815,"from":498,"to":529,"facts":1935,"with":498},[275,276,277],[1937,1938],{"routeId":242,"placeId":392},{"routeId":753,"placeId":320},{"text":1940,"kind":725,"actorId":230,"capabilityId":305,"entities":1941,"unattended":499,"contexts":1944},"The Product returns the Owner to Today, where the new habit is listed as due",[1942],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1943,"with":498},[274,275,276],[1945,1946],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},{"text":1948,"kind":705,"actorId":230,"capabilityId":257,"entities":1949,"unattended":499,"contexts":1954},"The Owner does it and checks the habit off",[1950,1952],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1951,"with":498},[275],{"entityId":266,"as":498,"effect":815,"from":498,"to":498,"facts":1953,"with":498},[268],[1955,1956],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},{"text":1958,"kind":774,"actorId":230,"capabilityId":257,"entities":1959,"unattended":499,"contexts":1962},"The habit's current streak begins at one day",[1960],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1961,"with":498},[274],[1963,1964],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},"The Owner decides to start a habit and do it today.",[],"The Journey goal is achieved: the new habit is active with its first check-in,\nand its streak has begun.",[],[],[],{"id":331,"journeyId":1829,"result":1841,"title":1972,"kindId":212,"actorIds":1973,"routes":1974,"steps":1977,"trigger":2000,"decisionPoints":2001,"outcome":2002,"edgeCases":2003,"intent":235,"supportingSections":2004,"references":2005},"Start a habit not due today",[230],[1975,1976],{"id":242,"name":701},{"id":753,"name":754},[1978,1986,1994],{"text":1979,"kind":705,"actorId":230,"capabilityId":305,"entities":1980,"unattended":499,"contexts":1983},"The Owner defines a habit due only on weekdays that do not include today",[1981],{"entityId":271,"as":498,"effect":815,"from":498,"to":529,"facts":1982,"with":498},[275,276,277],[1984,1985],{"routeId":242,"placeId":392},{"routeId":753,"placeId":320},{"text":1987,"kind":725,"actorId":230,"capabilityId":305,"entities":1988,"unattended":499,"contexts":1991},"The Product returns the Owner to Today, which does not list the new habit",[1989],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1990,"with":498},[276],[1992,1993],{"routeId":242,"placeId":432},{"routeId":753,"placeId":338},{"text":1995,"kind":774,"actorId":230,"capabilityId":498,"entities":1996,"unattended":499,"contexts":1999},"The new habit waits for its first due day, with nothing to check off today",[1997],{"entityId":271,"as":498,"effect":708,"from":498,"to":498,"facts":1998,"with":498},[276],[],"The Owner starts a habit whose first scheduled day is still to come.",[],"The Journey goal is not achieved today: the habit exists and is active, but\nthere is no first check-in until Today lists it on its first due day.",[],[],[],[2007,2019,2030,2041,2052,2077,2094,2112,2129,2147,2164,2182,2198,2209,2226],{"id":2008,"title":2009,"statement":2010,"rationale":2011,"appliesTo":2012,"permits":498,"intent":235,"supportingSections":2017,"references":2018},"a-new-schedule-applies-from-the-day-it-is-set","A new schedule applies from the day it is set","When a habit's schedule changes, whether the Owner edits it or accepts a\nsuggested adjustment, the new schedule decides which days are due from that day\non. Earlier days keep counting against the schedule they had, so the history\nand streak are not rewritten.","Making a schedule realistic should not cost the Owner the record they already\nbuilt.",[2013],{"type":2014,"entityId":271,"effect":728,"from":498,"to":498,"facts":2015,"contexts":2016},"entity",[276],[],[],[],{"id":2020,"title":2021,"statement":2022,"rationale":2023,"appliesTo":2024,"permits":498,"intent":235,"supportingSections":2028,"references":2029},"a-paused-habit-takes-no-check-ins","A paused habit takes no check-ins","While a habit is paused it is not due, Today does not list it, and no day can\nbe checked off for it — including days of the past week before it was paused.\nResuming it opens it to check-ins again from that day.","A pause is a clean break: the history shows paused days as paused, never as a\nmixture of done and skipped.",[2025],{"type":2014,"entityId":266,"effect":815,"from":498,"to":498,"facts":2026,"contexts":2027},[],[],[],[],{"id":2031,"title":2032,"statement":2033,"rationale":2034,"appliesTo":2035,"permits":498,"intent":235,"supportingSections":2039,"references":2040},"a-streak-counts-scheduled-periods-in-a-row","A streak counts scheduled periods in a row","A habit's current streak is the number of its scheduled periods, up to the\nlatest one, that were done without a miss in between. For a habit due every\nday or on chosen weekdays, a period is a scheduled day, and days it is not due\nare skipped. For a habit kept a number of times each week, a period is a\ncalendar week whose target was met. Paused days neither extend nor break a\nstreak, and the period in progress — today, or this week — breaks nothing\nuntil it is over. The best streak is the longest current streak the habit has\nreached.","The Owner chose the schedule. Counting anything else would mark a rest day, or\na planned break, as a failure.",[2036],{"type":2014,"entityId":271,"effect":708,"from":498,"to":498,"facts":2037,"contexts":2038},[273,274],[],[],[],{"id":2042,"title":2043,"statement":2044,"rationale":2045,"appliesTo":2046,"permits":498,"intent":235,"supportingSections":2050,"references":2051},"a-suggested-adjustment-changes-nothing-until-accepted","A suggested adjustment changes nothing until accepted","While a suggested adjustment is proposed, and after it is dismissed or\noutdated, its habit keeps exactly the schedule the Owner gave it. Only\naccepting it gives the habit the proposed schedule, from that day on.","The language model that drafts a suggestion can misread the week; keeping it a\ndraft until the Owner accepts it is what makes it safe to offer.",[2047],{"type":2014,"entityId":459,"effect":498,"from":498,"to":498,"facts":2048,"contexts":2049},[],[],[],[],{"id":2053,"title":2054,"statement":2055,"rationale":2056,"appliesTo":2057,"permits":2061,"intent":235,"supportingSections":2075,"references":2076},"history-is-read-on-the-owners-behalf-only-while-reflections-are-on","History is read on the Owner's behalf only while reflections are on","The Owner reads their own check-ins at any time. The Product reads them on its\nown, and passes them to the language model that writes a summary, only while\nthe Owner has reflections on.","A habit history is personal. Turning the reflection off must stop the Product\nfrom looking at it unprompted, not only stop the reflection from appearing.",[2058],{"type":2014,"entityId":266,"effect":708,"from":498,"to":498,"facts":2059,"contexts":2060},[],[],[2062,2068],{"actorIds":2063,"related":2064,"self":499,"when":2067,"unattended":499,"configuredByEntityId":498},[],[2065,2066],{"verb":523,"entityId":271},{"verb":546,"entityId":230},[],{"actorIds":2069,"related":2070,"self":499,"when":2071,"unattended":1149,"configuredByEntityId":498},[],[],[2072],{"entityId":230,"fact":407,"state":498,"operator":2073,"value":2074},"is","On",[],[],{"id":2078,"title":2079,"statement":2080,"rationale":2081,"appliesTo":2082,"permits":2086,"intent":235,"supportingSections":2092,"references":2093},"only-the-owner-changes-a-habit","Only the Owner changes a habit","A habit's name, schedule and whether it is paused change only when its Owner\nchanges them, directly or by accepting a suggested adjustment.","A habit is the Owner's own intention; nothing else should be able to rewrite\nit.",[2083],{"type":2014,"entityId":271,"effect":728,"from":498,"to":498,"facts":2084,"contexts":2085},[],[],[2087],{"actorIds":2088,"related":2089,"self":499,"when":2091,"unattended":499,"configuredByEntityId":498},[],[2090],{"verb":546,"entityId":230},[],[],[],{"id":2095,"title":2096,"statement":2097,"rationale":2098,"appliesTo":2099,"permits":2103,"intent":235,"supportingSections":2110,"references":2111},"only-the-owner-checks-off-a-habit","Only the Owner checks off a habit","A check-in is recorded only when the Owner checks off one of their habits. The\nProduct never records one on its own, however a week has gone.","A streak means something only if every day in it was a day the Owner said they\ndid the habit.",[2100],{"type":2014,"entityId":266,"effect":815,"from":498,"to":498,"facts":2101,"contexts":2102},[],[],[2104],{"actorIds":2105,"related":2106,"self":499,"when":2109,"unattended":499,"configuredByEntityId":498},[],[2107,2108],{"verb":523,"entityId":271},{"verb":546,"entityId":230},[],[],[],{"id":2113,"title":2114,"statement":2115,"rationale":2116,"appliesTo":2117,"permits":2121,"intent":235,"supportingSections":2127,"references":2128},"only-the-owner-creates-a-habit","Only the Owner creates a habit","A habit is created only by the Owner it will belong to. The Product never adds\none, and a suggested adjustment never proposes one.","Every habit should be one the Owner chose to keep up.",[2118],{"type":2014,"entityId":271,"effect":815,"from":498,"to":498,"facts":2119,"contexts":2120},[],[],[2122],{"actorIds":2123,"related":2124,"self":499,"when":2126,"unattended":499,"configuredByEntityId":498},[],[2125],{"verb":546,"entityId":230},[],[],[],{"id":2130,"title":2131,"statement":2132,"rationale":2133,"appliesTo":2134,"permits":2138,"intent":235,"supportingSections":2145,"references":2146},"only-the-owner-decides-a-suggested-adjustment","Only the Owner decides a suggested adjustment","A suggested adjustment is accepted or dismissed only by the Owner of the habit\nit concerns, and only by an explicit choice. It is never accepted by default\nor by silence, and it stays waiting until the Owner answers it or it no longer\nfits the habit.","Accepting is the one step that turns a suggestion into a schedule change, so it\nmust always be a decision the Owner made.",[2135],{"type":2014,"entityId":459,"effect":728,"from":498,"to":498,"facts":2136,"contexts":2137},[],[],[2139],{"actorIds":2140,"related":2141,"self":499,"when":2144,"unattended":499,"configuredByEntityId":498},[],[2142,2143],{"verb":526,"entityId":271},{"verb":546,"entityId":230},[],[],[],{"id":2148,"title":2149,"statement":2150,"rationale":2151,"appliesTo":2152,"permits":2156,"intent":235,"supportingSections":2162,"references":2163},"only-the-owner-deletes-a-habit","Only the Owner deletes a habit","A habit is deleted only by its Owner, after they confirm, and the deletion is\nfor good. The Product never deletes one on its own, however long it has gone\nunchecked.","Deleting loses the habit's whole history, so it must always be the Owner's\ndeliberate choice.",[2153],{"type":2014,"entityId":271,"effect":958,"from":498,"to":498,"facts":2154,"contexts":2155},[],[],[2157],{"actorIds":2158,"related":2159,"self":499,"when":2161,"unattended":499,"configuredByEntityId":498},[],[2160],{"verb":546,"entityId":230},[],[],[],{"id":2165,"title":2166,"statement":2167,"rationale":2168,"appliesTo":2169,"permits":2173,"intent":235,"supportingSections":2180,"references":2181},"only-the-owner-removes-a-check-in","Only the Owner removes a check-in","A check-in is removed only when the Owner of its habit unchecks that day.\nDeleting the habit takes its check-ins with it.","A streak is the Owner's own record; only the Owner can correct it.",[2170],{"type":2014,"entityId":266,"effect":958,"from":498,"to":498,"facts":2171,"contexts":2172},[],[],[2174],{"actorIds":2175,"related":2176,"self":499,"when":2179,"unattended":499,"configuredByEntityId":498},[],[2177,2178],{"verb":523,"entityId":271},{"verb":546,"entityId":230},[],[],[],{"id":2183,"title":2184,"statement":2185,"rationale":2186,"appliesTo":2187,"permits":2191,"intent":235,"supportingSections":2196,"references":2197},"only-the-owner-turns-reflections-on-or-off","Only the Owner turns reflections on or off","Whether weekly reflections are prepared is the Owner's own choice, and only\nthe Owner changes it. The Product never turns it on for them.","The reflection reads the Owner's history on its own; that has to be something\nthey agreed to.",[2188],{"type":2014,"entityId":230,"effect":728,"from":498,"to":498,"facts":2189,"contexts":2190},[407],[],[2192],{"actorIds":2193,"related":2194,"self":1149,"when":2195,"unattended":499,"configuredByEntityId":498},[],[],[],[],[],{"id":2199,"title":2200,"statement":2201,"rationale":2202,"appliesTo":2203,"permits":498,"intent":235,"supportingSections":2207,"references":2208},"only-today-and-the-six-days-before-it-can-be-checked-off","Only today and the six days before it can be checked off","A check-in is recorded for today or one of the six days before it, and never for\na day still to come. A habit has at most one check-in for each day, and none for\na day before it started.\n\nA day runs from midnight to midnight in the Owner's current time zone, and so\ndoes each week a reflection looks back on. After the Owner moves, today is the\nday where they now are; check-ins already recorded keep their days.","The past week is long enough to fix a forgotten check-off and short enough that\na history cannot be filled in after the fact.",[2204],{"type":2014,"entityId":266,"effect":815,"from":498,"to":498,"facts":2205,"contexts":2206},[],[],[],[],{"id":2210,"title":2211,"statement":2212,"rationale":2213,"appliesTo":2214,"permits":2218,"intent":235,"supportingSections":2224,"references":2225},"reflections-are-prepared-only-while-the-owner-has-them-on","Reflections are prepared only while the Owner has them on","A weekly reflection is created only by the Product's own schedule, and only for\nan Owner who has reflections on. Nobody writes one by hand.","The reflection is optional: an Owner who never turns it on never has a week\nread back to them.",[2215],{"type":2014,"entityId":417,"effect":815,"from":498,"to":498,"facts":2216,"contexts":2217},[],[],[2219],{"actorIds":2220,"related":2221,"self":499,"when":2222,"unattended":1149,"configuredByEntityId":498},[],[],[2223],{"entityId":230,"fact":407,"state":498,"operator":2073,"value":2074},[],[],{"id":2227,"title":2228,"statement":2229,"rationale":2230,"appliesTo":2231,"permits":2235,"intent":235,"supportingSections":2241,"references":2242},"suggested-adjustments-are-drafted-only-while-the-owner-has-reflections-on","Suggested adjustments are drafted only while the Owner has reflections on","A suggested adjustment is created only by the Product's own weekly schedule, as\npart of a weekly reflection for an Owner who has reflections on. Nobody writes\none by hand, and a habit never has two waiting at once.","A suggestion reads the Owner's week on its own; it has to come from the\nreflection they agreed to, and never pile up on one habit.",[2232],{"type":2014,"entityId":459,"effect":815,"from":498,"to":498,"facts":2233,"contexts":2234},[],[],[2236],{"actorIds":2237,"related":2238,"self":499,"when":2239,"unattended":1149,"configuredByEntityId":498},[],[],[2240],{"entityId":230,"fact":407,"state":498,"operator":2073,"value":2074},[],[],[],{"scope":235,"method":235,"covered":2245,"exclusions":2246,"unmapped":2247,"limitations":2248},[],[],[],[],{"path":2250,"commit":2251},"blueprints\u002Fhabit-tracker","f474777f17005554bb7fd1f1e18189bfd01792bc",1791840534207]