{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":704225623,"defaultBranch":"json","name":"sail","ownerLogin":"ThinkOpenly","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2023-10-12T20:02:53.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/12301795?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1719246637.0","currentOid":""},"activityList":{"items":[{"before":"6c0b63b7641e3ec8571bbc7096e87a31e30adc3f","after":"dd893a679d9edfd90b80e5ac2dbf10328b9cc3e7","ref":"refs/heads/json","pushedAt":"2024-09-16T18:04:35.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"Rebase to Sail 0.18","shortMessageHtmlLink":"Rebase to Sail 0.18"}},{"before":"f4cb6d53b5746a3a16e15b42a9c8c35f024450b8","after":"6c0b63b7641e3ec8571bbc7096e87a31e30adc3f","ref":"refs/heads/json","pushedAt":"2024-08-28T21:07:26.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"Add cross-checking for operands with constants\nOperands with constants `(uimm,0b000)` were previously split and the constant discarded.\nWhile this did not cause errors, the change now cross-checks both parts to an `inputl` list before retaining the relevant components.\nThis ensures accuracy and robustness.","shortMessageHtmlLink":"Add cross-checking for operands with constants"}},{"before":"9b98866d49c7cdad7e2739f05abaf1f3a6b743b4","after":"f4cb6d53b5746a3a16e15b42a9c8c35f024450b8","ref":"refs/heads/json","pushedAt":"2024-08-21T13:25:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"Update json_of_name to prioritize mnemonic over AST key (#39)\n\nThis change ensures that when both AST and mnemonic are annoted for an instruction, the parser will prioritize the mnemonic as the key to retrieve the name from the Hashtbl.\r\nIf the mnemonic is missing, the parser will fall back to using the AST as the default key.","shortMessageHtmlLink":"Update json_of_name to prioritize mnemonic over AST key (#39)"}},{"before":"9361db7f67a45f7ba057b0bbc279b7d1c2cb1f51","after":"9b98866d49c7cdad7e2739f05abaf1f3a6b743b4","ref":"refs/heads/json","pushedAt":"2024-08-20T20:32:30.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"Fix name and description extraction (#38)\n\nInstructions with fewer than two inputs were missing their names and descriptions in the JSON output.\r\n\r\n```\r\nunion clause ast = C_J : (bits(11))\r\n```\r\n```\r\nunion clause ast = EBREAK : unit\r\n```\r\n\r\nBy moving the code blocks responsible for parsing and extracting names and descriptions from the tuple match block, all instructions now have their names and descriptions correctly extracted.","shortMessageHtmlLink":"Fix name and description extraction (#38)"}},{"before":"454f4c8f0adf14dbac82e6df6deb92dd7d4770bc","after":"9361db7f67a45f7ba057b0bbc279b7d1c2cb1f51","ref":"refs/heads/json","pushedAt":"2024-08-15T19:06:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"Remove macos12 4.08.1 build (#37)\n\nGitHub CI \"build\" Action often fails on target \"macos-12\" with errors like:\r\n```\r\n=== ERROR while compiling sail_json_backend.0.17 =============================\r\n File \"src/sail_json_backend/json.ml\", line 97, characters 5-23:\r\n 97 | if String.starts_with ~prefix:\"\\\"\" qs && String.ends_with ~suffix:\"\\\"\" qs then\r\n ^^^^^^^^^^^^^^^^^^\r\n Error: Unbound value String.starts_with\r\n```\r\n\r\n - This error message is indicative of an outdated version of OCaml.\r\n - Support in OCaml for `String.starts_with` arrived in OCaml 4.13, which\r\n was released almost 2 years ago (2021-09-24).\r\n - This issue occurs on the \"macos-12\" target exclusively.\r\n - Since the work being done here is not platform-specific and is at the\r\n level of \"proof-of-concept\", we can disable the \"macos-12\" platform\r\n and move on.","shortMessageHtmlLink":"Remove macos12 4.08.1 build (#37)"}},{"before":"0cca70fc633bec727da346fb0147b0e1d8103c6d","after":"454f4c8f0adf14dbac82e6df6deb92dd7d4770bc","ref":"refs/heads/json","pushedAt":"2024-08-07T18:03:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"Fix order of operands. (#34)\n\n* Change extraction of assembly operands from AST input list to assembly order.\r\n This avoids including extraneous AST inputs in the list of operands, and ensures operands are extracted in the same order as seen in the assembly syntax.\r\n* Take care to extract operands embedded within functions, like `funct(op1 @ op2 @ 0b00)`.","shortMessageHtmlLink":"Fix order of operands. (#34)"}},{"before":"2983bebc493bbafee0fad40c4389762b0d0beed8","after":"3853d1238ac58c4f7a5a9cc91e54b17bb33d6acd","ref":"refs/heads/bitvector-literals","pushedAt":"2024-06-24T16:36:09.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"Wordsmith \"Bitvector literals\"\n\nUse consistent terms for both hexadecimal and binary.\nAdd more separation between the two in places.\nAlso, clarify a few references.","shortMessageHtmlLink":"Wordsmith \"Bitvector literals\""}},{"before":"4afd2793a293d6fb8d6f87c9f5fe986e4812547e","after":"2983bebc493bbafee0fad40c4389762b0d0beed8","ref":"refs/heads/bitvector-literals","pushedAt":"2024-06-24T16:34:47.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"Wordsmith \"Bitvector literals\"\n\nUse consistent terms for both hexadecimal and binary.\nAdd more separation between the two in places.\nAlso, clarify a few references.","shortMessageHtmlLink":"Wordsmith \"Bitvector literals\""}},{"before":"992ca325e21707b575258902b8d226e02b367df6","after":"4afd2793a293d6fb8d6f87c9f5fe986e4812547e","ref":"refs/heads/bitvector-literals","pushedAt":"2024-06-24T16:33:23.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"Wordsmith \"Bitvector literals\"\n\nUse consistent terms for both hexadecimal and binary.\nAdd more separation between the two in places.\nAlso, clarify a few references.","shortMessageHtmlLink":"Wordsmith \"Bitvector literals\""}},{"before":"e78e74dde207c70ffb404b703a9f80c75fcb8567","after":"992ca325e21707b575258902b8d226e02b367df6","ref":"refs/heads/bitvector-literals","pushedAt":"2024-06-24T16:32:22.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"commit.txt","shortMessageHtmlLink":"commit.txt"}},{"before":null,"after":"e78e74dde207c70ffb404b703a9f80c75fcb8567","ref":"refs/heads/bitvector-literals","pushedAt":"2024-06-24T16:30:37.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"commit.txt","shortMessageHtmlLink":"commit.txt"}},{"before":null,"after":"fd4dfe6d9ad649851b2e90f7fd5745f9036aae8c","ref":"refs/heads/deprecated-numeric-set-type","pushedAt":"2024-06-24T16:12:58.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"Add clarity about deprecation of \"{| |}\"\n\nIn \"Numeric types and bits\", there is a note:\n```\nNOTE: In older Sail versions the numeric set type would have been\ndenoted `{|32, 64|}`.\n```\n\nThis leaves the status of this syntax for current Sail versions unsaid.\n\nPer `src/lib/parser.mly`, this syntax is deprecated:\n```\n | LcurlyBar num_list RcurlyBar\n { set_syntax_deprecated (loc $startpos $endpos);\n mk_typ (ATyp_nset $2) $startpos $endpos }\n```\n\nAdd \"This syntax is now deprecated\" to the above note for clarity.","shortMessageHtmlLink":"Add clarity about deprecation of \"{| |}\""}},{"before":null,"after":"1afc790f6633230f6e3e03bf412b2f37400f9b22","ref":"refs/heads/a_bit_vector","pushedAt":"2024-06-24T15:06:12.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"Correct an example variable name\n\nIn \"Vectors\", there is this example:\n```\nlet a_generic_vector : vector(3, bit) = [bitzero, bitzero, bitone]\nlet a_bit_vector : bits(3) = [bitzero, bitzero, bitone] // 0b001\n\nassert(a_generic_vector[0] == bitone)\nassert(a_bitvector_vector[0] == bitone)\n```\n\nNote how the declaration of `a_bit_vector` does not match its\nuse: `a_bitvector_vector`. Fix this by using `a_bitvector` for both.","shortMessageHtmlLink":"Correct an example variable name"}},{"before":"3de79e55cadb47a6dc01bde8fbff91b7179889d3","after":"0cca70fc633bec727da346fb0147b0e1d8103c6d","ref":"refs/heads/json","pushedAt":"2024-06-18T15:33:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"dune fmt","shortMessageHtmlLink":"dune fmt"}},{"before":"697a09db17729b418f9ca981a16f7a9fb6bb20ee","after":"3de79e55cadb47a6dc01bde8fbff91b7179889d3","ref":"refs/heads/json","pushedAt":"2024-06-18T15:23:03.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"Add minimal support for new constructs in upstream Sail","shortMessageHtmlLink":"Add minimal support for new constructs in upstream Sail"}},{"before":"6ccdb548569f38ff488970974d21383ef36bad13","after":"697a09db17729b418f9ca981a16f7a9fb6bb20ee","ref":"refs/heads/json","pushedAt":"2024-06-17T15:01:29.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"changes required by rebase","shortMessageHtmlLink":"changes required by rebase"}},{"before":"5b585be291cc95c87920c21865ccd388efbf1329","after":"6ccdb548569f38ff488970974d21383ef36bad13","ref":"refs/heads/json","pushedAt":"2024-06-14T12:49:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"[JSON]: Extract register information\n\nFixes #10","shortMessageHtmlLink":"[JSON]: Extract register information"}},{"before":"7ad136c5b2ba1e9c1cf9fef911a20173b7394042","after":"5b585be291cc95c87920c21865ccd388efbf1329","ref":"refs/heads/json","pushedAt":"2024-06-13T19:28:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"CI for JSON validation\n\n* CI for JSON validation. Fixes #30.\r\n* Run build CI on new pull-request.","shortMessageHtmlLink":"CI for JSON validation"}},{"before":"9147a103e2bd2968ad0fbb88105f7e2ae63f9737","after":"7ad136c5b2ba1e9c1cf9fef911a20173b7394042","ref":"refs/heads/json","pushedAt":"2024-06-12T17:29:01.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"[JSON] Fix lingering comma after \"functions\"\n\nThe tail end of the new \"functions\" content from\ncommit 4aa402457cc55b1e3b6fac20f18091aff0f5b1fc\nhas a lingering comma after the last element:\n```\n {\n \"name\": \"riscv_f32Div\",\n \"source\": \"{\\n [...]}\"\n },\n ]\n}\n```\n\nFix this by using `String.concat` to join the \"function\"\nelements with a comma between them, instead of emitting\neach of them with a trailing comma.","shortMessageHtmlLink":"[JSON] Fix lingering comma after \"functions\""}},{"before":null,"after":"d3b5d455fc8f27755c461fc37d5931ce8a8ba472","ref":"refs/heads/functions-comma","pushedAt":"2024-06-12T17:08:50.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"[JSON] Fix lingering comma after \"functions\"\n\nThe tail end of the new \"functions\" content from\ncommit 4aa402457cc55b1e3b6fac20f18091aff0f5b1fc\nhas a lingering comma after the last element:\n```\n {\n \"name\": \"riscv_f32Div\",\n \"source\": \"{\\n [...]}\"\n },\n ]\n}\n```\n\nFix this by using `String.concat` to join the \"function\"\nelements with a comma between them, instead of emitting\neach of them with a trailing comma.","shortMessageHtmlLink":"[JSON] Fix lingering comma after \"functions\""}},{"before":"1974cc5ce88b845597e1ae44ddacf4e75fa2e2b1","after":"9147a103e2bd2968ad0fbb88105f7e2ae63f9737","ref":"refs/heads/json","pushedAt":"2024-06-11T13:35:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"fix workflow\n\nThis fixes the ci workflows.\nFor now it is configured to runs exclusively on ocaml version`5.0.0`,\nunlike the upstream which also uses `4.08.1`.\nSupport for earlier versions will be added gradually.","shortMessageHtmlLink":"fix workflow"}},{"before":"4aa402457cc55b1e3b6fac20f18091aff0f5b1fc","after":"1974cc5ce88b845597e1ae44ddacf4e75fa2e2b1","ref":"refs/heads/json","pushedAt":"2024-05-31T14:48:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"format `sail_json_backend` with `dune fmt`","shortMessageHtmlLink":"format sail_json_backend with dune fmt"}},{"before":"94e3038ebf0fb019ddde5d3b773ac5aec32cc28f","after":"4aa402457cc55b1e3b6fac20f18091aff0f5b1fc","ref":"refs/heads/json","pushedAt":"2024-05-31T13:47:37.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"[JSON]: extract function bodies to a new hashtable","shortMessageHtmlLink":"[JSON]: extract function bodies to a new hashtable"}},{"before":"0b897dce75365a896eadd0d558b47166171075f8","after":"94e3038ebf0fb019ddde5d3b773ac5aec32cc28f","ref":"refs/heads/json","pushedAt":"2024-05-23T19:11:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"[JSON]: Implement support for optional operand\n\nThis commit enhances the JSON Backend to properly handle instructions with optional operands.\nPreviously, these operands were not handled correctly.\n\nThe implementation introduces two new fields:\n`optional`, which indicates whether an operand is optional (boolean),\nand `default`, which holds the default value if no value is specified.\n\nfor 'vle16.v':\n\nBefore:\n```\n{\n \"operands\": [\n ...\n { \"name\": \"vm\", \"type\": \"bits(1)\" }\n ...\n ]\n}\n```\nAfter:\n```\n{\n \"operands\": [\n ...\n { \"name\": \"vm\", \"type\": \"bits(1)\", \"optional\": true, \"default\": \"v0.t\" }\n ...\n ]\n}\n```\nFixes: #2","shortMessageHtmlLink":"[JSON]: Implement support for optional operand"}},{"before":"ae6a643242543a1ae146361b9cb97df69315b233","after":null,"ref":"refs/heads/names-in-mapping","pushedAt":"2024-04-05T02:10:35.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"}},{"before":"b5f842b5c995383ef484c367649e319e6619733d","after":"0b897dce75365a896eadd0d558b47166171075f8","ref":"refs/heads/json","pushedAt":"2024-04-05T02:10:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"[JSON] Add support for extracting instruction names from mappings\n\nMany instructions are grouped around a similar, common implementation\nwith the mnemonics embedded within a list of mnemonic:name mapping, such as:\n```\nmapping utype_mnemonic : uop <-> string = {\n RISCV_LUI <-> \"lui\",\n RISCV_AUIPC <-> \"auipc\"\n}\n\nmapping clause assembly = UTYPE(imm, rd, op)\n <-> utype_mnemonic(op) ^ spc() ^ reg_name(rd) ^ sep() ^ hex_bits_20(imm)\n```\n\nAdd support for extracting instruction names from within the mappings if\nthe names are added within as attributes, for example:\n```\nmapping utype_mnemonic : uop <-> string = {\n $[name Load Upper Immediate]\n RISCV_LUI <-> \"lui\",\n $[name Add Upper Immediate to Program Counter]\n RISCV_AUIPC <-> \"auipc\"\n}\n```","shortMessageHtmlLink":"[JSON] Add support for extracting instruction names from mappings"}},{"before":null,"after":"ae6a643242543a1ae146361b9cb97df69315b233","ref":"refs/heads/names-in-mapping","pushedAt":"2024-04-05T02:07:07.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"[JSON] Add support for extracting instruction names from mappings\n\nMany instructions are grouped around a similar, common implementation\nwith the mnemonics embedded within a list of mnemonic:name mapping, such as:\n```\nmapping utype_mnemonic : uop <-> string = {\n RISCV_LUI <-> \"lui\",\n RISCV_AUIPC <-> \"auipc\"\n}\n\nmapping clause assembly = UTYPE(imm, rd, op)\n <-> utype_mnemonic(op) ^ spc() ^ reg_name(rd) ^ sep() ^ hex_bits_20(imm)\n```\n\nAdd support for extracting instruction names from within the mappings if\nthe names are added within as attributes, for example:\n```\nmapping utype_mnemonic : uop <-> string = {\n $[name Load Upper Immediate]\n RISCV_LUI <-> \"lui\",\n $[name Add Upper Immediate to Program Counter]\n RISCV_AUIPC <-> \"auipc\"\n}\n```","shortMessageHtmlLink":"[JSON] Add support for extracting instruction names from mappings"}},{"before":"1f53bb0c9551cc6c96888eda7aa8cdcefe9e7551","after":null,"ref":"refs/heads/syntax","pushedAt":"2024-04-04T18:26:56.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"}},{"before":"c74756f1da068db7410e3faa5c6c640728b7fa2b","after":"b5f842b5c995383ef484c367649e319e6619733d","ref":"refs/heads/json","pushedAt":"2024-04-04T18:26:51.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"[JSON] Restore instruction operand extraction\n\nA previous commit broke extraction of instruction operands/types.\nFix it.","shortMessageHtmlLink":"[JSON] Restore instruction operand extraction"}},{"before":null,"after":"1f53bb0c9551cc6c96888eda7aa8cdcefe9e7551","ref":"refs/heads/syntax","pushedAt":"2024-04-04T18:24:50.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ThinkOpenly","name":"Paul Clarke","path":"/ThinkOpenly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12301795?s=80&v=4"},"commit":{"message":"[JSON] Restore instruction operand extraction\n\nA previous commit broke extraction of instruction operands/types.\nFix it.","shortMessageHtmlLink":"[JSON] Restore instruction operand extraction"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xNlQxODowNDozNS4wMDAwMDBazwAAAAS3vI2k","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNC0wNFQxODoyNDo1MC4wMDAwMDBazwAAAAQoHUpS"}},"title":"Activity ยท ThinkOpenly/sail"}