{
"path": "/3m5wtjn7dpk2g",
"site": "at://did:plc:xg2vq45muivyy3xwatcehspu/site.standard.publication/3m3zpxhfl3c2s",
"$type": "site.standard.document",
"title": "Dev Log 19: 2025-11-18",
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "Primary"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [
{
"index": {
"byteEnd": 12,
"byteStart": 8
},
"features": [
{
"uri": "https://github.com/stormlightlabs/beacon",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 17,
"byteStart": 13
},
"features": [
{
"uri": "https://stormlightlabs.github.io/beacon/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "Beacon (code/docs)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 91,
"byteStart": 87
},
"features": [
{
"uri": "https://stormlightlabs.github.io/beacon/#core-capabilities",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 115,
"byteStart": 107
},
"features": [
{
"uri": "https://x.com/_desertthunder/status/1990861830927929364",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "I updated the documentation to feature the core capabilities of the LSP implementation here thanks to some feedback (warning: it's on the everything app) I got!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "The work I did today solidified constraints and bounds around type variables in the type checker. Basically to fulfill:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.blockquote",
"facets": [],
"plaintext": "Type variables give us the space of possible types. Constraints carve out the subset of that space which is actually allowed"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "Secondary"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [
{
"index": {
"byteEnd": 13,
"byteStart": 9
},
"features": [
{
"uri": "https://tangled.org/desertthunder.dev/lantern",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "Lantern (code)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Speaking of feedback, a nice user opened an issue about an inaccuracy in the README and it's been fixed. I hope I get more of that! Feels good man!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 138,
"byteStart": 133
},
"features": [
{
"uri": "https://github.com/maaslalani/slides",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 223,
"byteStart": 221
},
"features": [
{
"uri": "https://pkg.go.dev/github.com/charmbracelet/lipgloss/v2#LightDarkFunc",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 290,
"byteStart": 270
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
},
{
"uri": "https://docs.rs/terminal-colorsaurus/latest/terminal_colorsaurus/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 355,
"byteStart": 332
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
]
}
],
"plaintext": "Do you ever try to solve a problem and then discover it's been solved already? I've been making a rust version of one of my favorite tools and needed to figure out how to make a light/dark detector like charm's lipgloss (v2). I discovered a crate that does that for me! terminal-colorsaurus abstracts the results in to enum members ThemeMode::Light | Dark"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Here's what I learned:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.unorderedList",
"children": [
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "OSC (Operating System Commands) 10 and 11 are terminal escape sequences used to get or set the terminal’s default foreground and background colors."
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 87,
"byteStart": 45
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
]
}
],
"plaintext": "In xterm’s control sequence documentation, OSC 10 and 11 are \"dynamic color\" commands:"
},
"children": [
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 6,
"byteStart": 0
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
]
},
{
"index": {
"byteEnd": 39,
"byteStart": 16
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "OSC 10: default text (foreground) color"
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 6,
"byteStart": 0
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
]
},
{
"index": {
"byteEnd": 32,
"byteStart": 16
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "OSC 11: default background color"
},
"children": []
}
]
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 17,
"byteStart": 13
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "They support both setting and querying."
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 34,
"byteStart": 17
},
"features": [
{
"uri": "https://ghostty.org/docs/config/reference#osc-color-report-format",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 78,
"byteStart": 60
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
]
}
],
"plaintext": "One of Ghostty's reporting formats for OSC 10/11 queries is rgb:RRRR/GGGG/BBBB"
},
"children": [
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "16-bit per channel hex numbers (scaled up)"
},
"children": []
}
]
}
]
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Also, check this out! We got admonitions!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"alt": "screenshot of lantern's admonition support",
"$type": "pub.leaflet.blocks.image",
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreiglpe3qgyxne2n2nuw2l2vlsj4bg4hhw6urz4jdd7ymmu7qcuv7um"
},
"mimeType": "image/png",
"size": 354716
},
"aspectRatio": {
"width": 2042,
"height": 1424
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [
{
"index": {
"byteEnd": 20,
"byteStart": 16
},
"features": [
{
"uri": "https://github.com/desertthunder/garden",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 25,
"byteStart": 21
},
"features": [
{
"uri": "https://desertthunder.github.io/garden/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "Digital Garden (code/site)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 66,
"byteStart": 60
},
"features": [
{
"uri": "https://github.com/HiDeoo/starlight-links-validator",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "I fixed the links in my digital garden by using a validator plugin. I also changed the theme to something more my style. Soon I'll be able to remove that remodeling warning/admonition."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 52,
"byteStart": 37
},
"features": [
{
"uri": "https://desertthunder.github.io/garden/programming/functional_programming/hindley_milner/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 94,
"byteStart": 88
},
"features": [
{
"uri": "https://desertthunder.github.io/garden/engineering/general/osc-10-11/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "There's some new unfinished notes on hm type systems. The OSC stuff above is also in my garden"
}
}
]
}
]
},
"bskyPostRef": {
"cid": "bafyreidjpciz2x3gfiy3acohuihcim6ed5jg7ness5f6pzn2oai2o57efy",
"uri": "at://did:plc:xg2vq45muivyy3xwatcehspu/app.bsky.feed.post/3m5wtjs2tcc2g",
"commit": {
"cid": "bafyreihj2nuexcuj6xxar7kbcyvgatkkj2edvuilipxgv2qkpeifm6ii54",
"rev": "3m5wtjs6fxn2s"
},
"validationStatus": "valid"
},
"description": "Feedback is a gift",
"publishedAt": "2025-11-18T22:56:18.957Z"
}