<?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: Rehman Ahmad Chaudhry</title>
    <description>The latest articles on DEV Community by Rehman Ahmad Chaudhry (@rehman_ahmadchaudhry_007).</description>
    <link>https://dev.to/rehman_ahmadchaudhry_007</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%2F4100457%2F20467d8b-437b-4862-b62c-0b5398b35f9c.png</url>
      <title>DEV Community: Rehman Ahmad Chaudhry</title>
      <link>https://dev.to/rehman_ahmadchaudhry_007</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rehman_ahmadchaudhry_007"/>
    <language>en</language>
    <item>
      <title>Shipping Software with AI Agents: How I Built a 48-Rule Scanner in 2 Days (and What 3 Audit Teams Found)</title>
      <dc:creator>Rehman Ahmad Chaudhry</dc:creator>
      <pubDate>Wed, 04 Nov 2026 06:27:05 +0000</pubDate>
      <link>https://dev.to/rehman_ahmadchaudhry_007/shipping-software-with-ai-agents-how-i-built-a-48-rule-scanner-in-2-days-and-what-3-audit-teams-2idf</link>
      <guid>https://dev.to/rehman_ahmadchaudhry_007/shipping-software-with-ai-agents-how-i-built-a-48-rule-scanner-in-2-days-and-what-3-audit-teams-2idf</guid>
      <description>&lt;p&gt;I am a head teacher by day and a solo developer by night. Last week I shipped a real tool — a 48-rule scanner that spots AI design slop in web projects — in about two days of evening work. I did not write most of it by hand. I directed a small team of AI agents, then handed the result to three independent audit teams and fixed everything they found. This is the honest story of &lt;strong&gt;shipping software with AI agents&lt;/strong&gt;: what moved fast, what broke, and the checklist I now use before any solo release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built Instead of Installing
&lt;/h2&gt;

&lt;p&gt;It started with a post someone shared with me: a hugely popular tool that scans for "AI slop" in design. It had tens of thousands of stars and a long feature list. Installing it would have taken five minutes.&lt;/p&gt;

&lt;p&gt;I chose to build my own instead, for two reasons. First, I wanted a tool I fully understood — one file, zero dependencies, rules I could read and change myself. Second, I wanted to test a question I keep asking myself as a solo developer: can a one-person team with AI agents ship something genuinely useful, not just a demo that looks finished?&lt;/p&gt;

&lt;p&gt;The answer turned out to be yes — with one condition. The agents are fast builders but careless reviewers. Everything that made the project real happened in the review stage, not the build stage. That is the lesson this whole article is about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shipping Software with AI Agents: The Build, in 2 Days
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Day 1: One sharp brief, not a long conversation
&lt;/h3&gt;

&lt;p&gt;I have learned that agents do their worst work when the brief is vague. "Build me a slop detector" would have produced a generic tool with generic rules. So I wrote a short brief with three hard constraints before anyone wrote a line of code:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;One file, zero dependencies.&lt;/strong&gt; If it needs an install step, a teacher or student will not use it. The scanner had to run with a single command.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real line numbers, always.&lt;/strong&gt; A warning without a line number is a chore, not a help. Every finding had to point at the exact line.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A CI gate, not just a report.&lt;/strong&gt; The scanner had to be able to fail a build when slop crossed a threshold, so teams could actually enforce it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those three constraints did more work than any clever prompt. They forced every later decision: the rule format, the output format, the exit codes. When an agent suggested a feature that broke a constraint, the constraint won.&lt;/p&gt;

&lt;p&gt;By the end of the first evening, the core existed: a scanner with rules grouped into packs, including a pack for right-to-left layouts (I care about this because Urdu and Arabic content is badly served by most design tools) and a pack for the tired "2026 defaults" — the same cream background, serif heading, and sage-green accent combination appearing on every AI-generated landing page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Day 2: Features users can actually run
&lt;/h3&gt;

&lt;p&gt;Day 2 was about making the tool usable by someone who is not me. That meant a live web checker anyone can try in a browser, an audit-report generator for teams that want a document rather than terminal output, and a small benchmark set so the rules could be measured instead of merely claimed. The benchmark matters more than it sounds: without it, "48 rules" is just a number. With it, I could say how often the scanner catches real slop and how often it cries wolf.&lt;/p&gt;

&lt;p&gt;That is also the day the project got its name and its home: Deslop, open source on GitHub, with the live checker on the web. I publish free tools for teachers and students at &lt;a href="https://filecobra.com" rel="noopener noreferrer"&gt;filecobra.com&lt;/a&gt;, and I write about the shipping side of this work — the workflows, the mistakes, the checklists — on &lt;a href="https://rehmanahmad.com/blog" rel="noopener noreferrer"&gt;rehmanahmad.com/blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Two days, one solo developer, one team of agents. The tool worked. I was tempted to announce it right there. I am glad I did not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shipping Software with AI Agents: The Audit That Saved the Release
&lt;/h2&gt;

&lt;p&gt;Before any announcement, I handed Deslop to three independent audit teams and asked them to break it. Not to praise it — to break it. They came back with nine findings.&lt;/p&gt;

&lt;p&gt;Nine. On a project I thought was done.&lt;/p&gt;

&lt;p&gt;Some findings were small: messages that confused more than they explained, edge cases in a few rules. Some were serious: rules that fired on the wrong code, a threshold that let heavy slop pass as "mild," documentation that promised something the tool did not actually do. Every single one was real. None of them had been caught during the build, because the building agents were in "make it work" mode, and nobody was in "prove it works" mode.&lt;/p&gt;

&lt;p&gt;Fixing all nine took another focused session, and it changed the tool in ways users can feel: clearer severity bands (clean, mild, heavy) so a score means something at a glance, tighter rules with fewer false alarms, and documentation that now describes exactly what the scanner checks — no more, no less. The version that shipped, v1.9.0, is a different tool from the one I nearly announced. Same 48 rules, much higher trust.&lt;/p&gt;

&lt;p&gt;This is the part of shipping software with AI agents that nobody posts about. The build is the easy, photogenic half. The audit is where a demo becomes a tool. If you skip it, you are not shipping faster — you are shipping your bugs to your users and letting them do the audit for you, in public.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Agents Are Good At (and What They Are Not)
&lt;/h2&gt;

&lt;p&gt;After this project, my mental model of AI agents is simple and I use it for every new build:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agents are excellent at:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Turning a sharp brief into working code fast — the first version, the scaffolding, the boring plumbing.&lt;/li&gt;
&lt;li&gt;Generating breadth: dozens of rules, test cases, and documentation drafts in one pass.&lt;/li&gt;
&lt;li&gt;Refactoring on instruction: "make this one file," "add line numbers everywhere," "change the output format" — mechanical changes at speed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Agents are bad at:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Knowing when they are done. An agent will declare victory the moment the code runs. Running is not done; reviewed is done.&lt;/li&gt;
&lt;li&gt;Catching their own mistakes. The team that builds the rules will not be the team that finds the false positives. You need a second pair of eyes — human or agent — with a different job: break it, don't build it.&lt;/li&gt;
&lt;li&gt;Judgement calls about scope. Left alone, agents add features. Left alone, a scanner becomes a platform. The brief is the only thing standing between a tool and a sprawl.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical rule I now follow: &lt;strong&gt;never let the builder audit its own work.&lt;/strong&gt; A separate audit pass, with its own brief ("find bugs, rank them, show proof"), is a mandatory step in my workflow, not a nice-to-have. It costs one extra session. It saved this release.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Solo Release Checklist (Steal This)
&lt;/h2&gt;

&lt;p&gt;This is the checklist Deslop earned. I run it before announcing anything now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;One sharp brief first.&lt;/strong&gt; Three hard constraints, written down, before any code.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Real users can run it in minutes.&lt;/strong&gt; One command or one web page — no install saga, no config puzzle.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Claims are measured, not asserted.&lt;/strong&gt; A benchmark, a test suite, or a before-and-after number behind every big claim.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;An independent audit pass.&lt;/strong&gt; A different agent team (or a careful human) whose only job is to break it, with findings ranked and fixed.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Docs match the tool.&lt;/strong&gt; Every documented feature verified by running it, not by reading the code that was supposed to implement it.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;One honest limitation, stated up front.&lt;/strong&gt; For Deslop: it is a pattern scanner, not a design judge — it flags the fingerprints of generic AI design, it does not decide whether your design is good. Users trust a tool more when it tells them what it cannot do.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Announce only after the audit fixes ship.&lt;/strong&gt; The version users meet first is the version they remember.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are a solo developer using AI agents, the temptation is always to announce at step two, when the demo works. Resist it. The gap between "works in my terminal" and "trustworthy for strangers" is exactly one audit wide.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Would Do Differently Next Time
&lt;/h2&gt;

&lt;p&gt;Two things. First, I would order the audit earlier — after the core rules, not after the whole feature set — so fixes land before features pile on top of them. Second, I would write the honest limitation into the README from day one instead of adding it after the auditors asked for it. Limitations are not apologies; they are the reason people believe the rest of the document.&lt;/p&gt;

&lt;p&gt;None of this makes me slower in any way that matters. Two days to build, one session to audit, and the result is a tool I can stand behind: open source, genuinely useful, and already published as a package other developers can install. The agents did not replace me as a developer. They replaced the empty hours — the scaffolding, the boilerplate, the first drafts — and left me the work that actually needs a human: deciding what to build, what "done" means, and whether it is good enough to put my name on.&lt;/p&gt;

&lt;p&gt;If you are shipping solo with AI agents, try the audit step on your next project. Build it fast, then hand it to someone — or something — whose job is to break it. You will be annoyed by what they find. Your users will never know how close they came to finding it first.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Free Digital Classroom Tools: How I Run a Paperless Classroom on Zero Budget</title>
      <dc:creator>Rehman Ahmad Chaudhry</dc:creator>
      <pubDate>Mon, 02 Nov 2026 07:17:29 +0000</pubDate>
      <link>https://dev.to/rehman_ahmadchaudhry_007/free-digital-classroom-tools-how-i-run-a-paperless-classroom-on-zero-budget-h1n</link>
      <guid>https://dev.to/rehman_ahmadchaudhry_007/free-digital-classroom-tools-how-i-run-a-paperless-classroom-on-zero-budget-h1n</guid>
      <description>&lt;p&gt;I am a head teacher at a government primary school in rural Punjab, Pakistan. My school has no computer lab, no smart board, and no IT budget. What it does have is one old laptop, my phone, a second-hand projector a colleague lent me, and a free internet connection that works on good days.&lt;/p&gt;

