Spaces:
Sleeping
Sleeping
| # UofA Weakener Detection Engine | |
| > **Status:** Standalone Java CLI for direct Jena invocation. Most users should use the `uofa rules` Python 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 | |
| ```bash | |
| # 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) | |
| 1. **Show:** Morrison COU1 JSON-LD (the evidence package β 13 factors, 7 assessed) | |
| 2. **Run:** `uofa rules packs/vv40/examples/morrison/cou1/uofa-morrison-cou1.jsonld --build` | |
| 3. **Show:** Summary output β 24 weakeners across 9 patterns on COU1 (7 Level-1 + 2 compound), W-EP-04 does NOT fire at MRL 2 | |
| 4. **Run:** `uofa rules packs/vv40/examples/morrison/cou2/uofa-morrison-cou2.jsonld --build` | |
| 5. **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` | |
| 6. **Run:** `uofa diff packs/vv40/examples/morrison/cou1/...jsonld packs/vv40/examples/morrison/cou2/...jsonld` | |
| 7. **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 | |
| ``` | |