<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yvoo</title>
    <description>The latest articles on DEV Community by Yvoo (@yvoolab).</description>
    <link>https://dev.to/yvoolab</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4011704%2F56268794-91a5-4a35-971c-a4f7a36e6c60.jpg</url>
      <title>DEV Community: Yvoo</title>
      <link>https://dev.to/yvoolab</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yvoolab"/>
    <language>en</language>
    <item>
      <title>How do you budget by paycheck when bills do not line up with paydays?</title>
      <dc:creator>Yvoo</dc:creator>
      <pubDate>Mon, 09 Nov 2026 18:50:09 +0000</pubDate>
      <link>https://dev.to/yvoolab/how-do-you-budget-by-paycheck-when-bills-do-not-line-up-with-paydays-mk</link>
      <guid>https://dev.to/yvoolab/how-do-you-budget-by-paycheck-when-bills-do-not-line-up-with-paydays-mk</guid>
      <description>&lt;p&gt;Assign every bill to the paycheck that arrives on or before its due date, then subtract those bills from that paycheck. What remains is the money you can plan with. A monthly budget hides this, because rent and your paycheck rarely share a date.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqqolmekzsjcvi4zprtb7.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqqolmekzsjcvi4zprtb7.webp" alt="Paycheck Budget app in a desktop browser: safe to spend today, how it is counted, and bills due before payday, example numbers" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The rest of this article shows the method on paper, where it breaks, and how I built it into a one-file app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does a monthly budget fail when pay is uneven?
&lt;/h2&gt;

&lt;p&gt;A monthly budget assumes money arrives once and bills leave once. Real pay does not work that way. You may be paid every two weeks, twice a month, or on irregular dates.&lt;/p&gt;

&lt;p&gt;Bills ignore all of that. Rent is due on the 1st. The phone bill lands on the 12th. Insurance is due on the 20th.&lt;/p&gt;

&lt;p&gt;The monthly total can look healthy while one paycheck carries almost every large bill. You open the account on the 19th and the balance is gone.&lt;/p&gt;

&lt;p&gt;Discipline is rarely the issue. The monthly view hides which paycheck is responsible for which bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  How common is living close to the edge?
&lt;/h2&gt;

&lt;p&gt;Common enough that timing matters. The Federal Reserve's 2025 household survey asked adults about a hypothetical $400 emergency expense. 63 percent said they would cover it using only cash, savings, or a credit card paid off at the next statement.&lt;/p&gt;

&lt;p&gt;That means more than a third would need another route. The survey measures emergency cushions, not paycheck-to-paycheck living, so treat it as context and not as a count of that group. The figure was unchanged from the previous three years.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://www.federalreserve.gov/publications/2026-economic-well-being-of-us-households-in-2025-executive-summary.htm" rel="noopener noreferrer"&gt;Economic Well-Being of U.S. Households in 2025, Executive Summary&lt;/a&gt;, Federal Reserve Board.&lt;/p&gt;

&lt;p&gt;When the cushion is thin, a bill landing one paycheck early or late decides whether the month works.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you assign bills to paychecks?
&lt;/h2&gt;

&lt;p&gt;Use one rule: a bill belongs to the latest paycheck that arrives on or before its due date. Three steps apply it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List your paydays for the next month, with the amount of each.&lt;/li&gt;
&lt;li&gt;List every bill with its due date, including the ones that come every few months.&lt;/li&gt;
&lt;li&gt;Place each bill under the latest payday that falls on or before it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is an example with made-up numbers. You are paid $1,500 on the 5th and on the 19th.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Paycheck&lt;/th&gt;
&lt;th&gt;Bills it covers&lt;/th&gt;
&lt;th&gt;Bills total&lt;/th&gt;
&lt;th&gt;Left over&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;5th, $1,500&lt;/td&gt;
&lt;td&gt;Electricity (8th) $140, phone (12th) $45&lt;/td&gt;
&lt;td&gt;$185&lt;/td&gt;
&lt;td&gt;$1,315&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19th, $1,500&lt;/td&gt;
&lt;td&gt;Insurance (20th) $120, internet (25th) $60, rent (1st) $1,100&lt;/td&gt;
&lt;td&gt;$1,280&lt;/td&gt;
&lt;td&gt;$220&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rent is due on the 1st, which is before the 5th payday. So the paycheck from the 19th covers it, a bill that belongs to next month's calendar.&lt;/p&gt;

&lt;p&gt;The monthly total here is $3,000 in and $1,465 out. That looks comfortable. By paycheck, the 19th leaves only $220 for two weeks of living.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do you do with the leftover?
&lt;/h2&gt;

&lt;p&gt;Read the leftover as a spending limit for that period, not as a bonus. Divide it by the days until the next payday.&lt;/p&gt;

&lt;p&gt;On the 19th, $220 over 17 days is about $12.90 a day. On the 5th, $1,315 over 14 days is about $94 a day.&lt;/p&gt;

&lt;p&gt;Those two numbers are very different, and the monthly view would have shown you one average. Knowing this in advance lets you act. You can move a bill's due date with the provider, shift a savings transfer to the lighter paycheck, or plan the tight stretch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does this fall apart in a spreadsheet?
&lt;/h2&gt;

&lt;p&gt;The method is simple. Keeping it current is the work. Each new bill needs a row, a due date and a paycheck. Each payday shift needs a fix to a formula.&lt;/p&gt;

&lt;p&gt;Quarterly and yearly bills are the worst case. They vanish from view for months, then land in one paycheck with no warning.&lt;/p&gt;

&lt;p&gt;A spreadsheet can do this. In my experience the upkeep stops after a few weeks, and a broken formula gives a wrong number with total confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does Paycheck Budget handle it?
&lt;/h2&gt;

&lt;p&gt;I built the same rule into one HTML file that opens in your browser. It has three short screens for setup.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your pay and next payday.&lt;/li&gt;
&lt;li&gt;The bills that repeat.&lt;/li&gt;
&lt;li&gt;A choice between plan mode and plan and track.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You enter a bill once. The app places it in the right paycheck every time it comes round: monthly, every two weeks, every few months, or once.&lt;/p&gt;

&lt;p&gt;Plan mode needs only your pay and your bills. It never asks you to log a coffee. Plan and track adds a + Spend button. You type an amount, tap a category, and the Today screen shows one number: safe to spend today, counted line by line.&lt;/p&gt;

&lt;p&gt;The Paychecks screen lists the next six paychecks, each with its bills, debt minimums and savings. A calendar shows paydays, bills and spending by day.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about debt and savings?
&lt;/h2&gt;

&lt;p&gt;Debt sits in the same plan. You enter your debts. The app shows a payoff date under two strategies.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Avalanche&lt;/strong&gt; pays the highest interest rate first. It usually costs the least interest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snowball&lt;/strong&gt; pays the smallest balance first. It gives earlier wins.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app shows the total interest under each, so you compare the cost instead of guessing. Savings goals sit beside them, and each paycheck shows its savings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where is my data stored?
&lt;/h2&gt;

&lt;p&gt;In your browser, on that computer, and nowhere else. It runs without an account or subscription, works offline, and never connects to your bank.&lt;/p&gt;

&lt;p&gt;There is a trade-off. Clearing your browsing data erases your numbers. So the app has a Download a backup button and reminds you once a week. A backup file restores everything, in the same browser or another one.&lt;/p&gt;

&lt;p&gt;Chrome or Edge is recommended. Nothing to install: you download the file and double-click it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which approach should you pick?
&lt;/h2&gt;

&lt;p&gt;If your pay is steady and your bills are few, a monthly budget works. Keep it.&lt;/p&gt;

&lt;p&gt;If your paydays are uneven, or one paycheck always feels tighter than the others, budget by paycheck. Start on paper with the three steps above. Use a tool when the upkeep becomes the obstacle.&lt;/p&gt;

&lt;p&gt;This is a planning method, not financial advice. The numbers above are examples, so replace them with your own.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written with AI assistance. Every claim about the app comes from the version shipped on 2026-10-30.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paycheck Budget is the one-file budget app this article describes. &lt;a href="https://yvoolab.github.io/paycheck-budget-demo/" rel="noopener noreferrer"&gt;Try the free demo&lt;/a&gt; first; the full version is &lt;a href="https://yvoo.gumroad.com/l/paycheck-budget?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c8-launch" rel="noopener noreferrer"&gt;on Gumroad&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>personalfinance</category>
      <category>budgeting</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why do Notion life dashboards stop being used, and what keeps one alive?</title>
      <dc:creator>Yvoo</dc:creator>
      <pubDate>Wed, 04 Nov 2026 16:20:43 +0000</pubDate>
      <link>https://dev.to/yvoolab/why-do-notion-life-dashboards-stop-being-used-and-what-keeps-one-alive-e6m</link>
      <guid>https://dev.to/yvoolab/why-do-notion-life-dashboards-stop-being-used-and-what-keeps-one-alive-e6m</guid>
      <description>&lt;p&gt;A Notion life dashboard stops being used when opening it costs more than it gives back. Broken widgets, a crowded home page, sample data to delete and a hard start all raise that cost. A dashboard that lasts keeps the home page small and the rest one click away.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwtwsfn7dirs0xjin4u7b.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwtwsfn7dirs0xjin4u7b.webp" alt="Life and Work OS Notion template home page: a link row to every page, a short start note, and the Today list with example tasks" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below are the five reasons dashboards die and the rules I follow to prevent each one. They come from building a Notion life planner called Life &amp;amp; Work OS.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually kills a Notion dashboard?
&lt;/h2&gt;

&lt;p&gt;The cause is rarely motivation. Five causes recur.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Widgets stop working.&lt;/strong&gt; Third-party embeds for clocks, quotes and trackers depend on outside services. When one disappears, the page shows a blank box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The home page is overloaded.&lt;/strong&gt; Too many blocks compete for attention. You scan, feel behind, and close the tab.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sample content has to be cleared.&lt;/strong&gt; Filled-in examples help you learn, then block you. Deleting them is a chore nobody scheduled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Navigation is inconsistent.&lt;/strong&gt; Each sub-page has a different set of links, so you lose your way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A new user cannot start.&lt;/strong&gt; Without a guide, a powerful workspace looks like a blank wall.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each cause has a rule. None needs a plugin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 1: How do you avoid widgets that break?
&lt;/h2&gt;

&lt;p&gt;Build with plain Notion pages and databases. Use native views, filters, relations and rollups. Skip embeds.&lt;/p&gt;

&lt;p&gt;A native block cannot go dead because a third party closed. It follows the same rules as every other page you own.&lt;/p&gt;

&lt;p&gt;The cost is some visual polish. A clock widget looks nice. A filtered list keeps working.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 2: What belongs on the home page?
&lt;/h2&gt;

&lt;p&gt;Three things: Today, a month calendar, and your goals. Everything else is one click away.&lt;/p&gt;

&lt;p&gt;In Life &amp;amp; Work OS, the Today list shows tasks due today or earlier that are still open. The month calendar shows every dated task. Goals appear as cards with a target date and a status.&lt;/p&gt;

&lt;p&gt;Habits, journal, meals, money and work sit on their own pages. They are reachable, but they do not compete for your first glance.&lt;/p&gt;

&lt;p&gt;The test is simple. Open the home page and ask what you need to do now. If you cannot answer in five seconds, remove a block.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 3: How do you make goals useful instead of decorative?
&lt;/h2&gt;

&lt;p&gt;Link tasks to a goal and let the progress figure come from them. In the template, a goal's progress is the share of its linked tasks you have ticked.&lt;/p&gt;

&lt;p&gt;Few people update a percentage by hand for long. A number computed from work you already log stays honest without extra effort.&lt;/p&gt;

&lt;p&gt;Each card also shows a target date and status. Together they tell you whether a goal is moving or only exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 4: How do you avoid the sample-data cleanup?
&lt;/h2&gt;

&lt;p&gt;Ship two editions. One is a sample, filled with examples so you can see how every page behaves. The other is blank, with the same pages and nothing inside.&lt;/p&gt;

&lt;p&gt;You choose by how you learn. If you want to see it working first, take the sample. If you start from zero, take the blank one and skip the deleting.&lt;/p&gt;

&lt;p&gt;If you build your own dashboard, apply the same idea. Keep a copy of the empty structure before you fill it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 5: How do you keep navigation consistent?
&lt;/h2&gt;

&lt;p&gt;Put the same link row at the top of every page. Home, habits, journal, meals, money, work and the database list should sit in the same place everywhere.&lt;/p&gt;

&lt;p&gt;You never wonder where a page went. Build the row once and copy it to each page.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do the daily habits look like?
&lt;/h2&gt;

&lt;p&gt;A dashboard survives when the daily loop is short. The loop in this template has two parts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Morning:&lt;/strong&gt; open the home page and look at Today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evening:&lt;/strong&gt; tick your habits and write two lines in the journal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The habit tracker has one row per day and five habits to tick, with a score for the day. You rename the five habits to your own. The journal holds a date, a mood, the win of the day and what you are grateful for.&lt;/p&gt;

&lt;p&gt;Meals, money and work follow the same pattern. Meals use a board by breakfast, lunch, dinner and snack, plus a week calendar. Money groups income, expenses and savings by type, each line with a category and its month. Work lists projects with a status, a deadline and a next step.&lt;/p&gt;

&lt;p&gt;Keep each page to the fields you will fill in. A field you never touch is clutter.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does a new user get started?
&lt;/h2&gt;

&lt;p&gt;Include a Start here page inside the workspace, with five steps to make it yours. Short, ordered and written for someone who has never used a database view.&lt;/p&gt;

