Skip to content

Dispatches

Out of Time

Reflection

Earlier this year, while walking a nearby trail, the wind through the trees pulled my mind toward the world of Twin Peaks. In that atmosphere, a song idea hit me with such clarity that I had to stop and write it down right there.

The song is a "what-if" scenario that peers into the final, silent hours of Agent Dale Cooper. It asks: what if he was truly in love with Audrey Horne, but too afraid to admit it to himself?

I imagined him alone in his hotel room at the Great Northern, just before the end, finally confronting the truth he was too disciplined to reach for when it was right in front of him. In this moment, he realizes that his badge and his protocols weren't just signs of duty, but a shadow he hid behind to avoid the vulnerability of a dream he was too afraid to join.

I wanted to translate that regret into a song that captures being "out of time" in every sense:

  • Realizing the truth only when the opportunity has vanished.

  • Being eternally suspended in the static of the Black Lodge, where that final moment of regret loops forever.

It’s a confession meant for a tape recorder that might never be heard, a trade of every Bureau secret for one more chance to sit in a booth at the Double R and tell her it was always her.

Lyrics

OUT OF TIME

Black coffee, white noise, headlights in the rain
Late-night diner, Double R calling out my name
You move like you remember what I can’t explain
Like a photograph that shifted when I looked away

     Every little signal bends when you walk in
     The words turn to static, then they start again
     If you’re a warning, I don’t care
     I’m already there

     Meet me where the neon lies
     Nothing here is real tonight
     In the pines the truth rewinds
     And your eyes don’t match your eyes
     Say you’re mine, say you’re mine
     Even if it’s out of time

Ceiling fan confession turning slow above the bed
Tape hiss in the background, words you never said
Your touch is like a code I almost understand
But the closer I get, the more it slips out of my hands

     Repeat Prechorus

     Repeat Chorus

Red curtain in my mind, I can’t find the door
Steps echo backward across the checkered floor
If I say it plain, it breaks, so I speak in waves
Pull me through the static, let me make the same mistakes

     Repeat Chorus

Writer: J. Ryan Johnson (BMI)
Copyright: © 2026 J. Ryan Johnson. All rights reserved.
Phone: +1 (407) 902-5419
Email: hello [at] tenthirtyam [dot] org

Audio Disclaimer

Lyrics: Original | Audio: AI-Generated

I am a songwriter and a musician, but I am not the voice meant to inhabit these verses.

I've used AI to bridge the gap for the concept demos, crafted to serve as blueprints that capture the genre, tone, and weary soul I hear for each song.

They exist as an invitation, offered in the hope that these lyrics will eventually reach the hands of an artist and storyteller who can bring them fully into the light.

Until then, they remain as they were born: quiet reflections on the grit and grace found just north of the county line.

Using a GitHub Discussions-First Approach Intake for Maintainers

I still spend time re-routing #1234: a question filed as a bug, a feature pitch that should've been an Ideas thread, an install problem with no version in the body. Discussion category forms fix what shows up in the forum once someone lands there. This post is about policy and wiring: where contributors go first, and what happens when they open New issue anyway.

Some maintainers want questions, ideas, and suspected bugs in GitHub Discussions, triaged in public, with Issues opened only after the work is real. That takes five pieces: chooser routing, a reserved issue template, discussion forms (see How to Write Effective GitHub Discussion Templates for YAML and the Ideas and Community Help examples), CONTRIBUTING.md, and a pinned rules thread.

How to Write Effective GitHub Discussion Templates

I'm wiring up community intake for an upcoming open source project. Issue forms and a pull request template were the easy parts. Community discussions were what I hadn't nailed yet.

I wanted a public place for questions and early ideas without Issues turning into a pile of one-liners. I've set up GitHub Discussions on other repos before; this time I wanted the same structured intake issue forms already give you.

So I used discussion category forms: YAML on the same schema as issue templates, with required fields, defaults, and labels on create, tied to a category instead of an issue chooser. Questions stay in the forum. Work that needs a tracker still opens an issue.

If you've shipped issue templates before, the field types won't surprise you. What's different is the plumbing: .github/DISCUSSION_TEMPLATE/, one YAML file per category, and a filename that must match the category slug—not bug.yml copied from Issues.

Publishing Docker Images to GitHub Container Registry

