eyeling 1.24.7 → 1.24.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/HANDBOOK.md +35 -35
  2. package/dist/browser/eyeling.browser.js +14 -1
  3. package/examples/act-alarm-bit-interoperability.n3 +2 -0
  4. package/examples/act-barley-seed-lineage.n3 +2 -0
  5. package/examples/act-docking-abort.n3 +2 -0
  6. package/examples/act-gravity-mediator-witness.n3 +2 -0
  7. package/examples/act-isolation-breach.n3 +2 -0
  8. package/examples/act-photosynthetic-exciton-transfer.n3 +2 -0
  9. package/examples/act-sensor-memory-reset.n3 +2 -0
  10. package/examples/act-tunnel-junction-wake-switch.n3 +2 -0
  11. package/examples/act-yeast-self-reproduction.n3 +2 -0
  12. package/examples/annotation.n3 +5 -0
  13. package/examples/auroracare.n3 +8 -8
  14. package/examples/backward-recursion.n3 +5 -0
  15. package/examples/barley-seed-becoming.n3 +2 -0
  16. package/examples/bmi.n3 +2 -0
  17. package/examples/builtin-coverage.n3 +5 -0
  18. package/examples/calidor.n3 +3 -3
  19. package/examples/collection.n3 +5 -0
  20. package/examples/complex-matrix-stability.n3 +2 -0
  21. package/examples/context-association.n3 +0 -8
  22. package/examples/control-system.n3 +2 -0
  23. package/examples/deep-taxonomy-10.n3 +2 -0
  24. package/examples/deep-taxonomy-100.n3 +2 -0
  25. package/examples/deep-taxonomy-1000.n3 +2 -0
  26. package/examples/deep-taxonomy-10000.n3 +2 -0
  27. package/examples/deep-taxonomy-100000.n3 +2 -0
  28. package/examples/delfour.n3 +3 -3
  29. package/examples/digital-product-passport.n3 +2 -0
  30. package/examples/dijkstra-risk-path.n3 +1 -2
  31. package/examples/easter.n3 +3 -1
  32. package/examples/eco-route-insight.n3 +1 -2
  33. package/examples/flandor.n3 +3 -3
  34. package/examples/french-cities.n3 +2 -0
  35. package/examples/fundamental-theorem-arithmetic.n3 +2 -0
  36. package/examples/genetic-algorithm-knapsack.n3 +1 -1
  37. package/examples/genetic-algorithm.n3 +1 -1
  38. package/examples/genetic-knapsack-selection.n3 +1 -2
  39. package/examples/gps.n3 +2 -0
  40. package/examples/harborsmr.n3 +2 -0
  41. package/examples/input/rdf-message-flow.trig +10 -10
  42. package/examples/input/rdf-messages.trig +6 -6
  43. package/examples/interop-demo.n3 +3 -1
  44. package/examples/matrix-mechanics.n3 +3 -3
  45. package/examples/medior.n3 +3 -3
  46. package/examples/n3-speaks-for-itself.n3 +5 -0
  47. package/examples/odrl-dpv-ehds-risk-ranked.n3 +1 -1
  48. package/examples/odrl-dpv-healthcare-risk-ranked.n3 +1 -1
  49. package/examples/odrl-dpv-risk-ranked.n3 +1 -1
  50. package/examples/odrl-risk-mitigation.n3 +1 -1
  51. package/examples/odrl-risk.n3 +1 -1
  52. package/examples/output/{act-alarm-bit-interoperability.txt → act-alarm-bit-interoperability.md} +19 -17
  53. package/examples/output/act-barley-seed-lineage.md +27 -0
  54. package/examples/output/{act-docking-abort.txt → act-docking-abort.md} +21 -19
  55. package/examples/output/{act-gravity-mediator-witness.txt → act-gravity-mediator-witness.md} +23 -21
  56. package/examples/output/{act-isolation-breach.txt → act-isolation-breach.md} +26 -24
  57. package/examples/output/{act-photosynthetic-exciton-transfer.txt → act-photosynthetic-exciton-transfer.md} +19 -17
  58. package/examples/output/{act-sensor-memory-reset.txt → act-sensor-memory-reset.md} +19 -17
  59. package/examples/output/{act-tunnel-junction-wake-switch.txt → act-tunnel-junction-wake-switch.md} +20 -18
  60. package/examples/output/{act-yeast-self-reproduction.txt → act-yeast-self-reproduction.md} +22 -20
  61. package/examples/output/annotation.md +1 -0
  62. package/examples/output/auroracare.md +150 -0
  63. package/examples/output/backward-recursion.md +6 -0
  64. package/examples/output/barley-seed-becoming.md +27 -0
  65. package/examples/output/{bmi.txt → bmi.md} +19 -17
  66. package/examples/output/builtin-coverage.md +1 -0
  67. package/examples/output/calidor.md +31 -0
  68. package/examples/output/collection.md +1 -0
  69. package/examples/output/{complex-matrix-stability.txt → complex-matrix-stability.md} +13 -11
  70. package/examples/output/context-association.md +7 -0
  71. package/examples/output/{control-system.txt → control-system.md} +19 -17
  72. package/examples/output/{deep-taxonomy-10.txt → deep-taxonomy-10.md} +14 -12
  73. package/examples/output/{deep-taxonomy-100.txt → deep-taxonomy-100.md} +14 -12
  74. package/examples/output/{deep-taxonomy-1000.txt → deep-taxonomy-1000.md} +14 -12
  75. package/examples/output/{deep-taxonomy-10000.txt → deep-taxonomy-10000.md} +14 -12
  76. package/examples/output/{deep-taxonomy-100000.txt → deep-taxonomy-100000.md} +14 -12
  77. package/examples/output/delfour.md +32 -0
  78. package/examples/output/digital-product-passport.md +3 -0
  79. package/examples/output/dijkstra-risk-path.md +11 -0
  80. package/examples/output/{easter.txt → easter.md} +152 -150
  81. package/examples/output/eco-route-insight.md +20 -0
  82. package/examples/output/flandor.md +33 -0
  83. package/examples/output/{french-cities.txt → french-cities.md} +13 -11
  84. package/examples/output/{fundamental-theorem-arithmetic.txt → fundamental-theorem-arithmetic.md} +14 -12
  85. package/examples/output/genetic-algorithm-knapsack.md +3 -0
  86. package/examples/output/genetic-algorithm.md +3 -0
  87. package/examples/output/genetic-knapsack-selection.md +13 -0
  88. package/examples/output/{gps.txt → gps.md} +14 -12
  89. package/examples/output/harborsmr.md +22 -0
  90. package/examples/output/{interop-demo.txt → interop-demo.md} +3 -1
  91. package/examples/output/matrix-mechanics.md +16 -0
  92. package/examples/output/medior.md +34 -0
  93. package/examples/output/n3-speaks-for-itself.md +54 -0
  94. package/examples/output/{odrl-dpv-ehds-risk-ranked.txt → odrl-dpv-ehds-risk-ranked.md} +16 -15
  95. package/examples/output/{odrl-dpv-healthcare-risk-ranked.txt → odrl-dpv-healthcare-risk-ranked.md} +13 -12
  96. package/examples/output/{odrl-dpv-risk-ranked.txt → odrl-dpv-risk-ranked.md} +17 -16
  97. package/examples/output/{odrl-risk-mitigation.txt → odrl-risk-mitigation.md} +17 -16
  98. package/examples/output/{odrl-risk.txt → odrl-risk.md} +6 -5
  99. package/examples/output/parcellocker.md +22 -0
  100. package/examples/output/pn-junction-tunneling.md +25 -0
  101. package/examples/output/queens.md +23 -0
  102. package/examples/output/{rc-discharge-envelope.txt → rc-discharge-envelope.md} +10 -8
  103. package/examples/output/rdf-dataset.md +7 -0
  104. package/examples/output/rdf-message-flow.md +7 -0
  105. package/examples/output/rdf-messages.md +7 -0
  106. package/examples/output/{resto.txt → resto.md} +19 -17
  107. package/examples/output/school-placement-audit.md +11 -0
  108. package/examples/output/smoke-arithmetic.md +7 -0
  109. package/examples/output/sqrt2-cauchy.md +15 -0
  110. package/examples/output/sqrt2-dedekind.md +33 -0
  111. package/examples/output/{sudoku.txt → sudoku.md} +45 -43
  112. package/examples/output/transcendental-numbers-stretched.md +262 -0
  113. package/examples/output/transistor-switch.md +26 -0
  114. package/examples/output/triple-terms.md +7 -0
  115. package/examples/output/{tunnel-junction-wake-switch-becoming.txt → tunnel-junction-wake-switch-becoming.md} +20 -18
  116. package/examples/output/{wind-turbine.txt → wind-turbine.md} +17 -15
  117. package/examples/parcellocker.n3 +2 -0
  118. package/examples/pn-junction-tunneling.n3 +3 -3
  119. package/examples/queens.n3 +1 -0
  120. package/examples/rc-discharge-envelope.n3 +1 -1
  121. package/examples/rdf-dataset.n3 +5 -0
  122. package/examples/rdf-message-flow.n3 +1 -2
  123. package/examples/rdf-messages.n3 +1 -2
  124. package/examples/resto.n3 +2 -0
  125. package/examples/school-placement-audit.n3 +1 -2
  126. package/examples/smoke-arithmetic.n3 +1 -1
  127. package/examples/sqrt2-cauchy.n3 +2 -0
  128. package/examples/sqrt2-dedekind.n3 +2 -0
  129. package/examples/sudoku.n3 +14 -14
  130. package/examples/transcendental-numbers-stretched.n3 +5 -0
  131. package/examples/transistor-switch.n3 +3 -3
  132. package/examples/triple-terms.n3 +5 -0
  133. package/examples/tunnel-junction-wake-switch-becoming.n3 +2 -0
  134. package/examples/wind-turbine.n3 +2 -0
  135. package/eyeling.js +14 -1
  136. package/lib/explain.js +14 -1
  137. package/package.json +1 -1
  138. package/test/examples.test.js +44 -13
  139. package/test/package.test.js +43 -7
  140. package/examples/output/act-barley-seed-lineage.txt +0 -25
  141. package/examples/output/annotation.n3 +0 -0
  142. package/examples/output/auroracare.txt +0 -149
  143. package/examples/output/backward-recursion.n3 +0 -4
  144. package/examples/output/barley-seed-becoming.txt +0 -25
  145. package/examples/output/builtin-coverage.n3 +0 -0
  146. package/examples/output/calidor.txt +0 -29
  147. package/examples/output/collection.n3 +0 -0
  148. package/examples/output/context-association.n3 +0 -9
  149. package/examples/output/delfour.txt +0 -30
  150. package/examples/output/digital-product-passport.txt +0 -1
  151. package/examples/output/dijkstra-risk-path.n3 +0 -3
  152. package/examples/output/eco-route-insight.n3 +0 -3
  153. package/examples/output/flandor.txt +0 -31
  154. package/examples/output/genetic-algorithm-knapsack.txt +0 -1
  155. package/examples/output/genetic-algorithm.txt +0 -1
  156. package/examples/output/genetic-knapsack-selection.n3 +0 -3
  157. package/examples/output/harborsmr.txt +0 -20
  158. package/examples/output/matrix-mechanics.txt +0 -14
  159. package/examples/output/medior.txt +0 -32
  160. package/examples/output/n3-speaks-for-itself.txt +0 -52
  161. package/examples/output/parcellocker.txt +0 -20
  162. package/examples/output/pn-junction-tunneling.txt +0 -23
  163. package/examples/output/queens.txt +0 -21
  164. package/examples/output/rc-discharge-envelope.n3 +0 -9
  165. package/examples/output/rdf-dataset.n3 +0 -5
  166. package/examples/output/rdf-message-flow.n3 +0 -7
  167. package/examples/output/rdf-messages.n3 +0 -7
  168. package/examples/output/school-placement-audit.n3 +0 -3
  169. package/examples/output/smoke-arithmetic.n3 +0 -5
  170. package/examples/output/smoke-arithmetic.txt +0 -5
  171. package/examples/output/sqrt2-cauchy.txt +0 -13
  172. package/examples/output/sqrt2-dedekind.txt +0 -31
  173. package/examples/output/transcendental-numbers-stretched.txt +0 -260
  174. package/examples/output/transistor-switch.txt +0 -24
  175. package/examples/output/triple-terms.n3 +0 -5