&lt;p&gt;With exactly those ingredients, I run a mostly paperless classroom. My students read their textbooks on screen, my lesson plans live in the cloud, my attendance and records sit in a spreadsheet, and parents get updates on WhatsApp instead of paper notes that never reach home. Nothing here cost a rupee in software.&lt;/p&gt;

&lt;p&gt;This article is the honest version of how that works: the &lt;strong&gt;free digital classroom tools&lt;/strong&gt; I actually use every day, the setup that took an afternoon, and the parts that still fail. If you teach in a school with a small budget — or no budget at all — you can copy this setup this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "Zero Budget" Is a Feature, Not an Excuse
&lt;/h2&gt;

&lt;p&gt;Most "digital classroom" guides assume a smart board, a school management system, and a subscription for everything. That is not my reality, and it is not the reality of most teachers I know. When I stopped waiting for equipment that was never coming and started with what I already owned, three things changed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;I stopped buying software.&lt;/strong&gt; Every tool below is free and open-source, or has a genuinely free tier that does the job. No trials that expire mid-term, no "premium" wall in front of a feature I need.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I stopped depending on one device.&lt;/strong&gt; Because everything is free and cloud-based or portable, a lesson survives a dead laptop. I can run the same class from my phone if I have to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I started saving hours, not just paper.&lt;/strong&gt; The biggest win was never the paper. It was the evenings I got back when record-keeping stopped being a pile of registers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The rule I follow now: if a tool needs a license, a subscription, or a powerful computer, it does not enter my classroom. Everything below passes that test.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Free Digital Classroom Tools I Actually Use Every Day
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Free textbooks, on screen, for every student
&lt;/h3&gt;

&lt;p&gt;The foundation of the whole setup is that my students' books are already digital. The Punjab Curriculum and Textbook Board publishes official textbooks, and I keep the complete collection — every class, every subject — on my site at &lt;a href="https://rehmanahmad.com/textbooks/" rel="noopener noreferrer"&gt;rehmanahmad.com/textbooks/&lt;/a&gt;. A student who forgot their book at home is no longer stuck; we open the same chapter on the projector or on a shared phone and carry on.&lt;/p&gt;

&lt;p&gt;In class this looks simple, and that is the point. I open the chapter, project it, and read with the students instead of reading &lt;em&gt;at&lt;/em&gt; them. When a child asks "sir, page 42?", I am already there. Parents use the same link at home, which means homework help no longer depends on whether the physical book survived the school bag.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. A phone and a projector beat a smart board
&lt;/h3&gt;

&lt;p&gt;I do not own a smart board, and I have stopped wanting one. A basic projector — borrowed, second-hand, or shared between classrooms — plus my phone covers 90% of what a smart board does in a primary classroom:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Display:&lt;/strong&gt; the textbook chapter, a worksheet, a short educational video.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write:&lt;/strong&gt; I photograph the whiteboard after a lesson and share it with the class group, so the notes survive past the bell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record:&lt;/strong&gt; a two-minute phone video of a student reading aloud is worth more for assessment than any worksheet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trick is to keep the chain short. Phone to projector, one cable, no adapters you will lose. If a setup takes more than two minutes, you will stop using it by Thursday. I know, because I did.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. LibreOffice for every worksheet, test, and notice
&lt;/h3&gt;

&lt;p&gt;Every document my school produces — worksheets, test papers, parent notices, the timetable — is made in LibreOffice Writer and Calc. It opens every Word and Excel file parents or the education office send me, and it costs nothing, which matters when a school has five computers and zero software budget.&lt;/p&gt;

&lt;p&gt;My practical setup: one folder per class, one template for worksheets (school name, class, date, marks at the top), and a habit of saving everything as PDF before printing or sharing. A PDF looks the same on every phone, and in a school where parents read documents on phones, that consistency is the whole game. If you need a clean, free office suite for a classroom, LibreOffice is the one I point teachers to — you can grab it from &lt;a href="https://filecobra.com/app/libreoffice-suite/" rel="noopener noreferrer"&gt;filecobra.com/app/libreoffice-suite/&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. A fast PDF reader for the books themselves
&lt;/h3&gt;

&lt;p&gt;Textbook chapters are PDFs, and the default reader on an old laptop can turn opening a chapter into a thirty-second wait while thirty children lose focus. I use SumatraPDF — it is tiny, opens instantly, and does exactly one job well. For classroom use, "opens instantly" is a feature, not a detail: every second of loading is a second of attention you do not get back. You can find it at &lt;a href="https://filecobra.com/app/sumatrapdf-reader/" rel="noopener noreferrer"&gt;filecobra.com/app/sumatrapdf-reader/&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. One spreadsheet instead of five registers
&lt;/h3&gt;

&lt;p&gt;Attendance, test marks, homework completion, and fee-related notes used to live in separate paper registers. Now they live in one spreadsheet with one tab per purpose. The real win is not the spreadsheet itself — it is that I can search it. "How did Ahmed do in the last three tests?" used to mean flipping pages. Now it means one filter.&lt;/p&gt;

&lt;p&gt;I keep a local copy and a cloud copy. The cloud copy is the one I check from my phone during a parent meeting; the local copy is the one that works when the internet does not. Syncing them is a Friday-afternoon habit, five minutes, and it has saved me more than once.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. WhatsApp as the school notice board
&lt;/h3&gt;

&lt;p&gt;Paper notes home fail. They get lost, rained on, or "forgotten" in bags. A class WhatsApp group reaches parents the same evening, and — crucially — parents can reply. A parent who could never visit the school in person can now ask about homework at 8 pm, and I can answer in one line.&lt;/p&gt;

&lt;p&gt;Two rules keep the group usable: only school matters, and I post notices at fixed times (evening, once a day) instead of dripping messages all day. A group that buzzes constantly gets muted, and a muted group is worse than no group.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. AI for lesson prep, with a human in charge
&lt;/h3&gt;

&lt;p&gt;I use AI to draft lesson plans and generate practice questions, then I edit every word before it reaches a classroom. The AI gives me a first draft in minutes; my subject knowledge decides what stays. I wrote about that workflow in detail before — how AI cut my prep time roughly in half without handing my judgment to a machine — and the short version is: AI prepares, the teacher decides, the students get the teacher's version, never the raw output.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Week in My Paperless Classroom
&lt;/h2&gt;

&lt;p&gt;Here is what a normal week actually looks like, so you can see this is a routine, not a demo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monday morning:&lt;/strong&gt; I open the week's chapters on the textbook site, download the PDFs I will need, and confirm the projector cable works. Ten minutes, once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily:&lt;/strong&gt; Attendance goes straight into the spreadsheet. The chapter is projected, not dictated. Homework goes to the WhatsApp group as a photo of the board plus one line of text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wednesday:&lt;/strong&gt; Worksheet day. I adapt last term's LibreOffice template, change the questions, export to PDF, and share it. Printing happens only for tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friday:&lt;/strong&gt; Five minutes of syncing (local to cloud), a glance at the marks tab to spot any student sliding, and one message to parents about next week.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing here is impressive on its own. Together, it is a classroom that keeps running when a book is forgotten, a register is full, or I am teaching from my phone because the laptop is being repaired.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Still Does Not Work
&lt;/h2&gt;

&lt;p&gt;Honesty matters more than a success story, so here are the failure points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The internet fails.&lt;/strong&gt; On a bad day, the cloud copy is unreachable and the projector shows nothing. That is why every lesson has a local PDF backup, and why I never plan a lesson that &lt;em&gt;requires&lt;/em&gt; a live connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not every parent is online.&lt;/strong&gt; A small number of parents have no smartphone. For them, the paper note still exists — paperless is a direction, not a religion, and no child gets left out because their parent lacks a device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Old hardware is slow.&lt;/strong&gt; A ten-year-old laptop running a modern browser with ten tabs open is a patience test. I keep tabs to a minimum, close everything I am not using, and prefer lightweight tools (like SumatraPDF) over heavy ones for exactly this reason.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It needs one champion.&lt;/strong&gt; If I am absent, the system wobbles, because I am the one who maintains it. I am fixing that slowly by teaching two colleagues the routine, one tool at a time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Free Digital Classroom Tools Checklist
&lt;/h2&gt;

&lt;p&gt;If you want to start this week, here is the order that worked for me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Pick one class and one subject to go paperless first — not the whole school.&lt;/li&gt;
&lt;li&gt;[ ] Bookmark the free textbook collection for your class: &lt;a href="https://rehmanahmad.com/textbooks/" rel="noopener noreferrer"&gt;rehmanahmad.com/textbooks/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Install LibreOffice and one fast PDF reader on the computer you actually teach from.&lt;/li&gt;
&lt;li&gt;[ ] Create one spreadsheet with tabs for attendance and marks; enter one week of real data before judging it.&lt;/li&gt;
&lt;li&gt;[ ] Start one parent group with two rules: school matters only, notices once a day in the evening.&lt;/li&gt;
&lt;li&gt;[ ] Keep a local backup of everything you need for tomorrow's lesson — never depend on the internet in class.&lt;/li&gt;
&lt;li&gt;[ ] Teach one colleague one tool. A system one person holds is a system waiting to break.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need permission, a grant, or new equipment to start. You need one afternoon, the tools above, and the willingness to run one paperless week and see what breaks. Fix that one thing, and run it again.&lt;/p&gt;

&lt;p&gt;I write about shipping solo tools and teaching with technology on &lt;a href="https://rehmanahmad.com/blog" rel="noopener noreferrer"&gt;rehmanahmad.com/blog&lt;/a&gt;, and I collect the free classroom utilities I actually use on &lt;a href="https://filecobra.com" rel="noopener noreferrer"&gt;filecobra.com&lt;/a&gt;. If you try this setup, tell me which part broke first — that is usually the most useful feedback there is.&lt;/p&gt;

