- Added Program.cs to set up the web application with Serilog for logging, health check endpoints, and a placeholder admission endpoint. - Configured Kestrel server to use TLS 1.3 and handle client certificates appropriately. - Created StellaOps.Zastava.Webhook.csproj with necessary dependencies including Serilog and Polly. - Documented tasks in TASKS.md for the Zastava Webhook project, outlining current work and exit criteria for each task.
Scanner Analyzer Microbench Harness
The bench harness exercises the language analyzers against representative filesystem layouts so that regressions are caught before they ship.
Layout
run-bench.js– Node.js script that traverses the samplenode_modules/andsite-packages/trees, replicating the package discovery work performed by the upcoming analyzers.config.json– Declarative list of scenarios the harness executes. Each scenario points at a directory insamples/.baseline.csv– Reference numbers captured on the 4 vCPU warm rig described indocs/12_PERFORMANCE_WORKBOOK.md. CI publishes fresh CSVs so perf trends stay visible.
Running locally
cd bench/Scanner.Analyzers
node run-bench.js --out baseline.csv --samples ../..
The harness prints a table to stdout and writes the CSV (if --out is specified) with the following headers:
scenario,iterations,sample_count,mean_ms,p95_ms,max_ms
Use --iterations to override the default (5 passes per scenario) and --threshold-ms to customize the failure budget. Budgets default to 5 000 ms, aligned with the SBOM compose objective.
Adding scenarios
- Drop the fixture tree under
samples/<area>/.... - Append a new scenario entry to
config.jsondescribing:id– snake_case scenario name (also used in CSV).label– human-friendly description shown in logs.root– path to the directory that will be scanned.matcher– glob describing files that will be parsed (POSIX**patterns).parser–nodeorpythonto choose the metadata reader.
- Re-run
node run-bench.js --out baseline.csv. - Commit both the fixture and updated baseline.
The harness is intentionally dependency-free to remain runnable inside minimal CI runners.