@@ -0,0 +1,54 @@
1
+ # n3-speaks-for-itself
2
+
3
+ @prefix : <https://example.org/n3-speaks#> .
4
+ @prefix foaf: <http://xmlns.com/foaf/0.1/> .
5
+ @prefix id: <https://example.org/id/> .
6
+
7
+ :report :aliceReaches id:bob .
8
+ :report :aliceReaches id:carol .
9
+ :report :aliceReaches id:dave .
10
+ :report :believes {
11
+ id:alice foaf:knows id:bob .
12
+ } .
13
+ :report :believes {
14
+ id:alice foaf:name "Alice" .
15
+ } .
16
+ :report :believes {
17
+ id:bob foaf:knows id:carol .
18
+ } .
19
+ :report :believes {
20
+ id:bob foaf:name "Bob" .
21
+ } .
22
+ :report :believes {
23
+ id:carol foaf:knows id:dave .
24
+ } .
25
+ :report :believes {
26
+ id:carol foaf:name "Carol" .
27
+ } .
28
+ :report :believes {
29
+ id:dave foaf:name "Dave" .
30
+ } .
31
+ :report :trusts <https://alice.example/profile.n3> .
32
+ :report :trusts <https://bob.example/profile.n3> .
33
+ :report :trusts <https://carol.example/profile.n3> .
34
+ {
35
+ id:alice foaf:knows id:bob .
36
+ } :believedFromDoc <https://alice.example/profile.n3> .
37
+ {
38
+ id:alice foaf:name "Alice" .
39
+ } :believedFromDoc <https://alice.example/profile.n3> .
40
+ {
41
+ id:bob foaf:knows id:carol .
42
+ } :believedFromDoc <https://bob.example/profile.n3> .
43
+ {
44
+ id:bob foaf:name "Bob" .
45
+ } :believedFromDoc <https://bob.example/profile.n3> .
46
+ {
47
+ id:carol foaf:knows id:dave .
48
+ } :believedFromDoc <https://carol.example/profile.n3> .
49
+ {
50
+ id:carol foaf:name "Carol" .
51
+ } :believedFromDoc <https://carol.example/profile.n3> .
52
+ {
53
+ id:dave foaf:name "Dave" .
54
+ } :believedFromDoc <https://carol.example/profile.n3> .
@@ -1,21 +1,22 @@
1
+ # odrl-dpv-ehds-risk-ranked
1
2
 
