Skip to content

Instantly share code, notes, and snippets.

@daniel-sc
Created August 27, 2026 12:02
Show Gist options
  • Select an option

  • Save daniel-sc/749fdb19460e6d78fb13281ded3bacf9 to your computer and use it in GitHub Desktop.

Select an option

Save daniel-sc/749fdb19460e6d78fb13281ded3bacf9 to your computer and use it in GitHub Desktop.
ContextVeil repository simplification report
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="A deep simplification analysis of the ContextVeil repository, with concrete scope, code, requirements, testing, and documentation recommendations.">
<link rel="icon" href="data:,">
<title>ContextVeil: A Leaner Path to V1</title>
<style>
:root {
--ink: #18201d;
--paper: #f3f0e8;
--paper-2: #e8e3d7;
--night: #101715;
--night-2: #18211e;
--night-3: #202c28;
--acid: #c8f560;
--coral: #ff7557;
--sky: #78c9dd;
--gold: #e6bd55;
--muted: #6c7772;
--muted-light: #aeb9b3;
--line: rgba(24, 32, 29, 0.16);
--line-dark: rgba(255, 255, 255, 0.12);
--radius: 18px;
--shadow: 0 22px 60px rgba(16, 23, 21, 0.14);
}
* { box-sizing: border-box; }
html {
scroll-behavior: smooth;
background: var(--night);
}
body {
margin: 0;
color: var(--ink);
background:
radial-gradient(circle at 18% 4%, rgba(200, 245, 96, 0.09), transparent 26rem),
var(--paper);
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 17px;
line-height: 1.62;
text-rendering: optimizeLegibility;
}
a {
color: inherit;
text-decoration-color: var(--coral);
text-decoration-thickness: 2px;
text-underline-offset: 3px;
}
a:hover { color: #b93820; }
code {
padding: 0.12rem 0.34rem;
border: 1px solid rgba(24, 32, 29, 0.13);
border-radius: 5px;
background: rgba(255, 255, 255, 0.45);
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
font-size: 0.86em;
}
.shell {
width: min(1180px, calc(100% - 40px));
margin: 0 auto;
}
.eyebrow {
margin: 0 0 0.7rem;
color: var(--coral);
font-family: "SFMono-Regular", Consolas, monospace;
font-size: 0.78rem;
font-weight: 800;
letter-spacing: 0.14em;
text-transform: uppercase;
}
.topbar {
position: sticky;
z-index: 20;
top: 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
background: rgba(16, 23, 21, 0.92);
color: #f8f6ef;
backdrop-filter: blur(14px);
}
.topbar .shell {
display: flex;
min-height: 58px;
align-items: center;
justify-content: space-between;
gap: 20px;
}
.brand {
display: flex;
align-items: center;
gap: 11px;
font-weight: 800;
letter-spacing: -0.02em;
}
.brand-mark {
display: grid;
width: 28px;
height: 28px;
place-items: center;
border: 1px solid var(--acid);
border-radius: 50%;
color: var(--acid);
font-family: Georgia, serif;
font-size: 18px;
}
nav {
display: flex;
gap: 20px;
font-size: 0.82rem;
font-weight: 700;
}
nav a {
color: var(--muted-light);
text-decoration: none;
}
nav a:hover { color: var(--acid); }
.hero {
overflow: hidden;
padding: 94px 0 84px;
background:
linear-gradient(90deg, transparent 49.9%, rgba(255, 255, 255, 0.055) 50%, transparent 50.1%),
var(--night);
color: #f6f4ed;
}
.hero-grid {
display: grid;
grid-template-columns: minmax(0, 1.45fr) minmax(300px, 0.75fr);
gap: 70px;
align-items: end;
}
h1, h2, h3 {
margin-top: 0;
font-family: Georgia, "Times New Roman", serif;
font-weight: 500;
letter-spacing: -0.045em;
line-height: 1.02;
}
h1 {
max-width: 840px;
margin-bottom: 26px;
font-size: clamp(3.6rem, 8vw, 7.8rem);
}
h1 em {
color: var(--acid);
font-weight: 500;
}
.hero-lead {
max-width: 760px;
margin: 0;
color: #c9d1cd;
font-size: clamp(1.15rem, 2.2vw, 1.52rem);
line-height: 1.48;
}
.verdict {
position: relative;
padding: 31px;
border: 1px solid rgba(200, 245, 96, 0.42);
border-radius: var(--radius);
background: linear-gradient(145deg, rgba(200, 245, 96, 0.12), rgba(255, 255, 255, 0.035));
box-shadow: 0 24px 70px rgba(0, 0, 0, 0.27);
}
.verdict::before {
position: absolute;
top: -8px;
right: 28px;
width: 15px;
height: 15px;
border-radius: 50%;
background: var(--acid);
box-shadow: 0 0 26px rgba(200, 245, 96, 0.75);
content: "";
}
.verdict strong {
display: block;
margin-bottom: 12px;
color: var(--acid);
font-family: "SFMono-Regular", Consolas, monospace;
font-size: 0.78rem;
letter-spacing: 0.13em;
text-transform: uppercase;
}
.verdict p {
margin: 0;
font-family: Georgia, serif;
font-size: 1.65rem;
line-height: 1.22;
}
.snapshot {
padding: 17px 0;
border-bottom: 1px solid var(--line);
background: var(--paper-2);
}
.snapshot .shell {
display: flex;
flex-wrap: wrap;
gap: 10px 30px;
color: #53605a;
font-family: "SFMono-Regular", Consolas, monospace;
font-size: 0.79rem;
}
main section { padding: 98px 0; }
.section-head {
display: grid;
grid-template-columns: minmax(220px, 0.55fr) minmax(0, 1.45fr);
gap: 55px;
margin-bottom: 48px;
align-items: start;
}
.section-head h2 {
margin-bottom: 0;
font-size: clamp(2.65rem, 5vw, 5rem);
}
.section-head .intro {
max-width: 700px;
margin: 0;
color: #53605a;
font-size: 1.14rem;
}
.stats {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 14px;
margin: 0 0 58px;
}
.stat {
min-height: 168px;
padding: 24px;
border: 1px solid var(--line);
border-radius: 14px;
background: rgba(255, 255, 255, 0.35);
}
.stat-value {
display: block;
margin-bottom: 11px;
color: var(--ink);
font-family: Georgia, serif;
font-size: clamp(2.3rem, 4vw, 3.7rem);
letter-spacing: -0.055em;
line-height: 1;
}
.stat-label {
display: block;
color: var(--muted);
font-size: 0.82rem;
font-weight: 750;
letter-spacing: 0.08em;
line-height: 1.35;
text-transform: uppercase;
}
.diagram-card {
overflow: hidden;
padding: 28px;
border: 1px solid var(--line);
border-radius: var(--radius);
background: #faf8f2;
box-shadow: var(--shadow);
}
.diagram-card svg {
display: block;
width: 100%;
height: auto;
}
.diagram-caption {
display: flex;
justify-content: space-between;
gap: 25px;
margin-top: 20px;
padding-top: 18px;
border-top: 1px solid var(--line);
color: var(--muted);
font-size: 0.87rem;
}
.dark-section {
background: var(--night);
color: #f7f4ec;
}
.dark-section .section-head .intro { color: #b6c0ba; }
.dark-section .eyebrow { color: var(--acid); }
.bars {
display: grid;
gap: 17px;
padding: 34px;
border: 1px solid var(--line-dark);
border-radius: var(--radius);
background: var(--night-2);
}
.bar-row {
display: grid;
grid-template-columns: 195px minmax(0, 1fr) 95px;
gap: 18px;
align-items: center;
}
.bar-label {
color: #dfe5e1;
font-size: 0.88rem;
font-weight: 700;
}
.bar-track {
height: 24px;
overflow: hidden;
border-radius: 5px;
background: rgba(255, 255, 255, 0.07);
}
.bar-fill {
height: 100%;
border-radius: 5px;
background: linear-gradient(90deg, var(--coral), #f6b05f);
}
.bar-row.core .bar-fill { background: linear-gradient(90deg, var(--acid), #7fd999); }
.bar-value {
color: var(--muted-light);
font-family: "SFMono-Regular", Consolas, monospace;
font-size: 0.77rem;
text-align: right;
}
.finding-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 16px;
margin-top: 38px;
}
.finding {
padding: 26px;
border: 1px solid var(--line-dark);
border-radius: 14px;
background: var(--night-2);
}
.finding .index {
color: var(--coral);
font-family: Georgia, serif;
font-size: 2rem;
line-height: 1;
}
.finding h3 {
margin: 14px 0 10px;
font-size: 1.48rem;
letter-spacing: -0.025em;
}
.finding p {
margin: 0;
color: #aeb9b3;
font-size: 0.94rem;
}
.recommendations {
display: grid;
gap: 18px;
counter-reset: recommendation;
}
.recommendation {
display: grid;
grid-template-columns: 68px minmax(0, 1fr) 185px;
gap: 25px;
padding: 30px;
border: 1px solid var(--line);
border-radius: 16px;
background: rgba(255, 255, 255, 0.39);
counter-increment: recommendation;
}
.recommendation::before {
display: grid;
width: 54px;
height: 54px;
place-items: center;
border: 1px solid var(--ink);
border-radius: 50%;
content: counter(recommendation, decimal-leading-zero);
font-family: "SFMono-Regular", Consolas, monospace;
font-size: 0.84rem;
font-weight: 800;
}
.recommendation h3 {
margin: 1px 0 10px;
font-size: 1.65rem;
}
.recommendation p {
margin: 0;
color: #52605a;
font-size: 0.96rem;
}
.impact {
align-self: start;
padding: 13px 15px;
border-left: 3px solid var(--coral);
background: rgba(255, 117, 87, 0.08);
color: #6e3326;
font-family: "SFMono-Regular", Consolas, monospace;
font-size: 0.75rem;
line-height: 1.45;
text-transform: uppercase;
}
.impact.high {
border-color: #6e981d;
background: rgba(200, 245, 96, 0.2);
color: #33490a;
}
.architecture {
display: grid;
grid-template-columns: 1fr 70px 1fr;
gap: 18px;
align-items: stretch;
}
.architecture-panel {
padding: 28px;
border: 1px solid var(--line-dark);
border-radius: var(--radius);
background: var(--night-2);
}
.architecture-panel.target {
border-color: rgba(200, 245, 96, 0.42);
background: linear-gradient(145deg, rgba(200, 245, 96, 0.08), var(--night-2));
}
.architecture-panel h3 {
margin-bottom: 22px;
font-size: 2rem;
}
.layer {
margin: 9px 0;
padding: 12px 15px;
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 7px;
color: #cbd3cf;
background: rgba(255, 255, 255, 0.035);
font-size: 0.84rem;
font-weight: 700;
text-align: center;
}
.target .layer.core-layer {
border-color: var(--acid);
color: var(--acid);
}
.architecture-arrow {
display: grid;
place-items: center;
color: var(--acid);
font-family: Georgia, serif;
font-size: 3.7rem;
}
.option-table-wrap {
overflow-x: auto;
border: 1px solid var(--line);
border-radius: var(--radius);
background: rgba(255, 255, 255, 0.42);
box-shadow: var(--shadow);
}
table {
width: 100%;
border-collapse: collapse;
min-width: 750px;
}
th, td {
padding: 20px 22px;
border-bottom: 1px solid var(--line);
text-align: left;
vertical-align: top;
}
th {
background: var(--night);
color: #f5f2ea;
font-size: 0.74rem;
letter-spacing: 0.1em;
text-transform: uppercase;
}
td { font-size: 0.91rem; }
tr:last-child td { border-bottom: 0; }
tr.recommended td { background: rgba(200, 245, 96, 0.18); }
.badge {
display: inline-block;
margin-top: 7px;
padding: 3px 8px;
border-radius: 999px;
background: var(--acid);
color: #263608;
font-family: "SFMono-Regular", Consolas, monospace;
font-size: 0.66rem;
font-weight: 900;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.contract-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 16px;
}
.contract-card {
padding: 24px;
border: 1px solid var(--line);
border-radius: 14px;
background: #faf8f2;
}
.contract-card strong {
display: block;
margin-bottom: 8px;
color: #ad3c26;
font-family: "SFMono-Regular", Consolas, monospace;
font-size: 0.8rem;
letter-spacing: 0.06em;
}
.contract-card p {
margin: 0;
color: #56635d;
font-size: 0.91rem;
}
.roadmap {
position: relative;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
.roadmap::before {
position: absolute;
z-index: 0;
top: 25px;
right: 9%;
left: 9%;
height: 2px;
background: rgba(200, 245, 96, 0.35);
content: "";
}
.phase {
position: relative;
z-index: 1;
padding: 0 9px;
}
.phase-number {
display: grid;
width: 52px;
height: 52px;
margin-bottom: 22px;
place-items: center;
border: 2px solid var(--acid);
border-radius: 50%;
background: var(--night);
color: var(--acid);
font-family: "SFMono-Regular", Consolas, monospace;
font-weight: 900;
}
.phase h3 {
margin-bottom: 9px;
font-size: 1.35rem;
}
.phase p {
margin: 0;
color: #aeb9b3;
font-size: 0.87rem;
}
.callout {
display: grid;
grid-template-columns: 1fr auto;
gap: 30px;
margin-top: 54px;
padding: 32px;
border: 1px solid rgba(200, 245, 96, 0.45);
border-radius: var(--radius);
background: rgba(200, 245, 96, 0.08);
align-items: center;
}
.callout h3 {
margin-bottom: 8px;
color: var(--acid);
font-size: 1.75rem;
}
.callout p {
margin: 0;
color: #c2cbc6;
}
.target-number {
color: var(--acid);
font-family: Georgia, serif;
font-size: 4.6rem;
letter-spacing: -0.06em;
line-height: 1;
white-space: nowrap;
}
.references {
columns: 2;
column-gap: 45px;
margin: 0;
padding: 0;
list-style: none;
}
.references li {
break-inside: avoid;
margin-bottom: 12px;
color: #52605a;
font-size: 0.88rem;
}
footer {
padding: 42px 0;
border-top: 1px solid var(--line-dark);
background: var(--night);
color: #9ca8a2;
font-size: 0.8rem;
}
footer .shell {
display: flex;
justify-content: space-between;
gap: 30px;
}
.print-note { display: none; }
@media (max-width: 920px) {
.hero-grid, .section-head { grid-template-columns: 1fr; gap: 34px; }
.hero { padding-top: 70px; }
.stats { grid-template-columns: repeat(2, 1fr); }
.recommendation { grid-template-columns: 58px minmax(0, 1fr); }
.recommendation .impact { grid-column: 2; }
.architecture { grid-template-columns: 1fr; }
.architecture-arrow { transform: rotate(90deg); min-height: 60px; }
.roadmap { grid-template-columns: repeat(2, 1fr); gap: 34px 18px; }
.roadmap::before { display: none; }
}
@media (max-width: 650px) {
body { font-size: 16px; }
.shell { width: min(100% - 24px, 1180px); }
nav { display: none; }
.hero { padding: 58px 0 62px; }
h1 { font-size: clamp(3.2rem, 17vw, 5.1rem); }
main section { padding: 70px 0; }
.stats, .finding-grid, .contract-grid, .roadmap { grid-template-columns: 1fr; }
.bar-row { grid-template-columns: 1fr; gap: 7px; }
.bar-value { text-align: left; }
.recommendation { grid-template-columns: 1fr; }
.recommendation .impact { grid-column: 1; }
.diagram-card, .bars { padding: 18px; }
.diagram-caption, .callout, footer .shell { display: block; }
.target-number { margin-top: 25px; }
.references { columns: 1; }
}
@media print {
:root { --paper: #fff; }
.topbar { display: none; }
body { font-size: 11pt; background: #fff; }
.hero, .dark-section, footer { print-color-adjust: exact; -webkit-print-color-adjust: exact; }
main section { padding: 38px 0; }
.hero { padding: 45px 0; }
.diagram-card, .option-table-wrap { box-shadow: none; }
.recommendation, .finding, .contract-card, .phase { break-inside: avoid; }
.print-note { display: block; }
}
</style>
</head>
<body>
<header class="topbar">
<div class="shell">
<div class="brand"><span class="brand-mark">C</span> ContextVeil Repository Report</div>
<nav aria-label="Report sections">
<a href="#diagnosis">Diagnosis</a>
<a href="#recommendations">Recommendations</a>
<a href="#options">Options</a>
<a href="#roadmap">Roadmap</a>
</nav>
</div>
</header>
<section class="hero">
<div class="shell hero-grid">
<div>
<p class="eyebrow">Repository simplification report / August 2026</p>
<h1>A leaner path to <em>V1.</em></h1>
<p class="hero-lead">ContextVeil's redaction core is focused and maintainable. The complexity lives around it: experimental integrations, vendor-store discovery, setup semantics, diagnostics, and release policy.</p>
</div>
<aside class="verdict" aria-label="Primary recommendation">
<strong>Primary recommendation</strong>
<p>Ship a production-focused V1 around Claude and explicit source references.</p>
</aside>
</div>
</section>
<div class="snapshot">
<div class="shell">
<span>Repository: daniel-sc/contextveil</span>
<span>Snapshot: 5891e49</span>
<span>Status: v1.0.0-alpha.2 lineage</span>
<span>Analysis: static, repository-wide</span>
</div>
</div>
<main>
<section id="diagnosis">
<div class="shell">
<div class="section-head">
<div>
<p class="eyebrow">01 / Diagnosis</p>
<h2>The core is not the bloat.</h2>
</div>
<p class="intro">The product promise is a narrow data path. The repository also implements a multi-host integration manager, a credential-store inventory, a collision scanner, a transactional setup UI, deep diagnostics, and a release qualification program.</p>
</div>
<div class="stats" aria-label="Repository statistics">
<div class="stat"><span class="stat-value">16.8k</span><span class="stat-label">Rust lines, including inline tests</span></div>
<div class="stat"><span class="stat-value">491</span><span class="stat-label">Named Rust and TypeScript tests</span></div>
<div class="stat"><span class="stat-value">136</span><span class="stat-label">Normative requirement IDs</span></div>
<div class="stat"><span class="stat-value">+5,968</span><span class="stat-label">Lines added since alpha.2</span></div>
</div>
<figure class="diagram-card">
<svg viewBox="0 0 1040 575" role="img" aria-labelledby="gravity-title gravity-desc">
<title id="gravity-title">ContextVeil complexity center of gravity</title>
<desc id="gravity-desc">The exact redaction core is small in the center. Larger surrounding product systems account for most implementation complexity.</desc>
<defs>
<filter id="soft-shadow" x="-20%" y="-20%" width="140%" height="140%">
<feDropShadow dx="0" dy="12" stdDeviation="14" flood-color="#101715" flood-opacity="0.14"/>
</filter>
<linearGradient id="core-gradient" x1="0" x2="1">
<stop offset="0" stop-color="#c8f560"/>
<stop offset="1" stop-color="#82d99c"/>
</linearGradient>
</defs>
<g stroke="#c9c3b6" stroke-width="2" stroke-dasharray="5 7" fill="none">
<path d="M519 275 C430 198 359 159 266 130"/>
<path d="M520 274 C614 194 702 147 800 123"/>
<path d="M514 292 C380 310 276 349 190 414"/>
<path d="M527 291 C663 311 770 354 850 428"/>
<path d="M505 262 C472 180 470 116 489 62"/>
</g>
<g filter="url(#soft-shadow)">
<circle cx="518" cy="282" r="105" fill="url(#core-gradient)"/>
<circle cx="258" cy="125" r="101" fill="#ff7557"/>
<circle cx="806" cy="124" r="109" fill="#78c9dd"/>
<circle cx="177" cy="428" r="108" fill="#e6bd55"/>
<circle cx="861" cy="438" r="119" fill="#d9d3c7"/>
<circle cx="490" cy="58" r="50" fill="#202c28"/>
</g>
<g fill="#18201d" text-anchor="middle" font-family="Inter, system-ui, sans-serif">
<text x="518" y="266" font-size="17" font-weight="800" letter-spacing="1.4">CORE PATH</text>
<text x="518" y="295" font-size="25" font-family="Georgia, serif">resolve + match</text>
<text x="518" y="320" font-size="16">redact + report</text>
<text x="258" y="103" font-size="15" font-weight="800" letter-spacing="1.2">SETUP</text>
<text x="258" y="130" font-size="21" font-family="Georgia, serif">grouping, ordering,</text>
<text x="258" y="156" font-size="21" font-family="Georgia, serif">collisions, wildcard</text>
<text x="806" y="102" font-size="15" font-weight="800" letter-spacing="1.2">INTEGRATIONS</text>
<text x="806" y="129" font-size="21" font-family="Georgia, serif">4 hosts, 4 protocols,</text>
<text x="806" y="155" font-size="21" font-family="Georgia, serif">4 lifecycle models</text>
<text x="177" y="409" font-size="15" font-weight="800" letter-spacing="1.2">DISCOVERY</text>
<text x="177" y="436" font-size="20" font-family="Georgia, serif">private schemas and</text>
<text x="177" y="461" font-size="20" font-family="Georgia, serif">versioned host stores</text>
<text x="861" y="413" font-size="15" font-weight="800" letter-spacing="1.2">ASSURANCE</text>
<text x="861" y="440" font-size="20" font-family="Georgia, serif">doctor, traceability,</text>
<text x="861" y="465" font-size="20" font-family="Georgia, serif">release qualification</text>
</g>
<text x="490" y="54" fill="#f3f0e8" text-anchor="middle" font-size="12" font-family="Inter, system-ui" font-weight="800">DOCS</text>
<text x="490" y="70" fill="#aeb9b3" text-anchor="middle" font-size="10" font-family="Inter, system-ui">8 surfaces</text>
</svg>
<figcaption class="diagram-caption">
<span>The matcher is not the dominant maintenance burden.</span>
<span>Setup, integrations, discovery, and diagnostics account for about 65% of maintained Rust.</span>
</figcaption>
</figure>
</div>
</section>
<section class="dark-section" aria-labelledby="weight-title">
<div class="shell">
<div class="section-head">
<div>
<p class="eyebrow">02 / Weight map</p>
<h2 id="weight-title">Where the code goes.</h2>
</div>
<p class="intro">Approximate implementation lines before inline test modules. Exact figures vary with classification, but the imbalance is clear: lifecycle and enrollment convenience dominate the security primitive.</p>
</div>
<div class="bars" role="img" aria-label="Approximate implementation lines by subsystem">
<div class="bar-row"><div class="bar-label">Setup</div><div class="bar-track"><div class="bar-fill" style="width: 100%"></div></div><div class="bar-value">~3,143</div></div>
<div class="bar-row"><div class="bar-label">Integration lifecycle</div><div class="bar-track"><div class="bar-fill" style="width: 60%"></div></div><div class="bar-value">~1,871</div></div>
<div class="bar-row"><div class="bar-label">Source + config</div><div class="bar-track"><div class="bar-fill" style="width: 62%"></div></div><div class="bar-value">~1,950</div></div>
<div class="bar-row"><div class="bar-label">Diagnostics</div><div class="bar-track"><div class="bar-fill" style="width: 25%"></div></div><div class="bar-value">~796</div></div>
<div class="bar-row"><div class="bar-label">Runtime adapters</div><div class="bar-track"><div class="bar-fill" style="width: 24%"></div></div><div class="bar-value">~766</div></div>
<div class="bar-row core"><div class="bar-label">Matcher + redaction</div><div class="bar-track"><div class="bar-fill" style="width: 12%"></div></div><div class="bar-value">~369</div></div>
</div>
<div class="finding-grid">
<article class="finding"><span class="index">A</span><h3>Support breadth</h3><p>Three experimental adapters carry production-sized protocol, installer, ownership, diagnostics, fixture, and documentation obligations.</p></article>
<article class="finding"><span class="index">B</span><h3>Enrollment intelligence</h3><p>Private credential schemas across four hosts form a second product with independent vendor-version risk.</p></article>
<article class="finding"><span class="index">C</span><h3>UI as contract</h3><p>Menu order, row tiers, group representatives, insertion stability, and persistence order are normative behavior.</p></article>
<article class="finding"><span class="index">D</span><h3>Assurance duplication</h3><p>Adapter behavior is repeated across unit, process, leak, fuzz, plugin, setup, diagnostic, and release evidence layers.</p></article>
</div>
</div>
</section>
<section id="recommendations">
<div class="shell">
<div class="section-head">
<div>
<p class="eyebrow">03 / Recommendations</p>
<h2>Cut scope before refactoring.</h2>
</div>
<p class="intro">The largest reductions require product decisions. Internal consolidation alone will improve clarity, but it cannot make a four-host, schema-aware setup and diagnostics product genuinely small.</p>
</div>
<div class="recommendations">
<article class="recommendation">
<div><h3>Ship Claude only in stable V1</h3><p>Remove Codex, Copilot, and OpenCode from the shipped support contract until each is promotion-ready. Do not hide them behind features, which retain most maintenance and conformance cost.</p></div>
<div class="impact high">Highest leverage<br>Vision preserved<br>1,300+ shipped lines</div>
</article>
<article class="recommendation">
<div><h3>Drop private vendor-store discovery</h3><p>Keep secret-like names, credential-bearing URLs, and manual source entry. Remove private and MCP schema knowledge from <code>known_source.rs</code>. Smart enrollment need not mean comprehensive inventory.</p></div>
<div class="impact high">Very high leverage<br>Runtime unchanged<br>~1,700 total lines</div>
</article>
<article class="recommendation">
<div><h3>Simplify setup semantics</h3><p>Use independent, unchecked candidate rows. Remove Candidate Groups, project collision crawling, wildcard dotenv policies, two-tier ordering, and UI-driven canonicalization. Keep masked previews and explicit writes.</p></div>
<div class="impact high">High leverage<br>Requirement change<br>Fewer invalid states</div>
</article>
<article class="recommendation">
<div><h3>Protect valid sources during partial failure</h3><p>An invalid project file or malformed source should not disable valid global redaction. Continue with successfully resolved values and emit a prominent secret-safe warning.</p></div>
<div class="impact">Security improvement<br>Semantic change<br>Removes project DoS</div>
</article>
<article class="recommendation">
<div><h3>Use keyed dotenv and strict JSON</h3><p>Remove wildcard dotenv enrollment. If private vendor discovery goes away, replace full JSON5 with strict JSON pointers and delete the custom JSON5 value/preflight machinery.</p></div>
<div class="impact">Medium leverage<br>Smaller parser surface<br>1 dependency removed</div>
</article>
<article class="recommendation">
<div><h3>Reduce doctor and release promises</h3><p>Keep direct protection checks. Remove collision diagnosis, experimental-host verification, the paid live canary, resume qualification, and automatic major-version upgrade policy.</p></div>
<div class="impact">Medium leverage<br>Less host coupling<br>Simpler releases</div>
</article>
</div>
</div>
</section>
<section class="dark-section" aria-labelledby="architecture-title">
<div class="shell">
<div class="section-head">
<div>
<p class="eyebrow">04 / Target shape</p>
<h2 id="architecture-title">From product suite to primitive.</h2>
</div>
<p class="intro">The target keeps the important security path native, local, stateless, and auditable. It narrows convenience and host breadth rather than weakening exact redaction.</p>
</div>
<div class="architecture" role="img" aria-label="Current and recommended architecture comparison">
<div class="architecture-panel">
<h3>Current V1 contract</h3>
<div class="layer">Interactive setup state machine</div>
<div class="layer">Known Source schema inventory</div>
<div class="layer">Collision and alias analysis</div>
<div class="layer">4 installer and ownership models</div>
<div class="layer">4 protocol and failure adapters</div>
<div class="layer">Status + deep doctor + live canary</div>
<div class="layer">3 source grammars + wildcard policy</div>
<div class="layer">Exact matcher and structured redaction</div>
</div>
<div class="architecture-arrow" aria-hidden="true">&rarr;</div>
<div class="architecture-panel target">
<h3>Production-focused V1</h3>
<div class="layer">Simple explicit setup</div>
<div class="layer">Name and URL suggestions</div>
<div class="layer">Claude installation and inspection</div>
<div class="layer">Claude protocol adapter</div>
<div class="layer">Basic status and offline doctor</div>
<div class="layer">Env + keyed dotenv + strict JSON</div>
<div class="layer core-layer">One registry evaluation path</div>
<div class="layer core-layer">Exact matcher and structured redaction</div>
</div>
</div>
</div>
</section>
<section id="options">
<div class="shell">
<div class="section-head">
<div>
<p class="eyebrow">05 / Product options</p>
<h2>Choose the maintenance budget explicitly.</h2>
</div>
<p class="intro">All four options can preserve the central vision. They differ in how much setup convenience and host breadth become permanent obligations.</p>
</div>
<div class="option-table-wrap">
<table>
<thead><tr><th>Option</th><th>Included scope</th><th>Estimated reduction</th><th>Tradeoff</th></tr></thead>
<tbody>
<tr><td><strong>Minimal primitive</strong></td><td>Claude, global env and keyed dotenv, exact matcher, simple install/status</td><td>55% or greater</td><td>Smallest product; least guided enrollment</td></tr>
<tr class="recommended"><td><strong>Production-focused V1</strong><br><span class="badge">Recommended</span></td><td>Claude, restricted project policy, keyed dotenv, strict JSON pointers, name/URL suggestions</td><td>35% to 50%</td><td>Strong guided experience; narrower ecosystem reach</td></tr>
<tr><td><strong>Stable core + labs</strong></td><td>Production-focused core with experiments versioned and maintained separately</td><td>Similar core reduction</td><td>Continued labs cost, but not stable-contract cost</td></tr>
<tr><td><strong>Refactor only</strong></td><td>Preserve all current requirements and integrations</td><td>5% to 10%</td><td>Cleaner code, essentially unchanged product complexity</td></tr>
</tbody>
</table>
</div>
</div>
</section>
<section aria-labelledby="contract-title">
<div class="shell">
<div class="section-head">
<div>
<p class="eyebrow">06 / Contract health</p>
<h2 id="contract-title">Fix claims before adding features.</h2>
</div>
<p class="intro">Several current documents create obligations or assurances that the implementation and available evidence cannot cleanly support.</p>
</div>
<div class="contract-grid">
<article class="contract-card"><strong>COP-002 / DEV-002</strong><p>Copilot prompt coverage is publicly claimed while the limitations document says the host may silently ignore the emitted mutation.</p></article>
<article class="contract-card"><strong>SEC-001 / CFG-012</strong><p>The main protection claim conflicts with intentionally disabling valid global sources when an unrelated project policy is invalid.</p></article>
<article class="contract-card"><strong>SECURITY.md</strong><p>Excluding everything in <code>limitations.md</code> can accidentally put active deviations from covered behavior out of vulnerability scope.</p></article>
<article class="contract-card"><strong>TST-008</strong><p>The contract forbids paid tests from gating routine CI; other documents incorrectly reinterpret that as forbidding optional automation.</p></article>
<article class="contract-card"><strong>REL-007</strong><p>Traceability claims historical managed-state compatibility coverage without exercising a historical managed artifact.</p></article>
<article class="contract-card"><strong>Qualification</strong><p>The record says passed while human sign-off is pending and does not identify an immutable ContextVeil commit or artifact checksum.</p></article>
<article class="contract-card"><strong>Normative authority</strong><p>The specification declares itself authoritative while <code>known-sources.md</code> separately declares its inventory part of the V1 contract.</p></article>
<article class="contract-card"><strong>Performance wording</strong><p>"You won't notice it, promise" exceeds the evidence for unbounded input, per-event source resolution, and fail-open host timeouts.</p></article>
</div>
</div>
</section>
<section class="dark-section" id="roadmap">
<div class="shell">
<div class="section-head">
<div>
<p class="eyebrow">07 / Reduction roadmap</p>
<h2>Delete first. Consolidate second.</h2>
</div>
<p class="intro">Refactoring code that should leave the stable product wastes effort. Set the contract, remove the scope, then improve the retained seams.</p>
</div>
<div class="roadmap">
<article class="phase"><div class="phase-number">01</div><h3>Reset the contract</h3><p>Freeze feature work. Choose the production-focused support matrix. Rewrite observable requirements and correct unsupported claims.</p></article>
<article class="phase"><div class="phase-number">02</div><h3>Remove breadth</h3><p>Delete experimental adapters, private vendor schemas, wildcard enrollment, collisions, grouping, and release-only secondary claims.</p></article>
<article class="phase"><div class="phase-number">03</div><h3>Unify retained paths</h3><p>Create one registry evaluation operation, one secure walker, one integration lifecycle vocabulary, and shared test fixtures.</p></article>
<article class="phase"><div class="phase-number">04</div><h3>Rebuild evidence</h3><p>Keep matcher properties, parser safety, canary leak tests, atomic writes, and one real process-boundary test per covered Claude path.</p></article>
</div>
<div class="callout">
<div><h3>A practical lean target</h3><p>One production integration, fewer than 60 normative requirements, fewer than 6,000 shipped Rust lines, and no setup concept that requires an alias inventory to explain.</p></div>
<div class="target-number">&lt; 6k</div>
</div>
</div>
</section>
<section aria-labelledby="refactor-title">
<div class="shell">
<div class="section-head">
<div>
<p class="eyebrow">08 / Safe consolidation</p>
<h2 id="refactor-title">If scope cannot move yet.</h2>
</div>
<p class="intro">These changes preserve current product behavior. They improve ownership and reduce drift, but they cannot deliver the same reduction as narrowing requirements.</p>
</div>
<div class="contract-grid">
<article class="contract-card"><strong>ONE REGISTRY EVALUATION</strong><p>Unify <code>registry::build</code> and <code>Snapshot::take</code> so runtime, status, doctor, and setup verification share loading, resolution, ordering, and failure semantics.</p></article>
<article class="contract-card"><strong>APPLICATION-LEVEL REDACTION</strong><p>Extract host-neutral JSON and text redaction operations. Leave protocol parsing, host output, and fail-open/fail-closed policy in adapters.</p></article>
<article class="contract-card"><strong>NEUTRAL INTEGRATION PRIMITIVES</strong><p>Move installation state, conflicts, subprocess execution, timeout constants, and atomic text writes out of Claude, JSON, and setup-specific modules.</p></article>
<article class="contract-card"><strong>ONE PROJECT WALKER</strong><p>Share exclusions, symlink refusal, and regular-file checks between project discovery and collision analysis.</p></article>
<article class="contract-card"><strong>TEST MACHINE FIXTURE</strong><p>Centralize isolated home, registry, executable, process invocation, and cleanup mechanics while keeping host payloads explicit.</p></article>
<article class="contract-card"><strong>FIX TRANSACTIONS</strong><p>Setup currently continues after an integration failure, and its "exact" restore path reinstalls using the current executable rather than the prior artifact.</p></article>
</div>
</div>
</section>
<section aria-labelledby="sources-title">
<div class="shell">
<div class="section-head">
<div>
<p class="eyebrow">09 / Evidence</p>
<h2 id="sources-title">Primary repository references.</h2>
</div>
<p class="intro">The report was produced from the repository snapshot shown above. Counts are static estimates intended to identify proportion and maintenance concentration, not executable coverage metrics.</p>
</div>
<ul class="references">
<li><a href="https://github.com/daniel-sc/contextveil/blob/5891e49/specification.md">specification.md</a>: 940-line observable V1 contract.</li>
<li><a href="https://github.com/daniel-sc/contextveil/blob/5891e49/vision.md">vision.md</a>: product promise and non-goals.</li>
<li><a href="https://github.com/daniel-sc/contextveil/blob/5891e49/architecture.md">architecture.md</a>: mandatory technical boundaries.</li>
<li><a href="https://github.com/daniel-sc/contextveil/blob/5891e49/limitations.md">limitations.md</a>: product gaps and deviations.</li>
<li><a href="https://github.com/daniel-sc/contextveil/blob/5891e49/src/setup/mod.rs">src/setup/mod.rs</a>: setup candidate state and workflow.</li>
<li><a href="https://github.com/daniel-sc/contextveil/blob/5891e49/src/setup/known_source.rs">src/setup/known_source.rs</a>: version-sensitive store schemas.</li>
<li><a href="https://github.com/daniel-sc/contextveil/blob/5891e49/src/registry.rs">src/registry.rs</a>: runtime effective registry.</li>
<li><a href="https://github.com/daniel-sc/contextveil/blob/5891e49/src/diagnose.rs">src/diagnose.rs</a>: status and doctor snapshot.</li>
<li><a href="https://github.com/daniel-sc/contextveil/blob/5891e49/src/matcher.rs">src/matcher.rs</a>: exact matching and interventions.</li>
<li><a href="https://github.com/daniel-sc/contextveil/blob/5891e49/src/setup/integrations.rs">src/setup/integrations.rs</a>: integration transactions and rollback.</li>
<li><a href="https://github.com/daniel-sc/contextveil/blob/5891e49/docs/traceability.md">docs/traceability.md</a>: requirement-to-test audit.</li>
<li><a href="https://github.com/daniel-sc/contextveil/blob/5891e49/docs/known-sources.md">docs/known-sources.md</a>: schema inventory and pinned evidence.</li>
</ul>
<p class="print-note">Public report links point to repository snapshot 5891e49.</p>
</div>
</section>
</main>
<footer>
<div class="shell">
<span>ContextVeil simplification report</span>
<span>Recommendation: production-focused V1</span>
</div>
</footer>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment