gabby's Avatar

gabby

@fullmoon.id

Author of haskellforall.com, dhall-lang.org and @trygrace.dev, professional doggirl and endurance hunter I'm a midwife to the hidden beauty in everything she/her ๐Ÿณ๏ธโ€โšง๏ธ https://linktr.ee/gabriella439 ๐Ÿ’– @ember.pet

1,737
Followers
134
Following
2,616
Posts
07.11.2024
Joined
Posts Following

Latest posts by gabby @fullmoon.id

violence is the first refuge of the dominant

07.03.2026 04:13 ๐Ÿ‘ 5 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

beautiful women named "Series B startup in growth mode!" keep messaging me

07.03.2026 00:10 ๐Ÿ‘ 19 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
Post image

Day002 ๐Ÿ˜˜

03.01.2026 03:03 ๐Ÿ‘ 1354 ๐Ÿ” 237 ๐Ÿ’ฌ 4 ๐Ÿ“Œ 0
Post image

Late madohomu valentines on the off chance bluesky gives me greater mileage for once lol #pmmm #madokamagica #madohomu #้ญ”ๆณ•ๅฐ‘ๅฅณใพใฉใ‹ใƒžใ‚ฎใ‚ซ

15.02.2026 07:56 ๐Ÿ‘ 61 ๐Ÿ” 20 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
programmers are always posting like "worked on tracking down an issue with a Flurble deployment for twelve hours. the problem wasn't in Flurble at all - it was in the Gumbies install. It turns out if you install Gumbies 3.0 over Gumbies 2.7 and don't do a cache flush on all the client spiders they'll get stuck in the crystal maze." then you look up Gumbies and the site is one of those scroll scroll scroll types with one sentence per page, like

"GUMBIES is a lean, expressive sharding sandcube for testing and deploying large scale Woodchips playgrounds.

GUMBIES automates and streamlines away watersliding phases, meaning your team can get right to the chipping.

See why Microsoft, OpenAI and Bloingo have embraced GUMBIES in their Woodchips workflows."

and you get to the bottom and you're like I want this I guess but I still don't know what it is

programmers are always posting like "worked on tracking down an issue with a Flurble deployment for twelve hours. the problem wasn't in Flurble at all - it was in the Gumbies install. It turns out if you install Gumbies 3.0 over Gumbies 2.7 and don't do a cache flush on all the client spiders they'll get stuck in the crystal maze." then you look up Gumbies and the site is one of those scroll scroll scroll types with one sentence per page, like "GUMBIES is a lean, expressive sharding sandcube for testing and deploying large scale Woodchips playgrounds. GUMBIES automates and streamlines away watersliding phases, meaning your team can get right to the chipping. See why Microsoft, OpenAI and Bloingo have embraced GUMBIES in their Woodchips workflows." and you get to the bottom and you're like I want this I guess but I still don't know what it is

06.03.2026 20:59 ๐Ÿ‘ 76 ๐Ÿ” 14 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

Yeah, part of the reason why I care about the quality of the underlying process/code is because when it is bad then the cost (in tokens and in human engineering time) of creating a โ€œcorrect-solution shaped holeโ€ becomes enormous

06.03.2026 17:21 ๐Ÿ‘ 3 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
Post image Post image
23.06.2025 19:44 ๐Ÿ‘ 818 ๐Ÿ” 197 ๐Ÿ’ฌ 5 ๐Ÿ“Œ 3
Victoryโ€ฆ?

Floors Climbed: 48
Elites Killed: 8
Gold Gained: 888
Small Deck: 18
Well Fed: 17

Victoryโ€ฆ? Floors Climbed: 48 Elites Killed: 8 Gold Gained: 888 Small Deck: 18 Well Fed: 17

finished my first slay the spire 2 run

06.03.2026 06:21 ๐Ÿ‘ 10 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

yeah but that also suggests that the modelโ€™s understanding is not generalizing well if it underperforms that badly on a language of haskellโ€™s size

06.03.2026 03:32 ๐Ÿ‘ 4 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