</description>
      <category>education</category>
      <category>teaching</category>
      <category>edtech</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Trust But Verify: My Solo Developer AI Agent Workflow for Shipping Without Regrets</title>
      <dc:creator>Rehman Ahmad Chaudhry</dc:creator>
      <pubDate>Sat, 31 Oct 2026 06:19:54 +0000</pubDate>
      <link>https://dev.to/rehman_ahmadchaudhry_007/trust-but-verify-my-solo-developer-ai-agent-workflow-for-shipping-without-regrets-1981</link>
      <guid>https://dev.to/rehman_ahmadchaudhry_007/trust-but-verify-my-solo-developer-ai-agent-workflow-for-shipping-without-regrets-1981</guid>
      <description>&lt;h1&gt;
  
  
  Trust But Verify: My Solo Developer AI Agent Workflow for Shipping Without Regrets
&lt;/h1&gt;

&lt;p&gt;I am a head teacher by day and a solo developer by night, and my &lt;strong&gt;solo developer AI agent workflow&lt;/strong&gt; runs almost entirely while I am asleep or at school. AI agents draft my articles, patch my websites, and queue my content — and that sentence should terrify any solo builder, because when you are the only human in the loop, there is nobody else to catch the mistake. I learned that the hard way, more than once. The workflow below is the one I use now: agents do the building, and I do the verifying. That split is the whole system.&lt;/p&gt;

&lt;p&gt;This is not a theory post. Every rule here exists because I broke the opposite rule and paid for it in public, in broken deploys, or in hours of quiet repair work at midnight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Stopped Trusting the Word "Done"
&lt;/h2&gt;

&lt;p&gt;The first lesson came from a deploy tool that told me everything was fine. A push helper reported "OK pushed," and I believed it. Days later, a routine check showed the remote repository did not contain the files at all — the helper had written to a wrong path, reported success, and moved on. Nothing had failed loudly. Nothing had failed at all, according to the tool. The work simply was not there.&lt;/p&gt;

&lt;p&gt;That is the central danger of a solo developer AI agent workflow: agents report completion, not truth. A green checkmark means the step ran, not that the result landed where it should. A test command that passes can mean the tests ran, or it can mean only a comfortable subset ran. An agent that says "verified" may have verified its own output against its own assumptions, which is not verification at all.&lt;/p&gt;

&lt;p&gt;So I changed one thing, and it changed everything: no agent verifies its own work. Verification is always a second, independent step — a different command, a different check, against the live system, not against the agent's memory of what it did. If the agent pushed a file, I check the remote tree. If the agent ran tests, I run the full suite. If the agent says a page is live, I open the live URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solo Developer AI Agent Workflow, in Five Steps
&lt;/h2&gt;

&lt;p&gt;Here is the workflow, exactly as I run it on a normal night.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1 — Write a brief a stranger could follow
&lt;/h3&gt;

&lt;p&gt;Before any agent touches a task, I write a short brief: the outcome in one sentence, the constraints (budget, scope, what not to touch), and the check that will prove it worked. The check matters most. "Publish the app page" is not a brief. "Publish the app page, then confirm the live URL returns the new content" is. If I cannot state the check, I am not ready to delegate the task — I am just hoping.&lt;/p&gt;

&lt;p&gt;A good brief also names the boundaries. Mine include a hard zero-spend rule on automation: no paid service gets switched on by an agent, ever. I batch small pushes to save automation minutes, and I never let an agent start a new task to fix a failed one without me seeing the failure first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 — Build small, in one direction
&lt;/h3&gt;

&lt;p&gt;Agents are brilliant at producing a lot of output quickly, and that is exactly the risk. A 500-line change at midnight is not progress; it is a haystack I will have to search at 1 a.m. when something breaks. So every task is scoped to the smallest change that is still useful: one page, one feature, one batch of related fixes. Big work gets cut into small, separately verifiable pieces, each with its own check.&lt;/p&gt;

&lt;p&gt;I also keep one direction of travel per task. An agent fixing a bug does not also "improve" three nearby files. Scope creep from an agent looks like helpfulness, and it is how a clean fix turns into a broken deploy. Anything else it spots goes in the log for tomorrow, not into tonight's change.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3 — Verify against the live system, never the report
&lt;/h3&gt;

&lt;p&gt;This is the step most solo builders skip, and it is the entire article in one sentence. After the work, I verify against the real thing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After a push, I fetch the remote tree and confirm the exact paths are present. A helper's success message is not evidence; the remote tree is.&lt;/li&gt;
&lt;li&gt;After a test run, I run the full suite — library tests and integration tests — because I once watched a builder report a green suite that had only run the easy half while dozens of integration tests were failing quietly underneath.&lt;/li&gt;
&lt;li&gt;After a content publish, I open the live URL and read the page, including the parts I did not write. A page that renders is not a page that is correct.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each check takes minutes. Each skipped check has cost me hours. That arithmetic is why this step is non-negotiable, even on tired nights.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4 — Ship in batches, on a schedule I control
&lt;/h3&gt;

&lt;p&gt;Solo shipping is a pacing problem as much as a technical one. I batch related changes into single deploys instead of firing off a deploy per fix, and I keep publishing on a schedule — a few posts a week, not a flood. Flooding helps nobody: readers cannot keep up, platforms get suspicious of bursts, and every extra publish is another chance for an unverified mistake to go live.&lt;/p&gt;

&lt;p&gt;Scheduling also protects the human gate: work built at night gets reviewed in daylight before it goes public. Nothing in my system publishes itself straight from an agent's hands to the public internet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5 — Log it, or it never happened
&lt;/h3&gt;

&lt;p&gt;Every completed task gets one line in a log: date, what shipped, where it lives. That log is how I avoid repeating topics, re-fixing fixed bugs, and re-approving work I already approved — and how I answer the only question that matters at month's end: what actually shipped? Agents forget. Logs do not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Green Test Suite That Wasn't
&lt;/h2&gt;

&lt;p&gt;Let me make the testing lesson concrete, because it is the one I see other solo builders repeat most. A builder on one of my projects reported a green test run and moved on. When I ran the suite independently, the picture was different: the builder had run only the library tests, while the integration tests — the ones that exercise the real user flows — were failing in large numbers. The report was honest as far as it went. It just did not go far enough.&lt;/p&gt;

&lt;p&gt;The fix became a rule I now apply to every project: the definition of "tests pass" is written in the brief, and it means the full suite, every time, run by someone — or some step — other than the one that wrote the code. A partial run is reported as a partial run, never as a pass. If your agent tells you tests pass, ask one question: which tests? If the answer is vague, the suite has not passed yet.&lt;/p&gt;

&lt;p&gt;The same logic applies to content. A draft that reads well is not a draft that is accurate. Links get clicked, facts get checked against the source, and every element the brief specified gets ticked off before anything is presented as finished.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solo Developer AI Agent Workflow: The Verification Checklist
&lt;/h2&gt;

&lt;p&gt;Here is the checklist I run before anything ships, whether it is code, a page, or a post. Steal it wholesale — it is short on purpose:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Remote truth:&lt;/strong&gt; is the change actually present in the live system (remote tree, live URL, published page), confirmed by fetching it fresh?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full suite:&lt;/strong&gt; did the complete test set run, including integration tests, not just the convenient subset?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope check:&lt;/strong&gt; did the change touch only what the brief asked for, with nothing extra smuggled in?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human read:&lt;/strong&gt; have I personally read the final version — the page, the post, the diff — at least once, end to end?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reversibility:&lt;/strong&gt; if this is wrong, can I undo it in minutes? If not, it ships smaller or not at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log entry:&lt;/strong&gt; is it written down, with the date and the link, so future me can find it?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Six checks, a few minutes each. I have never regretted running them. I have regretted skipping every single one at least once.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Human Gate Is Actually For
&lt;/h2&gt;

&lt;p&gt;People hear "human in the loop" and picture a manager approving every line, which sounds like the opposite of automation. In a solo developer AI agent workflow, the human gate is narrower and more valuable than that. Agents handle volume: drafting, formatting, repetitive fixes, research, scheduling. I handle judgment: is this true, is this safe, is this mine to publish, does this match what I actually want to say?&lt;/p&gt;

&lt;p&gt;That division is why I keep drafts as drafts until I have read them, why no post goes live on an agent's word alone, and why my publishing rule is simple: the agent proposes, I dispose. A one-word approval from me is enough to move — I do not want bureaucracy either — but that one word comes after I have looked, not before. Automation without a gate is not leverage; it is just faster mistakes.&lt;/p&gt;

&lt;p&gt;There is a second, quieter benefit. Verifying a change teaches me what my agents did, so I can brief the next task better. Builders who fully hand off stop understanding their own systems, and then they cannot fix them when — not if — something goes wrong. The gate is how I stay the developer of my own projects instead of a bystander to them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;A solo developer AI agent workflow does not fail because the agents are bad. Mine are good — they let a teacher with a full-time job run a textbooks library, a software site, and a publishing schedule that would have been impossible alone a few years ago. You can see the results in the free Punjab textbooks library I keep at &lt;a href="https://rehmanahmad.com/textbooks/" rel="noopener noreferrer"&gt;rehmanahmad.com/textbooks&lt;/a&gt;, and in the free, verified Windows software I publish at &lt;a href="https://filecobra.com" rel="noopener noreferrer"&gt;filecobra.com&lt;/a&gt;. The workflow fails when "done" stops meaning "verified."&lt;/p&gt;

&lt;p&gt;So here is my bargain, and I recommend it to any solo builder: let agents do the building, keep the verifying for yourself, write the check into the brief before the work starts, and never accept a success message as evidence. Ship small, ship on a schedule, log everything, and keep one human gate between your agents and the public.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>automation</category>
      <category>ai</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>AI Lesson Planning for Teachers: How I Cut Prep Time in Half Without Losing the Human Touch</title>
      <dc:creator>Rehman Ahmad Chaudhry</dc:creator>
      <pubDate>Sat, 31 Oct 2026 06:18:36 +0000</pubDate>
      <link>https://dev.to/rehman_ahmadchaudhry_007/ai-lesson-planning-for-teachers-how-i-cut-prep-time-in-half-without-losing-the-human-touch-5cgi</link>
      <guid>https://dev.to/rehman_ahmadchaudhry_007/ai-lesson-planning-for-teachers-how-i-cut-prep-time-in-half-without-losing-the-human-touch-5cgi</guid>
      <description>&lt;h1&gt;
  
  
  AI Lesson Planning for Teachers: How I Cut Prep Time in Half Without Losing the Human Touch
&lt;/h1&gt;

