<?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: James Ross</title>
    <description>The latest articles on DEV Community by James Ross (@flyingrobots).</description>
    <link>https://dev.to/flyingrobots</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3578659%2F102acaee-8e1c-4b50-8242-ffed72295d2f.jpg</url>
      <title>DEV Community: James Ross</title>
      <link>https://dev.to/flyingrobots</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/flyingrobots"/>
    <language>en</language>
    <item>
      <title>GitScroll I: The Unbroken Line</title>
      <dc:creator>James Ross</dc:creator>
      <pubDate>Fri, 24 Oct 2025 00:36:28 +0000</pubDate>
      <link>https://dev.to/flyingrobots/gitscroll-i-the-unbroken-line-5ba0</link>
      <guid>https://dev.to/flyingrobots/gitscroll-i-the-unbroken-line-5ba0</guid>
      <description>&lt;h2&gt;
  
  
  The First Teaching: Thou Shalt Not Rewrite History
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;To prune the past is but to feign thy grace,&lt;br&gt;
And rob the root that gave thy courage birth.&lt;br&gt;
Let flaws stand firm, that others find their place,&lt;br&gt;
For history denied is stolen worth.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The broken line is still a line—and thine.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Do not trade your history for the illusion of mastery."&lt;br&gt;
&lt;em&gt;As taught by &lt;strong&gt;Linus the Elder&lt;/strong&gt;, Grandfather of Git, Keeper of the Sacred Timeline&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  🎭 Invocation Before the Scroll
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The First Invocation — Of Echo and Origin&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;From pitch darkness, a feather appears—long, absurd, undeniable—followed by a hat, a man, and a rustling storm of fabric. The CHRONICLER steps forward into a single shaft of light. His poet shirt billows with no wind. The scroll in his hand is tied in twine and time. He speaks.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CHRONICLER:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before the fork, there was only flow.&lt;br&gt;
Before the branch, only breath.&lt;br&gt;
Before thy fingers touched thy first key—&lt;br&gt;
the line had already begun.&lt;/p&gt;

&lt;p&gt;You are not the author.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;He steps forward, voice silk-sharp.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thou thinkest this tale quaint?&lt;br&gt;
A fable for old devs and dusty forums?&lt;/p&gt;

&lt;p&gt;Fool.&lt;br&gt;
This scroll—&lt;br&gt;
this first scroll—&lt;br&gt;
concerneth thee.&lt;br&gt;
Thy hubris. Thy ignorance.&lt;br&gt;
Thy refusal to read the damn README.&lt;/p&gt;

&lt;p&gt;Heed me well.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;He raises the scroll, its twine unravels with a dry hiss.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is the story of the unbroken line—&lt;br&gt;
a chain of silent decisions,&lt;br&gt;
strung through time like cursed pearls,&lt;br&gt;
passed from trembling hand to trembling hand.&lt;/p&gt;

&lt;p&gt;And now…&lt;br&gt;
into the hands of one most unready:&lt;br&gt;
&lt;strong&gt;Tuxicles&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;He is not wise.&lt;br&gt;
Not trained.&lt;br&gt;
Not prepared.&lt;/p&gt;

&lt;p&gt;But he is present.&lt;br&gt;
And that is enough to doom him.&lt;/p&gt;

&lt;p&gt;He finds the remnants of those who came before—&lt;br&gt;
lines half-writ, purpose half-felt.&lt;br&gt;
He doth not yet ask “what must I build?”&lt;br&gt;
Only:&lt;br&gt;
“Who left this here?”&lt;/p&gt;

&lt;p&gt;Thus begins the ritual.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;He whips the scroll wide. The feather flares like a flag of war. Scene begins. The CHRONICLER vanishes into absence.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Prologue: The Terminal Opens
&lt;/h2&gt;

