{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":399179929,"defaultBranch":"main","name":"swarm","ownerLogin":"swarm-game","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2021-08-23T16:47:47.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/101472928?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1726762944.0","currentOid":""},"activityList":{"items":[{"before":null,"after":"f6178ba6146cac062d066058d083375dd8ab8725","ref":"refs/heads/structures/coordinate-offset","pushedAt":"2024-09-19T16:22:24.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"fix placement offsets","shortMessageHtmlLink":"fix placement offsets"}},{"before":"8bde244285f2211fd13e1f3c166f2d08946a09f3","after":null,"ref":"refs/heads/feature/wall-boundaries","pushedAt":"2024-09-19T03:25:58.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"}},{"before":"671fd0f7530bf168a8bc4dade042e1a25c842085","after":"99ab1ce73e45d1da320d0e3019322ef85df93fb1","ref":"refs/heads/main","pushedAt":"2024-09-19T03:25:54.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Render contiguous boundaries (#1285)\n\nCloses #1271\n\n## Demo\n\n scripts/play.sh --scenario data/scenarios/Testing/1271-wall-boundaries.yaml --autoplay\n\n![Screenshot from 2024-09-18 09-27-14](https://github.com/user-attachments/assets/5e4ac74f-3f8c-487a-97d2-78e2320f93bb)\n\n## Implementation\n\nThis implements neighbor-aware boundary rendering strictly on the display layer. Underlying entities remain unchanged (for the purpose of world cell contents and e.g. `scan`). Eventually we should be able to retire all of the niche boundary glyph entities.\n\nOnly a single function `getBoundaryDisplay` is exposed for computing the glyph appropriate for adjacent boundaries. It takes a function from `AbsoluteDir -> Bool` indicating whether the neighbor cell in a particular direction is (also) a \"boundary\" entity.\n\nThe internal `glyphForNeighbors` function is implemented with pattern-matching such that exhaustive coverage of cases is guaranteed.","shortMessageHtmlLink":"Render contiguous boundaries (#1285)"}},{"before":"118e874175b94ddfe2701474f6679bf0e0e0530a","after":"8bde244285f2211fd13e1f3c166f2d08946a09f3","ref":"refs/heads/feature/wall-boundaries","pushedAt":"2024-09-18T16:46:25.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"Implement boundary rendering","shortMessageHtmlLink":"Implement boundary rendering"}},{"before":"96a06aeb6a40f7b1f05e480f14a96678541f3cdf","after":"118e874175b94ddfe2701474f6679bf0e0e0530a","ref":"refs/heads/feature/wall-boundaries","pushedAt":"2024-09-18T16:39:27.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"Implement boundary rendering","shortMessageHtmlLink":"Implement boundary rendering"}},{"before":"4290de2df0923c96b96d579d21c14b695db032c0","after":"96a06aeb6a40f7b1f05e480f14a96678541f3cdf","ref":"refs/heads/feature/wall-boundaries","pushedAt":"2024-09-18T16:30:10.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"Implement boundary rendering","shortMessageHtmlLink":"Implement boundary rendering"}},{"before":"e5843f24a63f46856dfe3424d62fe83480191b86","after":"4290de2df0923c96b96d579d21c14b695db032c0","ref":"refs/heads/feature/wall-boundaries","pushedAt":"2024-09-18T07:03:28.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"Implement boundary rendering","shortMessageHtmlLink":"Implement boundary rendering"}},{"before":"42eb3fd613ef52ffe4dcc9e171d2cffc6d9e6b85","after":"e5843f24a63f46856dfe3424d62fe83480191b86","ref":"refs/heads/feature/wall-boundaries","pushedAt":"2024-09-18T07:00:29.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"Implement boundary rendering","shortMessageHtmlLink":"Implement boundary rendering"}},{"before":"4646cb0fa95d27a41c8ae15ee8632fc40be2ea0b","after":"42eb3fd613ef52ffe4dcc9e171d2cffc6d9e6b85","ref":"refs/heads/feature/wall-boundaries","pushedAt":"2024-09-18T06:47:45.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"Implement boundary rendering","shortMessageHtmlLink":"Implement boundary rendering"}},{"before":"71847c879a2071a74193d3365dd58de2899d2103","after":"4646cb0fa95d27a41c8ae15ee8632fc40be2ea0b","ref":"refs/heads/feature/wall-boundaries","pushedAt":"2024-09-18T06:40:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"Implement boundary rendering","shortMessageHtmlLink":"Implement boundary rendering"}},{"before":"f29e85363e3ec3db33f3dcc54a869a04c4841616","after":null,"ref":"refs/heads/feature/navigable-robot-dialog","pushedAt":"2024-09-17T18:28:44.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"}},{"before":"c2a3220f627e0c77adab6c6642ed3cbeaa5f7ce9","after":"671fd0f7530bf168a8bc4dade042e1a25c842085","ref":"refs/heads/main","pushedAt":"2024-09-17T18:28:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"navigable robots table (#2140)\n\nTowards #1341. Should also be useful for #2133.\n\n![Screenshot from 2024-09-09 22-04-10](https://github.com/user-attachments/assets/f2813cb0-be12-4299-8e4b-e745e930427e)\n\nUses the [`brick-tabular-list`](https://hackage.haskell.org/package/brick-tabular-list) package to render the F2 robots dialog as a navigable list with tabular formatting. Hitting Tab on a selected row shows details for that robot.\n\nAlso:\n* Extracts some record definitions from `Swarm.TUI.Model.UI` into `Swarm.TUI.Model.UI.Gameplay`\n* Removes re-export of the `Name` type from `Swarm.TUI.Model`\n* Replace uses of `maximum` with the safer `maximum0`\n* New `applyJust` combinator\n\n## Testing\n### Showing a large robots list\n```\nscripts/play.sh -i data/scenarios/Challenges/Ranching/beekeeping.yaml --debug all_robots --speed 2 --autoplay\n```\nand with extra column:\n```\nscripts/play.sh -i data/scenarios/Challenges/Ranching/beekeeping.yaml --debug all_robots,robot_id --speed 2 --autoplay\n```\n\n### Showing a small robots list with details view and logs\n\n```\nscripts/play.sh -i data/scenarios/Testing/562-lodestone.yaml --debug all_robots,robot_id --speed 2 --autoplay\n```\n\nLog view:\n![Screenshot from 2024-09-13 17-25-23](https://github.com/user-attachments/assets/17e3fb6d-5d86-48b6-aeac-db28f37ae854)","shortMessageHtmlLink":"navigable robots table (#2140)"}},{"before":"cbaaf22f37339dde89cb8e7b32a3e489ee9f196b","after":"f29e85363e3ec3db33f3dcc54a869a04c4841616","ref":"refs/heads/feature/navigable-robot-dialog","pushedAt":"2024-09-17T18:12:53.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Merge branch 'main' into feature/navigable-robot-dialog","shortMessageHtmlLink":"Merge branch 'main' into feature/navigable-robot-dialog"}},{"before":"c5d2d414c42b65c710acf37f5a203da101a49a03","after":"71847c879a2071a74193d3365dd58de2899d2103","ref":"refs/heads/feature/wall-boundaries","pushedAt":"2024-09-17T15:03:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"add datastructure","shortMessageHtmlLink":"add datastructure"}},{"before":"fd0b10093ed5d081381af39b68653ce20793e798","after":"c5d2d414c42b65c710acf37f5a203da101a49a03","ref":"refs/heads/feature/wall-boundaries","pushedAt":"2024-09-17T00:18:15.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"add test","shortMessageHtmlLink":"add test"}},{"before":"1454b309e029777dd8dadfc31a3a74ff1c59deca","after":null,"ref":"refs/heads/testing/structure-expansion","pushedAt":"2024-09-16T20:15:17.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"}},{"before":"ab13170f4c3d47e6fb3e44d3ec1c86aa91451575","after":"c2a3220f627e0c77adab6c6642ed3cbeaa5f7ce9","ref":"refs/heads/main","pushedAt":"2024-09-16T20:14:44.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Fix growable structure grids for multiple children with negative coordinates (#2127)\n\nFixes a bug from #1826.\n\n## Background\n\nStructure definitions can be nested, in that a structure can reference and place multiple \"substructures\", each with an \"offset\", to compose something more complicated. Each placement onto a particular \"base\" structure is a \"child\". Multiple child placements atop the same base structure are \"siblings\".\n\nIt so happened that if a child placement with a \"negative\" horizontal offset preceded a sibling with non-negative offset, this would result in miscalculated placements. This had to do with the fact that \"growing\" the \"base grid\" in the negative direction means that the original \"origin\" (that the \"offset\" of subsequent placements are made with respect to) of the base grid must be shifted further right (to somewhere in the middle of the grid), rather than lying on the left edge.\n\nConversely, if negative offsets occurred as later siblings, then the placement would be correct (the bug would not be triggered).\n\n## The fix\n\nThis fix ensures that sibling placements can be re-ordered without affecting the end result. There were actually two bugs:\n* changes to the origin offset were not propagated between sibling placements (i.e. across iterations of [`foldlM`](https://github.com/swarm-game/swarm/blob/ab13170f4c3d47e6fb3e44d3ec1c86aa91451575/src/swarm-topography/Swarm/Game/Scenario/Topography/Structure/Assembly.hs#L84))\n* the math for computing combined offset (`originDelta` in the `Semigroup` instance of `PositionedGrid`) was incorrect.\n\n## Other changes\nAlso implements a `--refresh` option to the `standalone-topography` test for updating image-based test fixtures.\n\n## Bug repro\n```\nscripts/play.sh -i data/scenarios/Testing/1780-structure-merge-expansion/sequential-placement.yaml\n```\n| Before (incorrect) | After (correct) |\n| --- | --- |\n| ![broken](https://github.com/user-attachments/assets/47952f83-b877-4fc2-b6b7-8ceb495e8ba0)| ![fixed](https://github.com/user-attachments/assets/907d8872-bff0-4c41-b1c4-8561bf206b4a) |\n\n# Refreshing test images\n```\nscripts/test/run-tests.sh standalone-topography --test-options '--refresh'\n```","shortMessageHtmlLink":"Fix growable structure grids for multiple children with negative coor…"}},{"before":"ffaf710800f1b71bca4b4daa44ea8aefc9d0c1ce","after":"1454b309e029777dd8dadfc31a3a74ff1c59deca","ref":"refs/heads/testing/structure-expansion","pushedAt":"2024-09-16T19:59:23.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Merge branch 'main' into testing/structure-expansion","shortMessageHtmlLink":"Merge branch 'main' into testing/structure-expansion"}},{"before":"5455c996a61265921e08efc2536acfc89866ecc2","after":"ffaf710800f1b71bca4b4daa44ea8aefc9d0c1ce","ref":"refs/heads/testing/structure-expansion","pushedAt":"2024-09-16T19:43:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"add todo reference","shortMessageHtmlLink":"add todo reference"}},{"before":null,"after":"8aba55886cc1a209db83b612209cf641224302ed","ref":"refs/heads/feature/import3","pushedAt":"2024-09-16T19:16:50.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"byorgey","name":"Brent Yorgey","path":"/byorgey","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/533859?s=80&v=4"},"commit":{"message":"[wip] import ... in ... syntax","shortMessageHtmlLink":"[wip] import ... in ... syntax"}},{"before":"5037deb3fd753840a80afae634cf29012019b559","after":null,"ref":"refs/heads/nitin/macos-release","pushedAt":"2024-09-16T18:32:15.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"}},{"before":"1edf55d244bd14467a9ebf8ae9c8318904bcacbe","after":"ab13170f4c3d47e6fb3e44d3ec1c86aa91451575","ref":"refs/heads/main","pushedAt":"2024-09-16T18:31:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Generate github release executables for macos (#2046)\n\nChanges include:\n- Generating executables for macos (x64 and arm)\n- Simplifications to GHC and cabal setup\n- Bump GH release action\n- Use `softprops/action-gh-release@v1` for uploading release assets instead of archived `actions/upload-release-asset@v1.0.1`\n\nExample release set: https://github.com/nitinprakash96/swarm-copy/releases/tag/0.8.2.8\nAnd workflow: https://github.com/nitinprakash96/swarm-copy/actions/runs/10808335665","shortMessageHtmlLink":"Generate github release executables for macos (#2046)"}},{"before":"9a01a1b880659c3ff50da35543e78c093ae272ad","after":"5037deb3fd753840a80afae634cf29012019b559","ref":"refs/heads/nitin/macos-release","pushedAt":"2024-09-16T18:30:56.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Merge branch 'main' into nitin/macos-release","shortMessageHtmlLink":"Merge branch 'main' into nitin/macos-release"}},{"before":"0443bc284fea02cf3c5d33e353cbc4cc0b5bdbd5","after":"5455c996a61265921e08efc2536acfc89866ecc2","ref":"refs/heads/testing/structure-expansion","pushedAt":"2024-09-16T16:32:45.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"helper function","shortMessageHtmlLink":"helper function"}},{"before":"f5b70f31548cfd30af6356ba8b1d9aabf6fcc287","after":"0443bc284fea02cf3c5d33e353cbc4cc0b5bdbd5","ref":"refs/heads/testing/structure-expansion","pushedAt":"2024-09-16T06:29:33.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"helper function","shortMessageHtmlLink":"helper function"}},{"before":"6c93e283b7768a7c9ae68f2e3704a2b2d3a090d9","after":"f5b70f31548cfd30af6356ba8b1d9aabf6fcc287","ref":"refs/heads/testing/structure-expansion","pushedAt":"2024-09-16T06:12:24.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"fix positioning bug with negative coordinates","shortMessageHtmlLink":"fix positioning bug with negative coordinates"}},{"before":"12f8ae3eb5be4bd0bb834b8869d98c48e736faf3","after":null,"ref":"refs/heads/restyled/testing/structure-expansion","pushedAt":"2024-09-16T06:00:59.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"restyled-io[bot]","name":null,"path":"/apps/restyled-io","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/5851?s=80&v=4"}},{"before":"2cfc312c3fdd849c5c1ec50359ed8cd99ae73e0d","after":"6c93e283b7768a7c9ae68f2e3704a2b2d3a090d9","ref":"refs/heads/testing/structure-expansion","pushedAt":"2024-09-16T06:00:50.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"fix positioning bug with negative coordinates","shortMessageHtmlLink":"fix positioning bug with negative coordinates"}},{"before":"85d76d3c45fed7997f17d1454cbd0f967a7cdf66","after":"12f8ae3eb5be4bd0bb834b8869d98c48e736faf3","ref":"refs/heads/restyled/testing/structure-expansion","pushedAt":"2024-09-16T02:47:38.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"restyled-io[bot]","name":null,"path":"/apps/restyled-io","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/5851?s=80&v=4"},"commit":{"message":"Restyled by fourmolu","shortMessageHtmlLink":"Restyled by fourmolu"}},{"before":"6e7278d4625242424ca56a5d9f3a7b3b7bf93830","after":"2cfc312c3fdd849c5c1ec50359ed8cd99ae73e0d","ref":"refs/heads/testing/structure-expansion","pushedAt":"2024-09-16T02:47:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kostmo","name":"Karl Ostmo","path":"/kostmo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/261693?s=80&v=4"},"commit":{"message":"possibly fixed","shortMessageHtmlLink":"possibly fixed"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xOVQxNjoyMjoyNC4wMDAwMDBazwAAAAS7FpLg","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xOVQxNjoyMjoyNC4wMDAwMDBazwAAAAS7FpLg","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xNlQwMjo0NzozMy4wMDAwMDBazwAAAAS2_QXf"}},"title":"Activity · swarm-game/swarm"}