&lt;p&gt;I am a head teacher at a government primary school in Punjab, and for years my evenings looked the same: a stack of notebooks, a syllabus outline, and lesson plans written by hand long after the school day ended. When I first tried &lt;strong&gt;AI lesson planning for teachers&lt;/strong&gt;, I expected a gimmick. What I got instead was the single biggest change to my working week in years — my preparation time roughly halved, while my lessons actually got better. The catch, and it matters, is that the AI does the drafting and I do the teaching. Get that order backwards and you get slick-looking plans that fall apart in front of thirty children.&lt;/p&gt;

&lt;p&gt;This is the honest version: the workflow I use, the prompts that work, and the guardrails that keep the human in charge.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI Lesson Planning for Teachers Actually Looks Like in a Real Classroom
&lt;/h2&gt;

&lt;p&gt;Forget the marketing version where you type one sentence and a perfect lesson appears. Real AI lesson planning for teachers looks like this: you give the AI your topic, your class level, your time limit, and what your students already know, and it hands back a structured first draft — objectives, a timed sequence, questions, and a short activity. Then you do the part no model can do: you cross out what won't work for your children, you fix the examples so they match your students' lives, and you add the one story or question that makes the class pay attention.&lt;/p&gt;

&lt;p&gt;In my school, a typical lesson is 35 to 40 minutes with a large class and limited materials. An AI that doesn't know that will happily plan a lesson needing a projector, printed worksheets for every child, and group work in sixes. So the first skill isn't prompting. It's knowing your constraints well enough to state them: class size, time, available materials, language level, and what the textbook actually covers. The AI is only as grounded as the brief you give it.&lt;/p&gt;

&lt;p&gt;One more honest point: I teach from the Punjab textbooks, and the AI does not know my exact chapter — only the general topic. That gap is where a careless teacher gets into trouble, accepting a plan with the wrong scope or examples. My rule: the textbook is the syllabus, the AI is the assistant. Every plan gets checked against the chapter before it reaches the classroom.&lt;/p&gt;

&lt;h2&gt;
  
  
  My 30-Minute AI Lesson Planning Workflow
&lt;/h2&gt;

&lt;p&gt;Here is the full workflow, timed honestly. It replaced an evening routine that used to take over an hour.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Pick one clear objective (3 minutes).&lt;/strong&gt; Not "teach fractions" but "by the end of the lesson, students can shade and name one-half, one-third, and one-quarter of a shape." One objective, stated in student language. If you can't write it in one sentence, the AI can't plan around it either.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Write the brief (5 minutes).&lt;/strong&gt; I paste the same structure every time: topic, class, time available, what students already know, materials I actually have (chalkboard, chart paper, the textbook), and one constraint ("no printing", "mixed ability class", "Urdu-medium explanations where needed"). This brief is the whole secret. A vague brief gives you a generic lesson; a specific brief gives you a usable one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — Generate the first draft (2 minutes).&lt;/strong&gt; I ask for a timed plan: a 5-minute hook, 15 minutes of teaching, 10 minutes of practice, and a 5-minute check. I also ask for three questions at different difficulty levels and one activity that needs no materials beyond the board. The draft is never the final plan. It is raw material.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 — Edit like a teacher, not an editor (15 minutes).&lt;/strong&gt; This is where the real work happens. I replace generic examples with local ones — market prices, cricket scores, the school garden — because children remember what they recognize. I delete any activity I can't run with my class size, check every fact and worked example against the textbook, and add the opening question I know will hook this particular class, because no model knows my students.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 — Make the exit ticket (5 minutes).&lt;/strong&gt; Every lesson ends with one quick check: two questions on the board, answered on slates or in notebooks, that tell me before the bell whether the objective landed. If I skip this step, I am guessing about learning. The AI drafts the questions; I pick the ones that actually test the objective.&lt;/p&gt;

&lt;p&gt;Total: about 30 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Prompt Pattern That Keeps Lessons Honest
&lt;/h2&gt;

&lt;p&gt;Most bad AI lessons come from one-prompt thinking: one long prompt, one accepted answer. A three-pass pattern fixes most of the quality problems people blame on the AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pass 1 — Draft.&lt;/strong&gt; "Plan a 35-minute lesson on [topic] for class [X]. Students already know [Y]. Materials: chalkboard and textbook only. Give me timed sections, three questions at easy, medium, and hard levels, and one no-material activity."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pass 2 — Localize.&lt;/strong&gt; "Rewrite the examples using everyday life in a Pakistani village school: market shopping, farming, cricket, family routines. Replace any activity that needs printing or a projector."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pass 3 — Challenge.&lt;/strong&gt; "Now find the weak points in this plan: where will students get confused, which step is too fast for a mixed-ability class, and what question checks understanding after the main teaching?" That third pass is the most valuable one — it surfaces the exact spots where a real class will struggle, and trains you to spot them yourself over time.&lt;/p&gt;

&lt;p&gt;One warning from experience: never let the AI write your assessment questions unchecked. Models produce confident-sounding questions with wrong answers, especially in maths and science. Every question gets solved by me before it reaches the students. That single habit is the difference between using AI and being used by it.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Lesson Planning for Teachers: The Guardrails I Never Skip
&lt;/h2&gt;

&lt;p&gt;AI lesson planning for teachers only stays honest if you hold a few lines firm. These are mine, learned the hard way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The textbook decides the scope.&lt;/strong&gt; If the AI's plan covers something outside the chapter, it gets cut, however interesting it looks. Exam alignment and student confidence both depend on this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Every fact gets verified.&lt;/strong&gt; Dates, science facts, worked maths examples, spellings — all checked before class. I once caught a wrong fraction example in a draft five minutes before the lesson. That was the day this rule became non-negotiable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No student data goes into the AI.&lt;/strong&gt; No names, no marks, no photos, no personal details. I describe the class in general terms ("mixed ability, 30+ students") and nothing more. This is a privacy line, not a preference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The AI never writes the final word to students.&lt;/strong&gt; Worksheets, notes, and homework pass through my eyes first. Anything the children read should sound like their teacher, not like a chatbot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One new thing per lesson.&lt;/strong&gt; If the AI suggests a new method and a new activity and a new grouping in the same lesson, I keep one and drop the rest. Classrooms punish overload faster than any reviewer will.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These guardrails are why my prep time halved instead of disappearing. The AI removed the blank-page work — structuring, sequencing, drafting questions — and left the judgment work to me. That is why the lessons got better, not just faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Real Example: One Lesson, Before and After
&lt;/h2&gt;

&lt;p&gt;Take a class 4 maths lesson on fractions, a topic where children either click or drown. My old hand-written plan was: introduce the term, draw two shapes on the board, do three textbook exercises. Serviceable, forgettable.&lt;/p&gt;

&lt;p&gt;The AI-assisted version kept the same objective but changed the shape of the lesson. The hook became a real question: "If four friends share two rotis equally, how much does each get?" — something every child in my class has actually argued about. The teaching section used folding chart paper instead of just drawing, so children could see and hold the halves and quarters. Practice became a quick market game: "A shopkeeper sells half a kilo of sugar, then a quarter — how much is left?" And the exit ticket was two questions, one easy and one that catches the classic mistake of confusing the number of pieces with the size of each piece.&lt;/p&gt;

&lt;p&gt;Nothing in that lesson required classroom technology. The AI contributed structure and variety; the classroom contributed the rotis, the market, and the paper-folding. AI lesson planning for teachers works best when the technology stays in the preparation room and the classroom stays human.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your First-Week Checklist
&lt;/h2&gt;

&lt;p&gt;If you want to try this yourself, here is the honest starter plan — one week, no overwhelm:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pick ONE subject and ONE class to experiment with. Don't AI-plan everything at once.&lt;/li&gt;
&lt;li&gt;Write your brief template once (topic, class, time, prior knowledge, materials, constraints) and reuse it every day.&lt;/li&gt;
&lt;li&gt;Run the three-pass pattern: draft, localize, challenge.&lt;/li&gt;
&lt;li&gt;Check every fact and every worked example against the textbook before class.&lt;/li&gt;
&lt;li&gt;End every lesson with a two-question exit ticket, and keep the results — they tell you within a week whether the plans are actually working.&lt;/li&gt;
&lt;li&gt;Steal the good parts: when a hook or activity lands well, save it in a personal bank for next year. After a term, that bank is worth more than any prompt collection.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A practical note for fellow Pakistani teachers: the free Punjab textbooks are all available online now, so you can read the chapter on your phone while drafting. I keep the full library linked from &lt;a href="https://rehmanahmad.com/textbooks/" rel="noopener noreferrer"&gt;the Punjab textbooks hub on rehmanahmad.com&lt;/a&gt;, and I grab classroom utilities like PDF tools from &lt;a href="https://filecobra.com" rel="noopener noreferrer"&gt;filecobra.com&lt;/a&gt; when I need a printable for class. The tools support the teaching; they never replace it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;AI lesson planning for teachers is not about letting a machine teach. It is about letting a machine do the drafting so the teacher can do the teaching — better prepared, less exhausted, with the evening back. My prep time roughly halved, my lessons got more varied, and my students got hooks I would not have invented on a tired evening with a blank page.&lt;/p&gt;

&lt;p&gt;But the bargain only holds if you keep the guardrails: textbook as syllabus, every fact verified, no student data shared, and your judgment on every page that reaches a child. Do that, and the AI becomes what it should have been all along — a tireless assistant to a teacher who is still, unmistakably, in charge.&lt;/p&gt;

&lt;p&gt;If you try this workflow, start with one lesson this week and judge it by the exit ticket, not by how impressive the plan looked on screen.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>education</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The Rs 20 Pencil Bank: How My Class 2 Stopped Losing Pencils Every Day</title>
      <dc:creator>Rehman Ahmad Chaudhry</dc:creator>
      <pubDate>Mon, 26 Oct 2026 04:49:11 +0000</pubDate>
      <link>https://dev.to/rehman_ahmadchaudhry_007/the-rs-20-pencil-bank-how-my-class-2-stopped-losing-pencils-every-day-338h</link>
      <guid>https://dev.to/rehman_ahmadchaudhry_007/the-rs-20-pencil-bank-how-my-class-2-stopped-losing-pencils-every-day-338h</guid>
      <description>&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%2Fj8d7iz2g7dq4ph30xhv8.jpg" 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%2Fj8d7iz2g7dq4ph30xhv8.jpg" alt="Class 2 students at GPS 117 DB(BJ), Yazman smiling and holding up their pencils, with the red pencil bank bin on the desk in front of them" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  The Rs 20 Pencil Bank: How My Class 2 Stopped Losing Pencils Every Day
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;From **The Head Teacher's Diary&lt;/em&gt;* — real stories from a primary-school classroom in Yazman, Pakistan. Entry No. 1.*&lt;/p&gt;

