<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Haytham</title>
    <description>The latest articles on DEV Community by Haytham (@ythouma).</description>
    <link>https://dev.to/ythouma</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4077448%2Ffe0b9702-1ac9-471c-8067-2e79ae123a94.jpg</url>
      <title>DEV Community: Haytham</title>
      <link>https://dev.to/ythouma</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ythouma"/>
    <language>en</language>
    <item>
      <title>The EU AI Act scanner that cannot break your build, by design</title>
      <dc:creator>Haytham</dc:creator>
      <pubDate>Wed, 14 Oct 2026 09:55:39 +0000</pubDate>
      <link>https://dev.to/ythouma/the-eu-ai-act-scanner-that-cannot-break-your-build-by-design-24fe</link>
      <guid>https://dev.to/ythouma/the-eu-ai-act-scanner-that-cannot-break-your-build-by-design-24fe</guid>
      <description>&lt;p&gt;Every compliance tool I looked at before building my own wanted a commitment up front. Fill out a manifest. Define a system boundary. Integrate before you get any signal at all.&lt;/p&gt;

&lt;p&gt;That's a lot to ask before you know whether the tool is even useful, and it is exactly why so many GRC rollouts stall at "next sprint."&lt;/p&gt;

&lt;p&gt;&lt;code&gt;opencomplai scan --quick&lt;/code&gt; skips all of it. Point it at a directory. No manifest, no config, no system-id.&lt;/p&gt;

&lt;p&gt;It's discovery-only. It looks at what is actually in your codebase, imports, dependencies, patterns that map to Annex III categories or Article 5 prohibitions, and reports what it finds.&lt;/p&gt;

&lt;p&gt;It cannot fail your build, because it isn't wired to any gate. There is no flag to make it block anything. That's not a lenient default someone forgot to tighten. It's architecturally separate from &lt;code&gt;opencomplai check&lt;/code&gt;, the command that gates on a real manifest.&lt;/p&gt;

&lt;p&gt;The reasoning is simple. The biggest barrier to compliance tooling was never the compliance logic. It's the activation energy of finding out whether you even have a problem. A scan that can't say no to running, and can't break CI on day one, removes most of the excuse not to try. I wanted the first run to be boring.&lt;/p&gt;

&lt;p&gt;It takes about as long as reading this paragraph. You can check what categories it matches against before you run it on your own repo. The detection rules are in &lt;code&gt;packages/core&lt;/code&gt;: &lt;a href="https://github.com/Opencomplai/opencomplai" rel="noopener noreferrer"&gt;github.com/Opencomplai/opencomplai&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>security</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why a compliance tool needs its own egress allowlist</title>
      <dc:creator>Haytham</dc:creator>
      <pubDate>Fri, 09 Oct 2026 07:45:29 +0000</pubDate>
      <link>https://dev.to/ythouma/why-a-compliance-tool-needs-its-own-egress-allowlist-dd3</link>
      <guid>https://dev.to/ythouma/why-a-compliance-tool-needs-its-own-egress-allowlist-dd3</guid>
      <description>&lt;p&gt;I didn't expect the hardest security decision in a compliance engine to be about outbound network calls. It was.&lt;/p&gt;

&lt;p&gt;Opencomplai's services occasionally need controlled external connectivity. Fetching a model card. Hitting a registry. Whatever a given integration requires.&lt;/p&gt;

&lt;p&gt;The obvious options are two. Let every service make arbitrary outbound requests, which is bad for anything touching legal evidence. Or block everything and special-case exceptions inline in each service, which is a maintenance problem that grows with every integration.&lt;/p&gt;

&lt;p&gt;I picked a third. &lt;code&gt;egress-proxy&lt;/code&gt; is a dedicated service whose entire job is enforcing an allowlist for outbound connections from the rest of the stack. Nothing else talks to the outside world directly.&lt;/p&gt;

&lt;p&gt;One choke point. One place to audit. One place to update when a new integration needs a new destination.&lt;/p&gt;

&lt;p&gt;I'm the person who gets called when things break, sometimes at 1am. At that hour I want one place to look, not five.&lt;/p&gt;

&lt;p&gt;For a normal web app this is overkill. For something that is supposed to produce evidence you can hand a regulator, "we can enumerate every external system this ever talked to" isn't a nice-to-have. It's part of the compliance story itself. You can't claim your evidence pipeline is trustworthy if you can't account for what it was allowed to phone home to.&lt;/p&gt;

