Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
- Introduced `SbomService` tasks documentation. - Updated `StellaOps.sln` to include new projects: `StellaOps.AirGap.Time` and `StellaOps.AirGap.Importer`. - Added unit tests for `BundleImportPlanner`, `DsseVerifier`, `ImportValidator`, and other components in the `StellaOps.AirGap.Importer.Tests` namespace. - Implemented `InMemoryBundleRepositories` for testing bundle catalog and item repositories. - Created `MerkleRootCalculator`, `RootRotationPolicy`, and `TufMetadataValidator` tests. - Developed `StalenessCalculator` and `TimeAnchorLoader` tests in the `StellaOps.AirGap.Time.Tests` namespace. - Added `fetch-sbomservice-deps.sh` script for offline dependency fetching.
6.2 KiB
6.2 KiB
Scanner Analyzer Prep · Sprint 0132
This note captures the unblockers promised in PREP tasks for Sprint 0132. Each subsection gives the artifact location, assumption set, and the handoff needed by downstream implementation tasks.
SCANNER-ANALYZERS-LANG-11-003 (runtime fusion)
- Objective: Define the runtime evidence ingest contract to merge AssemblyLoad/Resolving/PInvoke signals with static edges from 11-002.
- Inputs required:
- Static edge export format from 11-002 (AssemblyRef/ModuleRef/PInvoke with reason codes).
- Event listener tap points:
AssemblyLoadContext.Resolving,AssemblyLoad,NativeLibrary.SetDllImportResolver,DynamicDependencyattributes, and optional ETW providerMicrosoft-Windows-DotNETRuntime(keyword 0x8, task AssemblyLoad).
- Runtime evidence envelope (AOC-aligned):
{ "runtime_observation_id": "uuid", "assembly_name": "System.Text.Json", "kind": "assembly-load|p-invoke|dynamic-dependency", "source": "Resolving|AssemblyLoad|NativeLibrary|ETW", "details": { "requested_name": "System.Text.Json", "resolved_path": "<normalized absolute path>", "assembly_version": "8.0.0.0", "culture": "neutral", "package_purl": "pkg:nuget/system.text.json@8.0.0", "confidence": 0.72, "reason_code": "runtime-resolve" }, "timestamp_utc": "2025-11-20T00:00:00Z" } - Merge rules for downstream 11-003 implementation:
- De-dup edges by (assembly_name, resolved_path, kind).
- Prefer static edge confidence when present; runtime adds
confidence_bonus = +0.1but never exceeds 1.0. - Keep provenance:
edge.provenance = { "static": bool, "runtime": bool }.
- Publication: This doc section is the frozen location for the runtime ingest contract; downstream tasks should reference this path.
SCANNER-ANALYZERS-LANG-11-004 (observation export → writer/SBOM)
- Objective: Define the observation payload emitted to Scanner writer and SBOM entrypoint tagging.
- Export envelope (AOC-compliant):
{ "entrypoints": [ { "label": "app", "rids": ["win-x64","linux-x64"], "tfms": ["net8.0","net8.0-windows"], "command": "dotnet ./bin/app.dll", "sources": ["src/App/Program.cs"], "rank": 1 } ], "dependency_edges": [ { "from": "app", "to": "pkg:nuget/system.text.json@8.0.0", "reason_code": "assembly-ref", "confidence": 0.86, "provenance": {"static": true, "runtime": false} } ], "environment_profiles": { "tfm": "net8.0", "rid": "linux-x64", "host_policy": "portable", "features": ["singlefile:false","trimmed:false","nativeaot:false"] } } - Writer handoff:
- Serialize as deterministic JSON (sorted keys) to the Scanner writer contract
writer/observations/lang/dotnet. - Attach
sbom_entrypoint_tagsderived from entrypoint labels to feed SBOM Service tagging.
- Serialize as deterministic JSON (sorted keys) to the Scanner writer contract
- Publication: Payload shape and field meanings fixed here for Sprint 0132 downstream work.
SCANNER-ANALYZERS-LANG-11-005 (fixtures & benchmarks)
- Objective: Provide fixture plan so QA can start without waiting on further design.
- Fixture matrix:
- Framework-dependent:
net8.0,net9.0-previewsample apps (console + web minimal API). - Self-contained:
linux-x64trimmed vs non-trimmed. - Single-file:
win-x64single-file publish, include native hosting bundle. - NativeAOT:
linux-x64HelloWorld + P/Invoke stub. - Multi-RID: RID graph
linux-x64,linux-arm64,win-x64with RID fallback expectations.
- Framework-dependent:
- Locations: place fixtures under
src/Scanner/__Tests/Fixtures/DotNet/11-005/*; store expected observation JSON in__Tests/Fixtures/DotNet/11-005/expected/*.jsonwith sorted keys. - Bench envelopes:
- Target <150 ms p95 per project scan on dev laptop, <25 MB heap delta; capture via BenchmarkDotNet and report to
__Benchmarks/11-005.md.
- Target <150 ms p95 per project scan on dev laptop, <25 MB heap delta; capture via BenchmarkDotNet and report to
- Determinism: lock timestamps to
1970-01-01T00:00:00Zin serialized outputs; stable ordering by (entrypoint label, dependency to PURL, reason_code).
SCANNER-ANALYZERS-NATIVE-20-002 (ELF declared-dependency writer contract)
- Objective: Unblock writer schema so native analyzer can emit DT_NEEDED/DT_RPATH/DT_RUNPATH data.
- Edge record (per ELF binary):
{ "image": "libssl.so.3", "build_id": "cafef00d", "rpath": ["$ORIGIN/lib","/usr/lib"], "runpath": ["$ORIGIN","/opt/openssl"], "needed": [ {"name": "libcrypto.so.3", "slot": 0, "version": "OPENSSL_3.0", "reason_code": "elf-dtneeded"}, {"name": "libpthread.so.0", "slot": 1, "version": null, "reason_code": "elf-dtneeded"} ], "interpreter": "/lib64/ld-linux-x86-64.so.2", "origin": "virtual-fs", "confidence": 0.82 } - Writer path:
writer/observations/native/elf-declared-deps(append-only NDJSON; sorted by image name then slot). - Redaction: no host absolute paths; resolve
$ORIGINusing virtual image root only. - Publication: schema above is the agreed baseline for downstream tasks; time-boxed to Sprint 0132.
SCANNER-ANALYZERS-NODE-22-001 (isolated runner / scoped build graph)
- Objective: Provide a deterministic way to run Node analyzer tests without fanning out the whole solution.
- Approach:
- Add target solution filter:
src/Scanner/StellaOps.Scanner.Analyzers.Lang.Node.slnfincluding only Node projects + shared test utilities. - Introduce
Directory.Build.propsoverride forLang.Nodetests to disable cross-solution restore (DisableTransitiveProjectReferences=true). - Test command for CI + local:
dotnet test src/Scanner/StellaOps.Scanner.Analyzers.Lang.Node.Tests/StellaOps.Scanner.Analyzers.Lang.Node.Tests.csproj /p:DisableTransitiveProjectReferences=true --no-restore --logger:"console;verbosity=minimal". - Cache seeds: copy pnpm/Yarn fixtures into
obj/fixtures-cacheduring test init; deterministic zip timestamps set to1980-01-01.
- Add target solution filter:
- Publication: This runbook unblocks execution while broader solution build contention is resolved; downstream tasks should adopt this invocation until Sprint 131 completes.
Owners: Scanner EPDR Guild (DotNet), SBOM Service Guild, Native Analyzer Guild, Node Analyzer Guild.
Status: All PREP artifacts published 2025-11-20.