&lt;p&gt;He waddled through the atrium, the sun catching on the polished surface of his Sacred Codex. Somewhere, someone was invoking the Build Ritual. In the far corner of the Temple, he glimpsed a scarred developer helping a struggling newcomer—something about the scene felt strangely familiar, like déjà vu in reverse. And in his heart, the Command Portal had just opened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt; was young—so young that he still believed in perfect code on the first try. So innocent that he thought &lt;code&gt;git commit -m "asdf"&lt;/code&gt; was a valid form of version control. So pure that when the build broke, he assumed it was the universe's fault, not his.&lt;/p&gt;

&lt;p&gt;On this particular morning, with the marble columns of the Temple of Open Source casting long shadows across the courtyard, Tuxicles had made what he considered a &lt;em&gt;minor mistake&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;He had rebased &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;After pushing.&lt;/p&gt;

&lt;p&gt;To production.&lt;/p&gt;

&lt;p&gt;While three other developers were mid-merge.&lt;/p&gt;

&lt;p&gt;Somewhere in the Temple's monitoring infrastructure, an automated sentinel registered the anomaly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@TempleSentinel: "AUGURY: Unexpected force push detected on main branch. 
Affected developers: 3. 
Merge conflicts generated: 17. 
Monitoring..."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But Tuxicles, in his innocence, had silenced the spirit whispers from the Temple's Eternal Vigilance. Too noisy, he'd thought. Too many false prophecies.&lt;/p&gt;

&lt;p&gt;As he hit enter on the final command, a strange taste filled his mouth—metallic, sharp, like biting down on aluminum foil. The flavor intensified with each keystroke: &lt;code&gt;git push --force origin main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Tuxicles paused, tongue probing the unfamiliar sensation. For a moment, the taste carried whispers—warnings in a language he didn't yet speak. And somewhere, like an echo from a future not yet written, he thought he heard the sound of someone teaching, scarred and patient, guiding another young developer away from this very mistake. But the moment passed.&lt;/p&gt;

&lt;p&gt;"Probably just the bitter dregs from the Chamber of Restoration," he muttered, though he hadn't partaken of the Morning Elixir yet. The metallic tang faded to a ghost on his tongue, easily dismissed, easily forgotten.&lt;/p&gt;

&lt;p&gt;Nothing important.&lt;/p&gt;




&lt;h2&gt;
  
  
  Scene I: The Summoning
&lt;/h2&gt;

&lt;p&gt;The thunderclap was not metaphorical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus the Elder&lt;/strong&gt; materialized in the hallway like a Reality Tear given form—sudden, jarring, and absolutely ruinous to whatever had been running smoothly moments before. His beard was the color of commented-out code, his eyes burned with the fury of a thousand failed rituals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "TUXICLES."&lt;/p&gt;

&lt;p&gt;The young penguin froze, one flipper still hovering over the Enter key, the other clutching a chalice that proclaimed "Mediocre Among Coders."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "Oh. Hi, Grandfather. I was just… um… cleaning up some commit history? Making it prettier? I thought—"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "You thought. You thought. Tell me, young penguin, what did you think when you decided to git rebase -i a branch that had already been pushed to origin?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "That… that it would make the log look cleaner?"&lt;/p&gt;

&lt;p&gt;The silence that followed was the kind of silence that exists between the moment you type &lt;code&gt;rm -rf&lt;/code&gt; and the moment you realize you forgot the directory name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Show me."&lt;/p&gt;