&lt;p&gt;It's a small service, and that is the point. It does exactly one thing instead of being a settings flag scattered across five others. Allowlist config and enforcement logic are both in the repo: &lt;a href="https://github.com/Opencomplai/opencomplai" rel="noopener noreferrer"&gt;github.com/Opencomplai/opencomplai&lt;/a&gt;, under &lt;code&gt;services/egress-proxy&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>security</category>
      <category>devops</category>
      <category>opensource</category>
      <category>networking</category>
    </item>
    <item>
      <title>I modeled EU AI Act compliance as a state machine, not a checkbox list</title>
      <dc:creator>Haytham</dc:creator>
      <pubDate>Mon, 05 Oct 2026 20:55:30 +0000</pubDate>
      <link>https://dev.to/ythouma/i-modeled-eu-ai-act-compliance-as-a-state-machine-not-a-checkbox-list-18hb</link>
      <guid>https://dev.to/ythouma/i-modeled-eu-ai-act-compliance-as-a-state-machine-not-a-checkbox-list-18hb</guid>
      <description>&lt;p&gt;Every EU AI Act control I track moves through the same five states. None of them is "done": &lt;code&gt;satisfied&lt;/code&gt;, &lt;code&gt;evidence_missing&lt;/code&gt;, &lt;code&gt;evidence_stale&lt;/code&gt;, &lt;code&gt;pending_review&lt;/code&gt;, &lt;code&gt;waived&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The third one is the state most compliance tooling skips. A control isn't just satisfied or not. The evidence behind it can expire.&lt;/p&gt;

&lt;p&gt;Opencomplai's control register attaches a freshness TTL to every piece of evidence backing a control. So a bias-testing result from eight months ago, against a model you have since retrained three times, doesn't silently keep counting as satisfied. It ages into &lt;code&gt;evidence_stale&lt;/code&gt; and shows up in &lt;code&gt;opencomplai controls status&lt;/code&gt; as something that needs a fresh run, not something to rediscover at next year's audit.&lt;/p&gt;

&lt;p&gt;It's cache invalidation, applied to legal evidence instead of application data. The hard part was never storing the value. It was knowing when the value you stored stopped being true.&lt;/p&gt;

&lt;p&gt;Each control maps to one specific article of the Act, has an owner, and moves through those five states on every CI run. "Are we still compliant" becomes a query against current state, not an annual archaeology project through old spreadsheets.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;waived&lt;/code&gt; exists on purpose. Sometimes a control genuinely doesn't apply to a system, and pretending otherwise is its own kind of lying.&lt;/p&gt;

&lt;p&gt;The full lifecycle, what triggers each transition and what "stale" means for different evidence types, is documented next to the code, not in a whitepaper: &lt;a href="https://github.com/Opencomplai/opencomplai" rel="noopener noreferrer"&gt;github.com/Opencomplai/opencomplai&lt;/a&gt;, see the Controls Lifecycle doc and &lt;code&gt;services/evidence-vault&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>opensource</category>
      <category>security</category>
      <category>architecture</category>
    </item>
    <item>
      <title>An immutable ledger for legal evidence, and a tool whose only job is proving it wasn't touched</title>
      <dc:creator>Haytham</dc:creator>
      <pubDate>Fri, 02 Oct 2026 12:01:23 +0000</pubDate>
      <link>https://dev.to/ythouma/an-immutable-ledger-for-legal-evidence-and-a-tool-whose-only-job-is-proving-it-wasnt-touched-459b</link>
      <guid>https://dev.to/ythouma/an-immutable-ledger-for-legal-evidence-and-a-tool-whose-only-job-is-proving-it-wasnt-touched-459b</guid>
      <description>&lt;p&gt;I built a tool to prove my own evidence store wasn't altered.&lt;/p&gt;

&lt;p&gt;Compliance evidence has a trust problem that nobody asks about until the wrong day. The question is simple: how do we know this audit log wasn't edited after the fact?&lt;/p&gt;

&lt;p&gt;Opencomplai's evidence-vault service stores every piece of compliance evidence, scan results, eval reports, sign-offs, as content-addressed immutable artifacts. An entry's address is a hash of its content. Change the content later and you get a different address, not a changed record. Same idea Git uses for objects, applied to legal evidence instead of source code.&lt;/p&gt;