GitHub Container Registry ("GHCR") is GitHub's OCI-compatible container registry at ghcr.io. If your source code, releases, issues, permissions, and automation already live in GitHub, publishing container images to GHCR keeps the distribution path close to the repository that produced the image.

In this post, we'll publish a Docker image two ways: first manually from a local terminal, then automatically from GitHub Actions whenever a GitHub Release is published. Along the way, we'll cover image naming, authentication, permissions, release-driven tags, OCI labels, and the small details that make GHCR feel predictable instead of mysterious.

GHCR differs from a generic public registry when your project is already GitHub-centered:

  • Images can be associated with a repository.
  • Repository permissions can be used for package access.
  • GitHub Actions can publish with the built-in GITHUB_TOKEN.
  • Images can be public or private.
  • Tags, labels, and package metadata sit near the release and source history.
  • The registry supports standard Docker and OCI tooling.

A Modern Python Workflow with Astral uv

Astral uv logo

Python packaging has needed a reset for years, and uv is the first tool in a long time that feels like a real one. It's fast, opinionated in the right places, and broad enough to replace an entire pile of Python tooling with a single binary that actually makes the day-to-day workflow simpler.

The official uv docs lead with the claim that it's 10-100x faster than pip, and that number doesn't feel like marketing fluff once you use it for real work. uv gets there by doing something the older Python toolchain never pulled together cleanly: it treats dependency resolution, environment management, Python installation, and tool execution as one system.

Backseat Dream

Reflection

Written from that fragile, beautiful space between waking and sleep, this is a song for the very end of the journey.

It's a prayer for a gentle ending, capturing the trust of finally being too tired, and letting the strong and familiar carry you to through.

Published alongside With a Quiet Hand.

Lyrics

BACKSEAT DREAM

I don’t need a battle at the end of the line
No flash of heaven just to prove I tried
I’ve done my running, I’ve stood my ground
Learned what to carry, what to lay down
White lines hum me home at night
Radio static, borrowed light
If my eyes get heavy, I lose the day
Let it come like sleep, drift my way

No fear, no final stand
Just the weight of a quiet hand

     If I go, let it go easy, slow
     Like a backseat dream heading home
     Lay me down where I understand
     I was loved by a quiet hand
     Let the world keep spinning like it planned
     I’ve seen enough, I’ve been a man
     If I’m leavin’, let it be known
     I was never alone

I loved a woman with a steady light
She made a home, out of restless nights
She knew my sins, she knew my name
She loved me even when I stayed the same
I raised my boys to stand up straight
Taught ’em when to bend, when to wait
If they hear my voice when the house goes still
I hope it sounds like love, not will

     Repeat Chorus

I don’t need angels callin’ me out
No reckoning dressed in fire and doubt
Just cracked doors and familiar sound
Soft footsteps, movin’ around
Let their voices carry me through
Every wrong I couldn’t undo
If there’s a moment where I still stand
It’s muscle memory, holding hands

Mama’s voice from a long-gone year
Shows up, when the road gets weird
That old quilt, that creaky floor
The house breathing at 4 a.m.
If I’m half asleep when the light goes dim
Let me stay right there with them
One last breath, no last command
Let me go with the quiet hand

If I go, let it go easy, slow
Like a backseat dream headin’ home
No grand ending, no final plan
Just a life that loved, a love that ran
Hold me close as long as you can
Let me go
With a quiet hand

Writer: J. Ryan Johnson (BMI)
Copyright: © 2026 J. Ryan Johnson. All rights reserved.
Phone: +1 (407) 902-5419
Email: hello [at] tenthirtyam [dot] org

Audio Disclaimer

Lyrics: Original | Audio: AI-Generated

I am a songwriter and a musician, but I am not the voice meant to inhabit these verses.

I've used AI to bridge the gap for the concept demos, crafted to serve as blueprints that capture the genre, tone, and weary soul I hear for each song.

They exist as an invitation, offered in the hope that these lyrics will eventually reach the hands of an artist and storyteller who can bring them fully into the light.

Until then, they remain as they were born: quiet reflections on the grit and grace found just north of the county line.

With a Quiet Hand

Trigger Warning

This piece reflects on death, rest, and the tenderness of being carried from this life.

I hope death comes like a quiet hand lifting me from the backseat, half-asleep, carrying me to my bed, where, tucked beneath familiar blankets and with eyes closed, the gentle voices of those I love pass through a cracked door, holding me a moment longer in their warmth as I slip into rest.