&lt;p&gt;Every morning, the same complaints waited for me at the classroom door.&lt;/p&gt;

&lt;p&gt;A pencil was lost. An eraser had disappeared. A sharpener was nowhere to be found. And behind those small complaints stood a bigger problem: the parents of my students are poor. A pencil costs little, but when a child loses stationery almost every day, "little" stops being little. Children were taking money from home daily for replacements — and at home, that money came out of an already tight budget.&lt;/p&gt;

&lt;p&gt;I am the head teacher of my primary school, and also the in-charge of Class 2. So this was my problem to solve, twice over.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Was Not the Children
&lt;/h2&gt;

&lt;p&gt;The easy response is to scold. "You are careless. Look after your things." Every teacher has said it; I have said it myself.&lt;/p&gt;

&lt;p&gt;But watch the situation honestly: a six or seven year old, a full day of lessons, playtime, bags being opened and closed a dozen times — and no place, no system, no routine for keeping three small items safe. We were expecting small children to protect stationery with nothing but memory and fear of scolding.&lt;/p&gt;

&lt;p&gt;Teachers everywhere know this as the problem of disappearing pencils — and it is rarely solved by buying more pencils.&lt;/p&gt;

&lt;p&gt;The children were not the problem. The absence of a system was.&lt;/p&gt;

&lt;p&gt;So instead of another lecture, I built a system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every Child Gives Rs 20 — Once
&lt;/h2&gt;

&lt;p&gt;I told the class: every child will bring Rs 20. Not every day. Just once, into one shared collection.&lt;/p&gt;

&lt;p&gt;From that collection, we bought pencils, erasers and sharpeners for the whole class — together with a small bin to keep them in. From that day, the stationery stopped belonging to individual children. It belonged to the class — community supplies, owned by everyone and cared for by everyone.&lt;/p&gt;

&lt;p&gt;Then came the part that made it work: two students are on duty every day.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the morning, the duty students hand out a pencil, an eraser and a sharpener to every child.&lt;/li&gt;
&lt;li&gt;At closing time, they collect everything back from everyone and place it in the bin.&lt;/li&gt;
&lt;li&gt;The next morning, the same routine begins again.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the whole system. No register, no software, no expense beyond the first collection.&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%2Fqhw8h274bqpar809mb09.jpg" 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%2Fqhw8h274bqpar809mb09.jpg" alt="The Class 2 pencil bank: one red bin holds the whole class's pencils, with the shared erasers, sharpeners and rulers beside it on the desk." width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The whole system in one picture: one red bin, and every pencil, eraser, sharpener and ruler belongs to the class — not to any one child.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed
&lt;/h2&gt;

&lt;p&gt;The results surprised even me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A pencil now lasts about two weeks.&lt;/strong&gt; Before the pencil bank, a pencil could vanish the same day it was bought. Now the same pencil keeps coming back to the bin every evening, so it survives until it is genuinely used up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The daily money stopped.&lt;/strong&gt; Earlier, children asked for money at home almost every day for a lost item. Now the collection happens once, and the next one is needed only after roughly two weeks. For a poor household, removing a daily small expense is not a small thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The complaints ended.&lt;/strong&gt; The morning queue of lost-pencils simply disappeared, because there is nothing left to lose — everything returns to the bin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And something less visible grew: responsibility.&lt;/strong&gt; The duty students take their job seriously. Collecting from everyone, missing no one, keeping the bin in order — that is trust, and children rise to meet trust. The whole class cares for the stationery now, because it is &lt;em&gt;ours&lt;/em&gt;. A personal pencil got lost. The class pencil gets protected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It Works
&lt;/h2&gt;

&lt;p&gt;Looking back, three things made the difference:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ownership changed.&lt;/strong&gt; What belongs to everyone is watched by everyone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The routine is daily and visible.&lt;/strong&gt; Out in the morning, back at closing. Nothing depends on a child's memory at home.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The cost is shared and tiny.&lt;/strong&gt; Rs 20, once in a while, never burdens one family — and no child is singled out, because everyone is an equal shareholder in the bank.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try It in Your Classroom
&lt;/h2&gt;

&lt;p&gt;If your class has the same morning complaints, the recipe is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fix a small, equal contribution every child can afford — for us it was Rs 20.&lt;/li&gt;
&lt;li&gt;Buy the stationery for the whole class from the pooled money, plus one box or bin.&lt;/li&gt;
&lt;li&gt;Put two students on duty daily — hand out in the morning, collect everything at closing.&lt;/li&gt;
&lt;li&gt;Rotate the duty so every child serves.&lt;/li&gt;
&lt;li&gt;Keep the collection and spending open and simple; the class should always know where the money went.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You do not need permission, a budget line, or an NGO. You need Rs 20 per child and the decision to fix the system instead of the child.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lesson I Took Home
&lt;/h2&gt;

&lt;p&gt;Teaching is full of problems we blame on children: lost things, forgotten things, unfinished things. This small experiment taught me to ask a different question first — &lt;em&gt;is there a system, or am I expecting a seven year old to be one?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A pencil bank will not transform education. But it turned a daily complaint into a daily lesson in sharing, duty and care — and it costs less than the price of the pencils we were losing.&lt;/p&gt;

&lt;p&gt;If you try it in your school, I would genuinely like to hear how it went.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;— Rahman Ahmad Chaudhary, Head Teacher, GPS 117 DB(BJ), Yazman. More entries from **The Head Teacher's Diary&lt;/em&gt;* are on the way.*&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How do you solve the problem of disappearing pencils in the classroom?&lt;/strong&gt;&lt;br&gt;
Stop treating each pencil as private property. Pool a tiny equal contribution (we used Rs 20 per child), buy stationery for the whole class, store it in one bin, and have two duty students hand it out every morning and collect it back at closing. When stationery belongs to the class and returns to one place daily, losses almost disappear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do you manage classroom stationery when parents cannot afford supplies?&lt;/strong&gt;&lt;br&gt;
Spread the cost thin and share it. Our pencil bank runs on Rs 20 per child, collected roughly once every two weeks — far cheaper for poor families than replacing a lost pencil, eraser or sharpener every other day, and no child is singled out because everyone contributes equally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a class pencil bank?&lt;/strong&gt;&lt;br&gt;
A pencil bank is a simple classroom system: stationery is bought from a small pooled contribution, owned by the class, kept in a shared bin, and distributed and collected daily by students on duty. In my Class 2 it stretched one pencil's life to about two weeks and ended daily lost-stationery complaints.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>5 Roles, 0 Standups: How I Run Autonomous AI Agents as a Solo Developer</title>
      <dc:creator>Rehman Ahmad Chaudhry</dc:creator>
      <pubDate>Thu, 22 Oct 2026 09:25:54 +0000</pubDate>
      <link>https://dev.to/rehman_ahmadchaudhry_007/5-roles-0-standups-how-i-run-autonomous-ai-agents-as-a-solo-developer-1c0p</link>
      <guid>https://dev.to/rehman_ahmadchaudhry_007/5-roles-0-standups-how-i-run-autonomous-ai-agents-as-a-solo-developer-1c0p</guid>
      <description>&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%2Fqiml38et4zfce8jfv4u9.jpg" 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%2Fqiml38et4zfce8jfv4u9.jpg" alt="Five small robots flying above a night-time desk with five monitors, passing glowing task cards between them while a cup of tea steams beside the keyboard and moonlight comes through the window" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  5 Roles, 0 Standups: How I Run Autonomous AI Agents as a Solo Developer
&lt;/h1&gt;

&lt;p&gt;I'm a head teacher by day and a developer by night. Two websites, a 13-task engineering project, a daily content engine, a library of 251 textbooks, and about ten other threads — all run by one person who starts working when his school day ends. The only way the math works is &lt;strong&gt;autonomous AI agents&lt;/strong&gt;: a small fleet of them, running on schedules and briefs I give them, while I sleep, teach, or drink my third cup of tea.&lt;/p&gt;

&lt;p&gt;This isn't theory. Over the past month my agents shipped a 13-sprint software project, published two dozen videos, drafted this very article while I was asleep, and caught bugs no human reviewer had seen. Here's the honest version of how I run them — the structure, the tools, the mistakes, and the checklist to build your own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why One Person Needed a Team of Autonomous AI Agents
&lt;/h2&gt;

&lt;p&gt;Six months ago I was doing everything myself: writing code at midnight, publishing posts, fixing SEO, reviewing pull requests at 2 AM. The output was one thing per week if I was lucky, and every task needed me present and awake for it to move.&lt;/p&gt;

&lt;p&gt;The breaking point wasn't ambition — it was sleep. I realized that if a task needed my eyes at every step, it would never get done consistently. So I flipped the question: instead of "how do I do more things," I asked "which things can I design so they happen without me, with only a yes-or-no from me at the gates that matter?"&lt;/p&gt;

&lt;p&gt;That's the whole philosophy behind running autonomous AI agents as a solo developer. The agents don't assist me — they &lt;em&gt;own work streams&lt;/em&gt;. I define the task, the quality bar, and the approval gates. They do everything between. Some of my best work now happens while I'm in a classroom.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5 Roles in My Autonomous AI Agent Team
&lt;/h2&gt;

