<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: iamalizaidi</title><link>https://news.ycombinator.com/user?id=iamalizaidi</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 02 Jul 2026 21:44:51 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=iamalizaidi" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by iamalizaidi in "Show HN: My first SaaS to help human developers and AI agents share context"]]></title><description><![CDATA[
<p>*Branch Story captures your agent's context and reasoning, along with diffs and terminal output. It works as a VS Code extension (or any VS Code fork) and as an npm package.</p>
]]></description><pubDate>Thu, 02 Jul 2026 14:33:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48762257</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=48762257</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48762257</guid></item><item><title><![CDATA[Show HN: My first SaaS to help human developers and AI agents share context]]></title><description><![CDATA[
<p>Hello HN,<p>I created Decispher (decispher.com) to enable human developers and AI agents working alongside each other to share their context.<p>It has some pretty cool features, like Branch Story (explains why a branch's code looks the way it does) and Session Context Transfer (an MCP tool that can copy context from one chat, agent, or machine to another).<p>You can also capture context from engineering platforms like Slack, JIRA, and Git(hub/lab) just by tagging @Decispher.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48762112">https://news.ycombinator.com/item?id=48762112</a></p>
<p>Points: 5</p>
<p># Comments: 1</p>
]]></description><pubDate>Thu, 02 Jul 2026 14:24:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=48762112</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=48762112</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48762112</guid></item><item><title><![CDATA[New comment by iamalizaidi in "Show HN: ZeroFS – A log-structured filesystem for S3"]]></title><description><![CDATA[
<p>Seems purely vibecoded</p>
]]></description><pubDate>Thu, 02 Jul 2026 14:17:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=48762010</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=48762010</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48762010</guid></item><item><title><![CDATA[Ask HN: Using AI voiceover and animated cartoon for YC application product demo?]]></title><description><![CDATA[
<p>Hello,
I waned to ask if i can use AI voiceover and animated cartoon to tell a story about my YC product demo. Will it have negative impact?</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47459167">https://news.ycombinator.com/item?id=47459167</a></p>
<p>Points: 2</p>
<p># Comments: 1</p>
]]></description><pubDate>Fri, 20 Mar 2026 19:06:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47459167</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=47459167</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47459167</guid></item><item><title><![CDATA[Show HN: Decision Guardian v1.2.0 – enforce architectural decisions at PR time]]></title><description><![CDATA[
<p>The tool is simple. You write your architectural decisions in a Markdown file what was decided, why, what was rejected. Decision Guardian maps those decisions to file glob patterns. When a PR touches a matched file, it posts a comment explaining the relevant decision.<p>No database. No signup. Two lines of GitHub Actions YAML.<p>v1.2.0 fixes several rule-engine bugs that surfaced from real usage:<p>Silent false-positives when content rules had no type field (every template shipped broken)<p>OR-only logic for multi-condition rules with no way to require ALL conditions<p>Deleted lines were invisible to all matchers — removing guarded code never triggered a warning<p>json_path rules failed silently for nested value edits because parent keys only appear as context lines in diffs<p>The fixes came directly from people running this on production repositories and reporting what wasn't working. That feedback loop has been more valuable than anything I designed upfront.<p>It also works as an npx CLI for pre-push checks outside GitHub Actions (GitLab CI, Jenkins, CircleCI, local hooks).<p>Repo: <a href="https://github.com/DecispherHQ/decision-guardian" rel="nofollow">https://github.com/DecispherHQ/decision-guardian</a>
npm: npx decision-guardian check<p>Would love your feedback</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47392464">https://news.ycombinator.com/item?id=47392464</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 15 Mar 2026 22:06:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47392464</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=47392464</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47392464</guid></item><item><title><![CDATA[Show HN: Decision Guardian now comes with CLI]]></title><description><![CDATA[
<p>Decision Guardian
Prevent institutional amnesia by surfacing past architectural decisions directly<p># Install globally<p>npm install -g decision-guardian<p># Or use directly without installation<p>npx decision-guardian --help<p># Check staged changes<p>decision-guardian check .decispher/decisions.md<p># Check against a branch<p>decision-guardian check .decispher/decisions.md --branch main<p># Auto-discover all decision files<p>decision-guardian checkall --fail-on-critical<p># Initialize a new project with template<p>decision-guardian init --template security
Use in any CI system — GitLab, Jenkins, CircleCI, pre-commit hooks, and more<p>Github Open Source -:<p>https://github.com/DecispherHQ/decision-guardian</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47375668">https://news.ycombinator.com/item?id=47375668</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 14 Mar 2026 11:45:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=47375668</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=47375668</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47375668</guid></item><item><title><![CDATA[New comment by iamalizaidi in "Spotify's take on ADRs is great, but how do you enforce them at scale?"]]></title><description><![CDATA[
<p>Love the scorecard + guard loop idea — especially tracking retries/cost spikes as a signal. That's a meaningful feedback layer.
Right now Decision Guardian is intentionally stateless: when a guard trips, it fails the check and surfaces the full decision context in the PR comment. Resolution is human — override or update the ADR. The gap you're implicitly pointing at is real though: we don't log why a guard was bypassed or whether the ADR got updated after. That memory just dies in the PR thread.
Curious — is the {status:'ok'} evaluation happening in the runner itself or hitting a live service? Wondering if ADR drift just moves one layer up into the guard logic over time.</p>
]]></description><pubDate>Tue, 03 Mar 2026 16:51:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=47235174</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=47235174</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47235174</guid></item><item><title><![CDATA[Spotify's take on ADRs is great, but how do you enforce them at scale?]]></title><description><![CDATA[
<p>Hey HN,<p>I built Decision Guardian — an open-source GitHub Action and CLI that automatically surfaces architectural decisions as PR comments when code touches protected files.
The problem it solves:<p>Spotify published a great post in 2020 about when to write Architecture Decision Records. I followed the advice. My team wrote ADRs. They sat in docs/adr/. Nobody read them before opening a PR.<p>https://engineering.atspotify.com/2020/04/when-should-i-write-an-architecture-decision-record<p>The gap isn't documentation — it's surfacing. The right moment to surface a decision isn't onboarding or sprint planning. It's when someone is actively editing the code the decision protects.<p>How it works:<p>1) Write decisions in a Markdown file (compatible with existing ADRs)
2) Add the GitHub Action to your workflow
3) When a PR modifies protected files, Decision Guardian posts the relevant decisions as a comment automatically<p>Decision format (plain Markdown):<p><!-- DECISION-DB-001 -->
## Decision: Use Postgres for Billing<p>*Status*: Active
*Severity*: Critical<p>*Files*:
- `src/db/*/*.ts`<p>### Context
We evaluated Postgres vs MongoDB. Billing requires ACID compliance.
MongoDB was rejected — no transaction guarantees.<p>Features worth calling out:<p>1) Severity levels (Critical / Warning / Info) — can block PRs on critical violations
2) Advanced matching: glob patterns, regex, content-based rules, boolean logic
3) CLI works with any CI (GitLab, Jenkins, CircleCI, pre-commit hooks)
4) Handles PRs with 3000+ files without OOM
5) Idempotent comments — no spam, updates in place
6) Zero external network calls — nothing leaves your GitHub runner
7) 109 tests, ReDoS protection, path traversal protection<p>vs. CODEOWNERS: CODEOWNERS assigns reviewers. This explains why the review matters. Best used together.
vs. Danger.js: Danger requires code. This requires Markdown. Non-JS engineers can own their decisions.<p>It's MIT licensed, single-step GitHub Action or npx decision-guardian CLI.<p>Happy to answer questions.<p>Repo: https://github.com/DecispherHQ/decision-guardian</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47226046">https://news.ycombinator.com/item?id=47226046</a></p>
<p>Points: 6</p>
<p># Comments: 1</p>
]]></description><pubDate>Mon, 02 Mar 2026 23:59:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=47226046</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=47226046</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47226046</guid></item><item><title><![CDATA[New comment by iamalizaidi in "Shift from passive documentation to active enforcement"]]></title><description><![CDATA[
<p>This is really cool, had no idea someone had solved a similar problem this way. The checksum idea is genius!!</p>
]]></description><pubDate>Sun, 01 Mar 2026 01:03:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=47202460</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=47202460</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47202460</guid></item><item><title><![CDATA[Show HN: Tool to surface past architectural decisions directly on Pull Requests]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/DecispherHQ/decision-guardian">https://github.com/DecispherHQ/decision-guardian</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47202407">https://news.ycombinator.com/item?id=47202407</a></p>
<p>Points: 5</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 01 Mar 2026 00:56:20 +0000</pubDate><link>https://github.com/DecispherHQ/decision-guardian</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=47202407</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47202407</guid></item><item><title><![CDATA[Show HN: Decision Guardian – Auto-surface architectural context on PRs and CLI]]></title><description><![CDATA[
<p>Hey HN, I’m Ali.<p>I built Decision Guardian to solve a problem I call "institutional amnesia." Senior engineers build complex systems (like highly-tuned DB connection pools or sensitive auth middleware) and document the "why" in wikis or ADRs. But inevitably, a new developer modifies that code without reading the docs, and things break.
While tools like CODEOWNERS are great for telling you who needs to review a file, I needed something that automatically tells the developer why the review matters before they even ask.<p>What it is: Decision Guardian is an open-source tool that shifts teams from passive documentation to active enforcement. You write your architectural decisions in a standard Markdown file (e.g., .decispher/decisions.md) and map them to file paths using glob patterns or advanced JSON rules. When a developer modifies those protected files, it automatically analyzes the diff and drops a structured comment into the Pull Request explaining the context, warnings, and checklists.<p>I just released v1.1, which includes a major internal SOLID refactor. The core engine is now 100% decoupled from GitHub (using ISCMProvider and ILogger interfaces), allowing it to ship as a standalone 430KB CLI (npx decision-guardian check) that works locally, in pre-commit hooks, or on GitLab/Jenkins.<p>Under the hood (How it works): I wanted this to be fast and secure enough to run on massive enterprise repositories, which required a few fun technical implementations:<p>O(1) Pattern Matching: Naively matching N decisions against M files in a 3,000+ file PR is painfully slow. The core engine compiles all file patterns into a Prefix Trie (an Aho-Corasick variant), turning candidate lookup into an O(1) operation relative to the number of decisions.<p>ReDoS-Protected VM Sandbox: For complex rules, you can use Regex to scan diff contents (e.g., detecting hardcoded credentials). Because user-supplied regex can cause catastrophic backtracking, all regex evaluation runs inside an isolated Node VM sandbox with a hard 5-second timeout and pre-flight safe-regex checks.<p>Progressive Comment Truncation: GitHub limits PR comments to 65,536 characters. To prevent failures on massive PRs, the tool uses a 6-layer progressive truncation algorithm that intelligently summarizes details before falling back to a hard truncation.<p>Privacy & Telemetry: I know HN cares deeply about telemetry. v1.1 introduces anonymous usage metrics to help me understand performance (e.g., node version, duration, match counts). However, I designed it with strict privacy constraints:<p>Zero PII: It never collects source code, file contents, repo names, branches, or paths.<p>Runtime Blocklist: The privacy module physically validates every payload against a blocklist before sending. If any blocked field is detected, it throws an error and rejects the payload.<p>Open Source Backend: It is fire-and-forget (never slows down the tool), entirely opt-out (DG_TELEMETRY=0), and the Cloudflare Worker backend code is fully open-source in the repo.<p>Links:<p>Repo: <a href="https://github.com/DecispherHQ/decision-guardian" rel="nofollow">https://github.com/DecispherHQ/decision-guardian</a><p>Docs/Architecture: <a href="https://decision-guardian.decispher.com" rel="nofollow">https://decision-guardian.decispher.com</a><p>I also included 5 production-ready templates (security, database, api, etc.) to help teams get started instantly.<p>I’d love to hear your thoughts on the architecture, the Trie implementation, or how your teams currently handle enforcing ADRs during code reviews!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47188328">https://news.ycombinator.com/item?id=47188328</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 28 Feb 2026 00:39:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=47188328</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=47188328</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47188328</guid></item><item><title><![CDATA[Shift from passive documentation to active enforcement]]></title><description><![CDATA[
<p>Hey everyone,<p>If you work on a scaling codebase, you know the struggle of keeping architectural context alive. Senior engineers make important decisions about how the code should be structured, but new hires often don't know that context exists and end up accidentally breaking critical systems.<p>To fix this, I built Decision Guardian. It is an open-source tool (running as a GitHub Action or local CLI) that shifts teams from passive documentation to active enforcement.
What it exactly does: Instead of hoping developers read an external wiki, you document your architectural decisions in a simple Markdown file in your repository (e.g., .decispher/decisions.md). You map these decisions to specific files using glob patterns or advanced JSON rules (like regex or line-ranges).<p>When a developer opens a Pull Request that modifies those protected files, Decision Guardian automatically drops a structured comment directly into the code review, giving them the exact context and checklist they need before they merge.<p>Here is a real-world example of how it works:<p>Let's say your team has a strict rule about not breaking public API contracts.<p>The Setup: In your decisions.md file, you create a decision called DECISION-API-001: Public API Contract Protection and map it to the file pattern src/api/v1/*/*.ts.<p>The Trigger: A new developer submits a Pull Request that modifies src/api/v1/users.ts to change how a payload is formatted.<p>The Action: Decision Guardian instantly detects the match and posts a "Warning" comment on the PR stating: "Changes to v1 API routes affect external clients. Before merging: Update API documentation, notify integration partners, and consider a deprecation path".<p>Key Features:<p>You can categorize decisions by severity (Info, Warning, Critical).<p>If a developer violates a "Critical" decision, you can configure the tool to automatically fail the PR status check, preventing them from merging without approval.
It runs entirely locally or in your CI/CD pipeline, guaranteeing your source code never leaves your repository.
It essentially acts as an automated guardrail, telling your developers why a piece of code is sensitive the exact moment they try to change it.<p>You can check out the repo here: 
https://github.com/DecispherHQ/decision-guardian</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47188281">https://news.ycombinator.com/item?id=47188281</a></p>
<p>Points: 5</p>
<p># Comments: 2</p>
]]></description><pubDate>Sat, 28 Feb 2026 00:35:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=47188281</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=47188281</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47188281</guid></item><item><title><![CDATA[Show HN: Decision Guardian – surface architectural context]]></title><description><![CDATA[
<p>Most teams have files where the "why" matters as much as the "what." A config value tuned against prod load. A dependency pinned for a CVE reason. A route that's hardcoded in an external system nobody remembers.<p>The context exists somewhere — a postmortem doc, a Slack thread, someone's memory. It's just never at the moment a new engineer opens a PR touching that file.<p>Decision Guardian reads a markdown file of decisions tied to file patterns and posts the relevant context as a PR comment when those files change. Works as a GitHub Action or CLI (npx decision-guardian check, non-zero exit on critical matches).<p>The part I found interesting to build: simple file matching created too much noise, so I added content-aware rules. A config file only triggers if you change the specific keys that matter.<p>An alert only fires when both files in a coupled pair change in the same PR. Regex matching on diffs with ReDoS protection and 5s timeout.<p>{
  "match_mode": "all",
  "conditions": [
    { "type": "file", "pattern": "src/analytics/events.ts" },
    { "type": "file", "pattern": "src/analytics/schema.ts" }
  ]
}<p>That rule fires only when both files are in the same PR diff — the case where a field rename needs to be consistent across both.<p>Tech: TypeScript, Trie for O(1) pattern lookup, safe-regex for ReDoS prevention. CLI is platform-agnostic — GitLab CI, Jenkins, any pre-push hook.<p>GitHub: <a href="https://github.com/DecispherHQ/decision-guardian" rel="nofollow">https://github.com/DecispherHQ/decision-guardian</a> (MIT)<p>Known gaps: PR commenting is GitHub-only for now. GitLab native support is the most requested thing and the ISCMProvider interface is already stubbed for it.<p>Happy to discuss the matching engine or the decision format tradeoffs.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47089082">https://news.ycombinator.com/item?id=47089082</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 20 Feb 2026 15:19:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=47089082</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=47089082</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47089082</guid></item><item><title><![CDATA[Decision Guardian: Enforce ADRs in PRs Using Regex and JSONPath]]></title><description><![CDATA[
<p>I stumbled across this tool recently and thought it was worth sharing for anyone managing large codebases or monorepos.<p>The Problem: We write ADRs (Architectural Decision Records), put them in a folder, and then ignore them. New engineers break architectural rules because they don't know the history.<p>The Solution: Decision Guardian runs in CI. You define rules (ADRs) linked to file patterns.<p>What makes it interesting:
It goes beyond simple glob matching. You can define rules based on:<p>Content (Regex): e.g., Alert if someone commits a secret key pattern or a banned function.<p>Structure (JSONPath): e.g., Watch $.dependencies in package.json to prevent library drift.<p>Location (Line Range): Protect the first 50 lines of a legacy file.<p>It’s open source and there's a helper site to generate the rule configs: https://decision-guardian.decispher.com/</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47013210">https://news.ycombinator.com/item?id=47013210</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 14 Feb 2026 09:54:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47013210</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=47013210</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47013210</guid></item><item><title><![CDATA[New comment by iamalizaidi in "Show HN: Decision Guardian – Enforce ADRs on PRs"]]></title><description><![CDATA[
<p>Thank you for the feedback</p>
]]></description><pubDate>Thu, 12 Feb 2026 19:25:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=46993739</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=46993739</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46993739</guid></item><item><title><![CDATA[New comment by iamalizaidi in "Show HN: Decision Guardian – Enforce ADRs on PRs"]]></title><description><![CDATA[
<p>Really appreciate that — that’s exactly the gap I was trying to address.<p>Re: noise — I agree, that’s the main failure mode for any PR bot.<p>A few things I did to keep signal high:<p>Only trigger on explicit file patterns (no fuzzy matching by default)<p>Idempotent comments — it updates instead of spamming new ones<p>If multiple decisions match, it groups them into a single comment<p>Severity levels (info / warning / critical) so teams can tune strictness<p>Optional “fail critical” mode so it never blocks PRs unless configured<p>The goal is that it behaves more like a linter than a chatbot — predictable and quiet unless something clearly matches.<p>If it ever becomes background noise, it’s failed</p>
]]></description><pubDate>Thu, 12 Feb 2026 19:18:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=46993634</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=46993634</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46993634</guid></item><item><title><![CDATA[New comment by iamalizaidi in "Show HN: Decision Guardian – Enforce ADRs on PRs"]]></title><description><![CDATA[
<p>Thanks for the pushback — genuinely fair.<p>This is still just markdown in the repo. The Action doesn’t replace ADRs, it just surfaces the relevant ones automatically in PRs so reviewers don’t have to remember to look for them.<p>In teams where people consistently check ADRs, this probably isn’t useful.<p>In teams where the ADR exists but nobody remembers it during review, this helps reduce that friction.<p>And yeah — the Mongo example was dramatized. The real version was just re-explaining a past decision in a design doc. Not catastrophic, just wasted cycles.<p>Appreciate the sanity check.</p>
]]></description><pubDate>Thu, 12 Feb 2026 19:17:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=46993615</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=46993615</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46993615</guid></item><item><title><![CDATA[Show HN: Decision Guardian – Enforce ADRs on PRs]]></title><description><![CDATA[
<p>Hi HN, I built this to solve a problem I kept running into on my team.<p>The problem: A senior engineer made a deliberate choice—Postgres over MongoDB for billing because we needed ACID compliance. They documented the reasoning in a Slack thread. 8 months later they left. A new developer opened a PR to migrate to MongoDB. No one remembered why Postgres was chosen. We spent 3 months re-evaluating a decision that had already been carefully made.<p>What this does: Decision Guardian is a GitHub Action that lets you write architectural decision records in markdown, tied to file paths. When a PR modifies those files, it automatically posts a comment with the relevant context—what was decided, why, what alternatives were rejected.<p>Think of it as CODEOWNERS for the "why" instead of the "who."<p>Technical details:<p>1) Written in TypeScript, runs as a GitHub Action
2) AST-based markdown parsing with remark
3) Prefix trie for O(log n) file-to-decision matching instead of brute-force O(N×M)
4) Supports glob patterns, regex content matching (with ReDoS protection via VM sandbox + timeout), and boolean logic for complex rules
5) Handles PRs with 3000+ files using streaming mode
6) Idempotent comments—updates existing ones instead of spamming, with self-healing duplicate cleanup
7) 5-layer progressive truncation to always fit within GitHub's comment size limit
8) No external network calls, no data leaves your GitHub runner<p>What I'd love feedback on:<p>1) Is the decision file format (structured markdown) the right choice, or would YAML/TOML be better?
2) Any thoughts on content-based matching (detecting patterns in diffs, not just filenames)?
3) Would integration with existing ADR tools (like adr-tools) be useful?<p>Code: <a href="https://github.com/DecispherHQ/decision-guardian" rel="nofollow">https://github.com/DecispherHQ/decision-guardian</a><p>Happy to answer any questions about the implementation.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46993402">https://news.ycombinator.com/item?id=46993402</a></p>
<p>Points: 4</p>
<p># Comments: 8</p>
]]></description><pubDate>Thu, 12 Feb 2026 19:02:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=46993402</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=46993402</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46993402</guid></item><item><title><![CDATA[Show HN: Decision Guardian – Surface past architectural decisions on GitHub PRs]]></title><description><![CDATA[
<p>I built Decision Guardian after watching teams repeatedly debate decisions that were already settled.<p>At my last job, we chose Postgres over MongoDB for ACID compliance. 18 months later, a new engineer opened a PR to switch to MongoDB. The team spent 3 months re-evaluating before someone remembered.<p>Decision Guardian prevents this:
- Document decisions in markdown (why you chose X over Y)
- GitHub Action comments on PRs when decision-protected code changes
- Free, open source, MIT licensed<p>Takes 2 minutes to set up. Would love feedback.<p>GitHub: <a href="https://github.com/DecispherHQ/decision-guardian" rel="nofollow">https://github.com/DecispherHQ/decision-guardian</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46955694">https://news.ycombinator.com/item?id=46955694</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 10 Feb 2026 05:15:46 +0000</pubDate><link>https://decision-guardian.decispher.com/</link><dc:creator>iamalizaidi</dc:creator><comments>https://news.ycombinator.com/item?id=46955694</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46955694</guid></item></channel></rss>