&lt;p&gt;An immutable store is only as trustworthy as your ability to prove it is behaving like one. That's what &lt;code&gt;tools/verify-ledger&lt;/code&gt; is for. A standalone verifier. It walks the evidence chain and confirms nothing was tampered with, and it doesn't depend on the service that wrote it.&lt;/p&gt;

&lt;p&gt;You don't have to take my API's word for it. Run the verifier yourself against the raw ledger.&lt;/p&gt;

&lt;p&gt;This matters because most "audit trail" features in GRC products are an admin-editable table with a timestamp column. I've been on the security side of enough incidents to know what a timestamp is worth when someone with database access wants to reclassify a system after the fact. Nothing. A content-addressed chain with an independent verifier is worth something.&lt;/p&gt;

&lt;p&gt;If you're building anything where "prove this record hasn't been altered" is a real requirement, compliance or not, read how the chain and verifier are structured: &lt;a href="https://github.com/Opencomplai/opencomplai" rel="noopener noreferrer"&gt;github.com/Opencomplai/opencomplai&lt;/a&gt;, under &lt;code&gt;services/evidence-vault&lt;/code&gt; and &lt;code&gt;tools/verify-ledger&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>security</category>
      <category>opensource</category>
      <category>cryptography</category>
      <category>devops</category>
    </item>
    <item>
      <title>I made my compliance tool fail the build rather than lie in the audit report</title>
      <dc:creator>Haytham</dc:creator>
      <pubDate>Wed, 30 Sep 2026 07:24:46 +0000</pubDate>
      <link>https://dev.to/ythouma/i-made-my-compliance-tool-fail-the-build-rather-than-lie-in-the-audit-report-2i84</link>
      <guid>https://dev.to/ythouma/i-made-my-compliance-tool-fail-the-build-rather-than-lie-in-the-audit-report-2i84</guid>
      <description>&lt;p&gt;I built my compliance tool to fail the build, and I did it on purpose. Most audit-evidence tooling has one job: make the report look complete. Mine does the opposite.&lt;/p&gt;

&lt;p&gt;Opencomplai's Annex IV dossier generator (&lt;code&gt;opencomplai docs generate&lt;/code&gt;) builds the package you would hand an auditor. System description. Risk classification. Evidence attachments.&lt;/p&gt;

&lt;p&gt;Every field in that dossier comes from exactly one of three places: something automated from your manifest and risk classification, real evidence wired in from an actual scan or eval report, or an explicit placeholder that says a human hasn't provided this yet.&lt;/p&gt;

&lt;p&gt;There is no fourth place. The generator never fills a gap with boilerplate so the PDF looks finished.&lt;/p&gt;

&lt;p&gt;Here's the part that costs me adoption. If your system is classified HIGH-risk and the dossier still has a placeholder in a required field, the release gate fails.&lt;/p&gt;

&lt;p&gt;Not flags. Fails. The tool that is supposed to prove you are compliant will block your deploy rather than hand you a complete-looking dossier that isn't.&lt;/p&gt;

&lt;p&gt;I know what that does to my numbers. A tool that gates your release on missing evidence is a harder sell than one that always prints a green checkmark. It's not a great pitch. I decided I could live with that.&lt;/p&gt;

&lt;p&gt;I spent fourteen years watching systems fail. The ones that failed worst were the ones whose reports said everything was fine. A compliance report that can't tell "we checked" from "we didn't get around to it" isn't worth generating.&lt;/p&gt;

&lt;p&gt;If you've used GRC tooling that treats "the field has text in it" as "the control is satisfied", compare it against how this release gate actually reads dossier state before it decides pass or fail. It isn't behind a paywall, it's in &lt;code&gt;services/doc-generator&lt;/code&gt;: &lt;a href="https://github.com/Opencomplai/opencomplai" rel="noopener noreferrer"&gt;github.com/Opencomplai/opencomplai&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>security</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>No LLM is allowed near my compliance decisions, and CI enforces it</title>
      <dc:creator>Haytham</dc:creator>
      <pubDate>Thu, 24 Sep 2026 13:53:00 +0000</pubDate>
      <link>https://dev.to/ythouma/no-llm-is-allowed-near-my-compliance-decisions-and-ci-enforces-it-59ok</link>
      <guid>https://dev.to/ythouma/no-llm-is-allowed-near-my-compliance-decisions-and-ci-enforces-it-59ok</guid>
      <description>&lt;p&gt;I decided no LLM would go near my compliance decisions.&lt;/p&gt;

