{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":272457606,"defaultBranch":"master","name":"cosmopolitan","ownerLogin":"jart","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2020-06-15T14:16:13.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/49262?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1717678828.0","currentOid":""},"activityList":{"items":[{"before":"0dde3a0e70f179fd6be0e2deff46994a59fef58a","after":"d9b4f647d88f194779c240cd59d86304bfd8c0f8","ref":"refs/heads/master","pushedAt":"2024-06-11T04:51:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"Uncomment swap test (#1210)","shortMessageHtmlLink":"Uncomment swap test (#1210)"}},{"before":"32643e9fa74242873c0a21780790c47a724747c0","after":"0dde3a0e70f179fd6be0e2deff46994a59fef58a","ref":"refs/heads/master","pushedAt":"2024-06-10T14:00:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"Get rid of preprocessor stuff in test (#1202)\n\nAlso it's a bit more idiomatic to say s.npos rather than string::npos.","shortMessageHtmlLink":"Get rid of preprocessor stuff in test (#1202)"}},{"before":"0a92c780359406a1761c9a1d8d3f4285ba1c86f0","after":"32643e9fa74242873c0a21780790c47a724747c0","ref":"refs/heads/master","pushedAt":"2024-06-10T10:40:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"Decouple swap from std (#1211)\n\nThis allows you to implement your own swap function without it having to\r\nbe part of the std namespace. std::swap is still used if it's available.","shortMessageHtmlLink":"Decouple swap from std (#1211)"}},{"before":"118db7112101d697f86521a7ea0d1b01ae8db5a7","after":"0a92c780359406a1761c9a1d8d3f4285ba1c86f0","ref":"refs/heads/master","pushedAt":"2024-06-08T22:08:11.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"Remove erroneous ctl:: prefixes","shortMessageHtmlLink":"Remove erroneous ctl:: prefixes"}},{"before":"a0410f0170a6fe54d6097cbbddd6b3126047f605","after":"118db7112101d697f86521a7ea0d1b01ae8db5a7","ref":"refs/heads/master","pushedAt":"2024-06-08T22:05:47.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"Provide a minimal new.h for CTL (#1205)\n\nThis replaces the STL header. Mainly, it defines a global operator\nnew and operator delete, as well as the placement versions of these. The\nplacement versions are required to not get compile errors when trying to\nwrite a placement new statement.\n\nEach of these operators is defined with many, many different variants. A\nglance at new.cc is recommended followed by a chaser of the Alexandrescu\ntalk \"std::allocator is to Allocation as std::vector is to Vexation\". We\nmust provide a global-namespace source-level definition of each operator\nand it is illegal for any of them to be marked inline, so here we are.\n\nThe upshot is that we no longer need to include , and our optional/\nvector headers are self-contained.","shortMessageHtmlLink":"Provide a minimal new.h for CTL (#1205)"}},{"before":"cfec787b4fd042d6a37777ddbced87d41abc6bfd","after":"a0410f0170a6fe54d6097cbbddd6b3126047f605","ref":"refs/heads/master","pushedAt":"2024-06-08T22:04:58.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"Make big_string pod (#1204)\n\n`big_string` is not pod which means it needs to be properly constructed\r\nand destroyed. Instead make it POD and destroy it manually in `string`\r\ndestructor.","shortMessageHtmlLink":"Make big_string pod (#1204)"}},{"before":"a0410f0170a6fe54d6097cbbddd6b3126047f605","after":"cfec787b4fd042d6a37777ddbced87d41abc6bfd","ref":"refs/heads/master","pushedAt":"2024-06-08T22:04:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"Provide a minimal new.h for CTL (#1205)\n\nThis replaces the STL header. Mainly, it defines a global\r\noperator new and operator delete, as well as the placement versions of\r\nthese. The placement versions are required to not get compile errors\r\nwhen trying to write a placement new statement.\r\n\r\nEach of these operators is defined with many, many different variants. A\r\nglance at new.cc is recommended followed by a chaser of the Alexandrescu\r\ntalk \"std::allocator is to Allocation as std::vector is to Vexation\". We\r\nmust provide a global-namespace source-level definition of each operator\r\nand it is illegal for any of them to be marked inline, so here we are.\r\n\r\nThe upshot is that we no longer need to include , and our\r\noptional/ vector headers are self-contained.","shortMessageHtmlLink":"Provide a minimal new.h for CTL (#1205)"}},{"before":"d44a7dc6035e8d49a09903f87d9902688de271d2","after":"a0410f0170a6fe54d6097cbbddd6b3126047f605","ref":"refs/heads/master","pushedAt":"2024-06-08T17:02:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"Make big_string pod (#1204)\n\n`big_string` is not pod which means it needs to be properly constructed\r\nand destroyed. Instead make it POD and destroy it manually in `string`\r\ndestructor.","shortMessageHtmlLink":"Make big_string pod (#1204)"}},{"before":"2ba6b0158fc3e5bf37e5d6b689cc0c4b65a698f2","after":"d44a7dc6035e8d49a09903f87d9902688de271d2","ref":"refs/heads/master","pushedAt":"2024-06-08T00:47:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"Fix bugs in in ctl::optional (#1203)\n\nManually manage the lifetime of `value_` by using an anonymous\r\n`union`. This fixes a bunch of double-frees and double-constructs.\r\n\r\nAdditionally move the `present_` flag last. When `T` has padding\r\n`present_` will be placed there saving `alignof(T)` bytes from\r\n`sizeof(optional)`.","shortMessageHtmlLink":"Fix bugs in in ctl::optional (#1203)"}},{"before":"f3effcb7036fb00b08d66d6a4eff57003a7bdad8","after":"2ba6b0158fc3e5bf37e5d6b689cc0c4b65a698f2","ref":"refs/heads/master","pushedAt":"2024-06-07T05:15:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"Fix some memory issues with ctl::string (#1201)\n\nThere were a few errors in how capacity and memory was being handled for\r\nsmall strings. The capacity errors meant that small strings would become\r\nbig strings too soon, and the memory error introduced undefined behavior\r\nthat was caught by CheckMemoryLeaks in our test file but only sometimes.\r\n\r\nThe crucial change is in reserve: we only copy n bytes into p2, and then\r\nwe manually set the null terminator instead of expecting it to have been\r\nthere already. (E.g. it might not be there for an empty small string.)\r\n\r\nWe also fix one other doozy in append when we were exactly at the small-\r\nto-big string boundary: we set the last byte (i.e., the remainder field)\r\nto 0, then decremented it, giving us size_t max. Whoops. We boneheadedly\r\nfix this by setting the 0 byte after we've fixed up the remainder, so it\r\nis at worst a no-op.\r\n\r\nOtherwise, capacity now works the same for small strings as it does with\r\nbig strings: it's the amount of space available including the null byte.\r\n\r\nWe test all of this with a new test that only gets included if our class\r\nunder test is not std::string (presumably meaning it's ctl::string.) The\r\ntest manually verifies that the small string optimization behaves how we\r\nexpect.\r\n\r\nSince this test checks against std::string, we go ahead and include that\r\nother header from the STL.\r\n\r\nAlso modifies the new test we introduced to also run on std::string, but\r\nit just does the append without expecting anything about how its data is\r\nstored. We also check that the string has the right value afterwards.","shortMessageHtmlLink":"Fix some memory issues with ctl::string (#1201)"}},{"before":"03b476f9432bd0f8a4df05ba463044f41fcdfb38","after":"f3effcb7036fb00b08d66d6a4eff57003a7bdad8","ref":"refs/heads/master","pushedAt":"2024-06-07T01:02:55.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"One more SSO erratum from #1199\n\nMaking a string_view from a string appears to take about 1.3ns no matter\nwhat. 100% definitely no point deviating from the STL API over that.","shortMessageHtmlLink":"One more SSO erratum from #1199"}},{"before":"7391cfa17a200d52bae12f611620e517fdb4af2a","after":"03b476f9432bd0f8a4df05ba463044f41fcdfb38","ref":"refs/heads/master","pushedAt":"2024-06-07T00:57:27.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"Minor small-string errata from #1199\n\nThese commits were sitting on a local branch that I neglected to push\nbefore merging. :(\n\n* Use memcpy for string::reserve\n\n* Remove fence comments","shortMessageHtmlLink":"Minor small-string errata from #1199"}},{"before":"41f802e1a35c66833efb042a8c91dc0a763b2dc5","after":"7391cfa17a200d52bae12f611620e517fdb4af2a","ref":"refs/heads/master","pushedAt":"2024-06-07T00:54:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"Remove fence comments addressed in #1199\n\nHad not pushed this from my local branch. :(","shortMessageHtmlLink":"Remove fence comments addressed in #1199"}},{"before":"8b3e368e9aff07cb285452258fe89171dab6d786","after":"41f802e1a35c66833efb042a8c91dc0a763b2dc5","ref":"refs/heads/master","pushedAt":"2024-06-07T00:53:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"Use memcpy for string::reserve","shortMessageHtmlLink":"Use memcpy for string::reserve"}},{"before":"df6b384e3190a920eff4c26bec50675d2a56dc37","after":"8b3e368e9aff07cb285452258fe89171dab6d786","ref":"refs/heads/master","pushedAt":"2024-06-07T00:50:51.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"ctl::string small-string optimization (#1199)\n\nA small-string optimization is a way of reusing inline storage space for\r\nsufficiently small strings, rather than allocating them on the heap. The\r\ncurrent approach takes after an old Facebook string class: it reuses the\r\nhighest-order byte for flags and small-string size, in such a way that a\r\nmaximally-sized small string will have its last byte zeroed, making it a\r\nnull terminator for the C string.\r\n\r\nThe only flag we have is in the highest-order bit, that says whether the\r\nstring is big (set) or small (cleared.) Most of the logic switches based\r\non the value of this bit; e.g. data() returns big()->p if it's set, else\r\nsmall()->buf if it's cleared. For a small string, the capacity is always\r\nfixed at sizeof(string) - 1 bytes; we store the length in the last byte,\r\nbut we store it as the number of remaining bytes of capacity, so that at\r\nmax size, the last byte will read zero and serve as our null terminator.\r\n\r\nMorally speaking, our class's storage is a union over two POD C structs.\r\nFor now I gravitated towards a slightly more obtuse approach: the string\r\nclass itself contains a blob of the right size, and we alias that blob's\r\npointer for the two structs, taking some care not to run afoul of object\r\nlifetime rules in C++. If anyone wants to improve on this, contributions\r\nare welcome.\r\n\r\nThis commit also introduces the `ctl::__` namespace. It can't be legally\r\nspelled by library users, and serves as our version of boost's \"detail\".\r\n\r\nWe introduced a string::swap function, and we now use that in operator=.\r\noperator= now takes its argument by value, so we never need to check for\r\nthe case where the pointers are equal and can just swap the entire store\r\nof the argument with our own, leaving the C++ destructor to free our old\r\nstorage afterwards.\r\n\r\nThere are probably still a few places where our capacity is slightly off\r\nand we grow too fast, although there don't appear to be any where we are\r\ntoo slow. I will leave these to be fixed in future changes.","shortMessageHtmlLink":"ctl::string small-string optimization (#1199)"}},{"before":"26d13cf455134ae292da42eb49a0fa43ad615967","after":null,"ref":"refs/heads/github-issue-template","pushedAt":"2024-06-06T13:00:28.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mofosyne","name":"Brian","path":"/mofosyne","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/827793?s=80&v=4"}},{"before":"a15f544a4b8ff3418471674143d5972e1ea64f09","after":null,"ref":"refs/heads/github-labeler","pushedAt":"2024-06-06T13:00:26.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mofosyne","name":"Brian","path":"/mofosyne","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/827793?s=80&v=4"}},{"before":"280bdec817eb7e9f48371d5132ee01cd804f147d","after":"df6b384e3190a920eff4c26bec50675d2a56dc37","ref":"refs/heads/master","pushedAt":"2024-06-06T12:51:36.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"github: add labeler action (#1196)\n\nBit easier to do this as everything seems to be sorted into logical\r\nfolders. You may need to add new labels to support this however.","shortMessageHtmlLink":"github: add labeler action (#1196)"}},{"before":"2c5e7ec54785b80a92ab85939335d76b577f3695","after":"280bdec817eb7e9f48371d5132ee01cd804f147d","ref":"refs/heads/master","pushedAt":"2024-06-06T12:51:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"github: add issue template (#1195)\n\ncopy paste and adapted from llamafile but added a research template as\r\nwell for the more technical research tickets","shortMessageHtmlLink":"github: add issue template (#1195)"}},{"before":"fdcb8b2f7ea72aedf389dbb00fd68e7de6f8017f","after":"2c5e7ec54785b80a92ab85939335d76b577f3695","ref":"refs/heads/master","pushedAt":"2024-06-06T03:38:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"Add terminating :vi on some modelines\n\nNoticed because the settings they specified weren't getting picked up by\neditor sessions in those files.","shortMessageHtmlLink":"Add terminating :vi on some modelines"}},{"before":"cc2c1893c5fd34f8289484df22a9c324ac6ace6a","after":"fdcb8b2f7ea72aedf389dbb00fd68e7de6f8017f","ref":"refs/heads/master","pushedAt":"2024-06-05T23:36:57.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"mrdomino","name":"Jōshin","path":"/mrdomino","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/23019?s=80&v=4"},"commit":{"message":"add formatting commit","shortMessageHtmlLink":"add formatting commit"}},{"before":"3093f0e4677dab4e4724d1470017d0d17921d35a","after":"cc2c1893c5fd34f8289484df22a9c324ac6ace6a","ref":"refs/heads/master","pushedAt":"2024-06-05T11:08:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"Fix some nits","shortMessageHtmlLink":"Fix some nits"}},{"before":"3609f65de3d9e1a1702363c0545fd7b895dabf83","after":"3093f0e4677dab4e4724d1470017d0d17921d35a","ref":"refs/heads/master","pushedAt":"2024-06-05T10:34:41.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"Release Cosmopolitan v3.4.0","shortMessageHtmlLink":"Release Cosmopolitan v3.4.0"}},{"before":"8363e2097640f0f711a17d58064501e7f671da56","after":"3609f65de3d9e1a1702363c0545fd7b895dabf83","ref":"refs/heads/master","pushedAt":"2024-06-05T09:04:52.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"Make malloc() go 200x faster\n\nIf pthread_create() is linked into the binary, then the cosmo runtime\nwill create an independent dlmalloc arena for each core. Whenever the\nmalloc() function is used it will index `g_heaps[sched_getcpu() / 2]`\nto find the arena with the greatest hyperthread / numa locality. This\nmay be configured via an environment variable. For example if you say\n`export COSMOPOLITAN_HEAP_COUNT=1` then you can restore the old ways.\nYour process may be configured to have anywhere between 1 - 128 heaps\n\nWe need this revision because it makes multithreaded C++ applications\nfaster. For example, an HTTP server I'm working on that makes extreme\nuse of the STL went from 16k to 2000k requests per second, after this\nchange was made. To understand why, try out the malloc_test benchmark\nwhich calls malloc() + realloc() in a loop across many threads, which\nsees a a 250x improvement in process clock time and 200x on wall time\n\nThe tradeoff is this adds ~25ns of latency to individual malloc calls\ncompared to MODE=tiny, once the cosmo runtime has transitioned into a\nfully multi-threaded state. If you don't need malloc() to be scalable\nthen cosmo provides many options for you. For starters the heap count\nvariable above can be set to put the process back in single heap mode\nplus you can go even faster still, if you include tinymalloc.inc like\nmany of the programs in tool/build/.. are already doing since that'll\nshave tens of kb off your binary footprint too. Theres also MODE=tiny\nwhich is configured to use just 1 plain old dlmalloc arena by default\n\nAnother tradeoff is we need more memory now (except in MODE=tiny), to\ntrack the provenance of memory allocation. This is so allocations can\nbe freely shared across threads, and because OSes can reschedule code\nto different CPUs at any time.","shortMessageHtmlLink":"Make malloc() go 200x faster"}},{"before":"9906f299bb07e2cb871eefb9f3f492096fe58a82","after":"8363e2097640f0f711a17d58064501e7f671da56","ref":"refs/heads/master","pushedAt":"2024-06-05T08:58:56.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"Make malloc() go 200x faster\n\nIf pthread_create() is linked into the binary, then the cosmo runtime\nwill create an independent dlmalloc arena for each core. Whenever the\nmalloc() function is used it will index `g_heaps[sched_getcpu() / 2]`\nto find the arena with the greatest hyperthread / numa locality. This\nmay be configured via an environment variable. For example if you say\n`export COSMOPOLITAN_HEAP_COUNT=1` then you can restore the old ways.\nYour process may be configured to have anywhere between 1 - 128 heaps\n\nWe need this revision because it makes multithreaded C++ applications\nfaster. For example, an HTTP server I'm working on that makes extreme\nuse of the STL went from 16k to 2000k requests per second, after this\nchange was made. To understand why, try out the malloc_test benchmark\nwhich calls malloc() + realloc() in a loop across many threads, which\nsees a a 250x improvement in process clock time and 200x on wall time\n\nThe tradeoff is this adds ~25ns of latency to individual malloc calls\ncompared to MODE=tiny, once the cosmo runtime has transitioned into a\nfully multi-threaded state. If you don't need malloc() to be scalable\nthen cosmo provides many options for you. For starters the heap count\nvariable above can be set to put the process back in single heap mode\nplus you can go even faster still, if you include tinymalloc.inc like\nmany of the programs in tool/build/.. are already doing since that'll\nshave tens of kb off your binary footprint too. Theres also MODE=tiny\nwhich is configured to use just 1 plain old dlmalloc arena by default\n\nAnother tradeoff is we need more memory now (except in MODE=tiny), to\ntrack which provenance of each memory allocation. You may freely pass\nmemory allocations between threads. The OS might reschedule your code\nto a different CPU too. And in all these cases one arena will know to\npunt an free() call for instance back to the original malloc() arena.","shortMessageHtmlLink":"Make malloc() go 200x faster"}},{"before":"1d8f37a2f092af0a973db7be61699ae53c53b0ed","after":"9906f299bb07e2cb871eefb9f3f492096fe58a82","ref":"refs/heads/master","pushedAt":"2024-06-04T12:46:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"Refactor and improve CTL and other code","shortMessageHtmlLink":"Refactor and improve CTL and other code"}},{"before":"e677460d140df79cda014c474a07caa40f20a540","after":"1d8f37a2f092af0a973db7be61699ae53c53b0ed","ref":"refs/heads/master","pushedAt":"2024-06-03T17:36:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"Fix the MODE=tiny builds","shortMessageHtmlLink":"Fix the MODE=tiny builds"}},{"before":"4937843f70c802020f024f11a96685b11a5de8f4","after":"e677460d140df79cda014c474a07caa40f20a540","ref":"refs/heads/master","pushedAt":"2024-06-03T16:42:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"Delete .vscode folder\n\nIt hasn't been maintained in years. I'm tired of the root level of our\nproject having an advertisement for Microsoft Visual Studio Code. Your\npreferred editor should be Emacs or Vim.","shortMessageHtmlLink":"Delete .vscode folder"}},{"before":"b003888696d4496691a9d5dddc59a8e88cb930dc","after":"4937843f70c802020f024f11a96685b11a5de8f4","ref":"refs/heads/master","pushedAt":"2024-06-03T16:37:02.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"Introduce Cosmopolitan Templates Library (CTL)","shortMessageHtmlLink":"Introduce Cosmopolitan Templates Library (CTL)"}},{"before":"2ca491dc5643dff5e2bcc9e76cf6eb0d797c5bb8","after":"b003888696d4496691a9d5dddc59a8e88cb930dc","ref":"refs/heads/master","pushedAt":"2024-06-02T23:18:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jart","name":"Justine Tunney","path":"/jart","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49262?s=80&v=4"},"commit":{"message":"Make __demangle() heap 10% more compact","shortMessageHtmlLink":"Make __demangle() heap 10% more compact"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEYcnNhwA","startCursor":null,"endCursor":null}},"title":"Activity · jart/cosmopolitan"}