2
- === Ranked DPV Risk Report (EHDS-aligned) ===
3
- Agreement: EHDS Secondary Use Agreement (example)
4
- Profile: Example patient profile (EHDS rights expectations)
3
+ ## Ranked DPV Risk Report (EHDS-aligned)
4
+ Agreement: EHDS Secondary Use Agreement (example)
5
+ Profile: Example patient profile (EHDS rights expectations)
5
6
 
6
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H1
7
- Risk: secondary use is permitted without an EHDS Data Permit safeguard. Clause H1: Hospital may provide electronic health data for secondary use based on a bilateral data use agreement with the applicant.
7
+ score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H1
8
+ Risk: secondary use is permitted without an EHDS Data Permit safeguard. Clause H1: Hospital may provide electronic health data for secondary use based on a bilateral data use agreement with the applicant.
8
9
 
9
- - mitigation for clause H1: Require an EHDS Data Permit (eu-ehds:DataPermit) issued by a Health Data Access Body prior to secondary use.
10
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H2
11
- Risk: secondary use may include patients who opted out (EHDS A71). Clause H2: Secondary use may include all patient records for training and evaluating health-related algorithms.
10
+ - mitigation for clause H1: Require an EHDS Data Permit (eu-ehds:DataPermit) issued by a Health Data Access Body prior to secondary use.
11
+ score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H2
12
+ Risk: secondary use may include patients who opted out (EHDS A71). Clause H2: Secondary use may include all patient records for training and evaluating health-related algorithms.
12
13
 
13
- - mitigation for clause H2: Add an explicit safeguard to exclude records of persons who exercised the EHDS opt-out from secondary use (A71).
14
- score=88 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H3
15
- Risk: the agreement permits local downloads rather than processing within a secure processing environment. Clause H3: The applicant may download a complete local copy of the dataset to its own infrastructure for analysis.
14
+ - mitigation for clause H2: Add an explicit safeguard to exclude records of persons who exercised the EHDS opt-out from secondary use (A71).
15
+ score=88 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H3
16
+ Risk: the agreement permits local downloads rather than processing within a secure processing environment. Clause H3: The applicant may download a complete local copy of the dataset to its own infrastructure for analysis.
16
17
 
17
- - mitigation for clause H3: Require processing only within a secure processing environment (e.g., eu-dga:SecureProcessingEnvironment), and prohibit local downloads of raw datasets.
18
- score=80 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H4
19
- Risk: secondary-use dataset is only described as pseudonymised, without a safeguard requiring statistically anonymised data for secondary use. Clause H4: The dataset will be provided in pseudonymised form by removing direct identifiers.
18
+ - mitigation for clause H3: Require processing only within a secure processing environment (e.g., eu-dga:SecureProcessingEnvironment), and prohibit local downloads of raw datasets.
19
+ score=80 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H4
20
+ Risk: secondary-use dataset is only described as pseudonymised, without a safeguard requiring statistically anonymised data for secondary use. Clause H4: The dataset will be provided in pseudonymised form by removing direct identifiers.
20
21
 
21
- - mitigation for clause H4: Require an EHDS Health Data Request for statistically anonymised data (eu-ehds:HealthDataRequest), and add a constraint that secondary-use data must be statistically anonymised.
22
+ - mitigation for clause H4: Require an EHDS Health Data Request for statistically anonymised data (eu-ehds:HealthDataRequest), and add a constraint that secondary-use data must be statistically anonymised.
@@ -1,17 +1,18 @@
1
+ # odrl-dpv-healthcare-risk-ranked
1
2
 
2
- === Ranked DPV Risk Report (Healthcare & Life Sciences) ===
3
- Agreement: Example Healthcare & Life-Sciences Data Use Agreement
4
- Profile: Example patient profile
3
+ ## Ranked DPV Risk Report (Healthcare & Life Sciences)
4
+ Agreement: Example Healthcare & Life-Sciences Data Use Agreement
5
+ Profile: Example patient profile
5
6
 