&lt;p&gt;If a tool decides whether your AI system is legal to ship, the last thing I want deciding that is another model nobody can explain.&lt;/p&gt;

&lt;p&gt;Opencomplai's rule engine (&lt;code&gt;packages/core&lt;/code&gt;) and CLI are fully deterministic. No LLM. No ML inference. Not anywhere in the compliance decision path.&lt;/p&gt;

&lt;p&gt;That's a design constraint, not a line for the landing page, and I don't just assert it. CI enforces it. Every &lt;code&gt;pyproject.toml&lt;/code&gt;, &lt;code&gt;package.json&lt;/code&gt; and &lt;code&gt;requirements*.txt&lt;/code&gt; in the repo is scanned for unapproved AI/LLM packages on every PR, with excludes for tests, examples and fixtures so a demo notebook doesn't fail the build.&lt;/p&gt;

&lt;p&gt;Add a &lt;code&gt;transformers&lt;/code&gt; import to the risk engine without going through approval and the build breaks before it merges.&lt;/p&gt;

&lt;p&gt;There is an ML path. &lt;code&gt;packages/ai&lt;/code&gt; is an optional plugin with an ONNX/transformers intent classifier, plus an even more optional &lt;code&gt;[deep]&lt;/code&gt; extra for local GGUF models via llama-cpp-python. It's opt-in, sandboxed to its own package, and it never touches the pass/fail decision. It classifies free-text system descriptions. It doesn't decide whether Article 5 applies to you.&lt;/p&gt;

&lt;p&gt;I use AI every day. Last month I ran a workflow with more than 200 agents for more than 75 hours. So this isn't fear of the tool.&lt;/p&gt;

&lt;p&gt;What I'm afraid of is an audit trail that says "the model decided this was compliant." That's not an audit trail. That's a liability with extra steps.&lt;/p&gt;

&lt;p&gt;A regulator, or your own legal team, needs to trace why a system got classified high-risk down to a specific readable rule, not a probability distribution.&lt;/p&gt;

&lt;p&gt;The scanner and the full inventory are in the repo if you want to see exactly what is allow-listed and why: &lt;a href="https://github.com/Opencomplai/opencomplai" rel="noopener noreferrer"&gt;github.com/Opencomplai/opencomplai&lt;/a&gt;, &lt;code&gt;docs/security/ai-inventory.md&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>security</category>
      <category>opensource</category>
    </item>
    <item>
      <title>What actually broke when I open-sourced my own compliance engine</title>
      <dc:creator>Haytham</dc:creator>
      <pubDate>Mon, 21 Sep 2026 17:39:44 +0000</pubDate>
      <link>https://dev.to/ythouma/what-actually-broke-when-i-open-sourced-my-own-compliance-engine-129c</link>
      <guid>https://dev.to/ythouma/what-actually-broke-when-i-open-sourced-my-own-compliance-engine-129c</guid>
      <description>&lt;p&gt;I assumed projecting my private monorepo down to a public repo was a solved problem. It wasn't, and the failures were more interesting than the feature I was shipping that week.&lt;/p&gt;

&lt;p&gt;OpenComplAI's Enterprise and Community editions live in related codebases. Every release means projecting the enterprise repo down into the public one. Strip internal packages, regenerate lockfiles, publish clean.&lt;/p&gt;

&lt;p&gt;First. Stripping a private directory out of the public projection doesn't strip it from &lt;code&gt;pnpm-lock.yaml&lt;/code&gt; or the workspace manifest. The lockfile still listed the private package by name, full dependency graph included, in a repo that was supposed to contain none of it. Deleting a folder isn't the same as regenerating everything that referenced it.&lt;/p&gt;

&lt;p&gt;Second. My &lt;code&gt;assemble.sh&lt;/code&gt; script, built to prune the enterprise-only bits, was aggressive enough to delete the public repo's own &lt;code&gt;.github/&lt;/code&gt; directory on a re-run. CI workflows and issue templates went with it. A prune script that can't tell "generated cruft" from "the thing that makes this repo work" will eventually delete something you needed.&lt;/p&gt;