&lt;p&gt;With trembling flippers, Tuxicles navigated to his Command Portal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git log &lt;span class="nt"&gt;--oneline&lt;/span&gt;
a4f2b8c &lt;span class="o"&gt;(&lt;/span&gt;HEAD -&amp;gt; main, origin/main&lt;span class="o"&gt;)&lt;/span&gt; fix stuff
c2e9d1a more fixes
7f3a6b5 fix the fix
9e1c4d7 actually fix it this &lt;span class="nb"&gt;time
&lt;/span&gt;b5a2f8e initial working version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Ah. I see. And before your… cleaning… what did this history look like?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "Well, it was… messier. There were merge commits, and some WIP commits, and that one commit where I accidentally committed my lunch order, and—"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "And now three of your colleagues cannot push their work because you have rewritten the past. Their commits, which were based on the true history, now conflict with your prettier history."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "But… but the log looks so much cleaner now! And I combined all those little fixes into one big, meaningful commit!"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Do you know what you have done, young one?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "Made… made the repo better?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "You have committed the First Sin of Version Control. You have denied your colleagues their rightful place in history. You have stolen their context. You have broken the sacred contract of shared development."&lt;/p&gt;

&lt;p&gt;The Elder began to pace, his footsteps echoing in the hall like the rhythmic chunking of a hard drive on its last legs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Listen well, Tuxicles, for this lesson will save you from a lifetime of flame wars and force-pushes. History is not your personal art project. History is shared truth."&lt;/p&gt;




&lt;h2&gt;
  
  
  Scene II: The Lesson of the Timeline
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Come. Let me show you something."&lt;/p&gt;

&lt;p&gt;He led Tuxicles to the Wall of Eternal Branches, where the git history of the Linux kernel stretched back decades, a sprawling tree of merges, reverts, and evolutionary progress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "What do you see?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "It's… chaotic. Messy. There are merge commits everywhere, failed experiments, tiny one-line fixes…"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Yes. And it is beautiful. Do you know why?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "Because… it shows the real process of development?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Because it shows the truth. Every mistake taught someone something. Every failed experiment prevented someone else from making the same error. Every tiny fix represents a moment when a developer said 'this is wrong, and I will make it right.'"&lt;/p&gt;

&lt;p&gt;The Elder pointed to a particularly gnarly section of the tree.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Here. This merge commit from 2011. It looks ugly, doesn't it? Seven different branches coming together, conflicts resolved, a mess of commits with messages like 'fix compilation error' and 'forgot to add file.'"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "It does look messy…"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "That merge represented two months of work by twelve developers across four continents. It introduced the foundation for what became container technology. If I had 'cleaned it up'—squashed it into one pretty commit—we would have lost the story of how it was built, who built it, and most importantly, why certain decisions were made."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "But… my commits weren't that important. They were just bug fixes."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Every commit is important to someone. That WIP commit you erased? It might have been the exact state another developer needed to understand your debugging process. That merge commit you squashed? It preserved the context of what you were thinking when you made those changes."&lt;/p&gt;

&lt;p&gt;As Linus spoke, Tuxicles' viewing glass flickered. For just a moment, buried in the log output, an impossible entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;commit 0xDEADBEEF
Author: Unknown &amp;lt;wisdom@future.void&amp;gt;
Date: Tue Jun 15 13:42:00 2027 +0000

merge: When the circle completes, remember this teaching

00-merge.lore &lt;span class="o"&gt;[&lt;/span&gt;new file, forkable, awaiting wisdom]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: &lt;em&gt;(blinking)&lt;/em&gt; "Did you see that? A commit from 2027? And... '&lt;em&gt;forkable&lt;/em&gt;'? What does that even mean?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: &lt;em&gt;(not looking at the screen)&lt;/em&gt; "The repository remembers everything, young one. Past, present, and sometimes... echoes of what must be. Some wisdom cannot be taught—it must be discovered, modified, and passed forward." &lt;em&gt;(pausing)&lt;/em&gt; "Focus on the lesson at hand. The future's gifts reveal themselves when you're ready to receive them."&lt;/p&gt;

&lt;p&gt;The anomaly vanished when Tuxicles refreshed, leaving him to wonder if the metallic taste in his mouth had affected his vision. Yet something about the words '&lt;em&gt;forkable&lt;/em&gt;' and '&lt;em&gt;awaiting wisdom&lt;/em&gt;' lingered in his mind like an invitation he wasn't yet ready to accept.&lt;/p&gt;




