GapReport.java

// SPDX-License-Identifier: Apache-2.0
// Copyright 2026 Egothor
// Copyright 2026 Accenture
package org.egothor.methodatlas.gap;

import java.util.List;
import java.util.Map;

/**
 * Top-level security-domain gap report written to disk by the {@code -gap-report} mode.
 *
 * <p>
 * The report lists each of the nine built-in taxonomy domains with the count of
 * covering security tests and the names of those tests. Domains with zero covering
 * tests are also collected in {@link #gaps()} for quick auditability.
 * </p>
 *
 * <p>
 * Package-private because nothing outside the {@code gap} package needs to construct
 * or inspect the report directly; the JSON form written by {@link GapReportWriter}
 * is the contract.
 * </p>
 *
 * @param schemaVersion       report schema version; currently {@code "1"}
 * @param generatedUtc        ISO-8601 instant at report-creation time
 * @param methodAtlasVersion  tool version string, or {@code "dev"}
 * @param domains             insertion-ordered map of taxonomy tag to per-domain
 *                            coverage entry; all nine canonical tags are always
 *                            present (count may be zero); unmodifiable
 * @param gaps                tags from {@code domains} whose {@link GapReportDomain#count()}
 *                            is zero, in canonical taxonomy order; unmodifiable
 * @param summary             aggregate counts over all domains
 */
/* default */ record GapReport(
        String schemaVersion,
        String generatedUtc,
        String methodAtlasVersion,
        Map<String, GapReportDomain> domains,
        List<String> gaps,
        GapReportSummary summary) {
}