That is still the gentlest image I know for leaving this world. Not terror. Not noise. Not some grand and blinding revelation. Just the old mercy of being too tired to walk on your own and trusting that someone strong and familiar will carry you the rest of the way.

My memories of safety began in the backseat of a car at night. The tires humming. A light waiting at the end of the drive. Low voices drifting from the front seat while I hovered at the edge of sleep. Sometimes waking just enough to know we were home, then feeling someone lifting me before I ever had to stand and drifting deeper into sleep.

One arm under my knees, one hand at my back, my head against a shoulder.

No understanding the house in the dark. Only trusting the arms carrying me through it.

I hope it comes that way. I hope I am tucked beneath something familiar. I hope the voices of those I love reach me through a cracked door for one moment longer. I hope the end feels less like being taken than being brought home.

If I am granted that kind of mercy, it will be enough.

A Kind of Tiredness That Gets Into Everything

The moment that finally made me admit it wasn't dramatic at all. Early morning in the home office, I was just sitting in my chair and I said it out loud.

"I'm exhausted. I'm burning out."

Nothing was actively wrong in that particular second. No alarm going off. No argument. No fresh bad news. Just the usual screen glow, a chair I've spent too many hours in, a few tabs open, and that strange hush that sometimes falls in the middle of an ordinary day when your mind stops long enough to catch up with your body.

And what I realized, sitting there, wasn't a feeling so much as a weight. The weight of every small unfinished thing. Every obligation with my name on it. Every text I hadn't answered yet, every errand still waiting, every decision still asking to be made, every part of life that needed some steady portion of me I wasn't sure I had available.

It was one of those moments where the boundaries disappear. Work was in it, yes, but so was the house, the calendar, the relationships, the noise, the constant low-grade management of being a person alive in the world. I remember sitting there and thinking, very plainly, this is heavier than I've been willing to say out loud.

How to Use GitHub Projects Effectively

Most engineering teams still plan work in one tool and ship it in another. Issues live in Jira or Trello, pull requests live in GitHub, and every status change requires a human to copy context across tabs. GitHub Projects removes much of that friction by keeping planning, issue tracking, and delivery close to the code.

Current GitHub Projects is the planning layer on top of issues and pull requests: custom fields, saved views, built-in automations, roadmaps, charts, and API access. It replaces Projects (classic), not the same product with a new coat of paint.

For teams that already live in GitHub, the value is straightforward:

  • Less context switching between a tracker and the code host
  • Fewer stale status updates because issue and pull request state can drive project state
  • One place to plan cross-repository work without losing repository-level detail
  • A workflow that works for a two-person open source project, an inner source program, or a larger engineering org

Not Projects (classic)

This guide covers the current GitHub Projects experience. If you're starting fresh, use the new Projects workflow, not classic boards.

Keeping GitHub Repository Mirrors in Sync with GitHub Actions

Mirroring a Git repository sounds simple until you need it to stay current without thinking about it. A one-time copy is easy. The useful version is a mirror that keeps following upstream branches, tags, and rewritten history without becoming another chore on your list.

I use this pattern for repositories I want to preserve, test against, or keep available under my own GitHub namespace. A recent r/github threasd asked about mirroring a public repository into a private one; this is the workflow I use for that and similar cases.

The twist is that I don't put the sync workflow in each destination repository. I keep the automation in a standalone private repository that acts as a mirror controller.

Before getting to GitHub Actions, it helps to understand the manual Git operation the workflow is automating.

Why Mirror a Repository?

A mirror is useful when you want a repository to follow another repository as closely as possible. That is different from a normal fork, where you expect to create your own branches, open pull requests, and maintain local work.

I usually think about mirrors as infrastructure, not collaboration space. They are useful for:

  • Keeping a personal copy of an upstream project
  • Preserving access to a dependency you rely on
  • Testing automation against a repository under your own namespace
  • Keeping several upstream repositories available from one GitHub account or organization
  • Avoiding a manual Sync fork habit for repositories that should simply track upstream

That last point is the practical one. If the destination is supposed to reflect upstream, humans should not be the scheduler.

Treat Mirrors as Destructive Targets

A mirror destination should not contain independent work. Mirroring usually involves forced updates to branches and tags, which means local-only changes in the destination can be overwritten. Use dedicated mirror repositories, not repositories where people are actively developing.