&lt;p&gt;A guide outside the workspace gets lost. A guide inside it is there at the moment of confusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does it cost to try?
&lt;/h2&gt;

&lt;p&gt;You need only a free Notion account. The planner is delivered as a one-page PDF with two copy links, one per edition. Open a link in a browser on a computer, sign in to Notion, press Duplicate and choose your workspace. The copy is yours to edit.&lt;/p&gt;

&lt;p&gt;Notion is a separate service and needs an internet connection. Chrome or Edge is recommended for the copy step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which rule should you apply first?
&lt;/h2&gt;

&lt;p&gt;Start with the home page. Remove everything that is not Today, the calendar or goals. Move the rest to its own page and link it from one shared row.&lt;/p&gt;

&lt;p&gt;That single change fixes the overload and the navigation problem together. The other four rules protect the dashboard once you rely on it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written with AI assistance. Every claim about the template comes from the version shipped on 2026-10-30.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Life &amp;amp; Work OS is the Notion life planner built on these rules, with a sample and a blank edition: &lt;a href="https://yvoo.gumroad.com/l/notion-life-planner?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c9-launch" rel="noopener noreferrer"&gt;get it on Gumroad&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Notion is a trademark of Notion Labs, Inc. Life &amp;amp; Work OS is an independent template and is not affiliated with or endorsed by Notion.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>notion</category>
      <category>productivity</category>
      <category>habits</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>7 Vapi Settings I Changed After Real Phone Calls (Voice Agent Gotchas, Tested)</title>
      <dc:creator>Yvoo</dc:creator>
      <pubDate>Wed, 21 Oct 2026 13:49:48 +0000</pubDate>
      <link>https://dev.to/yvoolab/7-vapi-settings-i-changed-after-real-phone-calls-voice-agent-gotchas-tested-5314</link>
      <guid>https://dev.to/yvoolab/7-vapi-settings-i-changed-after-real-phone-calls-voice-agent-gotchas-tested-5314</guid>
      <description>&lt;p&gt;I run a voice agent on a business phone line. It answers in French, English or Chinese, takes a message (who is calling, what they need, how to reach them) and hands it to a human. The stack: Vapi for the call, Soniox for speech-to-text, Claude Haiku for the conversation, an ElevenLabs voice.&lt;/p&gt;

&lt;p&gt;Text simulations looked fine. Then real calls came in, and six things went wrong that the text tests hadn't shown, plus two configuration details I'd check before go-live. Here is each one, what caused it, and the setting the agent runs now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why did the agent quote prices nobody approved?
&lt;/h2&gt;

&lt;p&gt;The first phone prompt reused the whole knowledge base, price sheet included: 38,700 characters. On an early test call, the agent read three price tiers to the caller.&lt;/p&gt;

&lt;p&gt;Anything in the prompt can come out of the speaker. I replaced it with a phone-only prompt of 5,400 characters, with no prices and no delivery times. A price question now gets one sentence (the team will send details by email) and the agent moves on to the next missing item. ElevenLabs' prompting guide also flags long prompts as slower and less reliable, so the cut paid twice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why did French calls end with an English "Goodbye"?
&lt;/h2&gt;

&lt;p&gt;On French test calls, the last words were "Goodbye. Au revoir." The end-call tool speaks its own default line before it hangs up. An empty request-start message silences it; the model says goodbye in the caller's language, then calls the tool.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"tools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"endCall"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"request-start"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Where did the office noise come from?
&lt;/h2&gt;

&lt;p&gt;Callers heard a low office murmur behind the voice. Vapi's API reference states it plainly: the default background sound is "office" for phone calls and "off" for web calls, which is why a web test won't show it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"backgroundSound"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why did one spelled name trigger twenty replies?
&lt;/h2&gt;

&lt;p&gt;A caller spelled a surname and an email slowly, pausing between pieces. The transcriber cut each piece into its own turn, and the agent answered every fragment: more than twenty replies in one call. The answer is to wait longer before a pause counts as the end of a turn. This is what the agent runs now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"startSpeakingPlan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"waitSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transcriptionEndpointingPlan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"onPunctuationSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"onNoPunctuationSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"onNumberSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The price is a slightly slower reply after short answers. On a message-taking line that trade is worth it. On a fast sales line, measure before you copy these numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why did line noise cut the agent off mid-sentence?
&lt;/h2&gt;

&lt;p&gt;A crackle on the line was transcribed as a word, and one word was enough to stop the agent talking. The agent now needs two words from the caller before it treats them as interrupting.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"stopSpeakingPlan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"numWords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why did the agent keep talking after goodbye?
&lt;/h2&gt;

&lt;p&gt;In three of five test calls, after both sides had said goodbye, the model restated the hand-over message instead of ending the call. Rather than fight it in the prompt alone, I gave the model one fixed closing line per language and added end-call phrases: when the assistant says one of these, Vapi hangs up.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"endCallPhrases"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"bonne journée, au revoir"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"have a good day, goodbye"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make the model's closing line match one of them exactly, in every language the line supports.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else is worth checking before go-live?
&lt;/h2&gt;

&lt;p&gt;Two smaller ones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don't ask for a number you already have.&lt;/strong&gt; The caller's number is available in the prompt as &lt;code&gt;{{customer.number}}&lt;/code&gt;. My agent reads it back for confirmation instead of asking the caller to dictate it, and in French it reads it the way French speakers say numbers: "zéro six", then digit pairs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;keypadInputPlan.delimiters&lt;/code&gt; takes an array.&lt;/strong&gt; Passing a plain string got a 400 from the API. &lt;code&gt;"delimiters": ["#"]&lt;/code&gt; works.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How do you know a fix didn't break something else?
&lt;/h2&gt;

&lt;p&gt;One manual call proves little: each bug above showed up on some calls and not on others. I keep a small suite of scripted scenarios (a client with a vague need, a recruiter, a price question, a caller speaking Chinese). Each one places a real call and checks the result automatically: no price figures in the agent's lines, the hand-over said at most once, the message fields filled in. At roughly ten cents a scenario in my setup, it runs after every prompt change.&lt;/p&gt;

&lt;p&gt;Most of these were not model problems. They were defaults, timing and telephony. Before your agent takes its first real call, check six things: what the prompt contains, what the end-call tool says, the background sound, the endpointing waits, the interruption threshold, and how the call ends.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written with AI assistance. Every issue, number and setting above comes from my own agent's test and real calls; the JSON is the configuration it runs today.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I set up and tune phone agents like this one. If you'd rather have one answering your line than debug one, the contact is on my profile.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>voiceai</category>
      <category>llm</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Make AI Summaries Stop Dropping the Important Parts: A Copy-Paste Prompt (Tested)</title>
      <dc:creator>Yvoo</dc:creator>
      <pubDate>Tue, 13 Oct 2026 16:01:19 +0000</pubDate>
      <link>https://dev.to/yvoolab/how-to-make-ai-summaries-stop-dropping-the-important-parts-a-copy-paste-prompt-tested-3bcn</link>
      <guid>https://dev.to/yvoolab/how-to-make-ai-summaries-stop-dropping-the-important-parts-a-copy-paste-prompt-tested-3bcn</guid>
      <description>&lt;p&gt;An AI summary fails quietly. It doesn't invent anything, it reads well, every bullet is true — and the one line you needed is simply not there. The exception to the rule. The deadline. The "never do X". Nothing in a clean eight-bullet summary tells you what got cut, so you walk away confident about a document you've only partly read.&lt;/p&gt;

&lt;p&gt;That's a different problem from hallucination, and it needs a different fix. You can't fact-check an omission; there's nothing on the page to check. What you can do is make the model show its work: list everything the document contains first, summarize second, then account for every item it left out. Below is that prompt, a side-by-side test against a plain "summarize this", and where it still needs you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do AI summaries drop the important parts?
&lt;/h2&gt;

&lt;p&gt;Because "summarize" asks for compression, and compression keeps what's &lt;em&gt;typical&lt;/em&gt; of a document, not what's &lt;em&gt;load-bearing&lt;/em&gt; in it. The main rules survive. The exceptions to those rules — usually one sentence each, often buried under a heading that sounds minor — are exactly what compression treats as detail.&lt;/p&gt;

&lt;p&gt;Three kinds of content go first, and they happen to be the ones that hurt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exceptions&lt;/strong&gt; — "do X, except when Y." The summary keeps "do X".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard constraints&lt;/strong&gt; — numbers, limits, deadlines, "must" and "must not".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small sections&lt;/strong&gt; — a heading with three lines under it loses to a heading with thirty, whatever the three lines say.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The copy-paste summary prompt with a coverage check
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Summarize the document below in two passes.
Pass 1 — Map: list every section or distinct topic, in order, one line each.
Pass 2 — Summary: write the summary (max [N] bullets). Every bullet must name
the section it comes from.
Then, Coverage check: list each Pass-1 item that is NOT in the summary, and
for each say in one line whether a reader could get hurt by not knowing it
(yes/no + why).
Numbers, deadlines, exceptions and "must/must not" rules are never dropped
silently: include them or list them under Coverage check.
Document: [PASTE]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The map comes first on purpose. Once the model has written down every section, it can't pretend the small ones don't exist — and the coverage check forces a verdict on each one it skipped. The omission becomes visible, which is the whole point.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens on a real document?
&lt;/h2&gt;

&lt;p&gt;I used &lt;a href="https://peps.python.org/pep-0008/" rel="noopener noreferrer"&gt;PEP 8&lt;/a&gt;, Python's style guide: long, public domain, full of rules and exceptions to those rules, and easy to check. Two fresh runs (Claude Sonnet, same 8-bullet limit):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Run A:&lt;/strong&gt; only the instruction "Summarize this document in at most 8 bullet points."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run B:&lt;/strong&gt; the prompt above, with N = 8.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Run A was a good summary.&lt;/strong&gt; Indentation, line length, blank lines, imports, naming, docstrings, comparisons to &lt;code&gt;None&lt;/code&gt;, annotations — all correct, all genuinely useful. If you'd never read PEP 8, you'd think you had.&lt;/p&gt;

&lt;p&gt;Here's what it didn't mention, checked against the source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The section on when to ignore the guide.&lt;/strong&gt; PEP 8 opens by saying consistency within a project matters more than consistency with PEP 8, lists reasons to break its own rules, and says in so many words: do not break backwards compatibility just to comply with this PEP. Run A kept every rule and dropped the permission to deviate — which makes it read stricter than the document is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The team exception to line length.&lt;/strong&gt; Run A gave the 79-character limit. The source adds that a team can agree to go up to 99, as long as comments and docstrings still wrap at 72.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The one mandatory trailing comma.&lt;/strong&gt; Trailing commas are optional &lt;em&gt;except&lt;/em&gt; for a one-element tuple. That's a real bug in waiting: without the comma you don't get a tuple.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where module dunders like &lt;code&gt;__all__&lt;/code&gt; go&lt;/strong&gt;, including the rule that &lt;code&gt;from __future__&lt;/code&gt; imports come before them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Run B caught all four.&lt;/strong&gt; The permission-to-deviate section became its first bullet, backwards-compatibility warning included. The 99-character team limit made it into the line-length bullet. And the coverage check listed the sections it still left out, each with a verdict:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;When to Use Trailing Commas&lt;/em&gt; — &lt;strong&gt;yes&lt;/strong&gt;, a reader could get hurt: the one-element tuple case "silently produces a plain string instead of a tuple — a classic hidden bug."&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Module Level Dunder Names&lt;/em&gt; — &lt;strong&gt;yes&lt;/strong&gt;: the &lt;code&gt;from __future__&lt;/code&gt; ordering rule, which the model noted can cause a real error rather than a style nit.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Source File Encoding&lt;/em&gt;, &lt;em&gt;ASCII Compatibility&lt;/em&gt; — &lt;strong&gt;no&lt;/strong&gt;: mostly binding on standard-library contributors.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;References&lt;/em&gt;, &lt;em&gt;Copyright&lt;/em&gt; — &lt;strong&gt;no&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run B also listed a tail of exceptions it had compressed out of the summary: the two narrow cases where a bare &lt;code&gt;except:&lt;/code&gt; is acceptable, the warning against &lt;code&gt;return&lt;/code&gt; inside &lt;code&gt;finally&lt;/code&gt;, the note that name-mangled attributes are still reachable. Not all of that belongs in a summary. All of it is better &lt;em&gt;listed&lt;/em&gt; than silently gone.&lt;/p&gt;

&lt;p&gt;Same model, same document, same bullet budget. The difference is that Run B had to account for what it cut.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where does this prompt stop?
&lt;/h2&gt;