&lt;p&gt;I also shipped a &lt;code&gt;package-lock.json&lt;/code&gt; that leaked the enterprise package's internal name before review caught it, and ended up with orphaned badge SVGs pointing at workflows that no longer existed after the prune.&lt;/p&gt;

&lt;p&gt;None of these are exotic. They are what happens when "copy files, remove the private parts" is treated as a file-deletion problem instead of a full re-projection-and-verify one. Prune and regenerate, then gate on a verification pass. Not the other way around.&lt;/p&gt;

&lt;p&gt;That's the lesson, and it took me too long to see: the script that builds something can't be the one that certifies it.&lt;/p&gt;

&lt;p&gt;I added that verification pass after this round. &lt;code&gt;sync/doctor.py&lt;/code&gt; and &lt;code&gt;verify-sbom.sh&lt;/code&gt; check the projected repo's actual state. Both are in the repo if you want to see what I now consider the minimum for this kind of pipeline: &lt;a href="https://github.com/opencomplai/opencomplai" rel="noopener noreferrer"&gt;github.com/opencomplai/opencomplai&lt;/a&gt;, under &lt;code&gt;sync/&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>devops</category>
      <category>security</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Your hiring AI is either high-risk, or already illegal!</title>
      <dc:creator>Haytham</dc:creator>
      <pubDate>Tue, 15 Sep 2026 17:41:38 +0000</pubDate>
      <link>https://dev.to/ythouma/your-hiring-ai-is-either-high-risk-or-already-illegal-2ekh</link>
      <guid>https://dev.to/ythouma/your-hiring-ai-is-either-high-risk-or-already-illegal-2ekh</guid>
      <description>&lt;p&gt;If your recruitment AI scores a candidate's "enthusiasm" from their interview video, that's not a 2027 compliance problem. It's already illegal, and has been since February 2025.&lt;/p&gt;

&lt;p&gt;Most HR tech content lumps every AI hiring feature into one "get ready for the EU AI Act" bucket. In reality, there are two very different buckets, with two very different deadlines:&lt;/p&gt;

&lt;h2&gt;
  
  
  HIGH-RISK (Annex III(4)(a)) — Full obligations enforceable 2 December 2027
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CV and resume screening that ranks or filters applicants&lt;/li&gt;
&lt;li&gt;Video-interview platforms that score responses or delivery&lt;/li&gt;
&lt;li&gt;Psychometric and skills assessments feeding a hiring decision&lt;/li&gt;
&lt;li&gt;Sourcing and matching algorithms deciding who a recruiter even sees&lt;/li&gt;
&lt;li&gt;Programmatic job-ad targeting that decides who sees a role at all&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Required: documented risk assessment, technical documentation, bias testing, human oversight, disclosure to candidates, and an audit trail. Fines for failing these run up to €15M or 3% of global turnover.&lt;/p&gt;

&lt;h2&gt;
  
  
  PROHIBITED (Article 5) — Came into force since 2 February 2025
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Inferring a candidate's emotions from facial expression, voice tone, or body language (Article 5(1)(f)) — the EU AI Office's guidance explicitly extends "workplace" to the recruitment and interview stage&lt;/li&gt;
&lt;li&gt;Inferring personality traits from social media or non-work behaviour to filter candidates (Article 5(1)(c))&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's no phase-in, no grace period, no documentation that makes this compliant. Fines run up to &lt;strong&gt;€35M or 7% of global turnover&lt;/strong&gt;. So if your ATS or interview platform has a "culture fit" or "engagement" score built on facial or voice analysis, it needs to come out, not get documented.&lt;/p&gt;

&lt;p&gt;Here's the part that actually matters for engineering teams building HR Tech: the difference between these two buckets often comes down to a single feature flag or a single import. The exact same candidate scoring codebase can be high-risk today and prohibited tomorrow, depending on what a new PR adds — and that's not something a compliance team reviewing quarterly is going to catch in time.&lt;/p&gt;

&lt;p&gt;That's the gap we built OpenComplAI to close: EU AI Act checks that run in your CI, on every commit, not a policy review that happens after the feature has already shipped. The same detection model that flags an unrecognised biometric import in a codebase applies the same way to an emotion-inference library landing in a candidate-scoring pipeline — caught before merge, not discovered at audit time.&lt;/p&gt;

