<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>BOMHort on BOMHort Documentation</title><link>https://docs.bomhort.dev/</link><description>Recent content in BOMHort on BOMHort Documentation</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://docs.bomhort.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Testing</title><link>https://docs.bomhort.dev/docs/development/testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.bomhort.dev/docs/development/testing/</guid><description>&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Run all tests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd backend &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; go test ./... -count&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Run with verbose output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go test ./... -v -count&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Run tests for a specific package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go test ./internal/vex/ -v -count&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Run a single test by name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go test ./internal/vex/ -run TestNormalizeVulnID -v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Run with race detection (used in CI)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go test ./... -count&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; -race
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Check coverage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go test ./... -coverprofile&lt;span style="color:#f92672"&gt;=&lt;/span&gt;coverage.out
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go tool cover -html&lt;span style="color:#f92672"&gt;=&lt;/span&gt;coverage.out
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="test-structure"&gt;Test Structure&lt;/h2&gt;
&lt;p&gt;Tests live next to the code they test, using Go&amp;rsquo;s &lt;code&gt;_test.go&lt;/code&gt; convention:&lt;/p&gt;</description></item><item><title>Why we renamed SeeBOM to BOMHort</title><link>https://docs.bomhort.dev/docs/getting-started/rename/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.bomhort.dev/docs/getting-started/rename/</guid><description>&lt;h2 id="what-changed"&gt;What changed&lt;/h2&gt;
&lt;p&gt;The project name is now &lt;strong&gt;BOMHort&lt;/strong&gt; (formerly known as &lt;strong&gt;SeeBOM&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;The rename only affects branding and repository naming. The mission and technical direction stay the same: Kubernetes-native SBOM ingestion, enrichment, visualization, and governance.&lt;/p&gt;
&lt;h2 id="why-we-renamed"&gt;Why we renamed&lt;/h2&gt;
&lt;p&gt;The name &lt;strong&gt;SeeBOM&lt;/strong&gt; served us well, but it created confusion: spoken out loud, it sounds very similar to &lt;strong&gt;CBOM&lt;/strong&gt; (Cryptography Bill of Materials).&lt;/p&gt;
&lt;p&gt;In the xBOM ecosystem, names like CBOM usually refer to &lt;strong&gt;BOM document types&lt;/strong&gt;, not to tools. Ahead of OpenSSF sandbox intake, we wanted a project name that is clearly identifiable as a platform.&lt;/p&gt;</description></item><item><title>Contributor Ladder</title><link>https://docs.bomhort.dev/docs/development/contributor-ladder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.bomhort.dev/docs/development/contributor-ladder/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;BOMHort uses a transparent contributor ladder inspired by the &lt;a href="https://github.com/cncf/project-template/blob/main/CONTRIBUTOR_LADDER.md"&gt;CNCF contributor ladder template&lt;/a&gt;. Each rung provides clear expectations and privileges, so you always know what the next step looks like.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;┌─────────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ Maintainer — merge, release, direction │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├─────────────────────────────────────────────┤
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ Reviewer — approve PRs in their area │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├─────────────────────────────────────────────┤
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ Contributor — regular code/docs/tests │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├─────────────────────────────────────────────┤
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ Community — issues, discussions, usage │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└─────────────────────────────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="-community-member"&gt;🌱 Community Member&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Who:&lt;/strong&gt; Anyone who uses BOMHort, files issues, or participates in discussions.&lt;/p&gt;</description></item><item><title>SBOM Parsers</title><link>https://docs.bomhort.dev/docs/development/parsers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.bomhort.dev/docs/development/parsers/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;BOMHort supports multiple SBOM formats through a &lt;strong&gt;format-detection dispatch layer&lt;/strong&gt; at &lt;code&gt;internal/sbom/parse.go&lt;/code&gt;. When a file is processed, the dispatcher:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Reads the raw bytes&lt;/li&gt;
&lt;li&gt;Probes JSON fields to identify the format&lt;/li&gt;
&lt;li&gt;Routes to the appropriate parser backend&lt;/li&gt;
&lt;li&gt;Returns a unified &lt;code&gt;ParseResult&lt;/code&gt; (SBOM metadata + packages)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This happens transparently — the parsing worker simply calls &lt;code&gt;sbom.Parse(reader, sourceFile, hash)&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="supported-formats"&gt;Supported Formats&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Format&lt;/th&gt;
 &lt;th&gt;File Extension&lt;/th&gt;
 &lt;th&gt;Detection Method&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;SPDX 2.3 JSON&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.spdx.json&lt;/code&gt;, &lt;code&gt;.json&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;spdxVersion&amp;quot;&lt;/code&gt; field present&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;In-toto attestation (SPDX)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.spdx.json&lt;/code&gt;, &lt;code&gt;.json&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;predicateType&amp;quot;&lt;/code&gt; contains &amp;ldquo;spdx&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CycloneDX 1.0–1.7 JSON&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.cdx.json&lt;/code&gt;, &lt;code&gt;.json&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;bomFormat&amp;quot;: &amp;quot;CycloneDX&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="parser-backends"&gt;Parser Backends&lt;/h2&gt;
&lt;h3 id="built-in-default"&gt;Built-in (Default)&lt;/h3&gt;
&lt;p&gt;The default parsers use &lt;code&gt;goccy/go-json&lt;/code&gt; for high-performance streaming and add &lt;strong&gt;zero additional dependencies&lt;/strong&gt; beyond what BOMHort already requires.&lt;/p&gt;</description></item><item><title>AI Usage Policy</title><link>https://docs.bomhort.dev/docs/development/ai-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.bomhort.dev/docs/development/ai-policy/</guid><description>&lt;h2 id="policy"&gt;Policy&lt;/h2&gt;
&lt;p&gt;BOMHort &lt;strong&gt;welcomes AI-assisted contributions&lt;/strong&gt;. We use AI tools extensively in our own development workflow (see &lt;a href="https://github.com/seebom-labs/BOMHort/blob/main/AGENTS.md"&gt;AGENTS.md&lt;/a&gt;). However, we have clear rules to ensure accountability and code quality.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="rules"&gt;Rules&lt;/h2&gt;
&lt;h3 id="1-you-own-it"&gt;1. You own it&lt;/h3&gt;
&lt;p&gt;If you use AI to generate code, &lt;strong&gt;you are responsible&lt;/strong&gt; for that code. Review it, test it, and understand it before submitting. &amp;ldquo;The AI wrote it&amp;rdquo; is not an excuse for bugs, security issues, or convention violations.&lt;/p&gt;
&lt;h3 id="2-sign-your-commits"&gt;2. Sign your commits&lt;/h3&gt;
&lt;p&gt;Every commit must carry your DCO sign-off (&lt;code&gt;Signed-off-by: Your Name &amp;lt;your@email.com&amp;gt;&lt;/code&gt;). This is &lt;strong&gt;non-negotiable&lt;/strong&gt; — it certifies that &lt;em&gt;you&lt;/em&gt; are the author and take responsibility, regardless of whether AI assisted you.&lt;/p&gt;</description></item></channel></rss>