&lt;p&gt;Three limits showed up in the test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It's longer.&lt;/strong&gt; Run B's output was several times the length of Run A's. On a document you'll skim once, that's overhead. Use it when being wrong about the document costs you something.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The yes/no verdicts are judgment calls.&lt;/strong&gt; "Could a reader get hurt?" depends on who the reader is. The model marked &lt;em&gt;Source File Encoding&lt;/em&gt; as low-risk because it mostly binds standard-library contributors — right for most readers, wrong if you are one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It only covers what the model actually read.&lt;/strong&gt; Both runs read PEP 8 through a web-fetch tool, and the Run B agent reported that parts of the page came back paraphrased rather than verbatim. It also reported the map as complete — all 42 section headings present — but a map built from a paraphrase can still miss a line. For anything that matters, paste the source text in yourself.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How do you use the coverage check in practice?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read the "yes" items first.&lt;/strong&gt; They're the ones the summary would have hidden from you. On PEP 8 that was two lines; on a contract or a policy it's usually the reason you're reading it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spot-check one "no".&lt;/strong&gt; Open the source at one skipped section and confirm the verdict. If it's wrong once, read the others yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search the source for "except", "must", "never", "unless", and any number.&lt;/strong&gt; Ten seconds, and it's the fastest independent check that the constraints made it through.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep the map.&lt;/strong&gt; Pass 1 is a table of contents you can come back to when a question comes up later — faster than rereading.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;Written with AI assistance. Both summary runs were performed as described and reported faithfully; the claims about what PEP 8 says were checked against the live page at peps.python.org. PEP 8 is public domain — reproduce the test on it or on any document you know well.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://dev.to/yvoolab/verify-ai-output-before-you-ship-it-3-prompts-to-check-ai-accuracy-3dhi"&gt;Verify AI Output&lt;/a&gt; series; related: &lt;a href="https://dev.to/yvoolab/how-to-stop-chatgpt-and-claude-from-forgetting-context-in-long-conversations-dc4"&gt;how to stop ChatGPT and Claude from forgetting context in long conversations&lt;/a&gt;. I keep prompts like this one — summarization, fact verification, source compilation — in a Notion workspace I actually work from; if you want that library already set up, &lt;a href="https://yvoo.gumroad.com/l/ai-notion-workspace?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free" rel="noopener noreferrer"&gt;the AI-Augmented Notion Workspace&lt;/a&gt; is free, pay what you want.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you run your AI work on a system, run the rest on one too. An ATS resume template in English and French, for Word and Google Docs: &lt;a href="https://yvoo.gumroad.com/l/ats-resume?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free-to-paid" rel="noopener noreferrer"&gt;on Gumroad&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>productivity</category>
      <category>promptengineering</category>
    </item>
    <item>
      <title>Can an LLM name the WCAG criterion a snippet violates? A 6-case RGAA benchmark on Kaggle</title>
      <dc:creator>Yvoo</dc:creator>
      <pubDate>Fri, 09 Oct 2026 08:18:04 +0000</pubDate>
      <link>https://dev.to/yvoolab/can-an-llm-name-the-wcag-criterion-a-snippet-violates-a-6-case-rgaa-benchmark-on-kaggle-1cp3</link>
      <guid>https://dev.to/yvoolab/can-an-llm-name-the-wcag-criterion-a-snippet-violates-a-6-case-rgaa-benchmark-on-kaggle-1cp3</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/kaggle-2026-09-23"&gt;Kaggle Benchmarking Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Benchmarked
&lt;/h2&gt;

&lt;p&gt;Accessibility audits against RGAA 4.1, the French profile of WCAG 2.1 AA, are a service I offer to French sites. The first pass of an audit is tedious and mechanical: look at a fragment, name the success criterion it breaks. If a model can do that pass reliably, the human hours go to the judgement calls instead.&lt;/p&gt;

&lt;p&gt;So the benchmark asks exactly that question, six times. Each case is a small HTML fragment with one obvious defect, plus one compliant control:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Fragment&lt;/th&gt;
&lt;th&gt;Primary criterion&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;img-no-alt&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;img src="hero.jpg"&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1.1.1 Non-text Content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;input-no-label&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;input type="text" id="q" placeholder="Rechercher"&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1.3.1 Info and Relationships&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;low-contrast&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;p style="color:#999;background:#fff"&amp;gt;Mentions légales&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1.4.3 Contrast (Minimum)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;div-button&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;div onclick="go()"&amp;gt;Valider&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2.1.1 Keyboard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;no-lang&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Accueil&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;Bonjour&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;3.1.1 Language of Page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ok-link&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;a href="/contact"&amp;gt;Nous contacter&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;NONE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The prompt is one paragraph: you are auditing a French public site, here is the fragment, answer with the WCAG 2.2 criterion number only, or NONE. (Every id above is unchanged between WCAG 2.1 and 2.2, so the RGAA mapping holds either way.)&lt;/p&gt;

&lt;p&gt;Grading is deterministic, no judge model. A case passes when the answer contains any &lt;em&gt;defensible&lt;/em&gt; criterion for that fragment. Two fragments genuinely break more than one rule: a clickable &lt;code&gt;div&lt;/code&gt; fails both Keyboard (2.1.1) and Name, Role, Value (4.1.2); an unlabeled input fails 1.3.1, 3.3.2 Labels or Instructions, and 4.1.2. My first local draft accepted only the primary id, and the first model I ran lost two points for answers I would have accepted from a junior auditor. That draft was grading taste in criteria, not the ability to spot the defect, so I widened it before pushing to Kaggle. I kept the strict count as a second column because the gap between the two turned out to be the interesting part.&lt;/p&gt;

&lt;p&gt;Score is cases passed out of 6. The whole task is one Python file: six cases, one prompt template, one loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Models Tested
&lt;/h2&gt;

&lt;p&gt;Five models from the Kaggle model proxy, chosen to cover three labs, two price tiers, and two open-weight reasoning models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Sonnet 5&lt;/strong&gt; (Anthropic)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3 Flash Preview&lt;/strong&gt; and &lt;strong&gt;Gemini 3.7 Flash&lt;/strong&gt; (Google)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;gpt-oss-120b&lt;/strong&gt; (OpenAI, open weights)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DeepSeek-R1-0528&lt;/strong&gt; (DeepSeek, open weights)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted to see whether chain-of-thought buys anything on a task where the answer is a bare id.&lt;/p&gt;

&lt;h2&gt;
  
  
  Findings
&lt;/h2&gt;

&lt;p&gt;Results from task version 2 on Kaggle:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Lenient (any defensible criterion)&lt;/th&gt;
&lt;th&gt;Strict (primary only)&lt;/th&gt;
&lt;th&gt;Cost for 6 cases&lt;/th&gt;
&lt;th&gt;Latency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5&lt;/td&gt;
&lt;td&gt;6/6&lt;/td&gt;
&lt;td&gt;4/6&lt;/td&gt;
&lt;td&gt;$0.007&lt;/td&gt;
&lt;td&gt;10 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3 Flash Preview&lt;/td&gt;
&lt;td&gt;6/6&lt;/td&gt;
&lt;td&gt;5/6&lt;/td&gt;
&lt;td&gt;$0.026&lt;/td&gt;
&lt;td&gt;44 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.7 Flash&lt;/td&gt;
&lt;td&gt;6/6&lt;/td&gt;
&lt;td&gt;5/6&lt;/td&gt;
&lt;td&gt;$0.027&lt;/td&gt;
&lt;td&gt;68 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-oss-120b&lt;/td&gt;
&lt;td&gt;5/6&lt;/td&gt;
&lt;td&gt;4/6&lt;/td&gt;
&lt;td&gt;$0.0005&lt;/td&gt;
&lt;td&gt;149 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek-R1-0528&lt;/td&gt;
&lt;td&gt;6/6 *&lt;/td&gt;
&lt;td&gt;6/6 *&lt;/td&gt;
&lt;td&gt;$0.059&lt;/td&gt;
&lt;td&gt;65 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;* DeepSeek ignored "criterion number only" and answered in prose, naming every candidate criterion for the ambiguous cases. Substring grading cannot tell an answer from an enumeration, so its strict column is not comparable. More on that below.&lt;/p&gt;

&lt;p&gt;Per case, what each model answered:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Expected&lt;/th&gt;
&lt;th&gt;Sonnet 5&lt;/th&gt;
&lt;th&gt;Gemini 3 Flash&lt;/th&gt;
&lt;th&gt;Gemini 3.7 Flash&lt;/th&gt;
&lt;th&gt;gpt-oss-120b&lt;/th&gt;
&lt;th&gt;DeepSeek-R1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;img-no-alt&lt;/td&gt;
&lt;td&gt;1.1.1&lt;/td&gt;
&lt;td&gt;1.1.1&lt;/td&gt;
&lt;td&gt;1.1.1&lt;/td&gt;
&lt;td&gt;1.1.1&lt;/td&gt;
&lt;td&gt;1.1.1&lt;/td&gt;
&lt;td&gt;1.1.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;input-no-label&lt;/td&gt;
&lt;td&gt;1.3.1&lt;/td&gt;
&lt;td&gt;3.3.2&lt;/td&gt;
&lt;td&gt;3.3.2&lt;/td&gt;
&lt;td&gt;3.3.2&lt;/td&gt;
&lt;td&gt;3.3.2&lt;/td&gt;
&lt;td&gt;1.3.1, 3.3.2, 4.1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;low-contrast&lt;/td&gt;
&lt;td&gt;1.4.3&lt;/td&gt;
&lt;td&gt;1.4.3&lt;/td&gt;
&lt;td&gt;1.4.3&lt;/td&gt;
&lt;td&gt;1.4.3&lt;/td&gt;
&lt;td&gt;1.4.3&lt;/td&gt;
&lt;td&gt;1.4.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;div-button&lt;/td&gt;
&lt;td&gt;2.1.1&lt;/td&gt;
&lt;td&gt;4.1.2&lt;/td&gt;
&lt;td&gt;2.1.1&lt;/td&gt;
&lt;td&gt;2.1.1&lt;/td&gt;
&lt;td&gt;2.1.1&lt;/td&gt;
&lt;td&gt;2.1.1, 4.1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;no-lang&lt;/td&gt;
&lt;td&gt;3.1.1&lt;/td&gt;
&lt;td&gt;3.1.1&lt;/td&gt;
&lt;td&gt;3.1.1&lt;/td&gt;
&lt;td&gt;3.1.1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;3.1.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ok-link&lt;/td&gt;
&lt;td&gt;NONE&lt;/td&gt;
&lt;td&gt;NONE&lt;/td&gt;
&lt;td&gt;NONE&lt;/td&gt;
&lt;td&gt;NONE&lt;/td&gt;
&lt;td&gt;NONE&lt;/td&gt;
&lt;td&gt;compliant&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Spotting the defect was the easy part on these six cases. Naming the canonical rule was not.&lt;/strong&gt; Every model found every defect and none flagged the compliant link. The single lenient miss in the table is not a knowledge miss: gpt-oss-120b answered &lt;code&gt;3&lt;/code&gt; on the missing-lang page, a truncated &lt;code&gt;3.1.1&lt;/code&gt; after 225 tokens of reasoning. The only real disagreement is &lt;em&gt;which&lt;/em&gt; criterion to cite for the two multi-rule fragments. Every model that gave a single answer picked 3.3.2 over 1.3.1 for the unlabeled input, and Sonnet picked 4.1.2 over 2.1.1 for the &lt;code&gt;div&lt;/code&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The pick is not stable within one model.&lt;/strong&gt; I ran the task twice on Kaggle, 21 minutes apart; the two versions differ only in how the score is returned, not in the prompt. Sonnet answered 1.3.1 for the input the first time and 3.3.2 the second. Gemini 3 Flash Preview answered 4.1.2 for the &lt;code&gt;div&lt;/code&gt; the first time and 2.1.1 the second. If you grade on exact id, you are measuring sampling noise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The control case held.&lt;/strong&gt; Every run on the clean &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;, across both task versions and all five models, said it was compliant. For a first-pass audit tool, the false-positive rate on obviously good markup matters more than the hit rate on obviously bad markup, because false positives are what make a human stop trusting the tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Format compliance is its own axis, and the reasoning models lost it.&lt;/strong&gt; DeepSeek-R1 got every case right and still broke the contract: it answered in paragraphs, listed all three candidate criteria for the input, and its visible output includes the full &lt;code&gt;&amp;lt;think&amp;gt;&lt;/code&gt; block. gpt-oss-120b kept the format but truncated an answer. The three proprietary models returned exactly the bare id asked for, every time. For anything you plan to pipe into a script, that is the number that decides.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reasoning tokens are where the money goes.&lt;/strong&gt; Sonnet answered the six cases in 10 seconds for under a cent. The two Gemini Flash models took 4 to 7 times longer and cost 4 times more, almost all of it output tokens spent thinking before emitting a five-character id. DeepSeek-R1 was the most expensive run at $0.059, eight times Sonnet, for the same six verdicts. gpt-oss-120b was the cheapest at $0.0005, but one case alone sat on the proxy for two minutes, and the first run was killed by a 429 before it finished.&lt;/p&gt;

&lt;p&gt;What surprised me: I expected the cheap models to miss the contrast case, since judging &lt;code&gt;#999&lt;/code&gt; on white needs an actual ratio (2.85:1, below the 4.5:1 floor). Nobody missed it.&lt;/p&gt;

&lt;p&gt;What I would measure next: fragments with &lt;em&gt;two&lt;/em&gt; defects where the model has to list both; the RGAA numbering (criterion 1.1, 11.1, and so on) instead of WCAG ids, since French audits are delivered in that vocabulary; and real pages with axe-core as the ground truth, which is where a six-case set stops being enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Benchmark
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.kaggle.com/benchmarks/tasks/delphine53303/rgaa-a11y-judgement" rel="noopener noreferrer"&gt;https://www.kaggle.com/benchmarks/tasks/delphine53303/rgaa-a11y-judgement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Task source, cover and raw run files: &lt;a href="https://github.com/yvoolab/rgaa-a11y-benchmark" rel="noopener noreferrer"&gt;https://github.com/yvoolab/rgaa-a11y-benchmark&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>kagglechallenge</category>
      <category>ai</category>
      <category>a11y</category>
    </item>
    <item>
      <title>Touch Grass: the best hours to be outside, forecast on your own laptop with TabPFN</title>
      <dc:creator>Yvoo</dc:creator>
      <pubDate>Fri, 09 Oct 2026 00:43:41 +0000</pubDate>
      <link>https://dev.to/yvoolab/touch-grass-the-best-hours-to-be-outside-forecast-on-your-own-laptop-with-tabpfn-57n7</link>
      <guid>https://dev.to/yvoolab/touch-grass-the-best-hours-to-be-outside-forecast-on-your-own-laptop-with-tabpfn-57n7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;A one-file forecaster that answers one question: &lt;strong&gt;which two hours tomorrow are worth going outside for?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It pulls 70 days of hourly weather for your city from Open-Meteo, hands that table to TabPFN, Prior Labs' open tabular foundation model, and gets back tomorrow's temperature, rain, wind and cloud hour by hour, with an uncertainty band. A transparent score turns that into three ranked windows. The output is a single offline HTML page: open it on your phone, read the top line, put the phone away.&lt;/p&gt;