&lt;h2&gt;
  
  
  Scene III: The Deeper Truth
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "But there is a deeper truth here, young Tux. When you rebase a shared branch, you do not merely clean history. You lie about history."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "Lie?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Your pretty commit claims you solved the problem in one elegant step. But you did not. You solved it through trial and error, through incremental fixes, through the messy human process of learning. When you hide that process, you rob other developers of the chance to learn from your journey."&lt;/p&gt;

&lt;p&gt;The Elder's voice softened, taking on the tone of a patient teacher rather than an angry sys admin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Let me tell you a secret, Tuxicles. The best developers are not those who write perfect code. They are those who leave the best trails for others to follow. Your messy commits, your false starts, your 'oh wait, that was wrong' fixes—these are gifts to your future colleagues."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "Gifts?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "When someone encounters a bug in six months, and they run &lt;code&gt;git blame&lt;/code&gt; to understand the code, what serves them better? A single, monolithic commit that says '&lt;em&gt;implement feature X&lt;/em&gt;,' or a series of commits that shows the thought process: '&lt;em&gt;try approach A,&lt;/em&gt;' '&lt;em&gt;approach A fails with edge case Y,&lt;/em&gt;' '&lt;em&gt;refactor to handle Y,&lt;/em&gt;' '&lt;em&gt;realize approach B is cleaner&lt;/em&gt;'?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "The… the series?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "&lt;em&gt;Exactly&lt;/em&gt;. History is documentation. When you rewrite it, you delete the documentation of your thinking."&lt;/p&gt;




&lt;h2&gt;
  
  
  Scene IV: The Sacred Commandment
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "This brings us to the &lt;strong&gt;First GitScroll&lt;/strong&gt;, the foundation upon which all other version control wisdom rests."&lt;/p&gt;

&lt;p&gt;He pulled out an ancient-looking scroll, its edges yellowed with age (or coffee stains—it was hard to tell).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Repeat after me: Thou Shalt Not Rewrite History."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "Thou Shalt Not Rewrite History."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "That Which Has Been Pushed Is Sacred."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "That Which Has Been Pushed Is Sacred."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "The Timeline Is Truth, Even When Ugly."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "The Timeline Is Truth, Even When Ugly."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Good. Now, what does this mean in practice?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "That… that I shouldn't rebase branches that other people are working on?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "More than that. It means you respect the collaborative nature of development. It means you understand that your code does not exist in isolation—it exists in relationship to the work of others."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "But what if I really do need to clean up history? What if there are sensitive commits, or broken commits?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Then you &lt;em&gt;revert&lt;/em&gt;. You add new commits that fix the problems. You do not pretend the problems never existed. The git revert command exists for a reason—it allows you to undo changes while preserving the record that they happened."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "So when &lt;em&gt;can&lt;/em&gt; I rebase?"&lt;/p&gt;

&lt;p&gt;The metallic taste surged back, stronger now, as if his question itself carried danger. Tuxicles swallowed hard, trying to clear the copper from his tongue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "On your local branches. Before you push. Before you share. Your private workspace is yours to sculpt. But once you have published your work—once others have built upon it—it belongs not just to you, but to the repository itself."&lt;/p&gt;

&lt;p&gt;The taste faded again, leaving only the ghost of a warning Tuxicles couldn't quite parse. Something about boundaries, about lines that shouldn't be crossed. But the sensation slipped away like uncommitted changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Scene V: The Wisdom Settles
&lt;/h2&gt;

