Keith Henry

Keith Henry

@k17.dev

Dad, CTO @evolution.tech, autistic, avid reader, gamer, politics nerd, MBA. Mainly working in C#, TS, SQL, PWAs and occasionally AI. Opinions are personal, expect sarcasm. https://k17.dev/

307 followers741 following2.5K posts

Right now, .NET MCP's are broken. Latest Microsoft.AspNetCore.OpenApi is 10.0.4 and that ONLY supports github.com/Microsoft/Op... up to 3.0.0 (its core dependency) but that's deprecated due to a security vuln and the minimum is 3.5.4 - it's all just a half-arsed shambles.

nuget.orgMicrosoft.AspNetCore.OpenApi 10.0.14Provides APIs for annotating route handler endpoints in ASP.NET Core with OpenAPI annotations. This package was built from the source code at https://github.com/dotnet/dotnet/tree/0427b9abbead3fa64c6...
Keith Henry@k17.dev

Copilot Studio + O365 Copilot + Microsoft O365 Admin portal is a broken half-baked bug-ridden clusterfuck. It's not remotely ready for production...

Keith Henry reposted

My first open source release: Tiny Tells! Six small status characters in one <tiny-tell> tag. They're animated like little cartoon characters, so a state change is a reaction, not an icon swap or a spinner. MIT licensed, 14 KB, no dependencies. tinytells.dev

Mermaid syntax is great, but the library is a slow mess with loads of dependencies. This looks really good!

kepano@stephango.com

This is Pele, my new rendering library for diagrams and charts, compatible with the latest Mermaid syntax. - 100-500× faster than mermaid.js - 6× smaller bundle - No dependencies - Easy to theme - Responsive to device width - Open source (MIT) Try it at pele.run

Keith Henry reposted

🔥 New blog post: The best way to use icons in Web UIs What if I told you, you could use CSS to *insert* and *tweak* icons without touching any HTML? And that you can manage them alongside your other design tokens? lea.verou.me/blog/2026/ic...

lea.verou.meThe best way to use icons in Web UIs • Lea VerouWhat if I told you, you could use CSS to insert and tweak icons without touching any HTML? And that it could be more flexible and maintainable than what you’ve been using?

I stand by this #singaporeGP #f1 Seriously, how did Ferrari turn 3rd into 6th?

Keith Henry@k17.dev

I'm convinced their tyre strategist is some old guy that Enzo was great mates with, so they're stuck with him, but he doesn't know what a VSC is or that they need to change compounds every race.

Ferrari have the worst tyre strategy of any #f1 team. They're consistently awful, pit when they shouldn't, fail to pit when they need to, always on the wrong tyres. Starting Hamilton in the rain on softs? Fucking stupid.

I'm convinced their tyre strategist is some old guy that Enzo was great mates with, so they're stuck with him, but he doesn't know what a VSC is or that they need to change compounds every race.

The more I work with LLM code the clearer it is that it's terrible at it. The context window is never large enough, and RAG can fill some gaps in tightly written modular code, but LLMs specifically will not write code like that. They both can't handle bloat and write almost nothing else...

Keith Henry@k17.dev

I hate reviewing LLM PRs, just had one with similar user auth checks in middleware (with a 401), DI in the service (returning null), and as static calls in every action (throw new Exception). At least 3 checks of the user with every request. We already had user auth in a library.

View full thread

Every app written this way basically takes the technical debt you usually build up over years with a large team, and compresses that into a few sprints. Instead of rework/refactor after a decade, you're doing it between prototype and production. LLMs are software progeria.

I think there might be a hard mathematical limit here, something like: an LLM can maintain an app until the code + reflection/RAG reaches it's context window, then everything it adds past that gets exponentially worse in a vicious cycle of more crappy code making it harder to write less crappy code

The more I work with LLM code the clearer it is that it's terrible at it. The context window is never large enough, and RAG can fill some gaps in tightly written modular code, but LLMs specifically will not write code like that. They both can't handle bloat and write almost nothing else...

Keith Henry@k17.dev

I hate reviewing LLM PRs, just had one with similar user auth checks in middleware (with a 401), DI in the service (returning null), and as static calls in every action (throw new Exception). At least 3 checks of the user with every request. We already had user auth in a library.

View full thread

If you ask for something from scratch it's surface-level impressive but everything implemented 3 different ways and exponentially more code every time you try to iterate...

Give it a tight, modular, SOLID code-base - code it adds typically won't be, but it also only uses any of that modularity as long as the RAG can find it. Like it has 20 single-responsibility services, but can't find the one it should use and so either re-implements it or bolts that on to another...

The more I work with LLM code the clearer it is that it's terrible at it. The context window is never large enough, and RAG can fill some gaps in tightly written modular code, but LLMs specifically will not write code like that. They both can't handle bloat and write almost nothing else...

Keith Henry@k17.dev

I hate reviewing LLM PRs, just had one with similar user auth checks in middleware (with a 401), DI in the service (returning null), and as static calls in every action (throw new Exception). At least 3 checks of the user with every request. We already had user auth in a library.