This is why I don't believe when people say the agent did all the work. There is no way you can convince me that the people using these models to code aren't heavily babysitting the models (either with prompts or a giant repository of rules telling the model "please stop doing the stupid thing")

06.03.2026 02:27 ๐Ÿ‘ 13 ๐Ÿ” 0 ๐Ÿ’ฌ 5 ๐Ÿ“Œ 0

In case people are wondering, this is using Opus 4.6, their "latest and greatest" coding model

Do you see why I can't take agentic coding seriously?! Even when you slap on tool use and reasoning it's trying to come up with a valid solution by Brownian motion. No wonder it wastes so many tokens

06.03.2026 02:23 ๐Ÿ‘ 18 ๐Ÿ” 1 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
when :: Bool -> IO () -> IO ()
when True  m = m
when False _ = return ()

unless :: Bool -> IO () -> IO ()
unless b = when (not b)

when :: Bool -> IO () -> IO () when True m = m when False _ = return () unless :: Bool -> IO () -> IO () unless b = when (not b)

Claude I'm so proud of you for reimplementing these trivial utilities which already existed in `base`. I'm so proud that I'm going to hang these up on my fridge

06.03.2026 02:23 ๐Ÿ‘ 11 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
(<|>) :: Maybe a -> Maybe a -> Maybe a
Nothing <|> b = b
a       <|> _ = a

-- Reuse Data.Maybe version instead:
import Data.Maybe (fromMaybe)

(<|>) :: Maybe a -> Maybe a -> Maybe a Nothing <|> b = b a <|> _ = a -- Reuse Data.Maybe version instead: import Data.Maybe (fromMaybe)

Sometimes Claude gets it right and actually imports a function from `base` instead of reimplementing the function

Oops, wait, the `import` is in the middle of the code, which is not legal Haskell. Apparently Claude can't even get that right?

06.03.2026 02:23 ๐Ÿ‘ 8 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
(<|>) :: Maybe a -> Maybe a -> Maybe a
Nothing <|> b = b
a       <|> _ = a

(<|>) :: Maybe a -> Maybe a -> Maybe a Nothing <|> b = b a <|> _ = a

Why did Claude do that? Because earlier Claude had actually reimplemented the `(<|>)` operator from the `base` package which conflicted with the original operator

Instead of using the `(<|>)` operator from the `base` package Claude "fixed" the error by reimplementing it as a named function โ€ฆ twice

06.03.2026 02:23 ๐Ÿ‘ 12 ๐Ÿ” 0 ๐Ÿ’ฌ 2 ๐Ÿ“Œ 0
-- | Left-biased Maybe: return the first Just, else the second.
firstJust :: Maybe a -> Maybe a -> Maybe a
firstJust (Just a) _ = Just a
firstJust Nothing  b = b

-- | Prefer a non-Nothing value from two, taking the left
firstJustM :: Maybe a -> Maybe a -> Maybe a
firstJustM = firstJust

-- | Left-biased Maybe: return the first Just, else the second. firstJust :: Maybe a -> Maybe a -> Maybe a firstJust (Just a) _ = Just a firstJust Nothing b = b -- | Prefer a non-Nothing value from two, taking the left firstJustM :: Maybe a -> Maybe a -> Maybe a firstJustM = firstJust

Claude defines a `firstJust` function, which already exists in Haskell's standard library (it's the `(<|>)` operator) and then for whatever reason defines a `firstJustM` synonym for the function within the same file. Why do you need two names for the same function within the same file?!?!

06.03.2026 02:23 ๐Ÿ‘ 8 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
readTQueue :: TQueue a -> STM a
readTQueue = Control.Concurrent.STM.readTQueue

readTQueue :: TQueue a -> STM a readTQueue = Control.Concurrent.STM.readTQueue

Okay now this is just fucking stupid. Why are you creating an unqualified synonym for a qualified function of the exact same name. YOU COULD JUST IMPORT THE ORIGINAL FUNCTION UNQUALIFIED?!?!?!

A model should not require **any** context whatsoever to understand what is wrong with this line of code

06.03.2026 02:23 ๐Ÿ‘ 12 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
readTVarIO :: TVar a -> IO a
readTVarIO = atomically . readTVar