6
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H1
7
- Risk: health/genomic data may be used for research without explicit opt-in consent. Clause H1: Hospital may use EHR and genomic data for internal clinical research and publication.
7
+ score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H1
8
+ Risk: health/genomic data may be used for research without explicit opt-in consent. Clause H1: Hospital may use EHR and genomic data for internal clinical research and publication.
8
9
 
9
- - mitigation for clause H1: Add an explicit consent constraint for secondary research use.
10
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H2
11
- Risk: genomic data may be shared with external pharma partners without a de-identification/pseudonymisation requirement. Clause H2: Hospital may share genomic data with pharmaceutical partners for drug discovery and R&D.
10
+ - mitigation for clause H1: Add an explicit consent constraint for secondary research use.
11
+ score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H2
12
+ Risk: genomic data may be shared with external pharma partners without a de-identification/pseudonymisation requirement. Clause H2: Hospital may share genomic data with pharmaceutical partners for drug discovery and R&D.
12
13
 
13
- - mitigation for clause H2: Require de-identification/pseudonymisation before external sharing of genomic data.
14
- score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause H4
15
- Risk: retention (3650 days) exceeds patient preference (1095 days). Clause H4: Hospital retains patient health records for 10 years.
14
+ - mitigation for clause H2: Require de-identification/pseudonymisation before external sharing of genomic data.
15
+ score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause H4
16
+ Risk: retention (3650 days) exceeds patient preference (1095 days). Clause H4: Hospital retains patient health records for 10 years.
16
17
 
17
- - mitigation for clause H4: Limit retention to 3 years (or document the legal obligation requiring longer retention).
18
+ - mitigation for clause H4: Limit retention to 3 years (or document the legal obligation requiring longer retention).
@@ -1,22 +1,23 @@
1
+ # odrl-dpv-risk-ranked
1
2
 
2
- === Ranked DPV Risk Report ===
3
- Agreement: Example Agreement
4
- Profile: Example consumer profile
3
+ ## Ranked DPV Risk Report
4
+ Agreement: Example Agreement
5
+ Profile: Example consumer profile
5
6
 
6
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C1
7
- Risk: account/data removal is permitted without notice safeguards (no notice constraint and no duty to inform). Clause C1: Provider may remove the user account (and associated data) at its discretion.
7
+ score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C1
8
+ Risk: account/data removal is permitted without notice safeguards (no notice constraint and no duty to inform). Clause C1: Provider may remove the user account (and associated data) at its discretion.
8
9
 
9
- - mitigation for clause C1: Add a notice constraint (minimum noticeDays) before account removal.
10
- - mitigation for clause C1: Add a duty to inform the consumer prior to account removal.
11
- score=97 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C3
12
- Risk: user data sharing is permitted without an explicit consent constraint. Clause C3: Provider may share user data with partners for business purposes.
10
+ - mitigation for clause C1: Add a notice constraint (minimum noticeDays) before account removal.
11
+ - mitigation for clause C1: Add a duty to inform the consumer prior to account removal.
12
+ score=97 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C3
13
+ Risk: user data sharing is permitted without an explicit consent constraint. Clause C3: Provider may share user data with partners for business purposes.
13
14
 
14
- - mitigation for clause C3: Add an explicit consent constraint before data sharing.
15
- score=85 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C2
16
- Risk: terms may change with notice (3 days) below consumer requirement (14 days). Clause C2: Provider may change terms by informing users at least 3 days in advance.
15
+ - mitigation for clause C3: Add an explicit consent constraint before data sharing.
16
+ score=85 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C2
17
+ Risk: terms may change with notice (3 days) below consumer requirement (14 days). Clause C2: Provider may change terms by informing users at least 3 days in advance.
17
18
 
18
- - mitigation for clause C2: Increase minimum noticeDays in the inform duty to meet the consumer requirement.
19
- score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause C4
20
- Risk: portability is restricted because exporting user data is prohibited. Clause C4: Users are not permitted to export their data.
19
+ - mitigation for clause C2: Increase minimum noticeDays in the inform duty to meet the consumer requirement.
20
+ score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause C4
21
+ Risk: portability is restricted because exporting user data is prohibited. Clause C4: Users are not permitted to export their data.
21
22
 
22
- - mitigation for clause C4: Add a permission allowing data export (or remove the prohibition) to support portability.
23
+ - mitigation for clause C4: Add a permission allowing data export (or remove the prohibition) to support portability.
@@ -1,18 +1,19 @@
1
+ # odrl-risk-mitigation
1
2
 