&lt;p&gt;Tuxicles stared at his Sacred Codex, where his prettified history still glowed mockingly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "So what do I do now, Grandfather? I've already pushed the rebased history."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "You face the consequences with dignity. You force-push, knowing that you will break your colleagues' work. You immediately notify them in the Ethereal Channels. You help them recover their branches. And you procure morning elixir for everyone affected."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "That sounds… painful."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Pain is a teacher. And the best lessons are learned through pain shared with teammates who will remind you of this moment for years to come."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "And I promise never to rebase shared history again?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "You promise to think before you rebase. You promise to ask yourself: '&lt;em&gt;Who else might be affected by this change?&lt;/em&gt;' You promise to remember that version control is not just about controlling versions—it is about respecting the community that builds them."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "I… I understand, Grandfather."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Do you? Then show me. Fix your mistake."&lt;/p&gt;

&lt;p&gt;With newfound resolve, Tuxicles opened Slack and began typing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;@channel Hey everyone, I messed up and rebased main after pushing. If you have branches based on the old main, you'll need to…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: &lt;em&gt;(smiling for the first time)&lt;/em&gt; "Now &lt;em&gt;that&lt;/em&gt; is the beginning of wisdom. You acknowledge the error, take responsibility, and help others navigate the consequences."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: "It's embarrassing."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Good. Embarrassment is the emotion that teaches you not to repeat mistakes. Embrace it. Let it guide you toward better practices."&lt;/p&gt;




&lt;h2&gt;
  
  
  Scene VI: The Unexpected Trust
&lt;/h2&gt;

&lt;p&gt;As Tuxicles worked through the afternoon, helping his colleagues recover from his rebase catastrophe, Linus the Elder watched from the doorway. The young penguin's humility in fixing his mistake had not gone unnoticed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Tuxicles. A word."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: &lt;em&gt;(nervously)&lt;/em&gt; "Yes, Grandfather? Did I miss someone? I tried to help everyone affected—"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "You did well. Better than well. You took responsibility." &lt;em&gt;He paused, considering.&lt;/em&gt; "I see potential in you. Not because you avoided mistakes—that's impossible. But because you owned them."&lt;/p&gt;

&lt;p&gt;The Elder pulled out a small token—a Git commit hash engraved on ancient silicon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "I'm assigning you to the Timeline Preservation Working Group. Junior position, of course. You'll help review PR submissions, ensure commit histories remain clean without destroying them."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuxicles&lt;/strong&gt;: &lt;em&gt;(eyes widening)&lt;/em&gt; "But... I just broke everything today!"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linus&lt;/strong&gt;: "Exactly. Who better to spot timeline violations than one who has committed them? Who better to teach than one who has learned through pain?"&lt;/p&gt;

&lt;p&gt;He handed over the token. "Report to the Working Group tomorrow. Don't make me regret this trust."&lt;/p&gt;

&lt;p&gt;As Linus departed, Tuxicles stared at the token. Trust. After his failure, the Elder was trusting him with more responsibility, not less.&lt;/p&gt;

&lt;p&gt;The metallic taste in his mouth returned, stronger than before, as if the very concept of trust carried weight his body could feel. For a fleeting moment, Tuxicles wondered if the sensation was trying to tell him something—about trust given too easily, about lessons not yet learned, about the danger of confidence without wisdom.&lt;/p&gt;

&lt;p&gt;But the moment passed. "Just residual stress," he told himself, running his tongue over his beak where the taste lingered strongest. "Nothing more."&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@TempleSentinel: "PROPHECY: TRUST_EVENT_REGISTERED. 
AUGURY: INITIAL_COMPETENCE_DEMONSTRATED. 
Trust_level: +10. 
Warning_code: PWR_WIS_IMBALANCE. 
Risk_assessment: MODERATE. 
Pattern_observed: HUMBLE_RESPONSE_TO_FAILURE. 
Recommendation: GRANT_LIMITED_RESPONSIBILITIES. 
Continue_monitoring: TRUE"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But Tuxicles didn't see the bot's warning. He saw only the opportunity to prove himself worthy of Linus's faith.&lt;/p&gt;




&lt;h2&gt;
  
  
  Epilogue: The First Growth
&lt;/h2&gt;