readTVarIO :: TVar a -> IO a readTVarIO = atomically . readTVar

Claude, why the *fuck* are you reimplementing `readTVarIO` from Haskell's `stm` package. The package already exports a function with the exact same name and implementation that you can import. You are already importing other things from `Control.Concurrent.STM.TVar`!!!!!!

06.03.2026 02:23 ๐Ÿ‘ 13 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

I cannot overstate how comically bad coding models are.

I was kicking the tires on Claude code while researching agentic coding for a blog post and couldn't help but notice numerous hilarious code fragments scroll past me while passively observing.

I'll mention a few in this thread โ€ฆ

06.03.2026 02:23 ๐Ÿ‘ 41 ๐Ÿ” 3 ๐Ÿ’ฌ 6 ๐Ÿ“Œ 1

instructions unclear. dick stuck in ember

06.03.2026 01:21 ๐Ÿ‘ 3 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
my girl's tits, framed perfectly by her dress

my girl's tits, framed perfectly by her dress

my girl is _such_ a catch

06.03.2026 00:29 ๐Ÿ‘ 23 ๐Ÿ” 1 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

noooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

06.03.2026 00:26 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

paying anthropic $200 each coding session because you've maxed out your claude code sub and are paying direct API prices is literally the vibe coding equivalent of being a whale in gacha games, btw

05.03.2026 21:20 ๐Ÿ‘ 71 ๐Ÿ” 7 ๐Ÿ’ฌ 4 ๐Ÿ“Œ 1

aaaaaaaaaaaaaaaaa i didn't realize today was the slay the spire 2 release day!!!

05.03.2026 21:25 ๐Ÿ‘ 2 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

The spec is 1/6(!) the size of the code and the only reason it's not even higher because the spec omits details that the user would want to remain stable between codegen runs (like UI). Do you really think a user would be okay with the UI changing every time they request a bug fix or new feature?

05.03.2026 20:13 ๐Ÿ‘ 5 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
### 10.2 Session Startup Handshake

Reference: https://developers.openai.com/codex/app-server/

The client must send these protocol messages in order:

Illustrative startup transcript (equivalent payload shapes are acceptable if they preserve the same
semantics):

```json
{"id":1,"method":"initialize","params":{"clientInfo":{"name":"symphony","version":"1.0"},"capabilities":{}}}
{"method":"initialized","params":{}}
{"id":2,"method":"thread/start","params":{"approvalPolicy":"<implementation-defined>","sandbox":"<implementation-defined>","cwd":"/abs/workspace"}}
{"id":3,"method":"turn/start","params":{"threadId":"<thread-id>","input":[{"type":"text","text":"<rendered prompt-or-continuation-guidance>"}],"cwd":"/abs/workspace","title":"ABC-123: Example","approvalPolicy":"<implementation-defined>","sandboxPolicy":{"type":"<implementation-defined>"}}}
```

1. `initialize` request
   - Params include:
     - `clientInfo` object (for example `{name, version}`)
     - `capabilities` object (may be empty)
   - If the targeted Codex app-server requires capability negotiation for dynamic tools, include the
     necessary capability flag(s) here.
   - Wait for response (`read_timeout_ms`)
2. `initialized` notification
3. `thread/start` request
   - Params include:
     - `approvalPolicy` = implementation-defined session approval policy value
     - `sandbox` = implementation-defined session sandbox value
     - `cwd` = absolute workspace path
     - If optional client-side tools are implemented, include their advertised tool specs using the
       protocol mechanism supported by the targeted Codex app-server version.