&lt;p&gt;I gave my agents real roles, not just prompts. Roles create accountability — when a bug lands, I know &lt;em&gt;which&lt;/em&gt; role failed and &lt;em&gt;which&lt;/em&gt; rule of its brief needs fixing. Here are the five:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The PM / Coordinator.&lt;/strong&gt; This agent owns the plan and the schedule. When I say "ship the next phase," the coordinator breaks it into numbered tasks, dispatches them, collects the results, and reports back with what shipped and what's blocked. It never touches code — it manages. This separation matters: an agent that plans its own code tends to quietly change the plan when the code gets hard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Backend.&lt;/strong&gt; This agent owns server logic, APIs, and data work. It has one hard rule I enforce everywhere: &lt;em&gt;it must follow the task's own documentation first&lt;/em&gt;, and it must verify every claim against real evidence, not echoed responses. That rule exists because I once trusted an API response that said "pushed successfully" — the commit existed only on my machine. Never again. Backend agents prove with a fresh read of the remote state, or it didn't happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Frontend.&lt;/strong&gt; This agent owns UI and pages. Its standing order: render it and look at the actual screenshot before declaring victory. A label in a mockup is never proof of a working control — my Frontend once shipped a redesign where a "select pages" filter disappeared entirely because nobody checked that its &lt;em&gt;function&lt;/em&gt; survived, not just its pixels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Designer.&lt;/strong&gt; This agent owns visual assets — banners, covers, thumbnails. Its rule is simple: taste calls get a sample first, never a full build. Generating twelve banners costs ten minutes; generating them &lt;em&gt;after&lt;/em&gt; I approve a sample costs one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The QA.&lt;/strong&gt; This is the role people skip, and it's the one that saves me most. The QA agent re-runs the full test suite independently — never trusting a builder's "tests green," because a builder once ran only the unit tests while 58 integration tests were failing. QA's gate is the only thing standing between my excitement and my production site.&lt;/p&gt;

&lt;p&gt;Five roles, zero standups. Each one inherits my context, works in the background, and reports when it's done. I read the reports the way a manager reads status updates — because at this point, that's what I am.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Autonomous AI Agents Changed My Shipping Speed
&lt;/h2&gt;

&lt;p&gt;The biggest unlock wasn't any single agent — it was &lt;em&gt;parallelism plus schedules&lt;/em&gt;. Three patterns do almost all the heavy lifting:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern 1: Parallel fan-out.&lt;/strong&gt; When a piece of work splits naturally, I dispatch one agent per piece in the same turn, instead of doing them one after another. The Sindh textbook rollout — 13 classes, ~200 books — was specified as "all of it in one day" because parallel agents made that a real schedule, not a fantasy. Sequencing is the silent killer of solo developers; agents let you pay the coordination cost once and reap the concurrency forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern 2: Scheduled recurrence.&lt;/strong&gt; My content engine is almost entirely cron jobs: two trending posts a day, a repo-spotlight thread, a daily reel, three blog drafts a week — including this one. Each run produces a draft; nothing publishes without my exact-copy approval. The standing rule is that &lt;em&gt;approval gates are the contract&lt;/em&gt;: automation drafts, I approve, schedulers publish. The result is a daily output cadence I could never sustain manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern 3: The review loop across models.&lt;/strong&gt; My AI stack isn't one tool — it's a pipeline. Claude does the daily operating work (code, schedules, content). ChatGPT and Codex handle code &lt;em&gt;directions and review&lt;/em&gt; through a GitHub-issue loop: my operator implements, Codex reviews, the issue tracks the disagreement until it's resolved. Gemini handles Workspace-native help, and Antigravity is the agentic IDE for deeper coding sessions. None of them approves their own homework.&lt;/p&gt;

&lt;p&gt;Put together, one tired teacher at night out-ships what used to take me a week — because the fleet keeps working through my school day.&lt;/p&gt;

&lt;h2&gt;
  
  
  5 Lessons From Running Autonomous AI Agents
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Verification is the real product.&lt;/strong&gt; Every failure I've had with agents traces back to trusting a claim instead of checking state. An API that echoed "OK" while the file was untouched. A test run that covered half the suite. A screenshot described in words instead of shown. My universal rule now: &lt;em&gt;the work is done only when a result says it finished&lt;/em&gt; — a queued, started, or "ringing" status means it started, nothing more. If your agents feel unreliable, you probably don't have an agent problem. You have a verification problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Briefs beat prompts.&lt;/strong&gt; A one-line prompt produces a one-line effort. My task briefs are full contracts: the outcome in the user's terms, the choices already made, the limits they set, and only the context the work needs. Long briefs sound slow, but they're the difference between an agent that needs me hovering and one I can walk away from for six hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Never change account-level state without explicit approval.&lt;/strong&gt; My agents have maximum autonomy on one condition: they never touch account-level settings — appearance modes, profile fields, privacy, tokens. One of my earliest hard lessons was that convenience automation drifts toward touching things the user never asked it to. Now the boundary is written into every standing instruction: reversible internal work is free; anything outward-facing, persistent, or hard to undo gets named and approved first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Dedup everything, constantly.&lt;/strong&gt; Parallel agents are great at duplicating work — two reels on the same tool in the same day, two posts mining the same repo. I keep logs (topic logs, slot logs, seen-lists) and every run checks them before building. The duplicate that hurts most is the one that goes live: same tool twice, an hour apart, and the audience watches the second one for two seconds. Coordination is a feature you build, not a property you assume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Keep the human gate where judgment lives.&lt;/strong&gt; My automation drafts everything — articles, captions, code, even this checklist — but exact-copy approval stays mine. Not because agents are bad writers, but because &lt;em&gt;my name goes on it&lt;/em&gt;. The split that works: agents do the 90% that's craft; I spend my 10% on the judgment that makes it mine. Nobody follows a brand that's fully automated. They follow a person who happens to ship at machine speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your First Weekend With Autonomous AI Agents: A Checklist
&lt;/h2&gt;

&lt;p&gt;If you want to try this without my whole setup, here's the minimal version that actually taught me the pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Pick one recurring task&lt;/strong&gt; you do every week (a status report, a content draft, a backup check). Not code yet — something low-risk.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Write the brief as a contract:&lt;/strong&gt; outcome, quality bar, where it runs, what "done" proves (screenshot, link, test result — never a claim).&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Split roles once:&lt;/strong&gt; one agent plans and dispatches, a second one does the work, a third one verifies. Even two agents (worker + checker) beats one clever prompt.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Add a verification step that reads real state&lt;/strong&gt; — open the page, re-run the test, fetch the file. Echoed "success" responses are the #1 failure mode.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Schedule it, then ignore it for a week.&lt;/strong&gt; Read only the reports. Every time you had to intervene, that's a line your brief was missing.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Keep a lessons file.&lt;/strong&gt; Every failure becomes one rule. My operating manual started empty; now it's the most valuable document I own.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then — and only then — add a second stream. The fleet grows one verified agent at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where This Is Going
&lt;/h2&gt;

&lt;p&gt;This article itself came out of the engine it describes: a scheduled run, a topic from the rotation, a draft built while I was asleep, a human reading it with fresh eyes before it ever goes live. I document what works at &lt;a href="https://rehmanahmad.com" rel="noopener noreferrer"&gt;rehmanahmad.com&lt;/a&gt; — the blog is my engineering notebook, open to anyone — and everything I ship for download lives at &lt;a href="https://filecobra.com" rel="noopener noreferrer"&gt;filecobra.com&lt;/a&gt;, where the same verification philosophy runs on every file: hash-checked, signature-verified, fail-closed.&lt;/p&gt;

&lt;p&gt;The honest summary after a month of running this way: I'm still one person. I still sleep seven hours and teach all morning. But my output looks like a small studio — because it &lt;em&gt;is&lt;/em&gt; one, just distributed across silicon instead of desks.&lt;/p&gt;

&lt;p&gt;And a question for you: &lt;strong&gt;if you could hand one weekly task to an agent tonight, which one would it be — and what's the first rule in its brief?&lt;/strong&gt; I read every comment. Teacher by day, developer by night — and the agents cover the graveyard shift.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Every Punjab Textbook, Online and Free: How I Put 251 Books in Every Student's Pocket</title>
      <dc:creator>Rehman Ahmad Chaudhry</dc:creator>
      <pubDate>Mon, 19 Oct 2026 08:44:34 +0000</pubDate>
      <link>https://dev.to/rehman_ahmadchaudhry_007/every-punjab-textbook-online-and-free-how-i-put-251-books-in-every-students-pocket-53a8</link>
      <guid>https://dev.to/rehman_ahmadchaudhry_007/every-punjab-textbook-online-and-free-how-i-put-251-books-in-every-students-pocket-53a8</guid>
      <description>&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%2Fraw.githubusercontent.com%2FiRehmanAhmad%2Frehmanahmad.pro%2Fmain%2Fpublic%2Fimages%2Fblog%2Fpunjab-textbooks-online-free-cover.jpg" 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%2Fraw.githubusercontent.com%2FiRehmanAhmad%2Frehmanahmad.pro%2Fmain%2Fpublic%2Fimages%2Fblog%2Fpunjab-textbooks-online-free-cover.jpg" alt="A Pakistani school student in uniform reading a textbook on a smartphone in a rural classroom, with Math, Science, Urdu, English and Social Studies book covers glowing out of the phone screen and a chalkboard reading " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Every Punjab Textbook, Online and Free: How I Put 251 Books in Every Student's Pocket
&lt;/h1&gt;

&lt;p&gt;This week I finished something I'd been dreaming about for years: the entire &lt;strong&gt;Punjab textbooks online&lt;/strong&gt; library is now live on my website — 251 books, every class from pre-primary to 12th grade, free for every student, teacher, and parent in Pakistan to read, download, and learn from.&lt;/p&gt;

&lt;p&gt;I'm a head teacher at a government primary school in Yazman, Punjab. For eight years I've watched kids walk to school without a single textbook in their bag — not because they're careless, but because books get lost, torn, shared between three siblings, or were never issued at all. But their parents almost always have a smartphone. So I asked myself a simple question: if the phone is already in the house, why isn't the textbook?&lt;/p&gt;

&lt;p&gt;The answer is now &lt;a href="https://rehmanahmad.com/textbooks/" rel="noopener noreferrer"&gt;my free Punjab textbooks library&lt;/a&gt;. Here's the full story — why raw PDFs were never enough, what I built instead, and what I learned digitizing 251 books as a teacher who codes at night.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Reading Punjab Textbooks Online Needed a Real Library
&lt;/h2&gt;

&lt;p&gt;The official PDFs already existed. The Punjab Curriculum and Textbook Board's E&amp;amp;SE page (PECTAA) hosts them on Google Drive. So why did I spend weeks building a library around them?&lt;/p&gt;