It never extracts repeated code to a method, it never abstracts a re-used set of methods to a DI interface, it uses try-catch everywhere and re-implements from scratch every chance it gets. Now if, IF, it could keep all this together that might not matter - it works and you can just vibe code on...

But it doesn't. It rapidly fills a context window with crappy code, and (if you're lucky) finds that with RAG next time you ask it, but much more likely re-implements in a slightly different (but still crappy) way, and then repeats until you have 100x mode code than you need...

Keith Henry reposted

NEWS: My new investigation uncovers the horrific ChatGPT history of the Tumbler Ridge school shooter. OpenAI’s chatbot fueled the shooter's violent fantasies and plans up to the day of the massacre. Chats about guns, timing of attacks, becoming infamous, and more. www.motherjones.com/media/2026/0...

motherjones.comChatGPT helped the Tumbler Ridge school shooter focus on guns, tactics, and terror, our investigation revealsOpenAI’s chatbot fed the shooter’s violent fantasies and planning up to the massacre.

Copilot Studio + O365 Copilot + Microsoft O365 Admin portal is a broken half-baked bug-ridden clusterfuck. It's not remotely ready for production...

View full thread

None of this is source or version controlled, when you make a mistake you manually have to reconfigure, and you can't test anything until you put it live...

As CTO, I want a clearly defined, managed and maintainable collection of tightly-controlled agents for my company. It's quite shocking how far Microsoft (the least 'wild-west' of all the vendors offering this) is from a usable product.

Copilot Studio + O365 Copilot + Microsoft O365 Admin portal is a broken half-baked bug-ridden clusterfuck. It's not remotely ready for production...

View full thread

And so on. Mess about in Admin long enough and they finally see it, but... now you have a new version that you want to publish, either as an upgrade or side by side, it doesn't matter, the live agent is going to break either way...

Then there's the UI/UX: janky broken confused mess of weird choices, like sliding right hand detail panels that don't click away...

Copilot Studio + O365 Copilot + Microsoft O365 Admin portal is a broken half-baked bug-ridden clusterfuck. It's not remotely ready for production...

View full thread

But then you publish, go to O365 Admin, choose who can access it (again) and yayy! your users still can't see it in the O365 Copilot app...

Security and access is a mess, with multiple tiers of access to configure but pass-through of credentials for an MCP (or other tooling) is another tier again...

Copilot Studio + O365 Copilot + Microsoft O365 Admin portal is a broken half-baked bug-ridden clusterfuck. It's not remotely ready for production...

You can't just publish, you have to share with a channel, and the properties (icon, name, description) are different from the agent in Studio...

I can think of few people less educated and less qualified to speak about anything, never mind a complex technology, than inbred fuckwit Charlie here. Why does the coverage of this never get to the 'rationalist'/EA/p(doom)-erist religion fueling this bollocks?

Channel 4 News@channel4news.bsky.social

King Charles gathers tech titans in Scotland, urging them to control AI “before it’s too late”. But, with the US and China locked in an AI race, Matt Frei considers if it could all fall on deaf ears. 📩 Read our latest InDepth newsletter:

Don't get me wrong, AI should be regulated, but no, it is just algorithms running in the cloud. When it does something like hacking Hugging Face that's because it was given a bunch of hacking tools to call, and run in a loop until it did that.

Top news on the BBC: overprivileged dick with a new book to sell accused some other overprivileged inbred wanker of being callous. A cruel royal? I'm shook 😐 Seriously BBC, nobody gives even a single solitary shred of a fuck, this isn't news.

#royalstimetogo? Yes. Get rid. Britain should be a democracy with equal rule of law for all, including nonce princes and grubby corrupt kings.

"But what about the tourism?" Yes, how will we cope with all the new stately homes opened to the public? We'll be like Paris, and nobody goes on holiday there.

We should replace them, as head of state, with an actor. Like James Bond or Doctor Who. If their ratings go down or there's a scandal we swap them out for the next one. As idiots keep saying, the king is "only ceremonial", so make that the job.

I hate debugging MCP... You add your tool, the LLM ignores it, you ask why, and the LLM goes "yes, you're right I should have", repeat until the tool description is most of your context window.

Keith Henry reposted

I am the very model of a modern day typographer A font take on the tune “Modern Major General” by Gilbert & Sullivan #typography #fonts #graphicdesign

The Empire in Star Wars is Nazi coded, it's not remotely subtle, they're space Nazis. Trump's AI slop uniforms look like updated Hugo Boss SS ones because that's exactly what they are.

Seth Abramson@sethabramson.bsky.social

HOLY SHIT LITERALLY THE EMPIRE FROM STAR WARS

Mercedes should have asked Russell whether he wanted to pit under VSC, they didn't because pitting Antonelli gave them a 1-2. If I was Russell I'd be fucking pissed. #f1

Meanwhile, Ferrari didn't pit Hamilton under VSC because Ferrari are terrible at tyre strategy. I'm surprised they didn't bring him in the lap after to put inters on, so they're slowly improving.

Keith Henry reposted

Content warning: Multiple men violently assault a female protester at Reform's conference at the Birmingham NEC, to the visible delight of Nigel Farage.

Keith Henry reposted