### 10.2 Session Startup Handshake Reference: https://developers.openai.com/codex/app-server/ The client must send these protocol messages in order: Illustrative startup transcript (equivalent payload shapes are acceptable if they preserve the same semantics): ```json {"id":1,"method":"initialize","params":{"clientInfo":{"name":"symphony","version":"1.0"},"capabilities":{}}} {"method":"initialized","params":{}} {"id":2,"method":"thread/start","params":{"approvalPolicy":"<implementation-defined>","sandbox":"<implementation-defined>","cwd":"/abs/workspace"}} {"id":3,"method":"turn/start","params":{"threadId":"<thread-id>","input":[{"type":"text","text":"<rendered prompt-or-continuation-guidance>"}],"cwd":"/abs/workspace","title":"ABC-123: Example","approvalPolicy":"<implementation-defined>","sandboxPolicy":{"type":"<implementation-defined>"}}} ``` 1. `initialize` request - Params include: - `clientInfo` object (for example `{name, version}`) - `capabilities` object (may be empty) - If the targeted Codex app-server requires capability negotiation for dynamic tools, include the necessary capability flag(s) here. - Wait for response (`read_timeout_ms`) 2. `initialized` notification 3. `thread/start` request - Params include: - `approvalPolicy` = implementation-defined session approval policy value - `sandbox` = implementation-defined session sandbox value - `cwd` = absolute workspace path - If optional client-side tools are implemented, include their advertised tool specs using the protocol mechanism supported by the targeted Codex app-server version.

#### 4.1.1 Issue

Normalized issue record used by orchestration, prompt rendering, and observability output.

Fields:

- `id` (string)
  - Stable tracker-internal ID.
- `identifier` (string)
  - Human-readable ticket key (example: `ABC-123`).
- `title` (string)
- `description` (string or null)
- `priority` (integer or null)
  - Lower numbers are higher priority in dispatch sorting.
- `state` (string)
  - Current tracker state name.
- `branch_name` (string or null)
  - Tracker-provided branch metadata if available.
- `url` (string or null)
- `labels` (list of strings)
  - Normalized to lowercase.
- `blocked_by` (list of blocker refs)
  - Each blocker ref contains:
    - `id` (string or null)
    - `identifier` (string or null)
    - `state` (string or null)
- `created_at` (timestamp or null)
- `updated_at` (timestamp or null)

#### 4.1.1 Issue Normalized issue record used by orchestration, prompt rendering, and observability output. Fields: - `id` (string) - Stable tracker-internal ID. - `identifier` (string) - Human-readable ticket key (example: `ABC-123`). - `title` (string) - `description` (string or null) - `priority` (integer or null) - Lower numbers are higher priority in dispatch sorting. - `state` (string) - Current tracker state name. - `branch_name` (string or null) - Tracker-provided branch metadata if available. - `url` (string or null) - `labels` (list of strings) - Normalized to lowercase. - `blocked_by` (list of blocker refs) - Each blocker ref contains: - `id` (string or null) - `identifier` (string or null) - `state` (string or null) - `created_at` (timestamp or null) - `updated_at` (timestamp or null)

The "spec" is 2000+ lines of markdown which looks like this

This is not a spec. This is code that just happens to be stored in markdown form

05.03.2026 19:49 ๐Ÿ‘ 8 ๐Ÿ” 0 ๐Ÿ’ฌ 2 ๐Ÿ“Œ 0

*taps the sign*

05.03.2026 19:30 ๐Ÿ‘ 21 ๐Ÿ” 2 ๐Ÿ’ฌ 2 ๐Ÿ“Œ 0

"nice language! did your mom pick it out for you?"

05.03.2026 19:23 ๐Ÿ‘ 8 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

"If you understand the problem space" is doing a lot of heavy lifting there

That is, like, the vast majority of the work in software engineering, especially as you become more senior, and the more you lean on the agent the more your understanding of the code and project atrophies

05.03.2026 18:11 ๐Ÿ‘ 4 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

one of the reasons I'm so down on the current state of the AI industry is that I see so much potential in LLMs and I feel like that potential is being massively wasted, despite the amount of money being funneled into the industry

05.03.2026 18:06 ๐Ÿ‘ 19 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

I 100% agree with this. Often checking an agent's output requires as much or more work than it would have required a human to do the work themselves. This is *especially* true for the most common users (junior/novice developers), where they are incapable of properly checking the agent's work

05.03.2026 16:48 ๐Ÿ‘ 17 ๐Ÿ” 0 ๐Ÿ’ฌ 2 ๐Ÿ“Œ 0