&lt;p&gt;As the day ended and the last summoning ritual finished echoing through the halls, Tuxicles sat in contemplation. His Sacred Codex glowed softly, the Command Portal still open, but now he saw it differently.&lt;/p&gt;

&lt;p&gt;It was not just a tool for writing code. It was a window into a shared timeline, a collaborative history written by thousands of developers across the world. His commits were not just changes to files—they were contributions to a story larger than himself.&lt;/p&gt;

&lt;p&gt;From that day forward, whenever Tuxicles felt the urge to clean up history, he would hear the Elder's voice: &lt;em&gt;"The timeline is truth, even when ugly."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And slowly, gradually, beautifully, his commit messages began to tell better stories. Not because they were prettier, but because they were honest.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The First GitScroll was complete. Fifteen more awaited.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In the beginning was the commit, and the commit was with Tux, and the commit was good.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Thus began the education of Tuxicles, and lo, the repositories were safer for his learning.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Closing of the First Scroll
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Thus ends the First Teaching: the lineage intact,&lt;br&gt;
Where silent commits bear echoes of shame.&lt;br&gt;
The log is unbroken, the truth unredacted—&lt;br&gt;
The past shall speak what pride cannot name.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--grep&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"truth"&lt;/span&gt; | &lt;span class="nb"&gt;tail&lt;/span&gt; -∞
&lt;span class="c"&gt;# For in the timeline lies both confession and lesson&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎭 Closing of the Scroll — Where the Line First Frays
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The CHRONICLER returns slow, hat now slightly askew, as if the telling of this first scroll weighed heavier than expected. He walks with the measured grace of one carrying a fragile repository.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CHRONICLER:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The scroll is sealed.&lt;/p&gt;

&lt;p&gt;Tuxicles hath touched the echo.&lt;br&gt;
Not of code—but of memory.&lt;br&gt;
And memory, once stirred, hath teeth.&lt;/p&gt;

&lt;p&gt;He knoweth now the line was never his.&lt;br&gt;
It stretches back, past names, past authors,&lt;br&gt;
past the illusion that anything truly begins at version one.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;He pauses. Adjusts his ruff. The feather of his hat wilts just slightly.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;He stands at the gate of inheritance,&lt;br&gt;
and already the rust doth creep beneath his boots.&lt;br&gt;
What he hath found is not truth—&lt;br&gt;
but trace.&lt;/p&gt;

&lt;p&gt;Mark this moment, thou reader of digital scrolls.&lt;br&gt;
Mark it well.&lt;/p&gt;

&lt;p&gt;For ‘tis here the dev awakens.&lt;br&gt;
And it is here the dev is damned.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;He holds the scroll flat and lets the weight of it pull his arms down.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The next shall speak not of what was built,&lt;br&gt;
but of what was forgotten.&lt;br&gt;
Lost messages. Misnamed things.&lt;br&gt;
And the ache that comes&lt;br&gt;
when thou findest thine own voice&lt;br&gt;
buried beneath someone else’s commit.&lt;/p&gt;

&lt;p&gt;Go now.&lt;br&gt;
Scroll the Second awaiteth.&lt;br&gt;
And it is not kind.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;He exits without flourish. Even his sleeves seem subdued. Blackout.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;&lt;em&gt;Next&lt;/em&gt;&lt;/strong&gt;: &lt;em&gt;&lt;strong&gt;GitScroll II - "The Annals of Forgotten Messages"&lt;/strong&gt;&lt;br&gt;
Where words unwritten scream louder than those carved&lt;/em&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Copyleft © 2025 J. Kirby Ross, Scrollkeeper&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Shared freely under the Sacred Commit Covenant &lt;a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" rel="noopener noreferrer"&gt;CC BY-NC-SA 4.0&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://github.com/gitscrolls/gitscrolls/blob/main/LICENSE" rel="noopener noreferrer"&gt;LICENSE 🔗&lt;/a&gt; · &lt;a href="https://github.com/gitscrolls/gitscrolls/blob/main/LICENSE_USAGE.md" rel="noopener noreferrer"&gt;Usage Rites 📜&lt;/a&gt; · &lt;a href="https://github.com/gitscrolls/gitscrolls" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>git</category>
      <category>opensource</category>
      <category>learning</category>
      <category>development</category>
    </item>
    <item>
      <title>What if GraphQL Was Your Database?</title>
      <dc:creator>James Ross</dc:creator>
      <pubDate>Wed, 22 Oct 2025 14:25:22 +0000</pubDate>
      <link>https://dev.to/flyingrobots/what-if-graphql-was-your-database-2ekc</link>
      <guid>https://dev.to/flyingrobots/what-if-graphql-was-your-database-2ekc</guid>
      <description>&lt;p&gt;We've been doing this backwards for decades.&lt;/p&gt;