2
- === Risk report for Example Platform Agreement (with fixes) (profile: Carol (example consumer)) ===
3
- 1) score=100 (https://example.org/odrl-mitigation-demo#High), clause D6 — Provider can delete user data. This clause is risky because it allows the provider to delete the consumer’s data. Clause D6: We may delete your data at our discretion.
4
- 2) score=93 (https://example.org/odrl-mitigation-demo#High), clause D5 — No data export / portability. This clause is risky because it prohibits exporting data, undermining portability. Clause D5: You may not export or download your data from the service.
5
- 3) score=89 (https://example.org/odrl-mitigation-demo#High), clause D4 — Tracking without opt-in. This clause is risky because it permits tracking without explicit opt-in consent. Clause D4: We may track your activity to improve services.
6
- 4) score=85 (https://example.org/odrl-mitigation-demo#High), clause D2 — Auto-renewal without reminder. This clause is risky because it allows auto-renewal without a reminder. Consumer needs at least 7 days reminder. Clause D2: Your subscription renews automatically unless you cancel.
7
- 5) score=85 (https://example.org/odrl-mitigation-demo#High), clause D1 — Notice period too short. This clause is risky because the notice period (3 days) is below the consumer requirement (14 days). Clause D1: We may change these terms with notice. Notice may be as short as 3 days.
8
- 6) score=79 (https://example.org/odrl-mitigation-demo#Medium), clause D3 — Non-refundable fees. This clause is risky because it declares fees non-refundable, conflicting with a refund/cooling-off expectation (>= 14 days). Clause D3: All fees are non-refundable.
9
- 7) score=73 (https://example.org/odrl-mitigation-demo#Medium), clause D2 — Liability cap too low. This clause is risky because the liability cap (20 EUR) is below the consumer minimum (200 EUR). Clause D2: Your subscription renews automatically unless you cancel.
3
+ ## Risk report for Example Platform Agreement (with fixes) (profile: Carol (example consumer))
4
+ 1) score=100 (https://example.org/odrl-mitigation-demo#High), clause D6 — Provider can delete user data. This clause is risky because it allows the provider to delete the consumer’s data. Clause D6: We may delete your data at our discretion.
5
+ 2) score=93 (https://example.org/odrl-mitigation-demo#High), clause D5 — No data export / portability. This clause is risky because it prohibits exporting data, undermining portability. Clause D5: You may not export or download your data from the service.
6
+ 3) score=89 (https://example.org/odrl-mitigation-demo#High), clause D4 — Tracking without opt-in. This clause is risky because it permits tracking without explicit opt-in consent. Clause D4: We may track your activity to improve services.
7
+ 4) score=85 (https://example.org/odrl-mitigation-demo#High), clause D2 — Auto-renewal without reminder. This clause is risky because it allows auto-renewal without a reminder. Consumer needs at least 7 days reminder. Clause D2: Your subscription renews automatically unless you cancel.
8
+ 5) score=85 (https://example.org/odrl-mitigation-demo#High), clause D1 — Notice period too short. This clause is risky because the notice period (3 days) is below the consumer requirement (14 days). Clause D1: We may change these terms with notice. Notice may be as short as 3 days.
9
+ 6) score=79 (https://example.org/odrl-mitigation-demo#Medium), clause D3 — Non-refundable fees. This clause is risky because it declares fees non-refundable, conflicting with a refund/cooling-off expectation (>= 14 days). Clause D3: All fees are non-refundable.
10
+ 7) score=73 (https://example.org/odrl-mitigation-demo#Medium), clause D2 — Liability cap too low. This clause is risky because the liability cap (20 EUR) is below the consumer minimum (200 EUR). Clause D2: Your subscription renews automatically unless you cancel.
10
11
 
11
- --- Suggested mitigations (highest risk first) ---
12
- 1) clause D6 — Provider can delete user data (score=100). Suggested fix: remove provider discretion to delete data; allow deletion only on consumer request or legal obligation.
13
- 2) clause D5 — No data export / portability (score=93). Suggested fix: add a permission to export/download user data (data portability).
14
- 3) clause D4 — Tracking without opt-in (score=89). Suggested fix: require opt-in consent for tracking (optInConsent=true).
15
- 4) clause D2 — Auto-renewal without reminder (score=85). Suggested fix: add a reminder duty for auto-renewal with reminderDays >= 7.
16
- 5) clause D1 — Notice period too short (score=85). Suggested fix: ensure prior-notice duty specifies noticeDays >= 14.
17
- 6) clause D3 — Non-refundable fees (score=79). Suggested fix: allow refunds (e.g., refundAllowed=true) or define a cooling-off period >= 14 days.
18
- 7) clause D2 — Liability cap too low (score=73). Suggested fix: raise liabilityCapEuro so it is >= 200 EUR (or remove the cap where inappropriate).
12
+ --- Suggested mitigations (highest risk first) ---
13
+ 1) clause D6 — Provider can delete user data (score=100). Suggested fix: remove provider discretion to delete data; allow deletion only on consumer request or legal obligation.
14
+ 2) clause D5 — No data export / portability (score=93). Suggested fix: add a permission to export/download user data (data portability).
15
+ 3) clause D4 — Tracking without opt-in (score=89). Suggested fix: require opt-in consent for tracking (optInConsent=true).
16
+ 4) clause D2 — Auto-renewal without reminder (score=85). Suggested fix: add a reminder duty for auto-renewal with reminderDays >= 7.
17
+ 5) clause D1 — Notice period too short (score=85). Suggested fix: ensure prior-notice duty specifies noticeDays >= 14.
18
+ 6) clause D3 — Non-refundable fees (score=79). Suggested fix: allow refunds (e.g., refundAllowed=true) or define a cooling-off period >= 14 days.
19
+ 7) clause D2 — Liability cap too low (score=73). Suggested fix: raise liabilityCapEuro so it is >= 200 EUR (or remove the cap where inappropriate).
@@ -1,6 +1,7 @@
1
+ # odrl-risk
1
2
 
