Spaces:
Sleeping
UofA Weakener Detection Engine
Status: Standalone Java CLI for direct Jena invocation. Most users should use the
uofa rulesPython CLI wrapper, which loads this rules file and runs the same engine. Schema: UofA v0.5 (spec/context/v0.5.jsonld+spec/shapes/uofa_shacl.ttl) Engine: Apache Jena 5.3, GenericRuleReasoner, forward RETE mode Catalog: 23 patterns in v0.5.2 (21 Level-1 + 2 active Level-2; COMPOUND-02 commented out)
Architecture
βββββββββββββββββββββββββββββββββββ
β packs/vv40/examples/morrison/cou1/ β
β uofa-morrison-cou1.jsonld β
β (JSON-LD evidence package) β
ββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββ
β Jena JSON-LD Parser β
β + external @context resolve β
ββββββββββββ¬βββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RDF Data Graph β
β (UnitOfAssurance + CredibilityFactor + β
β ValidationResult + DecisionRecord + PROV) β
ββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GenericRuleReasoner (FORWARD RETE) β
β β
β Phase 1: Core weakener detection rules (21) β
β Epistemic (W-EP-*) Γ 4 β
β Aleatory (W-AL-*) Γ 2 β
β Ontological (W-ON-*) Γ 2 β
β Argument (W-AR-*) Γ 5 β
β Structural (W-SI-*) Γ 2 β
β Consistency (W-CON-*) Γ 5 β
β Provenance (W-PROV-*) Γ 1 β
β β
β Phase 2: Compound inference rules (chained) β
β COMPOUND-01: Risk escalation [active] β
β COMPOUND-02: Factor credibility [commented β
β erosion out, v0.6] β
β COMPOUND-03: Assurance override [active] β
β β
β Compound rules fire ON the output of Phase 1 β
β β This is what SPARQL cannot do β
ββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WeakenerAnnotation triples β
β (materialized in the deductions graph) β
β β
β + Compound annotations with escalationSource β
β and erosionCause provenance links β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
Quick Start
# Build
cd uofa-weakener-rules
mvn package -q
# Run against Morrison COU1
java -jar target/uofa-weakener-engine-0.1.0.jar \
../packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld \
--context ../spec/context/v0.5.jsonld
# Output deductions as Turtle
java -jar target/uofa-weakener-engine-0.1.0.jar \
../packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld \
--context ../spec/context/v0.5.jsonld \
--format turtle \
--output cou1-weakeners.ttl
# Trace rule execution (debug)
java -jar target/uofa-weakener-engine-0.1.0.jar \
../packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld \
--context ../spec/context/v0.5.jsonld \
--trace
Expected Output: Morrison COU1 (v0.5.2)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
UofA Weakener Detection Report
Input: uofa-morrison-cou1.jsonld
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
SUMMARY: 24 weakener(s) detected
βββββββββββββββββββββββββββββββββββββββββββββββββ
Critical: 6
High: 17
Medium: 1
β‘ COMPOUND-01 [Critical] β 5 hit(s)
β affected: cou1
β‘ COMPOUND-03 [High] β 1 hit(s)
β affected: cou1
β W-AL-01 [High] β 3 hit(s) β fires on ALL 3 validation results
β affected: hemolysis-comparison-cou1
β affected: mesh-convergence
β affected: piv-velocity-comparison
β W-AR-05 [High] β 3 hit(s)
β affected: mesh-convergence
β affected: hemolysis-comparison-cou1
β affected: piv-velocity-comparison
β W-CON-01 [High] β 6 hit(s)
β affected: numerical-solver-error
β affected: test-samples
β affected: model-inputs
β affected: model-form
β affected: use-error
β affected: equivalency-of-input-parameters
β W-CON-04 [Medium] β 1 hit(s)
β affected: cou1
β W-EP-01 [Critical] β 1 hit(s)
β affected: cou1-hemolysis-adequacy
β W-EP-02 [High] β 3 hit(s)
β affected: mesh-convergence
β affected: hemolysis-comparison-cou1
β affected: piv-velocity-comparison
β W-ON-02 [High] β 1 hit(s)
β affected: cou1-cpb
βββββββββββββββββββββββββββββββββββββββββββββββββ
β‘ 6 compound inference(s) β these require
chained rule reasoning and cannot be detected
by standalone SPARQL queries.
Expected COU1 vs COU2 Divergence (NAFEMS Demo Point, v0.5.2)
| Pattern | COU1 | COU2 | Why different |
|---|---|---|---|
| W-EP-01 | Fires 1Γ | Does NOT fire | COU2 has full provenance chain |
| W-EP-02 | Fires 3Γ | Does NOT fire | COU2 has generation activities |
| W-EP-04 | Does NOT fire | Fires 6Γ | COU2 has 6 unassessed factors at MRL 5 > 2 |
| W-AL-01 | Fires 3Γ | Does NOT fire | COU2 has Monte Carlo UQ |
| W-AL-02 | Does NOT fire | Fires 1Γ | COU2 reports UQ but no sensitivity analysis |
| W-AR-05 | Fires 3Γ | Does NOT fire | COU2 has comparator linkages |
| W-CON-01 | Fires 6Γ | Does NOT fire | COU2 is Not Accepted β rule gates on Accepted |
| W-CON-04 | Fires 1Γ | Fires 1Γ | Both COUs lack linked sensitivity analysis (structural gap) |
| W-ON-02 | Fires 1Γ | Fires 1Γ | Both COUs lack applicability + operating-envelope metadata |
| W-PROV-01 | Does NOT fire | Fires 7Γ | COU2 has 7 provenance-chain orphans β W-EP-01 already catches COU1's direct-orphan case |
| COMPOUND-01 | Fires 5Γ | Fires 2Γ | Both have Critical + High coexisting; v0.5.2 exposes 2 new cascades on COU2 via W-PROV-01 Criticals |
| COMPOUND-03 | Fires 1Γ | Does NOT fire | COU2 assurance level is already Low |
The v0.5.2 cross-COU divergence: Same model, same data, same rules β COU1 (MRL 2, Accepted) has 24 weakeners dominated by W-CON-01 (6Γ under the Accepted gate) and a W-EP-01 orphan claim that cascades into 5 COMPOUND-01 firings. COU2 (MRL 5, Not Accepted) has 18 weakeners dominated by W-PROV-01 (7Γ) on unresolved provenance roots plus W-EP-04 (6Γ) on unassessed factors at elevated model risk. Nine patterns diverge between the two COUs. Morrison only assessed 7 of 13 factors β the gap is invisible in the prose paper but machine-visible in the UofA.
NAFEMS Demo Script (90 seconds, v0.5.2)
- Show: Morrison COU1 JSON-LD (the evidence package β 13 factors, 7 assessed)
- Run:
uofa rules packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld --build - Show: Summary output β 24 weakeners across 9 patterns on COU1 (7 Level-1 + 2 compound), W-EP-04 does NOT fire at MRL 2
- Run:
uofa rules packs/vv40/examples/morrison/cou2/uofa-morrison-cou2.jsonld --build - Show: 18 weakeners across 6 patterns on COU2 β W-PROV-01 dominates (7Γ provenance-chain orphans), W-EP-04 fires 6Γ on unassessed factors at MRL 5, and 2 COMPOUND-01 cascades fire where W-PROV-01 Criticals coexist with High weakeners on
cou2 - Run:
uofa diff packs/vv40/examples/morrison/cou1/...jsonld packs/vv40/examples/morrison/cou2/...jsonld - Key line: "Morrison only assessed 7 of 13 factors. At MRL 2 the gap manifests as W-CON-01 missing-level assertions under the Accepted decision. At MRL 5 the same gap fires 6 epistemic weakeners plus 7 provenance-chain orphans. Same data, same rules β risk context drives the divergence. And the compound rules catch interactions no SPARQL query can see, including 2 new cascades on COU2 that the v0.5.2 single-engine refactor unblocked."
IP Boundary
| Layer | Open | Proprietary |
|---|---|---|
| Pattern taxonomy (names, IDs, categories) | β | |
| Pattern descriptions & V&V 40 mapping | β | |
| SPARQL reference queries (basic detection) | β | |
| Jena rule implementations | β | |
| Compound inference rules | β | |
| Domain-specific rule extensions | β | |
| Severity calibration logic | β |
File Structure
uofa-weakener-rules/
βββ pom.xml # Maven build (Jena 5.3 + picocli)
βββ src/
β βββ main/
β βββ java/net/uofa/
β β βββ WeakenerEngine.java # CLI entry point
β β βββ OOSSubstrateTest.java # OOS substrate validation entry point
β βββ resources/
β βββ uofa_weakener.rules # β THE IP ARTIFACT
βββ README.md