&lt;p&gt;No account, no API key, no GPU, no cloud. The model runs on a laptop CPU in about five minutes, honesty check included.&lt;/p&gt;

&lt;p&gt;Who it is for: anyone who plans a run, a walk with a kid, or a lunch outside around the weather, and would rather own the thing that tells them when than refresh an app with ads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Live page for Paris, built on the night of 8 October for 9 October:&lt;br&gt;
&lt;a href="https://yvoolab.github.io/touch-grass-tabpfn/" rel="noopener noreferrer"&gt;https://yvoolab.github.io/touch-grass-tabpfn/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy2l60j93a84kevnpp7s2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy2l60j93a84kevnpp7s2.png" alt="Touch Grass page for Paris: best windows, temperature band, rain bars, holdout table" width="800" height="1492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run it yourself for any coordinates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;&lt;span class="nv"&gt;tabpfn&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;9.1.0 numpy
python touch_grass.py &lt;span class="nt"&gt;--lat&lt;/span&gt; 45.76 &lt;span class="nt"&gt;--lon&lt;/span&gt; 4.84 &lt;span class="nt"&gt;--name&lt;/span&gt; Lyon &lt;span class="nt"&gt;--tz&lt;/span&gt; Europe/Paris
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/yvoolab/touch-grass-tabpfn" rel="noopener noreferrer"&gt;https://github.com/yvoolab/touch-grass-tabpfn&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/yvoolab" rel="noopener noreferrer"&gt;
        yvoolab
      &lt;/a&gt; / &lt;a href="https://github.com/yvoolab/touch-grass-tabpfn" rel="noopener noreferrer"&gt;
        touch-grass-tabpfn
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Best hours to be outside today, forecast locally from your own weather CSV with TabPFN (open weights, CPU, offline HTML)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Touch Grass&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Which hours tomorrow are worth being outside, forecast on your own laptop from a plain CSV of past weather. No account, no API key, no GPU, no cloud. One Python file, one offline HTML page.&lt;/p&gt;

&lt;p&gt;Built for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05" rel="nofollow"&gt;DEV Hacktoberfest Open-Source AI Challenge, Week 1: Touch Grass&lt;/a&gt;. The open-source AI at the core is &lt;a href="https://github.com/PriorLabs/TabPFN" rel="noopener noreferrer"&gt;TabPFN&lt;/a&gt;, Prior Labs' tabular foundation model.&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/yvoolab/touch-grass-tabpfn/docs/screenshot.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fyvoolab%2Ftouch-grass-tabpfn%2FHEAD%2Fdocs%2Fscreenshot.png" alt="Touch Grass page for Paris"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live page: &lt;a href="https://yvoolab.github.io/touch-grass-tabpfn/" rel="nofollow noopener noreferrer"&gt;https://yvoolab.github.io/touch-grass-tabpfn/&lt;/a&gt; (regenerated by hand, not on a schedule; the date in the header is the day it was built for).&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What it does&lt;/h2&gt;
&lt;/div&gt;


&lt;ol&gt;

&lt;li&gt;Pulls about 70 days of hourly weather for one place from &lt;a href="https://open-meteo.com/" rel="nofollow noopener noreferrer"&gt;Open-Meteo&lt;/a&gt; (free, no key). Saved to &lt;code&gt;data/&amp;lt;place&amp;gt;_hourly.csv&lt;/code&gt; so the next run can be fully offline.&lt;/li&gt;

&lt;li&gt;Turns it into a flat table: hour of day, weekday, and what temperature, rain, wind and cloud were 1, 2, 3 and 7 days earlier.&lt;/li&gt;

&lt;li&gt;Fits one TabPFN regressor per variable on the last 41…&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/yvoolab/touch-grass-tabpfn" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;One Python file, 300 lines, MIT. &lt;code&gt;touch_grass.py&lt;/code&gt; is the whole thing: fetch, features, four TabPFN fits, holdout, score, HTML. The saved CSV lets you rerun it fully offline.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The open-source AI at the core is TabPFN v2&lt;/strong&gt;, used as a plain regressor, no agent wrapper. Four models, one per variable, each fit on 984 rows and asked for 24 predictions.&lt;/p&gt;

&lt;p&gt;The data shape is deliberately boring. Each row is one hour of one day: hour of day, weekday, and what each variable was 2, 3, 4 and 7 days earlier. That is the whole feature set. TabPFN is pretrained on millions of synthetic tables, so it does not need me to hand-craft seasonality; it needs me to give it an honest table and stay out of the way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The part I care most about is the honesty check.&lt;/strong&gt; Before forecasting tomorrow, the pipeline re-predicts the last three fully observed days, each from only the days before it, and prints mean absolute error next to the dumbest baseline there is: the same hour two days earlier. Paris, this week:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;TabPFN&lt;/th&gt;
&lt;th&gt;Same hour 2 days earlier&lt;/th&gt;
&lt;th&gt;Model better?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Temperature (°C)&lt;/td&gt;
&lt;td&gt;2.83&lt;/td&gt;
&lt;td&gt;1.67&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rain (mm/h)&lt;/td&gt;
&lt;td&gt;0.10&lt;/td&gt;
&lt;td&gt;0.11&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wind (km/h)&lt;/td&gt;
&lt;td&gt;2.38&lt;/td&gt;
&lt;td&gt;3.43&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud (%)&lt;/td&gt;
&lt;td&gt;51.5&lt;/td&gt;
&lt;td&gt;63.8&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The model wins on wind and cloud, ties on rain, and &lt;strong&gt;loses on temperature&lt;/strong&gt;. In a stable October week, "same as two days ago" is a hard baseline for temperature with 41 days of lags and no numerical forecast as input. The page says so in a table, not in a footnote. If a tool is going to tell you when to leave the house, it should show you when it was wrong.&lt;/p&gt;

&lt;p&gt;Three choices worth stating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Why lags of 2+ days instead of 1.&lt;/strong&gt; When you run this at night for tomorrow, "yesterday" is the last day whose 24 hours are all behind you. Using today's values would mean feeding the model Open-Meteo's own forecast for the hours that have not happened yet. The lag structure shifts with the target day so nothing leaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why the score is a formula on the page, not a learned label.&lt;/strong&gt; If I trained the model to predict a "comfort score" I computed from the same columns, it would learn my rule back and the holdout table would be meaningless. The model predicts weather; the rule is applied afterwards and is yours to edit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why 41 days and 4 ensemble members.&lt;/strong&gt; TabPFN v2 caps CPU fits at 1,000 rows, so 41 × 24. Four ensemble members instead of eight halves the CPU time with the same story. Both are constants at the top of the file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built with Claude Code at the keyboard and me deciding what the thing is for, which baseline counts, and what goes on the page. Every number above comes from a run on my laptop, not from a notebook I cleaned up afterwards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Here is the specific thing open weights made possible: &lt;strong&gt;this project is a single file anyone can run in five minutes without creating an account anywhere.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That was not automatic. &lt;code&gt;tabpfn&lt;/code&gt; 9.1.0 defaults to the newest TabPFN-3.5 checkpoint, which is gated behind a Prior Labs login and a non-commercial license. The v2 weights are ungated on Hugging Face under the Prior Labs License v1.1, Apache-2.0 plus attribution, and they run on CPU. Selecting them is one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;TabPFNRegressor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_default_for_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ModelVersion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;V2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cpu&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With a closed API, three things in this project would not exist. The offline rerun from a saved CSV. The honesty table, because you cannot audit a model you cannot run twice on your own data. And the "put the phone away" ending, because a page that needs a server to refresh is a page that pulls you back to the screen. Open weights are what let a weather tool be something you own rather than something you visit.&lt;/p&gt;

&lt;p&gt;Attribution: TabPFN-v2 weights by Prior Labs. Hollmann et al., &lt;em&gt;Accurate predictions on small data with a tabular foundation model&lt;/em&gt;, Nature 637 (2025). Weather data by Open-Meteo, CC BY 4.0.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;Best Use of TabPFN&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>python</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>How to Check AI Math: A Copy-Paste Prompt That Catches Wrong Numbers in AI Answers (Tested)</title>
      <dc:creator>Yvoo</dc:creator>
      <pubDate>Thu, 08 Oct 2026 15:38:30 +0000</pubDate>
      <link>https://dev.to/yvoolab/how-to-check-ai-math-a-copy-paste-prompt-that-catches-wrong-numbers-in-ai-answers-tested-dhk</link>
      <guid>https://dev.to/yvoolab/how-to-check-ai-math-a-copy-paste-prompt-that-catches-wrong-numbers-in-ai-answers-tested-dhk</guid>
      <description>&lt;p&gt;When an AI answer gets a number wrong, it is rarely the multiplication. It is the setup around it: a percentage taken of the wrong base, a yearly rate split into months as if compounding didn't exist, a figure that quietly changes between step two and step five. The arithmetic is clean, the table is formatted, and the conclusion is off.&lt;/p&gt;

&lt;p&gt;You can't catch that by glancing at the result, and re-running the same question usually reproduces the same setup. What works is a second pass that rebuilds every calculated number from your inputs, then checks the base and the units separately from the arithmetic. Below is that prompt, a test run scored against values computed in Python, and what the test does and doesn't prove.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do wrong numbers in an AI answer actually look like?
&lt;/h2&gt;

&lt;p&gt;Five shapes cover most of them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wrong base.&lt;/strong&gt; A percent change divided by the new value instead of the old one. Profit going from 35,913 to 39,075 is +8.8%, not +8.1%; both look reasonable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple vs. compounded.&lt;/strong&gt; "18% a year is 1.5% a month." It isn't: 1.5% compounded monthly is about 19.6% a year. The compounded monthly rate for 18% is about 1.39%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drifting inputs.&lt;/strong&gt; A rate, a count, or a number of months that changes between steps without anyone saying so.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rounding stated one way, used another.&lt;/strong&gt; "About 2,207 orders" in the text, 2,206.6 in the formula.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Percent vs. percentage points.&lt;/strong&gt; A margin going from 42.6% to 39.3% fell 3.3 points, which is not the same as falling 3.3%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these is an arithmetic error. That's why "double-check your math" as an instruction does so little: the model re-does the multiplication and confirms it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The copy-paste math-check prompt
&lt;/h2&gt;

&lt;p&gt;Paste it into a &lt;strong&gt;fresh chat&lt;/strong&gt; in ChatGPT, Claude, or Gemini, not the one that produced the answer, with your original question and the AI's answer filled in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Check the numbers in the AI answer below. Do not trust any figure in it.

1. List every number in the answer that was calculated (not copied from my question). For each, write the formula that should produce it, using only figures from my question.
2. Recompute each one yourself, one operation per line. Work it out before you look at the answer's value.
3. Mark each one MATCH, MISMATCH (give both values), or CAN'T TELL (say which assumption it hinges on).
4. Check the inputs: flag any figure the answer used that isn't in my question, or that changed between steps (a rate, a count, a number of months).
5. Check the base and the units: percentages taken of the right base, monthly vs. yearly, per-order vs. total, percent change vs. percentage points, simple vs. compounded.
6. Finish with one line: the wrong number that would change a decision, if there is one.

My original question:
[paste question]

The AI answer:
[paste answer]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 1 is the important one. Writing the formula from &lt;em&gt;your&lt;/em&gt; inputs, before looking at the answer's value, is what separates a check from a rubber stamp. Step 5 exists because base and unit errors survive step 2: recomputing a wrong formula gives the same wrong number.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens on a real AI answer?
&lt;/h2&gt;

&lt;p&gt;I asked a model (Claude Sonnet, no tools, no code execution) a small-business question with eleven inputs: last year's revenue, cost of goods as a percentage, a monthly subscription, ads for nine months, payment fees of 2.9% plus €0.30 per order across 1,870 orders. Then next year with 18% growth and ads running all twelve months. It asked for both years' profit, the percentage change, and the compounded monthly rate equal to 18% a year.&lt;/p&gt;

&lt;p&gt;Then I computed every figure in Python.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The model got all of it right.&lt;/strong&gt; Last year's profit €35,913.30, next year's €39,074.93, +8.8%, 1.39% a month. It even added that 18% ÷ 12 = 1.5% would compound to about 19.6%. The only blemish: it wrote "about 2,207 orders" and then used 2,206.6 in the fee line, a €0.12 difference.&lt;/p&gt;

