Skip to content
Merged
Show file tree
Hide file tree
Changes from 57 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
bb0ae2c
feat(core): compile generic point-render sessions
lemone112 Jul 22, 2026
103135c
fix(core): satisfy format and all-target lint gates
lemone112 Jul 22, 2026
dea02c0
perf(core): recycle point-render session buffers
lemone112 Jul 22, 2026
00a897d
style(core): format reusable session buffers
lemone112 Jul 22, 2026
6d3d900
feat(lcs): execute sealed sRGB8 tristimulus derivation
lemone112 Jul 22, 2026
c5b9349
style(lcs): format sealed tristimulus slice
lemone112 Jul 22, 2026
705fb68
feat(lcs): derive versioned appearance views
lemone112 Jul 22, 2026
68f6ac4
style(lcs): canonicalize Oklab coefficient
lemone112 Jul 22, 2026
8bfcdd2
feat(core): expose typed terminal program path
lemone112 Jul 22, 2026
abfa741
fix(core): satisfy terminal Program quality gates
lemone112 Jul 22, 2026
76b9fb5
feat(lcs): bind private output projection registry
lemone112 Jul 22, 2026
d80cb78
style(core): canonicalize release module order
lemone112 Jul 22, 2026
1a9f978
fix(core): scope private registry lint firewall
lemone112 Jul 22, 2026
f034c40
fix(core): harden terminal Program admission
lemone112 Jul 22, 2026
31acc78
style(core): match pinned Rust formatter
lemone112 Jul 22, 2026
02f91a9
feat(core): bind F0 release descriptors
lemone112 Jul 22, 2026
e6e2b29
perf(core): add linear canonical surface ingestion
lemone112 Jul 22, 2026
01ed02c
refactor(core): unify terminal physical identities
lemone112 Jul 22, 2026
2b98cb9
perf(core): prebind terminal evaluation slots
lemone112 Jul 22, 2026
c01c7f0
perf(core): make present ingestion lazy and borrowed
lemone112 Jul 22, 2026
e0f4956
refactor(core): remove per-port surface mutation
lemone112 Jul 22, 2026
bf60c9c
feat(core): evaluate typed constraints and emit terminal paints
lemone112 Jul 22, 2026
b9c7965
feat(core): bind observation groups to runtime streams
lemone112 Jul 22, 2026
6be73af
refactor(core): share one encoded point Paint value
lemone112 Jul 22, 2026
b58b2ed
refactor(core): share revision-bound observation state
lemone112 Jul 22, 2026
69e4312
fix(ci): bind V2a budget to measured artifact
lemone112 Jul 22, 2026
186e45d
refactor(core): remove superseded Program runtime
lemone112 Jul 22, 2026
d4a5f38
feat(core): execute compiled plans through sole Session
lemone112 Jul 22, 2026
a244a61
feat(core): bind Program assessments to context-bound LCS
lemone112 Jul 22, 2026
e84d07e
Hard-delete Pair taxonomy from shipping surfaces
lemone112 Jul 22, 2026
f832a53
Compile typed finite targets into Program sessions
lemone112 Jul 22, 2026
8391d22
quarantine unsupported Display P3 promises
lemone112 Jul 22, 2026
9ff2504
core: make compiled programs the sole session-generation owner
lemone112 Jul 22, 2026
3e8f240
core: close the evaluator union and package session bridge
lemone112 Jul 22, 2026
e45fcc2
core: derive a typed CAM16-UCS occurrence view
lemone112 Jul 23, 2026
45f7de4
core: lower authored physical declarations into the canonical Program
lemone112 Jul 23, 2026
fade33a
core: bind Program content identity
lemone112 Jul 24, 2026
39ee0a7
core: name versioned identity discriminants
lemone112 Jul 24, 2026
a09bf73
fix(ci): re-pin the runtime WASM budget to this slice's measured arti…
lemone112 Jul 25, 2026
30fe845
fix(ci): re-bind the point-support source capsule to this slice's cone
lemone112 Jul 26, 2026
0f6ddab
core: project complete program certificate evidence
lemone112 Jul 24, 2026
ab463f2
fix(ci): re-bind the point-support source capsule to this slice's cone
lemone112 Jul 26, 2026
5cd8d17
core: bind Program operations to exact owner snapshots
lemone112 Jul 24, 2026
8b5fb46
fix(ci): re-bind the point-support source capsule to this slice's cone
lemone112 Jul 26, 2026
35472cb
core: single-own compiled observation schemas
lemone112 Jul 24, 2026
43d9498
chore(proof): document Python 3.9 zip invariant
lemone112 Jul 26, 2026
5389478
core: define the public Program API
lemone112 Jul 25, 2026
f2fb118
core: address Program API review
lemone112 Jul 25, 2026
92f8376
fix(ci): re-bind public Program proof capsule
lemone112 Jul 26, 2026
4eb8966
test: close compile-fail sentinel escape
lemone112 Jul 25, 2026
4fc9521
core: make joint order non-empty by construction and bound evidence c…
lemone112 Jul 25, 2026
412da83
docs: explain packed proof invariants
lemone112 Jul 26, 2026
f57baa2
core: fail closed without current Program evidence
lemone112 Jul 26, 2026
3dc76d7
core: revoke outputs on unknown session handoff
lemone112 Jul 26, 2026
a30d03d
core: keep incomplete Program crate-private
lemone112 Jul 26, 2026
cc0e065
perf: bind smaller private Program wasm
lemone112 Jul 26, 2026
18cb0ff
core: make staged Program unexportable
lemone112 Jul 26, 2026
dcd4943
ci: explain rustdoc surface mismatch
lemone112 Jul 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .cargo/mutants.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ examine_globs = [
"crates/labcolors-core/src/numerical_plan.rs",
"crates/labcolors-core/src/numerics.rs",
"crates/labcolors-core/src/observation.rs",
"crates/labcolors-core/src/pair.rs",
"crates/labcolors-core/src/recheck.rs",
"crates/labcolors-core/src/srgb8.rs",
"crates/labcolors-core/src/wcag22.rs",
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,10 @@ jobs:
# reference from merging silently (main was green with ~81 broken links
# because cargo doc was never gated — #26).
run: RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps --locked
- name: staged Program is absent from the resolved public API
run: |
python3 scripts/test_program_public_surface.py
python3 scripts/verify_program_public_surface.py target/doc/labcolors_core
- name: package labcolors-core and run extracted package doctests
run: |
set -euo pipefail
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -674,7 +674,7 @@ jobs:
JSON.stringify(point.sourceBinding.exclusions) !==
JSON.stringify(pointProof.source_binding_exclusions) ||
point.sourceBinding.closureSha256 !== pointProof.source_closure_sha256 ||
pointProof.source_negative_controls !== 33 ||
pointProof.source_negative_controls !== 43 ||
pointAlgebra?.method !==
"exact-sparse-integer-polynomial-identities-plus-positive-denominator-order-lemma-v1" ||
pointAlgebra?.wolfram_language_cross_check?.query_sha256 !==
Expand Down Expand Up @@ -790,7 +790,6 @@ jobs:
"stable-cam16-glow-target-or-maximum-selection",
"renderer-or-output-pipeline-equivalence",
"spatial-glow-field",
"display-p3",
];
if (
JSON.stringify(manifest.supported) !== JSON.stringify(expectedSupported) ||
Expand Down
2 changes: 1 addition & 1 deletion bindings/swift/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Swift/UniFFI evidence сейчас ограничено описанным вы
runtime. Solve-hex — квантование трансцендентного резолва, ±1 LSB на канал.
Неуспешный solve возвращает `ColorError.Failure(category, code)`: category —
закрытый enum `FailureCategory`, а не произвольная строка. Он
отделяет доказанную `unreachable` от `unresolved`, `rejected` и `unsupported`,
отделяет доказанную `unreachable` от `unresolved` и `rejected`,
а code задаёт конкретную машинную причину. Оба поля приходят из одного
core-owned descriptor и проверяются conformance-паком.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ final class ConformanceTests: XCTestCase {
case "unreachable": return .unreachable
case "unresolved": return .unresolved
case "rejected": return .rejected
case "unsupported": return .unsupported
default: fatalError("неизвестная failure category в pack: \(key)")
}
}
Expand Down
2 changes: 1 addition & 1 deletion conformance/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ adjacent bytes или нормативного отношения пересчи
- `(category, code)` — атомарная core-owned классификация, общая для всех
биндингов: `unreachable/exceeds_range`, `unreachable/floor_unreachable`,
`unresolved/bounded_search_exhausted`, `rejected/invalid_input`,
`unreachable/below_contrast_floor` и `unsupported/gamut_unsupported`. Только
`unreachable/below_contrast_floor`. Только
`unreachable` доказывает отсутствие
решения в объявленном полном domain; `unresolved` не делает утверждения о
непроверенных кандидатах.
Expand Down
3 changes: 1 addition & 2 deletions crates/labcolors-conformance/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ pub enum SolveOutcome {
floor_override: bool,
},
/// Resolver не вернул цвет; category отделяет доказанную недостижимость от
/// unresolved, rejected и unsupported исходов.
/// unresolved и rejected исходов.
Failure {
/// Стабильная семантическая категория core failure.
category: String,
Expand Down Expand Up @@ -883,7 +883,6 @@ mod tests {
"unreachable",
"floor_unreachable",
),
(F::GamutUnsupported, "unsupported", "gamut_unsupported"),
(
F::InvalidInput("fixture".into()),
"rejected",
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"artifact_id":"wcag22-srgb8-luminance-q55-v1","basis_point_proof":{"checks":30,"drop_all_semantics":"zero required surplus; current must still meet the anchor","drop_domain_inclusive":[0,10000],"nonpositive_baseline_semantics":"zero required surplus; current must meet the anchor"},"bound_id":"point-support-reference-surplus-q55-bps-v1","certified_claim":"for every successfully evaluated enabled stability cell, decision is Retained iff current_lower_surplus >= (10000-drop_bps)/10000 * max(baseline_lower_surplus,0); the declared anchor remains a separate hard floor","comparator_proof":{"algorithm":"euclidean-continued-fraction-ordering-v1","dense_denominator_inclusive":[1,31],"dense_numerator_inclusive":[0,31],"dense_small_cases":984064,"invariant":"equal integer parts; reciprocal proper fractions reverse order","largest_fibonacci_index":186,"oracle":"unbounded-integer-cross-product","random_cases":250000,"random_corpus_sha256":"97c4af7b452b31a4ab92645f70c17acb38bf57ca55484e32ad9d7d79d97a333d","random_seed":210583930,"termination":"each nonterminal denominator becomes a strictly smaller remainder","u128_adversarial_cases":190},"declared_operation_law":"q55-lower-reference-distance-explicit-anchor-bps-retention-v1","excluded_claim":"does not certify retention against the unknown exact baseline surplus, renderer equivalence outside encoded-sRGB8 source-over, or a successful result when evaluation fails","integer_replay_envelope":{"assumption":"every Q55 luminance upper <= scale + 3","i128_max":170141183460469231731687303715884105727,"offset_cleared_denominator_max":756604737398243388,"positive_baseline_numerator_max":1188950301625811064,"rational_denominator_max":1513209474796486776,"required_denominator_max":15132094747964867760000,"required_numerator_max":11889503016258110640000,"signed_anchor_abs_coarse_max":5296233161787703716,"u128_max":340282366920938463463374607431768211455,"u64_max":18446744073709551615},"profile_id":"srgb8-q55-retained-reference-surplus-bps-v1","proof_id":"point-support-reference-surplus-integer-v1","proof_payload_sha256":"76cc2f9916efb337fdc7cb20c444f619c289dc3a3d9a877fdc4087fefe33a12a","q55_dependency":{"artifact_id":"wcag22-srgb8-luminance-q55-v1","artifact_sha256":"7ff239d9052b346f3c50da01ca65ca2330892ed1a3ff30e190797fcef6f03604","maximum_luminance_upper":36028797018963971,"outward_interval_width_bound":3,"proof_id":"wcag22-srgb8-full-domain-q55-v1","proof_payload_sha256":"3c639a7c875046c46b56b51ecdd67d5ecaf14a1134490c88a222e7037b63c0f2","proof_sha256":"ac59cf89503170c789223b91d775213a19d4e571ef930f2ea609fcd51b14defd","q55_scale":36028797018963968},"reference_and_anchor_proof":{"anchor_identity_checks":75,"orientation_law":"distance-magnitude-symmetric-orientation-reported-separately","overlap_lower_distance":"0/1","separated_endpoint_checks":504},"schema_version":2,"site_id":"point-support-retained-reference-surplus-v1","source_binding_exclusions":["whole-crate compilation or compiler/toolchain attestation","binary, package, FFI, renderer, or browser transport attestation","unrelated Lab Colors modules outside the declared point-support semantic cone"],"source_binding_law":"point-support-rust-whole-file-semantic-cone-v2","source_binding_schema_version":2,"source_binding_scope":"exact bytes of the private point-support Rust semantic cone and its two WCAG include_str inputs; comments and cfg(test) text are intentionally significant","source_closure_sha256":"c2825216354b796924560d98e01ae5cebedf324c47e7b26332119c61aded783e","source_files":[{"kind":"compile-time-input","path":"crates/labcolors-core/contracts/wcag22-srgb8-q55-proof-v1.json","sha256":"ac59cf89503170c789223b91d775213a19d4e571ef930f2ea609fcd51b14defd"},{"kind":"compile-time-input","path":"crates/labcolors-core/contracts/wcag22-srgb8-v1.json","sha256":"b4bb7e5f17a99f2c911fdbe3da23a48b049277b796291094950f14680cc3cc7b"},{"kind":"rust-source","path":"crates/labcolors-core/src/appearance.rs","sha256":"5df64a220c86378c66d25f0e0abe2507b636b0ec6cd8217a6235e17809f00f48"},{"kind":"rust-source","path":"crates/labcolors-core/src/composition.rs","sha256":"5218a845b85a27571a710c7c967b2937b94cf4622a3073487a808936ac85468a"},{"kind":"rust-source","path":"crates/labcolors-core/src/constraints/exact.rs","sha256":"45bd09cd8f6f74860a0a3ffeb410ee2c3cf91b4868877abbc949e724b61e1ccd"},{"kind":"rust-source","path":"crates/labcolors-core/src/constraints/mod.rs","sha256":"ad721c625b33a7432de44e5f63459a62c1cbc8ec2492855f783b5440f04978f9"},{"kind":"rust-source","path":"crates/labcolors-core/src/constraints/wcag22.rs","sha256":"985e21abccd1fcb4a3f9624d5947ff3d1af7a1bf26b6b170ea8bbef77d6f1798"},{"kind":"rust-source","path":"crates/labcolors-core/src/hash.rs","sha256":"f97a0fd7d6ad3162f0f1dfb326fccfb7ed40da9a8fa67a5b8a239a1ae2ae49c3"},{"kind":"rust-source","path":"crates/labcolors-core/src/lib.rs","sha256":"95113d8a25fd1577823b8c6342c06272b12ea8711ee5e5a62d034948177c13db"},{"kind":"rust-source","path":"crates/labcolors-core/src/numerics.rs","sha256":"e73a12136494f2ef9aca4e943ab38302c1439f054cecab36a552d35252c164f9"},{"kind":"rust-source","path":"crates/labcolors-core/src/observation.rs","sha256":"208066b255bc406303b18dc2eb6f1720c8203ea6eb37d225f9d8110c2449edc4"},{"kind":"rust-source","path":"crates/labcolors-core/src/point_support.rs","sha256":"56c06b49f4687b3def69c247978da1b0cb45b42c09515a001d196cb1457c93a6"},{"kind":"rust-source","path":"crates/labcolors-core/src/session.rs","sha256":"d4b06651e07cf4f93eccf9866f6e63c35ea72fa7125bdb41e222b19b70dd2f32"},{"kind":"rust-source","path":"crates/labcolors-core/src/srgb8.rs","sha256":"6c95324eb05476f35f75375a9af0b2b4a41b8b2978c46e67d2ce1aea5adde342"},{"kind":"rust-source","path":"crates/labcolors-core/src/wcag22.rs","sha256":"7ba7864eb7e73789bad6c63c64a4dc2dcc08c2da6921375fb9564fca230c2780"},{"kind":"rust-source","path":"crates/labcolors-core/src/wcag22/kernel.rs","sha256":"c97980c1ca2c7ea9cabff9c8d2fb7282773cca180ae15948391c29c9d6196040"},{"kind":"rust-source","path":"crates/labcolors-core/src/wcag22/q55_data.rs","sha256":"af4d23d6b70c45ce6efa839e7dda4bb0a61f6aae43cb805af6fa9b29e6c3bae2"},{"kind":"rust-source","path":"crates/labcolors-core/src/wcag22_evidence.rs","sha256":"3c5a75b07254c6071a64700af208a64987d0f0ea9698eadc54a9e74585ce1f72"}],"source_negative_controls":33,"universal_algebraic_certificate":{"basis_point_scale_instantiation":10000,"domain":"integers; Q55 scale Q>0; anchor L>=D>=0; lighter monotonicity L2>=L1>D>=0; darker monotonicity L>D2>=D1>=0; current/baseline denominators b,q>0; basis-point scale B>0 instantiated as 10000; p>0; a>=0; 0<=drop_bps<=B","identities":["three explicit anchor-surplus formulas after denominator clearing","reference distance is monotone increasing in lighter L","reference distance is monotone decreasing in darker D","positive-baseline retained threshold is p*(B-drop)/(q*B)","a/b >= p*(B-drop)/(q*B) iff a*q*B >= p*(B-drop)*b"],"method":"exact-sparse-integer-polynomial-identities-plus-positive-denominator-order-lemma-v1","nonpositive_baseline_case":"max(baseline,0)=0; retained threshold is exactly zero","symbolic_mutation_controls":{"anchor_coefficients_and_denominator":6,"retained_cross_product":5},"wolfram_language_cross_check":{"query":"FullSimplify[{20 g/d - 0 == 20 g/d, 20 g/d - 2 == (20 g - 2 d)/d, 20 g/d - 7/2 == (40 g - 7 d)/(2 d), Equivalent[a/b >= p (s-x)/(q s), a q s >= p (s-x) b], Max[p/q, 0] (s-x)/s == Piecewise[{{0, p <= 0}}, p (s-x)/(q s)]}, Assumptions -> Element[{a,b,p,q,s,x,g,d}, Integers] && a >= 0 && b > 0 && q > 0 && s > 0 && 0 <= x <= s && d > 0 && g >= 0]","query_sha256":"8cdbb9964583030c8b92498961896cb2a98613f1cb31eb7c54acdf8e16beff10","result":"{True, True, True, True, True}","result_sha256":"13a8f2ee8d0fde335a638e46d7cc8a8427b9a1437c77d22cfcf925bb87fa6303"}},"verifier_sha256":"bc9ceb056a9bd4e93f5c5c5fd575779384027f00985b0075356169a8a11aabf4"}
{"artifact_id":"wcag22-srgb8-luminance-q55-v1","basis_point_proof":{"checks":30,"drop_all_semantics":"zero required surplus; current must still meet the anchor","drop_domain_inclusive":[0,10000],"nonpositive_baseline_semantics":"zero required surplus; current must meet the anchor"},"bound_id":"point-support-reference-surplus-q55-bps-v1","certified_claim":"for every successfully evaluated enabled stability cell, decision is Retained iff current_lower_surplus >= (10000-drop_bps)/10000 * max(baseline_lower_surplus,0); the declared anchor remains a separate hard floor","comparator_proof":{"algorithm":"euclidean-continued-fraction-ordering-v1","dense_denominator_inclusive":[1,31],"dense_numerator_inclusive":[0,31],"dense_small_cases":984064,"invariant":"equal integer parts; reciprocal proper fractions reverse order","largest_fibonacci_index":186,"oracle":"unbounded-integer-cross-product","random_cases":250000,"random_corpus_sha256":"97c4af7b452b31a4ab92645f70c17acb38bf57ca55484e32ad9d7d79d97a333d","random_seed":210583930,"termination":"each nonterminal denominator becomes a strictly smaller remainder","u128_adversarial_cases":190},"declared_operation_law":"q55-lower-reference-distance-explicit-anchor-bps-retention-v1","excluded_claim":"does not certify retention against the unknown exact baseline surplus, renderer equivalence outside encoded-sRGB8 source-over, or a successful result when evaluation fails","integer_replay_envelope":{"assumption":"every Q55 luminance upper <= scale + 3","i128_max":170141183460469231731687303715884105727,"offset_cleared_denominator_max":756604737398243388,"positive_baseline_numerator_max":1188950301625811064,"rational_denominator_max":1513209474796486776,"required_denominator_max":15132094747964867760000,"required_numerator_max":11889503016258110640000,"signed_anchor_abs_coarse_max":5296233161787703716,"u128_max":340282366920938463463374607431768211455,"u64_max":18446744073709551615},"profile_id":"srgb8-q55-retained-reference-surplus-bps-v1","proof_id":"point-support-reference-surplus-integer-v1","proof_payload_sha256":"1477d4fa428c54bab14ccdcc336e34c94aa68d70f768cfa26df289e103daf7f7","q55_dependency":{"artifact_id":"wcag22-srgb8-luminance-q55-v1","artifact_sha256":"7ff239d9052b346f3c50da01ca65ca2330892ed1a3ff30e190797fcef6f03604","maximum_luminance_upper":36028797018963971,"outward_interval_width_bound":3,"proof_id":"wcag22-srgb8-full-domain-q55-v1","proof_payload_sha256":"3c639a7c875046c46b56b51ecdd67d5ecaf14a1134490c88a222e7037b63c0f2","proof_sha256":"ac59cf89503170c789223b91d775213a19d4e571ef930f2ea609fcd51b14defd","q55_scale":36028797018963968},"reference_and_anchor_proof":{"anchor_identity_checks":75,"orientation_law":"distance-magnitude-symmetric-orientation-reported-separately","overlap_lower_distance":"0/1","separated_endpoint_checks":504},"schema_version":2,"site_id":"point-support-retained-reference-surplus-v1","source_binding_exclusions":["whole-crate compilation or compiler/toolchain attestation","binary, package, FFI, renderer, or browser transport attestation","unrelated Lab Colors modules outside the declared point-support semantic cone"],"source_binding_law":"point-support-rust-whole-file-semantic-cone-v2","source_binding_schema_version":2,"source_binding_scope":"exact bytes of the private point-support Rust semantic cone and its two WCAG include_str inputs; comments and cfg(test) text are intentionally significant","source_closure_sha256":"fe841df4f7a63adc94423660b2ef4daefad539a3d3748bc9dafff08491be0ddd","source_files":[{"kind":"compile-time-input","path":"crates/labcolors-core/contracts/wcag22-srgb8-q55-proof-v1.json","sha256":"ac59cf89503170c789223b91d775213a19d4e571ef930f2ea609fcd51b14defd"},{"kind":"compile-time-input","path":"crates/labcolors-core/contracts/wcag22-srgb8-v1.json","sha256":"b4bb7e5f17a99f2c911fdbe3da23a48b049277b796291094950f14680cc3cc7b"},{"kind":"rust-source","path":"crates/labcolors-core/src/appearance.rs","sha256":"09be54900efe29ffdac8705efd0d6d613055c90d634446ca4b228f51a63997d0"},{"kind":"rust-source","path":"crates/labcolors-core/src/composition.rs","sha256":"195a67327a3bd86d7816b634481389930bf68577bb1202fad14c2ea152df8625"},{"kind":"rust-source","path":"crates/labcolors-core/src/constraints/exact.rs","sha256":"892576a8621185352583e63dc0a1aacac32e32a8063b6fe24ae16d4ff9dce7cb"},{"kind":"rust-source","path":"crates/labcolors-core/src/constraints/mod.rs","sha256":"51d7835a52b9eb4ab4888aef401ab145b1764eb2054ff7e856828fefc770a132"},{"kind":"rust-source","path":"crates/labcolors-core/src/constraints/wcag22.rs","sha256":"856093c91159d8b3faab001f2d6524d33d7b16458a5a4e98ea65f8c62ab2694c"},{"kind":"rust-source","path":"crates/labcolors-core/src/hash.rs","sha256":"f97a0fd7d6ad3162f0f1dfb326fccfb7ed40da9a8fa67a5b8a239a1ae2ae49c3"},{"kind":"rust-source","path":"crates/labcolors-core/src/lcs_occurrence.rs","sha256":"6f202ad7425a235b9d18caba0c817fc33a2b8e042050a34f5ddff3fd09efc53d"},{"kind":"rust-source","path":"crates/labcolors-core/src/lib.rs","sha256":"51ab4da1ab650b063e57bf158b554f3fdc561f3e86d3ad60a660310991c7a7d1"},{"kind":"rust-source","path":"crates/labcolors-core/src/numerics.rs","sha256":"e73a12136494f2ef9aca4e943ab38302c1439f054cecab36a552d35252c164f9"},{"kind":"rust-source","path":"crates/labcolors-core/src/observation.rs","sha256":"8c9838107077775c51d80638ba0b59f9672d14347ca404dfd4c63e2fb62d1c45"},{"kind":"rust-source","path":"crates/labcolors-core/src/point_support.rs","sha256":"6f6a376ff036d3d65960c004e6566e1bca580f19f5bd3cd333a80b0da5b5c242"},{"kind":"rust-source","path":"crates/labcolors-core/src/session.rs","sha256":"4f77643206077c080e5e9b182e896145bfb69bf3db8aa4c1ac7d4c5360ea8504"},{"kind":"rust-source","path":"crates/labcolors-core/src/srgb8.rs","sha256":"6c95324eb05476f35f75375a9af0b2b4a41b8b2978c46e67d2ce1aea5adde342"},{"kind":"rust-source","path":"crates/labcolors-core/src/wcag22.rs","sha256":"7ba7864eb7e73789bad6c63c64a4dc2dcc08c2da6921375fb9564fca230c2780"},{"kind":"rust-source","path":"crates/labcolors-core/src/wcag22/kernel.rs","sha256":"c97980c1ca2c7ea9cabff9c8d2fb7282773cca180ae15948391c29c9d6196040"},{"kind":"rust-source","path":"crates/labcolors-core/src/wcag22/q55_data.rs","sha256":"af4d23d6b70c45ce6efa839e7dda4bb0a61f6aae43cb805af6fa9b29e6c3bae2"},{"kind":"rust-source","path":"crates/labcolors-core/src/wcag22_evidence.rs","sha256":"3c5a75b07254c6071a64700af208a64987d0f0ea9698eadc54a9e74585ce1f72"}],"source_negative_controls":43,"universal_algebraic_certificate":{"basis_point_scale_instantiation":10000,"domain":"integers; Q55 scale Q>0; anchor L>=D>=0; lighter monotonicity L2>=L1>D>=0; darker monotonicity L>D2>=D1>=0; current/baseline denominators b,q>0; basis-point scale B>0 instantiated as 10000; p>0; a>=0; 0<=drop_bps<=B","identities":["three explicit anchor-surplus formulas after denominator clearing","reference distance is monotone increasing in lighter L","reference distance is monotone decreasing in darker D","positive-baseline retained threshold is p*(B-drop)/(q*B)","a/b >= p*(B-drop)/(q*B) iff a*q*B >= p*(B-drop)*b"],"method":"exact-sparse-integer-polynomial-identities-plus-positive-denominator-order-lemma-v1","nonpositive_baseline_case":"max(baseline,0)=0; retained threshold is exactly zero","symbolic_mutation_controls":{"anchor_coefficients_and_denominator":6,"retained_cross_product":5},"wolfram_language_cross_check":{"query":"FullSimplify[{20 g/d - 0 == 20 g/d, 20 g/d - 2 == (20 g - 2 d)/d, 20 g/d - 7/2 == (40 g - 7 d)/(2 d), Equivalent[a/b >= p (s-x)/(q s), a q s >= p (s-x) b], Max[p/q, 0] (s-x)/s == Piecewise[{{0, p <= 0}}, p (s-x)/(q s)]}, Assumptions -> Element[{a,b,p,q,s,x,g,d}, Integers] && a >= 0 && b > 0 && q > 0 && s > 0 && 0 <= x <= s && d > 0 && g >= 0]","query_sha256":"8cdbb9964583030c8b92498961896cb2a98613f1cb31eb7c54acdf8e16beff10","result":"{True, True, True, True, True}","result_sha256":"13a8f2ee8d0fde335a638e46d7cc8a8427b9a1437c77d22cfcf925bb87fa6303"}},"verifier_sha256":"bf25b5e0704aca428a73aa529f966f0f252be041d3171bca989d9672d3099acf"}
Loading
Loading