&lt;p&gt;If you're building or buying AI hiring tools, it's worth an afternoon auditing your stack against these two lists specifically, not just "are we EU AI Act ready" in the abstract.&lt;/p&gt;

&lt;p&gt;OpenComplAI is free and open source, and still early enough that feedback from people actually working in HR tech shapes what we build next.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/opencomplai/opencomplai" rel="noopener noreferrer"&gt;https://github.com/opencomplai/opencomplai&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>compliance</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Treating EU AI Act Compliance as Code: A CI/CD Approach</title>
      <dc:creator>Haytham</dc:creator>
      <pubDate>Fri, 14 Aug 2026 09:38:26 +0000</pubDate>
      <link>https://dev.to/ythouma/treating-eu-ai-act-compliance-as-code-a-cicd-approach-22j0</link>
      <guid>https://dev.to/ythouma/treating-eu-ai-act-compliance-as-code-a-cicd-approach-22j0</guid>
      <description>&lt;p&gt;The EU AI Act's transparency obligations (Article 50) became enforceable on August 2, 2026. If you're shipping AI features into the EU, that's not a future date to plan around anymore, it's now.&lt;/p&gt;

&lt;p&gt;Most teams still handle this the way we handled security compliance in 2015: a spreadsheet, a legal review, and a PDF nobody opens again until the next audit. That doesn't scale, and it doesn't fit how software actually gets built and shipped continuously.&lt;/p&gt;

&lt;h2&gt;
  
  
  What if compliance was a build step, not a document?
&lt;/h2&gt;

&lt;p&gt;That's the idea behind &lt;a href="https://github.com/opencomplai/opencomplai" rel="noopener noreferrer"&gt;OpenComplAI&lt;/a&gt;, an open-source project I've been building: EU AI Act risk classification and compliance checks that run in your pipeline, the same way you'd run a security scanner or a linter.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;The core is a deterministic, rule-based risk engine, no ML inference involved in the compliance decision itself (the dependency list is scanned in CI specifically to enforce that). It's Python underneath (Pydantic v2 for the data models, Typer/Rich for the CLI), with a small set of services behind it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a Gateway API (Node/TypeScript) for request routing&lt;/li&gt;
&lt;li&gt;a Risk Engine that runs the classification logic&lt;/li&gt;
&lt;li&gt;an Evidence Vault for immutable, content-addressed audit trails&lt;/li&gt;
&lt;li&gt;a Doc Generator that produces Annex IV-format compliance dossiers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quickstart
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;opencomplai
opencomplai init &lt;span class="nt"&gt;--system-id&lt;/span&gt; my-model &lt;span class="nt"&gt;--intended-purpose&lt;/span&gt; &lt;span class="s2"&gt;"customer support chatbot"&lt;/span&gt;
opencomplai check
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There's also a zero-setup discovery mode that never fails your build, useful for figuring out where you stand before you gate anything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;opencomplai scan &lt;span class="nt"&gt;--quick&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And a pre-commit hook if you want the check earlier than CI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;repo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/opencomplai/opencomplai&lt;/span&gt;
  &lt;span class="na"&gt;rev&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v0.1.2&lt;/span&gt;
  &lt;span class="na"&gt;hooks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;opencomplai-quick-scan&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What it actually checks
&lt;/h2&gt;

&lt;p&gt;The interactive checker (&lt;code&gt;opencomplai checker --web&lt;/code&gt;, or &lt;code&gt;--local&lt;/code&gt; for a fully offline version) walks through whether the Act applies to your system at all, and if so, whether you're a provider or a deployer, since the obligations differ substantially. From there it handles risk-tier classification (including general-purpose AI model considerations) and generates the evidence trail you'd actually need to hand to an auditor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it stands
&lt;/h2&gt;

&lt;p&gt;It's early. Community edition is AGPL-3.0; there's a commercial tier in the works for teams that want a hosted dashboard, SSO, and additional rule engines, but the core compliance engine is fully open.&lt;/p&gt;

&lt;p&gt;I'd genuinely value feedback from anyone who has done EU AI Act conformity work manually: what parts of that process actually generalize into rules, and what still needs a human in the loop? Issues, PRs, and just general "here's what we ran into" reports are all welcome.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/opencomplai/opencomplai" rel="noopener noreferrer"&gt;https://github.com/opencomplai/opencomplai&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>compliance</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
