[{"id":"8506005167","type":"PullRequestReviewEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":869538944,"name":"hylo-lang/hylo-new","url":"https://api.github.com/repos/hylo-lang/hylo-new"},"payload":{"review":{"id":4124921008,"node_id":"PRR_kwDOM9QcgM713Uyw","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"body":null,"commit_id":"140ffb3b645cc72d5b40d4f300845e3019298bf9","state":"commented","html_url":"https://github.com/hylo-lang/hylo-new/pull/102#pullrequestreview-4124921008","pull_request_url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","_links":{"html":{"href":"https://github.com/hylo-lang/hylo-new/pull/102#pullrequestreview-4124921008"},"pull_request":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102"}},"submitted_at":"2026-04-16T22:55:05Z","updated_at":"2026-04-16T22:55:05Z"},"pull_request":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","id":3541692968,"number":102,"head":{"ref":"conventions","sha":"6ddeabc5122978f25bafad1683a4622b1b7647f4","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}},"base":{"ref":"main","sha":"8c9b82858acf470dde02242fad846d51049bc3a2","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}}},"action":"created"},"public":true,"created_at":"2026-04-16T22:55:06Z","org":{"id":77444627,"login":"hylo-lang","gravatar_id":"","url":"https://api.github.com/orgs/hylo-lang","avatar_url":"https://avatars.githubusercontent.com/u/77444627?"}},{"id":"8506004784","type":"PullRequestReviewCommentEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":869538944,"name":"hylo-lang/hylo-new","url":"https://api.github.com/repos/hylo-lang/hylo-new"},"payload":{"action":"created","comment":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096844920","pull_request_review_id":4124921008,"id":3096844920,"node_id":"PRRC_kwDOM9QcgM64lhp4","diff_hunk":"@@ -0,0 +1,98 @@\n+# Coding Guidelines\n+\n+## Documentation\n+\n+Documentation enables local reasoning - it's a shortcut for understanding so readers can avoid looking up implementation or usages to infer meaning.\n+\n+- Document every declaration with at least a summary sentence, using `///` style comments.\n+- Start with a summary sentence fragment describing what it *does* (functions) or what it *is* (types, properties). End with a period.\n+- Omit needless words: don't repeat the receiver's type, don't write `the`, `given`, `of self`, `of the current object` when context makes these obvious.\n+- Use `iff` instead of `if` where applicable.\n+- Use `<...>, if any.` for optional values where the absence reason is obvious. Otherwise: `<...> if <condition>, nil otherwise.`\n+- Document preconditions with `- Requires:`. If the precondition is obvious from the summary, it need not be repeated.\n+- Multiple preconditions should be in a markdown list below `- Requires:`.\n+- Document performance of every operation that doesn't run in constant time and space.\n+- Conformance implementations are exempt from documentation when nothing useful can be added beyond the protocol requirement itself.\n+\n+## Contracts\n+\n+- Create the strictest contracts possible, so long as the client can reason about the preconditions locally.","path":"CONVENTIONS.md","commit_id":"6ddeabc5122978f25bafad1683a4622b1b7647f4","original_commit_id":"140ffb3b645cc72d5b40d4f300845e3019298bf9","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"body":"I don't understand what the part after the comma means.","created_at":"2026-04-16T22:55:05Z","updated_at":"2026-04-16T22:55:05Z","html_url":"https://github.com/hylo-lang/hylo-new/pull/102#discussion_r3096844920","pull_request_url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","_links":{"self":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096844920"},"html":{"href":"https://github.com/hylo-lang/hylo-new/pull/102#discussion_r3096844920"},"pull_request":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102"}},"reactions":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096844920/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"original_position":19,"position":39,"subject_type":"line"},"pull_request":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","id":3541692968,"number":102,"head":{"ref":"conventions","sha":"6ddeabc5122978f25bafad1683a4622b1b7647f4","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}},"base":{"ref":"main","sha":"8c9b82858acf470dde02242fad846d51049bc3a2","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}}}},"public":true,"created_at":"2026-04-16T22:55:05Z","org":{"id":77444627,"login":"hylo-lang","gravatar_id":"","url":"https://api.github.com/orgs/hylo-lang","avatar_url":"https://avatars.githubusercontent.com/u/77444627?"}},{"id":"8505993590","type":"PullRequestReviewEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":869538944,"name":"hylo-lang/hylo-new","url":"https://api.github.com/repos/hylo-lang/hylo-new"},"payload":{"review":{"id":4124919260,"node_id":"PRR_kwDOM9QcgM713UXc","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"body":null,"commit_id":"140ffb3b645cc72d5b40d4f300845e3019298bf9","state":"commented","html_url":"https://github.com/hylo-lang/hylo-new/pull/102#pullrequestreview-4124919260","pull_request_url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","_links":{"html":{"href":"https://github.com/hylo-lang/hylo-new/pull/102#pullrequestreview-4124919260"},"pull_request":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102"}},"submitted_at":"2026-04-16T22:54:31Z","updated_at":"2026-04-16T22:54:31Z"},"pull_request":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","id":3541692968,"number":102,"head":{"ref":"conventions","sha":"6ddeabc5122978f25bafad1683a4622b1b7647f4","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}},"base":{"ref":"main","sha":"8c9b82858acf470dde02242fad846d51049bc3a2","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}}},"action":"created"},"public":true,"created_at":"2026-04-16T22:54:33Z","org":{"id":77444627,"login":"hylo-lang","gravatar_id":"","url":"https://api.github.com/orgs/hylo-lang","avatar_url":"https://avatars.githubusercontent.com/u/77444627?"}},{"id":"8505992825","type":"PullRequestReviewCommentEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":869538944,"name":"hylo-lang/hylo-new","url":"https://api.github.com/repos/hylo-lang/hylo-new"},"payload":{"action":"created","comment":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096843300","pull_request_review_id":4124919260,"id":3096843300,"node_id":"PRRC_kwDOM9QcgM64lhQk","diff_hunk":"@@ -0,0 +1,98 @@\n+# Coding Guidelines\n+\n+## Documentation\n+\n+Documentation enables local reasoning - it's a shortcut for understanding so readers can avoid looking up implementation or usages to infer meaning.\n+\n+- Document every declaration with at least a summary sentence, using `///` style comments.\n+- Start with a summary sentence fragment describing what it *does* (functions) or what it *is* (types, properties). End with a period.\n+- Omit needless words: don't repeat the receiver's type, don't write `the`, `given`, `of self`, `of the current object` when context makes these obvious.\n+- Use `iff` instead of `if` where applicable.\n+- Use `<...>, if any.` for optional values where the absence reason is obvious. Otherwise: `<...> if <condition>, nil otherwise.`\n+- Document preconditions with `- Requires:`. If the precondition is obvious from the summary, it need not be repeated.\n+- Multiple preconditions should be in a markdown list below `- Requires:`.\n+- Document performance of every operation that doesn't run in constant time and space.","path":"CONVENTIONS.md","commit_id":"140ffb3b645cc72d5b40d4f300845e3019298bf9","original_commit_id":"140ffb3b645cc72d5b40d4f300845e3019298bf9","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"body":"I think we're probably going to be a little loose about that.  An operation that “increments every element of the array” is somewhat obviously O(N).  But I'm happy to start with this rule and see what can't reasonably be done that way.","created_at":"2026-04-16T22:54:31Z","updated_at":"2026-04-16T22:54:31Z","html_url":"https://github.com/hylo-lang/hylo-new/pull/102#discussion_r3096843300","pull_request_url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","_links":{"self":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096843300"},"html":{"href":"https://github.com/hylo-lang/hylo-new/pull/102#discussion_r3096843300"},"pull_request":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102"}},"reactions":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096843300/reactions","total_count":1,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"original_position":14,"position":1,"subject_type":"line"},"pull_request":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","id":3541692968,"number":102,"head":{"ref":"conventions","sha":"6ddeabc5122978f25bafad1683a4622b1b7647f4","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}},"base":{"ref":"main","sha":"8c9b82858acf470dde02242fad846d51049bc3a2","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}}}},"public":true,"created_at":"2026-04-16T22:54:31Z","org":{"id":77444627,"login":"hylo-lang","gravatar_id":"","url":"https://api.github.com/orgs/hylo-lang","avatar_url":"https://avatars.githubusercontent.com/u/77444627?"}},{"id":"8505922421","type":"PullRequestReviewEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":869538944,"name":"hylo-lang/hylo-new","url":"https://api.github.com/repos/hylo-lang/hylo-new"},"payload":{"review":{"id":4124908940,"node_id":"PRR_kwDOM9QcgM713R2M","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"body":null,"commit_id":"140ffb3b645cc72d5b40d4f300845e3019298bf9","state":"commented","html_url":"https://github.com/hylo-lang/hylo-new/pull/102#pullrequestreview-4124908940","pull_request_url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","_links":{"html":{"href":"https://github.com/hylo-lang/hylo-new/pull/102#pullrequestreview-4124908940"},"pull_request":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102"}},"submitted_at":"2026-04-16T22:51:22Z","updated_at":"2026-04-16T22:51:22Z"},"pull_request":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","id":3541692968,"number":102,"head":{"ref":"conventions","sha":"6ddeabc5122978f25bafad1683a4622b1b7647f4","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}},"base":{"ref":"main","sha":"8c9b82858acf470dde02242fad846d51049bc3a2","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}}},"action":"created"},"public":true,"created_at":"2026-04-16T22:51:23Z","org":{"id":77444627,"login":"hylo-lang","gravatar_id":"","url":"https://api.github.com/orgs/hylo-lang","avatar_url":"https://avatars.githubusercontent.com/u/77444627?"}},{"id":"8505922167","type":"PullRequestReviewCommentEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":869538944,"name":"hylo-lang/hylo-new","url":"https://api.github.com/repos/hylo-lang/hylo-new"},"payload":{"action":"created","comment":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096832822","pull_request_review_id":4124908940,"id":3096832822,"node_id":"PRRC_kwDOM9QcgM64les2","diff_hunk":"@@ -3,4 +3,21 @@ Release drafts are created whenever pushing to a tag in the repository. You can\n publish a release when editing the draft.\n \n The conventional tag name for releases is `vX.Y.Z`, with an optional suffix for pre-releases (like `v0.0.2-test-lsp`).\n-The release workflow only triggers for a pattern matching `v*`.\n\\ No newline at end of file\n+The release workflow only triggers for a pattern matching `v*`.\n+\n+## Coding Conventions\n+Consult [CONVENTIONS.md](CONVENTIONS.md) for coding conventions used in this project.\n+\n+## LLM usage\n+If you use an LLM to generate code, please disclose this in your Pull Request description.","path":"CONTRIBUTING.md","commit_id":"6ddeabc5122978f25bafad1683a4622b1b7647f4","original_commit_id":"140ffb3b645cc72d5b40d4f300845e3019298bf9","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"body":"IIUC Dimi is absolutely opposed to having any such code in the project, and I feel almost as strongly about it.  This guidance is not consistent with that.","created_at":"2026-04-16T22:51:22Z","updated_at":"2026-04-16T22:51:22Z","html_url":"https://github.com/hylo-lang/hylo-new/pull/102#discussion_r3096832822","pull_request_url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","_links":{"self":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096832822"},"html":{"href":"https://github.com/hylo-lang/hylo-new/pull/102#discussion_r3096832822"},"pull_request":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102"}},"reactions":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096832822/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"original_position":12,"position":12,"subject_type":"line"},"pull_request":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","id":3541692968,"number":102,"head":{"ref":"conventions","sha":"6ddeabc5122978f25bafad1683a4622b1b7647f4","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}},"base":{"ref":"main","sha":"8c9b82858acf470dde02242fad846d51049bc3a2","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}}}},"public":true,"created_at":"2026-04-16T22:51:22Z","org":{"id":77444627,"login":"hylo-lang","gravatar_id":"","url":"https://api.github.com/orgs/hylo-lang","avatar_url":"https://avatars.githubusercontent.com/u/77444627?"}},{"id":"8505898796","type":"PullRequestReviewEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":869538944,"name":"hylo-lang/hylo-new","url":"https://api.github.com/repos/hylo-lang/hylo-new"},"payload":{"review":{"id":4124904420,"node_id":"PRR_kwDOM9QcgM713Qvk","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"body":null,"commit_id":"140ffb3b645cc72d5b40d4f300845e3019298bf9","state":"commented","html_url":"https://github.com/hylo-lang/hylo-new/pull/102#pullrequestreview-4124904420","pull_request_url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","_links":{"html":{"href":"https://github.com/hylo-lang/hylo-new/pull/102#pullrequestreview-4124904420"},"pull_request":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102"}},"submitted_at":"2026-04-16T22:50:18Z","updated_at":"2026-04-16T22:50:18Z"},"pull_request":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","id":3541692968,"number":102,"head":{"ref":"conventions","sha":"6ddeabc5122978f25bafad1683a4622b1b7647f4","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}},"base":{"ref":"main","sha":"8c9b82858acf470dde02242fad846d51049bc3a2","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}}},"action":"created"},"public":true,"created_at":"2026-04-16T22:50:20Z","org":{"id":77444627,"login":"hylo-lang","gravatar_id":"","url":"https://api.github.com/orgs/hylo-lang","avatar_url":"https://avatars.githubusercontent.com/u/77444627?"}},{"id":"8505898063","type":"PullRequestReviewCommentEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":869538944,"name":"hylo-lang/hylo-new","url":"https://api.github.com/repos/hylo-lang/hylo-new"},"payload":{"action":"created","comment":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096829121","pull_request_review_id":4124904420,"id":3096829121,"node_id":"PRRC_kwDOM9QcgM64ldzB","diff_hunk":"@@ -0,0 +1,98 @@\n+# Coding Guidelines","path":"CONVENTIONS.md","commit_id":"6ddeabc5122978f25bafad1683a4622b1b7647f4","original_commit_id":"140ffb3b645cc72d5b40d4f300845e3019298bf9","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"body":"This should start with the Swift API Guidelines as a basis, noting that we're documenting departures from those guidelines.","created_at":"2026-04-16T22:50:18Z","updated_at":"2026-04-16T22:50:18Z","html_url":"https://github.com/hylo-lang/hylo-new/pull/102#discussion_r3096829121","pull_request_url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","_links":{"self":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096829121"},"html":{"href":"https://github.com/hylo-lang/hylo-new/pull/102#discussion_r3096829121"},"pull_request":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102"}},"reactions":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096829121/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"original_position":1,"position":1,"subject_type":"line"},"pull_request":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","id":3541692968,"number":102,"head":{"ref":"conventions","sha":"6ddeabc5122978f25bafad1683a4622b1b7647f4","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}},"base":{"ref":"main","sha":"8c9b82858acf470dde02242fad846d51049bc3a2","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}}}},"public":true,"created_at":"2026-04-16T22:50:18Z","org":{"id":77444627,"login":"hylo-lang","gravatar_id":"","url":"https://api.github.com/orgs/hylo-lang","avatar_url":"https://avatars.githubusercontent.com/u/77444627?"}},{"id":"8505881903","type":"PullRequestReviewEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":869538944,"name":"hylo-lang/hylo-new","url":"https://api.github.com/repos/hylo-lang/hylo-new"},"payload":{"review":{"id":4124901816,"node_id":"PRR_kwDOM9QcgM713QG4","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"body":null,"commit_id":"140ffb3b645cc72d5b40d4f300845e3019298bf9","state":"commented","html_url":"https://github.com/hylo-lang/hylo-new/pull/102#pullrequestreview-4124901816","pull_request_url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","_links":{"html":{"href":"https://github.com/hylo-lang/hylo-new/pull/102#pullrequestreview-4124901816"},"pull_request":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102"}},"submitted_at":"2026-04-16T22:49:33Z","updated_at":"2026-04-16T22:49:33Z"},"pull_request":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","id":3541692968,"number":102,"head":{"ref":"conventions","sha":"6ddeabc5122978f25bafad1683a4622b1b7647f4","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}},"base":{"ref":"main","sha":"8c9b82858acf470dde02242fad846d51049bc3a2","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}}},"action":"created"},"public":true,"created_at":"2026-04-16T22:49:35Z","org":{"id":77444627,"login":"hylo-lang","gravatar_id":"","url":"https://api.github.com/orgs/hylo-lang","avatar_url":"https://avatars.githubusercontent.com/u/77444627?"}},{"id":"8505881156","type":"PullRequestReviewCommentEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":869538944,"name":"hylo-lang/hylo-new","url":"https://api.github.com/repos/hylo-lang/hylo-new"},"payload":{"action":"created","comment":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096826526","pull_request_review_id":4124901816,"id":3096826526,"node_id":"PRRC_kwDOM9QcgM64ldKe","diff_hunk":"@@ -0,0 +1,98 @@\n+# Coding Guidelines\n+\n+## Documentation\n+\n+Documentation enables local reasoning - it's a shortcut for understanding so readers can avoid looking up implementation or usages to infer meaning.","path":"CONVENTIONS.md","commit_id":"140ffb3b645cc72d5b40d4f300845e3019298bf9","original_commit_id":"140ffb3b645cc72d5b40d4f300845e3019298bf9","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"body":"This should start with the documentation guidance given in the better code contracts and errors chapters, and only add stuff that departs from the book.","created_at":"2026-04-16T22:49:33Z","updated_at":"2026-04-16T22:49:33Z","html_url":"https://github.com/hylo-lang/hylo-new/pull/102#discussion_r3096826526","pull_request_url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","_links":{"self":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096826526"},"html":{"href":"https://github.com/hylo-lang/hylo-new/pull/102#discussion_r3096826526"},"pull_request":{"href":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102"}},"reactions":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/comments/3096826526/reactions","total_count":1,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"original_position":5,"position":1,"subject_type":"line"},"pull_request":{"url":"https://api.github.com/repos/hylo-lang/hylo-new/pulls/102","id":3541692968,"number":102,"head":{"ref":"conventions","sha":"6ddeabc5122978f25bafad1683a4622b1b7647f4","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}},"base":{"ref":"main","sha":"8c9b82858acf470dde02242fad846d51049bc3a2","repo":{"id":869538944,"url":"https://api.github.com/repos/hylo-lang/hylo-new","name":"hylo-new"}}}},"public":true,"created_at":"2026-04-16T22:49:33Z","org":{"id":77444627,"login":"hylo-lang","gravatar_id":"","url":"https://api.github.com/orgs/hylo-lang","avatar_url":"https://avatars.githubusercontent.com/u/77444627?"}},{"id":"8445104922","type":"PullRequestEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":332354429,"name":"hylo-lang/hylo","url":"https://api.github.com/repos/hylo-lang/hylo"},"payload":{"action":"closed","number":1727,"pull_request":{"url":"https://api.github.com/repos/hylo-lang/hylo/pulls/1727","id":2804072853,"number":1727,"head":{"ref":"tupletype-naming","sha":"2cf917d76da1ac72fb0873f27c378c13b63dcb30","repo":{"id":332354429,"url":"https://api.github.com/repos/hylo-lang/hylo","name":"hylo"}},"base":{"ref":"main","sha":"ec1fd5a255946b128cfd26dc50ca5c5fc9adda3d","repo":{"id":332354429,"url":"https://api.github.com/repos/hylo-lang/hylo","name":"hylo"}}}},"public":true,"created_at":"2026-04-15T10:50:22Z","org":{"id":77444627,"login":"hylo-lang","gravatar_id":"","url":"https://api.github.com/orgs/hylo-lang","avatar_url":"https://avatars.githubusercontent.com/u/77444627?"}},{"id":"8339573276","type":"IssuesEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":399925664,"name":"stlab/better-code","url":"https://api.github.com/repos/stlab/better-code"},"payload":{"action":"opened","issue":{"url":"https://api.github.com/repos/stlab/better-code/issues/52","repository_url":"https://api.github.com/repos/stlab/better-code","labels_url":"https://api.github.com/repos/stlab/better-code/issues/52/labels{/name}","comments_url":"https://api.github.com/repos/stlab/better-code/issues/52/comments","events_url":"https://api.github.com/repos/stlab/better-code/issues/52/events","html_url":"https://github.com/stlab/better-code/issues/52","id":4251024880,"node_id":"I_kwDOF9ZhoM79YX3w","number":52,"title":"This paragraph makes no sense to me.","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":0,"created_at":"2026-04-13T03:18:35Z","updated_at":"2026-04-13T03:38:28Z","closed_at":null,"assignee":null,"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"[this paragraph](https://github.com/stlab/better-code/blame/3d6d16bc10d78a0d5c1e4ec3a895f658afab4f06/better-code/src/Appendix%20-%20Safety.md#L66)\n\n>  safety properties become compositional only when the functions involved are themselves safety‑preserving. \n\nWe're talking about the safety of operations, i.e. “the functions involved.”  The composition property *described in the text* posits safety-preserving operations.\n\n> In other words, from the fact that a safety property p holds for f(x) and for g(x), nothing follows about p(f(g(x))) unless f and g each preserve p.\n\nSurely these two statements are equivalent for a safety property p:\n- for any x, p holds for f(x) \n- f preserves p\n\nI added “for any x” but that is implicit in all of the text in the definitions, if you read them.  If your quibble depends on the distinction between “for any x” and some specific x, then I think you're confused either about what's written in the document, or some of the fancy language in those papers you cite.\n\nIf you drop “for any x,” we must interpret your premise “a safety property p holds for f(x) and for g(x)” as applying to some specific x.  In that case, f(g(x)) may not even make any sense (because of type—or if you are positing some kind of untyped calculus, precondition—violations). But if it did make sense, its upholding of p would *obviously* not follow because it's likely that g(x) ≠ x and we only have an assertion about the safety of f(x).  But then the functional composition operation g•f is not what we're talking about here!  The operations are composed by sequencing, and I  claim the composition f(x); g(x) *does* uphold p.  If I  am wrong, a single counterexample would suffice to show it.\n","reactions":{"url":"https://api.github.com/repos/stlab/better-code/issues/52/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/stlab/better-code/issues/52/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null}},"public":true,"created_at":"2026-04-13T03:18:36Z","org":{"id":2448845,"login":"stlab","gravatar_id":"","url":"https://api.github.com/orgs/stlab","avatar_url":"https://avatars.githubusercontent.com/u/2448845?"}},{"id":"8339175314","type":"PullRequestEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":399925664,"name":"stlab/better-code","url":"https://api.github.com/repos/stlab/better-code"},"payload":{"action":"opened","number":51,"pull_request":{"url":"https://api.github.com/repos/stlab/better-code/pulls/51","id":3520742567,"number":51,"head":{"ref":"patch-1","sha":"64b49b55468b08480ac434112199e817cc63e638","repo":{"id":1209025247,"url":"https://api.github.com/repos/dabrahams/better-code","name":"better-code"}},"base":{"ref":"main","sha":"3d6d16bc10d78a0d5c1e4ec3a895f658afab4f06","repo":{"id":399925664,"url":"https://api.github.com/repos/stlab/better-code","name":"better-code"}}}},"public":true,"created_at":"2026-04-13T02:54:53Z","org":{"id":2448845,"login":"stlab","gravatar_id":"","url":"https://api.github.com/orgs/stlab","avatar_url":"https://avatars.githubusercontent.com/u/2448845?"}},{"id":"10499397548","type":"PushEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":1209025247,"name":"dabrahams/better-code","url":"https://api.github.com/repos/dabrahams/better-code"},"payload":{"repository_id":1209025247,"push_id":32791687462,"ref":"refs/heads/patch-1","head":"64b49b55468b08480ac434112199e817cc63e638","before":"3d6d16bc10d78a0d5c1e4ec3a895f658afab4f06"},"public":true,"created_at":"2026-04-13T02:54:29Z"},{"id":"8339067525","type":"ForkEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":399925664,"name":"stlab/better-code","url":"https://api.github.com/repos/stlab/better-code"},"payload":{"action":"forked","forkee":{"id":1209025247,"node_id":"R_kgDOSBBC3w","name":"better-code","full_name":"dabrahams/better-code","private":false,"owner":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"html_url":"https://github.com/dabrahams/better-code","description":"Better Code (redux) course and book materials","fork":true,"url":"https://api.github.com/repos/dabrahams/better-code","forks_url":"https://api.github.com/repos/dabrahams/better-code/forks","keys_url":"https://api.github.com/repos/dabrahams/better-code/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dabrahams/better-code/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dabrahams/better-code/teams","hooks_url":"https://api.github.com/repos/dabrahams/better-code/hooks","issue_events_url":"https://api.github.com/repos/dabrahams/better-code/issues/events{/number}","events_url":"https://api.github.com/repos/dabrahams/better-code/events","assignees_url":"https://api.github.com/repos/dabrahams/better-code/assignees{/user}","branches_url":"https://api.github.com/repos/dabrahams/better-code/branches{/branch}","tags_url":"https://api.github.com/repos/dabrahams/better-code/tags","blobs_url":"https://api.github.com/repos/dabrahams/better-code/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dabrahams/better-code/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dabrahams/better-code/git/refs{/sha}","trees_url":"https://api.github.com/repos/dabrahams/better-code/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dabrahams/better-code/statuses/{sha}","languages_url":"https://api.github.com/repos/dabrahams/better-code/languages","stargazers_url":"https://api.github.com/repos/dabrahams/better-code/stargazers","contributors_url":"https://api.github.com/repos/dabrahams/better-code/contributors","subscribers_url":"https://api.github.com/repos/dabrahams/better-code/subscribers","subscription_url":"https://api.github.com/repos/dabrahams/better-code/subscription","commits_url":"https://api.github.com/repos/dabrahams/better-code/commits{/sha}","git_commits_url":"https://api.github.com/repos/dabrahams/better-code/git/commits{/sha}","comments_url":"https://api.github.com/repos/dabrahams/better-code/comments{/number}","issue_comment_url":"https://api.github.com/repos/dabrahams/better-code/issues/comments{/number}","contents_url":"https://api.github.com/repos/dabrahams/better-code/contents/{+path}","compare_url":"https://api.github.com/repos/dabrahams/better-code/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dabrahams/better-code/merges","archive_url":"https://api.github.com/repos/dabrahams/better-code/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dabrahams/better-code/downloads","issues_url":"https://api.github.com/repos/dabrahams/better-code/issues{/number}","pulls_url":"https://api.github.com/repos/dabrahams/better-code/pulls{/number}","milestones_url":"https://api.github.com/repos/dabrahams/better-code/milestones{/number}","notifications_url":"https://api.github.com/repos/dabrahams/better-code/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dabrahams/better-code/labels{/name}","releases_url":"https://api.github.com/repos/dabrahams/better-code/releases{/id}","deployments_url":"https://api.github.com/repos/dabrahams/better-code/deployments","created_at":"2026-04-13T02:48:01Z","updated_at":"2026-04-13T02:48:01Z","pushed_at":"2026-04-13T02:54:25Z","git_url":"git://github.com/dabrahams/better-code.git","ssh_url":"git@github.com:dabrahams/better-code.git","clone_url":"https://github.com/dabrahams/better-code.git","svn_url":"https://github.com/dabrahams/better-code","homepage":null,"size":64658,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"has_pull_requests":true,"pull_request_creation_policy":"all","topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main"}},"public":true,"created_at":"2026-04-13T02:48:01Z","org":{"id":2448845,"login":"stlab","gravatar_id":"","url":"https://api.github.com/orgs/stlab","avatar_url":"https://avatars.githubusercontent.com/u/2448845?"}},{"id":"8303141686","type":"DiscussionEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":332354429,"name":"hylo-lang/hylo","url":"https://api.github.com/repos/hylo-lang/hylo"},"payload":{"action":"created","discussion":{"repository_url":"https://api.github.com/repos/hylo-lang/hylo","category":{"id":39782928,"node_id":"DIC_kwDOE89Tfc4CXwoQ","repository_id":332354429,"emoji":":art:","name":"Language design","description":"Share ideas for new features","created_at":"2023-07-08T16:57:53.000Z","updated_at":"2023-10-11T13:43:02.000Z","slug":"language-design","is_answerable":false},"answer_html_url":null,"answer_chosen_at":null,"answer_chosen_by":null,"html_url":"https://github.com/orgs/hylo-lang/discussions/1868","id":9861387,"node_id":"D_kwDOE89Tfc4AlnkL","number":1868,"title":"Projections and Undefined Behavior","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","state_reason":null,"locked":false,"comments":16,"created_at":"2026-04-10T22:51:12Z","updated_at":"2026-04-18T15:31:52Z","active_lock_reason":null,"body":"## Definitions\r\n\r\n- A **projection** is a `sink`, `set`, `inout` or `let` access. [^temporary] [^var]\r\n- A **projection of type `T`** is an access to an object of type `T`.\r\n- Projections are **active** when they are created.\r\n- A projection can become **inactive** during its lifetime.  For example, in `x: inout T = &y`, `y` becomes inactive, and if still alive, becomes active again when the lifetime of `x` ends.\r\n- An object is **initialized** at the first completion of a `set` access on it (an `init` function is a `set` access on `self`). \r\n- An object is **complete** when all parts[^parts] are initialized. \r\n- An initialized or complete object becomes **incomplete** (and **uninitialized** [^init-complete]) when any part is passed as a `sink` parameter, and returns to its prior state whenever all of its parts have returned to an initialized state.\r\n\r\n[^temporary]: Projections can be bound to names but may also be the temporary unnamed results of expressions.\r\n[^var]:  A `var` declaration creates a bound `sink` projection.\r\n[^parts]: An object's parts all follow from its type declaration and do not depend on the  user-defined semantics of operations.  For example, they do not include “logical parts” that can only be reached via declared pointers, such as the elements of a dynamic array, even though its `==` operation implies that they are parts. \r\n[^init-complete]: Every initialized object is complete, so every incomplete object is uninitialized.\r\n\r\n## Laws\r\n\r\nIn entirely safe code, the compiler upholds these properties:\r\n- An active non-`set` projection of type `T` always refers to a complete object of type `T`.\r\n- if *x* is an active `sink`, `set`, or `inout` projection of an object *y*, no other projection that includes *y* is active.\r\n\r\n**Note:** the compiler also ensures that only active projections of complete objects are used in expressions other than those that narrow active projections of incomplete objects to their stored parts, e.g. in `x.y`, `x` may project an incomplete object.\r\n\r\nThe behavior of a program that violates either property (e.g., using pointers) is undefined.  For example:\r\n\r\n```swift\r\nlet i = 3\r\nlet p = pointer[to: i] // i becomes inactive\r\nlet q = p.copy()       // projection of p ends; i becomes active\r\nlet j = q.unsafe[]     // UB: active projection `j` includes the object bound to active `sink` projection `i`\r\n```\r\n","reactions":{"url":"https://api.github.com/repos/hylo-lang/hylo/discussions/1868/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/hylo-lang/hylo/discussions/1868/timeline"}},"public":true,"created_at":"2026-04-10T22:51:12Z","org":{"id":77444627,"login":"hylo-lang","gravatar_id":"","url":"https://api.github.com/orgs/hylo-lang","avatar_url":"https://avatars.githubusercontent.com/u/77444627?"}},{"id":"7605027208","type":"IssueCommentEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":782711694,"name":"automerge/automerge-repo-swift","url":"https://api.github.com/repos/automerge/automerge-repo-swift"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124","repository_url":"https://api.github.com/repos/automerge/automerge-repo-swift","labels_url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124/labels{/name}","comments_url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124/comments","events_url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124/events","html_url":"https://github.com/automerge/automerge-repo-swift/issues/124","id":4105011349,"node_id":"I_kwDOLqc7js70rYCV","number":124,"title":"Seems to be falling behind the typescript version","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":2,"created_at":"2026-03-20T00:43:36Z","updated_at":"2026-03-20T17:26:34Z","closed_at":null,"assignee":null,"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"The last commit here was 2 years ago, while the TS version had a new release 2 days ago.  Is this being maintained?","reactions":{"url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},"comment":{"url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/comments/4099749281","html_url":"https://github.com/automerge/automerge-repo-swift/issues/124#issuecomment-4099749281","issue_url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124","id":4099749281,"node_id":"IC_kwDOLqc7js70XTWh","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"created_at":"2026-03-20T17:26:03Z","updated_at":"2026-03-20T17:26:34Z","body":"When I was referring to the TS version, I meant the TS version of automerge-repo, not just automerge. I hope that explains my concern.","pin":null,"reactions":{"url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/comments/4099749281/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2026-03-20T17:26:03Z","org":{"id":29780209,"login":"automerge","gravatar_id":"","url":"https://api.github.com/orgs/automerge","avatar_url":"https://avatars.githubusercontent.com/u/29780209?"}},{"id":"7580587441","type":"IssuesEvent","actor":{"id":44065,"login":"dabrahams","display_login":"dabrahams","gravatar_id":"","url":"https://api.github.com/users/dabrahams","avatar_url":"https://avatars.githubusercontent.com/u/44065?"},"repo":{"id":782711694,"name":"automerge/automerge-repo-swift","url":"https://api.github.com/repos/automerge/automerge-repo-swift"},"payload":{"action":"opened","issue":{"url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124","repository_url":"https://api.github.com/repos/automerge/automerge-repo-swift","labels_url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124/labels{/name}","comments_url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124/comments","events_url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124/events","html_url":"https://github.com/automerge/automerge-repo-swift/issues/124","id":4105011349,"node_id":"I_kwDOLqc7js70rYCV","number":124,"title":"Seems to be falling behind the typescript version","user":{"login":"dabrahams","id":44065,"node_id":"MDQ6VXNlcjQ0MDY1","avatar_url":"https://avatars.githubusercontent.com/u/44065?v=4","gravatar_id":"","url":"https://api.github.com/users/dabrahams","html_url":"https://github.com/dabrahams","followers_url":"https://api.github.com/users/dabrahams/followers","following_url":"https://api.github.com/users/dabrahams/following{/other_user}","gists_url":"https://api.github.com/users/dabrahams/gists{/gist_id}","starred_url":"https://api.github.com/users/dabrahams/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dabrahams/subscriptions","organizations_url":"https://api.github.com/users/dabrahams/orgs","repos_url":"https://api.github.com/users/dabrahams/repos","events_url":"https://api.github.com/users/dabrahams/events{/privacy}","received_events_url":"https://api.github.com/users/dabrahams/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":2,"created_at":"2026-03-20T00:43:36Z","updated_at":"2026-03-20T17:26:34Z","closed_at":null,"assignee":null,"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"The last commit here was 2 years ago, while the TS version had a new release 2 days ago.  Is this being maintained?","reactions":{"url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/automerge/automerge-repo-swift/issues/124/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null}},"public":true,"created_at":"2026-03-20T00:43:37Z","org":{"id":29780209,"login":"automerge","gravatar_id":"","url":"https://api.github.com/orgs/automerge","avatar_url":"https://avatars.githubusercontent.com/u/29780209?"}}]