&lt;p&gt;You define your data model in SQL. Then you write a GraphQL schema. Then TypeScript interfaces. Then Zod validators. Then API docs. Five  different representations of the exact same data structure, maintained by hand, drifting apart with every sprint.&lt;/p&gt;

&lt;p&gt;One missed migration and suddenly your frontend expects a field that doesn't exist. One mistyped interface and runtime errors cascade through production. We've normalized this insanity as "just how web development works."&lt;/p&gt;

&lt;p&gt;But what if we inverted the entire paradigm?&lt;/p&gt;

&lt;h3&gt;
  
  
  GraphQL Isn't Just an API Layer
&lt;/h3&gt;

&lt;p&gt;GraphQL already expresses your data model better than SQL. It has types, relationships, non-nullability, and documentation built in. It's human-readable. It evolves gracefully. Most importantly: it's how developers actually think about data.&lt;/p&gt;

&lt;p&gt;So why are we still treating SQL as the source of truth and GraphQL as the derived artifact?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wesley flips the script.&lt;/strong&gt; Write your schema in GraphQL once, augmented with semantic directives, and generate your entire data layer: Postgres DDL, TypeScript types, Zod validators, pgTAP tests, and safe migrations.&lt;/p&gt;

&lt;p&gt;One schema. Everything generated. Zero drift. Migrations for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fhkn5k2qlt8vfahpck20i.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Fhkn5k2qlt8vfahpck20i.webp" alt="How it Works" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wesley extends GraphQL with intuitive directives that tell it how to translate your domain model into working infrastructure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight graphql"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Organization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_pk&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_unique&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_unique&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_index&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;")&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_tenant&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="n"&gt;org_id&lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_pk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="n"&gt;gen_random_uuid&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;")&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;org_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_fk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="n"&gt;Organization&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_unique&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_index&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;password_hash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_sensitive&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;")&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;updated_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;")&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From this single schema, Wesley compiles:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PostgreSQL DDL&lt;/strong&gt; with proper constraints, indexes, and foreign keys&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;organizations&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="n"&gt;UUID&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;UNIQUE&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;slug&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;UNIQUE&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="n"&gt;TIMESTAMPTZ&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;INDEX&lt;/span&gt; &lt;span class="n"&gt;idx_organizations_slug&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;organizations&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="n"&gt;UUID&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;gen_random_uuid&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="n"&gt;org_id&lt;/span&gt; &lt;span class="n"&gt;UUID&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;REFERENCES&lt;/span&gt; &lt;span class="n"&gt;organizations&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;UNIQUE&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;password_hash&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="n"&gt;TIMESTAMPTZ&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;updated_at&lt;/span&gt; &lt;span class="n"&gt;TIMESTAMPTZ&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;TypeScript types&lt;/strong&gt; that stay in sync automatically&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Organization&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;org_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;password_hash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;updated_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Zod validators&lt;/strong&gt; for runtime safety&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;UserSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;org_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;email&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;password_hash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;date&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;updated_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;date&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;pgTAP tests&lt;/strong&gt; to verify your schema&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;has_table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;has_column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'email'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;col_is_unique&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'email'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;has_fk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'org_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'organizations'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;And most importantly: safe, phased migrations.&lt;/strong&gt; Wesley generates expand → backfill → validate → switch → contract migrations that minimize downtime and lock contention.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It's Safe to Ship
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fgtvgainafinsrsl769km.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtvgainafinsrsl769km.png" alt="SHA-locked HOLMES" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every Wesley compilation produces a SHA-locked evidence bundle, a cryptographic proof that your changes are safe. The verification system analyzes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Schema coverage and completeness&lt;/li&gt;
&lt;li&gt;Migration risk assessment
&lt;/li&gt;
&lt;li&gt;Test confidence metrics&lt;/li&gt;
&lt;li&gt;Historical deployment success&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before your migrations touch production, they're rehearsed in an isolated shadow environment. The system captures lock levels, timing data, and potential failure modes. Only verified, tested changes get deployed.&lt;/p&gt;