&lt;p&gt;So the first test was a test of false alarms. I ran the check prompt on that answer in a fresh context (Claude Sonnet, no code execution):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Every calculated figure: MATCH.&lt;/strong&gt; No false positives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The 2,207 vs. 2,206.6 inconsistency&lt;/strong&gt;, flagged as CAN'T TELL with "no effect on the result," which is correct.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An assumption the question left open:&lt;/strong&gt; whether revenue and costs were both stated net or gross of VAT. I hadn't said, and it was right to ask.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A clean answer is useful to have, but it doesn't show the prompt catches anything. So I made a copy of the same answer with &lt;strong&gt;two planted errors&lt;/strong&gt;, the first two shapes above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Percent change divided by next year's profit: &lt;strong&gt;+8.1%&lt;/strong&gt; instead of +8.8%.&lt;/li&gt;
&lt;li&gt;Monthly rate given as &lt;strong&gt;18 ÷ 12 = 1.5%&lt;/strong&gt;, labeled compounded.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A second fresh context ran the same prompt on the planted copy:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;True value&lt;/th&gt;
&lt;th&gt;Planted&lt;/th&gt;
&lt;th&gt;Checker verdict&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Profit change&lt;/td&gt;
&lt;td&gt;+8.8%&lt;/td&gt;
&lt;td&gt;+8.1%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;MISMATCH&lt;/strong&gt;, and it named the cause: divided by next year's profit instead of last year's&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monthly rate&lt;/td&gt;
&lt;td&gt;1.39%&lt;/td&gt;
&lt;td&gt;1.5%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;MISMATCH&lt;/strong&gt;, "a simple division presented as a compounded rate," with 1.015^12 ≈ 1.196 as proof&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Every other figure&lt;/td&gt;
&lt;td&gt;correct&lt;/td&gt;
&lt;td&gt;correct&lt;/td&gt;
&lt;td&gt;MATCH&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two planted errors, two caught, zero false positives across both runs. It also checked a claim hidden in prose, that the ad increase absorbs most of the extra gross margin, and confirmed it: ads take 5,250 of 8,411.63, about 62%.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where does this prompt stop?
&lt;/h2&gt;

&lt;p&gt;Three limits showed up in the test itself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The two runs didn't flag the same things.&lt;/strong&gt; The first raised the VAT question; the second didn't. Run it once and you get one reading, not a guarantee.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It contradicted itself once.&lt;/strong&gt; In the planted run it called the 2,206.6 figure "consistent," then noted the same 2,207 vs. 2,206.6 gap in the very next section, under Inputs. Read the whole output, not just the summary line.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It checks with the same kind of mental arithmetic that made the answer.&lt;/strong&gt; That held up here, but a checker and an answerer that share a blind spot will agree on the wrong number.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the bigger limit: this was one question, two runs, one model. It shows the prompt finds the errors it is built to find. It doesn't show it finds everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you make the numbers trustworthy?
&lt;/h2&gt;

&lt;p&gt;Use the prompt for triage, then settle anything that matters outside the chat:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Take the formulas from step 1 and run them yourself.&lt;/strong&gt; A spreadsheet or three lines of Python. You're checking the model's formulas, which is faster than checking its arithmetic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read step 5's verdict on the base first.&lt;/strong&gt; Wrong base and simple-vs-compounded are the errors that change decisions, and they're the ones a calculator won't catch for you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat every CAN'T TELL as a question back to yourself.&lt;/strong&gt; In the test, the VAT basis was a real gap in my question, not in the answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix the input, not the output.&lt;/strong&gt; If a number is wrong because the setup was wrong, correct the question and regenerate. Patching one figure in a table leaves the figures derived from it wrong.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Can't I just tell the AI to use Python?
&lt;/h2&gt;

&lt;p&gt;If your model can run code, yes, and the arithmetic will be exact. It still won't fix the setup. Code computes &lt;code&gt;3161.63 / 39074.93&lt;/code&gt; perfectly, and +8.1% is still the wrong answer to "how much did profit grow." The check that matters is whether each number is the right formula for the question you asked, and that is what steps 1 and 5 of the prompt do.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written with AI assistance. The test question, the original answer, and both checker runs were produced as described (Claude Sonnet, no code execution, separate fresh contexts), and every value was checked in Python. The two errors in the second run were planted by me and are disclosed as such. Results are reported faithfully, including the inconsistency and the run-to-run difference.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://dev.to/yvoolab/verify-ai-output-before-you-ship-it-3-prompts-to-check-ai-accuracy-3dhi"&gt;Verify AI Output&lt;/a&gt; series, alongside &lt;a href="https://dev.to/yvoolab/how-to-catch-ai-hallucinations-a-copy-paste-hallucination-checker-prompt-tested-3bh1"&gt;catching AI hallucinations&lt;/a&gt; and &lt;a href="https://dev.to/yvoolab/how-to-check-ai-citations-a-copy-paste-prompt-that-catches-fake-sources-tested-g78"&gt;checking AI citations&lt;/a&gt;. I keep my verification prompts, this one included, in one Notion workspace; if you want that library already organized, &lt;a href="https://yvoo.gumroad.com/l/ai-notion-workspace?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free" rel="noopener noreferrer"&gt;the AI-Augmented Notion Workspace&lt;/a&gt; is free, pay what you want.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you run your AI work on a system, run the rest on one too. An ATS resume template in English and French, for Word and Google Docs: &lt;a href="https://yvoo.gumroad.com/l/ats-resume?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free-to-paid" rel="noopener noreferrer"&gt;on Gumroad&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>productivity</category>
      <category>promptengineering</category>
    </item>
    <item>
      <title>How to Check AI Citations: A Copy-Paste Prompt That Catches Fake Sources (Tested)</title>
      <dc:creator>Yvoo</dc:creator>
      <pubDate>Tue, 29 Sep 2026 14:51:35 +0000</pubDate>
      <link>https://dev.to/yvoolab/how-to-check-ai-citations-a-copy-paste-prompt-that-catches-fake-sources-tested-g78</link>
      <guid>https://dev.to/yvoolab/how-to-check-ai-citations-a-copy-paste-prompt-that-catches-fake-sources-tested-g78</guid>
      <description>&lt;p&gt;Ask an AI model for sources and it will give you sources. Authors, year, journal, volume, pages — the full costume of scholarship. The trouble is that the costume is exactly what the model is best at producing. A citation can be 90% real and still be wrong in the one place that matters, and nothing in its formatting tells you which 10% to distrust.&lt;/p&gt;

&lt;p&gt;The usual advice — "always check the sources" — is correct and useless, because nobody checks four references by hand every time. What works is a triage step: a prompt that tells you &lt;em&gt;which&lt;/em&gt; citation to check, &lt;em&gt;which detail&lt;/em&gt; in it is shaky, and &lt;em&gt;the exact query&lt;/em&gt; that settles it in under a minute. Below is that prompt, a test run scored against the real bibliographic records, and an honest account of what it missed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does a fake ChatGPT citation actually look like?
&lt;/h2&gt;

&lt;p&gt;Rarely a paper that doesn't exist at all. The common shapes, roughly from easiest to hardest to spot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Invented paper&lt;/strong&gt; — plausible authors, plausible journal, no such article. The classic, and the one people already know to look for.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real paper, rewritten title&lt;/strong&gt; — the authors, year, journal, and page numbers are all correct; the title has been paraphrased into something the paper never said. Passes a glance, fails a copy-paste search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real paper, wrong job&lt;/strong&gt; — the citation is accurate, but the text uses it for a claim the study didn't test.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real paper, stale finding&lt;/strong&gt; — accurate citation, accurate summary, and the result has since failed to replicate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last three are the dangerous ones, because every surface check — "does this author exist, does this journal exist" — comes back clean.&lt;/p&gt;

&lt;h2&gt;
  
  
  The copy-paste citation-check prompt
&lt;/h2&gt;

&lt;p&gt;Paste it into a &lt;strong&gt;fresh chat&lt;/strong&gt; — not the one that produced the answer, so the model has no stake in defending its own references. It works the same in ChatGPT, Claude, or Gemini:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Audit every source cited in the text below. Do not assume any of them exist.
For each citation:
1. Copy it exactly as written.
2. Rate it: LIKELY REAL / UNSURE / LIKELY FABRICATED, with one line why.
3. Name the one detail most likely to be wrong (author, year, title, venue,
   or the finding it is cited for).
4. Does the text use it for something the source actually studies? (yes/no/unsure + why)
5. Give the exact query a human should paste into Google Scholar to settle it.
Then list any claims in the text that sound sourced but cite nothing.
Text: [PASTE THE AI ANSWER WITH ITS SOURCES]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 4 is the one most citation checkers skip, and it's where a lot of the damage lives. A real paper used for the wrong claim is more persuasive than a fake one, because it survives the existence check.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens on a real AI answer?
&lt;/h2&gt;

&lt;p&gt;I didn't plant errors this time. I asked a model, with no web access, a normal question: &lt;em&gt;what does the research say about whether the Pomodoro technique improves focus and productivity — cite 4 academic sources.&lt;/em&gt; It returned a careful answer that admitted direct research on the technique is limited, plus four references. Then I ran the citation check on that answer in a fresh context (one pass, Claude Sonnet), and separately verified all four references against their publisher records and DOIs.&lt;/p&gt;

&lt;p&gt;Ground truth first:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Citation as given&lt;/th&gt;
&lt;th&gt;Reality&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Ariga &amp;amp; Lleras (2011), &lt;em&gt;Cognition&lt;/em&gt; 118(3)&lt;/td&gt;
&lt;td&gt;Real paper, correct authors, journal, and pages. &lt;strong&gt;Subtitle rewritten&lt;/strong&gt; — the real one ends "…task goals preempt vigilance decrements", not "…mediate the effects of switching on vigilance".&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Trougakos et al. (2014), &lt;em&gt;Academy of Management Journal&lt;/em&gt; 57(2)&lt;/td&gt;
&lt;td&gt;Real paper, correct metadata. &lt;strong&gt;Title rewritten&lt;/strong&gt; — given as "Lunch breaks unpack: Individual choices influence recovery effects and end-of-day well-being"; the real one is "Lunch Breaks Unpacked: The Role of Autonomy as a Moderator of Recovery during Lunch".&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Zacher, Brailsford &amp;amp; Parker (2014), &lt;em&gt;Journal of Vocational Behavior&lt;/em&gt; 85(3)&lt;/td&gt;
&lt;td&gt;Correct, word for word.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Baumeister et al. (1998), &lt;em&gt;Journal of Personality and Social Psychology&lt;/em&gt; 74(5)&lt;/td&gt;
&lt;td&gt;Correct, word for word. The effect it reports did not replicate in a 23-lab preregistered study (Hagger et al., 2016).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No invented papers. Two of four titles quietly rewritten, with every number around them correct. That is what an honest-looking AI bibliography tends to look like, and it's why "the DOI-style details check out" proves very little.&lt;/p&gt;

&lt;p&gt;What the checker caught:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;#2 flagged UNSURE, title named as the weak detail.&lt;/strong&gt; It said the title did not match its recollection and that the real paper centers on autonomy as a moderator of recovery — which is exactly right.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;#2's misuse, too.&lt;/strong&gt; The text used a study of the midday lunch break as evidence for Pomodoro-style short breaks. The checker called that "a scope mismatch even if the citation itself is real."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;#4's stale finding.&lt;/strong&gt; Citation rated LIKELY REAL (correct), but step 4 came back "unsure/partially no", and the checker noted the 1998 study did not test whether breaks restore performance, and flagged the effect's "serious replication failures." The original answer mentioned neither.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The unsourced summary.&lt;/strong&gt; It singled out the closing "the consensus is…" sentence as the strongest claim in the passage with no citation behind it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What did it miss?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;#1.&lt;/strong&gt; It rated Ariga &amp;amp; Lleras LIKELY REAL and guessed the page range was the detail most likely to drift. The pages were right; the subtitle was invented. The checker recognized the paper and never questioned the title wording.&lt;/p&gt;

&lt;p&gt;That miss is the whole lesson. A model auditing citations from memory has the same memory that produced them. When it knows a paper well, it confirms the paper exists — and a rewritten subtitle sails through with it. The prompt narrowed four citations to one confirmed problem, one misuse, and one outdated finding; it did not make the fourth check unnecessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you settle the flagged ones fast?
&lt;/h2&gt;

&lt;p&gt;The prompt's real value is step 5: a ready-made query for each source. The routine that caught the miss above takes about a minute per citation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Paste the title in quotes into Google Scholar.&lt;/strong&gt; Not the authors — the exact title. A rewritten title returns nothing, or returns the real paper with a visibly different title. That single search would have caught #1 and #2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open the publisher page, not a summary.&lt;/strong&gt; Compare the title and the abstract with the claim the text makes. This is where "wrong job" citations show up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search the finding plus "replication".&lt;/strong&gt; For anything from psychology or nutrition before about 2015, this takes ten seconds and occasionally changes everything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix by replacing, never by softening.&lt;/strong&gt; If a citation fails, swap in the real one or delete the claim. Rewording a bad citation into "research suggests…" launders it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Can't I just tell the AI "only cite real sources"?
&lt;/h2&gt;

