tiny.closure.qualify
Defined in tiny.closure.
API (27)
Actions
Public operations.
Types and contracts
Public types and contracts.
BoundBuildModeCapacityCaseCaptureCellCellKindEvidenceKindFrozenOutcomeCountsPlanRequirementRowStatisticsSummaryThresholdThresholdKindTransition
Values and defaults
Public values and defaults.
Source
Source: lib/closure/src/qualify/model.zig:55
Source: lib/closure/src/qualify/model.zig:29
pub const BuildMode = enum(u8) { debug, release_safe, release_fast, release_small,};Source: lib/closure/src/qualify/model.zig:36
pub const CapacityCase = enum(u8) { none, at_capacity, over_capacity,};Source: lib/closure/src/qualify/model.zig:94
pub const Capture = enum(u8) { complete, truncated, capacity_arithmetic_overflow, unsupported, insufficient_samples, missing_threshold, explorer_frontier_exhausted, trace_capacity_exceeded,};Source: lib/closure/src/qualify/model.zig:60
pub const Cell = struct { id: schema.Name, owner: schema.Name, requirement: Requirement, kind: CellKind, evidence: EvidenceKind, workload: schema.Descriptor, phase: schema.Phase, scale: u64, build_mode: BuildMode, fault: schema.Descriptor, overload_counter: schema.Name, loss_counter: schema.Name, bound_start: u16, bound_count: u16, seed_start: u16, seed_count: u16, repetitions: u32, threshold: Threshold, capacity_case: CapacityCase, capacity: u64, work_max: u64, trace_steps_max: u64,};Source: lib/closure/src/qualify/model.zig:14
pub const CellKind = enum(u8) { correctness, slo,};Source: lib/closure/src/qualify/model.zig:19
pub const EvidenceKind = enum(u8) { proof, finite_exhaustive, simulation, qemu, hardware, assumption, measurement,};Source: lib/closure/src/qualify/model.zig:172
Source: lib/closure/src/qualify/model.zig:113
pub const OutcomeCounts = struct { offered: u64, accepted: u64, completed: u64, rejected: u64, dropped: u64, outstanding: u64,};Source: lib/closure/src/qualify/model.zig:85
pub const Plan = struct { claim: schema.Descriptor, artifact_sha256: schema.Digest, execution_profile_sha256: schema.Digest, cells: []const Cell, bounds: []const Bound, seeds: []const u64,};Source: lib/closure/src/qualify/model.zig:9
pub const Requirement = enum(u8) { required, excluded,};Source: lib/closure/src/qualify/model.zig:142
pub const Row = struct { cell: schema.Name, evidence: EvidenceKind, verdict: schema.Verdict, capture: Capture, contract_pass: bool, outcomes: OutcomeCounts, before_digest: schema.Digest, after_digest: schema.Digest, effect_before_digest: schema.Digest, effect_after_digest: schema.Digest, high_water: u64, work: u64, allocation_count_after_seal: u64, storage_address_before: usize, storage_address_after: usize, storage_capacity_before: u64, storage_capacity_after: u64, transition: Transition, overload_count_before: u64, overload_count_after: u64, loss_count_before: u64, loss_count_after: u64, undeclared_effect_count: u64, undeclared_state_change_count: u64, statistics: Statistics, evidence_path: schema.Descriptor, trace_path: schema.Descriptor,};Source: lib/closure/src/qualify/model.zig:122
pub const Statistics = struct { present: bool = false, interval_present: bool = false, interleaved: bool = false, baseline_profile_sha256: schema.Digest = schema.Digest.zero(), candidate_profile_sha256: schema.Digest = schema.Digest.zero(), sample_count: u32 = 0, baseline_count: u32 = 0, candidate_count: u32 = 0, minimum: i64 = 0, p50: i64 = 0, p95: i64 = 0, p99: i64 = 0, maximum: i64 = 0, interval_low: i64 = 0, interval_high: i64 = 0, baseline_high_water: u64 = 0, candidate_high_water: u64 = 0,};Source: lib/closure/src/qualify/model.zig:178
pub const Summary = struct { verdict: schema.Verdict, passed: u16, refuted: u16, inconclusive: u16, not_exercised: u16, work: u64, high_water: u64, allocation_count_after_seal: u64,};Source: lib/closure/src/qualify/model.zig:49
pub const Threshold = struct { kind: ThresholdKind, value: i64 = 0, confidence_ppm: u32 = 0,};Source: lib/closure/src/qualify/model.zig:42
pub const ThresholdKind = enum(u8) { none, correctness, absolute_max, baseline_delta_max,};Source: lib/closure/src/qualify/model.zig:105
pub const Transition = enum(u8) { none, reject, drop, replace, backpressure,};Source: lib/closure/src/qualify/encode.zig:12
pub fn freeze( plan: model.Plan, output: []u8,) Error!model.Frozen { try owner.validatePlan(plan); const length = try json.measure(writePlan, .{plan}); if (length > output.len or length > model.plan_bytes_max) { return error.ReceiptCapacityExceeded; } const encoded = try json.render( output, length, writePlan, .{plan}, ); var plan_digest = schema.Digest.zero(); std.crypto.hash.sha2.Sha256.hash( encoded, &plan_digest.bytes, .{}, ); return .{ .plan = plan, .sha256 = plan_digest, .bytes = encoded, };}Source: lib/closure/src/qualify/encode.zig:42
pub fn receipt( frozen: model.Frozen, rows: []const model.Row, output: []u8,) Error![]const u8 { const summary = try owner.evaluate(frozen, rows); const length = try json.measure( writeReceipt, .{ frozen, rows, summary }, ); if (length > output.len or length > model.receipt_bytes_max) { return error.ReceiptCapacityExceeded; } return try json.render( output, length, writeReceipt, .{ frozen, rows, summary }, );}Source: lib/closure/src/qualify/model.zig:4
pub const bounds_max: usize = 256;Source: lib/closure/src/qualify/model.zig:3
pub const cells_max: usize = 64;Source: lib/closure/src/qualify/model.zig:6
pub const plan_bytes_max: usize = 256 * 1_024;Source: lib/closure/src/qualify/model.zig:7
pub const receipt_bytes_max: usize = 512 * 1_024;Source: lib/closure/src/qualify/model.zig:5
pub const seeds_max: usize = 256;Source: lib/closure/src/qualify/owner.zig:132
pub fn classify( cell: *const model.Cell, row: *const model.Row,) schema.Verdict { if (cell.requirement == .excluded) return .not_exercised; if (row.capture != .complete) return .inconclusive; if (cell.threshold.kind == .none) return .inconclusive; if (cell.evidence == .assumption) return .inconclusive; if (!evidenceComplete(cell, row)) return .refuted; if (!row.contract_pass) return .refuted; return switch (cell.kind) { .correctness => if (cell.threshold.kind == .correctness) .pass else .inconclusive, .slo => sloVerdict(cell, row.statistics), };}Source: lib/closure/src/qualify/owner.zig:58
pub fn evaluate( frozen: model.Frozen, rows: []const model.Row,) Error!model.Summary { try validatePlan(frozen.plan); if (!frozen.sha256.isKnown()) return error.PlanDigestMissing; if (rows.len != frozen.plan.cells.len) { return error.ResultCountMismatch; } var summary = model.Summary{ .verdict = .pass, .passed = 0, .refuted = 0, .inconclusive = 0, .not_exercised = 0, .work = 0, .high_water = 0, .allocation_count_after_seal = 0, }; for (frozen.plan.cells, rows, 0..) |*cell, *row, index| { if (!cell.id.eql(&row.cell)) return error.ResultOrderMismatch; if (row.evidence != cell.evidence) return error.EvidenceMismatch; var expected = classify(cell, row); if (expected == .pass and cell.capacity_case != .none and !pairEvidenceEquivalent( frozen.plan, rows, index, )) { expected = .refuted; } if (expected == .pass and cell.kind == .slo and (!row.statistics.baseline_profile_sha256.eql( &frozen.plan.execution_profile_sha256, ) or !row.statistics.candidate_profile_sha256.eql( &frozen.plan.execution_profile_sha256, ))) { expected = .refuted; } if (row.verdict != expected) return error.VerdictMismatch; switch (row.verdict) { .pass => summary.passed += 1, .refuted => summary.refuted += 1, .inconclusive => summary.inconclusive += 1, .not_exercised => summary.not_exercised += 1, } if (cell.requirement == .required) { summary.work = std.math.add( u64, summary.work, row.work, ) catch std.math.maxInt(u64); summary.high_water = @max(summary.high_water, row.high_water); summary.allocation_count_after_seal = std.math.add( u64, summary.allocation_count_after_seal, row.allocation_count_after_seal, ) catch std.math.maxInt(u64); } } summary.verdict = if (summary.refuted != 0) .refuted else if (summary.inconclusive != 0) .inconclusive else .pass; return summary;}Source: lib/closure/src/qualify/owner.zig:24
pub fn validatePlan(plan: model.Plan) Error!void { if (plan.cells.len == 0) return error.PlanEmpty; if (plan.cells.len > model.cells_max or plan.bounds.len > model.bounds_max or plan.seeds.len > model.seeds_max) { return error.CellCapacityExceeded; } if (plan.claim.isEmpty() or !plan.artifact_sha256.isKnown() or !plan.execution_profile_sha256.isKnown()) { return error.PlanDigestMissing; } var required_count: u16 = 0; var work_max: u64 = 0; for (plan.cells, 0..) |*cell, index| { try validateCell(plan, cell); if (cell.requirement == .required) { required_count += 1; work_max = std.math.add( u64, work_max, cell.work_max, ) catch return error.PlanWorkOverflow; } for (plan.cells[0..index]) |*prior| { if (cell.id.eql(&prior.id)) return error.CellDuplicate; } } if (required_count == 0) return error.PlanRequiredMissing; try validateCapacityPairs(plan);}Source: lib/closure/src/qualify/root.zig
const model = @import("model.zig");const owner = @import("owner.zig");const encode = @import("encode.zig");pub const Bound = model.Bound;pub const BuildMode = model.BuildMode;pub const CapacityCase = model.CapacityCase;pub const Capture = model.Capture;pub const Cell = model.Cell;pub const CellKind = model.CellKind;pub const EvidenceKind = model.EvidenceKind;pub const Frozen = model.Frozen;pub const OutcomeCounts = model.OutcomeCounts;pub const Plan = model.Plan;pub const Requirement = model.Requirement;pub const Row = model.Row;pub const Statistics = model.Statistics;pub const Summary = model.Summary;pub const Threshold = model.Threshold;pub const ThresholdKind = model.ThresholdKind;pub const Transition = model.Transition;pub const bounds_max = model.bounds_max;pub const cells_max = model.cells_max;pub const plan_bytes_max = model.plan_bytes_max;pub const receipt_bytes_max = model.receipt_bytes_max;pub const seeds_max = model.seeds_max;pub const classify = owner.classify;pub const freeze = encode.freeze;pub const receipt = encode.receipt;pub const evaluate = owner.evaluate;pub const validatePlan = owner.validatePlan;Source: lib/closure/src/root.zig:18
pub const qualify = @import("qualify/root.zig");Complete caller list for qualify.evaluate
7 direct callers.
tiny.closure.qualify.receipt[function] atlib/closure/src/qualify/encode.zig:42lib.closure.src.qualify.owner.test_qualification_binds_SLO_evidence_to_the_frozen_execution_profile[function] — test source atlib/closure/src/qualify/owner.zig:697in nearest public ownerlib.closure.src.qualify.ownerlib.closure.src.qualify.owner.test_qualification_evaluates_paired_C_and_C_plus_one_evidence[function] — test source atlib/closure/src/qualify/owner.zig:575in nearest public ownerlib.closure.src.qualify.ownerlib.closure.src.qualify.owner.test_qualification_forces_incomplete_capture_to_inconclusive[function] — test source atlib/closure/src/qualify/owner.zig:596in nearest public ownerlib.closure.src.qualify.ownerlib.closure.src.qualify.owner.test_qualification_leaves_excluded_cells_not_exercised[function] — test source atlib/closure/src/qualify/owner.zig:741in nearest public ownerlib.closure.src.qualify.ownerlib.closure.src.qualify.owner.test_qualification_records_missing_thresholds_as_inconclusive[function] — test source atlib/closure/src/qualify/owner.zig:812in nearest public ownerlib.closure.src.qualify.ownerlib.closure.src.qualify.owner.test_qualification_requires_equivalent_C_and_C_plus_one_state[function] — test source atlib/closure/src/qualify/owner.zig:841in nearest public ownerlib.closure.src.qualify.owner
Complete caller list for qualify.validatePlan
7 direct callers.
tiny.closure.qualify.freeze[function] atlib/closure/src/qualify/encode.zig:12tiny.closure.qualify.evaluate[function] atlib/closure/src/qualify/owner.zig:58lib.closure.src.qualify.owner.test_qualification_evaluates_paired_C_and_C_plus_one_evidence[function] — test source atlib/closure/src/qualify/owner.zig:575in nearest public ownerlib.closure.src.qualify.ownerlib.closure.src.qualify.owner.test_qualification_records_missing_thresholds_as_inconclusive[function] — test source atlib/closure/src/qualify/owner.zig:812in nearest public ownerlib.closure.src.qualify.ownerlib.closure.src.qualify.owner.test_qualification_rejects_an_unpaired_bounded_owner[function] — test source atlib/closure/src/qualify/owner.zig:802in nearest public ownerlib.closure.src.qualify.ownerlib.closure.src.qualify.owner.test_qualification_rejects_malformed_threshold_confidence[function] — test source atlib/closure/src/qualify/owner.zig:784in nearest public ownerlib.closure.src.qualify.ownerlib.closure.src.qualify.owner.test_qualification_rejects_vacuous_plans_and_assumptions_cannot_pass[function] — test source atlib/closure/src/qualify/owner.zig:766in nearest public ownerlib.closure.src.qualify.owner
Audit
| Definitions | 28 |
|---|---|
| Public names | 28 |
| Members | 129 |
| Version | 26.7.0 |
| Revision | daab053ee433 |