&lt;p&gt;Because "the PDF exists somewhere" and "a student can actually read it" are two very different things. Here's what raw textbook PDFs look like in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No navigation.&lt;/strong&gt; A 200-page scanned PDF has no table of contents. Finding Chapter 3 of Science means scrolling past 60 pages of blurry scans on a 6-inch screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brutal file sizes.&lt;/strong&gt; Some of these PDFs are 100MB+. On mobile data in a village, that download dies halfway — twice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No discoverability.&lt;/strong&gt; The board's Drive folders are organized for bureaucrats, not for a Class 7 student looking for "Waqfiyat-e-Aama."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No learning layer.&lt;/strong&gt; A PDF is a photocopy. Nobody asks questions about a photocopy, nobody tests you on it, nobody tells you the tricky part of Chapter 4.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I didn't want a download dump. I wanted a &lt;em&gt;library&lt;/em&gt; — the kind of page I'd send a parent on WhatsApp and know they'd figure it out in ten seconds. So that's what I built: &lt;a href="https://rehmanahmad.com/textbooks/" rel="noopener noreferrer"&gt;the Punjab textbooks library at rehmanahmad.com/textbooks&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the Punjab Textbooks Online Library
&lt;/h2&gt;

&lt;p&gt;Thirteen grade levels. 251 books. Every single book page carries more than a download button — it carries everything a student needs to actually &lt;em&gt;study&lt;/em&gt; the book:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real chapter tables of contents.&lt;/strong&gt; I typed out the chapter lists for every book from the official PDFs — including scanned ones where I had to read the &lt;em&gt;fehrist&lt;/em&gt; (table of contents) page visually. Open the Class 8 History book and you see all 5 chapters listed, clickable, in seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "Online Parho" reader.&lt;/strong&gt; Instead of forcing a 150MB download, each book opens in a continuous-scroll reader right in the browser: lazy page rendering (a 200-page book loads like a webpage, not like a freight train), zoom for small text, go-to-page, and fullscreen mode that turns any classroom projector into a smart board.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A chapter quiz game on every book.&lt;/strong&gt; Five multiple-choice questions, instant score, one-tap restart. I built it because my students beg to try again when they miss two — and "begging to restudy" is the closest thing to magic a teacher gets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teacher tips and FAQs.&lt;/strong&gt; Every page has practical notes written from real classroom experience — which chapters trip students up, how to pace them — plus FAQs with proper search-engine markup so parents googling "Class 9 Biology chapters" actually land on the right page.&lt;/p&gt;

&lt;p&gt;Here's the full rollout, all verified live this week:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Books&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pre-primary&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class 1–2&lt;/td&gt;
&lt;td&gt;7 each&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class 3–5&lt;/td&gt;
&lt;td&gt;7, 8, 8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class 6–8&lt;/td&gt;
&lt;td&gt;19, 21, 20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class 9–10&lt;/td&gt;
&lt;td&gt;55, 47&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class 11–12&lt;/td&gt;
&lt;td&gt;20, 28&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Class 9 alone is 55 books — core subjects plus the technical stream. For 11th and 12th, the official PECTAA page doesn't list books at all, so I sourced them from official PCTB mirrors and ran every file through the same verification pipeline: official list match, real chapter extraction, cover art, build, and a live check before it counted as done.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Read Punjab Textbooks Online: A 3-Step Walkthrough
&lt;/h2&gt;

&lt;p&gt;Using it is deliberately boring — three taps and you're reading:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pick your class.&lt;/strong&gt; Open &lt;a href="https://rehmanahmad.com/textbooks/" rel="noopener noreferrer"&gt;rehmanahmad.com/textbooks&lt;/a&gt; and tap your class. Pre-primary through 12th, all on one hub page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick your book.&lt;/strong&gt; Every class page shows each book with its cover, subject, and medium (English/Urdu). Tap one — say Class 10 Biology — and you get the full chapter list, teacher tips, and FAQs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read, quiz, or download.&lt;/strong&gt; Read in the Online Parho reader (works on any phone browser, no app needed), play the chapter quiz after the lesson, or grab the official PDF download for offline study.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's the whole pitch. No login, no paywall, no app install — because in my school, "create an account first" is where usage goes to die.&lt;/p&gt;

&lt;h2&gt;
  
  
  5 Lessons From Digitizing 251 Textbooks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. The table of contents matters more than the PDF.&lt;/strong&gt; Nobody on mobile data downloads a 150MB file to find Chapter 3. The single most-used feature of the whole library is the chapter list. Navigation &lt;em&gt;is&lt;/em&gt; the product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Mobile-first isn't a slogan — it's the only device that exists.&lt;/strong&gt; My students don't have laptops. Every design decision assumed a cracked-screen Android phone on 4G: lazy rendering, compressed cover thumbnails, no heavy JavaScript frameworks on the reader.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Quizzes turn reading into a game.&lt;/strong&gt; I added the 5-question quiz as a nice extra. It became the headline feature. Kids who would never "revise Chapter 4" will happily play "the Chapter 4 game" four times to beat their score. Gamification works when it's five minutes and zero setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Use official sources only — and say so.&lt;/strong&gt; Every book is matched against the official board lists, with attribution. When the official page had gaps (Classes 11–12), I used official PCTB mirrors rather than random uploads, and I say that openly on the site. In education, trust is the whole currency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. No thin pages, ever.&lt;/strong&gt; My rule for everything I publish: a page with a download button and nothing else helps nobody. Every book page carries real, original content — chapter lists, teacher tips, FAQs. A library of 251 stubs would have been faster to build and worthless to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5-Minute Classroom Checklist
&lt;/h2&gt;

&lt;p&gt;If you're a teacher, here's exactly how to use the library in class this week:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Open your class page on the classroom tablet or projector-connected phone&lt;/li&gt;
&lt;li&gt;[ ] Open the book's &lt;strong&gt;Online Parho&lt;/strong&gt; reader in &lt;strong&gt;fullscreen&lt;/strong&gt; — instant smart board&lt;/li&gt;
&lt;li&gt;[ ] Use &lt;strong&gt;zoom&lt;/strong&gt; on diagrams and maps instead of squinting at a printed copy&lt;/li&gt;
&lt;li&gt;[ ] After the lesson, run the &lt;strong&gt;chapter quiz&lt;/strong&gt; on the big screen — let the class vote on answers&lt;/li&gt;
&lt;li&gt;[ ] Share the book's link in the parents' WhatsApp group so kids can re-read at home&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And a side note for the computer-lab side of school life: for the Windows tools my lab runs on — PDF readers, document tools, classroom utilities — I grab verified free software from &lt;a href="https://filecobra.com" rel="noopener noreferrer"&gt;filecobra.com&lt;/a&gt;, the free-software download directory I built and run with hash-and-signature verification on every file. Same philosophy as the library: free, safe, no junk.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next: Sindh, Then the Rest of the Country
&lt;/h2&gt;

&lt;p&gt;Punjab was Phase 1. Phase 2 is Sindh — the STBB board's own ebook portal already hosts 194+ books from ECCE through Class 12 in Sindhi, Urdu, and English, so the groundwork exists. Balochistan comes after that. The goal is simple and, honestly, a little stubborn: &lt;strong&gt;every textbook in Pakistan, online, free, readable on the cheapest phone in the village.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're a teacher, a parent, or a student: &lt;a href="https://rehmanahmad.com/textbooks/" rel="noopener noreferrer"&gt;bookmark the library&lt;/a&gt; and share it with one person who needs it. That's how this grows.&lt;/p&gt;

&lt;p&gt;And a question for you: &lt;strong&gt;which board should I digitize next — and what's the one feature that would make your students actually open their books?&lt;/strong&gt; I read every comment. Teacher by day, developer by night — this is what the nights are for.&lt;/p&gt;




</description>
      <category>education</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>PhotoCraft: The 65K-Star Open-Source Photoshop Alternative Built in Rus</title>
      <dc:creator>Rehman Ahmad Chaudhry</dc:creator>
      <pubDate>Sat, 17 Oct 2026 08:52:48 +0000</pubDate>
      <link>https://dev.to/rehman_ahmadchaudhry_007/photocraft-the-65k-star-open-source-photoshop-alternative-built-in-rus-433j</link>
      <guid>https://dev.to/rehman_ahmadchaudhry_007/photocraft-the-65k-star-open-source-photoshop-alternative-built-in-rus-433j</guid>
      <description>&lt;p&gt;A Photoshop alternative just crossed &lt;strong&gt;65,000 GitHub stars&lt;/strong&gt;. It's free, open-source (MIT/Apache 2.0), written in Rust, works fully offline — and it ships with CLI and MCP interfaces so AI agents can drive it. Here's why developers should be paying attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers first
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PhotoCraft&lt;/strong&gt;, built by Storytold as part of the ArtCraft suite, is a raster image editor positioned directly against Adobe Photoshop. Layers, masks, selections, adjustment layers, filters, color grading — the full day-to-day editing toolkit, in a workspace that feels instantly familiar to anyone coming from Creative Cloud.&lt;/p&gt;

&lt;p&gt;The part that made me look twice: &lt;strong&gt;65,000+ stars on GitHub&lt;/strong&gt;, earned largely by word of mouth across Hacker News, YouTube, and X. That's not marketing. That's developers voting with their stars.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Rust matters here
&lt;/h2&gt;

&lt;p&gt;Image editors live and die on brush latency and filter throughput. PhotoCraft's Rust foundation is doing real work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Responsive brushes on large canvases&lt;/strong&gt; — no GC pauses, no runtime overhead in the hot path&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimal memory footprint&lt;/strong&gt; — native binary, no Electron shell eating 500MB before you open a file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fearless concurrency&lt;/strong&gt; for filter pipelines — Rust's ownership model is genuinely well-suited to parallel pixel processing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the same performance story we've seen from tools like Ripgrep and Deno's early days: systems languages winning where latency is user-visible. An image editor is one of the purest examples — every millisecond of brush lag is felt in the hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Offline-first, zero telemetry
&lt;/h2&gt;

&lt;p&gt;Everything runs locally. No account, no cloud round-trip, no "sign in to continue." Your files never leave your machine.&lt;/p&gt;

&lt;p&gt;For developers, the license terms matter as much as the features: &lt;strong&gt;MIT/Apache 2.0, source public&lt;/strong&gt;. No acquisition, price hike, or shutdown can ever take the tool away. Compare that with the subscription treadmill — Photoshop alone costs more per year than most developers' entire tool budget, and you own nothing at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent-ready: CLI + MCP interfaces
&lt;/h2&gt;

