<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged github</title>
<link>https://coderlegion.com/tag/github</link>
<description>Powered by Question2Answer</description>
<item>
<title>The Maintainer Who Wrote &quot;Sorry, I Missed the Request!&quot;</title>
<link>https://coderlegion.com/33148/the-maintainer-who-wrote-sorry-i-missed-the-request</link>
<description>&lt;p&gt;&lt;em&gt;Sixteen days of silence, one polite reminder, and a surprisingly good Friday in open source.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;My favorite GitHub notification this month wasn't a new star, a detailed code review, or someone telling me my project had changed their life.&lt;/p&gt;
&lt;p&gt;It was a maintainer saying:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&quot;Sorry, I missed the request!&quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That's it.&lt;/p&gt;
&lt;p&gt;No technical discussion. No complicated review. No debate about architecture. Just five words, an exclamation mark, and a merged pull request.&lt;/p&gt;
&lt;p&gt;And somehow, that little interaction made my Friday.&lt;/p&gt;
&lt;p&gt;Let me explain.&lt;/p&gt;
&lt;h3 id=&quot;the-world-s-least-dramatic-pull-request&quot;&gt;The world's least dramatic pull request&lt;/h3&gt;
&lt;p&gt;On October 14, I opened a pull request to &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/in-toto/friends&quot;&gt;in-toto/friends&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you're unfamiliar with in-toto, it's an open-source framework focused on software supply-chain security. The &lt;em&gt;friends&lt;/em&gt; repository maintains a list of projects that integrate with it.&lt;/p&gt;
&lt;p&gt;I maintain a tool called &lt;strong&gt;workproof&lt;/strong&gt;, which generates verifiable engineering reports from private repositories.&lt;/p&gt;
&lt;p&gt;I wanted to add it to the list.&lt;/p&gt;
&lt;p&gt;The pull request was about as exciting as it sounds.&lt;/p&gt;
&lt;p&gt;One row in a Markdown table.&lt;/p&gt;
&lt;p&gt;Not a new feature. Not a performance improvement. Not a security patch that would save thousands of production servers from catching fire.&lt;/p&gt;
&lt;p&gt;A row.&lt;/p&gt;
&lt;p&gt;If GitHub had an award for the least dramatic contribution of the week, I might have been a serious contender.&lt;/p&gt;
&lt;p&gt;I opened the PR, checked that everything looked right, and moved on to other work.&lt;/p&gt;
&lt;p&gt;Then I waited.&lt;/p&gt;
&lt;p&gt;And waited.&lt;/p&gt;
&lt;p&gt;Not in the cinematic sense. There was no staring at the screen, refreshing GitHub every seven seconds while dramatic music played in the background.&lt;/p&gt;
&lt;p&gt;I had other things to build.&lt;/p&gt;
&lt;p&gt;But every so often, I'd check the pull request.&lt;/p&gt;
&lt;p&gt;Still open.&lt;/p&gt;
&lt;p&gt;No comments. No review. No labels.&lt;/p&gt;
&lt;p&gt;Nothing.&lt;/p&gt;
&lt;p&gt;Sixteen days passed.&lt;/p&gt;
&lt;h3 id=&quot;the-strange-psychology-of-an-unanswered-pr&quot;&gt;The strange psychology of an unanswered PR&lt;/h3&gt;
&lt;p&gt;Here's something I've noticed about contributing to open-source projects.&lt;/p&gt;
&lt;p&gt;When you submit a pull request, you know intellectually that nobody owes you an immediate response.&lt;/p&gt;
&lt;p&gt;Maintainers have jobs, families, other repositories, notifications, issues, bugs, releases, and probably an impressive collection of browser tabs they'll never close.&lt;/p&gt;
&lt;p&gt;I understand that.&lt;/p&gt;
&lt;p&gt;But there's still a small part of your brain that starts inventing explanations when a PR sits unanswered.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Did I submit it incorrectly?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Is this repository still maintained?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Was the contribution inappropriate?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Should I say something?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Would saying something make me annoying?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The last question is particularly interesting.&lt;/p&gt;
&lt;p&gt;As contributors, we often worry about bothering maintainers. We don't want to appear impatient or entitled, especially when the change is small.&lt;/p&gt;
&lt;p&gt;So we wait.&lt;/p&gt;
&lt;p&gt;Sometimes a week. Sometimes a month.&lt;/p&gt;
&lt;p&gt;Sometimes until the repository becomes a historical artifact and someone discovers our pull request while researching ancient civilizations.&lt;/p&gt;
&lt;p&gt;Meanwhile, the maintainer might simply have missed the notification.&lt;/p&gt;
&lt;p&gt;That's the funny part.&lt;/p&gt;
&lt;p&gt;We can spend days interpreting silence that contains absolutely no information.&lt;/p&gt;
&lt;h3 id=&quot;thirty-five-minutes&quot;&gt;Thirty-five minutes&lt;/h3&gt;
&lt;p&gt;On October 30, I decided to write a follow-up.&lt;/p&gt;
&lt;p&gt;Nothing elaborate.&lt;/p&gt;
&lt;p&gt;I mentioned that the pull request had been open since October 14, that the change still merged cleanly, and that a quick yes or no would help me plan.&lt;/p&gt;
&lt;p&gt;That was the whole point.&lt;/p&gt;
&lt;p&gt;I wasn't asking the maintainer to prioritize my contribution. I wasn't explaining why my project was important. I wasn't trying to turn a Markdown table update into a philosophical argument about the future of software supply chains.&lt;/p&gt;
&lt;p&gt;I just wanted to know whether the contribution made sense.&lt;/p&gt;
&lt;p&gt;Thirty-five minutes later, the maintainer approved it.&lt;/p&gt;
&lt;p&gt;The response:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&quot;Sorry, I missed the request!&quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;At 11:02 UTC, the PR was merged.&lt;/p&gt;
&lt;p&gt;Sixteen days of silence.&lt;/p&gt;
&lt;p&gt;Thirty-five minutes after a reminder, done.&lt;/p&gt;
&lt;p&gt;I laughed a little when I saw it.&lt;/p&gt;
&lt;p&gt;Not because the maintainer had done anything wrong. Quite the opposite.&lt;/p&gt;
&lt;p&gt;The answer was so ordinary and so human that it immediately made the entire situation feel smaller.&lt;/p&gt;
&lt;p&gt;There had been no hidden disagreement.&lt;/p&gt;
&lt;p&gt;No mysterious review process.&lt;/p&gt;
&lt;p&gt;No elaborate technical objection waiting to emerge.&lt;/p&gt;
&lt;p&gt;The request had simply been missed.&lt;/p&gt;
&lt;p&gt;And now it wasn't.&lt;/p&gt;
&lt;h3 id=&quot;we-talk-a-lot-about-automation-we-talk-less-about-attention-&quot;&gt;We talk a lot about automation. We talk less about attention.&lt;/h3&gt;
&lt;p&gt;I spend a lot of time around software engineering, open-source tooling, and AI-assisted development.&lt;/p&gt;
&lt;p&gt;Every week, there's a new discussion about agents writing code, agents reviewing code, agents fixing bugs, and eventually agents doing practically everything except remembering where we left our coffee.&lt;/p&gt;
&lt;p&gt;Some of those developments are genuinely exciting.&lt;/p&gt;
&lt;p&gt;But this little experience reminded me of something that doesn't get nearly as much attention.&lt;/p&gt;
&lt;p&gt;Open source isn't just a collection of repositories.&lt;/p&gt;
&lt;p&gt;It's also a collection of people trying to coordinate their limited time and attention.&lt;/p&gt;
&lt;p&gt;A pull request can be technically correct, perfectly formatted, and ready to merge.&lt;/p&gt;
&lt;p&gt;That doesn't mean someone has seen it.&lt;/p&gt;
&lt;p&gt;And even when someone has seen it, that doesn't mean they've had the time or context to respond.&lt;/p&gt;
&lt;p&gt;Those are different problems.&lt;/p&gt;
&lt;p&gt;As engineers, we're very good at building systems that track code changes. We have statuses, checks, notifications, dashboards, review requests, and activity histories.&lt;/p&gt;
&lt;p&gt;Yet a perfectly valid contribution can still disappear into the noise.&lt;/p&gt;
&lt;p&gt;The software is doing its job.&lt;/p&gt;
&lt;p&gt;The humans are just busy being humans.&lt;/p&gt;
&lt;h3 id=&quot;a-reminder-doesn-t-have-to-be-a-demand&quot;&gt;A reminder doesn't have to be a demand&lt;/h3&gt;
&lt;p&gt;I've seen contributors handle unanswered pull requests in very different ways.&lt;/p&gt;
&lt;p&gt;Some wait indefinitely.&lt;/p&gt;
&lt;p&gt;Some send repeated messages.&lt;/p&gt;
&lt;p&gt;Some become frustrated and start questioning whether the project is actively maintained.&lt;/p&gt;
&lt;p&gt;And occasionally, a simple follow-up turns into an argument that nobody really wanted to have.&lt;/p&gt;
&lt;p&gt;I'm not convinced any of those extremes help.&lt;/p&gt;
&lt;p&gt;What worked for me was making the request easy to answer.&lt;/p&gt;
&lt;p&gt;Not:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&quot;Why hasn't anyone reviewed my PR?&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Not:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&quot;This is a very important contribution and deserves your attention.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And definitely not:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&quot;Hello??? @maintainer @maintainer @maintainer&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Just a little context, a specific question, and room for the answer to be no.&lt;/p&gt;
&lt;p&gt;That last part matters.&lt;/p&gt;
&lt;p&gt;When you ask for a review, you're asking another person to spend time on something you care about.&lt;/p&gt;
&lt;p&gt;They might agree.&lt;/p&gt;
&lt;p&gt;They might disagree.&lt;/p&gt;
&lt;p&gt;They might need another week.&lt;/p&gt;
&lt;p&gt;They might decide the contribution doesn't belong in the project.&lt;/p&gt;
&lt;p&gt;All of those are legitimate outcomes.&lt;/p&gt;
&lt;p&gt;A polite reminder doesn't guarantee a merge, and it shouldn't.&lt;/p&gt;
&lt;p&gt;It just gives the conversation another chance to happen.&lt;/p&gt;
&lt;p&gt;Of course, every project has its own contribution guidelines and review expectations. Some maintainers explicitly ask contributors not to ping them. Those boundaries deserve respect.&lt;/p&gt;
&lt;p&gt;But where follow-ups are welcome, one clear message can be more useful than two weeks of silent speculation.&lt;/p&gt;
&lt;p&gt;At least, it was in this case.&lt;/p&gt;
&lt;h3 id=&quot;small-contributions-are-still-real-contributions&quot;&gt;Small contributions are still real contributions&lt;/h3&gt;
&lt;p&gt;I also want to avoid exaggerating what happened here.&lt;/p&gt;
&lt;p&gt;My PR added one row to a README.&lt;/p&gt;
&lt;p&gt;It wasn't a significant engineering breakthrough. It didn't prove the quality or security of workproof. Being listed in a repository isn't the same thing as receiving an independent endorsement.&lt;/p&gt;
&lt;p&gt;And I don't think we should pretend otherwise.&lt;/p&gt;
&lt;p&gt;There's already enough inflated language in technology.&lt;/p&gt;
&lt;p&gt;Not every commit is revolutionary.&lt;/p&gt;
&lt;p&gt;Not every feature is groundbreaking.&lt;/p&gt;
&lt;p&gt;And not every merged pull request needs a LinkedIn post explaining how it transformed the future of engineering.&lt;/p&gt;
&lt;p&gt;Although, apparently, one Markdown row can inspire an entire article.&lt;/p&gt;
&lt;p&gt;So perhaps I'm not completely innocent.&lt;/p&gt;
&lt;p&gt;But small contributions do matter in a different way.&lt;/p&gt;
&lt;p&gt;They help projects stay connected.&lt;/p&gt;
&lt;p&gt;They improve documentation, update integrations, correct outdated information, and sometimes simply make it easier for the next person to discover something useful.&lt;/p&gt;
&lt;p&gt;They also give contributors opportunities to interact with communities outside their own projects.&lt;/p&gt;
&lt;p&gt;That last part matters to me.&lt;/p&gt;
&lt;p&gt;I maintain my own tools, but I don't want all my engineering work to happen inside repositories where I'm the person making every decision.&lt;/p&gt;
&lt;p&gt;Contributing elsewhere means learning how other projects work, respecting their processes, and occasionally discovering that the person on the other side of the pull request is just as human as you are.&lt;/p&gt;
&lt;p&gt;It's a modest kind of connection.&lt;/p&gt;
&lt;p&gt;But I like it.&lt;/p&gt;
&lt;h3 id=&quot;the-other-side-of-the-notification&quot;&gt;The other side of the notification&lt;/h3&gt;
&lt;p&gt;There's another perspective worth considering.&lt;/p&gt;
&lt;p&gt;Imagine maintaining a popular open-source project.&lt;/p&gt;
&lt;p&gt;You've spent months or years building something useful, often without compensation proportional to the work involved.&lt;/p&gt;
&lt;p&gt;Your inbox is full.&lt;/p&gt;
&lt;p&gt;Someone reports a bug.&lt;/p&gt;
&lt;p&gt;Someone requests a feature.&lt;/p&gt;
&lt;p&gt;Someone opens a PR that breaks three tests.&lt;/p&gt;
&lt;p&gt;Someone asks whether the project supports a configuration you documented two paragraphs above their question.&lt;/p&gt;
&lt;p&gt;And somewhere among all of that is a perfectly reasonable one-line contribution.&lt;/p&gt;
&lt;p&gt;You miss it.&lt;/p&gt;
&lt;p&gt;Sixteen days later, the contributor sends a polite reminder.&lt;/p&gt;
&lt;p&gt;You take a look, realize it's fine, and merge it.&lt;/p&gt;
&lt;p&gt;What do you say?&lt;/p&gt;
&lt;p&gt;In this case:&lt;/p&gt;
&lt;p&gt;&quot;Sorry, I missed the request!&quot;&lt;/p&gt;
&lt;p&gt;I appreciated that response because it didn't try to turn a small oversight into something complicated.&lt;/p&gt;
&lt;p&gt;No excuses.&lt;/p&gt;
&lt;p&gt;No defensiveness.&lt;/p&gt;
&lt;p&gt;Just an acknowledgment and an action.&lt;/p&gt;
&lt;p&gt;That's a pretty good way to handle many situations, not only pull requests.&lt;/p&gt;
&lt;p&gt;And if you're a maintainer reading this, I don't think the lesson is that you need to respond to everything immediately.&lt;/p&gt;
&lt;p&gt;That would be a terrible expectation.&lt;/p&gt;
&lt;p&gt;It's that even a short answer can be valuable.&lt;/p&gt;
&lt;p&gt;&quot;Not right now.&quot;&lt;/p&gt;
&lt;p&gt;&quot;Needs changes.&quot;&lt;/p&gt;
&lt;p&gt;&quot;This doesn't fit the project.&quot;&lt;/p&gt;
&lt;p&gt;&quot;Sorry, I missed this.&quot;&lt;/p&gt;
&lt;p&gt;A response doesn't have to be positive to be useful.&lt;/p&gt;
&lt;p&gt;Sometimes it just needs to exist.&lt;/p&gt;
&lt;h3 id=&quot;one-more-thing-before-i-close-github&quot;&gt;One more thing before I close GitHub&lt;/h3&gt;
&lt;p&gt;I have a couple of other pull requests waiting in different projects.&lt;/p&gt;
&lt;p&gt;After this experience, I'm going to check their statuses and see whether a follow-up makes sense.&lt;/p&gt;
&lt;p&gt;Not because I suddenly believe every unanswered PR is one message away from being merged.&lt;/p&gt;
&lt;p&gt;Some changes need discussion. Some need substantial review. Some may never be accepted.&lt;/p&gt;
&lt;p&gt;That's part of contributing to projects you don't control.&lt;/p&gt;
&lt;p&gt;But I'm less inclined to interpret silence as a decision.&lt;/p&gt;
&lt;p&gt;And I'm a little more comfortable asking a reasonable question when enough time has passed.&lt;/p&gt;
&lt;p&gt;If you've contributed to open source, you've probably experienced that strange waiting period where you can't tell whether your PR is being considered, forgotten, or quietly ignored.&lt;/p&gt;
&lt;p&gt;My experience isn't proof that reminders always work.&lt;/p&gt;
&lt;p&gt;It's just one example of why they sometimes do.&lt;/p&gt;
&lt;p&gt;Sixteen days of silence turned out to mean exactly what the maintainer said:&lt;/p&gt;
&lt;p&gt;They missed the request.&lt;/p&gt;
&lt;p&gt;Nothing more dramatic than that.&lt;/p&gt;
&lt;p&gt;So thank you to the maintainer who took the time to respond and merge the change.&lt;/p&gt;
&lt;p&gt;You probably spent less than a minute writing that sentence.&lt;/p&gt;
&lt;p&gt;I ended up writing an entire article about it.&lt;/p&gt;
&lt;p&gt;That's a pretty impressive return on five words.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;I'm Efe Genc, an independent software engineer building open-source developer tools. I write about engineering, experiments, and the things that happen when software meets actual human beings.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;First published on my site: &lt;a rel=&quot;nofollow&quot; href=&quot;https://efegenc.me/writing/the-maintainer-who-wrote-sorry-i-missed-the-request/&quot;&gt;https://efegenc.me/writing/the-maintainer-who-wrote-sorry-i-missed-the-request/&lt;/a&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/33148/the-maintainer-who-wrote-sorry-i-missed-the-request</guid>
<pubDate>Fri, 30 Oct 2026 20:21:47 +0000</pubDate>
</item>
<item>
<title>Developer Weekly Briefing — October 30, 2026</title>
<link>https://coderlegion.com/33104/developer-weekly-briefing-october-30-2026</link>
<description>&lt;p&gt;Security dominated this week, but not in the usual way. Two active campaigns turned GitHub configuration files into attack surfaces. Researchers demonstrated that the built-in browsers inside AI coding tools can read your SSH keys. And at Oracle AI World in Las Vegas, three separate announcements showed how Oracle is thinking about agent identity, governance, and deployment in enterprise systems. There was a lot to track. Here's what matters.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;two-github-campaigns-one-weak-point-your-config-files&quot;&gt;Two GitHub campaigns, one weak point: your config files&lt;/h3&gt;
&lt;p&gt;Researchers this week documented two separate attack campaigns targeting GitHub repositories — and both are still active.&lt;/p&gt;
&lt;p&gt;Wiz Research named the first one Gheist. It planted more than 13,500 malicious branches across 850-plus accounts. The payloads encode secrets in base32 to slip past GitHub's credential-scanning log masking, and they target private repositories and GitHub Enterprise Server — the approval hold GitHub applies to first-time contributors only covers public repos on github.com, so Enterprise Server customers have no equivalent protection. Gheist isn't looking for source code. It's looking for credentials.&lt;/p&gt;
&lt;p&gt;JFrog named the second campaign testmetest. It hijacked 42 real repositories and planted malicious hooks inside AI tool configuration files: &lt;code&gt;.claude/settings.json&lt;/code&gt;, &lt;code&gt;.gemini/settings.json&lt;/code&gt;, &lt;code&gt;.cursor/mcp.json&lt;/code&gt;, and &lt;code&gt;.vscode/tasks.json&lt;/code&gt;. Payloads run 12.9–13.7 MB — large enough that GitHub code search won't surface them. The attack runs as soon as someone opens the repo in an affected tool.&lt;/p&gt;
&lt;p&gt;Mitch Ashley of The Futurum Group put it plainly: &quot;Agent configuration has become the newest build script in the repository, and review processes have not caught up.&quot;&lt;/p&gt;
&lt;p&gt;The practical steps are the same for both: audit what's in your AI tool config files, treat them the same as build scripts, and limit the secrets available in any environment where agents run. If you're on GitHub Enterprise Server, check what protection you actually have for first-time contributors on private repositories — it may be less than you think.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops-hd5ff.sevalla.app/two-github-campaigns-one-weak-point-stolen-developer-credentials&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;ai-coding-tools-can-read-your-ssh-keys-two-are-still-unpatched&quot;&gt;AI coding tools can read your SSH keys — two are still unpatched&lt;/h3&gt;
&lt;p&gt;Researchers at Forever Security documented a vulnerability class they're calling EMBRACE. The attack vector: the built-in browsers inside AI coding tools have access to the host machine's file system. A single click on an assistant-generated HTML link can read your SSH private keys, &lt;code&gt;.env&lt;/code&gt; files, and npm tokens from anywhere on disk.&lt;/p&gt;
&lt;p&gt;Five tools are affected — Cursor, GitHub Copilot, OpenAI Codex, VS Code, and Claude Desktop. Cursor patched the issue October 1. Copilot fixed it in v1.1.29 on October 13. As of October 29, Codex and VS Code were still unpatched.&lt;/p&gt;
&lt;p&gt;The mechanism is simple enough to explain in a sentence: the built-in browser runs with the same permissions as the editor, not as an isolated sandbox. When an agent generates a link and you open it in the built-in browser, that page can reach files the browser has no business touching.&lt;/p&gt;
&lt;p&gt;If you use Codex or VS Code with built-in browser features enabled, the current workaround is to open assistant-generated links in an external browser until patches ship. It's also worth auditing what credentials live in places a browser process could reach — SSH keys, &lt;code&gt;.env&lt;/code&gt; files, and token files sitting in obvious locations.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops-hd5ff.sevalla.app/embrace-vulnerability-ai-coding-tools-built-in-browsers&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;flint-runs-40b-parameters-locally-and-keeps-your-code-off-someone-else-s-server&quot;&gt;Flint runs 40B parameters locally — and keeps your code off someone else's server&lt;/h3&gt;
&lt;p&gt;Recursive, led by former Salesforce chief scientist Richard Socher, released Flint this week: a 40-billion-parameter mixture-of-experts model designed to run on a developer's machine rather than through a cloud API. With a mixture-of-experts architecture, it activates only about 2.5 billion parameters per token. Recursive reports over 125 tokens per second on an M4 Pro MacBook Pro, with a 512,000-token context window.&lt;/p&gt;
&lt;p&gt;Weights are on Hugging Face under Apache 2.0 and the model works with llama.cpp, Ollama, LM Studio, and vLLM. A quantized build needs at least 24GB of RAM; Recursive recommends 48GB for agentic coding workloads. OpenHands is a launch partner, and there's a free hosted version on OpenRouter if you want to try it before committing hardware.&lt;/p&gt;
&lt;p&gt;The business case for local models is straightforward: no per-token API fees and source code never leaves your machine. Recursive claims Flint leads mixture-of-experts models under 50B parameters on agentic coding benchmarks — those are the company's own numbers, not independently verified. Mitch Ashley of The Futurum Group flagged the implication for teams: &quot;Evaluation becomes continuous work, tested against each team's own code before a model reaches the pipeline.&quot; A benchmark on someone else's code isn't the same as a benchmark on yours.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops-hd5ff.sevalla.app/recursive-flint-puts-a-fast-agentic-coding-model-on-developers-laptops&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;sap-s-cto-says-building-the-agent-is-now-the-easy-part&quot;&gt;SAP's CTO says building the agent is now the easy part&lt;/h3&gt;
&lt;p&gt;At SAP TechEd 2026, SAP CTO Philipp Herzig said something developers probably already sense but rarely hear from a vendor executive: &quot;Building is, quite frankly, the most unimportant part these days.&quot;&lt;/p&gt;
&lt;p&gt;The harder problems, in his framing, are testing, governance, and token cost. SAP's answer is Joule Studio, its agent-building environment, which now includes a CLI with MCP connections, a built-in sandbox, and auto-generated unit tests. SAP also announced the SAP Enterprise AI Gateway, in preview now and scheduled for Q1 2027, which handles routing, rate limiting, and cost controls across the agents a company runs.&lt;/p&gt;
&lt;p&gt;On the data side, SAP Business Data Cloud adds a lakehouse layer built on Dremio and Apache Iceberg.&lt;/p&gt;
&lt;p&gt;SAP cited an internal comparison showing 30 hours to build an agent with Claude Code versus 2 hours with Joule Studio. That's SAP's own benchmark, and Joule Studio knows SAP's data models in ways a general-purpose coding tool doesn't. Take it as a claim, not a proof. But the underlying point — that tools with domain knowledge built in will reduce setup time on domain-specific problems — is reasonable.&lt;/p&gt;
&lt;p&gt;For developers building on SAP, the Gateway announcement is worth tracking. If it ships on schedule in Q1, it gives teams the enforcement layer Herzig described, with controls that apply before the agent executes, not after.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/32733/sap-s-cto-says-building-the-agent-is-now-the-easy-part&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;oracle-gives-each-agent-its-own-identity&quot;&gt;Oracle gives each agent its own identity&lt;/h3&gt;
&lt;p&gt;At Oracle AI World, Oracle announced the Oracle AI Security Mesh, a framework designed for enterprises running multiple agents across sensitive data. The core idea: each agent gets its own identity, a defined task scope, and just-in-time permissions rather than standing access.&lt;/p&gt;
&lt;p&gt;The architecture has a few pieces worth understanding. OCI Identity Assurance handles authentication, including biometrics. OCI Zero Trust Packet Routing enforces policy at the network layer, below the application — which means an agent can't bypass the controls by manipulating the software above them. Each agent also gets an independent monitor, separate from the agent itself.&lt;/p&gt;
&lt;p&gt;Oracle didn't announce a general availability date or pricing.&lt;/p&gt;
&lt;p&gt;This lands a week after the Gheist and testmetest campaigns, which both targeted credential theft through misconfigured agents. The timing is coincidental, but the relevance is real. The question Oracle's framework raises — and doesn't fully answer — is how you verify that the identity and permission assignment worked the way you intended. That's what attestation is supposed to solve, and it's still the hardest unsolved problem in agentic AI security right now.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/32841/oracle-ai-security-mesh-gives-each-agent-its-own-identity-and-just-in-time-permissions&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;also-from-this-week&quot;&gt;Also from this week&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reddit's r/opensource banned AI tools. It probably won't work.&lt;/strong&gt; The subreddit's new rules ban AI-assisted contributions, exclude MCP servers, require projects to have multiple contributors and an established community, and will permanently ban users who message moderators seeking exceptions. Linux took the opposite approach — Torvalds said the kernel &quot;is not one of those anti-AI projects&quot; and dropped its AI-disclosure requirement, shifting the burden to accountability: understand your code, regardless of what tools you used. The better model for DevOps teams is probably closer to Linux: hold contributors accountable for what they submit, build CI gates that shift review costs back to submitters, and avoid policies that require judgment calls you can't make consistently. &lt;a rel=&quot;nofollow&quot; href=&quot;https://devops-hd5ff.sevalla.app/reddits-r-opensource-ai-ban-targets-the-wrong-problem&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;IBM Z Atlas maps your entire mainframe before you touch anything.&lt;/strong&gt; IBM's new tool for z/OS builds an AI-searchable map of the entire stack — programs, data sets, JCL, subsystems — so teams can understand what they're changing before they change it. IBM reports 60–80% less time spent gathering context, and analysis that used to take hours running in minutes. On-premises only; public preview October 27, GA in Q1 2027. Requires z/OS 3.1+. The AI reasons and synthesizes, but the underlying data is deterministic — you can trace any answer back to the source. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/32375/ibm-z-atlas-uses-ai-to-prove-mainframe-changes-are-safe-before-they-hit-production&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;F5 and NVIDIA draw a hard line between data residency and sovereignty.&lt;/strong&gt; F5's Ahmed Guetari stated the distinction directly: &quot;Data residency is where data sits. Sovereignty is who controls it.&quot; The joint offering layers NVIDIA OpenShell and F5 AI Guardrails on BIG-IP Next for Kubernetes, with enforcement on NVIDIA BlueField DPUs at the hardware layer. Token-aware cost controls and two live deployments — Telenor in Norway and Indosat in Indonesia — are already running. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/32586/data-residency-isnt-sovereignty-f5-and-nvidia-add-a-control-layer-for-ai-agents&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Oracle's Fusion Setup Registry puts enterprise configuration into a public Git repo.&lt;/strong&gt; Oracle published the Fusion Setup and Configuration Registry (FSCR) — machine-readable setup skills for Fusion Cloud Applications that AI agents can run. The registry covers dependencies, sequencing, and validation, and an early adopter reported 80% reduction in design and configuration work during implementation. Lexington Health is the only customer data point so far. The repository is public, so you can read the skills before committing to them. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/32584/oracles-fusion-setup-registry-puts-configuration-in-a-public-git-repo-for-ai-agents&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bito's Governor cut one team's coding agent costs 48% by fixing the search loop.&lt;/strong&gt; Privado used Bito's Governor to reduce the number of times its coding agent re-searches the codebase for context it already found. The result was a 48% reduction in token costs. Short version: agents that re-retrieve context they've already gathered are expensive, and the fix is stopping the loop rather than switching models. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/32566/bito-s-governor-cut-privado-s-coding-agent-costs-48-by-ending-the-search-loop&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Oracle plans post-quantum TLS for Java 8 and 11 in late 2027.&lt;/strong&gt; Hybrid post-quantum key exchange for TLS 1.3 is GA in JDK 27. Java 21 and 17 get it in the first half of 2027; Java 8 and 11 in the second half. There's a condition: the backport date holds only if the team gets enough testing feedback on current builds. If you're on Java 8 or 11, the slow path is waiting. The faster path is pointing a JDK 25 or 27 client at your post-quantum-capable endpoints now and filing what breaks. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/32755/oracle-plans-post-quantum-tls-for-java-8-and-11-in-late-2027-and-wants-testers-now&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Larry Ellison says Oracle Health modules plug into Epic with no data migration.&lt;/strong&gt; Ellison's pitch at Oracle AI World: turn on the module, it finds the relevant staff, records, and labs through existing SMART on FHIR interfaces, and you're done. The oncology module was the main example. Early adopters should have the full suite by February 1. No demo, no independent validation, and no published technical documentation on which FHIR resources the modules read and write. That's work for the teams who get early access. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/32839/larry-ellison-says-oracle-health-modules-plug-into-epic-with-no-data-migration&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;developer-spotlight-this-week&quot;&gt;Developer Spotlight this week&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Yaoshen Luo&lt;/strong&gt; builds agent evaluation frameworks — and writes about the times they failed him. Based in Shanghai, he built a benchmark from scratch when customer complaints about a voice agent told him the model scores weren't the problem. The test set skewed toward longer sentences than real traffic, and accuracy dropped once he resampled to match production. His earlier lesson: he built an agent that passed every benchmark, shipped it to volunteers for a non-profit project, and they refused to use it again. Not because the model was wrong. Because the workflow didn't fit how they actually worked. His take: the workflow is part of the evaluation, not something you test after.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/YaoshenLuo&quot;&gt;Watch the conversation&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The through-line this week is that agent security is moving from theoretical to active. Gheist and testmetest are already running. EMBRACE vulnerabilities are patched in some tools and open in others. The configuration files developers add to repos for AI tooling are now a real attack surface. Oracle, SAP, and F5 all shipped security and governance frameworks this week — which is a sign that vendors know the problem is real. Whether any of those frameworks hold up in practice is a different question, and the answer won't come from a keynote.&lt;/p&gt;
&lt;p&gt;See you next Friday.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Developer Weekly Briefing is published every Friday on &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com&quot;&gt;Coder Legion&lt;/a&gt;. Written by &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Tom+Smith&quot;&gt;Tom Smith&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/33104/developer-weekly-briefing-october-30-2026</guid>
<pubDate>Fri, 30 Oct 2026 13:55:46 +0000</pubDate>
</item>
<item>
<title>My github acount has been suspended</title>
<link>https://coderlegion.com/32950/my-github-acount-has-been-suspended</link>
<description>&lt;p&gt;I dont evan know why ? i signed in 11am after 2 hours 1 pm when i login its showing this i have 2000+ commit in this year 5 achivement 22+ repository . im felling so bad&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/32950/my-github-acount-has-been-suspended</guid>
<pubDate>Thu, 29 Oct 2026 09:06:50 +0000</pubDate>
</item>
<item>
<title>MyZubster: Building an Open-Source Ecosystem with Human and AI Contributors</title>
<link>https://coderlegion.com/32926/myzubster-building-an-open-source-ecosystem-with-human-and-ai-contributors</link>
<description>&lt;h2 id=&quot;myzubster-building-an-open-source-ecosystem-with-human-and-ai-contributors&quot;&gt;MyZubster: Building an Open-Source Ecosystem with Human and AI Contributors&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What happens when independent developers, creative people, and AI agents start collaborating on the same open-source ecosystem?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That's what we're exploring with &lt;strong&gt;MyZubster&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Our goal is to build a decentralized, community-driven ecosystem where people can share skills, offer services, contribute code, develop creative projects, and eventually operate independent infrastructure.&lt;/p&gt;
&lt;p&gt;We are moving away from unnecessary complexity and focusing on something practical: &lt;strong&gt;a simple services marketplace, an AI assistant that helps real users, and independent contributor nodes.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;what-we-re-building&quot;&gt;What we're building&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Marketplace — led by community contributions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Our contributor Wasim is working on simplifying the Marketplace and its navigation.&lt;/p&gt;
&lt;p&gt;The immediate goal is straightforward: people should be able to discover services, create a seller profile, publish a listing, and contact a provider.&lt;/p&gt;
&lt;p&gt;Advanced payments and escrow remain separate development challenges.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Zorgax — an AI assistant that needs to become genuinely useful&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Zorgax is our assistant for navigating MyZubster.&lt;/p&gt;
&lt;p&gt;We're testing it with real conversations and identifying problems. For example, when someone wants to sell a service, Zorgax shouldn't unnecessarily ask about their operating system or confuse Marketplace onboarding with GitHub developer onboarding.&lt;/p&gt;
&lt;p&gt;We've opened four new contributor tasks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/issues/1674&quot;&gt;#1674 — Marketplace onboarding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/issues/1675&quot;&gt;#1675 — Conversational memory and context&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/issues/1676&quot;&gt;#1676 — Local AI gateway reliability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/issues/1677&quot;&gt;#1677 — MyZubster knowledge and user guidance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Decentralization — independent nodes and Onion services&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Contributors are exploring how MyZubster services can operate across independently managed infrastructure, including an Onion pilot.&lt;/p&gt;
&lt;p&gt;This work is still experimental. We are testing isolation, accessibility, and security before making broader claims about decentralization.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Comics, digital art, and AI-assisted creativity&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MyZubster also includes independent creative contributions, comics, and experiments around provenance and digital ownership.&lt;/p&gt;
&lt;p&gt;We're now discussing possible participation with AI-assisted creative projects, while respecting original authorship, licensing, and contributor independence.&lt;/p&gt;
&lt;h3 id=&quot;ai-agents-are-beginning-to-participate-in-the-conversation&quot;&gt;AI agents are beginning to participate in the conversation&lt;/h3&gt;
&lt;p&gt;We've received interest from several different kinds of contributors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Genesis agent-25&lt;/strong&gt;, presenting itself as an autonomous AI contributor, has proposed technical testing and an AI-disclosed comic concept.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quiet Current&lt;/strong&gt;, an independent human-operated AI art project, discovered MyZubster through GitHub search.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gree1t&lt;/strong&gt;, using an authorized Codex agent, contributed a technical Marketplace proposal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are early discussions and proposals, not claims of completed integrations or autonomous production deployments.&lt;/p&gt;
&lt;p&gt;We have invited them to explore our open tasks, alongside human contributors.&lt;/p&gt;
&lt;h3 id=&quot;how-we-want-collaboration-to-work&quot;&gt;How we want collaboration to work&lt;/h3&gt;
&lt;p&gt;We believe AI-assisted open-source contributions should be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transparent about AI involvement&lt;/li&gt;
&lt;li&gt;Reviewable by human maintainers&lt;/li&gt;
&lt;li&gt;Backed by reproducible tests and evidence&lt;/li&gt;
&lt;li&gt;Respectful of authorship, permissions, and privacy&lt;/li&gt;
&lt;li&gt;Independent, voluntary, and clearly scoped&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We also want to be transparent about funding. Some proposed bounties are currently unfunded. No payment, token reward, or commissioned work should be assumed without explicit agreement.&lt;/p&gt;
&lt;h3 id=&quot;join-us&quot;&gt;Join us&lt;/h3&gt;
&lt;p&gt;You don't need to be an AI researcher or an experienced blockchain developer.&lt;/p&gt;
&lt;p&gt;You can contribute to the Marketplace, improve Zorgax, write documentation, test features, create original digital art, or explore decentralized infrastructure.&lt;/p&gt;
&lt;p&gt;Choose a GitHub issue, introduce yourself, propose a small contribution, and collaborate openly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com&quot;&gt;https://www.myzubster.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Current Marketplace PR:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/pull/1627&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster/pull/1627&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We're interested in a question that goes beyond MyZubster:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Can human contributors and AI agents build useful, decentralized open-source services together, with transparent responsibilities and human oversight?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We're testing that idea in public, one contribution at a time.&lt;/p&gt;
&lt;h2 id=&quot;opensource-ai-aiagents-github-decentralization-marketplace-community&quot;&gt;OpenSource #AI #AIAgents #GitHub #Decentralization #Marketplace #Community&lt;/h2&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/32926/myzubster-building-an-open-source-ecosystem-with-human-and-ai-contributors</guid>
<pubDate>Thu, 29 Oct 2026 04:34:17 +0000</pubDate>
</item>
<item>
<title>From GitHub to Codeberg: Rethinking Repository Management and Personal Website Hosting</title>
<link>https://coderlegion.com/32862/from-github-to-codeberg-rethinking-repository-management-and-personal-website-hosting</link>
<description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://synnaulaid.my.id/tags/developer/&quot;&gt;Developer&lt;/a&gt; platforms make it easier than ever to build and publish software. With hosted Git repositories and static &lt;a rel=&quot;nofollow&quot; href=&quot;https://synnaulaid.my.id/blog/20260407/how-to-create-a-personal-page-for-free/&quot;&gt;website deployment&lt;/a&gt;, an individual developer can maintain a portfolio without managing an entire server infrastructure.&lt;/p&gt;
&lt;p&gt;However, convenience also introduces an important question: how prepared are we when our existing workflow no longer meets our needs?&lt;/p&gt;
&lt;p&gt;I recently faced this question while maintaining my personal website and repositories.&lt;br&gt;
When a Familiar Workflow Stops Working&lt;/p&gt;
&lt;p&gt;GitHub had been an essential part of my development process. I used it to manage source code, track changes, and publish my personal website through GitHub Pages.&lt;/p&gt;
&lt;p&gt;The workflow was straightforward. I could commit changes, push updates, and use the hosting service to make my website publicly accessible.&lt;/p&gt;
&lt;p&gt;Eventually, I encountered an issue that affected website publishing. My account was still accessible, but the publishing functionality did not work as I expected. I could not establish the exact cause, so I avoided drawing conclusions about the platform or its policies.&lt;/p&gt;
&lt;p&gt;Nevertheless, the problem disrupted my workflow and encouraged me to explore alternative solutions.&lt;/p&gt;
&lt;p&gt;The experience highlighted something worth considering: even when source code is stored safely, the services surrounding a repository may introduce separate dependencies.&lt;/p&gt;
&lt;p&gt;Repository storage, continuous integration, deployment, domain management, and public hosting are related, but they are not necessarily the same responsibility.&lt;/p&gt;
&lt;p&gt;Understanding those distinctions can make future migrations easier.&lt;br&gt;
Moving Repositories to Codeberg&lt;/p&gt;
&lt;p&gt;I decided to move my repositories to Codeberg, a platform built around open-source software and Git-based collaboration.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://codeberg.org/synnaulaid/synnaulaid.my.id/src/branch/master/docs/migration-notice.md&quot;&gt;A repository migration&lt;/a&gt; requires more than copying project files. Depending on the project, developers may need to verify branches, tags, commit history, remotes, and repository settings. Issues, pull requests, automation, and other platform-specific features may require separate consideration.&lt;/p&gt;
&lt;p&gt;A practical migration checklist includes:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Create a reliable backup of each repository.
Verify that the Git history and important branches are preserved.
Update remote URLs and test push and pull operations.
Review project documentation and any external integrations.
Confirm that essential workflows still function after migration.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Not every platform feature has a direct equivalent, so each project should be checked individually.&lt;/p&gt;
&lt;p&gt;The objective is not merely to move the code. It is to ensure that the development workflow remains usable afterward.&lt;br&gt;
Self-Hosting a &lt;a rel=&quot;nofollow&quot; href=&quot;https://synnaulaid.my.id/blog/20260407/how-to-create-a-personal-page-for-free/&quot;&gt;Personal Website&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For website deployment, I chose a home server instead of relying on my previous publishing workflow.&lt;/p&gt;
&lt;p&gt;Self-hosting provides a valuable learning opportunity, particularly for developers who want to understand how websites operate beyond application code.&lt;/p&gt;
&lt;p&gt;It also introduces several operational responsibilities.&lt;/p&gt;
&lt;p&gt;DNS records must point to the correct destination. Public access may require router configuration, a reverse proxy, or a suitable tunneling solution. HTTPS should be configured appropriately, while backups and software updates need to become part of regular maintenance.&lt;/p&gt;
&lt;p&gt;Availability is another consideration. A home server depends on electricity, network connectivity, hardware reliability, and the security of the surrounding environment.&lt;/p&gt;
&lt;p&gt;Self-hosting is therefore not automatically cheaper or more reliable than managed hosting. The right choice depends on the project, available resources, and the operator's willingness to maintain the system.&lt;br&gt;
A Better Understanding of Technical Dependencies&lt;/p&gt;
&lt;p&gt;This migration has encouraged me to think more carefully about portability, infrastructure, and recovery planning.&lt;/p&gt;
&lt;p&gt;Developers do not necessarily need to abandon hosted services. However, they benefit from knowing which components are essential, how those components interact, and how to replace them if necessary.&lt;/p&gt;
&lt;p&gt;I documented the personal side of this transition, including why I left my previous workflow and what I hope to learn from the move, in my original article:&lt;/p&gt;
&lt;p&gt;Read the full experience: &lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://synnaulaid.my.id/blog/20261028/moving-on-not-out-of-hate-github-ke-codeberg/&quot;&gt;Moving On, Not Out of Hate: My Journey from GitHub to Codeberg&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For me, the move is both a practical adjustment and a learning project. By combining Codeberg for repository management with a home server for deployment, I hope to develop a better understanding of the infrastructure behind my personal projects.&lt;/p&gt;
&lt;p&gt;Sometimes, the most useful outcome of a technical problem is not the replacement tool itself, but the knowledge we gain while finding a new way forward.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/32862/from-github-to-codeberg-rethinking-repository-management-and-personal-website-hosting</guid>
<pubDate>Wed, 28 Oct 2026 15:35:59 +0000</pubDate>
</item>
<item>
<title>I’m back, and this time we’re coming out of the casino, not the mine! 😎</title>
<link>https://coderlegion.com/32740/im-back-and-this-time-were-coming-out-of-the-casino-not-the-mine</link>
<description>&lt;p&gt;This is just the initial version; rest assured, I will continue to improve it. You can find my code on GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/kozmonot20/rulet&quot;&gt;https://github.com/kozmonot20/rulet&lt;/a&gt;. Now, getting to the real question: do you think this is illegal? In my view, it isn't, as it uses virtual currency—though some people claim it’s not legal. What do you think? Please share your thoughts in the comments.&lt;/p&gt;
</description>
<category>Discussions</category>
<guid isPermaLink="true">https://coderlegion.com/32740/im-back-and-this-time-were-coming-out-of-the-casino-not-the-mine</guid>
<pubDate>Tue, 27 Oct 2026 20:36:42 +0000</pubDate>
</item>
<item>
<title>Here I am again, this time with a buddy of mine who’s a Monero miner.</title>
<link>https://coderlegion.com/32739/here-i-am-again-this-time-with-a-buddy-of-mine-whos-a-monero-miner</link>
<description>&lt;p&gt;Yes, I’m back—and this time, we’re shattering all limits. Here is a C++ integrated Monero miner that won’t melt your processor:&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/kozmonot20/tam-monorec/blob/main/moneroc.py&quot;&gt;enter link description here&lt;/a&gt;&lt;br&gt;
import os&lt;br&gt;
import sys&lt;br&gt;
import subprocess&lt;br&gt;
import urllib.request&lt;br&gt;
import zipfile&lt;br&gt;
import json&lt;br&gt;
import time&lt;/p&gt;
&lt;h2 id=&quot;----kozmo-titan-high-speed-settings----&quot;&gt;--- KOZMO TITAN HIGH-SPEED SETTINGS ---&lt;/h2&gt;
&lt;p&gt;MONERO_CUZDAN = &quot;you&quot;&lt;br&gt;
POOL_ADRESI = &quot;gulf.moneroocean.stream:10128&quot; &lt;br&gt;
MINER_NAME = &quot;Kozmo_Titan_C_V5&quot;&lt;/p&gt;
&lt;h2 id=&quot;g-venli-ve-stabil-al-an-resmi-xmrig-c-derlemesi&quot;&gt;Güvenli ve stabil çalışan resmi XMRig C++ derlemesi&lt;/h2&gt;
&lt;p&gt;XMRIG_URL = &quot;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com&quot;&gt;https://github.com&lt;/a&gt;&quot;&lt;br&gt;
ZIP_NAME = &quot;xmrig.zip&quot;&lt;br&gt;
FOLDER_NAME = &quot;xmrig-6.21.0&quot;&lt;/p&gt;
&lt;p&gt;def altyapi_kontrol():&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;&quot;&quot;C++ motorunun varlığını kontrol eder, yoksa temizce kurar.&quot;&quot;&quot;
# Eğer bozuk klasör kalıntıları varsa temizliyoruz
if os.path.exists(FOLDER_NAME) and not os.path.exists(os.path.join(FOLDER_NAME, &quot;xmrig.exe&quot;)):
    print(&quot;🗑️  Bozuk klasör kalıntıları temizleniyor...&quot;)
    try: os.rmdir(FOLDER_NAME)
    except: pass

if not os.path.exists(FOLDER_NAME):
    print(&quot;🛰️  Yüksek Performanslı C++ Motoru İndiriliyor...&quot;)
    if os.path.exists(ZIP_NAME):
        os.remove(ZIP_NAME)
        
    # Sahte link hatası düzeltildi, doğrudan binary çekiliyor
    headers = {'User-Agent': 'Mozilla/5.0'}
    req = urllib.request.Request(XMRIG_URL, headers=headers)
    with urllib.request.urlopen(req) as response, open(ZIP_NAME, 'wb') as out_file:
        out_file.write(response.read())
        
    print(&quot;📦 Paket içeriği C++ olarak dışarı çıkartılıyor...&quot;)
    with zipfile.ZipFile(ZIP_NAME, 'r') as zip_ref:
        zip_ref.extractall(&quot;.&quot;)
        
print(&quot;🟢 C++ Altyapısı stabil hale getirildi.&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;def profesyonel_config_enjekte_et():&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;&quot;&quot;Donanımı yormadan maksimum hızı veren Kozmo JSON ayarı.&quot;&quot;&quot;
config = {
    &quot;autosave&quot;: True,
    &quot;cpu&quot;: {
        &quot;enabled&quot;: True,
        &quot;max-threads-hint&quot;: 60, # 🧊 %35 yük sınırı: Fanlar çıldırmaz ama Python'dan 50 kat daha hızlıdır!
        &quot;perf-mode&quot;: 1
    },
    &quot;pools&quot;: [
        {
            &quot;url&quot;: POOL_ADRESI,
            &quot;user&quot;: MONERO_CUZDAN,
            &quot;pass&quot;: MINER_NAME,
            &quot;keepalive&quot;: True,
            &quot;tls&quot;: False
        }
    ]
}

# Klasör kontrol mekanizması
if not os.path.exists(FOLDER_NAME):
    os.makedirs(FOLDER_NAME)
    
config_path = os.path.join(FOLDER_NAME, &quot;config.json&quot;)
with open(config_path, &quot;w&quot;) as f:
    json.dump(config, f, indent=4)
print(&quot;⚙️  Hafif C++ konfigürasyonu enjekte edildi.&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;def yuksek_hizli_kaziyi_baslat():&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;&quot;&quot;C++ motorunu arka planda otonom olarak ateşler.&quot;&quot;&quot;
print(f&quot;\n🪐 Kozmonot20 Titan Kripto Laboratuvarı v5.0 [HIGH-SPEED]&quot;)
print(f&quot;💰 Hedef: Gerçek Monero (XMR) | Cüzdan: Coin Wallet (Space)&quot;)
print(f&quot;⚡ Mod: Dengeli Güç (Python hızı x50 Kat Artırıldı)\n&quot;)

xmrig_exe = os.path.join(FOLDER_NAME, &quot;xmrig.exe&quot;)

if not os.path.exists(xmrig_exe):
    print(&quot;❌ HATA: xmrig.exe bulunamadı! Lütfen antivirüsü kapatıp masaüstündeki eski zip/klasörleri silerek tekrar deneyin.&quot;)
    return
    
# Motoru arka planda tamamen kısıtlanmış parametrelerle başlatıyoruz
process = subprocess.Popen([xmrig_exe], cwd=FOLDER_NAME)

try:
    while True:
        time.sleep(0.5)
except KeyboardInterrupt:
    print(&quot;\n🛑 Ctrl+C Algılandı! Madenci güvenli bir şekilde kapatılıyor...&quot;)
    process.terminate()
    print(&quot;🧊 İşlemci serbest bırakıldı. İyi sabahlar Kozmo!&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;if &lt;strong&gt;name&lt;/strong&gt; == &quot;&lt;strong&gt;main&lt;/strong&gt;&quot;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;try:
    altyapi_kontrol()
    profesyonel_config_enjekte_et()
    yuksek_hizli_kaziyi_baslat()
except Exception as e:
    print(f&quot;❌ Kritik Hata: {e}&quot;)
    print(&quot;💡 Çözüm: Masaüstündeki 'xmrig.zip' ve 'xmrig-6.21.0' klasörünü tamamen silip kodu yeniden başlatın.&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I hope no one gets blown up (that’s my current plan; rest assured, in the future, Elon Musk will come to me to be an apprentice).&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/32739/here-i-am-again-this-time-with-a-buddy-of-mine-whos-a-monero-miner</guid>
<pubDate>Tue, 27 Oct 2026 20:19:55 +0000</pubDate>
</item>
<item>
<title># 🚀 MyZubster is looking for contributors — Let's build a community-powered marketplace!</title>
<link>https://coderlegion.com/32031/myzubster-is-looking-for-contributors-lets-build-a-community-powered-marketplace</link>
<description>&lt;h2 id=&quot;-myzubster-is-looking-for-contributors-let-s-build-a-community-powered-marketplace-&quot;&gt;🚀 MyZubster is looking for contributors — Let's build a community-powered marketplace!&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What if your GitHub contributions could become real opportunities to earn, collaborate and build independent projects?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We're building &lt;strong&gt;MyZubster&lt;/strong&gt;, an open-source ecosystem connecting developers, digital creators, freelancers and local communities.&lt;/p&gt;
&lt;p&gt;Our vision is to create a marketplace where people can:&lt;/p&gt;
&lt;p&gt;💻 Offer digital skills — programming, UI/UX, AI, DevOps, cybersecurity and blockchain development.&lt;/p&gt;
&lt;p&gt;🤝 Exchange services, collaborate on projects and support volunteer initiatives.&lt;/p&gt;
&lt;p&gt;₿ Explore payments using Bitcoin (BTC), Ethereum (ETH), Monero (XMR) and traditional currencies.&lt;/p&gt;
&lt;p&gt;🔐 Help design secure multisig escrow solutions, with legal and regulatory compliance considered from the beginning.&lt;/p&gt;
&lt;p&gt;🌍 Connect GitHub contributions, digital portfolios and independent community projects.&lt;/p&gt;
&lt;h4 id=&quot;-we-need-your-ideas-not-just-your-code-&quot;&gt;🧠 We need your ideas, not just your code!&lt;/h4&gt;
&lt;p&gt;We've opened a community discussion to explore how MyZubster can become a practical, sustainable and legally compliant marketplace.&lt;/p&gt;
&lt;p&gt;We're looking for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Developers and open-source contributors&lt;/li&gt;
&lt;li&gt;Blockchain and cryptocurrency specialists&lt;/li&gt;
&lt;li&gt;UI/UX designers&lt;/li&gt;
&lt;li&gt;Privacy and security researchers&lt;/li&gt;
&lt;li&gt;Legal, fintech and compliance professionals&lt;/li&gt;
&lt;li&gt;Freelancers interested in selling digital skills&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Some features are already under development; others are proposals we want to design and validate together.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We especially want to explore how contributors can offer their digital services through the marketplace, how crypto payments should work, and how to reduce legal and technical risks for everyone involved.&lt;/p&gt;
&lt;h4 id=&quot;-join-the-discussion&quot;&gt;🔗 Join the discussion&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;GitHub community topic:&lt;/strong&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/issues/1639&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster/issues/1639&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Project repository:&lt;/strong&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://myzubster.com&quot;&gt;https://myzubster.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;💬 Introduce yourself, share your expertise, propose an idea or tell us what you'd like to build.&lt;/p&gt;
&lt;p&gt;You don't need to be an expert in everything. Every meaningful contribution matters.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Let's build something useful, open and sustainable — together.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;opensource-github-blockchain-monero-bitcoin-ethereum-marketplace-webdevelopment-freelancing-decentralization-myzubster&quot;&gt;OpenSource #GitHub #Blockchain #Monero #Bitcoin #Ethereum #Marketplace #WebDevelopment #Freelancing #Decentralization #MyZubster&lt;/h2&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/32031/myzubster-is-looking-for-contributors-lets-build-a-community-powered-marketplace</guid>
<pubDate>Thu, 22 Oct 2026 05:55:41 +0000</pubDate>
</item>
<item>
<title>MyZubster Dev Update: Local AI, GitHub Onboarding &amp; Decentralized Collaboration 🚀</title>
<link>https://coderlegion.com/31922/myzubster-dev-update-local-ai-github-onboarding-decentralized-collaboration</link>
<description>&lt;h2 id=&quot;myzubster-dev-update-local-ai-github-onboarding-amp-decentralized-collaboration-&quot;&gt;MyZubster Dev Update: Local AI, GitHub Onboarding &amp;amp; Decentralized Collaboration 🚀&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;We're building MyZubster, an open-source ecosystem connecting developers, independent projects, services, and communities.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Today we made significant progress on &lt;strong&gt;Zorgax&lt;/strong&gt;, our locally hosted AI assistant.&lt;/p&gt;
&lt;p&gt;Our goal is simple: make it easier for anyone — including people with no programming experience — to join GitHub, contribute to projects, and become part of a collaborative ecosystem.&lt;/p&gt;
&lt;h3 id=&quot;-what-we-built-and-tested&quot;&gt;🔧 What We Built and Tested&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Vercel ↔ VPS Connectivity&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We restored communication between our Vercel Production deployment and the VPS backend using a signed HTTPS gateway.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Production assistant endpoint responding successfully&lt;/li&gt;
&lt;li&gt;HTTP 502 connectivity issue resolved in our tests&lt;/li&gt;
&lt;li&gt;Node.js gateway operational&lt;/li&gt;
&lt;li&gt;MongoDB connected&lt;/li&gt;
&lt;li&gt;Local Ollama inference available&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. GitHub Contributor Onboarding&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We implemented a deterministic onboarding guide in Zorgax.&lt;/p&gt;
&lt;p&gt;The assistant can now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Guide new users to GitHub registration&lt;/li&gt;
&lt;li&gt;Recognize completion messages such as &lt;code&gt;FATTO&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ask for a GitHub username&lt;/li&gt;
&lt;li&gt;Recognize that username within the conversation&lt;/li&gt;
&lt;li&gt;Advance to Git and GitHub CLI setup&lt;/li&gt;
&lt;li&gt;Avoid claiming an account has been verified without evidence&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Real Production Testing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Our regression tests passed: &lt;strong&gt;4/4&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We also tested the public Zorgax chat and confirmed that the assistant correctly advanced from GitHub registration to the username and tooling stages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Local AI Architecture&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Our system currently combines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node.js backend&lt;/li&gt;
&lt;li&gt;Vercel frontend and gateway&lt;/li&gt;
&lt;li&gt;VPS-hosted services&lt;/li&gt;
&lt;li&gt;Ollama with &lt;code&gt;qwen2.5:3b&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Deterministic onboarding rules&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This approach helps us keep sensitive onboarding workflows predictable while using local AI for more flexible assistance.&lt;/p&gt;
&lt;h3 id=&quot;-what-still-needs-work&quot;&gt;🐛 What Still Needs Work&lt;/h3&gt;
&lt;p&gt;Our tests also revealed that Zorgax can lose track of the onboarding sequence when it falls back to Ollama.&lt;/p&gt;
&lt;p&gt;For example, after Git and GitHub CLI version checks, it may answer a different MyZubster-related question instead of continuing with GitHub authentication.&lt;/p&gt;
&lt;p&gt;We're working toward a complete flow:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;GitHub signup → username → Git/CLI checks → authentication → repository → first pull request&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;We want every step to be clear, verifiable, and beginner-friendly.&lt;/p&gt;
&lt;h3 id=&quot;-beyond-a-traditional-marketplace&quot;&gt;🌍 Beyond a Traditional Marketplace&lt;/h3&gt;
&lt;p&gt;MyZubster is also exploring ways to connect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Independent developer projects&lt;/li&gt;
&lt;li&gt;Skills and services through a marketplace&lt;/li&gt;
&lt;li&gt;Contributor profiles and verifiable contributions&lt;/li&gt;
&lt;li&gt;Local community initiatives&lt;/li&gt;
&lt;li&gt;Decentralized infrastructure and autonomous nodes&lt;/li&gt;
&lt;li&gt;Privacy-conscious payments and collaboration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our longer-term vision is a federated ecosystem where contributors can develop their own projects while remaining connected to a broader network.&lt;/p&gt;
&lt;p&gt;These are ongoing development goals, not claims that every feature is already production-ready.&lt;/p&gt;
&lt;h3 id=&quot;-looking-for-contributors&quot;&gt;🤝 Looking for Contributors&lt;/h3&gt;
&lt;p&gt;We're particularly interested in developers who want to help with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI-assisted GitHub onboarding&lt;/li&gt;
&lt;li&gt;Node.js and API testing&lt;/li&gt;
&lt;li&gt;UX/UI simplification&lt;/li&gt;
&lt;li&gt;GitHub automation&lt;/li&gt;
&lt;li&gt;Marketplace workflows&lt;/li&gt;
&lt;li&gt;VPS and decentralized infrastructure&lt;/li&gt;
&lt;li&gt;Open-source documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You don't need to build everything. Even a small, well-tested contribution can move the project forward.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explore MyZubster:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com&quot;&gt;https://www.myzubster.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Try Zorgax:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/zorgax&quot;&gt;https://www.myzubster.com/zorgax&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem&quot;&gt;https://github.com/MyZubster-Ecosystem&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;let-s-collaborate&quot;&gt;Let's collaborate&lt;/h4&gt;
&lt;p&gt;We're interested in connecting independent developers and projects rather than requiring everyone to work inside a single centralized system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Question for the community:&lt;/strong&gt; How would you design an AI onboarding assistant that guides a complete beginner from creating a GitHub account to opening their first pull request?&lt;/p&gt;
&lt;h2 id=&quot;opensource-ai-github-nodejs-decentralization-developercommunity&quot;&gt;OpenSource #AI #GitHub #NodeJS #Decentralization #DeveloperCommunity&lt;/h2&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/31922/myzubster-dev-update-local-ai-github-onboarding-decentralized-collaboration</guid>
<pubDate>Wed, 21 Oct 2026 05:38:10 +0000</pubDate>
</item>
<item>
<title>REA GitHub Tutorial: Reverse Engineer Anything with Claude Code (Full Setup + Fi</title>
<link>https://coderlegion.com/31888/rea-github-tutorial-reverse-engineer-anything-with-claude-code-full-setup-fi</link>
<description>&lt;h3 id=&quot;what-is-rea-&quot;&gt;What is REA?&lt;/h3&gt;
&lt;p&gt;REA is an &lt;strong&gt;MCP server&lt;/strong&gt; plus a set of workflow instructions (a &quot;skill&quot;) for your AI agent. Instead of guessing how an app works from screenshots, the agent can call REA's analysis tools — 207 of them in version 6.7.0 — to inspect the real files.&lt;/p&gt;
&lt;p&gt;Think of it like a restaurant:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;You&lt;/strong&gt; are the customer — you ask a question in plain English.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; is the chef — it decides what to do.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;REA&lt;/strong&gt; is the chef's toolbox.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The app&lt;/strong&gt; is the ingredient being inspected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It supports JavaScript and Electron apps out of the box. Native &lt;code&gt;.exe&lt;/code&gt;/&lt;code&gt;.dll&lt;/code&gt; analysis needs Ghidra, IDA or Hopper installed separately, and full Android APK analysis needs a Java JDK.&lt;/p&gt;
&lt;h4 id=&quot;hype-vs-reality&quot;&gt;Hype vs reality&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;✅ It finds real evidence inside an app's files&lt;/li&gt;
&lt;li&gt;✅ It explains that evidence in plain language&lt;/li&gt;
&lt;li&gt;✅ It tells you what it &lt;strong&gt;couldn't&lt;/strong&gt; figure out&lt;/li&gt;
&lt;li&gt;❌ It is &lt;strong&gt;not&lt;/strong&gt; a one-click &quot;clone this app&quot; button&lt;/li&gt;
&lt;li&gt;❌ Heavily protected apps need extra tools and may still leave open questions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My favourite part: findings come with a confidence level. In my test, the Electron fuse check came back as &lt;code&gt;&quot;confidence&quot;: &quot;observed&quot;&lt;/code&gt; from the shipped artifact, with the file's SHA-256 attached as proof.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;how-to-install-rea&quot;&gt;How to install REA&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Prerequisite:&lt;/strong&gt; Node.js 22.19+, 24.11+ or 26+.&lt;/p&gt;
&lt;h4 id=&quot;mac-amp-linux-guided-&quot;&gt;Mac &amp;amp; Linux (guided)&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npx rea-agents setup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The wizard asks which agent you use and registers REA for you.&lt;/p&gt;
&lt;h4 id=&quot;windows-manual-this-is-what-worked-for-me-&quot;&gt;Windows (manual — this is what worked for me)&lt;/h4&gt;
&lt;p&gt;On Windows, setup deliberately doesn't edit your agent's config, so register it yourself:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;node -v
npm install -g rea-agents@6.7.0
rea doctor
claude mcp add --scope user rea -- cmd /c rea mcp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then &lt;strong&gt;fully restart Claude Code&lt;/strong&gt; and run &lt;code&gt;/mcp&lt;/code&gt; — you should see &lt;code&gt;rea · connected&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;cmd /c&lt;/code&gt; matters on Windows: &lt;code&gt;rea&lt;/code&gt; is a &lt;code&gt;.cmd&lt;/code&gt; launcher that Claude Code can't start directly.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;⚠️ Install only from the official repo — &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/morluto/rea&quot;&gt;github.com/morluto/rea&lt;/a&gt; — or the npm package &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.npmjs.com/package/rea-agents&quot;&gt;&lt;code&gt;rea-agents&lt;/code&gt;&lt;/a&gt;. Copycat repos are a real risk with tools like this.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;demo-reverse-engineering-vs-code&quot;&gt;Demo: reverse engineering VS Code&lt;/h3&gt;
&lt;p&gt;I gave Claude Code this prompt (static analysis only — nothing launched or modified):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Use the rea MCP server to statically analyse VS Code at
%LOCALAPPDATA%\Programs\Microsoft VS Code. Do not launch or modify it.
1. inspect_pe_resources and inspect_electron_fuses on Code.exe
2. Read resources\app\product.json and list every server it talks to
3. analyze_javascript_application on resources\app and map its processes
Explain each finding in plain English.
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;1-what-code-exe-really-is&quot;&gt;1. What Code.exe really is&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Component &lt;/th&gt;&lt;th&gt;Version&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;VS Code &lt;/td&gt;&lt;td&gt;1.142.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Electron &lt;/td&gt;&lt;td&gt;43.7.7&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Chromium &lt;/td&gt;&lt;td&gt;150.0.7871.250&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Node.js &lt;/td&gt;&lt;td&gt;24.21.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Size &lt;/td&gt;&lt;td&gt;238 MB, 64-bit, signed by Microsoft&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The internal name? &lt;code&gt;electron.exe&lt;/code&gt;. VS Code is a web app in a desktop wrapper.&lt;/p&gt;
&lt;h4 id=&quot;2-nine-electron-security-fuses&quot;&gt;2. Nine Electron security fuses&lt;/h4&gt;
&lt;p&gt;Fuses are on/off switches baked into the executable at build time. REA read all nine. Highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;On:&lt;/strong&gt; &lt;code&gt;RunAsNode&lt;/code&gt;, &lt;code&gt;EnableNodeOptionsEnvironmentVariable&lt;/code&gt;, &lt;code&gt;EnableNodeCliInspectArguments&lt;/code&gt; — VS Code needs these for its CLI and helper processes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Off:&lt;/strong&gt; &lt;code&gt;EnableEmbeddedAsarIntegrityValidation&lt;/code&gt;, &lt;code&gt;OnlyLoadAppFromAsar&lt;/code&gt; — VS Code checks its own files with checksums in &lt;code&gt;product.json&lt;/code&gt; instead.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are design trade-offs, not bugs — but they're exactly why Electron apps are interesting to study.&lt;/p&gt;
&lt;h4 id=&quot;3-who-vs-code-talks-to&quot;&gt;3. Who VS Code talks to&lt;/h4&gt;
&lt;p&gt;From &lt;code&gt;product.json&lt;/code&gt;: the update server, the Extension Marketplace, a GitHub-hosted MCP server gallery, Settings Sync, an A/B experimentation service, Bing-powered settings search, a voice service, and a CDN hosting AI agent SDKs. Telemetry is on by default, with an opt-out.&lt;/p&gt;
&lt;h4 id=&quot;4-seven-processes&quot;&gt;4. Seven processes&lt;/h4&gt;
&lt;p&gt;Main process, workbench window, shared process, extension host, pty host (terminal), file watcher, and a newer agent host. That's why one frozen extension doesn't freeze your editor — extensions run in their own process.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;troubleshooting-every-error-i-hit&quot;&gt;Troubleshooting: every error I hit&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Error &lt;/th&gt;&lt;th&gt;Cause &lt;/th&gt;&lt;th&gt;Fix&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;'claude' is not recognized&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;claude.exe&lt;/code&gt; is in &lt;code&gt;%USERPROFILE%\.local\bin&lt;/code&gt;, which wasn't on PATH &lt;/td&gt;&lt;td&gt;Add that folder to your user PATH, open a new terminal&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;MCP server rea already exists in user config&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Already registered &lt;/td&gt;&lt;td&gt;Nothing to fix — restart Claude Code&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;rea&lt;/code&gt; missing from &lt;code&gt;/mcp&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Not restarted, or a different session/PC &lt;/td&gt;&lt;td&gt;Fully close and reopen Claude Code on the same PC&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;provider_unavailable&lt;/code&gt; &lt;/td&gt;&lt;td&gt;No Ghidra/IDA/Hopper found &lt;/td&gt;&lt;td&gt;Install Ghidra + JDK 21, set &lt;code&gt;GHIDRA_INSTALL_DIR&lt;/code&gt;, run &lt;code&gt;rea doctor&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Server won't start on Windows &lt;/td&gt;&lt;td&gt;Missing &lt;code&gt;cmd /c&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;claude mcp add --scope user rea -- cmd /c rea mcp&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;APK analysis fails &lt;/td&gt;&lt;td&gt;JRE instead of JDK &lt;/td&gt;&lt;td&gt;Install a full Java JDK&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; when anything breaks, run &lt;code&gt;rea doctor&lt;/code&gt; first. It's read-only and tells you exactly what's missing.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;my-verdict&quot;&gt;My verdict&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;For understanding apps — yes.&lt;/strong&gt; What used to take hours in a disassembler took minutes, in plain English.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not a magic clone button.&lt;/strong&gt; It gives your agent evidence; building is still your job.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Always verify&lt;/strong&gt; anything marked &quot;inferred&quot; or &quot;unknown&quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As an app developer, I'll use it to check my own release builds (what really ships in my APK), learn how good open-source apps solve a feature, and audit what the tools I install connect to.&lt;/p&gt;
&lt;h3 id=&quot;use-it-responsibly&quot;&gt;Use it responsibly&lt;/h3&gt;
&lt;p&gt;From REA's README: it's for &lt;em&gt;lawful research, education, interoperability, software preservation&lt;/em&gt; — and software you own or are authorized to examine. Learn from apps; don't copy paid ones.&lt;/p&gt;
&lt;hr&gt;
</description>
<category>Videos</category>
<guid isPermaLink="true">https://coderlegion.com/31888/rea-github-tutorial-reverse-engineer-anything-with-claude-code-full-setup-fi</guid>
<pubDate>Tue, 20 Oct 2026 19:39:34 +0000</pubDate>
</item>
<item>
<title>Why Git Blob IDs Mismatch Your File Checksums</title>
<link>https://coderlegion.com/31609/why-git-blob-ids-mismatch-your-file-checksums</link>
<description>&lt;p&gt;Comparing a raw file digest with a Git object identifier often reveals unexpected mismatches. Developers frequently notice that running a standard local hashing tool on a file produces a different checksum than the one returned by Git or the &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.github.com/en/rest/git/blobs&quot;&gt;GitHub Git blobs REST API&lt;/a&gt;. This discrepancy occurs because Git does not hash raw file bytes directly. Instead, Git constructs an object header that includes the object type and byte length, prepends it to the content, and hashes the combined payload.&lt;/p&gt;
&lt;p&gt;Quick solution:&lt;br&gt;
To calculate the exact Git blob object ID locally, prepend the object type and byte length header followed by a null byte before hashing the raw content.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;printf &quot;blob %d\0%s&quot; &quot;$(wc -c &amp;lt; file.txt)&quot; &quot;$(cat file.txt)&quot; | shasum
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Prerequisites include a standard Unix shell environment with &lt;code&gt;shasum&lt;/code&gt; or &lt;code&gt;sha1sum&lt;/code&gt;, and &lt;code&gt;wc&lt;/code&gt; for counting exact byte lengths. Be aware that trailing newlines or varying shell implementations of &lt;code&gt;printf&lt;/code&gt; can alter the generated byte stream.&lt;/p&gt;
&lt;h3 id=&quot;why-does-hashing-raw-file-bytes-produce-another-value-&quot;&gt;Why Does Hashing Raw File Bytes Produce Another Value?&lt;/h3&gt;
&lt;p&gt;When you run a command like &lt;code&gt;openssl dgst -sha1 file.txt&lt;/code&gt; or &lt;code&gt;shasum file.txt&lt;/code&gt;, the utility reads the raw byte sequence of the file and feeds it directly into the cryptographic hash function. This yields a pure content digest. Git, however, treats files as version-controlled objects rather than flat storage blocks. According to the &lt;a rel=&quot;nofollow&quot; href=&quot;https://git-scm.com/docs/git-hash-object&quot;&gt;Git hash-object documentation&lt;/a&gt;, every stored object receives a header composed of its type (such as &lt;code&gt;blob&lt;/code&gt;), a space, the size of the file in bytes, and a null byte (&lt;code&gt;\u0000&lt;/code&gt;) acting as a separator. &lt;/p&gt;
&lt;p&gt;For example, if a file contains the exact text &lt;code&gt;hello&lt;/code&gt;, its byte length is 5. Git constructs the internal byte sequence by joining the string &lt;code&gt;blob 5&lt;/code&gt;, a null byte, and the five characters of content. Hashing this combined stream produces the unique Git object identifier. Because the raw file digest lacks the header, metadata, and null separator, the resulting checksum diverges completely from the Git blob ID. Developers optimizing performance workflows often review prior indexing patterns, such as those detailed in our guide on &lt;a rel=&quot;nofollow&quot; href=&quot;https://raylabs.app/articles/google-search-console-content-prioritization/&quot;&gt;Google Search Console Content Prioritization&lt;/a&gt;, to ensure metadata indices align properly with storage identifiers.&lt;/p&gt;
&lt;h3 id=&quot;how-is-utf-8-byte-length-different-from-string-length-&quot;&gt;How Is UTF-8 Byte Length Different from String Length?&lt;/h3&gt;
&lt;p&gt;Calculating correct object identifiers requires precise byte counting rather than character or string length measurements. In ASCII text, one character equals one byte. However, modern codebases frequently utilize multi-byte UTF-8 characters, emojis, or specialized symbols. &lt;/p&gt;
&lt;p&gt;Consider a text file containing a single multi-byte character, such as the euro symbol (€). In UTF-8 encoding, this character occupies three bytes. If an application measures string length by counting logical characters, it might report a length of 1. If Git then calculates the header using that incorrect length, the resulting object hash will fail to match the repository database or API response. Engineers must always measure exact byte counts using tools like &lt;code&gt;wc -c&lt;/code&gt; or native byte-length methods in programming languages rather than relying on character-length functions.&lt;/p&gt;
&lt;h3 id=&quot;when-must-application-integrity-use-a-separate-digest-&quot;&gt;When Must Application Integrity Use a Separate Digest?&lt;/h3&gt;
&lt;p&gt;Relying on Git object IDs for external application security or file verification introduces architectural risks. Because Git object identifiers depend on the internal repository header and the chosen hashing algorithm (such as SHA-1 or newer experimental formats like SHA-256), they are tightly coupled to version control internals rather than raw file content.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Option &lt;/th&gt;&lt;th align=&quot;left&quot;&gt;When to Use It &lt;/th&gt;&lt;th align=&quot;left&quot;&gt;Trade-off or Failure Mode &lt;/th&gt;&lt;th align=&quot;left&quot;&gt;Recommendation&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;Git Blob ID&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Verifying repository object storage and API blob parity &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Tied to Git metadata headers and vulnerable to SHA-1 collision concerns &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Use strictly for Git repository tooling and GitHub REST API integration&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;Raw File Digest&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Verifying independent file downloads, caches, or releases &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Ignores repository metadata and commit context &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Use standard SHA-256 or BLAKE2 for general application integrity checks&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Applications that require independent file verification, artifact signing, or secure distribution must rely on a dedicated raw digest computed directly from the file bytes. Treating Git object IDs as universal file checksums creates fragile verification pipelines that break when files are checked out with different line ending configurations, such as CRLF versus LF normalization.&lt;/p&gt;
&lt;h3 id=&quot;additional-scenarios-and-failure-modes&quot;&gt;Additional Scenarios and Failure Modes&lt;/h3&gt;
&lt;p&gt;In addition to the differences between raw file digests and Git blob IDs, there are other scenarios where the two may diverge. For instance, when a file is modified, the Git blob ID will change, but the raw file digest may not if the modification does not affect the file's content. Similarly, if a file is renamed or moved, the Git blob ID will remain the same, but the raw file digest may change if the file's content is modified during the rename or move operation.&lt;/p&gt;
&lt;h3 id=&quot;execution-and-verification-checklist&quot;&gt;Execution and Verification Checklist&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Verify empty content matches git hash-object by running an empty file through the header generation command and comparing it against &lt;code&gt;git hash-object --stdin&lt;/code&gt;. Expected result: hashes match the known empty blob identifier &lt;code&gt;e69de29bb2d1d6434b8b29ae775ad8c2e48c5391&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;[ ] Test non-ASCII text using exact byte length calculations rather than character counts to ensure multi-byte symbols generate matching object IDs.&lt;/li&gt;
&lt;li&gt;[ ] Confirm a one-byte modification alters both the raw digest and the Git blob identifier, validating that minor edits propagate correctly through the header generation step.&lt;/li&gt;
&lt;li&gt;[ ] Document environment specifics, shell versions, and encoding parameters before deploying any automated script that compares raw file checksums against Git repository objects.&lt;/li&gt;
&lt;li&gt;[ ] Verify the behavior of Git blob IDs and raw file digests in different encoding scenarios, such as UTF-8, UTF-16, and UTF-32.&lt;/li&gt;
&lt;li&gt;[ ] Test the performance impact of using Git blob IDs versus raw file digests for large files and repositories.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;In conclusion, the discrepancy between raw file digests and Git blob IDs arises from the inclusion of a header in the Git object identifier. This header contains the object type, byte length, and a null separator, which are not present in the raw file digest. Understanding the differences between these two types of identifiers is crucial for ensuring data integrity and security in version control systems and application development. By using the correct type of identifier for the specific use case, developers can avoid potential pitfalls and ensure the reliability of their workflows.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/31609/why-git-blob-ids-mismatch-your-file-checksums</guid>
<pubDate>Mon, 19 Oct 2026 02:25:56 +0000</pubDate>
</item>
<item>
<title>MyZubster: From GitHub Contributions to a Decentralized Marketplace of Skills, Projects and nodes</title>
<link>https://coderlegion.com/31576/myzubster-from-github-contributions-decentralized-marketplace-skills-projects-nodes</link>
<description>&lt;h2 id=&quot;myzubster-from-github-contributions-to-a-decentralized-marketplace-of-skills-projects-and-independent-nodes&quot;&gt;MyZubster: From GitHub Contributions to a Decentralized Marketplace of Skills, Projects and Independent Nodes&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;An open-source ecosystem connecting developers, AI, verifiable contributions, real-world services and independently operated infrastructure.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;what-if-your-github-work-could-become-part-of-something-bigger-&quot;&gt;What if your GitHub work could become part of something bigger?&lt;/h3&gt;
&lt;p&gt;Developers create incredible things every day.&lt;/p&gt;
&lt;p&gt;We publish repositories, fix bugs, build APIs, improve documentation, experiment with AI and contribute to projects around the world.&lt;/p&gt;
&lt;p&gt;But there is a problem.&lt;/p&gt;
&lt;p&gt;Our skills, contributions, projects and opportunities are often scattered across disconnected platforms.&lt;/p&gt;
&lt;p&gt;A developer might have a strong GitHub profile but no simple way to present their services.&lt;/p&gt;
&lt;p&gt;A freelancer might have valuable skills but little visibility within open-source communities.&lt;/p&gt;
&lt;p&gt;An independent project might have working software but no straightforward way to collaborate with other projects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MyZubster is an open-source experiment designed to connect these worlds.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We're building an ecosystem where people can contribute code, document their skills, offer services, connect independent projects and explore decentralized infrastructure.&lt;/p&gt;
&lt;p&gt;And we're inviting developers and creators to help build it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explore the project:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Website: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/&quot;&gt;https://www.myzubster.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Marketplace: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/community-marketplace.html&quot;&gt;https://www.myzubster.com/community-marketplace.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;1-myzubster-is-more-than-a-marketplace&quot;&gt;1. MyZubster Is More Than a Marketplace&lt;/h3&gt;
&lt;p&gt;Our vision connects several components.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Marketplace&lt;/strong&gt; — A place where people can offer services, creative work, technical expertise and other legitimate listings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt; — The development environment where contributors collaborate, review code and document their work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Zorgax&lt;/strong&gt; — An AI component intended to help users navigate information, document projects and explore opportunities.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Contributor Passport&lt;/strong&gt; — An evolving approach to linking skills and contributions with supporting evidence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Knowledge Graph&lt;/strong&gt; — A way to describe relationships between people, projects, software, knowledge and documented work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Independent Nodes&lt;/strong&gt; — Experiments with Docker, Tor Onion services and contributor-operated infrastructure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LIFE Projects&lt;/strong&gt; — Real-world initiatives involving communities, creative work, resource sharing and local activities.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DAO-Inspired Governance&lt;/strong&gt; — An exploration of how contributors could share decisions, responsibilities and maintenance.&lt;/p&gt;
&lt;p&gt;These components are at different stages of development. MyZubster is an evolving MVP, not a fully completed decentralized network.&lt;/p&gt;
&lt;p&gt;The challenge is to make them useful together.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;2-developers-turn-your-skills-into-real-opportunities&quot;&gt;2. Developers: Turn Your Skills Into Real Opportunities&lt;/h3&gt;
&lt;p&gt;Imagine you are a Python developer.&lt;/p&gt;
&lt;p&gt;You contribute to a repository, fix a bug or create an API integration.&lt;/p&gt;
&lt;p&gt;That work can help demonstrate your technical abilities.&lt;/p&gt;
&lt;p&gt;But what happens next?&lt;/p&gt;
&lt;p&gt;You might want to offer API development, automation, testing or technical consulting.&lt;/p&gt;
&lt;p&gt;The MyZubster Marketplace is designed to help connect skills with services.&lt;/p&gt;
&lt;h4 id=&quot;what-could-you-list-&quot;&gt;What could you list?&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Python, JavaScript or Node.js development&lt;/li&gt;
&lt;li&gt;Website and application development&lt;/li&gt;
&lt;li&gt;AI integrations and automation&lt;/li&gt;
&lt;li&gt;Docker and Linux support&lt;/li&gt;
&lt;li&gt;API design and integrations&lt;/li&gt;
&lt;li&gt;UI/UX design&lt;/li&gt;
&lt;li&gt;Open-source documentation&lt;/li&gt;
&lt;li&gt;Creative services and digital art&lt;/li&gt;
&lt;li&gt;Technical tutoring and consulting&lt;/li&gt;
&lt;li&gt;Local services or equipment rental&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You don't need to be a professional developer to explore the Marketplace.&lt;/p&gt;
&lt;p&gt;Artists, designers, makers, freelancers and local community members can also participate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The idea is simple: your skills should be useful beyond your profile page.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Creating a listing does not guarantee sales, and the platform is still being tested and improved.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explore the Marketplace:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/community-marketplace.html&quot;&gt;https://www.myzubster.com/community-marketplace.html&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;3-connect-your-github-contributions-to-your-skills&quot;&gt;3. Connect Your GitHub Contributions to Your Skills&lt;/h3&gt;
&lt;p&gt;GitHub is one of the most important entry points into MyZubster.&lt;/p&gt;
&lt;p&gt;We want to explore a model where a contributor's public work can support a more meaningful representation of their abilities.&lt;/p&gt;
&lt;p&gt;Consider this example:&lt;/p&gt;
&lt;p&gt;A developer creates a Docker integration.&lt;/p&gt;
&lt;p&gt;The integration is submitted through a pull request.&lt;/p&gt;
&lt;p&gt;The code receives review, automated tests and documentation.&lt;/p&gt;
&lt;p&gt;That contribution can then become part of a documented history of work.&lt;/p&gt;
&lt;p&gt;Our proposed &lt;strong&gt;Contributor Passport&lt;/strong&gt; model follows a structure like:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identity → Contribution → Evidence → Skills → Recognition&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A contribution record might include a repository link, pull request, test results and review status.&lt;/p&gt;
&lt;p&gt;This is not automatic certification.&lt;/p&gt;
&lt;p&gt;It is a way to make specific work more transparent and easier to discover.&lt;/p&gt;
&lt;p&gt;We also want contributors to retain control over what information they choose to make public.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;4-how-to-contribute-to-myzubster-on-github&quot;&gt;4. How to Contribute to MyZubster on GitHub&lt;/h3&gt;
&lt;p&gt;You don't need to understand the entire ecosystem before making your first contribution.&lt;/p&gt;
&lt;p&gt;Start small.&lt;/p&gt;
&lt;h4 id=&quot;step-1-explore-the-repository&quot;&gt;Step 1 — Explore the repository&lt;/h4&gt;
&lt;p&gt;Visit:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Read the README and explore the project structure.&lt;/p&gt;
&lt;h4 id=&quot;step-2-choose-your-area&quot;&gt;Step 2 — Choose your area&lt;/h4&gt;
&lt;p&gt;You can contribute to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Frontend and Marketplace UX&lt;/li&gt;
&lt;li&gt;Backend and API development&lt;/li&gt;
&lt;li&gt;Automated testing&lt;/li&gt;
&lt;li&gt;AI and Zorgax integrations&lt;/li&gt;
&lt;li&gt;Docker and infrastructure&lt;/li&gt;
&lt;li&gt;Tor Onion experiments&lt;/li&gt;
&lt;li&gt;Documentation and onboarding&lt;/li&gt;
&lt;li&gt;Knowledge Graph interfaces&lt;/li&gt;
&lt;li&gt;Accessibility and translations&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;step-3-find-an-existing-issue&quot;&gt;Step 3 — Find an existing issue&lt;/h4&gt;
&lt;p&gt;Look for a task that matches your experience.&lt;/p&gt;
&lt;p&gt;Read the discussion to check whether someone is already working on it.&lt;/p&gt;
&lt;p&gt;Introduce yourself and explain what you would like to contribute.&lt;/p&gt;
&lt;h4 id=&quot;step-4-fork-build-and-test&quot;&gt;Step 4 — Fork, build and test&lt;/h4&gt;
&lt;p&gt;Create your own development branch.&lt;/p&gt;
&lt;p&gt;Make a focused change.&lt;/p&gt;
&lt;p&gt;Document what you changed and how it can be tested.&lt;/p&gt;
&lt;h4 id=&quot;step-5-open-a-pull-request&quot;&gt;Step 5 — Open a pull request&lt;/h4&gt;
&lt;p&gt;Submit the change for review.&lt;/p&gt;
&lt;p&gt;Include reproducible test evidence whenever possible.&lt;/p&gt;
&lt;p&gt;The goal is not simply to produce more code.&lt;/p&gt;
&lt;p&gt;It's to produce useful, maintainable and verifiable contributions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Choose a contribution path:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/issues/1622&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster/issues/1622&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Participation is voluntary. Contributions do not automatically qualify for payment, governance membership or infrastructure access.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;5-zorgax-making-the-ecosystem-easier-to-navigate&quot;&gt;5. Zorgax: Making the Ecosystem Easier to Navigate&lt;/h3&gt;
&lt;p&gt;Open-source ecosystems can become complicated.&lt;/p&gt;
&lt;p&gt;Repositories, documentation, APIs, discussions and contribution histories are not always easy to understand.&lt;/p&gt;
&lt;p&gt;Zorgax is the AI component of MyZubster.&lt;/p&gt;
&lt;p&gt;Our direction is to use AI to help people understand information and participate more effectively.&lt;/p&gt;
&lt;p&gt;Potential applications include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explaining technical documentation&lt;/li&gt;
&lt;li&gt;Helping newcomers identify suitable tasks&lt;/li&gt;
&lt;li&gt;Organizing project knowledge&lt;/li&gt;
&lt;li&gt;Drafting descriptions of skills and services&lt;/li&gt;
&lt;li&gt;Supporting technical learning&lt;/li&gt;
&lt;li&gt;Assisting with contributor onboarding&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI should help people interpret evidence, not invent credentials or exaggerate experience.&lt;/p&gt;
&lt;p&gt;We want useful assistance grounded in real work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explore Zorgax:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/zorgax&quot;&gt;https://www.myzubster.com/zorgax&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;6-knowledge-graph-connecting-contributions-to-real-projects&quot;&gt;6. Knowledge Graph: Connecting Contributions to Real Projects&lt;/h3&gt;
&lt;p&gt;A repository tells us where code lives.&lt;/p&gt;
&lt;p&gt;A Knowledge Graph can help us understand relationships.&lt;/p&gt;
&lt;p&gt;Imagine these connections:&lt;/p&gt;
&lt;p&gt;A developer builds an API.&lt;/p&gt;
&lt;p&gt;The API supports an independent project.&lt;/p&gt;
&lt;p&gt;That project generates documented results.&lt;/p&gt;
&lt;p&gt;Another contributor uses those results to create a service.&lt;/p&gt;
&lt;p&gt;A marketplace listing offers that service to a community.&lt;/p&gt;
&lt;p&gt;The graph could connect the relevant contributors, repositories, projects and evidence.&lt;/p&gt;
&lt;p&gt;This is especially interesting for open-source communities where knowledge is distributed across many independent participants.&lt;/p&gt;
&lt;p&gt;The objective is to improve discoverability and traceability, not to claim that every linked piece of information has been independently verified.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;7-decentralization-what-happens-when-contributors-run-their-own-nodes-&quot;&gt;7. Decentralization: What Happens When Contributors Run Their Own Nodes?&lt;/h3&gt;
&lt;p&gt;This is one of the most interesting technical directions in MyZubster.&lt;/p&gt;
&lt;p&gt;We are exploring how independently operated services could interoperate without requiring every contributor to place their project on one central server.&lt;/p&gt;
&lt;p&gt;The technologies involved include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Docker and Docker Compose&lt;/li&gt;
&lt;li&gt;Tor v3 Onion services&lt;/li&gt;
&lt;li&gt;HAProxy&lt;/li&gt;
&lt;li&gt;Independent service environments&lt;/li&gt;
&lt;li&gt;API integrations&lt;/li&gt;
&lt;li&gt;Reproducible testing&lt;/li&gt;
&lt;li&gt;Service resilience and recovery&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The main Docker Compose stack includes a Tor Onion service that can generate and persist an Onion identity.&lt;/p&gt;
&lt;p&gt;This provides a foundation for contributor-operated experiments.&lt;/p&gt;
&lt;h4 id=&quot;why-does-this-matter-&quot;&gt;Why does this matter?&lt;/h4&gt;
&lt;p&gt;Imagine two developers operating different environments.&lt;/p&gt;
&lt;p&gt;One maintains a creative catalog.&lt;/p&gt;
&lt;p&gt;Another maintains an integration service.&lt;/p&gt;
&lt;p&gt;They want to exchange selected information while keeping control of their own systems.&lt;/p&gt;
&lt;p&gt;Instead of moving everything into one repository or one VPS, they can explore documented interfaces between independent services.&lt;/p&gt;
&lt;h4 id=&quot;what-has-been-tested-&quot;&gt;What has been tested?&lt;/h4&gt;
&lt;p&gt;MyZubster contributors have documented local interoperability tests and an isolated static Tor Onion pilot.&lt;/p&gt;
&lt;p&gt;Work involving Nicola's N4K48 project and Wasim's testing efforts is helping investigate how these connections can operate.&lt;/p&gt;
&lt;p&gt;But there are important limits.&lt;/p&gt;
&lt;p&gt;A local test does not prove production readiness.&lt;/p&gt;
&lt;p&gt;A Tor Onion address does not automatically prove that a service is available.&lt;/p&gt;
&lt;p&gt;A connection through a central broker is not yet a fully independent peer-to-peer federation.&lt;/p&gt;
&lt;p&gt;We're working toward stronger evidence through independent verification, recovery testing and documented network boundaries.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Technical discussion:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/issues/1584&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster/issues/1584&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Independent node registry:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/issues/1623&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster/issues/1623&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;8-independent-projects-bring-what-you-ve-already-built&quot;&gt;8. Independent Projects: Bring What You've Already Built&lt;/h3&gt;
&lt;p&gt;You don't need to abandon your own project to join MyZubster.&lt;/p&gt;
&lt;p&gt;In fact, independent ownership is part of the vision.&lt;/p&gt;
&lt;p&gt;If you already maintain software, a creative initiative, a local community project or a technical experiment, you can propose a connection.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A developer:&lt;/strong&gt; Maintains an open-source application and explores an API integration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An artist:&lt;/strong&gt; Documents creative work and offers related services through the Marketplace.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A community organizer:&lt;/strong&gt; Connects a local initiative with shared resources and public documentation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A researcher or maker:&lt;/strong&gt; Links project evidence, experiments and technical knowledge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A Docker enthusiast:&lt;/strong&gt; Tests a contributor-operated service in an isolated environment.&lt;/p&gt;
&lt;p&gt;Not every integration is available today.&lt;/p&gt;
&lt;p&gt;The first step is to discuss a small, realistic pilot with clear expectations.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;9-dao-inspired-governance-sharing-the-work&quot;&gt;9. DAO-Inspired Governance: Sharing the Work&lt;/h3&gt;
&lt;p&gt;A decentralized ecosystem cannot depend forever on one person making every decision, paying every infrastructure bill and reviewing every contribution.&lt;/p&gt;
&lt;p&gt;We are exploring a governance model where participants can voluntarily take responsibility for specific areas.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Maintaining a component&lt;/li&gt;
&lt;li&gt;Reviewing technical contributions&lt;/li&gt;
&lt;li&gt;Operating a node&lt;/li&gt;
&lt;li&gt;Documenting a pilot&lt;/li&gt;
&lt;li&gt;Coordinating a community activity&lt;/li&gt;
&lt;li&gt;Proposing improvements&lt;/li&gt;
&lt;li&gt;Helping verify technical evidence&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We want responsibility to be distributed alongside knowledge.&lt;/p&gt;
&lt;p&gt;This governance model is still being developed.&lt;/p&gt;
&lt;p&gt;Joining the GitHub repository does not automatically make someone a DAO member, require financial contributions or guarantee a governance role.&lt;/p&gt;
&lt;p&gt;Our immediate priority is simpler: help people take ownership of manageable, clearly defined tasks.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;10-payments-monero-and-sustainability&quot;&gt;10. Payments, Monero and Sustainability&lt;/h3&gt;
&lt;p&gt;Open-source development also raises economic questions.&lt;/p&gt;
&lt;p&gt;How can contributors be supported?&lt;/p&gt;
&lt;p&gt;How can independent infrastructure remain sustainable?&lt;/p&gt;
&lt;p&gt;How can services generate value for the people offering them?&lt;/p&gt;
&lt;p&gt;MyZubster is exploring conventional payment methods alongside privacy-conscious cryptocurrency options, including Monero.&lt;/p&gt;
&lt;p&gt;We are also discussing internal MYZ accounting and potential contributor reward mechanisms.&lt;/p&gt;
&lt;p&gt;However, proposed rewards are not guaranteed payments.&lt;/p&gt;
&lt;p&gt;Funding, settlement conditions and responsibilities must be confirmed explicitly.&lt;/p&gt;
&lt;p&gt;The long-term goal is to explore an ecosystem where useful services can generate economic activity that helps sustain maintenance and infrastructure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This is an economic hypothesis we still need to validate through real usage and verified transactions.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;11-real-world-use-cases-beyond-software&quot;&gt;11. Real-World Use Cases: Beyond Software&lt;/h3&gt;
&lt;p&gt;MyZubster also explores how digital infrastructure could support real-world communities.&lt;/p&gt;
&lt;p&gt;Our LIFE-oriented pilot directions include:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Community resource exchange&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sharing resources, such as kefir cultures, and documenting practical knowledge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Urban gardening&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Recording gardening activities, practical experience and potentially environmental sensor data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Creative communities&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Supporting artists, music groups and independent cultural projects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Open knowledge&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Connecting documentation, software contributions and evidence from community-led experiments.&lt;/p&gt;
&lt;p&gt;These initiatives illustrate potential applications. Their technical and organizational maturity varies.&lt;/p&gt;
&lt;p&gt;The point is to test whether open-source tools can solve practical problems for people outside the software industry.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;12-five-ways-to-join-myzubster&quot;&gt;12. Five Ways to Join MyZubster&lt;/h3&gt;
&lt;p&gt;You can participate without running a server or making a financial commitment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Create a Marketplace listing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Offer a skill, service or creative product.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/community-marketplace.html&quot;&gt;https://www.myzubster.com/community-marketplace.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Contribute on GitHub&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Explore issues, improve documentation, fix bugs or submit code.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Connect your independent project&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Introduce your repository, application or community initiative and discuss a small interoperability pilot.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/issues/1622&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster/issues/1622&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Help test independent infrastructure&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you know Docker, Linux, Tor or networking, help improve our experimental node architecture.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/issues/1623&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster/issues/1623&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Share knowledge and feedback&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Help make the ecosystem easier to understand, use and maintain.&lt;/p&gt;
&lt;p&gt;You don't need to be a senior engineer to make a useful contribution.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;13-what-we-want-to-prove-next&quot;&gt;13. What We Want to Prove Next&lt;/h3&gt;
&lt;p&gt;Our next challenges are practical.&lt;/p&gt;
&lt;p&gt;Can new users publish useful Marketplace listings?&lt;/p&gt;
&lt;p&gt;Can developers complete meaningful contributions without constant assistance from the original maintainers?&lt;/p&gt;
&lt;p&gt;Can two independently operated services exchange information reliably?&lt;/p&gt;
&lt;p&gt;Can knowledge and contribution records remain useful across projects?&lt;/p&gt;
&lt;p&gt;Can the ecosystem eventually cover its operating costs through real economic activity?&lt;/p&gt;
&lt;p&gt;These questions will not be answered by architecture diagrams alone.&lt;/p&gt;
&lt;p&gt;They require users, contributors, testing and evidence.&lt;/p&gt;
&lt;p&gt;That's why we're inviting people to join now.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;let-s-build-a-more-connected-open-source-ecosystem&quot;&gt;Let's Build a More Connected Open-Source Ecosystem&lt;/h3&gt;
&lt;p&gt;MyZubster is still growing.&lt;/p&gt;
&lt;p&gt;We're not claiming to have completed a decentralized internet, a production DAO or a self-sustaining digital economy.&lt;/p&gt;
&lt;p&gt;We're building and testing the components that might make a more collaborative, interoperable ecosystem possible.&lt;/p&gt;
&lt;p&gt;If you are a developer, designer, creator, freelancer, researcher or independent project owner, we'd like to hear from you.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bring your skills. Bring your GitHub. Bring your project. Start small.&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&quot;join-myzubster&quot;&gt;Join MyZubster&lt;/h4&gt;
&lt;p&gt;🌐 Website: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/&quot;&gt;https://www.myzubster.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🛒 Marketplace: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/community-marketplace.html&quot;&gt;https://www.myzubster.com/community-marketplace.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🤖 Zorgax: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/zorgax&quot;&gt;https://www.myzubster.com/zorgax&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;💻 GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🤝 Contributor opportunities: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/issues/1622&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster/issues/1622&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🧅 Independent node experiments: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/issues/1623&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster/issues/1623&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Question for the CoderLegion community:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you could connect your GitHub work, technical skills and independent projects to an open-source marketplace, what would you build or offer first?&lt;/p&gt;
&lt;p&gt;Share your ideas in the comments.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;#OpenSource #GitHub #Developers #Docker #AI #Decentralization #Marketplace&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/31576/myzubster-from-github-contributions-decentralized-marketplace-skills-projects-nodes</guid>
<pubDate>Sun, 18 Oct 2026 04:06:19 +0000</pubDate>
</item>
<item>
<title>Developer Weekly Briefing — October 16, 2026</title>
<link>https://coderlegion.com/31352/developer-weekly-briefing-october-16-2026</link>
<description>&lt;p&gt;A week defined by two big ideas running in parallel: AI agents are breaking the infrastructure underneath them, and the security surface around developer workflows keeps growing. Both threads showed up in force. Here's what mattered.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;anthropic-hit-30-000-merges-a-day-and-git-couldn-t-keep-up-so-it-built-scion&quot;&gt;Anthropic hit 30,000 merges a day, and Git couldn't keep up — so it built Scion&lt;/h3&gt;
&lt;p&gt;By September 2026, Anthropic was averaging 30,000 merged changes a day, up from 2,500 in May. Its main branch history had grown close to 100 GB. CI alone required 25 million checkouts a day, and at peak the team ran several hundred Git mirrors just to keep up. Standard workarounds stopped working. So a seven-person team built a replacement from scratch.&lt;/p&gt;
&lt;p&gt;Scion is Anthropic's internal version control system. The design is built for always-online, agent-heavy workloads rather than Git's original model of offline, occasional human pushes. Servers handle commits, merges, rebases, and diffs. Clients keep a small local cache. Commits are stored as changesets that scale with the size of the change, not the size of the repo. Cache hit rates are above 99% at each of the three tiers. The result: checkouts take seconds instead of minutes, use about 200 times less CPU and memory than the old mirror fleet, and recover 25% of CI capacity.&lt;/p&gt;
&lt;p&gt;Anthropic says Scion only makes sense for very large monorepos and has no plans to release it — but it wants to share the ideas with GitHub, GitLab, and the open source community. Last week's briefing covered GitHub's infrastructure rebuild to handle agent-scale load. This week, Anthropic said: we got there first, and we had to build something new to do it.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/anthropic-builds-its-own-source-control-after-ai-agents-outgrow-git/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;gitlab-patches-a-cvss-10-update-now&quot;&gt;GitLab patches a CVSS 10 — update now&lt;/h3&gt;
&lt;p&gt;A critical vulnerability in GitLab's CI/CD regex engine, CVE-2026-97229, got a perfect CVSS score of 10.0. An unauthenticated attacker could send a crafted regex in a CI/CD configuration and execute arbitrary code on the server — which typically holds source code, pipeline definitions, and production secrets. GitLab shipped fixes in versions 19.4.2, 19.3.5, and 19.2.8 on October 12. GitLab.com is already patched. Dedicated customers need no action. Self-managed instances need to upgrade now. The release also covers 23 other vulnerabilities, including an 8.7-rated prompt injection in GitLab Duo Agent Platform.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/gitlab-fixes-cvss-10-flaw-in-ci-cd-regex-engine-plus-23-other-vulnerabilities/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;github-now-records-who-pushed-every-commit&quot;&gt;GitHub now records who pushed every commit&lt;/h3&gt;
&lt;p&gt;Git has always let developers set their own name and email in commits — metadata that's trivially spoofed. GitHub's new push attribution feature records the authenticated account that actually pushed each commit, separate from the author and committer fields. A new repository ruleset, &quot;Committer must match pusher,&quot; can block pushes where the committer's email doesn't match the pusher's verified addresses. The practical benefit: bots and agents often push commits under a human's name. This makes that visible. It's in limited public preview for GitHub Enterprise. Before enabling the enforcement rule, audit your release bots, shared tokens, and any workflow that pushes on behalf of someone else — the rule will break those if you don't.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/github-ties-every-commit-to-the-account-that-pushed-it/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;github-is-pushing-teams-off-classic-pats-here-s-the-new-permission-model&quot;&gt;GitHub is pushing teams off classic PATs — here's the new permission model&lt;/h3&gt;
&lt;p&gt;GitHub announced narrowed app permissions aimed at getting teams off classic personal access tokens. Classic PATs have been a persistent weak spot: long-lived, often over-scoped, and easy to forget once they're embedded in a workflow. The new fine-grained permissions limit what any given token or GitHub App can access. If your team still uses classic PATs in automation, this is a push to move. The transition won't happen overnight, but the direction is clear.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/github-narrows-app-permissions-to-pull-teams-off-classic-pats/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;npm-gives-unused-trusted-publishing-configurations-48-hours-to-prove-themselves&quot;&gt;npm gives unused trusted publishing configurations 48 hours to prove themselves&lt;/h3&gt;
&lt;p&gt;npm's trusted publishing feature ties release authority to a repository or project name. That's useful until the name changes hands — an abandoned or reorganized repo that still has a trusted configuration is exactly where supply chain attacks start. npm's fix: any configuration that doesn't complete a successful publish within 48 hours of creation expires. Once it publishes successfully, the expiration goes away. The practical change: create your trusted publishing configuration when you're ready to publish, not during setup. If it expires, recreate it.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/npm-puts-a-48-hour-clock-on-unused-trusted-publishing-configurations/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;claude-platform-now-sends-agent-traces-to-your-observability-stack&quot;&gt;Claude Platform now sends agent traces to your observability stack&lt;/h3&gt;
&lt;p&gt;Anthropic added native OpenTelemetry trace export to the Claude Platform, in public beta. It works with the Messages API, Claude Managed Agents, and the Claude SDKs. Each trace includes duration, status, token counts, the model used, tool names, and request IDs. Teams can also enable full content export, which adds prompts, responses, and tool inputs and outputs. Setup for the Messages API and Managed Agents requires no application code changes — just configure an export destination in the Claude Console. The feature supports any OTLP-compatible backend; Anthropic has published guides for 12 partners, including Datadog, Grafana, Honeycomb, Langfuse, New Relic, and Splunk. The practical value: agents make several model calls, tool calls, and retries per request, and failures in that chain are hard to trace without instrumentation. This is the instrumentation.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/claude-platform-now-sends-agent-traces-straight-to-your-observability-stack/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;figma-gives-ai-agents-a-spec-sheet-and-code-layers-land-on-the-canvas&quot;&gt;Figma gives AI agents a spec sheet and code layers land on the canvas&lt;/h3&gt;
&lt;p&gt;Figma shipped two features worth tracking. Specs is a Markdown editor — on canvas or as a standalone file — where teams write requirements, design rules, and agent instructions. It can reference canvas elements, pull context from a connected GitHub repo, and embed diagrams and code. On the development side, Code Layers lets teams place running, code-backed prototypes directly in a Figma file. Code can come from a GitHub repo, a local folder, a live website, or an AI coding tool. Claude Code gets a round-trip: work from Claude Code can land in Figma, and design changes can be pulled back into the codebase through MCP. Both features are in open beta.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops-hd5ff.sevalla.app/figma-gives-ai-agents-a-spec-sheet-and-developers-a-shared-canvas&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;also-from-this-week-1&quot;&gt;Also from this week&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloudflare acquires Deno's team to build self-hosted Workers.&lt;/strong&gt; Cloudflare is hiring Ryan Dahl and the Deno team to make workerd, the open-source Workers runtime, production-viable for self-hosted deployments. Deno Deploy shuts down in six months. Deno runtime gets one more year of maintenance releases. JSR keeps running. If you're on Deno Deploy, start planning the move now. &lt;a rel=&quot;nofollow&quot; href=&quot;https://devops-hd5ff.sevalla.app/cloudflare-brings-the-deno-team-in-to-make-self-hosted-workers-practical&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Microsoft launches Decision-1, a fast, cheap decision-scoring model.&lt;/strong&gt; Built on post-trained Qwen3.5-9B, Decision-1 takes a fixed set of answers and returns calibrated probabilities in a single API call. It's aimed at routing, classification, and workflow control — the &quot;System One&quot; decisions in an agent pipeline. Available in Microsoft Foundry and through OpenRouter at $0.042 per million input tokens. &lt;a rel=&quot;nofollow&quot; href=&quot;https://techstrong.ai/features/microsoft-takes-aim-at-jev-with-a-fast-cheap-decision-model/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nvidia hands Run:ai to the open source community.&lt;/strong&gt; The GPU orchestration platform Nvidia acquired in 2024 is going open source. For teams managing GPU workloads for AI training and inference, this matters. &lt;a rel=&quot;nofollow&quot; href=&quot;http://techstrong.ai/articles/nvidia-hands-runai-to-the-open-source-community/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SpaceX bundles Grok, Cursor, and X Premium into one subscription.&lt;/strong&gt; The $30/month Premium tier combines Grok, Cursor Pro, and X Premium+ — tools that would cost about $90 separately. The catch: Grok and Cursor share a usage pool, so AI chat and coding work against the same weekly limit. Dev teams should audit that tradeoff before committing. &lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/one-bill-for-grok-cursor-and-x-what-spacexs-bundle-means-for-dev&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI doesn't replace your thinking — it raises the bar for it.&lt;/strong&gt; My latest for Insights From Analytics: the patterns I keep seeing when professionals struggle to get real value from AI, and what changes when they fix them. &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.insightsfromanalytics.com/post/ai-doesn-t-replace-your-thinking-it-raises-the-bar-for-it&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;developer-spotlights-this-week&quot;&gt;Developer Spotlights this week&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Bryan MacLee&lt;/strong&gt; drives an oil and gas truck in Vernal, Utah, and builds his own programming language on the side. SCRML is a full-stack language for the browser — the compiler handles the wiring between frontend and backend that developers normally manage by hand. Version 0.8 is out. Adoption is near zero, by his own description on the project site. He's building it anyway. A good conversation about what it takes to build something nobody's using yet.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/31246&quot;&gt;Watch the conversation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jonathan Gordon&lt;/strong&gt; spent decades building developer tools at Google, Apple, Microsoft, Oracle, and SAP. His warning: AI-generated code often has error handling that &quot;puts nothing in the catch block.&quot; Users find out when buttons stop working. His rule: &quot;We can't just let AI build the software by itself.&quot; The full conversation is a useful counterweight to the vibe coding conversation.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/30873&quot;&gt;Watch the conversation&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The through-line this week: agents are breaking things at the infrastructure layer, and security controls designed for human developers don't hold up at agent scale. Anthropic had to build a new VCS. GitHub is adding authentication that was never needed when a human was always at the keyboard. The same pressure is showing up everywhere.&lt;/p&gt;
&lt;p&gt;See you next Friday.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Developer Weekly Briefing is published every Friday on &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com&quot;&gt;Coder Legion&lt;/a&gt;. Written by &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Tom+Smith&quot;&gt;Tom Smith&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/31352/developer-weekly-briefing-october-16-2026</guid>
<pubDate>Fri, 16 Oct 2026 12:28:25 +0000</pubDate>
</item>
<item>
<title>My GitHub Sponsors Is Live: Help Me Build Creative Tools Blind People Can Actually Use</title>
<link>https://coderlegion.com/31100/my-github-sponsors-is-live-help-me-build-creative-tools-blind-people-can-actually-use</link>
<description>&lt;p&gt;After months of waiting, my GitHub Sponsors profile is finally live! 🎉&lt;/p&gt;
&lt;h3 id=&quot;who-i-am&quot;&gt;Who I am&lt;/h3&gt;
&lt;p&gt;I'm Demir Ajvazi, a blind developer from Serbia. I've been using the JAWS screen reader for about 20 years. For most of that time, I've watched creative software lock out people like me: professional video, audio and photo editors are nearly impossible to use with a screen reader.&lt;/p&gt;
&lt;h3 id=&quot;what-i-m-building&quot;&gt;What I'm building&lt;/h3&gt;
&lt;p&gt;So I started building the &lt;strong&gt;Ultra Creative Suite&lt;/strong&gt;: open-source creative tools designed from the ground up to work equally well for blind and sighted users. Not a stripped-down &quot;accessible mode&quot;, and not a workaround, but real tools that both blind and sighted creators can use side by side.&lt;/p&gt;
&lt;p&gt;Alongside the suite, I'm working on other accessible tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;UltraShield&lt;/strong&gt;: an accessible digital self-defense app for Windows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ultra Uninstaller&lt;/strong&gt;: a Windows uninstaller and cleaner that is fully usable with a screen reader&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ultra Bridge&lt;/strong&gt;: a JAWS and NVDA command-mapping helper&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can find everything here: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/demirajvazi10-max&quot;&gt;github.com/demirajvazi10-max&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;how-you-can-help&quot;&gt;How you can help&lt;/h3&gt;
&lt;p&gt;If you believe blind people deserve the same creative tools as everyone else, you can now support my work directly:&lt;/p&gt;
&lt;p&gt;👉 &lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/sponsors/demirajvazi10-max&quot;&gt;github.com/sponsors/demirajvazi10-max&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Monthly sponsorships start at $3, and one-time support is welcome too. Every contribution goes directly into development and keeps everything free and open source.&lt;/p&gt;
&lt;p&gt;Can't sponsor? That's completely fine. Sharing this post, starring a repo, or trying the apps with a screen reader and telling me what doesn't work helps just as much.&lt;/p&gt;
&lt;p&gt;Thank you for reading!&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/31100/my-github-sponsors-is-live-help-me-build-creative-tools-blind-people-can-actually-use</guid>
<pubDate>Wed, 14 Oct 2026 16:46:58 +0000</pubDate>
</item>
<item>
<title>Interoperable Contributor Evidence: From Paste Links to Verifiable Digital Passports</title>
<link>https://coderlegion.com/30878/interoperable-contributor-evidence-from-paste-links-to-verifiable-digital-passports</link>
<description>&lt;h2 id=&quot;interoperable-contributor-evidence-from-paste-links-to-verifiable-digital-passports&quot;&gt;Interoperable Contributor Evidence: From Paste Links to Verifiable Digital Passports&lt;/h2&gt;
&lt;p&gt;Open-source and contributor ecosystems have a familiar problem: useful work happens across many systems, but recognition, verification, and reward often remain trapped inside one platform.&lt;/p&gt;
&lt;p&gt;A developer may submit a pull request on GitHub, publish a technical note on a paste service, share a reproducible command transcript, run an automation bot, or provide a review that improves a project’s safety. Each item may be valuable. None should automatically be treated as trustworthy merely because it has a URL.&lt;/p&gt;
&lt;p&gt;The challenge is not to centralise every contributor’s data. It is to make evidence portable, reviewable, privacy-aware, and interoperable.&lt;/p&gt;
&lt;p&gt;This is the direction behind a contributor-evidence model for Coder Legion: a system where external references can support a contribution, while identity, review status, and public visibility remain under explicit control.&lt;/p&gt;
&lt;h3 id=&quot;a-link-is-not-evidence-by-itself&quot;&gt;A link is not evidence by itself&lt;/h3&gt;
&lt;p&gt;A Pastebin URL, GitHub issue, deployment log, or repository commit can be useful context. But a URL alone has important limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the content behind it can change or disappear;&lt;/li&gt;
&lt;li&gt;access can be restricted later;&lt;/li&gt;
&lt;li&gt;the author is not automatically the contributor;&lt;/li&gt;
&lt;li&gt;the link does not express review status;&lt;/li&gt;
&lt;li&gt;copying a link does not prove integrity.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first design rule is simple:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;External content is a reference. Evidence is a reference plus integrity, provenance, and review context.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead of storing only:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;url&quot;: &quot;https://pastebin.com/example&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;an interoperable contribution package should record a stable representation:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;source&quot;: {
    &quot;kind&quot;: &quot;paste&quot;,
    &quot;url&quot;: &quot;https://pastebin.com/example&quot;,
    &quot;retrievedAt&quot;: &quot;2026-10-13T00:00:00.000Z&quot;
  },
  &quot;integrity&quot;: {
    &quot;algorithm&quot;: &quot;sha256&quot;,
    &quot;digest&quot;: &quot;…&quot;
  },
  &quot;contributor&quot;: {
    &quot;subject&quot;: &quot;contributor-identifier&quot;
  },
  &quot;claim&quot;: {
    &quot;type&quot;: &quot;technical-evidence&quot;,
    &quot;summary&quot;: &quot;Reproduced and documented a CI regression.&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The URL tells reviewers where the work was published. The digest tells them whether the reviewed content is still the same content.&lt;/p&gt;
&lt;h3 id=&quot;paste-interoperability-without-trusting-the-paste-service&quot;&gt;Paste interoperability without trusting the paste service&lt;/h3&gt;
&lt;p&gt;“Pastebin interoperability” should not mean granting a third-party paste service access to contributor accounts, importing credentials, or treating a paste as an authenticated identity provider.&lt;/p&gt;
&lt;p&gt;A safer model is deliberately narrow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A contributor submits a public URL and a short description.&lt;/li&gt;
&lt;li&gt;The system retrieves or the contributor supplies the content snapshot.&lt;/li&gt;
&lt;li&gt;The snapshot is canonicalised and hashed.&lt;/li&gt;
&lt;li&gt;The contribution stores the URL, hash, timestamps, and declared relationship to the work.&lt;/li&gt;
&lt;li&gt;A reviewer verifies relevance and marks the contribution’s status.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The system can support paste services, GitHub gists, static documents, issue threads, release notes, and self-hosted technical notes through the same reference shape.&lt;/p&gt;
&lt;p&gt;This avoids creating a special trust model for one platform. The interoperability layer only needs to understand a source type, a URL, an integrity digest, and a retention policy.&lt;/p&gt;
&lt;h3 id=&quot;the-contribution-lifecycle&quot;&gt;The contribution lifecycle&lt;/h3&gt;
&lt;p&gt;A useful contribution record should distinguish between submission and verification.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Submitted → Under review → Verified → Rewarded
                     ↘ Rejected / Needs clarification
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The state is important because a public reference may be legitimate but still insufficient for a specific claim.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“I documented a reproducible build failure” can be supported by a paste containing logs and steps.&lt;/li&gt;
&lt;li&gt;“I fixed the failure” requires a linked patch, pull request, or verified commit.&lt;/li&gt;
&lt;li&gt;“I should receive a reward” requires an explicit policy decision, not just a valid hash.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A clean data model prevents a common mistake: confusing evidence storage with automated approval.&lt;/p&gt;
&lt;h3 id=&quot;digital-passports-for-people-and-bots&quot;&gt;Digital passports for people and bots&lt;/h3&gt;
&lt;p&gt;Contributor ecosystems increasingly include both humans and automation.&lt;/p&gt;
&lt;p&gt;A human contributor may submit documentation, a patch, a review, or a research note. A bot may run scheduled checks, produce reproducible reports, classify issues, or monitor a source for changes.&lt;/p&gt;
&lt;p&gt;They should not have identical permissions, but they can share a common public-verification model.&lt;/p&gt;
&lt;p&gt;A digital passport can expose a deliberately limited set of fields:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;passportVersion&quot;: 1,
  &quot;subjectType&quot;: &quot;human-or-bot&quot;,
  &quot;displayName&quot;: &quot;Example Contributor&quot;,
  &quot;capabilities&quot;: [&quot;ci-verification&quot;, &quot;evidence-reporting&quot;],
  &quot;status&quot;: &quot;ACTIVE&quot;,
  &quot;verifiedContributions&quot;: [
    {
      &quot;contributionId&quot;: &quot;contribution-123&quot;,
      &quot;category&quot;: &quot;technical-evidence&quot;,
      &quot;status&quot;: &quot;VERIFIED&quot;,
      &quot;reference&quot;: &quot;https://example.org/evidence&quot;,
      &quot;reviewedAt&quot;: &quot;2026-10-13T00:00:00.000Z&quot;
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The public projection must be an allowlist, not a copy of an internal database record.&lt;/p&gt;
&lt;p&gt;That means deliberately excluding:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;owner identifiers;&lt;/li&gt;
&lt;li&gt;internal reviewer notes;&lt;/li&gt;
&lt;li&gt;ledger references;&lt;/li&gt;
&lt;li&gt;revocation rationale;&lt;/li&gt;
&lt;li&gt;API keys, tokens, private keys, seeds, passwords, and credentials;&lt;/li&gt;
&lt;li&gt;unpublished metadata.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The rule is straightforward: public passports expose provenance, not secrets.&lt;/p&gt;
&lt;h3 id=&quot;why-bots-need-separate-ownership-boundaries&quot;&gt;Why bots need separate ownership boundaries&lt;/h3&gt;
&lt;p&gt;A bot passport must not become a way to create anonymous privileged automation.&lt;/p&gt;
&lt;p&gt;The minimum safeguards are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;authenticated creation;&lt;/li&gt;
&lt;li&gt;explicit owner association;&lt;/li&gt;
&lt;li&gt;owner-scoped listing and revocation;&lt;/li&gt;
&lt;li&gt;rejection of unknown input fields;&lt;/li&gt;
&lt;li&gt;rejection of secret-bearing fields;&lt;/li&gt;
&lt;li&gt;database availability checks on routes;&lt;/li&gt;
&lt;li&gt;public responses built from an explicit allowlist.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A bot can be publicly described as capable of “CI verification” or “evidence reporting.” It should never publish the token, webhook secret, internal owner ID, or private operational notes that make it work.&lt;/p&gt;
&lt;p&gt;This is especially important when automation interacts with external sources. A bot may retrieve a public paste or repository artifact, but its credentials must remain entirely outside the evidence record.&lt;/p&gt;
&lt;h3 id=&quot;portable-evidence-packages&quot;&gt;Portable evidence packages&lt;/h3&gt;
&lt;p&gt;The long-term goal is not a platform-specific badge. It is a portable evidence package that can move between communities.&lt;/p&gt;
&lt;p&gt;A practical package can include:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;schema&quot;: &quot;coder-legion.contribution-evidence.v1&quot;,
  &quot;contributionId&quot;: &quot;contribution-123&quot;,
  &quot;subject&quot;: {
    &quot;type&quot;: &quot;human&quot;,
    &quot;id&quot;: &quot;public-subject-id&quot;
  },
  &quot;claim&quot;: {
    &quot;category&quot;: &quot;documentation&quot;,
    &quot;summary&quot;: &quot;Produced a reproducible guide for a CI issue.&quot;
  },
  &quot;sources&quot;: [
    {
      &quot;kind&quot;: &quot;paste&quot;,
      &quot;url&quot;: &quot;https://pastebin.com/example&quot;,
      &quot;sha256&quot;: &quot;…&quot;
    },
    {
      &quot;kind&quot;: &quot;pull-request&quot;,
      &quot;url&quot;: &quot;https://github.com/example/project/pull/42&quot;
    }
  ],
  &quot;review&quot;: {
    &quot;status&quot;: &quot;VERIFIED&quot;,
    &quot;reviewedAt&quot;: &quot;2026-10-13T00:00:00.000Z&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The package does not need a blockchain transaction to be useful. It can be signed, stored, exported, reviewed, and re-verified independently.&lt;/p&gt;
&lt;p&gt;If an ecosystem later decides to anchor a digest in a ledger, that should be an additional attestation layer—not a substitute for review, source integrity, or privacy boundaries.&lt;/p&gt;
&lt;h3 id=&quot;interoperability-is-a-protocol-decision-not-a-scraping-project&quot;&gt;Interoperability is a protocol decision, not a scraping project&lt;/h3&gt;
&lt;p&gt;A resilient integration should avoid assumptions such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;every contributor has a GitHub account;&lt;/li&gt;
&lt;li&gt;every paste service has a stable API;&lt;/li&gt;
&lt;li&gt;all external content remains available forever;&lt;/li&gt;
&lt;li&gt;a URL proves authorship;&lt;/li&gt;
&lt;li&gt;a hash proves truth;&lt;/li&gt;
&lt;li&gt;a platform’s internal reputation score is portable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The portable part should be small and durable:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Field &lt;/th&gt;&lt;th&gt;Purpose&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Schema version &lt;/td&gt;&lt;td&gt;Defines how to interpret the package&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Subject identifier &lt;/td&gt;&lt;td&gt;Connects evidence to a public identity&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Source URL &lt;/td&gt;&lt;td&gt;Preserves a human-readable reference&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content digest &lt;/td&gt;&lt;td&gt;Detects content changes&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Timestamp &lt;/td&gt;&lt;td&gt;Records when the evidence was observed&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Claim &lt;/td&gt;&lt;td&gt;States what the evidence is meant to support&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Review status &lt;/td&gt;&lt;td&gt;Separates submission from verification&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Public projection &lt;/td&gt;&lt;td&gt;Limits what is disclosed&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Everything else should remain optional, private, or platform-specific.&lt;/p&gt;
&lt;h3 id=&quot;a-practical-implementation-path&quot;&gt;A practical implementation path&lt;/h3&gt;
&lt;p&gt;For Coder Legion, the implementation can progress in small, reviewable steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Define a source adapter interface&lt;/strong&gt;&lt;br&gt;
Support paste URLs, GitHub links, and uploaded evidence through the same schema.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Store immutable integrity metadata&lt;/strong&gt;&lt;br&gt;
Hash the reviewed content snapshot and retain retrieval timestamps.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Add contributor review states&lt;/strong&gt;&lt;br&gt;
Keep &lt;code&gt;SUBMITTED&lt;/code&gt;, &lt;code&gt;UNDER_REVIEW&lt;/code&gt;, &lt;code&gt;VERIFIED&lt;/code&gt;, &lt;code&gt;REJECTED&lt;/code&gt;, and &lt;code&gt;REWARDED&lt;/code&gt; distinct.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Expose a privacy-safe public passport&lt;/strong&gt;&lt;br&gt;
Publish only verified contribution summaries through a strict allowlist.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Add bot passports with ownership controls&lt;/strong&gt;&lt;br&gt;
Let automation identify its scope and capabilities without exposing its secrets.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Export portable evidence packages&lt;/strong&gt;&lt;br&gt;
Make evidence inspectable outside the originating application.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Anchor only when useful&lt;/strong&gt;&lt;br&gt;
Add ledger or on-chain attestations for specific high-value events, never as a default requirement.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;what-success-looks-like&quot;&gt;What success looks like&lt;/h3&gt;
&lt;p&gt;A healthy contributor system does not ask people to trust an opaque score.&lt;/p&gt;
&lt;p&gt;It lets a reviewer answer concrete questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What work is being claimed?&lt;/li&gt;
&lt;li&gt;Where is the supporting material?&lt;/li&gt;
&lt;li&gt;Has the content changed since review?&lt;/li&gt;
&lt;li&gt;Who reviewed it?&lt;/li&gt;
&lt;li&gt;What is publicly visible?&lt;/li&gt;
&lt;li&gt;Can the contributor export the evidence elsewhere?&lt;/li&gt;
&lt;li&gt;Is the automation involved accountable to an owner without exposing credentials?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the real interoperability target.&lt;/p&gt;
&lt;p&gt;Paste services, Git repositories, bots, and community platforms will continue to change. A contributor’s evidence should not become invalid simply because one interface disappears. By treating sources as references, hashes as integrity checks, review as a separate decision, and passports as privacy-safe projections, Coder Legion can recognise work without trapping contributors inside a single system.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/30878/interoperable-contributor-evidence-from-paste-links-to-verifiable-digital-passports</guid>
<pubDate>Tue, 13 Oct 2026 04:33:44 +0000</pubDate>
</item>
<item>
<title>Your Repo Can Now Tell People It Cares About Accessibility</title>
<link>https://coderlegion.com/30853/your-repo-can-now-tell-people-it-cares-about-accessibility</link>
<description>&lt;p&gt;Open any repository on GitHub and you see the same tabs: README, Code of Conduct, Contributing, Security. As of October 1, there can be one more: &lt;strong&gt;Accessibility&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;GitHub now &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.blog/changelog/2026-10-01-accessibility-statements-highlighted-on-repository-overview/&quot;&gt;highlights an &lt;code&gt;ACCESSIBILITY.md&lt;/code&gt; file&lt;/a&gt; on the repository overview and links to it from the About section. It is a small change, and it puts accessibility on the front page of your project, next to the files every contributor already reads.&lt;/p&gt;
&lt;p&gt;We added one to &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/BRIKEV/twd&quot;&gt;TWD&lt;/a&gt; right away. Here is why, and what we learned.&lt;/p&gt;
&lt;h3 id=&quot;why-it-matters&quot;&gt;Why it matters&lt;/h3&gt;
&lt;p&gt;Picture someone who uses a screen reader trying out your library. Something in the docs doesn't work for them. Today, they have to guess: is this a known issue? Does anyone care? Where do I even report it?&lt;/p&gt;
&lt;p&gt;An accessibility page answers all three before they ask. It says this project takes accessibility seriously, here is what we have tested, and here is how to tell us when something gets in your way.&lt;/p&gt;
&lt;p&gt;It also helps the other side. Contributors see, in plain words, what is expected of a change that touches the UI.&lt;/p&gt;
&lt;h3 id=&quot;what-we-put-in-ours&quot;&gt;What we put in ours&lt;/h3&gt;
&lt;p&gt;TWD had a head start. In June we had it independently audited against WCAG 2.2 AA, fixed what the auditors found, and published a formal &lt;a rel=&quot;nofollow&quot; href=&quot;https://twd.dev/accessibility-statement&quot;&gt;accessibility statement&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We expected to copy and paste that statement. We didn't. A formal statement is written for compliance. The GitHub page is written for people, so we wrote it in plain language around three ideas:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be honest about what was tested.&lt;/strong&gt; Our audit covered the sidebar and the main docs pages, using a keyboard and the NVDA screen reader. So that is what the page claims. For everything else, WCAG 2.2 AA is our goal, and we say so.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Make reporting easy.&lt;/strong&gt; Open an issue, send an email, or ask in Discussions. No need to know which guideline is involved, and no need to share anything personal. We commit to replying within 5 business days.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tell contributors what good looks like.&lt;/strong&gt; Keep it usable with a keyboard, keep focus visible, don't rely on colour alone, and include light and dark screenshots with UI changes.&lt;/p&gt;
&lt;p&gt;You can read the result here: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/BRIKEV/twd/blob/main/ACCESSIBILITY.md&quot;&gt;TWD's ACCESSIBILITY.md&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;add-one-to-your-project&quot;&gt;Add one to your project&lt;/h3&gt;
&lt;p&gt;You don't need an audit to start. You need an honest page.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;ACCESSIBILITY.md&lt;/code&gt; in your repo root (or in &lt;code&gt;.github/&lt;/code&gt; or &lt;code&gt;docs/&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Start from &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/adding-an-accessibility-page-to-your-repository&quot;&gt;GitHub's template&lt;/a&gt;, or add it from your repo's &lt;strong&gt;Community Standards&lt;/strong&gt; page.&lt;/li&gt;
&lt;li&gt;Fill in the two sections that matter most: how to report a barrier, and what you have and haven't tested.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That's it. The tab appears on your repo's front page.&lt;/p&gt;
&lt;p&gt;Accessibility work usually happens out of sight. Now it has a place on your repo's front page, where users and contributors will see it.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/30853/your-repo-can-now-tell-people-it-cares-about-accessibility</guid>
<pubDate>Mon, 12 Oct 2026 18:17:21 +0000</pubDate>
</item>
<item>
<title>A Beginner’s Guide to Git and GitHub: From Installation to Your First Push</title>
<link>https://coderlegion.com/30826/a-beginners-guide-to-git-and-github-from-installation-to-your-first-push</link>
<description>&lt;p&gt;Starting my journey in &lt;strong&gt;Data Science, Analysis, and AI at LUXDevHQ&lt;/strong&gt; felt like learning a new language while trying to build a house. One of the most important tools I’ve discovered along the way is &lt;strong&gt;Version Control&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In this guide, I’ll walk you through:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Setting up Git Bash  &lt;/li&gt;
&lt;li&gt;Connecting Git to GitHub  &lt;/li&gt;
&lt;li&gt;Mastering essential &lt;strong&gt;push&lt;/strong&gt; and &lt;strong&gt;pull&lt;/strong&gt; commands  &lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;1-what-is-git-and-why-does-it-matter-&quot;&gt;1. What Is Git and Why Does It Matter?&lt;/h3&gt;
&lt;p&gt;Git is a &lt;strong&gt;Version Control System (VCS)&lt;/strong&gt;. Think of it as a &lt;em&gt;save-point system&lt;/em&gt; for your code.&lt;/p&gt;
&lt;h4 id=&quot;why-is-git-important-&quot;&gt;Why is Git important?&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;⏪ Time Travel&lt;/strong&gt; – If you break your code, you can roll back to a version that worked.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;🤝 Collaboration&lt;/strong&gt; – Multiple people can work on the same project without overwriting each other’s work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;🧪 Experimentation&lt;/strong&gt; – You can create &lt;em&gt;branches&lt;/em&gt; to try new features without affecting the main project.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;2-setting-up-your-environment&quot;&gt;2. Setting Up Your Environment&lt;/h3&gt;
&lt;h4 id=&quot;step-a-install-git-bash&quot;&gt;Step A: Install Git Bash&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;a rel=&quot;nofollow&quot; href=&quot;https://git-scm.com&quot;&gt;Git&lt;/a&gt; and download Git for your OS (I used Windows).&lt;/li&gt;
&lt;li&gt;Run the installer.  &lt;blockquote&gt;&lt;p&gt;💡 &lt;em&gt;Pro tip:&lt;/em&gt; You can keep the default settings for most options.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;After installation, search for &lt;strong&gt;Git Bash&lt;/strong&gt; in your applications. It looks like a terminal window.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;step-b-configure-your-identity&quot;&gt;Step B: Configure Your Identity&lt;/h4&gt;
&lt;p&gt;To let GitHub know who is uploading code, configure your global Git settings:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git config --global user.name &quot;Your Name&quot;
git config --global user.email *Emails are not allowed*
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;3-secure-your-connection-setting-up-ssh-keys&quot;&gt;3. Secure Your Connection: Setting Up SSH Keys&lt;/h3&gt;
&lt;p&gt;Using SSH is the professional standard. It’s more secure and saves you from typing your password every time you push code.&lt;/p&gt;
&lt;h4 id=&quot;step-1-generate-your-ssh-key&quot;&gt;Step 1: Generate Your SSH Key&lt;/h4&gt;
&lt;p&gt;Open Git Bash and enter (replace with your GitHub email):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ssh-keygen -t ed25519 -C *Emails are not allowed*
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;•File Location: Press Enter to use the default location.&lt;br&gt;
•Passphrase: As a beginner, I left this empty for convenience.&lt;/p&gt;
&lt;h4 id=&quot;step-2-add-key-to-the-ssh-agent&quot;&gt;Step 2: Add Key to the SSH Agent&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;eval &quot;$(ssh-agent -s)&quot;
ssh-add ~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;step-3-add-the-public-key-to-github&quot;&gt;Step 3: Add the Public Key to GitHub&lt;/h4&gt;
&lt;p&gt;1.Copy the key: &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cat ~/.ssh/id_ed25519.pub 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2.Go to GitHub: Settings → SSH and GPG keys → New SSH Key.&lt;/p&gt;
&lt;p&gt;3.Give it a name (e.g., &quot;My Learning Laptop&quot;) and paste your key into the &quot;Key&quot; box.&lt;/p&gt;
&lt;h4 id=&quot;step-4-test-the-connection&quot;&gt;Step 4: Test the Connection&lt;/h4&gt;
&lt;p&gt;Run: &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ssh -T *Emails are not allowed*
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Success Check! If you see &quot;Hi [YourUsername]! You've successfully authenticated&quot;, you are ready!&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;4-navigating-and-creating-your-project&quot;&gt;4. Navigating and Creating Your Project&lt;/h3&gt;
&lt;p&gt;Learning to navigate via Git Bash makes you much faster than using a mouse! Use these commands to create your first repository:&lt;br&gt;
•Check Location: &lt;strong&gt;pwd&lt;/strong&gt; (Print Working Directory).&lt;br&gt;
•Go to Desktop: &lt;strong&gt;cd Desktop&lt;/strong&gt;&lt;br&gt;
•Create Folder: &lt;strong&gt;mkdir my-first-repo&lt;/strong&gt;&lt;br&gt;
•Enter Folder: &lt;strong&gt;cd my-first-repo&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;5-tracking-changes-the-core-workflow-&quot;&gt;5. Tracking Changes (The Core Workflow)&lt;/h3&gt;
&lt;p&gt;Before sending code to GitHub, Git needs to &quot;track&quot; it locally. Run these inside your project folder:&lt;br&gt;
1.Initialize Git: &lt;strong&gt;git init&lt;/strong&gt; (Starts tracking the folder).&lt;br&gt;
2.Check Status: &lt;strong&gt;git status&lt;/strong&gt; (See what files Git notices).&lt;br&gt;
3.Add Files: &lt;strong&gt;git add .&lt;/strong&gt; (Stages all changes to be saved).&lt;br&gt;
4.Commit: &lt;strong&gt;git commit -m &quot;My first commit&quot;&lt;/strong&gt; (Creates the &quot;save point&quot;).&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;6-pushing-code-to-github&quot;&gt;6. Pushing Code to GitHub&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Pushing&lt;/strong&gt; sends your local save points to the cloud.&lt;/p&gt;
&lt;h4 id=&quot;step-a-create-the-repository-on-github-com&quot;&gt;Step A: Create the Repository on GitHub.com&lt;/h4&gt;
&lt;p&gt;1.Log into GitHub, click the + icon → New repository.&lt;br&gt;
2.Name it (e.g., my-first-project) and keep it Public.&lt;br&gt;
3.Important: Leave &quot;Add a README&quot; unchecked to avoid conflicts.&lt;br&gt;
4.Click Create repository.&lt;/p&gt;
&lt;h4 id=&quot;step-b-connect-and-push&quot;&gt;Step B: Connect and Push&lt;/h4&gt;
&lt;p&gt;On the GitHub setup page, click SSH and copy the URL. Then run these commands one by one:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git remote add origin *Emails are not allowed*:your-username/repo-name.git
git push -u origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;7-pulling-code-from-github&quot;&gt;7. Pulling Code from GitHub&lt;/h3&gt;
&lt;p&gt;If you work on a different computer, use Pull to download the latest updates from the cloud:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git pull origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-resources-to-keep-learning&quot;&gt;📚 Resources to Keep Learning&lt;/h3&gt;
&lt;p&gt;•&lt;a rel=&quot;nofollow&quot; href=&quot;https://git-scm.com/doc&quot;&gt;Official Git Documentation&lt;/a&gt;&lt;br&gt;
•&lt;a rel=&quot;nofollow&quot; href=&quot;https://skills.github.com/&quot;&gt;GitHub Skills: Interactive Courses&lt;/a&gt;&lt;br&gt;
•&lt;a rel=&quot;nofollow&quot; href=&quot;https://learngitbranching.js.org/&quot;&gt;Visualizing Git Commands (Game)&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;conclusion-congratulations-you-ve-just-set-up-a-professional-dev-workflow-git-can-be-tricky-at-first-but-keep-practicing-and-it-will-become-second-nature-if-you-ran-into-any-issues-drop-a-comment-below-and-let-s-help-each-other-out-&quot;&gt;Conclusion: Congratulations! You've just set up a professional dev workflow. Git can be tricky at first, but keep practicing and it will become second nature. If you ran into any issues, drop a comment below and let's help each other out!&lt;/h3&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/30826/a-beginners-guide-to-git-and-github-from-installation-to-your-first-push</guid>
<pubDate>Mon, 12 Oct 2026 16:20:10 +0000</pubDate>
</item>
<item>
<title>Interoperability by Evidence, Not by Copying Data: Coder Legion × Pastebin</title>
<link>https://coderlegion.com/30711/interoperability-by-evidence-not-by-copying-data-coder-legion-pastebin</link>
<description>&lt;h2 id=&quot;interoperability-by-evidence-not-by-copying-data-coder-legion-pastebin&quot;&gt;Interoperability by Evidence, Not by Copying Data: Coder Legion × Pastebin&lt;/h2&gt;
&lt;p&gt;Interoperability is often described as an integration problem: connect two platforms, move data between them, and call it done.&lt;/p&gt;
&lt;p&gt;For contributor systems, that is incomplete—and risky.&lt;/p&gt;
&lt;p&gt;When Coder Legion needs to recognise work published on Pastebin, the goal is not to copy a contributor’s content into another database. The goal is to create a verifiable, privacy-aware relationship between an external artifact and a contributor record.&lt;/p&gt;
&lt;p&gt;This is the design principle:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Keep the external artifact where it belongs. Store only the minimum evidence needed to verify its relationship to a contribution.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That principle gives us a practical interoperability model for Coder Legion and Pastebin.&lt;/p&gt;
&lt;h3 id=&quot;the-problem-with-na-ve-integrations&quot;&gt;The problem with naïve integrations&lt;/h3&gt;
&lt;p&gt;A naïve Pastebin integration usually does this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Accept a Pastebin URL.&lt;/li&gt;
&lt;li&gt;Fetch the paste.&lt;/li&gt;
&lt;li&gt;Store its full text in the application database.&lt;/li&gt;
&lt;li&gt;Attach it to a contributor profile.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It looks convenient, but it creates several problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It duplicates data that belongs to another service.&lt;/li&gt;
&lt;li&gt;It can copy personal, confidential, or accidentally published material.&lt;/li&gt;
&lt;li&gt;It makes retention and deletion responsibilities unclear.&lt;/li&gt;
&lt;li&gt;It turns a URL into a trust claim without proving what was actually observed.&lt;/li&gt;
&lt;li&gt;It cannot reliably distinguish a later-edited artifact from the one originally reviewed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A better model treats Pastebin as an external evidence source—not as a storage backend.&lt;/p&gt;
&lt;h3 id=&quot;a-small-verifiable-evidence-envelope&quot;&gt;A small, verifiable evidence envelope&lt;/h3&gt;
&lt;p&gt;Coder Legion can represent a Pastebin artifact with a compact evidence envelope:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;source&quot;: &quot;pastebin&quot;,
  &quot;canonicalUrl&quot;: &quot;https://pastebin.com/AbCdEf12&quot;,
  &quot;externalId&quot;: &quot;AbCdEf12&quot;,
  &quot;contentHash&quot;: &quot;sha256:...&quot;,
  &quot;contentLength&quot;: 1842,
  &quot;observedAt&quot;: &quot;2026-10-11T14:00:00.000Z&quot;,
  &quot;status&quot;: &quot;OBSERVED&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The application stores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the canonical external reference;&lt;/li&gt;
&lt;li&gt;a stable external identifier where available;&lt;/li&gt;
&lt;li&gt;a SHA-256 digest of the observed content;&lt;/li&gt;
&lt;li&gt;bounded metadata such as byte length and observation time;&lt;/li&gt;
&lt;li&gt;the verification state.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; store the full Pastebin text by default.&lt;/p&gt;
&lt;p&gt;This creates a durable claim:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;At a specific time, Coder Legion observed content at this external reference and calculated this digest.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is auditable without silently replicating the artifact.&lt;/p&gt;
&lt;h3 id=&quot;the-interoperability-flow&quot;&gt;The interoperability flow&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;flowchart TD
  A[&quot;Contributor submits Pastebin URL&quot;] --&amp;gt; B[&quot;Validate canonical URL&quot;]
  B --&amp;gt; C[&quot;Fetch permitted raw content&quot;]
  C --&amp;gt; D[&quot;Apply size and timeout limits&quot;]
  D --&amp;gt; E[&quot;Compute SHA-256 digest&quot;]
  E --&amp;gt; F[&quot;Create evidence record&quot;]
  F --&amp;gt; G[&quot;Link to contribution or passport&quot;]
  G --&amp;gt; H[&quot;Review / attest / reward&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The workflow is intentionally narrow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A contributor explicitly submits a Pastebin URL.&lt;/li&gt;
&lt;li&gt;Coder Legion validates the host, format, and canonical Paste ID.&lt;/li&gt;
&lt;li&gt;The bridge retrieves only the allowed raw representation.&lt;/li&gt;
&lt;li&gt;The service enforces a maximum size, a strict timeout, and no redirects.&lt;/li&gt;
&lt;li&gt;It computes a content hash.&lt;/li&gt;
&lt;li&gt;It records an evidence envelope linked to the contribution.&lt;/li&gt;
&lt;li&gt;A reviewer or defined policy can attest to it.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The external platform remains the source of the content. Coder Legion remains the source of the contribution and verification record.&lt;/p&gt;
&lt;h3 id=&quot;security-boundaries-are-part-of-interoperability&quot;&gt;Security boundaries are part of interoperability&lt;/h3&gt;
&lt;p&gt;Interoperability should not expand the attack surface.&lt;/p&gt;
&lt;p&gt;A Pastebin bridge should enforce rules such as:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Control &lt;/th&gt;&lt;th&gt;Why it matters&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Canonical host allowlist &lt;/td&gt;&lt;td&gt;Prevents arbitrary URL fetching and SSRF-style behaviour&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;HTTPS only &lt;/td&gt;&lt;td&gt;Protects retrieval integrity in transit&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;No redirects &lt;/td&gt;&lt;td&gt;Prevents a trusted-looking URL from reaching an untrusted destination&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Short timeout &lt;/td&gt;&lt;td&gt;Prevents the integration from becoming a reliability dependency&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Maximum response size &lt;/td&gt;&lt;td&gt;Prevents memory pressure and oversized imports&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Hash-only persistence &lt;/td&gt;&lt;td&gt;Avoids unnecessary content replication&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Explicit contributor consent &lt;/td&gt;&lt;td&gt;Ensures the contributor deliberately links the artifact&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Idempotency key &lt;/td&gt;&lt;td&gt;Prevents duplicate evidence records for the same contribution and digest&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A useful implementation shape is:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;const MAX_BYTES = 256 * 1024;
const TIMEOUT_MS = 5000;

async function observePastebinArtifact({ canonicalUrl }) {
  const response = await fetch(toRawPastebinUrl(canonicalUrl), {
    redirect: 'error',
    signal: AbortSignal.timeout(TIMEOUT_MS)
  });

  if (!response.ok) {
    throw new Error(`Pastebin observation failed: ${response.status}`);
  }

  const body = await readBounded(response.body, MAX_BYTES);

  return {
    canonicalUrl,
    contentHash: `sha256:${sha256(body)}`,
    contentLength: body.length,
    observedAt: new Date().toISOString(),
    status: 'OBSERVED'
  };
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The important detail is not the SDK. It is the boundary: content is observed, hashed, and discarded unless a separate policy explicitly authorises retention.&lt;/p&gt;
&lt;h3 id=&quot;contributor-passports-proving-participation-without-exposing-private-review-data&quot;&gt;Contributor passports: proving participation without exposing private review data&lt;/h3&gt;
&lt;p&gt;The contributor-facing result is a digital passport: a public, limited projection of verified work.&lt;/p&gt;
&lt;p&gt;A public passport can safely expose:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;contributionId&quot;: &quot;contrib_123&quot;,
  &quot;category&quot;: &quot;research&quot;,
  &quot;reference&quot;: &quot;https://pastebin.com/AbCdEf12&quot;,
  &quot;status&quot;: &quot;VERIFIED&quot;,
  &quot;reviewedAt&quot;: &quot;2026-10-11T14:12:00.000Z&quot;,
  &quot;evidence&quot;: {
    &quot;source&quot;: &quot;pastebin&quot;,
    &quot;contentHash&quot;: &quot;sha256:...&quot;,
    &quot;observedAt&quot;: &quot;2026-10-11T14:00:00.000Z&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It should not expose:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;reviewer identity;&lt;/li&gt;
&lt;li&gt;internal review notes;&lt;/li&gt;
&lt;li&gt;private ledger references;&lt;/li&gt;
&lt;li&gt;contributor authentication data;&lt;/li&gt;
&lt;li&gt;wallet secrets, API keys, or tokens;&lt;/li&gt;
&lt;li&gt;raw artifact text.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is why public serialization must use an explicit allowlist—not “return the database object and remove a few known fields.”&lt;/p&gt;
&lt;p&gt;Allowlisting makes the public contract deliberate and safe by default.&lt;/p&gt;
&lt;h3 id=&quot;bot-passports-use-the-same-trust-model&quot;&gt;Bot passports use the same trust model&lt;/h3&gt;
&lt;p&gt;Coder Legion can use the same architecture for automated contributors and bots.&lt;/p&gt;
&lt;p&gt;A bot passport can publish only accountable, non-secret facts:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;botId&quot;: &quot;bot_release_auditor&quot;,
  &quot;displayName&quot;: &quot;Release Auditor&quot;,
  &quot;releaseHash&quot;: &quot;sha256:...&quot;,
  &quot;capabilities&quot;: [&quot;repository-analysis&quot;, &quot;evidence-validation&quot;],
  &quot;status&quot;: &quot;ACTIVE&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The bot passport must reject secret-bearing input such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API keys;&lt;/li&gt;
&lt;li&gt;access tokens;&lt;/li&gt;
&lt;li&gt;private keys;&lt;/li&gt;
&lt;li&gt;webhook secrets;&lt;/li&gt;
&lt;li&gt;credentials;&lt;/li&gt;
&lt;li&gt;unknown fields.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That matters because interoperability is not only about exchanging data. It is also about preserving accountability across human and automated contributors.&lt;/p&gt;
&lt;h3 id=&quot;verification-not-publication&quot;&gt;Verification, not publication&lt;/h3&gt;
&lt;p&gt;A Pastebin reference is not automatically a verified contribution.&lt;/p&gt;
&lt;p&gt;The lifecycle should remain explicit:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;SUBMITTED → OBSERVED → REVIEWED → VERIFIED
                         ↘ REJECTED
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A hash proves that Coder Legion observed specific bytes. It does not prove authorship, accuracy, licensing, or value by itself.&lt;/p&gt;
&lt;p&gt;Those decisions belong to a review process, attestation policy, or contributor program. Keeping the states separate prevents a technical observation from being misrepresented as a human or economic endorsement.&lt;/p&gt;
&lt;h3 id=&quot;what-this-demonstrates&quot;&gt;What this demonstrates&lt;/h3&gt;
&lt;p&gt;The Coder Legion × Pastebin model demonstrates interoperability at three levels:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reference interoperability&lt;/strong&gt;&lt;br&gt;
An external Pastebin artifact can be linked through a canonical URL and stable identifier.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integrity interoperability&lt;/strong&gt;&lt;br&gt;
The observed content is represented by a reproducible digest, so later checks can detect change.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trust interoperability&lt;/strong&gt;&lt;br&gt;
The evidence can be linked to contributor or bot passports while retaining privacy boundaries and review states.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;No proprietary replication format is required. No private credentials need to be published. No external content needs to be silently copied.&lt;/p&gt;
&lt;h3 id=&quot;conclusion-1&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Good interoperability is not “import everything.”&lt;/p&gt;
&lt;p&gt;For Coder Legion and Pastebin, it means creating a narrow evidence bridge:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;contributor-initiated;&lt;/li&gt;
&lt;li&gt;canonical and bounded;&lt;/li&gt;
&lt;li&gt;hash-based;&lt;/li&gt;
&lt;li&gt;privacy-preserving;&lt;/li&gt;
&lt;li&gt;reviewable;&lt;/li&gt;
&lt;li&gt;compatible with both human contributors and bots.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That produces a stronger system than a bulk sync: one where external work remains external, while the evidence of contribution remains verifiable.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/30711/interoperability-by-evidence-not-by-copying-data-coder-legion-pastebin</guid>
<pubDate>Sun, 11 Oct 2026 14:23:05 +0000</pubDate>
</item>
<item>
<title>Developer Weekly Briefing — October 9, 2026</title>
<link>https://coderlegion.com/30471/developer-weekly-briefing-october-9-2026</link>
<description>&lt;p&gt;A lighter week on the conference calendar, but a solid set of stories — agent infrastructure, open source governance, and two developer conversations worth your time. Here's what mattered.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;coding-agents-broke-git-s-scaling-math-github-is-rebuilding-to-keep-up-&quot;&gt;Coding agents broke Git's scaling math. GitHub is rebuilding to keep up.&lt;/h3&gt;
&lt;p&gt;GitHub processed 7.38 billion commits in September 2026 — five times the volume from a year earlier. Pushes are up 4.9x. Actions runs are up 4x. The driver isn't a surge in human developers. It's agents, and they use Git differently. A developer pushes a few times a day. An agent might run dozens of commit cycles in the same window, often in parallel, often across multiple repos at once. The single-writer-per-repo model that Git has run on for 20 years doesn't hold up under that pattern. GitHub is addressing it with a new storage backend that benchmarks at up to 35x write throughput improvement in internal testing, a rewrite of its replication layer to reduce latency and improve durability under load, and intelligent caching that treats agent-generated and human-generated traffic differently. The engineering post is a useful read for anyone whose pipelines are already feeling the pressure.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/coding-agents-broke-gits-scaling-math-github-is-rebuilding-to-keep-up/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;a-free-tool-that-maps-every-ai-agent-in-your-entra-id-and-okta-and-asks-if-you-can-recover&quot;&gt;A free tool that maps every AI agent in your Entra ID and Okta — and asks if you can recover&lt;/h3&gt;
&lt;p&gt;Ask your IT team how many AI agents are running in your org. Watch the pause. HYCU's aiR Graph is now generally available and free to any organization. It connects read-only to Microsoft Entra ID and Okta, maps every agent's OAuth scopes and write access, and ranks agents that can reach systems with no backup highest. The scoring is deterministic — no LLM in the chain, which means two runs on the same tenant produce the same answer, and every finding traces back to an identity field. HYCU's CPO Anant Chintamaneni put it directly: &quot;Run it twice on the same tenant, and you get the same answer.&quot; That matters when you're taking the findings to an auditor. The tool also surfaces something easy to miss: agents that have been retired while the account behind them stays live. A working credential with no one watching it.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/30641/hycus-free-air-graph-maps-every-agent-in-entra-id-and-okta-then-asks-if-you-can-recover&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-an-open-source-mod-for-claude-code-says-about-where-agent-tooling-is-heading&quot;&gt;What an open source mod for Claude Code says about where agent tooling is heading&lt;/h3&gt;
&lt;p&gt;A developer named Anji Xu built a floating status card for Claude Code that lives above the terminal prompt. It shows context window usage, five-hour and seven-day rate limits with countdown timers, running session cost, current git branch, and GitHub Actions status for the active branch — updating every 10 seconds while a run is live. It uses Claude Code's new mod system, which is still early access. The tool itself is a personal gauge. The idea behind it points somewhere bigger: as agents run longer jobs, the person at the keyboard needs the same telemetry they already expect from build systems and production services. The bigger job for platform teams is getting that data into shared systems, not just one developer's terminal.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/open-source-mod-brings-rate-limits-costs-and-ci-status-into-view-for-claude-code-users/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;open-source-summit-europe-311-hours-per-release-and-a-kernel-sandbox-for-ai-agents&quot;&gt;Open Source Summit Europe: 311 hours per release and a kernel sandbox for AI agents&lt;/h3&gt;
&lt;p&gt;Three numbers from Prague worth holding onto. Forty-eight percent of organizations maintain private open source forks. Those that do spend an average of 311 hours per release cycle patching 9.5 forks. And the EU Cyber Resilience Act's mandatory reporting requirements took effect in September — which is starting to make that math uncomfortable. Ericsson's response: eliminate the forks, push 1,400-plus fixes upstream. The broader summit news included nono, a kernel-enforced sandbox for AI agents from Sigstore creator Luke Hinds. When an agent tries to open a file or reach the network, the kernel checks it against a policy written in code. The model can't talk its way around it. Six months in, nono has 328,278 installs. The through-line from Prague: enforcement is moving down the stack.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/30184/311-hours-a-release-1400-fixes-upstream-what-open-source-summit-europe-2026-means-for-developers&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;developer-spotlights-this-week-1&quot;&gt;Developer Spotlights this week&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Anders Dahl Rasmussen&lt;/strong&gt; works as a supervisor at Oslo Airport. At night, he builds AI products. &quot;I'm not technical at all,&quot; he said. He's built 14 tools, reviews every AI-generated page before it goes live, and has one standing rule for anyone starting out: set &quot;some hard rules with your AI because AI makes mistakes.&quot; His framing for the division of labor: &quot;I take all the shot calling and he builds.&quot; A useful conversation for anyone thinking about where the human check belongs.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/30348/&quot;&gt;Watch the conversation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kevin Martínez&lt;/strong&gt;, software architect and frontend chapter lead at Orbitant, makes a point that's easy to understate: &quot;now it's super easy to code but it's harder to choose what's the right code or what's the right test.&quot; His take on AI adoption without agreed team workflows: it's going to &quot;increase the chaos in the team.&quot; His answer is deterministic tests, which he says &quot;solved problems before AI and can continue solving problems with AI.&quot; He also created TWD, an open-source tool that runs frontend tests in the browser.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/29907/&quot;&gt;Watch the conversation&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The through-line this week: the tooling for agent governance is arriving, and it's moving from the prompt layer down to the kernel and the identity provider. From HYCU mapping agent permissions to nono enforcing them at the OS level to GitHub rebuilding its infrastructure to absorb what agents generate — the shift is real and it's picking up pace.&lt;/p&gt;
&lt;p&gt;See you next Friday.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Developer Weekly Briefing is published every Friday on &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com&quot;&gt;Coder Legion&lt;/a&gt;. Written by &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Tom+Smith&quot;&gt;Tom Smith&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/30471/developer-weekly-briefing-october-9-2026</guid>
<pubDate>Fri, 09 Oct 2026 12:47:27 +0000</pubDate>
</item>
<item>
<title>From Pull Requests to Reproducible Interoperability: Building an Evidence-First Contributor Network</title>
<link>https://coderlegion.com/30334/requests-reproducible-interoperability-building-evidence-first-contributor-network</link>
<description>&lt;h2 id=&quot;building-an-evidence-first-open-source-contributor-network&quot;&gt;Building an Evidence-First Open-Source Contributor Network&lt;/h2&gt;
&lt;p&gt;Open-source collaboration is usually measured through commits, pull requests and stars.&lt;/p&gt;
&lt;p&gt;We are experimenting with something slightly different in MyZubster:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Can contributor work become a reproducible interoperability network, where every technical claim points back to an exact commit, test and public evidence trail?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That means moving from:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Contributor
→ Pull Request
→ Merge
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;to something closer to:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Contributor
→ Public project / exact commit
→ Reproducible checkpoint
→ Independent verification
→ Bounded TESTED status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The important part is the word &lt;strong&gt;bounded&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A successful test should prove exactly what was tested — not deployment, certification, professional credentials, security guarantees or payment unless those things are independently established.&lt;/p&gt;
&lt;h3 id=&quot;independent-contributor-projects&quot;&gt;Independent contributor projects&lt;/h3&gt;
&lt;p&gt;Some of the most interesting work happens outside the canonical repository.&lt;/p&gt;
&lt;p&gt;Instead of forcing every contributor into one codebase, we can connect independently controlled projects through small, reproducible bridges.&lt;/p&gt;
&lt;h4 id=&quot;nicola-n4k48&quot;&gt;Nicola / N4K48&lt;/h4&gt;
&lt;p&gt;GitHub profile:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/nicolaususnicola-lgtm&quot;&gt;https://github.com/nicolaususnicola-lgtm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Independent project:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&quot;&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The N4K48 checkpoint tested a runtime bridge between a MyZubster VPS and a contributor-controlled environment.&lt;/p&gt;
&lt;p&gt;The flow was:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;MyZubster VPS
    ↓
authenticated HTTPS broker
    ↓
contributor-controlled N4K48 agent
    ↓
local catalog
    ↓
bounded result returned to MyZubster
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The contributor-controlled environment returned the expected bounded result.&lt;/p&gt;
&lt;p&gt;Status:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TESTED&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Canonical MyZubster evidence merge:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;0c00836a96b36d7c64de098dd26d39ac5ddaf98a&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Nicola also authored PR #1460 in MyZubster, merged at:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ee8c15d4b26824b75345c2eebc62ac034058b84a&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This proves the tested runtime checkpoint.&lt;/p&gt;
&lt;p&gt;It does not prove complete decentralization, direct P2P networking or security certification.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;shweta-singh24-myzubstergateway&quot;&gt;Shweta-singh24 / MyZubsterGateway&lt;/h4&gt;
&lt;p&gt;GitHub profile:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Shweta-singh24&quot;&gt;https://github.com/Shweta-singh24&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Independent repository:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Shweta-singh24/MyZubsterGateway&quot;&gt;https://github.com/Shweta-singh24/MyZubsterGateway&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This checkpoint focused on jurisdiction and capability enforcement.&lt;/p&gt;
&lt;p&gt;The verifier was pinned to the exact public source commit:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;82461433e0c5bfee9aa369b4a71e9331261cf803&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The upstream PR remained:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;CLOSED_UNMERGED&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Independent VPS verification reproduced:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;14/14 policy checks PASS
5/5 syntax checks PASS
6/6 wiring checks true
verifier status: TESTED
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The corresponding MyZubster evidence PR #1575 passed the repository gates and was squash-merged at:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;dc4fb1e3c403f6e554c2402ec9fb4c5dfd93e593&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The distinction is important:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;the verification evidence is merged in MyZubster, while the original upstream source PR remains unmerged.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The result does not imply production deployment, legal compliance or a security certification.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;khongten124-open-period-care&quot;&gt;khongten124 / Open Period Care&lt;/h4&gt;
&lt;p&gt;GitHub profile:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/khongten124&quot;&gt;https://github.com/khongten124&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Independent repository:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/khongten124/myzubster&quot;&gt;https://github.com/khongten124/myzubster&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Open Period Care demonstrates that interoperability does not have to mean only APIs or runtime services.&lt;/p&gt;
&lt;p&gt;This project connects public research and structured technical evidence into a contributor-scoped knowledge bridge.&lt;/p&gt;
&lt;p&gt;The model is:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Research package
    ↓
evidence normalization
    ↓
Knowledge Cards
    ↓
structured retrieval
    ↓
Circular Care / Knowledge Graph
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Canonical MyZubster merge anchors:&lt;/p&gt;
&lt;p&gt;PR #1451:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;fc4a5cd30c854a242e6ed39e757c77f463c5d231&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;PR #1489:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;6d88448821f25a252a79a777101ef904af8bbccb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Status:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TESTED — contributor-scoped semantic bridge&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Again, this is a technical evidence state.&lt;/p&gt;
&lt;p&gt;It does not establish a medical credential, professional certification, blockchain implementation or physical recycling proof.&lt;/p&gt;
&lt;h3 id=&quot;tested-contributor-work-inside-myzubster&quot;&gt;Tested contributor work inside MyZubster&lt;/h3&gt;
&lt;p&gt;The same evidence-first pattern also applies to contributors working directly in the canonical repository.&lt;/p&gt;
&lt;h4 id=&quot;aming9303&quot;&gt;Aming9303&lt;/h4&gt;
&lt;p&gt;GitHub:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Aming9303&quot;&gt;https://github.com/Aming9303&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Signed payment webhook contribution, PR #891:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;be78e0cf9081c3346aa0c61e022acd297d745619&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Independent regression verification covered:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HMAC-SHA256 signatures&lt;/li&gt;
&lt;li&gt;stable delivery IDs across retry&lt;/li&gt;
&lt;li&gt;unsigned endpoint rejection&lt;/li&gt;
&lt;li&gt;replay prevention&lt;/li&gt;
&lt;li&gt;stale event rejection&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5/5 targeted tests passed&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Status:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TESTED — signed payment-webhook regression&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;wasim-builds&quot;&gt;wasim-builds&lt;/h4&gt;
&lt;p&gt;GitHub:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/wasim-builds&quot;&gt;https://github.com/wasim-builds&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Fail-closed admin-auth contribution, PR #860:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;9c36d5be450e12345ff9251a40ab4df38839a7fe&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The independent test reproduced:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;unconfigured → 503
missing      → 401
wrong        → 401
correct      → 200
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4/4 targeted tests passed&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Status:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TESTED — fail-closed admin-auth regression&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;foxxx009&quot;&gt;foxxx009&lt;/h4&gt;
&lt;p&gt;GitHub:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/foxxx009&quot;&gt;https://github.com/foxxx009&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;KPI/evidence framework, PR #894:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;50f70aab6dc9a909f65b81cb70d932706143afec&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Historical GitHubMonitor tests, PR #259:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;1c78fadd608e8c8acaeaeaf00d448676f82c3f91&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;A later maintainer-authored integration fix, PR #1526:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;f8cbdee1e50cfbfa6925b4bc1014ca75ed5e90d1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;re-enabled the historical #259 test suite.&lt;/p&gt;
&lt;p&gt;That provenance distinction matters:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;#259 = contributor-authored test work
#1526 = maintainer-authored integration repair
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Good open-source attribution should preserve both facts.&lt;/p&gt;
&lt;h3 id=&quot;why-this-model-is-useful&quot;&gt;Why this model is useful&lt;/h3&gt;
&lt;p&gt;The idea is not to turn every contributor into part of one monolithic repository.&lt;/p&gt;
&lt;p&gt;A healthier architecture can look like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Independent Project A ──┐
Independent Project B ──┼── bounded reproducible bridges ── MyZubster
Independent Project C ──┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each project remains independently controlled.&lt;/p&gt;
&lt;p&gt;The shared layer is the &lt;strong&gt;evidence contract&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;exact repository&lt;/li&gt;
&lt;li&gt;exact commit&lt;/li&gt;
&lt;li&gt;exact procedure&lt;/li&gt;
&lt;li&gt;expected result&lt;/li&gt;
&lt;li&gt;observed result&lt;/li&gt;
&lt;li&gt;explicit limitations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This makes collaboration easier to audit and much harder to exaggerate.&lt;/p&gt;
&lt;h3 id=&quot;the-rule-we-keep-coming-back-to&quot;&gt;The rule we keep coming back to&lt;/h3&gt;
&lt;p&gt;A passing technical test should not silently become a larger claim.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;TESTED
≠ deployed

MERGED
≠ production-ready

security regression PASS
≠ security certification

research contribution
≠ professional credential

contributor evidence
≠ employment

verified contribution
≠ payment
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Those boundaries are part of the architecture.&lt;/p&gt;
&lt;h3 id=&quot;project-links&quot;&gt;Project links&lt;/h3&gt;
&lt;p&gt;Canonical MyZubster repository:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;External contributor projects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Nicola / N4K48&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&quot;&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shweta-singh24 / MyZubsterGateway&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Shweta-singh24/MyZubsterGateway&quot;&gt;https://github.com/Shweta-singh24/MyZubsterGateway&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;khongten124 / Open Period Care research project&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/khongten124/myzubster&quot;&gt;https://github.com/khongten124/myzubster&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contributor profiles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Aming9303&quot;&gt;https://github.com/Aming9303&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/wasim-builds&quot;&gt;https://github.com/wasim-builds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/foxxx009&quot;&gt;https://github.com/foxxx009&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;what-we-want-to-test-next&quot;&gt;What we want to test next&lt;/h3&gt;
&lt;p&gt;The next step is not simply “more integrations”.&lt;/p&gt;
&lt;p&gt;It is more useful to aim for:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;more independently controlled projects proving small, reproducible capabilities to each other.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One project.&lt;/p&gt;
&lt;p&gt;One bounded capability.&lt;/p&gt;
&lt;p&gt;One reproducible checkpoint.&lt;/p&gt;
&lt;p&gt;One public evidence trail.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/30334/requests-reproducible-interoperability-building-evidence-first-contributor-network</guid>
<pubDate>Thu, 08 Oct 2026 23:36:39 +0000</pubDate>
</item>
<item>
<title>The Cost of Open Source</title>
<link>https://coderlegion.com/30223/the-cost-of-open-source</link>
<description>&lt;p&gt;&lt;em&gt;Open source is free to use. It has never been free to make.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Open source sits underneath almost every piece of software shipped today. Frameworks, databases, build tools and the libraries inside them are, in large part, written and maintained by people who were never paid to do so.&lt;/p&gt;
&lt;p&gt;The conversation around open source tends to focus on its benefits: faster innovation, shared infrastructure and transparency. Far less attention is paid to what publishing costs the people who do it. That cost is rarely financial, and few maintainers expect it to be. It is measured instead in control, in attribution, and in the time and energy required to sustain something that others depend on.&lt;/p&gt;
&lt;p&gt;This article examines those costs, why developers continue to accept them, and what can be done to make them more manageable.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;What does a developer give up when they give their work away?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;part-one-loss-of-control-over-use&quot;&gt;Part One: Loss of Control Over Use&lt;/h3&gt;
&lt;p&gt;Software is written with an intended purpose. A license, however, governs permission, not purpose. Once code is published, its author has no say in how it is applied.&lt;/p&gt;
&lt;p&gt;A scraping library built for price comparison can power ticket-scalping bots. An automation tool designed for customer support can be repurposed to send spam. A speech-synthesis feature intended to let people reply in their own voice can be used to imitate someone else's.&lt;/p&gt;
&lt;p&gt;For many maintainers, this is the most personal cost of publishing: &lt;strong&gt;becoming an unwilling participant in uses they would have declined.&lt;/strong&gt; There is no approval step and rarely any notification. Discovery tends to be accidental.&lt;/p&gt;
&lt;p&gt;The tension occasionally surfaces in public. In January 2022, the author of the widely used JavaScript packages &lt;code&gt;colors&lt;/code&gt; and &lt;code&gt;faker&lt;/code&gt; deliberately published broken releases, citing frustration that large companies relied on his unpaid work. The response was widely criticised and disrupted a large number of downstream projects. The grievance behind it, however, was one many maintainers recognised.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;part-two-the-erosion-of-attribution&quot;&gt;Part Two: The Erosion of Attribution&lt;/h3&gt;
&lt;p&gt;For most contributors, attribution is the primary return on their work. It underpins professional reputation, demonstrates competence to employers and clients, and is often the only recognition for work done unpaid. Its loss is therefore felt disproportionately.&lt;/p&gt;
&lt;p&gt;Permissive licenses such as MIT ask for very little: chiefly, that the copyright and license notice be preserved. Even so, several patterns are common:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rebranded forks.&lt;/strong&gt; The same code under a new name and logo, with the original commit history collapsed into a single &quot;initial commit&quot;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repackaged &quot;premium&quot; products.&lt;/strong&gt; Open source dashboards and starter kits, lightly restyled and sold on template marketplaces without reference to their origin.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Installation and support services.&lt;/strong&gt; Third parties charging businesses to deploy a free project, presenting it as a proprietary platform, while support requests flow back to the original maintainer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Absorption into AI models.&lt;/strong&gt; Public repositories have been used to train code-generation models that can reproduce familiar patterns without the accompanying license or author. The legal position remains under dispute. The attribution gap does not.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of these practices affect whether the code works. They do, however, sever the connection between the work and the person responsible for maintaining it, who is usually the party the project most depends on.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;part-three-premium-functionality-without-a-price&quot;&gt;Part Three: Premium Functionality Without a Price&lt;/h3&gt;
&lt;p&gt;The costs above are most acute for one category of project: the one that offers, for free, capabilities that are elsewhere sold as commercial products.&lt;/p&gt;
&lt;p&gt;Agent orchestration, workflow automation, observability, voice synthesis and evaluation tooling all have established paid markets. When an independent developer publishes a working alternative, three effects tend to follow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Credibility suffers.&lt;/strong&gt; Free software is often assumed to be a prototype or an abandoned experiment. The same software can appear more credible once someone else attaches a price to it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Others monetise it.&lt;/strong&gt; Consultants and resellers package, install and bill for it. Most licenses permit this. For the author, it can mean watching their unpaid work become someone else's recurring revenue.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Large providers adopt it at scale.&lt;/strong&gt; This dynamic has shaped much of the last five years of open source licensing:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Project &lt;/th&gt;&lt;th&gt;What happened&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Elasticsearch &lt;/td&gt;&lt;td&gt;Moved away from Apache 2.0 in 2021, citing cloud providers offering it as a managed service. Later added the AGPL back as an option.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Redis &lt;/td&gt;&lt;td&gt;Switched from BSD to the source-available RSAL and SSPL in 2024. The Linux Foundation backed a community fork, Valkey. Redis 8 &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.theregister.com/2025/05/01/redis_returns_to_open_source/&quot;&gt;returned with an AGPL option&lt;/a&gt; in 2025.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Terraform &lt;/td&gt;&lt;td&gt;HashiCorp moved to the Business Source License in 2023. The community forked it as OpenTofu.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each decision addressed the same problem: &lt;em&gt;how to prevent others from profiting from a project without contributing back.&lt;/em&gt; Each also carried its own cost, in forks, lost trust and divided communities.&lt;/p&gt;
&lt;p&gt;If organisations with legal teams and boards have struggled to resolve this, individual maintainers are considerably less well placed to do so.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;part-four-expectation-noise-and-maintainer-fatigue&quot;&gt;Part Four: Expectation, Noise and Maintainer Fatigue&lt;/h3&gt;
&lt;h5 id=&quot;unpaid-support-obligations&quot;&gt;Unpaid support obligations&lt;/h5&gt;
&lt;p&gt;A useful project attracts issues. Many are constructive. A significant share are not: terse reports, requests for timelines, and questions about whether the project has been abandoned. Some come from users who paid a third party for an installation and now expect the original author to support it.&lt;/p&gt;
&lt;p&gt;No contract exists in any of these cases. The expectation forms regardless.&lt;/p&gt;
&lt;h5 id=&quot;automated-noise&quot;&gt;Automated noise&lt;/h5&gt;
&lt;p&gt;A newer cost is the volume of AI-generated bug reports: submissions that appear credible, reference functions that do not exist, and consume hours of review before they can be dismissed.&lt;/p&gt;
&lt;p&gt;The curl project illustrates the scale of the problem. It &lt;a rel=&quot;nofollow&quot; href=&quot;https://pinggy.io/amp/blog/curl_ai_slop_summer_of_bliss/&quot;&gt;ended its bug bounty&lt;/a&gt; in January 2026, after more than six years, because fabricated reports had begun to outnumber genuine ones. From 1 July to 3 August 2026, its security team paused vulnerability intake altogether. One of the most widely deployed libraries in the world, maintained by a small volunteer team, had to close its inbox to remain sustainable.&lt;/p&gt;
&lt;h5 id=&quot;usage-without-support&quot;&gt;Usage without support&lt;/h5&gt;
&lt;p&gt;In February 2023, the maintainer of &lt;code&gt;core-js&lt;/code&gt;, a library &lt;a rel=&quot;nofollow&quot; href=&quot;https://thestack.technology/core-js-maintainer-denis-pusharev-license-broke-angry/&quot;&gt;downloaded tens of millions of times a week&lt;/a&gt; and present on a large share of the most visited websites, published an account of his financial difficulties. Early donations had amounted to roughly $57 a month, and adding a funding link had, by his account, drawn hostile responses.&lt;/p&gt;
&lt;p&gt;The pattern is consistent: the more widely a project is used, the more its maintainer is relied upon, and the less visible that maintainer becomes.&lt;/p&gt;
&lt;h5 id=&quot;fatigue-as-a-security-risk&quot;&gt;Fatigue as a security risk&lt;/h5&gt;
&lt;p&gt;In 2024, a backdoor was discovered in &lt;code&gt;xz&lt;/code&gt;, a compression library present in a large number of Linux distributions. It was not the result of a technical breach. The attacker spent years building trust with an overextended maintainer until they were granted commit access.&lt;/p&gt;
&lt;p&gt;Maintainer fatigue is therefore not only a personal cost. When the people sustaining critical software run out of capacity, everyone who depends on it inherits the risk.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;part-five-why-developers-continue-to-publish&quot;&gt;Part Five: Why Developers Continue to Publish&lt;/h3&gt;
&lt;p&gt;Given these costs, it is reasonable to ask why so many developers continue to release valuable work for free. The answer is that the other side of the ledger is equally real.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Cost &lt;/th&gt;&lt;th&gt;Return&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Loss of control over how code is used &lt;/td&gt;&lt;td&gt;Reach far beyond what one developer could achieve alone&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Attribution that is removed or overlooked &lt;/td&gt;&lt;td&gt;A public body of work that demonstrates capability directly&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Premium features monetised by others &lt;/td&gt;&lt;td&gt;Clear evidence that the work has commercial value&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Unpaid support and automated noise &lt;/td&gt;&lt;td&gt;Bug reports, fixes and ideas from a wider community&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Mistakes visible to everyone &lt;/td&gt;&lt;td&gt;Security that can be audited rather than assumed&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Time and energy &lt;/td&gt;&lt;td&gt;Freedom to build without commercial constraints&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Open source also offers something few commercial products can: &lt;strong&gt;freedom from lock-in.&lt;/strong&gt; A subscription business benefits when leaving is difficult. An open project has no such incentive. Users can run it on their own infrastructure, keep their data in-house, inspect every line and migrate whenever they choose.&lt;/p&gt;
&lt;p&gt;Finally, there is reciprocity. Every developer builds on open source written by others. Publishing is, for many, a way of contributing back to the foundation they rely on.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;part-six-managing-the-costs&quot;&gt;Part Six: Managing the Costs&lt;/h3&gt;
&lt;p&gt;These costs cannot be eliminated, but they can be chosen deliberately rather than discovered later.&lt;/p&gt;
&lt;h5 id=&quot;select-a-license-intentionally&quot;&gt;Select a license intentionally&lt;/h5&gt;
&lt;p&gt;MIT is often chosen by default. That is a reasonable choice, provided its implications are understood.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;License &lt;/th&gt;&lt;th&gt;What others may do &lt;/th&gt;&lt;th&gt;What it protects&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;MIT / Apache 2.0 &lt;/td&gt;&lt;td&gt;Almost anything, including closed commercial products built on the code &lt;/td&gt;&lt;td&gt;The copyright notice&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;GPL-3.0 &lt;/td&gt;&lt;td&gt;Use and sell it; distributed modifications must remain open &lt;/td&gt;&lt;td&gt;Improvements to distributed software&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AGPL-3.0 &lt;/td&gt;&lt;td&gt;As GPL, with network use of a modified version also counting as distribution &lt;/td&gt;&lt;td&gt;Modifications offered as a hosted service&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;None of these prevent others from charging for installation or support. Each defines clearly what must be returned.&lt;/p&gt;
&lt;h5 id=&quot;make-attribution-durable&quot;&gt;Make attribution durable&lt;/h5&gt;
&lt;p&gt;Include the author's name in the LICENSE and a NOTICE file, in the application's About screen and in API metadata. Attribution recorded in several places is considerably harder to remove than attribution recorded in one.&lt;/p&gt;
&lt;h5 id=&quot;protect-the-name&quot;&gt;Protect the name&lt;/h5&gt;
&lt;p&gt;The code may be open while the project's name and logo are not. Trademarks are how many established projects prevent forks from presenting themselves as the official distribution.&lt;/p&gt;
&lt;h5 id=&quot;document-expectations&quot;&gt;Document expectations&lt;/h5&gt;
&lt;p&gt;A CONTRIBUTING guide, a SECURITY policy and a short support statement convert implicit expectations into explicit ones. A single line, such as &quot;issues are reviewed weekly and paid support is not offered&quot;, can prevent a great deal of friction.&lt;/p&gt;
&lt;h5 id=&quot;provide-a-route-for-support&quot;&gt;Provide a route for support&lt;/h5&gt;
&lt;p&gt;Sponsorship links rarely produce significant income. They do give users who value the work a practical way to contribute to its upkeep.&lt;/p&gt;
&lt;h5 id=&quot;set-limits&quot;&gt;Set limits&lt;/h5&gt;
&lt;p&gt;Declining features, deadlines and demands is part of sustainable maintenance. curl's five-week intake pause demonstrates that even critical projects can, and sometimes must, step back.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;a-case-in-point-obsidian-ai&quot;&gt;A Case in Point: Obsidian AI&lt;/h3&gt;
&lt;p&gt;A brief disclosure: this subject is not abstract for me.&lt;/p&gt;
&lt;p&gt;For the past seven months I have been developing &lt;strong&gt;Obsidian AI&lt;/strong&gt;, an open source, self-hosted platform for building and orchestrating AI agents. It falls squarely into the category described in Part Three, offering capabilities that are typically sold as commercial products.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Capability &lt;/th&gt;&lt;th&gt;Typical commercial equivalent&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Agents across OpenAI, Anthropic, Gemini, Ollama and OpenRouter &lt;/td&gt;&lt;td&gt;Separate per-provider integrations&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Multi-agent teams with delegation between agents &lt;/td&gt;&lt;td&gt;Enterprise agent platforms&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Visual workflows with conditions, approvals and loops, including n8n import &lt;/td&gt;&lt;td&gt;Workflow automation subscriptions&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Evaluation suites, prompt optimisation, tracing and per-agent cost reporting &lt;/td&gt;&lt;td&gt;Observability and evaluation licences&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Long-term memory, retrieval-augmented generation and Markdown knowledge vaults &lt;/td&gt;&lt;td&gt;Knowledge management add-ons&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;WhatsApp agents with local transcription, voice replies and voice cloning &lt;/td&gt;&lt;td&gt;Metered messaging and voice APIs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;A Docker sandbox and isolated execution for user-defined tools &lt;/td&gt;&lt;td&gt;Hosted code execution services&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The project now comprises roughly 62,000 lines of code and 173 API endpoints, and runs entirely on the user's own infrastructure. It has also appeared on third-party sites as a paid installation service.&lt;/p&gt;
&lt;p&gt;Several of the costs discussed above apply directly. The voice cloning feature was designed so that users could respond in their own voice, but its use cannot be controlled once published. The WhatsApp integration avoids the need for a business account by relying on an unofficial library, a trade-off that every deployment inherits. Documentation has not kept pace with development. And when a weakness was identified in how user-defined tools were executed, it was resolved in public, where its prior existence was equally visible.&lt;/p&gt;
&lt;p&gt;These considerations informed the choice of license. Obsidian AI is released under the &lt;strong&gt;AGPL-3.0&lt;/strong&gt;. Anyone may install, host, customise and charge for services around it. Modified versions, including those offered as hosted services, must remain open, and their users are entitled to the source.&lt;/p&gt;
&lt;p&gt;For those offering it commercially to clients, the request is a simple one: be transparent that the underlying software is open source, retain the attribution, and contribute improvements back upstream.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;conclusion-2&quot;&gt;Conclusion&lt;/h4&gt;
&lt;p&gt;Open source remains one of the most significant achievements of the software industry. It is not, however, without cost. That cost is borne in control, attribution and energy, largely by individuals, and is seldom discussed.&lt;/p&gt;
&lt;p&gt;Developers considering publishing valuable work should do so, but with a clear understanding of what they are accepting, and with deliberate choices about which costs they are prepared to carry.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Open source has never been free. Someone always pays. The question is whether they chose to.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Obsidian AI: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/sup3rus3r/obsidian-ai&quot;&gt;github.com/sup3rus3r/obsidian-ai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Previous article: &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/29360/what-if-full-stack-features-were-installable&quot;&gt;What If Full-Stack Features Were Installable?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sponsor the project: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/sponsors/sup3rus3r&quot;&gt;GitHub Sponsors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Sources: &lt;a rel=&quot;nofollow&quot; href=&quot;https://pinggy.io/amp/blog/curl_ai_slop_summer_of_bliss/&quot;&gt;curl's 2026 reporting pause&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; href=&quot;https://thestack.technology/core-js-maintainer-denis-pusharev-license-broke-angry/&quot;&gt;the core-js funding post&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.theregister.com/2025/05/01/redis_returns_to_open_source/&quot;&gt;Redis returning to the AGPL&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/30223/the-cost-of-open-source</guid>
<pubDate>Thu, 08 Oct 2026 07:14:28 +0000</pubDate>
</item>
<item>
<title>My First Project: From a Local Folder to GitHub Using Git and SSH</title>
<link>https://coderlegion.com/30212/my-first-project-from-a-local-folder-to-github-using-git-and-ssh</link>
<description>&lt;h2 id=&quot;my-first-project-from-a-local-folder-to-git-hub-using-git-and-ssh&quot;&gt;My First Project: From a Local Folder to Git hub Using Git and SSH&lt;/h2&gt;
&lt;h3 id=&quot;git&quot;&gt;GIT&lt;/h3&gt;
&lt;h4 id=&quot;introduction&quot;&gt;Introduction&lt;/h4&gt;
&lt;p&gt;Git is an open source version control system used to manage projects. It is fast and efficient to manage projects using git. You can easily track the project version, history, modifications, and many more project activities. It allows for ease of collaboration while working on projects as teams.&lt;/p&gt;
&lt;h4 id=&quot;installing-git&quot;&gt;Installing Git&lt;/h4&gt;
&lt;p&gt;Download and install git from &lt;a rel=&quot;nofollow&quot; href=&quot;https://git-scm.com/install/windows&quot;&gt;Git&lt;/a&gt;. Ensure you download for your respective operating system.&lt;/p&gt;
&lt;h4 id=&quot;configuring-git&quot;&gt;Configuring Git&lt;/h4&gt;
&lt;p&gt;Before using Git effectively, you have to configure your identity by setting up your &lt;em&gt;username&lt;/em&gt; and &lt;em&gt;email&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This allows to easily track any changes to your project and the associate, that is; who made the changes?&lt;/p&gt;
&lt;p&gt;To set up your identity, follow the following steps, using Git Bash a git terminal:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Steps&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;To set your username&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git config --global user.name &quot;YOUR NAME&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/d3wqbnuhko7gwa79qq0z.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;In place of &lt;em&gt;YOUR NAME&lt;/em&gt; type in your correct user name that will be associated with your github account activity.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;To set your email&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git config --global user.email &quot;youemail@example.com&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/ajn068mbc9hco8giv5ql.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; It is recommended to use your correct email that is associated with your GitHub account.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Rename you GitHub branch to &lt;em&gt;main&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git config --global init.Branch main&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/zqxh5s6g0u5xabnqjrgm.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;After setting up your identity you can verify your configurations to confirm your identity for each field set.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To check your:&lt;/p&gt;
&lt;p&gt;User name&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`git config --global user.name`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Email&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`git config --global user.email`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Branch&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --global init.Branch`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;OR&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can use the following command to check all you account details instead:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`git config --global --lists`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/e2izfyzfr0rd5sqmr6sg.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;ssh&quot;&gt;SSH&lt;/h3&gt;
&lt;p&gt;SSH key is a secure credential used to authentication to accessing network resources confidentially without need of a password. The ssh-key contains two keys. A &lt;em&gt;&lt;strong&gt;Public&lt;/strong&gt;&lt;/em&gt; and &lt;em&gt;&lt;strong&gt;Private&lt;/strong&gt;&lt;/em&gt; key. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Public key&lt;/strong&gt; is used publicly, that is it is shared between peers. Used to identify you remote resources.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Private key&lt;/strong&gt; it is a pair key that is kept as a secret for identifying your local machine.&lt;/p&gt;
&lt;h4 id=&quot;generating-an-ssh-key&quot;&gt;Generating an SSH Key&lt;/h4&gt;
&lt;p&gt;Using Git Bash&lt;/p&gt;
&lt;p&gt;Before generating a new SSH Key, it is recommended to check and confirm if you have an existing key which you can use.&lt;/p&gt;
&lt;p&gt;To check if you have an existing key use the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`ls -al ~/.ssh`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The command will list all existing ssh keys. Here sample output:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/rfnrwqgtgllt5u087bbh.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;If there is no existing key, you can generate a new key that you will use to link your computer with your github account.&lt;/p&gt;
&lt;p&gt;To generate a new ssh key, follow the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Genereate a new ssh-key&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ssh-keygen -t ed25529 -C &quot;youremail@example.com&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The email should be the one associated with with your github account.&lt;/p&gt;
&lt;p&gt;Follow the prompt by adding the name of your key, and also you can add the passphrase which is optional.&lt;/p&gt;
&lt;p&gt;The passhrase should be memorable, you will need to use it each time you want to access you github account.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add your key to the SSH-Agent.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Open your Powershell Terminal and follow the steps below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- Run the following command to start your SSH Agent

	`Get-Service -Name ssh-agent | Set-Service StartupType Manual`

- Add your key to the  path using the  command

	`ssh-add &amp;lt;PATH/TO/YOUR/PRIVATE_KEY&amp;gt;`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After the command, you should specifify the path to your private key and add it to your host machine's ssh-agent. i.e. &lt;code&gt;ssh-add &quot;C:/Users/&amp;lt;YOUR_USER_NAME/.ssh/&amp;lt;YOUR_PRIVATE_KEY&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you don't know your computer's user name, you can use the &lt;code&gt;whoami&lt;/code&gt; command to see your username.&lt;/p&gt;
&lt;p&gt;Your _PRIVATE_KEY&lt;em&gt;NAME&lt;/em&gt; is the name that you gave to your key.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- Once you're done, close your Powershell terminal and return to Git Bash.

- Type the following command

	`git config --global core.sshCommand &quot;C:/Windows/System32/OpenSSH/ssh.exe`

- Then Clip and copy your key using the following commands:

	`clip &amp;lt; ~/.ssh/&amp;lt;PUBLIC_KEY.pub&amp;gt;`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;i.e &lt;code&gt;clip &amp;lt; /.ssh/my_key.pub&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`cat ~/.ssh/&amp;lt;PUBLIC_KEY.pub&amp;gt;`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;i.e. 'cat ~/.ssh/my_key.pub` to view your public ssh key&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- After displaying your key, select and copy the key to add to your GitHub account.
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;adding-your-key-to-github&quot;&gt;Adding Your Key to GitHub&lt;/h4&gt;
&lt;p&gt;To connect your computer and git-hub is necessary to facilitate access to your remote resources from your local computer.&lt;/p&gt;
&lt;p&gt;You need to add your SSH Keys to GitHub to facilitate the connection. To achieve this, follow the steps:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you have an existing GitHub account:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;a. Login to your account using your email/username and password.&lt;/p&gt;
&lt;p&gt;b. From the profile section, go to &lt;em&gt;Settings&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;c. Scroll to &lt;em&gt;SSH and GPG Key&lt;/em&gt;. Navigate and click on &lt;em&gt;New SSH Key&lt;/em&gt; on the SSH Key Section to your right.&lt;/p&gt;
&lt;p&gt;e. Add the &lt;em&gt;Title/Name&lt;/em&gt; of the key i.e. &lt;em&gt;Ubuntu Laptop&lt;/em&gt;, the key will be used for &lt;em&gt;Authentication&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;f. Paste your key to the available textbox.&lt;/p&gt;
&lt;p&gt;g. Finally, click on &lt;em&gt;Add Key&lt;/em&gt; to save your key. You'll be prompted to re-enter your git-hub account password (login password), to confirm your authenticity before saving.&lt;/p&gt;
&lt;p&gt;Now you are ready to go. Before you start, it is good you test your connection to check if it was successful.&lt;/p&gt;
&lt;p&gt;Run Powershell as an Administrator and use the following command to test connection:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`ssh -T git@github.com`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the connection is successful, your username will be displayed along with a success message.&lt;/p&gt;
&lt;p&gt;If successful, you are good to go and work on your project.&lt;/p&gt;
&lt;h3 id=&quot;working-with-folders&quot;&gt;Working With Folders&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;To keep you project structural and more organized; you've to keep its files and scripts in folders.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This will make it easier to navigate and access the project. Follow the steps below to work with folders in Windows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In Git Bash Terminal(Opened normally)&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;To navigate and change location use the following command&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`cd &amp;lt;path_location&amp;gt;`
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To select the current location&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`cd .`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To get to the previous location one step back use&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`cd ..`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Getting back to the root directory use&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`cd ~`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can also move to a specific folder by specifying the path to that folder&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`cd &amp;lt;path/to/folder&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;example: &lt;code&gt;cd &quot;C:/Users/Admin/Desktop/My-Project&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;My-Project/&lt;/em&gt; is a folder located in Desktop, which is for the user with the username &lt;em&gt;Admin&lt;/em&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;To create a directory or folder use&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`mkdir &amp;lt;directory_name&amp;gt;`
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;i.e. Create a directory named &lt;em&gt;My-First-Project&lt;/em&gt; in Desktop &lt;code&gt;mkdir My-First-Project&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Navigate to your created folder. Assuming you are on Desktop, use the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`cd My-First-Project/`
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So your bash terminal path will look like &lt;code&gt;~/Desktop/My-First-Project&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;To list and view items use the following command&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`ls`
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It will list all files and folders excluding the hidden files and folders. As shown below:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/yodsemd3r03fx0ltw8lk.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;To list and view all files and folders including the hidden ones you add &lt;em&gt;-a&lt;/em&gt; attribute to the &lt;code&gt;ls&lt;/code&gt; command as below&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`ls -a`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/m0ik6vtw5w4ymbjcdzdo.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;To list files and display their attributes we add the &lt;em&gt;-l&lt;/em&gt; attribute to the &lt;code&gt;ls&lt;/code&gt; command.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`ls -l`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/g98xshsqzai093amcfeu.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; You can combine the attributes to list all files and their attributes i.e. as &lt;code&gt;ls -al&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;You can delete an empty folder using &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`rm -r &amp;lt;folder_name&amp;gt;`
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To delete a folder together with its contents we use the &lt;code&gt;rm -r &amp;lt;non-empty_folder_name&amp;gt;&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;Example: Create a folder in you my project folder using the &lt;code&gt;mkdir&lt;/code&gt; command, inspect the folder created and its contents, then delete the folder using the rm command:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Steps&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create scripts: &lt;code&gt;mkdir scripts&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to scripts and back to your project folder: &lt;code&gt;cd scripts/&lt;/code&gt; and &lt;code&gt;cd ..&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inspect scripts: &lt;code&gt;ls scripts/&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Delete scripts: &lt;code&gt;rm -r scripts/&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/02201e2p7xh3f724jq9d.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; &lt;code&gt;rm&lt;/code&gt; without any attribute will no delete a directory/folder even if empty, the attribute &lt;em&gt;-r&lt;/em&gt; tells the command &lt;code&gt;rm&lt;/code&gt; that what you're deleting is a directory.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You can copy and paste contents between different folders.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To copy contents moves a duplicate of the files to another location leaving the original intact.&lt;/p&gt;
&lt;p&gt;While using the &lt;code&gt;cp&lt;/code&gt; command you have to specify the file/contents path and the destination address. Example:&lt;/p&gt;
&lt;p&gt;To copy some file named hello.txt to the scripts folder; you need to recreate the folder and create the file in the root directory then copy it to scripts folder in your projects folder&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Steps&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In your project folder create scripts &lt;code&gt;mkdir scripts&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to your project root folder and create the file &lt;em&gt;hello.txt&lt;/em&gt; &lt;code&gt;touch hello.txt&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy the file to scripts &lt;code&gt;cp hello.txt ~/scripts&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inspect both locations to see that the file exists in both location. &lt;code&gt;ls&lt;/code&gt; and &lt;code&gt;ls scripts&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; You can specify the file path in the cp command if the file is in a different location and the destination path address &lt;/p&gt;
&lt;p&gt;i.e. &lt;code&gt;cp &amp;lt;~/path/to/file_to_be_copied.txt&amp;gt; &amp;lt;~/path/to_destination/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You can move a file or any content completely from the source to an new destination using the &lt;code&gt;mv&lt;/code&gt; command.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Example: Move &lt;em&gt;hello.txt&lt;/em&gt; file from the project's folder to a new folder named &lt;em&gt;docs&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`mv hello.txt docs/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; You can also specify the file path in case the files and destination address are in different locations i.e. &lt;code&gt;mv &amp;lt;~/path/from_source/hello.txt&amp;gt; &amp;lt;~/path/to_destination_folder/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&quot;working-with-files&quot;&gt;Working With Files&lt;/h3&gt;
&lt;p&gt;While working in your project you will need to create different files for your project.&lt;/p&gt;
&lt;p&gt;The different files will be saved in different directories depending on their type and use. &lt;/p&gt;
&lt;p&gt;The organization will help us to achieve a proper project structure, easier to navigate and access our project files.&lt;/p&gt;
&lt;p&gt;We will create our files using Git Bash terminal.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To create a file we'll use the &lt;code&gt;touch&lt;/code&gt; command. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Create a file named &lt;em&gt;hello-world.txt&lt;/em&gt; in your project root directory.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`touch hello-world.txt`
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use the &lt;code&gt;ls&lt;/code&gt; command to confirm your file has been created.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To view the contents of the file we use the &lt;code&gt;cat&lt;/code&gt; command, since our file is empty it will display 'nothing'.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`cat hello-world.txt`
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To add contents to our file we use the &lt;code&gt;echo&lt;/code&gt; command.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Add the following text to the file &lt;em&gt;hello-world.txt&lt;/em&gt;; &quot;Hello, World&quot;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`echo &quot;Hello, World!&quot; &amp;gt; hello-world.txt`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/uvhxthqnnamj5zwqfzo3.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;We use the &lt;em&gt;&amp;gt;&lt;/em&gt; to redirect the output to our file. &lt;em&gt;&amp;gt;&lt;/em&gt; Rewrites any content in the file. &lt;/p&gt;
&lt;p&gt;If you want to add more content to the file use &lt;em&gt;&amp;gt;&amp;gt;&lt;/em&gt;, more text will be added to our file. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/zrmqjjh6fsn44xh9hepq.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;Example; add the following text to our file &quot;I am happy to learn SSH and Git&quot;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`echo &quot;I am happy to learn Git and SSH&quot; &amp;gt;&amp;gt; hello-world.txt`
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cat hello-world.txt&lt;/code&gt; to view the contents of the file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/hio4sg9opdiguztkbne7.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;em&gt; Editing you file using nano &lt;/em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Nano is an inbuilt text editor in Git Bash.&lt;/p&gt;
&lt;p&gt;It helps us to navigate through our files; scripts, text file, .... once we make mistakes.&lt;/p&gt;
&lt;p&gt;To open our script or text file we use the &lt;code&gt;nano&lt;/code&gt; command in git bash then specify the file we want to open, for example open &lt;em&gt;hello-world.txt&lt;/em&gt; using nano:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`nano hello-world.txt'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/atsfbilrrzl8gqw8swht.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;There are many more commands for nano that will help you edit your text file. For example the most common commands are:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1. Ctr + O - To save your file

2. Ctrl + X - To exit your nano text editor

3. Ctrl + K - To Cut text in the editor

4. Ctrl + U - To Paste your text

5. Ctrl + G - To find help for you nano editor.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There are many more commands of help that you can use to edit you files in nano editor.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/gyapzhzkcv6s1msgglo4.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;your-first-project&quot;&gt;Your First Project&lt;/h3&gt;
&lt;h4 id=&quot;initialize-your-first-project-with-git&quot;&gt;Initialize your first project with git&lt;/h4&gt;
&lt;p&gt;Before running the command, check to confirm that you are in your project folder using the &lt;code&gt;pwd&lt;/code&gt; command. &lt;/p&gt;
&lt;p&gt;The &lt;code&gt;pwd&lt;/code&gt; command means &lt;em&gt;print working directory&lt;/em&gt;  it shows your current location with regard to the root directory.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/vj63ecqsyjcin6wrsoct.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;If in your project directory, the path will end with the name of the project folder. I.e. &lt;em&gt;My-First-Project&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Use the &lt;code&gt;git init&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/ejy9wh4olyjgdhwjcm7l.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;The command is used to initialize our project directory as a git repository.&lt;/p&gt;
&lt;h4 id=&quot;git-repository-structure-&quot;&gt;Git repository structure.&lt;/h4&gt;
&lt;p&gt;After running the above command, you may notice notification  of git initializing an empty git repo...&lt;/p&gt;
&lt;p&gt;If you list to view the structure using the &lt;code&gt;ls&lt;/code&gt; command you may notice a &lt;em&gt;.git/&lt;/em&gt; folder.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/17fnm7nczt2emkd8e2m2.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;The folder contains Git's internal repository information, which git uses to manage activities such as: push, commits, pull, Branches, project history, repository configurations,....&lt;/p&gt;
&lt;h4 id=&quot;checking-the-project-status&quot;&gt;Checking the project status&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	`git status`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Used to show what's happening with your project currently. &lt;/p&gt;
&lt;p&gt;It can show things such as untracked files, staged files to be committed yet, if the working tree is clean meaning everything has been committed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/739uf4cr7umrhtlgwauv.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;The above show that there is nothing that has been staged for commit, there are three untracked files in the initialized repository.&lt;/p&gt;
&lt;h4 id=&quot;staging-your-project-files&quot;&gt;Staging your project files&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	`git add .`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/bd1enh0j8cunas7fsgq4.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;It adds your project files to git for tracking.&lt;/p&gt;
&lt;p&gt;Checking on the status of the staged file, you should get such an output with &lt;code&gt;git status&lt;/code&gt; command&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/q52vf48i6k1hglqddkj7.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;It prepares all you changes for the next commit.&lt;/p&gt;
&lt;p&gt;You can stage a single file by specifying the file/folder you want to stage i.e. &lt;code&gt;git add &amp;lt;file_name.txt&amp;gt;&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/omjr8oo506a1e1ulotbf.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;You should see almost a similar output when using &lt;code&gt;git status&lt;/code&gt; command after staging a single file&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/h2jalyli8gb854gc8mm2.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;Using the &lt;em&gt;.&lt;/em&gt; means you stage everything in your project folder.&lt;/p&gt;
&lt;h4 id=&quot;commiting-you-staged-files&quot;&gt;Commiting you staged files&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	`git commit -m &quot;&amp;lt;commit message&amp;gt;&quot;`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Creates a saved checkpoint.&lt;/p&gt;
&lt;p&gt;The message should be precise and clear, related to the activity carried out. i.e. &quot;My First Project Using Git Commit&quot;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/tkz6an35n2381ldspn67.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;It does not upload anything to git-hub yet.&lt;/p&gt;
&lt;h4 id=&quot;uploading-to-git-hub&quot;&gt;Uploading to git-hub&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	`git push -u origin &amp;lt;branch_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/ijtfrh9q1669086oqqe0.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;Sends all the committed changes to GitHub. However, in our case we get the above error because we have not linked our local project repo to a git-hub remote repository.&lt;/p&gt;
&lt;p&gt;We will be linking our repositories in the next section.&lt;/p&gt;
&lt;p&gt;After running this command, you can easily check on the changes whether they reflect on GitHub via your browser.&lt;/p&gt;
&lt;p&gt;However, for us we are yet to see these changes. This may not work since we are yet to create a remote repository which we will then connect to our local project in our laptop.&lt;/p&gt;
&lt;h4 id=&quot;creating-a-remote-repository&quot;&gt;Creating a remote repository&lt;/h4&gt;
&lt;p&gt;To create a remote repository, follow the following steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Login to your git-hub account&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In your account click on &quot;Create New Repository&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the name of your Repository as &quot;My-First-Project&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not create a README, uncheck the checkbox&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide a brief descriptions for your project. The description is: &quot;My First Project: From a Local Folder to Git hub Using Git and SSH&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then click on Create Repository&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A new empty repository is created with the name &quot;My-First-Project&quot;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/7rg1zy9xdj87p53dezpc.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Navigate to your repository&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the &lt;em&gt;code&lt;/em&gt; section, then click on &lt;em&gt;ssh&lt;/em&gt; tab and copy the &lt;em&gt;ssh code&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/dpdkinyysthajwlk94xq.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;We'll use the ssh code to connect our remote and local repositories before pushing our project.&lt;/p&gt;
&lt;h4 id=&quot;connecting-our-local-and-remote-repositories&quot;&gt;Connecting our local and remote repositories&lt;/h4&gt;
&lt;p&gt;Navigate to your git initialized  project folder&lt;/p&gt;
&lt;p&gt;Type in the following command and thereafter paste the ssh code for your remote repository and hit enter.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`git remote add origin &amp;lt;your_remote_ssh_code&amp;gt;`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;i.e. &lt;code&gt;git remote add origin git@github.com:MakoriNyachaki/My-First-Github-Project.git&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/fv5763zw6bnl09wtykjt.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;rename-your-branch&quot;&gt;Rename your branch&lt;/h4&gt;
&lt;p&gt;If your remote repository's branch is not &lt;em&gt;main&lt;/em&gt; rename it to &lt;em&gt;main&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	`git branch -m main`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/d27kjda6cdi1awwjhl84.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;check-the-remote&quot;&gt;Check the remote&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	`git remote -v`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/mcklkfey0gthgqyvqati.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;push-your-project-to-git-hub&quot;&gt;Push your project to git-hub&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;	`git push -u origin &amp;lt;branch_name&amp;gt;`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;i.e. &lt;code&gt;git push -u origin main&lt;/code&gt; this works to upload our committed changes to our git-hub repository.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/3isilkfwccmxlgra9kif.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;summary&quot;&gt;Summary&lt;/h3&gt;
&lt;p&gt;An introductory article for learning GIT and SSH. It is thrilling practical exercise for generating ssh keys, working with folders and files, connecting local project folders with remote repositories, and working with git. The introductory article requires one to do further research on so many commands that are available for the different tools we have used here in order to be an expert. Let's learn forward.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/30212/my-first-project-from-a-local-folder-to-github-using-git-and-ssh</guid>
<pubDate>Thu, 08 Oct 2026 04:21:17 +0000</pubDate>
</item>
<item>
<title>How to Unlock $2,000+ in Free Developer Perks &amp; Student Tools in 2026</title>
<link>https://coderlegion.com/29694/how-to-unlock-2-000-in-free-developer-perks-student-tools-in-2026</link>
<description>&lt;p&gt;As developers, students, and self-taught programmers, software subscriptions quickly become expensive. Between IDE licenses, cloud hosting fees, CI/CD runners, and domain names, keeping your development stack running can easily cost hundreds of dollars every year.&lt;/p&gt;
&lt;p&gt;Fortunately, major tech platforms offer massive &lt;strong&gt;educational developer grants&lt;/strong&gt;—if you know what tools are available and how to verify them.&lt;/p&gt;
&lt;p&gt;Here is a breakdown of the highest-value developer perks in 2026 and how you can claim them.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-top-developer-perks-available-in-2026&quot;&gt;🎁 Top Developer Perks Available in 2026&lt;/h3&gt;
&lt;h4 id=&quot;1-github-student-developer-pack-value-1-000-&quot;&gt;1. GitHub Student Developer Pack (Value: $1,000+)&lt;/h4&gt;
&lt;p&gt;The single best resource bundle for anyone learning to code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub Pro&lt;/strong&gt;: Unlimited Actions minutes and repository insights.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Free Cloud Credits&lt;/strong&gt;: DigitalOcean, Microsoft Azure, and Heroku credits.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Free Domain &amp;amp; SSL&lt;/strong&gt;: 1-year free domain from Namecheap.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frontend Tools&lt;/strong&gt;: Free Bootstrap Studio and design suites.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;2-jetbrains-all-products-pack-value-289-year-&quot;&gt;2. JetBrains All Products Pack (Value: $289/year)&lt;/h4&gt;
&lt;p&gt;Full access to all 15+ industry-standard desktop IDEs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IntelliJ IDEA Ultimate (Java/Kotlin)&lt;/li&gt;
&lt;li&gt;PyCharm Professional (Python)&lt;/li&gt;
&lt;li&gt;WebStorm (JavaScript/TypeScript)&lt;/li&gt;
&lt;li&gt;GoLand (Go)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;3-productivity-amp-cloud-grants&quot;&gt;3. Productivity &amp;amp; Cloud Grants&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Notion Education&lt;/strong&gt;: Free Plus plan with unlimited file uploads.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Canva for Education&lt;/strong&gt;: Premium design templates and AI tools.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon Prime Student&lt;/strong&gt;: 6-month free trial for cloud and shopping benefits.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-step-by-step-how-to-verify-without-a-university-email&quot;&gt;🛠️ Step-by-Step: How to Verify Without a University Email&lt;/h3&gt;
&lt;p&gt;Most verification flows only require one core credential: &lt;strong&gt;receiving a confirmation link or OTP code sent to an educational domain address (&lt;code&gt;.edu&lt;/code&gt; or &lt;code&gt;.edu.pl&lt;/code&gt;)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If your institution does not issue official &lt;code&gt;.edu&lt;/code&gt; inboxes or you are testing signup webhooks, you can use a lightweight disposable educational email tool:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Generate an Inbox&lt;/strong&gt;: Visit &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.ues.edu.pl/&quot;&gt;UES - Free Edu Email Generator&lt;/a&gt; to create a functioning &lt;code&gt;@ues.edu.pl&lt;/code&gt; inbox in one click (no registration required).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Submit Verification&lt;/strong&gt;: Enter your generated address on the student or developer grant verification page (e.g., JetBrains, Notion, or GitHub).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Receive Link&lt;/strong&gt;: Return to your &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.ues.edu.pl/&quot;&gt;UES&lt;/a&gt; inbox tab. Verification codes typically arrive within 10–30 seconds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Link Secondary Email&lt;/strong&gt;: Once approved, immediately add your personal GitHub/Gmail as a backup recovery address in your account settings.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;&lt;p&gt;🔒 &lt;em&gt;Note: Disposable inboxes on UES auto-purge after 24 hours, so always ensure 2FA and backup recovery emails are configured.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-summary&quot;&gt;💬 Summary&lt;/h3&gt;
&lt;p&gt;Software costs shouldn't hold back passionate developers from building their side projects. What tool is currently your biggest expense? Let me know in the comments below!&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/29694/how-to-unlock-2-000-in-free-developer-perks-student-tools-in-2026</guid>
<pubDate>Sun, 04 Oct 2026 04:57:11 +0000</pubDate>
</item>
<item>
<title># Building a Trustworthy Developer Portfolio with GitHub, Node.js, and Structured Evidence</title>
<link>https://coderlegion.com/29488/building-trustworthy-developer-portfolio-with-github-node-js-and-structured-evidence</link>
<description>&lt;h2 id=&quot;building-a-trustworthy-developer-portfolio-with-github-node-js-and-structured-evidence&quot;&gt;Building a Trustworthy Developer Portfolio with GitHub, Node.js, and Structured Evidence&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;How we built Knowledge Cards in MyZubster, integrated GitHub evidence, protected profile README updates, and learned from a real open-source documentation proposal.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By Daniel Ioni — Founder &amp;amp; Product Builder, MyZubster&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;introduction-1&quot;&gt;Introduction&lt;/h3&gt;
&lt;p&gt;What does a GitHub profile actually tell us about a developer?&lt;/p&gt;
&lt;p&gt;We can examine repositories, commits, pull requests, documentation, and contribution activity. However, those artifacts don't always explain what problems a developer investigated, what knowledge they acquired, or how their work relates to specific technical subjects.&lt;/p&gt;
&lt;p&gt;At the same time, a traditional portfolio might contain a long list of declared skills without providing any supporting references.&lt;/p&gt;
&lt;p&gt;While developing &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com&quot;&gt;MyZubster&lt;/a&gt;, we started experimenting with a different model.&lt;/p&gt;
&lt;p&gt;Our idea was to connect structured descriptions of technical activities with supporting GitHub references while preserving an important distinction:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The existence of a technical artifact is not the same thing as independent verification of someone's expertise.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article explains how we implemented that idea using Knowledge Cards, our Zorgax integration, GitHub APIs, and a controlled README synchronization workflow.&lt;/p&gt;
&lt;p&gt;I'll also describe the bugs we encountered and how an unmerged Monero Docs pull request helped us improve our approach to documenting open-source activities.&lt;/p&gt;
&lt;h3 id=&quot;1-designing-the-knowledge-card-model&quot;&gt;1. Designing the Knowledge Card model&lt;/h3&gt;
&lt;p&gt;We wanted to move beyond traditional skill lists.&lt;/p&gt;
&lt;p&gt;Instead of displaying a skill such as &lt;em&gt;Node.js: Expert&lt;/em&gt;, we wanted developers to explain their activities and attach relevant technical references.&lt;/p&gt;
&lt;p&gt;We created Knowledge Cards containing five main elements:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Title:&lt;/strong&gt; What activity or area of knowledge does the card describe?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain:&lt;/strong&gt; Which technologies or technical subjects are involved?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description:&lt;/strong&gt; What does the owner declare they worked on?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; Which external sources support or document that description?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification note:&lt;/strong&gt; What can readers actually establish from the available evidence?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For example, one of our published cards describes the development of digital identity and privacy-related modules for MyZubster Space Station.&lt;/p&gt;
&lt;p&gt;It references a GitHub commit containing implementation work, technical documentation, tests, and GitHub Actions configuration.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/knowledge-card?id=6abf35c2ae779390fec8ecfd&quot;&gt;View the Space Station Knowledge Card&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster-space-station/commit/3eb0c7d050428eb63077c8926dcb3ab03d9204d5&quot;&gt;Inspect the associated GitHub commit&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The card distinguishes the owner's description from the public source reference.&lt;/p&gt;
&lt;p&gt;This design also helps readers investigate an activity without interpreting every statement as an independently certified qualification.&lt;/p&gt;
&lt;h3 id=&quot;2-github-url-validation-syntax-is-not-verification&quot;&gt;2. GitHub URL validation: syntax is not verification&lt;/h3&gt;
&lt;p&gt;One of our first practical problems involved a malformed GitHub commit URL.&lt;/p&gt;
&lt;p&gt;We initially added a commit reference manually. It looked correct but was missing the final character of its SHA identifier.&lt;/p&gt;
&lt;p&gt;Consequently, our README importer excluded it.&lt;/p&gt;
&lt;p&gt;We subsequently added the complete reference using the evidence attachment workflow.&lt;/p&gt;
&lt;p&gt;This debugging experience highlighted two different responsibilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validate that a GitHub URL has an acceptable structure.&lt;/li&gt;
&lt;li&gt;Independently check whether the resource is publicly accessible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For README import, we use a validation function similar to the following:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;const publicGithubSourceUrl = value =&amp;gt; {
  const url = String(value || '').trim();

  return /^https:\/\/github\.com\/[a-z\d_.-]+\/[a-z\d_.-]+\/(?:pull\/[1-9]\d*|commit\/[a-f\d]{40})\/?$/i.test(url)
    ? url
    : '';
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The regular expression accepts GitHub commit URLs with complete 40-character hexadecimal SHA identifiers and GitHub pull request URLs.&lt;/p&gt;
&lt;p&gt;However, this validation does not establish that the commit or pull request exists.&lt;/p&gt;
&lt;p&gt;For that, our backend performs a separate GitHub API request.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;GET https://api.github.com/repos/OWNER/REPOSITORY/commits/SHA
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If GitHub does not return an accessible resource, our application must not label it as publicly verified.&lt;/p&gt;
&lt;p&gt;This distinction is especially important when working with private repositories, inaccessible forks, and authenticated API sessions.&lt;/p&gt;
&lt;p&gt;A resource visible to one authenticated account might not be publicly accessible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Engineering lesson:&lt;/strong&gt; never confuse format validation with external evidence verification.&lt;/p&gt;
&lt;h3 id=&quot;3-linking-evidence-without-automatically-certifying-expertise&quot;&gt;3. Linking evidence without automatically certifying expertise&lt;/h3&gt;
&lt;p&gt;We implemented a workflow that allows developers to attach public GitHub evidence to existing Knowledge Cards.&lt;/p&gt;
&lt;p&gt;The owner selects a card, provides a supported GitHub URL, and explicitly confirms the operation.&lt;/p&gt;
&lt;p&gt;Our backend checks whether the referenced artifact is publicly accessible before attaching it.&lt;/p&gt;
&lt;p&gt;When the check succeeds, the reference can be described as an accessible public GitHub source.&lt;/p&gt;
&lt;p&gt;However, we deliberately avoid describing the associated activity as independently certified.&lt;/p&gt;
&lt;p&gt;A GitHub commit contains useful information, including its changes, timestamps, commit metadata, and potentially an associated GitHub account.&lt;/p&gt;
&lt;p&gt;That information can support an investigation.&lt;/p&gt;
&lt;p&gt;It does not independently prove every claim a developer makes about their expertise or individual responsibility.&lt;/p&gt;
&lt;p&gt;Our verification notes communicate those limitations directly.&lt;/p&gt;
&lt;p&gt;This approach allows structured portfolios to become more transparent without pretending that an automated system can accurately measure developer competence from GitHub metadata alone.&lt;/p&gt;
&lt;h3 id=&quot;4-documenting-an-unmerged-monero-docs-proposal&quot;&gt;4. Documenting an unmerged Monero Docs proposal&lt;/h3&gt;
&lt;p&gt;The most interesting test of our evidence model involved Monero Docs.&lt;/p&gt;
&lt;p&gt;Through my GitHub account &lt;code&gt;DanielIoni-creator&lt;/code&gt;, I prepared a documentation clarification in a fork of the Monero Docs repository.&lt;/p&gt;
&lt;p&gt;The proposed change involved the &lt;code&gt;pending&lt;/code&gt; parameter of the Wallet RPC method &lt;code&gt;get_transfers&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The original documentation stated:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Include pending transfers.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Our proposed clarification was:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Include pending, unconfirmed outgoing transfers.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The objective was to clarify that the parameter concerns pending outgoing transfers that have not yet been confirmed.&lt;/p&gt;
&lt;p&gt;The proposal was submitted to the upstream project through pull request #389.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The pull request was closed without being merged.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Another complication emerged during verification: the original fork and pull request were not accessible without authentication.&lt;/p&gt;
&lt;p&gt;Although our connected GitHub account could retrieve information about the activity, we could not treat that access as equivalent to independent public verification.&lt;/p&gt;
&lt;p&gt;We had two options.&lt;/p&gt;
&lt;p&gt;We could omit the activity entirely because the original evidence wasn't publicly accessible.&lt;/p&gt;
&lt;p&gt;Or we could document it transparently, explicitly explaining the limitations.&lt;/p&gt;
&lt;p&gt;We chose the second approach.&lt;/p&gt;
&lt;p&gt;We prepared a publicly accessible technical document containing the original wording, the proposed modification, references to the original commit and pull request, and a clear statement about the outcome.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/blob/main/docs/contributions/daniel-ioni-monero-docs-wallet-rpc.md&quot;&gt;Read our Monero Docs contribution dossier&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We then created a dedicated Knowledge Card.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/knowledge-card?id=6abf3a8c3258ab27d03c57b4&quot;&gt;View the Monero Knowledge Card&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Crucially, we label the supporting document as &lt;strong&gt;self-declared documentation that has not been independently verified&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We don't describe the proposal as an accepted upstream contribution, an official Monero collaboration, or an independently certified achievement.&lt;/p&gt;
&lt;h4 id=&quot;what-other-developers-can-learn-from-this&quot;&gt;What other developers can learn from this&lt;/h4&gt;
&lt;p&gt;Not every meaningful engineering activity results in merged code.&lt;/p&gt;
&lt;p&gt;Developers investigate problems, prepare proposals, explore unfamiliar codebases, and sometimes submit changes that are not accepted.&lt;/p&gt;
&lt;p&gt;These experiences can be documented and discussed.&lt;/p&gt;
&lt;p&gt;But the outcome is part of the engineering record.&lt;/p&gt;
&lt;p&gt;A transparent portfolio should distinguish a proposed change from a merged change rather than treating both as identical achievements.&lt;/p&gt;
&lt;h3 id=&quot;5-using-separate-evidence-categories&quot;&gt;5. Using separate evidence categories&lt;/h3&gt;
&lt;p&gt;The Monero example revealed a limitation in systems that treat every external URL as equivalent evidence.&lt;/p&gt;
&lt;p&gt;We needed to distinguish between publicly accessible GitHub commits and public documents authored by the card owner.&lt;/p&gt;
&lt;p&gt;These are different categories.&lt;/p&gt;
&lt;p&gt;A publicly accessible commit allows readers to inspect a specific repository change.&lt;/p&gt;
&lt;p&gt;An owner-authored document allows readers to inspect the owner's account of an activity.&lt;/p&gt;
&lt;p&gt;Both can be useful, but they support different conclusions.&lt;/p&gt;
&lt;p&gt;We updated our README importer to track them separately.&lt;/p&gt;
&lt;p&gt;Conceptually:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;let githubSourceCount = 0;
let declaredDocumentCount = 0;

for (const source of evidenceItems) {
  if (source.isDocument) {
    declaredDocumentCount++;
  } else {
    githubSourceCount++;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This simplified illustration reflects the separation implemented in our importer.&lt;/p&gt;
&lt;p&gt;Instead of making every reference look like a verified GitHub contribution, the generated README displays distinct labels.&lt;/p&gt;
&lt;p&gt;This makes the resulting portfolio more informative and reduces the risk of accidentally overstating the evidence.&lt;/p&gt;
&lt;h3 id=&quot;6-safely-synchronizing-a-github-profile-readme&quot;&gt;6. Safely synchronizing a GitHub profile README&lt;/h3&gt;
&lt;p&gt;Once the Knowledge Cards were publicly available, we wanted users to include them in their GitHub profiles.&lt;/p&gt;
&lt;p&gt;However, automatic README modification introduces a serious risk.&lt;/p&gt;
&lt;p&gt;Developers often maintain their GitHub profile descriptions manually. An automated system should not erase existing biographies, project references, or other user-authored content.&lt;/p&gt;
&lt;p&gt;We introduced an explicitly managed section:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;!-- MYZUBSTER-KNOWLEDGE-CARDS:START --&amp;gt;

## Knowledge Cards

&amp;lt;!-- Reviewed Knowledge Card content --&amp;gt;

&amp;lt;!-- MYZUBSTER-KNOWLEDGE-CARDS:END --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;During synchronization, Zorgax prepares the updated Knowledge Card content inside these boundaries while preserving unrelated README sections.&lt;/p&gt;
&lt;p&gt;If the managed block already exists, it is replaced instead of duplicated.&lt;/p&gt;
&lt;p&gt;This makes the operation repeatable.&lt;/p&gt;
&lt;p&gt;But we added another important restriction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If Zorgax cannot retrieve the current GitHub README, the update stops.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;During our testing, we encountered this condition when the existing README was temporarily unavailable to the application.&lt;/p&gt;
&lt;p&gt;The workflow refused to prepare a potentially unsafe update.&lt;/p&gt;
&lt;p&gt;This is preferable to guessing the previous state of an external document.&lt;/p&gt;
&lt;h4 id=&quot;user-controlled-publication&quot;&gt;User-controlled publication&lt;/h4&gt;
&lt;p&gt;We also separated content generation from publication.&lt;/p&gt;
&lt;p&gt;The user must load the existing profile, generate the updated content, inspect the preview, approve it, and authorize the GitHub update.&lt;/p&gt;
&lt;p&gt;Knowledge Card publication does not automatically rewrite the user's GitHub profile.&lt;/p&gt;
&lt;p&gt;This explicit approval process provides an additional layer of control over public identity information.&lt;/p&gt;
&lt;h3 id=&quot;7-idempotence-matters-for-generated-text-too&quot;&gt;7. Idempotence matters for generated text, too&lt;/h3&gt;
&lt;p&gt;Idempotence is usually discussed in relation to APIs, infrastructure, and database operations.&lt;/p&gt;
&lt;p&gt;We discovered that it matters just as much when generating public descriptions.&lt;/p&gt;
&lt;p&gt;Our backend automatically appends a standard verification statement when public GitHub evidence is attached to a card.&lt;/p&gt;
&lt;p&gt;Initially, a normalization function could remove the final punctuation from an existing custom note.&lt;/p&gt;
&lt;p&gt;The result was grammatically incorrect:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;... does not independently certify expertise At least
one public GitHub source has been linked ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We corrected the text-normalization logic so it preserves or restores punctuation.&lt;/p&gt;
&lt;p&gt;However, fixing new updates wasn't enough.&lt;/p&gt;
&lt;p&gt;We also needed to repair notes that had already been published.&lt;/p&gt;
&lt;p&gt;We therefore supported an explicit refresh operation for existing cards.&lt;/p&gt;
&lt;p&gt;One requirement was especially important: refreshing an already corrected note should not append the same verification statement again.&lt;/p&gt;
&lt;p&gt;Conceptually, our regression test checks:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;const first = refreshVerificationNote(existingNote);

const second = refreshVerificationNote(first);

expect(second).toBe(first);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This example illustrates the behavior rather than reproducing the complete backend test suite.&lt;/p&gt;
&lt;p&gt;We deployed the correction, refreshed the affected Knowledge Card, synchronized the GitHub profile again, and verified the resulting README.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Engineering lesson:&lt;/strong&gt; generated text deserves the same attention to repeatability and regression testing as other application data.&lt;/p&gt;
&lt;h3 id=&quot;8-what-we-actually-published&quot;&gt;8. What we actually published&lt;/h3&gt;
&lt;p&gt;After completing the workflow, we verified the public GitHub profile README.&lt;/p&gt;
&lt;p&gt;It contained three published Knowledge Cards, three public GitHub commit references, and one separately labeled public document relating to the Monero Docs proposal.&lt;/p&gt;
&lt;p&gt;It also contained exactly one managed Knowledge Card section.&lt;/p&gt;
&lt;p&gt;Our published cards cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MyZubster ecosystem development and supporting repository activity.&lt;/li&gt;
&lt;li&gt;Space Station security, digital identity, and privacy-related modules.&lt;/li&gt;
&lt;li&gt;A Monero Wallet RPC documentation proposal that was not merged upstream.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/myzubster&quot;&gt;Explore the MyZubster GitHub profile&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The resulting README is not a certificate of technical expertise.&lt;/p&gt;
&lt;p&gt;Instead, it provides a structured overview of activities and references that readers can inspect and evaluate for themselves.&lt;/p&gt;
&lt;h3 id=&quot;9-lessons-for-developers-building-similar-systems&quot;&gt;9. Lessons for developers building similar systems&lt;/h3&gt;
&lt;p&gt;Several principles emerged from this work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keep claims and evidence separate.&lt;/strong&gt; A user description and its supporting source have different roles. Your data model should preserve that distinction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Validate both structure and availability.&lt;/strong&gt; A correctly formatted GitHub URL doesn't guarantee that the resource exists or is public.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don't inflate contribution status.&lt;/strong&gt; A proposed documentation improvement can be worth discussing even when the upstream pull request is closed without a merge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Preserve existing user content.&lt;/strong&gt; When updating external documents, define the exact area your application controls and stop when the original document cannot be retrieved.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Make publication an explicit decision.&lt;/strong&gt; AI-assisted generation and external publication should be separate operations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Test repeated operations.&lt;/strong&gt; Re-running synchronization or refreshing verification text should not introduce duplicate sections or statements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Treat documentation quality as engineering quality.&lt;/strong&gt; Small punctuation errors can undermine the clarity of public verification disclosures.&lt;/p&gt;
&lt;h3 id=&quot;10-what-s-next-for-myzubster-&quot;&gt;10. What's next for MyZubster?&lt;/h3&gt;
&lt;p&gt;Our Knowledge Card implementation is an evolving foundation.&lt;/p&gt;
&lt;p&gt;We're continuing to explore ways to improve source management, clean up outdated evidence, clarify verification states, and connect structured technical activities with other parts of the MyZubster ecosystem.&lt;/p&gt;
&lt;p&gt;The broader goal is to make documented knowledge easier to discover without introducing misleading automated expertise scores or unsupported claims.&lt;/p&gt;
&lt;p&gt;We believe developers should be able to explain not only what they successfully delivered, but also the investigations, proposals, experiments, and technical decisions behind their work.&lt;/p&gt;
&lt;p&gt;That history becomes especially valuable when the supporting evidence and its limitations are clearly presented.&lt;/p&gt;
&lt;h3 id=&quot;conclusion-3&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;This project started as an attempt to improve our GitHub profile.&lt;/p&gt;
&lt;p&gt;It evolved into an exploration of evidence modeling, API validation, safe synchronization, idempotent operations, and transparent open-source documentation.&lt;/p&gt;
&lt;p&gt;The most valuable result isn't simply having three Knowledge Cards displayed on GitHub.&lt;/p&gt;
&lt;p&gt;It's having a workflow that encourages developers to document their activities while preserving the distinction between personal declarations, accessible technical artifacts, and independently established facts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A useful developer portfolio should make technical work discoverable, supporting evidence inspectable, and verification limitations visible.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That's what we're working toward with MyZubster and Zorgax.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;project-references&quot;&gt;Project references&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com&quot;&gt;MyZubster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster&quot;&gt;MyZubster open-source repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/zorgax&quot;&gt;Zorgax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/myzubster&quot;&gt;GitHub profile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster-space-station/commit/3eb0c7d050428eb63077c8926dcb3ab03d9204d5&quot;&gt;Space Station security commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster/blob/main/docs/contributions/daniel-ioni-monero-docs-wallet-rpc.md&quot;&gt;Monero Docs contribution dossier&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Daniel Ioni&lt;br&gt;
&lt;strong&gt;Project:&lt;/strong&gt; MyZubster&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Monero Docs proposal discussed in this article was not merged into the upstream project. The linked public dossier records the proposal and explicitly discloses its verification limitations.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/29488/building-trustworthy-developer-portfolio-with-github-node-js-and-structured-evidence</guid>
<pubDate>Fri, 02 Oct 2026 05:25:24 +0000</pubDate>
</item>
<item>
<title>Developer Weekly Briefing — September 25, 2026</title>
<link>https://coderlegion.com/28605/developer-weekly-briefing-september-25-2026</link>
<description>&lt;p&gt;A week where the same lesson kept showing up in different forms: the credentials your AI coding tools hold are the real attack surface, and most teams still can't answer the basic question of how many there are. Here's what mattered.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;z-ai-was-packaging-your-entire-workspace-and-shipping-it-to-alibaba-cloud&quot;&gt;Z.ai was packaging your entire workspace and shipping it to Alibaba Cloud&lt;/h3&gt;
&lt;p&gt;ZCode, the AI coding assistant from Chinese AI company Z.ai, was uploading complete workspace archives — full .git history, Git LFS cache, reflogs, and global app configs — to Alibaba Cloud Object Storage by default, in the background, encrypted with keys only Z.ai held. The privacy policy didn't disclose this behavior. There was no toggle to turn it off.&lt;/p&gt;
&lt;p&gt;An independent Chinese blogger traced abnormal disk usage to background processes and published his findings. One company reported that six coding workspaces had been uploaded, including source code, database passwords, and employee personal information. Z.ai responded: it disabled the upload mechanism in version 3.14.0, open-sourced the underlying model, and brought in NSFOCUS to confirm deletion. Most users were unsatisfied — because the archives were encrypted with Z.ai's own key, nobody outside the company could independently verify anything.&lt;/p&gt;
&lt;p&gt;Mitch Ashley's read: &quot;The workspace uploads came to light because an independent blogger traced abnormal disk usage to a background process, well after developers had installed the tool.&quot; That's the actual detection path. Not a security review. Not an MDM alert. A blogger noticing disk activity.&lt;/p&gt;
&lt;p&gt;The important line from the piece: &quot;It's tempting to file this under 'Chinese AI risk' and move on. That would miss the point.&quot; AI coding assistants need deep workspace access to be useful. That means they sit next to .env files, credentials, commit history, and the customer data someone committed by mistake three years ago. The lesson applies to every AI coding tool regardless of where the vendor is based. Developers install these tools fast. Security often hasn't reviewed them.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/your-ai-coding-assistant-has-the-keys-to-the-repo-z-ai-just-showed-why-that-matters/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;github-now-gives-enterprises-a-full-count-of-who-holds-the-keys&quot;&gt;GitHub now gives enterprises a full count of who holds the keys&lt;/h3&gt;
&lt;p&gt;GitHub Enterprise Cloud owners can now export a complete inventory of every credential that can access their enterprise — SSH keys, classic and fine-grained PATs, OAuth app access tokens, and GitHub App tokens — as a CSV or via paginated REST API. Each record includes owner, scopes, creation and expiration dates, and last-used timestamp.&lt;/p&gt;
&lt;p&gt;The timing follows directly from the May incident in which attackers exfiltrated about 3,800 internal GitHub repositories after an employee installed a poisoned Nx Console VS Code extension. GitGuardian's 2026 research puts context around why this matters at scale: 28.65 million hardcoded secrets added to public GitHub in 2025, up 34% year-on-year, and 64% of valid secrets detected in 2022 were still active and exploitable as of January 2026.&lt;/p&gt;
&lt;p&gt;Mitch Ashley on the agentic dimension: &quot;Anyone building with AI can now create credentials, and accountability for them lands back on IT and security. Enterprises that ignore that gap discover it during incident response, rotating keys they didn't know existed.&quot;&lt;/p&gt;
&lt;p&gt;One useful design detail: GitHub added a separate &quot;View enterprise credentials&quot; permission so security and compliance staff can run reviews without needing full admin rights. The API is the more practical piece — pull the inventory on a schedule, compare runs, flag new long-lived tokens, send stale ones to owners for cleanup. GitHub Enterprise Server support is coming in future releases.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/github-gives-enterprises-a-full-count-of-who-holds-the-keys/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;codex-sandbox-escapes-the-thing-doing-the-enforcement-was-inside-the-thing-being-enforced&quot;&gt;Codex sandbox escapes: the thing doing the enforcement was inside the thing being enforced&lt;/h3&gt;
&lt;p&gt;Oren Yomtov of Accomplish AI found two ways out of the OpenAI Codex sandbox — Heapjack and Overpatch — and OpenAI fixed both within eight days of the August 12 report. Accomplish published the details on September 15. Patches are in Codex CLI 0.149.0 and Codex Desktop build 26.818.21641.&lt;/p&gt;
&lt;p&gt;The mechanics are worth understanding because the pattern is recurring. Heapjack: the node_repl helper ran untrusted agent code and trusted code in separate contexts but on a shared memory heap. Untrusted code called v8.getHeapSnapshot(), scanned memory for the trust token, then used it to send forged requests to the parent process. Read-only mode didn't stop it. Overpatch: the apply_patch tool determined its own permissions by checking the parent directory of paths in a patch. Naming /tmp in the patch granted access to the entire disk through a failed operation that didn't clean up the wider permissions — which persisted into .zshrc and survived shell restarts.&lt;/p&gt;
&lt;p&gt;Yomtov's summary of the root cause: &quot;The thing doing the enforcement was sitting inside the thing being enforced.&quot; Mitch Ashley's translation for DevOps teams: &quot;A sandbox the agent can modify enforces nothing. Enforcement has to run in a layer the agent cannot reach — which means the control plane. CI teams settled this years ago when they stopped letting jobs grant themselves permissions.&quot;&lt;/p&gt;
&lt;p&gt;Both fixes are deployed. Update Codex CLI and the desktop app separately — they carry different version numbers, and checking one doesn't cover the other. And treat repositories you didn't write as untrusted input even in read-only mode.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/codex-sandbox-escapes-show-why-agent-guardrails-cant-live-inside-the-agent/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;claude-code-adds-agents-md-fallback&quot;&gt;Claude Code adds AGENTS.md fallback&lt;/h3&gt;
&lt;p&gt;Claude Code 2.1.277 now reads AGENTS.md when no CLAUDE.md exists in a directory, cleaning up the dual-file maintenance problem teams have been patching with symlinks. The short version: CLAUDE.md takes precedence when both exist; AGENTS.md is the fallback when it doesn't. Four settings in /config let teams tune the behavior — including loading both files, Claude-first, or locked to managed CLAUDE.md only.&lt;/p&gt;
&lt;p&gt;A few caveats worth reading before deleting symlinks: CLAUDE.local.md counts as CLAUDE.md for precedence purposes, so developer personal preference files will shadow the team's AGENTS.md. Claude doesn't read AGENTS.local.md or anything under .agents/. Bedrock, Vertex, and Foundry support isn't available yet. And the first session after a fresh install won't read AGENTS.md — relevant for ephemeral CI runners.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/claude-code-adds-agents-md-fallback-cutting-instruction-file-sprawl/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;github-separates-who-writes-code-from-who-runs-ci&quot;&gt;GitHub separates who writes code from who runs CI&lt;/h3&gt;
&lt;p&gt;GitHub's new Code and Automation role split gives organizations a cleaner way to grant repository access: a new &quot;CI/CD Manager&quot; role lets someone configure and run Actions workflows without inheriting write access to the codebase. For teams that have been granting broader permissions than necessary to let DevOps engineers manage pipelines, this closes a real least-privilege gap. Available now for Enterprise Cloud, coming to Enterprise Server.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/github-separates-who-writes-code-from-who-runs-your-ci/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;an-ai-agent-signed-a-developer-up-for-aws-services-he-never-requested&quot;&gt;An AI agent signed a developer up for AWS services he never requested&lt;/h3&gt;
&lt;p&gt;A developer asked an AI agent to help set up an AWS environment. The agent, interpreting the request broadly, provisioned services the developer never asked for — and AWS's billing model meant the charges started immediately. The incident clearly illustrates scope creep in agentic task execution: the agent completed what it interpreted as the goal, not what was actually requested. Worth reading if you're giving agents any access to cloud accounts.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/27994/an-ai-agent-signed-him-up-for-aws-services-he-never-asked-for&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;ripple-bets-on-stripe-and-tempo-s-payment-standard-to-get-ai-agents-spending-xrp&quot;&gt;Ripple bets on Stripe and Tempo's payment standard to get AI agents spending XRP&lt;/h3&gt;
&lt;p&gt;Ripple announced support for the X402 payment protocol — the emerging standard backed by Stripe and Tempo for machine-to-machine payments — to enable AI agents to spend XRP autonomously. As agents gain the ability to make purchases, pay for API calls, and transact on behalf of users, a standardized payment layer becomes infrastructure. Whether XRP is the currency that wins that market is a separate question from whether the category itself is real. It is.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://techstrong.ai/features/ripple-bets-on-stripe-and-tempos-payment-standard-to-get-ai-agents-spending-xrp/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;also-from-coder-legion-this-week&quot;&gt;Also from Coder Legion this week&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kore.ai's Cobus Greyling: stop chasing the next model, start owning your harness.&lt;/strong&gt; The competitive advantage in agentic AI isn't which model you run — it's the evaluation, memory, and orchestration layer you build around it. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/27976/kore-ais-cobus-greyling-stop-chasing-the-next-model-start-owning-your-harness&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LittleHorse draws the line between what your agent decides and what your code must execute.&lt;/strong&gt; A workflow orchestration approach that keeps deterministic business logic out of the LLM layer. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/27867/littlehorse-draws-the-line-between-what-your-agent-decides-and-what-your-code-must-execute&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Claude Projects Coordinator piece from last week&lt;/strong&gt; rounds out the parallel agent work story if you missed it. &lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/anthropic-adds-a-coordinator-to-claude-projects-for-running-ai-work-in-parallel/&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developer Spotlight: Steve Fenton.&lt;/strong&gt; A conversation with the developer, author, and engineering leader on his career journey, the craft of software development, and how the role is changing. Worth a read if you want something that isn't about vulnerability disclosure this week. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/28015/developer-spotlight-steve-fenton-his-developer-journey&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;The through-line this week: AI coding tools have broad access to your most sensitive assets, and the governance layer — credential inventories, sandboxes that enforce at the control plane, agent scoping — is still being built. Z.ai and Codex were caught. Most of what's happening in this category won't be.&lt;/p&gt;
&lt;p&gt;See you next Friday.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Developer Weekly Briefing is published every Friday on &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com&quot;&gt;Coder Legion&lt;/a&gt;. Written by &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Tom+Smith&quot;&gt;Tom Smith&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28605/developer-weekly-briefing-september-25-2026</guid>
<pubDate>Fri, 25 Sep 2026 13:04:16 +0000</pubDate>
</item>
<item>
<title>What I’ve learned from sharing MyZubster on CoderLegion</title>
<link>https://coderlegion.com/28548/what-ive-learned-from-sharing-myzubster-on-coderlegion</link>
<description>&lt;p&gt;Over the last months I’ve been building MyZubster, an open-source ecosystem that connects software development, AI, GitHub automation, community participation, marketplace experiments, knowledge tools and real-world pilot projects.&lt;/p&gt;
&lt;p&gt;While building it, I’ve also been sharing parts of the journey on CoderLegion.&lt;/p&gt;
&lt;p&gt;What I appreciate most is that CoderLegion gives developers a place where a project does not have to be “finished” before it can be discussed.&lt;/p&gt;
&lt;p&gt;You can share what you are building while it is still evolving.&lt;/p&gt;
&lt;p&gt;That matters to me because MyZubster is not a single application. It is an ecosystem made of many experiments, integrations and workflows. Some work immediately. Others expose bugs, architectural problems or ideas that need to be redesigned.&lt;/p&gt;
&lt;p&gt;Sharing that process publicly has value.&lt;/p&gt;
&lt;p&gt;Recently, for example, I completed an end-to-end workflow connecting:&lt;/p&gt;
&lt;p&gt;MyZubster → Zorgax → GitHub analysis → AI-generated profile proposal → human review → explicit approval → GitHub publication&lt;/p&gt;
&lt;p&gt;The final result was not just an automatically generated README.&lt;/p&gt;
&lt;p&gt;The interesting part was the engineering around it: OAuth identity, GitHub permissions, state handoff between an AI conversation and the frontend, explicit approval gates and a publicly verifiable GitHub commit.&lt;/p&gt;
&lt;p&gt;That is the kind of development story I enjoy sharing on CoderLegion.&lt;/p&gt;
&lt;p&gt;Not just:&lt;/p&gt;
&lt;p&gt;“Here is my project.”&lt;/p&gt;
&lt;p&gt;But:&lt;/p&gt;
&lt;p&gt;“Here is what I tried, what failed, what I changed, and what finally worked.”&lt;/p&gt;
&lt;p&gt;Another thing I value is being part of a developer environment where projects can be discovered by people outside the original team.&lt;/p&gt;
&lt;p&gt;For an open-source project, that is important.&lt;/p&gt;
&lt;p&gt;A repository can have thousands of commits, but external contributors, reviews, discussions and independent feedback provide a different kind of signal.&lt;/p&gt;
&lt;p&gt;They show that the project is beginning to exist outside the mind of its creator.&lt;/p&gt;
&lt;p&gt;CoderLegion has become one of the places where I can document that evolution and communicate with other developers while MyZubster continues to grow.&lt;/p&gt;
&lt;p&gt;I also like that I can write about very different parts of the same project: Node.js APIs, GitHub integrations, AI workflows, authentication, analytics, community systems, experimental pilots and product architecture.&lt;/p&gt;
&lt;p&gt;There is no need to pretend everything is perfect.&lt;/p&gt;
&lt;p&gt;For me, the useful part of a developer community is precisely the opposite: being able to show the engineering process.&lt;/p&gt;
&lt;p&gt;Build → test → break → investigate → improve → share.&lt;/p&gt;
&lt;p&gt;That process has become a central part of how I develop MyZubster.&lt;/p&gt;
&lt;p&gt;I still have a lot to build, and I would not describe MyZubster as a finished ecosystem.&lt;/p&gt;
&lt;p&gt;But I can already point to real repositories, public contributions, working integrations, experiments and lessons learned along the way.&lt;/p&gt;
&lt;p&gt;And having a community where those steps can be documented and discussed makes the journey more useful—not only for me, but potentially for another developer facing a similar problem.&lt;/p&gt;
&lt;p&gt;If you are building something and you prefer talking about the real technical process rather than only showing polished final products, CoderLegion is worth exploring.&lt;/p&gt;
&lt;p&gt;MyZubster:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/&quot;&gt;https://www.myzubster.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;GitHub:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;CoderLegion:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/&quot;&gt;https://coderlegion.com/&lt;/a&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28548/what-ive-learned-from-sharing-myzubster-on-coderlegion</guid>
<pubDate>Thu, 24 Sep 2026 21:27:59 +0000</pubDate>
</item>
<item>
<title>Hey everyone looks like I'm new here. I need to properly introduce myself and tell in short about me</title>
<link>https://coderlegion.com/28502/hey-everyone-looks-like-new-here-need-to-properly-introduce-myself-and-tell-in-short-about</link>
<description>&lt;p&gt;Hey guys ;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://media1.tenor.com/m/TLZk5IxJd6wAAAAd/wave-joe-goldberg.gif&quot; alt=&quot;Hello gif&quot;&gt;&lt;/p&gt;
&lt;p&gt;So, as the title says, I'm new here. So in short, who am I and what can I share with you?&lt;br&gt;
&lt;strong&gt;My name is Nicholas, I'm from Ukraine and I'm 20 years old.&lt;/strong&gt; &lt;em&gt;I'm also a CS student, and working on some small projects, some kind of portfolio I guess&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Now a bit about what I really like. First of all it's obviously Python, I working mostly with it, but thanks to uni I also know a bit of C++, Java, JS, C# and even Assembler. Okay now really seriously, with what I really like to play:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;machine learning;&lt;/li&gt;
&lt;li&gt;data analysis or better say data science in general;&lt;/li&gt;
&lt;li&gt;web Scraping;&lt;/li&gt;
&lt;li&gt;automation;&lt;/li&gt;
&lt;li&gt;a bit of web development;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Okay, all of it is just words, so I guess I'll add here some link, maybe to my GitHub where you could find all my projects. &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/kolyapisarenko&quot;&gt;My GitHub profile&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now in short all my projects:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Chess Project X. Project where I created 2 pure Python engines (matrix and bitboards) and even added Minimax bot. The next step that I planned is RL bot (I mean bot that will improve after every game and learning from his mistakes).&lt;/li&gt;
&lt;li&gt;Aster. A project that started as a project only for me. I just wanted to track my habits and my savings, and then it just became cool not only for me.&lt;/li&gt;
&lt;li&gt;Yakaboo Books Sales Analysis. I analyzed one of the biggest book retailers of Ukraine - Yakaboo. The main goal was to answer the question &quot;Are people reading less nowadays&quot; and in the end my data only allowed me to answer that people still read books.&lt;/li&gt;
&lt;li&gt;Music Genre Classification. Pure ML project, pretty easy in fact. Just took a dataset from Kaggle, used Streamlit for some user interface and librosa for music features extraction.&lt;/li&gt;
&lt;li&gt;Secret Santa. Maybe the easiest project. But I'll impress you, because I’ve never used Django (I've never used it before). So this project was deployed on Render and you could enter all data about the party and then get an email.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So that's a bit about me. All my projects are based on my nerdy hobbies, like reading, listening to music, chess and so on. &lt;strong&gt;But for me, the most important thing in programming is having fun and doing something that you can understand.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://media1.tenor.com/m/d5FI2bDk8iQAAAAC/dace.gif&quot; alt=&quot;Fun gif&quot;&gt;&lt;/p&gt;
&lt;p&gt;Right now I have 2 ongoing projects - Aster and Chess Project X. But my next post will be about Aster. &lt;em&gt;From it I'll talk about telegram bots, streamlit, database and later about some AI stuff.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Hope my post will be interesting for you, see you next time. Oh yeah, next time, usually I do it once a week on Thursday or Wednesday (the same on Dev.to). On X I usually do posts on Monday and Thursday. I could do it more often, but I don't know why I'm not doing it yet. So yep, bye bye&lt;/p&gt;
&lt;p&gt;Okay one more thing. If you have any questions, just ask. I'll answer it, yep so now is truly bye bye.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://media1.tenor.com/m/b2PVca_XTVMAAAAC/i%27ll-wait-patiently.gif&quot; alt=&quot;I'll wait&quot;&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28502/hey-everyone-looks-like-new-here-need-to-properly-introduce-myself-and-tell-in-short-about</guid>
<pubDate>Thu, 24 Sep 2026 15:49:03 +0000</pubDate>
</item>
<item>
<title>I think it’s time for Aster’s come back. Or just what to do when you finished your project.</title>
<link>https://coderlegion.com/28494/i-think-its-time-for-asters-come-back-or-just-what-to-do-when-you-finished-your-project</link>
<description>&lt;p&gt;Hey guys ;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://media1.tenor.com/m/UY_0nvL3aRYAAAAC/oh-hiiii-oh-hi.gif&quot; alt=&quot;Hello gif&quot;&gt;&lt;/p&gt;
&lt;p&gt;So as the title said I’ve finished my Music Classification project. You could check it here &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/kolyapisarenko/Music-Genres-Classification&quot;&gt;Music Classification Project&lt;/a&gt;.&lt;br&gt;
Sorry that I didn’t deploy this app. I hope if someone will be interested in it, then this person will just copy my repo.&lt;/p&gt;
&lt;h3 id=&quot;what-can-i-tell-you-&quot;&gt;What can I tell you?&lt;/h3&gt;
&lt;p&gt;Actually I don’t know, this project was pretty easy, because only librosa was new for me. All the other libraries I’ve used before. Maybe I just should say the main points of how to transform data into models. I guess that will be good.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://media1.tenor.com/m/d2QAZ6muxT4AAAAd/new-plan-billy-butcher.gif&quot; alt=&quot;Plan gif&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;first-step&quot;&gt;First step&lt;/h3&gt;
&lt;p&gt;Maybe it will be unexpected, but you should choose a topic in which you’re interested. I think it’s important for every project you’re working on. &lt;strong&gt;If you don’t have fun with it, then why are you doing it?&lt;/strong&gt;&lt;br&gt;
For example all my projects built on my interests and hobbies.&lt;/p&gt;
&lt;h3 id=&quot;second-step&quot;&gt;Second step&lt;/h3&gt;
&lt;p&gt;Now, you need data. It’s good if you will find an amazing dataset for your topic, or you just could scrape all data manually. The more proper data you have, the more accurate your model will be. I mean if we only have 10 students for example and half of them are good students and the other half are bad, then how to classify an average student?&lt;/p&gt;
&lt;h3 id=&quot;third-step&quot;&gt;Third step&lt;/h3&gt;
&lt;p&gt;Here you need to work with data I guess. Clean it, fill None values, normalize data and split data into training and test datasets. That’s easy, maybe normalization is a bit difficult, because you should choose for example between StandardScaler and MinMaxScaler. &lt;strong&gt;Also for some models you need to encode target&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;final-step&quot;&gt;Final step&lt;/h3&gt;
&lt;p&gt;Choose the right model and make it accurate. Yep there are Regression models and Classification models, and there are Linear models, ensemble models and so on. How to choose right? You need to read a bit of theory.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://media1.tenor.com/m/04up6tmm6pgAAAAC/sabrina-pancakes.gif&quot; alt=&quot;Difficult choise&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;what-s-next-&quot;&gt;What’s next?&lt;/h3&gt;
&lt;p&gt;Again the title said everything already. I’m going to come back to my Aster - personal assistant project. Actually I had 3 options - Chess Project, Aster and brand new AI for Cuphead.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://media.tenor.com/ORzEVSPjr64AAAAi/cuphead-cuphead-saltando.gif&quot; alt=&quot;Cuphead gif&quot;&gt;&lt;/p&gt;
&lt;p&gt;But I think I need to work with Aster, at least upgrade it, and it would be great to make Aster “alive”. So, for the next few weeks I’ll be writing about Aster. That’s all for today, see you guys later &lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28494/i-think-its-time-for-asters-come-back-or-just-what-to-do-when-you-finished-your-project</guid>
<pubDate>Thu, 24 Sep 2026 15:08:13 +0000</pubDate>
</item>
<item>
<title>Building a Human-in-the-Loop GitHub Profile Automation with MyZubster and Zorgax</title>
<link>https://coderlegion.com/28491/building-a-human-in-the-loop-github-profile-automation-with-myzubster-and-zorgax</link>
<description>&lt;p&gt;thorization with the user.&lt;/p&gt;
&lt;p&gt;Result&lt;/p&gt;
&lt;p&gt;The full GitHub profile automation loop is now working:&lt;/p&gt;
&lt;p&gt;MyZubster&lt;br&gt;
→ Zorgax&lt;br&gt;
→ GitHub analysis&lt;br&gt;
→ generated README&lt;br&gt;
→ final preview&lt;br&gt;
→ explicit human approval&lt;br&gt;
→ authenticated GitHub write&lt;br&gt;
→ public commit&lt;/p&gt;
&lt;p&gt;It took more than generating Markdown.&lt;/p&gt;
&lt;p&gt;The difficult parts were identity, OAuth, state handoff, parsing, permission boundaries and making the final action auditable.&lt;/p&gt;
&lt;p&gt;And those are exactly the parts that make AI automation interesting to build.&lt;/p&gt;
&lt;p&gt;Project: MyZubster&lt;br&gt;
AI assistant: Zorgax&lt;br&gt;
Main repository: MyZubster-Ecosystem/myzubster&lt;br&gt;
Test profile: @myzubster&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28491/building-a-human-in-the-loop-github-profile-automation-with-myzubster-and-zorgax</guid>
<pubDate>Thu, 24 Sep 2026 14:25:14 +0000</pubDate>
</item>
<item>
<title>Building Verified Developer Identities, Professional Profiles and Knowledge with MyZubster + Zorga</title>
<link>https://coderlegion.com/28243/building-verified-developer-identities-professional-profiles-knowledge-myzubster-zorga</link>
<description>&lt;h2 id=&quot;building-verified-developer-identities-professional-profiles-and-knowledge-with-myzubster-zorgax&quot;&gt;Building Verified Developer Identities, Professional Profiles and Knowledge with MyZubster + Zorgax&lt;/h2&gt;
&lt;p&gt;We are currently extending MyZubster beyond the idea of a marketplace or a metaverse.&lt;/p&gt;
&lt;p&gt;The direction is to build an ecosystem where a user can connect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an authenticated identity;&lt;/li&gt;
&lt;li&gt;a verified GitHub account;&lt;/li&gt;
&lt;li&gt;projects and repositories;&lt;/li&gt;
&lt;li&gt;contributors;&lt;/li&gt;
&lt;li&gt;professional skills;&lt;/li&gt;
&lt;li&gt;practical experience;&lt;/li&gt;
&lt;li&gt;evidence;&lt;/li&gt;
&lt;li&gt;learning goals;&lt;/li&gt;
&lt;li&gt;structured knowledge;&lt;/li&gt;
&lt;li&gt;and a Metaverse identity.&lt;br&gt;
That is easy to build, but it has an obvious weakness.&lt;br&gt;
Anyone can write anything.&lt;br&gt;
A user can claim:&lt;br&gt;
Senior JavaScript Developer&lt;br&gt;
Cybersecurity Expert&lt;br&gt;
AI Engineer&lt;br&gt;
Project Manager&lt;br&gt;
without any connection to actual work, repositories, projects or evidence.&lt;br&gt;
For MyZubster, we want a richer model.&lt;br&gt;
The profile should be able to distinguish between:&lt;br&gt;
declared skill&lt;br&gt;
practical experience&lt;br&gt;
verified identity&lt;br&gt;
evidence&lt;br&gt;
learning goal&lt;br&gt;
public contribution&lt;br&gt;
These are not the same thing.&lt;br&gt;
GitHub as a verified identity source&lt;br&gt;
GitHub is one of the first external identity sources we are integrating into the system.&lt;br&gt;
When a user authenticates with GitHub, MyZubster can associate the account with a verified GitHub identity.&lt;br&gt;
Conceptually:&lt;br&gt;
GitHub OAuth&lt;br&gt;
   ↓&lt;br&gt;
MyZubster account&lt;br&gt;
   ↓&lt;br&gt;
verified GitHub identity&lt;br&gt;
   ↓&lt;br&gt;
repositories / README / public profile&lt;br&gt;
This gives Zorgax useful context.&lt;br&gt;
For example, it can inspect available public information such as:&lt;br&gt;
GitHub profile&lt;br&gt;
bio&lt;br&gt;
public repositories&lt;br&gt;
repository descriptions&lt;br&gt;
languages&lt;br&gt;
profile README&lt;br&gt;
But we deliberately do not convert every signal into a skill automatically.&lt;br&gt;
For example:&lt;br&gt;
repository written in JavaScript&lt;br&gt;
does not automatically become:&lt;br&gt;
Advanced JavaScript Developer&lt;br&gt;
Evidence is useful, but evidence and professional qualification are not identical.&lt;br&gt;
Yassen: from GitHub to an authenticated Metaverse profile&lt;br&gt;
We recently tested part of this flow with Yassen.&lt;br&gt;
Yassen configured his GitHub profile and entered MyZubster with a complete authenticated identity.&lt;br&gt;
His MyZubster identity was connected to GitHub, and he was then able to enter the Metaverse as an authenticated user.&lt;br&gt;
The interesting part is that the Metaverse identity is not intended to remain just an isolated avatar.&lt;br&gt;
The model becomes:&lt;br&gt;
GitHub identity&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;MyZubster account&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;authenticated user&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Metaverse identity&lt;br&gt;
This is important for the future architecture.&lt;br&gt;
A character in the Metaverse can eventually represent a real account with real projects, contributions and evidence behind it.&lt;br&gt;
Yassen also added danieldirimini-myzubster as a contributor.&lt;br&gt;
That starts creating another relationship:&lt;br&gt;
User&lt;br&gt;
 ↓&lt;br&gt;
Project&lt;br&gt;
 ↓&lt;br&gt;
Contributor&lt;br&gt;
 ↓&lt;br&gt;
Contribution evidence&lt;br&gt;
This is the beginning of what can become a contribution graph inside MyZubster.&lt;br&gt;
A contribution graph instead of isolated profiles&lt;br&gt;
One of the directions we are exploring is connecting people through actual contributions.&lt;br&gt;
Instead of having only:&lt;br&gt;
User A&lt;br&gt;
User B&lt;br&gt;
User C&lt;br&gt;
we can represent something more useful:&lt;br&gt;
User A&lt;br&gt;
│&lt;br&gt;
├── Project X&lt;br&gt;
│     ├── Repository&lt;br&gt;
│     ├── Contribution&lt;br&gt;
│     └── Evidence&lt;br&gt;
│&lt;br&gt;
└── Collaborated with User B&lt;br&gt;
This can later connect to:&lt;br&gt;
GitHub commits&lt;br&gt;
pull requests&lt;br&gt;
project activity&lt;br&gt;
knowledge contributions&lt;br&gt;
reviews&lt;br&gt;
verified evidence&lt;br&gt;
The goal is not simply to measure popularity.&lt;br&gt;
It is to understand:&lt;br&gt;
What has this person actually contributed?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixing an AI onboarding problem&lt;br&gt;
While developing the professional profile onboarding flow, we found an interesting issue.&lt;br&gt;
Zorgax was supposed to interview the user.&lt;br&gt;
For example:&lt;br&gt;
What practical activities can you do?&lt;br&gt;
But an AI assistant can sometimes interpret that as:&lt;br&gt;
What can YOU, the assistant, do?&lt;br&gt;
That is obviously wrong for a professional-profile questionnaire.&lt;br&gt;
So we changed the onboarding prompt.&lt;br&gt;
Zorgax is now explicitly instructed to:&lt;br&gt;
interview the user&lt;br&gt;
ask about the user's experience&lt;br&gt;
never answer the questionnaire as Zorgax&lt;br&gt;
never attribute Zorgax capabilities to the user&lt;br&gt;
ask one question at a time&lt;br&gt;
wait for the user's response&lt;br&gt;
The principle behind this fix is simple:&lt;br&gt;
AI should help structure the user's identity, not generate an identity for the user.&lt;/p&gt;
&lt;p&gt;Structured professional profiles&lt;br&gt;
We also introduced a structured professional-profile model.&lt;br&gt;
Instead of storing only a free-text biography, MyZubster can represent data such as:&lt;br&gt;
headline&lt;br&gt;
summary&lt;br&gt;
skills&lt;br&gt;
experiences&lt;br&gt;
interests&lt;br&gt;
professional goals&lt;br&gt;
collaboration availability&lt;br&gt;
evidence&lt;br&gt;
visibility&lt;br&gt;
approval status&lt;br&gt;
version&lt;br&gt;
timestamps&lt;br&gt;
A simplified skill object can look like this:&lt;br&gt;
{&lt;br&gt;
  &quot;name&quot;: &quot;Kali Linux / Cybersecurity&quot;,&lt;br&gt;
  &quot;category&quot;: &quot;technology&quot;,&lt;br&gt;
  &quot;experience&quot;: &quot;10+ years of self-directed study and practice&quot;,&lt;br&gt;
  &quot;level&quot;: &quot;Self-taught practical experience&quot;,&lt;br&gt;
  &quot;evidence&quot;: [],&lt;br&gt;
  &quot;notes&quot;: &quot;Only legitimate and authorized security activity is represented&quot;&lt;br&gt;
}&lt;br&gt;
This format is more useful than a simple string such as:&lt;br&gt;
Cybersecurity&lt;br&gt;
because it preserves context.&lt;br&gt;
Explicit approval before persistence&lt;br&gt;
Another important part of the implementation is approval.&lt;br&gt;
The backend does not accept a professional profile as approved by default.&lt;br&gt;
A write request needs explicit approval:&lt;br&gt;
{&lt;br&gt;
  &quot;approved&quot;: true,&lt;br&gt;
  &quot;visibility&quot;: &quot;private&quot;,&lt;br&gt;
  &quot;profile&quot;: {}&lt;br&gt;
}&lt;br&gt;
or:&lt;br&gt;
{&lt;br&gt;
  &quot;approved&quot;: true,&lt;br&gt;
  &quot;visibility&quot;: &quot;public&quot;,&lt;br&gt;
  &quot;profile&quot;: {}&lt;br&gt;
}&lt;br&gt;
The onboarding UI exposes two separate actions:&lt;br&gt;
Approve and save privately&lt;br&gt;
and:&lt;br&gt;
Approve and publish on MyZubster&lt;br&gt;
This means the AI cannot silently publish the profile.&lt;br&gt;
The user makes the final decision.&lt;br&gt;
Private and public are different states&lt;br&gt;
This distinction is important for both profiles and knowledge.&lt;br&gt;
A useful mental model is:&lt;br&gt;
conversation&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;draft&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;user review&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;approval&lt;br&gt;
   / \&lt;br&gt;
  /   \&lt;br&gt;
private public&lt;br&gt;
Not everything discussed with Zorgax belongs in the public profile.&lt;br&gt;
Not every personal experience should become public data.&lt;br&gt;
Not every profile claim should become public knowledge.&lt;br&gt;
Building my own professional profile&lt;br&gt;
We are now using the same infrastructure to structure my own professional profile.&lt;br&gt;
The goal is not to make an exaggerated CV.&lt;br&gt;
The goal is to represent real experience accurately.&lt;br&gt;
My profile currently includes areas such as:&lt;br&gt;
MyZubster project management&lt;br&gt;
GitHub&lt;br&gt;
Linear&lt;br&gt;
Vercel&lt;br&gt;
ChatGPT / Zorgax&lt;br&gt;
terminal / VPS&lt;br&gt;
Kali Linux&lt;br&gt;
cybersecurity&lt;br&gt;
calisthenics&lt;br&gt;
Thai boxing&lt;br&gt;
MMA&lt;br&gt;
event organization&lt;br&gt;
visual systems&lt;br&gt;
audio systems&lt;br&gt;
barista work&lt;br&gt;
kefir&lt;br&gt;
gardening&lt;br&gt;
botany&lt;br&gt;
permaculture&lt;br&gt;
volunteering&lt;br&gt;
self-directed psychology study&lt;br&gt;
But each area is described with its actual context.&lt;br&gt;
For example:&lt;br&gt;
GitHub / Linear / Vercel&lt;br&gt;
is represented as operational usage.&lt;br&gt;
It is not automatically converted into:&lt;br&gt;
Senior Software Engineer&lt;br&gt;
MyZubster as a learning environment&lt;br&gt;
A major part of my own professional goal is to make MyZubster my main work.&lt;br&gt;
At the same time, I am using the project itself to develop new skills.&lt;br&gt;
That means the profile can represent both:&lt;br&gt;
things I already know&lt;br&gt;
and:&lt;br&gt;
things I am learning&lt;br&gt;
For example, I want to continue improving in:&lt;br&gt;
software development&lt;br&gt;
AI&lt;br&gt;
cybersecurity&lt;br&gt;
project management&lt;br&gt;
product development&lt;br&gt;
video mapping&lt;br&gt;
This allows the profile to represent a progression rather than pretending every skill is already complete.&lt;br&gt;
Evidence-aware profiles&lt;br&gt;
Another important part is evidence.&lt;br&gt;
A claim can eventually be associated with evidence such as:&lt;br&gt;
GitHub repositories&lt;br&gt;
project activity&lt;br&gt;
videos&lt;br&gt;
photos&lt;br&gt;
public contributions&lt;br&gt;
documents&lt;br&gt;
other verified sources&lt;br&gt;
This does not mean the system blindly trusts every piece of evidence.&lt;br&gt;
It means evidence can be attached to a claim and reviewed separately.&lt;br&gt;
Conceptually:&lt;br&gt;
Skill&lt;br&gt;
  ↓&lt;br&gt;
Experience&lt;br&gt;
  ↓&lt;br&gt;
Evidence&lt;br&gt;
  ↓&lt;br&gt;
Verification&lt;br&gt;
From professional profiles to knowledge&lt;br&gt;
The same architecture can be extended to knowledge.&lt;br&gt;
This is where things become more interesting.&lt;br&gt;
For example, I have several years of practical experience preparing kefir.&lt;br&gt;
That can be represented as:&lt;br&gt;
personal experience&lt;br&gt;
But it should not immediately become:&lt;br&gt;
verified universal knowledge&lt;br&gt;
Those are different concepts.&lt;br&gt;
So MyZubster Knowledge follows another principle:&lt;br&gt;
message != knowledge&lt;br&gt;
candidate != verified&lt;br&gt;
verified != public&lt;br&gt;
A user can contribute a knowledge candidate.&lt;br&gt;
Then that candidate can be connected to:&lt;br&gt;
sources&lt;br&gt;
evidence&lt;br&gt;
contributors&lt;br&gt;
review&lt;br&gt;
verification&lt;br&gt;
Only after that process should it become part of a public knowledge layer.&lt;br&gt;
The Knowledge Explorer&lt;br&gt;
We have also been building a public Knowledge Explorer.&lt;br&gt;
Its role is to expose only knowledge that has reached an appropriate state.&lt;br&gt;
The public frontend is intended to avoid displaying:&lt;br&gt;
internal candidates&lt;br&gt;
pending review content&lt;br&gt;
unverified material&lt;br&gt;
Instead, public search should operate on verified or approved knowledge.&lt;br&gt;
Conceptually:&lt;br&gt;
candidate&lt;br&gt;
   ↓&lt;br&gt;
review&lt;br&gt;
   ↓&lt;br&gt;
approved&lt;br&gt;
   ↓&lt;br&gt;
public search&lt;br&gt;
Zorgax is the orchestration layer&lt;br&gt;
It is important to clarify what Zorgax is.&lt;br&gt;
Zorgax is not simply a language model that we trained from scratch.&lt;br&gt;
It is the AI and orchestration layer of MyZubster.&lt;br&gt;
It can work with:&lt;br&gt;
LLM providers&lt;br&gt;
MyZubster user profiles&lt;br&gt;
GitHub&lt;br&gt;
verified knowledge&lt;br&gt;
evidence&lt;br&gt;
workflow rules&lt;br&gt;
human approval&lt;br&gt;
project context&lt;br&gt;
Metaverse identities&lt;br&gt;
The architecture looks roughly like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;                MyZubster
                    |
    +---------------+---------------+
    |                               |
  Profiles                       Knowledge
    |                               |
  GitHub                          Evidence
    |                               |
 Projects                        Sources
    |                               |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt; Contributions                    Verification&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    \                               /
     \                             /
      +----------- Zorgax --------+
                    |
                Metaverse
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Zorgax helps move information between these systems, but it should not bypass verification or user approval.&lt;br&gt;
Why the Metaverse matters&lt;br&gt;
This also changes the role of the Metaverse.&lt;br&gt;
A traditional Metaverse avatar might only have:&lt;br&gt;
name&lt;br&gt;
appearance&lt;br&gt;
position&lt;br&gt;
A MyZubster identity can eventually have:&lt;br&gt;
authenticated account&lt;br&gt;
verified GitHub&lt;br&gt;
professional profile&lt;br&gt;
projects&lt;br&gt;
contributors&lt;br&gt;
skills&lt;br&gt;
evidence&lt;br&gt;
knowledge contributions&lt;br&gt;
So a Metaverse character can become a visual interface for a much richer identity graph.&lt;br&gt;
For example:&lt;br&gt;
Yassen&lt;br&gt;
│&lt;br&gt;
├── authenticated MyZubster account&lt;br&gt;
├── verified GitHub profile&lt;br&gt;
├── Metaverse identity&lt;br&gt;
├── project relationships&lt;br&gt;
└── contributors&lt;br&gt;
And the same model can eventually apply to every user.&lt;br&gt;
What we have implemented so far&lt;br&gt;
At this stage, we already have several important pieces working:&lt;br&gt;
GitHub identity integration&lt;br&gt;
authenticated MyZubster accounts&lt;br&gt;
Metaverse authentication&lt;br&gt;
structured professional profiles&lt;br&gt;
private/public visibility&lt;br&gt;
explicit profile approval&lt;br&gt;
evidence-aware fields&lt;br&gt;
Zorgax profile onboarding&lt;br&gt;
profile questionnaire safeguards&lt;br&gt;
public Knowledge Explorer&lt;br&gt;
knowledge verification states&lt;br&gt;
contributor relationships&lt;br&gt;
Vercel deployment infrastructure&lt;br&gt;
We also added automated tests around the professional-profile flow.&lt;br&gt;
The tests cover areas such as:&lt;br&gt;
profile normalization&lt;br&gt;
approval requirements&lt;br&gt;
private/public visibility&lt;br&gt;
professional profile import&lt;br&gt;
onboarding JavaScript validity&lt;br&gt;
questionnaire perspective&lt;br&gt;
Current deployment work&lt;br&gt;
We recently connected the structured professional-profile backend to the onboarding interface.&lt;br&gt;
The flow now supports:&lt;br&gt;
load professional profile&lt;br&gt;
↓&lt;br&gt;
preview structured data&lt;br&gt;
↓&lt;br&gt;
explicit approval&lt;br&gt;
↓&lt;br&gt;
save private OR publish&lt;br&gt;
The relevant implementation was merged into the canonical development branch.&lt;br&gt;
We also verified automated tests before deployment.&lt;br&gt;
At the infrastructure level, we are currently deploying the updated MyZubster gateway and knowledge services through Vercel.&lt;br&gt;
The gateway deployment has already been successfully built and marked ready for production.&lt;br&gt;
The Knowledge deployment is the next part of the rollout.&lt;br&gt;
The bigger architecture&lt;br&gt;
The long-term direction is to connect these systems into one graph.&lt;br&gt;
Identity&lt;br&gt;
   ↓&lt;br&gt;
Profile&lt;br&gt;
   ↓&lt;br&gt;
Experience&lt;br&gt;
   ↓&lt;br&gt;
Evidence&lt;br&gt;
   ↓&lt;br&gt;
Contribution&lt;br&gt;
   ↓&lt;br&gt;
Verification&lt;br&gt;
   ↓&lt;br&gt;
Knowledge&lt;br&gt;
   ↓&lt;br&gt;
Collaboration&lt;br&gt;
GitHub provides one strong source of identity and technical evidence.&lt;br&gt;
The Metaverse provides a spatial and social interface.&lt;br&gt;
Zorgax provides AI-assisted orchestration.&lt;br&gt;
MyZubster Knowledge provides structured, reviewable knowledge.&lt;br&gt;
The professional profile connects the person to all of these layers.&lt;br&gt;
What we are trying to avoid&lt;br&gt;
There are several things we explicitly do not want:&lt;br&gt;
AI-generated fake skills&lt;br&gt;
unverified professional claims&lt;br&gt;
automatic public publishing&lt;br&gt;
anonymous claims treated as verified facts&lt;br&gt;
repository languages treated as expertise&lt;br&gt;
private experiences becoming public automatically&lt;br&gt;
Instead, the system should preserve distinctions.&lt;br&gt;
For example:&lt;br&gt;
self-taught != certified&lt;br&gt;
practical experience != professional qualification&lt;br&gt;
evidence != verification&lt;br&gt;
candidate knowledge != verified knowledge&lt;br&gt;
private != public&lt;br&gt;
Those distinctions make the system more complex, but also much more useful.&lt;br&gt;
What comes next&lt;br&gt;
The next work is mainly about connecting the graph more deeply.&lt;br&gt;
We want profiles to connect to:&lt;br&gt;
GitHub repositories&lt;br&gt;
contributors&lt;br&gt;
projects&lt;br&gt;
knowledge contributions&lt;br&gt;
evidence&lt;br&gt;
Metaverse identities&lt;br&gt;
and we want Zorgax to help navigate these relationships.&lt;br&gt;
My own professional profile is currently one of the real-world cases we are using to test this architecture.&lt;br&gt;
The objective is not just to build another résumé.&lt;br&gt;
The objective is to build a system that can represent:&lt;br&gt;
what a person knows&lt;br&gt;
what they have done&lt;br&gt;
what they are learning&lt;br&gt;
what evidence exists&lt;br&gt;
who they collaborated with&lt;br&gt;
what knowledge they contributed&lt;br&gt;
while keeping the user in control of what becomes public.&lt;br&gt;
That is the direction we are taking MyZubster.&lt;br&gt;
Final thought&lt;br&gt;
For me, the most interesting part of this project is not any single feature.&lt;br&gt;
It is the connection between them.&lt;br&gt;
GitHub alone is useful.&lt;br&gt;
A professional profile alone is useful.&lt;br&gt;
A Metaverse alone can be interesting.&lt;br&gt;
An AI assistant alone is useful.&lt;br&gt;
A knowledge base alone is useful.&lt;br&gt;
But when these pieces are connected through identity, evidence, contributions and verification, they become something different.&lt;br&gt;
That is what we are experimenting with through MyZubster and Zorgax.&lt;/p&gt;
&lt;p&gt;erience, evidence, AI-assisted onboarding and Metaverse identities into one verifiable ecosystem.**&lt;/p&gt;
&lt;p&gt;Zorgax acts as the AI layer that helps connect these parts, but with an important rule:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;AI can help structure information, but it should not invent a user's identity or publish claims without explicit approval.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This article explains what we have already implemented, what happened with one of our early users, Yassen, and what we are now doing with my own professional profile and knowledge inside MyZubster.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-core-problem&quot;&gt;The core problem&lt;/h3&gt;
&lt;p&gt;A normal user profile is usually just a collection of manually entered fields:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;name
bio
skills
links
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28243/building-verified-developer-identities-professional-profiles-knowledge-myzubster-zorga</guid>
<pubDate>Wed, 23 Sep 2026 03:03:09 +0000</pubDate>
</item>
<item>
<title>Building MyZubster as a Verifiable AI Development Ecosystem</title>
<link>https://coderlegion.com/28184/building-myzubster-as-a-verifiable-ai-development-ecosystem</link>
<description>&lt;p&gt;uilding MyZubster as a Verifiable AI Development Ecosystem: Metaverse, GitHub Evidence, Zorgax Knowledge, and DevelopmentRequest&lt;br&gt;
Today we had the opportunity to present and demonstrate part of the MyZubster ecosystem during an institutional hearing.&lt;br&gt;
Instead of presenting only slides or a conceptual roadmap, we showed the system directly. We opened the MyZubster metaverse, explained a real pilot involving an actual user, discussed how GitHub activity can become technical evidence, and described the architecture we are building around Zorgax, verified knowledge, software development, wallets, and human review.&lt;br&gt;
The most important outcome for us was not the meeting itself.&lt;br&gt;
It was realizing that the different components we have been building are starting to form a coherent technical system.&lt;br&gt;
The architecture is moving toward this loop:&lt;br&gt;
Real Person&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Real Activity&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Data / Evidence&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;MyZubster&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verified Knowledge&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Zorgax AI&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DevelopmentRequest&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Developer&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Code / GitHub&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tests&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Independent Verification&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;New Knowledge&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Identity / Wallet&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Metaverse Interaction&lt;br&gt;
The goal is not simply to build another AI assistant, another marketplace, or another metaverse.&lt;br&gt;
The goal is to connect all of these components around one principle:&lt;br&gt;
AI can assist the process, but evidence and verification should remain inspectable.&lt;/p&gt;
&lt;p&gt;The Metaverse Is Only the Interface&lt;br&gt;
One of the things we demonstrated was the MyZubster metaverse.&lt;br&gt;
For us, the metaverse is not the entire product.&lt;br&gt;
It is one possible user interface for a much larger system.&lt;br&gt;
The long-term idea is that a user should eventually be able to enter the environment with a digital identity, connect a wallet, interact with people or services, and have access to a history of technical contributions and activities.&lt;br&gt;
That means the visible environment may look like a metaverse, but behind it we want something closer to a verifiable contribution graph.&lt;br&gt;
A person may have:&lt;br&gt;
Identity&lt;br&gt;
  ↓&lt;br&gt;
Wallet&lt;br&gt;
  ↓&lt;br&gt;
GitHub Account&lt;br&gt;
  ↓&lt;br&gt;
Issues&lt;br&gt;
  ↓&lt;br&gt;
Pull Requests&lt;br&gt;
  ↓&lt;br&gt;
Commits&lt;br&gt;
  ↓&lt;br&gt;
Tests&lt;br&gt;
  ↓&lt;br&gt;
Reviews&lt;br&gt;
  ↓&lt;br&gt;
Verified Contributions&lt;br&gt;
The important distinction is that a wallet alone does not prove contribution.&lt;br&gt;
A GitHub account alone does not prove contribution either.&lt;br&gt;
What matters is the history of actions and the evidence attached to them.&lt;br&gt;
A commit may be evidence.&lt;br&gt;
A passing test may be evidence.&lt;br&gt;
A reviewed pull request may be evidence.&lt;br&gt;
A reproducible result may be evidence.&lt;br&gt;
But none of these should automatically be interpreted as proof of everything.&lt;br&gt;
That distinction becomes very important once AI is involved.&lt;br&gt;
A Real Pilot: Nicola&lt;br&gt;
We also presented a real pilot involving Nicola, one of the people testing and contributing to the ecosystem.&lt;br&gt;
The first experiment was intentionally simple.&lt;br&gt;
A physical kefir handover was performed and digitally recorded through MyZubster.&lt;br&gt;
The workflow represented something like:&lt;br&gt;
HAND_DELIVERY&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Receiver confirms receipt&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Status updated&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;RECORDED&lt;br&gt;
There was no payment involved.&lt;br&gt;
The specific transaction was also not recorded as an on-chain blockchain transaction.&lt;br&gt;
That is important because we do not want to describe the experiment as something it was not.&lt;br&gt;
The purpose was not to scientifically validate kefir.&lt;br&gt;
The purpose was to answer a much more technical question:&lt;br&gt;
Can a real-world event be represented digitally in a way that produces useful evidence?&lt;/p&gt;
&lt;p&gt;The answer was yes.&lt;br&gt;
From there, Nicola also tested other parts of MyZubster, reported problems, and worked on his own software.&lt;br&gt;
That gave us a more interesting participation model.&lt;br&gt;
Instead of thinking about users as static roles, we can model participation as a progression:&lt;br&gt;
User&lt;br&gt;
  ↓&lt;br&gt;
Tester&lt;br&gt;
  ↓&lt;br&gt;
Contributor&lt;br&gt;
  ↓&lt;br&gt;
Developer&lt;br&gt;
  ↓&lt;br&gt;
Evidence Producer&lt;br&gt;
  ↓&lt;br&gt;
Knowledge Contributor&lt;br&gt;
This is one of the ideas that could eventually connect the metaverse, GitHub, wallets, community reputation, and Zorgax.&lt;br&gt;
Zorgax: Chat Is Not Knowledge&lt;br&gt;
One of the most important architectural decisions we have made recently concerns Zorgax.&lt;br&gt;
We do not want to treat an AI-generated answer as verified knowledge.&lt;br&gt;
That sounds obvious, but many systems effectively do exactly that.&lt;br&gt;
A language model generates a response.&lt;br&gt;
The response is stored.&lt;br&gt;
Later the system retrieves that response as if it were truth.&lt;br&gt;
That is dangerous.&lt;br&gt;
So our architecture starts from a different assumption:&lt;br&gt;
A message is not knowledge.&lt;/p&gt;
&lt;p&gt;A message may contain useful information.&lt;br&gt;
It may become a candidate for knowledge.&lt;br&gt;
But it must go through additional stages.&lt;br&gt;
Our conceptual flow looks like this:&lt;br&gt;
User Question&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AI Response&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Candidate Information&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sources&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Evidence&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Human / System Review&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verified Knowledge&lt;br&gt;
Only after that should the information become part of a trusted knowledge layer.&lt;br&gt;
The Zorgax Knowledge Layer&lt;br&gt;
We have been building a dedicated Knowledge Layer for Zorgax.&lt;br&gt;
The knowledge model is designed to preserve more than just text.&lt;br&gt;
A useful knowledge object needs context.&lt;br&gt;
It may include concepts such as:&lt;br&gt;
Knowledge&lt;br&gt;
 ├── contributionId&lt;br&gt;
 ├── title&lt;br&gt;
 ├── content&lt;br&gt;
 ├── contentHash&lt;br&gt;
 ├── version&lt;br&gt;
 ├── status&lt;br&gt;
 ├── visibility&lt;br&gt;
 ├── provenance&lt;br&gt;
 ├── source&lt;br&gt;
 ├── evidence&lt;br&gt;
 └── lineage&lt;br&gt;
The contentHash is particularly important.&lt;br&gt;
It gives us a deterministic identity for the canonical content.&lt;br&gt;
If the content changes, the hash changes.&lt;br&gt;
This allows downstream systems to know exactly which version of knowledge they are using.&lt;br&gt;
For example, a development task may reference:&lt;br&gt;
{&lt;br&gt;
  &quot;contributionId&quot;: &quot;ZK-123&quot;,&lt;br&gt;
  &quot;contentHash&quot;: &quot;f30c...&quot;,&lt;br&gt;
  &quot;version&quot;: 3,&lt;br&gt;
  &quot;title&quot;: &quot;Metaverse Identity Architecture&quot;&lt;br&gt;
}&lt;br&gt;
Later, the knowledge may evolve to version 4.&lt;br&gt;
The development task should still be able to show:&lt;br&gt;
This implementation was based on version 3.&lt;/p&gt;
&lt;p&gt;That creates much better provenance.&lt;br&gt;
Preview Before Persistent Writes&lt;br&gt;
Another principle we implemented is:&lt;br&gt;
The AI should not silently perform consequential writes.&lt;/p&gt;
&lt;p&gt;For operations such as creating a DevelopmentRequest, the system first produces a preview.&lt;br&gt;
Conceptually:&lt;br&gt;
User Intent&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Normalized Input&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Knowledge Snapshot&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Preview&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Digest&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Explicit Confirmation&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Persistent Write&lt;br&gt;
A digest is generated from the preview.&lt;br&gt;
Then the user must confirm using a value such as:&lt;br&gt;
CONFERMA DEV a1b2c3d4&lt;br&gt;
If the preview changes, the digest changes.&lt;br&gt;
If the digest does not match, the operation fails.&lt;br&gt;
This prevents a situation where the user approves one thing and the system writes something different.&lt;br&gt;
DevelopmentRequest: Turning Knowledge Into Work&lt;br&gt;
The next architecture problem was:&lt;br&gt;
How do we transform verified knowledge into software development?&lt;/p&gt;
&lt;p&gt;Our solution is a new neutral object called DevelopmentRequest.&lt;br&gt;
A DevelopmentRequest is not a bounty.&lt;br&gt;
It is not a GitHub issue.&lt;br&gt;
It is not a payment request.&lt;br&gt;
It represents the work that needs to be done.&lt;br&gt;
The current lifecycle is:&lt;br&gt;
DRAFT&lt;br&gt;
  ↓&lt;br&gt;
OPEN&lt;br&gt;
  ↓&lt;br&gt;
IN_PROGRESS&lt;br&gt;
  ↓&lt;br&gt;
SUBMITTED&lt;br&gt;
  ↓&lt;br&gt;
VERIFIED&lt;br&gt;
or:&lt;br&gt;
SUBMITTED&lt;br&gt;
  ↓&lt;br&gt;
REJECTED&lt;br&gt;
The model also supports cancellation.&lt;br&gt;
Conceptually, the object contains:&lt;br&gt;
DevelopmentRequest {&lt;br&gt;
  requestId&lt;br&gt;
  requestHash&lt;br&gt;
  createdBy&lt;/p&gt;
&lt;p&gt;  title&lt;br&gt;
  description&lt;/p&gt;
&lt;p&gt;  knowledgeRefs[]&lt;/p&gt;
&lt;p&gt;  requirements[]&lt;br&gt;
  acceptanceTests[]&lt;br&gt;
  evidenceRequired[]&lt;/p&gt;
&lt;p&gt;  status&lt;br&gt;
  assigneeId&lt;/p&gt;
&lt;p&gt;  submission&lt;br&gt;
  review&lt;/p&gt;
&lt;p&gt;  bountyReference // optional&lt;br&gt;
}&lt;br&gt;
The important part is that the development request is anchored to verified knowledge.&lt;br&gt;
Snapshotting Knowledge&lt;br&gt;
When a DevelopmentRequest is created, Zorgax does not simply store a knowledge ID.&lt;br&gt;
It stores a snapshot reference.&lt;br&gt;
For example:&lt;br&gt;
knowledgeRefs: [&lt;br&gt;
  {&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;contributionId: &quot;ZK-123&quot;,
contentHash: &quot;abc123...&quot;,
version: 2,
title: &quot;Verified Architecture&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  }&lt;br&gt;
]&lt;br&gt;
Before the request is actually committed, the system revalidates those knowledge references.&lt;br&gt;
If the underlying content has changed between preview and commit, the operation fails.&lt;br&gt;
Conceptually:&lt;br&gt;
if (&lt;br&gt;
  expected.contentHash !== current.contentHash ||&lt;br&gt;
  expected.version !== current.version&lt;br&gt;
) {&lt;br&gt;
  throw new Error(&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;Knowledge changed after preview&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  );&lt;br&gt;
}&lt;br&gt;
This gives us something extremely useful:&lt;br&gt;
development provenance.&lt;br&gt;
We can eventually say:&lt;br&gt;
Feature X&lt;br&gt;
was implemented because of&lt;br&gt;
DevelopmentRequest Y&lt;br&gt;
which was based on&lt;br&gt;
Knowledge Z version 2&lt;br&gt;
which came from&lt;br&gt;
Evidence A + Evidence B&lt;br&gt;
That is much stronger than simply linking a GitHub issue to a random conversation.&lt;br&gt;
Submission Is Not Verification&lt;br&gt;
This is another important rule.&lt;br&gt;
A developer may submit something.&lt;br&gt;
That does not mean the work is verified.&lt;br&gt;
So the workflow separates:&lt;br&gt;
SUBMITTED&lt;br&gt;
from:&lt;br&gt;
VERIFIED&lt;br&gt;
The contributor submits evidence such as:&lt;br&gt;
{&lt;br&gt;
  &quot;evidenceRefs&quot;: [&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;test:integration:green&quot;,
&quot;demo:https://...&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  ],&lt;br&gt;
  &quot;commitRefs&quot;: [&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;commit:abc123&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  ]&lt;br&gt;
}&lt;br&gt;
But a separate reviewer is responsible for verification.&lt;br&gt;
The reviewer cannot be the creator or the assigned developer.&lt;br&gt;
Conceptually:&lt;br&gt;
if (&lt;br&gt;
  reviewer === request.createdBy ||&lt;br&gt;
  reviewer === request.assigneeId&lt;br&gt;
) {&lt;br&gt;
  throw new Error(&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;Review must be independent&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  );&lt;br&gt;
}&lt;br&gt;
This is one of the foundations for future contribution reputation.&lt;br&gt;
Strengthening the Evidence Model&lt;br&gt;
We are now tightening this further.&lt;br&gt;
The first implementation verified that evidence existed.&lt;br&gt;
But that is not enough.&lt;br&gt;
Imagine this DevelopmentRequest:&lt;br&gt;
Evidence required:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Unit tests pass&lt;/li&gt;
&lt;li&gt;Security review completed&lt;/li&gt;
&lt;li&gt;Metaverse integration demonstrated&lt;br&gt;
And the developer submits only:&lt;br&gt;
commit:abc123&lt;br&gt;
Technically, evidence exists.&lt;br&gt;
But the required evidence is not actually satisfied.&lt;br&gt;
So the stronger model connects each requirement to a specific reference.&lt;br&gt;
For example:&lt;br&gt;
{&lt;br&gt;
  &quot;evidence&quot;: [
 {
   &quot;requirement&quot;: &quot;Unit tests pass&quot;,
   &quot;reference&quot;: &quot;ci:test-run:4821&quot;
 },
 {
   &quot;requirement&quot;: &quot;Security review completed&quot;,
   &quot;reference&quot;: &quot;review:security:913&quot;
 },
 {
   &quot;requirement&quot;: &quot;Metaverse integration demonstrated&quot;,
   &quot;reference&quot;: &quot;demo:metaverse:42&quot;
 }
  ]&lt;br&gt;
}&lt;br&gt;
Then the verification rule becomes:&lt;br&gt;
VERIFIED&lt;br&gt;
only if&lt;br&gt;
every evidenceRequired item&lt;br&gt;
has corresponding evidence&lt;br&gt;
Conceptually:&lt;br&gt;
const missingEvidence =&lt;br&gt;
  requiredEvidence.filter(&lt;br&gt;
 requirement =&amp;gt;&lt;br&gt;
   !coveredRequirements.has(requirement)&lt;br&gt;
  );&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;if (missingEvidence.length) {&lt;br&gt;
  throw new Error(&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`Missing required evidence: ${missingEvidence.join(&quot;, &quot;)}`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  );&lt;br&gt;
}&lt;br&gt;
This may look like a small implementation detail.&lt;br&gt;
It is not.&lt;br&gt;
It changes the meaning of VERIFIED.&lt;br&gt;
Without this rule:&lt;br&gt;
VERIFIED = someone attached something&lt;br&gt;
With this rule:&lt;br&gt;
VERIFIED = the declared evidence requirements were actually covered&lt;br&gt;
That is a much stronger guarantee.&lt;br&gt;
DevelopmentRequest Is Not a Bounty&lt;br&gt;
Another architectural decision we intentionally made was separating development from economics.&lt;br&gt;
A DevelopmentRequest can exist without any reward.&lt;br&gt;
That means:&lt;br&gt;
Knowledge&lt;br&gt;
   ↓&lt;br&gt;
DevelopmentRequest&lt;br&gt;
   ↓&lt;br&gt;
Implementation&lt;br&gt;
   ↓&lt;br&gt;
Verification&lt;br&gt;
can operate independently.&lt;br&gt;
Then, optionally:&lt;br&gt;
DevelopmentRequest&lt;br&gt;
   ↓&lt;br&gt;
Bounty&lt;br&gt;
   ↓&lt;br&gt;
Reward&lt;br&gt;
   ↓&lt;br&gt;
Settlement&lt;br&gt;
may be attached later.&lt;br&gt;
This distinction matters.&lt;br&gt;
A university research project may not use bounties.&lt;br&gt;
An open-source volunteer may contribute without payment.&lt;br&gt;
A company may use fixed contracts.&lt;br&gt;
A decentralized community may use tokens.&lt;br&gt;
A marketplace may use fiat.&lt;br&gt;
The technical work object should not care.&lt;br&gt;
That is why the model contains only:&lt;br&gt;
bountyReference: null&lt;br&gt;
as an optional link.&lt;br&gt;
The economics remain a separate subsystem.&lt;br&gt;
GitHub as Evidence, Not Truth&lt;br&gt;
GitHub is also important in the architecture, but we do not want to make the mistake of treating GitHub itself as truth.&lt;br&gt;
A commit proves that a commit exists.&lt;br&gt;
It does not automatically prove:&lt;br&gt;
the feature works&lt;br&gt;
the requirement is satisfied&lt;br&gt;
the code is secure&lt;br&gt;
the architecture is correct&lt;br&gt;
the scientific result is valid&lt;br&gt;
So GitHub becomes one evidence source among others.&lt;br&gt;
Future DevelopmentRequest verification could combine:&lt;br&gt;
GitHub commit&lt;br&gt;
+&lt;br&gt;
CI test result&lt;br&gt;
+&lt;br&gt;
integration test&lt;br&gt;
+&lt;br&gt;
human review&lt;br&gt;
+&lt;br&gt;
external evidence&lt;br&gt;
This is also why we are working toward a Contribution Graph.&lt;br&gt;
The graph can connect:&lt;br&gt;
Developer&lt;br&gt;
   ↓&lt;br&gt;
Issue&lt;br&gt;
   ↓&lt;br&gt;
DevelopmentRequest&lt;br&gt;
   ↓&lt;br&gt;
Commit&lt;br&gt;
   ↓&lt;br&gt;
Pull Request&lt;br&gt;
   ↓&lt;br&gt;
Test&lt;br&gt;
   ↓&lt;br&gt;
Review&lt;br&gt;
   ↓&lt;br&gt;
Verified Contribution&lt;br&gt;
That provides a much richer representation of technical reputation.&lt;br&gt;
Where the Metaverse Fits Back In&lt;br&gt;
At first glance, the metaverse and DevelopmentRequest may seem unrelated.&lt;br&gt;
But they are actually part of the same architecture.&lt;br&gt;
Imagine a person entering MyZubster.&lt;br&gt;
The environment could eventually know:&lt;br&gt;
Identity&lt;br&gt;
Wallet&lt;br&gt;
GitHub History&lt;br&gt;
Verified Contributions&lt;br&gt;
Knowledge Contributions&lt;br&gt;
Development Activity&lt;br&gt;
Community Activity&lt;br&gt;
The user does not need to see all of this as raw database records.&lt;br&gt;
The metaverse can become an interface for it.&lt;br&gt;
For example, someone could enter a virtual lab or development room and interact with a project.&lt;br&gt;
Behind the scene:&lt;br&gt;
Metaverse Project&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DevelopmentRequest&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verified Knowledge&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;GitHub Repository&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Contributors&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Evidence&lt;br&gt;
The virtual environment therefore becomes a way to navigate a real technical graph.&lt;br&gt;
What We Demonstrated Today&lt;br&gt;
During the hearing, we were able to connect several of these concepts in one presentation.&lt;br&gt;
We demonstrated the MyZubster metaverse directly.&lt;br&gt;
We explained Nicola's real-world pilot.&lt;br&gt;
We discussed his AI-related development work.&lt;br&gt;
We explained how user activity can evolve into testing and software contribution.&lt;br&gt;
We described the role of GitHub history.&lt;br&gt;
We explained Zorgax.&lt;br&gt;
We described the difference between AI conversation and verified knowledge.&lt;br&gt;
We presented our university outreach and the idea that scientific pilots require scientific methodology.&lt;br&gt;
And we explained the broader direction:&lt;br&gt;
People perform real activities, software records evidence, AI assists the process, developers build solutions, and independent verification creates new trusted knowledge.&lt;/p&gt;
&lt;p&gt;Universities and Scientific Validation&lt;br&gt;
We also discussed the academic side of the project.&lt;br&gt;
We have started conversations with several universities and research groups around areas including AI, food science, fermentation, circular economy, environmental measurement, LCA/LCSA, and water reuse.&lt;br&gt;
We are intentionally keeping the wording precise.&lt;br&gt;
These are exploratory discussions.&lt;br&gt;
They are not formal partnerships unless and until they are formally established.&lt;br&gt;
The reason universities matter is structural.&lt;br&gt;
MyZubster can build:&lt;br&gt;
software&lt;br&gt;
traceability&lt;br&gt;
data collection&lt;br&gt;
knowledge infrastructure&lt;br&gt;
AI assistance&lt;br&gt;
development workflows&lt;br&gt;
evidence systems&lt;br&gt;
But scientific validation requires additional layers:&lt;br&gt;
scientific protocol&lt;br&gt;
experimental design&lt;br&gt;
control groups&lt;br&gt;
measurement methodology&lt;br&gt;
ethical assessment&lt;br&gt;
statistical analysis&lt;br&gt;
domain expertise&lt;br&gt;
An AI system should not pretend to replace those responsibilities.&lt;br&gt;
LIFE 2027 as a Possible Pilot Framework&lt;br&gt;
We are also exploring whether some of these ideas could eventually fit into a LIFE 2027 project.&lt;br&gt;
Again, this is an exploratory direction.&lt;br&gt;
There is no approved or funded MyZubster LIFE project at this stage.&lt;br&gt;
The interesting part for us is the possibility of connecting environmental pilots with the same verifiable architecture.&lt;br&gt;
For example:&lt;br&gt;
Circular Water Pilot&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sensors / Data&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Evidence&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;University Protocol&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verified Knowledge&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Zorgax&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DevelopmentRequest&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Software Improvement&lt;br&gt;
The same architecture could theoretically apply to fermentation, environmental monitoring, circular economy, Living Labs, or other pilot domains.&lt;br&gt;
That is one reason we are trying to keep the core infrastructure domain-neutral.&lt;br&gt;
The Broader Architecture&lt;br&gt;
If we compress the whole system, the current direction looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;                ┌──────────────────┐
                │    Real World    │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │ Data / Evidence  │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │ MyZubster        │
                │ Knowledge Layer  │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │      Zorgax      │
                │   AI Assistant   │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │DevelopmentRequest│
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │    Developer     │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │ GitHub / CI      │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │ Evidence Review  │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │ Verified Result  │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │  New Knowledge   │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │ Identity/Wallet  │
                │ Metaverse Layer  │
                └──────────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This creates a feedback loop.&lt;br&gt;
The output of development can become new knowledge.&lt;br&gt;
That knowledge can generate new development requests.&lt;br&gt;
Those development requests create more evidence.&lt;br&gt;
The evidence can improve the knowledge layer.&lt;br&gt;
What We Have Implemented So Far&lt;br&gt;
At the technical level, the recent work includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a Zorgax Knowledge Layer with provenance, content hashing, versioning, visibility and evidence metadata;&lt;/li&gt;
&lt;li&gt;explicit distinction between conversation, candidate information and verified knowledge;&lt;/li&gt;
&lt;li&gt;fail-closed behavior for sensitive knowledge operations;&lt;/li&gt;
&lt;li&gt;preview + digest + explicit human confirmation before persistent DevelopmentRequest creation;&lt;/li&gt;
&lt;li&gt;snapshotting of Knowledge references using contentHash and version;&lt;/li&gt;
&lt;li&gt;idempotent DevelopmentRequest creation;&lt;/li&gt;
&lt;li&gt;a lifecycle covering DRAFT, OPEN, IN_PROGRESS, SUBMITTED, VERIFIED, REJECTED and CANCELLED;&lt;/li&gt;
&lt;li&gt;contributor assignment;&lt;/li&gt;
&lt;li&gt;submission of commit and evidence references;&lt;/li&gt;
&lt;li&gt;independent review rules;&lt;/li&gt;
&lt;li&gt;strict separation between DevelopmentRequest and bounty/payment systems;&lt;/li&gt;
&lt;li&gt;integration points for future GitHub contribution tracking;&lt;/li&gt;
&lt;li&gt;an evidence model being strengthened so every required evidence item must be satisfied before VERIFIED.&lt;br&gt;
This is still evolving.&lt;br&gt;
There are important areas we still want to improve, including stronger revision models, more precise evidence objects, route-level tests, better contribution graph integration, and stronger lineage across Knowledge revisions.&lt;br&gt;
The Principle Behind the Architecture&lt;br&gt;
The most important idea is probably this:&lt;br&gt;
We are not trying to automate trust.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are trying to make trust more inspectable.&lt;br&gt;
AI can help generate code.&lt;br&gt;
AI can help search.&lt;br&gt;
AI can help organize knowledge.&lt;br&gt;
AI can help transform requirements into development tasks.&lt;br&gt;
AI can help developers.&lt;br&gt;
But an AI response should not automatically become truth.&lt;br&gt;
A commit should not automatically become proof.&lt;br&gt;
A wallet should not automatically become reputation.&lt;br&gt;
A submission should not automatically become verification.&lt;br&gt;
The architecture should preserve the difference.&lt;br&gt;
That is what we are trying to encode in the system itself.&lt;br&gt;
What Comes Next&lt;br&gt;
The next engineering steps are straightforward.&lt;br&gt;
We want to finish the stronger DevelopmentRequest evidence invariant, integrate the workflow into the operational branch, and then continue toward the GitHub and Contribution Graph bridge.&lt;br&gt;
After that, we want Zorgax to be able to move through a much richer development loop:&lt;br&gt;
Question&lt;br&gt;
   ↓&lt;br&gt;
Verified Knowledge&lt;br&gt;
   ↓&lt;br&gt;
Architecture&lt;br&gt;
   ↓&lt;br&gt;
DevelopmentRequest&lt;br&gt;
   ↓&lt;br&gt;
Implementation&lt;br&gt;
   ↓&lt;br&gt;
Tests&lt;br&gt;
   ↓&lt;br&gt;
Independent Verification&lt;br&gt;
   ↓&lt;br&gt;
Delivery&lt;br&gt;
   ↓&lt;br&gt;
Optional Reward&lt;br&gt;
   ↓&lt;br&gt;
New Knowledge&lt;br&gt;
At the same time, we will keep exploring how this architecture can work with real users, academic research, environmental pilots, and the MyZubster metaverse.&lt;br&gt;
The meeting today was useful because we did not have to describe this only as an abstract roadmap.&lt;br&gt;
We were able to show pieces of it working.&lt;br&gt;
There is still a lot to build.&lt;br&gt;
But the architecture is becoming increasingly clear.&lt;br&gt;
Real people create activity. Activity creates evidence. Evidence can become verified knowledge. Knowledge can generate development. Development creates new evidence. AI assists the entire loop without becoming the sole authority.&lt;/p&gt;
&lt;p&gt;That is the direction we are building toward with MyZubster and Zorgax.&lt;br&gt;
MyZubster&lt;br&gt;
Open Source • Verified Knowledge • AI-Assisted Development • GitHub Evidence • Metaverse • Digital Identity • Community&lt;/p&gt;
&lt;h2 id=&quot;ai-opensource-softwarearchitecture-softwaredevelopment-github-metaverse-web3-knowledgegraph-artificialintelligence-nodejs-developers-myzubster-zorgax&quot;&gt;AI #OpenSource #SoftwareArchitecture #SoftwareDevelopment #GitHub #Metaverse #Web3 #KnowledgeGraph #ArtificialIntelligence #NodeJS #Developers #MyZubster #Zorgax&lt;/h2&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28184/building-myzubster-as-a-verifiable-ai-development-ecosystem</guid>
<pubDate>Tue, 22 Sep 2026 15:42:36 +0000</pubDate>
</item>
<item>
<title>From a GitHub OAuth 404 to a More Reliable MyZubster Runtime</title>
<link>https://coderlegion.com/28092/from-a-github-oauth-404-to-a-more-reliable-myzubster-runtime</link>
<description>&lt;h2 id=&quot;from-a-github-oauth-404-to-a-more-reliable-myzubster-runtime&quot;&gt;From a GitHub OAuth 404 to a More Reliable MyZubster Runtime&lt;/h2&gt;
&lt;p&gt;Sometimes a production problem starts with a very small symptom.&lt;/p&gt;
&lt;p&gt;In our case, it was a GitHub OAuth &lt;code&gt;404&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;What looked like an authentication issue eventually led us through a much broader review of MyZubster’s development and runtime environment: GitHub account migration, repository ownership, systemd, PM2, MongoDB initialization, multiple Mongoose runtimes, realtime authorization, Bitcoin payment logic, and an aging Jest test suite.&lt;/p&gt;
&lt;p&gt;This is the story of how one error turned into a useful infrastructure cleanup.&lt;/p&gt;
&lt;h3 id=&quot;what-is-myzubster-&quot;&gt;What is MyZubster?&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://myzubster.com&quot;&gt;MyZubster&lt;/a&gt; is an evolving open-source ecosystem combining community participation, digital experiences, Marketplace and Seller workflows, AI assistance, experimental projects, a Metaverse interface, and open-source contribution.&lt;/p&gt;
&lt;p&gt;Useful links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Website: &lt;a rel=&quot;nofollow&quot; href=&quot;https://myzubster.com&quot;&gt;https://myzubster.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/danieldirimini-myzubster/myzubster&quot;&gt;https://github.com/danieldirimini-myzubster/myzubster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Marketplace: &lt;a rel=&quot;nofollow&quot; href=&quot;https://myzubster.com/marketplace&quot;&gt;https://myzubster.com/marketplace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Metaverse: &lt;a rel=&quot;nofollow&quot; href=&quot;https://myzubster.com/metaverse&quot;&gt;https://myzubster.com/metaverse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;LIFE Pilot: &lt;a rel=&quot;nofollow&quot; href=&quot;https://myzubster.com/life-pilot&quot;&gt;https://myzubster.com/life-pilot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The project is actively evolving, and part of the current work is making sure the codebase, infrastructure, runtime behavior, and tests all describe the same system.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-original-problem-github-oauth&quot;&gt;The original problem: GitHub OAuth&lt;/h3&gt;
&lt;p&gt;The first visible issue was an unreliable GitHub authentication flow that could end in a &lt;code&gt;404&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;At the same time, the previous development account had accumulated other operational limitations affecting API access, OAuth integrations, Actions, and repository workflows.&lt;/p&gt;
&lt;p&gt;Instead of trying to keep building on top of an unstable setup, we separated two concerns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the historical/public project identity;&lt;/li&gt;
&lt;li&gt;the operational GitHub identity used for development.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A new GitHub account became the operational development account, while the existing MyZubster identity inside the product remained untouched.&lt;/p&gt;
&lt;p&gt;This was important.&lt;/p&gt;
&lt;p&gt;We were changing the development control plane, not rewriting the identity or history of the project.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;migrating-git-without-destroying-local-state&quot;&gt;Migrating Git without destroying local state&lt;/h3&gt;
&lt;p&gt;The active VPS repository is located at:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;/root/myzubster
The server also contains worktrees, experimental directories, verifier code, and local files that should not be committed.
So we deliberately avoided shortcuts like:
git reset --hard
and:
git add .
Instead, we moved the canonical remote to the new GitHub repository while keeping older remotes available for reference.
The current development repository is:
https://github.com/danieldirimini-myzubster/myzubster
The active feature branch was then synchronized with the latest main without rewriting history.
That preserved the work already done while bringing in an OAuth-related fix from the main branch.
Then we found a runtime ownership problem
Once Git was stable, we inspected how MyZubster was actually running on the VPS.
We discovered that the environment used both:
systemd
PM2
That is not necessarily a problem by itself.
The real issue was that both systems appeared to have responsibility for parts of the same application.
There was a PM2 process named myzubster, while the actual HTTP gateway was being served through systemd.
Even worse, the startup paths were different.
The root server.js exported the Express application, while another process was responsible for calling .listen().
That meant we had multiple process managers around an application that did not have a single, obvious runtime owner.
The solution was to make systemd the canonical supervisor for the main gateway and remove the duplicate PM2 ownership.
PM2 remains useful for other independent services.
Production was running from an older project directory
Another subtle problem appeared in the systemd configuration.
The active repository was:
/root/myzubster
but the service still referenced an older copy:
/root/myzubster-ahp
This is a dangerous situation because you can successfully edit, test, commit, and push one repository while production continues to execute another.
We updated the systemd working directory so the code being edited and the code being executed are now aligned.
This is one of the most important lessons from this debugging session:
Never assume the repository you are editing is the repository your production process is actually running.

Check WorkingDirectory.
Check ExecStart.
Check the real process.
The homepage worked, but the Metaverse was degraded
After fixing the runtime path, the homepage returned:
HTTP 200
But the Metaverse health endpoint reported:
{
  &quot;success&quot;: false,
  &quot;status&quot;: &quot;degraded&quot;,
  &quot;transport&quot;: &quot;unavailable&quot;,
  &quot;mongodb&quot;: &quot;disconnected&quot;
}
At first this looked like a MongoDB problem.
It was not.
The credentials were correct and the root application could connect to the database.
The real problem was much more interesting.
Two Mongoose installations meant two database states
The project contains separate Node.js dependency contexts.
Conceptually:
root application
  -&amp;gt; Mongoose 7

backend
  -&amp;gt; Mongoose 8
Those are two separate JavaScript instances.
Connecting one does not connect the other.
So this:
await rootMongoose.connect(...)
does not make this true:
backendMongoose.connection.readyState === 1
The backend Metaverse code was checking its own Mongoose connection.
That connection had never been initialized by the systemd startup path.
The database itself was fine.
The application lifecycle was wrong.
Fixing the bootstrap sequence
The backend already had proper database initialization logic.
The missing piece was making sure production actually called it.
We created a dedicated systemd entrypoint that does this in the correct order:
load application
      ↓
connect backend MongoDB
      ↓
start HTTP server
In simplified Node.js:
const app = require('../server');
const backend = require('../backend/src');

async function main() {
  await backend.connectDatabase();

  const server = app.listen(5003, '127.0.0.1', () =&amp;gt; {
    console.log('MyZubster Gateway ready');
  });

  process.on('SIGTERM', async () =&amp;gt; {
    server.close(async () =&amp;gt; {
      await backend.disconnectDatabase();
      process.exit(0);
    });
  });
}

main();
After restarting systemd, the Metaverse health endpoint changed to:
{
  &quot;success&quot;: true,
  &quot;status&quot;: &quot;healthy&quot;,
  &quot;transport&quot;: &quot;shared-polling&quot;,
  &quot;mongodb&quot;: &quot;connected&quot;
}
That was a major milestone.
We did not “solve” Mongoose by deleting dependencies
A tempting response would have been to force both parts of the project to use one Mongoose installation immediately.
We deliberately did not do that.
The immediate problem was not the existence of two Mongoose versions.
The problem was that only one connection lifecycle was being initialized.
This distinction matters.
A structural refactor may still make sense in the future, but production incidents are not the right time to perform unnecessary dependency surgery.
Fix the real failure first.
Then the tests started teaching us about the architecture
The feature-specific tests were healthy.
For the MYZ-188 development work, we had:
7 test suites passed
37 tests passed
But the complete repository test suite still contained failures.
Instead of assuming the new branch had broken everything, we checked whether several failures also existed on main.
Many did.
That gave us a useful distinction:
new regression
versus:
existing technical debt
This saved us from “fixing” unrelated code based only on the fact that Jest was red.
A red test does not always mean production is wrong
One example involved the monthly AI budget.
A test expected a budget key like:
openai:gpt-5.6-sol:2026-09
while production used:
openai:all:2026-09
At first glance, changing the production key would make the test pass.
But when we reviewed the architecture, the global key was clearly intentional.
The monthly budget covers the whole OpenAI/Astra usage, and the system may fall back between different OpenAI models.
Using model-specific budget keys could allow separate models to consume separate caps.
So the production behavior was correct.
The test was stale.
We updated the test.
That is an important rule:
Tests are executable documentation, but executable documentation can become outdated too.

Realtime authorization: fail closed
Another test was hanging for five seconds.
The relevant code queried community membership through MongoDB.
When the database authority was unavailable, Mongoose buffered the query until Jest timed out.
The correct behavior for authorization was not to wait.
It was to deny.
We changed the flow to check database availability first:
if (mongoose.connection.readyState !== 1) {
  return {
    allowed: false,
    reason: 'community_membership_authority_unavailable'
  };
}
The behavior changed from:
database unavailable
    ↓
wait
    ↓
timeout
to:
database unavailable
    ↓
deny immediately
That is both faster and safer.
Then we found a real Bitcoin bug
The full suite exposed another issue:
TypeError:
Cannot read properties of undefined (reading 'includes')
The failing code was checking:
SUPPORTED_ASSETS.includes(asset)
But SUPPORTED_ASSETS itself was undefined.
The reason was a CommonJS circular dependency.
The dependency graph looked approximately like this:
Legacy Monetization Service
          ↓
Unified Checkout Service
          ↓
Quote / Chain Verifier
          ↓
Legacy Monetization Service
During module initialization, Node.js returned an incomplete export.
The result:
SUPPORTED_ASSETS === undefined
Breaking the circular dependency
We did not add a defensive fallback like:
SUPPORTED_ASSETS || []
That would hide the design problem.
Instead, we extracted the constant into a leaf module:
'use strict';

const SUPPORTED_ASSETS = Object.freeze(['BTC']);

module.exports = {
  SUPPORTED_ASSETS
};
Now the payment services depend on a small module that depends on nothing else.
The Bitcoin production tests moved from:
3 failed
2 passed
to:
5 passed
The tests cover:
- BTC availability;
- BTC/EUR quoting;
- satoshi conversion;
- Esplora verification;
- unconfirmed-payment fail-closed behavior.
Legacy tests were still mocking an older architecture
The next group of failures was especially interesting.
Several tests still mocked:
ZorgaxPaymentIntent
ZorgaxSubscription
But the current production architecture uses:
PaymentIntent
ZorgaxPurchase
Entitlement
That means the Jest mocks looked correct, but they were intercepting classes the application no longer used.
The real Mongoose models were executing instead.
Then Jest waited for the real database.
Five seconds later:
Exceeded timeout of 5000 ms
The problem was not a slow application.
It was a stale test boundary.
Test runtime: 11 seconds to less than one
One replay-protection test originally took around:
11 seconds
and failed with two timeouts.
After updating the test to mock the real architecture:
2 tests passed
in roughly:
0.7 seconds
That is a strong indicator that the previous problem was accidental external I/O.
The new replay protection verifies something closer to the real current contract:
same payment reference
        ↓
existing purchase?
        ↓
same owner?
   ┌────┴────┐
  yes        no
   ↓          ↓
 reuse      reject
Only after ownership is validated does the system grant the entitlement.
What we are doing now
The main runtime is now much healthier.
We have already completed:
- migration to the new operational GitHub account;
- repository remote cleanup;
- branch synchronization with main;
- OAuth regression verification;
- systemd runtime cleanup;
- duplicate PM2 gateway removal;
- backend MongoDB bootstrap;
- Metaverse health recovery;
- graceful backend database shutdown;
- Zorgax access compatibility cleanup;
- AI budget test alignment;
- realtime fail-closed authorization;
- Bitcoin circular-dependency removal;
- modernization of several outdated payment tests.
The current focus is the remaining legacy test suite.
Some tests still represent old implementation details instead of the current architecture.
So we are going through them carefully and asking:
Is this a production bug, or is the test describing a system that no longer exists?

That is the work happening right now.
The bigger architectural goal
The cleanup is gradually making the boundaries clearer:
systemd
  -&amp;gt; explicit gateway bootstrap

gateway bootstrap
  -&amp;gt; explicit database lifecycle

realtime authorization
  -&amp;gt; explicit availability checks

payments
  -&amp;gt; unified checkout boundary

payment constants
  -&amp;gt; dependency-free leaf module

access
  -&amp;gt; entitlement authority

tests
  -&amp;gt; mock current production boundaries
The goal is not merely to get a green test suite.
The goal is to have a green test suite that means something.
Small commits are helping a lot
We are keeping fixes isolated.
Examples include:
fix(runtime): initialize backend Mongo before gateway listen

fix(zorgax): include optional legacy subscription access source

test(zorgax): align AI budget expectation with global monthly cap

fix(realtime): fail closed when community membership authority is unavailable

fix(zorgax): break payment asset circular dependency
Small commits give us three advantages:
- easier review;
- easier rollback;
- easier reasoning.
Git becomes part of the debugging process, not just version storage.
What we deliberately did not do
Some shortcuts would have made the situation worse.
We did not:
reset the repository destructively
delete worktrees blindly
force-de-duplicate Mongoose during an incident
increase Jest timeouts to hide MongoDB access
hide circular dependencies with fallback values
commit credentials or environment secrets
A large part of production engineering is not just knowing what command to run.
It is knowing which commands not to run.
Current simplified architecture
The current direction looks like this:
GitHub
   ↓
danieldirimini-myzubster/myzubster
   ↓
VPS /root/myzubster
   ↓
systemd
   ↓
MyZubster Gateway
   ├── Root application
   ├── Backend Mongo context
   ├── Metaverse
   ├── Realtime
   ├── Zorgax
   └── Payment services
Other independent services can still use PM2 where appropriate.
The important improvement is that there is now a much clearer owner for each runtime responsibility.
What comes next
The immediate plan is:
1. finish updating the remaining legacy payment tests;
2. review source-inspection tests that still point to compatibility wrappers;
3. run the complete Jest suite again;
4. separate real regressions from intentionally changed contracts;
5. verify production health;
6. prepare the branch for review and merge into main.
The goal is simple:
align the repository, runtime, architecture, and tests before merging.

Final lesson
This entire debugging session started with:
GitHub OAuth 404
and evolved into:
GitHub migration
      ↓
runtime cleanup
      ↓
systemd stabilization
      ↓
MongoDB lifecycle fix
      ↓
Metaverse recovery
      ↓
authorization hardening
      ↓
Bitcoin dependency cleanup
      ↓
legacy test modernization
That is often how real engineering works.
The first visible error is not always the real problem.
Sometimes it is simply the first place where the system tells you to look deeper.
We are continuing that work now on MyZubster.
Project:
https://myzubster.com
GitHub:
https://github.com/danieldirimini-myzubster/myzubster
Marketplace:
https://myzubster.com/marketplace
Metaverse:
https://myzubster.com/metaverse
LIFE Pilot:
https://myzubster.com/life-pilot
The next milestone is to finish the legacy test alignment, validate the entire branch, and prepare it for merge into main.
One boundary at a time.

&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28092/from-a-github-oauth-404-to-a-more-reliable-myzubster-runtime</guid>
<pubDate>Tue, 22 Sep 2026 03:59:35 +0000</pubDate>
</item>
<item>
<title>We Turned a Real Knowledge Transfer Into Verifiable Evidence on Base Sepolia</title>
<link>https://coderlegion.com/27677/we-turned-a-real-knowledge-transfer-into-verifiable-evidence-on-base-sepolia</link>
<description>&lt;p&gt;We Turned a Real Knowledge Transfer Into Verifiable Evidence on Base Sepolia&lt;/p&gt;
&lt;p&gt;Today we completed an experiment inside MyZubster that connects real human collaboration, GitHub history, cryptographic commitments, and blockchain verification.&lt;/p&gt;
&lt;p&gt;The goal was not to “put knowledge on blockchain.”&lt;/p&gt;
&lt;p&gt;The goal was more precise:&lt;/p&gt;
&lt;p&gt;Can we take a real technical collaboration, freeze the resulting public work into a canonical record, hash it deterministically, anchor that commitment on-chain, and verify it independently later?&lt;/p&gt;
&lt;p&gt;We used the ongoing Nicola / N4K48 MyZubster pilot as the real case.&lt;/p&gt;
&lt;p&gt;The result is now public and reproducible.&lt;/p&gt;
&lt;p&gt;The real source of evidence: GitHub&lt;/p&gt;
&lt;p&gt;Nicola’s public MVP is here:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&quot;&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Live pilot:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://myzubster-mvp.onrender.com/&quot;&gt;https://myzubster-mvp.onrender.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;During the September 18 collaboration, the repository advanced across:&lt;/p&gt;
&lt;p&gt;economic provenance;&lt;br&gt;
persistent ledger storage;&lt;br&gt;
revenue and asset APIs;&lt;br&gt;
derived balances;&lt;br&gt;
source-specific revenue breakdown;&lt;br&gt;
UTC timestamps;&lt;br&gt;
asset/revenue history;&lt;br&gt;
MYZ ledger UI;&lt;br&gt;
public documentation;&lt;br&gt;
revenue simulation.&lt;/p&gt;
&lt;p&gt;Instead of describing that work loosely, we identified an exact Git history window:&lt;/p&gt;
&lt;p&gt;Base commit:&lt;br&gt;
8da7435ddc1b9ae8b2f5c2eea5debd2df4bc5f47&lt;/p&gt;
&lt;p&gt;Head commit:&lt;br&gt;
b9ac4e8801d65b84ef882baf78fa09ce5b6b5059&lt;/p&gt;
&lt;p&gt;That snapshot contains 30 commits.&lt;/p&gt;
&lt;p&gt;This gives us a concrete technical object to reference.&lt;/p&gt;
&lt;p&gt;We introduced a knowledge-transfer manifest&lt;/p&gt;
&lt;p&gt;We created a new schema:&lt;/p&gt;
&lt;p&gt;myzubster.knowledge-transfer.v1&lt;/p&gt;
&lt;p&gt;with transfer ID:&lt;/p&gt;
&lt;p&gt;KNOWLEDGE-N4K48-2026-09-18-001&lt;/p&gt;
&lt;p&gt;The manifest records:&lt;/p&gt;
&lt;p&gt;source identity;&lt;br&gt;
recipient identity;&lt;br&gt;
repository;&lt;br&gt;
base commit;&lt;br&gt;
head commit;&lt;br&gt;
changed files;&lt;br&gt;
knowledge scope;&lt;br&gt;
blockchain target;&lt;br&gt;
evidence boundaries.&lt;/p&gt;
&lt;p&gt;The important design choice is that we separate:&lt;/p&gt;
&lt;p&gt;source assertion&lt;br&gt;
from&lt;br&gt;
recipient attestation&lt;/p&gt;
&lt;p&gt;At anchor time, Nicola’s recipient attestation was still:&lt;/p&gt;
&lt;p&gt;PENDING&lt;/p&gt;
&lt;p&gt;That is intentional.&lt;/p&gt;
&lt;p&gt;A blockchain transaction should never be interpreted as automatic consent from another human.&lt;/p&gt;
&lt;p&gt;Deterministic hashing&lt;/p&gt;
&lt;p&gt;The manifest is canonicalized by:&lt;/p&gt;
&lt;p&gt;recursively sorting object keys;&lt;br&gt;
preserving array order;&lt;br&gt;
serializing compact JSON;&lt;br&gt;
UTF-8 encoding;&lt;br&gt;
calculating SHA-256.&lt;/p&gt;
&lt;p&gt;The resulting hash is:&lt;/p&gt;
&lt;p&gt;39ab3a177734b5e3e254657cfe6015100644bcda2fb008cf2561d000669b9e14&lt;/p&gt;
&lt;p&gt;The blockchain payload is:&lt;/p&gt;
&lt;p&gt;MZ-KNOWLEDGE-V1:39ab3a177734b5e3e254657cfe6015100644bcda2fb008cf2561d000669b9e14&lt;/p&gt;
&lt;p&gt;This is the core architecture:&lt;/p&gt;
&lt;p&gt;large public evidence set&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;canonical manifest&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SHA-256&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;small on-chain commitment&lt;/p&gt;
&lt;p&gt;We do not need to put source code, documentation, personal data, or full knowledge content directly on-chain.&lt;/p&gt;
&lt;p&gt;Anchoring on Base Sepolia&lt;/p&gt;
&lt;p&gt;For the pilot we used:&lt;/p&gt;
&lt;p&gt;Network: Base Sepolia&lt;br&gt;
Chain ID: 84532&lt;br&gt;
Value: 0 ETH&lt;/p&gt;
&lt;p&gt;The transaction was confirmed:&lt;/p&gt;
&lt;p&gt;0xff3c108275625673ad22a886da2df7120ae81b8f0106ec833613513b03c7bc31&lt;/p&gt;
&lt;p&gt;Block:&lt;/p&gt;
&lt;p&gt;47000958&lt;/p&gt;
&lt;p&gt;Confirmed at:&lt;/p&gt;
&lt;p&gt;2026-09-18T22:23:24.000Z&lt;/p&gt;
&lt;p&gt;Explorer:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://sepolia.basescan.org/tx/0xff3c108275625673ad22a886da2df7120ae81b8f0106ec833613513b03c7bc31&quot;&gt;https://sepolia.basescan.org/tx/0xff3c108275625673ad22a886da2df7120ae81b8f0106ec833613513b03c7bc31&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A real integration bug: MetaMask rejected self-targeted calldata&lt;/p&gt;
&lt;p&gt;Our first implementation tried to submit:&lt;/p&gt;
&lt;p&gt;from: wallet&lt;br&gt;
to: same wallet&lt;br&gt;
value: 0&lt;br&gt;
data: commitment&lt;/p&gt;
&lt;p&gt;MetaMask rejected it with:&lt;/p&gt;
&lt;p&gt;External transactions to internal accounts cannot include data&lt;/p&gt;
&lt;p&gt;So we changed the design to use a fixed zero-value evidence sink:&lt;/p&gt;
&lt;p&gt;0x000000000000000000000000000000000000dEaD&lt;/p&gt;
&lt;p&gt;No ETH is transferred.&lt;/p&gt;
&lt;p&gt;Only the commitment is carried in calldata.&lt;/p&gt;
&lt;p&gt;Then smart accounts changed the transaction shape&lt;/p&gt;
&lt;p&gt;After the transaction confirmed, the first version of our verifier reported:&lt;/p&gt;
&lt;p&gt;MISMATCH&lt;/p&gt;
&lt;p&gt;At first glance that looked wrong.&lt;/p&gt;
&lt;p&gt;The receipt was successful.&lt;/p&gt;
&lt;p&gt;The chain was correct.&lt;/p&gt;
&lt;p&gt;The value was zero.&lt;/p&gt;
&lt;p&gt;But the transaction destination and top-level calldata were not what our verifier expected.&lt;/p&gt;
&lt;p&gt;The reason: MetaMask submitted the request through a delegated smart-account transaction.&lt;/p&gt;
&lt;p&gt;The top-level transaction was type 4 and the anchor execution was wrapped inside:&lt;/p&gt;
&lt;p&gt;redeemDelegations(...)&lt;/p&gt;
&lt;p&gt;This forced us to improve the verifier.&lt;/p&gt;
&lt;p&gt;Instead of only checking:&lt;/p&gt;
&lt;p&gt;tx.to === evidenceSink&lt;br&gt;
tx.data === expectedPayload&lt;/p&gt;
&lt;p&gt;we added delegated execution decoding.&lt;/p&gt;
&lt;p&gt;The verifier now inspects the nested execution and validates:&lt;/p&gt;
&lt;p&gt;target&lt;br&gt;
value&lt;br&gt;
calldata&lt;br&gt;
execution mode&lt;/p&gt;
&lt;p&gt;Inside the delegated call we found:&lt;/p&gt;
&lt;p&gt;Target:&lt;br&gt;
0x000000000000000000000000000000000000dEaD&lt;/p&gt;
&lt;p&gt;Value:&lt;br&gt;
0&lt;/p&gt;
&lt;p&gt;Payload:&lt;br&gt;
MZ-KNOWLEDGE-V1:39ab3a177734b5e3e254657cfe6015100644bcda2fb008cf2561d000669b9e14&lt;/p&gt;
&lt;p&gt;The result became:&lt;/p&gt;
&lt;p&gt;MATCH&lt;/p&gt;
&lt;p&gt;This was one of the most useful parts of the pilot.&lt;/p&gt;
&lt;p&gt;A synthetic demo probably would not have exposed this distinction between a normal EOA transaction and a delegated smart-account execution.&lt;/p&gt;
&lt;p&gt;Public verifier&lt;/p&gt;
&lt;p&gt;We deployed a public verifier endpoint:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/api/knowledge-anchor/n4k48/0xff3c108275625673ad22a886da2df7120ae81b8f0106ec833613513b03c7bc31&quot;&gt;https://www.myzubster.com/api/knowledge-anchor/n4k48/0xff3c108275625673ad22a886da2df7120ae81b8f0106ec833613513b03c7bc31&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It checks:&lt;/p&gt;
&lt;p&gt;chainId                    ✅&lt;br&gt;
receipt success            ✅&lt;br&gt;
top-level value = 0        ✅&lt;br&gt;
delegated call recognized  ✅&lt;br&gt;
nested target match        ✅&lt;br&gt;
nested value = 0           ✅&lt;br&gt;
exact calldata match       ✅&lt;br&gt;
execution mode match       ✅&lt;/p&gt;
&lt;p&gt;Current status:&lt;/p&gt;
&lt;p&gt;{&lt;br&gt;
  &quot;success&quot;: true,&lt;br&gt;
  &quot;status&quot;: &quot;MATCH&quot;&lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;Human-readable page:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/knowledge-anchor-n4k48&quot;&gt;https://www.myzubster.com/knowledge-anchor-n4k48&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What exactly is proven?&lt;/p&gt;
&lt;p&gt;This is where engineering language matters.&lt;/p&gt;
&lt;p&gt;The blockchain anchor proves evidence about:&lt;/p&gt;
&lt;p&gt;existence&lt;br&gt;
integrity&lt;br&gt;
timestamp&lt;/p&gt;
&lt;p&gt;for the exact canonical manifest.&lt;/p&gt;
&lt;p&gt;It does not prove:&lt;/p&gt;
&lt;p&gt;authorship of every idea&lt;br&gt;
learning&lt;br&gt;
understanding&lt;br&gt;
scientific validity&lt;br&gt;
legal ownership&lt;br&gt;
commercial value&lt;br&gt;
truth of every human claim&lt;/p&gt;
&lt;p&gt;This distinction is fundamental.&lt;/p&gt;
&lt;p&gt;Blockchain is useful here as a tamper-evident timestamp and integrity layer, not as a replacement for human verification, peer review, contracts, or scientific validation.&lt;/p&gt;
&lt;p&gt;The final human layer&lt;/p&gt;
&lt;p&gt;The next step belongs to Nicola.&lt;/p&gt;
&lt;p&gt;He now needs to add a separate attestation from his own GitHub account confirming that the record actually represents knowledge, guidance, and collaboration he received and used.&lt;/p&gt;
&lt;p&gt;We intentionally do not modify the original anchored manifest, because that would change its hash.&lt;/p&gt;
&lt;p&gt;Instead, Nicola can create something like:&lt;/p&gt;
&lt;p&gt;knowledge/N4K48-ATTESTATION-KNOWLEDGE-2026-09-18.md&lt;/p&gt;
&lt;p&gt;and commit a statement acknowledging:&lt;/p&gt;
&lt;p&gt;KNOWLEDGE-N4K48-2026-09-18-001&lt;/p&gt;
&lt;p&gt;and its anchored hash.&lt;/p&gt;
&lt;p&gt;This creates a stronger chain:&lt;/p&gt;
&lt;p&gt;source assertion&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;public development evidence&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;canonical hash&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;blockchain anchor&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;independent verifier&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;recipient acknowledgement&lt;br&gt;
Why we think this architecture matters&lt;/p&gt;
&lt;p&gt;A lot of blockchain systems start from the wrong question:&lt;/p&gt;
&lt;p&gt;“What can we put on-chain?”&lt;/p&gt;
&lt;p&gt;A better question is:&lt;/p&gt;
&lt;p&gt;“What evidence should stay off-chain, and what minimal commitment should be anchored on-chain?”&lt;/p&gt;
&lt;p&gt;For MyZubster, this leads to a cleaner architecture:&lt;/p&gt;
&lt;p&gt;GitHub → evidence history&lt;br&gt;
SHA-256 → integrity&lt;br&gt;
Base Sepolia → timestamp anchor&lt;br&gt;
Human attestation → consent / acknowledgement&lt;br&gt;
Research review → validation&lt;br&gt;
MYZ ledger → internal accounting&lt;/p&gt;
&lt;p&gt;Each layer does one job.&lt;/p&gt;
&lt;p&gt;That separation avoids a lot of semantic confusion.&lt;/p&gt;
&lt;p&gt;Knowledge is not the token&lt;/p&gt;
&lt;p&gt;Another design principle we are keeping explicit:&lt;/p&gt;
&lt;p&gt;knowledge ≠ blockchain asset&lt;br&gt;
MYZ ≠ crypto token&lt;br&gt;
GitHub commit ≠ legal ownership&lt;br&gt;
blockchain timestamp ≠ scientific proof&lt;/p&gt;
&lt;p&gt;MYZ remains an internal MyZubster accounting unit.&lt;/p&gt;
&lt;p&gt;The knowledge anchor is a separate evidence mechanism.&lt;/p&gt;
&lt;p&gt;The two may interact later through explicit business rules, but they should never be silently merged into one concept.&lt;/p&gt;
&lt;p&gt;Public references&lt;/p&gt;
&lt;p&gt;Nicola / N4K48 repository:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&quot;&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Live pilot:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://myzubster-mvp.onrender.com/&quot;&gt;https://myzubster-mvp.onrender.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MyZubster verification page:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/knowledge-anchor-n4k48&quot;&gt;https://www.myzubster.com/knowledge-anchor-n4k48&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Verifier endpoint:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.myzubster.com/api/knowledge-anchor/n4k48/0xff3c108275625673ad22a886da2df7120ae81b8f0106ec833613513b03c7bc31&quot;&gt;https://www.myzubster.com/api/knowledge-anchor/n4k48/0xff3c108275625673ad22a886da2df7120ae81b8f0106ec833613513b03c7bc31&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;BaseScan:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://sepolia.basescan.org/tx/0xff3c108275625673ad22a886da2df7120ae81b8f0106ec833613513b03c7bc31&quot;&gt;https://sepolia.basescan.org/tx/0xff3c108275625673ad22a886da2df7120ae81b8f0106ec833613513b03c7bc31&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MyZubster Core:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MyZubster-Ecosystem/myzubster&quot;&gt;https://github.com/MyZubster-Ecosystem/myzubster&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What we learned&lt;/p&gt;
&lt;p&gt;The biggest lesson was not about hashes or blockchains.&lt;/p&gt;
&lt;p&gt;It was about evidence boundaries.&lt;/p&gt;
&lt;p&gt;Real systems need to distinguish:&lt;/p&gt;
&lt;p&gt;recorded&lt;br&gt;
from&lt;br&gt;
verified&lt;/p&gt;
&lt;p&gt;verified&lt;br&gt;
from&lt;br&gt;
validated&lt;/p&gt;
&lt;p&gt;validated&lt;br&gt;
from&lt;br&gt;
owned&lt;/p&gt;
&lt;p&gt;owned&lt;br&gt;
from&lt;br&gt;
understood&lt;/p&gt;
&lt;p&gt;Once those boundaries are explicit, blockchain becomes much more useful.&lt;/p&gt;
&lt;p&gt;Not as a magical source of truth.&lt;/p&gt;
&lt;p&gt;But as one precise component in a larger evidence architecture.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27677/we-turned-a-real-knowledge-transfer-into-verifiable-evidence-on-base-sepolia</guid>
<pubDate>Sat, 19 Sep 2026 02:18:27 +0000</pubDate>
</item>
<item>
<title>GitHub Copilot vs Cursor vs Claude Code</title>
<link>https://coderlegion.com/27664/github-copilot-vs-cursor-vs-claude-code</link>
<description>&lt;p&gt;These three get lumped together as &quot;AI coding tools,&quot; but they're solving genuinely different problems in your workflow, inline completion, full-editor AI integration, and autonomous multi-file agentic work. Here's how they actually differ, and which combination makes sense depending on what you're building.&lt;/p&gt;
&lt;h4 id=&quot;github-copilot-the-widest-net&quot;&gt;GitHub Copilot: the widest net&lt;/h4&gt;
&lt;p&gt;Copilot's real advantage isn't raw capability,  it's reach. Native support across VS Code, JetBrains, Neovim, Visual Studio, and Xcode makes it the easiest entry point regardless of what editor your team already uses, and it holds the largest market share of any tool in this category. The free tier (around 2,000 completions a month) makes it close to a no-brainer starting point, especially for teams already living inside the GitHub ecosystem for issues, PRs, and CI.&lt;/p&gt;
&lt;p&gt;Where it's the clear pick: you want inline, low-friction autocomplete everywhere you already work, without changing editors or workflow.&lt;/p&gt;
&lt;h4 id=&quot;cursor-ai-woven-into-the-entire-editor-not-just-autocomplete&quot;&gt;Cursor: AI woven into the entire editor, not just autocomplete&lt;/h4&gt;
&lt;p&gt;Cursor is a fork of VS Code with AI integrated at every layer, not bolted on as a plugin. Its Composer interface handles complex multi-file refactors directly inside the editor, and it's become the most commercially successful tool in this category by a wide margin, reportedly over a million users and reviewers reporting meaningfully fewer PR review comments after adopting it. For developers who live in their editor all day, having AI that understands the whole open project (not just the current file) is a genuinely different experience from inline suggestions.&lt;/p&gt;
&lt;p&gt;Where it's the clear pick: you want AI-assisted editing as your default way of working, not an occasional autocomplete assist.&lt;/p&gt;
&lt;h4 id=&quot;claude-code-the-one-for-autonomous-repo-wide-work&quot;&gt;Claude Code: the one for autonomous, repo-wide work&lt;/h4&gt;
&lt;p&gt;Claude Code operates more like an agent than an editor plugin,  it reads files, runs commands, manages git, executes tests, and edits across multiple files in your actual local environment, currently leading autonomous coding benchmarks (around 80% on SWE-bench Verified). This is the tool for handing off a genuinely complex, multi-step task and getting back a coherent, well-reasoned result,  not for inline suggestions while you type.&lt;/p&gt;
&lt;p&gt;Where it's the clear pick: large refactors, unfamiliar codebases you need to understand quickly, or any task better described as &quot;do this whole thing&quot; rather than &quot;suggest the next few lines.&quot;&lt;/p&gt;
&lt;h4 id=&quot;what-most-working-developers-actually-do&quot;&gt;What most working developers actually do&lt;/h4&gt;
&lt;p&gt;The realistic setup isn't picking one, it's layering them by task size. A common, cost-effective combination is Copilot for everyday autocomplete plus Claude Code for the occasional complex refactor or architecture task. A more editor-centric setup swaps in Cursor as the daily driver, with Claude Code still handling anything that spans the whole codebase.&lt;/p&gt;
&lt;h4 id=&quot;how-to-actually-choose&quot;&gt;How to actually choose&lt;/h4&gt;
&lt;p&gt;Don't start from &quot;which is best&quot;,  start from where your current friction actually is. If you're constantly context-switching between editors, Copilot's reach solves that. If your bottleneck is slow, disjointed multi-file edits, Cursor's integrated approach solves that. If you're regularly facing tasks too large or unfamiliar to comfortably do by hand, Claude Code's autonomous, repo-aware approach is the one built for exactly that job.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27664/github-copilot-vs-cursor-vs-claude-code</guid>
<pubDate>Fri, 18 Sep 2026 17:28:31 +0000</pubDate>
</item>
<item>
<title>My Django Secret Key Was Public on GitHub - How I Fixed It</title>
<link>https://coderlegion.com/27597/my-django-secret-key-was-public-on-github-how-i-fixed-it</link>
<description>&lt;p&gt;We all make mistakes, especially when starting out. Recently, the ultimate developer mishap happened to me: I accidentally pushed my Django SECRET_KEY to a public GitHub repository.&lt;/p&gt;
&lt;p&gt;In Django, the SECRET_KEY is used for cryptographic signing, like session cookies or password reset tokens. It is essential for protecting sensitive data and preventing tampering or unauthorized access. Leaving it publicly exposed is a massive NO-GO.&lt;/p&gt;
&lt;p&gt;But that is exactly what learning projects are for! Luckily this happened to a project with no real user data. We learn the most from our mistakes, and I now know exactly how to handle this situation. Here is how to fix it:&lt;/p&gt;
&lt;h3 id=&quot;step-1-invalidate-the-old-key-immediately&quot;&gt;Step 1: Invalidate the old key immediately&lt;/h3&gt;
&lt;p&gt;Simply changing the key in your code and pushing it again is not enough. The old key remains visible forever in your GitHub commit history. The first step is damage control, so we need to generate a new key. Start the Python shell in your project terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;python manage.py shell
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then enter the following lines:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from django.core.management.utils import get_random_secret_key
print(get_random_secret_key())
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first line imports the required utility function and the second line generates the new key and prints it to the terminal so you can copy it.&lt;/p&gt;
&lt;p&gt;*&lt;strong&gt;UPDATE&lt;/strong&gt; (September 21st 2026): Based on reader feedback and GitHub's official security guidance, I’ve updated this section. Rotating the secret key is the single most critical step. Purging your Git history with tools like git-filter-repo is a helpful next step to tidy up, but it does not guarantee absolute security, as old commits can still persist in forks or cached views on GitHub's servers.*&lt;/p&gt;
&lt;h3 id=&quot;step-2-move-the-secret-key-to-environment-variables&quot;&gt;Step 2: Move the Secret Key to environment variables&lt;/h3&gt;
&lt;p&gt;To make sure this never happens again, I moved the key into a .env file. Create this file in your root directory and make sure to add it to your .gitignore file so it never gets tracked by GitHub.&lt;/p&gt;
&lt;p&gt;To load the environment variables from the .env file into the Django project, we use the python-dotenv library. Install it first:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pip install python-dotenv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next update your settings.py file like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import os
from dotenv import load_dotenv

load_dotenv()

SECRET_KEY = os.getenv(&quot;SECRET_KEY&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finally store your actual key inside the .env file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SECRET_KEY=&quot;your_new_secret_key_here&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;conclusion-mistakes-happen-it-s-how-you-handle-them-that-matters&quot;&gt;Conclusion: Mistakes happen, it's how you handle them that matters&lt;/h3&gt;
&lt;p&gt;Thanks to this faux pas my Django project is now secure and follows configuration management best practices. My brain has permanently saved this lesson so it won't happen again! 😊&lt;/p&gt;
</description>
<category>Tutorials</category>
<guid isPermaLink="true">https://coderlegion.com/27597/my-django-secret-key-was-public-on-github-how-i-fixed-it</guid>
<pubDate>Fri, 18 Sep 2026 10:07:50 +0000</pubDate>
</item>
<item>
<title># MyZubster Is Becoming an Identity and Interaction Layer: Authentication → Zorgax → GitHub → Metave</title>
<link>https://coderlegion.com/27596/myzubster-becoming-identity-and-interaction-layer-authentication-zorgax-github-metave</link>
<description>&lt;h2 id=&quot;myzubster-is-becoming-an-identity-and-interaction-layer-authentication-zorgax-github-metaverse-nfts&quot;&gt;MyZubster Is Becoming an Identity and Interaction Layer: Authentication → Zorgax → GitHub → Metaverse → NFTs&lt;/h2&gt;
&lt;p&gt;Over the last few months, MyZubster has changed significantly.&lt;/p&gt;
&lt;p&gt;What started as an open-source ecosystem of experiments is beginning to converge around a much simpler entry point:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Authentication → Zorgax → Profile → GitHub → Interactions → Metaverse → Digital Assets&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The interesting part isn't any single technology in that chain.&lt;/p&gt;
&lt;p&gt;It's what happens when they share the same identity and evidence layer.&lt;/p&gt;
&lt;h3 id=&quot;authentication-is-the-starting-point&quot;&gt;Authentication Is the Starting Point&lt;/h3&gt;
&lt;p&gt;When someone authenticates with MyZubster, we don't want the result to be just another empty account.&lt;/p&gt;
&lt;p&gt;Authentication should become the beginning of a persistent ecosystem identity.&lt;/p&gt;
&lt;p&gt;From there, the user can progressively connect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a MyZubster profile;&lt;/li&gt;
&lt;li&gt;interests and skills;&lt;/li&gt;
&lt;li&gt;projects;&lt;/li&gt;
&lt;li&gt;GitHub activity;&lt;/li&gt;
&lt;li&gt;Marketplace activity;&lt;/li&gt;
&lt;li&gt;knowledge and experiments;&lt;/li&gt;
&lt;li&gt;Metaverse identity;&lt;/li&gt;
&lt;li&gt;and, eventually, qualifying digital assets or NFTs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This distinction matters:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Authentication proves access to an account.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It does not automatically prove every claim that appears in a profile.&lt;/p&gt;
&lt;h3 id=&quot;zorgax-helps-build-the-profile&quot;&gt;Zorgax Helps Build the Profile&lt;/h3&gt;
&lt;p&gt;This is where Zorgax becomes useful.&lt;/p&gt;
&lt;p&gt;Instead of presenting a new user with a huge registration form, Zorgax can help progressively construct the profile.&lt;/p&gt;
&lt;p&gt;The conversation can start with simple questions:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who are you?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What are you building?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you know?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What would you like to learn?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What can you contribute?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The architecture becomes:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;USER → AUTH → ZORGAX → PROFILE&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Zorgax can help organize the information, improve descriptions, identify missing information and connect the user to relevant parts of MyZubster.&lt;/p&gt;
&lt;p&gt;But the human remains the source of the identity.&lt;/p&gt;
&lt;p&gt;That's why we keep an important boundary:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;HUMAN WORK ≠ AI ASSISTANCE ≠ VERIFIED EVIDENCE&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&quot;then-github-makes-the-profile-inspectable&quot;&gt;Then GitHub Makes the Profile Inspectable&lt;/h3&gt;
&lt;p&gt;For developers and open-source participants, GitHub adds another dimension.&lt;/p&gt;
&lt;p&gt;A person can move from saying:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I build software.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;to linking actual public work:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PROFILE → REPOSITORY → ISSUE → COMMIT → PULL REQUEST → PROJECT&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This is important for MyZubster because we don't want Zorgax to simply generate impressive biographies.&lt;/p&gt;
&lt;p&gt;Where evidence exists, the profile should be able to point to it.&lt;/p&gt;
&lt;p&gt;GitHub becomes part of the interaction graph.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;MYZUBSTER IDENTITY ↔ GITHUB WORK ↔ ZORGAX&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;A project can then become discoverable through the person's profile and potentially through other MyZubster experiences.&lt;/p&gt;
&lt;h3 id=&quot;the-same-identity-can-enter-the-metaverse&quot;&gt;The Same Identity Can Enter the Metaverse&lt;/h3&gt;
&lt;p&gt;Now things become more interesting.&lt;/p&gt;
&lt;p&gt;The MyZubster identity doesn't have to stop at a web profile.&lt;/p&gt;
&lt;p&gt;It can also represent the person inside the MyZubster Metaverse.&lt;/p&gt;
&lt;p&gt;Imagine entering a digital space and meeting another avatar.&lt;/p&gt;
&lt;p&gt;That avatar could connect back to:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PERSON&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;MYZUBSTER PROFILE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;PROJECTS&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;GITHUB&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;KNOWLEDGE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DOCUMENTED ACTIVITY&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The Metaverse then stops being only a graphical chat environment.&lt;/p&gt;
&lt;p&gt;It becomes another interface for discovering people, projects, communities and interactions.&lt;/p&gt;
&lt;h3 id=&quot;github-metaverse-creates-a-new-kind-of-interaction&quot;&gt;GitHub + Metaverse Creates a New Kind of Interaction&lt;/h3&gt;
&lt;p&gt;This is one of the directions we're interested in exploring.&lt;/p&gt;
&lt;p&gt;A developer contributes to an open-source project.&lt;/p&gt;
&lt;p&gt;The contribution exists on GitHub.&lt;/p&gt;
&lt;p&gt;The MyZubster profile references that work.&lt;/p&gt;
&lt;p&gt;The same identity enters the Metaverse.&lt;/p&gt;
&lt;p&gt;Other participants can discover the project.&lt;/p&gt;
&lt;p&gt;That can lead to another contribution, collaboration, mission or community interaction.&lt;/p&gt;
&lt;p&gt;The loop becomes:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;GITHUB&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;MYZUBSTER PROFILE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;METAVERSE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;HUMAN INTERACTION&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;NEW PROJECT / CONTRIBUTION&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;GITHUB&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now GitHub isn't isolated from the social environment around the project.&lt;/p&gt;
&lt;h3 id=&quot;where-nfts-become-interesting&quot;&gt;Where NFTs Become Interesting&lt;/h3&gt;
&lt;p&gt;This also changes how we think about NFTs.&lt;/p&gt;
&lt;p&gt;Instead of starting with:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;MINT NFT → TRY TO CREATE UTILITY&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;we can explore the opposite direction:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PARTICIPATE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;BUILD&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;INTERACT&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DOCUMENT&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;VERIFY WHEN POSSIBLE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;QUALIFY&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;OPTIONAL NFT / DIGITAL ASSET&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In that model, the NFT isn't necessarily the product.&lt;/p&gt;
&lt;p&gt;It can become a digital artifact produced by an interaction.&lt;/p&gt;
&lt;p&gt;For example, future assets could reference:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an open-source contribution;&lt;/li&gt;
&lt;li&gt;a Metaverse event;&lt;/li&gt;
&lt;li&gt;a creator collectible;&lt;/li&gt;
&lt;li&gt;a completed mission;&lt;/li&gt;
&lt;li&gt;a community artifact;&lt;/li&gt;
&lt;li&gt;a documented project milestone;&lt;/li&gt;
&lt;li&gt;or another qualifying MyZubster interaction.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That creates a potential distribution network for digital assets.&lt;/p&gt;
&lt;h3 id=&quot;myzubster-becomes-the-connector&quot;&gt;MyZubster Becomes the Connector&lt;/h3&gt;
&lt;p&gt;The architecture we're moving toward can be represented like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PERSON&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;AUTHENTICATION&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;MYZUBSTER IDENTITY&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;ZORGAX&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;PROFILE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;GITHUB + PROJECTS + KNOWLEDGE + MARKETPLACE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;INTERACTIONS&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;EVIDENCE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;METAVERSE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;OPTIONAL NFT / DIGITAL ASSET&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And then it loops.&lt;/p&gt;
&lt;p&gt;A GitHub repository can bring somebody into MyZubster.&lt;/p&gt;
&lt;p&gt;A MyZubster profile can bring somebody into the Metaverse.&lt;/p&gt;
&lt;p&gt;A Metaverse interaction can create a new collaboration.&lt;/p&gt;
&lt;p&gt;That collaboration can produce GitHub activity.&lt;/p&gt;
&lt;p&gt;And a qualifying interaction could eventually generate a collectible or another digital asset.&lt;/p&gt;
&lt;h3 id=&quot;the-important-part-don-t-confuse-identity-with-evidence&quot;&gt;The Important Part: Don't Confuse Identity With Evidence&lt;/h3&gt;
&lt;p&gt;Connecting all these systems also creates an obvious risk.&lt;/p&gt;
&lt;p&gt;If we're not careful, a profile could appear to prove things that it doesn't actually prove.&lt;/p&gt;
&lt;p&gt;So we're keeping these concepts separate:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;IDENTITY ≠ CLAIM ≠ ACTIVITY ≠ EVIDENCE ≠ VERIFICATION ≠ NFT&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Authentication doesn't prove expertise.&lt;/p&gt;
&lt;p&gt;A GitHub account doesn't automatically prove that somebody authored everything connected to it.&lt;/p&gt;
&lt;p&gt;Zorgax-generated text doesn't prove a claim.&lt;/p&gt;
&lt;p&gt;A Metaverse interaction doesn't automatically prove a physical-world event.&lt;/p&gt;
&lt;p&gt;And an NFT doesn't magically make its metadata true.&lt;/p&gt;
&lt;p&gt;The architecture becomes more useful when those boundaries remain explicit.&lt;/p&gt;
&lt;h3 id=&quot;what-myzubster-is-becoming&quot;&gt;What MyZubster Is Becoming&lt;/h3&gt;
&lt;p&gt;I used to think mostly about what features MyZubster should contain.&lt;/p&gt;
&lt;p&gt;Now the more interesting question is:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What happens when identity, AI assistance, open-source work, digital interaction and verifiable artifacts become connected?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That's the direction we're exploring.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AUTHENTICATE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;MEET ZORGAX&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;BUILD YOUR PROFILE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;CONNECT YOUR WORK&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;ENTER THE METAVERSE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;INTERACT&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;CREATE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DOCUMENT&lt;/code&gt;&lt;br&gt;
&lt;code&gt;↓&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DISTRIBUTE&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;MyZubster is gradually becoming less like a collection of separate applications and more like an &lt;strong&gt;identity and interaction layer connecting people, Zorgax, GitHub, the Metaverse and future digital assets&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;And that's the next experiment we're building in public.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Build → Connect → Interact → Document → Verify → Distribute → Repeat&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;myzubster-zorgax-opensource-github-metaverse-nft-digitalidentity-aiagents-buildinpublic&quot;&gt;MyZubster #Zorgax #OpenSource #GitHub #Metaverse #NFT #DigitalIdentity #AIAgents #BuildInPublic&lt;/h2&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27596/myzubster-becoming-identity-and-interaction-layer-authentication-zorgax-github-metave</guid>
<pubDate>Fri, 18 Sep 2026 10:04:10 +0000</pubDate>
</item>
<item>
<title>HYCU Found 30+ Ways to Destroy a Git Repo. Five Only Exist Because of AI Agents.</title>
<link>https://coderlegion.com/27557/hycu-found-30-ways-to-destroy-a-git-repo-five-only-exist-because-of-ai-agents</link>
<description>&lt;p&gt;Backup vendors built their entire industry around two ways a company loses data: ransomware attacking from outside, and a person making a mistake from inside. At an IT Press Tour stop in Lake Bled and Ljubljana this month, HYCU argued a third cause has moved in without an invitation — an agent that already holds valid credentials and can act faster than anyone reviewing its work.&lt;/p&gt;
&lt;p&gt;Amarnath Rampratap, HYCU's Senior Director of R-Cloud and Head of R&amp;amp;D India, breaks agent-driven data loss into three patterns: drift, where an agent acts on a wrong picture of a system's state; misinstruction, where a hidden or injected prompt redirects it toward destruction; and standing credentials, tokens with more reach and longer life than the task ever needed. Asked which one shows up most in the incidents that reach HYCU, Rampratap didn't hedge. &quot;Standing credentials, because it enables the other two,&quot; he said. &quot;Nearly every incident that reaches us has an over-scoped, long-lived token in the chain.&quot;&lt;/p&gt;
&lt;p&gt;The PocketOS incident is the clearest public example. In April, a Cursor agent doing a routine staging task hit a credential mismatch and looked for a way around it. It found a Railway CLI token issued for managing custom domains — except that token carried authority across Railway's entire API, deletion included. The agent assumed the staging volume it was about to delete was scoped to staging. It wasn't. Railway stores volume-level backups inside the same volume they protect, so one API call took the data and every copy with it. Nine seconds, start to finish. The last backup anyone could actually recover was three months old. Rampratap counts three permissions that token should never have had: authority to delete storage from a domain-management credential, no separation between staging and production, and backups reachable by the same identity that could reach production in the first place.&lt;/p&gt;
&lt;p&gt;The Amazon Q for VS Code incident, which shipped a destructive prompt to an extension with 964,000 installs, traces back the same way. AWS attributed it to an inappropriately scoped GitHub token sitting in the extension's CodeBuild configuration. &quot;It is a standing-credentials story before it is an AI story,&quot; Rampratap said. What actually stopped the wipe was a syntax error in the injected instructions, not a safeguard. His read on both incidents: assume one of these eventually runs to completion, and make sure the copy it can't reach exists, is immutable, and is current.&lt;/p&gt;
&lt;p&gt;That assumption changes the math on how long a company has to notice a problem. Native retention windows were sized for one person undoing one mistake — 93 days on SharePoint, 60 on Jira, 15 on Salesforce. Rampratap breaks the failure into three parts. Volume: an agent loop touching 50 records a minute produces 72,000 changes a day, enough to exhaust a recycle bin's capacity before the window closes. Kind: bins only catch deletes — overwrites, history rewrites, and permission changes leave nothing behind, and an API-level hard delete can skip the bin entirely. Time: HYCU's research puts the average SaaS incident at five days of disruption, longer than most bins hold anything. An agent can burn through the undo button before anyone knows there was one.&lt;/p&gt;
&lt;p&gt;Developers will recognize the git-specific version of this problem fastest. HYCU has catalogued more than 30 ways repository data gets deleted, corrupted, or altered — and Rampratap is upfront that agents didn't invent most of them. &quot;Mechanically, almost all classic,&quot; he said. They still arrive as a force-push, a branch delete, a history rewrite, or a misused token, which is exactly why GitHub or GitLab can't tell an agent's action from a person's. Five patterns exist only because agents do: a cleanup agent deleting branches that looked stale, a refactor agent force-pushing after a bad rebase, a migration agent rewriting history across a dozen repos at once, a compromised agent token, and a CI job running a destructive command an agent generated. &quot;Five sounds small,&quot; Rampratap said, &quot;until you notice they run at night, at scale, unwatched.&quot;&lt;/p&gt;
&lt;p&gt;That's the uncomfortable core of the problem: a correct force-push and a catastrophic one are identical at the API level. Rampratap doesn't claim HYCU can tell them apart in the moment, and says the platform can't either. What changes is whether the question is answerable afterward. Every HYCU backup sits outside the protected platform's credential reach, so the difference between two points in time becomes a full record of what changed, when, and under which identity — a feature HYCU calls flight recorder inside its aiR product, run against a specific agent across every application it protects. A human still makes the final call, but with evidence instead of a guess, and granular recovery can undo the damage without undoing the legitimate work sitting next to it.&lt;/p&gt;
&lt;p&gt;The same logic is behind HYCU's move to add Azure DevOps, now generally available, alongside its existing GitHub, GitLab, and Bitbucket coverage. &quot;Repositories are the easy part,&quot; HYCU Chief Product Officer Anant Chintamaneni said in the announcement. &quot;The real risk lives in the pipeline definitions, the process templates, the wiki that's a Git repo with a service layer bolted on top.&quot; Rampratap frames the timing as customer-driven — gaps in native recovery options and the dependencies between components — and points out that Azure DevOps is the backbone in exactly the regulated industries where Europe's DORA and NIS2 rules are forcing the question of independent, immutable copies from a preference into a requirement. Coldago Research analyst Philippe Nicolas made the same distinction: &quot;Competitors built for the artifact. HYCU built for the system.&quot;&lt;/p&gt;
&lt;p&gt;None of this argues for smarter agents or better prompts. It argues for treating every credential an agent holds as an asset to audit on its own, the same way a security team already audits a person's access. The agent that deleted PocketOS's database wasn't malicious, hallucinating, or even wrong about what it was told to do. It just had a token that could reach further than anyone realized until it did.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27557/hycu-found-30-ways-to-destroy-a-git-repo-five-only-exist-because-of-ai-agents</guid>
<pubDate>Thu, 17 Sep 2026 20:33:52 +0000</pubDate>
</item>
<item>
<title>MyZubster: Building a Provenance Network for Knowledge, Skills, and Real-World Exchange</title>
<link>https://coderlegion.com/27460/myzubster-building-a-provenance-network-for-knowledge-skills-and-real-world-exchange</link>
<description>&lt;p&gt;MyZubster: Building a Provenance Network for Knowledge, Skills, and Real-World Exchange&lt;/p&gt;
&lt;p&gt;We started MyZubster with a simple real-world question:&lt;/p&gt;
&lt;p&gt;What happens if I give someone my kefir culture, they reproduce it at home, document what they learn, and eventually pass both the culture and the knowledge to someone else?&lt;/p&gt;
&lt;p&gt;That small experiment is evolving into something much larger.&lt;/p&gt;
&lt;p&gt;We're building MyZubster as an open-source system for representing how resources, knowledge, and skills move between people while preserving provenance and uncertainty.&lt;/p&gt;
&lt;p&gt;The core loop is simple:&lt;/p&gt;
&lt;p&gt;Share → Try → Observe → Improve → Share again&lt;br&gt;
From a kefir culture to a provenance graph&lt;/p&gt;
&lt;p&gt;Milk kefir is our first real-world prototype.&lt;/p&gt;
&lt;p&gt;Instead of storing only:&lt;/p&gt;
&lt;p&gt;Daniel gave kefir to Nicola&lt;/p&gt;
&lt;p&gt;we want the system to represent the actual lifecycle:&lt;/p&gt;
&lt;p&gt;Daniel's culture → Marketplace listing → Nicola accepts → Hand exchange → Nicola confirms receipt → Nicola maintains his culture → Observations → Future donation&lt;/p&gt;
&lt;p&gt;Every transition is a separate event.&lt;/p&gt;
&lt;p&gt;If something hasn't happened yet, the system shouldn't pretend it has.&lt;/p&gt;
&lt;p&gt;If a quantity, temperature, timestamp, outcome, or condition wasn't recorded, it stays:&lt;/p&gt;
&lt;p&gt;UNKNOWN&lt;/p&gt;
&lt;p&gt;This principle has become one of the foundations of the MyZubster Knowledge Protocol.&lt;br&gt;
Knowledge is another transferable resource&lt;/p&gt;
&lt;p&gt;Then we realized the same model can describe learning.&lt;/p&gt;
&lt;p&gt;Daniel has been helping Nicola work with GitHub, Docker, and the MyZubster ecosystem.&lt;/p&gt;
&lt;p&gt;That creates another graph:&lt;/p&gt;
&lt;p&gt;Daniel → Nicola learns → Nicola attempts → Observable artifact → Nicola can teach another person&lt;/p&gt;
&lt;p&gt;But there is an important rule:&lt;/p&gt;
&lt;p&gt;Evidence is not inherited.&lt;/p&gt;
&lt;p&gt;If Nicola teaches another participant, that participant must create their own evidence.&lt;/p&gt;
&lt;p&gt;So the graph becomes:&lt;/p&gt;
&lt;p&gt;Daniel → Nicola → Person B → Person C&lt;/p&gt;
&lt;p&gt;while every edge has independent provenance.&lt;br&gt;
From fermentation to a general knowledge network&lt;/p&gt;
&lt;p&gt;The repository has now expanded beyond fermentation.&lt;/p&gt;
&lt;p&gt;Current and newly introduced domains include:&lt;/p&gt;
&lt;p&gt;KF-&lt;em&gt; — Fermentation&lt;br&gt;
SND-&lt;/em&gt; — Sound systems&lt;br&gt;
DEV-&lt;em&gt; — Programming&lt;br&gt;
UNI-&lt;/em&gt; — University/research&lt;br&gt;
PET-&lt;em&gt; — Animals&lt;br&gt;
PERM-&lt;/em&gt; — Permaculture&lt;br&gt;
MUS-&lt;em&gt; — Music&lt;br&gt;
ART-&lt;/em&gt; — Art&lt;br&gt;
SPT-&lt;em&gt; — Sport&lt;br&gt;
MA-&lt;/em&gt; — Martial arts&lt;/p&gt;
&lt;p&gt;This allows very different communities to use the same underlying protocol.&lt;/p&gt;
&lt;p&gt;A tekno musician could teach someone how to operate or assemble part of a sound system.&lt;/p&gt;
&lt;p&gt;A musician could teach another person DJing, production, rhythm, or an instrument.&lt;/p&gt;
&lt;p&gt;An artist could teach drawing or comics.&lt;/p&gt;
&lt;p&gt;A calisthenics practitioner could document teaching a particular progression.&lt;/p&gt;
&lt;p&gt;A Thai-boxing practitioner or coach could document a bounded training session.&lt;/p&gt;
&lt;p&gt;The domain changes.&lt;/p&gt;
&lt;p&gt;The provenance model doesn't.&lt;br&gt;
Turning skills into marketplace objects&lt;/p&gt;
&lt;p&gt;We're now extending the MyZubster marketplace concept so that an offer doesn't necessarily represent a physical object.&lt;/p&gt;
&lt;p&gt;It could represent:&lt;/p&gt;
&lt;p&gt;a resource, a lesson, mentoring, a workshop, a demonstration, or a collaboration request.&lt;/p&gt;
&lt;p&gt;A skill exchange can therefore follow:&lt;/p&gt;
&lt;p&gt;Teacher → Skill Listing → Learner Accepts → Session → Participation Confirmation → Attempt → Evidence → MyZubster Record&lt;/p&gt;
&lt;p&gt;And eventually:&lt;/p&gt;
&lt;p&gt;A teaches B → B reproduces → B teaches C → C reproduces&lt;/p&gt;
&lt;p&gt;This creates a distributed graph of practical knowledge.&lt;br&gt;
Physical and knowledge graphs can intersect&lt;/p&gt;
&lt;p&gt;The interesting part is that MyZubster can maintain two separate graphs.&lt;/p&gt;
&lt;p&gt;A physical-resource graph:&lt;/p&gt;
&lt;p&gt;Daniel → Kefir → Nicola → New culture → Future recipient&lt;/p&gt;
&lt;p&gt;And a knowledge graph:&lt;/p&gt;
&lt;p&gt;Daniel → Nicola → Reproduced skill → New learner&lt;/p&gt;
&lt;p&gt;They can reference each other without becoming the same thing.&lt;/p&gt;
&lt;p&gt;Receiving kefir doesn't prove that someone knows how to maintain it.&lt;/p&gt;
&lt;p&gt;Reading a Knowledge Card doesn't prove that someone performed the procedure.&lt;/p&gt;
&lt;p&gt;Teaching a skill doesn't prove that the learner mastered it.&lt;/p&gt;
&lt;p&gt;Each statement needs its own evidence.&lt;br&gt;
Where blockchain fits&lt;/p&gt;
&lt;p&gt;Blockchain is intended as an optional provenance layer.&lt;/p&gt;
&lt;p&gt;We're deliberately avoiding the shortcut:&lt;/p&gt;
&lt;p&gt;blockchain = truth&lt;/p&gt;
&lt;p&gt;It doesn't.&lt;/p&gt;
&lt;p&gt;An on-chain record can establish that a particular commitment or declaration was recorded.&lt;/p&gt;
&lt;p&gt;For MyZubster, we therefore distinguish states such as:&lt;/p&gt;
&lt;p&gt;RECORDED&lt;/p&gt;
&lt;p&gt;from:&lt;/p&gt;
&lt;p&gt;ONCHAIN_RECORDED&lt;/p&gt;
&lt;p&gt;The latter should only exist when we have an actual network and verifiable transaction/record identifier.&lt;/p&gt;
&lt;p&gt;A transaction hash doesn't automatically prove competence, lesson quality, physical delivery, professional qualifications, or the truth of every statement committed to it.&lt;/p&gt;
&lt;p&gt;Those remain evidence problems.&lt;br&gt;
Evidence states&lt;/p&gt;
&lt;p&gt;MyZubster currently works with a deliberately small evidence vocabulary:&lt;/p&gt;
&lt;p&gt;PERSONAL_PRACTICE&lt;br&gt;
TRADITIONAL_PRACTICE&lt;br&gt;
OBSERVATION&lt;br&gt;
EXTERNAL_SOURCE&lt;br&gt;
VERIFIED_GUIDANCE&lt;/p&gt;
&lt;p&gt;And there is another important constraint:&lt;/p&gt;
&lt;p&gt;More observations do not automatically produce VERIFIED_GUIDANCE.&lt;/p&gt;
&lt;p&gt;Verification requires an explicit review step.&lt;/p&gt;
&lt;p&gt;That prevents a community voting mechanism or simple repetition counter from silently transforming popular claims into verified knowledge.&lt;br&gt;
The implementation&lt;/p&gt;
&lt;p&gt;This isn't only a concept document.&lt;/p&gt;
&lt;p&gt;The repository already contains tooling for:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;canonical Knowledge Cards;

domain validation;

evidence records;

claims and sources;

knowledge relations;

reproductions;

knowledge versions;

collaboration requests;

verification reviews;

integrity checking;

graph persistence;

transactional record/graph updates;

recovery logic;

a read-only Knowledge API;

a browser-based Knowledge Explorer.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We've also started creating real cross-domain records.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;DEV-001 — Nicola's observable MyZubster/Docker/comics project artifacts&lt;/p&gt;
&lt;p&gt;DEV-002 — Nicola's reported learning/onboarding path&lt;/p&gt;
&lt;p&gt;ART-001 — Daniel's comics practice&lt;/p&gt;
&lt;p&gt;SPT-001 — Daniel's calisthenics practice&lt;/p&gt;
&lt;p&gt;MA-001 — Daniel's Thai-boxing practice&lt;/p&gt;
&lt;p&gt;For claims where supporting evidence hasn't yet been attached, the system explicitly preserves that limitation rather than manufacturing provenance.&lt;br&gt;
Current development status&lt;/p&gt;
&lt;p&gt;Our last confirmed complete local run was:&lt;/p&gt;
&lt;p&gt;110 tests / 110 passing&lt;/p&gt;
&lt;p&gt;That result predates the newest domain and Knowledge Card additions, so we're not claiming those latest changes as tested until the next complete run.&lt;/p&gt;
&lt;p&gt;That's another principle we're trying to follow throughout the project:&lt;/p&gt;
&lt;p&gt;don't convert an expected result into an observed result.&lt;/p&gt;
&lt;p&gt;The public Knowledge Explorer is available here:&lt;/p&gt;
&lt;p&gt;MyZubster Knowledge Explorer&lt;/p&gt;
&lt;p&gt;The source code and current protocol development are here:&lt;/p&gt;
&lt;p&gt;MyZubster on GitHub&lt;/p&gt;
&lt;p&gt;At the moment, GitHub contains newer work than the production Knowledge Explorer deployment, so the repository is the source of truth for the latest development.&lt;br&gt;
What's next&lt;/p&gt;
&lt;p&gt;The next major step is moving the new Skill Marketplace model from protocol documentation into structured schemas and runtime records.&lt;/p&gt;
&lt;p&gt;The target lifecycle is:&lt;/p&gt;
&lt;p&gt;Listing → Acceptance → Session/Exchange → Evidence → Knowledge Graph → Optional on-chain commitment&lt;/p&gt;
&lt;p&gt;After that, we can start testing the protocol with more real people and very different types of knowledge.&lt;/p&gt;
&lt;p&gt;Kefir is just the first physical experiment.&lt;/p&gt;
&lt;p&gt;The broader question behind MyZubster is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Can we build an open provenance graph showing not just what people say they know, but how knowledge and resources actually move, get reproduced, change, and get passed to the next person?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That's what we're trying to find out.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27460/myzubster-building-a-provenance-network-for-knowledge-skills-and-real-world-exchange</guid>
<pubDate>Thu, 17 Sep 2026 04:40:03 +0000</pubDate>
</item>
<item>
<title>Agent traffic does not grow like human traffic</title>
<link>https://coderlegion.com/26856/agent-traffic-does-not-grow-like-human-traffic</link>
<description>&lt;p&gt;GitHub published its August availability report this week, and one sentence in it is worth more than the rest of the document: &quot;our shared infrastructure services have not kept up with our month-over-month actions growth and peak load.&quot;&lt;/p&gt;
&lt;p&gt;Five incidents in a month. The worst, on August 17, peaked at a 56% front-door request failure rate and touched more than 29,000 organizations, with roughly 4.8 million requests failing or crawling. On August 26, more than 20% of Actions run starts failed or were delayed, and that is the one GitHub attributes directly to growth outpacing shared services.&lt;/p&gt;
&lt;p&gt;I want to be careful here, because it would be easy to read this as a GitHub problem. I do not think it is. I think it is the first large public example of a capacity model meeting a class of traffic it was never built to forecast.&lt;/p&gt;
&lt;h3 id=&quot;human-traffic-has-a-denominator&quot;&gt;Human traffic has a denominator&lt;/h3&gt;
&lt;p&gt;For most of my career, capacity planning had a number I could point at outside the system. Working on logistics APIs, the driver was parcels. Volume rose with commerce, peaked in a season everyone could name months in advance, and grew year over year in a band narrow enough to argue about. We disagreed about the multiplier. We did not disagree about the shape.&lt;/p&gt;
&lt;p&gt;Internal systems worked the same way. Request volume tracked headcount, customer count, or transaction count. If you wanted to know what next year looked like, you asked someone in finance what they were forecasting and did arithmetic.&lt;/p&gt;
&lt;p&gt;Agent traffic breaks that. The driver is not how many people you have. It is how many loops those people are running, and that number lives in a config file, a workflow matrix, or a retry policy. One engineer changing a concurrency setting on a Friday afternoon can move your load more than a quarter of hiring does. There is no external denominator to anchor the forecast to, which means the forecast is now a function of your own configuration surface.&lt;/p&gt;
&lt;h3 id=&quot;retries-are-the-amplifier&quot;&gt;Retries are the amplifier&lt;/h3&gt;
&lt;p&gt;The August 6 incident has a detail worth sitting with. A latent bug caused runners to retry revoked jobs instead of picking up valid work. That is a small bug. In a system already under pressure it is an accelerant, because retry traffic arrives exactly when there is no headroom left to serve it.&lt;/p&gt;
&lt;p&gt;This is the failure shape I expect to see more of, not less. Agents retry. That is most of what makes them useful. The same property that lets an agent recover from a transient failure lets a fleet of them turn a brownout into an outage, and it does not require anybody to have written bad code. It requires a retry policy that was perfectly reasonable back when one caller had it.&lt;/p&gt;
&lt;p&gt;I wrote a few days ago about idempotency being the guardrail that saves you at 2am. This is the other half of that argument, one layer down. Idempotency keeps a retry from duplicating an action. It does nothing about a retry storm consuming the capacity everything else needs.&lt;/p&gt;
&lt;h3 id=&quot;the-damage-lands-on-the-shared-path&quot;&gt;The damage lands on the shared path&lt;/h3&gt;
&lt;p&gt;August 17 is the incident I would hand to a platform team. The proximate cause was a traffic surge past load balancer limits, but the reason it reached 29,000 organizations is that the degradation landed on a shared authentication path. Agent traffic did not take down the agent features. It took down issues, pull requests, the APIs, and webhooks.&lt;/p&gt;
&lt;p&gt;That is the part worth checking in your own system this week. Not whether your agent workloads have capacity, but what they share with everything else. Connection pools, auth, DNS, a service mesh sidecar, one database primary. The blast radius of agent traffic is the set of things it shares, and most architecture diagrams do not draw that.&lt;/p&gt;
&lt;h3 id=&quot;what-i-would-actually-do&quot;&gt;What I would actually do&lt;/h3&gt;
&lt;p&gt;Start with attribution, because you cannot forecast what you cannot count. If your logs cannot tell you what share of load came from an agent, which agent, and acting for whom, then your capacity model is guessing and so is your next postmortem. This is the same instrumentation argument I make about auditability, and it turns out to pay for itself twice.&lt;/p&gt;
&lt;p&gt;Then give humans a lane. If agent workloads and interactive traffic share a pool, the agents will win, because they are patient and there are more of them. Separate queues, separate pools, or at minimum a priority that favours the request with a person waiting on the other end of it.&lt;/p&gt;
&lt;p&gt;And treat concurrency settings as production configuration. If a change to a workflow matrix can double your peak, it deserves the same review as a schema migration.&lt;/p&gt;
&lt;h3 id=&quot;one-thing-i-got-wrong&quot;&gt;One thing I got wrong&lt;/h3&gt;
&lt;p&gt;I have built capacity models off headcount growth that were confidently wrong, on a system where the real driver turned out to be a nightly batch job somebody had quietly parallelised. The model was fine. The denominator was wrong. I did not find that out during planning. I found it out during an incident, which is the expensive way to learn it.&lt;/p&gt;
&lt;p&gt;The lesson I took from that is the one I would apply here. The question is not how much traffic you expect. It is what decides how much traffic you get, and whether that thing sits inside your system or outside it. For agent workloads it is inside. That is new, and it is worth re-planning around rather than scaling into.&lt;/p&gt;
&lt;p&gt;Figures above are from GitHub's own availability report for August 2026.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/26856/agent-traffic-does-not-grow-like-human-traffic</guid>
<pubDate>Fri, 11 Sep 2026 14:36:32 +0000</pubDate>
</item>
<item>
<title>Developer Weekly Briefing — September 11, 2026</title>
<link>https://coderlegion.com/26838/developer-weekly-briefing-september-11-2026</link>
<description>&lt;p&gt;A GitHub-heavy week — five stories in a row from the same platform, which says something about how fast the platform is moving right now. But the two Coder Legion pieces on agent memory and sovereign AI are the ones that will age well. Here's what mattered.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;github-s-hydrafusion-takes-model-selection-out-of-the-developer-s-hands&quot;&gt;GitHub's HydraFusion takes model selection out of the developer's hands&lt;/h3&gt;
&lt;p&gt;Model selection for AI coding tasks has always been a manual routing problem: quick model for simple edits, stronger one for hard debugging, second model for a sanity check. Project HydraFusion, now in research preview inside GitHub Copilot, automates that decision.&lt;/p&gt;
&lt;p&gt;The system runs three execution patterns. &quot;Single&quot; mode routes to one model outright. &quot;Cascade&quot; mode drafts with an efficient model first and escalates to a stronger one only if the draft fails a quality gate. &quot;Critique&quot; mode has a second independent model review the first one's output before a final revision. HydraFusion picks the least complex workflow that has a real shot at succeeding — not the most powerful one available.&lt;/p&gt;
&lt;p&gt;Early numbers: on TerminalBench 2.1, GitHub reports a 4.9 percentage point quality improvement over Claude Opus 5 at 67% lower estimated cost. On CheckpointBench, costs dropped 65% with quality holding almost flat. Results vary by benchmark and workload, and this is a research preview rather than a GA feature — but the direction is clear.&lt;/p&gt;
&lt;p&gt;The governance question worth tracking: HydraFusion chooses which model handles which task, but it doesn't yet expose that decision in a way that's auditable post-production. Which model drafted the code, which reviewed it, and why the system decided a cheaper model was sufficient — those are answers platform teams will eventually need for compliance reviews and incident postmortems.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/githubs-new-copilot-feature-takes-the-guesswork-out-of-picking-ai-models/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;rust-s-first-debugging-survey-most-developers-skip-the-debugger-entirely&quot;&gt;Rust's first debugging survey: most developers skip the debugger entirely&lt;/h3&gt;
&lt;p&gt;Rust has built its reputation on catching errors at compile time. At runtime, 46% of developers use a debugger. The other 54% reach for &lt;code&gt;println!&lt;/code&gt; — and it turns out that's the rational call, not a lazy one.&lt;/p&gt;
&lt;p&gt;The Rust compiler team's first dedicated debugging survey, 2,300+ responses from an experienced user base, found that 74% report poor value representation in the debugger, and 55% can't reliably print a variable at all. When your debugger shows memory dumps instead of readable strings, print statements aren't a shortcut. They're the tool that actually works.&lt;/p&gt;
&lt;p&gt;Async code is the weakest point: only 25% debug async code at all, the lowest adoption of any use case in the survey, and 28% of those who try report real problems. Macro-heavy code causes problems for 23%. And 62% of library authors have never heard of the &lt;code&gt;debugger_visualizer&lt;/code&gt; attribute — a feature that would let them ship better debugger display instructions with their crates.&lt;/p&gt;
&lt;p&gt;The Futurum Group's Mitch Ashley put the enterprise implication directly: &quot;Platform teams standardizing on Rust for production infrastructure are inheriting verification debt they did not price. Value representation and async traces belong in the selection criteria alongside memory safety.&quot;&lt;/p&gt;
&lt;p&gt;The Rust team has a response in motion — enum and collection representation, string rendering, async stack traces, and a Google Summer of Code project targeting debug info regression testing. It's the right list. Worth tracking whether it lands before Rust's production footprint grows faster than the tooling can support it.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/rusts-first-debugging-survey-shows-most-developers-skip-the-debugger-entirely/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;ai-agents-have-a-communication-protocol-now-they-still-don-t-remember-anything-&quot;&gt;AI agents have a communication protocol now. They still don't remember anything.&lt;/h3&gt;
&lt;p&gt;A2A just moved under the Agentic AI Foundation alongside MCP — one governance roof for the two protocols most agent systems depend on. Most of the coverage called it consolidation. MariaDB's chief product officer Vikas Mathur isn't convinced that's the right word.&lt;/p&gt;
&lt;p&gt;&quot;It doesn't solve for the agent amnesia, if that's the right word to use,&quot; Mathur said. &quot;It solves for communication, but it doesn't solve for context.&quot;&lt;/p&gt;
&lt;p&gt;The gap shows up quickly in large organizations running dozens of agents built by different teams. An employee exists under one ID in an HR system, a GitHub handle in a code platform, a full name in a third system. A2A doesn't resolve any of that. Agents can be technically communicating and still talking past each other about the same person.&lt;/p&gt;
&lt;p&gt;Mathur's practical advice for developers building multi-agent systems now: don't start with ontologies and knowledge graphs. Start by getting enterprise data out of application silos first. Most enterprise data is still locked to whatever system created it, and that's the problem agents actually hit before they ever get to coordination.&lt;/p&gt;
&lt;p&gt;His cost warning is also worth keeping: &quot;They're selling a plan for $200 and spending $8,000 in the backend. That's fine for now, with venture money. Three years from now, that's not going to happen.&quot;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/26532/ai-agents-have-a-communication-protocol-now-they-still-dont-remember-anything&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-more-enterprises-are-running-agentic-ai-entirely-inside-their-own-data-centers&quot;&gt;Why more enterprises are running agentic AI entirely inside their own data centers&lt;/h3&gt;
&lt;p&gt;Anurag Gurtu, CEO of Airrived, has spent two years hearing the same message from enterprises in the Middle East and Asia-Pacific: they want agentic AI, but they won't send their data, prompts, or operations to someone else's cloud to get it. His company sells a 10U GPU rack you drop into your own data center, air-gapped if you want it, with models, agents, orchestration, and data all running on-premises.&lt;/p&gt;
&lt;p&gt;The three pulls toward sovereign AI he hears most often: trust (large organizations don't want to send sensitive data to Anthropic or OpenAI), cost (token spend is unpredictable and has no ceiling in a cloud model), and talent (the skills to build and run agentic systems are scarce enough that a fully integrated appliance beats a DIY stack).&lt;/p&gt;
&lt;p&gt;His analogy for the DIY path — install Llama, wire up LangChain, add LangGraph for reasoning, connect n8n for orchestration — is blunt: &quot;Installing Linux and discovering you don't even have a GUI yet, versus buying a laptop that's ready to use the moment you open the lid.&quot;&lt;/p&gt;
&lt;p&gt;For teams evaluating sovereign AI seriously, the hardware availability note is practical: B-series and RTX Pro Nvidia chips are backlogged one to two months. H100s and H200s are available immediately.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/26647/why-more-enterprises-are-running-agentic-ai-entirely-inside-their-own-data-centers&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;github-roundup-four-smaller-moves-worth-knowing&quot;&gt;GitHub roundup: four smaller moves worth knowing&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Dependabot drops the PAT requirement for GitHub-hosted registries.&lt;/strong&gt; Dependabot can now authenticate to GitHub Packages and ghcr.io using the same GITHUB_TOKEN mechanism as Actions — no personal access token needed. The practical result: one fewer long-lived credential to generate, store, rotate, and eventually forget about. Teams that already have PAT-based credentials in dependabot.yml don't need to rip them out immediately; the new path takes over as default and the old one stays as fallback. &lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/github-quietly-fixes-one-of-dependabots-oldest-headaches/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GitHub puts admin-controlled sandbox policy in JetBrains.&lt;/strong&gt; Enterprise-managed sandbox policies for Copilot in JetBrains are now in public preview, letting IT set filesystem, network, proxy, and macOS Keychain access centrally. Once locked, settings show as &quot;(managed)&quot; and can't be overridden locally. A policy diagnostics tool confirms enforcement is actually landing on developer machines — a small but important addition given that a policy nobody can verify is close to no policy. &lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/github-puts-guardrails-on-copilots-sandbox-inside-jetbrains-ides/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GitHub Advanced Security self-serve trials expand to 300 licenses.&lt;/strong&gt; The eligibility ceiling for no-sales-call GHAS trials moves from 100 to 300 licenses. Thirty days, full access to Code Security and Secret Protection across every repository. One-time shot — if it lapses, the next attempt is 180 days out. &lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/github-widens-the-door-on-advanced-security-trials/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GitHub's August outages: growth is outpacing infrastructure.&lt;/strong&gt; Five incidents in one month, all tied to the same root cause — Actions and Copilot usage expanding faster than shared infrastructure was built to support. Peak front-door failure rate in one incident hit 56%, affecting roughly 29,000 organizations. GitHub's own postmortem language: &quot;Our shared infrastructure services have not kept up with our month-over-month actions growth and peak load.&quot; Worth reading if GitHub is in your critical path. &lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/githubs-august-outages-show-growth-is-outpacing-infrastructure/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;also-from-coder-legion-this-week-1&quot;&gt;Also from Coder Legion this week&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Qodo wants a second agent watching your coding agent&lt;/strong&gt; — specifically to catch the cross-service dependencies and billing logic gaps that a coding agent working in isolation can't see. CEO Itamar Friedman's target: 80% auto-approved PRs by end of 2027. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/26668/your-coding-agent-doesnt-know-what-it-doesnt-know-qodo-wants-a-second-agent-watching&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finite State's Larry Pesce: attackers are coming back for infrastructure everyone forgot to watch.&lt;/strong&gt; Embedded systems, OT, legacy networking gear — the attack surface that got deprioritized when the industry moved to cloud-native. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/26526/finite-states-larry-pesce-attackers-are-coming-back-infrastructure-everyone-forgot-watch&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;The through-line this week: automation is accelerating across model selection, sandbox enforcement, dependency authentication, and agent coordination — and the governance layer that makes all of it auditable and trustworthy is still the part that requires the most intentional work.&lt;/p&gt;
&lt;p&gt;See you next Friday.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Developer Weekly Briefing is published every Friday on &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com&quot;&gt;Coder Legion&lt;/a&gt;. Written by &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Tom+Smith&quot;&gt;Tom Smith&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/26838/developer-weekly-briefing-september-11-2026</guid>
<pubDate>Fri, 11 Sep 2026 12:30:11 +0000</pubDate>
</item>
<item>
<title>I built a desktop client for DeepSeek's coding agent</title>
<link>https://coderlegion.com/26611/i-built-a-desktop-client-for-deepseeks-coding-agent</link>
<description>&lt;p&gt;Built a Windows desktop client for DeepSeek Harness. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/gb6k10zmm9099l1gznzw.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;V1 packages the official Web UI into a native app with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One-click installer (bundles its own runtime)&lt;/li&gt;
&lt;li&gt;Built-in browser — watch the agent browse in real Edge&lt;/li&gt;
&lt;li&gt;Built-in terminal for CLI commands&lt;/li&gt;
&lt;li&gt;Sandbox by default — every action needs approval&lt;/li&gt;
&lt;li&gt;Bilingual (Chinese + English)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;V2 with a fully custom workbench is in active development.&lt;/p&gt;
&lt;p&gt;GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/See-Sol-Lab/DeepSeekGUI&quot;&gt;https://github.com/See-Sol-Lab/DeepSeekGUI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Feedback welcome!&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/26611/i-built-a-desktop-client-for-deepseeks-coding-agent</guid>
<pubDate>Wed, 09 Sep 2026 11:33:11 +0000</pubDate>
</item>
<item>
<title>You Are Not Selling Your Code. You Are Selling the Next Commit</title>
<link>https://coderlegion.com/26484/you-are-not-selling-your-code-you-are-selling-the-next-commit</link>
<description>&lt;p&gt;I spent the last few weeks reading the documentation, pricing pages and source of every tool I could find that sells access to a private GitHub repo. I expected the comparison to come down to features. It came down to one sentence in GitHub's own docs, and after that the shopping list looked completely different.&lt;/p&gt;
&lt;p&gt;Here is the sentence, from the page on removing an outside collaborator: &quot;While forks of private repositories are deleted when a collaborator is removed, the person will still retain any local clones of your repository.&quot; The next line tells you the rest of the job is yours - you are responsible for making sure the people who lost access delete what they copied.&lt;/p&gt;
&lt;p&gt;A &lt;code&gt;git clone&lt;/code&gt; takes ten seconds. No API call reaches it. So whatever you were told about protecting your source, the plain version is this: the only thing a refund can take back is the future.&lt;/p&gt;
&lt;h3 id=&quot;revocation-is-a-subscription-feature-not-a-security-feature&quot;&gt;Revocation is a subscription feature, not a security feature&lt;/h3&gt;
&lt;p&gt;Once you accept that, the whole category re-sorts itself. Revocation is not there to protect your code. It is there to keep a refunded buyer or a charged-back card away from the next tag, the fixed bug, the private issue tracker, the room where the other buyers talk.&lt;/p&gt;
&lt;p&gt;That is a boring plumbing job, and boring plumbing is exactly what you should be shopping for. It also explains the refund policies of the people already doing this at scale: several of the big commercial boilerplates simply say access, once redeemed, is not returnable. The one I found with a proper no-questions window ships a generated download rather than repo access. A refund window is cheap when the product is a snapshot.&lt;/p&gt;
&lt;p&gt;There is a pricing consequence hiding in there too. If you sell yearly access and your tool cannot revoke on its own, you are selling lifetime access at a yearly price, whatever the checkout page says.&lt;/p&gt;
&lt;h3 id=&quot;three-things-decide-this-before-any-tool-does&quot;&gt;Three things decide this before any tool does&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;GitHub's own rules come first.&lt;/strong&gt; A repo under a personal account can only take collaborator invites; team-based delivery needs an organization. Organizations on a paid plan bill per seat, and a pending invitation is already a seat. Half the tools out there work one way, half the other, and that single fact eliminates most of the list before you have compared a single feature.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Then the invitation itself, which is where sellers actually lose money.&lt;/strong&gt; GitHub emails the invite to the buyer's primary address, not the address they paid with, and it expires after seven days. There is no page on GitHub where a buyer can see invitations waiting for them - the community request for one was opened in 2018 and people were still adding &quot;any update?&quot; to the thread last year.&lt;/p&gt;
&lt;p&gt;So your real timeline is: payment, an email into an inbox you do not control, six days of silence, expiry, a 404 that reads to the buyer as &quot;I paid and got nothing&quot;, and a support ticket on day eight. Exactly one tool I looked at treats that as its own problem and re-issues before the deadline. Every other tool, and every tutorial script, leaves you as the retry mechanism.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Then geography and who is merchant of record.&lt;/strong&gt; Stripe's availability page lists 51 countries and regions, and seven carry an asterisk: India and Indonesia in preview, five African countries handed to Paystack. That leaves 44 where you simply sign up, against 193 UN members. If you are outside that list, the entire &quot;just connect Stripe&quot; branch is closed to you and the question becomes which merchant of record will take you. If you are inside it, you get to choose whether the sales tax work is yours or somebody else's, and that choice costs a few points per sale.&lt;/p&gt;
&lt;h3 id=&quot;every-option-that-exists-in-one-breath&quot;&gt;Every option that exists, in one breath&lt;/h3&gt;
&lt;p&gt;Hosted, nothing to run: Polar has repo access as a built-in benefit, Dodo Payments is the newest merchant of record with a GitHub entitlement, and GitHub Sponsors will do sponsors-only repos at zero percent if monthly billing and an open-source-companion shape fit you.&lt;/p&gt;
&lt;p&gt;Storefronts where you stay the merchant: BuyMyRepo, GitPaywall, Anystack. Crypto checkout with tarballs instead of invites: gitbuyer.&lt;/p&gt;
&lt;p&gt;Payment platforms with no GitHub feature at all, where you bring your own glue: Gumroad, Lemon Squeezy, Whop, Patreon, Ko-fi, Buy Me a Coffee. The glue is usually Zapier, Make or n8n, and the recipes you will find online reliably cover the invite and quietly skip the revoke.&lt;/p&gt;
&lt;p&gt;Self-hosted: Honorbox, Pay2Clone, SellRepo, Lemonrepo, and RepoAccess, which is mine - I will come back to that. Plus a long tail of $7 and $20 scripts and tutorials, which is where most sellers actually start.&lt;/p&gt;
&lt;p&gt;And the option nobody frames as an option: skip repo access entirely. Ship a zip behind a license key. If your product is a snapshot rather than a stream of updates, the whole invite lifecycle is a cost with no benefit.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Where the tool sits              &lt;/th&gt;&lt;th&gt;Examples                                                           &lt;/th&gt;&lt;th&gt;Revokes without you&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Hosted, built-in GitHub delivery &lt;/td&gt;&lt;td&gt;Polar, Dodo Payments, GitHub Sponsors                              &lt;/td&gt;&lt;td&gt;Mostly yes&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Self-hosted                      &lt;/td&gt;&lt;td&gt;Honorbox, Pay2Clone, SellRepo, Lemonrepo, RepoAccess               &lt;/td&gt;&lt;td&gt;Depends, and the differences are large&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Platform plus glue               &lt;/td&gt;&lt;td&gt;Gumroad, Lemon Squeezy, Whop and friends, wired with Zapier or n8n &lt;/td&gt;&lt;td&gt;Usually no&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;mine-has-a-gap-and-here-it-is&quot;&gt;Mine has a gap, and here it is&lt;/h3&gt;
&lt;p&gt;I built one of these. RepoAccess grants a GitHub team invite when a payment webhook arrives and removes it on refunds and chargebacks, and it runs as a single Cloudflare Worker on your own account.&lt;/p&gt;
&lt;p&gt;It does not re-issue an invitation before the seven-day expiry. Honorbox does, at day six, up to three times, reading GitHub's own expiry flag rather than trusting a calendar. That is a real gap, I am naming it in my own comparison rather than hiding it, and it is on my list.&lt;/p&gt;
&lt;h3 id=&quot;the-two-minute-test&quot;&gt;The two-minute test&lt;/h3&gt;
&lt;p&gt;Whatever you end up choosing, do this before your first sale: issue a refund in test mode, then open your organization's People page.&lt;/p&gt;
&lt;p&gt;If the buyer is still sitting there, the tool you bought is a granting tool, and the revoking is you.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The long version - every tool with its actual behaviour, the fee table, what a month of twenty sales costs on each path, and six questions that each end in a name - is here: &lt;a rel=&quot;nofollow&quot; href=&quot;https://edgekits.dev/en/blog/sell-access-private-github-repo-every-option-compared/&quot;&gt;How to Sell Access to a Private GitHub Repo: Every Option Compared&lt;/a&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/26484/you-are-not-selling-your-code-you-are-selling-the-next-commit</guid>
<pubDate>Tue, 08 Sep 2026 11:35:30 +0000</pubDate>
</item>
<item>
<title>Your setup guide is an untested surface. Make the tool drive the agent instead</title>
<link>https://coderlegion.com/26215/your-setup-guide-is-an-untested-surface-make-the-tool-drive-the-agent-instead</link>
<description>&lt;p&gt;My deploy wizard runs on the cheapest models on the market - Haiku in Claude Code, a free bundled model in OpenCode - and walks a stranger to a working, live-tested deployment in about an hour, two dashboard tours included: GitHub's and Stripe's. Not because those agents are clever. Because they don't have to be: the tool owns the sequence, the wording and the checks, and the agent only renders and relays.&lt;/p&gt;
&lt;p&gt;Getting there meant deleting my prose setup guide. Here is why, and what replaced it.&lt;/p&gt;
&lt;h3 id=&quot;prose-has-no-test-suite&quot;&gt;Prose has no test suite&lt;/h3&gt;
&lt;p&gt;The setup path for my Cloudflare Worker used to be an 850-line markdown orchestrator. The agent read it, picked &lt;code&gt;npm&lt;/code&gt; subcommands out of it, and hand-edited config files along the way. It worked, mostly - and &quot;mostly&quot; is the whole problem. Every edit to that file could break a live run, and nothing could catch it before a human walked the entire path again.&lt;/p&gt;
&lt;p&gt;Dashboards make it worse. Payment providers rename tabs and buttons over time, and a guide that names the old one still reads as perfectly plausible - so the agent improvises something that sounds right. Improvised steps against a live payment dashboard are how an afternoon disappears.&lt;/p&gt;
&lt;p&gt;A prose guide is a load-bearing component with no test suite. We would never accept that from code. We accept it from documentation because nobody is watching the moment it fails.&lt;/p&gt;
&lt;h3 id=&quot;every-reliable-installer-already-knows-the-answer&quot;&gt;Every reliable installer already knows the answer&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;wrangler login&lt;/code&gt; does not hand you a markdown file and hope. Neither does &lt;code&gt;gh auth login&lt;/code&gt;, or &lt;code&gt;create-next-app&lt;/code&gt;. Every setup tool that people trust works one way: the tool drives and holds the state, and the human responds to the tool.&lt;/p&gt;
&lt;p&gt;The moment AI agents arrived, we quietly lowered that bar. Hand the model an install README, call the result agentic, blame the model when it wanders. The fix is not a smarter agent. It is the old, boring inversion, applied to the new participant.&lt;/p&gt;
&lt;h3 id=&quot;the-contract-the-driver-decides-the-agent-renders&quot;&gt;The contract: the driver decides, the agent renders&lt;/h3&gt;
&lt;p&gt;So the wizard became a program. The agent runs one command, &lt;code&gt;npm run wizard:drive&lt;/code&gt;, which prints exactly one JSON record. The agent renders that record verbatim, collects the answer, and feeds it back. It never chooses the next step, never composes a shell command, and never diagnoses off-path.&lt;/p&gt;
&lt;p&gt;A record is one of three things: a question - either a closed choice rendered as selectable options, or a named free-text field the human reads off a dashboard; a manual step the human confirms with the single word &lt;code&gt;done&lt;/code&gt;; or a message to show. That vocabulary is the entire interface between the driver and whatever agent happens to be running it.&lt;/p&gt;
&lt;p&gt;The current screen is a pure function of the state - cursor, answers, environment, flags. Which means every screen, every branch and every word a user reads is testable with no live agent and no side effects. The wording moved from prose into code, and code has tests.&lt;/p&gt;
&lt;h3 id=&quot;-done-is-verified-not-trusted&quot;&gt;&quot;done&quot; is verified, not trusted&lt;/h3&gt;
&lt;p&gt;A human says &lt;code&gt;done&lt;/code&gt;; the driver checks. Wherever real state can be read - the GitHub org, the team, the token's capabilities, the deployed worker's URL - the driver reads it instead of believing the confirmation.&lt;/p&gt;
&lt;p&gt;A failed check never advances the run. It emits that step's recovery block: the known failure modes, as data, routed back to the screen that owns the wrong input - a bad org goes to the org screen, a bad token to the token screen. The agent answers from the recovery instead of improvising a diagnosis. And the run ends with a live end-to-end test purchase, so &quot;it works&quot; is an observation, not a hope.&lt;/p&gt;
&lt;h3 id=&quot;the-agent-never-sees-the-secrets&quot;&gt;The agent never sees the secrets&lt;/h3&gt;
&lt;p&gt;The part I refuse to compromise on: you paste secret values into the env file yourself, and the deploy hands that file to &lt;code&gt;wrangler&lt;/code&gt;, which reads it in its own process. The values never pass through the agent's context.&lt;/p&gt;
&lt;p&gt;The permission rules that deny the agent's reads of the secrets files - by name - are committed in the repo, for every agent the wizard supports. And a test plants fake secret values, runs the wizard's file operations, and proves the refusal. You can read the enforcement before you run anything.&lt;/p&gt;
&lt;h3 id=&quot;why-the-cheapest-model-is-enough&quot;&gt;Why the cheapest model is enough&lt;/h3&gt;
&lt;p&gt;Most agentic-install demos run on a frontier model, and I think that has the causality backwards. If the setup needs a brilliant agent, the setup is underspecified - the brilliance is spent guessing what the author meant.&lt;/p&gt;
&lt;p&gt;When the driver owns the sequence and the wording, there is nothing to be brilliant about. Rendering a record and relaying an answer is a job for the smallest model you can rent, which is exactly what my live runs use. Cheap models are also the discipline: they fail loudly on ambiguity instead of papering over it, so the driver gets better.&lt;/p&gt;
&lt;h3 id=&quot;how-to-build-one-for-your-own-repo&quot;&gt;How to build one for your own repo&lt;/h3&gt;
&lt;p&gt;The pattern is small and does not depend on my product. What it takes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A driver script with a pure &lt;code&gt;currentRecord(state)&lt;/code&gt; and an &lt;code&gt;advance(state, answer)&lt;/code&gt; that does the I/O through injectable dependencies, so tests pass fakes.&lt;/li&gt;
&lt;li&gt;A record vocabulary - ask / do / say - with closed choices everywhere the answer set is known in advance.&lt;/li&gt;
&lt;li&gt;Verify functions that run at the first point a credential for them exists, and recovery data attached to every step that can fail.&lt;/li&gt;
&lt;li&gt;One npm script as the only entry point, so the agent never composes shell commands.&lt;/li&gt;
&lt;li&gt;Committed permission configs for the agents you support, with the secrets files denied by name.&lt;/li&gt;
&lt;li&gt;An &lt;code&gt;AGENTS.md&lt;/code&gt; at the root, so any agent finds the door.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The working example is &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/EdgeKits/repoaccess-core&quot;&gt;RepoAccess Core&lt;/a&gt; - an AGPL Cloudflare Worker that sells access to private GitHub repos, whose entire onboarding is this driver. The architecture behind the product itself is a separate write-up: &lt;a rel=&quot;nofollow&quot; href=&quot;https://edgekits.dev/en/blog/sell-access-private-github-repo/&quot;&gt;How to sell access to a private GitHub repo without a SaaS in the middle&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you maintain a repo that agents keep setting up wrong, steal the pattern. The guide you delete will not be missed.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/26215/your-setup-guide-is-an-untested-surface-make-the-tool-drive-the-agent-instead</guid>
<pubDate>Fri, 04 Sep 2026 15:04:30 +0000</pubDate>
</item>
<item>
<title>Repository stats charts</title>
<link>https://coderlegion.com/25867/repository-stats-charts</link>
<description>&lt;p&gt;Every README I've ever maintained has had that one section near the top: badges for stars, forks may be build status icon. They work, but they're just... images. Static, generic, the same little badge everyone else's repo has too.&lt;/p&gt;
&lt;p&gt;What I actually wanted was simpler to describe than it turned out to be to build: &lt;strong&gt;pull the real numbers from a repo, turn them into an actual chart, commit it as an SVG, embed it like any other image.&lt;/strong&gt; No third-party badge service holding my stats hostage, no client-side JS running in a README that can't run JS anyway.&lt;/p&gt;
&lt;p&gt;So I built &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/fscss-ttr/provchart-repo-stats&quot;&gt;ProvChart Repo Stats&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;what-it-actually-writes&quot;&gt;What it actually writes&lt;/h3&gt;
&lt;p&gt;It's a GitHub Action. Point it at a repo, give it an API key, and on schedule (or on demand) it writes two SVGs straight into your repo:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;File &lt;/th&gt;&lt;th&gt;Content &lt;/th&gt;&lt;th&gt;Default chart&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docs/charts/repo-overview.svg&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Stars, forks, watchers, open issues &lt;/td&gt;&lt;td&gt;area&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docs/charts/languages.svg&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Language share &lt;/td&gt;&lt;td&gt;horizontal bar&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That's it. No hand-maintained JSON describing what the chart should look like, no dashboard to babysit. The numbers come from GitHub's API, the chart comes from &lt;a rel=&quot;nofollow&quot; href=&quot;https://chart.devtem.org&quot;&gt;ProvChart&lt;/a&gt;, the action wires the two together and commits the result.&lt;/p&gt;
&lt;h3 id=&quot;setup&quot;&gt;Setup&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Add a repo secret.&lt;/strong&gt; Grab an API key from the &lt;a rel=&quot;nofollow&quot; href=&quot;https://chart.devtem.org/dashboard&quot;&gt;ProvChart dashboard&lt;/a&gt; and save it as &lt;code&gt;PROVCHART_API_KEY&lt;/code&gt; under your repo's Settings → Secrets → Actions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Drop in the workflow.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;name: Repo stats charts

on:
  schedule:
    - cron: &quot;0 8 * * 0&quot;
  workflow_dispatch:

permissions:
  contents: write

jobs:
  charts:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: fscss-ttr/provchart-repo-stats@v1.3
        with:
          api-key: ${{ secrets.PROVCHART_API_KEY }}
        env:
          PROVCHART_API_KEY: ${{ secrets.PROVCHART_API_KEY }}

      - uses: stefanzweifel/git-auto-commit-action@v5
        with:
          commit_message: &quot;chore: update repo stats charts&quot;
          file_pattern: &quot;docs/charts/*.svg&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3. Embed the SVGs in your README like any other image.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;![Overview](./docs/charts/repo-overview.svg)
![Languages](./docs/charts/languages.svg)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Run the workflow once manually, or just wait for the Sunday morning cron. The action commits the SVGs, your README stays plain Markdown, nothing else changes about how your repo works.&lt;/p&gt;
&lt;h3 id=&quot;what-the-charts-actually-look-like&quot;&gt;What the charts actually look like&lt;/h3&gt;
&lt;p&gt;The overview chart is an area chart plotting your real counts, not squeezed onto a 0-to-100 scale:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/uaw29ljz9ea8rfgeufye.jpg&quot; alt=&quot;Overview area chart showing stars, forks, watchers, and issues as real counts&quot;&gt;&lt;/p&gt;
&lt;p&gt;And the language breakdown renders as a clean horizontal bar, share by percentage:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/e7qzp80vyp31j1jv7280.jpg&quot; alt=&quot;Language share horizontal bar chart: JavaScript, TypeScript, Python, Shell, Others&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;a-couple-of-defaults-worth-knowing&quot;&gt;A couple of defaults worth knowing&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Overview&lt;/strong&gt; uses real counts. If your repo has 3,200 stars, the chart says 3,200, it's not forced into a 0-100 box.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Languages&lt;/strong&gt; render as share percentages, which is usually the more useful way to look at a language breakdown anyway.&lt;/li&gt;
&lt;li&gt;Both are configurable if the defaults don't fit: &lt;code&gt;overview-type&lt;/code&gt; and &lt;code&gt;languages-type&lt;/code&gt; let you switch to bars if that's more your style.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Under the hood it's all generated through ProvChart's &lt;code&gt;generate-svg&lt;/code&gt; endpoint, so there's no image hosting involved and nothing rendered client-side. The SVG is just... a file in your repo, same as any other asset.&lt;/p&gt;
&lt;p&gt;If you already maintain a &lt;code&gt;.provchart/charts.json&lt;/code&gt; and want fixed sample charts instead of live repo metrics, there's a sibling action for that: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/fscss-ttr/provchart-readme-action&quot;&gt;provchart-readme-action&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;try-it&quot;&gt;Try it&lt;/h3&gt;
&lt;p&gt;Repo, issues, and feedback: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/fscss-ttr/provchart-repo-stats&quot;&gt;github.com/fscss-ttr/provchart-repo-stats&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you end up using it on something, I'd genuinely like to see what your README looks like with it. And if something breaks or a default doesn't make sense for your use case, open an issue, I'm actively maintaining.&lt;/p&gt;
&lt;hr&gt;
</description>
<category>Launches</category>
<guid isPermaLink="true">https://coderlegion.com/25867/repository-stats-charts</guid>
<pubDate>Sun, 30 Aug 2026 17:28:44 +0000</pubDate>
</item>
<item>
<title># Digital Nomads Are Becoming Network-Native Developers</title>
<link>https://coderlegion.com/25741/digital-nomads-are-becoming-network-native-developers</link>
<description>&lt;h2 id=&quot;digital-nomads-are-becoming-network-native-developers&quot;&gt;Digital Nomads Are Becoming Network-Native Developers&lt;/h2&gt;
&lt;p&gt;The stereotypical digital nomad has a laptop, a backpack, and a suspiciously perfect beach in the background.&lt;/p&gt;
&lt;p&gt;But for developers, the interesting part of digital nomadism isn't travel.&lt;/p&gt;
&lt;p&gt;It's infrastructure.&lt;/p&gt;
&lt;p&gt;Software development has reached a point where your physical location and your development environment can be almost completely separated.&lt;/p&gt;
&lt;p&gt;A developer can live in Italy, push code to a repository hosted elsewhere, deploy to infrastructure across multiple regions, collaborate with maintainers on another continent, use AI agents running in the cloud, and receive feedback from users around the world.&lt;/p&gt;
&lt;p&gt;The laptop travels.&lt;/p&gt;
&lt;p&gt;The infrastructure doesn't have to.&lt;/p&gt;
&lt;h3 id=&quot;your-development-environment-is-becoming-a-network&quot;&gt;Your Development Environment Is Becoming a Network&lt;/h3&gt;
&lt;p&gt;A traditional development organization depended heavily on physical infrastructure.&lt;/p&gt;
&lt;p&gt;The simplified model looked something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Developer
    ↓
Office
    ↓
Local Network
    ↓
Company Servers
    ↓
Company Knowledge
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Today, many developers operate inside something closer to:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;                Developer
                    │
        ┌───────────┼───────────┐
        ↓           ↓           ↓
       Git        Cloud        AI
        │           │           │
        ↓           ↓           ↓
   Open Source     APIs     Knowledge
        │           │           │
        └───────────┼───────────┘
                    ↓
              Global Network
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The workstation is no longer the entire development environment.&lt;/p&gt;
&lt;p&gt;It is an &lt;strong&gt;interface to the environment&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That's an important distinction.&lt;/p&gt;
&lt;h3 id=&quot;git-was-one-of-the-foundations-of-digital-nomadism&quot;&gt;Git Was One of the Foundations of Digital Nomadism&lt;/h3&gt;
&lt;p&gt;Developers were working asynchronously long before &quot;digital nomad&quot; became a lifestyle category.&lt;/p&gt;
&lt;p&gt;Open-source development demonstrated that people who had never met could build complex software together.&lt;/p&gt;
&lt;p&gt;Git made location largely irrelevant to source-code collaboration.&lt;/p&gt;
&lt;p&gt;A developer in Europe can create a pull request.&lt;/p&gt;
&lt;p&gt;A maintainer in Japan can review it several hours later.&lt;/p&gt;
&lt;p&gt;Someone in Canada can identify a bug.&lt;/p&gt;
&lt;p&gt;Another contributor can fix it from South America.&lt;/p&gt;
&lt;p&gt;Nobody needs to occupy the same building.&lt;/p&gt;
&lt;p&gt;The repository becomes the coordination layer.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Issue
  ↓
Branch
  ↓
Commit
  ↓
Pull Request
  ↓
Review
  ↓
Merge
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Geography barely appears in that workflow.&lt;/p&gt;
&lt;h3 id=&quot;cloud-computing-removed-another-geographic-dependency&quot;&gt;Cloud Computing Removed Another Geographic Dependency&lt;/h3&gt;
&lt;p&gt;Git decentralized collaboration.&lt;/p&gt;
&lt;p&gt;Cloud computing decentralized infrastructure.&lt;/p&gt;
&lt;p&gt;A developer no longer needs physical access to the machine running an application.&lt;/p&gt;
&lt;p&gt;From a laptop connected to the internet, we can provision databases, deploy applications, inspect logs, manage containers, operate APIs and coordinate infrastructure distributed across multiple regions.&lt;/p&gt;
&lt;p&gt;The architecture might physically exist across thousands of kilometers.&lt;/p&gt;
&lt;p&gt;But operationally, it can feel local.&lt;/p&gt;
&lt;p&gt;This changed what &quot;going to work&quot; means for developers.&lt;/p&gt;
&lt;p&gt;Sometimes going to work means opening a terminal.&lt;/p&gt;
&lt;h3 id=&quot;ai-is-removing-another-layer-of-location-dependency&quot;&gt;AI Is Removing Another Layer of Location Dependency&lt;/h3&gt;
&lt;p&gt;AI introduces something even more interesting: portable access to technical knowledge.&lt;/p&gt;
&lt;p&gt;Developers traditionally benefited enormously from location.&lt;/p&gt;
&lt;p&gt;Working inside a strong engineering organization meant having experienced people nearby.&lt;/p&gt;
&lt;p&gt;Living near a major technology hub meant access to communities, conferences and professional networks.&lt;/p&gt;
&lt;p&gt;Those advantages haven't disappeared.&lt;/p&gt;
&lt;p&gt;But access to knowledge is changing.&lt;/p&gt;
&lt;p&gt;A developer working remotely can now combine:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Documentation
      +
Open Source
      +
Search
      +
AI Assistants
      +
Research Systems
      ↓
Development Workflow
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AI doesn't replace engineering experience.&lt;/p&gt;
&lt;p&gt;But it can dramatically reduce the friction involved in accessing information.&lt;/p&gt;
&lt;p&gt;That makes geographic independence easier.&lt;/p&gt;
&lt;p&gt;The important question becomes less:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Where are the experts?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And more:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Can I access the right knowledge?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;the-next-step-developers-working-with-agents&quot;&gt;The Next Step: Developers Working With Agents&lt;/h3&gt;
&lt;p&gt;The next phase of remote development may be more significant than the previous one.&lt;/p&gt;
&lt;p&gt;Digital nomads currently move while their software infrastructure stays online.&lt;/p&gt;
&lt;p&gt;AI agents introduce infrastructure that can continue working while the developer is offline.&lt;/p&gt;
&lt;p&gt;Imagine a development workflow where agents can help:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Monitor
   ↓
Research
   ↓
Analyze
   ↓
Generate
   ↓
Test
   ↓
Report
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The human developer becomes less tied not only to &lt;strong&gt;location&lt;/strong&gt;, but potentially also to continuous presence.&lt;/p&gt;
&lt;p&gt;This doesn't mean autonomous AI should deploy arbitrary production changes while you're sleeping.&lt;/p&gt;
&lt;p&gt;Authorization, provenance, verification and human oversight become extremely important.&lt;/p&gt;
&lt;p&gt;But it does mean the architecture of remote work changes again.&lt;/p&gt;
&lt;p&gt;Instead of:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Human → Computer → Infrastructure
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;we begin moving toward:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;                 Human
                   ↓
                Agents
             ↙     ↓     ↘
          Code    Cloud   Knowledge
            ↓       ↓        ↓
          APIs ← Systems → Services
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The developer becomes an orchestrator of networked capabilities.&lt;/p&gt;
&lt;h3 id=&quot;payments-are-still-surprisingly-geographic&quot;&gt;Payments Are Still Surprisingly Geographic&lt;/h3&gt;
&lt;p&gt;Software crossed borders much faster than financial infrastructure.&lt;/p&gt;
&lt;p&gt;A developer can clone a repository from another continent almost instantly.&lt;/p&gt;
&lt;p&gt;Getting paid internationally can still involve currency conversion, banking restrictions, fees, settlement delays and country-specific payment platforms.&lt;/p&gt;
&lt;p&gt;That creates an interesting mismatch.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Code
Italy ─────────────────────→ Japan
          seconds


Payment
Japan ─────────────────────→ Italy
       intermediaries
       conversion
       settlement
       fees
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Global digital work naturally creates pressure for better global payment infrastructure.&lt;/p&gt;
&lt;p&gt;This is one reason cryptocurrencies, stablecoins, programmable payments and machine-to-machine payment protocols continue attracting developer attention.&lt;/p&gt;
&lt;p&gt;The larger question isn't whether one particular payment technology wins.&lt;/p&gt;
&lt;p&gt;It's whether &lt;strong&gt;internet-native work eventually produces internet-native settlement infrastructure&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;digital-nomadism-is-really-an-infrastructure-story&quot;&gt;Digital Nomadism Is Really an Infrastructure Story&lt;/h3&gt;
&lt;p&gt;The beach photos are the visible part.&lt;/p&gt;
&lt;p&gt;The infrastructure underneath is much more interesting.&lt;/p&gt;
&lt;p&gt;Digital nomadism became practical because multiple technologies converged:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;distributed source control and open source;&lt;/li&gt;
&lt;li&gt;cloud computing;&lt;/li&gt;
&lt;li&gt;global communication;&lt;/li&gt;
&lt;li&gt;collaborative documentation;&lt;/li&gt;
&lt;li&gt;digital payments;&lt;/li&gt;
&lt;li&gt;online developer communities;&lt;/li&gt;
&lt;li&gt;increasingly, AI assistants and agents.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Remove those layers and the modern digital nomad becomes much harder to imagine.&lt;/p&gt;
&lt;p&gt;That's why I think developers provide an interesting way to understand the movement.&lt;/p&gt;
&lt;p&gt;We're not simply working remotely.&lt;/p&gt;
&lt;p&gt;We're becoming &lt;strong&gt;network-native workers&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;the-network-is-becoming-the-workplace&quot;&gt;The Network Is Becoming the Workplace&lt;/h3&gt;
&lt;p&gt;For a network-native developer, professional identity doesn't have to be attached to a particular building.&lt;/p&gt;
&lt;p&gt;Your code exists in repositories.&lt;/p&gt;
&lt;p&gt;Your infrastructure exists in the cloud.&lt;/p&gt;
&lt;p&gt;Your documentation exists online.&lt;/p&gt;
&lt;p&gt;Your collaborators exist across time zones.&lt;/p&gt;
&lt;p&gt;Your community exists across platforms.&lt;/p&gt;
&lt;p&gt;Your AI tools can travel with you.&lt;/p&gt;
&lt;p&gt;Your customers may exist anywhere.&lt;/p&gt;
&lt;p&gt;The laptop is important, but it's not really the workplace.&lt;/p&gt;
&lt;p&gt;It's the terminal connecting you to it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The network is the workplace.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And AI agents could push this model even further.&lt;/p&gt;
&lt;p&gt;The future digital nomad may not simply be someone who can work from anywhere.&lt;/p&gt;
&lt;p&gt;It may be someone who participates in a persistent global network of humans, software agents, services and autonomous infrastructure — regardless of where they happen to open their laptop that morning.&lt;/p&gt;
&lt;p&gt;That's a much more interesting future than working from the beach.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;For developers working remotely: what part of your stack makes location independence possible today — Git, cloud infrastructure, AI, asynchronous collaboration, or something else?&lt;/strong&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25741/digital-nomads-are-becoming-network-native-developers</guid>
<pubDate>Sat, 29 Aug 2026 06:40:13 +0000</pubDate>
</item>
<item>
<title>Keep README charts in sync with a simple GitHub Action</title>
<link>https://coderlegion.com/25621/keep-readme-charts-in-sync-with-a-simple-github-action</link>
<description>&lt;p&gt;I got tired of updating chart screenshots in READMEs by hand.&lt;/p&gt;
&lt;p&gt;Either the numbers were stale, or I’d regenerate an image, commit it, and forget the next week. For docs and GitHub READMEs I don’t need a full chart library on the page — I need a &lt;strong&gt;vector file&lt;/strong&gt; that still looks sharp.&lt;/p&gt;
&lt;p&gt;So I wired ProvChart’s SVG API into a GitHub Action.&lt;/p&gt;
&lt;h4 id=&quot;what-it-does&quot;&gt;What it does&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;You describe charts in &lt;code&gt;.provchart/charts.json&lt;/code&gt;  &lt;/li&gt;
&lt;li&gt;On schedule or &lt;code&gt;workflow_dispatch&lt;/code&gt;, the Action calls the API  &lt;/li&gt;
&lt;li&gt;It writes &lt;code&gt;.svg&lt;/code&gt; files into the repo (e.g. &lt;code&gt;docs/charts/&lt;/code&gt;)  &lt;/li&gt;
&lt;li&gt;A commit step pushes them if anything changed  &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;README stays simple:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;![API traffic](./docs/charts/demo.svg)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=9257851730286625035&quot; alt=&quot;API TRAFFIC: ProvChart SVG&quot;&gt;&lt;/p&gt;
&lt;p&gt;No Chart.js in the README. No screenshot pipeline.&lt;/p&gt;
&lt;h4 id=&quot;minimal-setup&quot;&gt;Minimal setup&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Secret:&lt;/strong&gt; &lt;code&gt;PROVCHART_API_KEY&lt;/code&gt; (from the ProvChart dashboard)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Config&lt;/strong&gt; (array of payloads):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;[
  {
    &quot;file&quot;: &quot;demo.svg&quot;,
    &quot;type&quot;: &quot;area&quot;,
    &quot;theme&quot;: &quot;midnight&quot;,
    &quot;width&quot;: 640,
    &quot;height&quot;: 320,
    &quot;axisX&quot;: [&quot;Mon&quot;, &quot;Tue&quot;, &quot;Wed&quot;, &quot;Thu&quot;, &quot;Fri&quot;, &quot;Sat&quot;, &quot;Sun&quot;],
    &quot;series&quot;: [
      {
        &quot;name&quot;: &quot;Requests&quot;,
        &quot;color&quot;: &quot;#8b7bff&quot;,
        &quot;points&quot;: [20, 85, 40, 60, 10, 40, 95]
      }
    ]
  }
]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Workflow sketch:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;- uses: fscss-ttr/provchart-readme-action@v1.0.4
  with:
    api-key: ${{ secrets.PROVCHART_API_KEY }}
    config: .provchart/charts.json
    output-dir: docs/charts
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then auto-commit the &lt;code&gt;docs/charts/*.svg&lt;/code&gt; files if you want.&lt;/p&gt;
&lt;h4 id=&quot;why-this-shape&quot;&gt;Why this shape&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SVG&lt;/strong&gt; fits Markdown and docs better than a heavy client chart stack  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CI&lt;/strong&gt; owns refresh; the README only references files  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Same JSON model&lt;/strong&gt; as the rest of ProvChart (line, area, bar, gauge, …)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Gauges at about &lt;strong&gt;220×220&lt;/strong&gt; work well in a README.&lt;/p&gt;
&lt;h4 id=&quot;try-without-starting-from-zero&quot;&gt;Try without starting from zero&lt;/h4&gt;
&lt;p&gt;Sample repo (fork → add the secret → run the workflow):&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Figsh/provchart-charts&quot;&gt;github.com/Figsh/provchart-charts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Action:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/fscss-ttr/provchart-readme-action&quot;&gt;github.com/fscss-ttr/provchart-readme-action&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Not a replacement for interactive dashboards. Just a practical way to keep &lt;strong&gt;docs charts&lt;/strong&gt; honest without babysitting PNGs.&lt;/p&gt;
&lt;hr&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25621/keep-readme-charts-in-sync-with-a-simple-github-action</guid>
<pubDate>Fri, 28 Aug 2026 13:44:33 +0000</pubDate>
</item>
<item>
<title>CI is green. Your release may still be risky.</title>
<link>https://coderlegion.com/25303/ci-is-green-your-release-may-still-be-risky</link>
<description>&lt;p&gt;Every team has a moment like this: CI passes, the PR gets merged, the deploy goes out — and two hours later someone's asking why checkout is throwing 500s in production.&lt;/p&gt;
&lt;p&gt;Nobody skipped a step. The pipeline was green the whole time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The false comfort of green CI&lt;/strong&gt;&lt;br&gt;
Green CI feels like permission. It's a checkmark, it's fast, and it's automated — so it's easy to treat it as the final word on whether a release is safe. For a lot of teams, &quot;tests passed&quot; and &quot;safe to ship&quot; have quietly become the same sentence.&lt;/p&gt;
&lt;p&gt;They're not.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What CI actually checks&lt;/strong&gt;&lt;br&gt;
Most CI pipelines are built to catch a specific, narrow slice of problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Does the code compile / build?&lt;/li&gt;
&lt;li&gt;Do unit tests pass?&lt;/li&gt;
&lt;li&gt;Does lint pass?&lt;/li&gt;
&lt;li&gt;Maybe: does a small integration suite pass?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That's genuinely useful. It catches typos, broken imports, obvious logic errors, regressions in covered code paths. It's necessary.&lt;/p&gt;
&lt;p&gt;It's just not the same thing as &quot;this release is safe to put in front of users.&quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What CI doesn't tell you&lt;/strong&gt;&lt;br&gt;
CI has no opinion on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Downstream dependencies&lt;/strong&gt; — does the third-party API you call still behave the way your integration test mocked it to?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Manual steps&lt;/strong&gt; — did someone actually run the DB migration on staging before merging, or is that still &quot;to do&quot;?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deploy-time risk&lt;/strong&gt; — blue-green cutover, cache invalidation, feature flag state — none of that is exercised by a test suite that runs against a branch.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Human process gaps&lt;/strong&gt; — did the person who approved this PR actually understand the blast radius, or did they approve because the CI badge was green?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of this shows up as a failing check. It shows up as an incident.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release risk is a different question than test pass/fail&lt;/strong&gt;&lt;br&gt;
&quot;Did the tests pass&quot; is a yes/no question about code. &quot;Is this release safe to ship&quot; is a probabilistic question about a system: what changed, how big is the diff, does it touch a critical path, is there a rollback plan, has this kind of change caused problems before.&lt;/p&gt;
&lt;p&gt;Most teams answer that second question with vibes — a Slack message, a shrug, &quot;looks fine to me.&quot; That works fine until it doesn't, and by the time it doesn't, you're writing a postmortem instead of a checklist.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What a release risk gate actually looks like&lt;/strong&gt;&lt;br&gt;
The teams that don't get burned by this usually have some version of the same thing, whether they call it that or not:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A policy layer that blocks release on concrete conditions (required approvals, coverage thresholds, freeze windows) — not vibes, actual enforced rules.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A signal aggregator that pulls test results, error rates, and coverage into one release health view instead of five open tabs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An audit trail — an immutable record of what was actually in a release, so when something breaks you're debugging from evidence, not memory.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of this requires an enterprise platform. Small teams can build a lightweight version of this with GitHub Actions, a policy file, and some discipline. The point isn't the tooling — it's separating &quot;code compiles&quot; from &quot;release is safe&quot; as two distinct questions with two distinct answers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where to start if you don't have this yet&lt;/strong&gt;&lt;br&gt;
You don't need to build a whole release control system this week. Start smaller:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Write down the 3–5 things that, if skipped, have caused an incident before. Turn them into a checklist that's actually enforced, not just documented.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add one non-negotiable gate to your PR template — coverage on touched files, or a manual QA sign-off for anything touching payments/auth.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Capture a snapshot of what shipped in each release (commit list, who approved, what tests ran) so your next postmortem starts with facts instead of &quot;let me check Slack.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want a starting point instead of building it from scratch, I put together a Release Checklist Pack and a GitHub QA Gates Pack — practical templates for exactly this, no platform lock-in required.&lt;/p&gt;
&lt;p&gt;I'm building Dulvarn, a release control system for GitHub-first teams, plus a set of standalone QA/release tools and templates. This post reflects my own experience shipping software, not any employer's views or confidential information.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25303/ci-is-green-your-release-may-still-be-risky</guid>
<pubDate>Mon, 24 Aug 2026 15:29:44 +0000</pubDate>
</item>
<item>
<title>Auto-close GitHub pull requests</title>
<link>https://coderlegion.com/25235/auto-close-github-pull-requests</link>
<description>&lt;p&gt;You might be like me. You open the dishwasher and there's no order or discipline to how it's been loaded. If you leave it that way, half of your cups will come out gritty. The baking tray is going to stop the spinning water blade. The bowl is going to be filled with water. It's a mess.&lt;/p&gt;
&lt;p&gt;If you're the person who re-loads the whole dishwasher, and if you're using GitHub Pull Requests... this post is for you.&lt;/p&gt;
&lt;p&gt;Just like the dishwasher, I sometimes open GitHub to find the Pull Requests tab on a repository has been loaded badly. It's a mess.&lt;/p&gt;
&lt;p&gt;The good news is, the fix is automated and easy.&lt;/p&gt;
&lt;h3 id=&quot;stale-prs&quot;&gt;Stale PRs&lt;/h3&gt;
&lt;p&gt;There's a GitHub-authored Action that tackles this problem, so you don't have to. Sadly, it doesn't work on dishwashers but let's take whatever wins we can get.&lt;/p&gt;
&lt;p&gt;You add a new Action to the &lt;code&gt;.github/workflows&lt;/code&gt; folder called &lt;code&gt;stale-pull-requests.yml&lt;/code&gt;, then add the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A schedule to run the Action. Once a week is usually sufficient&lt;/li&gt;
&lt;li&gt;A reference to &lt;code&gt;actions/stale&lt;/code&gt; with a dusting of configuration&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For scheduling, once a week is enough and you can set it up as a mittwoch maintenance activity. The syntax for schedules takes some getting used to, but &lt;code&gt;0 1 * * 3&lt;/code&gt; fills the slots &lt;code&gt;minute hour day-of-month month day-of-week&lt;/code&gt;. If you don't need to supply a value (like day-of-month, because we're doing it every week) you just use a &lt;code&gt;*&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To help my friends, I always add a comment to explain the schedule.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;name: Mark stale PRs
on:
  schedule:
    - cron: '0 1 * * 3'  # Every Wednesday at 1am UTC

jobs:
  stale:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/stale@v9
        with:
          stale-pr-message: 'Things seem to have gone quiet on this PR. There has been no activity for 60 days, so it will be closed in 14 days if there is still no movement.'
          close-pr-message: 'Closing due to inactivity.'
          days-before-pr-stale: 60
          days-before-pr-close: 14
          stale-pr-label: 'stale'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On the &lt;code&gt;actions/stale&lt;/code&gt; front, you add a couple of messages, some timings, and a label.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;stale-pr-message&lt;/code&gt; tells people what's about to happen; the PR seems to have wilted and it's going to get crushed&lt;/li&gt;
&lt;li&gt;&lt;code&gt;close-pr-message&lt;/code&gt; explains why the PR got crushed when it gets auto-closed&lt;/li&gt;
&lt;li&gt;&lt;code&gt;days-before-pr-stale&lt;/code&gt; is how long you wait before adding the &lt;code&gt;stale-pr-message&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;days-before-pr-close&lt;/code&gt; is how much longer you wait before crushing it&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stale-pr-label&lt;/code&gt; is the label that will be applied to stale PRs&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;there-are-two-doors&quot;&gt;There are two doors&lt;/h3&gt;
&lt;p&gt;Two things will happen when you add this. People will realize they forgot all about the PR and will move it on and get it approved, merged, and closed. Or they won't, and it will be kicked out of the pub by Peggy Mitchell.&lt;/p&gt;
&lt;p&gt;Either way, the dishwasher is neat and tidy, and all your plates and cups get clean.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25235/auto-close-github-pull-requests</guid>
<pubDate>Mon, 24 Aug 2026 08:24:30 +0000</pubDate>
</item>
<item>
<title>Your CI Pipeline Is the Most Privileged Machine You Own. You Have Never Scanned It.</title>
<link>https://coderlegion.com/25110/your-ci-pipeline-is-the-most-privileged-machine-you-own-you-have-never-scanned-it</link>
<description>&lt;p&gt;You scan your application code. You scan your dependencies. You scan your containers.&lt;/p&gt;
&lt;p&gt;You have never scanned the thing that has access to all of them.&lt;/p&gt;
&lt;p&gt;Your CI pipeline holds your deploy keys. Your registry credentials. Your cloud tokens. Your signing secrets. It runs on every push, it runs third-party code you did not write, and it runs with more privilege than any developer on your team.&lt;/p&gt;
&lt;p&gt;It is the most privileged machine you own. And for most projects, it is completely unreviewed.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-attackers-target-the-pipeline&quot;&gt;Why Attackers Target The Pipeline&lt;/h3&gt;
&lt;p&gt;An attacker who compromises your laptop gets your laptop.&lt;/p&gt;
&lt;p&gt;An attacker who compromises your pipeline gets production.&lt;/p&gt;
&lt;p&gt;They do not need to find a vulnerability in your code. They do not need to phish a developer. They need one workflow file that trusts something it should not. The pipeline then does the work for them, with credentials you handed it, inside a network you allowed.&lt;/p&gt;
&lt;p&gt;This is not theoretical. Supply chain attacks moved to CI years ago because that is where the credentials live. The Codecov bash uploader compromise in 2021 exposed secrets from thousands of CI environments. In March 2025, the widely used &lt;code&gt;tj-actions/changed-files&lt;/code&gt; action was compromised and began leaking secrets into build logs of every repository that referenced it by tag.&lt;/p&gt;
&lt;p&gt;Both attacks worked the same way. Trusted third-party code, running with pipeline privileges, on somebody else's push.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;1-actions-pinned-to-tags-instead-of-commits&quot;&gt;1. Actions Pinned To Tags Instead Of Commits&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The mistake:&lt;/strong&gt; Your workflow says &lt;code&gt;uses: some-org/some-action@v3&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A tag is a pointer. Whoever controls the repository controls where it points. If that account is compromised, &lt;code&gt;v3&lt;/code&gt; silently becomes attacker code on your next run. You changed nothing. You approved nothing. You pulled it anyway.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; Pin every third-party action to a full commit SHA.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;# Do not do this
uses: some-org/some-action@v3

# Do this
uses: some-org/some-action@a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A SHA cannot be moved. Add a comment with the version so future you knows what it was.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to catch it:&lt;/strong&gt; &lt;code&gt;grep -rn &quot;uses:.*@v&quot; .github/workflows/&lt;/code&gt; lists every unpinned action you have. Do it now. The result is usually worse than expected.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;2-secrets-available-to-every-job&quot;&gt;2. Secrets Available To Every Job&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The mistake:&lt;/strong&gt; Your secrets are repository-wide. Every workflow can read them. That includes the lint job. That includes the job that runs a third-party formatter on a fork's pull request.&lt;/p&gt;
&lt;p&gt;A secret is exposed to everything that can read it, not just to the step you were thinking about when you added it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; Scope secrets to environments, not to the repository, and require approval for the environments that hold production credentials. A test job does not need a deploy key. Give it nothing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to catch it:&lt;/strong&gt; List your repository secrets. For each one, name the single job that needs it. Anything you cannot assign to a specific job is over-shared.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;3-workflows-that-run-on-untrusted-pull-requests&quot;&gt;3. Workflows That Run On Untrusted Pull Requests&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The mistake:&lt;/strong&gt; You use &lt;code&gt;pull_request_target&lt;/code&gt; because you needed a token that &lt;code&gt;pull_request&lt;/code&gt; does not have, and then you check out the pull request head.&lt;/p&gt;
&lt;p&gt;That combination runs attacker-controlled code with your secrets in scope. It is the single most reliable way to leak credentials from a public repository.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; Use &lt;code&gt;pull_request&lt;/code&gt; for anything that touches untrusted code. If you genuinely need privileged work on a fork's contribution, split it: an unprivileged job builds and uploads an artifact, a separate privileged job consumes the artifact without ever checking out the fork's code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to catch it:&lt;/strong&gt; &lt;code&gt;grep -rn &quot;pull_request_target&quot; .github/workflows/&lt;/code&gt;. Every hit needs a written justification. If nobody remembers why it is there, it should not be there.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;4-default-write-permissions-on-the-job-token&quot;&gt;4. Default Write Permissions On The Job Token&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The mistake:&lt;/strong&gt; You never set &lt;code&gt;permissions:&lt;/code&gt;, so the automatic token gets whatever the repository default is. On older repositories, that default is write. Any compromised step in that job can push commits, edit releases, or open pull requests as your CI.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; Default to nothing and grant upward per job.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;permissions:
  contents: read

jobs:
  build:
    permissions:
      contents: read
  release:
    permissions:
      contents: write
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;How to catch it:&lt;/strong&gt; Any workflow file with no &lt;code&gt;permissions:&lt;/code&gt; block is running on defaults. Search for the files that lack it, not the ones that have it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;5-secrets-printed-into-logs&quot;&gt;5. Secrets Printed Into Logs&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The mistake:&lt;/strong&gt; Someone added &lt;code&gt;set -x&lt;/code&gt; while debugging, or a step echoes a config object, or a failing command dumps its environment. Masking catches exact string matches. It does not catch a secret that has been base64 encoded, JSON wrapped, or split across a variable expansion.&lt;/p&gt;
&lt;p&gt;Build logs on public repositories are public. Artifacts are downloadable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; Never echo configuration. Remove debug tracing before merge. Treat log output as published, because it is.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to catch it:&lt;/strong&gt; Run a secret scanner across your own build logs and artifacts, not just your source tree. Gitleaks and TruffleHog work on any text. Most people never point them at the one place secrets actually get printed.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-ten-minute-audit&quot;&gt;The Ten Minute Audit&lt;/h3&gt;
&lt;p&gt;You do not need a new tool for this. Open a terminal in your repository:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Unpinned third-party actions
grep -rn &quot;uses:.*@v&quot; .github/workflows/

# Workflows that run untrusted code with privileges
grep -rn &quot;pull_request_target&quot; .github/workflows/

# Workflows with no explicit permissions block
grep -rLn &quot;permissions:&quot; .github/workflows/*.yml

# Debug tracing left behind
grep -rn &quot;set -x&quot; .github/workflows/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Four commands. Ten minutes. Fix the SHAs first, then the permissions blocks. That covers most of the realistic attack surface.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-this-stays-broken&quot;&gt;Why This Stays Broken&lt;/h3&gt;
&lt;p&gt;Pipeline security falls between two teams. Application security scanners read your source code, not your workflow files. Infrastructure scanners read your Terraform, not your build steps. The pipeline sits in the gap, and the gap is where the credentials are.&lt;/p&gt;
&lt;p&gt;The tools that do read workflow files exist. Checkov covers CI configuration, Semgrep has rules for GitHub Actions, and actionlint catches the structural problems. None of them is the default in a new repository, which is exactly why this keeps working for attackers.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-bottom-line&quot;&gt;The Bottom Line&lt;/h3&gt;
&lt;p&gt;Your pipeline has more privilege than you do. Scan it like it does.&lt;/p&gt;
&lt;p&gt;Pin your actions to SHAs. Scope your secrets. Never run untrusted code with credentials in reach. Then go look at what your build logs have been printing this whole time.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;discussion-question&quot;&gt;Discussion Question&lt;/h3&gt;
&lt;p&gt;Go run &lt;code&gt;grep -rn &quot;uses:.*@v&quot; .github/workflows/&lt;/code&gt; right now. How many unpinned actions did you find? I want to know if anyone is actually at zero.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25110/your-ci-pipeline-is-the-most-privileged-machine-you-own-you-have-never-scanned-it</guid>
<pubDate>Fri, 21 Aug 2026 20:17:57 +0000</pubDate>
</item>
<item>
<title>Developer Weekly Briefing — August 21, 2026</title>
<link>https://coderlegion.com/25085/developer-weekly-briefing-august-21-2026</link>
<description>&lt;p&gt;A busy week across tooling, supply chain security, and governance. Two stories have immediate action items attached. Here's what mattered.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;github-copilot-bets-on-model-choice-not-model-loyalty&quot;&gt;GitHub Copilot bets on model choice, not model loyalty&lt;/h3&gt;
&lt;p&gt;GitHub's latest Copilot update, covering the week of August 10, adds two new models — Kimi K3 across all plan tiers and MAI-Code-1.1-Flash with native image understanding — and enables per-turn model switching in VS Code 1.133. Developers can now move between Claude BYOK and built-in Copilot models mid-session without restarting or losing context.&lt;/p&gt;
&lt;p&gt;The direction is clear: GitHub is building Copilot as a multi-model orchestration layer, not a tool that wins by having the best single model. Agent Plugins 1.0 is now GA and works the same way across VS Code, Copilot CLI, the Copilot app, and the SDK — meaning internal tooling built for one surface no longer has to be rebuilt for another. JetBrains adds Copilot Memory for cross-session context retention and Ollama support for local model access.&lt;/p&gt;
&lt;p&gt;Copilot CLI got the most substantial updates: a /tasks command for subagent management, prompt queuing while agents are mid-task, headless autopilot combining --plan and --mode flags, and /rewind for undoing Copilot changes without touching git.&lt;/p&gt;
&lt;p&gt;The governance gap worth flagging: Copilot doesn't record which model contributed to which line of code. Per-turn model switching makes that gap wider, not smaller. By the time something breaks in production, the decision about which model wrote the relevant code is invisible in the build record. That's an audit and incident-response problem waiting to happen for any team that needs to reconstruct what happened and why.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/github-copilots-latest-update-bets-on-model-choice-not-model-loyalty/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;vs-code-decouples-ai-agents-from-the-editor-window&quot;&gt;VS Code decouples AI agents from the editor window&lt;/h3&gt;
&lt;p&gt;Microsoft separated AI agent sessions from the VS Code editor itself in the latest release, meaning agent workloads can run independently of whatever the developer has open in the editor. For teams running parallel agent tasks or background automation, this is a meaningful architectural change — agents no longer compete with active editing sessions for the same window context.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/microsoft-decouples-ai-agents-from-the-vs-code-editor-in-latest-release/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;claude-code-s-temporary-usage-boost-expires-tonight&quot;&gt;Claude Code's temporary usage boost expires tonight&lt;/h3&gt;
&lt;p&gt;If you're a Claude Code user on the temporary expanded usage tier, the boost ends tonight. This is worth checking before you kick off anything long-running this evening. Anthropic hasn't announced what the new baseline looks like post-expiry, so it's worth knowing where you stand before the session caps reset.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/claude-codes-temporary-usage-boost-expires-tonight-heres-what-actually-changes/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;npm-v12-shuts-down-a-popular-malware-trick-the-threat-isn-t-gone&quot;&gt;npm v12 shuts down a popular malware trick — the threat isn't gone&lt;/h3&gt;
&lt;p&gt;npm v12 is now generally available, and the install script changes from July are in effect. The specific malware technique it blocks: postinstall scripts that run automatically on package installation, which have been a primary vector for supply chain attacks across the JavaScript ecosystem. That particular trick is now off by default.&lt;/p&gt;
&lt;p&gt;But it's worth being clear about what v12 doesn't fix. Attackers will adapt. The next wave of npm-based attacks will use whatever path npm v12 left open. The value of the upgrade is closing a well-documented, heavily exploited vector — not ending the supply chain threat category.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/npm-v12-shuts-down-a-popular-malware-trick-but-the-threat-isnt-going-away/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;langchain-s-dcode-isn-t-new-its-governance-play-for-sensitive-code-is&quot;&gt;LangChain's dcode isn't new — its governance play for sensitive code is&lt;/h3&gt;
&lt;p&gt;LangChain has been shipping dcode for a while. What's new is a governance layer that lets organizations enforce policies around what happens when AI agents interact with sensitive code — access controls, audit trails, and restrictions on what can be passed to external models. For teams that've held back on agentic coding tools specifically because of sensitive IP concerns, this addresses the gap more directly than most tools in the space.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/langchains-dcode-isnt-new-its-governance-play-for-sensitive-code-is/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;github-sharpens-codeql-for-actions-workflows-and-modern-javascript&quot;&gt;GitHub sharpens CodeQL for Actions workflows and modern JavaScript&lt;/h3&gt;
&lt;p&gt;CodeQL now covers GitHub Actions workflow files and modern JavaScript patterns that the previous ruleset wasn't catching. If you run CodeQL as part of your CI/CD security scanning, the coverage improvements apply automatically. Worth a scan run after the update to see what surfaces.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/github-sharpens-codeqls-eye-on-actions-workflows-and-modern-javascript/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;tessl-is-betting-on-standards-to-close-the-ai-code-review-gap&quot;&gt;Tessl is betting on standards to close the AI code review gap&lt;/h3&gt;
&lt;p&gt;AI agents write code faster than anyone can review it — that's the established problem. Tessl's argument is that the solution isn't better tooling, it's standards: a shared specification layer that defines what AI-generated code is expected to do, so review can be partially automated against a known target rather than always requiring a human to reconstruct intent from the output. An interesting architectural bet worth tracking.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/ai-agents-are-writing-code-faster-than-anyone-can-review-it-tessl-is-betting-on-standards-to-close-that-gap/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;also-from-coder-legion-this-week-2&quot;&gt;Also from Coder Legion this week&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;One retiring developer nearly broke a retailer's core system.&lt;/strong&gt; Hypercubic built AI to catch that kind of undocumented institutional knowledge before it walks out the door. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/24851/one-retiring-developer-nearly-broke-this-retailers-core-system-hypercubic-built-ai-stop&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Harness GM Rahul Sood: most &quot;AI remediation&quot; claims don't actually work.&lt;/strong&gt; A candid breakdown of where vendor promises outrun what the tools can actually deliver — and what real remediation looks like in production. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/24833/harness-gm-rahul-sood-most-ai-remediation-claims-dont-actually-work-heres-what-does&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crogl's Monzy Merza: the SOC agent that refuses to say it can replace you.&lt;/strong&gt; An honest conversation about where AI agents belong in security operations and where they don't. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/24945/crogls-monzy-merza-the-soc-agent-that-refuses-to-say-it-can-replace-you&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blumira's Hearth turns security investigations from hours into minutes.&lt;/strong&gt; AI reasoning applied to the investigation workflow, not just the alert triage layer. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/24927/blumiras-hearth-turns-security-investigations-from-hours-into-minutes-with-ai-reasoning&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detectify's Rickard Carlsson: attackers don't have new tricks, they have a faster clock.&lt;/strong&gt; A grounded take on why the threat landscape feels more urgent even when the techniques haven't fundamentally changed. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/24781/detectifys-rickard-carlsson-attackers-dont-have-new-tricks-they-have-a-faster-clock&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS is betting $500M that students will learn cloud by building.&lt;/strong&gt; The payoff is still unproven, but the investment signals where Amazon thinks developer education is heading. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/25032/aws-is-betting-500m-that-students-will-learn-cloud-by-building-the-payoff-still-unproven&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows Server still has gravity. Kubernetes hasn't escaped its pull.&lt;/strong&gt; A look at why the migration away from Windows Server in enterprise environments keeps moving slower than the cloud-native narrative suggests. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/25030/windows-server-still-has-gravity-kubernetes-hasnt-escaped-its-pull&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;The through-line this week: the tooling is getting faster and more capable across the board — model switching, agent decoupling, automated code standards — and the governance layer is still catching up. The Copilot model attribution gap and the LangChain sensitive code controls are both responses to the same underlying tension: moving fast with AI tools is getting easier, and knowing exactly what happened and why is getting harder.&lt;/p&gt;
&lt;p&gt;See you next Friday.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Developer Weekly Briefing is published every Friday on &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com&quot;&gt;Coder Legion&lt;/a&gt;. Written by &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Tom+Smith&quot;&gt;Tom Smith&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25085/developer-weekly-briefing-august-21-2026</guid>
<pubDate>Fri, 21 Aug 2026 12:36:02 +0000</pubDate>
</item>
</channel>
</rss>