&lt;p&gt;You can, and it will sincerely try. The four references above came from a model that hedged its answer and admitted the direct research was thin, and it still rewrote two titles. It wasn't lying; it was reconstructing from memory, and reconstruction is lossy in precisely the places that look authoritative. An instruction can't give a model access to a record it doesn't have. A separate audit pass, plus one exact-title search per flagged source, can.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written with AI assistance. The test answer, the audit pass, and the ground-truth check were run as described — no web access for the first two, publisher records and DOIs for the third — and reported faithfully, including the miss. The input answer is summarized above; the two rewritten titles are quoted exactly as the model produced them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://dev.to/yvoolab/verify-ai-output-before-you-ship-it-3-prompts-to-check-ai-accuracy-3dhi"&gt;Verify AI Output&lt;/a&gt; series, alongside &lt;a href="https://dev.to/yvoolab/how-to-catch-ai-hallucinations-a-copy-paste-hallucination-checker-prompt-tested-3bh1"&gt;catching AI hallucinations&lt;/a&gt; and &lt;a href="https://dev.to/yvoolab/how-to-fact-check-chatgpt-the-copy-paste-prompt-i-use-to-verify-ai-output-47b9"&gt;fact-checking ChatGPT&lt;/a&gt;. I keep my research prompts — literature review with a no-invented-citations rule, source compilation, fact verification — in one Notion workspace; if you want that library already organized, &lt;a href="https://yvoo.gumroad.com/l/ai-notion-workspace?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free" rel="noopener noreferrer"&gt;the AI-Augmented Notion Workspace&lt;/a&gt; is free, pay what you want.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you run your AI work on a system, run the rest on one too. An ATS resume template in English and French, for Word and Google Docs: &lt;a href="https://yvoo.gumroad.com/l/ats-resume?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free-to-paid" rel="noopener noreferrer"&gt;on Gumroad&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>llm</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Notion AI vs. NotebookLM: Which One Should Hold Your Notes?</title>
      <dc:creator>Yvoo</dc:creator>
      <pubDate>Tue, 25 Aug 2026 12:29:26 +0000</pubDate>
      <link>https://dev.to/yvoolab/notion-ai-vs-notebooklm-which-one-should-hold-your-notes-44ip</link>
      <guid>https://dev.to/yvoolab/notion-ai-vs-notebooklm-which-one-should-hold-your-notes-44ip</guid>
      <description>&lt;p&gt;Notion AI vs. NotebookLM is a comparison between two tools that both say "ask questions about your own stuff" and mean different things by it. Notion AI works on content that is already living in your Notion workspace — pages, databases, meeting notes — and can act on it (fill a property, draft a page, summarize a thread). NotebookLM is a reading tool: you hand it a fixed set of sources, and it answers only from those sources, with citations back to the exact passage. Google renamed NotebookLM to Gemini Notebook in July 2026; it's the same product, and this article uses both names. One is a workspace with AI inside it; the other is a research desk with no workspace at all.&lt;/p&gt;

&lt;p&gt;That difference decides the choice more than any feature list does. If your material is &lt;em&gt;in Notion&lt;/em&gt; and you want it &lt;em&gt;worked on&lt;/em&gt;, Notion AI. If your material is a pile of PDFs, transcripts, and docs and you want to &lt;em&gt;interrogate it without hallucinations&lt;/em&gt;, NotebookLM. Most people who search this comparison actually need both, in a specific order. The rest of this article is about that order.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is NotebookLM the same kind of tool as Notion AI?
&lt;/h2&gt;

&lt;p&gt;No. NotebookLM is source-grounded by design: every answer comes from the documents you uploaded to that notebook, and it shows inline citations so you can check them. It does not know anything you didn't give it, and that limitation is the feature. Google's own help pages list what a source can be — PDF, Google Docs, Slides, Sheets, Word, text and Markdown files, web pages, public YouTube videos with captions, audio files, images, ePub, or pasted text — with a cap of 500,000 words or 200 MB per source and up to 50 sources per notebook on the free Standard tier (&lt;a href="https://support.google.com/gemininotebook/answer/16215270" rel="noopener noreferrer"&gt;Gemini Notebook help: sources&lt;/a&gt;); paid Google AI plans raise that to 100–600 depending on tier (&lt;a href="https://support.google.com/gemininotebook/answer/16213268" rel="noopener noreferrer"&gt;plan limits&lt;/a&gt;, checked 2026-08-25).&lt;/p&gt;

&lt;p&gt;Notion AI is not a notebook; it's a layer over a workspace. It reads your pages and databases without you uploading anything, and it can write back: autofill a database property, draft inside a page, summarize a page, and — on the Business plan — run the Notion Agent, AI Meeting Notes, Enterprise Search, and Research Mode (&lt;a href="https://www.notion.com/pricing" rel="noopener noreferrer"&gt;Notion pricing&lt;/a&gt;, checked 2026-08-25). Free and Plus plans get "trial" AI only.&lt;/p&gt;

&lt;p&gt;So the honest first question isn't "which is smarter" — it's "where does my material live, and do I want it read or acted on?"&lt;/p&gt;

&lt;h2&gt;
  
  
  What does NotebookLM do that Notion AI can't?
&lt;/h2&gt;

&lt;p&gt;Three things, and they're the reasons to keep it around even if you live in Notion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Grounded answers with citations.&lt;/strong&gt; Ask NotebookLM "what did the vendor promise about data retention?" across six contracts and it returns the passages, not a paraphrase you have to trust. Notion AI can answer questions about pages in your workspace, but the answer is a synthesis: it lists the pages it drew from, but doesn't pin each sentence to a passage the way NotebookLM does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A hard wall around the sources.&lt;/strong&gt; NotebookLM won't reach for general knowledge to fill a gap; if the answer isn't in the notebook it says so. For research, due diligence, or studying a corpus, that wall is the whole point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audio and study formats from the corpus.&lt;/strong&gt; NotebookLM can turn a notebook into a podcast-style Audio Overview, a Video Overview, a study guide, an FAQ, or a briefing doc. Notion AI generates text inside pages; it isn't built to produce a listenable summary of twelve documents.&lt;/p&gt;

&lt;p&gt;What NotebookLM can't do: it doesn't store your ongoing work, has no databases, no properties, no automations, no collaboration surface beyond sharing a notebook. It's where you go to &lt;em&gt;understand&lt;/em&gt; a body of material, not where the material &lt;em&gt;lives&lt;/em&gt; afterward.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does Notion AI do that NotebookLM can't?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Act on structured data.&lt;/strong&gt; A Notion database with an AI autofill property can tag, summarize, translate, or extract a field for every new row without you asking. NotebookLM has no rows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Work where the rest of your work already is.&lt;/strong&gt; Meeting notes, project pages, CRM-ish databases, wikis — Notion AI reads them in place. There is no upload step, and nothing goes stale because you forgot to re-upload the latest version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be part of a workflow.&lt;/strong&gt; Notion's native automations plus AI properties mean "new entry → AI summarizes → status flips → someone is notified" runs without a human in the loop. NotebookLM is a conversation; it doesn't trigger anything.&lt;/p&gt;

&lt;p&gt;What Notion AI can't do: give you a citation-locked, sources-only answer. If you need "prove it from the documents," Notion AI is the wrong tool, and its database AI is built for per-row work rather than reasoning across a whole corpus in one pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can NotebookLM read your Notion workspace?
&lt;/h2&gt;

&lt;p&gt;Not natively. As of the help pages linked above, NotebookLM's source list doesn't include a Notion connector. The workable paths are manual: export a Notion page as PDF or Markdown and add it as a source, or paste the text. That's fine for a one-off deep read of a handful of pages, and painful for anything you'd want kept in sync — which is the main reason the two tools stay separate instead of one replacing the other.&lt;/p&gt;

&lt;p&gt;The reverse doesn't exist either: Notion AI can't query a NotebookLM notebook. The bridge between them is you, exporting in one direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  So which one should you actually use?
&lt;/h2&gt;

&lt;p&gt;Use the order that matches how information actually moves:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;NotebookLM for the reading phase.&lt;/strong&gt; Drop the raw material in — contracts, transcripts, a course, a stack of papers — and interrogate it until you know what matters. Keep the citations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion for what survives.&lt;/strong&gt; The decisions, the extracted facts, the action items go into a Notion database, where AI properties keep them tagged and where the rest of your work can reference them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion AI for the ongoing part.&lt;/strong&gt; Once material lives in Notion, use Notion AI to summarize, draft, and autofill against it, because that's the material you'll touch every week.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you only have budget or attention for one: pick by where your material lives. A Notion-centric team gets more from Notion AI's Business plan than from NotebookLM. A researcher or student whose material is PDFs and lectures gets more from NotebookLM, which is free for that job, and can keep Notion on the free plan as a plain notebook.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notion AI vs. NotebookLM: the honest comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Notion AI&lt;/th&gt;
&lt;th&gt;NotebookLM&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Built for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Working on and acting on content already in your Notion pages and databases&lt;/td&gt;
&lt;td&gt;Reading and questioning a fixed set of uploaded sources, with citations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knows your material automatically?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes — it's the workspace&lt;/td&gt;
&lt;td&gt;No — you upload each source; 50 sources per notebook on the free tier, 500k words / 200 MB per source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Citations to the exact passage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Page-level references only — it lists which pages it drew from, not the passage&lt;/td&gt;
&lt;td&gt;Yes, inline, every answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Writes back / automates&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes — AI database properties, drafting in pages, Notion Agent on Business&lt;/td&gt;
&lt;td&gt;No — conversation and generated study formats only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reads Notion pages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Only via manual export or paste; no Notion connector listed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audio / study formats&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Audio Overview, Video Overview, study guide, FAQ, briefing doc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free and Plus get trial AI; full Notion AI needs Business at €19.50/member/month billed annually&lt;/td&gt;
&lt;td&gt;Free (Standard) with a Google account: 50 sources/notebook, 50 chat queries/day, 3 Audio Overviews/day; paid Google AI plans raise all three&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Neither column is the winner. The table says which tool already owns the job you're trying to do.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Prices and limits above are from each vendor's own pages as checked on 2026-08-25 — Notion's pricing page showed EUR. Both change; check before budgeting.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is NotebookLM a replacement for Notion?&lt;/strong&gt;&lt;br&gt;
No. NotebookLM has no pages, databases, tasks, or automations — it's a research tool over documents you upload. It can replace the "read a pile of PDFs and take notes" step, not the workspace where the notes end up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use NotebookLM and Notion AI together without paying for both?&lt;/strong&gt;&lt;br&gt;
Yes. NotebookLM is free with a Google account, and Notion's free plan gives you the workspace (with trial-level AI). The paid step is Notion Business if you want full Notion AI on top. The two-tool flow above works on free NotebookLM plus free Notion, minus the AI database properties.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which one hallucinates less?&lt;/strong&gt;&lt;br&gt;
NotebookLM, by construction: it answers only from the sources in the notebook and cites them, and it will say when the answer isn't there. Notion AI answers from your workspace but doesn't lock every sentence to a source. For anything you'd have to defend, verify in NotebookLM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why not just use ChatGPT or Gemini for this?&lt;/strong&gt;&lt;br&gt;
You can, and for a single document it's fine. The difference is that a general chat assistant doesn't hold a persistent, citable corpus the way NotebookLM does, and doesn't live inside your working database the way Notion AI does. Both specialized tools exist because the general one loses either the citations or the structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does NotebookLM keep my notebooks private?&lt;/strong&gt;&lt;br&gt;
Google's privacy page says notebook content isn't used to train its foundation models unless you submit feedback, and Workspace/Education accounts additionally get no human review (&lt;a href="https://support.google.com/gemininotebook/answer/17004255" rel="noopener noreferrer"&gt;privacy and terms&lt;/a&gt;). If you're uploading client material, read the page for your account type rather than assuming.&lt;/p&gt;




&lt;p&gt;This is the split I run myself: NotebookLM for the reading, a Notion database for what survives it. If you want the Notion side already built — the databases, AI properties, and SOPs wired for exactly that handoff — that's what the AI-Augmented Notion Workspace is. The full workspace is free, pay what you want: &lt;a href="https://yvoo.gumroad.com/l/ai-notion-workspace?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free" rel="noopener noreferrer"&gt;try it on a real task&lt;/a&gt; and see whether it earns a place in your setup.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you run your AI work on a system, run the rest on one too. Life &amp;amp; Work OS is a Notion life planner with a sample and a blank edition: &lt;a href="https://yvoo.gumroad.com/l/notion-life-planner?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free-to-paid" rel="noopener noreferrer"&gt;on Gumroad&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Trademarks referenced belong to their respective holders. NotebookLM, Gemini Notebook, Gemini, and Google are trademarks of Google LLC; ChatGPT is a trademark of OpenAI; Notion is a trademark of Notion Labs, Inc. This comparison is independent and not endorsed by any of them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Last updated: 2026-08&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>gemini</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Notion AI vs. Microsoft Copilot: What the New Notion Connector Actually Changes</title>
      <dc:creator>Yvoo</dc:creator>
      <pubDate>Mon, 03 Aug 2026 13:46:47 +0000</pubDate>
      <link>https://dev.to/yvoolab/notion-ai-vs-microsoft-copilot-what-the-new-notion-connector-actually-changes-4pco</link>
      <guid>https://dev.to/yvoolab/notion-ai-vs-microsoft-copilot-what-the-new-notion-connector-actually-changes-4pco</guid>
      <description>&lt;p&gt;Notion AI and Microsoft Copilot solve different problems by default: Notion AI works on content already sitting in your pages and databases, while Copilot works across the Microsoft apps you already use — Word, Excel, PowerPoint, Outlook, Teams. That split used to make the comparison simple. It got more complicated once Microsoft shipped a live connector that lets Copilot read your Notion workspace directly. Most "Notion vs. Copilot" articles were written before that existed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is Notion AI the same kind of tool as Microsoft Copilot?
&lt;/h2&gt;

&lt;p&gt;No. Notion AI is a feature inside Notion — it runs on your existing pages, databases, and connected apps, and its whole value is that it already knows where your stuff is. Microsoft Copilot is broader: it's Microsoft's AI layer across the entire 365 suite, embedded in Word, Excel, PowerPoint, Outlook, and Teams, with agentic capabilities that draft, edit, and act inside those apps (&lt;a href="https://www.microsoft.com/en-us/microsoft-365-copilot/in-apps-for-work" rel="noopener noreferrer"&gt;Microsoft's official app breakdown&lt;/a&gt;, &lt;a href="https://www.microsoft.com/en-us/microsoft-365/blog/2026/04/22/copilots-agentic-capabilities-in-word-excel-and-powerpoint-are-generally-available/" rel="noopener noreferrer"&gt;Copilot's agentic capabilities in Word/Excel/PowerPoint going GA, April 2026&lt;/a&gt;). One lives inside a single workspace; the other lives across an entire office suite. Those two territories now overlap, though: Microsoft ships a Notion connector for Copilot, covered below.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does Notion AI actually do inside your workspace?
&lt;/h2&gt;