2
- === Risk report for Example SaaS Agreement (profile: Alice (example consumer)) ===
3
- 1) score=100 (https://example.org/agreement#High), clause C2 — Provider can delete user data. This clause is risky because it allows the provider to remove (delete) the consumer’s data. Clause C2: We may delete your data at our discretion, with or without notice.
4
- 2) score=95 (https://example.org/agreement#High), clause C3 — Data sharing without consent. This clause is risky because it permits data sharing without an explicit consent requirement. Clause C3: We may share your data with partners for any purpose.
5
- 3) score=95 (https://example.org/agreement#High), clause C1 — Unilateral change without notice. This clause is risky because it allows unilateral changes without any prior notice. Clause C1: We may change these terms at any time. Continued use means acceptance.
6
- 4) score=60 (https://example.org/agreement#Medium), clause C4 — Court access waiver / mandatory arbitration. This clause is risky because it restricts access to court (mandatory arbitration / waiver). Clause C4: You waive your right to go to court; disputes must be arbitrated.
3
+ ## Risk report for Example SaaS Agreement (profile: Alice (example consumer))
4
+ 1) score=100 (https://example.org/agreement#High), clause C2 — Provider can delete user data. This clause is risky because it allows the provider to remove (delete) the consumer’s data. Clause C2: We may delete your data at our discretion, with or without notice.
5
+ 2) score=95 (https://example.org/agreement#High), clause C3 — Data sharing without consent. This clause is risky because it permits data sharing without an explicit consent requirement. Clause C3: We may share your data with partners for any purpose.
6
+ 3) score=95 (https://example.org/agreement#High), clause C1 — Unilateral change without notice. This clause is risky because it allows unilateral changes without any prior notice. Clause C1: We may change these terms at any time. Continued use means acceptance.
7
+ 4) score=60 (https://example.org/agreement#Medium), clause C4 — Court access waiver / mandatory arbitration. This clause is risky because it restricts access to court (mandatory arbitration / waiver). Clause C4: You waive your right to go to court; disputes must be arbitrated.
@@ -0,0 +1,22 @@
1
+ # parcellocker
2
+
3
+ ParcelLocker — One-time parcel pickup by a friend
4
+
5
+ Answer
6
+ PERMIT
7
+ Noah may collect Maya's parcel from locker B17.
8
+
9
+ Reason Why
10
+ Maya created a one-time authorization for Noah only, for this parcel only, at this locker only, and for pickup only. The token is active, the parcel is ready, and the same authorization does not reveal billing details or allow redirection.
11
+
12
+ Check
13
+ C1 OK - requester matches the named delegate
14
+ C2 OK - requested parcel matches the authorized parcel
15
+ C3 OK - requested locker matches the authorized locker
16
+ C4 OK - requested action is parcel collection
17
+ C5 OK - requested purpose is pickup only
18
+ C6 OK - authorization is active
19
+ C7 OK - authorization is single-use
20
+ C8 OK - parcel is ready for pickup
21
+ C9 OK - billing details stay hidden
22
+ C10 OK - parcel redirection is not allowed
@@ -0,0 +1,25 @@
1
+ # pn-junction-tunneling
2
+
3
+ ## Answer
4
+ In this toy PN-junction tunneling model, heavy doping narrows the depletion region enough for a tunneling window that rises to a peak and then falls, producing a negative-differential region.
5
+ case : pn-junction-tunneling
6
+ peak bias : 2
7
+ peak current proxy : 4
8
+ negative differential region : yes
9
+
10
+ ## Reason Why
11
+ We model tunneling current as an exact overlap count between filled N-side states and empty P-side states while forward bias shifts the bands. Heavy doping is represented by a much narrower depletion region.
12
+ ordinary depletion width (nm) : 8
13
+ tunnel depletion width (nm) : 1
14
+ filled N-side states : [1, 2, 3, 4]
15
+ empty P-side states at 0 bias : [3, 4, 5, 6]
16
+ bias -> overlap current proxy : 0->2, 1->3, 2->4, 3->3, 4->2, 5->1, 6->0
17
+ peak point : 2 -> 4
18
+ high-bias point : 6 -> 0
19
+
20
+ ## Check
21
+ heavily doped barrier is narrower : yes
22
+ peak occurs before overlap closes : yes
23
+ negative differential region present : yes
24
+ high-bias overlap closes : yes
25
+ peak equals full four-state overlap: yes
@@ -0,0 +1,23 @@
1
+ # queens
2
+
3
+ Solving 14-Queens...
4
+ Printing at most 1 solution(s).
5
+
6
+ Solution 1:
7
+ Q . . . . . . . . . . . . .
8
+ . . Q . . . . . . . . . . .
9
+ . . . . Q . . . . . . . . .
10
+ . . . . . . Q . . . . . . .
11
+ . . . . . . . . . . . Q . .
12
+ . . . . . . . . . Q . . . .
13
+ . . . . . . . . . . . . Q .
14
+ . . . Q . . . . . . . . . .
15
+ . . . . . . . . . . . . . Q
16
+ . . . . . . . . Q . . . . .
17
+ . Q . . . . . . . . . . . .
18
+ . . . . . Q . . . . . . . .
19
+ . . . . . . . Q . . . . . .
20
+ . . . . . . . . . . Q . . .
21
+ As column positions by row: [1, 3, 5, 7, 12, 10, 13, 4, 14, 9, 2, 6, 8, 11]
22
+
23
+ Total solutions for 14-Queens: 365596
@@ -1,9 +1,11 @@
1
- === Answer ===
2
- exact decay symbol : exp(-1/4)
3
- certified decay interval : [0.7788007830, 0.7788007831]
4
- first below tolerance step : 13
5
- first below tolerance time : 0.325 s
6
- upper voltage at step 13 : 0.930581 V
1
+ # rc-discharge-envelope
7
2
 
8
- === Explanation ===
9
- The physical decay factor is exp(-1/4), but the example uses a finite double interval as the certificate. Because the interval lies strictly between 0 and 1, the capacitor voltage envelope contracts each sample. The upper envelope is the safety-relevant bound: once it falls below 1.0 V, every compatible exact trajectory is below tolerance.
3
+ ## Answer
4
+ exact decay symbol : exp(-1/4)
5
+ certified decay interval : [0.7788007830, 0.7788007831]
6
+ first below tolerance step : 13
7
+ first below tolerance time : 0.325 s
8
+ upper voltage at step 13 : 0.930581 V
9
+
10
+ ## Explanation
11
+ The physical decay factor is exp(-1/4), but the example uses a finite double interval as the certificate. Because the interval lies strictly between 0 and 1, the capacitor voltage envelope contracts each sample. The upper envelope is the safety-relevant bound: once it falls below 1.0 V, every compatible exact trajectory is below tolerance.
@@ -0,0 +1,7 @@
1
+ # rdf-dataset
2
+
3
+ VERSION "1.2"
4
+
5
+ @prefix : <https://eyereasoner.github.io/eyeling/examples/rdf-dataset#> .
6
+
7
+ :workOrder :entails <<( :sensor :needs :inspection )>> .
@@ -0,0 +1,7 @@
1
+ # rdf-message-flow
2
+
3
+ ## Answer
4
+ Continuous RDF Message flow accepted: 5 ordered messages moved through the ingest → validate → interpret → route → sink pipeline. The threshold was 26, so results 21 and 22 were archived, the heartbeat kept the stream alive, and results 28 and 29 were emitted as alerts.
5
+
6
+ ## Explanation
7
+ The N3 source starts only :m001 at ingress. Each message must reach :sink before the continuous-flow rule releases its msg:nextMessage. Observation payloads are inspected with log:includes inside each message formula, while the empty heartbeat uses the same envelope and routing stages without a payload. This models messages flowing through a live stream while preserving message boundaries.
@@ -0,0 +1,7 @@
1
+ # rdf-messages
2
+
3
+ ## Answer
4
+ RDF Message log accepted: 3 explicit message boundaries are preserved. Message :m002 is an empty heartbeat, and the local blank-node label _:b0 is safely reused in separate messages.
5
+
6
+ ## Explanation
7
+ The N3 source models an RDF Message Log as an ordered sequence of RDF Messages. Each non-empty message has a formula-valued payload that is inspected with log:includes, so the observation data stays inside the message boundary instead of being treated as one global graph. The two temperature results, 22 and 23, are different observations from the same stream but are contextualized by their message boundaries.
@@ -1,20 +1,22 @@
1
- RESTdesc — Restaurant finder
1
+ # resto
2
2
 
3
- Answer
4
- A restaurant was found and reserved.
5
- Restaurant: Maximiliaan
6
- Date: 2026-04-08
7
- Seating: outside terrace
3
+ RESTdesc — Restaurant finder
8
4
 
9
- Reason Why
10
- The plan resolved the person's address, turned it into a map point, checked the local weather, selected a suitable restaurant, and then created a reservation. Because the weather came back mild and stable (22 C and 1016 mbar), the chosen seating stayed outdoors.
5
+ Answer
6
+ A restaurant was found and reserved.
7
+ Restaurant: Maximiliaan
8
+ Date: 2026-04-08
9
+ Seating: outside terrace
11
10
 
12
- Check
13
- C1 OK - the preferences service resolved the person's address.
14
- C2 OK - the location service turned the address into map coordinates.
15
- C3 OK - the weather services supplied temperature and pressure for that location.
16
- C4 OK - the weather interpretation justified outdoor seating.
17
- C5 OK - the recommendation step selected a restaurant that can accept reservations.
18
- C6 OK - the reservation preserved the requested dinner date.
19
- C7 OK - the reservation preserved the outdoor seating preference.
20
- C8 OK - the final goal pattern from the original RESTdesc query is satisfied.
11
+ Reason Why
12
+ The plan resolved the person's address, turned it into a map point, checked the local weather, selected a suitable restaurant, and then created a reservation. Because the weather came back mild and stable (22 C and 1016 mbar), the chosen seating stayed outdoors.
13
+
14
+ Check
15
+ C1 OK - the preferences service resolved the person's address.
16
+ C2 OK - the location service turned the address into map coordinates.
17
+ C3 OK - the weather services supplied temperature and pressure for that location.
18
+ C4 OK - the weather interpretation justified outdoor seating.
19
+ C5 OK - the recommendation step selected a restaurant that can accept reservations.
20
+ C6 OK - the reservation preserved the requested dinner date.
21
+ C7 OK - the reservation preserved the outdoor seating preference.
22
+ C8 OK - the final goal pattern from the original RESTdesc query is satisfied.
@@ -0,0 +1,11 @@
1
+ # school-placement-audit
2
+
3
+ ## Answer
4
+ audit result : fail
5
+ children affected by straight-line rule : Ada, Björn, Davi
6
+ largest hidden detour : Ada, 3000 m
7
+ recommended assignments : Ada -> Lindholmen; Björn -> Backa; Clara -> Haga; Davi -> Haga
8
+ explanation requested : yes
9
+
10
+ ## Explanation
11
+ The support-tool rule chooses the school with the smallest straight-line distance, using preference rank only as a tie-breaker. The independent audit recomputes each candidate with walking-route distance plus 600 m per preference step. Any provisional assignment that is not the audited best, or that requires more than 2500 m of walking, is flagged. Ada and Björn look close to Centrum on a map, but their walking routes cross barriers and exceed the walking limit; Davi is also better served by the first-preference Haga route. This illustrates why a decision-support label is not enough: route geometry, preferences, and audit records must be inspectable.
@@ -0,0 +1,7 @@
1
+ # smoke-arithmetic
2
+
3
+ ## Answer
4
+ product = 42
5
+
6
+ ## Explanation
7
+ The compiled rule multiplies :x and :y using math:product.
@@ -0,0 +1,15 @@
1
+ # sqrt2-cauchy
2
+
3
+ Approximation (at limit): sqrt2 ≈ 1.414213562373095
4
+ n=0 x=1.0 delta=seed err=1
5
+ n=1 x=1.5 delta=0.5 err=0.25
6
+ n=2 x=1.4166666666666665 delta=0.08333333333333348 err=0.006944444444444198
7
+ n=3 x=1.4142156862745097 delta=0.002450980392156854 err=0.000006007304882427178
8
+ n=4 x=1.4142135623746899 delta=0.0000021238998197947723 err=4.510614104447086e-12
9
+ n=5 x=1.414213562373095 delta=1.5949463971764999e-12 err=4.440892098500626e-16
10
+ n=6 x=1.414213562373095 delta=0 err=4.440892098500626e-16
11
+ n=7 x=1.414213562373095 delta=0 err=4.440892098500626e-16
12
+ n=8 x=1.414213562373095 delta=0 err=4.440892098500626e-16
13
+ n=9 x=1.414213562373095 delta=0 err=4.440892098500626e-16
14
+ n=10 x=1.414213562373095 delta=0 err=4.440892098500626e-16
15
+ Tail check: for i,j in (4..10), all |x_i - x_j| < 0.0001 (finite check)
@@ -0,0 +1,33 @@
1
+ # sqrt2-dedekind
2
+
3
+ q=-2 q^2=4 => LEFT (q<0 OR q^2<2)
4
+ q=-1 q^2=1 => LEFT (q<0 OR q^2<2)
5
+ q=-0.5 q^2=0.25 => LEFT (q<0 OR q^2<2)
6
+ q=-0.1 q^2=0.010000000000000002 => LEFT (q<0 OR q^2<2)
7
+ q=0 q^2=0 => LEFT (q<0 OR q^2<2)
8
+ q=0.5 q^2=0.25 => LEFT (q<0 OR q^2<2)
9
+ q=1 q^2=1 => LEFT (q<0 OR q^2<2)
10
+ q=1.3 q^2=1.6900000000000002 => LEFT (q<0 OR q^2<2)
11
+ q=1.4 q^2=1.9599999999999997 => LEFT (q<0 OR q^2<2)
12
+ q=1.41 q^2=1.9880999999999998 => LEFT (q<0 OR q^2<2)
13
+ q=1.414 q^2=1.9993959999999997 => LEFT (q<0 OR q^2<2)
14
+ q=1.4142 q^2=1.9999616399999998 => LEFT (q<0 OR q^2<2)
15
+ q=1.4143 q^2=2.0002444899999996 => RIGHT (q>=0 AND q^2>=2)
16
+ q=1.42 q^2=2.0164 => RIGHT (q>=0 AND q^2>=2)
17
+ q=1.5 q^2=2.25 => RIGHT (q>=0 AND q^2>=2)
18
+ q=2 q^2=4 => RIGHT (q>=0 AND q^2>=2)
19
+ successor: from -2 to -1 (s^2=1)
20
+ successor: from -1 to -0.5 (s^2=0.25)
21
+ successor: from -0.5 to -0.25 (s^2=0.0625)
22
+ successor: from -0.1 to -0.05 (s^2=0.0025000000000000005)
23
+ successor: from 0 to 1 (s^2=1)
24
+ successor: from 0.5 to 1.2 (s^2=1.44)
25
+ successor: from 1 to 1.3333333333333333 (s^2=1.7777777777777777)
26
+ successor: from 1.3 to 1.393939393939394 (s^2=1.9430670339761251)
27
+ successor: from 1.4 to 1.411764705882353 (s^2=1.9930795847750868)
28
+ successor: from 1.41 to 1.4134897360703813 (s^2=1.9979532339763162)
29
+ successor: from 1.414 to 1.4141769185705917 (s^2=1.9998963570178139)
30
+ successor: from 1.4142 to 1.4142112354285044 (s^2=1.9999934184122166)
31
+ Check: cut is proper on the sample (has LEFT and RIGHT witnesses)
32
+ Check: downward-closed on the sample (finite for-all test)
33
+ Check: no maximal element witnessed for all LEFT seed members (constructive successors)
@@ -1,43 +1,45 @@
1
- === Answer ===
2
- The puzzle is solved, and the completed grid is the unique valid Sudoku solution.
3
- case : sudoku
4
- default puzzle : classic
5
-
6
- Puzzle
7
- 1 . . | . . 7 | . 9 .
8
- . 3 . | . 2 . | . . 8
9
- . . 9 | 6 . . | 5 . .
10
-
11
- . . 5 | 3 . . | 9 . .
12
- . 1 . | . 8 . | . . 2
13
- 6 . . | . . 4 | . . .
14
-
15
- 3 . . | . . . | . 1 .
16
- . 4 . | . . . | . . 7
17
- . . 7 | . . . | 3 . .
18
-
19
- Completed grid
20
- 1 6 2 | 8 5 7 | 4 9 3
21
- 5 3 4 | 1 2 9 | 6 7 8
22
- 7 8 9 | 6 4 3 | 5 2 1
23
-
24
- 4 7 5 | 3 1 2 | 9 8 6
25
- 9 1 3 | 5 8 6 | 7 4 2
26
- 6 2 8 | 7 9 4 | 1 3 5
27
-
28
- 3 5 6 | 4 7 8 | 2 1 9
29
- 2 4 1 | 9 3 5 | 8 6 7
30
- 8 9 7 | 2 6 1 | 3 5 4
31
-
32
- === Reason Why ===
33
- The solver starts from 23 clues and fills the remaining 58 cells by combining constraint propagation with depth-first search. At each step it chooses the empty cell with the fewest legal digits, places forced singles immediately, and only guesses when more than one candidate remains. Across the search it made 213 forced placements and tried 22 guesses, visited 23 search nodes overall, and backtracked 12 times before reaching the completed grid. The solver also confirmed that the solution is unique. Early steps: r2c3=4: guess, r5c3=3: forced, r2c1=5: guess, r2c4=1: guess, r2c6=9: forced, r2c7=6: guess, r2c8=7: forced, r1c7=4: guess, … and 50 more placements
34
-
35
- === Check ===
36
- C1 OK - every given clue is preserved in the final grid.
37
- C2 OK - the final grid contains only digits 1 through 9, with no blanks left.
38
- C3 OK - each row contains every digit exactly once.
39
- C4 OK - each column contains every digit exactly once.
40
- C5 OK - each 3×3 box contains every digit exactly once.
41
- C6 OK - replaying the recorded placements from the original puzzle remains legal at every step.
42
- C7 OK - the search statistics and the successful proof path are internally consistent.
43
- C8 OK - a second search found no alternative solution, so the solution is unique.
1
+ # sudoku
2
+
3
+ ## Answer
4
+ The puzzle is solved, and the completed grid is the unique valid Sudoku solution.
5
+ case : sudoku
6
+ default puzzle : classic
7
+
8
+ Puzzle
9
+ 1 . . | . . 7 | . 9 .
10
+ . 3 . | . 2 . | . . 8
11
+ . . 9 | 6 . . | 5 . .
12
+
13
+ . . 5 | 3 . . | 9 . .
14
+ . 1 . | . 8 . | . . 2
15
+ 6 . . | . . 4 | . . .
16
+
17
+ 3 . . | . . . | . 1 .
18
+ . 4 . | . . . | . . 7
19
+ . . 7 | . . . | 3 . .
20
+
21
+ Completed grid
22
+ 1 6 2 | 8 5 7 | 4 9 3
23
+ 5 3 4 | 1 2 9 | 6 7 8
24
+ 7 8 9 | 6 4 3 | 5 2 1
25
+
26
+ 4 7 5 | 3 1 2 | 9 8 6
27
+ 9 1 3 | 5 8 6 | 7 4 2
28
+ 6 2 8 | 7 9 4 | 1 3 5
29
+
30
+ 3 5 6 | 4 7 8 | 2 1 9
31
+ 2 4 1 | 9 3 5 | 8 6 7
32
+ 8 9 7 | 2 6 1 | 3 5 4
33
+
34
+ ## Reason Why
35
+ The solver starts from 23 clues and fills the remaining 58 cells by combining constraint propagation with depth-first search. At each step it chooses the empty cell with the fewest legal digits, places forced singles immediately, and only guesses when more than one candidate remains. Across the search it made 213 forced placements and tried 22 guesses, visited 23 search nodes overall, and backtracked 12 times before reaching the completed grid. The solver also confirmed that the solution is unique. Early steps: r2c3=4: guess, r5c3=3: forced, r2c1=5: guess, r2c4=1: guess, r2c6=9: forced, r2c7=6: guess, r2c8=7: forced, r1c7=4: guess, … and 50 more placements
36
+
37
+ ## Check
38
+ C1 OK - every given clue is preserved in the final grid.
39
+ C2 OK - the final grid contains only digits 1 through 9, with no blanks left.
40
+ C3 OK - each row contains every digit exactly once.
41
+ C4 OK - each column contains every digit exactly once.
42
+ C5 OK - each 3×3 box contains every digit exactly once.
43
+ C6 OK - replaying the recorded placements from the original puzzle remains legal at every step.
44
+ C7 OK - the search statistics and the successful proof path are internally consistent.
45
+ C8 OK - a second search found no alternative solution, so the solution is unique.