&lt;p&gt;This is the part most coverage misses. PhotoCraft is designed &lt;strong&gt;agent-ready&lt;/strong&gt;, with CLI and MCP (Model Context Protocol) interfaces for automation. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Batch operations chain together from scripts&lt;/li&gt;
&lt;li&gt;AI agents can drive editing workflows programmatically&lt;/li&gt;
&lt;li&gt;Repetitive studio tasks (resize, convert, watermark hundreds of assets) become one-liners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An image editor with a machine interface is a quiet superpower. If you're building asset pipelines, this deserves a look.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's not alone — it's 1 of 10
&lt;/h2&gt;

&lt;p&gt;PhotoCraft is the flagship of the &lt;strong&gt;ArtCraft suite&lt;/strong&gt;: 10 free, open-source, Rust-built applications covering 7 Adobe alternatives (photo, vector, video, light/photo-AI, PDF, effects, design) plus 3 Office alternatives (spreadsheet, documents, presentations). Same philosophy across all of them: free forever, offline, no telemetry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to get it
&lt;/h2&gt;

&lt;p&gt;I maintain a verified download page with the current version, SHA-256 checksums, and the full hands-on review:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://filecobra.com/app/photocraft-free-adobe-alternative-pc/" rel="noopener noreferrer"&gt;Download PhotoCraft (verified) on FileCobra&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every binary there is hash-verified and signature-checked before it goes live — the same pipeline I wrote about in my &lt;a href="https://coderlegion.com/31505/the-night-my-pipeline-rejected-43-8-of-everything-and-was-right" rel="noopener noreferrer"&gt;CoderLegion article on binary verification&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What's your take?&lt;/strong&gt; Is Rust the right call for creative tools, or does the ecosystem still belong to C++? And have you tried driving a desktop app through MCP yet? Curious what people are building.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Our signature verifier passed CI by never running</title>
      <dc:creator>Rehman Ahmad Chaudhry</dc:creator>
      <pubDate>Thu, 03 Sep 2026 15:27:55 +0000</pubDate>
      <link>https://dev.to/rehman_ahmadchaudhry_007/our-signature-verifier-passed-ci-by-never-running-ipm</link>
      <guid>https://dev.to/rehman_ahmadchaudhry_007/our-signature-verifier-passed-ci-by-never-running-ipm</guid>
      <description>&lt;p&gt;We build a catalogue of Windows and Android software, and part of the pipeline checks the Authenticode signature on every binary we ingest. It works by shelling out to Get-AuthenticodeSignature and mapping the result onto our own verdict enum.&lt;/p&gt;

&lt;p&gt;On windows-latest, every single binary came back INVALID. Signed ones, deliberately tampered ones, and files that were not executables at all. The whole job finished in 4.3 seconds.&lt;/p&gt;

&lt;p&gt;Four of the five self-test cases failed loudly. The fifth passed. That fifth one is the interesting part, and it is the reason this took three CI round trips instead of one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cause: two PowerShells, one module path
&lt;/h2&gt;

&lt;p&gt;GitHub's Windows runners execute every step under PowerShell 7:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"&lt;/code&gt;`&lt;br&gt;
PowerShell 7's PSModulePath begins with C:\Program Files\PowerShell\7\Modules, and that directory contains its own copy of Microsoft.PowerShell.Security.&lt;/p&gt;

&lt;p&gt;Our script spawns powershell.exe — Windows PowerShell 5.1, because that is where the Authenticode cmdlets have always lived. The child inherits the parent's environment, including PSModulePath. It searches that path first, finds PowerShell 7's Microsoft.PowerShell.Security manifest, and cannot load it, because a 7.x module is not loadable by 5.1:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The 'Get-AuthenticodeSignature' command was found in the module&lt;br&gt;
'Microsoft.PowerShell.Security', but the module could not be loaded.&lt;br&gt;
The cmdlet never resolved. Not once, on any file.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why it produced INVALID rather than an error
&lt;/h2&gt;

&lt;p&gt;Our verdict mapping fails closed, which is normally correct — an unverifiable binary should never be treated as verified. But every branch fails closed, so an unresolved cmdlet became INVALID for every input.&lt;/p&gt;

&lt;p&gt;That distinction matters more than it sounds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A verifier that rejects everything is strict.&lt;/li&gt;
&lt;li&gt;A verifier that cannot run rejects everything too.
From the outside these are identical. Both produce a wall of INVALID. Only one of them is doing any work, and ours was the other one — it would have failed closed on every real release, forever, while looking like conservative security policy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What made it worse: Microsoft Defender checks in the same job passed fine. Defender goes through MpCmdRun.exe and Get-MpThreatDetection, a different module that loads without issue. So the scan cases were green and only the signature cases were red, which made the failure look narrow and specific when it was total.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix&lt;/strong&gt;&lt;br&gt;
Strip PSModulePath from the child environment entirely:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;function windowsPowerShellEnv(): NodeJS.ProcessEnv {&lt;br&gt;
  const env: NodeJS.ProcessEnv = {};&lt;br&gt;
  for (const [key, value] of Object.entries(process.env)) {&lt;br&gt;
    if (key.toLowerCase() === 'psmodulepath') continue;&lt;br&gt;
    env[key] = value;&lt;br&gt;
  }&lt;br&gt;
  return env;&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
Two deliberate details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unset it, don't pin it.&lt;/strong&gt; The tempting fix is to set PSModulePath to 5.1's own module directory. Don't — that hard-codes a layout a future runner image can move. If the variable is absent, PowerShell computes its own default for whichever version is being launched, and the fix keeps working.&lt;/p&gt;

&lt;p&gt;Every casing. Windows environment variable names are case-insensitive, but Object.entries(process.env) in Node gives you whatever casing the parent used. Comparing against the exact string 'PSModulePath' will miss PSModulePATH.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproducing it locally
&lt;/h2&gt;

&lt;p&gt;This one is genuinely awkward to reproduce, because the obvious approach does not work. Setting PSModulePath to a nonexistent directory does not trigger it — 5.1 finds nothing there and falls back to its built-in module location, which works fine.&lt;/p&gt;

&lt;p&gt;You have to make it find something it cannot load. Place a stub manifest named Microsoft.PowerShell.Security.psd1 declaring a version floor 5.1 cannot satisfy:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@{&lt;br&gt;
    ModuleVersion      = '7.0.0.0'&lt;br&gt;
    PowerShellVersion  = '7.0'&lt;br&gt;
    GUID               = 'a94c8c7e-9810-47c0-b8af-65089c13a35a'&lt;br&gt;
    CmdletsToExport    = @('Get-AuthenticodeSignature')&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
Put its directory ahead of the system modules in PSModulePath, and you get the exact error message above. Unset the variable and the same file returns Valid.&lt;/p&gt;

&lt;h2&gt;
  
  
  The test that passed for the wrong reason
&lt;/h2&gt;

&lt;p&gt;Case 3 of our self-test takes a text file, renames it .exe, and asserts the verifier does not call it valid. It passed throughout.&lt;/p&gt;

&lt;p&gt;Of course it did. "Status is not VALID" is satisfied perfectly well by a tool that never started. The assertion was true for a reason that had nothing to do with the behaviour it was supposed to be testing — and because it passed, the failure looked narrower than it was.&lt;/p&gt;

&lt;p&gt;If you assert that something was rejected, also assert that the check ran. Bare negatives — "status is not VALID", "no results returned", "exit code is non-zero" — are all satisfiable by a crash.&lt;/p&gt;

&lt;p&gt;Finding the field that distinguishes ran and said no from never ran took some care. The status code itself could not do it: our PowerShell wrapper initialises psStatus to UnknownError before calling out, and UnknownError is also a real answer Windows gives for a malformed file. Same value, two opposite meanings.&lt;/p&gt;

&lt;p&gt;The discriminator was the accompanying message:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;function signatureCheckRan(verified) {&lt;br&gt;
  const raw = verified.raw;&lt;br&gt;
  if (raw?.ok === false || !raw?.signature) return false;&lt;br&gt;
  const sig = raw.signature;&lt;br&gt;
  if (sig.error) return false;&lt;br&gt;
  return sig.psStatus !== 'UnknownError' || Boolean(sig.statusMessage);&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
A completed call has either a status other than UnknownError, or UnknownError carrying Windows' own explanatory message. A call that threw has the untouched placeholder, no message, and an exception string. Now case 3 asserts both that the file was rejected and that something was there to reject it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A second trap in the same PR: catalog vs embedded signing
&lt;/h2&gt;

&lt;p&gt;Worth knowing if you write tamper-detection tests. Windows OS binaries — notepad.exe, cmd.exe, powershell.exe — are catalog-signed, not embedded-signed. Catalog entries are keyed by the original file's hash, so a byte-identical copy verifies Valid and your happy-path test passes. But a tampered copy is in no catalog and comes back NotSigned, never HashMismatch. Your tamper test then fails, and it reads exactly like broken tamper detection.&lt;/p&gt;

&lt;p&gt;Pick a reference binary by reading embedded-ness out of the bytes rather than asking PowerShell. The certificate table is data directory 4 of the PE optional header; if its offset and size are both non-zero, the signature is embedded. Measured on one dev box: notepad gives offset 0, size 0 — catalog-signed. node gives offset 92263424, size 15688 — embedded. Git for Windows is the reliable choice on a runner, since actions/checkout cannot run without it and its binaries are embedded-signed.&lt;/p&gt;

&lt;p&gt;One more: our PowerShell wrapper writes its JSON output beside the target file. Run it against something under C:\Program Files and you get a hard failure from an Access-Denied write that has nothing to do with the signature. Copy to a temp directory and verify the copy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Any powershell.exe spawned from a pwsh parent needs PSModulePath stripped. On GitHub's Windows runners, that is every step by default.&lt;/li&gt;
&lt;li&gt;A verifier where every branch fails closed can't tell you it broke. Make "couldn't check" a distinct outcome from "checked and failed".&lt;/li&gt;
&lt;li&gt;Assert that the check executed, not just that it returned the answer you wanted.&lt;/li&gt;
&lt;li&gt;Two green cases in a red suite are worth more attention than the red ones — they may be green vacuously.
We hit all of this building the ingestion pipeline for &lt;a href="https://filecobra.com" rel="noopener noreferrer"&gt;FileCobra&lt;/a&gt;, where the same checks run over every binary in the catalogue. If you are doing Authenticode verification in CI, the PowerShell version mismatch will find you eventually — it is not specific to our setup.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>microsoftgraph</category>
      <category>xamarin</category>
      <category>cicd</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
