<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Adr on ComplyTime</title><link>https://complytime.dev/docs/projects/complypack/adr/</link><description>Recent content in Adr on ComplyTime</description><generator>Hugo</generator><language>en-US</language><copyright>Copyright (c) 2024-2025 ComplyTime</copyright><lastBuildDate>Fri, 21 Aug 2026 09:48:50 +0000</lastBuildDate><atom:link href="https://complytime.dev/docs/projects/complypack/adr/index.xml" rel="self" type="application/rss+xml"/><item><title>001 Mcp As CLI Subcommand</title><link>https://complytime.dev/docs/projects/complypack/adr/001-mcp-as-cli-subcommand/</link><pubDate>Fri, 21 Aug 2026 09:48:50 +0000</pubDate><guid>https://complytime.dev/docs/projects/complypack/adr/001-mcp-as-cli-subcommand/</guid><description>&lt;!-- synced from complytime/complypack/docs/adr/001-mcp-as-cli-subcommand.md@main (dcce6fa149e6) --&gt;
&lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; 2026-05-30&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; Accepted&lt;br&gt;
&lt;strong&gt;Deciders:&lt;/strong&gt; Jennifer Power&lt;/p&gt;
&lt;h3 id="context"&gt;Context&lt;a class="anchor" href="#context" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;We need to implement an MCP server for complypack to enable LLM-assisted policy generation. The question is whether to create a standalone binary (like &lt;code&gt;gemara-mcp&lt;/code&gt;) or integrate it as a subcommand of the existing &lt;code&gt;complypack&lt;/code&gt; CLI.&lt;/p&gt;</description></item><item><title>002 Cue As Schema Source</title><link>https://complytime.dev/docs/projects/complypack/adr/002-cue-as-schema-source/</link><pubDate>Fri, 21 Aug 2026 09:48:50 +0000</pubDate><guid>https://complytime.dev/docs/projects/complypack/adr/002-cue-as-schema-source/</guid><description>&lt;!-- synced from complytime/complypack/docs/adr/002-cue-as-schema-source.md@main (9bb1064f1bef) --&gt;
&lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; 2026-05-30&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; Accepted&lt;br&gt;
&lt;strong&gt;Deciders:&lt;/strong&gt; Jennifer Power&lt;/p&gt;
&lt;h3 id="context"&gt;Context&lt;a class="anchor" href="#context" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Platform input schemas define the structure of data that policies evaluate (Kubernetes manifests, Terraform plans, etc.). We need to decide what format to use as the source of truth and what format to expose to LLMs via the MCP server.&lt;/p&gt;</description></item><item><title>003 Extensible Platform Schemas</title><link>https://complytime.dev/docs/projects/complypack/adr/003-extensible-platform-schemas/</link><pubDate>Fri, 21 Aug 2026 09:48:50 +0000</pubDate><guid>https://complytime.dev/docs/projects/complypack/adr/003-extensible-platform-schemas/</guid><description>&lt;!-- synced from complytime/complypack/docs/adr/003-extensible-platform-schemas.md@main (86f0fbec0d4a) --&gt;
&lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; 2026-05-30&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; Superseded by 

&lt;a class="link link--text" href="https://github.com/complytime/complypack/blob/main/docs/adr/017-schema-index.md" rel="external"&gt;ADR 017&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Deciders:&lt;/strong&gt; Jennifer Power&lt;/p&gt;
&lt;h3 id="context"&gt;Context&lt;a class="anchor" href="#context" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;The initial design hardcoded support for five platforms (kubernetes, terraform, docker, ansible, ci). This is too restrictive - users may need to generate policies for custom platforms or infrastructure not covered by the built-ins.&lt;/p&gt;</description></item><item><title>004 Fail Fast Server Startup</title><link>https://complytime.dev/docs/projects/complypack/adr/004-fail-fast-server-startup/</link><pubDate>Fri, 21 Aug 2026 09:48:50 +0000</pubDate><guid>https://complytime.dev/docs/projects/complypack/adr/004-fail-fast-server-startup/</guid><description>&lt;!-- synced from complytime/complypack/docs/adr/004-fail-fast-server-startup.md@main (aebd07a57a04) --&gt;
&lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; 2026-05-30&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; Accepted&lt;br&gt;
&lt;strong&gt;Deciders:&lt;/strong&gt; Jennifer Power&lt;/p&gt;
&lt;h3 id="context"&gt;Context&lt;a class="anchor" href="#context" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;The MCP server needs to pull catalogs from OCI registries, load schemas, and validate configuration at startup. We need to decide how to handle errors during this initialization phase.&lt;/p&gt;</description></item><item><title>005 Evaluator Interface Pattern</title><link>https://complytime.dev/docs/projects/complypack/adr/005-evaluator-interface-pattern/</link><pubDate>Fri, 21 Aug 2026 09:48:50 +0000</pubDate><guid>https://complytime.dev/docs/projects/complypack/adr/005-evaluator-interface-pattern/</guid><description>&lt;!-- synced from complytime/complypack/docs/adr/005-evaluator-interface-pattern.md@main (b69936b018d5) --&gt;
&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Accepted&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; 2026-06-01&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ComplyPack needs to validate, test, and package policies across multiple policy languages (OPA Rego, CEL, Kyverno, etc.). Hard-coding OPA-specific logic throughout the codebase would:&lt;/p&gt;</description></item><item><title>006 Cue Schema Contract Validation</title><link>https://complytime.dev/docs/projects/complypack/adr/006-cue-schema-contract-validation/</link><pubDate>Fri, 21 Aug 2026 09:48:50 +0000</pubDate><guid>https://complytime.dev/docs/projects/complypack/adr/006-cue-schema-contract-validation/</guid><description>&lt;!-- synced from complytime/complypack/docs/adr/006-cue-schema-contract-validation.md@main (61706ef7ece0) --&gt;
&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Accepted&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; 2026-06-01&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rego policies reference &lt;code&gt;input.*&lt;/code&gt; paths (e.g., &lt;code&gt;input.metadata.name&lt;/code&gt;, &lt;code&gt;input.spec.containers[*].image&lt;/code&gt;) based on the structure of resources they evaluate. If a policy references &lt;code&gt;input.nonexistent.field&lt;/code&gt; for a platform that doesn&amp;rsquo;t have that field, the policy:&lt;/p&gt;</description></item><item><title>007 Opa SDK In Process</title><link>https://complytime.dev/docs/projects/complypack/adr/007-opa-sdk-in-process/</link><pubDate>Fri, 21 Aug 2026 09:48:50 +0000</pubDate><guid>https://complytime.dev/docs/projects/complypack/adr/007-opa-sdk-in-process/</guid><description>&lt;!-- synced from complytime/complypack/docs/adr/007-opa-sdk-in-process.md@main (d130f484e67f) --&gt;
&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Accepted&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; 2026-06-01&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ComplyPack needs to validate, test, and evaluate OPA Rego policies. There are two architectural approaches:&lt;/p&gt;</description></item><item><title>008 Pack Validation Gates</title><link>https://complytime.dev/docs/projects/complypack/adr/008-pack-validation-gates/</link><pubDate>Fri, 21 Aug 2026 09:48:50 +0000</pubDate><guid>https://complytime.dev/docs/projects/complypack/adr/008-pack-validation-gates/</guid><description>&lt;!-- synced from complytime/complypack/docs/adr/008-pack-validation-gates.md@main (1f0aa004a4b1) --&gt;
&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Accepted&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; 2026-06-03&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Two architectural issues required a combined fix:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pack shipped unvalidated content.&lt;/strong&gt; &lt;code&gt;complypack pack&lt;/code&gt; tarballed policy content and pushed to an OCI registry with zero quality checks. Broken Rego, invalid schema references, and failing tests all got published. For a compliance tool, this undermines trust in the artifact.&lt;/p&gt;</description></item><item><title>009 Definition Fragment Syntax</title><link>https://complytime.dev/docs/projects/complypack/adr/009-definition-fragment-syntax/</link><pubDate>Fri, 21 Aug 2026 09:48:50 +0000</pubDate><guid>https://complytime.dev/docs/projects/complypack/adr/009-definition-fragment-syntax/</guid><description>&lt;!-- synced from complytime/complypack/docs/adr/009-definition-fragment-syntax.md@main (1b48ddfe6a89) --&gt;
&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Accepted&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; 2026-06-03&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CUE registry modules (e.g., &lt;code&gt;cue.dev/x/githubactions@v0&lt;/code&gt;) expose definitions (&lt;code&gt;#Workflow&lt;/code&gt;, &lt;code&gt;#Job&lt;/code&gt;) at the top level rather than regular fields. The contract validator receives a &lt;code&gt;cue.Value&lt;/code&gt; with no traversable fields, causing all &lt;code&gt;input.*&lt;/code&gt; paths to fail validation.&lt;/p&gt;</description></item><item><title>010 Lookuppath Traversal</title><link>https://complytime.dev/docs/projects/complypack/adr/010-lookuppath-traversal/</link><pubDate>Fri, 21 Aug 2026 09:48:50 +0000</pubDate><guid>https://complytime.dev/docs/projects/complypack/adr/010-lookuppath-traversal/</guid><description>&lt;!-- synced from complytime/complypack/docs/adr/010-lookuppath-traversal.md@main (41246f1e795c) --&gt;
&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Superseded by 

&lt;a class="link link--text" href="https://github.com/complytime/complypack/blob/main/docs/adr/016-allows-based-schema-traversal.md" rel="external"&gt;ADR 016&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; 2026-06-03&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The contract validator&amp;rsquo;s &lt;code&gt;pathExistsInSchema&lt;/code&gt; function uses &lt;code&gt;Fields(cue.All())&lt;/code&gt; to iterate fields and match path segments by label. This approach has three blind spots:&lt;/p&gt;</description></item></channel></rss>