{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":590267526,"defaultBranch":"main","name":"zupass","ownerLogin":"proofcarryingdata","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-01-18T02:24:08.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/127823343?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1726867049.0","currentOid":""},"activityList":{"items":[{"before":"b9897622e9c6af7839472d9a10c6ee0b245b821f","after":"7d9b215f933ef097011e01baf5107df3e32d17fc","ref":"refs/heads/main","pushedAt":"2024-09-21T10:07:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"one-click flow for devcon (#1889)\n\n#### summary\r\n- on a loop, on the zupass end, download anonymized (both sha256'd)\r\nemail<->order code mappings from devcon podbox to zupass server\r\n- use this info on the zupass server end as an alternative verification\r\nstep during in the one-click login flow.\r\n\r\n#### concerns\r\nsome of this stuff could be addressed in follow-up work. it's not\r\nstrictly related but came up in the back of my mind as I was\r\nimplementing this:\r\n\r\n- devcon pipeline is really slow to sync - it's got hundreds of 'pages'\r\non pretix. that means when the podbox backend starts up, it takes\r\nminutes before the ticket information is available\r\n- we should probably actually execute on persisting this ticket data in\r\npostgres or something like that, so that the ticket data is available as\r\nsoon as the server restarts in podbox, at least.\r\n- i'm not sure how frequently this new sync operation that i've\r\nimplemented should run - it seems to be a sub-second operation even on\r\nproduction dataset size, so it shouldn't be a problem to sync pretty\r\nfrequently - maybe even once every 10 seconds.\r\n- i want to minimize the 'error state surface area' - the likelihood\r\nthat a user encounters a problem due to 'skew' in our system\r\n- is it worth introducing a fallback on the zupass side that pings the\r\ndevcon podbox directly with a 1-click login attempt that matches neither\r\nthe anonymized nor the internally-hosted pipeline atoms?","shortMessageHtmlLink":"one-click flow for devcon (#1889)"}},{"before":"67e2ef0b87610a3f9bd65f57274c670052e35565","after":"db327debee7b8de45a02e89699b71ba5353180aa","ref":"refs/heads/ivan/devcon-one-click","pushedAt":"2024-09-21T06:14:47.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"make it possible for pod tickets to display images instead of QR codes","shortMessageHtmlLink":"make it possible for pod tickets to display images instead of QR codes"}},{"before":"67e2ef0b87610a3f9bd65f57274c670052e35565","after":"db327debee7b8de45a02e89699b71ba5353180aa","ref":"refs/heads/staging-ivan","pushedAt":"2024-09-21T06:14:39.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"make it possible for pod tickets to display images instead of QR codes","shortMessageHtmlLink":"make it possible for pod tickets to display images instead of QR codes"}},{"before":"e4fc04a15bb93d55cff322589172713601ce5c26","after":"67e2ef0b87610a3f9bd65f57274c670052e35565","ref":"refs/heads/staging-ivan","pushedAt":"2024-09-21T06:04:56.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"support case where a single email belongs to multiple order codes","shortMessageHtmlLink":"support case where a single email belongs to multiple order codes"}},{"before":"e4fc04a15bb93d55cff322589172713601ce5c26","after":"67e2ef0b87610a3f9bd65f57274c670052e35565","ref":"refs/heads/ivan/devcon-one-click","pushedAt":"2024-09-21T06:04:46.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"support case where a single email belongs to multiple order codes","shortMessageHtmlLink":"support case where a single email belongs to multiple order codes"}},{"before":"767c51266f09fa8e651a7fd80c0e0121b666d703","after":"e4fc04a15bb93d55cff322589172713601ce5c26","ref":"refs/heads/staging-ivan","pushedAt":"2024-09-21T05:26:05.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"more env var fiddling","shortMessageHtmlLink":"more env var fiddling"}},{"before":"4d921df2ec4076d3c6715c0dd0757667ddcb6720","after":"e4fc04a15bb93d55cff322589172713601ce5c26","ref":"refs/heads/ivan/devcon-one-click","pushedAt":"2024-09-21T05:21:42.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"more env var fiddling","shortMessageHtmlLink":"more env var fiddling"}},{"before":"9c9fbcd2fbccd4a9a0423d067959c556c29f8b06","after":"4d921df2ec4076d3c6715c0dd0757667ddcb6720","ref":"refs/heads/ivan/devcon-one-click","pushedAt":"2024-09-21T05:21:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"more env var fiddling","shortMessageHtmlLink":"more env var fiddling"}},{"before":"d4f167626d83bdf6ad280dbbc31056095d3a6235","after":"9c9fbcd2fbccd4a9a0423d067959c556c29f8b06","ref":"refs/heads/ivan/devcon-one-click","pushedAt":"2024-09-21T04:57:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"fix tests","shortMessageHtmlLink":"fix tests"}},{"before":"767c51266f09fa8e651a7fd80c0e0121b666d703","after":"d4f167626d83bdf6ad280dbbc31056095d3a6235","ref":"refs/heads/ivan/devcon-one-click","pushedAt":"2024-09-21T04:53:06.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"use generic issuance zupass public key for credential subservice rather than deriving it from the zupass private key","shortMessageHtmlLink":"use generic issuance zupass public key for credential subservice rath…"}},{"before":"d722b6a976059cb82c3d3146247f2765f9690159","after":"767c51266f09fa8e651a7fd80c0e0121b666d703","ref":"refs/heads/staging-ivan","pushedAt":"2024-09-21T03:46:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"use generic issuance zupass public key for credential subservice rather than deriving it from the zupass private key","shortMessageHtmlLink":"use generic issuance zupass public key for credential subservice rath…"}},{"before":"d722b6a976059cb82c3d3146247f2765f9690159","after":"767c51266f09fa8e651a7fd80c0e0121b666d703","ref":"refs/heads/ivan/devcon-one-click","pushedAt":"2024-09-21T03:46:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"use generic issuance zupass public key for credential subservice rather than deriving it from the zupass private key","shortMessageHtmlLink":"use generic issuance zupass public key for credential subservice rath…"}},{"before":"40c0cadbb48b1b306020d79bbad5bfccc44a5503","after":"d722b6a976059cb82c3d3146247f2765f9690159","ref":"refs/heads/staging-ivan","pushedAt":"2024-09-21T02:39:36.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"added logging","shortMessageHtmlLink":"added logging"}},{"before":"73d4e934dd1e83fecfb1cbf7758f6e2a15c948de","after":"d722b6a976059cb82c3d3146247f2765f9690159","ref":"refs/heads/ivan/devcon-one-click","pushedAt":"2024-09-21T02:27:37.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"added logging","shortMessageHtmlLink":"added logging"}},{"before":"46824d8bcad008eff1af478b218ce3625f6aeb2e","after":"73d4e934dd1e83fecfb1cbf7758f6e2a15c948de","ref":"refs/heads/ivan/devcon-one-click","pushedAt":"2024-09-21T02:19:51.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"Merge remote-tracking branch 'origin/main' into ivan/devcon-one-click","shortMessageHtmlLink":"Merge remote-tracking branch 'origin/main' into ivan/devcon-one-click"}},{"before":"2971165f838171f6d49e01caa05d9dd218e8597e","after":"b9897622e9c6af7839472d9a10c6ee0b245b821f","ref":"refs/heads/staging","pushedAt":"2024-09-20T22:04:57.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"rrrliu","name":"Richard Liu","path":"/rrrliu","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/36896271?s=80&v=4"},"commit":{"message":"Authenticate embedded Zupass using localStorage via StorageAccessAPI (#1864)\n\nCloses https://linear.app/0xparc-pcd/issue/0XP-1111/log-in-via-cookie\nCloses\nhttps://linear.app/0xparc-pcd/issue/0XP-1139/use-requeststorageaccess-to-access-local-storage\n\nIn most browsers, local storage is \"partitioned\" by top-level origin.\nThis means that if I visit zupass.org, I can create cookies, local\nstorage entries, and so on, and these will be available to other tabs or\nwindows pointing to zupass.org (in the same browser).\n\nHowever, iframes do not work like this. They will not, by default, share\nlocal storage with other instances. To date, we simply allow the user to\nlog in via the iframe, which downloads their storage. However, requiring\nthe user to enter their username and password adds some friction.\n\n~The only universally-supported way around this is to call\n`requestStorageAccess`, which grants access to first-party _cookies_ in\na third-party (iframe) context. In this PR, Zupass sets a cookie\ncontaining the user's encryption key when they log in. When Zupass is\nloaded in an iframe, storage access is requested and, if approved, is\nused to read the encryption key from the cookie and log the user in.~\n\nUsing cookies to transfer information to iframes is not sufficiently\nsecure; see comments below.\n\nHowever, we can use a Chrome-specific API which allows iframes to access\nfirst-party local storage, with user permission. This allows us to\nretrieve the information necessary to boostrap a user session. This will\nonly work in Chrome and derivatives like Arc, but since this is around\n66% of browsers by market share, it seems worth doing.\n\nThis reduces the interaction required when using Zupass in an iframe\nfrom entering an email and password and clicking a button to simply\nclicking a button and clicking a further confirmation to grant storage\naccess.\n\nIn cases where we detect that the user is running Chrome, instead of\nshowing a request for email and password, we show this:\n\n\"image\"\nsrc=\"https://github.com/user-attachments/assets/900768fd-d810-4664-ad13-a6d50975d5bd\"\n\nClicking the button will request storage access:\n\"image\"\nsrc=\"https://github.com/user-attachments/assets/c47d8aba-1fb3-4655-b5d5-e227c5c5a1b2\"\n\n\nIf the user approves, and the local storage contains a valid encryption\nkey, then we hash the encryption key and request the encrypted storage\nfrom the server. If this decrypts successfully then we use the storage\nto log the user in.\n\nOn subsequent visits, the embedded Zupass will remember the user and\nwill not require clicking a button or logging in.","shortMessageHtmlLink":"Authenticate embedded Zupass using localStorage via StorageAccessAPI (#…"}},{"before":"e4d270871cf7fce69e710d87412bdb77b9e194e1","after":"b4cfdba9f8bb60c303ccfcb3d427aff827d0a9b1","ref":"refs/heads/artwyman/unknown-pcd","pushedAt":"2024-09-20T21:27:37.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"artwyman","name":"Andrew Twyman","path":"/artwyman","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761206?s=80&v=4"},"commit":{"message":"Basic UnknownPCD","shortMessageHtmlLink":"Basic UnknownPCD"}},{"before":"b9897622e9c6af7839472d9a10c6ee0b245b821f","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-1864-81767ca74260f66ebc0aafc6fd3a8f735fb1d786","pushedAt":"2024-09-20T21:23:50.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":"81767ca74260f66ebc0aafc6fd3a8f735fb1d786","after":"b9897622e9c6af7839472d9a10c6ee0b245b821f","ref":"refs/heads/main","pushedAt":"2024-09-20T21:23:49.000Z","pushType":"merge_queue_merge","commitsCount":1,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Authenticate embedded Zupass using localStorage via StorageAccessAPI (#1864)\n\nCloses https://linear.app/0xparc-pcd/issue/0XP-1111/log-in-via-cookie\nCloses\nhttps://linear.app/0xparc-pcd/issue/0XP-1139/use-requeststorageaccess-to-access-local-storage\n\nIn most browsers, local storage is \"partitioned\" by top-level origin.\nThis means that if I visit zupass.org, I can create cookies, local\nstorage entries, and so on, and these will be available to other tabs or\nwindows pointing to zupass.org (in the same browser).\n\nHowever, iframes do not work like this. They will not, by default, share\nlocal storage with other instances. To date, we simply allow the user to\nlog in via the iframe, which downloads their storage. However, requiring\nthe user to enter their username and password adds some friction.\n\n~The only universally-supported way around this is to call\n`requestStorageAccess`, which grants access to first-party _cookies_ in\na third-party (iframe) context. In this PR, Zupass sets a cookie\ncontaining the user's encryption key when they log in. When Zupass is\nloaded in an iframe, storage access is requested and, if approved, is\nused to read the encryption key from the cookie and log the user in.~\n\nUsing cookies to transfer information to iframes is not sufficiently\nsecure; see comments below.\n\nHowever, we can use a Chrome-specific API which allows iframes to access\nfirst-party local storage, with user permission. This allows us to\nretrieve the information necessary to boostrap a user session. This will\nonly work in Chrome and derivatives like Arc, but since this is around\n66% of browsers by market share, it seems worth doing.\n\nThis reduces the interaction required when using Zupass in an iframe\nfrom entering an email and password and clicking a button to simply\nclicking a button and clicking a further confirmation to grant storage\naccess.\n\nIn cases where we detect that the user is running Chrome, instead of\nshowing a request for email and password, we show this:\n\n\"image\"\nsrc=\"https://github.com/user-attachments/assets/900768fd-d810-4664-ad13-a6d50975d5bd\"\n\nClicking the button will request storage access:\n\"image\"\nsrc=\"https://github.com/user-attachments/assets/c47d8aba-1fb3-4655-b5d5-e227c5c5a1b2\"\n\n\nIf the user approves, and the local storage contains a valid encryption\nkey, then we hash the encryption key and request the encrypted storage\nfrom the server. If this decrypts successfully then we use the storage\nto log the user in.\n\nOn subsequent visits, the embedded Zupass will remember the user and\nwill not require clicking a button or logging in.","shortMessageHtmlLink":"Authenticate embedded Zupass using localStorage via StorageAccessAPI (#…"}},{"before":null,"after":"b9897622e9c6af7839472d9a10c6ee0b245b821f","ref":"refs/heads/gh-readonly-queue/main/pr-1864-81767ca74260f66ebc0aafc6fd3a8f735fb1d786","pushedAt":"2024-09-20T21:17:29.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Authenticate embedded Zupass using localStorage via StorageAccessAPI (#1864)\n\nCloses https://linear.app/0xparc-pcd/issue/0XP-1111/log-in-via-cookie\nCloses\nhttps://linear.app/0xparc-pcd/issue/0XP-1139/use-requeststorageaccess-to-access-local-storage\n\nIn most browsers, local storage is \"partitioned\" by top-level origin.\nThis means that if I visit zupass.org, I can create cookies, local\nstorage entries, and so on, and these will be available to other tabs or\nwindows pointing to zupass.org (in the same browser).\n\nHowever, iframes do not work like this. They will not, by default, share\nlocal storage with other instances. To date, we simply allow the user to\nlog in via the iframe, which downloads their storage. However, requiring\nthe user to enter their username and password adds some friction.\n\n~The only universally-supported way around this is to call\n`requestStorageAccess`, which grants access to first-party _cookies_ in\na third-party (iframe) context. In this PR, Zupass sets a cookie\ncontaining the user's encryption key when they log in. When Zupass is\nloaded in an iframe, storage access is requested and, if approved, is\nused to read the encryption key from the cookie and log the user in.~\n\nUsing cookies to transfer information to iframes is not sufficiently\nsecure; see comments below.\n\nHowever, we can use a Chrome-specific API which allows iframes to access\nfirst-party local storage, with user permission. This allows us to\nretrieve the information necessary to boostrap a user session. This will\nonly work in Chrome and derivatives like Arc, but since this is around\n66% of browsers by market share, it seems worth doing.\n\nThis reduces the interaction required when using Zupass in an iframe\nfrom entering an email and password and clicking a button to simply\nclicking a button and clicking a further confirmation to grant storage\naccess.\n\nIn cases where we detect that the user is running Chrome, instead of\nshowing a request for email and password, we show this:\n\n\"image\"\nsrc=\"https://github.com/user-attachments/assets/900768fd-d810-4664-ad13-a6d50975d5bd\"\n\nClicking the button will request storage access:\n\"image\"\nsrc=\"https://github.com/user-attachments/assets/c47d8aba-1fb3-4655-b5d5-e227c5c5a1b2\"\n\n\nIf the user approves, and the local storage contains a valid encryption\nkey, then we hash the encryption key and request the encrypted storage\nfrom the server. If this decrypts successfully then we use the storage\nto log the user in.\n\nOn subsequent visits, the embedded Zupass will remember the user and\nwill not require clicking a button or logging in.","shortMessageHtmlLink":"Authenticate embedded Zupass using localStorage via StorageAccessAPI (#…"}},{"before":"aead843e035417131070abba43eaeb17287caf8b","after":"1f9501accb6969078f943a67f8b0f5a4fe08b4e7","ref":"refs/heads/robknight/0xp-1111-log-in-via-cookie","pushedAt":"2024-09-20T21:00:18.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"robknight","name":"Rob Knight","path":"/robknight","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20022?s=80&v=4"},"commit":{"message":"Fix issue introduced by rebase","shortMessageHtmlLink":"Fix issue introduced by rebase"}},{"before":"a670fa3c86749ef084b36b6a34baf8d90e315dad","after":null,"ref":"refs/heads/robknight/ticketproofs","pushedAt":"2024-09-20T20:57:13.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"robknight","name":"Rob Knight","path":"/robknight","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20022?s=80&v=4"}},{"before":"81767ca74260f66ebc0aafc6fd3a8f735fb1d786","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-1891-2971165f838171f6d49e01caa05d9dd218e8597e","pushedAt":"2024-09-20T20:48:13.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":"2971165f838171f6d49e01caa05d9dd218e8597e","after":"81767ca74260f66ebc0aafc6fd3a8f735fb1d786","ref":"refs/heads/main","pushedAt":"2024-09-20T20:48:11.000Z","pushType":"merge_queue_merge","commitsCount":1,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Basic ticket proofs using Z API (#1891)\n\nThe easiest way to test this is simply to run the test Zapp and see the\ncode that is used. It's a thin wrapper over the GPC proving mechanism at\nthe moment, and the prove screen needs more work, but this gives a very\nsimple API for developers to authenticate tickets.","shortMessageHtmlLink":"Basic ticket proofs using Z API (#1891)"}},{"before":null,"after":"81767ca74260f66ebc0aafc6fd3a8f735fb1d786","ref":"refs/heads/gh-readonly-queue/main/pr-1891-2971165f838171f6d49e01caa05d9dd218e8597e","pushedAt":"2024-09-20T20:42:09.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Basic ticket proofs using Z API (#1891)\n\nThe easiest way to test this is simply to run the test Zapp and see the\ncode that is used. It's a thin wrapper over the GPC proving mechanism at\nthe moment, and the prove screen needs more work, but this gives a very\nsimple API for developers to authenticate tickets.","shortMessageHtmlLink":"Basic ticket proofs using Z API (#1891)"}},{"before":"91833a2a035166d8f2dc182021dda99db248f83c","after":"a670fa3c86749ef084b36b6a34baf8d90e315dad","ref":"refs/heads/robknight/ticketproofs","pushedAt":"2024-09-20T20:37:55.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"robknight","name":"Rob Knight","path":"/robknight","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20022?s=80&v=4"},"commit":{"message":"Remove log statement","shortMessageHtmlLink":"Remove log statement"}},{"before":"e54faca64e0c50c655232b80def294773309e27c","after":"2971165f838171f6d49e01caa05d9dd218e8597e","ref":"refs/heads/staging-richard","pushedAt":"2024-09-20T18:46:50.000Z","pushType":"push","commitsCount":14,"pusher":{"login":"ichub","name":"Ivan Chub","path":"/ichub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2636237?s=80&v=4"},"commit":{"message":"Add POD uniqueness module (#1884)\n\nThis PR adds a POD uniqueness module to GPCs. Summary of changes:\n- Addition of uniqueness module to `gpcircuits` package.\n- Minor refactoring of list membership module in `gpcircuits` package.\n- Changes to ProtoPODGPC circuit.\n- Addition of `uniquePODs` field to `GPCProofConfig` together with\nchanges to the GPC compiler.\n- Corresponding tests.\n\nThis PR depends on the artifact changes in\n[proofcarryingdata/snark-artifacts#13](https://github.com/proofcarryingdata/snark-artifacts/pull/13).","shortMessageHtmlLink":"Add POD uniqueness module (#1884)"}},{"before":"9cbeec56afe310d71ddd4e3e733e52685f5c4b5d","after":"aead843e035417131070abba43eaeb17287caf8b","ref":"refs/heads/robknight/0xp-1111-log-in-via-cookie","pushedAt":"2024-09-20T16:34:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"robknight","name":"Rob Knight","path":"/robknight","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20022?s=80&v=4"},"commit":{"message":"Fix issue introduced by rebase","shortMessageHtmlLink":"Fix issue introduced by rebase"}},{"before":"17407b6e037f7281b1b42466c14929ddbeae7eaa","after":"9cbeec56afe310d71ddd4e3e733e52685f5c4b5d","ref":"refs/heads/robknight/0xp-1111-log-in-via-cookie","pushedAt":"2024-09-20T16:11:03.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"robknight","name":"Rob Knight","path":"/robknight","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20022?s=80&v=4"},"commit":{"message":"Move code from finally block to catch block","shortMessageHtmlLink":"Move code from finally block to catch block"}},{"before":"f3108e07ef88a7e6c906d2af204037712b7d94bf","after":"91833a2a035166d8f2dc182021dda99db248f83c","ref":"refs/heads/robknight/ticketproofs","pushedAt":"2024-09-20T15:03:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"robknight","name":"Rob Knight","path":"/robknight","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20022?s=80&v=4"},"commit":{"message":"Improvements to prove screen","shortMessageHtmlLink":"Improvements to prove screen"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yMVQxMDowNzo0OS4wMDAwMDBazwAAAAS8pQhV","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yMVQxMDowNzo0OS4wMDAwMDBazwAAAAS8pQhV","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yMFQxNTowMzoxMC4wMDAwMDBazwAAAAS8F-rk"}},"title":"Activity · proofcarryingdata/zupass"}