[{"data":1,"prerenderedAt":3055},["ShallowReactive",2],{"$fp-rOOnce7HPNUtPcdzeThQtCkMXnKIn3xRULGti4dac":3,"$f3PQ_sBhgbls1H90xUPVNA8qnbFykl2CZjDjW1lMsbgg":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":39,"publishedAt":50,"reportDigest":177,"logo":42,"cover":43,"report":178,"source":3052},"27c2d09fdf9bb14db0bb0a0490c12c5a292d4387f47f597b6f4b130077cca9fe",{"schemaVersion":179,"id":39,"title":40,"summary":41,"description":180,"category":9,"authors":181,"license":184,"intent":185,"supportingSections":186,"references":187,"referenceProfile":198,"tags":199,"languages":200,"generatedAt":204,"generator":205,"counts":208,"limitations":210,"model":216,"coverage":3047},"19.0.0","A focused reading product for people who follow more sources than they can keep\nup with. It synchronizes followed feeds into a private library, remembers reading\nprogress, lets readers save worthwhile items and gather them into collections,\nand publishes a collection as a read-only web link.",[182],{"name":183},"pdd-kit","MIT","People who follow many sources face a stream that never ends and never feels\ncaught up, and what they wanted to keep gets lost in it. The Product makes that\nstream finite and dependable: the Reader controls what they follow, what they\nhave read, and what they choose to keep. Sharing exposes only the collection\nthe Reader deliberately publishes; the rest of the library remains private.",[],[188,193],{"kind":189,"role":190,"target":191,"title":192},"visual","intent","https:\u002F\u002Fgithub.com\u002Fitai-gendler\u002Fpdd-kit\u002Fblob\u002Fmain\u002Fblueprints\u002Fcontent-feed-reader\u002Freferences\u002Fscreen-map.md","Screen map",{"kind":194,"role":195,"target":196,"title":197},"research","context","https:\u002F\u002Fgithub.com\u002Fitai-gendler\u002Fpdd-kit\u002Fblob\u002Fmain\u002Fblueprints\u002Fcontent-feed-reader\u002Freferences\u002Freader-research.md","Reader assumptions","portable",[32,14],[201,202,203],"de","en","fr","2026-10-12",{"name":206,"version":207},"pdd-kit-cli","0.34.1",{"interfaces":48,"experiences":34,"screens":20,"domains":18,"entities":46,"capabilities":47,"capabilityScenarios":209,"journeys":48,"journeyScenarios":18,"businessRules":17,"variations":36},36,[211,212,213,214,215],"Sharing is read-only. There is no commenting, co-editing, or social graph.","The product reads syndicated feeds but does not publish feeds of its own.","Items are never deleted from a library; unfollowing a source keeps everything it already delivered.","A source keeps the name and feed address it was followed with; changing either means unfollowing it and following it again.","Readers sign in with an existing account, while Visitors read published collections without one; signing up and managing accounts are not part of this product.",{"taxonomies":217,"interfaces":231,"experiences":259,"screens":307,"domains":707,"entities":729,"capabilities":841,"capabilityScenarios":1025,"journeys":2605,"journeyScenarios":2628,"businessRules":2754,"variations":3029},{"scenarioKinds":218},[219,223,227],{"id":220,"name":221,"description":222,"colorSlot":46},"edge","Edge case","An uncommon but expected path with a distinct observable outcome.",{"id":224,"name":225,"description":226,"colorSlot":36},"primary","Primary","The expected observable behavior path.",{"id":228,"name":229,"description":230,"colorSlot":18},"validation","Validation","Input the Product refuses while preserving the Actor's work.",[232,246],{"id":233,"title":234,"description":235,"type":236,"actorIds":237,"entryPoints":239,"languages":242,"intent":243,"supportingSections":244,"references":245},"reader-mobile","Reader mobile application","The supported mobile Interface for working in a Reader's private library:\nfollowing, refreshing, reading, saving and searching. Search is reachable\nfrom every place in the library. Collection organization, publication,\nand anonymous public collection links remain web commitments.","mobile-app",[238],"reader",[240],{"type":236,"path":241},"content-reader:\u002F\u002Flibrary",[201,202],"",[],[],{"id":247,"title":248,"description":249,"type":250,"actorIds":251,"entryPoints":253,"languages":256,"intent":243,"supportingSections":257,"references":258},"reader-web","Reader web application","The supported browser Interface for a Reader's private library and public\ncollection links. Private library behavior requires a Reader session; public\ncollection reading does not.","web",[238,252],"visitor",[254],{"type":250,"path":255},"\u002F",[],[],[],[260,274,284,296],{"id":261,"title":262,"description":263,"actorIds":264,"interfaceIds":265,"accessMode":266,"entryPoints":267,"intent":243,"supportingSections":269,"references":273},"reader-mobile::personal-library","Personal library","The private context in which a Reader follows sources, reads and saves items on\na mobile device. Every item,\nreading-state change and saved item belongs to the signed-in Reader;\norganizing and publishing collections stays on the web.",[238],[233],"authenticated",[268],{"type":233,"path":241},[270],{"heading":271,"content":272},"Counterpart note","`reader-web::personal-library` is the same context on the web Interface.",[],{"id":275,"title":276,"description":277,"actorIds":278,"interfaceIds":279,"accessMode":266,"entryPoints":280,"intent":243,"supportingSections":282,"references":283},"reader-mobile::source-focused-library","Source-focused library","An alternative mobile library organized around sources.\nIt supports the same individual-item reading and saving, and adds a source\nbacklog where a Reader can mark that source's unread items read together.",[238],[233],[281],{"type":233,"path":241},[],[],{"id":285,"title":262,"description":286,"actorIds":287,"interfaceIds":288,"accessMode":266,"entryPoints":289,"intent":243,"supportingSections":292,"references":295},"reader-web::personal-library","The private context in which a Reader follows sources, reads, saves, organizes,\nsearches, and publishes selected collections on the web. Every item, reading-state\nchange, saved item, and collection belongs to the signed-in Reader.",[238],[247],[290],{"type":247,"path":291},"\u002Funread",[293],{"heading":271,"content":294},"`reader-mobile::personal-library` pursues the same goal on the mobile\nInterface. They share a folder name, which is what makes them counterparts, and\nthey are separate elements because their reach differs: publishing a collection\nis a web commitment.",[],{"id":297,"title":298,"description":299,"actorIds":300,"interfaceIds":301,"accessMode":32,"entryPoints":302,"intent":243,"supportingSections":305,"references":306},"reader-web::public-reading","Public reading","The read-only context reached through a published collection link. It shows\none published collection and its items without requiring an account, and\nnothing else from the owner's library.",[252],[247],[303],{"type":247,"path":304},"\u002Fcollections\u002F:collectionSlug",[],[],[308,341,372,402,426,445,465,478,495,518,534,579,595,615,636,654,669,686],{"id":309,"title":310,"description":311,"capabilityIds":312,"entities":315,"capabilityScenarioIds":332,"journeyScenarioIds":335,"entryPoints":336,"intent":243,"supportingSections":339,"references":340},"reader-mobile::personal-library::saved-items","Saved items","Presents the durable items a Reader chose to keep, with their source and\npublication context and the owned collections they belong to, and provides a\ndirect way to return to their content.",[313,314],"read-content","remove-saved-item",[316,321,328],{"entityId":317,"shows":318,"collects":320},"collection",[319],"Name",[],{"entityId":322,"shows":323,"collects":327},"item",[324,325,326],"Published at","Saved at","Title",[],{"entityId":329,"shows":330,"collects":331},"source",[319],[],[333,334],"read-a-saved-library-item","remove-a-saved-item",[],[337],{"type":233,"path":338},"content-reader:\u002F\u002Flibrary\u002Fsaved",[],[],{"id":342,"title":343,"description":344,"capabilityIds":345,"entities":349,"capabilityScenarioIds":355,"journeyScenarioIds":363,"entryPoints":366,"intent":369,"supportingSections":370,"references":371},"reader-mobile::personal-library::source-list","Source list","Shows which feeds contribute to the Reader's library and whether each could be\nread at the last refresh, provides the place to follow another one, and lets\nthe Reader read them again on demand.",[346,347,348],"follow-source","synchronize-feeds","unfollow-source",[350],{"entityId":329,"shows":351,"collects":354},[352,353,319],"Feed address","Last read",[],[356,357,358,359,360,361,362],"collect-new-items-from-a-followed-source","follow-a-source-by-feed-address","follow-an-address-with-no-feed","preserve-library-when-a-feed-is-unavailable","read-an-unreachable-source-again-on-schedule","unfollow-a-source","unfollow-an-unreachable-source",[364,365],"follow-a-source-with-nothing-published-yet","read-the-first-items-from-a-new-source",[367],{"type":233,"path":368},"content-reader:\u002F\u002Flibrary\u002Fsources","Give the Reader one place to decide which sources may contribute items and to\nask for their new items now.",[],[],{"id":373,"title":374,"description":375,"capabilityIds":376,"entities":380,"capabilityScenarioIds":387,"journeyScenarioIds":395,"entryPoints":396,"intent":243,"supportingSections":399,"references":400},"reader-mobile::personal-library::unread-library","Unread library","Presents a finite backlog of unread items, newest first, with each item's\nsource, and the actions that make progress through it.",[346,377,378,313,314,379,347],"mark-item-read","mark-item-unread","save-item",[381,384],{"entityId":322,"shows":382,"collects":383},[324,325,326],[],{"entityId":329,"shows":385,"collects":386},[319],[],[388,357,389,390,391,392,393,334,394],"collect-on-the-products-own-schedule","mark-an-item-read","mark-an-item-unread","narrow-the-backlog-by-source-and-date","read-an-unread-library-item","reject-saving-an-unavailable-item","save-an-accessible-item",[364,365],[397],{"type":233,"path":398},"content-reader:\u002F\u002Flibrary\u002Funread",[],[401],{"kind":189,"role":190,"target":191,"title":192},{"id":403,"title":404,"description":405,"capabilityIds":406,"entities":408,"capabilityScenarioIds":418,"journeyScenarioIds":420,"entryPoints":421,"intent":243,"supportingSections":424,"references":425},"reader-mobile::search","Search","Lets a Reader find items, sources and collections across their whole library\nby what they are called, and open what they find. Search is reachable\nthroughout the mobile library.",[407],"search-whole-library",[409,412,415],{"entityId":317,"shows":410,"collects":411},[319],[],{"entityId":322,"shows":413,"collects":414},[324,326],[],{"entityId":329,"shows":416,"collects":417},[319],[],[419],"search-across-the-library",[],[422],{"type":233,"path":423},"content-reader:\u002F\u002Fsearch",[],[],{"id":427,"title":310,"description":311,"capabilityIds":428,"entities":429,"capabilityScenarioIds":439,"journeyScenarioIds":440,"entryPoints":441,"intent":243,"supportingSections":443,"references":444},"reader-mobile::source-focused-library::saved-items",[313,314],[430,433,436],{"entityId":317,"shows":431,"collects":432},[319],[],{"entityId":322,"shows":434,"collects":435},[324,325,326],[],{"entityId":329,"shows":437,"collects":438},[319],[],[333,334],[],[442],{"type":233,"path":338},[],[],{"id":446,"title":447,"description":448,"capabilityIds":449,"entities":450,"capabilityScenarioIds":457,"journeyScenarioIds":459,"entryPoints":460,"intent":243,"supportingSections":463,"references":464},"reader-mobile::source-focused-library::source-backlog","Source backlog","Shows the selected source's unread items and lets the Reader mark that source's\nremaining backlog read together. This is a destination of the Source-focused\nlibrary, with its own selected source context.",[346,377,313],[451,454],{"entityId":322,"shows":452,"collects":453},[324,326],[],{"entityId":329,"shows":455,"collects":456},[319],[],[357,458],"mark-a-source-read-in-bulk",[364,365],[461],{"type":233,"path":462},"content-reader:\u002F\u002Flibrary\u002Fsource-backlog",[],[],{"id":466,"title":343,"description":344,"capabilityIds":467,"entities":468,"capabilityScenarioIds":472,"journeyScenarioIds":473,"entryPoints":474,"intent":369,"supportingSections":476,"references":477},"reader-mobile::source-focused-library::source-list",[346,347,348],[469],{"entityId":329,"shows":470,"collects":471},[352,353,319],[],[356,357,358,359,360,361,362],[364,365],[475],{"type":233,"path":368},[],[],{"id":479,"title":374,"description":375,"capabilityIds":480,"entities":481,"capabilityScenarioIds":488,"journeyScenarioIds":489,"entryPoints":490,"intent":243,"supportingSections":492,"references":493},"reader-mobile::source-focused-library::unread-library",[377,378,313,314,379,347],[482,485],{"entityId":322,"shows":483,"collects":484},[324,325,326],[],{"entityId":329,"shows":486,"collects":487},[319],[],[388,389,390,391,392,393,334,394],[],[491],{"type":233,"path":398},[],[494],{"kind":189,"role":190,"target":191,"title":192},{"id":496,"title":497,"description":498,"capabilityIds":499,"entities":500,"capabilityScenarioIds":510,"journeyScenarioIds":512,"entryPoints":513,"intent":243,"supportingSections":516,"references":517},"reader-web::item-reader","Item reader","Presents one item's readable content with its source and publication context,\nand names the library or collection the person opened it from so they can\nreturn there. It is the same view whether the person arrived from their\nprivate library or from a published collection, which is why it is shared\nacross both Experiences of the web application rather than belonging to one.",[313],[501,504,507],{"entityId":317,"shows":502,"collects":503},[319],[],{"entityId":322,"shows":505,"collects":506},[324,326],[],{"entityId":329,"shows":508,"collects":509},[319],[],[333,511,392],"read-an-item-from-a-public-collection",[],[514],{"type":247,"path":515},"\u002Fitems\u002F:itemId",[],[],{"id":519,"title":520,"description":521,"capabilityIds":522,"entities":523,"capabilityScenarioIds":527,"journeyScenarioIds":528,"entryPoints":529,"intent":243,"supportingSections":532,"references":533},"reader-web::personal-library::add-source","Add source","Takes a Reader through following a new source: giving the feed address, being\ntold when no supported feed is found there so the address can be corrected,\nthen confirming the source the Product found by the name the feed gives itself\nand the address it will be read from. The Reader can leave before confirming\nwithout a source being followed.",[346],[524],{"entityId":329,"shows":525,"collects":526},[352,319],[352],[357,358],[364,365],[530],{"type":247,"path":531},"\u002Fsources\u002Fnew",[],[],{"id":535,"title":536,"description":537,"capabilityIds":538,"entities":548,"capabilityScenarioIds":557,"journeyScenarioIds":572,"entryPoints":574,"intent":243,"supportingSections":577,"references":578},"reader-web::personal-library::collection-detail","Collection detail","One collection the Reader owns, opened to work in. It presents the items in the\nowner's order and lets the Reader add a saved item, remove one, move one to\nanother owned collection, or change the order. It presents the collection's\nname and lets the owner give it a new name. It shows whether the collection is\nprivate, published or unpublished and the public address it is or was served\nat, and lets the owner publish it, unpublish it, or publish it again. It is\nwhere the owner deletes the collection, after confirming.",[539,540,541,542,543,544,545,546,547],"add-collection-item","create-collection","delete-collection","move-collection-item","publish-collection","remove-collection-item","rename-collection","reorder-collection","unpublish-collection",[549,554],{"entityId":317,"shows":550,"collects":553},[551,319,552],"Item order","Public address",[],{"entityId":322,"shows":555,"collects":556},[325,326],[],[558,559,560,561,562,563,564,565,566,567,568,569,570,571],"add-an-item-to-an-owned-collection","create-an-owned-collection","delete-a-published-collection","delete-an-owned-collection","move-an-item-between-collections","publish-an-owned-collection","refuse-publishing-while-sharing-is-off","reject-adding-to-another-owners-collection","reject-publishing-another-owners-collection","remove-an-item-from-an-owned-collection","rename-an-owned-collection","reorder-an-owned-collection","republish-an-unpublished-collection","unpublish-an-owned-collection",[573],"fill-a-new-collection",[575],{"type":247,"path":576},"\u002Fcollections\u002F:collectionId",[],[],{"id":580,"title":581,"description":582,"capabilityIds":583,"entities":584,"capabilityScenarioIds":588,"journeyScenarioIds":589,"entryPoints":590,"intent":243,"supportingSections":593,"references":594},"reader-web::personal-library::collection-workspace","Collection workspace","Lists the collections a Reader owns by name, lets them create another, and\nopens one to work in.",[540,546],[585],{"entityId":317,"shows":586,"collects":587},[319],[],[559,569],[573],[591],{"type":247,"path":592},"\u002Fcollections",[],[],{"id":596,"title":310,"description":311,"capabilityIds":597,"entities":598,"capabilityScenarioIds":608,"journeyScenarioIds":609,"entryPoints":610,"intent":243,"supportingSections":613,"references":614},"reader-web::personal-library::saved-items",[541,313,314],[599,602,605],{"entityId":317,"shows":600,"collects":601},[319],[],{"entityId":322,"shows":603,"collects":604},[324,325,326],[],{"entityId":329,"shows":606,"collects":607},[319],[],[560,561,333,334],[],[611],{"type":247,"path":612},"\u002Fsaved",[],[],{"id":616,"title":404,"description":617,"capabilityIds":618,"entities":619,"capabilityScenarioIds":629,"journeyScenarioIds":630,"entryPoints":631,"intent":243,"supportingSections":634,"references":635},"reader-web::personal-library::search","Lets a Reader find items, sources and collections across their whole library\nby what they are called, and open what they find. It belongs to the private\nlibrary because a Visitor has no library to search.",[407],[620,623,626],{"entityId":317,"shows":621,"collects":622},[319],[],{"entityId":322,"shows":624,"collects":625},[324,326],[],{"entityId":329,"shows":627,"collects":628},[319],[],[419],[],[632],{"type":247,"path":633},"\u002Fsearch",[],[],{"id":637,"title":638,"description":639,"capabilityIds":640,"entities":642,"capabilityScenarioIds":646,"journeyScenarioIds":648,"entryPoints":649,"intent":243,"supportingSections":652,"references":653},"reader-web::personal-library::source-detail","Source detail","Presents the source the Reader picked from the list: what it is called, the\naddress its feed is read from, and when it was last read successfully. This is\nwhere the Reader stops following it, after confirming what will be kept.",[348,641],"view-source",[643],{"entityId":329,"shows":644,"collects":645},[352,353,319],[],[647,361,362],"check-when-a-source-was-last-read",[],[650],{"type":247,"path":651},"\u002Fsources\u002F:sourceId",[],[],{"id":655,"title":343,"description":656,"capabilityIds":657,"entities":658,"capabilityScenarioIds":662,"journeyScenarioIds":663,"entryPoints":664,"intent":369,"supportingSections":667,"references":668},"reader-web::personal-library::source-list","Shows which feeds contribute to the Reader's library and whether each could be\nread at the last refresh, lets the Reader read them all again on demand, and\nopens one source to inspect it or stop following it.",[347,348,641],[659],{"entityId":329,"shows":660,"collects":661},[353,319],[],[647,356,359,360,361,362],[364],[665],{"type":247,"path":666},"\u002Fsources",[],[],{"id":670,"title":374,"description":375,"capabilityIds":671,"entities":672,"capabilityScenarioIds":679,"journeyScenarioIds":680,"entryPoints":681,"intent":243,"supportingSections":683,"references":684},"reader-web::personal-library::unread-library",[346,377,378,313,314,379,347],[673,676],{"entityId":322,"shows":674,"collects":675},[324,325,326],[],{"entityId":329,"shows":677,"collects":678},[319],[],[388,357,458,389,390,391,392,393,334,394],[364,365],[682],{"type":247,"path":291},[],[685],{"kind":189,"role":190,"target":191,"title":192},{"id":687,"title":688,"description":689,"capabilityIds":690,"entities":692,"capabilityScenarioIds":699,"journeyScenarioIds":702,"entryPoints":703,"intent":243,"supportingSections":705,"references":706},"reader-web::public-reading::public-collection","Public collection","Presents one published collection — its name, its owner, and the items in the\nowner's order — to anyone holding its web address, and nothing once the owner\nhas unpublished or deleted it.",[691],"read-public-collection",[693,696],{"entityId":317,"shows":694,"collects":695},[551,319],[],{"entityId":322,"shows":697,"collects":698},[324,326],[],[700,701],"open-an-unpublished-collection","read-a-published-collection",[],[704],{"type":247,"path":304},[],[],[708,715,722],{"id":709,"name":710,"description":711,"boundary":712,"colorSlot":34,"intent":243,"supportingSections":713,"references":714},"collections","Collections","The lifecycle of an owned reading list: creating, renaming and deleting it;\nadding, moving, removing and reordering its saved items; publishing and\nunpublishing it; and serving the resulting read-only collection.","Owns collection membership, ordering, and publication state. It does not own the\nsources items came from or a Reader's private reading progress.",[],[],{"id":716,"name":717,"description":718,"boundary":719,"colorSlot":48,"intent":243,"supportingSections":720,"references":721},"reading","Reading","The Reader's private progress through their library: marking items read and\nunread, and keeping worthwhile items independently of collection membership.","Owns reading progress and saved items in the private library. It does not own\nwhich sources are followed, how collections are published, or presenting an\nitem's content, which every part of the library reaches.",[],[],{"id":723,"name":724,"description":725,"boundary":726,"colorSlot":36,"intent":243,"supportingSections":727,"references":728},"sources","Sources","The source lifecycle: following and unfollowing feeds, and how their new items\nenter the private library without erasing durable history.","Owns which feeds a Reader follows and how their items enter the library. It does\nnot own reading state, saved items, or collection membership.",[],[],[730,758,778,798,811,833],{"id":317,"title":731,"description":732,"domainId":709,"kind":733,"acts":733,"singleton":734,"informationKept":735,"relations":742,"states":746,"intent":243,"supportingSections":756,"references":757},"Collection","An ordered group of saved items an owner curates and may share beyond their own\nlibrary. Deleting one removes it for good and leaves its items saved.",null,false,[736,738,740],{"name":319,"description":737},"the name its owner gave it",{"name":551,"description":739},"the order the owner arranged its items in",{"name":552,"description":741},"where it is served once it has been published",[743],{"entityId":322,"verb":744,"cardinality":745},"holds","many-to-many",[747,750,753],{"name":748,"content":749},"Private","Visible only to its owner. No address outside the library resolves to it.",{"name":751,"content":752},"Published","Readable by anyone who reaches its address, and discoverable as the owner's\npublic work.",{"name":754,"content":755},"Unpublished","Withdrawn from its public address, which serves nothing until the owner\npublishes it again. The collection itself is untouched.",[],[],{"id":322,"title":759,"description":760,"domainId":716,"kind":733,"acts":733,"singleton":734,"informationKept":761,"relations":768,"states":769,"intent":243,"supportingSections":776,"references":777},"Item","One piece of content a Reader can read, from a followed source or an address\nthey saved directly.",[762,764,766],{"name":326,"description":763},"what the item is called",{"name":324,"description":765},"when its source published it",{"name":325,"description":767},"when the Reader saved it, if they did",[],[770,773],{"name":771,"content":772},"Unread","Waiting in the Reader's backlog, counted against what is left to read.",{"name":774,"content":775},"Read","Marked as read, and no longer counted against the backlog.",[],[],{"id":238,"title":779,"description":780,"kind":781,"acts":782,"singleton":734,"informationKept":783,"relations":787,"states":795,"intent":243,"supportingSections":796,"references":797},"Reader","A person who follows feeds, works through unread items, saves worthwhile\nreading, and curates collections. Each Reader has one private library.","person","external",[784],{"name":785,"description":786},"Library assignment","the concurrent mobile library alternative assigned to the Reader: Classic or Source-focused.",[788,791,793],{"entityId":317,"verb":789,"cardinality":790},"owns","one-to-many",{"entityId":322,"verb":792,"cardinality":790},"keeps",{"entityId":329,"verb":794,"cardinality":790},"follows",[],[],[],{"id":799,"title":800,"description":801,"domainId":709,"kind":733,"acts":733,"singleton":802,"informationKept":803,"relations":807,"states":808,"intent":243,"supportingSections":809,"references":810},"reader-settings","Reader settings","The switches the Product keeps for how the reading service behaves for every\nReader. They are set for the Product as a whole, not by a Reader, and a\nBusiness Rule reads them to decide what is available.",true,[804],{"name":805,"description":806},"Public sharing enabled","whether any collection may be published to a public address at the moment",[],[],[],[],{"id":329,"title":812,"description":813,"domainId":723,"kind":733,"acts":733,"singleton":734,"informationKept":814,"relations":821,"states":824,"intent":243,"supportingSections":831,"references":832},"Source","A syndicated feed the Reader follows, and the Product's standing record of\nwhether it can still be read.",[815,817,819],{"name":319,"description":816},"the name the Reader knows it by",{"name":352,"description":818},"where its feed is fetched from",{"name":353,"description":820},"when it was last read successfully",[822],{"entityId":322,"verb":823,"cardinality":790},"publishes",[825,828],{"name":826,"content":827},"Reachable","The feed was read successfully on the most recent attempt, and new items enter\nthe Reader's backlog from it.",{"name":829,"content":830},"Unreachable","The feed could not be read on the most recent attempt. Items already collected\nfrom it stay in the library, and the Product keeps trying on its own schedule.",[],[],{"id":252,"title":834,"description":835,"kind":781,"acts":782,"singleton":734,"informationKept":836,"relations":837,"states":838,"intent":243,"supportingSections":839,"references":840},"Visitor","Someone opening a published collection without an account. A Visitor can read\nthat collection and nothing else from its owner's private library.",[],[],[],[],[],[842,850,858,866,876,886,896,904,912,923,931,939,949,957,965,975,985,999,1009,1017],{"id":539,"title":843,"description":844,"domainId":709,"availability":845,"intent":847,"supportingSections":848,"references":849},"Collection item addition","Adds a saved item to an owned collection at the position the Reader chooses.",[846],{"placeId":285},"Let a Reader gather saved items into a reading list without conflating\nmembership with saving, naming or publication.",[],[],{"id":540,"title":851,"description":852,"domainId":709,"availability":853,"intent":855,"supportingSections":856,"references":857},"Collection creation","Creates a private, named collection owned by the Reader and opens it to work in.",[854],{"placeId":285},"Make the creation and ownership boundary explicit before any item is added.",[],[],{"id":541,"title":859,"description":860,"domainId":709,"availability":861,"intent":863,"supportingSections":864,"references":865},"Collection deletion","Deletes an owned collection for good, after the Reader confirms, while every\nitem it held stays saved in the library.",[862],{"placeId":285},"Let a Reader get rid of a reading list they no longer want without losing the\nitems it gathered.",[],[],{"id":346,"title":867,"description":868,"domainId":723,"availability":869,"intent":873,"supportingSections":874,"references":875},"Source following","Adds a readable feed to the sources the Reader follows, collects what it has\nalready published, and takes the Reader to those items.",[870,871,872],{"placeId":261},{"placeId":275},{"placeId":285},"Let Readers decide exactly which sources may contribute items to their library,\nand start reading a new one straight away.",[],[],{"id":377,"title":877,"description":878,"domainId":716,"availability":879,"intent":883,"supportingSections":884,"references":885},"Marking items read","Marks library items read, one at a time or a whole source's backlog together,\nso the unread backlog shrinks.",[880,881,882],{"placeId":261},{"placeId":275},{"placeId":285},"Make progress through a busy reading stream visible and achievable.",[],[],{"id":378,"title":887,"description":888,"domainId":716,"availability":889,"intent":893,"supportingSections":894,"references":895},"Marking items unread","Returns a read library item to the unread backlog.",[890,891,892],{"placeId":261},{"placeId":275},{"placeId":285},"Let a Reader put something back in front of them when they want to read it\nagain or did not finish it.",[],[],{"id":542,"title":897,"description":898,"domainId":709,"availability":899,"intent":901,"supportingSections":902,"references":903},"Moving items between collections","Moves a saved item from one owned collection to another in a single act.",[900],{"placeId":285},"Let a Reader correct where an item belongs without removing and re-adding it,\nand without touching the item itself.",[],[],{"id":543,"title":905,"description":906,"domainId":709,"availability":907,"intent":909,"supportingSections":910,"references":911},"Collection publication","Publishes an owned collection to a stable web address, including one its owner\nunpublished earlier.",[908],{"placeId":285},"Give an owner explicit control over which collection becomes public.",[],[],{"id":313,"title":913,"description":914,"availability":915,"intent":920,"supportingSections":921,"references":922},"Content reading","Presents the unread backlog and a library item's readable content with its\nsource context. It has no Domain because it is reached from every part of the\nlibrary and from a published collection alike.",[916,917,918,919],{"placeId":261},{"placeId":275},{"placeId":285},{"placeId":297},"Make consuming an item an explicit Product behavior, so opening something never\nsilently marks it read or saves it.",[],[],{"id":691,"title":924,"description":925,"domainId":709,"availability":926,"intent":928,"supportingSections":929,"references":930},"Public collection reading","Presents one published collection and its ordered items through a read-only web\naddress without creating private Reader state for the Visitor.",[927],{"placeId":297},"Let a Visitor consume the exact collection an owner published without exposing\nthe owner's library or granting editing authority.",[],[],{"id":544,"title":932,"description":933,"domainId":709,"availability":934,"intent":936,"supportingSections":937,"references":938},"Collection item removal","Takes an item out of an owned collection while it stays saved in the library.",[935],{"placeId":285},"Let a Reader prune a reading list without losing the items they chose to keep.",[],[],{"id":314,"title":940,"description":941,"domainId":716,"availability":942,"intent":946,"supportingSections":947,"references":948},"Saved item removal","Stops keeping a saved item, leaving its reading state and collection membership\nas they were.",[943,944,945],{"placeId":261},{"placeId":275},{"placeId":285},"Let a Reader let go of an item without that decision reaching into reading\nprogress or collections.",[],[],{"id":545,"title":950,"description":951,"domainId":709,"availability":952,"intent":954,"supportingSections":955,"references":956},"Collection renaming","Renames an owned collection without changing its contents, order, or visibility.",[953],{"placeId":285},"Let a Reader give an owned collection the name that communicates its purpose\nwithout coupling naming to membership or publication.",[],[],{"id":546,"title":958,"description":959,"domainId":709,"availability":960,"intent":962,"supportingSections":963,"references":964},"Collection reordering","Moves an item to a different position within an owned collection.",[961],{"placeId":285},"Let a Reader decide the order a reading list is read in, including by Visitors\nonce it is published.",[],[],{"id":379,"title":966,"description":967,"domainId":716,"availability":968,"intent":972,"supportingSections":973,"references":974},"Item saving","Keeps a chosen library item independently of its unread state or collection\nmembership.",[969,970,971],{"placeId":261},{"placeId":275},{"placeId":285},"Separate “worth keeping” from “not yet read” and from temporary organization.",[],[],{"id":407,"title":976,"description":977,"availability":978,"intent":982,"supportingSections":983,"references":984},"Library search","Finds items, sources and collections across a Reader's whole library from one\nentered term, and opens what was found. It is its own Capability because it\npresents a set nothing else does: every kind of thing in the library at once.\nIt has no Domain because it has a page of its own rather than belonging to one\npart of the library.",[979,980,981],{"placeId":261},{"placeId":275},{"placeId":285},"Let a Reader reach anything they remember by name without knowing which part\nof the library holds it.",[],[],{"id":347,"title":986,"description":987,"domainId":723,"availability":988,"intent":992,"supportingSections":993,"references":994},"Feed synchronization","Collects new items from the Reader's followed syndicated feeds into their\nprivate library and keeps each source's record of whether it can still be read.\nThe Product reads each followed feed itself — when the Reader refreshes their\nsources, and on a recurring schedule the Product owns — and keeps earlier\nlibrary items when a feed cannot be read.",[989,990,991],{"placeId":261},{"placeId":275},{"placeId":285},"Keep the library current while preserving the Reader's durable history across\ntemporary source failures. A feed provider is a source the Product reads on the\nReader's behalf; it never reaches into the Reader's library.",[],[995],{"kind":996,"role":195,"target":997,"title":998},"spec","https:\u002F\u002Fwww.rssboard.org\u002Frss-specification","RSS 2.0 specification",{"id":348,"title":1000,"description":1001,"domainId":723,"availability":1002,"intent":1006,"supportingSections":1007,"references":1008},"Source unfollowing","Stops following a source, after the Reader confirms, while every item it\nalready delivered stays in the library.",[1003,1004,1005],{"placeId":261},{"placeId":275},{"placeId":285},"Let Readers drop a source without losing the history it contributed.",[],[],{"id":547,"title":1010,"description":1011,"domainId":709,"availability":1012,"intent":1014,"supportingSections":1015,"references":1016},"Collection unpublishing","Withdraws a published collection from its public address, which then serves\nnothing until the owner publishes it again.",[1013],{"placeId":285},"Give an owner one immediate and reliable way to take a collection off the web\nwithout deleting it.",[],[],{"id":641,"title":1018,"description":1019,"domainId":723,"availability":1020,"intent":1022,"supportingSections":1023,"references":1024},"Source viewing","Presents one followed source: what it is called, the address its feed is read\nfrom, and when it was last read successfully.",[1021],{"placeId":285},"Let the Reader check where a source comes from and whether it is still being\nread before deciding to keep following it.",[],[],[1026,1073,1108,1171,1218,1249,1296,1345,1426,1474,1512,1551,1589,1640,1684,1722,1773,1813,1846,1887,1920,1960,2002,2047,2079,2108,2147,2212,2254,2286,2336,2374,2406,2455,2518,2574],{"id":558,"capabilityId":539,"title":1027,"kindId":224,"actorIds":1028,"routes":1029,"steps":1032,"trigger":1034,"decisionPoints":1068,"outcome":1069,"edgeCases":1070,"intent":243,"supportingSections":1071,"references":1072},"Add an item to an owned collection",[238],[1030],{"id":250,"name":1031},"Web",[1033,1044,1052,1062],{"text":1034,"kind":1035,"actorId":238,"capabilityId":539,"entities":1036,"unattended":734,"contexts":1042},"The Reader chooses a saved item and an owned collection.","actor",[1037,1040],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1039,"with":733},"reads",[],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1041,"with":733},[319],[1043],{"routeId":250,"placeId":535},{"text":1045,"kind":1046,"actorId":238,"capabilityId":539,"entities":1047,"unattended":734,"contexts":1050},"The Product confirms collection ownership","product",[1048],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1049,"with":733},[],[1051],{"routeId":250,"placeId":535},{"text":1053,"kind":1046,"actorId":238,"capabilityId":539,"entities":1054,"unattended":734,"contexts":1060},"The item is added at the chosen position",[1055,1058],{"entityId":317,"as":733,"effect":1056,"from":733,"to":733,"facts":1057,"with":733},"changes",[551],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1059,"with":733},[],[1061],{"routeId":250,"placeId":535},{"text":1063,"kind":1064,"actorId":733,"capabilityId":539,"entities":1065,"unattended":734,"contexts":1066},"The remaining order is preserved","condition",[],[1067],{"routeId":250,"placeId":535},[],"The owned collection contains the item in the intended order.",[],[],[],{"id":647,"capabilityId":641,"title":1074,"kindId":224,"actorIds":1075,"routes":1076,"steps":1078,"trigger":1102,"decisionPoints":1103,"outcome":1104,"edgeCases":1105,"intent":243,"supportingSections":1106,"references":1107},"Check when a source was last read",[238],[1077],{"id":250,"name":1031},[1079,1086,1093],{"text":1080,"kind":1035,"actorId":238,"capabilityId":641,"entities":1081,"unattended":734,"contexts":1084},"The Reader picks a source from the list",[1082],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1083,"with":733},[353,319],[1085],{"routeId":250,"placeId":655},{"text":1087,"kind":1046,"actorId":238,"capabilityId":641,"entities":1088,"unattended":734,"contexts":1091},"The Product presents the source's name, the address its feed is read from, and when it was last read successfully",[1089],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1090,"with":733},[352,353,319],[1092],{"routeId":250,"placeId":637},{"text":1094,"kind":1064,"actorId":733,"capabilityId":641,"entities":1095,"unattended":734,"contexts":1100},"The source's items and their reading state are untouched",[1096,1098],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1097,"with":733},[],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1099,"with":733},[],[1101],{"routeId":250,"placeId":637},"The Reader wants to know where a followed source is read from and whether it\nis still being read.",[],"The Reader sees the source's feed address and its last successful read, and\nnothing about the source or its items has changed.",[],[],[],{"id":356,"capabilityId":347,"title":1109,"kindId":224,"actorIds":1110,"routes":1111,"steps":1119,"trigger":1121,"decisionPoints":1166,"outcome":1167,"edgeCases":1168,"intent":243,"supportingSections":1169,"references":1170},"Collect new items from a followed source",[238],[1112,1113,1116],{"id":250,"name":1031},{"id":1114,"name":1115},"mobile","Mobile",{"id":1117,"name":1118},"mobile-source-focused","Mobile — source-focused",[1120,1129,1138,1147,1157],{"text":1121,"kind":1035,"actorId":238,"capabilityId":347,"entities":1122,"unattended":734,"contexts":1125},"The Reader refreshes their followed sources.",[1123],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1124,"with":733},[],[1126,1127,1128],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1130,"kind":1046,"actorId":238,"capabilityId":347,"entities":1131,"unattended":734,"contexts":1134},"The Product reads each followed feed",[1132],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1133,"with":733},[352],[1135,1136,1137],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1139,"kind":1046,"actorId":238,"capabilityId":347,"entities":1140,"unattended":734,"contexts":1143},"The Product records when each feed was last read successfully",[1141],{"entityId":329,"as":733,"effect":1056,"from":733,"to":733,"facts":1142,"with":733},[353],[1144,1145,1146],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1148,"kind":1046,"actorId":238,"capabilityId":347,"entities":1149,"unattended":734,"contexts":1153},"Items the Reader's library does not already hold are collected",[1150],{"entityId":322,"as":733,"effect":1151,"from":733,"to":771,"facts":1152,"with":733},"creates",[324,326],[1154,1155,1156],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1158,"kind":1046,"actorId":238,"capabilityId":347,"entities":1159,"unattended":734,"contexts":1162},"The newly collected items enter the Reader's unread backlog",[1160],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1161,"with":733},[],[1163,1164,1165],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},[],"New feed items are available in the Reader's private library without duplicates.",[],[],[],{"id":388,"capabilityId":347,"title":1172,"kindId":224,"actorIds":1173,"routes":1174,"steps":1178,"trigger":1212,"decisionPoints":1213,"outcome":1214,"edgeCases":1215,"intent":243,"supportingSections":1216,"references":1217},"Collect on the Product's own schedule",[],[1175,1176,1177],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[1179,1185,1191,1197,1203],{"text":1180,"kind":1064,"actorId":733,"capabilityId":347,"entities":1181,"unattended":802,"contexts":1184},"The Product's own polling schedule comes due for a followed source",[1182],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1183,"with":733},[],[],{"text":1186,"kind":1046,"actorId":733,"capabilityId":347,"entities":1187,"unattended":734,"contexts":1190},"The Product reads the followed feed on its own",[1188],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1189,"with":733},[352],[],{"text":1192,"kind":1046,"actorId":733,"capabilityId":347,"entities":1193,"unattended":734,"contexts":1196},"The Product records when the feed was last read successfully",[1194],{"entityId":329,"as":733,"effect":1056,"from":733,"to":733,"facts":1195,"with":733},[353],[],{"text":1198,"kind":1046,"actorId":733,"capabilityId":347,"entities":1199,"unattended":734,"contexts":1202},"Items the library does not already hold are collected",[1200],{"entityId":322,"as":733,"effect":1151,"from":733,"to":771,"facts":1201,"with":733},[324,326],[],{"text":1204,"kind":1046,"actorId":733,"capabilityId":347,"entities":1205,"unattended":734,"contexts":1208},"The newly collected items are waiting in the unread backlog at the next visit",[1206],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1207,"with":733},[],[1209,1210,1211],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},"The recurring schedule the Product owns comes due for a followed source, with no\nReader present.",[],"New items from that source are in the Reader's unread backlog before they next\nopen it, and the library is unchanged if the feed could not be read.",[],[],[],{"id":559,"capabilityId":540,"title":1219,"kindId":224,"actorIds":1220,"routes":1221,"steps":1223,"trigger":1243,"decisionPoints":1244,"outcome":1245,"edgeCases":1246,"intent":243,"supportingSections":1247,"references":1248},"Create an owned collection",[238],[1222],{"id":250,"name":1031},[1224,1229,1236],{"text":1225,"kind":1035,"actorId":238,"capabilityId":540,"entities":1226,"unattended":734,"contexts":1227},"The Reader provides a name",[],[1228],{"routeId":250,"placeId":580},{"text":1230,"kind":1046,"actorId":238,"capabilityId":540,"entities":1231,"unattended":734,"contexts":1234},"The Product creates a private collection owned by that Reader",[1232],{"entityId":317,"as":733,"effect":1151,"from":733,"to":748,"facts":1233,"with":733},[551,319],[1235],{"routeId":250,"placeId":580},{"text":1237,"kind":1046,"actorId":238,"capabilityId":540,"entities":1238,"unattended":734,"contexts":1241},"The Product opens the new, empty collection for the Reader to work in",[1239],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1240,"with":733},[319],[1242],{"routeId":250,"placeId":535},"The Reader chooses to gather saved items in a new collection.",[],"The Reader has a new private owned collection with the chosen name, open in\nfront of them and ready for its first item.",[],[],[],{"id":560,"capabilityId":541,"title":1250,"kindId":220,"actorIds":1251,"routes":1252,"steps":1254,"trigger":1290,"decisionPoints":1291,"outcome":1292,"edgeCases":1293,"intent":243,"supportingSections":1294,"references":1295},"Delete a published collection",[238],[1253],{"id":250,"name":1031},[1255,1262,1268,1275,1283],{"text":1256,"kind":1035,"actorId":238,"capabilityId":541,"entities":1257,"unattended":734,"contexts":1260},"The Reader chooses to delete an owned collection that is published",[1258],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1259,"with":733},[319,552],[1261],{"routeId":250,"placeId":535},{"text":1045,"kind":1046,"actorId":238,"capabilityId":541,"entities":1263,"unattended":734,"contexts":1266},[1264],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1265,"with":733},[],[1267],{"routeId":250,"placeId":535},{"text":1269,"kind":1046,"actorId":238,"capabilityId":541,"entities":1270,"unattended":734,"contexts":1273},"The Product asks the Reader to confirm, saying the collection is deleted for good and its public address will stop serving it",[1271],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1272,"with":733},[552],[1274],{"routeId":250,"placeId":535},{"text":1276,"kind":1035,"actorId":238,"capabilityId":541,"entities":1277,"unattended":734,"contexts":1281},"The Reader confirms",[1278],{"entityId":317,"as":733,"effect":1279,"from":751,"to":733,"facts":1280,"with":733},"removes",[],[1282],{"routeId":250,"placeId":535},{"text":1284,"kind":1064,"actorId":238,"capabilityId":541,"entities":1285,"unattended":734,"contexts":1288},"The former public address serves no contents, and every item it held is still saved",[1286],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1287,"with":733},[325],[1289],{"routeId":250,"placeId":596},"The Reader no longer wants a collection they have published.",[],"The collection is gone for good, its public address shows Visitors that it is\nunavailable, and every item it held is still saved in the Reader's library.",[],[],[],{"id":561,"capabilityId":541,"title":1297,"kindId":224,"actorIds":1298,"routes":1299,"steps":1301,"trigger":1337,"decisionPoints":1338,"outcome":1339,"edgeCases":1340,"intent":243,"supportingSections":1343,"references":1344},"Delete an owned collection",[238],[1300],{"id":250,"name":1031},[1302,1309,1315,1324,1330],{"text":1303,"kind":1035,"actorId":238,"capabilityId":541,"entities":1304,"unattended":734,"contexts":1307},"The Reader chooses to delete an owned collection",[1305],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1306,"with":733},[319],[1308],{"routeId":250,"placeId":535},{"text":1045,"kind":1046,"actorId":238,"capabilityId":541,"entities":1310,"unattended":734,"contexts":1313},[1311],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1312,"with":733},[],[1314],{"routeId":250,"placeId":535},{"text":1316,"kind":1046,"actorId":238,"capabilityId":541,"entities":1317,"unattended":734,"contexts":1322},"The Product asks the Reader to confirm, saying the collection is deleted for good and its items stay saved",[1318,1320],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1319,"with":733},[319],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1321,"with":733},[],[1323],{"routeId":250,"placeId":535},{"text":1276,"kind":1035,"actorId":238,"capabilityId":541,"entities":1325,"unattended":734,"contexts":1328},[1326],{"entityId":317,"as":733,"effect":1279,"from":748,"to":733,"facts":1327,"with":733},[],[1329],{"routeId":250,"placeId":535},{"text":1331,"kind":1064,"actorId":238,"capabilityId":541,"entities":1332,"unattended":734,"contexts":1335},"Every item it held is still saved, with its reading state unchanged",[1333],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1334,"with":733},[325],[1336],{"routeId":250,"placeId":596},"The Reader no longer wants one of their private collections.",[],"The collection is gone for good, and every item it held is still saved in the\nReader's library.",[1341,1342],"The Reader declines to confirm → the collection stays exactly as it was.","The collection was unpublished earlier → it is deleted the same way, and its former public address keeps serving nothing.",[],[],{"id":357,"capabilityId":346,"title":1346,"kindId":224,"actorIds":1347,"routes":1348,"steps":1352,"trigger":1419,"decisionPoints":1420,"outcome":1421,"edgeCases":1422,"intent":243,"supportingSections":1424,"references":1425},"Follow a source by feed address",[238],[1349,1350,1351],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[1353,1360,1367,1374,1383,1390,1399,1408],{"text":1354,"kind":1035,"actorId":238,"capabilityId":346,"entities":1355,"unattended":734,"contexts":1356},"The Reader starts following a new feed",[],[1357,1358,1359],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1361,"kind":1035,"actorId":238,"capabilityId":346,"entities":1362,"unattended":734,"contexts":1363},"The Reader enters the address of a readable syndicated feed",[],[1364,1365,1366],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1368,"kind":1046,"actorId":733,"capabilityId":346,"entities":1369,"unattended":734,"contexts":1370},"The Product validates that the address returns a supported feed",[],[1371,1372,1373],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1375,"kind":1046,"actorId":238,"capabilityId":346,"entities":1376,"unattended":734,"contexts":1379},"The Product shows the name the feed gives itself and the address it will be read from",[1377],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1378,"with":733},[352,319],[1380,1381,1382],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1384,"kind":1035,"actorId":238,"capabilityId":346,"entities":1385,"unattended":734,"contexts":1386},"The Reader confirms that this is the feed they meant",[],[1387,1388,1389],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1391,"kind":1046,"actorId":238,"capabilityId":346,"entities":1392,"unattended":734,"contexts":1395},"The source is added to the Reader's followed sources",[1393],{"entityId":329,"as":733,"effect":1151,"from":733,"to":826,"facts":1394,"with":733},[352,353,319],[1396,1397,1398],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1400,"kind":1046,"actorId":238,"capabilityId":346,"entities":1401,"unattended":734,"contexts":1404},"The Product collects the items the feed currently offers into the unread backlog",[1402],{"entityId":322,"as":733,"effect":1151,"from":733,"to":771,"facts":1403,"with":733},[324,326],[1405,1406,1407],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1409,"kind":1046,"actorId":238,"capabilityId":346,"entities":1410,"unattended":734,"contexts":1415},"The Product takes the Reader to the new source's unread items",[1411,1413],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1412,"with":733},[319],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1414,"with":733},[324,326],[1416,1417,1418],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":446},"The Reader has the address of a readable syndicated feed they want in their\nlibrary.",[],"The source is followed, what it currently offers is in the Reader's unread\nbacklog, and the Reader is looking at those items; later synchronization adds\nwhatever it publishes next.",[1423],"The feed currently offers no items → the Reader is taken to the new source's items, which say nothing has been published yet.",[],[],{"id":358,"capabilityId":346,"title":1427,"kindId":228,"actorIds":1428,"routes":1429,"steps":1433,"trigger":1468,"decisionPoints":1469,"outcome":1470,"edgeCases":1471,"intent":243,"supportingSections":1472,"references":1473},"Reject an address with no readable feed",[238],[1430,1431,1432],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[1434,1440,1447,1454,1461],{"text":1354,"kind":1035,"actorId":238,"capabilityId":346,"entities":1435,"unattended":734,"contexts":1436},[],[1437,1438,1439],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1441,"kind":1035,"actorId":238,"capabilityId":346,"entities":1442,"unattended":734,"contexts":1443},"The Reader enters an address that does not return a supported feed",[],[1444,1445,1446],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1448,"kind":1046,"actorId":733,"capabilityId":346,"entities":1449,"unattended":734,"contexts":1450},"The Product inspects the submitted address",[],[1451,1452,1453],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1455,"kind":1064,"actorId":733,"capabilityId":346,"entities":1456,"unattended":734,"contexts":1457},"No supported feed is found",[],[1458,1459,1460],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1462,"kind":1046,"actorId":733,"capabilityId":346,"entities":1463,"unattended":734,"contexts":1464},"The Product explains that the address cannot be followed",[],[1465,1466,1467],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},"The Reader enters an address that does not return a supported feed.",[],"No source is added, the Reader does not get past the address, and the\nsubmitted address remains available to correct.",[],[],[],{"id":458,"capabilityId":377,"title":1475,"kindId":220,"actorIds":1476,"routes":1477,"steps":1481,"trigger":1506,"decisionPoints":1507,"outcome":1508,"edgeCases":1509,"intent":243,"supportingSections":1510,"references":1511},"Mark one source read in bulk",[238],[1478,1479],{"id":250,"name":1031},{"id":1114,"name":1480},"Mobile source-focused",[1482,1490,1498],{"text":1483,"kind":1035,"actorId":238,"capabilityId":377,"entities":1484,"unattended":734,"contexts":1487},"The Reader selects the source in the unread library",[1485],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1486,"with":733},[319],[1488,1489],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":446},{"text":1491,"kind":1046,"actorId":733,"capabilityId":377,"entities":1492,"unattended":734,"contexts":1495},"The Product shows how many items will be marked read",[1493],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1494,"with":733},[],[1496,1497],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":446},{"text":1499,"kind":1035,"actorId":238,"capabilityId":377,"entities":1500,"unattended":734,"contexts":1503},"The Reader confirms the bulk action",[1501],{"entityId":322,"as":733,"effect":1056,"from":771,"to":774,"facts":1502,"with":733},[],[1504,1505],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":446},"The Reader decides not to inspect the remaining unread items from one source.",[],"Every unread item from that source is marked read without unfollowing the source or removing saved items.",[],[],[],{"id":389,"capabilityId":377,"title":1513,"kindId":224,"actorIds":1514,"routes":1515,"steps":1519,"trigger":1545,"decisionPoints":1546,"outcome":1547,"edgeCases":1548,"intent":243,"supportingSections":1549,"references":1550},"Mark an item read",[238],[1516,1517,1518],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[1520,1529,1538],{"text":1521,"kind":1035,"actorId":238,"capabilityId":377,"entities":1522,"unattended":734,"contexts":1525},"The Reader marks the item read",[1523],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1524,"with":733},[],[1526,1527,1528],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},{"text":1530,"kind":1046,"actorId":238,"capabilityId":377,"entities":1531,"unattended":734,"contexts":1534},"The Product updates the item's private reading state",[1532],{"entityId":322,"as":733,"effect":1056,"from":771,"to":774,"facts":1533,"with":733},[],[1535,1536,1537],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},{"text":1539,"kind":1064,"actorId":733,"capabilityId":377,"entities":1540,"unattended":734,"contexts":1541},"The unread count decreases",[],[1542,1543,1544],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},"The Reader finishes an unread library item.",[],"The item is read for that Reader and no longer contributes to the unread count.",[],[],[],{"id":390,"capabilityId":378,"title":1552,"kindId":224,"actorIds":1553,"routes":1554,"steps":1558,"trigger":1583,"decisionPoints":1584,"outcome":1585,"edgeCases":1586,"intent":243,"supportingSections":1587,"references":1588},"Mark an item unread",[238],[1555,1556,1557],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[1559,1568,1576],{"text":1560,"kind":1035,"actorId":238,"capabilityId":378,"entities":1561,"unattended":734,"contexts":1564},"The Reader marks the item unread",[1562],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1563,"with":733},[],[1565,1566,1567],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},{"text":1530,"kind":1046,"actorId":238,"capabilityId":378,"entities":1569,"unattended":734,"contexts":1572},[1570],{"entityId":322,"as":733,"effect":1056,"from":774,"to":771,"facts":1571,"with":733},[],[1573,1574,1575],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},{"text":1577,"kind":1064,"actorId":733,"capabilityId":378,"entities":1578,"unattended":734,"contexts":1579},"The unread count increases",[],[1580,1581,1582],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},"The Reader wants a read library item to return to the unread backlog.",[],"The item is unread for that Reader without changing its saved or collection state.",[],[],[],{"id":562,"capabilityId":542,"title":1590,"kindId":224,"actorIds":1591,"routes":1592,"steps":1594,"trigger":1634,"decisionPoints":1635,"outcome":1636,"edgeCases":1637,"intent":243,"supportingSections":1638,"references":1639},"Move an item between collections",[238],[1593],{"id":250,"name":1031},[1595,1607,1616,1627],{"text":1596,"kind":1035,"actorId":238,"capabilityId":542,"entities":1597,"unattended":734,"contexts":1605},"The Reader moves a saved item from one owned collection to another.",[1598,1600,1603],{"entityId":317,"as":329,"effect":1038,"from":733,"to":733,"facts":1599,"with":733},[319],{"entityId":317,"as":1601,"effect":1038,"from":733,"to":733,"facts":1602,"with":733},"target",[319],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1604,"with":733},[],[1606],{"routeId":250,"placeId":535},{"text":1608,"kind":1046,"actorId":238,"capabilityId":542,"entities":1609,"unattended":734,"contexts":1614},"The Product confirms that the Reader owns both collections",[1610,1612],{"entityId":317,"as":329,"effect":1038,"from":733,"to":733,"facts":1611,"with":733},[],{"entityId":317,"as":1601,"effect":1038,"from":733,"to":733,"facts":1613,"with":733},[],[1615],{"routeId":250,"placeId":535},{"text":1617,"kind":1046,"actorId":238,"capabilityId":542,"entities":1618,"unattended":734,"contexts":1625},"The item leaves the first collection and joins the second at the chosen position",[1619,1621,1623],{"entityId":317,"as":329,"effect":1056,"from":733,"to":733,"facts":1620,"with":733},[551],{"entityId":317,"as":1601,"effect":1056,"from":733,"to":733,"facts":1622,"with":733},[551],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1624,"with":733},[],[1626],{"routeId":250,"placeId":535},{"text":1628,"kind":1064,"actorId":733,"capabilityId":542,"entities":1629,"unattended":734,"contexts":1632},"The item's saved state and reading state are untouched",[1630],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1631,"with":733},[],[1633],{"routeId":250,"placeId":535},"The Reader decides a saved item belongs in a different one of their\ncollections.",[],"The item is in the second collection and no longer in the first, and nothing\nabout the item itself has changed.",[],[],[],{"id":391,"capabilityId":313,"title":1641,"kindId":224,"actorIds":1642,"routes":1643,"steps":1647,"trigger":1677,"decisionPoints":1678,"outcome":1679,"edgeCases":1680,"intent":243,"supportingSections":1682,"references":1683},"Narrow the backlog by source and date",[238],[1644,1645,1646],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[1648,1659,1668],{"text":1649,"kind":1035,"actorId":238,"capabilityId":313,"entities":1650,"unattended":734,"contexts":1655},"The Reader narrows the unread items to one source and a span of publication dates",[1651,1653],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1652,"with":733},[324],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1654,"with":733},[319],[1656,1657,1658],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},{"text":1660,"kind":1046,"actorId":238,"capabilityId":313,"entities":1661,"unattended":734,"contexts":1664},"The Product presents only the unread items that match",[1662],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1663,"with":733},[324,326],[1665,1666,1667],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},{"text":1669,"kind":1064,"actorId":733,"capabilityId":313,"entities":1670,"unattended":734,"contexts":1673},"The unread count still counts the whole backlog, and no item's reading state changes",[1671],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1672,"with":733},[],[1674,1675,1676],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},"The Reader wants to work through one source's recent items before the rest.",[],"The Reader sees only the unread items from the chosen source in the chosen\nspan, and the backlog itself is unchanged.",[1681],"No unread item matches → the Reader is told that nothing in the backlog matches, and the narrowing stays available to change.",[],[],{"id":700,"capabilityId":691,"title":1685,"kindId":220,"actorIds":1686,"routes":1687,"steps":1689,"trigger":1691,"decisionPoints":1716,"outcome":1717,"edgeCases":1718,"intent":243,"supportingSections":1720,"references":1721},"Open an unpublished collection",[252],[1688],{"id":250,"name":1031},[1690,1697,1704,1711],{"text":1691,"kind":1035,"actorId":252,"capabilityId":691,"entities":1692,"unattended":734,"contexts":1695},"A Visitor opens a public address after its owner has unpublished the collection.",[1693],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1694,"with":733},[],[1696],{"routeId":250,"placeId":687},{"text":1698,"kind":1046,"actorId":252,"capabilityId":691,"entities":1699,"unattended":734,"contexts":1702},"The Product determines that the collection is no longer public",[1700],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1701,"with":733},[],[1703],{"routeId":250,"placeId":687},{"text":1705,"kind":1046,"actorId":252,"capabilityId":691,"entities":1706,"unattended":734,"contexts":1709},"Collection contents are withheld",[1707],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1708,"with":733},[],[1710],{"routeId":250,"placeId":687},{"text":1712,"kind":1046,"actorId":733,"capabilityId":691,"entities":1713,"unattended":734,"contexts":1714},"A neutral unavailable state is shown",[],[1715],{"routeId":250,"placeId":687},[],"The Visitor sees that the collection is unavailable without learning anything from the owner's private library.",[1719],"The owner deleted the collection → the address shows the same neutral unavailable state.",[],[],{"id":359,"capabilityId":347,"title":1723,"kindId":220,"actorIds":1724,"routes":1725,"steps":1729,"trigger":1731,"decisionPoints":1768,"outcome":1769,"edgeCases":1770,"intent":243,"supportingSections":1771,"references":1772},"Preserve the library when a feed is unavailable",[238],[1726,1727,1728],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[1730,1739,1748,1759],{"text":1731,"kind":1035,"actorId":238,"capabilityId":347,"entities":1732,"unattended":734,"contexts":1735},"The Reader refreshes their sources while one followed feed cannot be read.",[1733],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1734,"with":733},[],[1736,1737,1738],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1740,"kind":1046,"actorId":238,"capabilityId":347,"entities":1741,"unattended":734,"contexts":1744},"The Product reports that the source could not be reached",[1742],{"entityId":329,"as":733,"effect":1056,"from":826,"to":829,"facts":1743,"with":733},[],[1745,1746,1747],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1749,"kind":1064,"actorId":238,"capabilityId":347,"entities":1750,"unattended":734,"contexts":1755},"Existing items, reading state, saved state, and collections remain unchanged",[1751,1753],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1752,"with":733},[],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1754,"with":733},[],[1756,1757,1758],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1760,"kind":1064,"actorId":733,"capabilityId":347,"entities":1761,"unattended":734,"contexts":1764},"The source remains followed for a later refresh",[1762],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1763,"with":733},[],[1765,1766,1767],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},[],"A temporary feed failure does not erase library history or silently unfollow the source.",[],[],[],{"id":563,"capabilityId":543,"title":1774,"kindId":224,"actorIds":1775,"routes":1776,"steps":1778,"trigger":1807,"decisionPoints":1808,"outcome":1809,"edgeCases":1810,"intent":243,"supportingSections":1811,"references":1812},"Publish an owned collection",[238],[1777],{"id":250,"name":1031},[1779,1786,1793,1800],{"text":1780,"kind":1046,"actorId":238,"capabilityId":543,"entities":1781,"unattended":734,"contexts":1784},"The Product confirms ownership",[1782],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1783,"with":733},[],[1785],{"routeId":250,"placeId":535},{"text":1787,"kind":1046,"actorId":238,"capabilityId":543,"entities":1788,"unattended":734,"contexts":1791},"The Product explains that the collection will become readable by link",[1789],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1790,"with":733},[],[1792],{"routeId":250,"placeId":535},{"text":1794,"kind":1035,"actorId":238,"capabilityId":543,"entities":1795,"unattended":734,"contexts":1798},"The Reader confirms publication",[1796],{"entityId":317,"as":733,"effect":1056,"from":748,"to":751,"facts":1797,"with":733},[552],[1799],{"routeId":250,"placeId":535},{"text":1801,"kind":1046,"actorId":238,"capabilityId":543,"entities":1802,"unattended":734,"contexts":1805},"The Product shows the stable public address the collection is now served at",[1803],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1804,"with":733},[552],[1806],{"routeId":250,"placeId":535},"The Reader chooses to publish a private owned collection.",[],"The owned collection is publicly readable at the stable web address.",[],[],[],{"id":701,"capabilityId":691,"title":1814,"kindId":224,"actorIds":1815,"routes":1816,"steps":1818,"trigger":1840,"decisionPoints":1841,"outcome":1842,"edgeCases":1843,"intent":243,"supportingSections":1844,"references":1845},"Read a published collection",[252],[1817],{"id":250,"name":1031},[1819,1828,1835],{"text":1820,"kind":1046,"actorId":252,"capabilityId":691,"entities":1821,"unattended":734,"contexts":1826},"The Product loads the collection name, owner display name, and ordered items",[1822,1824],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1823,"with":733},[551,319],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1825,"with":733},[324,326],[1827],{"routeId":250,"placeId":687},{"text":1829,"kind":1035,"actorId":252,"capabilityId":691,"entities":1830,"unattended":734,"contexts":1833},"The Visitor opens and reads an item",[1831],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1832,"with":733},[324,326],[1834],{"routeId":250,"placeId":687},{"text":1836,"kind":1064,"actorId":733,"capabilityId":691,"entities":1837,"unattended":734,"contexts":1838},"No private reading state is created",[],[1839],{"routeId":250,"placeId":687},"A Visitor opens the public address of a published collection.",[],"The Visitor can read the published collection without gaining access to the owner's private library.",[],[],[],{"id":333,"capabilityId":313,"title":1847,"kindId":224,"actorIds":1848,"routes":1849,"steps":1853,"trigger":1881,"decisionPoints":1882,"outcome":1883,"edgeCases":1884,"intent":243,"supportingSections":1885,"references":1886},"Read a saved library item",[238],[1850,1851,1852],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[1854,1865,1874],{"text":1855,"kind":1046,"actorId":733,"capabilityId":313,"entities":1856,"unattended":734,"contexts":1861},"The Product presents the readable item with its source and publication context",[1857,1859],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1858,"with":733},[324,326],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1860,"with":733},[319],[1862,1863,1864],{"routeId":250,"placeId":496},{"routeId":1114,"placeId":309},{"routeId":1117,"placeId":427},{"text":1866,"kind":1035,"actorId":238,"capabilityId":313,"entities":1867,"unattended":734,"contexts":1870},"The Reader consumes the item from the saved library",[1868],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1869,"with":733},[324,326],[1871,1872,1873],{"routeId":250,"placeId":496},{"routeId":1114,"placeId":309},{"routeId":1117,"placeId":427},{"text":1875,"kind":1046,"actorId":238,"capabilityId":313,"entities":1876,"unattended":734,"contexts":1877},"The saved state remains unchanged unless the Reader explicitly removes it",[],[1878,1879,1880],{"routeId":250,"placeId":596},{"routeId":1114,"placeId":309},{"routeId":1117,"placeId":427},"The Reader opens an item they previously chose to save.",[],"The Reader can return to worthwhile content without depending on unread state\nor collection membership.",[],[],[],{"id":511,"capabilityId":313,"title":1888,"kindId":224,"actorIds":1889,"routes":1890,"steps":1892,"trigger":1914,"decisionPoints":1915,"outcome":1916,"edgeCases":1917,"intent":243,"supportingSections":1918,"references":1919},"Read an item from a public collection",[252],[1891],{"id":250,"name":1031},[1893,1902,1910],{"text":1894,"kind":1035,"actorId":252,"capabilityId":313,"entities":1895,"unattended":734,"contexts":1900},"The Visitor opens an item from a published collection",[1896,1898],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":1897,"with":733},[],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1899,"with":733},[324,326],[1901],{"routeId":250,"placeId":496},{"text":1855,"kind":1046,"actorId":252,"capabilityId":313,"entities":1903,"unattended":734,"contexts":1908},[1904,1906],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1905,"with":733},[324,326],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1907,"with":733},[319],[1909],{"routeId":250,"placeId":496},{"text":1836,"kind":1064,"actorId":733,"capabilityId":313,"entities":1911,"unattended":734,"contexts":1912},[],[1913],{"routeId":250,"placeId":496},"A Visitor opens an item inside a published collection.",[],"The Visitor reads the item exactly as its Reader would, and the Product records\nnothing about it.",[],[],[],{"id":360,"capabilityId":347,"title":1921,"kindId":220,"actorIds":1922,"routes":1923,"steps":1927,"trigger":1954,"decisionPoints":1955,"outcome":1956,"edgeCases":1957,"intent":243,"supportingSections":1958,"references":1959},"Read an unreachable source again on schedule",[],[1924,1925,1926],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[1928,1934,1940,1945],{"text":1929,"kind":1064,"actorId":733,"capabilityId":347,"entities":1930,"unattended":802,"contexts":1933},"The Product's own polling schedule comes due for a followed source that could not be read last time",[1931],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1932,"with":733},[],[],{"text":1935,"kind":1046,"actorId":733,"capabilityId":347,"entities":1936,"unattended":734,"contexts":1939},"The Product reads the feed successfully",[1937],{"entityId":329,"as":733,"effect":1056,"from":829,"to":826,"facts":1938,"with":733},[353],[],{"text":1198,"kind":1046,"actorId":733,"capabilityId":347,"entities":1941,"unattended":734,"contexts":1944},[1942],{"entityId":322,"as":733,"effect":1151,"from":733,"to":771,"facts":1943,"with":733},[324,326],[],{"text":1946,"kind":1046,"actorId":733,"capabilityId":347,"entities":1947,"unattended":734,"contexts":1950},"The source is shown as reachable again at the next visit",[1948],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1949,"with":733},[],[1951,1952,1953],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},"The recurring schedule the Product owns comes due for a followed source whose\nfeed could not be read on the most recent attempt, with no Reader present.",[],"The source is reachable again, whatever it published meanwhile is in the unread\nbacklog before the Reader next opens it, and nothing was needed from the Reader\nto get there.",[],[],[],{"id":392,"capabilityId":313,"title":1961,"kindId":224,"actorIds":1962,"routes":1963,"steps":1967,"trigger":1996,"decisionPoints":1997,"outcome":1998,"edgeCases":1999,"intent":243,"supportingSections":2000,"references":2001},"Read an unread library item",[238],[1964,1965,1966],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[1968,1978,1987],{"text":1855,"kind":1046,"actorId":733,"capabilityId":313,"entities":1969,"unattended":734,"contexts":1974},[1970,1972],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1971,"with":733},[324,326],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":1973,"with":733},[319],[1975,1976,1977],{"routeId":250,"placeId":496},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},{"text":1979,"kind":1035,"actorId":238,"capabilityId":313,"entities":1980,"unattended":734,"contexts":1983},"The Reader consumes the item",[1981],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1982,"with":733},[324,326],[1984,1985,1986],{"routeId":250,"placeId":496},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},{"text":1988,"kind":1064,"actorId":238,"capabilityId":313,"entities":1989,"unattended":734,"contexts":1992},"The item stays unread until the Reader marks it read or saves it",[1990],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":1991,"with":733},[],[1993,1994,1995],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},"The Reader opens an unread item from the private library.",[],"The Reader can consume the item without the act of opening it silently changing durable state.",[],[],[],{"id":564,"capabilityId":543,"title":2003,"kindId":228,"actorIds":2004,"routes":2005,"steps":2007,"trigger":2040,"decisionPoints":2041,"outcome":2042,"edgeCases":2043,"intent":243,"supportingSections":2045,"references":2046},"Refuse publishing while sharing is off",[238],[2006],{"id":250,"name":1031},[2008,2015,2021,2028,2033],{"text":2009,"kind":1035,"actorId":238,"capabilityId":543,"entities":2010,"unattended":734,"contexts":2013},"The Reader chooses to publish a private owned collection",[2011],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2012,"with":733},[],[2014],{"routeId":250,"placeId":535},{"text":1780,"kind":1046,"actorId":238,"capabilityId":543,"entities":2016,"unattended":734,"contexts":2019},[2017],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2018,"with":733},[],[2020],{"routeId":250,"placeId":535},{"text":2022,"kind":1064,"actorId":733,"capabilityId":543,"entities":2023,"unattended":734,"contexts":2026},"Public sharing is switched off for the Product",[2024],{"entityId":799,"as":733,"effect":1038,"from":733,"to":733,"facts":2025,"with":733},[805],[2027],{"routeId":250,"placeId":535},{"text":2029,"kind":1046,"actorId":238,"capabilityId":543,"entities":2030,"unattended":734,"contexts":2031},"The Product explains that publishing is unavailable and why",[],[2032],{"routeId":250,"placeId":535},{"text":2034,"kind":1064,"actorId":238,"capabilityId":543,"entities":2035,"unattended":734,"contexts":2038},"The collection stays private, with no public address",[2036],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2037,"with":733},[],[2039],{"routeId":250,"placeId":535},"The Reader chooses to publish a private owned collection while public sharing\nis switched off for the Product.",[],"The collection is not published, the Reader knows why, and nothing about the\ncollection changed.",[2044],"The collection was already published before sharing was switched off → it stays published and readable; only new publication is refused.",[],[],{"id":565,"capabilityId":539,"title":2048,"kindId":228,"actorIds":2049,"routes":2050,"steps":2052,"trigger":2054,"decisionPoints":2074,"outcome":2075,"edgeCases":2076,"intent":243,"supportingSections":2077,"references":2078},"Reject adding to another owner's collection",[238],[2051],{"id":250,"name":1031},[2053,2062,2069],{"text":2054,"kind":1035,"actorId":238,"capabilityId":539,"entities":2055,"unattended":734,"contexts":2060},"The Reader attempts to add an item to a collection owned by someone else",[2056,2058],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2057,"with":733},[],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2059,"with":733},[],[2061],{"routeId":250,"placeId":535},{"text":2063,"kind":1046,"actorId":238,"capabilityId":539,"entities":2064,"unattended":734,"contexts":2067},"The Product checks collection ownership",[2065],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2066,"with":733},[],[2068],{"routeId":250,"placeId":535},{"text":2070,"kind":1064,"actorId":733,"capabilityId":539,"entities":2071,"unattended":734,"contexts":2072},"Adding is refused",[],[2073],{"routeId":250,"placeId":535},[],"The collection is unchanged and the Reader gains no editing authority.",[],[],[],{"id":566,"capabilityId":543,"title":2080,"kindId":228,"actorIds":2081,"routes":2082,"steps":2084,"trigger":2086,"decisionPoints":2103,"outcome":2104,"edgeCases":2105,"intent":243,"supportingSections":2106,"references":2107},"Reject publishing another owner's collection",[238],[2083],{"id":250,"name":1031},[2085,2092,2098],{"text":2086,"kind":1035,"actorId":238,"capabilityId":543,"entities":2087,"unattended":734,"contexts":2090},"The Reader attempts to publish a collection owned by someone else",[2088],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2089,"with":733},[],[2091],{"routeId":250,"placeId":535},{"text":2063,"kind":1046,"actorId":238,"capabilityId":543,"entities":2093,"unattended":734,"contexts":2096},[2094],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2095,"with":733},[],[2097],{"routeId":250,"placeId":535},{"text":2099,"kind":1064,"actorId":733,"capabilityId":543,"entities":2100,"unattended":734,"contexts":2101},"Publishing is refused",[],[2102],{"routeId":250,"placeId":535},[],"The collection's publication state is unchanged and the Reader gains no authority over it.",[],[],[],{"id":393,"capabilityId":379,"title":2109,"kindId":228,"actorIds":2110,"routes":2111,"steps":2115,"trigger":2141,"decisionPoints":2142,"outcome":2143,"edgeCases":2144,"intent":243,"supportingSections":2145,"references":2146},"Reject saving an unavailable item",[238],[2112,2113,2114],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[2116,2125,2132],{"text":2117,"kind":1046,"actorId":733,"capabilityId":379,"entities":2118,"unattended":734,"contexts":2121},"The Product confirms that the item is unavailable",[2119],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2120,"with":733},[],[2122,2123,2124],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},{"text":2126,"kind":1064,"actorId":733,"capabilityId":379,"entities":2127,"unattended":734,"contexts":2128},"No saved record is created",[],[2129,2130,2131],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},{"text":2133,"kind":1035,"actorId":238,"capabilityId":379,"entities":2134,"unattended":734,"contexts":2137},"The Reader sees that the item cannot be saved",[2135],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2136,"with":733},[],[2138,2139,2140],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},"The Reader attempts to save an item no longer available in the library.",[],"The saved library is unchanged and contains no unusable item.",[],[],[],{"id":334,"capabilityId":314,"title":2148,"kindId":224,"actorIds":2149,"routes":2150,"steps":2169,"trigger":2206,"decisionPoints":2207,"outcome":2208,"edgeCases":2209,"intent":243,"supportingSections":2210,"references":2211},"Remove a saved item",[238],[2151,2154,2157,2160,2163,2166],{"id":2152,"name":2153},"web-saved-items","Web — Saved items",{"id":2155,"name":2156},"web-unread-library","Web — Unread library",{"id":2158,"name":2159},"mobile-saved-items","Mobile — Saved items",{"id":2161,"name":2162},"mobile-unread-library","Mobile — Unread library",{"id":2164,"name":2165},"mobile-saved-items-source-focused","Mobile — Saved items — source-focused",{"id":2167,"name":2168},"mobile-unread-library-source-focused","Mobile — Unread library — source-focused",[2170,2182,2194],{"text":2171,"kind":1035,"actorId":238,"capabilityId":314,"entities":2172,"unattended":734,"contexts":2175},"The Reader removes the item's saved state",[2173],{"entityId":322,"as":733,"effect":1056,"from":733,"to":733,"facts":2174,"with":733},[325],[2176,2177,2178,2179,2180,2181],{"routeId":2152,"placeId":596},{"routeId":2155,"placeId":670},{"routeId":2158,"placeId":309},{"routeId":2161,"placeId":373},{"routeId":2164,"placeId":427},{"routeId":2167,"placeId":479},{"text":2183,"kind":1046,"actorId":733,"capabilityId":314,"entities":2184,"unattended":734,"contexts":2187},"The Product preserves the item's reading state",[2185],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2186,"with":733},[],[2188,2189,2190,2191,2192,2193],{"routeId":2152,"placeId":596},{"routeId":2155,"placeId":670},{"routeId":2158,"placeId":309},{"routeId":2161,"placeId":373},{"routeId":2164,"placeId":427},{"routeId":2167,"placeId":479},{"text":2195,"kind":1064,"actorId":238,"capabilityId":314,"entities":2196,"unattended":734,"contexts":2199},"Collection membership is left for the Reader to change separately",[2197],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2198,"with":733},[],[2200,2201,2202,2203,2204,2205],{"routeId":2152,"placeId":596},{"routeId":2155,"placeId":670},{"routeId":2158,"placeId":309},{"routeId":2161,"placeId":373},{"routeId":2164,"placeId":427},{"routeId":2167,"placeId":479},"The Reader chooses to stop keeping a saved library item.",[],"The item is no longer saved and no unrelated reading or collection state changes.",[],[],[],{"id":567,"capabilityId":544,"title":2213,"kindId":224,"actorIds":2214,"routes":2215,"steps":2217,"trigger":2219,"decisionPoints":2249,"outcome":2250,"edgeCases":2251,"intent":243,"supportingSections":2252,"references":2253},"Remove an item from an owned collection",[238],[2216],{"id":250,"name":1031},[2218,2227,2233,2242],{"text":2219,"kind":1035,"actorId":238,"capabilityId":544,"entities":2220,"unattended":734,"contexts":2225},"The Reader removes an item from an owned collection.",[2221,2223],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2222,"with":733},[],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2224,"with":733},[],[2226],{"routeId":250,"placeId":535},{"text":1045,"kind":1046,"actorId":238,"capabilityId":544,"entities":2228,"unattended":734,"contexts":2231},[2229],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2230,"with":733},[],[2232],{"routeId":250,"placeId":535},{"text":2234,"kind":1046,"actorId":238,"capabilityId":544,"entities":2235,"unattended":734,"contexts":2240},"The item is removed from that collection",[2236,2238],{"entityId":317,"as":733,"effect":1056,"from":733,"to":733,"facts":2237,"with":733},[551],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2239,"with":733},[],[2241],{"routeId":250,"placeId":535},{"text":2243,"kind":1064,"actorId":733,"capabilityId":544,"entities":2244,"unattended":734,"contexts":2247},"The remaining item order and the item's saved state are preserved",[2245],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2246,"with":733},[],[2248],{"routeId":250,"placeId":535},[],"The item no longer belongs to the collection and remains saved independently.",[],[],[],{"id":568,"capabilityId":545,"title":2255,"kindId":224,"actorIds":2256,"routes":2257,"steps":2259,"trigger":2280,"decisionPoints":2281,"outcome":2282,"edgeCases":2283,"intent":243,"supportingSections":2284,"references":2285},"Rename an owned collection",[238],[2258],{"id":250,"name":1031},[2260,2266,2271],{"text":1045,"kind":1046,"actorId":238,"capabilityId":545,"entities":2261,"unattended":734,"contexts":2264},[2262],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2263,"with":733},[],[2265],{"routeId":250,"placeId":535},{"text":2267,"kind":1035,"actorId":238,"capabilityId":545,"entities":2268,"unattended":734,"contexts":2269},"The Reader provides the replacement name",[],[2270],{"routeId":250,"placeId":535},{"text":2272,"kind":1046,"actorId":238,"capabilityId":545,"entities":2273,"unattended":734,"contexts":2278},"The Product preserves the collection's items and order under the new name",[2274,2276],{"entityId":317,"as":733,"effect":1056,"from":733,"to":733,"facts":2275,"with":733},[319],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2277,"with":733},[],[2279],{"routeId":250,"placeId":535},"The Reader changes the name of an owned collection.",[],"The owned collection has the new name without losing its contents or publication state.",[],[],[],{"id":569,"capabilityId":546,"title":2287,"kindId":224,"actorIds":2288,"routes":2289,"steps":2291,"trigger":2330,"decisionPoints":2331,"outcome":2332,"edgeCases":2333,"intent":243,"supportingSections":2334,"references":2335},"Reorder an owned collection",[238],[2290],{"id":250,"name":1031},[2292,2299,2308,2314,2323],{"text":2293,"kind":1035,"actorId":238,"capabilityId":546,"entities":2294,"unattended":734,"contexts":2297},"The Reader opens an owned collection",[2295],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2296,"with":733},[319],[2298],{"routeId":250,"placeId":580},{"text":2300,"kind":1035,"actorId":238,"capabilityId":546,"entities":2301,"unattended":734,"contexts":2306},"The Reader moves an item to a different position in the open collection",[2302,2304],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2303,"with":733},[],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2305,"with":733},[],[2307],{"routeId":250,"placeId":535},{"text":1045,"kind":1046,"actorId":238,"capabilityId":546,"entities":2309,"unattended":734,"contexts":2312},[2310],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2311,"with":733},[],[2313],{"routeId":250,"placeId":535},{"text":2315,"kind":1046,"actorId":238,"capabilityId":546,"entities":2316,"unattended":734,"contexts":2321},"The item is moved to the chosen position",[2317,2319],{"entityId":317,"as":733,"effect":1056,"from":733,"to":733,"facts":2318,"with":733},[551],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2320,"with":733},[],[2322],{"routeId":250,"placeId":535},{"text":2324,"kind":1064,"actorId":733,"capabilityId":546,"entities":2325,"unattended":734,"contexts":2328},"Every other item keeps its relative order",[2326],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2327,"with":733},[],[2329],{"routeId":250,"placeId":535},"The Reader moves an item to a different position in an owned collection.",[],"The owned collection exposes the Reader's intended item order.",[],[],[],{"id":570,"capabilityId":543,"title":2337,"kindId":220,"actorIds":2338,"routes":2339,"steps":2341,"trigger":2368,"decisionPoints":2369,"outcome":2370,"edgeCases":2371,"intent":243,"supportingSections":2372,"references":2373},"Republish an unpublished collection",[238],[2340],{"id":250,"name":1031},[2342,2348,2355,2361],{"text":1780,"kind":1046,"actorId":238,"capabilityId":543,"entities":2343,"unattended":734,"contexts":2346},[2344],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2345,"with":733},[],[2347],{"routeId":250,"placeId":535},{"text":2349,"kind":1046,"actorId":238,"capabilityId":543,"entities":2350,"unattended":734,"contexts":2353},"The Product explains that the former public address will serve the collection again",[2351],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2352,"with":733},[552],[2354],{"routeId":250,"placeId":535},{"text":1794,"kind":1035,"actorId":238,"capabilityId":543,"entities":2356,"unattended":734,"contexts":2359},[2357],{"entityId":317,"as":733,"effect":1056,"from":754,"to":751,"facts":2358,"with":733},[],[2360],{"routeId":250,"placeId":535},{"text":2362,"kind":1064,"actorId":238,"capabilityId":543,"entities":2363,"unattended":734,"contexts":2366},"The public address serves the collection contents again",[2364],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2365,"with":733},[],[2367],{"routeId":250,"placeId":535},"The Reader chooses to publish an owned collection they unpublished earlier.",[],"The owned collection is publicly readable again at its former public address,\nand nothing the owner changed while it was unpublished is lost.",[],[],[],{"id":394,"capabilityId":379,"title":2375,"kindId":224,"actorIds":2376,"routes":2377,"steps":2381,"trigger":2400,"decisionPoints":2401,"outcome":2402,"edgeCases":2403,"intent":243,"supportingSections":2404,"references":2405},"Save an accessible item",[238],[2378,2379,2380],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[2382,2391],{"text":2383,"kind":1035,"actorId":238,"capabilityId":379,"entities":2384,"unattended":734,"contexts":2387},"The Reader saves the item",[2385],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2386,"with":733},[],[2388,2389,2390],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},{"text":2392,"kind":1046,"actorId":238,"capabilityId":379,"entities":2393,"unattended":734,"contexts":2396},"The Product records the saved state independently of reading state",[2394],{"entityId":322,"as":733,"effect":1056,"from":733,"to":733,"facts":2395,"with":733},[325],[2397,2398,2399],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":479},"The Reader chooses to keep an item available in the private library.",[],"The item remains saved until the Reader explicitly removes it.",[],[],[],{"id":419,"capabilityId":407,"title":2407,"kindId":224,"actorIds":2408,"routes":2409,"steps":2412,"trigger":2447,"decisionPoints":2448,"outcome":2449,"edgeCases":2450,"intent":243,"supportingSections":2453,"references":2454},"Search across the library",[238],[2410,2411],{"id":250,"name":1031},{"id":1114,"name":1115},[2413,2419,2431,2439],{"text":2414,"kind":1035,"actorId":238,"capabilityId":407,"entities":2415,"unattended":734,"contexts":2416},"The Reader enters a term",[],[2417,2418],{"routeId":250,"placeId":616},{"routeId":1114,"placeId":403},{"text":2420,"kind":1046,"actorId":238,"capabilityId":407,"entities":2421,"unattended":734,"contexts":2428},"The Product finds the items, sources and collections in the Reader's library whose names match the term",[2422,2424,2426],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2423,"with":733},[326],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":2425,"with":733},[319],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2427,"with":733},[319],[2429,2430],{"routeId":250,"placeId":616},{"routeId":1114,"placeId":403},{"text":2432,"kind":1035,"actorId":238,"capabilityId":407,"entities":2433,"unattended":734,"contexts":2436},"The Reader picks an item from what was found",[2434],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2435,"with":733},[324,326],[2437,2438],{"routeId":250,"placeId":616},{"routeId":1114,"placeId":403},{"text":2440,"kind":1064,"actorId":733,"capabilityId":407,"entities":2441,"unattended":734,"contexts":2444},"Nothing in the library changes by being found",[2442],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2443,"with":733},[],[2445,2446],{"routeId":250,"placeId":616},{"routeId":1114,"placeId":403},"The Reader remembers something by name and wants it without knowing whether it\nis an item, a source, or a collection.",[],"The Reader has what they were looking for in front of them, found from one\nterm, with nothing in the library changed.",[2451,2452],"Nothing matches the term → the Reader is told that the library holds no match, and the term stays available to change.","The term matches a source and items from it → both are found, and picking the source shows the source rather than an item.",[],[],{"id":361,"capabilityId":348,"title":2456,"kindId":224,"actorIds":2457,"routes":2458,"steps":2462,"trigger":2511,"decisionPoints":2512,"outcome":2513,"edgeCases":2514,"intent":243,"supportingSections":2516,"references":2517},"Unfollow a source",[238],[2459,2460,2461],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[2463,2472,2483,2491,2502],{"text":2464,"kind":1035,"actorId":238,"capabilityId":348,"entities":2465,"unattended":734,"contexts":2468},"The Reader chooses to stop following an existing source",[2466],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":2467,"with":733},[319],[2469,2470,2471],{"routeId":250,"placeId":637},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":2473,"kind":1046,"actorId":238,"capabilityId":348,"entities":2474,"unattended":734,"contexts":2479},"The Product asks the Reader to confirm, and says that the items already collected from the source will stay in the library",[2475,2477],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":2476,"with":733},[],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2478,"with":733},[],[2480,2481,2482],{"routeId":250,"placeId":637},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1276,"kind":1035,"actorId":238,"capabilityId":348,"entities":2484,"unattended":734,"contexts":2487},[2485],{"entityId":329,"as":733,"effect":1279,"from":826,"to":733,"facts":2486,"with":733},[],[2488,2489,2490],{"routeId":250,"placeId":637},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":2492,"kind":1064,"actorId":733,"capabilityId":348,"entities":2493,"unattended":734,"contexts":2498},"Future synchronization no longer collects items from that source",[2494,2496],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2495,"with":733},[],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":2497,"with":733},[],[2499,2500,2501],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":2503,"kind":1064,"actorId":733,"capabilityId":348,"entities":2504,"unattended":734,"contexts":2507},"Existing library items and saved state are preserved",[2505],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2506,"with":733},[],[2508,2509,2510],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},"The Reader chooses to stop following an existing source.",[],"The source contributes no future items and the Reader's existing library history remains intact.",[2515],"The Reader declines to confirm → the source stays followed and nothing changes.",[],[],{"id":362,"capabilityId":348,"title":2519,"kindId":220,"actorIds":2520,"routes":2521,"steps":2525,"trigger":2568,"decisionPoints":2569,"outcome":2570,"edgeCases":2571,"intent":243,"supportingSections":2572,"references":2573},"Unfollow an unreachable source",[238],[2522,2523,2524],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[2526,2535,2545,2553,2560],{"text":2527,"kind":1035,"actorId":238,"capabilityId":348,"entities":2528,"unattended":734,"contexts":2531},"The Reader chooses to stop following a source that could not be read",[2529],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":2530,"with":733},[353,319],[2532,2533,2534],{"routeId":250,"placeId":637},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":2473,"kind":1046,"actorId":238,"capabilityId":348,"entities":2536,"unattended":734,"contexts":2541},[2537,2539],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":2538,"with":733},[],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2540,"with":733},[],[2542,2543,2544],{"routeId":250,"placeId":637},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":1276,"kind":1035,"actorId":238,"capabilityId":348,"entities":2546,"unattended":734,"contexts":2549},[2547],{"entityId":329,"as":733,"effect":1279,"from":829,"to":733,"facts":2548,"with":733},[],[2550,2551,2552],{"routeId":250,"placeId":637},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":2554,"kind":1064,"actorId":733,"capabilityId":348,"entities":2555,"unattended":734,"contexts":2556},"The Product stops trying to read that feed on its own schedule",[],[2557,2558,2559],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":2503,"kind":1064,"actorId":733,"capabilityId":348,"entities":2561,"unattended":734,"contexts":2564},[2562],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2563,"with":733},[],[2565,2566,2567],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},"The Reader gives up on a source the Product has not been able to read.",[],"The Product stops retrying the source, it contributes no future items, and the\nitems it already contributed remain in the Reader's library.",[],[],[],{"id":571,"capabilityId":547,"title":2575,"kindId":220,"actorIds":2576,"routes":2577,"steps":2579,"trigger":2598,"decisionPoints":2599,"outcome":2600,"edgeCases":2601,"intent":243,"supportingSections":2603,"references":2604},"Unpublish an owned collection",[238],[2578],{"id":250,"name":1031},[2580,2586,2591],{"text":1780,"kind":1046,"actorId":238,"capabilityId":547,"entities":2581,"unattended":734,"contexts":2584},[2582],{"entityId":317,"as":733,"effect":1038,"from":733,"to":733,"facts":2583,"with":733},[],[2585],{"routeId":250,"placeId":535},{"text":2587,"kind":1046,"actorId":733,"capabilityId":547,"entities":2588,"unattended":734,"contexts":2589},"The Product explains that the public link will stop working",[],[2590],{"routeId":250,"placeId":535},{"text":2592,"kind":1035,"actorId":238,"capabilityId":547,"entities":2593,"unattended":734,"contexts":2596},"The Reader confirms unpublishing",[2594],{"entityId":317,"as":733,"effect":1056,"from":751,"to":754,"facts":2595,"with":733},[],[2597],{"routeId":250,"placeId":535},"The Reader revokes public access to an owned published collection.",[],"The collection is unpublished: its former public address serves no contents, and\nthe collection itself stays in the owner's library, private to them until they\npublish it again.",[2602],"The Reader declines to confirm → the collection stays published and its address keeps serving it.",[],[],[2606,2617],{"id":2607,"title":2608,"goal":2609,"successCriterion":2610,"actorIds":2611,"capabilityIds":2612,"failureOnlyCapabilityIds":2613,"domainIds":2614,"intent":243,"supportingSections":2615,"references":2616},"follow-and-receive-from-a-source","Follow and receive from a source","A Reader wants to start reading a source they have just found.","The source is followed, its items have arrived in the Reader's library, and the\nReader has opened one of them.",[238],[346,313],[347],[723],[],[],{"id":2618,"title":2619,"goal":2620,"successCriterion":2621,"actorIds":2622,"capabilityIds":2623,"failureOnlyCapabilityIds":2624,"domainIds":2625,"intent":243,"supportingSections":2626,"references":2627},"start-a-collection","Start a collection","A Reader wants a new reading list holding the saved items it is for.","A new collection the Reader owns exists under the name they chose and holds the\nsaved items they added to it.",[238],[539,540],[],[709],[],[],[2629,2662,2712],{"id":573,"journeyId":2618,"result":2630,"title":2631,"kindId":224,"actorIds":2632,"routes":2633,"steps":2635,"trigger":2656,"decisionPoints":2657,"outcome":2658,"edgeCases":2659,"intent":243,"supportingSections":2660,"references":2661},"achieved","Fill a new collection",[238],[2634],{"id":250,"name":1031},[2636,2640,2647],{"text":1225,"kind":1035,"actorId":238,"capabilityId":540,"entities":2637,"unattended":734,"contexts":2638},[],[2639],{"routeId":250,"placeId":580},{"text":2641,"kind":1046,"actorId":238,"capabilityId":540,"entities":2642,"unattended":734,"contexts":2645},"The Product creates the private collection and opens it for the Reader to work in",[2643],{"entityId":317,"as":733,"effect":1151,"from":733,"to":748,"facts":2644,"with":733},[551,319],[2646],{"routeId":250,"placeId":535},{"text":2648,"kind":1035,"actorId":238,"capabilityId":539,"entities":2649,"unattended":734,"contexts":2654},"The Reader adds a saved item to the new collection",[2650,2652],{"entityId":317,"as":733,"effect":1056,"from":733,"to":733,"facts":2651,"with":733},[551],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2653,"with":733},[],[2655],{"routeId":250,"placeId":535},"The Reader has saved items that belong together in a reading list they do not\nhave yet.",[],"The Journey goal is achieved: the new collection exists under its chosen name\nand holds the saved item, which stays saved independently of it.",[],[],[],{"id":364,"journeyId":2607,"result":2663,"title":2664,"kindId":220,"actorIds":2665,"routes":2666,"steps":2670,"trigger":2706,"decisionPoints":2707,"outcome":2708,"edgeCases":2709,"intent":243,"supportingSections":2710,"references":2711},"not-achieved","Follow a source with nothing published yet",[238],[2667,2668,2669],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[2671,2680,2691,2700],{"text":2672,"kind":1035,"actorId":238,"capabilityId":346,"entities":2673,"unattended":734,"contexts":2676},"The Reader enters the feed address and confirms the source the Product found",[2674],{"entityId":329,"as":733,"effect":1151,"from":733,"to":826,"facts":2675,"with":733},[352,353,319],[2677,2678,2679],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":2681,"kind":1046,"actorId":238,"capabilityId":346,"entities":2682,"unattended":734,"contexts":2687},"The Product finds no items in the feed and takes the Reader to the new source's empty unread items",[2683,2685],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":2684,"with":733},[319],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2686,"with":733},[],[2688,2689,2690],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":446},{"text":2692,"kind":1035,"actorId":238,"capabilityId":347,"entities":2693,"unattended":734,"contexts":2696},"The Reader refreshes their followed sources",[2694],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":2695,"with":733},[],[2697,2698,2699],{"routeId":250,"placeId":655},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":2701,"kind":1064,"actorId":733,"capabilityId":733,"entities":2702,"unattended":734,"contexts":2705},"The feed still offers nothing the library does not already hold",[2703],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2704,"with":733},[],[],"The Reader follows a feed that has not published anything yet.",[],"The Journey goal is not achieved: the source is followed, but there is nothing\nfrom it to read until it publishes. The Reader's library is otherwise\nunchanged.",[],[],[],{"id":365,"journeyId":2607,"result":2630,"title":2713,"kindId":224,"actorIds":2714,"routes":2715,"steps":2719,"trigger":2748,"decisionPoints":2749,"outcome":2750,"edgeCases":2751,"intent":243,"supportingSections":2752,"references":2753},"Read the first items from a new source",[238],[2716,2717,2718],{"id":250,"name":1031},{"id":1114,"name":1115},{"id":1117,"name":1118},[2720,2728,2737],{"text":2672,"kind":1035,"actorId":238,"capabilityId":346,"entities":2721,"unattended":734,"contexts":2724},[2722],{"entityId":329,"as":733,"effect":1151,"from":733,"to":826,"facts":2723,"with":733},[352,353,319],[2725,2726,2727],{"routeId":250,"placeId":519},{"routeId":1114,"placeId":342},{"routeId":1117,"placeId":466},{"text":2729,"kind":1046,"actorId":238,"capabilityId":346,"entities":2730,"unattended":734,"contexts":2733},"The Product collects the items the feed currently offers and takes the Reader to them",[2731],{"entityId":322,"as":733,"effect":1151,"from":733,"to":771,"facts":2732,"with":733},[324,326],[2734,2735,2736],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":446},{"text":2738,"kind":1035,"actorId":238,"capabilityId":313,"entities":2739,"unattended":734,"contexts":2744},"The Reader opens one of the new source's items and reads it",[2740,2742],{"entityId":322,"as":733,"effect":1038,"from":733,"to":733,"facts":2741,"with":733},[324,326],{"entityId":329,"as":733,"effect":1038,"from":733,"to":733,"facts":2743,"with":733},[319],[2745,2746,2747],{"routeId":250,"placeId":670},{"routeId":1114,"placeId":373},{"routeId":1117,"placeId":446},"The Reader has found a feed they want to follow and read.",[],"The Journey goal is achieved: the source is followed, its current items are in\nthe Reader's unread backlog, and the Reader is reading one of them.",[],[],[],[2755,2773,2790,2809,2829,2850,2862,2883,2900,2917,2938,2955,2972,2994,3012],{"id":2756,"title":2757,"statement":2758,"rationale":2759,"appliesTo":2760,"permits":2765,"intent":243,"supportingSections":2771,"references":2772},"a-new-collection-belongs-to-its-creator","A new collection belongs to its creator","A Reader creates collections only in their own library, and each one belongs to\nthe Reader who created it from the start.","Ownership decides who may change, publish and delete a collection, so it is\nsettled at the moment the collection exists.",[2761],{"type":2762,"entityId":317,"effect":1151,"from":733,"to":733,"facts":2763,"contexts":2764},"entity",[],[],[2766],{"actorIds":2767,"related":2768,"self":734,"when":2770,"unattended":734,"configuredByEntityId":733},[],[2769],{"verb":789,"entityId":238},[],[],[],{"id":2774,"title":2775,"statement":2776,"rationale":2777,"appliesTo":2778,"permits":2782,"intent":243,"supportingSections":2788,"references":2789},"a-reader-follows-sources-only-for-their-own-library","A Reader follows sources only for their own library","A source is followed by the Reader who adds it, for their own library. Nobody\nelse adds a source to a Reader's library.","Which feeds may fill a library is the Reader's own choice.",[2779],{"type":2762,"entityId":329,"effect":1151,"from":733,"to":733,"facts":2780,"contexts":2781},[],[],[2783],{"actorIds":2784,"related":2785,"self":734,"when":2787,"unattended":734,"configuredByEntityId":733},[],[2786],{"verb":794,"entityId":238},[],[],[],{"id":2791,"title":2792,"statement":2793,"rationale":2794,"appliesTo":2795,"permits":2799,"intent":243,"supportingSections":2807,"references":2808},"an-owner-publishes-only-while-public-sharing-is-on","An owner publishes only while public sharing is on","A collection becomes published only while public sharing is enabled for the\nProduct. While it is switched off, an owner who tries to publish is told that\npublishing is unavailable and why, and the collection stays as it was;\ncollections already published stay readable.","Sharing is the one way library contents leave a Reader's private library, so\nthe Product keeps a single switch to stop new publication without touching\nanything a Reader owns.",[2796],{"type":2762,"entityId":317,"effect":1056,"from":733,"to":751,"facts":2797,"contexts":2798},[],[],[2800],{"actorIds":2801,"related":2802,"self":734,"when":2804,"unattended":734,"configuredByEntityId":733},[],[2803],{"verb":789,"entityId":238},[2805],{"entityId":799,"fact":805,"state":733,"operator":2806,"value":802},"is",[],[],{"id":2810,"title":2811,"statement":2812,"rationale":2813,"appliesTo":2814,"permits":733,"intent":243,"supportingSections":2827,"references":2828},"collection-membership-never-saves-or-unsaves-an-item","Collection membership never saves or unsaves an item","Adding an item to a collection, moving it, removing it, or deleting the\ncollection never saves or unsaves that item. Only saving it or removing it from\nthe saved items does.","Keeping an item and gathering it into a reading list are separate Reader\ndecisions; changing one must not silently reverse the other.",[2815,2818,2820,2822,2824],{"type":2816,"id":539,"contexts":2817},"capability",[],{"type":2816,"id":544,"contexts":2819},[],{"type":2816,"id":542,"contexts":2821},[],{"type":2816,"id":541,"contexts":2823},[],{"type":2825,"id":2618,"contexts":2826},"journey",[],[],[],{"id":2830,"title":2831,"statement":2832,"rationale":2833,"appliesTo":2834,"permits":2838,"intent":243,"supportingSections":2848,"references":2849},"feed-addresses-are-the-owners","Feed addresses are the owner's","Where a source's feed is read from is shown only to the Reader who follows it.\nThe source's name may appear beside items anyone can read; its feed address\nmay not. The Product may read it unattended to synchronize that Reader’s feed.","A feed address can carry a private token or a paid subscription, so it belongs\nto the Reader who supplied it and nobody else.",[2835],{"type":2762,"entityId":329,"effect":1038,"from":733,"to":733,"facts":2836,"contexts":2837},[352],[],[2839,2843],{"actorIds":2840,"related":2841,"self":734,"when":2842,"unattended":802,"configuredByEntityId":733},[],[],[],{"actorIds":2844,"related":2845,"self":734,"when":2847,"unattended":734,"configuredByEntityId":733},[],[2846],{"verb":794,"entityId":238},[],[],[],{"id":2851,"title":2852,"statement":2853,"rationale":2854,"appliesTo":2855,"permits":2859,"intent":243,"supportingSections":2860,"references":2861},"items-are-never-deleted","Items are never deleted","Once an item is in a Reader's library it stays there. Unfollowing its source,\nremoving it from the saved items, and deleting a collection that held it all\nleave the item in place.","A library is durable reading history. Losing an item because a feed went away\nor a reading list was tidied would make the library undependable.",[2856],{"type":2762,"entityId":322,"effect":1279,"from":733,"to":733,"facts":2857,"contexts":2858},[],[],[],[],[],{"id":2863,"title":2864,"statement":2865,"rationale":2866,"appliesTo":2867,"permits":2871,"intent":243,"supportingSections":2881,"references":2882},"only-a-readers-own-sources-fill-their-library","Only a Reader's own sources fill their library","New items enter a Reader's library only from the sources that Reader follows:\nwhen they follow one, when they refresh, or on the Product's own schedule.\nNobody else puts an item in a library.","A library is the Reader's own. What lands in it comes from the sources they\nchose, on the Product's cadence or on their request.",[2868],{"type":2762,"entityId":322,"effect":1151,"from":733,"to":733,"facts":2869,"contexts":2870},[],[],[2872,2876],{"actorIds":2873,"related":2874,"self":734,"when":2875,"unattended":802,"configuredByEntityId":733},[],[],[],{"actorIds":2877,"related":2878,"self":734,"when":2880,"unattended":734,"configuredByEntityId":733},[],[2879],{"verb":792,"entityId":238},[],[],[],{"id":2884,"title":2885,"statement":2886,"rationale":2887,"appliesTo":2888,"permits":2892,"intent":243,"supportingSections":2898,"references":2899},"only-an-owner-changes-a-collection","Only an owner changes a collection","Only the Reader who created a collection can change its contents, order, name,\nor publication state.","A public link grants read access, never collaboration or ownership.",[2889],{"type":2762,"entityId":317,"effect":1056,"from":733,"to":733,"facts":2890,"contexts":2891},[],[],[2893],{"actorIds":2894,"related":2895,"self":734,"when":2897,"unattended":734,"configuredByEntityId":733},[],[2896],{"verb":789,"entityId":238},[],[],[],{"id":2901,"title":2902,"statement":2903,"rationale":2904,"appliesTo":2905,"permits":2909,"intent":243,"supportingSections":2915,"references":2916},"only-its-reader-sees-when-an-item-was-saved","Only its Reader sees when an item was saved","When an item was saved is read only by the Reader whose library keeps it. An\nitem shown in a published collection discloses its title and publication date,\nnever its owner's saving.","Saving is personal reading state; a published collection shares the owner's\nselection, not their reading habits.",[2906],{"type":2762,"entityId":322,"effect":1038,"from":733,"to":733,"facts":2907,"contexts":2908},[325],[],[2910],{"actorIds":2911,"related":2912,"self":734,"when":2914,"unattended":734,"configuredByEntityId":733},[],[2913],{"verb":792,"entityId":238},[],[],[],{"id":2918,"title":2919,"statement":2920,"rationale":2921,"appliesTo":2922,"permits":2926,"intent":243,"supportingSections":2936,"references":2937},"only-reading-its-feed-changes-a-source","Only reading its feed changes a source","A source's record of whether it can be read, and when it last was, changes only\nwhen the Product reads its feed: on the Product's own schedule, or when the\nReader who follows it refreshes their sources. Nobody edits a source by hand.","The record reports what the feed itself did, so only an attempt to read the feed\nmay change it.",[2923],{"type":2762,"entityId":329,"effect":1056,"from":733,"to":733,"facts":2924,"contexts":2925},[],[],[2927,2931],{"actorIds":2928,"related":2929,"self":734,"when":2930,"unattended":802,"configuredByEntityId":733},[],[],[],{"actorIds":2932,"related":2933,"self":734,"when":2935,"unattended":734,"configuredByEntityId":733},[],[2934],{"verb":794,"entityId":238},[],[],[],{"id":2939,"title":2940,"statement":2941,"rationale":2942,"appliesTo":2943,"permits":2947,"intent":243,"supportingSections":2953,"references":2954},"only-the-follower-unfollows-a-source","Only the follower unfollows a source","Only the Reader who follows a source stops following it, and only after they\nconfirm. The items it already delivered stay in their library.","A source removed by anyone else would silently stop a Reader's reading without\ntheir decision.",[2944],{"type":2762,"entityId":329,"effect":1279,"from":733,"to":733,"facts":2945,"contexts":2946},[],[],[2948],{"actorIds":2949,"related":2950,"self":734,"when":2952,"unattended":734,"configuredByEntityId":733},[],[2951],{"verb":794,"entityId":238},[],[],[],{"id":2956,"title":2957,"statement":2958,"rationale":2959,"appliesTo":2960,"permits":2964,"intent":243,"supportingSections":2970,"references":2971},"only-the-owner-deletes-a-collection","Only the owner deletes a collection","A collection is deleted only by the Reader who owns it, and only after they\nconfirm. Deleting it never touches the items it held.","Deleting is for good, so it is the one change to a collection that only its\nowner's deliberate decision may make.",[2961],{"type":2762,"entityId":317,"effect":1279,"from":733,"to":733,"facts":2962,"contexts":2963},[],[],[2965],{"actorIds":2966,"related":2967,"self":734,"when":2969,"unattended":734,"configuredByEntityId":733},[],[2968],{"verb":789,"entityId":238},[],[],[],{"id":2973,"title":2974,"statement":2975,"rationale":2976,"appliesTo":2977,"permits":2981,"intent":243,"supportingSections":2992,"references":2993},"only-the-owner-reads-an-unpublished-collection","Only the owner reads an unpublished collection","A collection is read by its owner always, and by anyone else only while it is\npublished. Once an owner unpublishes it, its public address serves no collection\ncontents.","Publication must have one immediate and reliable reversal without deleting the\nowner's collection.",[2978],{"type":2762,"entityId":317,"effect":1038,"from":733,"to":733,"facts":2979,"contexts":2980},[],[],[2982,2987],{"actorIds":2983,"related":2984,"self":734,"when":2986,"unattended":734,"configuredByEntityId":733},[],[2985],{"verb":789,"entityId":238},[],{"actorIds":2988,"related":2989,"self":734,"when":2990,"unattended":734,"configuredByEntityId":733},[238,252],[],[2991],{"entityId":733,"fact":733,"state":751,"operator":733,"value":733},[],[],{"id":2995,"title":2996,"statement":2997,"rationale":2998,"appliesTo":2999,"permits":3004,"intent":243,"supportingSections":3010,"references":3011},"public-addresses-are-the-owners","Public addresses are the owner's","Inside the collection workspace, a collection's public address is shown only to\nits owner: in the collection's settings and in the part of them that controls\nsharing. Nowhere else in the workspace presents it.","The address of an unpublished collection is a way back in that only its owner\nshould hold until they publish it again.",[3000],{"type":2762,"entityId":317,"effect":1038,"from":733,"to":733,"facts":3001,"contexts":3002},[552],[3003],{"placeId":580},[3005],{"actorIds":3006,"related":3007,"self":734,"when":3009,"unattended":734,"configuredByEntityId":733},[],[3008],{"verb":789,"entityId":238},[],[],[],{"id":3013,"title":3014,"statement":3015,"rationale":3016,"appliesTo":3017,"permits":3021,"intent":243,"supportingSections":3027,"references":3028},"reading-state-is-private-to-its-reader","Reading state is private to its Reader","Only the Reader whose library holds an item changes whether it is read, unread,\nor saved.","Reading progress is personal working state, not information exposed through\nshared collections.",[3018],{"type":2762,"entityId":322,"effect":1056,"from":733,"to":733,"facts":3019,"contexts":3020},[],[],[3022],{"actorIds":3023,"related":3024,"self":734,"when":3026,"unattended":734,"configuredByEntityId":733},[],[3025],{"verb":792,"entityId":238},[],[],[],[3030],{"id":3031,"title":3032,"description":3033,"kind":3034,"of":3035,"takesEffect":3036,"stability":3037,"assignmentUnit":733,"assignmentMethod":733,"assignmentFact":733,"allocation":733,"settings":3038,"discriminator":733,"alternatives":3040,"intent":243,"supportingSections":3045,"references":3046},"library-organization","Library organization","Readers on mobile get one of two libraries: a personal list of everything unread, or one organized by source that also lets a Reader mark a source's unread items read together.","configuration","experience","At session start; assignment changes take effect in the next session.","Fixed until the session ends.",[3039],{"entity":238,"fact":785},[3041,3043],{"resourceId":261,"selectedWhen":3042,"label":733},"Library assignment is Classic or unset. Unknown values are rejected.",{"resourceId":275,"selectedWhen":3044,"label":733},"Library assignment is Source-focused.",[],[],{"scope":243,"method":243,"covered":3048,"exclusions":3049,"unmapped":3050,"limitations":3051},[],[],[],[],{"path":3053,"commit":3054},"blueprints\u002Fcontent-feed-reader","f474777f17005554bb7fd1f1e18189bfd01792bc",1791840534142]