I built an LLM eval gate that can't silently pass
▲ 6 r/mlops+2 crossposts

I built an LLM eval gate that can't silently pass

https://github.com/albertofettucini/faithgate

Most LLM eval setups I've seen have a failure mode ops people will recognize: the happy path is green, and every unhappy path is also green. Judge API dies, no scores, nothing to compare, pass. That's an availability metric wearing a quality-gate costume.

I built faithgate around the opposite default. It's a faithfulness regression gate (suite of cases, score per prompt/model version, diff vs baseline, nonzero exit on regression) where every ambiguous state fails closed. Zero matched cases: fail. Unscored run: fail. Every score an abstention: fail. Abstentions are a distinct state in storage, never coerced to 0.0, and there's a --max-abstained policy flag for when you actually want tolerance.

Reproducibility bits: every run writes a manifest with judge id, model, kind, ragas and runner versions, and the suite hash. If the judge changed between baseline and head, comparing the scores is meaningless, so the gate exits 3 unless you explicitly pass --allow-judge-change. A corrupted manifest also fails closed. Duplicate case keys resolve pessimistically (baseline keeps max, head keeps min) so dupes can't quietly lower the bar.

My favorite part lives in CI. Next to the normal green gate there's a proves-detection job that runs the gate against a deliberately regressed suite and inverts the exit code. If the gate ever loses the ability to catch a known-bad change, dependency bump, refactor, whatever, the pipeline itself goes red. Tests for the test.

Judge honesty: default is Claude via your own key (RAGAS underneath). The keyless offline mode is published as untrustworthy, 68% balanced on a 40-example hand-labeled set, catches 9/20 unfaithful, with a unit test asserting the weakness.

Storage is one SQLite file with WAL, no server. Python 3.9 to 3.13, MIT. Known limitation: case identity is content-based, rewording a question mints a new case.

u/ahumanbeingmars — 1 day ago
▲ 20 r/WebSoftGiveaway+5 crossposts

Council — a native Mac app that asks one question to several AI models at once and shows where they disagree (free, open source)

Been building this for a couple months and finally shipping. Council is a native macOS app for anyone who keeps asking the same thing to ChatGPT, then Claude, then Gemini to compare — it just does that in one place. You ask once, a few models answer in parallel, they critique each other blind (no model knows whose answer it's reading, so no brand bias), and then it shows where they actually agree and where they split. You read the spread and make the call.

It's bring-your-own-key and fully local — no account, no server, nothing phones home. Keys stay in the macOS Keychain and you pay the providers directly. Real Liquid Glass on macOS 26, fallback below.

Free and open source (MIT). I'm a solo dev and use this daily, so I'd really value honest feedback — especially what feels off or unnecessary. Not after hype, just whether it's useful.

github.com
u/ahumanbeingmars — 16 days ago

shipped my first app, getting downloads but a 2% conversion rate, where do i even start fixing it?

just launched my first iOS app a few weeks ago (solo, SwiftUI). it's actually getting in front of people, around 4.4k impressions and 277 product page views so far, but the store conversion is sitting at ~2.14% and i know that's low.

so the traffic side seems ok, people are finding it, but something on the product page isn't closing the deal. i'm trying to figure out where to focus first:

- is it almost always the screenshots / first 2 frames?

- the subtitle / first lines of the description?

- the icon?

- or is 2% just normal for a brand new app with no reviews yet and i'm overthinking it?

for those of you who've shipped, what moved your conversion the most when you were starting out? trying not to rebuild everything at once and instead fix the thing that actually matters. appreciate any war stories.

u/ahumanbeingmars — 1 month ago

AQI 50 + high pollen + bad sleep hits me harder than AQI 90 on a good day

been tracking AQI + my body data side by side for a few months as an asthma person, and the thing nobody talks about: AQI alone isn't a great predictor of how rough a day will feel for YOU.

what actually predicts a hard breathing day for me:

— AQI matters, but it's part of the picture

— pollen hits way harder on days my HRV is already low

— humidity under 35% or over 70% amplifies whatever the air is doing

— if i slept under 6h, my "AQI tolerance" drops noticeably

a 50 AQI day with high pollen + 5.5h sleep wrecks me more than a clean 90 AQI day on a good night's rest. nobody's outdoor alert tells you this because they don't know your body.

been building a small iOS tool (asthma-first) that fuses AQI/pollen/UV with HRV/sleep/resting HR and gives me one call for the day. happy to share if anyone's curious, just DM. don't want to drop a link in the thread.

mostly i'm curious what other folks here use to decide if today's an "indoor day". for me the AQI number alone stopped being enough once i started watching my body alongside it.

reddit.com
u/ahumanbeingmars — 1 month ago

shipped my first ios app a few weeks ago — some lessons from going 1.0 to 1.3 in ~6 weeks as a solo dev

shipped my first ios app a few weeks ago. solo dev, no team. small health app called aerovital for people with asthma or pollen allergies. pulls weather, air quality, healthkit. anyway, went 1.0 to 1.3 in 6 weeks and some stuff bit me hard. healthkit caching. i thought i was being smart caching the live vitals reads for 60 seconds because they were getting hit every few seconds. seemed fine to me. nope. users notice instantly when their watch shows 72 bpm and the app shows 68. worst bug i ever shipped and the fix was literally deleting the cache. widget extensions are a separate process from the watch app. didn't know this. built an interactive complication for logging inhaler puffs, worked great on my device, did nothing on 3 testers'. spent like 2 days lost before figuring out userdefaults.standard isn't shared between them. had to move everything to an app group. four builds went out where nobody but me saw the puff count work. and if your widget touches healthkit you need both nshealthshareusagedescription and nshealthupdateusagedescription in the widget's own info.plist. parent app's isn't enough. without those the save call just silently does nothing. no error, no log, just nothing. took me forever to find. oh and the honest computation thing. a tester showed me a 0 bpm resting heart rate on a day his watch was charging. i was just showing zero for missing data. felt dumb but i went and ripped that out everywhere, now empty data shows as empty. couldn't see it until someone pointed it out.

also small business program. if you're under 1m a year just do it. went from 30% to 15% commission. took maybe 10 minutes. don't know why anyone doesn't do this on day one. and the apple featuring nomination form is free, editorial team actually reads them. send one every time you ship something meaningful.

anyway happy to answer anything.

reddit.com
u/ahumanbeingmars — 1 month ago

Google is moving search to AI-first. How are micro-SaaS founders here adapting if SEO clicks drop 30-60% over the next 2 years?

Google announced their biggest Search overhaul in 25+ years yesterday (https://blog.google/products-and-platforms/products/search/search-io-2026/). A few items that I think directly affect micro-SaaS founders:

  1. **Gemini 3.5 Flash is now the default model in AI Mode globally** — every query route now defaults to the AI answer, not the 10 blue links. The "click through to a website" path is no longer the default journey.

  2. **"Generative UI" → custom mini-apps built on-the-fly** (rolling out summer 2026 for everyone, free tier included). This is the one that worries me most. If a user searches "calorie tracker for keto," Google can now spin up a mini tracker INSIDE the SERP — instead of sending the user to a niche SaaS. The single-purpose tool category is directly threatened.

  3. **Information agents** monitor the web 24/7 for changes matching user criteria (summer 2026 for Pro/Ultra subscribers). Any SaaS whose value prop is "monitor X for me" — price trackers, news aggregators, deal alerts — is now competing with Google's own agents.

  4. **Agentic booking + voice calling** for home repair, beauty, pet care (U.S., summer 2026). Service-marketplace SaaS in these verticals (Booksy, StyleSeat, Rover, etc.) just had their core flow absorbed into Google.

What Google deliberately didn't address: click-through impact on publishers / SaaS landing pages. The blog says "you'll continue to get a range of results" but offers no data. SEO analysts project 30-60% CTR drops on top of the AI Overviews drops we already saw in 2025.

A few directions I'm thinking about:

• **Niche depth becomes the moat** — Google's generative UI will eat shallow single-purpose tools first. SaaS with real domain depth (specialist data, longitudinal user history, integrations Google can't reach) is harder to replicate.

• **Brand-driven discovery > SEO** — Reddit, Discord, X, podcasts, newsletters. Distribution shifts off-Google.

• **App Store + direct channels gain weight** — mobile SaaS may have more runway than web-only SaaS.

• **AI-citation optimization** — when Google's AI cites a source, that source still gets some visibility. Structured data + authoritative content matters more than rank.

Curious how the founders here are reading this — is your category in the "Google will eat us" bucket, the "deep enough to survive" bucket, or somewhere in between?

blog.google
u/ahumanbeingmars — 1 month ago
▲ 24 r/Asthma

Built a small Apple Watch tool so I can log inhaler puffs without opening any app

I've had a couple of stretches where I lost track of how many times I used my rescue inhaler in a day — partly because pulling out the phone, opening an app, tapping through screens just doesn't happen in the middle of a busy day. So I built something for myself: a tiny widget that sits on my Apple Watch face and logs a puff with one tap. No app launch, no confirmation.

Two things I think matter for people in this sub:

• It writes the puff straight to Apple Health's inhaler log, so it shows up alongside everything else in the Health app — and you can show it to your pulmonologist or generate a respiratory diary PDF from it.

• On the phone side, it cross-references puff timing with local AQI, pollen, humidity, and weather. So instead of just a count, you start to see things like "I needed rescue 3 times this week, all on high pollen days." That pattern recognition has been useful for me personally.

The other puff trackers I tried (Propeller, Hailie) are great but they need their hardware attachment for the inhaler. I wanted something that worked with any inhaler — just tap when you puff.

Full disclosure: I'm the developer of the app. Not naming or linking it here — this sub is the wrong place for that, and the info above is what I'd share regardless. If anyone wants to check it out specifically, DM me. Posting because the asthma sub gave me a lot of useful info when I was first managing mine, and the puff-tracking angle felt worth sharing back.

u/ahumanbeingmars — 1 month ago
▲ 1 r/iosdev

Built an interactive Apple Watch complication with WidgetKit App Intents — one-tap inhaler logging to Apple Health (lessons learned)

Apple Watch's interactive complications via WidgetKit App Intents (Button(intent:) inside the widget body) opened up a use case I'd been chasing for years: writing to HealthKit from the watch face without launching the app. Wanted to share the implementation + the gotchas I hit, in case anyone else is building something similar.

A few things that tripped me up:

• The Widget Extension on watchOS lives in a separate process from the Watch app — they don't share UserDefaults.standard. Had to migrate the shared inhaler state to an App Group container (group.com.aerovital.app) so both targets see the same data. Build 67-70 silently failed because of this.

• NSHealthShareUsageDescription + NSHealthUpdateUsageDescription must be in the WIDGET EXTENSION's Info.plist, not just the Watch app's. Without these strings the HealthKit save call sails through with no error and writes nothing.

• Background WKApplicationRefreshBackgroundTask keeps the complication current without the user opening the Watch app — combined with WidgetCenter.reloadAllTimelines() on every WCSession receive, the watch face stays fresh on its own.

• The Undo intent works by storing the last puff's UUID, then deleting that specific HKQuantitySample on demand. Stack-based undo (multiple consecutive misfires) is on the v1.4 backlog.

Full disclosure: I'm the developer. App is AeroVital on the App Store, free to download. Posting because interactive complications for chronic-condition tracking feel like an underused pattern and I'd love feedback from other iOS devs — both technical and UX.

https://preview.redd.it/0q66cc7vjp2h1.jpg?width=396&format=pjpg&auto=webp&s=7f7e0ad0983dc6c3029336233b4d7decdd13bcc4

https://preview.redd.it/go108c7vjp2h1.jpg?width=396&format=pjpg&auto=webp&s=a4322271c5e171eb194bf81f818b17f2116a281b

reddit.com
u/ahumanbeingmars — 1 month ago
▲ 2 r/Asthma

Background: had asthma since I was a kid. The thing that's always frustrated me about exercising outdoors is the guesswork. Some days my chest is fine for a 5k. Other days I'm 10 minutes in, lungs burning, and I have to walk back. And I never seemed to be able to predict which day was which
just by looking outside.

A few years ago I started checking AQI + pollen the night before any planned run. If AQI was over 80 or grass pollen was high, I'd either move it indoor (treadmill/yoga) or push it to early morning when air settles. Game changer for me. Way fewer "abort the run" moments, way fewer rescue inhaler days.

A few months ago I got tired of doing the manual lookup across three different apps every morning, so I built something for myself that pulls all of it (Apple Watch recovery + AQI + pollen + weather) into one screen and just tells me "today's a good morning to run" or "wait until evening" or "do something indoor today." Honest disclosure: it's on the App Store now, free, called AeroVital. Not trying to pitch it — only mentioning because half of what
I'd say in this post is "use the app I built" and that feels gross to hide.

Real reason I'm posting: I want to know what other folks in this sub do. Do you check AQI religiously, never, or somewhere in between? What's your personal "abort run" rule? Anyone use a smart inhaler (Propeller, Hailie, smart Symbicort) and find the data actually useful, or is it mostly noise?

I think most of us just learned this stuff the hard way and never compared notes.

reddit.com
u/ahumanbeingmars — 2 months ago