&lt;p&gt;This isn't &lt;em&gt;"trust me bro, it'll probably work."&lt;/em&gt; It's cryptographically verifiable proof that your migration was validated. Deploy database changes on Friday with confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Row-Level Security Built In
&lt;/h2&gt;

&lt;p&gt;Multi-tenant applications need data isolation. With the &lt;code&gt;@wes_tenant&lt;/code&gt; directive, Wesley generates complete RLS policies automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight graphql"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_tenant&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="n"&gt;org_id&lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_pk&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;org_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;wes_fk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="n"&gt;Organization&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wesley guarantees users can only access their organization’s data, and brings the pgTAP tests to demonstrate it. No manual policy writing. No forgotten WHERE clauses. Security by default.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Paradigm Shift
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The revolution isn't the code generation. It's the inversion of thinking.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Everyone assumes SQL comes first because "that's where the data lives." But data doesn't live in SQL. It lives in our mental models. GraphQL expresses those models better than SQL ever could.&lt;/p&gt;

&lt;p&gt;Wesley makes the computer work the way our brains work, not the other way around.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Wesley is open source and ready for early adopters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/flyingrobots/wesley" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/strong&gt; - Source code and documentation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/flyingrobots/wesley/blob/main/docs/guides/quick-start.md" rel="noopener noreferrer"&gt;5-Minute Quickstart&lt;/a&gt;&lt;/strong&gt; - Try it out!
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/flyingrobots/wesley/blob/main/docs/architecture/paradigm-shift.md" rel="noopener noreferrer"&gt;Architecture Deep-Dive&lt;/a&gt;&lt;/strong&gt; - Read the full paradigm shift explanation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/flyingrobots/wesley/discussions" rel="noopener noreferrer"&gt;Join the Discussion&lt;/a&gt;&lt;/strong&gt; - Share your use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wesley is just getting started. The roadmap includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual schema editor for designing your data model&lt;/li&gt;
&lt;li&gt;Time-travel debugging through schema evolution&lt;/li&gt;
&lt;li&gt;Multi-database support (MySQL, SQLite, and more)&lt;/li&gt;
&lt;li&gt;Framework-specific plugins (Next.js, Remix, SvelteKit)&lt;/li&gt;
&lt;li&gt;AI-powered schema optimization suggestions&lt;/li&gt;
&lt;li&gt;&lt;em&gt;and more...&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The future is schema-first. The future is Wesley.&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.amazonaws.com%2Fuploads%2Farticles%2F3rpk745i2winlct3wyls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rpk745i2winlct3wyls.png" alt="The future is schema-first" width="800" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go on then. Deploy on a Friday. I dare you.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Wesley is named after Wesley Crusher from Star Trek: The Next Generation, the brilliant ensign who saw possibilities others couldn't. Like his namesake, Wesley (the tool) transcends conventional thinking to solve problems in ways that seem obvious only in hindsight.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>database</category>
      <category>typescript</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
