[{"data":1,"prerenderedAt":1748},["ShallowReactive",2],{"$fp-rOOnce7HPNUtPcdzeThQtCkMXnKIn3xRULGti4dac":3,"$f9Vh0io2qG0JzYnMPsBf_U_dqqLqms1-FZUxgXhbVfaQ":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":23,"publishedAt":21,"reportDigest":177,"logo":27,"cover":28,"report":178,"source":1745},"c35d170bedf2d148cee89af7b6984147404d961017fa1fef68a3ca8933072672",{"schemaVersion":179,"id":23,"title":24,"summary":25,"description":180,"category":26,"authors":181,"license":184,"intent":185,"supportingSections":186,"references":187,"referenceProfile":193,"tags":194,"languages":195,"generatedAt":197,"generator":198,"counts":201,"limitations":202,"model":212,"coverage":1740},"19.0.0","A place where developers keep the pieces of code they reach for again and\nagain. Each snippet carries its language, so it is highlighted as code, and a\ntitle, description and tags, so it can be found later. A snippet stays private\nuntil its owner shares it by an unlisted link or makes it public, where anyone\ncan read it and other developers can fork their own copy. Every change to the\ncode keeps a revision, so a snippet can improve without losing what it was.",[182],{"name":183},"pdd-kit","MIT","Useful code gets lost in old projects and chat threads, and handing it to\nsomeone means pasting it where nobody finds it again. Make a useful piece of\ncode easy to keep, find and pass on. The owner always decides who can read a\nsnippet and is the only one who changes it; reuse by anyone else happens\nthrough a fork that becomes theirs.",[],[188],{"kind":189,"role":190,"target":191,"title":192},"research","context","https:\u002F\u002Fgithub.com\u002Fitai-gendler\u002Fpdd-kit\u002Fblob\u002Fmain\u002Fblueprints\u002Fcode-snippet-sharing\u002Freferences\u002Fassumptions.md","Snippet sharing assumptions","portable",[30,31,32],[196],"en","2026-10-12",{"name":199,"version":200},"pdd-kit-cli","0.34.1",{"interfaces":36,"experiences":48,"screens":46,"domains":48,"entities":34,"capabilities":35,"capabilityScenarios":145,"journeys":36,"journeyScenarios":48,"businessRules":35,"variations":174},[203,204,205,206,207,208,209,210,211],"A snippet holds one piece of code in one language.","Only a snippet's owner changes it. Others read it and may fork a public one; there are no comments, stars or shared editing.","An earlier revision is never restored in place; its code is carried forward by editing the snippet.","When the Developer asks, a language model drafts a title, a description and tags into the editor, and may be wrong. The Developer decides what is saved, and everything else works while the model is unavailable.","Highlighting follows the language the Developer chooses. The Product never runs, checks or formats code.","An unlisted snippet's address cannot be guessed, but anyone who holds it can read the snippet.","Developers sign in with an existing account to write snippets, while anyone reads public and unlisted ones without one; signing up and managing accounts are not part of this product.","There are no profile pages listing a Developer's snippets.","Public snippets are not reported or moderated within the product.",{"taxonomies":213,"interfaces":227,"experiences":243,"screens":267,"domains":425,"entities":438,"capabilities":511,"capabilityScenarios":586,"journeys":1495,"journeyScenarios":1507,"businessRules":1590,"variations":1739},{"scenarioKinds":214},[215,219,223],{"id":216,"name":217,"description":218,"colorSlot":46},"edge","Edge case","An uncommon but expected path with a distinct observable outcome.",{"id":220,"name":221,"description":222,"colorSlot":36},"primary","Primary","The expected observable behavior path.",{"id":224,"name":225,"description":226,"colorSlot":18},"validation","Validation","Input the Product refuses while preserving the Actor's work.",[228],{"id":229,"title":230,"description":231,"type":232,"actorIds":233,"entryPoints":236,"languages":239,"intent":240,"supportingSections":241,"references":242},"snippets-web","Snippets web application","The supported browser Interface for writing, sharing and finding snippets.\nReading a public or unlisted snippet and browsing public ones needs no account;\nwriting, revising, sharing and forking need a Developer session.","web",[234,235],"developer","visitor",[237],{"type":232,"path":238},"\u002F",[],"",[],[],[244,255],{"id":245,"title":246,"description":247,"actorIds":248,"interfaceIds":249,"accessMode":32,"entryPoints":250,"intent":240,"supportingSections":253,"references":254},"snippets-web::public-snippets","Public snippets","The read-only context reached without signing in: a shared link to one\nsnippet, or Discover. It shows public and unlisted snippets and their history,\nand nothing a Developer keeps private.",[235],[229],[251],{"type":229,"path":252},"\u002Fsnippets\u002F:snippetId",[],[],{"id":256,"title":257,"description":258,"actorIds":259,"interfaceIds":260,"accessMode":261,"entryPoints":262,"intent":240,"supportingSections":265,"references":266},"snippets-web::workspace","Developer workspace","The signed-in context in which a Developer writes, revises, shares and deletes\ntheir own snippets, and reads and forks those other Developers made public.\nEvery snippet written here belongs to the signed-in Developer.",[234],[229],"authenticated",[263],{"type":229,"path":264},"\u002Fmy",[],[],[268,296,326,346,368,404],{"id":269,"title":270,"description":271,"capabilityIds":272,"entities":274,"capabilityScenarioIds":287,"journeyScenarioIds":290,"entryPoints":291,"intent":240,"supportingSections":294,"references":295},"snippets-web::discover","Discover","Lists public snippets, newest first, with their language, tags and owner,\nnarrows them by language or tag or by a search term, and opens one to read. It\nis the same place whether or not the person has signed in.",[273],"browse-public-snippets",[275,279],{"entityId":234,"shows":276,"collects":278},[277],"Username",[],{"entityId":280,"shows":281,"collects":286},"snippet",[282,283,284,285],"Description","Language","Tags","Title",[],[288,289],"browse-public-snippets-by-language","search-public-snippets",[],[292],{"type":229,"path":293},"\u002Fdiscover",[],[],{"id":297,"title":298,"description":299,"capabilityIds":300,"entities":302,"capabilityScenarioIds":317,"journeyScenarioIds":321,"entryPoints":322,"intent":240,"supportingSections":324,"references":325},"snippets-web::public-snippets::snippet","Snippet","One public or unlisted snippet read without an account: its title, description,\nowner and tags, its code highlighted for its language, the snippet it was\nforked from if any, and its history of revisions.",[301],"view-snippet",[303,306,312],{"entityId":234,"shows":304,"collects":305},[277],[],{"entityId":307,"shows":308,"collects":311},"revision",[309,310],"Number","Saved at",[],{"entityId":280,"shows":313,"collects":316},[314,282,315,283,284,285],"Code","Forked from",[],[318,319,320],"open-a-snippet-that-is-not-shared","read-a-shared-snippet","read-an-earlier-revision-without-an-account",[],[323],{"type":229,"path":252},[],[],{"id":327,"title":328,"description":329,"capabilityIds":330,"entities":331,"capabilityScenarioIds":338,"journeyScenarioIds":340,"entryPoints":341,"intent":240,"supportingSections":344,"references":345},"snippets-web::revision","Revision","One earlier revision of a snippet: its code highlighted for the language it had\nthen, when it was saved, and what changed from the revision before it. It is\nopen to anyone who may read the snippet, signed in or not.",[301],[332,335],{"entityId":307,"shows":333,"collects":334},[314,283,309,310],[],{"entityId":280,"shows":336,"collects":337},[285],[],[320,339],"review-a-snippets-history",[],[342],{"type":229,"path":343},"\u002Fsnippets\u002F:snippetId\u002Frevisions\u002F:revisionNumber",[],[],{"id":347,"title":348,"description":349,"capabilityIds":350,"entities":354,"capabilityScenarioIds":358,"journeyScenarioIds":363,"entryPoints":364,"intent":240,"supportingSections":366,"references":367},"snippets-web::workspace::my-snippets","My snippets","Lists the snippets the Developer owns, forks included, with each one's\nlanguage, tags and visibility, narrows them by language, tag or visibility, and\nopens one. It is where a new snippet is started.",[351,352,353,301],"browse-my-snippets","create-snippet","delete-snippet",[355],{"entityId":280,"shows":356,"collects":357},[283,284,285],[],[359,360,361,362],"create-a-private-snippet","delete-an-owned-snippet","find-an-owned-snippet","open-an-owned-snippet",[],[365],{"type":229,"path":264},[],[],{"id":369,"title":298,"description":370,"capabilityIds":371,"entities":375,"capabilityScenarioIds":386,"journeyScenarioIds":397,"entryPoints":400,"intent":240,"supportingSections":402,"references":403},"snippets-web::workspace::snippet","One snippet opened by a signed-in Developer: its details, code highlighted for\nits language, history of revisions and the snippet it was forked from if any.\nOn their own snippet the owner also sees its visibility and address, and edits\nit, changes its visibility or deletes it from here; on another Developer's\npublic snippet they fork it.",[372,352,353,373,374,301],"change-snippet-visibility","edit-snippet","fork-snippet",[376,379,382],{"entityId":234,"shows":377,"collects":378},[277],[],{"entityId":307,"shows":380,"collects":381},[309,310],[],{"entityId":280,"shows":383,"collects":385},[384,314,282,315,283,284,285],"Address",[],[387,359,388,360,389,390,391,392,362,393,394,395,339,396],"change-only-a-snippets-details","create-a-public-snippet","fork-a-public-snippet","make-a-shared-snippet-private","make-a-snippet-public","make-a-snippet-unlisted","refuse-a-visibility-change-by-another-developer","refuse-editing-another-developers-snippet","refuse-forking-a-snippet-that-is-no-longer-public","revise-a-snippets-code",[398,399],"fork-a-snippet-made-private-meanwhile","fork-and-change-a-public-snippet",[401],{"type":229,"path":252},[],[],{"id":405,"title":406,"description":407,"capabilityIds":408,"entities":410,"capabilityScenarioIds":414,"journeyScenarioIds":419,"entryPoints":420,"intent":240,"supportingSections":423,"references":424},"snippets-web::workspace::snippet-editor","Snippet editor","Where a snippet is written: a new one, or a revision of one the Developer owns.\nIt takes the code, its language, a title, a description and tags, and for a\nnew snippet its visibility. Here the Developer can ask for suggested details,\nwhich fill the title, description and tags fields for them to change or keep.\nLeaving without saving keeps nothing.",[352,373,374,409],"suggest-snippet-details",[411],{"entityId":280,"shows":412,"collects":413},[314,282,283,284,285],[314,282,283,284,285],[387,359,388,389,415,416,396,417,418],"refuse-a-snippet-without-code","refuse-suggestions-without-code","suggest-details-for-the-code","suggest-snippet-details-while-the-language-model-is-unavailable",[399],[421],{"type":229,"path":422},"\u002Fnew",[],[],[426,432],{"id":427,"name":270,"description":428,"boundary":429,"colorSlot":48,"intent":240,"supportingSections":430,"references":431},"discover","Where public snippets are found and taken further: browsing and searching what\nevery Developer has made public, and forking one into a copy of one's own.","Owns finding public snippets and making a fork of one. It does not own private\nor unlisted snippets, or what the forking Developer does with their copy once\nit is made.",[],[],{"id":433,"name":348,"description":434,"boundary":435,"colorSlot":36,"intent":240,"supportingSections":436,"references":437},"my-snippets","The snippets a Developer owns: writing them with help describing them, revising\nthem, deciding who can read them, and deleting them.","Owns a snippet's details, code, revisions and visibility, and the details\nsuggested while it is written. It does not own how public snippets are found by\nothers or the copies other Developers fork from them.",[],[],[439,455,471,503],{"id":234,"title":440,"description":441,"kind":442,"acts":443,"singleton":444,"informationKept":445,"relations":448,"states":452,"intent":240,"supportingSections":453,"references":454},"Developer","A person with an account who writes, revises and shares snippets, and forks\npublic snippets other Developers have made. Every snippet has exactly one\nDeveloper as its owner.","person","external",false,[446],{"name":277,"description":447},"the name shown as the owner of their snippets",[449],{"entityId":280,"verb":450,"cardinality":451},"owns","one-to-many",[],[],[],{"id":307,"title":328,"description":456,"domainId":433,"kind":457,"acts":457,"singleton":444,"informationKept":458,"relations":467,"states":468,"intent":240,"supportingSections":469,"references":470},"One saved version of a snippet's code. A snippet's revisions, newest first,\nare its history; each can be opened at an address of its own.",null,[459,461,463,465],{"name":309,"description":460},"its place in the snippet's history, counting from 1",{"name":314,"description":462},"the code as it was saved in this revision",{"name":283,"description":464},"the language the code was written in at this revision",{"name":310,"description":466},"when the owner saved it",[],[],[],[],{"id":280,"title":298,"description":472,"domainId":433,"kind":457,"acts":457,"singleton":444,"informationKept":473,"relations":488,"states":491,"intent":240,"supportingSections":501,"references":502},"One piece of code a Developer keeps, with what it is called, what it is for\nand the language it is written in, at an address of its own.",[474,476,478,480,482,484,486],{"name":285,"description":475},"what the snippet is called",{"name":282,"description":477},"what the code does and when to reach for it, in the owner's words",{"name":283,"description":479},"the programming language the code is written in, which decides how it is highlighted",{"name":284,"description":481},"the words the owner files it under so it can be found again",{"name":314,"description":483},"the code itself, as its latest revision holds it",{"name":384,"description":485},"the link the snippet is read at, which cannot be guessed",{"name":315,"description":487},"the snippet it was copied from, when it is a fork",[489],{"entityId":307,"verb":490,"cardinality":451},"holds",[492,495,498],{"name":493,"content":494},"Private","Readable only by its owner. Its address shows nothing to anyone else.",{"name":496,"content":497},"Unlisted","Readable by anyone who holds its address, and listed nowhere: Discover and\nsearch never show it.",{"name":499,"content":500},"Public","Readable by anyone, listed in Discover, and open for other Developers to fork.",[],[],{"id":235,"title":504,"description":505,"kind":442,"acts":443,"singleton":444,"informationKept":506,"relations":507,"states":508,"intent":240,"supportingSections":509,"references":510},"Visitor","Someone reading snippets without signing in: browsing public snippets, or\nopening a link a Developer shared. A Visitor reads what is public or unlisted\nand nothing else, and makes no snippet of their own.",[],[],[],[],[],[512,520,529,537,545,553,561,569,577],{"id":351,"title":513,"description":514,"domainId":433,"availability":515,"intent":517,"supportingSections":518,"references":519},"Own snippet browsing","Lists the snippets a Developer owns, forks included, narrows them by language,\ntag or visibility, and opens one.",[516],{"placeId":256},"Let a Developer get back to a snippet they kept by what it is written in and\nhow they filed it.",[],[],{"id":273,"title":521,"description":522,"domainId":427,"availability":523,"intent":526,"supportingSections":527,"references":528},"Public snippet browsing","Lists every Developer's public snippets, newest first, narrows them by language,\ntag or a search term, and opens one, with or without an account.",[524,525],{"placeId":245},{"placeId":256},"Let anyone find reusable code by what it is written in and what it is for.",[],[],{"id":372,"title":530,"description":531,"domainId":433,"availability":532,"intent":534,"supportingSections":535,"references":536},"Snippet visibility change","Decides who can read an owned snippet: only its owner (private), anyone holding\nits address (unlisted), or anyone at all, listed in Discover and open to forking\n(public).",[533],{"placeId":256},"Give the owner one explicit, reversible control over who can read a snippet,\nwith the address staying the same whichever they choose.",[],[],{"id":352,"title":538,"description":539,"domainId":433,"availability":540,"intent":542,"supportingSections":543,"references":544},"Snippet creation","Saves new code as a snippet the Developer owns, with its language, title,\ndescription and tags, in the visibility they chose, and keeps the code as the\nsnippet's first revision.",[541],{"placeId":256},"Make keeping a useful piece of code one short step, private unless the\nDeveloper deliberately says otherwise.",[],[],{"id":353,"title":546,"description":547,"domainId":433,"availability":548,"intent":550,"supportingSections":551,"references":552},"Snippet deletion","Removes an owned snippet and its history for good, after the owner confirms.",[549],{"placeId":256},"Let an owner take a snippet away for good, while forks other Developers already\nmade remain theirs.",[],[],{"id":373,"title":554,"description":555,"domainId":433,"availability":556,"intent":558,"supportingSections":559,"references":560},"Snippet editing","Changes the code, language, title, description or tags of a snippet its owner\nkeeps, at the same address, keeping every change to the code as a new revision.",[557],{"placeId":256},"Let an owner improve a snippet they have already shared without breaking the\nlink to it or losing the code it held before.",[],[],{"id":374,"title":562,"description":563,"domainId":427,"availability":564,"intent":566,"supportingSections":567,"references":568},"Snippet forking","Copies another Developer's public snippet into a new private snippet the forking\nDeveloper owns, which remembers where it came from, and opens the copy to edit.",[565],{"placeId":256},"Let reuse happen through a copy of one's own, so changing shared code never\nneeds authority over someone else's snippet.",[],[],{"id":409,"title":570,"description":571,"domainId":433,"availability":572,"intent":574,"supportingSections":575,"references":576},"Snippet detail suggestion","When the Developer asks for suggested details in the editor, the Product sends\nthe code and its language to a language model and fills the title, description\nand tags fields with what it drafts. The language model is called only on that\nrequest, and never drafts code, a language or a visibility. The filled fields\nstay editable, and saving the snippet is what keeps them.",[573],{"placeId":256},"Make describing a snippet the easy step instead of the skipped one. The\nlanguage model is a helper whose absence costs only the suggestion, never the\nability to write and save.",[],[],{"id":301,"title":578,"description":579,"availability":580,"intent":583,"supportingSections":584,"references":585},"Snippet reading","Presents one snippet — its title, description, owner, language and tags, its\ncode highlighted for its language, and its revisions newest first — to whoever\nmay read it, and shows nothing to anyone who may not. An earlier revision opens\nwith its code, its language and what changed from the revision before.",[581,582],{"placeId":245},{"placeId":256},"Make the snippet itself the thing that is shared: one address that shows the\ncode well to everyone its owner allows, reveals nothing to anyone else, and\nlets its readers see how it changed.",[],[],[587,627,667,715,754,802,844,893,926,960,1000,1026,1054,1096,1133,1160,1193,1225,1264,1291,1343,1394,1429,1464],{"id":288,"capabilityId":273,"title":588,"kindId":220,"actorIds":589,"routes":590,"steps":593,"trigger":620,"decisionPoints":621,"outcome":622,"edgeCases":623,"intent":240,"supportingSections":625,"references":626},"Browse public snippets by language",[235],[591],{"id":232,"name":592},"Web",[594,605,613],{"text":595,"kind":596,"actorId":235,"capabilityId":273,"entities":597,"unattended":444,"contexts":603},"The Product lists public snippets, newest first, with each one's language, tags and owner","product",[598,601],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":600,"with":457},"reads",[282,283,284,285],{"entityId":234,"as":457,"effect":599,"from":457,"to":457,"facts":602,"with":457},[277],[604],{"routeId":232,"placeId":269},{"text":606,"kind":607,"actorId":235,"capabilityId":273,"entities":608,"unattended":444,"contexts":611},"The Visitor narrows the list to one language and one tag","actor",[609],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":610,"with":457},[283,284],[612],{"routeId":232,"placeId":269},{"text":614,"kind":607,"actorId":235,"capabilityId":273,"entities":615,"unattended":444,"contexts":618},"The Visitor opens a snippet from what remains",[616],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":617,"with":457},[285],[619],{"routeId":232,"placeId":269},"Someone without an account wants to see what others have shared in a language\nthey work in.",[],"The Visitor has opened a public snippet they found by language and tag, without\nsigning in, and nothing was changed by finding it.",[624],"Nothing matches the narrowing → the list says so, and the narrowing can be cleared.",[],[],{"id":387,"capabilityId":373,"title":628,"kindId":216,"actorIds":629,"routes":630,"steps":632,"trigger":661,"decisionPoints":662,"outcome":663,"edgeCases":664,"intent":240,"supportingSections":665,"references":666},"Change only a snippet's details",[234],[631],{"id":232,"name":592},[633,640,645,653],{"text":634,"kind":607,"actorId":234,"capabilityId":373,"entities":635,"unattended":444,"contexts":638},"The Developer chooses to edit a snippet they own",[636],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":637,"with":457},[285],[639],{"routeId":232,"placeId":369},{"text":641,"kind":607,"actorId":234,"capabilityId":373,"entities":642,"unattended":444,"contexts":643},"The Developer changes the title, description or tags, leaves the code as it is, and saves",[],[644],{"routeId":232,"placeId":405},{"text":646,"kind":596,"actorId":234,"capabilityId":373,"entities":647,"unattended":444,"contexts":651},"The Product keeps the new details on the snippet",[648],{"entityId":280,"as":457,"effect":649,"from":457,"to":457,"facts":650,"with":457},"changes",[282,284,285],[652],{"routeId":232,"placeId":405},{"text":654,"kind":655,"actorId":457,"capabilityId":373,"entities":656,"unattended":444,"contexts":659},"No revision is added, because the code did not change","condition",[657],{"entityId":307,"as":457,"effect":599,"from":457,"to":457,"facts":658,"with":457},[],[660],{"routeId":232,"placeId":369},"The owner wants a snippet to be easier to find or understand, without changing\nits code.",[],"The snippet carries the new title, description and tags, and its history is\nunchanged.",[],[],[],{"id":359,"capabilityId":352,"title":668,"kindId":220,"actorIds":669,"routes":670,"steps":672,"trigger":706,"decisionPoints":707,"outcome":708,"edgeCases":709,"intent":240,"supportingSections":713,"references":714},"Create a private snippet",[234],[671],{"id":232,"name":592},[673,678,683,688,699],{"text":674,"kind":607,"actorId":234,"capabilityId":352,"entities":675,"unattended":444,"contexts":676},"The Developer starts a new piece of code from their list",[],[677],{"routeId":232,"placeId":347},{"text":679,"kind":607,"actorId":234,"capabilityId":352,"entities":680,"unattended":444,"contexts":681},"The Developer enters the code, chooses its language, and gives it a title and, if they like, a description and tags",[],[682],{"routeId":232,"placeId":405},{"text":684,"kind":607,"actorId":234,"capabilityId":352,"entities":685,"unattended":444,"contexts":686},"The Developer saves, leaving the visibility at Private",[],[687],{"routeId":232,"placeId":405},{"text":689,"kind":596,"actorId":234,"capabilityId":352,"entities":690,"unattended":444,"contexts":697},"The Product creates a private snippet owned by the Developer, at an address of its own, and keeps its code as revision 1",[691,694],{"entityId":280,"as":457,"effect":692,"from":457,"to":493,"facts":693,"with":457},"creates",[384,314,282,283,284,285],{"entityId":307,"as":457,"effect":692,"from":457,"to":457,"facts":695,"with":696},[314,283,309,310],{"entityId":280,"as":457},[698],{"routeId":232,"placeId":405},{"text":700,"kind":596,"actorId":234,"capabilityId":352,"entities":701,"unattended":444,"contexts":704},"The Product opens the new snippet with its code highlighted for its language",[702],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":703,"with":457},[384,314,282,283,284,285],[705],{"routeId":232,"placeId":369},"The Developer has a piece of code they want to keep.",[],"The Developer owns a new private snippet with the code, language and details\nthey gave it, readable by nobody else, and its history starts at revision 1.",[710,711,712],"The Developer chooses Unlisted before saving → the snippet is created unlisted and its address is ready to share.","The Developer filled the details from a suggestion → saving keeps them as the Developer's own, like anything typed.","The Developer leaves the editor without saving → nothing is kept.",[],[],{"id":388,"capabilityId":352,"title":716,"kindId":220,"actorIds":717,"routes":718,"steps":720,"trigger":748,"decisionPoints":749,"outcome":750,"edgeCases":751,"intent":240,"supportingSections":752,"references":753},"Create a public snippet",[234],[719],{"id":232,"name":592},[721,726,731,741],{"text":722,"kind":607,"actorId":234,"capabilityId":352,"entities":723,"unattended":444,"contexts":724},"The Developer enters the code, chooses its language, and gives it a title, a description and tags",[],[725],{"routeId":232,"placeId":405},{"text":727,"kind":607,"actorId":234,"capabilityId":352,"entities":728,"unattended":444,"contexts":729},"The Developer sets the visibility to Public and saves",[],[730],{"routeId":232,"placeId":405},{"text":732,"kind":596,"actorId":234,"capabilityId":352,"entities":733,"unattended":444,"contexts":739},"The Product creates a public snippet owned by the Developer, at an address of its own, and keeps its code as revision 1",[734,736],{"entityId":280,"as":457,"effect":692,"from":457,"to":499,"facts":735,"with":457},[384,314,282,283,284,285],{"entityId":307,"as":457,"effect":692,"from":457,"to":457,"facts":737,"with":738},[314,283,309,310],{"entityId":280,"as":457},[740],{"routeId":232,"placeId":405},{"text":742,"kind":596,"actorId":234,"capabilityId":352,"entities":743,"unattended":444,"contexts":746},"The Product opens the new snippet, showing the address anyone can read it at",[744],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":745,"with":457},[384,314,285],[747],{"routeId":232,"placeId":369},"The Developer has a piece of code they want anyone to be able to find and reuse.",[],"The new snippet is public from the moment it is saved: anyone can read it at its\naddress, it is listed in Discover, and other Developers can fork it.",[],[],[],{"id":360,"capabilityId":353,"title":755,"kindId":220,"actorIds":756,"routes":757,"steps":759,"trigger":794,"decisionPoints":795,"outcome":796,"edgeCases":797,"intent":240,"supportingSections":800,"references":801},"Delete an owned snippet",[234],[758],{"id":232,"name":592},[760,767,776,787],{"text":761,"kind":607,"actorId":234,"capabilityId":353,"entities":762,"unattended":444,"contexts":765},"The Developer chooses to delete a snippet they own",[763],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":764,"with":457},[285],[766],{"routeId":232,"placeId":369},{"text":768,"kind":596,"actorId":234,"capabilityId":353,"entities":769,"unattended":444,"contexts":774},"The Product asks the Developer to confirm, and says the snippet and every revision will be gone, its address will show nothing, and forks of it will stay with their owners",[770,772],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":771,"with":457},[],{"entityId":307,"as":457,"effect":599,"from":457,"to":457,"facts":773,"with":457},[],[775],{"routeId":232,"placeId":369},{"text":777,"kind":607,"actorId":234,"capabilityId":353,"entities":778,"unattended":444,"contexts":785},"The Developer confirms",[779,782],{"entityId":280,"as":457,"effect":780,"from":499,"to":457,"facts":781,"with":457},"removes",[],{"entityId":307,"as":457,"effect":780,"from":457,"to":457,"facts":783,"with":784},[],{"entityId":280,"as":457},[786],{"routeId":232,"placeId":369},{"text":788,"kind":596,"actorId":234,"capabilityId":353,"entities":789,"unattended":444,"contexts":792},"The Product returns to the Developer's list, which no longer holds the snippet",[790],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":791,"with":457},[285],[793],{"routeId":232,"placeId":347},"The owner no longer wants a snippet to exist.",[],"The snippet and its history are gone for good, and its address shows nothing to anyone.\nForks other Developers made keep their code, and show that the snippet they came\nfrom is no longer available.",[798,799],"The snippet is private or unlisted → it is deleted the same way.","The Developer declines to confirm → the snippet and its history are unchanged.",[],[],{"id":361,"capabilityId":351,"title":803,"kindId":220,"actorIds":804,"routes":805,"steps":807,"trigger":836,"decisionPoints":837,"outcome":838,"edgeCases":839,"intent":240,"supportingSections":842,"references":843},"Find an owned snippet",[234],[806],{"id":232,"name":592},[808,815,822,829],{"text":809,"kind":596,"actorId":234,"capabilityId":351,"entities":810,"unattended":444,"contexts":813},"The Product lists the snippets the Developer owns, most recently changed first, with each one's language, tags and visibility",[811],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":812,"with":457},[283,284,285],[814],{"routeId":232,"placeId":347},{"text":816,"kind":607,"actorId":234,"capabilityId":351,"entities":817,"unattended":444,"contexts":820},"The Developer narrows the list to one language and one tag",[818],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":819,"with":457},[283,284],[821],{"routeId":232,"placeId":347},{"text":823,"kind":607,"actorId":234,"capabilityId":351,"entities":824,"unattended":444,"contexts":827},"The Developer opens a snippet from what remains",[825],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":826,"with":457},[285],[828],{"routeId":232,"placeId":347},{"text":830,"kind":655,"actorId":234,"capabilityId":351,"entities":831,"unattended":444,"contexts":834},"Nothing about the snippets changes by being listed",[832],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":833,"with":457},[],[835],{"routeId":232,"placeId":347},"The Developer wants a snippet they kept and remembers its language or how they\ntagged it.",[],"The Developer has the snippet open, found among their own, with nothing\nchanged.",[840,841,624],"The Developer narrows by visibility → only their private, unlisted or public snippets are listed.","The Developer owns no snippets yet → the list says so and offers to start one.",[],[],{"id":389,"capabilityId":374,"title":845,"kindId":220,"actorIds":846,"routes":847,"steps":849,"trigger":885,"decisionPoints":886,"outcome":887,"edgeCases":888,"intent":240,"supportingSections":891,"references":892},"Fork a public snippet",[234],[848],{"id":232,"name":592},[850,858,865,878],{"text":851,"kind":607,"actorId":234,"capabilityId":374,"entities":852,"unattended":444,"contexts":856},"The Developer chooses to fork a public snippet another Developer owns",[853],{"entityId":280,"as":854,"effect":599,"from":457,"to":457,"facts":855,"with":457},"original",[285],[857],{"routeId":232,"placeId":369},{"text":859,"kind":596,"actorId":234,"capabilityId":374,"entities":860,"unattended":444,"contexts":863},"The Product confirms the original snippet is still public",[861],{"entityId":280,"as":854,"effect":599,"from":457,"to":457,"facts":862,"with":457},[],[864],{"routeId":232,"placeId":369},{"text":866,"kind":596,"actorId":234,"capabilityId":374,"entities":867,"unattended":444,"contexts":876},"The Product creates a private snippet owned by the Developer with the original's title, description, language, tags and code, recording which snippet it was forked from, and keeps its code as revision 1",[868,870,873],{"entityId":280,"as":854,"effect":599,"from":457,"to":457,"facts":869,"with":457},[314,282,283,284,285],{"entityId":280,"as":871,"effect":692,"from":457,"to":493,"facts":872,"with":457},"fork",[384,314,282,315,283,284,285],{"entityId":307,"as":457,"effect":692,"from":457,"to":457,"facts":874,"with":875},[314,283,309,310],{"entityId":280,"as":871},[877],{"routeId":232,"placeId":369},{"text":879,"kind":596,"actorId":234,"capabilityId":374,"entities":880,"unattended":444,"contexts":883},"The Product opens the fork in the editor, ready to change",[881],{"entityId":280,"as":871,"effect":599,"from":457,"to":457,"facts":882,"with":457},[314,282,283,284,285],[884],{"routeId":232,"placeId":405},"A Developer finds a public snippet they want to adapt.",[],"The Developer owns a private copy that names the snippet it came from, and is in\nthe editor of that copy, where saving a change continues as snippet editing.\nThe original and its owner are unaffected.",[889,890],"The snippet is the Developer's own → no fork is offered; they edit it instead.","The Developer forks the same snippet again → another separate copy is made.",[],[],{"id":390,"capabilityId":372,"title":894,"kindId":216,"actorIds":895,"routes":896,"steps":898,"trigger":919,"decisionPoints":920,"outcome":921,"edgeCases":922,"intent":240,"supportingSections":924,"references":925},"Make a shared snippet private",[234],[897],{"id":232,"name":592},[899,906,913],{"text":900,"kind":607,"actorId":234,"capabilityId":372,"entities":901,"unattended":444,"contexts":904},"The Developer sets the visibility of a public snippet they own to Private",[902],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":903,"with":457},[285],[905],{"routeId":232,"placeId":369},{"text":907,"kind":596,"actorId":234,"capabilityId":372,"entities":908,"unattended":444,"contexts":911},"The Product explains that the address will stop showing the snippet to anyone else, that it will leave Discover, and that forks already made stay with their owners",[909],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":910,"with":457},[],[912],{"routeId":232,"placeId":369},{"text":777,"kind":607,"actorId":234,"capabilityId":372,"entities":914,"unattended":444,"contexts":917},[915],{"entityId":280,"as":457,"effect":649,"from":499,"to":493,"facts":916,"with":457},[],[918],{"routeId":232,"placeId":369},"The owner wants to stop others reading a snippet they made public.",[],"Only the owner can read the snippet; its address shows nothing to anyone else\nand it is gone from Discover. Forks made while it was public are untouched.",[923],"The snippet is unlisted rather than public → it becomes private the same way, and the address passed on stops working.",[],[],{"id":391,"capabilityId":372,"title":927,"kindId":220,"actorIds":928,"routes":929,"steps":931,"trigger":952,"decisionPoints":953,"outcome":954,"edgeCases":955,"intent":240,"supportingSections":958,"references":959},"Make a snippet public",[234],[930],{"id":232,"name":592},[932,939,946],{"text":933,"kind":607,"actorId":234,"capabilityId":372,"entities":934,"unattended":444,"contexts":937},"The Developer sets the visibility of a private snippet they own to Public",[935],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":936,"with":457},[285],[938],{"routeId":232,"placeId":369},{"text":940,"kind":596,"actorId":234,"capabilityId":372,"entities":941,"unattended":444,"contexts":944},"The Product explains that anyone will be able to read the snippet, find it in Discover and fork it",[942],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":943,"with":457},[],[945],{"routeId":232,"placeId":369},{"text":777,"kind":607,"actorId":234,"capabilityId":372,"entities":947,"unattended":444,"contexts":950},[948],{"entityId":280,"as":457,"effect":649,"from":493,"to":499,"facts":949,"with":457},[],[951],{"routeId":232,"placeId":369},"The owner wants anyone to be able to find and reuse a snippet they have kept\nprivate.",[],"The snippet is public at the same address, listed in Discover, and open for\nother Developers to fork.",[956,957],"The snippet is unlisted rather than private → it becomes public the same way, and its address does not change.","The Developer declines to confirm → the snippet keeps the visibility it had.",[],[],{"id":392,"capabilityId":372,"title":961,"kindId":220,"actorIds":962,"routes":963,"steps":965,"trigger":993,"decisionPoints":994,"outcome":995,"edgeCases":996,"intent":240,"supportingSections":998,"references":999},"Make a snippet unlisted",[234],[964],{"id":232,"name":592},[966,973,980,986],{"text":967,"kind":607,"actorId":234,"capabilityId":372,"entities":968,"unattended":444,"contexts":971},"The Developer sets the visibility of a private snippet they own to Unlisted",[969],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":970,"with":457},[285],[972],{"routeId":232,"placeId":369},{"text":974,"kind":596,"actorId":234,"capabilityId":372,"entities":975,"unattended":444,"contexts":978},"The Product explains that anyone holding the address will be able to read the snippet, and that it will be listed nowhere",[976],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":977,"with":457},[],[979],{"routeId":232,"placeId":369},{"text":777,"kind":607,"actorId":234,"capabilityId":372,"entities":981,"unattended":444,"contexts":984},[982],{"entityId":280,"as":457,"effect":649,"from":493,"to":496,"facts":983,"with":457},[],[985],{"routeId":232,"placeId":369},{"text":987,"kind":596,"actorId":234,"capabilityId":372,"entities":988,"unattended":444,"contexts":991},"The Product shows the address to pass on",[989],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":990,"with":457},[384],[992],{"routeId":232,"placeId":369},"The owner wants one person or a small group to read a private snippet without\nputting it out for everyone.",[],"The snippet is unlisted: anyone with its address can read it, and it appears in\nneither Discover nor search.",[997],"The Developer declines to confirm → the snippet stays private.",[],[],{"id":318,"capabilityId":301,"title":1001,"kindId":216,"actorIds":1002,"routes":1003,"steps":1005,"trigger":1020,"decisionPoints":1021,"outcome":1022,"edgeCases":1023,"intent":240,"supportingSections":1024,"references":1025},"Open a snippet that is not shared",[235],[1004],{"id":232,"name":592},[1006,1013],{"text":1007,"kind":607,"actorId":235,"capabilityId":301,"entities":1008,"unattended":444,"contexts":1011},"The Visitor opens the address of a snippet that is private or has been deleted",[1009],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1010,"with":457},[],[1012],{"routeId":232,"placeId":297},{"text":1014,"kind":596,"actorId":235,"capabilityId":301,"entities":1015,"unattended":444,"contexts":1018},"The Product shows that no snippet is found there, the same whether it is private or gone",[1016],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1017,"with":457},[],[1019],{"routeId":232,"placeId":297},"Someone opens an address whose snippet is private, or that its owner deleted.",[],"They see that nothing is found and learn nothing about the snippet, not even\nwhether it exists.",[],[],[],{"id":362,"capabilityId":301,"title":1027,"kindId":220,"actorIds":1028,"routes":1029,"steps":1031,"trigger":1048,"decisionPoints":1049,"outcome":1050,"edgeCases":1051,"intent":240,"supportingSections":1052,"references":1053},"Open an owned snippet",[234],[1030],{"id":232,"name":592},[1032,1039],{"text":1033,"kind":607,"actorId":234,"capabilityId":301,"entities":1034,"unattended":444,"contexts":1037},"The Developer opens a snippet from their list",[1035],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1036,"with":457},[285],[1038],{"routeId":232,"placeId":347},{"text":1040,"kind":596,"actorId":234,"capabilityId":301,"entities":1041,"unattended":444,"contexts":1046},"The Product presents the snippet's details and highlighted code, with its visibility, its address and its history",[1042,1044],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1043,"with":457},[384,314,282,315,283,284,285],{"entityId":307,"as":457,"effect":599,"from":457,"to":457,"facts":1045,"with":457},[309,310],[1047],{"routeId":232,"placeId":369},"The Developer wants to look at, pass on or change one of their snippets.",[],"The Developer sees the snippet as others would, plus who can read it and the\naddress to pass on, with editing, sharing and deleting at hand.",[],[],[],{"id":319,"capabilityId":301,"title":1055,"kindId":220,"actorIds":1056,"routes":1057,"steps":1059,"trigger":1088,"decisionPoints":1089,"outcome":1090,"edgeCases":1091,"intent":240,"supportingSections":1094,"references":1095},"Read a shared snippet",[235],[1058],{"id":232,"name":592},[1060,1067,1076,1083],{"text":1061,"kind":607,"actorId":235,"capabilityId":301,"entities":1062,"unattended":444,"contexts":1065},"The Visitor opens the address of a public or unlisted snippet",[1063],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1064,"with":457},[],[1066],{"routeId":232,"placeId":297},{"text":1068,"kind":596,"actorId":235,"capabilityId":301,"entities":1069,"unattended":444,"contexts":1074},"The Product presents the snippet's title, description, owner, language and tags, and its code highlighted for its language",[1070,1072],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1071,"with":457},[314,282,283,284,285],{"entityId":234,"as":457,"effect":599,"from":457,"to":457,"facts":1073,"with":457},[277],[1075],{"routeId":232,"placeId":297},{"text":1077,"kind":607,"actorId":235,"capabilityId":301,"entities":1078,"unattended":444,"contexts":1081},"The Visitor copies the code",[1079],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1080,"with":457},[314],[1082],{"routeId":232,"placeId":297},{"text":1084,"kind":655,"actorId":235,"capabilityId":301,"entities":1085,"unattended":444,"contexts":1086},"Nothing about the Visitor is kept",[],[1087],{"routeId":232,"placeId":297},"Someone without an account opens a snippet's address, from Discover or from a\nlink its owner passed on.",[],"The Visitor has read and copied the code, without signing in and without\nseeing anything else its owner keeps.",[1092,1093],"The snippet is a fork → the snippet it was forked from is named, and opens if it can still be read.","The Visitor chooses to fork it → they are asked to sign in first, and return to the snippet as a Developer.",[],[],{"id":320,"capabilityId":301,"title":1097,"kindId":220,"actorIds":1098,"routes":1099,"steps":1101,"trigger":1127,"decisionPoints":1128,"outcome":1129,"edgeCases":1130,"intent":240,"supportingSections":1131,"references":1132},"Read an earlier revision without an account",[235],[1100],{"id":232,"name":592},[1102,1111,1118],{"text":1103,"kind":607,"actorId":235,"capabilityId":301,"entities":1104,"unattended":444,"contexts":1109},"The Visitor opens the history of a public or unlisted snippet",[1105,1107],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1106,"with":457},[285],{"entityId":307,"as":457,"effect":599,"from":457,"to":457,"facts":1108,"with":457},[309,310],[1110],{"routeId":232,"placeId":297},{"text":1112,"kind":607,"actorId":235,"capabilityId":301,"entities":1113,"unattended":444,"contexts":1116},"The Visitor opens an earlier revision",[1114],{"entityId":307,"as":457,"effect":599,"from":457,"to":457,"facts":1115,"with":457},[309],[1117],{"routeId":232,"placeId":297},{"text":1119,"kind":596,"actorId":235,"capabilityId":301,"entities":1120,"unattended":444,"contexts":1125},"The Product presents that revision's code highlighted for the language it had then, and what changed from the revision before it",[1121,1123],{"entityId":307,"as":457,"effect":599,"from":457,"to":457,"facts":1122,"with":457},[314,283,309,310],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1124,"with":457},[285],[1126],{"routeId":232,"placeId":327},"Someone reading a shared snippet wants to see how its code looked before.",[],"The Visitor has read the earlier revision without signing in, and nothing about\nthe snippet or the Visitor is kept.",[],[],[],{"id":415,"capabilityId":352,"title":1134,"kindId":224,"actorIds":1135,"routes":1136,"steps":1138,"trigger":1154,"decisionPoints":1155,"outcome":1156,"edgeCases":1157,"intent":240,"supportingSections":1158,"references":1159},"Refuse a snippet without code or title",[234],[1137],{"id":232,"name":592},[1139,1144,1149],{"text":1140,"kind":607,"actorId":234,"capabilityId":352,"entities":1141,"unattended":444,"contexts":1142},"The Developer saves with no code entered, or with no title",[],[1143],{"routeId":232,"placeId":405},{"text":1145,"kind":596,"actorId":234,"capabilityId":352,"entities":1146,"unattended":444,"contexts":1147},"The Product says what is missing",[],[1148],{"routeId":232,"placeId":405},{"text":1150,"kind":655,"actorId":457,"capabilityId":352,"entities":1151,"unattended":444,"contexts":1152},"Nothing is created, and everything entered stays in the editor",[],[1153],{"routeId":232,"placeId":405},"The Developer saves a new piece of code before giving it both code and a title.",[],"Nothing is kept, the Developer knows what is missing, and nothing they entered\nis lost.",[],[],[],{"id":393,"capabilityId":372,"title":1161,"kindId":224,"actorIds":1162,"routes":1163,"steps":1165,"trigger":1187,"decisionPoints":1188,"outcome":1189,"edgeCases":1190,"intent":240,"supportingSections":1191,"references":1192},"Refuse a visibility change by another Developer",[234],[1164],{"id":232,"name":592},[1166,1173,1180],{"text":1167,"kind":607,"actorId":234,"capabilityId":372,"entities":1168,"unattended":444,"contexts":1171},"The Developer tries to change who can read a snippet another Developer owns",[1169],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1170,"with":457},[],[1172],{"routeId":232,"placeId":369},{"text":1174,"kind":596,"actorId":234,"capabilityId":372,"entities":1175,"unattended":444,"contexts":1178},"The Product checks who owns the snippet",[1176],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1177,"with":457},[],[1179],{"routeId":232,"placeId":369},{"text":1181,"kind":655,"actorId":234,"capabilityId":372,"entities":1182,"unattended":444,"contexts":1185},"The change is refused and the snippet keeps its visibility",[1183],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1184,"with":457},[],[1186],{"routeId":232,"placeId":369},"A Developer tries to change the visibility of a snippet they do not own.",[],"The snippet's visibility is unchanged and the Developer gains no authority over\nit.",[],[],[],{"id":394,"capabilityId":373,"title":1194,"kindId":224,"actorIds":1195,"routes":1196,"steps":1198,"trigger":1219,"decisionPoints":1220,"outcome":1221,"edgeCases":1222,"intent":240,"supportingSections":1223,"references":1224},"Refuse editing another Developer's snippet",[234],[1197],{"id":232,"name":592},[1199,1206,1212],{"text":1200,"kind":607,"actorId":234,"capabilityId":373,"entities":1201,"unattended":444,"contexts":1204},"The Developer tries to edit a snippet another Developer owns",[1202],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1203,"with":457},[],[1205],{"routeId":232,"placeId":369},{"text":1174,"kind":596,"actorId":234,"capabilityId":373,"entities":1207,"unattended":444,"contexts":1210},[1208],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1209,"with":457},[],[1211],{"routeId":232,"placeId":369},{"text":1213,"kind":655,"actorId":234,"capabilityId":373,"entities":1214,"unattended":444,"contexts":1217},"The edit is refused and the snippet is unchanged",[1215],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1216,"with":457},[],[1218],{"routeId":232,"placeId":369},"A Developer tries to change a snippet they do not own.",[],"The snippet and its history are unchanged, and the Developer gains no authority\nover it. Where it is public, forking it is how they get a copy to change.",[],[],[],{"id":395,"capabilityId":374,"title":1226,"kindId":224,"actorIds":1227,"routes":1228,"steps":1230,"trigger":1257,"decisionPoints":1258,"outcome":1259,"edgeCases":1260,"intent":240,"supportingSections":1262,"references":1263},"Refuse forking a snippet that is no longer public",[234],[1229],{"id":232,"name":592},[1231,1238,1245,1252],{"text":1232,"kind":607,"actorId":234,"capabilityId":374,"entities":1233,"unattended":444,"contexts":1236},"The Developer chooses to fork a snippet another Developer owns",[1234],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1235,"with":457},[285],[1237],{"routeId":232,"placeId":369},{"text":1239,"kind":655,"actorId":234,"capabilityId":374,"entities":1240,"unattended":444,"contexts":1243},"The snippet has been made unlisted or private since it was opened",[1241],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1242,"with":457},[],[1244],{"routeId":232,"placeId":369},{"text":1246,"kind":596,"actorId":234,"capabilityId":374,"entities":1247,"unattended":444,"contexts":1250},"The Product says the snippet can no longer be forked",[1248],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1249,"with":457},[],[1251],{"routeId":232,"placeId":369},{"text":1253,"kind":655,"actorId":457,"capabilityId":374,"entities":1254,"unattended":444,"contexts":1255},"No copy is made",[],[1256],{"routeId":232,"placeId":369},"A Developer chooses to fork a snippet whose owner has stopped sharing it in\npublic.",[],"Nothing is copied, and the Developer knows the snippet is no longer open to\nforking.",[1261],"The snippet is unlisted and the Developer holds its address → they can read it, but it is not offered for forking.",[],[],{"id":416,"capabilityId":409,"title":1265,"kindId":224,"actorIds":1266,"routes":1267,"steps":1269,"trigger":1285,"decisionPoints":1286,"outcome":1287,"edgeCases":1288,"intent":240,"supportingSections":1289,"references":1290},"Refuse suggestions without code",[234],[1268],{"id":232,"name":592},[1270,1275,1280],{"text":1271,"kind":607,"actorId":234,"capabilityId":409,"entities":1272,"unattended":444,"contexts":1273},"The Developer asks for suggested details while the editor holds no code",[],[1274],{"routeId":232,"placeId":405},{"text":1276,"kind":596,"actorId":234,"capabilityId":409,"entities":1277,"unattended":444,"contexts":1278},"The Product says there is no code to describe yet",[],[1279],{"routeId":232,"placeId":405},{"text":1281,"kind":655,"actorId":457,"capabilityId":409,"entities":1282,"unattended":444,"contexts":1283},"Nothing is proposed and the fields are unchanged",[],[1284],{"routeId":232,"placeId":405},"The Developer asks for suggested details before entering any code.",[],"Nothing is proposed, the Developer knows code comes first, and nothing in the\neditor changed.",[],[],[],{"id":339,"capabilityId":301,"title":1292,"kindId":220,"actorIds":1293,"routes":1294,"steps":1296,"trigger":1335,"decisionPoints":1336,"outcome":1337,"edgeCases":1338,"intent":240,"supportingSections":1341,"references":1342},"Review a snippet's history",[234],[1295],{"id":232,"name":592},[1297,1304,1313,1320,1328],{"text":1298,"kind":607,"actorId":234,"capabilityId":301,"entities":1299,"unattended":444,"contexts":1302},"The Developer opens the history of a snippet",[1300],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1301,"with":457},[285],[1303],{"routeId":232,"placeId":369},{"text":1305,"kind":596,"actorId":234,"capabilityId":301,"entities":1306,"unattended":444,"contexts":1311},"The Product lists the snippet's revisions, newest first, each with its number and when it was saved",[1307,1309],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1308,"with":457},[],{"entityId":307,"as":457,"effect":599,"from":457,"to":457,"facts":1310,"with":457},[309,310],[1312],{"routeId":232,"placeId":369},{"text":1314,"kind":607,"actorId":234,"capabilityId":301,"entities":1315,"unattended":444,"contexts":1318},"The Developer opens an earlier revision",[1316],{"entityId":307,"as":457,"effect":599,"from":457,"to":457,"facts":1317,"with":457},[309],[1319],{"routeId":232,"placeId":369},{"text":1119,"kind":596,"actorId":234,"capabilityId":301,"entities":1321,"unattended":444,"contexts":1326},[1322,1324],{"entityId":307,"as":457,"effect":599,"from":457,"to":457,"facts":1323,"with":457},[314,283,309,310],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1325,"with":457},[285],[1327],{"routeId":232,"placeId":327},{"text":1329,"kind":655,"actorId":234,"capabilityId":301,"entities":1330,"unattended":444,"contexts":1333},"The snippet and its latest code are unchanged",[1331],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1332,"with":457},[],[1334],{"routeId":232,"placeId":327},"A Developer wants to see how a snippet changed, or what its code was before.",[],"The Developer has read an earlier revision and what changed in it, and the\nsnippet is exactly as it was.",[1339,1340],"The snippet has only revision 1 → the history lists that one revision.","The Developer wants the earlier code back → they copy it from the revision and save it as a new edit, which keeps a newer revision.",[],[],{"id":396,"capabilityId":373,"title":1344,"kindId":220,"actorIds":1345,"routes":1346,"steps":1348,"trigger":1385,"decisionPoints":1386,"outcome":1387,"edgeCases":1388,"intent":240,"supportingSections":1392,"references":1393},"Revise a snippet's code",[234],[1347],{"id":232,"name":592},[1349,1355,1362,1367,1376],{"text":634,"kind":607,"actorId":234,"capabilityId":373,"entities":1350,"unattended":444,"contexts":1353},[1351],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1352,"with":457},[285],[1354],{"routeId":232,"placeId":369},{"text":1356,"kind":596,"actorId":234,"capabilityId":373,"entities":1357,"unattended":444,"contexts":1360},"The Product opens the editor holding the snippet's current details and code",[1358],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1359,"with":457},[314,282,283,284,285],[1361],{"routeId":232,"placeId":405},{"text":1363,"kind":607,"actorId":234,"capabilityId":373,"entities":1364,"unattended":444,"contexts":1365},"The Developer changes the code and saves",[],[1366],{"routeId":232,"placeId":405},{"text":1368,"kind":596,"actorId":234,"capabilityId":373,"entities":1369,"unattended":444,"contexts":1374},"The Product keeps the new code on the snippet and as its next revision",[1370,1372],{"entityId":280,"as":457,"effect":649,"from":457,"to":457,"facts":1371,"with":457},[314],{"entityId":307,"as":457,"effect":692,"from":457,"to":457,"facts":1373,"with":457},[314,283,309,310],[1375],{"routeId":232,"placeId":405},{"text":1377,"kind":596,"actorId":234,"capabilityId":373,"entities":1378,"unattended":444,"contexts":1383},"The Product returns to the snippet at the same address, with the new revision at the top of its history",[1379,1381],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1380,"with":457},[384,314],{"entityId":307,"as":457,"effect":599,"from":457,"to":457,"facts":1382,"with":457},[309,310],[1384],{"routeId":232,"placeId":369},"The owner wants to change the code of a snippet they keep.",[],"The snippet shows the new code at the same address and visibility, and the code\nit held before stays readable as the previous revision.",[1389,1390,1391],"The Developer also changes the language → the new revision keeps the new language, and the code is highlighted for it.","The Developer empties the code or the title and saves → the save is refused, the Product says what is missing, and the changes stay in the editor.","The snippet was saved from another window after this editor opened → the Product does not overwrite that revision; it says a newer revision exists and keeps the Developer's changes in the editor.",[],[],{"id":289,"capabilityId":273,"title":1395,"kindId":220,"actorIds":1396,"routes":1397,"steps":1399,"trigger":1421,"decisionPoints":1422,"outcome":1423,"edgeCases":1424,"intent":240,"supportingSections":1427,"references":1428},"Search public snippets",[234],[1398],{"id":232,"name":592},[1400,1405,1414],{"text":1401,"kind":607,"actorId":234,"capabilityId":273,"entities":1402,"unattended":444,"contexts":1403},"The Developer enters a search term",[],[1404],{"routeId":232,"placeId":269},{"text":1406,"kind":596,"actorId":234,"capabilityId":273,"entities":1407,"unattended":444,"contexts":1412},"The Product finds the public snippets whose title, description or tags match the term",[1408,1410],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1409,"with":457},[282,284,285],{"entityId":234,"as":457,"effect":599,"from":457,"to":457,"facts":1411,"with":457},[277],[1413],{"routeId":232,"placeId":269},{"text":1415,"kind":607,"actorId":234,"capabilityId":273,"entities":1416,"unattended":444,"contexts":1419},"The Developer opens a snippet from what was found",[1417],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1418,"with":457},[285],[1420],{"routeId":232,"placeId":269},"A signed-in Developer is looking for code that does a particular thing.",[],"The Developer has opened a public snippet that matched what they searched for,\nwhere they can read and fork it.",[1425,1426],"Nothing matches the term → the Developer is told so, and the term stays available to change.","The term matches one of the Developer's own unlisted or private snippets → it is not found here; their own snippets are found from their list.",[],[],{"id":417,"capabilityId":409,"title":1430,"kindId":220,"actorIds":1431,"routes":1432,"steps":1434,"trigger":1455,"decisionPoints":1456,"outcome":1457,"edgeCases":1458,"intent":240,"supportingSections":1462,"references":1463},"Suggest details for the code",[234],[1433],{"id":232,"name":592},[1435,1440,1445,1450],{"text":1436,"kind":607,"actorId":234,"capabilityId":409,"entities":1437,"unattended":444,"contexts":1438},"The Developer asks for suggested details for the code in the editor",[],[1439],{"routeId":232,"placeId":405},{"text":1441,"kind":596,"actorId":234,"capabilityId":409,"entities":1442,"unattended":444,"contexts":1443},"The Product sends the code and its language to a language model, which drafts a title, a description and tags",[],[1444],{"routeId":232,"placeId":405},{"text":1446,"kind":596,"actorId":234,"capabilityId":409,"entities":1447,"unattended":444,"contexts":1448},"The Product fills the title, description and tags fields with the draft, where the Developer can still change them",[],[1449],{"routeId":232,"placeId":405},{"text":1451,"kind":655,"actorId":234,"capabilityId":409,"entities":1452,"unattended":444,"contexts":1453},"Nothing is kept until the Developer saves",[],[1454],{"routeId":232,"placeId":405},"The Developer has written code and wants help giving it a title, a description\nand tags.",[],"The editor's title, description and tags fields hold the drafted details, still\neditable, and the code, language and visibility are as the Developer left them.\nThe details are kept only when the Developer saves the snippet.",[1459,1460,1461],"The fields already held a title, description or tags → they are replaced, and the Developer can rewrite them before saving.","The Developer changes a drafted value before saving → the saved snippet keeps the Developer's wording.","The Developer leaves the editor without saving → nothing is kept, the drafted details included.",[],[],{"id":418,"capabilityId":409,"title":1465,"kindId":216,"actorIds":1466,"routes":1467,"steps":1469,"trigger":1489,"decisionPoints":1490,"outcome":1491,"edgeCases":1492,"intent":240,"supportingSections":1493,"references":1494},"Suggest snippet details while the language model is unavailable",[234],[1468],{"id":232,"name":592},[1470,1474,1479,1484],{"text":1436,"kind":607,"actorId":234,"capabilityId":409,"entities":1471,"unattended":444,"contexts":1472},[],[1473],{"routeId":232,"placeId":405},{"text":1475,"kind":655,"actorId":457,"capabilityId":409,"entities":1476,"unattended":444,"contexts":1477},"The language model cannot be reached or returns nothing usable",[],[1478],{"routeId":232,"placeId":405},{"text":1480,"kind":596,"actorId":234,"capabilityId":409,"entities":1481,"unattended":444,"contexts":1482},"The Product says suggested details are unavailable right now",[],[1483],{"routeId":232,"placeId":405},{"text":1485,"kind":655,"actorId":234,"capabilityId":409,"entities":1486,"unattended":444,"contexts":1487},"The fields are unchanged and the Developer can go on writing and save",[],[1488],{"routeId":232,"placeId":405},"The Developer asks for suggested details while the language model the Product\ncalls is unavailable.",[],"The Developer is told suggestions are unavailable, nothing in the editor\nchanged, and writing and saving work as they always do.",[],[],[],[1496],{"id":1497,"title":1498,"goal":1499,"successCriterion":1500,"actorIds":1501,"capabilityIds":1502,"failureOnlyCapabilityIds":1503,"domainIds":1504,"intent":240,"supportingSections":1505,"references":1506},"fork-and-adapt-a-snippet","Fork and adapt a snippet","A Developer wants their own changed version of a public snippet someone else\nwrote.","The Developer owns a fork that holds their change in its own history and names\nthe snippet it came from, and the original is unchanged.",[234],[373,374],[301],[427,433],[],[],[1508,1539],{"id":398,"journeyId":1497,"result":1509,"title":1510,"kindId":216,"actorIds":1511,"routes":1512,"steps":1514,"trigger":1533,"decisionPoints":1534,"outcome":1535,"edgeCases":1536,"intent":240,"supportingSections":1537,"references":1538},"not-achieved","Fork a snippet made private meanwhile",[234],[1513],{"id":232,"name":592},[1515,1522,1526],{"text":1516,"kind":607,"actorId":234,"capabilityId":301,"entities":1517,"unattended":444,"contexts":1520},"The Developer opens a public snippet another Developer owns",[1518],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1519,"with":457},[314,285],[1521],{"routeId":232,"placeId":369},{"text":1523,"kind":655,"actorId":457,"capabilityId":457,"entities":1524,"unattended":444,"contexts":1525},"Meanwhile its owner makes it private",[],[],{"text":1527,"kind":607,"actorId":234,"capabilityId":374,"entities":1528,"unattended":444,"contexts":1531},"The Developer chooses to fork the snippet and is told it can no longer be forked",[1529],{"entityId":280,"as":457,"effect":599,"from":457,"to":457,"facts":1530,"with":457},[],[1532],{"routeId":232,"placeId":369},"A Developer means to fork a public snippet whose owner makes it private first.",[],"The Journey goal is not achieved: no fork is made, and the Developer gains\nnothing of the snippet beyond what they already read while it was public.",[],[],[],{"id":399,"journeyId":1497,"result":1540,"title":1541,"kindId":220,"actorIds":1542,"routes":1543,"steps":1545,"trigger":1584,"decisionPoints":1585,"outcome":1586,"edgeCases":1587,"intent":240,"supportingSections":1588,"references":1589},"achieved","Fork and change a public snippet",[234],[1544],{"id":232,"name":592},[1546,1559,1565,1575],{"text":1547,"kind":607,"actorId":234,"capabilityId":374,"entities":1548,"unattended":444,"contexts":1557},"The Developer forks a public snippet another Developer owns",[1549,1551,1553],{"entityId":280,"as":854,"effect":599,"from":457,"to":457,"facts":1550,"with":457},[314,282,283,284,285],{"entityId":280,"as":871,"effect":692,"from":457,"to":493,"facts":1552,"with":457},[384,314,282,315,283,284,285],{"entityId":307,"as":1554,"effect":692,"from":457,"to":457,"facts":1555,"with":1556},"first",[314,283,309,310],{"entityId":280,"as":871},[1558],{"routeId":232,"placeId":369},{"text":879,"kind":596,"actorId":234,"capabilityId":374,"entities":1560,"unattended":444,"contexts":1563},[1561],{"entityId":280,"as":871,"effect":599,"from":457,"to":457,"facts":1562,"with":457},[314,282,283,284,285],[1564],{"routeId":232,"placeId":405},{"text":1566,"kind":607,"actorId":234,"capabilityId":373,"entities":1567,"unattended":444,"contexts":1573},"The Developer changes the code of the fork and saves",[1568,1570],{"entityId":280,"as":871,"effect":649,"from":457,"to":457,"facts":1569,"with":457},[314],{"entityId":307,"as":1571,"effect":692,"from":457,"to":457,"facts":1572,"with":457},"second",[314,283,309,310],[1574],{"routeId":232,"placeId":405},{"text":1576,"kind":596,"actorId":234,"capabilityId":373,"entities":1577,"unattended":444,"contexts":1582},"The Product returns to the fork with its new code, the original it was forked from, and a history of two revisions",[1578,1580],{"entityId":280,"as":871,"effect":599,"from":457,"to":457,"facts":1579,"with":457},[314,315],{"entityId":307,"as":1571,"effect":599,"from":457,"to":457,"facts":1581,"with":457},[309,310],[1583],{"routeId":232,"placeId":369},"A Developer reading a public snippet finds it nearly what they need.",[],"The Journey goal is achieved: forking carried the Developer into the editor of\ntheir private copy, which now holds their change as revision 2 and names the\noriginal. The original snippet and its owner are unaffected.",[],[],[],[1591,1604,1615,1631,1642,1660,1678,1695,1712],{"id":1592,"title":1593,"statement":1594,"rationale":1595,"appliesTo":1596,"permits":1601,"intent":240,"supportingSections":1602,"references":1603},"a-revision-is-never-rewritten","A revision is never rewritten","Once kept, a revision's code, language and saved time never change. A snippet\nchanges by gaining a new revision, and its revisions leave only when the\nsnippet itself is deleted.","History is only worth reading if it is what was really there. An owner who\nwants earlier code back saves it again, which keeps the path it took.",[1597],{"type":1598,"entityId":307,"effect":649,"from":457,"to":457,"facts":1599,"contexts":1600},"entity",[],[],[],[],[],{"id":1605,"title":1606,"statement":1607,"rationale":1608,"appliesTo":1609,"permits":457,"intent":240,"supportingSections":1613,"references":1614},"every-code-change-keeps-a-revision","Every code change keeps a revision","A snippet's code is kept as revision 1 when the snippet is created or forked,\nand every later save that changes its code or language keeps the next revision,\nso a snippet's code and language are always its latest revision's. A save that\nchanges only the title, description or tags, and any change of visibility,\nkeeps no revision.","The history is the code's history. Revisions for every change of wording would\nbury the changes readers came to compare.",[1610],{"type":1598,"entityId":280,"effect":457,"from":457,"to":457,"facts":1611,"contexts":1612},[314,283],[],[],[],{"id":1616,"title":1617,"statement":1618,"rationale":1619,"appliesTo":1620,"permits":1624,"intent":240,"supportingSections":1629,"references":1630},"only-a-developer-creates-a-snippet","Only a Developer creates a snippet","A snippet is created by a signed-in Developer, by writing it or by forking one,\nand belongs to that Developer from then on. A Visitor reads snippets and creates none.","Every snippet needs an owner who decides who reads it and who changes it, and\nonly a Developer has an account to own it.",[1621],{"type":1598,"entityId":280,"effect":692,"from":457,"to":457,"facts":1622,"contexts":1623},[],[],[1625],{"actorIds":1626,"related":1627,"self":444,"when":1628,"unattended":444,"configuredByEntityId":457},[234],[],[],[],[],{"id":1632,"title":1633,"statement":1634,"rationale":1635,"appliesTo":1636,"permits":457,"intent":240,"supportingSections":1640,"references":1641},"only-a-public-snippet-is-forked","Only a public snippet is forked","A snippet is forked only from one that is public and owned by someone else.\nAn unlisted snippet can be read by whoever holds its address, but not forked;\nonce its owner makes a public snippet unlisted or private, it can no longer be\nforked, and forks made before stay with their owners.","Making a snippet public is the owner's statement that it is open for reuse.\nSharing by link is not, so a link alone never lets someone take a copy away.",[1637],{"type":1598,"entityId":280,"effect":692,"from":457,"to":457,"facts":1638,"contexts":1639},[315],[],[],[],{"id":1643,"title":1644,"statement":1645,"rationale":1646,"appliesTo":1647,"permits":1652,"intent":240,"supportingSections":1658,"references":1659},"only-public-snippets-are-listed-in-discover","Only public snippets are listed in Discover","Discover and its search show public snippets and nothing else. An unlisted\nsnippet is never listed or found there, not even to its owner, and is reached\nonly through its address.","Unlisted means shared with whoever holds the link. Listing it anywhere would\nturn a link the owner passed to one person into one anyone can find.",[1648],{"type":1598,"entityId":280,"effect":599,"from":457,"to":457,"facts":1649,"contexts":1650},[],[1651],{"placeId":269},[1653],{"actorIds":1654,"related":1655,"self":444,"when":1656,"unattended":444,"configuredByEntityId":457},[234,235],[],[1657],{"entityId":457,"fact":457,"state":499,"operator":457,"value":457},[],[],{"id":1661,"title":1662,"statement":1663,"rationale":1664,"appliesTo":1665,"permits":1669,"intent":240,"supportingSections":1676,"references":1677},"only-the-owner-adds-a-revision","Only the owner adds a revision","A revision is added to a snippet only by its owner saving it. Forking makes a\nnew snippet whose first revision belongs to the Developer who forked it.","A snippet's history is the owner's record of their own code, so nobody else\nadds to it.",[1666],{"type":1598,"entityId":307,"effect":692,"from":457,"to":457,"facts":1667,"contexts":1668},[],[],[1670],{"actorIds":1671,"related":1672,"self":444,"when":1675,"unattended":444,"configuredByEntityId":457},[],[1673,1674],{"verb":490,"entityId":280},{"verb":450,"entityId":234},[],[],[],{"id":1679,"title":1680,"statement":1681,"rationale":1682,"appliesTo":1683,"permits":1687,"intent":240,"supportingSections":1693,"references":1694},"only-the-owner-changes-a-snippet","Only the owner changes a snippet","Only the Developer who owns a snippet changes its code, language, title,\ndescription, tags or visibility. Every other Developer may at most read it\nand, while it is public, fork it.","Sharing a snippet hands out the right to read it, never the right to change it.\nReuse goes through a fork, which belongs to the Developer who made it.",[1684],{"type":1598,"entityId":280,"effect":649,"from":457,"to":457,"facts":1685,"contexts":1686},[],[],[1688],{"actorIds":1689,"related":1690,"self":444,"when":1692,"unattended":444,"configuredByEntityId":457},[],[1691],{"verb":450,"entityId":234},[],[],[],{"id":1696,"title":1697,"statement":1698,"rationale":1699,"appliesTo":1700,"permits":1704,"intent":240,"supportingSections":1710,"references":1711},"only-the-owner-deletes-a-snippet","Only the owner deletes a snippet","Only the Developer who owns a snippet deletes it, and its revisions go with it.\nDeleting the original never deletes a fork another Developer made of it.","A fork is its own Developer's snippet from the moment it is made; the original's\nowner decides only about the original.",[1701],{"type":1598,"entityId":280,"effect":780,"from":457,"to":457,"facts":1702,"contexts":1703},[],[],[1705],{"actorIds":1706,"related":1707,"self":444,"when":1709,"unattended":444,"configuredByEntityId":457},[],[1708],{"verb":450,"entityId":234},[],[],[],{"id":1713,"title":1714,"statement":1715,"rationale":1716,"appliesTo":1717,"permits":1721,"intent":240,"supportingSections":1737,"references":1738},"only-the-owner-reads-a-private-snippet","Only the owner reads a private snippet","A snippet is read by its owner always, and by anyone else only while it is\nunlisted or public. To anyone else, a private snippet's address shows the same\nthing as an address with no snippet at all.","Snippets start private and many stay that way, so the address of a private\nsnippet must reveal nothing, not even that it exists.",[1718],{"type":1598,"entityId":280,"effect":599,"from":457,"to":457,"facts":1719,"contexts":1720},[],[],[1722,1727,1732],{"actorIds":1723,"related":1724,"self":444,"when":1726,"unattended":444,"configuredByEntityId":457},[],[1725],{"verb":450,"entityId":234},[],{"actorIds":1728,"related":1729,"self":444,"when":1730,"unattended":444,"configuredByEntityId":457},[234,235],[],[1731],{"entityId":457,"fact":457,"state":496,"operator":457,"value":457},{"actorIds":1733,"related":1734,"self":444,"when":1735,"unattended":444,"configuredByEntityId":457},[234,235],[],[1736],{"entityId":457,"fact":457,"state":499,"operator":457,"value":457},[],[],[],{"scope":240,"method":240,"covered":1741,"exclusions":1742,"unmapped":1743,"limitations":1744},[],[],[],[],{"path":1746,"commit":1747},"blueprints\u002Fcode-snippet-sharing","f474777f17005554bb7fd1f1e18189bfd01792bc",1791840534112]