save checkpoint: save features
This commit is contained in:
@@ -0,0 +1 @@
|
||||
Docker version 29.1.5, build 0e6fee6
|
||||
@@ -0,0 +1 @@
|
||||
10.0.200-preview.0.26103.119
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
xUnit.net v3 In-Process Runner v3.2.1+a9cfb80929 (64-bit .NET 10.0.3)
|
||||
|
||||
StellaOps.Attestor.Infrastructure.Tests.DefaultDsseCanonicalizerTests
|
||||
StellaOps.Attestor.Infrastructure.Tests.HttpRekorClientTests
|
||||
StellaOps.Attestor.Infrastructure.Tests.HttpRekorTileClientTests
|
||||
StellaOps.Attestor.Infrastructure.Tests.InMemoryAttestorEntryRepositoryTests
|
||||
StellaOps.Attestor.Infrastructure.Tests.RekorBackendResolverTests
|
||||
StellaOps.Attestor.Infrastructure.Tests.Verification.RekorVerificationJobIntegrationTests
|
||||
@@ -0,0 +1,10 @@
|
||||
xUnit.net v3 In-Process Runner v3.2.1+a9cfb80929 (64-bit .NET 10.0.3)
|
||||
|
||||
StellaOps.Attestor.Tests.Rekor.RekorInclusionProofTests
|
||||
StellaOps.Attestor.Tests.Rekor.RekorReceiptGenerationTests
|
||||
StellaOps.Attestor.Tests.Rekor.RekorReceiptVerificationTests
|
||||
StellaOps.Attestor.Types.Tests.AttestationGoldenSamplesTests
|
||||
StellaOps.Attestor.Types.Tests.Determinism.AttestationDeterminismTests
|
||||
StellaOps.Attestor.Types.Tests.GeneratorOutputTests
|
||||
StellaOps.Attestor.Types.Tests.Integration.SbomAttestationSignVerifyIntegrationTests
|
||||
StellaOps.Attestor.Types.Tests.SmartDiffSchemaValidationTests
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
f35d4c4cb7e76b6dfc3d6a2d7741c040f894756358362308dd0ae753a4982fb4
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"type": "source",
|
||||
"module": "devops",
|
||||
"feature": "postgresql-backend-for-rekor-metadata",
|
||||
"runId": "run-001",
|
||||
"capturedAtUtc": "2026-02-11T12:04:57.6995553Z",
|
||||
"filesChecked": [
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Rekor/RekorInclusionProof.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Rekor/EnhancedRekorProofBuilder.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Rekor/EnhancedRekorProofBuilder.Build.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Rekor/EnhancedRekorProofBuilder.Validate.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Pipeline/RekorEntry.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Verification/RekorInclusionVerificationStep.cs",
|
||||
"devops/database/postgres/cluster-production.yaml",
|
||||
"devops/database/postgres/cluster-staging.yaml",
|
||||
"devops/database/postgres/pooler-production.yaml",
|
||||
"devops/database/postgres/pooler-staging.yaml",
|
||||
"devops/compose/docker-compose.stella-ops.yml"
|
||||
],
|
||||
"found": [
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Rekor/RekorInclusionProof.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Rekor/EnhancedRekorProofBuilder.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Rekor/EnhancedRekorProofBuilder.Build.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Rekor/EnhancedRekorProofBuilder.Validate.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Pipeline/RekorEntry.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Verification/RekorInclusionVerificationStep.cs",
|
||||
"devops/database/postgres/cluster-production.yaml",
|
||||
"devops/database/postgres/cluster-staging.yaml",
|
||||
"devops/database/postgres/pooler-production.yaml",
|
||||
"devops/database/postgres/pooler-staging.yaml",
|
||||
"devops/compose/docker-compose.stella-ops.yml"
|
||||
],
|
||||
"missing": [
|
||||
|
||||
],
|
||||
"declarationChecks": [
|
||||
{
|
||||
"pattern": "record RekorInclusionProof",
|
||||
"found": true,
|
||||
"sample": "src/Attestor/__Libraries/StellaOps.Attestor.ProofChain\\Rekor\\RekorInclusionProof.cs:14:public sealed record RekorInclusionProof"
|
||||
},
|
||||
{
|
||||
"pattern": "class EnhancedRekorProofBuilder",
|
||||
"found": true,
|
||||
"sample": "src/Attestor/__Libraries/StellaOps.Attestor.ProofChain\\Rekor\\EnhancedRekorProofBuilder.cs:12:public sealed partial class EnhancedRekorProofBuilder\nsrc/Attestor/__Libraries/StellaOps.Attestor.ProofChain\\Rekor\\EnhancedRekorProofBuilder.Validate.cs:12:public sealed partial class EnhancedRekorProofBuilder\nsrc/Attestor/__Libraries/StellaOps.Attestor.ProofChain\\Rekor\\EnhancedRekorProofBuilder.Build.cs:12:public sealed partial class EnhancedRekorProofBuilder"
|
||||
},
|
||||
{
|
||||
"pattern": "record RekorEntry",
|
||||
"found": true,
|
||||
"sample": "src/Attestor/__Libraries/StellaOps.Attestor.ProofChain\\Pipeline\\RekorEntry.cs:6:public sealed record RekorEntry"
|
||||
},
|
||||
{
|
||||
"pattern": "class RekorInclusionVerificationStep",
|
||||
"found": true,
|
||||
"sample": "src/Attestor/__Libraries/StellaOps.Attestor.ProofChain\\Verification\\RekorInclusionVerificationStep.cs:14:public sealed class RekorInclusionVerificationStep : IVerificationStep"
|
||||
}
|
||||
],
|
||||
"verdict": "pass"
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"type": "build",
|
||||
"module": "devops",
|
||||
"feature": "postgresql-backend-for-rekor-metadata",
|
||||
"runId": "run-001",
|
||||
"capturedAtUtc": "2026-02-11T12:04:57.6995553Z",
|
||||
"project": "src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/StellaOps.Attestor.ProofChain.csproj",
|
||||
"additionalProjects": [
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.Persistence/StellaOps.Attestor.Persistence.csproj",
|
||||
"src/Attestor/__Tests/StellaOps.Attestor.Types.Tests/StellaOps.Attestor.Types.Tests.csproj",
|
||||
"src/Attestor/__Tests/StellaOps.Attestor.Infrastructure.Tests/StellaOps.Attestor.Infrastructure.Tests.csproj"
|
||||
],
|
||||
"buildResult": "pass",
|
||||
"testResult": "pass",
|
||||
"testsRun": 57,
|
||||
"testsPassed": 57,
|
||||
"testsFailed": 0,
|
||||
"logs": [
|
||||
"evidence/01-build-proofchain.txt",
|
||||
"evidence/01a-build-persistence.txt",
|
||||
"evidence/01b-build-types-tests.txt",
|
||||
"evidence/01c-build-infra-tests.txt",
|
||||
"evidence/02-test-rekor-inclusion-proof.txt",
|
||||
"evidence/02a-test-rekor-receipt-generation.txt",
|
||||
"evidence/02b-test-rekor-receipt-verification.txt",
|
||||
"evidence/02c-test-rekor-verification-job-integration.txt"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"type": "integration",
|
||||
"module": "devops",
|
||||
"feature": "postgresql-backend-for-rekor-metadata",
|
||||
"runId": "run-001",
|
||||
"capturedAtUtc": "2026-02-11T12:04:57.6995553Z",
|
||||
"testHarness": "PostgreSQL schema apply and metadata table/index validation via dockerized postgres + focused Rekor proof tests",
|
||||
"testsRun": 57,
|
||||
"testsPassed": 57,
|
||||
"testsFailed": 0,
|
||||
"behaviorVerified": [
|
||||
"Rekor inclusion proof, receipt generation, and receipt verification behaviors pass in focused Attestor test suites.",
|
||||
"Rekor verification job integration behavior passes for persistence/queue flow.",
|
||||
"PostgreSQL schema applies successfully and materializes required tables for proofchain.rekor_entries and attestor.rekor_submission_queue.",
|
||||
"Required queue and entry indexes exist for ordered dequeue and lookup workloads."
|
||||
],
|
||||
"logs": [
|
||||
"evidence/02-test-rekor-inclusion-proof.txt",
|
||||
"evidence/02a-test-rekor-receipt-generation.txt",
|
||||
"evidence/02b-test-rekor-receipt-verification.txt",
|
||||
"evidence/02c-test-rekor-verification-job-integration.txt",
|
||||
"evidence/03-tier2-apply-initial-schema.txt",
|
||||
"evidence/03a-tier2-required-tables.txt",
|
||||
"evidence/03b-tier2-queue-indexes.txt",
|
||||
"evidence/03c-tier2-rekor-entry-indexes.txt"
|
||||
],
|
||||
"verdict": "pass"
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"approved": true,
|
||||
"reason": "Failure stack traces and SQL inspection consistently show schema/table mismatch in Rekor-linkage methods; fix aligns table usage and ensures required columns/indexes exist.",
|
||||
"revisedRootCause": "Repository Rekor-linkage SQL paths targeted excititor.vex_observations while the store creates and persists data in vex.observations, causing relation-not-found and unreachable linkage rows in persistence tests."
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,84 @@
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\Statements\InTotoStatementSnapshotTests.cs:168: public void VexVerdictStatement_VexVerdictId_HasCorrectFormat()
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\Statements\InTotoStatementSnapshotTests.cs:402: VexVerdictId = $"sha256:{new string('d', 64)}"
|
||||
src/Excititor\__Tests\StellaOps.Excititor.Persistence.Tests\PostgresVexObservationStoreTests.cs:192: public async Task UpdateRekorLinkageAsync_RoundTripsLinkageAndLookupByUuid()
|
||||
src/Excititor\__Tests\StellaOps.Excititor.Persistence.Tests\PostgresVexObservationStoreTests.cs:223: var updated = await _store.UpdateRekorLinkageAsync(
|
||||
src/Excititor\__Tests\StellaOps.Excititor.Persistence.Tests\PostgresVexObservationStoreTests.cs:228: var fetched = await _store.GetByRekorUuidAsync(
|
||||
src/Excititor\__Tests\StellaOps.Excititor.Persistence.Tests\PostgresVexObservationStoreTests.cs:250: public async Task UpdateRekorLinkageAsync_ReturnsFalseForUnknownObservation()
|
||||
src/Excititor\__Tests\StellaOps.Excititor.Persistence.Tests\PostgresVexObservationStoreTests.cs:261: var updated = await _store.UpdateRekorLinkageAsync(
|
||||
src/Excititor\__Tests\StellaOps.Excititor.Persistence.Tests\PostgresVexObservationStoreTests.cs:273: public async Task GetPendingRekorAttestationAsync_ReturnsOnlyUnlinkedObservationsOrderedByCreatedAt()
|
||||
src/Excititor\__Tests\StellaOps.Excititor.Persistence.Tests\PostgresVexObservationStoreTests.cs:287: await _store.UpdateRekorLinkageAsync(_tenantId, "obs-pending-2", linkage, CancellationToken.None);
|
||||
src/Excititor\__Tests\StellaOps.Excititor.Persistence.Tests\PostgresVexObservationStoreTests.cs:290: var pending = await _store.GetPendingRekorAttestationAsync(_tenantId, 10, CancellationToken.None);
|
||||
src/Excititor\__Tests\StellaOps.Excititor.Persistence.Tests\PostgresVexObservationStoreTests.cs:291: var limited = await _store.GetPendingRekorAttestationAsync(_tenantId, 1, CancellationToken.None);
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdTests.cs:125:public class VexVerdictIdTests
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdTests.cs:132: var id = new VexVerdictId(digest);
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdGeneratorTests.cs:115: public void ComputeVexVerdictId_SameInput_ProducesSameId()
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdGeneratorTests.cs:119: var id1 = _generator.ComputeVexVerdictId(predicate);
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdGeneratorTests.cs:120: var id2 = _generator.ComputeVexVerdictId(predicate);
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdGeneratorTests.cs:127: public void ComputeVexVerdictId_DifferentStatus_ProducesDifferentId()
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdGeneratorTests.cs:132: var id1 = _generator.ComputeVexVerdictId(predicate1);
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdGeneratorTests.cs:133: var id2 = _generator.ComputeVexVerdictId(predicate2);
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdGeneratorTests.cs:149: var vexVerdictId = CreateTestVexVerdictId();
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdGeneratorTests.cs:163: var vexVerdictId = CreateTestVexVerdictId();
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdGeneratorTests.cs:181: var vexVerdictId = CreateTestVexVerdictId();
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdGeneratorTests.cs:199: var vexVerdictId = CreateTestVexVerdictId();
|
||||
src/Attestor\__Tests\StellaOps.Attestor.ProofChain.Tests\ContentAddressedIdGeneratorTests.cs:317: private static VexVerdictId CreateTestVexVerdictId() =>
|
||||
src/Excititor\__Libraries\StellaOps.Excititor.Persistence\Postgres\Repositories\PostgresVexObservationStore.cs:707: public async ValueTask<bool> UpdateRekorLinkageAsync(
|
||||
src/Excititor\__Libraries\StellaOps.Excititor.Persistence\Postgres\Repositories\PostgresVexObservationStore.cs:760: public async ValueTask<IReadOnlyList<VexObservation>> GetPendingRekorAttestationAsync(
|
||||
src/Excititor\__Libraries\StellaOps.Excititor.Persistence\Postgres\Repositories\PostgresVexObservationStore.cs:800: public async ValueTask<VexObservation?> GetByRekorUuidAsync(
|
||||
src/Attestor\StellaOps.Attestor\StellaOps.Attestor.WebService\Contracts\Proofs\ProofDtos.cs:33: public required string VexVerdictId { get; init; }
|
||||
src/Attestor\StellaOps.Attestor\StellaOps.Attestor.Tests\Api\ProofsApiContractTests.cs:42: VexVerdictId = $"sha256:{new string('c', 64)}",
|
||||
src/Attestor\StellaOps.Attestor\StellaOps.Attestor.Tests\Api\ProofsApiContractTests.cs:71: VexVerdictId = "sha256:789xyz",
|
||||
src/Attestor\StellaOps.Attestor\StellaOps.Attestor.Tests\Api\ProofsApiContractTests.cs:117: VexVerdictId = $"sha256:{new string('c', 64)}",
|
||||
src/Attestor\StellaOps.Attestor\StellaOps.Attestor.Tests\Api\ProofsApiContractTests.cs:149: VexVerdictId = $"sha256:{new string('c', 64)}",
|
||||
src/Attestor\StellaOps.Attestor\StellaOps.Attestor.Tests\Api\ProofsApiContractTests.cs:265: VexVerdictId = $"sha256:{new string('c', 64)}",
|
||||
src/Excititor\__Libraries\StellaOps.Excititor.Core\Storage\InMemoryVexStores.cs:713: public ValueTask<bool> UpdateRekorLinkageAsync(
|
||||
src/Excititor\__Libraries\StellaOps.Excititor.Core\Storage\InMemoryVexStores.cs:743: public ValueTask<IReadOnlyList<VexObservation>> GetPendingRekorAttestationAsync(
|
||||
src/Excititor\__Libraries\StellaOps.Excititor.Core\Storage\InMemoryVexStores.cs:766: public ValueTask<VexObservation?> GetByRekorUuidAsync(
|
||||
src/Attestor\StellaOps.Attestor\StellaOps.Attestor.Core.Tests\Delta\DeltaAttestationServiceTests.cs:40: Summary = new VexDeltaSummary
|
||||
src/Excititor\__Libraries\StellaOps.Excititor.Core\Observations\IVexObservationStore.cs:82: ValueTask<bool> UpdateRekorLinkageAsync(
|
||||
src/Excititor\__Libraries\StellaOps.Excititor.Core\Observations\IVexObservationStore.cs:95: ValueTask<IReadOnlyList<VexObservation>> GetPendingRekorAttestationAsync(
|
||||
src/Excititor\__Libraries\StellaOps.Excititor.Core\Observations\IVexObservationStore.cs:107: ValueTask<VexObservation?> GetByRekorUuidAsync(
|
||||
src/Excititor\__Libraries\StellaOps.Excititor.Core\Observations\VexDeltaModels.cs:366:public sealed record VexDeltaSummary
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Statements\VexVerdictStatement.cs:68: public required string VexVerdictId { get; init; }
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Statements\ProofSpineStatement.cs:50: public required string VexVerdictId { get; init; }
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Statements\VerdictOutputs.cs:26: public required string VexVerdictId { get; init; }
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Assembly\ProofSpineRequest.cs:30: public required VexVerdictId VexVerdictId { get; init; }
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.cs:11:public sealed partial class VexProofIntegrator
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.cs:25: var payload = new VexVerdictProofPayload
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.cs:33: VexVerdictId = "", // Will be computed
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.cs:41: payload = payload with { VexVerdictId = vexId };
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.Metadata.cs:8:/// Extended metadata generation methods for VexProofIntegrator.
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.Metadata.cs:10:public sealed partial class VexProofIntegrator
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.Metadata.cs:16: public static (VexVerdictStatement Statement, VexVerdictProofPayload ProofPayload) GenerateWithProofMetadata(
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.Metadata.cs:25: var proofPayload = new VexVerdictProofPayload
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.Metadata.cs:33: VexVerdictId = "", // Will be computed
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.Metadata.cs:41: proofPayload = proofPayload with { VexVerdictId = vexId };
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexVerdictProofPayload.cs:8:public sealed record VexVerdictProofPayload
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexVerdictProofPayload.cs:29: public required string VexVerdictId { get; init; }
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.Helpers.cs:8:/// Helper methods for VexProofIntegrator.
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.Helpers.cs:10:public sealed partial class VexProofIntegrator
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.Helpers.cs:76: private static VexVerdictPayload ConvertToStandardPayload(VexVerdictProofPayload proofPayload)
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Generators\VexProofIntegrator.Helpers.cs:86: VexVerdictId = proofPayload.VexVerdictId
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Identifiers\ContentAddressedIdGenerator.cs:43: public VexVerdictId ComputeVexVerdictId(VexPredicate predicate)
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Identifiers\ContentAddressedIdGenerator.cs:46: var canonical = CanonicalizeVersioned(predicate with { VexVerdictId = null });
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Identifiers\ContentAddressedIdGenerator.cs:47: return new VexVerdictId(HashSha256Hex(canonical));
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Identifiers\ContentAddressedIdGenerator.cs:54: VexVerdictId vexVerdictId)
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Identifiers\IContentAddressedIdGenerator.cs:13: VexVerdictId ComputeVexVerdictId(VexPredicate predicate);
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Identifiers\IContentAddressedIdGenerator.cs:19: VexVerdictId vexVerdictId);
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Identifiers\VexVerdictId.cs:3:public sealed record VexVerdictId(string Digest) : ContentAddressedId("sha256", Digest)
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Identifiers\VexVerdictId.cs:7: public new static VexVerdictId Parse(string value) => new(Sha256IdParser.Parse(value, "VEXVerdictID"));
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\ProofSpinePredicate.cs:18: public required string VexVerdictId { get; init; }
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexDeltaStatement.cs:2:// VexDeltaStatement.cs
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexDeltaStatement.cs:13:public sealed record VexDeltaStatement
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexAttestationPredicate.cs:56: public VexMergeTrace? MergeTrace { get; init; }
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexDeltaPredicate.cs:46: public ImmutableArray<VexDeltaStatement> Added { get; init; } = [];
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexDeltaPredicate.cs:52: public ImmutableArray<VexDeltaStatement> Removed { get; init; } = [];
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexDeltaPredicate.cs:58: public ImmutableArray<VexDeltaChange> Changed { get; init; } = [];
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexDeltaPredicate.cs:64: public required VexDeltaSummary Summary { get; init; }
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexMergeTrace.cs:2:// VexMergeTrace.cs
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexMergeTrace.cs:13:public sealed record VexMergeTrace
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexPredicate.cs:26: public string? VexVerdictId { get; init; }
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexDeltaSummary.cs:2:// VexDeltaSummary.cs
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexDeltaSummary.cs:13:public sealed record VexDeltaSummary
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexDeltaChange.cs:2:// VexDeltaChange.cs
|
||||
src/Attestor\__Libraries\StellaOps.Attestor.ProofChain\Predicates\VexDeltaChange.cs:13:public sealed record VexDeltaChange
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
87fe0bf8f98a270f3a165c5135376873633672f840f5f6579273dabab3f048ba
|
||||
@@ -0,0 +1 @@
|
||||
/var/run/postgresql:5432 - accepting connections
|
||||
@@ -0,0 +1,8 @@
|
||||
CREATE SCHEMA
|
||||
CREATE SCHEMA
|
||||
CREATE SCHEMA
|
||||
CREATE TABLE
|
||||
CREATE TABLE
|
||||
CREATE TABLE
|
||||
CREATE TABLE
|
||||
INSERT 0 2
|
||||
@@ -0,0 +1,42 @@
|
||||
SET
|
||||
ALTER TABLE
|
||||
CREATE INDEX
|
||||
CREATE INDEX
|
||||
CREATE INDEX
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
ALTER TABLE
|
||||
CREATE INDEX
|
||||
COMMENT
|
||||
COMMENT
|
||||
ALTER TABLE
|
||||
CREATE INDEX
|
||||
CREATE INDEX
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
ALTER TABLE
|
||||
CREATE INDEX
|
||||
CREATE INDEX
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
CREATE TABLE
|
||||
CREATE INDEX
|
||||
CREATE INDEX
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
@@ -0,0 +1,20 @@
|
||||
table_schema | table_name | column_name
|
||||
--------------+-----------------------------+-----------------------
|
||||
excititor | vex_observations | rekor_entry_body_hash
|
||||
excititor | vex_observations | rekor_entry_kind
|
||||
excititor | vex_observations | rekor_inclusion_proof
|
||||
excititor | vex_observations | rekor_integrated_time
|
||||
excititor | vex_observations | rekor_linked_at
|
||||
excititor | vex_observations | rekor_log_index
|
||||
excititor | vex_observations | rekor_log_url
|
||||
excititor | vex_observations | rekor_tree_root
|
||||
excititor | vex_observations | rekor_tree_size
|
||||
excititor | vex_observations | rekor_uuid
|
||||
excititor | vex_statement_change_events | rekor_entry_id
|
||||
excititor | vex_statement_change_events | rekor_log_index
|
||||
vexhub | vex_statements | rekor_inclusion_proof
|
||||
vexhub | vex_statements | rekor_integrated_time
|
||||
vexhub | vex_statements | rekor_log_index
|
||||
vexhub | vex_statements | rekor_uuid
|
||||
(16 rows)
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
schemaname | tablename | indexname
|
||||
------------+-----------------------------+---------------------------------------
|
||||
excititor | vex_observations | idx_vex_observations_pending_rekor
|
||||
excititor | vex_observations | idx_vex_observations_rekor_log_index
|
||||
excititor | vex_observations | idx_vex_observations_rekor_uuid
|
||||
excititor | vex_statement_change_events | idx_vex_change_events_rekor
|
||||
vexhub | vex_statements | idx_vexhub_statements_rekor_log_index
|
||||
vexhub | vex_statements | idx_vexhub_statements_rekor_uuid
|
||||
(6 rows)
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
UPDATE 1
|
||||
observation_id | rekor_uuid | rekor_log_index
|
||||
----------------+-----------------+-----------------
|
||||
obs-linked | uuid-obs-linked | 7001
|
||||
(1 row)
|
||||
|
||||
observation_id | rekor_uuid
|
||||
----------------+------------
|
||||
obs-pending |
|
||||
(1 row)
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
SET
|
||||
ALTER TABLE
|
||||
CREATE INDEX
|
||||
CREATE INDEX
|
||||
CREATE INDEX
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
ALTER TABLE
|
||||
CREATE INDEX
|
||||
COMMENT
|
||||
COMMENT
|
||||
ALTER TABLE
|
||||
CREATE INDEX
|
||||
CREATE INDEX
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
ALTER TABLE
|
||||
CREATE INDEX
|
||||
CREATE INDEX
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
CREATE TABLE
|
||||
CREATE INDEX
|
||||
CREATE INDEX
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
COMMENT
|
||||
@@ -0,0 +1,5 @@
|
||||
observation_id | rekor_uuid | rekor_log_index | rekor_log_url
|
||||
----------------+-----------------+-----------------+--------------------------
|
||||
obs-linked | uuid-obs-linked | 7001 | https://rekor.local.test
|
||||
(1 row)
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
stella-vex-rekor-tier2-run001
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"filesModified": [
|
||||
"src/Excititor/__Libraries/StellaOps.Excititor.Persistence/Postgres/Repositories/PostgresVexObservationStore.cs",
|
||||
"src/Excititor/__Tests/StellaOps.Excititor.Persistence.Tests/PostgresVexObservationStoreTests.cs"
|
||||
],
|
||||
"testsAdded": [
|
||||
"PostgresVexObservationStoreTests.UpdateRekorLinkageAsync_RoundTripsLinkageAndLookupByUuid",
|
||||
"PostgresVexObservationStoreTests.UpdateRekorLinkageAsync_ReturnsFalseForUnknownObservation",
|
||||
"PostgresVexObservationStoreTests.GetPendingRekorAttestationAsync_ReturnsOnlyUnlinkedObservationsOrderedByCreatedAt"
|
||||
],
|
||||
"description": "Added missing behavioral coverage for Rekor linkage repository methods and fixed Postgres store schema consistency by using vex.observations with ensured Rekor columns/indexes."
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"previousFailures": [
|
||||
"PostgresVexObservationStoreTests.UpdateRekorLinkageAsync_RoundTripsLinkageAndLookupByUuid",
|
||||
"PostgresVexObservationStoreTests.UpdateRekorLinkageAsync_ReturnsFalseForUnknownObservation",
|
||||
"PostgresVexObservationStoreTests.GetPendingRekorAttestationAsync_ReturnsOnlyUnlinkedObservationsOrderedByCreatedAt"
|
||||
],
|
||||
"retestResults": [
|
||||
"dotnet build StellaOps.Excititor.Persistence.csproj: pass",
|
||||
"dotnet test StellaOps.Excititor.Persistence.Tests.csproj: pass (54/54)",
|
||||
"dotnet test StellaOps.Excititor.Attestation.Tests.csproj: pass (17/17)"
|
||||
],
|
||||
"verdict": "pass"
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"type": "source",
|
||||
"module": "devops",
|
||||
"feature": "vex-rekor-linkage",
|
||||
"runId": "run-001",
|
||||
"capturedAtUtc": "2026-02-11T12:24:12.2576938Z",
|
||||
"filesChecked": [
|
||||
"devops/database/migrations/V20260117__vex_rekor_linkage.sql",
|
||||
"src/Excititor/__Libraries/StellaOps.Excititor.Persistence/Postgres/Repositories/PostgresVexObservationStore.cs",
|
||||
"src/Excititor/__Libraries/StellaOps.Excititor.Core/Observations/IVexObservationStore.cs",
|
||||
"src/Excititor/__Tests/StellaOps.Excititor.Persistence.Tests/PostgresVexObservationStoreTests.cs",
|
||||
"src/Excititor/__Tests/StellaOps.Excititor.Attestation.Tests/VexRekorAttestationFlowTests.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Generators/VexProofIntegrator.Helpers.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Generators/VexProofIntegrator.Metadata.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Generators/VexVerdictProofPayload.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Identifiers/VexVerdictId.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Predicates/VexDeltaChange.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Predicates/VexDeltaStatement.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Predicates/VexDeltaSummary.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Predicates/VexMergeTrace.cs",
|
||||
"devops/compose/docker-compose.stella-ops.yml"
|
||||
],
|
||||
"found": [
|
||||
"devops/database/migrations/V20260117__vex_rekor_linkage.sql",
|
||||
"src/Excititor/__Libraries/StellaOps.Excititor.Persistence/Postgres/Repositories/PostgresVexObservationStore.cs",
|
||||
"src/Excititor/__Libraries/StellaOps.Excititor.Core/Observations/IVexObservationStore.cs",
|
||||
"src/Excititor/__Tests/StellaOps.Excititor.Persistence.Tests/PostgresVexObservationStoreTests.cs",
|
||||
"src/Excititor/__Tests/StellaOps.Excititor.Attestation.Tests/VexRekorAttestationFlowTests.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Generators/VexProofIntegrator.Helpers.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Generators/VexProofIntegrator.Metadata.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Generators/VexVerdictProofPayload.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Identifiers/VexVerdictId.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Predicates/VexDeltaChange.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Predicates/VexDeltaStatement.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Predicates/VexDeltaSummary.cs",
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/Predicates/VexMergeTrace.cs",
|
||||
"devops/compose/docker-compose.stella-ops.yml"
|
||||
],
|
||||
"missing": [
|
||||
|
||||
],
|
||||
"declarationChecks": [
|
||||
{
|
||||
"pattern": "class PostgresVexObservationStore",
|
||||
"found": true,
|
||||
"sample": "16:public sealed class PostgresVexObservationStore : RepositoryBase\u003cExcititorDataSource\u003e, IVexObservationStore"
|
||||
},
|
||||
{
|
||||
"pattern": "UpdateRekorLinkageAsync",
|
||||
"found": true,
|
||||
"sample": "731: public async ValueTask\u003cbool\u003e UpdateRekorLinkageAsync("
|
||||
},
|
||||
{
|
||||
"pattern": "GetPendingRekorAttestationAsync",
|
||||
"found": true,
|
||||
"sample": "784: public async ValueTask\u003cIReadOnlyList\u003cVexObservation\u003e\u003e GetPendingRekorAttestationAsync("
|
||||
},
|
||||
{
|
||||
"pattern": "GetByRekorUuidAsync",
|
||||
"found": true,
|
||||
"sample": "824: public async ValueTask\u003cVexObservation?\u003e GetByRekorUuidAsync("
|
||||
},
|
||||
{
|
||||
"pattern": "UpdateRekorLinkageAsync_RoundTripsLinkageAndLookupByUuid",
|
||||
"found": true,
|
||||
"sample": "192: public async Task UpdateRekorLinkageAsync_RoundTripsLinkageAndLookupByUuid()"
|
||||
},
|
||||
{
|
||||
"pattern": "GetPendingRekorAttestationAsync_ReturnsOnlyUnlinkedObservationsOrderedByCreatedAt",
|
||||
"found": true,
|
||||
"sample": "273: public async Task GetPendingRekorAttestationAsync_ReturnsOnlyUnlinkedObservationsOrderedByCreatedAt()"
|
||||
},
|
||||
{
|
||||
"pattern": "record VexVerdictProofPayload",
|
||||
"found": true,
|
||||
"sample": "8:public sealed record VexVerdictProofPayload"
|
||||
},
|
||||
{
|
||||
"pattern": "record VexVerdictId",
|
||||
"found": true,
|
||||
"sample": "3:public sealed record VexVerdictId(string Digest) : ContentAddressedId(\"sha256\", Digest)"
|
||||
}
|
||||
],
|
||||
"verdict": "pass"
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"type": "build",
|
||||
"module": "devops",
|
||||
"feature": "vex-rekor-linkage",
|
||||
"runId": "run-001",
|
||||
"capturedAtUtc": "2026-02-11T12:21:56.6069262Z",
|
||||
"project": "src/Excititor/__Libraries/StellaOps.Excititor.Persistence/StellaOps.Excititor.Persistence.csproj",
|
||||
"additionalProjects": [
|
||||
"src/Attestor/__Libraries/StellaOps.Attestor.ProofChain/StellaOps.Attestor.ProofChain.csproj",
|
||||
"src/Excititor/__Tests/StellaOps.Excititor.Persistence.Tests/StellaOps.Excititor.Persistence.Tests.csproj",
|
||||
"src/Excititor/__Tests/StellaOps.Excititor.Attestation.Tests/StellaOps.Excititor.Attestation.Tests.csproj"
|
||||
],
|
||||
"buildResult": "pass",
|
||||
"testResult": "pass",
|
||||
"testsRun": 71,
|
||||
"testsPassed": 71,
|
||||
"testsFailed": 0,
|
||||
"retestPerformed": true,
|
||||
"errors": [
|
||||
|
||||
],
|
||||
"logs": [
|
||||
"evidence/01-build-attestor-proofchain.txt",
|
||||
"evidence/01a-build-excititor-persistence.txt",
|
||||
"evidence/01b-build-excititor-persistence-tests.txt",
|
||||
"evidence/02-test-postgres-vex-observation-store.txt",
|
||||
"evidence/02a-test-vex-rekor-attestation-flow.txt",
|
||||
"evidence/01c-build-excititor-persistence-retest.txt",
|
||||
"evidence/02b-test-excititor-persistence-fullsuite-retest.txt"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"type": "integration",
|
||||
"module": "devops",
|
||||
"feature": "vex-rekor-linkage",
|
||||
"runId": "run-001",
|
||||
"capturedAtUtc": "2026-02-11T12:21:56.6069262Z",
|
||||
"testHarness": "Excititor persistence behavioral tests plus dockerized PostgreSQL migration replay and SQL linkage queries.",
|
||||
"testsRun": 71,
|
||||
"testsPassed": 71,
|
||||
"testsFailed": 0,
|
||||
"behaviorVerified": [
|
||||
"Rekor linkage repository methods update/read/pending-path behavior passes in Postgres-backed persistence tests, including positive and negative cases.",
|
||||
"VEX-Rekor attestation flow tests pass for success and no-linkage scenarios.",
|
||||
"Migration V20260117 adds required Rekor linkage columns and indexes on excititor.vex_observations, excititor.vex_statement_change_events, and vexhub.vex_statements.",
|
||||
"Linked observation lookup and pending (unlinked) observation query behavior works via direct SQL interactions.",
|
||||
"Reapplying migration preserves existing linkage fields for previously linked observations (idempotent migration behavior)."
|
||||
],
|
||||
"logs": [
|
||||
"evidence/02b-test-excititor-persistence-fullsuite-retest.txt",
|
||||
"evidence/02a-test-vex-rekor-attestation-flow.txt",
|
||||
"evidence/03b-tier2-setup-baseline-schema.txt",
|
||||
"evidence/03c-tier2-apply-vex-rekor-migration.txt",
|
||||
"evidence/03d-tier2-migration-columns.txt",
|
||||
"evidence/03e-tier2-migration-indexes.txt",
|
||||
"evidence/03f-tier2-positive-negative-linkage-queries.txt",
|
||||
"evidence/03g-tier2-reapply-migration.txt",
|
||||
"evidence/03h-tier2-preserved-linkage-after-rerun.txt"
|
||||
],
|
||||
"verdict": "pass"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"rootCause": "Repository Rekor-linkage SQL paths targeted excititor.vex_observations while the store creates and persists data in vex.observations, causing relation-not-found and unreachable linkage rows in persistence tests.",
|
||||
"category": "bug",
|
||||
"affectedFiles": [
|
||||
"src/Excititor/__Libraries/StellaOps.Excititor.Persistence/Postgres/Repositories/PostgresVexObservationStore.cs",
|
||||
"src/Excititor/__Tests/StellaOps.Excititor.Persistence.Tests/PostgresVexObservationStoreTests.cs"
|
||||
],
|
||||
"confidence": 0.99
|
||||
}
|
||||
Reference in New Issue
Block a user