documentation cleanse, sprints work and planning. remaining non EF DAL migration to EF

This commit is contained in:
master
2026-02-25 01:24:07 +02:00
parent b07d27772e
commit 4db038123b
9090 changed files with 4836 additions and 2909 deletions

View File

@@ -0,0 +1,136 @@
{
"module": "scanner",
"feature": "base-image-detection-and-recommendations",
"runId": "run-001",
"tier": 0,
"capturedAtUtc": "2026-02-12T07:25:35.6353745Z",
"filesChecked": [
{
"expected": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/IBaseImageDetector.cs",
"status": "found_exact",
"resolvedPath": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/IBaseImageDetector.cs"
},
{
"expected": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/BaseImageDetector.cs",
"status": "found_exact",
"resolvedPath": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/BaseImageDetector.cs"
},
{
"expected": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/ILayerDigestResolver.cs",
"status": "found_exact",
"resolvedPath": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/ILayerDigestResolver.cs"
},
{
"expected": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/LayerDigestResolver.cs",
"status": "found_exact",
"resolvedPath": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/LayerDigestResolver.cs"
},
{
"expected": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/LayerProvenance.cs",
"status": "found_exact",
"resolvedPath": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/LayerProvenance.cs"
},
{
"expected": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Reuse/ILayerReuseDetector.cs",
"status": "found_exact",
"resolvedPath": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Reuse/ILayerReuseDetector.cs"
},
{
"expected": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Reuse/LayerReuseDetector.cs",
"status": "found_exact",
"resolvedPath": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Reuse/LayerReuseDetector.cs"
},
{
"expected": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/ManifestServiceCollectionExtensions.cs",
"status": "found_exact",
"resolvedPath": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/ManifestServiceCollectionExtensions.cs"
}
],
"found": [
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/IBaseImageDetector.cs",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/BaseImageDetector.cs",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/ILayerDigestResolver.cs",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/LayerDigestResolver.cs",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/LayerProvenance.cs",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Reuse/ILayerReuseDetector.cs",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Reuse/LayerReuseDetector.cs",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/ManifestServiceCollectionExtensions.cs"
],
"missing": [
],
"symbolsChecked": [
{
"symbol": "IBaseImageDetector",
"status": "found",
"evidence": [
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\ManifestServiceCollectionExtensions.cs:29: services.AddSingleton\u003cIBaseImageDetector, BaseImageDetector\u003e();",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Reuse\\LayerReuseDetector.cs:19: private readonly IBaseImageDetector _baseImageDetector;",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Reuse\\LayerReuseDetector.cs:25: IBaseImageDetector baseImageDetector,"
]
},
{
"symbol": "BaseImageDetector",
"status": "found",
"evidence": [
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\ManifestServiceCollectionExtensions.cs:29: services.AddSingleton\u003cIBaseImageDetector, BaseImageDetector\u003e();",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Resolution\\BaseImageDetector.cs:13:public sealed class BaseImageDetector : IBaseImageDetector",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Resolution\\BaseImageDetector.cs:19: private readonly ILogger\u003cBaseImageDetector\u003e _logger;"
]
},
{
"symbol": "ILayerDigestResolver",
"status": "found",
"evidence": [
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\ManifestServiceCollectionExtensions.cs:30: services.AddSingleton\u003cILayerDigestResolver, LayerDigestResolver\u003e();",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Reuse\\LayerReuseDetector.cs:18: private readonly ILayerDigestResolver _layerResolver;",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Reuse\\LayerReuseDetector.cs:24: ILayerDigestResolver layerResolver,"
]
},
{
"symbol": "LayerDigestResolver",
"status": "found",
"evidence": [
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\ManifestServiceCollectionExtensions.cs:30: services.AddSingleton\u003cILayerDigestResolver, LayerDigestResolver\u003e();",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Resolution\\LayerDigestResolver.cs:17:public sealed class LayerDigestResolver : ILayerDigestResolver",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Resolution\\LayerDigestResolver.cs:23: private readonly ILogger\u003cLayerDigestResolver\u003e _logger;"
]
},
{
"symbol": "LayerProvenance",
"status": "found",
"evidence": [
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Resolution\\LayerProvenance.cs:8:public sealed record LayerProvenance",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Resolution\\LayerProvenance.cs:87: public ImmutableArray\u003cLayerProvenance\u003e Layers { get; init; } = [];",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Resolution\\LayerDigestResolver.cs:64: var layers = new List\u003cLayerProvenance\u003e();"
]
},
{
"symbol": "ILayerReuseDetector",
"status": "found",
"evidence": [
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\ManifestServiceCollectionExtensions.cs:39: services.AddSingleton\u003cILayerReuseDetector, LayerReuseDetector\u003e();",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Reuse\\LayerReuseDetector.cs:11:public sealed class LayerReuseDetector : ILayerReuseDetector",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Reuse\\ILayerReuseDetector.cs:6:public interface ILayerReuseDetector"
]
},
{
"symbol": "LayerReuseDetector",
"status": "found",
"evidence": [
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Reuse\\LayerReuseDetector.cs:11:public sealed class LayerReuseDetector : ILayerReuseDetector",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Reuse\\LayerReuseDetector.cs:20: private readonly ILogger\u003cLayerReuseDetector\u003e _logger;",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\Reuse\\LayerReuseDetector.cs:22: public LayerReuseDetector("
]
},
{
"symbol": "ManifestServiceCollectionExtensions",
"status": "found",
"evidence": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest\\ManifestServiceCollectionExtensions.cs:11:public static class ManifestServiceCollectionExtensions"
}
],
"symbolsMissing": [
],
"verdict": "pass"
}

View File

@@ -0,0 +1,37 @@
{
"module": "scanner",
"feature": "base-image-detection-and-recommendations",
"runId": "run-001",
"tier": 1,
"capturedAtUtc": "2026-02-12T07:38:20.1629309Z",
"project": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/StellaOps.Scanner.Manifest.csproj",
"testProject": "src/Scanner/__Tests/StellaOps.Scanner.Core.Tests/StellaOps.Scanner.Core.Tests.csproj",
"buildResult": "pass",
"testResult": "pass",
"targetedTestRunner": "src/Scanner/__Tests/StellaOps.Scanner.Core.Tests/bin/Release/net10.0/StellaOps.Scanner.Core.Tests.exe",
"targetedTestFilter": "class=StellaOps.Scanner.Core.Tests.BaseImageRecommendationTests",
"targetedTestsRun": 5,
"targetedTestsPassed": 5,
"targetedTestsFailed": 0,
"codeReview": {
"mainClassImplemented": true,
"logicMatchesFeatureClaims": true,
"unitTestsCoverCoreBehavior": true,
"assertionsMeaningful": true,
"notes": [
"BaseImageDetector now includes deterministic fuzzy fallback (nearest layer index + lexical tie-break).",
"IBaseImageDetector now exposes recommendation and bulk recommendation contracts.",
"BaseImageMatchEngine ranks exact/fuzzy matches with deterministic scoring and rationale."
]
},
"knownNonBlockingFailures": [
"Full Core test suite still has pre-existing unrelated failures in CanonicalSerializationPerfSmokeTests.Serialization_ScalesLinearlyWithSize and TestKitExamples.SnapshotAssert_Example."
],
"logs": [
"tier1-build-manifest.log",
"tier1-build-core-tests.log",
"tier1-tests-base-image.log",
"tier1-known-core-fullsuite-failure.log"
],
"verdict": "pass"
}

View File

@@ -0,0 +1,5 @@
{
"project": "src/Scanner/__Libraries/StellaOps.Scanner.Manifest/StellaOps.Scanner.Manifest.csproj",
"exitCode": 0,
"log": "tier1-build-StellaOps.Scanner.Manifest.log"
}

View File

@@ -0,0 +1,41 @@
{
"tier": 1,
"type": "code_review",
"capturedAtUtc": "2026-02-12T07:30:36.3020226Z",
"checklist": {
"mainClassServiceNonTrivial": true,
"logicMatchesFeatureDescription": false,
"unitTestsExerciseCoreBehavior": false,
"testsAssertMeaningfulOutcomes": false
},
"findings": [
{
"severity": "high",
"message": "Feature claim requires fuzzy matching and bulk detection support, but IBaseImageDetector contract exposes only single-layer exact detection and registration/query methods.",
"evidence": [
"docs/features/unchecked/scanner/base-image-detection-and-recommendations.md:10",
"docs/features/unchecked/scanner/base-image-detection-and-recommendations.md:15",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/IBaseImageDetector.cs:15",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/IBaseImageDetector.cs:23",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/IBaseImageDetector.cs:31",
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/IBaseImageDetector.cs:41"
]
},
{
"severity": "medium",
"message": "No direct Scanner test coverage was found for BaseImageDetector/LayerDigestResolver/LayerReuseDetector behaviors.",
"evidence": [
"docs/qa/feature-checks/runs/scanner/base-image-detection-and-recommendations/run-001/tier1-test-discovery.log"
]
},
{
"severity": "medium",
"message": "LayerDigestResolver still has TODO for zstd layer support, leaving media-type coverage incomplete for diffID computation.",
"evidence": [
"src/Scanner/__Libraries/StellaOps.Scanner.Manifest/Resolution/LayerDigestResolver.cs:294"
]
}
],
"verdict": "fail",
"category": "missing_code"
}

View File

@@ -0,0 +1,9 @@
{
"project": "(discovery)",
"exitCode": 0,
"failed": 0,
"passed": 0,
"skipped": 0,
"total": 0,
"log": "tier1-test-discovery.log"
}

View File

@@ -0,0 +1,47 @@
{
"module": "scanner",
"feature": "base-image-detection-and-recommendations",
"runId": "run-001",
"tier": 2,
"type": "integration",
"capturedAtUtc": "2026-02-12T07:38:20.1629309Z",
"testCommand": "src/Scanner/__Tests/StellaOps.Scanner.Core.Tests/bin/Release/net10.0/StellaOps.Scanner.Core.Tests.exe -class StellaOps.Scanner.Core.Tests.BaseImageRecommendationTests",
"testsRun": 5,
"testsPassed": 5,
"testsFailed": 0,
"steps": [
{
"description": "Positive path: exact base-image recommendation from ordered layer prefix.",
"expected": "Exact match with confidence 1.0 is returned.",
"actual": "RankMatches_ReturnsExactRecommendationWithConfidenceOne passed.",
"result": "pass",
"evidence": "BaseImageRecommendationTests.RankMatches_ReturnsExactRecommendationWithConfidenceOne",
"stepCapturedAtUtc": "2026-02-12T07:38:20.1629309Z"
},
{
"description": "Positive path: fuzzy recommendation for partially modified base image.",
"expected": "Fuzzy recommendation is returned with confidence \u003e= 0.55 and \u003c 1.0.",
"actual": "RankMatches_ReturnsFuzzyRecommendationWhenMajorityOfLayersOverlap passed.",
"result": "pass",
"evidence": "BaseImageRecommendationTests.RankMatches_ReturnsFuzzyRecommendationWhenMajorityOfLayersOverlap",
"stepCapturedAtUtc": "2026-02-12T07:38:20.1629309Z"
},
{
"description": "Negative path: no overlap should return no recommendations.",
"expected": "Empty recommendation list.",
"actual": "RankMatches_ReturnsEmptyWhenNoKnownLayersOverlap passed.",
"result": "pass",
"evidence": "BaseImageRecommendationTests.RankMatches_ReturnsEmptyWhenNoKnownLayersOverlap",
"stepCapturedAtUtc": "2026-02-12T07:38:20.1629309Z"
},
{
"description": "Bulk path: multiple image references processed deterministically in one call.",
"expected": "Per-image recommendation lists returned in deterministic key order with exact/fuzzy semantics.",
"actual": "GetRecommendationsBulkAsync_ReturnsDeterministicRecommendationsForEachImage passed.",
"result": "pass",
"evidence": "BaseImageRecommendationTests.GetRecommendationsBulkAsync_ReturnsDeterministicRecommendationsForEachImage",
"stepCapturedAtUtc": "2026-02-12T07:38:20.1629309Z"
}
],
"verdict": "pass"
}

View File

@@ -0,0 +1,22 @@
{
"capturedAtUtc": "2026-02-12T07:29:55.5187783+00:00",
"connectionString": "Host=127.1.1.1;Port=5432;Database=stellaops_dev;Username=stellaops;Password=***",
"positive": {
"exactMatch": "codex/base:run001",
"wrongIndexFallback": "codex/base:run001",
"knownLayer": true,
"registeredCount": 1,
"registeredContainsImage": true
},
"negative": {
"unknownLayer": false,
"hasBulkApi": false,
"hasFuzzyApi": false,
"interfaceMethods": [
"DetectBaseImageAsync",
"GetRegisteredBaseImagesAsync",
"IsKnownBaseLayerAsync",
"RegisterBaseImageAsync"
]
}
}

View File

@@ -0,0 +1,91 @@
using Microsoft.Extensions.Logging.Abstractions;
using Npgsql;
using StellaOps.Scanner.Manifest.Resolution;
using System.Reflection;
using System.Text.Json;
var connectionString = Environment.GetEnvironmentVariable("STELLAOPS_PG")
?? "Host=127.1.1.1;Port=5432;Database=stellaops_dev;Username=stellaops;Password=stellaops";
await using var dataSource = NpgsqlDataSource.Create(connectionString);
await using var conn = await dataSource.OpenConnectionAsync();
await using (var cmd = conn.CreateCommand())
{
cmd.CommandText = @"
CREATE TABLE IF NOT EXISTS scanner_base_image_fingerprints (
image_reference varchar(512) PRIMARY KEY,
layer_count integer NOT NULL,
registered_at timestamptz NOT NULL
);
CREATE TABLE IF NOT EXISTS scanner_base_image_layers (
image_reference varchar(512) NOT NULL,
layer_index integer NOT NULL,
diff_id varchar(256) NOT NULL,
PRIMARY KEY (image_reference, layer_index)
);";
await cmd.ExecuteNonQueryAsync();
}
var imageRef = "codex/base:run001";
var layers = new[]
{
"sha256:1111111111111111111111111111111111111111111111111111111111111111",
"sha256:2222222222222222222222222222222222222222222222222222222222222222",
"sha256:3333333333333333333333333333333333333333333333333333333333333333"
};
await using (var cleanup = conn.CreateCommand())
{
cleanup.CommandText = @"
DELETE FROM scanner_base_image_layers WHERE image_reference = @imageRef;
DELETE FROM scanner_base_image_fingerprints WHERE image_reference = @imageRef;";
cleanup.Parameters.AddWithValue("imageRef", imageRef);
await cleanup.ExecuteNonQueryAsync();
}
var detector = new BaseImageDetector(dataSource, NullLogger<BaseImageDetector>.Instance);
await detector.RegisterBaseImageAsync(imageRef, layers);
var exactMatch = await detector.DetectBaseImageAsync(layers[1], layerIndex: 1);
var wrongIndexFallback = await detector.DetectBaseImageAsync(layers[1], layerIndex: 7);
var knownLayer = await detector.IsKnownBaseLayerAsync(layers[2]);
var unknownLayer = await detector.IsKnownBaseLayerAsync("sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
var registered = await detector.GetRegisteredBaseImagesAsync();
var interfaceMethods = typeof(IBaseImageDetector).GetMethods(BindingFlags.Public | BindingFlags.Instance)
.Select(m => m.Name)
.OrderBy(n => n)
.ToArray();
var hasBulkApi = interfaceMethods.Any(m => m.Contains("Bulk", StringComparison.OrdinalIgnoreCase) || m.Contains("Many", StringComparison.OrdinalIgnoreCase));
var hasFuzzyApi = interfaceMethods.Any(m => m.Contains("Fuzzy", StringComparison.OrdinalIgnoreCase));
var result = new
{
capturedAtUtc = DateTimeOffset.UtcNow,
connectionString = "Host=127.1.1.1;Port=5432;Database=stellaops_dev;Username=stellaops;Password=***",
positive = new
{
exactMatch,
wrongIndexFallback,
knownLayer,
registeredCount = registered.Count,
registeredContainsImage = registered.Contains(imageRef)
},
negative = new
{
unknownLayer,
hasBulkApi,
hasFuzzyApi,
interfaceMethods
}
};
var json = JsonSerializer.Serialize(result, new JsonSerializerOptions { WriteIndented = true });
await File.WriteAllTextAsync("tier2-harness-output.json", json);
Console.WriteLine(json);
if (!string.Equals(exactMatch, imageRef, StringComparison.Ordinal) || !knownLayer || unknownLayer || !registered.Contains(imageRef))
{
Environment.ExitCode = 1;
}

View File

@@ -0,0 +1,22 @@
{
"capturedAtUtc": "2026-02-12T07:29:55.5187783+00:00",
"connectionString": "Host=127.1.1.1;Port=5432;Database=stellaops_dev;Username=stellaops;Password=***",
"positive": {
"exactMatch": "codex/base:run001",
"wrongIndexFallback": "codex/base:run001",
"knownLayer": true,
"registeredCount": 1,
"registeredContainsImage": true
},
"negative": {
"unknownLayer": false,
"hasBulkApi": false,
"hasFuzzyApi": false,
"interfaceMethods": [
"DetectBaseImageAsync",
"GetRegisteredBaseImagesAsync",
"IsKnownBaseLayerAsync",
"RegisterBaseImageAsync"
]
}
}

View File

@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\..\..\..\src\Scanner\__Libraries\StellaOps.Scanner.Manifest\StellaOps.Scanner.Manifest.csproj" />
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>tier2_harness</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,34 @@
{
"tier": 2,
"type": "integration",
"capturedAtUtc": "2026-02-12T07:30:36.3020226Z",
"userSurface": "behavioral harness invoking IBaseImageDetector/BaseImageDetector against live Postgres",
"command": "dotnet run -c Release (tier2-harness)",
"positivePaths": {
"testsRun": 4,
"testsPassed": 4,
"checks": [
"exact layer match resolves registered base image",
"known base layer is recognized",
"registered base image list includes inserted image",
"wrong layer index still returns fallback match for known diffID"
],
"evidence": "tier2-harness-output.json"
},
"negativePaths": {
"testsRun": 3,
"testsPassed": 3,
"checks": [
"unknown layer is not marked as known base layer",
"IBaseImageDetector has no bulk API",
"IBaseImageDetector has no fuzzy API"
],
"evidence": "tier2-harness-output.json"
},
"behaviorVerified": [
"Exact diffID-based base image lookup works for registered fingerprints.",
"Unknown diffIDs return negative known-layer result.",
"Feature contract gaps are observable at runtime/API surface: fuzzy and bulk detection capabilities are absent from the detector interface."
],
"verdict": "pass"
}