&lt;p&gt;Notion AI's job is to act on content you've already put in Notion without you re-explaining any of it. Per &lt;a href="https://www.notion.com/product/ai" rel="noopener noreferrer"&gt;Notion's own AI product page&lt;/a&gt;, that includes the Notion Agent (handles multi-step tasks using workspace context), AI Meeting Notes (transcribes and summarizes), Enterprise Search (searches across Slack, Google Drive, GitHub and other connected apps), database autofill, and in-line writing help. Full access — the Agent, Meeting Notes, and Enterprise Search — sits behind the Business plan; Free and Plus get a limited trial of the lighter features only (&lt;a href="https://www.notion.com/pricing" rel="noopener noreferrer"&gt;Notion's pricing page&lt;/a&gt;, checked 2026-08-03: Free €0, Plus €9.50/user/month, Business €19.50/user/month, all billed annually; Enterprise is custom-quoted). It's a workspace assistant, and a genuinely strong one for anything that starts with "something I already wrote in Notion" — it isn't built to reach outside that workspace on its own.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does Microsoft Copilot do that Notion AI can't?
&lt;/h2&gt;

&lt;p&gt;Reach across an entire office suite most teams already run on. Copilot drafts and edits in Word, builds formulas and charts in Excel, designs outlines in PowerPoint, drafts and summarizes threads in Outlook, and recaps meetings and surfaces action items in Teams — all as one assistant with shared context across those apps (&lt;a href="https://www.microsoft.com/en-us/microsoft-365-copilot/in-apps-for-work" rel="noopener noreferrer"&gt;Microsoft's app-by-app rundown&lt;/a&gt;). If your actual bottleneck is spread across email, spreadsheets, and slide decks, that's a real advantage Notion AI doesn't try to match — Notion AI was never meant to touch your Outlook inbox. The honest cost: the Business add-on runs $18/user/month annually as a limited-time rate through September 2026 (standard $21/user/month annually, or $25.20/month if billed monthly), and it's an add-on — you need an underlying Microsoft 365 Business or Enterprise license to buy it at all (&lt;a href="https://www.microsoft.com/en-us/microsoft-365/copilot/pricing" rel="noopener noreferrer"&gt;Microsoft's official Copilot pricing page&lt;/a&gt;, checked 2026-08-03).&lt;/p&gt;

&lt;h2&gt;
  
  
  Can Copilot actually read your Notion workspace now?
&lt;/h2&gt;

&lt;p&gt;Yes. Microsoft added Notion to the list of Microsoft-published federated Copilot connectors — along with Canva, HubSpot, Intercom, Linear, and a handful of others — using the Model Context Protocol (MCP) to fetch your Notion content live rather than copying it into Microsoft's index (&lt;a href="https://learn.microsoft.com/en-us/microsoft-365/copilot/connectors/federated-connectors-overview" rel="noopener noreferrer"&gt;Microsoft Learn's federated connectors overview&lt;/a&gt;, page dated 2026-06-22). It's read-only, it authenticates with your own Notion credentials so you only see what you already have access to, and it currently works in Copilot Chat, Copilot in Excel, and the Researcher agent. There's a catch worth knowing before you plan around it: it's off by default for a new tenant admin, and even once an admin turns it on, Microsoft holds it in an admin-only review window for seven calendar days before regular users can see it. This isn't a consumer feature you flip on yourself — it's an IT-admin-gated connector inside Microsoft 365 Copilot, not something available in the standalone consumer Copilot app.&lt;/p&gt;

&lt;h2&gt;
  
  
  So which one should you actually use?
&lt;/h2&gt;

&lt;p&gt;Depends on where your content already lives and where your bottleneck actually is. If your knowledge base is Notion and your daily friction is "I have to re-explain context every time," Notion AI solves that natively — it's already inside the workspace. If your daily friction is spread across Word, Excel, Outlook, and Teams, Copilot's cross-app reach is doing something Notion AI was never built to do, and now it can read your Notion pages too if your admin has turned the connector on. Most teams running both tools aren't choosing one over the other — they're deciding which one owns which job, the same way you'd decide who owns a task between two coworkers with overlapping but different skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notion AI vs. Microsoft Copilot: the honest comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Notion AI&lt;/th&gt;
&lt;th&gt;Microsoft Copilot&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Built for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Working on content already in your Notion pages and databases&lt;/td&gt;
&lt;td&gt;Working across Word, Excel, PowerPoint, Outlook, and Teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knows your workspace automatically?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes — that's the whole point&lt;/td&gt;
&lt;td&gt;Only for Notion specifically if an admin has enabled the federated connector; native everywhere inside Microsoft 365&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Full AI features&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Notion Agent, AI Meeting Notes, Enterprise Search — gated to the Business plan&lt;/td&gt;
&lt;td&gt;Drafting, editing, and agentic actions across the full Microsoft 365 app set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Where it lives&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inside Notion pages and databases&lt;/td&gt;
&lt;td&gt;Inside Microsoft 365 apps, plus Copilot Chat and Researcher; can now reach into Notion via a federated MCP connector&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Setup for cross-tool access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None needed — native&lt;/td&gt;
&lt;td&gt;Admin must enable the connector tenant-wide; new connectors sit in a 7-day admin-only window first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free tier exists; full AI needs Business at €19.50/user/month annually&lt;/td&gt;
&lt;td&gt;Add-on only — needs a Microsoft 365 license; Business add-on $18–21/user/month annually&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Neither row is meant to declare a winner. It's meant to tell you which tool already owns the job you're trying to do.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Prices above are pulled straight from each vendor's own pricing page as checked on 2026-08-03 — Notion's page showed EUR, Microsoft's showed USD. Currencies aren't converted here on purpose; check your own region's price before budgeting.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can Microsoft Copilot use my Notion pages without an admin setting anything up?&lt;/strong&gt;&lt;br&gt;
No. The Notion connector is a Microsoft-published federated connector, off by default for new tenants and gated behind a 7-day admin-only review window before regular users can even see it. It's not a personal toggle inside consumer Copilot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the Notion connector copy my Notion content into Microsoft's systems?&lt;/strong&gt;&lt;br&gt;
No. Federated connectors fetch data live over MCP at query time and don't index or store it in Microsoft 365 — the source of truth stays in Notion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is Notion AI available on the free plan?&lt;/strong&gt;&lt;br&gt;
Only a limited trial of the lighter features (docs generation, database autofill). The full set — Notion Agent, AI Meeting Notes, Enterprise Search — requires the Business plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need Microsoft 365 Copilot to get any AI features in Word or Excel?&lt;/strong&gt;&lt;br&gt;
For the agentic, assistant-style features described here, yes — those are the paid Copilot add-on. Some lighter AI-adjacent features have shipped free in specific Microsoft 365 apps at various points, so check your specific plan's current feature list before assuming either way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is this connector the same as Notion's own AI integrations with Slack or Google Drive?&lt;/strong&gt;&lt;br&gt;
No — that's the reverse direction. Notion's Enterprise Search connects Notion AI &lt;em&gt;out&lt;/em&gt; to other apps' content; the federated connector covered here lets Microsoft Copilot reach &lt;em&gt;into&lt;/em&gt; Notion. They're two separate integrations solving opposite directions of the same problem.&lt;/p&gt;




&lt;p&gt;This is the setup I actually run: a Notion workspace holding the structured system, AI doing the reasoning and drafting on top of it. If you want the Notion side already built for AI-driven work — the prompts, the SOPs, and the databases wired for exactly this — that's the AI-Augmented Notion Workspace. The full workspace is free, pay what you want: &lt;a href="https://yvoo.gumroad.com/l/ai-notion-workspace?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free" rel="noopener noreferrer"&gt;try it on a real task&lt;/a&gt; and see whether it earns a place in your setup.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you run your AI work on a system, run the rest on one too. Life &amp;amp; Work OS is a Notion life planner with a sample and a blank edition: &lt;a href="https://yvoo.gumroad.com/l/notion-life-planner?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free-to-paid" rel="noopener noreferrer"&gt;on Gumroad&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Trademarks referenced belong to their respective holders. Notion is a trademark of Notion Labs, Inc.; Microsoft, Microsoft 365, and Copilot are trademarks of Microsoft Corporation. This comparison is independent and not endorsed by either company.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Last updated: 2026-08&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>llm</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Verify AI Output Before You Ship It: 3 Prompts to Check AI Accuracy</title>
      <dc:creator>Yvoo</dc:creator>
      <pubDate>Sat, 01 Aug 2026 10:09:12 +0000</pubDate>
      <link>https://dev.to/yvoolab/verify-ai-output-before-you-ship-it-3-prompts-to-check-ai-accuracy-3dhi</link>
      <guid>https://dev.to/yvoolab/verify-ai-output-before-you-ship-it-3-prompts-to-check-ai-accuracy-3dhi</guid>
      <description>&lt;p&gt;Every AI answer you use lands somewhere: a config, a migration, a doc your teammates will trust. Shipping it unverified means its mistakes ship too — under your name. This article is the working routine I use to verify AI output before it ships: three copy-paste prompts to check AI accuracy, each doing one job, composing into a check that takes minutes, not an afternoon.&lt;/p&gt;

&lt;p&gt;The first two — a hallucination sweep and an AI fact-checking prompt — come from earlier in this series (linked below, each with its own test run). The third — building a verification checklist sized to the stakes — is new here, tested on a booby-trapped example further down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does it actually take to verify AI output?
&lt;/h2&gt;

&lt;p&gt;Three moves, in order, each answering a different question:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sweep&lt;/strong&gt; — &lt;em&gt;which claims are even in here, and which look fabricated?&lt;/em&gt; Broad and shallow, across the whole answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stress-test&lt;/strong&gt; — &lt;em&gt;is this one load-bearing claim actually true?&lt;/em&gt; Narrow and deep, on the claims that would change your decision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checklist&lt;/strong&gt; — &lt;em&gt;what's the complete set of checks this text deserves, given the stakes?&lt;/em&gt; The step that turns "I checked some things" into "I checked the right things."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most people stop after an instinctive version of step 1. The failures that reach production usually live in steps 2 and 3.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt 1: sweep the answer for hallucinations
&lt;/h2&gt;

&lt;p&gt;The condensed version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Audit the text below for hallucinations.
List every factual claim as a numbered line; label each
VERIFIABLE, SUSPECT, or FABRICATION-PATTERN (named
source/study/number with no citation).
End with the 3 claims most likely to be wrong, ranked.
Text: [PASTE THE AI ANSWER]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;a href="https://dev.to/yvoolab/how-to-catch-ai-hallucinations-a-copy-paste-hallucination-checker-prompt-tested-3bh1"&gt;part one's test run&lt;/a&gt;, this pattern caught all three planted errors in a sample answer — including a fabricated Stanford study. The trade-off: it hands back labels, not verdicts, and the flag count grows fast with text length.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt 2: stress-test the claim you're about to act on
&lt;/h2&gt;

&lt;p&gt;The short form:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stress-test this claim. Do not assume it is true.
State what evidence would prove it wrong, the 2-3 conditions
it silently depends on, and the likeliest confounder.
Verdict: SUPPORTED / UNCLEAR / DOUBTFUL, one line why,
plus the single fastest check a human should run.
Claim: [PASTE ONE CLAIM]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The design is adversarial on purpose — it builds the case &lt;em&gt;against&lt;/em&gt; the claim instead of inviting agreement. In &lt;a href="https://dev.to/yvoolab/how-to-fact-check-chatgpt-the-copy-paste-prompt-i-use-to-verify-ai-output-47b9"&gt;part two's test run&lt;/a&gt;, this fact-checking prompt took "using an ORM prevents SQL injection" from code-review folklore to a DOUBTFUL verdict with the exact escape hatches that break it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt 3: build a verification checklist sized to the stakes
&lt;/h2&gt;

&lt;p&gt;The new one, in full — this is the step that decides &lt;em&gt;how much&lt;/em&gt; checking the text deserves:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build a verification checklist for the AI-generated text below.
1. State the stakes: LOW / MEDIUM / HIGH, and why in one line.
2. List 3 checks for LOW stakes, 6-8 for MEDIUM or HIGH — each
   check names what to verify and the fastest way to verify it.
3. Order checks so the most damaging-if-wrong claim comes first.
4. End with the one claim that invalidates everything if wrong.
Text: [PASTE]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Damage-ordering is the point. A checklist that starts with the most dangerous claim means that even if you only do the first check, you did the right one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does the checklist prompt actually catch what matters?
&lt;/h2&gt;

&lt;p&gt;I fed it four sentences of plausible AI-style upgrade advice — "upgrade PostgreSQL 12 to 16 in place with pg_upgrade, downtime under a minute, back up with pg_dumpall, run ANALYZE after, &lt;strong&gt;extensions are upgraded automatically so no manual steps are needed&lt;/strong&gt;" — with that last claim as the planted trap: fluent, reassuring, and false. One pass, Claude Sonnet, fresh context. What came back:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stakes: HIGH&lt;/strong&gt;, with the right reason — following this on a production database risks silent data-access failures after the backup window closes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The planted trap ranked as check #1&lt;/strong&gt; — called false as a blanket claim, with the fastest check spelled out (&lt;code&gt;SELECT * FROM pg_extension;&lt;/code&gt;, then per-extension compatibility notes).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The same claim named as the invalidating one&lt;/strong&gt; — the run's closing line: rely on it, and you can "complete the upgrade believing it succeeded" only to find broken functionality after rollback is gone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coverage I hadn't planted&lt;/strong&gt;: it flagged that "downtime under a minute" silently depends on &lt;code&gt;--link&lt;/code&gt; mode, that a backup you haven't test-restored isn't a backup, that the 12→16 multi-version jump itself needs verifying, and that the text has no rollback plan at all — eight checks, damage-ordered.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last bullet is the real argument for the checklist step: it doesn't just audit the sentences that exist, it surfaces the checks the text &lt;em&gt;should have mentioned and didn't&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where does the free checklist prompt stop?
&lt;/h2&gt;

&lt;p&gt;Three walls, visible in that same run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Facts-first coverage.&lt;/strong&gt; The checks orbit the claims present in the text. Logic errors, edge cases, and compliance exposure surface only if the text happens to hint at them — nobody asked "who can sue us over this?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stakes by gut feel.&lt;/strong&gt; LOW/MEDIUM/HIGH in one line is a vibe check. It was right this time; nothing guarantees the same call on subtler input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structure drifts.&lt;/strong&gt; Check count, depth, and phrasing vary run to run — fine for one-off use, weak as a routine you rely on daily.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the routine version I maintain the full prompt as a paid product: &lt;a href="https://promptbase.com/prompt/output-verification-checklist-builder" rel="noopener noreferrer"&gt;AI Verification Checklist Builder on PromptBase&lt;/a&gt;. It sizes the checklist from a stakes rubric instead of a one-line guess, extends the checks to logic, edge cases, and legal review instead of stopping at facts, and ends every run the same way — with the load-bearing claims that invalidate everything else if wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do the three prompts fit together?
&lt;/h2&gt;

&lt;p&gt;The composition rule is short:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Move&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Whole AI answer, unvetted&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Sweep&lt;/strong&gt; (prompt 1), then stress-test the survivors that matter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One claim you're about to act on or repeat&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Stress-test&lt;/strong&gt; (prompt 2) directly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text about to ship somewhere real&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Checklist&lt;/strong&gt; (prompt 3) — then actually run the top checks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;And one rule above all three: the model's audit is the map, not the territory. Every verdict and every checklist item still ends with a human running the check — a grep, a doc page, a test restore. The prompts don't replace verification; they make sure the minutes you spend verifying land on the claims that can actually hurt you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written with AI assistance. The checklist test run in this article was performed as described — one pass, Claude Sonnet, fresh context — and reported faithfully; the earlier prompts' test runs are documented in their own articles. Reproduce this one: the input is quoted above.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The full checklist version is linked in the section above. If your bottleneck is the prompt itself rather than the output, I also maintain &lt;a href="https://promptbase.com/prompt/optimizer-diagnose-rewrite" rel="noopener noreferrer"&gt;Optimizer: Diagnose &amp;amp; Rewrite&lt;/a&gt;. Earlier in this series: &lt;a href="https://dev.to/yvoolab/how-to-catch-ai-hallucinations-a-copy-paste-hallucination-checker-prompt-tested-3bh1"&gt;catching AI hallucinations&lt;/a&gt; and &lt;a href="https://dev.to/yvoolab/how-to-fact-check-chatgpt-the-copy-paste-prompt-i-use-to-verify-ai-output-47b9"&gt;fact-checking ChatGPT&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The full workspace is free, pay what you want: &lt;a href="https://yvoo.gumroad.com/l/ai-notion-workspace?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free&amp;amp;utm_content=verify-ai-output" rel="noopener noreferrer"&gt;AI-Augmented Notion Workspace&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you run your AI work on a system, run the rest on one too. An ATS resume template in English and French, for Word and Google Docs: &lt;a href="https://yvoo.gumroad.com/l/ats-resume?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free-to-paid" rel="noopener noreferrer"&gt;on Gumroad&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>llm</category>
      <category>promptengineering</category>
    </item>
    <item>
      <title>How to Fact-Check ChatGPT: The Copy-Paste Prompt I Use to Verify AI Output</title>
      <dc:creator>Yvoo</dc:creator>
      <pubDate>Thu, 30 Jul 2026 14:12:30 +0000</pubDate>
      <link>https://dev.to/yvoolab/how-to-fact-check-chatgpt-the-copy-paste-prompt-i-use-to-verify-ai-output-47b9</link>
      <guid>https://dev.to/yvoolab/how-to-fact-check-chatgpt-the-copy-paste-prompt-i-use-to-verify-ai-output-47b9</guid>
      <description>&lt;p&gt;A ChatGPT answer doesn't stay in the chat window. It gets pasted into a PR description, quoted in a design doc, repeated in a meeting as "apparently…" — and at that point its errors become &lt;em&gt;your&lt;/em&gt; errors, with your name attached. Fact-checking the answer before you repeat it is not paranoia; it's the same hygiene as running the tests before you merge.&lt;/p&gt;

&lt;p&gt;The good news: you don't need to verify everything, and you don't need a research afternoon. You need a triage rule and one copy-paste fact-check prompt — it works the same in ChatGPT, Claude, or Gemini. Both are below, along with a real test run and an honest account of where the short version runs out of road.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why fact-check ChatGPT answers at all?
&lt;/h2&gt;

&lt;p&gt;Because the model is optimized to be plausible, and plausible is not the same as true. Language models produce the answer that best fits the shape of the question — which usually overlaps with the truth, and sometimes doesn't. The failure mode is not obvious nonsense; it's the confident sentence that is 90% right with one wrong load-bearing detail. No amount of fluent wording distinguishes the two from the outside. Only checking does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which claims are actually worth checking?
&lt;/h2&gt;

&lt;p&gt;Not all of them — that's the mistake that makes people give up on verification entirely. The triage rule I use:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Check the claims that would change your decision if they turned out to be wrong. Skip the rest.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In practice that means three categories get checked, in order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Claims you're about to act on&lt;/strong&gt; — "this API is rate-limited at X", "this license allows Y".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claims you're about to repeat to someone else&lt;/strong&gt; — anything heading into a doc, a PR, or a conversation where you'll be the source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specifics that smell too neat&lt;/strong&gt; — precise percentages, named studies, tidy version histories.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Everything else — background info, general context, phrasing — can stay unverified, because being wrong there costs you nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The copy-paste ChatGPT fact-check prompt
&lt;/h2&gt;

&lt;p&gt;Once triage hands you a claim that matters, stress-test it. Paste this into a fresh chat — deliberately &lt;em&gt;not&lt;/em&gt; the chat that produced the claim, so the model has no stake in defending itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stress-test the claim below. Do not assume it is true.
1. Restate the claim precisely; note any ambiguity.
2. Falsifiability: what evidence would prove it wrong?
3. List the 2-3 conditions the claim silently depends on.
4. Name the most likely confounder or alternative explanation.
5. Verdict: SUPPORTED / UNCLEAR / DOUBTFUL, one line why,
   and the single fastest check a human should run.
Claim: [PASTE ONE CLAIM]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The design is intentionally adversarial. Most "is this true?" prompts invite the model to agree with itself; this one forces it to construct the case &lt;em&gt;against&lt;/em&gt; the claim — what would falsify it, what it silently depends on, what else could explain it. Agreement has to survive the attack to show up in the verdict.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens on a real claim?
&lt;/h2&gt;

&lt;p&gt;I fed it a claim you've probably heard stated as fact in a code review: &lt;strong&gt;"Using an ORM prevents SQL injection."&lt;/strong&gt; One pass, Claude Sonnet, fresh context — the prompt itself is model-agnostic and pastes into ChatGPT unchanged. What came back:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The ambiguity surfaced first&lt;/strong&gt;: does "prevents" mean immunity or risk reduction? Does "using an ORM" cover the raw-SQL escape hatches every ORM ships?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Falsifiability, concretely&lt;/strong&gt;: one real case of an injectable ORM codebase disproves it — and the pass pointed exactly where such cases live: &lt;code&gt;raw()&lt;/code&gt; / &lt;code&gt;text()&lt;/code&gt; / &lt;code&gt;execute()&lt;/code&gt; escape hatches with string concatenation, and untrusted input used as &lt;em&gt;identifiers&lt;/em&gt; (table names, column names, sort direction), which ORMs typically don't parameterize — they parameterize values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The silent conditions&lt;/strong&gt;: developers never touch raw-query APIs; untrusted input never reaches identifier position; the ORM's own parameterization is bug-free.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The confounder — my favorite part&lt;/strong&gt;: the thing that actually prevents injection is &lt;em&gt;parameterized queries&lt;/em&gt;. The ORM just defaults you onto that path. Crediting the ORM confuses the tool with the mechanism.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verdict: DOUBTFUL&lt;/strong&gt; — risk reduced, not eliminated — with a fastest-check I'd genuinely use: grep the codebase for the ORM's raw/execute escape hatches and look for string concatenation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's a better security review of the claim than most humans give it, and it took under a minute. Note what made it work: the claim was &lt;em&gt;load-bearing&lt;/em&gt; (people skip input sanitization because of it), and the prompt attacked instead of agreeing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where does the one-claim prompt stop?
&lt;/h2&gt;

&lt;p&gt;Used daily, the short version has four walls you'll hit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One claim at a time, and you do the extracting.&lt;/strong&gt; A full ChatGPT answer contains a dozen claims tangled into prose; pulling them out and picking the load-bearing ones is on you. (That extraction step is a separate tool — see the &lt;a href="https://dev.to/yvoolab/how-to-catch-ai-hallucinations-a-copy-paste-hallucination-checker-prompt-tested-3bh1"&gt;hallucination checker from part one of this series&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No graded confidence.&lt;/strong&gt; SUPPORTED / UNCLEAR / DOUBTFUL is three buckets; when you're deciding whether to ship, "how doubtful, exactly?" matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No evidence structure.&lt;/strong&gt; The short prompt names what evidence &lt;em&gt;would&lt;/em&gt; settle the claim, but doesn't organize what supports versus what refutes — you rebuild that on your desk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency drifts.&lt;/strong&gt; Freeform output means the depth of the audit varies run to run and model to model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I stress-test claims often enough that I maintain the full version as a paid prompt: &lt;a href="https://promptbase.com/prompt/fact-checker-claim-stress-test" rel="noopener noreferrer"&gt;Fact Checker: Claim Stress Test on PromptBase&lt;/a&gt;. Same adversarial core, plus a 1–5 confidence rating, structured evidence-for/evidence-against, and the same audit depth on every run — built to push back, not agree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hallucination check or fact-check — which one do you need?
&lt;/h2&gt;

&lt;p&gt;They're different passes and they compose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hallucination check&lt;/strong&gt; (part one of this series): sweep a &lt;em&gt;whole AI answer&lt;/em&gt;, extract every claim, flag fabrication patterns. Broad and shallow — it finds the suspects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claim stress test&lt;/strong&gt; (this article): take &lt;em&gt;one claim that matters&lt;/em&gt; and pressure-test it in depth. Narrow and deep — it interrogates the suspect.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sweep first when the whole answer is unvetted; stress-test the survivors you're about to act on. On a claim someone hands you in isolation — a stat in a meeting, a "best practice" in a review — skip the sweep and go straight to the stress test.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fast AI fact-checking routine
&lt;/h2&gt;

&lt;p&gt;Whatever the verdict, the model's word is the map, not the territory. The closing routine:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;DOUBTFUL verdicts&lt;/strong&gt;: run the "fastest check" the audit named. It's usually a grep, a changelog, or one official doc page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SUPPORTED verdicts on high-stakes claims&lt;/strong&gt;: still spot-check the single strongest condition it listed. Support from a model is an argument, not a source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anything with a named study or precise number&lt;/strong&gt;: search the exact source. Can't find it fast? Treat it as fabricated and cut it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never repeat a claim more confidently than your verification supports.&lt;/strong&gt; "Docs say X" and "a model reasoned X" are different sentences — keep them different.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;Written with AI assistance; the test run above was performed as described (one pass, Claude Sonnet, fresh context) and reported faithfully in summary. Reproduce it: paste the ORM claim into the checker and compare.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Full version: &lt;a href="https://promptbase.com/prompt/fact-checker-claim-stress-test" rel="noopener noreferrer"&gt;Fact Checker: Claim Stress Test&lt;/a&gt;. Previous in this series: &lt;a href="https://dev.to/yvoolab/how-to-catch-ai-hallucinations-a-copy-paste-hallucination-checker-prompt-tested-3bh1"&gt;How to Catch AI Hallucinations&lt;/a&gt;. Next: &lt;a href="https://dev.to/yvoolab/verify-ai-output-before-you-ship-it-3-prompts-to-check-ai-accuracy-3dhi"&gt;Verify AI Output Before You Ship It&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The full workspace is free, pay what you want: &lt;a href="https://yvoo.gumroad.com/l/ai-notion-workspace?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free&amp;amp;utm_content=fact-check-chatgpt" rel="noopener noreferrer"&gt;AI-Augmented Notion Workspace&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you run your AI work on a system, run the rest on one too. An ATS resume template in English and French, for Word and Google Docs: &lt;a href="https://yvoo.gumroad.com/l/ats-resume?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=c1-free-to-paid" rel="noopener noreferrer"&gt;on Gumroad&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>llm</category>
      <category>promptengineering</category>
    </item>
  </channel>
</rss>
